diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index 0ed5413..e0068e2 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -2216,22 +2216,22 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) duk_peval_string_noresult(ctx, "addModule('child-container', Buffer.from('LyoNCkNvcHlyaWdodCAyMDIwIEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQoNCmZ1bmN0aW9uIGNoaWxkQ29udGFpbmVyKCkNCnsNCiAgICB0aGlzLl9PYmplY3RJRCA9ICdjaGlsZC1jb250YWluZXInOw0KICAgIHRoaXMuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKG9wdGlvbnMpDQogICAgew0KICAgICAgICBpZiAoIW9wdGlvbnMgfHwgKCFvcHRpb25zLnVzZXIgJiYgIW9wdGlvbnMudWlkKSB8fCAhb3B0aW9ucy5sYXVuY2ggfHwgIW9wdGlvbnMubGF1bmNoLm1vZHVsZSB8fCAhb3B0aW9ucy5sYXVuY2gubWV0aG9kIHx8ICFvcHRpb25zLmxhdW5jaC5hcmdzKSB7IHRocm93ICgnSW52YWxpZCBQYXJhbWV0ZXJzJyk7IH0NCg0KICAgICAgICB2YXIgaXBjSW50ZWdlcjsNCg0KICAgICAgICB2YXIgcmV0ID0geyBvcHRpb25zOiBvcHRpb25zIH07DQogICAgICAgIHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlci5jYWxsKHJldCwgdHJ1ZSkNCiAgICAgICAgICAgIC5jcmVhdGVFdmVudCgncmVhZHknKQ0KICAgICAgICAgICAgLmNyZWF0ZUV2ZW50KCdtZXNzYWdlJykNCiAgICAgICAgICAgIC5jcmVhdGVFdmVudCgnZXhpdCcpDQogICAgICAgICAgICAuYWRkTWV0aG9kKCdkaXNjb25uZWN0JywgZnVuY3Rpb24gKCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRGlzY29ubmVjdCBjaGlsZCA9PicpOw0KICAgICAgICAgICAgICAgIHRoaXMuX2NsaWVudC5lbmQoKTsNCiAgICAgICAgICAgIH0pDQogICAgICAgICAgICAuYWRkTWV0aG9kKCdtZXNzYWdlJywgZnVuY3Rpb24gKG1zZykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0aGlzLnNlbmQoeyBjb21tYW5kOiAnbWVzc2FnZScsIHZhbHVlOiBtc2cgfSk7DQogICAgICAgICAgICB9KQ0KICAgICAgICAgICAgLmFkZE1ldGhvZCgnZXhpdCcsIGZ1bmN0aW9uIChjb2RlKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHRoaXMuc2VuZCh7IGNvbW1hbmQ6ICdleGl0JywgdmFsdWU6IGNvZGUgfSk7DQogICAgICAgICAgICB9KQ0KICAgICAgICAgICAgLmFkZE1ldGhvZCgnc2VuZCcsIGZ1bmN0aW9uIChvYmopDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9jbGllbnQpIHsgdGhyb3cgKCdOb3QgQ29ubmVjdGVkJyk7IH0NCiAgICAgICAgICAgICAgICB2YXIgZCwgaCA9IEJ1ZmZlci5hbGxvYyg0KTsNCg0KICAgICAgICAgICAgICAgIGQgPSBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShvYmopKTsNCiAgICAgICAgICAgICAgICBoLndyaXRlVUludDMyTEUoZC5sZW5ndGggKyA0KTsNCiAgICAgICAgICAgICAgICB0aGlzLl9jbGllbnQud3JpdGUoaCk7DQogICAgICAgICAgICAgICAgdGhpcy5fY2xpZW50LndyaXRlKGQpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXQsICJkZXNjcmlwdG9yTWV0YWRhdGEiLCB7DQogICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jbGllbnQpIHsgdGhpcy5fY2xpZW50LmRlc2NyaXB0b3JNZXRhZGF0YSA9IHY7IH0NCiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcHJvYykgeyB0aGlzLl9wcm9jLmRlc2NyaXB0b3JNZXRhZGF0YSA9IHY7IH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIHJldC5faXBjID0gcmVxdWlyZSgnbmV0JykuY3JlYXRlU2VydmVyKCk7IHJldC5faXBjLnBhcmVudCA9IHJldDsgICAgICAgDQogICAgICAgIHJldC5faXBjLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHsgdGhpcy5wYXJlbnQuZW1pdCgnZXhpdCcpOyB9KTsNCg0KICAgICAgICB3aGlsZSAodHJ1ZSkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKG9wdGlvbnMuX2RlYnVnSVBDICYmIG9wdGlvbnMuX2lwY0ludGVnZXIgIT0gbnVsbCkNCiAgICAgICAgICAgIHsgaXBjSW50ZWdlciA9IG9wdGlvbnMuX2lwY0ludGVnZXI7IH0NCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpcGNJbnRlZ2VyID0gcmVxdWlyZSgndGxzJykuZ2VuZXJhdGVSYW5kb21JbnRlZ2VyKCcxMDAwJywgJzk5OTknKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldC5faXBjUGF0aCA9ICdcXFxcLlxccGlwZVxcdGFza1JlZGlyZWN0aW9uLScgKyBpcGNJbnRlZ2VyOw0KDQogICAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICByZXQuX2lwYy5saXN0ZW4oeyBwYXRoOiByZXQuX2lwY1BhdGgsIHdyaXRhYmxlQWxsOiB0cnVlIH0pOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgY2F0Y2ggKHgpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYob3B0aW9ucy5faXBjSW50ZWdlciAhPSBudWxsKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0RlYnVnRXJyb3I6IFVuYWJsZSB0byBiaW5kIHRvIElQQyBjaGFubmVsOiAnICsgaXBjSW50ZWdlcik7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiAocmV0KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgdmFyIHNjcmlwdCA9IEJ1ZmZlci5mcm9tKCJjb25zb2xlLmxvZygnQ0hJTEQvU1RBUlQnKTtyZXF1aXJlKCdjaGlsZC1jb250YWluZXInKS5jb25uZWN0KCciICsgaXBjSW50ZWdlciArICInKTsiKS50b1N0cmluZygnYmFzZTY0Jyk7DQogICAgICAgIHJldC5faXBjLm9uY2UoJ2Nvbm5lY3Rpb24nLCBmdW5jdGlvbiBvbkNvbm5lY3QocykNCiAgICAgICAgew0KICAgICAgICAgICAgdGhpcy5jbG9zZSgpOw0KICAgICAgICAgICAgcy5kZXNjcmlwdG9yTWV0YWRhdGEgPSAnY2hpbGQtY29udGFpbmVyJzsNCiAgICAgICAgICAgIHRoaXMucGFyZW50Ll9jbGllbnQgPSBzOw0KICAgICAgICAgICAgdGhpcy5wYXJlbnQuX2NsaWVudC5fcGFyZW50ID0gdGhpczsNCiAgICAgICAgICAgIHZhciBkYXRhOw0KICAgICAgICAgICAgZm9yICh2YXIgbSBpbiB0aGlzLnBhcmVudC5vcHRpb25zLm1vZHVsZXMpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgZGF0YSA9IHsgY29tbWFuZDogJ2FkZE1vZHVsZScsIHZhbHVlOiB7IG5hbWU6IHRoaXMucGFyZW50Lm9wdGlvbnMubW9kdWxlc1ttXS5uYW1lLCBqczogdGhpcy5wYXJlbnQub3B0aW9ucy5tb2R1bGVzW21dLnNjcmlwdCB9IH07DQogICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuc2VuZChkYXRhKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgZGF0YSA9IHsgY29tbWFuZDogJ2xhdW5jaCcsIHZhbHVlOiB7IG1vZHVsZTogdGhpcy5wYXJlbnQub3B0aW9ucy5sYXVuY2gubW9kdWxlLCBtZXRob2Q6IHRoaXMucGFyZW50Lm9wdGlvbnMubGF1bmNoLm1ldGhvZCwgYXJnczogdGhpcy5wYXJlbnQub3B0aW9ucy5sYXVuY2guYXJncyB9IH07DQogICAgICAgICAgICB0aGlzLnBhcmVudC5zZW5kKGRhdGEpOw0KICAgICAgICAgICAgcy5vbignZGF0YScsIGZ1bmN0aW9uIChjKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhciBjTGVuOw0KICAgICAgICAgICAgICAgIGlmIChjLmxlbmd0aCA8IDQgfHwgKGNMZW4gPSBjLnJlYWRVSW50MzJMRSgwKSkgPiBjLmxlbmd0aCkgeyB0aGlzLnVuc2hpZnQoYyk7IHJldHVybjsgfQ0KICAgICAgICAgICAgICAgIHZhciBjbWQgPSBKU09OLnBhcnNlKGMuc2xpY2UoNCwgY0xlbikudG9TdHJpbmcoKSk7DQogICAgICAgICAgICAgICAgc3dpdGNoIChjbWQuY29tbWFuZCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgJ21lc3NhZ2UnOg0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGFyZW50LnBhcmVudC5lbWl0KCdtZXNzYWdlJywgY21kLnZhbHVlKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGlmIChjTGVuIDwgYy5sZW5ndGgpIHsgdGhpcy51bnNoaWZ0KGMuc2xpY2UoY0xlbikpOyB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIHRoaXMucGFyZW50LmVtaXQoJ3JlYWR5Jyk7DQogICAgICAgIH0pOw0KDQogICAgICAgIGlmIChvcHRpb25zLl9kZWJ1Z0lQQykNCiAgICAgICAgew0KICAgICAgICAgICAgY29uc29sZS5sb2coJy1iNjRleGVjICcgKyBzY3JpcHQpOw0KICAgICAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gU3Bhd24gdGhlIGNoaWxkDQogICAgICAgIGlmKG9wdGlvbnMudXNlciAmJiBwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpDQogICAgICAgIHsNCiAgICAgICAgICAgIC8vIFVzZSBUYXNrIFNjaGVkdWxlcg0KICAgICAgICAgICAgdmFyIHBhcm1zID0gJy9DIFNDSFRBU0tTIC9DUkVBVEUgL0YgL1ROIE1lc2hVc2VyVGFzayAvU0MgT05DRSAvU1QgMDA6MDAgJzsNCiAgICAgICAgICAgIHBhcm1zICs9ICgnL1JVICcgKyBvcHRpb25zLnVzZXIgKyAnICcpOw0KICAgICAgICAgICAgcGFybXMgKz0gKCcvVFIgIlxcIicgKyBwcm9jZXNzLmV4ZWNQYXRoICsgJ1xcIiAtYjY0ZXhlYyAnICsgc2NyaXB0ICsgJyInKTsNCg0KICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHByb2Nlc3MuZW52Wyd3aW5kaXInXSArICdcXHN5c3RlbTMyXFxjbWQuZXhlJywgW3Bhcm1zXSk7DQogICAgICAgICAgICBjaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB9KTsNCiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IH0pOw0KICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCg0KICAgICAgICAgICAgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUocHJvY2Vzcy5lbnZbJ3dpbmRpciddICsgJ1xcc3lzdGVtMzJcXGNtZC5leGUnLCBbJ2NtZCddKTsNCiAgICAgICAgICAgIGNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IH0pOw0KICAgICAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgfSk7DQogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgnU0NIVEFTS1MgL1JVTiAvVE4gTWVzaFVzZXJUYXNrXHJcbicpOw0KICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoJ1NDSFRBU0tTIC9ERUxFVEUgL0YgL1ROIE1lc2hVc2VyVGFza1xyXG5leGl0XHJcbicpOw0KICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIHZhciBjaGlsZF9vcHRpb25zID0ge307DQogICAgICAgICAgICBpZihvcHRpb25zLnVpZCAhPSBudWxsKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhciB0c2lkOw0KICAgICAgICAgICAgICAgIGlmICgodHNpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5nZXRQcm9jZXNzT3duZXJOYW1lKHByb2Nlc3MucGlkKS50c2lkKSA9PSAwKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgLy8gV2UgYXJlIHJ1bm5pbmcgYXMgTG9jYWxTeXN0ZW0NCiAgICAgICAgICAgICAgICAgICAgY2hpbGRfb3B0aW9ucy51aWQgPSBvcHRpb25zLnVpZDsNCiAgICAgICAgICAgICAgICAgICAgY2hpbGRfb3B0aW9ucy50eXBlID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLlNwYXduVHlwZXMuVVNFUjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgLy8gV2Ugd29uJ3QgYmUgYWJsZSB0byBzd2l0Y2ggc2Vzc2lvbiBJRHMsIHNvIGNoZWNrIHRvIG1ha2Ugc3VyZSB3ZSBhcmUgcnVubmluZyBhcyB0aGlzIHNpZA0KICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zaWQgIT0gdHNpZCkgeyB0aHJvdyAoJ0luc3VmZmljaWVudCBwZXJtaXNzaW9uIHRvIHJ1biBhcyB0aGlzIHVzZXInKTsgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldC5fcHJvYyA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShwcm9jZXNzLmV4ZWNQYXRoLCBbcHJvY2Vzcy5leGVjUGF0aC5zcGxpdChwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicgPyAnXFwnIDogJy8nKS5wb3AoKSwgJy1iNjRleGVjJywgc2NyaXB0XSwgY2hpbGRfb3B0aW9ucyk7DQogICAgICAgICAgICByZXQuX3Byb2MuZGVzY3JpcHRvck1ldGFkYXRhID0gImNoaWxkLWNvbnRhaW5lciI7DQogICAgICAgICAgICByZXQuX3Byb2MucGFyZW50ID0gcmV0Ow0KICAgICAgICAgICAgcmV0Ll9wcm9jLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IH0pOw0KICAgICAgICAgICAgcmV0Ll9wcm9jLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IH0pOw0KICAgICAgICAgICAgcmV0Ll9wcm9jLm9uKCdleGl0JywgZnVuY3Rpb24gKGNvZGUpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuZW1pdCgnZXhpdCcsIGNvZGUpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgIH0NCiAgICB0aGlzLmNvbm5lY3QgPSBmdW5jdGlvbiAoaXBjTnVtYmVyKQ0KICAgIHsNCiAgICAgICAgdmFyIGlwY1BhdGggPSAnXFxcXC5cXHBpcGVcXHRhc2tSZWRpcmVjdGlvbi0nICsgaXBjTnVtYmVyOw0KICAgICAgICB0aGlzLl9pcGNDbGllbnQgPSByZXF1aXJlKCduZXQnKS5jcmVhdGVDb25uZWN0aW9uKHsgcGF0aDogaXBjUGF0aCB9KTsNCiAgICAgICAgdGhpcy5faXBjQ2xpZW50Ll9wYXJlbnQgPSB0aGlzOw0KICAgICAgICByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXIuY2FsbCh0aGlzLCB0cnVlKQ0KICAgICAgICAgICAgLmNyZWF0ZUV2ZW50KCdtZXNzYWdlJykNCiAgICAgICAgICAgIC5jcmVhdGVFdmVudCgnZXhpdCcpDQogICAgICAgICAgICAuYWRkTWV0aG9kKCdtZXNzYWdlJywgZnVuY3Rpb24gKG1zZykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0aGlzLnNlbmQoeyBjb21tYW5kOiAnbWVzc2FnZScsIHZhbHVlOiBtc2cgfSk7DQogICAgICAgICAgICB9KQ0KICAgICAgICAgICAgLmFkZE1ldGhvZCgnc2VuZCcsIGZ1bmN0aW9uIChkYXRhKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGlmICghdGhpcy5faXBjQ2xpZW50KSB7IHRocm93ICgnTm90IENvbm5lY3RlZCcpOyB9DQogICAgICAgICAgICAgICAgdmFyIGQsIGggPSBCdWZmZXIuYWxsb2MoNCk7DQoNCiAgICAgICAgICAgICAgICBkID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoZGF0YSkpOw0KICAgICAgICAgICAgICAgIGgud3JpdGVVSW50MzJMRShkLmxlbmd0aCArIDQpOw0KICAgICAgICAgICAgICAgIHRoaXMuX2lwY0NsaWVudC53cml0ZShoKTsNCiAgICAgICAgICAgICAgICB0aGlzLl9pcGNDbGllbnQud3JpdGUoZCk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdjaGlsZCcsIHsgdmFsdWU6IHRydWUgfSk7DQogICAgICAgIHRoaXMuX2lwY0NsaWVudC5vbignY29ubmVjdCcsIGZ1bmN0aW9uICgpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRoaXMub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkgeyBwcm9jZXNzLl9leGl0KDApOyB9KTsNCiAgICAgICAgICAgIHRoaXMub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YXIgY0xlbjsNCiAgICAgICAgICAgICAgICBpZiAoYy5sZW5ndGggPCA0IHx8IChjTGVuID0gYy5yZWFkVUludDMyTEUoMCkpID4gYy5sZW5ndGgpIHsgdGhpcy51bnNoaWZ0KGMpOyByZXR1cm47IH0NCg0KICAgICAgICAgICAgICAgIHZhciBjbWQgPSBKU09OLnBhcnNlKGMuc2xpY2UoNCwgY0xlbikudG9TdHJpbmcoKSk7DQogICAgICAgICAgICAgICAgc3dpdGNoIChjbWQuY29tbWFuZCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgJ2FkZE1vZHVsZSc6DQogICAgICAgICAgICAgICAgICAgICAgICBhZGRNb2R1bGUoY21kLnZhbHVlLm5hbWUsIGNtZC52YWx1ZS5qcyk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbGF1bmNoJzoNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSByZXF1aXJlKGNtZC52YWx1ZS5tb2R1bGUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVzdWx0ID0gb2JqW2NtZC52YWx1ZS5tZXRob2RdLmFwcGx5KG9iaiwgY21kLnZhbHVlLmFyZ3MpOw0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbignZW5kJywgZnVuY3Rpb24gKCkgeyBwcm9jZXNzLmV4aXQoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWVzc2FnZSc6DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXJlbnQuZW1pdCgnbWVzc2FnZScsIGNtZC52YWx1ZSk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnX2Rpc2Nvbm5lY3QnOg0KICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0Rpc2Nvbm5lY3RpbmcuLi4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kKCk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZXhpdCc6DQogICAgICAgICAgICAgICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXJlbnQuZW1pdCgnZXhpdCcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVlKQ0KICAgICAgICAgICAgICAgICAgICAgICAgeyB9DQogICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLl9leGl0KDApOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgaWYgKGNMZW4gPCBjLmxlbmd0aCkgeyB0aGlzLnVuc2hpZnQoYy5zbGljZShjTGVuKSk7IH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICB9Ow0KfQ0KDQoNCm1vZHVsZS5leHBvcnRzID0gbmV3IGNoaWxkQ29udGFpbmVyKCk7', 'base64').toString());"); // message-box, refer to modules/message-box.js - char *_messagebox = ILibMemory_Allocate(89930, 0, NULL, NULL); - memcpy_s(_messagebox + 0, 51388, "LyoNCkNvcHlyaWdodCAyMDIwIEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQoNCmNvbnN0IE1CX09LICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDAwMDAwOw0KY29uc3QgTUJfT0tDQU5DRUwgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDE7DQpjb25zdCBNQl9BQk9SVFJFVFJZSUdOT1JFICAgICAgID0gMHgwMDAwMDAwMjsNCmNvbnN0IE1CX1lFU05PQ0FOQ0VMICAgICAgICAgICAgPSAweDAwMDAwMDAzOw0KY29uc3QgTUJfWUVTTk8gICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDQ7DQpjb25zdCBNQl9SRVRSWUNBTkNFTCAgICAgICAgICAgID0gMHgwMDAwMDAwNTsNCmNvbnN0IE1CX1RPUE1PU1QgICAgICAgICAgICAgICAgPSAweDAwMDQwMDAwOw0KY29uc3QgTUJfU0VURk9SRUdST1VORCAgICAgICAgICA9IDB4MDAwMTAwMDA7DQpjb25zdCBNQl9TWVNURU1NT0RBTCAgICAgICAgICAgID0gMHgwMDAwMTAwMDsNCg0KY29uc3QgTUJfREVGQlVUVE9OMSAgICAgICAgICAgICA9IDB4MDAwMDAwMDA7DQpjb25zdCBNQl9ERUZCVVRUT04yICAgICAgICAgICAgID0gMHgwMDAwMDEwMDsNCmNvbnN0IE1CX0RFRkJVVFRPTjMgICAgICAgICAgICAgPSAweDAwMDAwMjAwOw0KY29uc3QgTUJfSUNPTkhBTkQgICAgICAgICAgICAgICA9IDB4MDAwMDAwMTA7DQpjb25zdCBNQl9JQ09OUVVFU1RJT04gICAgICAgICAgID0gMHgwMDAwMDAyMDsNCmNvbnN0IE1CX0lDT05FWENMQU1BVElPTiAgICAgICAgPSAweDAwMDAwMDMwOw0KY29uc3QgTUJfSUNPTkFTVEVSSVNLICAgICAgICAgICA9IDB4MDAwMDAwNDA7DQoNCmNvbnN0IElET0sgICAgID0gMTsNCmNvbnN0IElEQ0FOQ0VMID0gMjsNCmNvbnN0IElEQUJPUlQgID0gMzsNCmNvbnN0IElEUkVUUlkgID0gNDsNCmNvbnN0IElESUdOT1JFID0gNTsNCmNvbnN0IElEWUVTICAgID0gNjsNCmNvbnN0IElETk8gICAgID0gNzsNCmNvbnN0IFdNX0NMT1NFID0gMHgwMDEwOw0KDQp2YXIgcHJvbWlzZSA9IHJlcXVpcmUoJ3Byb21pc2UnKTsNCg0KZnVuY3Rpb24gbWVzc2FnZUJveCgpDQp7DQogICAgdGhpcy5fT2JqZWN0SUQgPSAnbWVzc2FnZS1ib3gnOw0KICAgIHRoaXMuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHRpdGxlLCBjYXB0aW9uLCB0aW1lb3V0LCBsYXlvdXQsIHNpZCkNCiAgICB7DQogICAgICAgIHZhciByZXQgPSBuZXcgcHJvbWlzZShmdW5jdGlvbiAocmVzLCByZWopIHsgdGhpcy5fcmVzID0gcmVzOyB0aGlzLl9yZWogPSByZWo7IH0pOw0KICAgICAgICByZXQub3B0aW9ucyA9IHsgbGF1bmNoOiB7IG1vZHVsZTogJ21lc3NhZ2UtYm94JywgbWV0aG9kOiAnc2xhdmUnLCBhcmdzOiBbXSB9IH07DQogICAgICAgIHJldC50aXRsZSA9IHRpdGxlOw0KICAgICAgICByZXQuY2FwdGlvbiA9IGNhcHRpb247DQogICAgICAgIHJldC50aW1lb3V0ID0gdGltZW91dDsNCiAgICAgICAgcmV0LmxheW91dCA9IGxheW91dDsNCg0KICAgICAgICAvL3JldC5vcHRpb25zLl9kZWJ1Z0lQQyA9IHRydWU7DQogICAgICAgIC8vcmV0Lm9wdGlvbnMuX2lwY0ludGVnZXIgPSAxNTAwOw0KDQogICAgICAgIHRyeQ0KICAgICAgICB7DQogICAgICAgICAgICByZXQub3B0aW9ucy51aWQgPSBzaWQgPT0gbnVsbCA/IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCkgOiBzaWQ7DQogICAgICAgICAgICBpZiAocmV0Lm9wdGlvbnMudWlkID09IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5nZXRQcm9jZXNzT3duZXJOYW1lKHByb2Nlc3MucGlkKS50c2lkKSB7IGRlbGV0ZSByZXQub3B0aW9ucy51aWQ7IH0NCiAgICAgICAgfQ0KICAgICAgICBjYXRjaCAoZWUpDQogICAgICAgIHsNCiAgICAgICAgICAgIHJldC5fcmVqKCdObyBsb2dnZWQgb24gdXNlcnMnKTsNCiAgICAgICAgICAgIHJldHVybiAocmV0KTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldC5faXBjID0gcmVxdWlyZSgnY2hpbGQtY29udGFpbmVyJykuY3JlYXRlKHJldC5vcHRpb25zKTsNCiAgICAgICAgcmV0Ll9pcGMubWFzdGVyID0gcmV0Ow0KICAgICAgICByZXQuX2lwYy5vbigncmVhZHknLCBmdW5jdGlvbiAoKQ0KICAgICAgICB7DQogICAgICAgICAgICB0aGlzLmRlc2NyaXB0b3JNZXRhZGF0YSA9ICdtZXNzYWdlLWJveCc7DQogICAgICAgICAgICBpZiAodGhpcy5tYXN0ZXIudGltZW91dCAhPSBudWxsKSB7IHRoaXMubWFzdGVyLl90aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAobXN0cikgeyBtc3RyLl9pcGMuZXhpdCgpOyB9LCB0aGlzLm1hc3Rlci50aW1lb3V0ICogMTAwMCwgdGhpcy5tYXN0ZXIpOyB9DQogICAgICAgICAgICBpZiAodGhpcy5tYXN0ZXIubGF5b3V0ID09IG51bGwpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlKHsgY29tbWFuZDogJ1lFU05PJywgY2FwdGlvbjogdGhpcy5tYXN0ZXIuY2FwdGlvbiwgdGl0bGU6IHRoaXMubWFzdGVyLnRpdGxlIH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSh7IGNvbW1hbmQ6ICdBTEVSVCcsIGNhcHRpb246IHRoaXMubWFzdGVyLmNhcHRpb24sIHRpdGxlOiB0aGlzLm1hc3Rlci50aXRsZSB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIHJldC5faXBjLm9uKCdtZXNzYWdlJywgZnVuY3Rpb24gKG1zZykNCiAgICAgICAgew0KICAgICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgc3dpdGNoKG1zZy5jb21tYW5kKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAncmVzcG9uc2UnOg0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWFzdGVyLl90aW1lb3V0KSB7IGNsZWFyVGltZW91dCh0aGlzLm1hc3Rlci5fdGltZW91dCk7IHRoaXMubWFzdGVyLl90aW1lb3V0ID0gbnVsbDsgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1zZy5yZXNwb25zZSA9PSBJRFlFUyB8fCBtc2cucmVzcG9uc2UgPT0gSURPSykNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hc3Rlci5fcmVzKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXN0ZXIuX3Jlaihtc2cucmVzcG9uc2UpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBjYXRjaChmZikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIHJldC5faXBjLm9uKCdleGl0JywgZnVuY3Rpb24gKGMpIHsgdGhpcy5tYXN0ZXIuX3JlaignY2hpbGQgZXhpdGVkIHdpdGggY29kZTogJyArIGMpOyB9KTsNCiAgICAgICAgcmV0LmNsb3NlID0gZnVuY3Rpb24gY2xvc2UoKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXQuX2lwYy5leGl0KCk7DQogICAgICAgIH07DQogICAgICAgIHJldHVybiAocmV0KTsNCiAgICB9Ow0KICAgIHRoaXMuc2xhdmUgPSBmdW5jdGlvbigpDQogICAgew0KICAgICAgICB2YXIgbWFzdGVyID0gcmVxdWlyZSgnY2hpbGQtY29udGFpbmVyJyk7DQogICAgICAgIG1hc3Rlci5vbignbWVzc2FnZScsIGZ1bmN0aW9uIChtc2cpDQogICAgICAgIHsNCiAgICAgICAgICAgIHN3aXRjaChtc2cuY29tbWFuZCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBjYXNlICdZRVNOTyc6DQogICAgICAgICAgICAgICAgY2FzZSAnQUxFUlQnOg0KICAgICAgICAgICAgICAgICAgICB0aGlzLkdNID0gcmVxdWlyZSgnX0dlbmVyaWNNYXJzaGFsJyk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMudXNlcjMyID0gdGhpcy5HTS5DcmVhdGVOYXRpdmVQcm94eSgndXNlcjMyLmRsbCcpOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXIzMi5DcmVhdGVNZXRob2QoJ01lc3NhZ2VCb3hXJyk7DQoNCiAgICAgICAgICAgICAgICAgICAgbGF5b3V0ID0gbXNnLmNvbW1hbmQgPT0gJ1lFU05PJyA/IChNQl9ZRVNOTyB8IE1CX0RFRkJVVFRPTjIgfCBNQl9JQ09ORVhDTEFNQVRJT04gfCBNQl9UT1BNT1NUIHwgTUJfU1lTVEVNTU9EQUwpIDogKE1CX09LIHwgTUJfREVGQlVUVE9OMiB8IE1CX0lDT05FWENMQU1BVElPTiB8IE1CX1RPUE1PU1QgfCBNQl9TWVNURU1NT0RBTCk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMudXNlcjMyLk1lc3NhZ2VCb3hXLmFzeW5jKDAsIHRoaXMuR00uQ3JlYXRlVmFyaWFibGUobXNnLmNhcHRpb24sIHsgd2lkZTogdHJ1ZSB9KSwgdGhpcy5HTS5DcmVhdGVWYXJpYWJsZShtc2cudGl0bGUsIHsgd2lkZTogdHJ1ZSB9KSwgbGF5b3V0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHIpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2goci5WYWwpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSURPSzoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSURDQU5DRUw6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIElEQUJPUlQ6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIElEUkVUUlk6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIElESUdOT1JFOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJRFlFUzoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRoYXQubWVzc2FnZSh7Y29tbWFuZDogJ3Jlc3BvbnNlJywgcmVzcG9uc2U6IHIuVmFsfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhhdC5tZXNzYWdlKHtjb21tYW5kOiAncmVzcG9uc2UnLCByZXNwb25zZTogSUROT30pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoKGZmKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0KCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7IHByb2Nlc3MuZXhpdCgpOyB9KS5wYXJlbnRQcm9taXNlLnRoYXQgPSB0aGlzOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgfQ0KfQ0KDQoNCmZ1bmN0aW9uIGxpbnV4X21lc3NhZ2VCb3goKQ0Kew0KICAgIHRoaXMuX09iamVjdElEID0gJ21lc3NhZ2UtYm94JzsNCiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3plbml0eScsDQogICAgICAgIHsNCiAgICAgICAgICAgIHZhbHVlOiAoZnVuY3Rpb24gKCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJ3aGVyZWlzIHplbml0eSB8IGF3ayAneyBwcmludCAkMiB9J1xuZXhpdFxuIik7DQogICAgICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb24gPSBjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKTsNCiAgICAgICAgICAgICAgICBpZiAobG9jYXRpb24gPT0gJycgJiYgcmVxdWlyZSgnZnMnKS5leGlzdHNTeW5jKCcvdXNyL2xvY2FsL2Jpbi96ZW5pdHknKSkgeyBsb2NhdGlvbiA9ICcvdXNyL2xvY2FsL2Jpbi96ZW5pdHknOyB9DQogICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uID09ICcnKSB7IHJldHVybiAobnVsbCk7IH0NCg0KICAgICAgICAgICAgICAgIHZhciByZXQgPSB7IHBhdGg6IGxvY2F0aW9uLCB0aW1lb3V0OiBjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSA9PSAnJyA/IGZhbHNlIDogdHJ1ZSB9Ow0KICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXQsICJ0aW1lb3V0Iiwgew0KICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl90aW1lb3V0ID09IG51bGwpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVpZCwgeGluZm87DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aWQgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aW5mbyA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLmdldFhJbmZvKHVpZCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlkID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGluZm8gPSByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5nZXRYSW5mbygwKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhpbmZvID09IG51bGwpIHsgcmV0dXJuIChmYWxzZSk7IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10sIHsgdWlkOiB1aWQsIGVudjogeyBYQVVUSE9SSVRZOiB4aW5mby54YXV0aG9yaXR5ID8geGluZm8ueGF1dGhvcml0eSA6ICIiLCBESVNQTEFZOiB4aW5mby5kaXNwbGF5IH0gfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUobG9jYXRpb24gKyAnIC0taGVscC1hbGwgfCBncmVwIHRpbWVvdXRcbmV4aXRcbicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChlKSB7IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJfdGltZW91dCIsIHsgdmFsdWU6IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpID09ICcnID8gZmFsc2UgOiB0cnVlIH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy5fdGltZW91dCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLl90aW1lb3V0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJldCwgInZlcnNpb24iLCB7DQogICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ZlcnNpb24gPT0gbnVsbCkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdWlkLCB4aW5mbzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8odWlkKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aWQgPSAwOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aW5mbyA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLmdldFhJbmZvKDApOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeGluZm8gPT0gbnVsbCkgeyByZXR1cm4gKGZhbHNlKTsgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddLCB7IHVpZDogdWlkLCBlbnY6IHsgWEFVVEhPUklUWTogeGluZm8ueGF1dGhvcml0eSA/IHhpbmZvLnhhdXRob3JpdHkgOiAiIiwgRElTUExBWTogeGluZm8uZGlzcGxheSB9IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGVyci5zdHIgPSAnJzsgY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKGxvY2F0aW9uICsgJyAtLXZlcnNpb24gfCBhd2sgLUYuIFwneyBwcmludGYgIlslcywgJXNdXFxuIiwgJDEsICQyOyB9IFwnXG5leGl0XG4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQuc3RkZXJyLnN0ci5pbmNsdWRlcygnLUNSSVRJQ0FMICoqJykpIHsgb2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJicm9rZW4iLCB7IHZhbHVlOiB0cnVlIH0pOyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiX3ZlcnNpb24iLCB7dmFsdWU6IEpTT04ucGFyc2UoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkpfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy5fdmVyc2lvbik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJfdmVyc2lvbiIsIHsgdmFsdWU6IFsyLCAxNl0gfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy5fdmVyc2lvbik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy5fdmVyc2lvbik7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICByZXR1cm4gKHJldCk7DQogICAgICAgICAgICB9KSgpDQogICAgICAgIH0pOw0KICAgIGlmICghdGhpcy56ZW5pdHkpDQogICAgew0KICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2tkaWFsb2cnLA0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhbHVlOiAoZnVuY3Rpb24gKCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgICAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyBrZGlhbG9nIHwgYXdrICd7IHByaW50ICQyIH0nXG5leGl0XG4iKTsNCiAgICAgICAgICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSA9PSAnJyA/IG51bGwgOiB7IHBhdGg6IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpIH0pOw0KICAgICAgICAgICAgICAgIH0pKCkNCiAgICAgICAgICAgIH0pOw0KICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3htZXNzYWdlJywNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YWx1ZTogKGZ1bmN0aW9uICgpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAg", 16000); - memcpy_s(_messagebox + 16000, 35388, "ICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoIndoZXJlaXMgeG1lc3NhZ2UgfCBhd2sgJ3sgcHJpbnQgJDIgfSdcbmV4aXRcbiIpOw0KICAgICAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpID09ICcnID8gbnVsbCA6IHsgcGF0aDogY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkgfSk7DQogICAgICAgICAgICAgICAgfSkoKQ0KICAgICAgICAgICAgfSk7DQogICAgfQ0KDQogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdub3RpZnlzZW5kJywNCiAgICAgICAgew0KICAgICAgICAgICAgdmFsdWU6IChmdW5jdGlvbiAoKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoIndoZXJlaXMgbm90aWZ5LXNlbmQgfCBhd2sgJ3sgcHJpbnQgJDIgfSdcbmV4aXRcbiIpOw0KICAgICAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7DQogICAgICAgICAgICAgICAgcmV0dXJuIChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSA9PSAnJyA/IG51bGwgOiB7IHBhdGg6IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpIH0pOw0KICAgICAgICAgICAgfSkoKQ0KICAgICAgICB9KTsNCiAgICANCg0KICAgIHRoaXMuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHRpdGxlLCBjYXB0aW9uLCB0aW1lb3V0LCBsYXlvdXQpDQogICAgew0KICAgICAgICBpZiAodGltZW91dCA9PSBudWxsKSB7IHRpbWVvdXQgPSAxMDsgfQ0KICAgICAgICB2YXIgcmV0ID0gbmV3IHByb21pc2UoZnVuY3Rpb24gKHJlcywgcmVqKSB7IHRoaXMuX3JlcyA9IHJlczsgdGhpcy5fcmVqID0gcmVqOyB9KTsNCiAgICAgICAgdmFyIHVpZDsgICAgDQogICAgICAgIHZhciB4aW5mbzsNCiAgICAgICAgdmFyIG1pbiA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5taW5VaWQoKTsNCg0KICAgICAgICB0cnkNCiAgICAgICAgew0KICAgICAgICAgICAgdWlkID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmNvbnNvbGVVaWQoKTsNCiAgICAgICAgICAgIHhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8odWlkKTsNCiAgICAgICAgfQ0KICAgICAgICBjYXRjaChlKQ0KICAgICAgICB7DQogICAgICAgICAgICB1aWQgPSAwOw0KICAgICAgICAgICAgeGluZm8gPSByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5nZXRYSW5mbygwKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmICh4aW5mbyA9PSBudWxsIHx8ICh1aWQgIT0gMCAmJiB1aWQgPCBtaW4pKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXQuX3JlaignVGhpcyBzeXN0ZW0gY2Fubm90IGRpc3BsYXkgYSB1c2VyIGRpYWxvZyBib3ggd2hlbiBhIHVzZXIgaXMgbm90IGxvZ2dlZCBpbicpOw0KICAgICAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKHRoaXMuemVuaXR5KQ0KICAgICAgICB7DQogICAgICAgICAgICAvLyBHTk9NRS9aRU5JVFkNCiAgICAgICAgICAgIGlmICh0aGlzLnplbml0eS50aW1lb3V0KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHJldC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSh0aGlzLnplbml0eS5wYXRoLCBbJ3plbml0eScsIGxheW91dD09bnVsbD8nLS1xdWVzdGlvbic6Jy0td2FybmluZycsICctLXRpdGxlPScgKyB0aXRsZSwgJy0tdGV4dD0nICsgY2FwdGlvbiwgJy0tdGltZW91dD0nICsgdGltZW91dF0sIHsgdWlkOiB1aWQsIGVudjogeyBYQVVUSE9SSVRZOiB4aW5mby54YXV0aG9yaXR5ID8geGluZm8ueGF1dGhvcml0eSA6ICIiLCBESVNQTEFZOiB4aW5mby5kaXNwbGF5IH0gfSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcmV0LmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHRoaXMuemVuaXR5LnBhdGgsIFsnemVuaXR5JywgbGF5b3V0ID09IG51bGwgPyAnLS1xdWVzdGlvbicgOiAnLS13YXJuaW5nJywgJy0tdGl0bGU9JyArIHRpdGxlLCAnLS10ZXh0PScgKyBjYXB0aW9uXSwgeyB1aWQ6IHVpZCwgZW52OiB7IFhBVVRIT1JJVFk6IHhpbmZvLnhhdXRob3JpdHkgPyB4aW5mby54YXV0aG9yaXR5IDogIiIsIERJU1BMQVk6IHhpbmZvLmRpc3BsYXkgfSB9KTsNCiAgICAgICAgICAgICAgICByZXQuY2hpbGQudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKGMpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBjLnRpbWVvdXQgPSBudWxsOw0KICAgICAgICAgICAgICAgICAgICBjLnByb21pc2UuX3JlaigndGltZW91dCcpOw0KICAgICAgICAgICAgICAgICAgICBjLmtpbGwoKTsNCiAgICAgICAgICAgICAgICB9LCB0aW1lb3V0ICogMTAwMCwgcmV0LmNoaWxkKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldC5jaGlsZC5kZXNjcmlwdG9yTWV0YWRhdGEgPSAnemVuaXR5LCBtZXNzYWdlLWJveCcNCiAgICAgICAgICAgIHJldC5jaGlsZC5wcm9taXNlID0gcmV0Ow0KICAgICAgICAgICAgcmV0LmNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB9KTsNCiAgICAgICAgICAgIHJldC5jaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgfSk7DQogICAgICAgICAgICByZXQuY2hpbGQub24oJ2V4aXQnLCBmdW5jdGlvbiAoY29kZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZiAodGhpcy50aW1lb3V0KSB7IGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpOyB9DQogICAgICAgICAgICAgICAgc3dpdGNoIChjb2RlKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOg0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZXMoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBjYXNlIDE6DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaignZGVuaWVkJyk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKCd0aW1lb3V0Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmKHRoaXMua2RpYWxvZykNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gIT0gJ2ZyZWVic2QnICYmIHByb2Nlc3MuZW52WydESVNQTEFZJ10pDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcmV0LmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHRoaXMua2RpYWxvZy5wYXRoLCBbJ2tkaWFsb2cnLCAnLS10aXRsZScsIHRpdGxlLCBsYXlvdXQ9PW51bGw/Jy0teWVzbm8nOictLW1zZ2JveCcsIGNhcHRpb25dKTsNCiAgICAgICAgICAgICAgICByZXQuY2hpbGQucHJvbWlzZSA9IHJldDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YXIgeGRnID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmZpbmRFbnYodWlkLCAnWERHX1JVTlRJTUVfRElSJyk7IGlmICh4ZGcgPT0gbnVsbCkgeyB4ZGcgPSAnJzsgfQ0KICAgICAgICAgICAgICAgIGlmICgheGluZm8gfHwgIXhpbmZvLmRpc3BsYXkgfHwgIXhpbmZvLnhhdXRob3JpdHkpIHsgcmV0Ll9yZWooJ0ludGVyYWwgRXJyb3IsIGNvdWxkIG5vdCBkZXRlcm1pbmUgWDExL1hERyBlbnYnKTsgcmV0dXJuIChyZXQpOyB9DQogICAgICAgICAgICAgICAgcmV0LmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHRoaXMua2RpYWxvZy5wYXRoLCBbJ2tkaWFsb2cnLCAnLS10aXRsZScsIHRpdGxlLCBsYXlvdXQgPT0gbnVsbCA/ICctLXllc25vJyA6ICctLW1zZ2JveCcsIGNhcHRpb25dLCB7IHVpZDogdWlkLCBlbnY6IHsgRElTUExBWTogeGluZm8uZGlzcGxheSwgWEFVVEhPUklUWTogeGluZm8ueGF1dGhvcml0eSwgWERHX1JVTlRJTUVfRElSOiB4ZGcgfSB9KTsNCiAgICAgICAgICAgICAgICByZXQuY2hpbGQucHJvbWlzZSA9IHJldDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldC5jaGlsZC5kZXNjcmlwdG9yTWV0YWRhdGEgPSAna2RpYWxvZywgbWVzc2FnZS1ib3gnDQogICAgICAgICAgICByZXQuY2hpbGQudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKGMpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgYy50aW1lb3V0ID0gbnVsbDsNCiAgICAgICAgICAgICAgICBjLmtpbGwoKTsNCiAgICAgICAgICAgIH0sIHRpbWVvdXQgKiAxMDAwLCByZXQuY2hpbGQpOw0KICAgICAgICAgICAgcmV0LmNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB9KTsNCiAgICAgICAgICAgIHJldC5jaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgfSk7DQogICAgICAgICAgICByZXQuY2hpbGQub24oJ2V4aXQnLCBmdW5jdGlvbiAoY29kZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZiAodGhpcy50aW1lb3V0KQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7DQogICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY29kZSkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVzKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWooJ2RlbmllZCcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaigndGltZW91dCcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKCd0aW1lb3V0Jyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSBpZiAodGhpcy54bWVzc2FnZSkNCiAgICAgICAgew0KICAgICAgICAgICAgLy8gdGl0bGUsIGNhcHRpb24sIHRpbWVvdXQsIGxheW91dA0KICAgICAgICAgICAgcmV0LmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHRoaXMueG1lc3NhZ2UucGF0aCwgWyd4bWVzc2FnZScsICctY2VudGVyJywgJy1idXR0b25zJywgbGF5b3V0ID09IG51bGwgPyAnTm86MSxZZXM6MicgOiAnT0s6MicsICctdGltZW91dCcsIHRpbWVvdXQudG9TdHJpbmcoKSwgJy1kZWZhdWx0JywgbGF5b3V0PT1udWxsPydObyc6J09LJywgJy10aXRsZScsIHRpdGxlLCBjYXB0aW9uXSwgeyB1aWQ6IHVpZCwgZW52OiB7IFhBVVRIT1JJVFk6IHhpbmZvLnhhdXRob3JpdHkgPyB4aW5mby54YXV0aG9yaXR5IDogIiIsIERJU1BMQVk6IHhpbmZvLmRpc3BsYXkgfSB9KTsNCiAgICAgICAgICAgIHJldC5jaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyAgfSk7DQogICAgICAgICAgICByZXQuY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgIH0pOw0KICAgICAgICAgICAgcmV0LmNoaWxkLmRlc2NyaXB0b3JNZXRhZGF0YSA9ICd4bWVzc2FnZSwgbWVzc2FnZS1ib3gnDQogICAgICAgICAgICByZXQuY2hpbGQucHJvbWlzZSA9IHJldDsNCiAgICAgICAgICAgIHJldC5jaGlsZC5vbignZXhpdCcsIGZ1bmN0aW9uIChjb2RlKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHN3aXRjaChjb2RlKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOg0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZXMoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBjYXNlIDE6DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaignZGVuaWVkJyk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKCd0aW1lb3V0Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIHJldC5fcmVqKCdVbmFibGUgdG8gY3JlYXRlIGRpYWxvZyBib3gnKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldC5jbG9zZSA9IGZ1bmN0aW9uIGNsb3NlKCkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKHRoaXMudGltZW91dCkgeyBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTsgfQ0KICAgICAgICAgICAgaWYgKHRoaXMuY2hpbGQpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhpcy5fcmVqKCdkZW5pZWQnKTsNCiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkLmtpbGwoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfTsNCn0NCg0KaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2RhcndpbicpDQp7DQogICAgZnVuY3Rpb24gdHJhbnNsYXRlT2JqZWN0KG9iaikNCiAgICB7DQogICAgICAgIHZhciBqID0gSlNPTi5zdHJpbmdpZnkob2JqKTsNCiAgICAgICAgdmFyIGIgPSBCdWZmZXIuYWxsb2Moai5sZW5ndGggKyA0KTsNCiAgICAgICAgYi53cml0ZVVJbnQzMkxFKGoubGVuZ3RoICsgNCk7DQogICAgICAgIEJ1ZmZlci5mcm9tKGopLmNvcHkoYiwgNCk7DQogICAgICAgIHJldHVybiAoYik7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBtYWNvc19tZXNzYWdlQm94KCkNCnsNCiAgICB0aGlzLl9PYmplY3RJRCA9ICdtZXNzYWdlLWJveCc7DQogICAgdGhpcy5faW5pdElQQ0Jhc2UgPSBmdW5jdGlvbiBfaW5pdElQQ0Jhc2UoKQ0KICAgIHsNCiAgICAgICAgdmFyIHJldCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeyB0aGlzLl9yZXMgPSByZXM7IHRoaXMuX3JlaiA9IHJlajsgfSk7DQoNCiAgICAgICAgdHJ5DQogICAgICAgIHsNCiAgICAgICAgICAgIHJldC51aWQgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpOw0KICAgICAgICB9DQogICAgICAgIGNhdGNoIChlKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXQuX3JlaihlKTsNCiAgICAgICAgICAgIHJldHVybiAocmV0KTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldC5wYXRoID0gJy92YXIvdG1wLycgKyBwcm9jZXNzLmV4ZWNQYXRoLnNwbGl0KCcvJykucG9wKCkgKyAnX2V2JzsNCiAgICAgICAgdmFyIG47DQoNCiAgICAgICAgdHJ5DQogICAgICAgIHsNCiAgICAgICAgICAgIG4gPSByZXF1aXJlKCd0bHMnKS5nZW5lcmF0ZVJhbmRvbUludGVnZXIoJzEnLCAnOTk5OTknKTsNCiAgICAgICAgfQ0KICAgICAgICBjYXRjaCAoZSkNCiAgICAgICAgew0KICAgICAgICAgICAgbiA9IDA7DQogICAgICAgIH0NCiAgICAgICAgd2hpbGUgKHJlcXVpcmUoJ2ZzJykuZXhpc3RzU3luYyhyZXQucGF0aCArIG4pKQ0KICAgICAgICB7DQogICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgIG4gPSByZXF1aXJlKCd0bHMnKS5nZW5lcmF0ZVJhbmRvbUludGVnZXIoJzEnLCAnOTk5OTknKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGNhdGNoIChlKSB7DQogICAgICAgICAgICAgICAgKytuOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHJldC5wYXRoID0gcmV0LnBhdGggKyBuOw0KICAgICAgICByZXQudG1wU2VydmljZU5hbWUgPSAnbWVzaE5vdGlmaWNhdGlvblNlcnZlcicgKyBuOw0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfTsNCiAgICANCiAgICB0aGlzLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZSh0aXRsZSwgY2FwdGlvbiwgdGltZW91dCwgbGF5b3V0KQ0KICAgIHsNCiAgICAgICAgLy8gU3RhcnQgTG9jYWwgU2VydmVyDQogICAgICAgIHZhciByZXQgPSB0aGlzLl9pbml0SVBDQmFzZSgpOw0KICAgICAgICByZXQubWV0YWRhdGEgPSAnbWVzc2FnZS1ib3gvY3JlYXRlJw0KICAgICAgICByZXQudGl0bGUgPSB0aXRsZTsgcmV0LmNhcHRpb24gPSBjYXB0aW9uOyByZXQudGltZW91dCA9IHRpbWVvdXQ7DQogICAgICAgIGlmIChsYXlvdXQgPT0gbnVsbCkNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0LmxheW91dCA9IFsnWWVzJywgJ05vJ107DQogICAgICAgIH0NCiAgICAgICAgZWxzZSBpZih0eXBlb2YobGF5b3V0KSE9J29iamVjdCcpDQogICAgICAgIHsNCiAgICAgICAgICAgIHJldC5sYXlvdXQgPSBbJ09LJ107DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICByZXQubGF5b3V0ID0gbGF5b3V0Ow0KICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJldC5sYXlvdXQsICJ1c2VyIiwgeyB2YWx1ZTogdHJ1ZSB9KTsNCiAgICAgICAgfQ0KICAgICAgICByZXQuc2VydmVyID0gdGhpcy5zdGFydE1lc3NhZ2VTZXJ2ZXIocmV0KTsNCiAgICAgICAgcmV0LnNlcnZlci5yZXQgPSByZXQ7DQogICAgICAgIHJldC5zZXJ2ZXIub24oJ2Nvbm5lY3Rpb24nLCBmdW5jdGlvbiAoYykNCiAgICAgICAgew0KICAgICAgICAgICAgdGhpcy5fY29ubmVjdGlvbiA9IGM7DQogICAgICAgICAgICBjLnByb21pc2UgPSB0aGlzLnJldDsNCiAgICAgICAgICAgIGMub24oJ2RhdGEnLCBmdW5jdGlvbiAoYnVmZmVyKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGlmIChidWZmZXIubGVuIDwgNCB8fCBidWZmZXIucmVhZFVJbnQzMkxFKDApID4gYnVmZmVyLmxlbikgeyB0aGlzLnVuc2hpZnQoYnVmZmVyKTsgfQ0KICAgICAgICAgICAgICAgIHZhciBwID0gSlNPTi5wYXJzZShidWZmZXIuc2xpY2UoNCwgYnVmZmVyLnJlYWRVSW50MzJMRSgwKSkudG9TdHJpbmcoKSk7DQogICAgICAgICAgICAgICAgc3dpdGNoIChwLmNvbW1hbmQpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBjYXNlICdFUlJPUic6DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaihwLnJlYXNvbik7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnRElBTE9HJzoNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwLnRpbWVvdXQpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWooJ1RJTUVPVVQnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocC5idXR0b24gPT0gJ1llcycgfHwgcC5idXR0b24gPT0gJ09LJyB8fCB0aGlzLnByb21pc2UubGF5b3V0LnVzZXIpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlcyhwLmJ1dHRvbik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKCdkZW5pZWQnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLnNlcnZlci5jbG9zZSgpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICBmb3IgKHZhciB4IGluIHRoaXMucmV0LmxheW91dCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0aGlzLnJldC5sYXlvdXRbeF0gPSAnIicgKyB0aGlzLnJldC5sYXlvdXRbeF0gKyAnIic7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBjLndyaXRlKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdESUFMT0cnLCB0aXRsZTogdGhpcy5yZXQudGl0bGUsIGNhcHRpb246IHRoaXMucmV0LmNhcHRpb24sIGljb246ICdjYXV0aW9uJywgYnV0dG9uczogdGhpcy5yZXQubGF5b3V0LCBidXR0b25EZWZhdWx0OiB0aGlzLnJldC5sYXlvdXRbdGhpcy5yZXQubGF5b3V0Lmxlbmd0aC0xXSwgdGltZW91dDogdGhpcy5yZXQudGltZW91dCB9KSk7DQogICAgICAgIH0pOw0KICAgICAgICByZXQuY2xvc2UgPSBmdW5jdGlvbiBjbG9zZSgpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmICh0aGlzLnNlcnZlcikgeyB0aGlzLnNlcnZlci5jbG9zZSgpOyB9DQogICAgICAgIH07DQogICAgICAgIHJldHVybiAocmV0KTsNCiAgICB9Ow0KICAgIHRoaXMuc2V0Q2xpcGJvYXJkID0gZnVuY3Rpb24gc2V0Q2xpcGJvYXJkKGNsaXBUZXh0KQ0KICAgIHsNCiAgICAgICAgLy8gU3RhcnQgTG9jYWwgU2VydmVyDQogICAgICAgIHZhciByZXQgPSB0aGlzLl9pbml0SVBDQmFzZSgpOw0KICAgICAgICByZXQubWV0YWRhdGEgPSAnY2xpcGJvYXJkL3NldCcNCiAgICAgICAgcmV0LnNlcnZlciA9IHRoaXMuc3RhcnRNZXNzYWdlU2VydmVyKHJldCk7DQogICAgICAgIHJldC5zZXJ2ZXIucmV0ID0gcmV0Ow0KICAgICAgICByZXQuc2VydmVyLmNsaXBUZXh0ID0gY2xpcFRleHQ7DQogICAgICAgIHJldC5zZXJ2ZXIub24oJ2Nvbm5lY3Rpb24nLCBmdW5jdGlvbiAoYykNCiAgICAgICAgew0KICAgICAgICAgICAgdGhpcy5fY29ubmVjdGlvbiA9IGM7DQogICAgICAgICAgICBjLnByb21pc2UgPSB0aGlzLnJldDsNCiAgICAgICAgICAgIGMub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHsgdGhpcy5wcm9taXNlLnNlcnZlci5jbG9zZSgpOyB9KTsNCiAgICAgICAgICAgIGMub24oJ2RhdGEnLCBmdW5jdGlvbiAoYnVmZmVyKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGlmIChidWZmZXIubGVuIDwgNCB8fCBidWZmZXIucmVhZFVJbnQzMkxFKDApID4gYnVmZmVyLmxlbikgeyB0aGlzLnVuc2hpZnQoYnVmZmVyKTsgfQ0KICAgICAgICAgICAgICAgIHZhciBwID0gSlNPTi5wYXJzZShidWZmZXIuc2xpY2UoNCwgYnVmZmVyLnJlYWRVSW50MzJMRSgwKSkudG9TdHJpbmcoKSk7DQogICAgICAgICAgICAgICAgc3dpdGNoIChwLmNvbW1hbmQpDQogICAgICAgICAgICAgICAgew0KICAgICAg", 16000); - memcpy_s(_messagebox + 32000, 19388, "ICAgICAgICAgICAgICBjYXNlICd3cml0ZUNsaXAnOg0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAuY2xpcEVycm9yKQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKHAuY2xpcEVycm9yKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlcygpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICBjLndyaXRlKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICd3cml0ZUNsaXAnLCBjbGlwVGV4dDogdGhpcy5jbGlwVGV4dCB9KSk7DQogICAgICAgIH0pOw0KDQogICAgICAgIHJldHVybiAocmV0KTsNCiAgICB9Ow0KICAgIHRoaXMuZ2V0Q2xpcGJvYXJkID0gZnVuY3Rpb24gZ2V0Q2xpcGJvYXJkKCkNCiAgICB7DQogICAgICAgIC8vIFN0YXJ0IExvY2FsIFNlcnZlcg0KICAgICAgICB2YXIgcmV0ID0gdGhpcy5faW5pdElQQ0Jhc2UoKTsNCiAgICAgICAgcmV0Lm1ldGFkYXRhID0gJ2NsaXBib2FyZC9nZXQnDQogICAgICAgIHJldC5zZXJ2ZXIgPSB0aGlzLnN0YXJ0TWVzc2FnZVNlcnZlcihyZXQpOw0KICAgICAgICByZXQuc2VydmVyLnJldCA9IHJldDsNCiAgICAgICAgcmV0LnNlcnZlci5vbignY29ubmVjdGlvbicsIGZ1bmN0aW9uIChjKQ0KICAgICAgICB7DQogICAgICAgICAgICB0aGlzLl9jb25uZWN0aW9uID0gYzsNCiAgICAgICAgICAgIGMucHJvbWlzZSA9IHRoaXMucmV0Ow0KICAgICAgICAgICAgYy5vbignZW5kJywgZnVuY3Rpb24gKCkgeyB0aGlzLnByb21pc2Uuc2VydmVyLmNsb3NlKCk7IH0pOw0KICAgICAgICAgICAgYy5vbignZGF0YScsIGZ1bmN0aW9uIChidWZmZXIpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci5sZW4gPCA0IHx8IGJ1ZmZlci5yZWFkVUludDMyTEUoMCkgPiBidWZmZXIubGVuKSB7IHRoaXMudW5zaGlmdChidWZmZXIpOyB9DQogICAgICAgICAgICAgICAgdmFyIHAgPSBKU09OLnBhcnNlKGJ1ZmZlci5zbGljZSg0LCBidWZmZXIucmVhZFVJbnQzMkxFKDApKS50b1N0cmluZygpKTsNCiAgICAgICAgICAgICAgICBzd2l0Y2ggKHAuY29tbWFuZCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JlYWRDbGlwJzoNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwLmNsaXBFcnJvcikNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaihwLmNsaXBFcnJvcik7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZXMocC5jbGlwVmFsdWUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICBjLndyaXRlKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdyZWFkQ2xpcCcgfSkpOw0KICAgICAgICB9KTsNCg0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfTsNCiAgICB0aGlzLmxvY2sgPSBmdW5jdGlvbiBsb2NrKCkNCiAgICB7DQogICAgICAgIC8vIFN0YXJ0IExvY2FsIFNlcnZlcg0KICAgICAgICB2YXIgcmV0ID0gdGhpcy5faW5pdElQQ0Jhc2UoKTsNCiAgICAgICAgcmV0Lm1ldGFkYXRhID0gJ2Rlc2t0b3AvbG9jaycNCiAgICAgICAgcmV0LnNlcnZlciA9IHRoaXMuc3RhcnRNZXNzYWdlU2VydmVyKHJldCk7DQogICAgICAgIHJldC5zZXJ2ZXIucmV0ID0gcmV0Ow0KICAgICAgICByZXQuc2VydmVyLm9uKCdjb25uZWN0aW9uJywgZnVuY3Rpb24gKGMpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRoaXMuX2Nvbm5lY3Rpb24gPSBjOw0KICAgICAgICAgICAgYy5wcm9taXNlID0gdGhpcy5yZXQ7DQogICAgICAgICAgICBjLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7IHRoaXMucHJvbWlzZS5zZXJ2ZXIuY2xvc2UoKTsgfSk7DQogICAgICAgICAgICBjLm9uKCdkYXRhJywgZnVuY3Rpb24gKGJ1ZmZlcikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZiAoYnVmZmVyLmxlbiA8IDQgfHwgYnVmZmVyLnJlYWRVSW50MzJMRSgwKSA+IGJ1ZmZlci5sZW4pIHsgdGhpcy51bnNoaWZ0KGJ1ZmZlcik7IH0NCiAgICAgICAgICAgICAgICB2YXIgcCA9IEpTT04ucGFyc2UoYnVmZmVyLnNsaWNlKDQsIGJ1ZmZlci5yZWFkVUludDMyTEUoMCkpLnRvU3RyaW5nKCkpOw0KICAgICAgICAgICAgICAgIHN3aXRjaCAocC5jb21tYW5kKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnRVJST1InOg0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWoocC5yZWFzb24pOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgJ0xPQ0snOg0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZXMoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgYy53cml0ZSh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnTE9DSycgfSkpOw0KICAgICAgICB9KTsNCg0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfTsNCiAgICB0aGlzLm5vdGlmeSA9IGZ1bmN0aW9uIG5vdGlmeSh0aXRsZSwgY2FwdGlvbikNCiAgICB7DQogICAgICAgIC8vIFN0YXJ0IExvY2FsIFNlcnZlcg0KICAgICAgICB2YXIgcmV0ID0gdGhpcy5faW5pdElQQ0Jhc2UoKTsNCiAgICAgICAgcmV0Lm1ldGFkYXRhID0gJ25vdGlmeScNCiAgICAgICAgcmV0LnRpdGxlID0gdGl0bGU7IHJldC5jYXB0aW9uID0gY2FwdGlvbjsgDQogICAgICAgIHJldC5zZXJ2ZXIgPSB0aGlzLnN0YXJ0TWVzc2FnZVNlcnZlcihyZXQpOw0KICAgICAgICByZXQuc2VydmVyLnJldCA9IHJldDsNCiAgICAgICAgcmV0LnNlcnZlci5vbignY29ubmVjdGlvbicsIGZ1bmN0aW9uIChjKQ0KICAgICAgICB7DQogICAgICAgICAgICB0aGlzLl9jb25uZWN0aW9uID0gYzsNCiAgICAgICAgICAgIGMucHJvbWlzZSA9IHRoaXMucmV0Ow0KICAgICAgICAgICAgYy5vbignZW5kJywgZnVuY3Rpb24gKCkgeyB0aGlzLnByb21pc2Uuc2VydmVyLmNsb3NlKCk7IH0pOw0KICAgICAgICAgICAgYy5vbignZGF0YScsIGZ1bmN0aW9uIChidWZmZXIpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci5sZW4gPCA0IHx8IGJ1ZmZlci5yZWFkVUludDMyTEUoMCkgPiBidWZmZXIubGVuKSB7IHRoaXMudW5zaGlmdChidWZmZXIpOyB9DQogICAgICAgICAgICAgICAgdmFyIHAgPSBKU09OLnBhcnNlKGJ1ZmZlci5zbGljZSg0LCBidWZmZXIucmVhZFVJbnQzMkxFKDApKS50b1N0cmluZygpKTsNCiAgICAgICAgICAgICAgICBzd2l0Y2ggKHAuY29tbWFuZCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgJ0VSUk9SJzoNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKHAucmVhc29uKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBjYXNlICdOT1RJRlknOg0KDQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlcygpOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICBjLndyaXRlKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdOT1RJRlknLCB0aXRsZTogdGhpcy5yZXQudGl0bGUsIGNhcHRpb246IHRoaXMucmV0LmNhcHRpb24gfSkpOw0KICAgICAgICB9KTsNCg0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfTsNCiAgICB0aGlzLnN0YXJ0Q2xpZW50ID0gZnVuY3Rpb24gc3RhcnRDbGllbnQob3B0aW9ucykNCiAgICB7DQogICAgICAgIC8vIENyZWF0ZSB0aGUgQ2xpZW50DQogICAgICAgIG9wdGlvbnMub3N2ZXJzaW9uID0gcmVxdWlyZSgnc2VydmljZS1tYW5hZ2VyJykuZ2V0T1NWZXJzaW9uKCk7DQogICAgICAgIG9wdGlvbnMudWlkID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmNvbnNvbGVVaWQoKTsNCiAgICAgICAgdGhpcy5jbGllbnQgPSByZXF1aXJlKCduZXQnKS5jcmVhdGVDb25uZWN0aW9uKG9wdGlvbnMpOw0KICAgICAgICB0aGlzLmNsaWVudC5fb3B0aW9ucyA9IG9wdGlvbnM7DQogICAgICAgIHRoaXMuY2xpZW50Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGJ1ZmZlcikNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKGJ1ZmZlci5sZW4gPCA0IHx8IGJ1ZmZlci5yZWFkVUludDMyTEUoMCkgPiBidWZmZXIubGVuKSB7IHRoaXMudW5zaGlmdChidWZmZXIpOyB9DQogICAgICAgICAgICB2YXIgcCA9IEpTT04ucGFyc2UoYnVmZmVyLnNsaWNlKDQsIGJ1ZmZlci5yZWFkVUludDMyTEUoMCkpLnRvU3RyaW5nKCkpOw0KICAgICAgICAgICAgc3dpdGNoIChwLmNvbW1hbmQpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgY2FzZSAnd3JpdGVDbGlwJzoNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy91c3IvYmluL3BiY29weScsIFsncGJjb3B5J10pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5pcGMgPSB0aGlzOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5zdGRvdXQuc3RyID0gJyc7IHRoaXMuX3NoZWxsLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwuc3RkZXJyLnN0ciA9ICcnOyB0aGlzLl9zaGVsbC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLnN0ZGluLndyaXRlKHAuY2xpcFRleHQsIGZ1bmN0aW9uICgpIHsgdGhpcy5lbmQoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLm9uKCdleGl0JywgZnVuY3Rpb24gKCkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RkZXJyLnN0ciAhPSAnJykNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlwYy5lbmQodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ3dyaXRlQ2xpcCcsIGNsaXBFcnJvcjogdGhpcy5zdGRlcnIuc3RyIH0pKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlwYy5lbmQodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ3dyaXRlQ2xpcCcgfSkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAncmVhZENsaXAnOg0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL3Vzci9iaW4vcGJwYXN0ZScsIFsncGJwYXN0ZSddKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwuc3Rkb3V0LnN0ciA9ICcnOyB0aGlzLl9zaGVsbC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgPSAnJzsgdGhpcy5fc2hlbGwuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC53YWl0RXhpdCgpOw0KICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc2hlbGwuc3RkZXJyLnN0ciAhPSAnJykNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmQodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ3JlYWRDbGlwJywgY2xpcEVycm9yOiB0aGlzLl9zaGVsbC5zdGRlcnIuc3RyIH0pKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdyZWFkQ2xpcCcsIGNsaXBWYWx1ZTogdGhpcy5fc2hlbGwuc3Rkb3V0LnN0ciB9KSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAnTE9DSyc6DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwuc3Rkb3V0LnN0ciA9ICcnOyB0aGlzLl9zaGVsbC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgPSAnJzsgdGhpcy5fc2hlbGwuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5zdGRpbi53cml0ZSgnL1N5c3RlbS9MaWJyYXJ5L0NvcmVTZXJ2aWNlcy9NZW51XFwgRXh0cmFzL1VzZXIubWVudS9Db250ZW50cy9SZXNvdXJjZXMvQ0dTZXNzaW9uIC1zdXNwZW5kXG5leGl0XG4nKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwud2FpdEV4aXQoKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgIT0gJycpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdFUlJPUicsIHJlYXNvbjogdGhpcy5fc2hlbGwuc3RkZXJyLnN0ciB9KSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZCh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnTE9DSycsIHN0YXR1czogMCB9KSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAnTk9USUZZJzoNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5zdGRvdXQuc3RyID0gJyc7IHRoaXMuX3NoZWxsLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwuc3RkZXJyLnN0ciA9ICcnOyB0aGlzLl9zaGVsbC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLnN0ZGluLndyaXRlKCdvc2FzY3JpcHQgLWUgXCd0ZWxsIGN1cnJlbnQgYXBwbGljYXRpb24gdG8gZGlzcGxheSBub3RpZmljYXRpb24gIicgKyBwLmNhcHRpb24gKyAnIiB3aXRoIHRpdGxlICInICsgcC50aXRsZSArICciXCdcbmV4aXRcbicpOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC53YWl0RXhpdCgpOw0KICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc2hlbGwuc3RkZXJyLnN0ciAhPSAnJykNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmQodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ0VSUk9SJywgcmVhc29uOiB0aGlzLl9zaGVsbC5zdGRlcnIuc3RyIH0pKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdOT1RJRlknLCBzdGF0dXM6IDAgfSkpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgJ0RJQUxPRyc6DQogICAgICAgICAgICAgICAgICAgIHZhciB0aW1lb3V0ID0gcC50aW1lb3V0ID8gKCcgZ2l2aW5nIHVwIGFmdGVyICcgKyBwLnRpbWVvdXQpIDogJyc7DQogICAgICAgICAgICAgICAgICAgIHZhciBpY29uID0gcC5pY29uID8gKCd3aXRoIGljb24gJyArIHAuaWNvbikgOiAnJzsNCg0KICAgICAgICAgICAgICAgICAgICB2YXIgYnV0dG9ucyA9IHAuYnV0dG9ucyA/ICgnYnV0dG9ucyB7JyArIHAuYnV0dG9ucy50b1N0cmluZygpICsgJ30nKSA6ICcnOw0KICAgICAgICAgICAgICAgICAgICBpZiAocC5idXR0b25EZWZhdWx0ICE9IG51bGwpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbnMgKz0gKCcgZGVmYXVsdCBidXR0b24gJyArIHAuYnV0dG9uRGVmYXVsdCkNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLnRoYXQgPSB0aGlzOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5zdGRvdXQuc3RyID0gJyc7IHRoaXMuX3NoZWxsLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwuc3RkZXJyLnN0ciA9ICcnOyB0aGlzLl9zaGVsbC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLnN0ZGluLndyaXRlKCdvc2FzY3JpcHQgLWUgXCd0ZWxsIGN1cnJlbnQgYXBwbGljYXRpb24gdG8gZGlzcGxheSBkaWFsb2cgIicgKyBwLmNhcHRpb24gKyAnIiB3aXRoIHRpdGxlICInICsgcC50aXRsZSArICciICcgKyBpY29uICsgJyAnICsgYnV0dG9ucyArIHRpbWVvdXQgKyAnXCcgfCBhd2sgXCd7IGM9c3BsaXQoJDAsIHRva2VucywgIiwiKTsgc3BsaXQodG9rZW5zWzFdLCB2YWwsICI6Iik7IGlmKGM9PTEpIHsgcHJpbnQgdmFsWzJdIH0gZWxzZSB7IHNwbGl0KHRva2Vuc1syXSwgZ3UsICI6Iik7IGlmKGd1WzJdPT0idHJ1ZSIpIHsgcHJpbnQgIl9USU1FT1VUXyIgfSBlbHNlIHsgcHJpbnQgdmFsWzJdICB9ICB9IH1cJ1xuZXhpdFxuJyk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLm9uKCdleGl0JywgZnVuY3Rpb24gKCkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RkZXJyLnN0ciAhPSAnJyAmJiAhdGhpcy5zdGRlcnIuc3RyLmluY2x1ZGVzKCdPcGVuR0wnKSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRoYXQuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdFUlJPUicsIHJlYXNvbjogdGhpcy5zdGRlcnIuc3RyIH0pKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGRvdXQuc3RyLnRyaW0oKSA9PSAnX1RJTUVPVVRfJykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhhdC5lbmQodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ0RJQUxPRycsIHRpbWVvdXQ6IHRydWUgfSkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRoYXQuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdESUFMT0cnLCBidXR0b246IHRoaXMuc3Rkb3V0LnN0ci50cmltKCkgfSkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhhdC5fc2hlbGwgPSBudWxsOw0KICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbignY2xvc2UnLCBmdW5jdGlvbiAoKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc2hlbGwpIHsgdGhpcy5fc2hlbGwua2lsbCgpOyB9DQogICAgICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgICAgIC8vdGhpcy5fc2hlbGwud2FpdEV4aXQoKTsNCiAgICAgICAgICAgICAgICAgICAgLy9pZiAodGhpcy5fc2hlbGwuc3RkZXJyLnN0ciAhPSAnJyAmJiAhdGhpcy5fc2hlbGwuc3RkZXJyLnN0ci5pbmNsdWRlcygnT3BlbkdMJykpDQogICAgICAgICAgICAgICAgICAgIC8vew0KICAgICAgICAgICAgICAgICAgICAvLyAgICB0aGlzLmVuZCh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnRVJST1InLCByZWFzb246IHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgfSkpOw0KICAgICAgICAgICAgICAgICAgICAvL30NCiAgICAgICAgICAgICAgICAgICAgLy9lbHNlDQogICAgICAgICAgICAgICAgICAgIC8vew0KICAgICAgICAgICAgICAgICAgICAvLyAgICBpZiAodGhpcy5fc2hlbGwuc3Rkb3V0LnN0ci50cmltKCkgPT0gJ19USU1FT1VUXycpDQogICAgICAgICAgICAgICAgICAgIC8vICAgIHsNCiAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIHRoaXMuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdESUFMT0cnLCB0aW1lb3V0OiB0cnVlIH0pKTsNCiAgICAgICAgICAgICAgICAgICAgLy8gICAgfQ0KICAgICAgICAgICAgICAgICAgICAvLyAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgIC8vICAgIHsNCiAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIHRoaXMuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdESUFMT0cnLCBidXR0b246IHRoaXMuX3NoZWxsLnN0ZG91dC5zdHIudHJpbSgpIH0pKTsNCiAgICAgICAgICAgICAgICAgICAgLy8gICAgfQ0KICAgICAgICAgICAgICAgICAgICAvL30NCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgICB0aGlzLmNsaWVudC5v", 16000); - memcpy_s(_messagebox + 48000, 3388, "bignZXJyb3InLCBmdW5jdGlvbiAoKSB7IHRoaXMudW5pbnN0YWxsKCk7IH0pLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7IHRoaXMudW5pbnN0YWxsKCk7IH0pOw0KICAgICAgICB0aGlzLmNsaWVudC51bmluc3RhbGwgPSBmdW5jdGlvbiAoKQ0KICAgICAgICB7DQogICAgICAgICAgICAvLyBOZWVkIHRvIHVuaW5zdGFsbCBvdXJzZWx2ZXMNCiAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShwcm9jZXNzLmV4ZWNQYXRoLCBbcHJvY2Vzcy5leGVjUGF0aC5zcGxpdCgnLycpLnBvcCgpLCAnLWV4ZWMnLCAidmFyIHM9cmVxdWlyZSgnc2VydmljZS1tYW5hZ2VyJykubWFuYWdlci5nZXRMYXVuY2hBZ2VudCgnIiArIHRoaXMuX29wdGlvbnMuc2VydmljZSArICInLCAiICsgdGhpcy5fb3B0aW9ucy51aWQgKyAiKTsgcy51bmxvYWQoKTsgcmVxdWlyZSgnZnMnKS51bmxpbmtTeW5jKHMucGxpc3QpO3Byb2Nlc3MuZXhpdCgpOyJdLCB7IGRldGFjaGVkOiB0cnVlLCB0eXBlOiByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuU3Bhd25UeXBlcy5ERVRBQ0hFRCB9KTsNCiAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7DQogICAgICAgIH07DQogICAgICAgIHJldHVybiAodGhpcy5jbGllbnQpOw0KICAgIH07DQogICAgdGhpcy5zdGFydE1lc3NhZ2VTZXJ2ZXIgPSBmdW5jdGlvbiBzdGFydE1lc3NhZ2VTZXJ2ZXIob3B0aW9ucykNCiAgICB7DQogICAgICAgIGlmIChyZXF1aXJlKCdmcycpLmV4aXN0c1N5bmMob3B0aW9ucy5wYXRoKSkgeyByZXF1aXJlKCdmcycpLnVubGlua1N5bmMob3B0aW9ucy5wYXRoKTsgfQ0KICAgICAgICBvcHRpb25zLndyaXRhYmxlQWxsID0gdHJ1ZTsNCg0KICAgICAgICB2YXIgcmV0ID0gcmVxdWlyZSgnbmV0JykuY3JlYXRlU2VydmVyKCk7DQogICAgICAgIHJldC5kZXNjcmlwdG9yTWV0YWRhdGEgPSAoJ1snICsgb3B0aW9ucy5wYXRoICsgJ10nICsgKG9wdGlvbnMubWV0YWRhdGEgPyAoJywgJyArIG9wdGlvbnMubWV0YWRhdGEpIDogJycpKTsNCiAgICAgICAgcmV0LnVpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCk7DQogICAgICAgIHJldC5vc3ZlcnNpb24gPSByZXF1aXJlKCdzZXJ2aWNlLW1hbmFnZXInKS5nZXRPU1ZlcnNpb24oKTsNCiAgICAgICAgcmV0Ll9vcHRpb25zID0gb3B0aW9uczsNCiAgICAgICAgcmV0LnRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAob2JqKQ0KICAgICAgICB7DQogICAgICAgICAgICBvYmouY2xvc2UoKTsNCiAgICAgICAgICAgIG9iai5fb3B0aW9ucy5fcmVqKCdDb25uZWN0aW9uIHRpbWVvdXQnKTsNCiAgICAgICAgfSwgNTAwMCwgcmV0KTsNCiAgICAgICAgcmV0Lmxpc3RlbihvcHRpb25zKTsNCiAgICAgICAgcmV0Lm9uKCdjb25uZWN0aW9uJywgZnVuY3Rpb24gKGMpDQogICAgICAgIHsNCiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTsNCiAgICAgICAgfSk7DQogICAgICAgIHJldC5vbignficsIGZ1bmN0aW9uICgpDQogICAgICAgIHsNCiAgICAgICAgICAgIHJlcXVpcmUoJ2ZzJykudW5saW5rU3luYyh0aGlzLl9vcHRpb25zLnBhdGgpOw0KICAgICAgICB9KTsNCg0KICAgICAgICByZXF1aXJlKCdzZXJ2aWNlLW1hbmFnZXInKS5tYW5hZ2VyLmluc3RhbGxMYXVuY2hBZ2VudCgNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBuYW1lOiBvcHRpb25zLnRtcFNlcnZpY2VOYW1lLCBzZXJ2aWNlUGF0aDogcHJvY2Vzcy5leGVjUGF0aCwgc3RhcnRUeXBlOiAnQVVUT19TVEFSVCcsIHVpZDogcmV0LnVpZCwNCiAgICAgICAgICAgICAgICBzZXNzaW9uVHlwZXM6IFsnQXF1YSddLCBwYXJhbWV0ZXJzOiBbJy1leGVjJywgInJlcXVpcmUoJ21lc3NhZ2UtYm94Jykuc3RhcnRDbGllbnQoeyBwYXRoOiAnIiArIG9wdGlvbnMucGF0aCArICInLCBzZXJ2aWNlOiAnIiArIG9wdGlvbnMudG1wU2VydmljZU5hbWUgKyAiJyB9KS5vbignZW5kJywgZnVuY3Rpb24gKCkgeyBwcm9jZXNzLmV4aXQoKTsgfSkub24oJ2Vycm9yJywgZnVuY3Rpb24gKCkgeyBwcm9jZXNzLmV4aXQoKTsgfSk7Il0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICByZXF1aXJlKCdzZXJ2aWNlLW1hbmFnZXInKS5tYW5hZ2VyLmdldExhdW5jaEFnZW50KG9wdGlvbnMudG1wU2VydmljZU5hbWUsIHJldC51aWQpLmxvYWQoKTsNCg0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfTsNCn0NCg0KDQpzd2l0Y2gocHJvY2Vzcy5wbGF0Zm9ybSkNCnsNCiAgICBjYXNlICd3aW4zMic6DQogICAgICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IG1lc3NhZ2VCb3goKTsNCiAgICAgICAgYnJlYWs7DQogICAgY2FzZSAnbGludXgnOg0KICAgIGNhc2UgJ2ZyZWVic2QnOg0KICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBsaW51eF9tZXNzYWdlQm94KCk7DQogICAgICAgIGJyZWFrOw0KICAgIGNhc2UgJ2Rhcndpbic6DQogICAgICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IG1hY29zX21lc3NhZ2VCb3goKTsNCiAgICAgICAgYnJlYWs7DQp9DQoNCg0KDQoNCg0KDQo=", 3388); - ILibBase64DecodeEx((unsigned char*)_messagebox, 51388, (unsigned char*)_messagebox + 51388); - duk_push_global_object(ctx); duk_get_prop_string(ctx, -1, "addModule"); duk_swap_top(ctx, -2); duk_push_string(ctx, "message-box"); duk_push_string(ctx, _messagebox + 51388); + char *_messagebox = ILibMemory_Allocate(96894, 0, NULL, NULL); + memcpy_s(_messagebox + 0, 55368, "LyoNCkNvcHlyaWdodCAyMDIwIEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQoNCmNvbnN0IE1CX09LICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDAwMDAwOw0KY29uc3QgTUJfT0tDQU5DRUwgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDE7DQpjb25zdCBNQl9BQk9SVFJFVFJZSUdOT1JFICAgICAgID0gMHgwMDAwMDAwMjsNCmNvbnN0IE1CX1lFU05PQ0FOQ0VMICAgICAgICAgICAgPSAweDAwMDAwMDAzOw0KY29uc3QgTUJfWUVTTk8gICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDQ7DQpjb25zdCBNQl9SRVRSWUNBTkNFTCAgICAgICAgICAgID0gMHgwMDAwMDAwNTsNCmNvbnN0IE1CX1RPUE1PU1QgICAgICAgICAgICAgICAgPSAweDAwMDQwMDAwOw0KY29uc3QgTUJfU0VURk9SRUdST1VORCAgICAgICAgICA9IDB4MDAwMTAwMDA7DQpjb25zdCBNQl9TWVNURU1NT0RBTCAgICAgICAgICAgID0gMHgwMDAwMTAwMDsNCg0KY29uc3QgTUJfREVGQlVUVE9OMSAgICAgICAgICAgICA9IDB4MDAwMDAwMDA7DQpjb25zdCBNQl9ERUZCVVRUT04yICAgICAgICAgICAgID0gMHgwMDAwMDEwMDsNCmNvbnN0IE1CX0RFRkJVVFRPTjMgICAgICAgICAgICAgPSAweDAwMDAwMjAwOw0KY29uc3QgTUJfSUNPTkhBTkQgICAgICAgICAgICAgICA9IDB4MDAwMDAwMTA7DQpjb25zdCBNQl9JQ09OUVVFU1RJT04gICAgICAgICAgID0gMHgwMDAwMDAyMDsNCmNvbnN0IE1CX0lDT05FWENMQU1BVElPTiAgICAgICAgPSAweDAwMDAwMDMwOw0KY29uc3QgTUJfSUNPTkFTVEVSSVNLICAgICAgICAgICA9IDB4MDAwMDAwNDA7DQoNCmNvbnN0IElET0sgICAgID0gMTsNCmNvbnN0IElEQ0FOQ0VMID0gMjsNCmNvbnN0IElEQUJPUlQgID0gMzsNCmNvbnN0IElEUkVUUlkgID0gNDsNCmNvbnN0IElESUdOT1JFID0gNTsNCmNvbnN0IElEWUVTICAgID0gNjsNCmNvbnN0IElETk8gICAgID0gNzsNCmNvbnN0IFdNX0NMT1NFID0gMHgwMDEwOw0KDQp2YXIgcHJvbWlzZSA9IHJlcXVpcmUoJ3Byb21pc2UnKTsNCg0KLy9mdW5jdGlvbiBzZW5kQ29uc29sZVRleHQobXNnKQ0KLy97DQovLyAgICByZXF1aXJlKCdNZXNoQWdlbnQnKS5TZW5kQ29tbWFuZCh7IGFjdGlvbjogJ21zZycsIHR5cGU6ICdjb25zb2xlJywgdmFsdWU6IG1zZyB9KTsNCi8vfQ0KDQoNCmZ1bmN0aW9uIG1lc3NhZ2VCb3goKQ0Kew0KICAgIHRoaXMuX09iamVjdElEID0gJ21lc3NhZ2UtYm94JzsNCiAgICB0aGlzLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZSh0aXRsZSwgY2FwdGlvbiwgdGltZW91dCwgbGF5b3V0LCBzaWQpDQogICAgew0KICAgICAgICB2YXIgcmV0ID0gbmV3IHByb21pc2UoZnVuY3Rpb24gKHJlcywgcmVqKSB7IHRoaXMuX3JlcyA9IHJlczsgdGhpcy5fcmVqID0gcmVqOyB9KTsNCiAgICAgICAgcmV0Lm9wdGlvbnMgPSB7IGxhdW5jaDogeyBtb2R1bGU6ICdtZXNzYWdlLWJveCcsIG1ldGhvZDogJ3NsYXZlJywgYXJnczogW10gfSB9Ow0KICAgICAgICByZXQudGl0bGUgPSB0aXRsZTsNCiAgICAgICAgcmV0LmNhcHRpb24gPSBjYXB0aW9uOw0KICAgICAgICByZXQudGltZW91dCA9IHRpbWVvdXQ7DQogICAgICAgIHJldC5sYXlvdXQgPSBsYXlvdXQ7DQoNCiAgICAgICAgLy9yZXQub3B0aW9ucy5fZGVidWdJUEMgPSB0cnVlOw0KICAgICAgICAvL3JldC5vcHRpb25zLl9pcGNJbnRlZ2VyID0gMTUwMDsNCg0KICAgICAgICB0cnkNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0Lm9wdGlvbnMudWlkID0gc2lkID09IG51bGwgPyByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpIDogc2lkOw0KICAgICAgICAgICAgaWYgKHJldC5vcHRpb25zLnVpZCA9PSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuZ2V0UHJvY2Vzc093bmVyTmFtZShwcm9jZXNzLnBpZCkudHNpZCkgeyBkZWxldGUgcmV0Lm9wdGlvbnMudWlkOyB9DQogICAgICAgIH0NCiAgICAgICAgY2F0Y2ggKGVlKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXQuX3JlaignTm8gbG9nZ2VkIG9uIHVzZXJzJyk7DQogICAgICAgICAgICByZXR1cm4gKHJldCk7DQogICAgICAgIH0NCg0KICAgICAgICByZXQuX2lwYyA9IHJlcXVpcmUoJ2NoaWxkLWNvbnRhaW5lcicpLmNyZWF0ZShyZXQub3B0aW9ucyk7DQogICAgICAgIHJldC5faXBjLm1hc3RlciA9IHJldDsNCiAgICAgICAgcmV0Ll9pcGMub24oJ3JlYWR5JywgZnVuY3Rpb24gKCkNCiAgICAgICAgew0KICAgICAgICAgICAgdGhpcy5kZXNjcmlwdG9yTWV0YWRhdGEgPSAnbWVzc2FnZS1ib3gnOw0KICAgICAgICAgICAgaWYgKHRoaXMubWFzdGVyLnRpbWVvdXQgIT0gbnVsbCkgeyB0aGlzLm1hc3Rlci5fdGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKG1zdHIpIHsgbXN0ci5faXBjLmV4aXQoKTsgfSwgdGhpcy5tYXN0ZXIudGltZW91dCAqIDEwMDAsIHRoaXMubWFzdGVyKTsgfQ0KICAgICAgICAgICAgaWYgKHRoaXMubWFzdGVyLmxheW91dCA9PSBudWxsKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSh7IGNvbW1hbmQ6ICdZRVNOTycsIGNhcHRpb246IHRoaXMubWFzdGVyLmNhcHRpb24sIHRpdGxlOiB0aGlzLm1hc3Rlci50aXRsZSB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UoeyBjb21tYW5kOiAnQUxFUlQnLCBjYXB0aW9uOiB0aGlzLm1hc3Rlci5jYXB0aW9uLCB0aXRsZTogdGhpcy5tYXN0ZXIudGl0bGUgfSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgICByZXQuX2lwYy5vbignbWVzc2FnZScsIGZ1bmN0aW9uIChtc2cpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHN3aXRjaChtc2cuY29tbWFuZCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3Jlc3BvbnNlJzoNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hc3Rlci5fdGltZW91dCkgeyBjbGVhclRpbWVvdXQodGhpcy5tYXN0ZXIuX3RpbWVvdXQpOyB0aGlzLm1hc3Rlci5fdGltZW91dCA9IG51bGw7IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtc2cucmVzcG9uc2UgPT0gSURZRVMgfHwgbXNnLnJlc3BvbnNlID09IElET0spDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXN0ZXIuX3JlcygpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFzdGVyLl9yZWoobXNnLnJlc3BvbnNlKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgY2F0Y2goZmYpDQogICAgICAgICAgICB7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgICByZXQuX2lwYy5vbignZXhpdCcsIGZ1bmN0aW9uIChjKSB7IHRoaXMubWFzdGVyLl9yZWooJ2NoaWxkIGV4aXRlZCB3aXRoIGNvZGU6ICcgKyBjKTsgfSk7DQogICAgICAgIHJldC5jbG9zZSA9IGZ1bmN0aW9uIGNsb3NlKCkNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0Ll9pcGMuZXhpdCgpOw0KICAgICAgICB9Ow0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfTsNCiAgICB0aGlzLnNsYXZlID0gZnVuY3Rpb24oKQ0KICAgIHsNCiAgICAgICAgdmFyIG1hc3RlciA9IHJlcXVpcmUoJ2NoaWxkLWNvbnRhaW5lcicpOw0KICAgICAgICBtYXN0ZXIub24oJ21lc3NhZ2UnLCBmdW5jdGlvbiAobXNnKQ0KICAgICAgICB7DQogICAgICAgICAgICBzd2l0Y2gobXNnLmNvbW1hbmQpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgY2FzZSAnWUVTTk8nOg0KICAgICAgICAgICAgICAgIGNhc2UgJ0FMRVJUJzoNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5HTSA9IHJlcXVpcmUoJ19HZW5lcmljTWFyc2hhbCcpOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXIzMiA9IHRoaXMuR00uQ3JlYXRlTmF0aXZlUHJveHkoJ3VzZXIzMi5kbGwnKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyMzIuQ3JlYXRlTWV0aG9kKCdNZXNzYWdlQm94VycpOw0KDQogICAgICAgICAgICAgICAgICAgIGxheW91dCA9IG1zZy5jb21tYW5kID09ICdZRVNOTycgPyAoTUJfWUVTTk8gfCBNQl9ERUZCVVRUT04yIHwgTUJfSUNPTkVYQ0xBTUFUSU9OIHwgTUJfVE9QTU9TVCB8IE1CX1NZU1RFTU1PREFMKSA6IChNQl9PSyB8IE1CX0RFRkJVVFRPTjIgfCBNQl9JQ09ORVhDTEFNQVRJT04gfCBNQl9UT1BNT1NUIHwgTUJfU1lTVEVNTU9EQUwpOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXIzMi5NZXNzYWdlQm94Vy5hc3luYygwLCB0aGlzLkdNLkNyZWF0ZVZhcmlhYmxlKG1zZy5jYXB0aW9uLCB7IHdpZGU6IHRydWUgfSksIHRoaXMuR00uQ3JlYXRlVmFyaWFibGUobXNnLnRpdGxlLCB7IHdpZGU6IHRydWUgfSksIGxheW91dCkNCiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyKQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHIuVmFsKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIElET0s6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIElEQ0FOQ0VMOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJREFCT1JUOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJRFJFVFJZOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJRElHTk9SRToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSURZRVM6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aGF0Lm1lc3NhZ2Uoe2NvbW1hbmQ6ICdyZXNwb25zZScsIHJlc3BvbnNlOiByLlZhbH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRoYXQubWVzc2FnZSh7Y29tbWFuZDogJ3Jlc3BvbnNlJywgcmVzcG9uc2U6IElETk99KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaChmZikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKCkgeyBwcm9jZXNzLmV4aXQoKTsgfSkucGFyZW50UHJvbWlzZS50aGF0ID0gdGhpczsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgIH0NCn0NCg0KDQpmdW5jdGlvbiBsaW51eF9tZXNzYWdlQm94KCkNCnsNCiAgICB0aGlzLl9PYmplY3RJRCA9ICdtZXNzYWdlLWJveCc7DQogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICd6ZW5pdHknLA0KICAgICAgICB7DQogICAgICAgICAgICB2YWx1ZTogKGZ1bmN0aW9uICgpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyB6ZW5pdHkgfCBhd2sgJ3sgcHJpbnQgJDIgfSdcbmV4aXRcbiIpOw0KICAgICAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7DQogICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uID0gY2hpbGQuc3Rkb3V0LnN0ci50cmltKCk7DQogICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uID09ICcnICYmIHJlcXVpcmUoJ2ZzJykuZXhpc3RzU3luYygnL3Vzci9sb2NhbC9iaW4vemVuaXR5JykpIHsgbG9jYXRpb24gPSAnL3Vzci9sb2NhbC9iaW4vemVuaXR5JzsgfQ0KICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PSAnJykgeyByZXR1cm4gKG51bGwpOyB9DQoNCiAgICAgICAgICAgICAgICB2YXIgcmV0ID0geyBwYXRoOiBsb2NhdGlvbiwgdGltZW91dDogY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkgPT0gJycgPyBmYWxzZSA6IHRydWUgfTsNCiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmV0LCAidGltZW91dCIsIHsNCiAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGltZW91dCA9PSBudWxsKQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1aWQsIHhpbmZvOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlkID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmNvbnNvbGVVaWQoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGluZm8gPSByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5nZXRYSW5mbyh1aWQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpZCA9IDA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8oMCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4aW5mbyA9PSBudWxsKSB7IHJldHVybiAoZmFsc2UpOyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddLCB7IHVpZDogdWlkLCBlbnY6IHsgWEFVVEhPUklUWTogeGluZm8ueGF1dGhvcml0eSA/IHhpbmZvLnhhdXRob3JpdHkgOiAiIiwgRElTUExBWTogeGluZm8uZGlzcGxheSB9IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKGxvY2F0aW9uICsgJyAtLWhlbHAtYWxsIHwgZ3JlcCB0aW1lb3V0XG5leGl0XG4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoZSkgeyB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiX3RpbWVvdXQiLCB7IHZhbHVlOiBjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSA9PSAnJyA/IGZhbHNlIDogdHJ1ZSB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuX3RpbWVvdXQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy5fdGltZW91dCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXQsICJ2ZXJzaW9uIiwgew0KICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl92ZXJzaW9uID09IG51bGwpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVpZCwgeGluZm87DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aWQgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aW5mbyA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLmdldFhJbmZvKHVpZCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlkID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGluZm8gPSByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5nZXRYSW5mbygwKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhpbmZvID09IG51bGwpIHsgcmV0dXJuIChmYWxzZSk7IH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSwgeyB1aWQ6IHVpZCwgZW52OiB7IFhBVVRIT1JJVFk6IHhpbmZvLnhhdXRob3JpdHkgPyB4aW5mby54YXV0aG9yaXR5IDogIiIsIERJU1BMQVk6IHhpbmZvLmRpc3BsYXkgfSB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGRlcnIuc3RyID0gJyc7IGNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZShsb2NhdGlvbiArICcgLS12ZXJzaW9uIHwgYXdrIC1GLiBcJ3sgcHJpbnRmICJbJXMsICVzXVxcbiIsICQxLCAkMjsgfSBcJ1xuZXhpdFxuJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLnN0ZGVyci5zdHIuaW5jbHVkZXMoJy1DUklUSUNBTCAqKicpKSB7IG9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiYnJva2VuIiwgeyB2YWx1ZTogdHJ1ZSB9KTsgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIl92ZXJzaW9uIiwge3ZhbHVlOiBKU09OLnBhcnNlKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpKX0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuX3ZlcnNpb24pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiX3ZlcnNpb24iLCB7IHZhbHVlOiBbMiwgMTZdIH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuX3ZlcnNpb24pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuX3ZlcnNpb24pOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgICAgICAgICAgfSkoKQ0KICAgICAgICB9KTsNCiAgICBpZiAoIXRoaXMuemVuaXR5KQ0KICAgIHsNCiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdrZGlhbG9nJywNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YWx1ZTogKGZ1bmN0aW9uICgpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoIndoZXJlaXMga2RpYWxvZyB8IGF3ayAneyBwcmludCAkMiB9J1xuZXhpdFxuIik7DQogICAgICAgICAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiAoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkgPT0gJycgPyBudWxsIDogeyBwYXRoOiBjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSB9KTsNCiAgICAgICAgICAgICAgICB9KSgpDQogICAgICAgICAgICB9KTsN", 16000); + memcpy_s(_messagebox + 16000, 39368, "CiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICd4bWVzc2FnZScsDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFsdWU6IChmdW5jdGlvbiAoKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJ3aGVyZWlzIHhtZXNzYWdlIHwgYXdrICd7IHByaW50ICQyIH0nXG5leGl0XG4iKTsNCiAgICAgICAgICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSA9PSAnJyA/IG51bGwgOiB7IHBhdGg6IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpIH0pOw0KICAgICAgICAgICAgICAgIH0pKCkNCiAgICAgICAgICAgIH0pOw0KICAgIH0NCg0KICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnbm90aWZ5c2VuZCcsDQogICAgICAgIHsNCiAgICAgICAgICAgIHZhbHVlOiAoZnVuY3Rpb24gKCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJ3aGVyZWlzIG5vdGlmeS1zZW5kIHwgYXdrICd7IHByaW50ICQyIH0nXG5leGl0XG4iKTsNCiAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KICAgICAgICAgICAgICAgIHJldHVybiAoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkgPT0gJycgPyBudWxsIDogeyBwYXRoOiBjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSB9KTsNCiAgICAgICAgICAgIH0pKCkNCiAgICAgICAgfSk7DQogICAgDQoNCiAgICB0aGlzLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZSh0aXRsZSwgY2FwdGlvbiwgdGltZW91dCwgbGF5b3V0KQ0KICAgIHsNCiAgICAgICAgaWYgKHRpbWVvdXQgPT0gbnVsbCkgeyB0aW1lb3V0ID0gMTA7IH0NCiAgICAgICAgdmFyIHJldCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeyB0aGlzLl9yZXMgPSByZXM7IHRoaXMuX3JlaiA9IHJlajsgfSk7DQogICAgICAgIHZhciB1aWQ7ICAgIA0KICAgICAgICB2YXIgeGluZm87DQogICAgICAgIHZhciBtaW4gPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykubWluVWlkKCk7DQoNCiAgICAgICAgdHJ5DQogICAgICAgIHsNCiAgICAgICAgICAgIHVpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCk7DQogICAgICAgICAgICB4aW5mbyA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLmdldFhJbmZvKHVpZCk7DQogICAgICAgIH0NCiAgICAgICAgY2F0Y2goZSkNCiAgICAgICAgew0KICAgICAgICAgICAgdWlkID0gMDsNCiAgICAgICAgICAgIHhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8oMCk7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoeGluZm8gPT0gbnVsbCB8fCAodWlkICE9IDAgJiYgdWlkIDwgbWluKSkNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0Ll9yZWooJ1RoaXMgc3lzdGVtIGNhbm5vdCBkaXNwbGF5IGEgdXNlciBkaWFsb2cgYm94IHdoZW4gYSB1c2VyIGlzIG5vdCBsb2dnZWQgaW4nKTsNCiAgICAgICAgICAgIHJldHVybiAocmV0KTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmICh0aGlzLnplbml0eSkNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0Ll9vcHRpb25zID0geyB0aXRsZTogdGl0bGUudHJpbSgpLCBjYXB0aW9uOiBjYXB0aW9uLnRyaW0oKSwgdGltZW91dDogdGltZW91dCwgbGF5b3V0OiBsYXlvdXQsIHplbml0eTogdGhpcy56ZW5pdHkgfTsNCg0KICAgICAgICAgICAgLy8gR05PTUUvWkVOSVRZDQogICAgICAgICAgICBpZiAodGhpcy56ZW5pdHkudGltZW91dCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICByZXQuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUodGhpcy56ZW5pdHkucGF0aCwgWyd6ZW5pdHknLCBsYXlvdXQ9PW51bGw/Jy0tcXVlc3Rpb24nOictLXdhcm5pbmcnLCAnLS10aXRsZT0nICsgdGl0bGUsICctLXRleHQ9JyArIGNhcHRpb24sICctLXRpbWVvdXQ9JyArIHRpbWVvdXRdLCB7IHVpZDogdWlkLCBlbnY6IHsgWEFVVEhPUklUWTogeGluZm8ueGF1dGhvcml0eSA/IHhpbmZvLnhhdXRob3JpdHkgOiAiIiwgRElTUExBWTogeGluZm8uZGlzcGxheSB9IH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHJldC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSh0aGlzLnplbml0eS5wYXRoLCBbJ3plbml0eScsIGxheW91dCA9PSBudWxsID8gJy0tcXVlc3Rpb24nIDogJy0td2FybmluZycsICctLXRpdGxlPScgKyB0aXRsZSwgJy0tdGV4dD0nICsgY2FwdGlvbl0sIHsgdWlkOiB1aWQsIGVudjogeyBYQVVUSE9SSVRZOiB4aW5mby54YXV0aG9yaXR5ID8geGluZm8ueGF1dGhvcml0eSA6ICIiLCBESVNQTEFZOiB4aW5mby5kaXNwbGF5IH0gfSk7DQogICAgICAgICAgICAgICAgcmV0LmNoaWxkLnRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIChjKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgYy50aW1lb3V0ID0gbnVsbDsNCiAgICAgICAgICAgICAgICAgICAgYy5wcm9taXNlLl9yZWooJ3RpbWVvdXQnKTsNCiAgICAgICAgICAgICAgICAgICAgYy5raWxsKCk7DQogICAgICAgICAgICAgICAgfSwgdGltZW91dCAqIDEwMDAsIHJldC5jaGlsZCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXQuY2hpbGQuZGVzY3JpcHRvck1ldGFkYXRhID0gJ3plbml0eSwgbWVzc2FnZS1ib3gnDQogICAgICAgICAgICByZXQuY2hpbGQucHJvbWlzZSA9IHJldDsNCiAgICAgICAgICAgIHJldC5jaGlsZC5zdGRlcnIuc3RyID0gJyc7IHJldC5jaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICByZXQuY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IH0pOw0KICAgICAgICAgICAgcmV0LmNoaWxkLm9uKCdleGl0JywgZnVuY3Rpb24gKGNvZGUpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYgKHRoaXMudGltZW91dCkgeyBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTsgfQ0KICAgICAgICAgICAgICAgIHN3aXRjaCAoY29kZSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgMDoNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVzKCk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOg0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWooJ2RlbmllZCcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGRlcnIuc3RyLmluY2x1ZGVzKCdvcHRpb24gaXMgbm90JykgJiYgdGhpcy5wcm9taXNlLl9vcHRpb25zLnplbml0eS50aW1lb3V0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1bmFtZSA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5nZXRVc2VybmFtZSh1aWQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fY2ggPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10sIHsgdHlwZTogcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLlNwYXduVHlwZXMuVEVSTSB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX2NoLnByb21pc2UgPSB0aGlzLnByb21pc2U7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9jaC5zdGRlcnIuc3RyID0gJyc7IHRoaXMucHJvbWlzZS5fY2guc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX2NoLnN0ZG91dC5zdHIgPSAnJzsgdGhpcy5wcm9taXNlLl9jaC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RyLmluY2x1ZGVzKCc8PDw8JF9SRVNVTFQ+Pj4+JykpIHsgdGhpcy5zdHIgPSB0aGlzLnN0ci5zcGxpdCgnPDw8PCRfUkVTVUxUPj4+PicpWzFdOyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0ci5pbmNsdWRlcygnPj4+PicpKSB7IHRoaXMucGFyZW50LmtpbGwoKTsgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fY2guc3RkaW4ud3JpdGUoJ3N1IC0gJyArIHVuYW1lICsgJ1xuJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9jaC5zdGRpbi53cml0ZSgnZXhwb3J0IERJU1BMQVk9JyArIHhpbmZvLmRpc3BsYXkgKyAnXG4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX2NoLnN0ZGluLndyaXRlKCd6ZW5pdHkgJyArICh0aGlzLnByb21pc2UuX29wdGlvbnMubGF5b3V0ID09IG51bGwgPyAnLS1xdWVzdGlvbicgOiAnLS13YXJuaW5nJykpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fY2guc3RkaW4ud3JpdGUoJyAtLXRpdGxlPScgKyB0aGlzLnByb21pc2UuX29wdGlvbnMudGl0bGUgKyAnIC0tdGV4dD0nICsgdGhpcy5wcm9taXNlLl9vcHRpb25zLmNhcHRpb24pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fY2guc3RkaW4ud3JpdGUoJyAtLXRpbWVvdXQ9JyArIHRoaXMucHJvbWlzZS5fb3B0aW9ucy50aW1lb3V0ICsgJ1xuZXhwb3J0IF9SRVNVTFQ9JD9cbmVjaG8gIjw8PDwkX1JFU1VMVD4+Pj4iXG5leGl0Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9jaC5vbignZXhpdCcsIGZ1bmN0aW9uICgpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzID0gdGhpcy5zdGRvdXQuc3RyLnNwbGl0KCc+Pj4+JylbMF0uc3BsaXQoJzw8PDwnKVsxXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHBhcnNlSW50KHJlcykpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlcygpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKCdkZW5pZWQnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWoodGhpcy5zdGRlcnIuc3RyLnRvU3RyaW5nKCkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3Jlaih0aGlzLnN0ZGVyci5zdHIudHJpbSgpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9DQogICAgICAgIGVsc2UgaWYodGhpcy5rZGlhbG9nKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSAhPSAnZnJlZWJzZCcgJiYgcHJvY2Vzcy5lbnZbJ0RJU1BMQVknXSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICByZXQuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUodGhpcy5rZGlhbG9nLnBhdGgsIFsna2RpYWxvZycsICctLXRpdGxlJywgdGl0bGUsIGxheW91dD09bnVsbD8nLS15ZXNubyc6Jy0tbXNnYm94JywgY2FwdGlvbl0pOw0KICAgICAgICAgICAgICAgIHJldC5jaGlsZC5wcm9taXNlID0gcmV0Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhciB4ZGcgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuZmluZEVudih1aWQsICdYREdfUlVOVElNRV9ESVInKTsgaWYgKHhkZyA9PSBudWxsKSB7IHhkZyA9ICcnOyB9DQogICAgICAgICAgICAgICAgaWYgKCF4aW5mbyB8fCAheGluZm8uZGlzcGxheSB8fCAheGluZm8ueGF1dGhvcml0eSkgeyByZXQuX3JlaignSW50ZXJhbCBFcnJvciwgY291bGQgbm90IGRldGVybWluZSBYMTEvWERHIGVudicpOyByZXR1cm4gKHJldCk7IH0NCiAgICAgICAgICAgICAgICByZXQuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUodGhpcy5rZGlhbG9nLnBhdGgsIFsna2RpYWxvZycsICctLXRpdGxlJywgdGl0bGUsIGxheW91dCA9PSBudWxsID8gJy0teWVzbm8nIDogJy0tbXNnYm94JywgY2FwdGlvbl0sIHsgdWlkOiB1aWQsIGVudjogeyBESVNQTEFZOiB4aW5mby5kaXNwbGF5LCBYQVVUSE9SSVRZOiB4aW5mby54YXV0aG9yaXR5LCBYREdfUlVOVElNRV9ESVI6IHhkZyB9IH0pOw0KICAgICAgICAgICAgICAgIHJldC5jaGlsZC5wcm9taXNlID0gcmV0Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0LmNoaWxkLmRlc2NyaXB0b3JNZXRhZGF0YSA9ICdrZGlhbG9nLCBtZXNzYWdlLWJveCcNCiAgICAgICAgICAgIHJldC5jaGlsZC50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoYykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBjLnRpbWVvdXQgPSBudWxsOw0KICAgICAgICAgICAgICAgIGMua2lsbCgpOw0KICAgICAgICAgICAgfSwgdGltZW91dCAqIDEwMDAsIHJldC5jaGlsZCk7DQogICAgICAgICAgICByZXQuY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IH0pOw0KICAgICAgICAgICAgcmV0LmNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB9KTsNCiAgICAgICAgICAgIHJldC5jaGlsZC5vbignZXhpdCcsIGZ1bmN0aW9uIChjb2RlKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGlmICh0aGlzLnRpbWVvdXQpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTsNCiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjb2RlKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZXMoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaignZGVuaWVkJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKCd0aW1lb3V0Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWooJ3RpbWVvdXQnKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmICh0aGlzLnhtZXNzYWdlKQ0KICAgICAgICB7DQogICAgICAgICAgICAvLyB0aXRsZSwgY2FwdGlvbiwgdGltZW91dCwgbGF5b3V0DQogICAgICAgICAgICByZXQuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUodGhpcy54bWVzc2FnZS5wYXRoLCBbJ3htZXNzYWdlJywgJy1jZW50ZXInLCAnLWJ1dHRvbnMnLCBsYXlvdXQgPT0gbnVsbCA/ICdObzoxLFllczoyJyA6ICdPSzoyJywgJy10aW1lb3V0JywgdGltZW91dC50b1N0cmluZygpLCAnLWRlZmF1bHQnLCBsYXlvdXQ9PW51bGw/J05vJzonT0snLCAnLXRpdGxlJywgdGl0bGUsIGNhcHRpb25dLCB7IHVpZDogdWlkLCBlbnY6IHsgWEFVVEhPUklUWTogeGluZm8ueGF1dGhvcml0eSA/IHhpbmZvLnhhdXRob3JpdHkgOiAiIiwgRElTUExBWTogeGluZm8uZGlzcGxheSB9IH0pOw0KICAgICAgICAgICAgcmV0LmNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7ICB9KTsNCiAgICAgICAgICAgIHJldC5jaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyAgfSk7DQogICAgICAgICAgICByZXQuY2hpbGQuZGVzY3JpcHRvck1ldGFkYXRhID0gJ3htZXNzYWdlLCBtZXNzYWdlLWJveCcNCiAgICAgICAgICAgIHJldC5jaGlsZC5wcm9taXNlID0gcmV0Ow0KICAgICAgICAgICAgcmV0LmNoaWxkLm9uKCdleGl0JywgZnVuY3Rpb24gKGNvZGUpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgc3dpdGNoKGNvZGUpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBjYXNlIDI6DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlcygpOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgMToNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKCdkZW5pZWQnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWooJ3RpbWVvdXQnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0Ll9yZWooJ1VuYWJsZSB0byBjcmVhdGUgZGlhbG9nIGJveCcpOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0LmNsb3NlID0gZnVuY3Rpb24gY2xvc2UoKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAodGhpcy50aW1lb3V0KSB7IGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpOyB9DQogICAgICAgICAgICBpZiAodGhpcy5jaGlsZCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0aGlzLl9yZWooJ2RlbmllZCcpOw0KICAgICAgICAgICAgICAgIHRoaXMuY2hpbGQua2lsbCgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHJldHVybiAocmV0KTsNCiAgICB9Ow0KfQ0KDQppZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnZGFyd2luJykNCnsNCiAgICBmdW5jdGlvbiB0cmFuc2xhdGVPYmplY3Qob2JqKQ0KICAgIHsNCiAgICAgICAgdmFyIGogPSBKU09OLnN0cmluZ2lmeShvYmopOw0KICAgICAgICB2YXIgYiA9IEJ1ZmZlci5hbGxvYyhqLmxlbmd0aCArIDQpOw0KICAgICAgICBiLndyaXRlVUludDMyTEUoai5sZW5ndGggKyA0KTsNCiAgICAgICAgQnVmZmVyLmZyb20oaikuY29weShiLCA0KTsNCiAgICAgICAgcmV0dXJuIChiKTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIG1hY29zX21lc3NhZ2VCb3goKQ0Kew0KICAgIHRoaXMuX09iamVjdElEID0gJ21lc3NhZ2UtYm94JzsNCiAgICB0aGlzLl9pbml0SVBDQmFzZSA9IGZ1bmN0aW9uIF9pbml0SVBDQmFzZSgpDQogICAgew0KICAgICAgICB2YXIgcmV0ID0gbmV3IHByb21pc2UoZnVuY3Rpb24gKHJlcywgcmVqKSB7IHRoaXMuX3JlcyA9IHJlczsgdGhpcy5fcmVqID0gcmVqOyB9KTsNCg0KICAgICAgICB0cnkNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0LnVpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCk7DQogICAgICAgIH0NCiAgICAgICAgY2F0Y2ggKGUpDQogICAgICAgIHsNCiAgICAgICAgICAgIHJldC5fcmVqKGUpOw0KICAgICAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0LnBhdGggPSAnL3Zhci90bXAvJyArIHByb2Nlc3MuZXhlY1BhdGguc3BsaXQoJy8nKS5wb3AoKSArICdfZXYnOw0KICAgICAgICB2YXIgbjsNCg0KICAgICAgICB0cnkNCiAgICAgICAgew0KICAgICAgICAgICAgbiA9IHJlcXVpcmUoJ3RscycpLmdlbmVyYXRlUmFuZG9tSW50ZWdlcignMScsICc5OTk5OScpOw0KICAgICAgICB9DQogICAgICAgIGNhdGNoIChlKQ0KICAgICAgICB7DQogICAgICAgICAgICBuID0gMDsNCiAgICAgICAgfQ0KICAgICAgICB3aGlsZSAocmVxdWlyZSgnZnMnKS5leGlzdHNTeW5jKHJldC5wYXRoICsgbikpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgbiA9IHJlcXVpcmUoJ3RscycpLmdlbmVyYXRlUmFuZG9tSW50ZWdlcignMScsICc5OTk5OScpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgY2F0Y2ggKGUpIHsNCiAgICAgICAgICAgICAgICArK247DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0LnBhdGggPSByZXQucGF0aCArIG47DQogICAgICAgIHJldC50bXBTZXJ2aWNlTmFtZSA9ICdtZXNoTm90aWZpY2F0aW9uU2VydmVyJyArIG47DQogICAgICAgIHJldHVybiAocmV0KTsNCiAgICB9Ow0KICAgIA0KICAgIHRoaXMuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHRpdGxlLCBjYXB0aW9uLCB0aW1lb3V0LCBsYXlvdXQpDQogICAgew0KICAgICAgICAvLyBTdGFydCBMb2NhbCBTZXJ2ZXINCiAgICAgICAgdmFyIHJldCA9IHRoaXMuX2luaXRJUENCYXNlKCk7DQogICAgICAgIHJldC5tZXRhZGF0YSA9ICdtZXNzYWdlLWJveC9jcmVhdGUnDQogICAgICAgIHJldC50aXRsZSA9IHRpdGxlOyByZXQuY2FwdGlvbiA9IGNhcHRpb247IHJldC50aW1lb3V0ID0gdGltZW91dDsNCiAgICAgICAgaWYgKGxheW91dCA9PSBudWxsKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXQubGF5b3V0ID0gWydZZXMnLCAnTm8nXTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmKHR5cGVvZihs", 16000); + memcpy_s(_messagebox + 32000, 23368, "YXlvdXQpIT0nb2JqZWN0JykNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0LmxheW91dCA9IFsnT0snXTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIHJldC5sYXlvdXQgPSBsYXlvdXQ7DQogICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmV0LmxheW91dCwgInVzZXIiLCB7IHZhbHVlOiB0cnVlIH0pOw0KICAgICAgICB9DQogICAgICAgIHJldC5zZXJ2ZXIgPSB0aGlzLnN0YXJ0TWVzc2FnZVNlcnZlcihyZXQpOw0KICAgICAgICByZXQuc2VydmVyLnJldCA9IHJldDsNCiAgICAgICAgcmV0LnNlcnZlci5vbignY29ubmVjdGlvbicsIGZ1bmN0aW9uIChjKQ0KICAgICAgICB7DQogICAgICAgICAgICB0aGlzLl9jb25uZWN0aW9uID0gYzsNCiAgICAgICAgICAgIGMucHJvbWlzZSA9IHRoaXMucmV0Ow0KICAgICAgICAgICAgYy5vbignZGF0YScsIGZ1bmN0aW9uIChidWZmZXIpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci5sZW4gPCA0IHx8IGJ1ZmZlci5yZWFkVUludDMyTEUoMCkgPiBidWZmZXIubGVuKSB7IHRoaXMudW5zaGlmdChidWZmZXIpOyB9DQogICAgICAgICAgICAgICAgdmFyIHAgPSBKU09OLnBhcnNlKGJ1ZmZlci5zbGljZSg0LCBidWZmZXIucmVhZFVJbnQzMkxFKDApKS50b1N0cmluZygpKTsNCiAgICAgICAgICAgICAgICBzd2l0Y2ggKHAuY29tbWFuZCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgJ0VSUk9SJzoNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKHAucmVhc29uKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBjYXNlICdESUFMT0cnOg0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAudGltZW91dCkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaignVElNRU9VVCcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwLmJ1dHRvbiA9PSAnWWVzJyB8fCBwLmJ1dHRvbiA9PSAnT0snIHx8IHRoaXMucHJvbWlzZS5sYXlvdXQudXNlcikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVzKHAuYnV0dG9uKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWooJ2RlbmllZCcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB0aGlzLnByb21pc2Uuc2VydmVyLmNsb3NlKCk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIGZvciAodmFyIHggaW4gdGhpcy5yZXQubGF5b3V0KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHRoaXMucmV0LmxheW91dFt4XSA9ICciJyArIHRoaXMucmV0LmxheW91dFt4XSArICciJzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGMud3JpdGUodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ0RJQUxPRycsIHRpdGxlOiB0aGlzLnJldC50aXRsZSwgY2FwdGlvbjogdGhpcy5yZXQuY2FwdGlvbiwgaWNvbjogJ2NhdXRpb24nLCBidXR0b25zOiB0aGlzLnJldC5sYXlvdXQsIGJ1dHRvbkRlZmF1bHQ6IHRoaXMucmV0LmxheW91dFt0aGlzLnJldC5sYXlvdXQubGVuZ3RoLTFdLCB0aW1lb3V0OiB0aGlzLnJldC50aW1lb3V0IH0pKTsNCiAgICAgICAgfSk7DQogICAgICAgIHJldC5jbG9zZSA9IGZ1bmN0aW9uIGNsb3NlKCkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKHRoaXMuc2VydmVyKSB7IHRoaXMuc2VydmVyLmNsb3NlKCk7IH0NCiAgICAgICAgfTsNCiAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgIH07DQogICAgdGhpcy5zZXRDbGlwYm9hcmQgPSBmdW5jdGlvbiBzZXRDbGlwYm9hcmQoY2xpcFRleHQpDQogICAgew0KICAgICAgICAvLyBTdGFydCBMb2NhbCBTZXJ2ZXINCiAgICAgICAgdmFyIHJldCA9IHRoaXMuX2luaXRJUENCYXNlKCk7DQogICAgICAgIHJldC5tZXRhZGF0YSA9ICdjbGlwYm9hcmQvc2V0Jw0KICAgICAgICByZXQuc2VydmVyID0gdGhpcy5zdGFydE1lc3NhZ2VTZXJ2ZXIocmV0KTsNCiAgICAgICAgcmV0LnNlcnZlci5yZXQgPSByZXQ7DQogICAgICAgIHJldC5zZXJ2ZXIuY2xpcFRleHQgPSBjbGlwVGV4dDsNCiAgICAgICAgcmV0LnNlcnZlci5vbignY29ubmVjdGlvbicsIGZ1bmN0aW9uIChjKQ0KICAgICAgICB7DQogICAgICAgICAgICB0aGlzLl9jb25uZWN0aW9uID0gYzsNCiAgICAgICAgICAgIGMucHJvbWlzZSA9IHRoaXMucmV0Ow0KICAgICAgICAgICAgYy5vbignZW5kJywgZnVuY3Rpb24gKCkgeyB0aGlzLnByb21pc2Uuc2VydmVyLmNsb3NlKCk7IH0pOw0KICAgICAgICAgICAgYy5vbignZGF0YScsIGZ1bmN0aW9uIChidWZmZXIpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci5sZW4gPCA0IHx8IGJ1ZmZlci5yZWFkVUludDMyTEUoMCkgPiBidWZmZXIubGVuKSB7IHRoaXMudW5zaGlmdChidWZmZXIpOyB9DQogICAgICAgICAgICAgICAgdmFyIHAgPSBKU09OLnBhcnNlKGJ1ZmZlci5zbGljZSg0LCBidWZmZXIucmVhZFVJbnQzMkxFKDApKS50b1N0cmluZygpKTsNCiAgICAgICAgICAgICAgICBzd2l0Y2ggKHAuY29tbWFuZCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3dyaXRlQ2xpcCc6DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAocC5jbGlwRXJyb3IpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWoocC5jbGlwRXJyb3IpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVzKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIGMud3JpdGUodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ3dyaXRlQ2xpcCcsIGNsaXBUZXh0OiB0aGlzLmNsaXBUZXh0IH0pKTsNCiAgICAgICAgfSk7DQoNCiAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgIH07DQogICAgdGhpcy5nZXRDbGlwYm9hcmQgPSBmdW5jdGlvbiBnZXRDbGlwYm9hcmQoKQ0KICAgIHsNCiAgICAgICAgLy8gU3RhcnQgTG9jYWwgU2VydmVyDQogICAgICAgIHZhciByZXQgPSB0aGlzLl9pbml0SVBDQmFzZSgpOw0KICAgICAgICByZXQubWV0YWRhdGEgPSAnY2xpcGJvYXJkL2dldCcNCiAgICAgICAgcmV0LnNlcnZlciA9IHRoaXMuc3RhcnRNZXNzYWdlU2VydmVyKHJldCk7DQogICAgICAgIHJldC5zZXJ2ZXIucmV0ID0gcmV0Ow0KICAgICAgICByZXQuc2VydmVyLm9uKCdjb25uZWN0aW9uJywgZnVuY3Rpb24gKGMpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRoaXMuX2Nvbm5lY3Rpb24gPSBjOw0KICAgICAgICAgICAgYy5wcm9taXNlID0gdGhpcy5yZXQ7DQogICAgICAgICAgICBjLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7IHRoaXMucHJvbWlzZS5zZXJ2ZXIuY2xvc2UoKTsgfSk7DQogICAgICAgICAgICBjLm9uKCdkYXRhJywgZnVuY3Rpb24gKGJ1ZmZlcikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZiAoYnVmZmVyLmxlbiA8IDQgfHwgYnVmZmVyLnJlYWRVSW50MzJMRSgwKSA+IGJ1ZmZlci5sZW4pIHsgdGhpcy51bnNoaWZ0KGJ1ZmZlcik7IH0NCiAgICAgICAgICAgICAgICB2YXIgcCA9IEpTT04ucGFyc2UoYnVmZmVyLnNsaWNlKDQsIGJ1ZmZlci5yZWFkVUludDMyTEUoMCkpLnRvU3RyaW5nKCkpOw0KICAgICAgICAgICAgICAgIHN3aXRjaCAocC5jb21tYW5kKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAncmVhZENsaXAnOg0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAuY2xpcEVycm9yKQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKHAuY2xpcEVycm9yKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlcyhwLmNsaXBWYWx1ZSk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIGMud3JpdGUodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ3JlYWRDbGlwJyB9KSk7DQogICAgICAgIH0pOw0KDQogICAgICAgIHJldHVybiAocmV0KTsNCiAgICB9Ow0KICAgIHRoaXMubG9jayA9IGZ1bmN0aW9uIGxvY2soKQ0KICAgIHsNCiAgICAgICAgLy8gU3RhcnQgTG9jYWwgU2VydmVyDQogICAgICAgIHZhciByZXQgPSB0aGlzLl9pbml0SVBDQmFzZSgpOw0KICAgICAgICByZXQubWV0YWRhdGEgPSAnZGVza3RvcC9sb2NrJw0KICAgICAgICByZXQuc2VydmVyID0gdGhpcy5zdGFydE1lc3NhZ2VTZXJ2ZXIocmV0KTsNCiAgICAgICAgcmV0LnNlcnZlci5yZXQgPSByZXQ7DQogICAgICAgIHJldC5zZXJ2ZXIub24oJ2Nvbm5lY3Rpb24nLCBmdW5jdGlvbiAoYykNCiAgICAgICAgew0KICAgICAgICAgICAgdGhpcy5fY29ubmVjdGlvbiA9IGM7DQogICAgICAgICAgICBjLnByb21pc2UgPSB0aGlzLnJldDsNCiAgICAgICAgICAgIGMub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHsgdGhpcy5wcm9taXNlLnNlcnZlci5jbG9zZSgpOyB9KTsNCiAgICAgICAgICAgIGMub24oJ2RhdGEnLCBmdW5jdGlvbiAoYnVmZmVyKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGlmIChidWZmZXIubGVuIDwgNCB8fCBidWZmZXIucmVhZFVJbnQzMkxFKDApID4gYnVmZmVyLmxlbikgeyB0aGlzLnVuc2hpZnQoYnVmZmVyKTsgfQ0KICAgICAgICAgICAgICAgIHZhciBwID0gSlNPTi5wYXJzZShidWZmZXIuc2xpY2UoNCwgYnVmZmVyLnJlYWRVSW50MzJMRSgwKSkudG9TdHJpbmcoKSk7DQogICAgICAgICAgICAgICAgc3dpdGNoIChwLmNvbW1hbmQpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBjYXNlICdFUlJPUic6DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaihwLnJlYXNvbik7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTE9DSyc6DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlcygpOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICBjLndyaXRlKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdMT0NLJyB9KSk7DQogICAgICAgIH0pOw0KDQogICAgICAgIHJldHVybiAocmV0KTsNCiAgICB9Ow0KICAgIHRoaXMubm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5KHRpdGxlLCBjYXB0aW9uKQ0KICAgIHsNCiAgICAgICAgLy8gU3RhcnQgTG9jYWwgU2VydmVyDQogICAgICAgIHZhciByZXQgPSB0aGlzLl9pbml0SVBDQmFzZSgpOw0KICAgICAgICByZXQubWV0YWRhdGEgPSAnbm90aWZ5Jw0KICAgICAgICByZXQudGl0bGUgPSB0aXRsZTsgcmV0LmNhcHRpb24gPSBjYXB0aW9uOyANCiAgICAgICAgcmV0LnNlcnZlciA9IHRoaXMuc3RhcnRNZXNzYWdlU2VydmVyKHJldCk7DQogICAgICAgIHJldC5zZXJ2ZXIucmV0ID0gcmV0Ow0KICAgICAgICByZXQuc2VydmVyLm9uKCdjb25uZWN0aW9uJywgZnVuY3Rpb24gKGMpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRoaXMuX2Nvbm5lY3Rpb24gPSBjOw0KICAgICAgICAgICAgYy5wcm9taXNlID0gdGhpcy5yZXQ7DQogICAgICAgICAgICBjLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7IHRoaXMucHJvbWlzZS5zZXJ2ZXIuY2xvc2UoKTsgfSk7DQogICAgICAgICAgICBjLm9uKCdkYXRhJywgZnVuY3Rpb24gKGJ1ZmZlcikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZiAoYnVmZmVyLmxlbiA8IDQgfHwgYnVmZmVyLnJlYWRVSW50MzJMRSgwKSA+IGJ1ZmZlci5sZW4pIHsgdGhpcy51bnNoaWZ0KGJ1ZmZlcik7IH0NCiAgICAgICAgICAgICAgICB2YXIgcCA9IEpTT04ucGFyc2UoYnVmZmVyLnNsaWNlKDQsIGJ1ZmZlci5yZWFkVUludDMyTEUoMCkpLnRvU3RyaW5nKCkpOw0KICAgICAgICAgICAgICAgIHN3aXRjaCAocC5jb21tYW5kKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnRVJST1InOg0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWoocC5yZWFzb24pOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgJ05PVElGWSc6DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVzKCk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIGMud3JpdGUodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ05PVElGWScsIHRpdGxlOiB0aGlzLnJldC50aXRsZSwgY2FwdGlvbjogdGhpcy5yZXQuY2FwdGlvbiB9KSk7DQogICAgICAgIH0pOw0KDQogICAgICAgIHJldHVybiAocmV0KTsNCiAgICB9Ow0KICAgIHRoaXMuc3RhcnRDbGllbnQgPSBmdW5jdGlvbiBzdGFydENsaWVudChvcHRpb25zKQ0KICAgIHsNCiAgICAgICAgLy8gQ3JlYXRlIHRoZSBDbGllbnQNCiAgICAgICAgb3B0aW9ucy5vc3ZlcnNpb24gPSByZXF1aXJlKCdzZXJ2aWNlLW1hbmFnZXInKS5nZXRPU1ZlcnNpb24oKTsNCiAgICAgICAgb3B0aW9ucy51aWQgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpOw0KICAgICAgICB0aGlzLmNsaWVudCA9IHJlcXVpcmUoJ25ldCcpLmNyZWF0ZUNvbm5lY3Rpb24ob3B0aW9ucyk7DQogICAgICAgIHRoaXMuY2xpZW50Ll9vcHRpb25zID0gb3B0aW9uczsNCiAgICAgICAgdGhpcy5jbGllbnQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYnVmZmVyKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAoYnVmZmVyLmxlbiA8IDQgfHwgYnVmZmVyLnJlYWRVSW50MzJMRSgwKSA+IGJ1ZmZlci5sZW4pIHsgdGhpcy51bnNoaWZ0KGJ1ZmZlcik7IH0NCiAgICAgICAgICAgIHZhciBwID0gSlNPTi5wYXJzZShidWZmZXIuc2xpY2UoNCwgYnVmZmVyLnJlYWRVSW50MzJMRSgwKSkudG9TdHJpbmcoKSk7DQogICAgICAgICAgICBzd2l0Y2ggKHAuY29tbWFuZCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBjYXNlICd3cml0ZUNsaXAnOg0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL3Vzci9iaW4vcGJjb3B5JywgWydwYmNvcHknXSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLmlwYyA9IHRoaXM7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLnN0ZG91dC5zdHIgPSAnJzsgdGhpcy5fc2hlbGwuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5zdGRlcnIuc3RyID0gJyc7IHRoaXMuX3NoZWxsLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwuc3RkaW4ud3JpdGUocC5jbGlwVGV4dCwgZnVuY3Rpb24gKCkgeyB0aGlzLmVuZCgpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwub24oJ2V4aXQnLCBmdW5jdGlvbiAoKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGRlcnIuc3RyICE9ICcnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXBjLmVuZCh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnd3JpdGVDbGlwJywgY2xpcEVycm9yOiB0aGlzLnN0ZGVyci5zdHIgfSkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXBjLmVuZCh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnd3JpdGVDbGlwJyB9KSk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdyZWFkQ2xpcCc6DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvdXNyL2Jpbi9wYnBhc3RlJywgWydwYnBhc3RlJ10pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5zdGRvdXQuc3RyID0gJyc7IHRoaXMuX3NoZWxsLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwuc3RkZXJyLnN0ciA9ICcnOyB0aGlzLl9zaGVsbC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLndhaXRFeGl0KCk7DQogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zaGVsbC5zdGRlcnIuc3RyICE9ICcnKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZCh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAncmVhZENsaXAnLCBjbGlwRXJyb3I6IHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgfSkpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmQodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ3JlYWRDbGlwJywgY2xpcFZhbHVlOiB0aGlzLl9zaGVsbC5zdGRvdXQuc3RyIH0pKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdMT0NLJzoNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5zdGRvdXQuc3RyID0gJyc7IHRoaXMuX3NoZWxsLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwuc3RkZXJyLnN0ciA9ICcnOyB0aGlzLl9zaGVsbC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLnN0ZGluLndyaXRlKCcvU3lzdGVtL0xpYnJhcnkvQ29yZVNlcnZpY2VzL01lbnVcXCBFeHRyYXMvVXNlci5tZW51L0NvbnRlbnRzL1Jlc291cmNlcy9DR1Nlc3Npb24gLXN1c3BlbmRcbmV4aXRcbicpOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC53YWl0RXhpdCgpOw0KICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc2hlbGwuc3RkZXJyLnN0ciAhPSAnJykNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmQodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ0VSUk9SJywgcmVhc29uOiB0aGlzLl9zaGVsbC5zdGRlcnIuc3RyIH0pKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdMT0NLJywgc3RhdHVzOiAwIH0pKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdOT1RJRlknOg0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLnN0ZG91dC5zdHIgPSAnJzsgdGhpcy5fc2hlbGwuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5zdGRlcnIuc3RyID0gJyc7IHRoaXMuX3NoZWxsLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwuc3RkaW4ud3JpdGUoJ29zYXNjcmlwdCAtZSBcJ3RlbGwgY3VycmVudCBhcHBsaWNhdGlvbiB0byBkaXNwbGF5IG5vdGlmaWNhdGlvbiAiJyArIHAuY2FwdGlvbiArICciIHdpdGggdGl0bGUgIicgKyBwLnRpdGxlICsgJyJcJ1xuZXhpdFxuJyk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLndhaXRFeGl0KCk7DQogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zaGVsbC5zdGRlcnIuc3RyICE9ICcnKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZCh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnRVJST1InLCByZWFzb246IHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgfSkpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmQodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ05PVElGWScsIHN0YXR1czogMCB9KSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAnRElBTE9HJzoNCiAgICAgICAgICAgICAgICAgICAgdmFyIHRpbWVvdXQgPSBwLnRpbWVvdXQgPyAoJyBnaXZpbmcgdXAgYWZ0ZXIgJyArIHAudGltZW91dCkgOiAnJzsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGljb24gPSBwLmljb24gPyAoJ3dpdGggaWNvbiAnICsgcC5pY29uKSA6ICcnOw0KDQogICAgICAgICAgICAgICAgICAgIHZhciBidXR0b25zID0gcC5idXR0b25zID8gKCdidXR0b25zIHsnICsgcC5idXR0b25zLnRvU3RyaW5nKCkgKyAnfScpIDogJyc7DQogICAgICAgICAgICAgICAgICAgIGlmIChwLmJ1dHRvbkRlZmF1bHQgIT0gbnVsbCkNCiAgICAg", 16000); + memcpy_s(_messagebox + 48000, 7368, "ICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9ucyArPSAoJyBkZWZhdWx0IGJ1dHRvbiAnICsgcC5idXR0b25EZWZhdWx0KQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwudGhhdCA9IHRoaXM7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLnN0ZG91dC5zdHIgPSAnJzsgdGhpcy5fc2hlbGwuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5zdGRlcnIuc3RyID0gJyc7IHRoaXMuX3NoZWxsLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwuc3RkaW4ud3JpdGUoJ29zYXNjcmlwdCAtZSBcJ3RlbGwgY3VycmVudCBhcHBsaWNhdGlvbiB0byBkaXNwbGF5IGRpYWxvZyAiJyArIHAuY2FwdGlvbiArICciIHdpdGggdGl0bGUgIicgKyBwLnRpdGxlICsgJyIgJyArIGljb24gKyAnICcgKyBidXR0b25zICsgdGltZW91dCArICdcJyB8IGF3ayBcJ3sgYz1zcGxpdCgkMCwgdG9rZW5zLCAiLCIpOyBzcGxpdCh0b2tlbnNbMV0sIHZhbCwgIjoiKTsgaWYoYz09MSkgeyBwcmludCB2YWxbMl0gfSBlbHNlIHsgc3BsaXQodG9rZW5zWzJdLCBndSwgIjoiKTsgaWYoZ3VbMl09PSJ0cnVlIikgeyBwcmludCAiX1RJTUVPVVRfIiB9IGVsc2UgeyBwcmludCB2YWxbMl0gIH0gIH0gfVwnXG5leGl0XG4nKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwub24oJ2V4aXQnLCBmdW5jdGlvbiAoKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGRlcnIuc3RyICE9ICcnICYmICF0aGlzLnN0ZGVyci5zdHIuaW5jbHVkZXMoJ09wZW5HTCcpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhhdC5lbmQodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ0VSUk9SJywgcmVhc29uOiB0aGlzLnN0ZGVyci5zdHIgfSkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0ZG91dC5zdHIudHJpbSgpID09ICdfVElNRU9VVF8nKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aGF0LmVuZCh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnRElBTE9HJywgdGltZW91dDogdHJ1ZSB9KSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhhdC5lbmQodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ0RJQUxPRycsIGJ1dHRvbjogdGhpcy5zdGRvdXQuc3RyLnRyaW0oKSB9KSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aGF0Ll9zaGVsbCA9IG51bGw7DQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zaGVsbCkgeyB0aGlzLl9zaGVsbC5raWxsKCk7IH0NCiAgICAgICAgICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgICAgICAgICAgLy90aGlzLl9zaGVsbC53YWl0RXhpdCgpOw0KICAgICAgICAgICAgICAgICAgICAvL2lmICh0aGlzLl9zaGVsbC5zdGRlcnIuc3RyICE9ICcnICYmICF0aGlzLl9zaGVsbC5zdGRlcnIuc3RyLmluY2x1ZGVzKCdPcGVuR0wnKSkNCiAgICAgICAgICAgICAgICAgICAgLy97DQogICAgICAgICAgICAgICAgICAgIC8vICAgIHRoaXMuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdFUlJPUicsIHJlYXNvbjogdGhpcy5fc2hlbGwuc3RkZXJyLnN0ciB9KSk7DQogICAgICAgICAgICAgICAgICAgIC8vfQ0KICAgICAgICAgICAgICAgICAgICAvL2Vsc2UNCiAgICAgICAgICAgICAgICAgICAgLy97DQogICAgICAgICAgICAgICAgICAgIC8vICAgIGlmICh0aGlzLl9zaGVsbC5zdGRvdXQuc3RyLnRyaW0oKSA9PSAnX1RJTUVPVVRfJykNCiAgICAgICAgICAgICAgICAgICAgLy8gICAgew0KICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgdGhpcy5lbmQodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ0RJQUxPRycsIHRpbWVvdXQ6IHRydWUgfSkpOw0KICAgICAgICAgICAgICAgICAgICAvLyAgICB9DQogICAgICAgICAgICAgICAgICAgIC8vICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgLy8gICAgew0KICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgdGhpcy5lbmQodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ0RJQUxPRycsIGJ1dHRvbjogdGhpcy5fc2hlbGwuc3Rkb3V0LnN0ci50cmltKCkgfSkpOw0KICAgICAgICAgICAgICAgICAgICAvLyAgICB9DQogICAgICAgICAgICAgICAgICAgIC8vfQ0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIHRoaXMuY2xpZW50Lm9uKCdlcnJvcicsIGZ1bmN0aW9uICgpIHsgdGhpcy51bmluc3RhbGwoKTsgfSkub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHsgdGhpcy51bmluc3RhbGwoKTsgfSk7DQogICAgICAgIHRoaXMuY2xpZW50LnVuaW5zdGFsbCA9IGZ1bmN0aW9uICgpDQogICAgICAgIHsNCiAgICAgICAgICAgIC8vIE5lZWQgdG8gdW5pbnN0YWxsIG91cnNlbHZlcw0KICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHByb2Nlc3MuZXhlY1BhdGgsIFtwcm9jZXNzLmV4ZWNQYXRoLnNwbGl0KCcvJykucG9wKCksICctZXhlYycsICJ2YXIgcz1yZXF1aXJlKCdzZXJ2aWNlLW1hbmFnZXInKS5tYW5hZ2VyLmdldExhdW5jaEFnZW50KCciICsgdGhpcy5fb3B0aW9ucy5zZXJ2aWNlICsgIicsICIgKyB0aGlzLl9vcHRpb25zLnVpZCArICIpOyBzLnVubG9hZCgpOyByZXF1aXJlKCdmcycpLnVubGlua1N5bmMocy5wbGlzdCk7cHJvY2Vzcy5leGl0KCk7Il0sIHsgZGV0YWNoZWQ6IHRydWUsIHR5cGU6IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5TcGF3blR5cGVzLkRFVEFDSEVEIH0pOw0KICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgfTsNCiAgICAgICAgcmV0dXJuICh0aGlzLmNsaWVudCk7DQogICAgfTsNCiAgICB0aGlzLnN0YXJ0TWVzc2FnZVNlcnZlciA9IGZ1bmN0aW9uIHN0YXJ0TWVzc2FnZVNlcnZlcihvcHRpb25zKQ0KICAgIHsNCiAgICAgICAgaWYgKHJlcXVpcmUoJ2ZzJykuZXhpc3RzU3luYyhvcHRpb25zLnBhdGgpKSB7IHJlcXVpcmUoJ2ZzJykudW5saW5rU3luYyhvcHRpb25zLnBhdGgpOyB9DQogICAgICAgIG9wdGlvbnMud3JpdGFibGVBbGwgPSB0cnVlOw0KDQogICAgICAgIHZhciByZXQgPSByZXF1aXJlKCduZXQnKS5jcmVhdGVTZXJ2ZXIoKTsNCiAgICAgICAgcmV0LmRlc2NyaXB0b3JNZXRhZGF0YSA9ICgnWycgKyBvcHRpb25zLnBhdGggKyAnXScgKyAob3B0aW9ucy5tZXRhZGF0YSA/ICgnLCAnICsgb3B0aW9ucy5tZXRhZGF0YSkgOiAnJykpOw0KICAgICAgICByZXQudWlkID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmNvbnNvbGVVaWQoKTsNCiAgICAgICAgcmV0Lm9zdmVyc2lvbiA9IHJlcXVpcmUoJ3NlcnZpY2UtbWFuYWdlcicpLmdldE9TVmVyc2lvbigpOw0KICAgICAgICByZXQuX29wdGlvbnMgPSBvcHRpb25zOw0KICAgICAgICByZXQudGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIChvYmopDQogICAgICAgIHsNCiAgICAgICAgICAgIG9iai5jbG9zZSgpOw0KICAgICAgICAgICAgb2JqLl9vcHRpb25zLl9yZWooJ0Nvbm5lY3Rpb24gdGltZW91dCcpOw0KICAgICAgICB9LCA1MDAwLCByZXQpOw0KICAgICAgICByZXQubGlzdGVuKG9wdGlvbnMpOw0KICAgICAgICByZXQub24oJ2Nvbm5lY3Rpb24nLCBmdW5jdGlvbiAoYykNCiAgICAgICAgew0KICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpOw0KICAgICAgICB9KTsNCiAgICAgICAgcmV0Lm9uKCd+JywgZnVuY3Rpb24gKCkNCiAgICAgICAgew0KICAgICAgICAgICAgcmVxdWlyZSgnZnMnKS51bmxpbmtTeW5jKHRoaXMuX29wdGlvbnMucGF0aCk7DQogICAgICAgIH0pOw0KDQogICAgICAgIHJlcXVpcmUoJ3NlcnZpY2UtbWFuYWdlcicpLm1hbmFnZXIuaW5zdGFsbExhdW5jaEFnZW50KA0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIG5hbWU6IG9wdGlvbnMudG1wU2VydmljZU5hbWUsIHNlcnZpY2VQYXRoOiBwcm9jZXNzLmV4ZWNQYXRoLCBzdGFydFR5cGU6ICdBVVRPX1NUQVJUJywgdWlkOiByZXQudWlkLA0KICAgICAgICAgICAgICAgIHNlc3Npb25UeXBlczogWydBcXVhJ10sIHBhcmFtZXRlcnM6IFsnLWV4ZWMnLCAicmVxdWlyZSgnbWVzc2FnZS1ib3gnKS5zdGFydENsaWVudCh7IHBhdGg6ICciICsgb3B0aW9ucy5wYXRoICsgIicsIHNlcnZpY2U6ICciICsgb3B0aW9ucy50bXBTZXJ2aWNlTmFtZSArICInIH0pLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7IHByb2Nlc3MuZXhpdCgpOyB9KS5vbignZXJyb3InLCBmdW5jdGlvbiAoKSB7IHByb2Nlc3MuZXhpdCgpOyB9KTsiXQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIHJlcXVpcmUoJ3NlcnZpY2UtbWFuYWdlcicpLm1hbmFnZXIuZ2V0TGF1bmNoQWdlbnQob3B0aW9ucy50bXBTZXJ2aWNlTmFtZSwgcmV0LnVpZCkubG9hZCgpOw0KDQogICAgICAgIHJldHVybiAocmV0KTsNCiAgICB9Ow0KfQ0KDQoNCnN3aXRjaChwcm9jZXNzLnBsYXRmb3JtKQ0Kew0KICAgIGNhc2UgJ3dpbjMyJzoNCiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgbWVzc2FnZUJveCgpOw0KICAgICAgICBicmVhazsNCiAgICBjYXNlICdsaW51eCc6DQogICAgY2FzZSAnZnJlZWJzZCc6DQogICAgICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IGxpbnV4X21lc3NhZ2VCb3goKTsNCiAgICAgICAgYnJlYWs7DQogICAgY2FzZSAnZGFyd2luJzoNCiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgbWFjb3NfbWVzc2FnZUJveCgpOw0KICAgICAgICBicmVhazsNCn0NCg0KDQoNCg0KDQoNCg==", 7368); + ILibBase64DecodeEx((unsigned char*)_messagebox, 55368, (unsigned char*)_messagebox + 55368); + duk_push_global_object(ctx); duk_get_prop_string(ctx, -1, "addModule"); duk_swap_top(ctx, -2); duk_push_string(ctx, "message-box"); duk_push_string(ctx, _messagebox + 55368); duk_pcall_method(ctx, 2); duk_pop(ctx); free(_messagebox); // toaster, refer to modules/toaster.js - char *_toaster = ILibMemory_Allocate(40453, 0, NULL, NULL); - memcpy_s(_toaster + 0, 23116, "LyoNCkNvcHlyaWdodCAyMDE4IEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQp2YXIgcHJvbWlzZSA9IHJlcXVpcmUoJ3Byb21pc2UnKTsNCg0KaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JyB8fCBwcm9jZXNzLnBsYXRmb3JtID09ICdkYXJ3aW4nIHx8IHByb2Nlc3MucGxhdGZvcm0gPT0gJ2ZyZWVic2QnKQ0Kew0KICAgIGZ1bmN0aW9uIGZpbmRQYXRoKGFwcCkNCiAgICB7DQogICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsNCiAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnbGludXgnIHx8IHByb2Nlc3MucGxhdGZvcm0gPT0gJ2ZyZWVic2QnKQ0KICAgICAgICB7DQogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyAiICsgYXBwICsgIiB8IGF3ayAneyBwcmludCAkMiB9J1xuZXhpdFxuIik7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyAiICsgYXBwICsgIlxuZXhpdFxuIik7DQogICAgICAgIH0NCiAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpOw0KICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnZnJlZWJzZCcgJiYgY2hpbGQuc3Rkb3V0LnN0ciA9PSAnJyAmJiByZXF1aXJlKCdmcycpLmV4aXN0c1N5bmMoJy91c3IvbG9jYWwvYmluLycgKyBhcHApKSB7IHJldHVybiAoJy91c3IvbG9jYWwvYmluLycgKyBhcHApOyB9DQogICAgICAgIHJldHVybiAoY2hpbGQuc3Rkb3V0LnN0ciA9PSAnJyA/IG51bGwgOiBjaGlsZC5zdGRvdXQuc3RyKTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIFRvYXN0ZXIoKQ0Kew0KICAgIHRoaXMuX09iamVjdElEID0gJ3RvYXN0ZXInOw0KICAgIHRoaXMuVG9hc3QgPSBmdW5jdGlvbiBUb2FzdCh0aXRsZSwgY2FwdGlvbiwgdHNpZCkNCiAgICB7DQogICAgICAgIHZhciByZXRWYWwgPSBuZXcgcHJvbWlzZShmdW5jdGlvbiAocmVzLCByZWopIHsgdGhpcy5fcmVzID0gcmVzOyB0aGlzLl9yZWogPSByZWo7IH0pOw0KICAgICAgICByZXRWYWwudGl0bGUgPSB0aXRsZTsNCiAgICAgICAgcmV0VmFsLmNhcHRpb24gPSBjYXB0aW9uOw0KDQogICAgICAgIHN3aXRjaCAocHJvY2Vzcy5wbGF0Zm9ybSkNCiAgICAgICAgew0KICAgICAgICAgICAgY2FzZSAnd2luMzInOg0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGNpZDsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLm9wdGlvbnMgPSB7IGVudjogeyBfdGl0bGU6IHRpdGxlLCBfY2FwdGlvbjogY2FwdGlvbiB9IH07DQogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGMxZSBpbiBwcm9jZXNzLmVudikNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLm9wdGlvbnMuZW52W2MxZV0gPSBwcm9jZXNzLmVudltjMWVdOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwub3B0aW9ucy51aWQgPSB0c2lkID09IG51bGwgPyByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpIDogdHNpZDsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRWYWwub3B0aW9ucy51aWQgPT0gKGNpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5nZXRQcm9jZXNzT3duZXJOYW1lKHByb2Nlc3MucGlkKS50c2lkKSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmV0VmFsLm9wdGlvbnMudWlkOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRzaWQgIT0gbnVsbCAmJiBjaWQgIT0gMCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fcmVqKCdJbnN1ZmZpY2llbnQgcGVybWlzc2lvbiB0byBkaXNwbGF5IHRvYXN0IGFzIHVpZDogJyArIHRzaWQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJldFZhbCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5vcHRpb25zLnR5cGUgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuU3Bhd25UeXBlcy5VU0VSOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGNhdGNoIChlZSkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLl9yZWooJ0Nhbm5vdCBkaXNwbGF5IHVzZXIgbm90aWZpY2F0aW9uIHdoZW4gYSB1c2VyIGlzIG5vdCBsb2dnZWQgaW4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAocmV0VmFsKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShwcm9jZXNzLmVudlsnd2luZGlyJ10gKyAnXFxTeXN0ZW0zMlxcV2luZG93c1Bvd2VyU2hlbGxcXHYxLjBcXHBvd2Vyc2hlbGwuZXhlJywgWydwb3dlcnNoZWxsJywgJy1ub3Byb2ZpbGUnLCAnLW5vbG9nbycsICctY29tbWFuZCcsICctJ10sIHJldFZhbC5vcHRpb25zKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLmRlc2NyaXB0b3JNZXRhZGF0YSA9ICd0b2FzdGVyJzsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnRvYXN0ID0gcmV0VmFsOw0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3Rkb3V0LnN0ZGluID0gcmV0VmFsLmNoaWxkLnN0ZGluOw0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3RkZXJyLnN0ZGluID0gcmV0VmFsLmNoaWxkLnN0ZGluOw0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgaWYgKGMudG9TdHJpbmcoKS5pbmNsdWRlcygnPERJU01JU1NFRD4nKSkgeyB0aGlzLnN0ZGluLndyaXRlKCdleGl0XG4nKTsgfSB9KTsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnN0ZGVyci5vbmNlKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdGRpbi53cml0ZSgnJG9iakJhbGxvb24uZGlzcG9zZSgpO2V4aXRcbicpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnN0ZGluLndyaXRlKCdbU3lzdGVtLlJlZmxlY3Rpb24uQXNzZW1ibHldOjpMb2FkV2l0aFBhcnRpYWxOYW1lKCJTeXN0ZW0uV2luZG93cy5Gb3JtcyIpXHJcbicpOw0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3RkaW4ud3JpdGUoJyRvYmpCYWxsb29uID0gTmV3LU9iamVjdCBTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ob3RpZnlJY29uXHJcbicpOw0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3RkaW4ud3JpdGUoJyRvYmpCYWxsb29uLkljb24gPSBbU3lzdGVtLkRyYXdpbmcuU3lzdGVtSWNvbnNdOjpJbmZvcm1hdGlvblxyXG4nKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnN0ZGluLndyaXRlKCckb2JqQmFsbG9vbi5WaXNpYmxlID0gJFRydWVcclxuJyk7DQogICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC5zdGRpbi53cml0ZSgnUmVnaXN0ZXItT2JqZWN0RXZlbnQgLUlucHV0T2JqZWN0ICRvYmpCYWxsb29uIC1FdmVudE5hbWUgQmFsbG9vblRpcENsb3NlZCAtQWN0aW9uIHsgJG9iakJhbGxvb24uZGlzcG9zZSgpO1dyaXRlLUhvc3QgIjxgRElTTUlTU0VEYD4iIH0nKQ0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3RkaW4ud3JpdGUoJyRvYmpCYWxsb29uLlNob3dCYWxsb29uVGlwKDEwMDAwLCAkZW52Ol90aXRsZSwgJGVudjpfY2FwdGlvbiwgMClcclxuJyk7DQogICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoYykNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgYy50aW1lb3V0ID0gbnVsbDsNCiAgICAgICAgICAgICAgICAgICAgICAgIGMuc3RkaW4ud3JpdGUoJyRvYmpCYWxsb29uLmRpc3Bvc2UoKTtleGl0XG4nKTsNCiAgICAgICAgICAgICAgICAgICAgfSwgMTAwMDAsIHJldFZhbC5jaGlsZCk7DQogICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC5vbignZXhpdCcsIGZ1bmN0aW9uICgpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRpbWVvdXQgIT0gbnVsbCkgeyBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTsgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdC5fcmVzKCdESVNNSVNTRUQnKTsNCiAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJldFZhbCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGJyZWFrOw0KCSAgICAgICAgY2FzZSAnZnJlZWJzZCc6DQogICAgICAgICAgICBjYXNlICdsaW51eCc6DQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNvbnNvbGVVaWQgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLnhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8ocmV0VmFsLmNvbnNvbGVVaWQpOw0KCQkJICAgICAgICAgICAgcmV0VmFsLnVzZXJuYW1lID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmdldFVzZXJuYW1lKHJldFZhbC5jb25zb2xlVWlkKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBjYXRjaCAoeHhlKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuX3Jlaih4eGUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyZXRWYWwpOw0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVpcmUoJ21lc3NhZ2UtYm94JykuemVuaXR5KQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnbGludXgnICYmICFyZXF1aXJlKCdsaW51eC1kYnVzJykuaGFzU2VydmljZSgnb3JnLmZyZWVkZXNrdG9wLk5vdGlmaWNhdGlvbnMnKSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIEQtQnVzIHNlcnZpY2UgdG8gaGFuZGxlIG5vdGlmaWNhdGlvbnMsIHNvIHdlIG11c3QgZmFrZSBhIG5vdGlmaWNhdGlvbiB3aXRoIFpFTklUWSAtLWluZm8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWlyZSgnbWVzc2FnZS1ib3gnKS56ZW5pdHkudGltZW91dCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRpbWVvdXQgU3VwcG9ydGVkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShyZXF1aXJlKCdtZXNzYWdlLWJveCcpLnplbml0eS5wYXRoLCBbJ3plbml0eScsICctLWluZm8nLCAnLS10aXRsZT0nICsgcmV0VmFsLnRpdGxlLCAnLS10ZXh0PScgKyByZXRWYWwuY2FwdGlvbiwgJy0tdGltZW91dD01J10sIHsgdWlkOiByZXRWYWwuY29uc29sZVVpZCwgZW52OiB7IFhBVVRIT1JJVFk6IHJldFZhbC54aW5mby54YXV0aG9yaXR5LCBESVNQTEFZOiByZXRWYWwueGluZm8uZGlzcGxheSB9IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBObyBUaW1lb3V0IFN1cHBvcnQsIHNvIHdlIG11c3QgZmFrZSBpdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUocmVxdWlyZSgnbWVzc2FnZS1ib3gnKS56ZW5pdHkucGF0aCwgWyd6ZW5pdHknLCAnLS1pbmZvJywgJy0tdGl0bGU9JyArIHJldFZhbC50aXRsZSwgJy0tdGV4dD0nICsgcmV0VmFsLmNhcHRpb25dLCB7IHVpZDogcmV0VmFsLmNvbnNvbGVVaWQsIGVudjogeyBYQVVUSE9SSVRZOiByZXRWYWwueGluZm8ueGF1dGhvcml0eSwgRElTUExBWTogcmV0VmFsLnhpbmZvLmRpc3BsYXkgfSB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIChjKSB7IGMudGltZW91dCA9IG51bGw7IGMua2lsbCgpOyB9LCA1MDAwLCByZXRWYWwuY2hpbGQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuZGVzY3JpcHRvck1ldGFkYXRhID0gJ3RvYXN0ZXIgKHplbml0eS9tZXNzYWdlYm94KScNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlcXVpcmUoJ21lc3NhZ2UtYm94JykuemVuaXR5LmJyb2tlbiB8fCByZXF1aXJlKCdtZXNzYWdlLWJveCcpLnplbml0eS52ZXJzaW9uWzBdIDwgMyB8fCAocmVxdWlyZSgnbWVzc2FnZS1ib3gnKS56ZW5pdHkudmVyc2lvblswXSA9PSAzICYmIHJlcXVpcmUoJ21lc3NhZ2UtYm94JykuemVuaXR5LnZlcnNpb25bMV0gPCAxMCkpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBaRU5JVFkgTm90aWZpY2F0aW9uIGlzIGJyb2tlbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXF1aXJlKCdtZXNzYWdlLWJveCcpLm5vdGlmeXNlbmQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2luZyBub3RpZnktc2VuZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWlyZSgndXNlci1zZXNzaW9ucycpLndob2FtaSgpID09ICdyb290JykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UncmUgcm9vdCwgc28gd2UgbXVzdCBydW4gaW4gY29ycmVjdCBjb250ZXh0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeGRnID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmZpbmRFbnYocmV0VmFsLmNvbnNvbGVVaWQsICdYREdfUlVOVElNRV9ESVInKTsgaWYgKHhkZyA9PSBudWxsKSB7IHhkZyA9ICcnOyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnN0ZGluLndyaXRlKCdzdSAtICcgKyByZXRWYWwudXNlcm5hbWUgKyAnIC1jICJleHBvcnQgRElTUExBWT0nICsgcmV0VmFsLnhpbmZvLmRpc3BsYXkgKyAnOyBleHBvcnQgWERHX1JVTlRJTUVfRElSPScgKyB4ZGcgKyAnOyBub3RpZnktc2VuZCBcJycgKyByZXRWYWwudGl0bGUgKyAnXCcgXCcnICsgcmV0VmFsLmNhcHRpb24gKyAnXCciXG5leGl0XG4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3JlIGEgcmVndWxhciB1c2VyLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShyZXF1aXJlKCdtZXNzYWdlLWJveCcpLm5vdGlmeXNlbmQucGF0aCwgWydub3RpZnktc2VuZCcsIHJldFZhbC50aXRsZSwgcmV0VmFsLmNhcHRpb25dKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuZGVzY3JpcHRvck1ldGFkYXRhID0gJ3RvYXN0ZXIgKG5vdGlmeS1zZW5kKScNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmFraW5nIG5vdGlmaWNhdGlvbiB3aXRoIFpFTklUWSAtLWluZm8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVpcmUoJ21lc3NhZ2UtYm94JykuemVuaXR5LnRpbWVvdXQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRpbWVvdXQgU3VwcG9ydGVkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUocmVxdWlyZSgnbWVzc2FnZS1ib3gnKS56ZW5pdHkucGF0aCwgWyd6ZW5pdHknLCAnLS1pbmZvJywgJy0tdGl0bGU9JyArIHJldFZhbC50aXRsZSwgJy0tdGV4dD0nICsgcmV0VmFsLmNhcHRpb24sICctLXRpbWVvdXQ9NSddLCB7IHVpZDogcmV0VmFsLmNvbnNvbGVVaWQsIGVudjogeyBYQVVUSE9SSVRZOiByZXRWYWwueGluZm8ueGF1dGhvcml0eSwgRElTUExBWTogcmV0VmFsLnhpbmZvLmRpc3BsYXkgfSB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIFRpbWVvdXQgU3VwcG9ydCwgc28gd2UgbXVzdCBmYWtlIGl0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUocmVxdWlyZSgnbWVzc2FnZS1ib3gnKS56ZW5pdHkucGF0aCwgWyd6ZW5pdHknLCAnLS1pbmZvJywgJy0tdGl0bGU9JyArIHJldFZhbC50aXRsZSwgJy0tdGV4dD0nICsgcmV0VmFsLmNhcHRpb25dLCB7IHVpZDogcmV0VmFsLmNvbnNvbGVVaWQsIGVudjogeyBYQVVUSE9SSVRZOiByZXRWYWwueGluZm8ueGF1dGhvcml0eSwgRElTUExBWTogcmV0VmFsLnhpbmZvLmRpc3BsYXkgfSB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoYykgeyBjLnRpbWVvdXQgPSBudWxsOyBjLmtpbGwoKTsgfSwgNTAwMCwgcmV0VmFsLmNoaWxkKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuZGVzY3JpcHRvck1ldGFkYXRhID0gJ3RvYXN0ZXIgKHplbml0eS9tZXNzYWdlYm94KScNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICB7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2UgWkVOSVRZIE5vdGlmaWNhdGlvbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShyZXF1aXJlKCdtZXNzYWdlLWJveCcpLnplbml0eS5wYXRoLCBbJ3plbml0eScsICctLW5vdGlmaWNhdGlvbicsICctLXRpdGxlPScgKyB0aXRsZSwgJy0tdGV4dD0nICsgY2FwdGlvbiwgJy0tdGltZW91dD01J10sIHsgdWlkOiByZXRWYWwuY29uc29sZVVpZCwgZW52OiB7IFhBVVRIT1JJVFk6IHJldFZhbC54aW5mby54YXV0aG9yaXR5LCBESVNQTEFZOiByZXRWYWwueGluZm8uZGlzcGxheSB9IH0pOyAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuZGVzY3JpcHRvck1ldGFkYXRhID0gJ3RvYXN0ZXIgKHplbml0eS9ub3RpZmljYXRpb24pJw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnBhcmVudCA9IHJldFZhbDsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC5zdGRlcnIuc3RyID0gJyc7DQogICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7ICB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQub24oJ2V4aXQnLCBmdW5jdGlvbiAoY29kZSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50aW1lb3V0KSB7IGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpOyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuX3JlcygnRElTTUlTU0VEJyk7DQogICAgICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwgPSBmaW5kUGF0aCgna2RpYWxvZycpOw0KICAgICAgICAgICAgICAgICAgICAgICAg", 16000); - memcpy_s(_toaster + 16000, 7116, "aWYgKHV0aWwpIA0KCQkJICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVzZSBLRElBTE9HDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhkZyA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5maW5kRW52KHJldFZhbC5jb25zb2xlVWlkLCAnWERHX1JVTlRJTUVfRElSJyk7IGlmICh4ZGcgPT0gbnVsbCkgeyB4ZGcgPSAnJzsgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmV0VmFsLnhpbmZvIHx8ICFyZXRWYWwueGluZm8uZGlzcGxheSB8fCAhcmV0VmFsLnhpbmZvLnhhdXRob3JpdHkpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuX3JlaignSW50ZXJuYWwgRXJyb3InKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyZXRWYWwpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCgkJDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLl9ub3RpZnkgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUodXRpbCwgWydrZGlhbG9nJywgJy0tdGl0bGUnLCByZXRWYWwudGl0bGUsICctLXBhc3NpdmVwb3B1cCcsIHJldFZhbC5jYXB0aW9uLCAnNSddLCB7IHVpZDogcmV0VmFsLmNvbnNvbGVVaWQsIGVudjogeyBESVNQTEFZOiByZXRWYWwueGluZm8uZGlzcGxheSwgWEFVVEhPUklUWTogcmV0VmFsLnhpbmZvLnhhdXRob3JpdHksIFhER19SVU5USU1FX0RJUjogeGRnIH0gfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLl9ub3RpZnkuZGVzY3JpcHRvck1ldGFkYXRhID0gJ3RvYXN0ZXIgKGtkaWFsb2cpJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fbm90aWZ5LnBhcmVudCA9IHJldFZhbDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuX25vdGlmeS5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLl9ub3RpZnkuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fbm90aWZ5Lm9uKCdleGl0JywgZnVuY3Rpb24gKGNvZGUpIHsgdGhpcy5wYXJlbnQuX3JlcygnRElTTUlTU0VEJyk7IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXF1aXJlKCdtZXNzYWdlLWJveCcpLm5vdGlmeXNlbmQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2luZyBub3RpZnktc2VuZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWlyZSgndXNlci1zZXNzaW9ucycpLndob2FtaSgpID09ICdyb290JykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UncmUgcm9vdCwgc28gd2UgbXVzdCBydW4gaW4gY29ycmVjdCBjb250ZXh0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeGRnID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmZpbmRFbnYocmV0VmFsLmNvbnNvbGVVaWQsICdYREdfUlVOVElNRV9ESVInKTsgaWYgKHhkZyA9PSBudWxsKSB7IHhkZyA9ICcnOyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnN0ZGluLndyaXRlKCdzdSAtICcgKyByZXRWYWwudXNlcm5hbWUgKyAnIC1jICJleHBvcnQgRElTUExBWT0nICsgcmV0VmFsLnhpbmZvLmRpc3BsYXkgKyAnOyBleHBvcnQgWERHX1JVTlRJTUVfRElSPScgKyB4ZGcgKyAnOyBub3RpZnktc2VuZCBcJycgKyByZXRWYWwudGl0bGUgKyAnXCcgXCcnICsgcmV0VmFsLmNhcHRpb24gKyAnXCciXG5leGl0XG4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3JlIGEgcmVndWxhciB1c2VyLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShyZXF1aXJlKCdtZXNzYWdlLWJveCcpLm5vdGlmeXNlbmQucGF0aCwgWydub3RpZnktc2VuZCcsIHJldFZhbC50aXRsZSwgcmV0VmFsLmNhcHRpb25dKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuZGVzY3JpcHRvck1ldGFkYXRhID0gJ3RvYXN0ZXIgKG5vdGlmeS1zZW5kKScNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVxdWlyZSgnbWVzc2FnZS1ib3gnKS54bWVzc2FnZSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fbWIgPSByZXF1aXJlKCdtZXNzYWdlLWJveCcpLmNyZWF0ZSh0aXRsZSwgY2FwdGlvbiwgNSwgJ09LJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fbWIucmV0ID0gcmV0VmFsOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuX21iLnRoZW4oZnVuY3Rpb24gKCkgeyB0aGlzLnJldC5fcmVzKCdESVNNSVNTRUQnKTsgfSwgZnVuY3Rpb24gKCkgeyB0aGlzLnJldC5fcmVzKCdESVNNSVNTRUQnKTsgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fcmVqKCdaZW5pdHkvS0RpYWxvZy94bWVzc2FnZSBub3QgZm91bmQnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICdkYXJ3aW4nOg0KICAgICAgICAgICAgICAgIHJldFZhbC5fdG9hc3QgPSByZXF1aXJlKCdtZXNzYWdlLWJveCcpLm5vdGlmeSh0aXRsZSwgY2FwdGlvbik7DQogICAgICAgICAgICAgICAgcmV0VmFsLl90b2FzdC5wYXJlbnQgPSByZXRWYWw7DQogICAgICAgICAgICAgICAgcmV0VmFsLl90b2FzdC50aGVuKGZ1bmN0aW9uICh2KSB7IHRoaXMucGFyZW50Ll9yZXModik7IH0sIGZ1bmN0aW9uIChlKSB7IHRoaXMucGFyZW50Ll9yZWooZSk7IH0pOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIChyZXRWYWwpOw0KICAgIH07DQogICAgaWYocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnd2luMzInKQ0KICAgIHsNCiAgICAgICAgdGhpcy5fY29udGFpbmVyVG9hc3QgPSBmdW5jdGlvbiBfY29udGFpbmVyVG9hc3QoY2FwdGlvbiwgdGl0bGUpDQogICAgICAgIHsNCiAgICAgICAgICAgIHZhciB0b2FzdDsNCiAgICAgICAgICAgIHZhciBiYWxsb29uOw0KDQogICAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0b2FzdCA9IHJlcXVpcmUoJ3dpbi1jb25zb2xlJyk7DQogICAgICAgICAgICAgICAgYmFsbG9vbiA9IHRvYXN0LlNldFRyYXlJY29uKHsgc3pJbmZvOiBjYXB0aW9uLCBzekluZm9UaXRsZTogdGl0bGUsIGJhbGxvb25Pbmx5OiB0cnVlIH0pOw0KICAgICAgICAgICAgICAgIGJhbGxvb24ub24oJ1RvYXN0RGlzbWlzc2VkJywgZnVuY3Rpb24gKCkgeyBwcm9jZXNzLmV4aXQoKTsgfSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBjYXRjaChlKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcmVxdWlyZSgnY2hpbGQtY29udGFpbmVyJykubWVzc2FnZSh7IHN0YXR1czogJ29rJywgcGlkOiBwcm9jZXNzLnBpZH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgY2F0Y2goZWUpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0KCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB2YXIgdCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKGIpIHsgYi5yZW1vdmUoKTsgcHJvY2Vzcy5leGl0KCk7IH0sIDcwMDAsIGJhbGxvb24pOw0KICAgICAgICB9DQogICAgfQ0KfQ0KDQptb2R1bGUuZXhwb3J0cyA9IG5ldyBUb2FzdGVyKCk7DQppZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnbGludXgnICYmICFyZXF1aXJlKCdsaW51eC1kYnVzJykuaGFzU2VydmljZSkNCnsNCiAgICByZXF1aXJlKCdsaW51eC1kYnVzJykuaGFzU2VydmljZSA9IGZ1bmN0aW9uIGhhc1NlcnZpY2UobmFtZSkNCiAgICB7DQogICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgIGNoaWxkLnN0ZGVyci5zdHIgPSAnJzsgY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgnY2F0IC91c3Ivc2hhcmUvZGJ1cy0xL3NlcnZpY2VzLyouc2VydmljZSB8IGdyZXAgIicgKyBuYW1lICsgJyIgfCBhd2sgLUY9IFwneyBpZiggJDI9PSInICsgbmFtZSArICciICkgeyBwcmludCAkMjsgfSB9XCdcbmV4aXRcbicpOw0KICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KICAgICAgICByZXR1cm4gKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpICE9ICcnKTsNCiAgICB9Ow0KfQ==", 7116); - ILibBase64DecodeEx((unsigned char*)_toaster, 23116, (unsigned char*)_toaster + 23116); - duk_push_global_object(ctx); duk_get_prop_string(ctx, -1, "addModule"); duk_swap_top(ctx, -2); duk_push_string(ctx, "toaster"); duk_push_string(ctx, _toaster + 23116); + char *_toaster = ILibMemory_Allocate(41321, 0, NULL, NULL); + memcpy_s(_toaster + 0, 23612, "LyoNCkNvcHlyaWdodCAyMDE4IEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQp2YXIgcHJvbWlzZSA9IHJlcXVpcmUoJ3Byb21pc2UnKTsNCg0KaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JyB8fCBwcm9jZXNzLnBsYXRmb3JtID09ICdkYXJ3aW4nIHx8IHByb2Nlc3MucGxhdGZvcm0gPT0gJ2ZyZWVic2QnKQ0Kew0KICAgIGZ1bmN0aW9uIGZpbmRQYXRoKGFwcCkNCiAgICB7DQogICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsNCiAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnbGludXgnIHx8IHByb2Nlc3MucGxhdGZvcm0gPT0gJ2ZyZWVic2QnKQ0KICAgICAgICB7DQogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyAiICsgYXBwICsgIiB8IGF3ayAneyBwcmludCAkMiB9J1xuZXhpdFxuIik7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyAiICsgYXBwICsgIlxuZXhpdFxuIik7DQogICAgICAgIH0NCiAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpOw0KICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnZnJlZWJzZCcgJiYgY2hpbGQuc3Rkb3V0LnN0ciA9PSAnJyAmJiByZXF1aXJlKCdmcycpLmV4aXN0c1N5bmMoJy91c3IvbG9jYWwvYmluLycgKyBhcHApKSB7IHJldHVybiAoJy91c3IvbG9jYWwvYmluLycgKyBhcHApOyB9DQogICAgICAgIHJldHVybiAoY2hpbGQuc3Rkb3V0LnN0ciA9PSAnJyA/IG51bGwgOiBjaGlsZC5zdGRvdXQuc3RyKTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIFRvYXN0ZXIoKQ0Kew0KICAgIHRoaXMuX09iamVjdElEID0gJ3RvYXN0ZXInOw0KICAgIHRoaXMuVG9hc3QgPSBmdW5jdGlvbiBUb2FzdCh0aXRsZSwgY2FwdGlvbiwgdHNpZCkNCiAgICB7DQogICAgICAgIHZhciByZXRWYWwgPSBuZXcgcHJvbWlzZShmdW5jdGlvbiAocmVzLCByZWopIHsgdGhpcy5fcmVzID0gcmVzOyB0aGlzLl9yZWogPSByZWo7IH0pOw0KICAgICAgICByZXRWYWwudGl0bGUgPSB0aXRsZTsNCiAgICAgICAgcmV0VmFsLmNhcHRpb24gPSBjYXB0aW9uOw0KDQogICAgICAgIHN3aXRjaCAocHJvY2Vzcy5wbGF0Zm9ybSkNCiAgICAgICAgew0KICAgICAgICAgICAgY2FzZSAnd2luMzInOg0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGNpZDsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLm9wdGlvbnMgPSB7IGVudjogeyBfdGl0bGU6IHRpdGxlLCBfY2FwdGlvbjogY2FwdGlvbiB9IH07DQogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGMxZSBpbiBwcm9jZXNzLmVudikNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLm9wdGlvbnMuZW52W2MxZV0gPSBwcm9jZXNzLmVudltjMWVdOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwub3B0aW9ucy51aWQgPSB0c2lkID09IG51bGwgPyByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpIDogdHNpZDsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRWYWwub3B0aW9ucy51aWQgPT0gKGNpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5nZXRQcm9jZXNzT3duZXJOYW1lKHByb2Nlc3MucGlkKS50c2lkKSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmV0VmFsLm9wdGlvbnMudWlkOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRzaWQgIT0gbnVsbCAmJiBjaWQgIT0gMCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fcmVqKCdJbnN1ZmZpY2llbnQgcGVybWlzc2lvbiB0byBkaXNwbGF5IHRvYXN0IGFzIHVpZDogJyArIHRzaWQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJldFZhbCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5vcHRpb25zLnR5cGUgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuU3Bhd25UeXBlcy5VU0VSOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGNhdGNoIChlZSkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLl9yZWooJ0Nhbm5vdCBkaXNwbGF5IHVzZXIgbm90aWZpY2F0aW9uIHdoZW4gYSB1c2VyIGlzIG5vdCBsb2dnZWQgaW4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAocmV0VmFsKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShwcm9jZXNzLmVudlsnd2luZGlyJ10gKyAnXFxTeXN0ZW0zMlxcV2luZG93c1Bvd2VyU2hlbGxcXHYxLjBcXHBvd2Vyc2hlbGwuZXhlJywgWydwb3dlcnNoZWxsJywgJy1ub3Byb2ZpbGUnLCAnLW5vbG9nbycsICctY29tbWFuZCcsICctJ10sIHJldFZhbC5vcHRpb25zKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLmRlc2NyaXB0b3JNZXRhZGF0YSA9ICd0b2FzdGVyJzsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnRvYXN0ID0gcmV0VmFsOw0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3Rkb3V0LnN0ZGluID0gcmV0VmFsLmNoaWxkLnN0ZGluOw0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3RkZXJyLnN0ZGluID0gcmV0VmFsLmNoaWxkLnN0ZGluOw0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgaWYgKGMudG9TdHJpbmcoKS5pbmNsdWRlcygnPERJU01JU1NFRD4nKSkgeyB0aGlzLnN0ZGluLndyaXRlKCdleGl0XG4nKTsgfSB9KTsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnN0ZGVyci5vbmNlKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdGRpbi53cml0ZSgnJG9iakJhbGxvb24uZGlzcG9zZSgpO2V4aXRcbicpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnN0ZGluLndyaXRlKCdbU3lzdGVtLlJlZmxlY3Rpb24uQXNzZW1ibHldOjpMb2FkV2l0aFBhcnRpYWxOYW1lKCJTeXN0ZW0uV2luZG93cy5Gb3JtcyIpXHJcbicpOw0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3RkaW4ud3JpdGUoJyRvYmpCYWxsb29uID0gTmV3LU9iamVjdCBTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ob3RpZnlJY29uXHJcbicpOw0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3RkaW4ud3JpdGUoJyRvYmpCYWxsb29uLkljb24gPSBbU3lzdGVtLkRyYXdpbmcuU3lzdGVtSWNvbnNdOjpJbmZvcm1hdGlvblxyXG4nKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnN0ZGluLndyaXRlKCckb2JqQmFsbG9vbi5WaXNpYmxlID0gJFRydWVcclxuJyk7DQogICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC5zdGRpbi53cml0ZSgnUmVnaXN0ZXItT2JqZWN0RXZlbnQgLUlucHV0T2JqZWN0ICRvYmpCYWxsb29uIC1FdmVudE5hbWUgQmFsbG9vblRpcENsb3NlZCAtQWN0aW9uIHsgJG9iakJhbGxvb24uZGlzcG9zZSgpO1dyaXRlLUhvc3QgIjxgRElTTUlTU0VEYD4iIH0nKQ0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3RkaW4ud3JpdGUoJyRvYmpCYWxsb29uLlNob3dCYWxsb29uVGlwKDEwMDAwLCAkZW52Ol90aXRsZSwgJGVudjpfY2FwdGlvbiwgMClcclxuJyk7DQogICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoYykNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgYy50aW1lb3V0ID0gbnVsbDsNCiAgICAgICAgICAgICAgICAgICAgICAgIGMuc3RkaW4ud3JpdGUoJyRvYmpCYWxsb29uLmRpc3Bvc2UoKTtleGl0XG4nKTsNCiAgICAgICAgICAgICAgICAgICAgfSwgMTAwMDAsIHJldFZhbC5jaGlsZCk7DQogICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC5vbignZXhpdCcsIGZ1bmN0aW9uICgpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRpbWVvdXQgIT0gbnVsbCkgeyBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTsgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdC5fcmVzKCdESVNNSVNTRUQnKTsNCiAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJldFZhbCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGJyZWFrOw0KCSAgICAgICAgY2FzZSAnZnJlZWJzZCc6DQogICAgICAgICAgICBjYXNlICdsaW51eCc6DQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNvbnNvbGVVaWQgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLnhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8ocmV0VmFsLmNvbnNvbGVVaWQpOw0KCQkJICAgICAgICAgICAgcmV0VmFsLnVzZXJuYW1lID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmdldFVzZXJuYW1lKHJldFZhbC5jb25zb2xlVWlkKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBjYXRjaCAoeHhlKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuX3Jlaih4eGUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyZXRWYWwpOw0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVpcmUoJ21lc3NhZ2UtYm94JykuemVuaXR5KQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnbGludXgnICYmICFyZXF1aXJlKCdsaW51eC1kYnVzJykuaGFzU2VydmljZSgnb3JnLmZyZWVkZXNrdG9wLk5vdGlmaWNhdGlvbnMnKSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBObyBELUJ1cyBzZXJ2aWNlIHRvIGhhbmRsZSBub3RpZmljYXRpb25zLCBzbyB3ZSBtdXN0IGZha2UgYSBub3RpZmljYXRpb24gd2l0aCBaRU5JVFkgLS1pbmZvDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVpcmUoJ21lc3NhZ2UtYm94JykuemVuaXR5LnRpbWVvdXQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaW1lb3V0IFN1cHBvcnRlZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUocmVxdWlyZSgnbWVzc2FnZS1ib3gnKS56ZW5pdHkucGF0aCwgWyd6ZW5pdHknLCAnLS1pbmZvJywgJy0tdGl0bGU9JyArIHJldFZhbC50aXRsZSwgJy0tdGV4dD0nICsgcmV0VmFsLmNhcHRpb24sICctLXRpbWVvdXQ9NSddLCB7IHVpZDogcmV0VmFsLmNvbnNvbGVVaWQsIGVudjogeyBYQVVUSE9SSVRZOiByZXRWYWwueGluZm8ueGF1dGhvcml0eSwgRElTUExBWTogcmV0VmFsLnhpbmZvLmRpc3BsYXkgfSB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm8gVGltZW91dCBTdXBwb3J0LCBzbyB3ZSBtdXN0IGZha2UgaXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHJlcXVpcmUoJ21lc3NhZ2UtYm94JykuemVuaXR5LnBhdGgsIFsnemVuaXR5JywgJy0taW5mbycsICctLXRpdGxlPScgKyByZXRWYWwudGl0bGUsICctLXRleHQ9JyArIHJldFZhbC5jYXB0aW9uXSwgeyB1aWQ6IHJldFZhbC5jb25zb2xlVWlkLCBlbnY6IHsgWEFVVEhPUklUWTogcmV0VmFsLnhpbmZvLnhhdXRob3JpdHksIERJU1BMQVk6IHJldFZhbC54aW5mby5kaXNwbGF5IH0gfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoYykgeyBjLnRpbWVvdXQgPSBudWxsOyBjLmtpbGwoKTsgfSwgNTAwMCwgcmV0VmFsLmNoaWxkKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLmRlc2NyaXB0b3JNZXRhZGF0YSA9ICd0b2FzdGVyICh6ZW5pdHkvbWVzc2FnZWJveCknDQogICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXF1aXJlKCdtZXNzYWdlLWJveCcpLnplbml0eS5icm9rZW4gfHwgcmVxdWlyZSgnbWVzc2FnZS1ib3gnKS56ZW5pdHkudmVyc2lvblswXSA8IDMgfHwgKHJlcXVpcmUoJ21lc3NhZ2UtYm94JykuemVuaXR5LnZlcnNpb25bMF0gPT0gMyAmJiByZXF1aXJlKCdtZXNzYWdlLWJveCcpLnplbml0eS52ZXJzaW9uWzFdIDwgMTApKQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWkVOSVRZIE5vdGlmaWNhdGlvbiBpcyBicm9rZW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWlyZSgnbWVzc2FnZS1ib3gnKS5ub3RpZnlzZW5kKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNpbmcgbm90aWZ5LXNlbmQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS53aG9hbWkoKSA9PSAncm9vdCcpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3JlIHJvb3QsIHNvIHdlIG11c3QgcnVuIGluIGNvcnJlY3QgY29udGV4dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhkZyA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5maW5kRW52KHJldFZhbC5jb25zb2xlVWlkLCAnWERHX1JVTlRJTUVfRElSJyk7IGlmICh4ZGcgPT0gbnVsbCkgeyB4ZGcgPSAnJzsgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC5zdGRpbi53cml0ZSgnc3UgLSAnICsgcmV0VmFsLnVzZXJuYW1lICsgJyAtYyAiZXhwb3J0IERJU1BMQVk9JyArIHJldFZhbC54aW5mby5kaXNwbGF5ICsgJzsgZXhwb3J0IFhER19SVU5USU1FX0RJUj0nICsgeGRnICsgJzsgbm90aWZ5LXNlbmQgXCcnICsgcmV0VmFsLnRpdGxlICsgJ1wnIFwnJyArIHJldFZhbC5jYXB0aW9uICsgJ1wnIlxuZXhpdFxuJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSdyZSBhIHJlZ3VsYXIgdXNlciwgc28gd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBzcGVjaWFsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUocmVxdWlyZSgnbWVzc2FnZS1ib3gnKS5ub3RpZnlzZW5kLnBhdGgsIFsnbm90aWZ5LXNlbmQnLCByZXRWYWwudGl0bGUsIHJldFZhbC5jYXB0aW9uXSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLmRlc2NyaXB0b3JNZXRhZGF0YSA9ICd0b2FzdGVyIChub3RpZnktc2VuZCknDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZha2luZyBub3RpZmljYXRpb24gd2l0aCBaRU5JVFkgLS1pbmZvDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXF1aXJlKCdtZXNzYWdlLWJveCcpLnplbml0eS50aW1lb3V0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaW1lb3V0IFN1cHBvcnRlZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLl9tYiA9IHJlcXVpcmUoJ21lc3NhZ2UtYm94JykuY3JlYXRlKHJldFZhbC50aXRsZSwgcmV0VmFsLmNhcHRpb24sIDUsIDEpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLl9tYi50b2FzdCA9IHJldFZhbDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fbWIudGhlbihmdW5jdGlvbiAoKSB7IHRoaXMudG9hc3QuX3JlcygnRElTTUlTU0VEJyk7IH0sIGZ1bmN0aW9uIChlKSB7IHRoaXMudG9hc3QuX3JlaihlKTsgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJldFZhbCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3JldFZhbC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShyZXF1aXJlKCdtZXNzYWdlLWJveCcpLnplbml0eS5wYXRoLCBbJ3plbml0eScsICctLWluZm8nLCAnLS10aXRsZT0nICsgcmV0VmFsLnRpdGxlLCAnLS10ZXh0PScgKyByZXRWYWwuY2FwdGlvbiwgJy0tdGltZW91dD01J10sIHsgdWlkOiByZXRWYWwuY29uc29sZVVpZCwgZW52OiB7IFhBVVRIT1JJVFk6IHJldFZhbC54aW5mby54YXV0aG9yaXR5LCBESVNQTEFZOiByZXRWYWwueGluZm8uZGlzcGxheSB9IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm8gVGltZW91dCBTdXBwb3J0LCBzbyB3ZSBtdXN0IGZha2UgaXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShyZXF1aXJlKCdtZXNzYWdlLWJveCcpLnplbml0eS5wYXRoLCBbJ3plbml0eScsICctLWluZm8nLCAnLS10aXRsZT0nICsgcmV0VmFsLnRpdGxlLCAnLS10ZXh0PScgKyByZXRWYWwuY2FwdGlvbl0sIHsgdWlkOiByZXRWYWwuY29uc29sZVVpZCwgZW52OiB7IFhBVVRIT1JJVFk6IHJldFZhbC54aW5mby54YXV0aG9yaXR5LCBESVNQTEFZOiByZXRWYWwueGluZm8uZGlzcGxheSB9IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIChjKSB7IGMudGltZW91dCA9IG51bGw7IGMua2lsbCgpOyB9LCA1MDAwLCByZXRWYWwuY2hpbGQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC5kZXNjcmlwdG9yTWV0YWRhdGEgPSAndG9hc3RlciAoemVuaXR5L21lc3NhZ2Vib3gpJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2UgWkVOSVRZIE5vdGlmaWNhdGlvbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShyZXF1aXJlKCdtZXNzYWdlLWJveCcpLnplbml0eS5wYXRoLCBbJ3plbml0eScsICctLW5vdGlmaWNhdGlvbicsICctLXRpdGxlPScgKyB0aXRsZSwgJy0tdGV4dD0nICsgY2FwdGlvbiwgJy0tdGltZW91dD01J10sIHsgdWlkOiByZXRWYWwuY29uc29sZVVpZCwgZW52OiB7IFhBVVRIT1JJVFk6IHJldFZhbC54aW5mby54YXV0aG9yaXR5LCBESVNQTEFZOiByZXRWYWwueGluZm8uZGlzcGxheSB9IH0pOyAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuZGVzY3JpcHRvck1ldGFkYXRhID0gJ3RvYXN0ZXIgKHplbml0eS9ub3RpZmljYXRpb24pJw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnBhcmVudCA9IHJldFZhbDsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC5zdGRlcnIuc3RyID0gJyc7DQogICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7ICB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQu", 16000); + memcpy_s(_toaster + 16000, 7612, "b24oJ2V4aXQnLCBmdW5jdGlvbiAoY29kZSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50aW1lb3V0KSB7IGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpOyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuX3JlcygnRElTTUlTU0VEJyk7DQogICAgICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwgPSBmaW5kUGF0aCgna2RpYWxvZycpOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwpIA0KCQkJICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVzZSBLRElBTE9HDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhkZyA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5maW5kRW52KHJldFZhbC5jb25zb2xlVWlkLCAnWERHX1JVTlRJTUVfRElSJyk7IGlmICh4ZGcgPT0gbnVsbCkgeyB4ZGcgPSAnJzsgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmV0VmFsLnhpbmZvIHx8ICFyZXRWYWwueGluZm8uZGlzcGxheSB8fCAhcmV0VmFsLnhpbmZvLnhhdXRob3JpdHkpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuX3JlaignSW50ZXJuYWwgRXJyb3InKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyZXRWYWwpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCgkJDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLl9ub3RpZnkgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUodXRpbCwgWydrZGlhbG9nJywgJy0tdGl0bGUnLCByZXRWYWwudGl0bGUsICctLXBhc3NpdmVwb3B1cCcsIHJldFZhbC5jYXB0aW9uLCAnNSddLCB7IHVpZDogcmV0VmFsLmNvbnNvbGVVaWQsIGVudjogeyBESVNQTEFZOiByZXRWYWwueGluZm8uZGlzcGxheSwgWEFVVEhPUklUWTogcmV0VmFsLnhpbmZvLnhhdXRob3JpdHksIFhER19SVU5USU1FX0RJUjogeGRnIH0gfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLl9ub3RpZnkuZGVzY3JpcHRvck1ldGFkYXRhID0gJ3RvYXN0ZXIgKGtkaWFsb2cpJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fbm90aWZ5LnBhcmVudCA9IHJldFZhbDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuX25vdGlmeS5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLl9ub3RpZnkuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fbm90aWZ5Lm9uKCdleGl0JywgZnVuY3Rpb24gKGNvZGUpIHsgdGhpcy5wYXJlbnQuX3JlcygnRElTTUlTU0VEJyk7IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXF1aXJlKCdtZXNzYWdlLWJveCcpLm5vdGlmeXNlbmQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2luZyBub3RpZnktc2VuZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWlyZSgndXNlci1zZXNzaW9ucycpLndob2FtaSgpID09ICdyb290JykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UncmUgcm9vdCwgc28gd2UgbXVzdCBydW4gaW4gY29ycmVjdCBjb250ZXh0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeGRnID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmZpbmRFbnYocmV0VmFsLmNvbnNvbGVVaWQsICdYREdfUlVOVElNRV9ESVInKTsgaWYgKHhkZyA9PSBudWxsKSB7IHhkZyA9ICcnOyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnN0ZGluLndyaXRlKCdzdSAtICcgKyByZXRWYWwudXNlcm5hbWUgKyAnIC1jICJleHBvcnQgRElTUExBWT0nICsgcmV0VmFsLnhpbmZvLmRpc3BsYXkgKyAnOyBleHBvcnQgWERHX1JVTlRJTUVfRElSPScgKyB4ZGcgKyAnOyBub3RpZnktc2VuZCBcJycgKyByZXRWYWwudGl0bGUgKyAnXCcgXCcnICsgcmV0VmFsLmNhcHRpb24gKyAnXCciXG5leGl0XG4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3JlIGEgcmVndWxhciB1c2VyLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShyZXF1aXJlKCdtZXNzYWdlLWJveCcpLm5vdGlmeXNlbmQucGF0aCwgWydub3RpZnktc2VuZCcsIHJldFZhbC50aXRsZSwgcmV0VmFsLmNhcHRpb25dKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuZGVzY3JpcHRvck1ldGFkYXRhID0gJ3RvYXN0ZXIgKG5vdGlmeS1zZW5kKScNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVxdWlyZSgnbWVzc2FnZS1ib3gnKS54bWVzc2FnZSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fbWIgPSByZXF1aXJlKCdtZXNzYWdlLWJveCcpLmNyZWF0ZSh0aXRsZSwgY2FwdGlvbiwgNSwgJ09LJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fbWIucmV0ID0gcmV0VmFsOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuX21iLnRoZW4oZnVuY3Rpb24gKCkgeyB0aGlzLnJldC5fcmVzKCdESVNNSVNTRUQnKTsgfSwgZnVuY3Rpb24gKCkgeyB0aGlzLnJldC5fcmVzKCdESVNNSVNTRUQnKTsgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fcmVqKCdaZW5pdHkvS0RpYWxvZy94bWVzc2FnZSBub3QgZm91bmQnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICdkYXJ3aW4nOg0KICAgICAgICAgICAgICAgIHJldFZhbC5fdG9hc3QgPSByZXF1aXJlKCdtZXNzYWdlLWJveCcpLm5vdGlmeSh0aXRsZSwgY2FwdGlvbik7DQogICAgICAgICAgICAgICAgcmV0VmFsLl90b2FzdC5wYXJlbnQgPSByZXRWYWw7DQogICAgICAgICAgICAgICAgcmV0VmFsLl90b2FzdC50aGVuKGZ1bmN0aW9uICh2KSB7IHRoaXMucGFyZW50Ll9yZXModik7IH0sIGZ1bmN0aW9uIChlKSB7IHRoaXMucGFyZW50Ll9yZWooZSk7IH0pOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIChyZXRWYWwpOw0KICAgIH07DQogICAgaWYocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnd2luMzInKQ0KICAgIHsNCiAgICAgICAgdGhpcy5fY29udGFpbmVyVG9hc3QgPSBmdW5jdGlvbiBfY29udGFpbmVyVG9hc3QoY2FwdGlvbiwgdGl0bGUpDQogICAgICAgIHsNCiAgICAgICAgICAgIHZhciB0b2FzdDsNCiAgICAgICAgICAgIHZhciBiYWxsb29uOw0KDQogICAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0b2FzdCA9IHJlcXVpcmUoJ3dpbi1jb25zb2xlJyk7DQogICAgICAgICAgICAgICAgYmFsbG9vbiA9IHRvYXN0LlNldFRyYXlJY29uKHsgc3pJbmZvOiBjYXB0aW9uLCBzekluZm9UaXRsZTogdGl0bGUsIGJhbGxvb25Pbmx5OiB0cnVlIH0pOw0KICAgICAgICAgICAgICAgIGJhbGxvb24ub24oJ1RvYXN0RGlzbWlzc2VkJywgZnVuY3Rpb24gKCkgeyBwcm9jZXNzLmV4aXQoKTsgfSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBjYXRjaChlKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcmVxdWlyZSgnY2hpbGQtY29udGFpbmVyJykubWVzc2FnZSh7IHN0YXR1czogJ29rJywgcGlkOiBwcm9jZXNzLnBpZH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgY2F0Y2goZWUpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0KCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB2YXIgdCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKGIpIHsgYi5yZW1vdmUoKTsgcHJvY2Vzcy5leGl0KCk7IH0sIDcwMDAsIGJhbGxvb24pOw0KICAgICAgICB9DQogICAgfQ0KfQ0KDQptb2R1bGUuZXhwb3J0cyA9IG5ldyBUb2FzdGVyKCk7DQppZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnbGludXgnICYmICFyZXF1aXJlKCdsaW51eC1kYnVzJykuaGFzU2VydmljZSkNCnsNCiAgICByZXF1aXJlKCdsaW51eC1kYnVzJykuaGFzU2VydmljZSA9IGZ1bmN0aW9uIGhhc1NlcnZpY2UobmFtZSkNCiAgICB7DQogICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgIGNoaWxkLnN0ZGVyci5zdHIgPSAnJzsgY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgnY2F0IC91c3Ivc2hhcmUvZGJ1cy0xL3NlcnZpY2VzLyouc2VydmljZSB8IGdyZXAgIicgKyBuYW1lICsgJyIgfCBhd2sgLUY9IFwneyBpZiggJDI9PSInICsgbmFtZSArICciICkgeyBwcmludCAkMjsgfSB9XCdcbmV4aXRcbicpOw0KICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KICAgICAgICByZXR1cm4gKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpICE9ICcnKTsNCiAgICB9Ow0KfQ==", 7612); + ILibBase64DecodeEx((unsigned char*)_toaster, 23612, (unsigned char*)_toaster + 23612); + duk_push_global_object(ctx); duk_get_prop_string(ctx, -1, "addModule"); duk_swap_top(ctx, -2); duk_push_string(ctx, "toaster"); duk_push_string(ctx, _toaster + 23612); duk_pcall_method(ctx, 2); duk_pop(ctx); free(_toaster); diff --git a/modules/message-box.js b/modules/message-box.js index a503821..9e29480 100644 --- a/modules/message-box.js +++ b/modules/message-box.js @@ -44,6 +44,12 @@ const WM_CLOSE = 0x0010; var promise = require('promise'); +//function sendConsoleText(msg) +//{ +// require('MeshAgent').SendCommand({ action: 'msg', type: 'console', value: msg }); +//} + + function messageBox() { this._ObjectID = 'message-box'; @@ -324,6 +330,8 @@ function linux_messageBox() if (this.zenity) { + ret._options = { title: title.trim(), caption: caption.trim(), timeout: timeout, layout: layout, zenity: this.zenity }; + // GNOME/ZENITY if (this.zenity.timeout) { @@ -341,7 +349,7 @@ function linux_messageBox() } ret.child.descriptorMetadata = 'zenity, message-box' ret.child.promise = ret; - ret.child.stderr.on('data', function (chunk) { }); + ret.child.stderr.str = ''; ret.child.stderr.on('data', function (chunk) { this.str += chunk.toString(); }); ret.child.stdout.on('data', function (chunk) { }); ret.child.on('exit', function (code) { @@ -355,7 +363,45 @@ function linux_messageBox() this.promise._rej('denied'); break; default: - this.promise._rej('timeout'); + if (this.stderr.str.includes('option is not') && this.promise._options.zenity.timeout) + { + var uname = require('user-sessions').getUsername(uid); + this.promise._ch = require('child_process').execFile('/bin/sh', ['sh'], { type: require('child_process').SpawnTypes.TERM }); + this.promise._ch.promise = this.promise; + this.promise._ch.stderr.str = ''; this.promise._ch.stderr.on('data', function (c) { this.str += c.toString(); }); + this.promise._ch.stdout.str = ''; this.promise._ch.stdout.on('data', function (c) + { + this.str += c.toString(); + if (this.str.includes('<<<<$_RESULT>>>>')) { this.str = this.str.split('<<<<$_RESULT>>>>')[1]; } + if (this.str.includes('>>>>')) { this.parent.kill(); } + }); + this.promise._ch.stdin.write('su - ' + uname + '\n'); + this.promise._ch.stdin.write('export DISPLAY=' + xinfo.display + '\n'); + this.promise._ch.stdin.write('zenity ' + (this.promise._options.layout == null ? '--question' : '--warning')); + this.promise._ch.stdin.write(' --title=' + this.promise._options.title + ' --text=' + this.promise._options.caption); + this.promise._ch.stdin.write(' --timeout=' + this.promise._options.timeout + '\nexport _RESULT=$?\necho "<<<<$_RESULT>>>>"\nexit'); + this.promise._ch.on('exit', function () + { + var res = this.stdout.str.split('>>>>')[0].split('<<<<')[1]; + switch(parseInt(res)) + { + case 0: + this.promise._res(); + break; + case 1: + this.promise._rej('denied'); + break; + default: + this.promise._rej(this.stderr.str.toString()); + break; + } + }); + + } + else + { + this.promise._rej(this.stderr.str.trim()); + } break; } }); diff --git a/modules/toaster.js b/modules/toaster.js index bc45d0b..535f4bd 100644 --- a/modules/toaster.js +++ b/modules/toaster.js @@ -126,7 +126,6 @@ function Toaster() { if (process.platform == 'linux' && !require('linux-dbus').hasService('org.freedesktop.Notifications')) { - // No D-Bus service to handle notifications, so we must fake a notification with ZENITY --info if (require('message-box').zenity.timeout) { @@ -168,7 +167,11 @@ function Toaster() if (require('message-box').zenity.timeout) { // Timeout Supported - retVal.child = require('child_process').execFile(require('message-box').zenity.path, ['zenity', '--info', '--title=' + retVal.title, '--text=' + retVal.caption, '--timeout=5'], { uid: retVal.consoleUid, env: { XAUTHORITY: retVal.xinfo.xauthority, DISPLAY: retVal.xinfo.display } }); + retVal._mb = require('message-box').create(retVal.title, retVal.caption, 5, 1); + retVal._mb.toast = retVal; + retVal._mb.then(function () { this.toast._res('DISMISSED'); }, function (e) { this.toast._rej(e); }); + return (retVal); + //retVal.child = require('child_process').execFile(require('message-box').zenity.path, ['zenity', '--info', '--title=' + retVal.title, '--text=' + retVal.caption, '--timeout=5'], { uid: retVal.consoleUid, env: { XAUTHORITY: retVal.xinfo.xauthority, DISPLAY: retVal.xinfo.display } }); } else { @@ -181,7 +184,6 @@ function Toaster() } else { - // Use ZENITY Notification retVal.child = require('child_process').execFile(require('message-box').zenity.path, ['zenity', '--notification', '--title=' + title, '--text=' + caption, '--timeout=5'], { uid: retVal.consoleUid, env: { XAUTHORITY: retVal.xinfo.xauthority, DISPLAY: retVal.xinfo.display } }); retVal.child.descriptorMetadata = 'toaster (zenity/notification)'