diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index a1b6ad8..00cfc5d 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -2227,11 +2227,11 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) free(_messagebox); // toaster, refer to modules/toaster.js - char *_toaster = ILibMemory_Allocate(36240, 0, NULL, NULL); - memcpy_s(_toaster + 0, 20708, "LyoNCkNvcHlyaWdodCAyMDE4IEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQp2YXIgcHJvbWlzZSA9IHJlcXVpcmUoJ3Byb21pc2UnKTsNCg0KaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JyB8fCBwcm9jZXNzLnBsYXRmb3JtID09ICdkYXJ3aW4nIHx8IHByb2Nlc3MucGxhdGZvcm0gPT0gJ2ZyZWVic2QnKQ0Kew0KICAgIGZ1bmN0aW9uIGZpbmRQYXRoKGFwcCkNCiAgICB7DQogICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsNCiAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnbGludXgnIHx8IHByb2Nlc3MucGxhdGZvcm0gPT0gJ2ZyZWVic2QnKQ0KICAgICAgICB7DQogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyAiICsgYXBwICsgIiB8IGF3ayAneyBwcmludCAkMiB9J1xuZXhpdFxuIik7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyAiICsgYXBwICsgIlxuZXhpdFxuIik7DQogICAgICAgIH0NCiAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpOw0KICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnZnJlZWJzZCcgJiYgY2hpbGQuc3Rkb3V0LnN0ciA9PSAnJyAmJiByZXF1aXJlKCdmcycpLmV4aXN0c1N5bmMoJy91c3IvbG9jYWwvYmluLycgKyBhcHApKSB7IHJldHVybiAoJy91c3IvbG9jYWwvYmluLycgKyBhcHApOyB9DQogICAgICAgIHJldHVybiAoY2hpbGQuc3Rkb3V0LnN0ciA9PSAnJyA/IG51bGwgOiBjaGlsZC5zdGRvdXQuc3RyKTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIFRvYXN0ZXIoKQ0Kew0KICAgIHRoaXMuX09iamVjdElEID0gJ3RvYXN0ZXInOw0KICAgIHRoaXMuVG9hc3QgPSBmdW5jdGlvbiBUb2FzdCh0aXRsZSwgY2FwdGlvbiwgdHNpZCkNCiAgICB7DQogICAgICAgIHZhciByZXRWYWwgPSBuZXcgcHJvbWlzZShmdW5jdGlvbiAocmVzLCByZWopIHsgdGhpcy5fcmVzID0gcmVzOyB0aGlzLl9yZWogPSByZWo7IH0pOw0KICAgICAgICByZXRWYWwudGl0bGUgPSB0aXRsZTsNCiAgICAgICAgcmV0VmFsLmNhcHRpb24gPSBjYXB0aW9uOw0KDQogICAgICAgIHN3aXRjaCAocHJvY2Vzcy5wbGF0Zm9ybSkNCiAgICAgICAgew0KICAgICAgICAgICAgY2FzZSAnd2luMzInOg0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGNpZDsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLm9wdGlvbnMgPSB7IGVudjogeyBfdGl0bGU6IHRpdGxlLCBfY2FwdGlvbjogY2FwdGlvbiB9IH07DQogICAgICAgICAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwub3B0aW9ucy51aWQgPSB0c2lkID09IG51bGwgPyByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpIDogdHNpZDsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRWYWwub3B0aW9ucy51aWQgPT0gKGNpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5nZXRQcm9jZXNzT3duZXJOYW1lKHByb2Nlc3MucGlkKS50c2lkKSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmV0VmFsLm9wdGlvbnMudWlkOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRzaWQgIT0gbnVsbCAmJiBjaWQgIT0gMCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fcmVqKCdJbnN1ZmZpY2llbnQgcGVybWlzc2lvbiB0byBkaXNwbGF5IHRvYXN0IGFzIHVpZDogJyArIHRzaWQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJldFZhbCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5vcHRpb25zLnR5cGUgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuU3Bhd25UeXBlcy5VU0VSOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGNhdGNoIChlZSkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLl9yZWooJ0Nhbm5vdCBkaXNwbGF5IHVzZXIgbm90aWZpY2F0aW9uIHdoZW4gYSB1c2VyIGlzIG5vdCBsb2dnZWQgaW4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAocmV0VmFsKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShwcm9jZXNzLmVudlsnd2luZGlyJ10gKyAnXFxTeXN0ZW0zMlxcV2luZG93c1Bvd2VyU2hlbGxcXHYxLjBcXHBvd2Vyc2hlbGwuZXhlJywgWydwb3dlcnNoZWxsJywgJy1ub3Byb2ZpbGUnLCAnLW5vbG9nbycsICctY29tbWFuZCcsICctJ10sIHJldFZhbC5vcHRpb25zKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLmRlc2NyaXB0b3JNZXRhZGF0YSA9ICd0b2FzdGVyJzsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnRvYXN0ID0gcmV0VmFsOw0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3Rkb3V0LnN0ZGluID0gcmV0VmFsLmNoaWxkLnN0ZGluOw0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3RkZXJyLnN0ZGluID0gcmV0VmFsLmNoaWxkLnN0ZGluOw0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgaWYgKGMudG9TdHJpbmcoKS5pbmNsdWRlcygnPERJU01JU1NFRD4nKSkgeyB0aGlzLnN0ZGluLndyaXRlKCdleGl0XG4nKTsgfSB9KTsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnN0ZGVyci5vbmNlKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdGRpbi53cml0ZSgnJG9iakJhbGxvb24uZGlzcG9zZSgpO2V4aXRcbicpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnN0ZGluLndyaXRlKCdbU3lzdGVtLlJlZmxlY3Rpb24uQXNzZW1ibHldOjpMb2FkV2l0aFBhcnRpYWxOYW1lKCJTeXN0ZW0uV2luZG93cy5Gb3JtcyIpXHJcbicpOw0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3RkaW4ud3JpdGUoJyRvYmpCYWxsb29uID0gTmV3LU9iamVjdCBTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ob3RpZnlJY29uXHJcbicpOw0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3RkaW4ud3JpdGUoJyRvYmpCYWxsb29uLkljb24gPSBbU3lzdGVtLkRyYXdpbmcuU3lzdGVtSWNvbnNdOjpJbmZvcm1hdGlvblxyXG4nKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnN0ZGluLndyaXRlKCckb2JqQmFsbG9vbi5WaXNpYmxlID0gJFRydWVcclxuJyk7DQogICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC5zdGRpbi53cml0ZSgnUmVnaXN0ZXItT2JqZWN0RXZlbnQgLUlucHV0T2JqZWN0ICRvYmpCYWxsb29uIC1FdmVudE5hbWUgQmFsbG9vblRpcENsb3NlZCAtQWN0aW9uIHsgJG9iakJhbGxvb24uZGlzcG9zZSgpO1dyaXRlLUhvc3QgIjxgRElTTUlTU0VEYD4iIH0nKQ0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3RkaW4ud3JpdGUoJyRvYmpCYWxsb29uLlNob3dCYWxsb29uVGlwKDEwMDAwLCInICsgdGl0bGUgKyAnIiwgIicgKyBjYXB0aW9uICsgJyIsIDApXHJcbicpOw0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKGMpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGMudGltZW91dCA9IG51bGw7DQogICAgICAgICAgICAgICAgICAgICAgICBjLnN0ZGluLndyaXRlKCckb2JqQmFsbG9vbi5kaXNwb3NlKCk7ZXhpdFxuJyk7DQogICAgICAgICAgICAgICAgICAgIH0sIDEwMDAwLCByZXRWYWwuY2hpbGQpOw0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQub24oJ2V4aXQnLCBmdW5jdGlvbiAoKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50aW1lb3V0ICE9IG51bGwpIHsgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3QuX3JlcygnRElTTUlTU0VEJyk7DQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyZXRWYWwpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBicmVhazsNCgkgICAgICAgIGNhc2UgJ2ZyZWVic2QnOg0KICAgICAgICAgICAgY2FzZSAnbGludXgnOg0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgdHJ5DQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jb25zb2xlVWlkID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmNvbnNvbGVVaWQoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC54aW5mbyA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLmdldFhJbmZvKHJldFZhbC5jb25zb2xlVWlkKTsNCgkJCSAgICAgICAgICAgIHJldFZhbC51c2VybmFtZSA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5nZXRVc2VybmFtZShyZXRWYWwuY29uc29sZVVpZCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKHh4ZSkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLl9yZWooeHhlKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAocmV0VmFsKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgIGlmIChyZXF1aXJlKCdtZXNzYWdlLWJveCcpLnplbml0eSkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JyAmJiAhcmVxdWlyZSgnbGludXgtZGJ1cycpLmhhc1NlcnZpY2UoJ29yZy5mcmVlZGVza3RvcC5Ob3RpZmljYXRpb25zJykpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm8gRC1CdXMgc2VydmljZSB0byBoYW5kbGUgbm90aWZpY2F0aW9ucywgc28gd2UgbXVzdCBmYWtlIGEgbm90aWZpY2F0aW9uIHdpdGggWkVOSVRZIC0taW5mbw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXF1aXJlKCdtZXNzYWdlLWJveCcpLnplbml0eS50aW1lb3V0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGltZW91dCBTdXBwb3J0ZWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHJlcXVpcmUoJ21lc3NhZ2UtYm94JykuemVuaXR5LnBhdGgsIFsnemVuaXR5JywgJy0taW5mbycsICctLXRpdGxlPScgKyByZXRWYWwudGl0bGUsICctLXRleHQ9JyArIHJldFZhbC5jYXB0aW9uLCAnLS10aW1lb3V0PTUnXSwgeyB1aWQ6IHJldFZhbC5jb25zb2xlVWlkLCBlbnY6IHsgWEFVVEhPUklUWTogcmV0VmFsLnhpbmZvLnhhdXRob3JpdHksIERJU1BMQVk6IHJldFZhbC54aW5mby5kaXNwbGF5IH0gfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIFRpbWVvdXQgU3VwcG9ydCwgc28gd2UgbXVzdCBmYWtlIGl0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShyZXF1aXJlKCdtZXNzYWdlLWJveCcpLnplbml0eS5wYXRoLCBbJ3plbml0eScsICctLWluZm8nLCAnLS10aXRsZT0nICsgcmV0VmFsLnRpdGxlLCAnLS10ZXh0PScgKyByZXRWYWwuY2FwdGlvbl0sIHsgdWlkOiByZXRWYWwuY29uc29sZVVpZCwgZW52OiB7IFhBVVRIT1JJVFk6IHJldFZhbC54aW5mby54YXV0aG9yaXR5LCBESVNQTEFZOiByZXRWYWwueGluZm8uZGlzcGxheSB9IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKGMpIHsgYy50aW1lb3V0ID0gbnVsbDsgYy5raWxsKCk7IH0sIDUwMDAsIHJldFZhbC5jaGlsZCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC5kZXNjcmlwdG9yTWV0YWRhdGEgPSAndG9hc3RlciAoemVuaXR5L21lc3NhZ2Vib3gpJw0KICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVxdWlyZSgnbWVzc2FnZS1ib3gnKS56ZW5pdHkudmVyc2lvblswXSA8IDMgfHwgKHJlcXVpcmUoJ21lc3NhZ2UtYm94JykuemVuaXR5LnZlcnNpb25bMF0gPT0gMyAmJiByZXF1aXJlKCdtZXNzYWdlLWJveCcpLnplbml0eS52ZXJzaW9uWzFdIDwgMTApKQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFpFTklUWSBOb3RpZmljYXRpb24gaXMgYnJva2VuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVpcmUoJ21lc3NhZ2UtYm94Jykubm90aWZ5c2VuZCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzaW5nIG5vdGlmeS1zZW5kDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXF1aXJlKCd1c2VyLXNlc3Npb25zJykud2hvYW1pKCkgPT0gJ3Jvb3QnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSdyZSByb290LCBzbyB3ZSBtdXN0IHJ1biBpbiBjb3JyZWN0IGNvbnRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3RkaW4ud3JpdGUoJ3N1IC0gJyArIHJldFZhbC51c2VybmFtZSArICcgLWMgIkRJU1BMQVk9XCcnICsgcmV0VmFsLnhpbmZvLmRpc3BsYXkgKyAnXCcgbm90aWZ5LXNlbmQgXCcnICsgcmV0VmFsLnRpdGxlICsgJ1wnIFwnJyArIHJldFZhbC5jYXB0aW9uICsgJ1wnIlxuZXhpdFxuJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSdyZSBhIHJlZ3VsYXIgdXNlciwgc28gd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBzcGVjaWFsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUocmVxdWlyZSgnbWVzc2FnZS1ib3gnKS5ub3RpZnlzZW5kLnBhdGgsIFsnbm90aWZ5LXNlbmQnLCByZXRWYWwudGl0bGUsIHJldFZhbC5jYXB0aW9uXSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLmRlc2NyaXB0b3JNZXRhZGF0YSA9ICd0b2FzdGVyIChub3RpZnktc2VuZCknDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZha2luZyBub3RpZmljYXRpb24gd2l0aCBaRU5JVFkgLS1pbmZvDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXF1aXJlKCdtZXNzYWdlLWJveCcpLnplbml0eS50aW1lb3V0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaW1lb3V0IFN1cHBvcnRlZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHJlcXVpcmUoJ21lc3NhZ2UtYm94JykuemVuaXR5LnBhdGgsIFsnemVuaXR5JywgJy0taW5mbycsICctLXRpdGxlPScgKyByZXRWYWwudGl0bGUsICctLXRleHQ9JyArIHJldFZhbC5jYXB0aW9uLCAnLS10aW1lb3V0PTUnXSwgeyB1aWQ6IHJldFZhbC5jb25zb2xlVWlkLCBlbnY6IHsgWEFVVEhPUklUWTogcmV0VmFsLnhpbmZvLnhhdXRob3JpdHksIERJU1BMQVk6IHJldFZhbC54aW5mby5kaXNwbGF5IH0gfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBObyBUaW1lb3V0IFN1cHBvcnQsIHNvIHdlIG11c3QgZmFrZSBpdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHJlcXVpcmUoJ21lc3NhZ2UtYm94JykuemVuaXR5LnBhdGgsIFsnemVuaXR5JywgJy0taW5mbycsICctLXRpdGxlPScgKyByZXRWYWwudGl0bGUsICctLXRleHQ9JyArIHJldFZhbC5jYXB0aW9uXSwgeyB1aWQ6IHJldFZhbC5jb25zb2xlVWlkLCBlbnY6IHsgWEFVVEhPUklUWTogcmV0VmFsLnhpbmZvLnhhdXRob3JpdHksIERJU1BMQVk6IHJldFZhbC54aW5mby5kaXNwbGF5IH0gfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKGMpIHsgYy50aW1lb3V0ID0gbnVsbDsgYy5raWxsKCk7IH0sIDUwMDAsIHJldFZhbC5jaGlsZCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLmRlc2NyaXB0b3JNZXRhZGF0YSA9ICd0b2FzdGVyICh6ZW5pdHkvbWVzc2FnZWJveCknDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBaRU5JVFkgTm90aWZpY2F0aW9uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHJlcXVpcmUoJ21lc3NhZ2UtYm94JykuemVuaXR5LnBhdGgsIFsnemVuaXR5JywgJy0tbm90aWZpY2F0aW9uJywgJy0tdGl0bGU9JyArIHRpdGxlLCAnLS10ZXh0PScgKyBjYXB0aW9uLCAnLS10aW1lb3V0PTUnXSwgeyB1aWQ6IHJldFZhbC5jb25zb2xlVWlkLCBlbnY6IHsgWEFVVEhPUklUWTogcmV0VmFsLnhpbmZvLnhhdXRob3JpdHksIERJU1BMQVk6IHJldFZhbC54aW5mby5kaXNwbGF5IH0gfSk7ICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC5kZXNjcmlwdG9yTWV0YWRhdGEgPSAndG9hc3RlciAoemVuaXR5L25vdGlmaWNhdGlvbiknDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQucGFyZW50ID0gcmV0VmFsOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnN0ZGVyci5zdHIgPSAnJzsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgIH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC5vbignZXhpdCcsIGZ1bmN0aW9uIChjb2RlKQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRpbWVvdXQpIHsgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5fcmVzKCdESVNNSVNTRUQnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgdXRpbCA9IGZpbmRQYXRoKCdrZGlhbG9nJyk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbCkgDQoJCQkgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXNlIEtESUFMT0cNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeGRnID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmZpbmRFbnYocmV0VmFsLmNvbnNvbGVVaWQsICdYREdfUlVOVElNRV9ESVInKTsgaWYgKHhkZyA9PSBudWxsKSB7IHhkZyA9ICcnOyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXRWYWwueGluZm8gfHwgIXJldFZhbC54aW5mby5kaXNwbGF5IHx8ICFyZXRWYWwueGluZm8ueGF1dGhvcml0eSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fcmVqKCdJ", 16000); - memcpy_s(_toaster + 16000, 4708, "bnRlcm5hbCBFcnJvcicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJldFZhbCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KCQkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuX25vdGlmeSA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSh1dGlsLCBbJ2tkaWFsb2cnLCAnLS10aXRsZScsIHJldFZhbC50aXRsZSwgJy0tcGFzc2l2ZXBvcHVwJywgcmV0VmFsLmNhcHRpb24sICc1J10sIHsgdWlkOiByZXRWYWwuY29uc29sZVVpZCwgZW52OiB7IERJU1BMQVk6IHJldFZhbC54aW5mby5kaXNwbGF5LCBYQVVUSE9SSVRZOiByZXRWYWwueGluZm8ueGF1dGhvcml0eSwgWERHX1JVTlRJTUVfRElSOiB4ZGcgfSB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuX25vdGlmeS5kZXNjcmlwdG9yTWV0YWRhdGEgPSAndG9hc3RlciAoa2RpYWxvZyknDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLl9ub3RpZnkucGFyZW50ID0gcmV0VmFsOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fbm90aWZ5LnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuX25vdGlmeS5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLl9ub3RpZnkub24oJ2V4aXQnLCBmdW5jdGlvbiAoY29kZSkgeyB0aGlzLnBhcmVudC5fcmVzKCdESVNNSVNTRUQnKTsgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVpcmUoJ21lc3NhZ2UtYm94JykueG1lc3NhZ2UpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuX21iID0gcmVxdWlyZSgnbWVzc2FnZS1ib3gnKS5jcmVhdGUodGl0bGUsIGNhcHRpb24sIDUsICdPSycpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuX21iLnJldCA9IHJldFZhbDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLl9tYi50aGVuKGZ1bmN0aW9uICgpIHsgdGhpcy5yZXQuX3JlcygnRElTTUlTU0VEJyk7IH0sIGZ1bmN0aW9uICgpIHsgdGhpcy5yZXQuX3JlcygnRElTTUlTU0VEJyk7IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuX3JlaignWmVuaXR5L0tEaWFsb2cveG1lc3NhZ2Ugbm90IGZvdW5kJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSAnZGFyd2luJzoNCiAgICAgICAgICAgICAgICByZXRWYWwuX3RvYXN0ID0gcmVxdWlyZSgnbWVzc2FnZS1ib3gnKS5ub3RpZnkodGl0bGUsIGNhcHRpb24pOw0KICAgICAgICAgICAgICAgIHJldFZhbC5fdG9hc3QucGFyZW50ID0gcmV0VmFsOw0KICAgICAgICAgICAgICAgIHJldFZhbC5fdG9hc3QudGhlbihmdW5jdGlvbiAodikgeyB0aGlzLnBhcmVudC5fcmVzKHYpOyB9LCBmdW5jdGlvbiAoZSkgeyB0aGlzLnBhcmVudC5fcmVqKGUpOyB9KTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiAocmV0VmFsKTsNCiAgICB9Ow0KICAgIGlmKHByb2Nlc3MucGxhdGZvcm0gPT0gJ3dpbjMyJykNCiAgICB7DQogICAgICAgIHRoaXMuX2NvbnRhaW5lclRvYXN0ID0gZnVuY3Rpb24gX2NvbnRhaW5lclRvYXN0KGNhcHRpb24sIHRpdGxlKQ0KICAgICAgICB7DQogICAgICAgICAgICB2YXIgdG9hc3Q7DQogICAgICAgICAgICB2YXIgYmFsbG9vbjsNCg0KICAgICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdG9hc3QgPSByZXF1aXJlKCd3aW4tY29uc29sZScpOw0KICAgICAgICAgICAgICAgIGJhbGxvb24gPSB0b2FzdC5TZXRUcmF5SWNvbih7IHN6SW5mbzogY2FwdGlvbiwgc3pJbmZvVGl0bGU6IHRpdGxlLCBiYWxsb29uT25seTogdHJ1ZSB9KTsNCiAgICAgICAgICAgICAgICBiYWxsb29uLm9uKCdUb2FzdERpc21pc3NlZCcsIGZ1bmN0aW9uICgpIHsgcHJvY2Vzcy5leGl0KCk7IH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgY2F0Y2goZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBwcm9jZXNzLmV4aXQoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHJlcXVpcmUoJ2NoaWxkLWNvbnRhaW5lcicpLm1lc3NhZ2UoeyBzdGF0dXM6ICdvaycsIHBpZDogcHJvY2Vzcy5waWR9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGNhdGNoKGVlKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdmFyIHQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIChiKSB7IGIucmVtb3ZlKCk7IHByb2Nlc3MuZXhpdCgpOyB9LCA3MDAwLCBiYWxsb29uKTsNCiAgICAgICAgfQ0KICAgIH0NCn0NCg0KbW9kdWxlLmV4cG9ydHMgPSBuZXcgVG9hc3RlcigpOw0KaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JyAmJiAhcmVxdWlyZSgnbGludXgtZGJ1cycpLmhhc1NlcnZpY2UpDQp7DQogICAgcmVxdWlyZSgnbGludXgtZGJ1cycpLmhhc1NlcnZpY2UgPSBmdW5jdGlvbiBoYXNTZXJ2aWNlKG5hbWUpDQogICAgew0KICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICBjaGlsZC5zdGRlcnIuc3RyID0gJyc7IGNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoJ2NhdCAvdXNyL3NoYXJlL2RidXMtMS9zZXJ2aWNlcy8qLnNlcnZpY2UgfCBncmVwICInICsgbmFtZSArICciIHwgYXdrIC1GPSBcJ3sgaWYoICQyPT0iJyArIG5hbWUgKyAnIiApIHsgcHJpbnQgJDI7IH0gfVwnXG5leGl0XG4nKTsNCiAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgcmV0dXJuIChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSAhPSAnJyk7DQogICAgfTsNCn0=", 4708); - ILibBase64DecodeEx((unsigned char*)_toaster, 20708, (unsigned char*)_toaster + 20708); - 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 + 20708); + char *_toaster = ILibMemory_Allocate(36610, 0, NULL, NULL); + memcpy_s(_toaster + 0, 20920, "LyoNCkNvcHlyaWdodCAyMDE4IEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQp2YXIgcHJvbWlzZSA9IHJlcXVpcmUoJ3Byb21pc2UnKTsNCg0KaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JyB8fCBwcm9jZXNzLnBsYXRmb3JtID09ICdkYXJ3aW4nIHx8IHByb2Nlc3MucGxhdGZvcm0gPT0gJ2ZyZWVic2QnKQ0Kew0KICAgIGZ1bmN0aW9uIGZpbmRQYXRoKGFwcCkNCiAgICB7DQogICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsNCiAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnbGludXgnIHx8IHByb2Nlc3MucGxhdGZvcm0gPT0gJ2ZyZWVic2QnKQ0KICAgICAgICB7DQogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyAiICsgYXBwICsgIiB8IGF3ayAneyBwcmludCAkMiB9J1xuZXhpdFxuIik7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyAiICsgYXBwICsgIlxuZXhpdFxuIik7DQogICAgICAgIH0NCiAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpOw0KICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnZnJlZWJzZCcgJiYgY2hpbGQuc3Rkb3V0LnN0ciA9PSAnJyAmJiByZXF1aXJlKCdmcycpLmV4aXN0c1N5bmMoJy91c3IvbG9jYWwvYmluLycgKyBhcHApKSB7IHJldHVybiAoJy91c3IvbG9jYWwvYmluLycgKyBhcHApOyB9DQogICAgICAgIHJldHVybiAoY2hpbGQuc3Rkb3V0LnN0ciA9PSAnJyA/IG51bGwgOiBjaGlsZC5zdGRvdXQuc3RyKTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIFRvYXN0ZXIoKQ0Kew0KICAgIHRoaXMuX09iamVjdElEID0gJ3RvYXN0ZXInOw0KICAgIHRoaXMuVG9hc3QgPSBmdW5jdGlvbiBUb2FzdCh0aXRsZSwgY2FwdGlvbiwgdHNpZCkNCiAgICB7DQogICAgICAgIHZhciByZXRWYWwgPSBuZXcgcHJvbWlzZShmdW5jdGlvbiAocmVzLCByZWopIHsgdGhpcy5fcmVzID0gcmVzOyB0aGlzLl9yZWogPSByZWo7IH0pOw0KICAgICAgICByZXRWYWwudGl0bGUgPSB0aXRsZTsNCiAgICAgICAgcmV0VmFsLmNhcHRpb24gPSBjYXB0aW9uOw0KDQogICAgICAgIHN3aXRjaCAocHJvY2Vzcy5wbGF0Zm9ybSkNCiAgICAgICAgew0KICAgICAgICAgICAgY2FzZSAnd2luMzInOg0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGNpZDsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLm9wdGlvbnMgPSB7IGVudjogeyBfdGl0bGU6IHRpdGxlLCBfY2FwdGlvbjogY2FwdGlvbiB9IH07DQogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGMxZSBpbiBwcm9jZXNzLmVudikNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLm9wdGlvbnMuZW52W2MxZV0gPSBwcm9jZXNzLmVudltjMWVdOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwub3B0aW9ucy51aWQgPSB0c2lkID09IG51bGwgPyByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpIDogdHNpZDsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRWYWwub3B0aW9ucy51aWQgPT0gKGNpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5nZXRQcm9jZXNzT3duZXJOYW1lKHByb2Nlc3MucGlkKS50c2lkKSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmV0VmFsLm9wdGlvbnMudWlkOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRzaWQgIT0gbnVsbCAmJiBjaWQgIT0gMCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fcmVqKCdJbnN1ZmZpY2llbnQgcGVybWlzc2lvbiB0byBkaXNwbGF5IHRvYXN0IGFzIHVpZDogJyArIHRzaWQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJldFZhbCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5vcHRpb25zLnR5cGUgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuU3Bhd25UeXBlcy5VU0VSOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGNhdGNoIChlZSkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLl9yZWooJ0Nhbm5vdCBkaXNwbGF5IHVzZXIgbm90aWZpY2F0aW9uIHdoZW4gYSB1c2VyIGlzIG5vdCBsb2dnZWQgaW4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAocmV0VmFsKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShwcm9jZXNzLmVudlsnd2luZGlyJ10gKyAnXFxTeXN0ZW0zMlxcV2luZG93c1Bvd2VyU2hlbGxcXHYxLjBcXHBvd2Vyc2hlbGwuZXhlJywgWydwb3dlcnNoZWxsJywgJy1ub3Byb2ZpbGUnLCAnLW5vbG9nbycsICctY29tbWFuZCcsICctJ10sIHJldFZhbC5vcHRpb25zKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLmRlc2NyaXB0b3JNZXRhZGF0YSA9ICd0b2FzdGVyJzsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnRvYXN0ID0gcmV0VmFsOw0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3Rkb3V0LnN0ZGluID0gcmV0VmFsLmNoaWxkLnN0ZGluOw0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3RkZXJyLnN0ZGluID0gcmV0VmFsLmNoaWxkLnN0ZGluOw0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgaWYgKGMudG9TdHJpbmcoKS5pbmNsdWRlcygnPERJU01JU1NFRD4nKSkgeyB0aGlzLnN0ZGluLndyaXRlKCdleGl0XG4nKTsgfSB9KTsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnN0ZGVyci5vbmNlKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdGRpbi53cml0ZSgnJG9iakJhbGxvb24uZGlzcG9zZSgpO2V4aXRcbicpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnN0ZGluLndyaXRlKCdbU3lzdGVtLlJlZmxlY3Rpb24uQXNzZW1ibHldOjpMb2FkV2l0aFBhcnRpYWxOYW1lKCJTeXN0ZW0uV2luZG93cy5Gb3JtcyIpXHJcbicpOw0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3RkaW4ud3JpdGUoJyRvYmpCYWxsb29uID0gTmV3LU9iamVjdCBTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ob3RpZnlJY29uXHJcbicpOw0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3RkaW4ud3JpdGUoJyRvYmpCYWxsb29uLkljb24gPSBbU3lzdGVtLkRyYXdpbmcuU3lzdGVtSWNvbnNdOjpJbmZvcm1hdGlvblxyXG4nKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnN0ZGluLndyaXRlKCckb2JqQmFsbG9vbi5WaXNpYmxlID0gJFRydWVcclxuJyk7DQogICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC5zdGRpbi53cml0ZSgnUmVnaXN0ZXItT2JqZWN0RXZlbnQgLUlucHV0T2JqZWN0ICRvYmpCYWxsb29uIC1FdmVudE5hbWUgQmFsbG9vblRpcENsb3NlZCAtQWN0aW9uIHsgJG9iakJhbGxvb24uZGlzcG9zZSgpO1dyaXRlLUhvc3QgIjxgRElTTUlTU0VEYD4iIH0nKQ0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3RkaW4ud3JpdGUoJyRvYmpCYWxsb29uLlNob3dCYWxsb29uVGlwKDEwMDAwLCAkZW52Ol90aXRsZSwgJGVudjpfY2FwdGlvbiwgMClcclxuJyk7DQogICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoYykNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgYy50aW1lb3V0ID0gbnVsbDsNCiAgICAgICAgICAgICAgICAgICAgICAgIGMuc3RkaW4ud3JpdGUoJyRvYmpCYWxsb29uLmRpc3Bvc2UoKTtleGl0XG4nKTsNCiAgICAgICAgICAgICAgICAgICAgfSwgMTAwMDAsIHJldFZhbC5jaGlsZCk7DQogICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC5vbignZXhpdCcsIGZ1bmN0aW9uICgpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRpbWVvdXQgIT0gbnVsbCkgeyBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTsgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdC5fcmVzKCdESVNNSVNTRUQnKTsNCiAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJldFZhbCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGJyZWFrOw0KCSAgICAgICAgY2FzZSAnZnJlZWJzZCc6DQogICAgICAgICAgICBjYXNlICdsaW51eCc6DQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNvbnNvbGVVaWQgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLnhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8ocmV0VmFsLmNvbnNvbGVVaWQpOw0KCQkJICAgICAgICAgICAgcmV0VmFsLnVzZXJuYW1lID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmdldFVzZXJuYW1lKHJldFZhbC5jb25zb2xlVWlkKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBjYXRjaCAoeHhlKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuX3Jlaih4eGUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyZXRWYWwpOw0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVpcmUoJ21lc3NhZ2UtYm94JykuemVuaXR5KQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnbGludXgnICYmICFyZXF1aXJlKCdsaW51eC1kYnVzJykuaGFzU2VydmljZSgnb3JnLmZyZWVkZXNrdG9wLk5vdGlmaWNhdGlvbnMnKSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBObyBELUJ1cyBzZXJ2aWNlIHRvIGhhbmRsZSBub3RpZmljYXRpb25zLCBzbyB3ZSBtdXN0IGZha2UgYSBub3RpZmljYXRpb24gd2l0aCBaRU5JVFkgLS1pbmZvDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVpcmUoJ21lc3NhZ2UtYm94JykuemVuaXR5LnRpbWVvdXQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaW1lb3V0IFN1cHBvcnRlZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUocmVxdWlyZSgnbWVzc2FnZS1ib3gnKS56ZW5pdHkucGF0aCwgWyd6ZW5pdHknLCAnLS1pbmZvJywgJy0tdGl0bGU9JyArIHJldFZhbC50aXRsZSwgJy0tdGV4dD0nICsgcmV0VmFsLmNhcHRpb24sICctLXRpbWVvdXQ9NSddLCB7IHVpZDogcmV0VmFsLmNvbnNvbGVVaWQsIGVudjogeyBYQVVUSE9SSVRZOiByZXRWYWwueGluZm8ueGF1dGhvcml0eSwgRElTUExBWTogcmV0VmFsLnhpbmZvLmRpc3BsYXkgfSB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm8gVGltZW91dCBTdXBwb3J0LCBzbyB3ZSBtdXN0IGZha2UgaXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHJlcXVpcmUoJ21lc3NhZ2UtYm94JykuemVuaXR5LnBhdGgsIFsnemVuaXR5JywgJy0taW5mbycsICctLXRpdGxlPScgKyByZXRWYWwudGl0bGUsICctLXRleHQ9JyArIHJldFZhbC5jYXB0aW9uXSwgeyB1aWQ6IHJldFZhbC5jb25zb2xlVWlkLCBlbnY6IHsgWEFVVEhPUklUWTogcmV0VmFsLnhpbmZvLnhhdXRob3JpdHksIERJU1BMQVk6IHJldFZhbC54aW5mby5kaXNwbGF5IH0gfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoYykgeyBjLnRpbWVvdXQgPSBudWxsOyBjLmtpbGwoKTsgfSwgNTAwMCwgcmV0VmFsLmNoaWxkKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLmRlc2NyaXB0b3JNZXRhZGF0YSA9ICd0b2FzdGVyICh6ZW5pdHkvbWVzc2FnZWJveCknDQogICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXF1aXJlKCdtZXNzYWdlLWJveCcpLnplbml0eS52ZXJzaW9uWzBdIDwgMyB8fCAocmVxdWlyZSgnbWVzc2FnZS1ib3gnKS56ZW5pdHkudmVyc2lvblswXSA9PSAzICYmIHJlcXVpcmUoJ21lc3NhZ2UtYm94JykuemVuaXR5LnZlcnNpb25bMV0gPCAxMCkpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWkVOSVRZIE5vdGlmaWNhdGlvbiBpcyBicm9rZW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWlyZSgnbWVzc2FnZS1ib3gnKS5ub3RpZnlzZW5kKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNpbmcgbm90aWZ5LXNlbmQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS53aG9hbWkoKSA9PSAncm9vdCcpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3JlIHJvb3QsIHNvIHdlIG11c3QgcnVuIGluIGNvcnJlY3QgY29udGV4dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC5zdGRpbi53cml0ZSgnc3UgLSAnICsgcmV0VmFsLnVzZXJuYW1lICsgJyAtYyAiRElTUExBWT1cJycgKyByZXRWYWwueGluZm8uZGlzcGxheSArICdcJyBub3RpZnktc2VuZCBcJycgKyByZXRWYWwudGl0bGUgKyAnXCcgXCcnICsgcmV0VmFsLmNhcHRpb24gKyAnXCciXG5leGl0XG4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3JlIGEgcmVndWxhciB1c2VyLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShyZXF1aXJlKCdtZXNzYWdlLWJveCcpLm5vdGlmeXNlbmQucGF0aCwgWydub3RpZnktc2VuZCcsIHJldFZhbC50aXRsZSwgcmV0VmFsLmNhcHRpb25dKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuZGVzY3JpcHRvck1ldGFkYXRhID0gJ3RvYXN0ZXIgKG5vdGlmeS1zZW5kKScNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmFraW5nIG5vdGlmaWNhdGlvbiB3aXRoIFpFTklUWSAtLWluZm8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVpcmUoJ21lc3NhZ2UtYm94JykuemVuaXR5LnRpbWVvdXQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRpbWVvdXQgU3VwcG9ydGVkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUocmVxdWlyZSgnbWVzc2FnZS1ib3gnKS56ZW5pdHkucGF0aCwgWyd6ZW5pdHknLCAnLS1pbmZvJywgJy0tdGl0bGU9JyArIHJldFZhbC50aXRsZSwgJy0tdGV4dD0nICsgcmV0VmFsLmNhcHRpb24sICctLXRpbWVvdXQ9NSddLCB7IHVpZDogcmV0VmFsLmNvbnNvbGVVaWQsIGVudjogeyBYQVVUSE9SSVRZOiByZXRWYWwueGluZm8ueGF1dGhvcml0eSwgRElTUExBWTogcmV0VmFsLnhpbmZvLmRpc3BsYXkgfSB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIFRpbWVvdXQgU3VwcG9ydCwgc28gd2UgbXVzdCBmYWtlIGl0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUocmVxdWlyZSgnbWVzc2FnZS1ib3gnKS56ZW5pdHkucGF0aCwgWyd6ZW5pdHknLCAnLS1pbmZvJywgJy0tdGl0bGU9JyArIHJldFZhbC50aXRsZSwgJy0tdGV4dD0nICsgcmV0VmFsLmNhcHRpb25dLCB7IHVpZDogcmV0VmFsLmNvbnNvbGVVaWQsIGVudjogeyBYQVVUSE9SSVRZOiByZXRWYWwueGluZm8ueGF1dGhvcml0eSwgRElTUExBWTogcmV0VmFsLnhpbmZvLmRpc3BsYXkgfSB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoYykgeyBjLnRpbWVvdXQgPSBudWxsOyBjLmtpbGwoKTsgfSwgNTAwMCwgcmV0VmFsLmNoaWxkKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuZGVzY3JpcHRvck1ldGFkYXRhID0gJ3RvYXN0ZXIgKHplbml0eS9tZXNzYWdlYm94KScNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIFpFTklUWSBOb3RpZmljYXRpb24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUocmVxdWlyZSgnbWVzc2FnZS1ib3gnKS56ZW5pdHkucGF0aCwgWyd6ZW5pdHknLCAnLS1ub3RpZmljYXRpb24nLCAnLS10aXRsZT0nICsgdGl0bGUsICctLXRleHQ9JyArIGNhcHRpb24sICctLXRpbWVvdXQ9NSddLCB7IHVpZDogcmV0VmFsLmNvbnNvbGVVaWQsIGVudjogeyBYQVVUSE9SSVRZOiByZXRWYWwueGluZm8ueGF1dGhvcml0eSwgRElTUExBWTogcmV0VmFsLnhpbmZvLmRpc3BsYXkgfSB9KTsgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLmRlc2NyaXB0b3JNZXRhZGF0YSA9ICd0b2FzdGVyICh6ZW5pdHkvbm90aWZpY2F0aW9uKScNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC5wYXJlbnQgPSByZXRWYWw7DQogICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3RkZXJyLnN0ciA9ICcnOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyAgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLm9uKCdleGl0JywgZnVuY3Rpb24gKGNvZGUpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudGltZW91dCkgeyBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTsgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Ll9yZXMoJ0RJU01JU1NFRCcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB1dGlsID0gZmluZFBhdGgoJ2tkaWFsb2cnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1dGlsKSANCgkJCSAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1c2UgS0RJQUxPRw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4ZGcgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuZmluZEVudihyZXRWYWwuY29uc29sZVVpZCwgJ1hER19SVU5USU1FX0RJUicpOyBpZiAoeGRnID09IG51bGwpIHsgeGRnID0gJyc7IH0NCiAgICAgICAgICAgICAgICAgICAg", 16000); + memcpy_s(_toaster + 16000, 4920, "ICAgICAgICBpZiAoIXJldFZhbC54aW5mbyB8fCAhcmV0VmFsLnhpbmZvLmRpc3BsYXkgfHwgIXJldFZhbC54aW5mby54YXV0aG9yaXR5KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLl9yZWooJ0ludGVybmFsIEVycm9yJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAocmV0VmFsKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQoJCQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fbm90aWZ5ID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHV0aWwsIFsna2RpYWxvZycsICctLXRpdGxlJywgcmV0VmFsLnRpdGxlLCAnLS1wYXNzaXZlcG9wdXAnLCByZXRWYWwuY2FwdGlvbiwgJzUnXSwgeyB1aWQ6IHJldFZhbC5jb25zb2xlVWlkLCBlbnY6IHsgRElTUExBWTogcmV0VmFsLnhpbmZvLmRpc3BsYXksIFhBVVRIT1JJVFk6IHJldFZhbC54aW5mby54YXV0aG9yaXR5LCBYREdfUlVOVElNRV9ESVI6IHhkZyB9IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fbm90aWZ5LmRlc2NyaXB0b3JNZXRhZGF0YSA9ICd0b2FzdGVyIChrZGlhbG9nKScNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuX25vdGlmeS5wYXJlbnQgPSByZXRWYWw7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLl9ub3RpZnkuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fbm90aWZ5LnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuX25vdGlmeS5vbignZXhpdCcsIGZ1bmN0aW9uIChjb2RlKSB7IHRoaXMucGFyZW50Ll9yZXMoJ0RJU01JU1NFRCcpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWlyZSgnbWVzc2FnZS1ib3gnKS54bWVzc2FnZSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fbWIgPSByZXF1aXJlKCdtZXNzYWdlLWJveCcpLmNyZWF0ZSh0aXRsZSwgY2FwdGlvbiwgNSwgJ09LJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fbWIucmV0ID0gcmV0VmFsOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuX21iLnRoZW4oZnVuY3Rpb24gKCkgeyB0aGlzLnJldC5fcmVzKCdESVNNSVNTRUQnKTsgfSwgZnVuY3Rpb24gKCkgeyB0aGlzLnJldC5fcmVzKCdESVNNSVNTRUQnKTsgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fcmVqKCdaZW5pdHkvS0RpYWxvZy94bWVzc2FnZSBub3QgZm91bmQnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICdkYXJ3aW4nOg0KICAgICAgICAgICAgICAgIHJldFZhbC5fdG9hc3QgPSByZXF1aXJlKCdtZXNzYWdlLWJveCcpLm5vdGlmeSh0aXRsZSwgY2FwdGlvbik7DQogICAgICAgICAgICAgICAgcmV0VmFsLl90b2FzdC5wYXJlbnQgPSByZXRWYWw7DQogICAgICAgICAgICAgICAgcmV0VmFsLl90b2FzdC50aGVuKGZ1bmN0aW9uICh2KSB7IHRoaXMucGFyZW50Ll9yZXModik7IH0sIGZ1bmN0aW9uIChlKSB7IHRoaXMucGFyZW50Ll9yZWooZSk7IH0pOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIChyZXRWYWwpOw0KICAgIH07DQogICAgaWYocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnd2luMzInKQ0KICAgIHsNCiAgICAgICAgdGhpcy5fY29udGFpbmVyVG9hc3QgPSBmdW5jdGlvbiBfY29udGFpbmVyVG9hc3QoY2FwdGlvbiwgdGl0bGUpDQogICAgICAgIHsNCiAgICAgICAgICAgIHZhciB0b2FzdDsNCiAgICAgICAgICAgIHZhciBiYWxsb29uOw0KDQogICAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0b2FzdCA9IHJlcXVpcmUoJ3dpbi1jb25zb2xlJyk7DQogICAgICAgICAgICAgICAgYmFsbG9vbiA9IHRvYXN0LlNldFRyYXlJY29uKHsgc3pJbmZvOiBjYXB0aW9uLCBzekluZm9UaXRsZTogdGl0bGUsIGJhbGxvb25Pbmx5OiB0cnVlIH0pOw0KICAgICAgICAgICAgICAgIGJhbGxvb24ub24oJ1RvYXN0RGlzbWlzc2VkJywgZnVuY3Rpb24gKCkgeyBwcm9jZXNzLmV4aXQoKTsgfSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBjYXRjaChlKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcmVxdWlyZSgnY2hpbGQtY29udGFpbmVyJykubWVzc2FnZSh7IHN0YXR1czogJ29rJywgcGlkOiBwcm9jZXNzLnBpZH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgY2F0Y2goZWUpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0KCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB2YXIgdCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKGIpIHsgYi5yZW1vdmUoKTsgcHJvY2Vzcy5leGl0KCk7IH0sIDcwMDAsIGJhbGxvb24pOw0KICAgICAgICB9DQogICAgfQ0KfQ0KDQptb2R1bGUuZXhwb3J0cyA9IG5ldyBUb2FzdGVyKCk7DQppZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnbGludXgnICYmICFyZXF1aXJlKCdsaW51eC1kYnVzJykuaGFzU2VydmljZSkNCnsNCiAgICByZXF1aXJlKCdsaW51eC1kYnVzJykuaGFzU2VydmljZSA9IGZ1bmN0aW9uIGhhc1NlcnZpY2UobmFtZSkNCiAgICB7DQogICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgIGNoaWxkLnN0ZGVyci5zdHIgPSAnJzsgY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgnY2F0IC91c3Ivc2hhcmUvZGJ1cy0xL3NlcnZpY2VzLyouc2VydmljZSB8IGdyZXAgIicgKyBuYW1lICsgJyIgfCBhd2sgLUY9IFwneyBpZiggJDI9PSInICsgbmFtZSArICciICkgeyBwcmludCAkMjsgfSB9XCdcbmV4aXRcbicpOw0KICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KICAgICAgICByZXR1cm4gKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpICE9ICcnKTsNCiAgICB9Ow0KfQ==", 4920); + ILibBase64DecodeEx((unsigned char*)_toaster, 20920, (unsigned char*)_toaster + 20920); + 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 + 20920); duk_pcall_method(ctx, 2); duk_pop(ctx); free(_toaster); diff --git a/modules/toaster.js b/modules/toaster.js index cd6cb93..8158dda 100644 --- a/modules/toaster.js +++ b/modules/toaster.js @@ -53,6 +53,10 @@ function Toaster() { var cid; retVal.options = { env: { _title: title, _caption: caption } }; + for (var c1e in process.env) + { + retVal.options.env[c1e] = process.env[c1e]; + } try { retVal.options.uid = tsid == null ? require('user-sessions').consoleUid() : tsid; @@ -88,7 +92,7 @@ function Toaster() retVal.child.stdin.write('$objBalloon.Icon = [System.Drawing.SystemIcons]::Information\r\n'); retVal.child.stdin.write('$objBalloon.Visible = $True\r\n'); retVal.child.stdin.write('Register-ObjectEvent -InputObject $objBalloon -EventName BalloonTipClosed -Action { $objBalloon.dispose();Write-Host "<`DISMISSED`>" }') - retVal.child.stdin.write('$objBalloon.ShowBalloonTip(10000,"' + title + '", "' + caption + '", 0)\r\n'); + retVal.child.stdin.write('$objBalloon.ShowBalloonTip(10000, $env:_title, $env:_caption, 0)\r\n'); retVal.child.timeout = setTimeout(function (c) { c.timeout = null;