From 6609e23f78f9b61b28f4e10875a898232a012367 Mon Sep 17 00:00:00 2001 From: Bryan Roe Date: Sun, 31 May 2020 11:14:26 -0700 Subject: [PATCH] Updated windows event hook for power state, to always event on hookup --- microscript/ILibDuktape_Polyfills.c | 2 +- modules/power-monitor.js | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index 2d17a08..ba14ef6 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -2158,7 +2158,7 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) // power-monitor, refer to modules/power-monitor.js for details - duk_peval_string_noresult(ctx, "addModule('power-monitor', Buffer.from('LyoNCkNvcHlyaWdodCAyMDE4LTIwMjAgSW50ZWwgQ29ycG9yYXRpb24NCg0KTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7DQp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQpZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCg0KICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KDQpVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQpTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQpsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCiovDQoNCmZ1bmN0aW9uIHBvd2VyTW9uaXRvcigpDQp7DQogICAgdGhpcy5fT2JqZWN0SUQgPSAncG93ZXItbW9uaXRvcic7DQogICAgcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyLmNhbGwodGhpcywgdHJ1ZSkNCiAgICAgICAgLmNyZWF0ZUV2ZW50KCdjaGFuZ2VkJykNCiAgICAgICAgLmNyZWF0ZUV2ZW50KCdzeCcpDQogICAgICAgIC5jcmVhdGVFdmVudCgnYmF0dGVyeUxldmVsJykNCiAgICAgICAgLmNyZWF0ZUV2ZW50KCdhY2RjJykNCiAgICAgICAgLmNyZWF0ZUV2ZW50KCdkaXNwbGF5Jyk7DQoNCiAgICB0aGlzLl9BQ1N0YXRlID0gMTsNCiAgICB0aGlzLl9CYXR0ZXJ5TGV2ZWwgPSAtMTsNCg0KICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpDQogICAgew0KICAgICAgICAvLyBUaGVzZSBtdXN0IGJlIHJlZ2lzdGVyZWQgQkVGT1JFIG5ld0xpc3RlbmVyIGlzIGhvb2tlZCB1cA0KICAgICAgICB0aGlzLm9uKCdiYXR0ZXJ5TGV2ZWwnLCBmdW5jdGlvbiAobGV2ZWwpIHsgdGhpcy5fQmF0dGVyeUxldmVsID0gbGV2ZWw7IH0pOw0KICAgICAgICB0aGlzLm9uKCdhY2RjJywgZnVuY3Rpb24gKG0pIHsgdGhpcy5fQUNTdGF0ZSA9IChtID09ICdBQycgPyAxIDogMCk7IH0pOw0KICAgIH0NCg0KICAgIHRoaXMub24oJ25ld0xpc3RlbmVyJywgZnVuY3Rpb24gKG5hbWUsIGNhbGxiYWNrKQ0KICAgIHsNCiAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gIT0gJ3dpbjMyJykNCiAgICAgICAgeyAgIC8vIFdpbmRvd3Mgd2lsbCBhbHJlYWR5IHNlbmRzIGFuIGluaXRpYWwgZXZlbnQgd2hlbiB5b3UgaG9va3VwIHRoZSBBQ1BJIGV2ZW50LCBzbyB0aGlzIHdvdWxkIGJlIHJlZHVuZGFudA0KICAgICAgICAgICAgaWYgKG5hbWUgPT0gJ2FjZGMnKSB7IGNhbGxiYWNrLmNhbGwodGhpcywgdGhpcy5fQUNTdGF0ZSA9PSAxID8gJ0FDJyA6ICdCQVRURVJZJyk7IH0NCiAgICAgICAgfQ0KICAgICAgICBpZiAobmFtZSA9PSAnYmF0dGVyeUxldmVsJykgeyBpZiAodGhpcy5fQmF0dGVyeUxldmVsID49IDApIHsgY2FsbGJhY2suY2FsbCh0aGlzLCB0aGlzLl9CYXR0ZXJ5TGV2ZWwpOyB9IH0NCiAgICB9KTsNCg0KICAgIHRoaXMuX2kgPSBzZXRJbW1lZGlhdGUoZnVuY3Rpb24gKHNlbGYpDQogICAgew0KICAgICAgICByZXF1aXJlKCd1c2VyLXNlc3Npb25zJyk7IC8vIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgdGhpcyBpcyB3aGVyZSB0aGUgV2luZG93cyBNZXNzYWdlcyBhcmUgcHJvY2Vzc2VkIGZvciB0aGVzZSBldmVudHMNCiAgICAgICAgZGVsZXRlIHNlbGYuX2k7DQogICAgfSwgdGhpcyk7DQoNCiAgICBpZihwcm9jZXNzLnBsYXRmb3JtID09ICdsaW51eCcpDQogICAgew0KICAgICAgICB0aGlzLl9BQ1BhdGggPSBudWxsOw0KICAgICAgICB0aGlzLl9CYXR0ZXJ5UGF0aCA9IFtdOw0KDQogICAgICAgIHZhciBkZXZpY2VzID0gcmVxdWlyZSgnZnMnKS5yZWFkZGlyU3luYygnL3N5cy9jbGFzcy9wb3dlcl9zdXBwbHknKTsKICAgICAgICBmb3IgKHZhciBpIGluIGRldmljZXMpCiAgICAgICAgewogICAgICAgICAgICBpZiAocmVxdWlyZSgnZnMnKS5yZWFkRmlsZVN5bmMoJy9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5LycgKyBkZXZpY2VzW2ldICsgJy90eXBlJykudG9TdHJpbmcoKS50cmltKCkgPT0gJ01haW5zJykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy5fQUNQYXRoID0gJy9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5LycgKyBkZXZpY2VzW2ldICsgJy8nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9DQogICAgICAgIGZvciAodmFyIGkgaW4gZGV2aWNlcykNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKHJlcXVpcmUoJ2ZzJykucmVhZEZpbGVTeW5jKCcvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS8nICsgZGV2aWNlc1tpXSArICcvdHlwZScpLnRvU3RyaW5nKCkudHJpbSgpID09ICdCYXR0ZXJ5JykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0aGlzLl9CYXR0ZXJ5UGF0aC5wdXNoKCcvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS8nICsgZGV2aWNlc1tpXSArICcvJyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgaWYodGhpcy5fQUNQYXRoICE9IG51bGwpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRoaXMuX0FDU3RhdGUgPSBwYXJzZUludChyZXF1aXJlKCdmcycpLnJlYWRGaWxlU3luYyh0aGlzLl9BQ1BhdGggKyAnb25saW5lJykudG9TdHJpbmcoKS50cmltKCkpOw0KICAgICAgICB9DQogICAgICAgIGlmKHRoaXMuX0JhdHRlcnlQYXRoLmxlbmd0aD4wKQ0KICAgICAgICB7DQogICAgICAgICAgICB0aGlzLl9nZXRCYXR0ZXJ5TGV2ZWwgPSBmdW5jdGlvbiBfZ2V0QmF0dGVyeUxldmVsKCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YXIgc3VtID0gMDsNCiAgICAgICAgICAgICAgICB2YXIgaTsNCiAgICAgICAgICAgICAgICBmb3IgKGkgaW4gdGhpcy5fQmF0dGVyeVBhdGgpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBzdW0gKz0gcGFyc2VJbnQocmVxdWlyZSgnZnMnKS5yZWFkRmlsZVN5bmModGhpcy5fQmF0dGVyeVBhdGhbaV0gKyAnY2FwYWNpdHknKS50b1N0cmluZygpLnRyaW0oKSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHN1bSA9IE1hdGguZmxvb3Ioc3VtIC8gdGhpcy5fQmF0dGVyeVBhdGgubGVuZ3RoKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gKHN1bSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB0aGlzLl9CYXR0ZXJ5TGV2ZWwgPSB0aGlzLl9nZXRCYXR0ZXJ5TGV2ZWwoKTsNCg0KICAgICAgICAgICAgLy8gU2luY2UgQmF0dGVyeSBMZXZlbHMgYXJlIG5vdCBwcm9wYWdhdGVkIHdpdGggQUNQSSwgd2UgbmVlZCB0byBwZXJpb2RpY2FsbHkgY2hlY2sgdGhlIGJhdHRlcnkgbGV2ZWwNCiAgICAgICAgICAgIHRoaXMuX0JhdHRlcnlMZXZlbENoZWNrID0gZnVuY3Rpb24gX0JhdHRlcnlMZXZlbENoZWNrKCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YXIgdmFsID0gdGhpcy5fZ2V0QmF0dGVyeUxldmVsKCk7DQogICAgICAgICAgICAgICAgaWYgKHZhbCAhPSB0aGlzLl9CYXR0ZXJ5TGV2ZWwpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9CYXR0ZXJ5TGV2ZWwgPSB2YWw7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnYmF0dGVyeUxldmVsJywgdmFsKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9Ow0KICAgICAgICAgICAgdGhpcy5fQmF0dENoZWNrSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoc2VsZikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBzZWxmLl9CYXR0ZXJ5TGV2ZWxDaGVjay5jYWxsKHNlbGYpOw0KICAgICAgICAgICAgfSwgMzAwMDAwLCB0aGlzKTsNCiAgICAgICAgfQ0KICAgICAgICB0aGlzLl9hY3BpU2luayA9IGZ1bmN0aW9uIF9hY3BpU2luayhhY3BpRXZlbnQpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmKGFjcGlFdmVudC5uYW1lID09ICdhY19hZGFwdGVyJykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBfYWNwaVNpbmsuc2VsZi5fQUNTdGF0ZSA9IGFjcGlFdmVudC52YWx1ZTsNCiAgICAgICAgICAgICAgICBfYWNwaVNpbmsuc2VsZi5lbWl0KCdhY2RjJywgYWNwaUV2ZW50LnZhbHVlID09IDEgPyAnQUMnIDogJ0JBVFRFUlknKTsNCiAgICAgICAgICAgICAgICBfYWNwaVNpbmsuc2VsZi5fQmF0dGVyeUxldmVsQ2hlY2soKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfTsNCiAgICAgICAgdGhpcy5fYWNwaVNpbmsuc2VsZiA9IHRoaXM7DQogICAgICAgIHJlcXVpcmUoJ2xpbnV4LWFjcGknKS5vbignYWNwaScsIHRoaXMuX2FjcGlTaW5rKTsNCiAgICB9DQp9DQoNCm1vZHVsZS5leHBvcnRzID0gbmV3IHBvd2VyTW9uaXRvcigpOw==', 'base64').toString());"); + duk_peval_string_noresult(ctx, "addModule('power-monitor', Buffer.from('LyoNCkNvcHlyaWdodCAyMDE4LTIwMjAgSW50ZWwgQ29ycG9yYXRpb24NCg0KTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7DQp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQpZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCg0KICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KDQpVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQpTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQpsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCiovDQoNCmZ1bmN0aW9uIHBvd2VyTW9uaXRvcigpDQp7DQogICAgdGhpcy5fT2JqZWN0SUQgPSAncG93ZXItbW9uaXRvcic7DQogICAgcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyLmNhbGwodGhpcywgdHJ1ZSkNCiAgICAgICAgLmNyZWF0ZUV2ZW50KCdjaGFuZ2VkJykNCiAgICAgICAgLmNyZWF0ZUV2ZW50KCdzeCcpDQogICAgICAgIC5jcmVhdGVFdmVudCgnYmF0dGVyeUxldmVsJykNCiAgICAgICAgLmNyZWF0ZUV2ZW50KCdhY2RjJykNCiAgICAgICAgLmNyZWF0ZUV2ZW50KCdkaXNwbGF5Jyk7DQoNCiAgICB0aGlzLl9BQ1N0YXRlID0gMTsNCiAgICB0aGlzLl9CYXR0ZXJ5TGV2ZWwgPSAtMTsNCg0KICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpDQogICAgew0KICAgICAgICAvLyBUaGVzZSBtdXN0IGJlIHJlZ2lzdGVyZWQgQkVGT1JFIG5ld0xpc3RlbmVyIGlzIGhvb2tlZCB1cA0KICAgICAgICB0aGlzLm9uKCdiYXR0ZXJ5TGV2ZWwnLCBmdW5jdGlvbiAobGV2ZWwpIHsgdGhpcy5fQmF0dGVyeUxldmVsID0gbGV2ZWw7IH0pOw0KICAgICAgICB0aGlzLm9uKCdhY2RjJywgZnVuY3Rpb24gKG0pIHsgdGhpcy5fQUNTdGF0ZSA9IChtID09ICdBQycgPyAxIDogMCk7IH0pOw0KICAgIH0NCg0KICAgIHRoaXMub24oJ25ld0xpc3RlbmVyJywgZnVuY3Rpb24gKG5hbWUsIGNhbGxiYWNrKQ0KICAgIHsNCiAgICAgICAgaWYgKG5hbWUgPT0gJ2FjZGMnKSB7IGNhbGxiYWNrLmNhbGwodGhpcywgdGhpcy5fQUNTdGF0ZSA9PSAxID8gJ0FDJyA6ICdCQVRURVJZJyk7IH0NCiAgICAgICAgaWYgKG5hbWUgPT0gJ2JhdHRlcnlMZXZlbCcpIHsgaWYgKHRoaXMuX0JhdHRlcnlMZXZlbCA+PSAwKSB7IGNhbGxiYWNrLmNhbGwodGhpcywgdGhpcy5fQmF0dGVyeUxldmVsKTsgfSB9DQogICAgfSk7DQoNCiAgICB0aGlzLl9pID0gc2V0SW1tZWRpYXRlKGZ1bmN0aW9uIChzZWxmKQ0KICAgIHsNCiAgICAgICAgcmVxdWlyZSgndXNlci1zZXNzaW9ucycpOyAvLyBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHRoaXMgaXMgd2hlcmUgdGhlIFdpbmRvd3MgTWVzc2FnZXMgYXJlIHByb2Nlc3NlZCBmb3IgdGhlc2UgZXZlbnRzDQogICAgICAgIGRlbGV0ZSBzZWxmLl9pOw0KICAgIH0sIHRoaXMpOw0KDQogICAgaWYocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnbGludXgnKQ0KICAgIHsNCiAgICAgICAgdGhpcy5fQUNQYXRoID0gbnVsbDsNCiAgICAgICAgdGhpcy5fQmF0dGVyeVBhdGggPSBbXTsNCg0KICAgICAgICB2YXIgZGV2aWNlcyA9IHJlcXVpcmUoJ2ZzJykucmVhZGRpclN5bmMoJy9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5Jyk7CiAgICAgICAgZm9yICh2YXIgaSBpbiBkZXZpY2VzKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKHJlcXVpcmUoJ2ZzJykucmVhZEZpbGVTeW5jKCcvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS8nICsgZGV2aWNlc1tpXSArICcvdHlwZScpLnRvU3RyaW5nKCkudHJpbSgpID09ICdNYWlucycpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMuX0FDUGF0aCA9ICcvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS8nICsgZGV2aWNlc1tpXSArICcvJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQ0KICAgICAgICBmb3IgKHZhciBpIGluIGRldmljZXMpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmIChyZXF1aXJlKCdmcycpLnJlYWRGaWxlU3luYygnL3N5cy9jbGFzcy9wb3dlcl9zdXBwbHkvJyArIGRldmljZXNbaV0gKyAnL3R5cGUnKS50b1N0cmluZygpLnRyaW0oKSA9PSAnQmF0dGVyeScpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhpcy5fQmF0dGVyeVBhdGgucHVzaCgnL3N5cy9jbGFzcy9wb3dlcl9zdXBwbHkvJyArIGRldmljZXNbaV0gKyAnLycpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGlmKHRoaXMuX0FDUGF0aCAhPSBudWxsKQ0KICAgICAgICB7DQogICAgICAgICAgICB0aGlzLl9BQ1N0YXRlID0gcGFyc2VJbnQocmVxdWlyZSgnZnMnKS5yZWFkRmlsZVN5bmModGhpcy5fQUNQYXRoICsgJ29ubGluZScpLnRvU3RyaW5nKCkudHJpbSgpKTsNCiAgICAgICAgfQ0KICAgICAgICBpZih0aGlzLl9CYXR0ZXJ5UGF0aC5sZW5ndGg+MCkNCiAgICAgICAgew0KICAgICAgICAgICAgdGhpcy5fZ2V0QmF0dGVyeUxldmVsID0gZnVuY3Rpb24gX2dldEJhdHRlcnlMZXZlbCgpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFyIHN1bSA9IDA7DQogICAgICAgICAgICAgICAgdmFyIGk7DQogICAgICAgICAgICAgICAgZm9yIChpIGluIHRoaXMuX0JhdHRlcnlQYXRoKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgc3VtICs9IHBhcnNlSW50KHJlcXVpcmUoJ2ZzJykucmVhZEZpbGVTeW5jKHRoaXMuX0JhdHRlcnlQYXRoW2ldICsgJ2NhcGFjaXR5JykudG9TdHJpbmcoKS50cmltKCkpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBzdW0gPSBNYXRoLmZsb29yKHN1bSAvIHRoaXMuX0JhdHRlcnlQYXRoLmxlbmd0aCk7DQogICAgICAgICAgICAgICAgcmV0dXJuIChzdW0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdGhpcy5fQmF0dGVyeUxldmVsID0gdGhpcy5fZ2V0QmF0dGVyeUxldmVsKCk7DQoNCiAgICAgICAgICAgIC8vIFNpbmNlIEJhdHRlcnkgTGV2ZWxzIGFyZSBub3QgcHJvcGFnYXRlZCB3aXRoIEFDUEksIHdlIG5lZWQgdG8gcGVyaW9kaWNhbGx5IGNoZWNrIHRoZSBiYXR0ZXJ5IGxldmVsDQogICAgICAgICAgICB0aGlzLl9CYXR0ZXJ5TGV2ZWxDaGVjayA9IGZ1bmN0aW9uIF9CYXR0ZXJ5TGV2ZWxDaGVjaygpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFyIHZhbCA9IHRoaXMuX2dldEJhdHRlcnlMZXZlbCgpOw0KICAgICAgICAgICAgICAgIGlmICh2YWwgIT0gdGhpcy5fQmF0dGVyeUxldmVsKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fQmF0dGVyeUxldmVsID0gdmFsOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2JhdHRlcnlMZXZlbCcsIHZhbCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIHRoaXMuX0JhdHRDaGVja0ludGVydmFsID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKHNlbGYpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgc2VsZi5fQmF0dGVyeUxldmVsQ2hlY2suY2FsbChzZWxmKTsNCiAgICAgICAgICAgIH0sIDMwMDAwMCwgdGhpcyk7DQogICAgICAgIH0NCiAgICAgICAgdGhpcy5fYWNwaVNpbmsgPSBmdW5jdGlvbiBfYWNwaVNpbmsoYWNwaUV2ZW50KQ0KICAgICAgICB7DQogICAgICAgICAgICBpZihhY3BpRXZlbnQubmFtZSA9PSAnYWNfYWRhcHRlcicpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgX2FjcGlTaW5rLnNlbGYuX0FDU3RhdGUgPSBhY3BpRXZlbnQudmFsdWU7DQogICAgICAgICAgICAgICAgX2FjcGlTaW5rLnNlbGYuZW1pdCgnYWNkYycsIGFjcGlFdmVudC52YWx1ZSA9PSAxID8gJ0FDJyA6ICdCQVRURVJZJyk7DQogICAgICAgICAgICAgICAgX2FjcGlTaW5rLnNlbGYuX0JhdHRlcnlMZXZlbENoZWNrKCk7DQogICAgICAgICAgICB9DQogICAgICAgIH07DQogICAgICAgIHRoaXMuX2FjcGlTaW5rLnNlbGYgPSB0aGlzOw0KICAgICAgICByZXF1aXJlKCdsaW51eC1hY3BpJykub24oJ2FjcGknLCB0aGlzLl9hY3BpU2luayk7DQogICAgfQ0KfQ0KDQptb2R1bGUuZXhwb3J0cyA9IG5ldyBwb3dlck1vbml0b3IoKTs=', 'base64').toString());"); // service-manager, which on linux has a dependency on user-sessions and process-manager. Refer to /modules folder for human readable versions. duk_peval_string_noresult(ctx, "addModule('process-manager', Buffer.from('LyoNCkNvcHlyaWdodCAyMDE4IEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQoNCnZhciBHTSA9IHJlcXVpcmUoJ19HZW5lcmljTWFyc2hhbCcpOw0KdmFyIFRIMzJDU19TTkFQUFJPQ0VTUyA9IDB4MDI7DQp2YXIgVEgzMkNTX1NOQVBNT0RVTEUzMiA9IDB4MTA7DQp2YXIgVEgzMkNTX1NOQVBNT0RVTEUgPSAweDA4Ow0KdmFyIFBST0NFU1NfUVVFUllfTElNSVRFRF9JTkZPUk1BVElPTiA9IDB4MTAwMDsNCg0KDQovLyBVc2VkIG9uIFdpbmRvd3MgYW5kIExpbnV4IHRvIGdldCBpbmZvcm1hdGlvbiBhYm91dCBydW5uaW5nIHByb2Nlc3Nlcw0KZnVuY3Rpb24gcHJvY2Vzc01hbmFnZXIoKSB7DQogICAgdGhpcy5fT2JqZWN0SUQgPSAncHJvY2Vzcy1tYW5hZ2VyJzsgLy8gVXNlZCBmb3IgZGVidWdnaW5nLCBhbGxvd3MgeW91IHRvIGdldCB0aGUgb2JqZWN0IHR5cGUgYXQgcnVudGltZS4NCiAgICANCiAgICAvLyBTZXR1cCB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgY2FsbHMuDQogICAgc3dpdGNoIChwcm9jZXNzLnBsYXRmb3JtKQ0KICAgIHsNCiAgICAgICAgY2FzZSAnd2luMzInOg0KICAgICAgICAgICAgdGhpcy5fa2VybmVsMzIgPSBHTS5DcmVhdGVOYXRpdmVQcm94eSgna2VybmVsMzIuZGxsJyk7DQogICAgICAgICAgICB0aGlzLl9rZXJuZWwzMi5DcmVhdGVNZXRob2QoJ0Nsb3NlSGFuZGxlJyk7DQogICAgICAgICAgICB0aGlzLl9rZXJuZWwzMi5DcmVhdGVNZXRob2QoJ0dldExhc3RFcnJvcicpOw0KICAgICAgICAgICAgdGhpcy5fa2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdDcmVhdGVUb29saGVscDMyU25hcHNob3QnKTsNCiAgICAgICAgICAgIHRoaXMuX2tlcm5lbDMyLkNyZWF0ZU1ldGhvZCgnTW9kdWxlMzJGaXJzdFcnKTsNCiAgICAgICAgICAgIHRoaXMuX2tlcm5lbDMyLkNyZWF0ZU1ldGhvZCgnTW9kdWxlMzJOZXh0VycpOw0KICAgICAgICAgICAgdGhpcy5fa2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdPcGVuUHJvY2VzcycpOw0KICAgICAgICAgICAgdGhpcy5fa2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdQcm9jZXNzMzJGaXJzdFcnKTsNCiAgICAgICAgICAgIHRoaXMuX2tlcm5lbDMyLkNyZWF0ZU1ldGhvZCgnUHJvY2VzczMyTmV4dFcnKTsNCiAgICAgICAgICAgIHRoaXMuX2tlcm5lbDMyLkNyZWF0ZU1ldGhvZCgnUXVlcnlGdWxsUHJvY2Vzc0ltYWdlTmFtZVcnKTsNCiAgICAgICAgICAgIGJyZWFrOw0KCWNhc2UgJ2ZyZWVic2QnOg0KICAgICAgICBjYXNlICdsaW51eCc6DQogICAgICAgIGNhc2UgJ2Rhcndpbic6DQogICAgICAgICAgICB0aGlzLl9jaGlsZFByb2Nlc3MgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJyk7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgIHRocm93IChwcm9jZXNzLnBsYXRmb3JtICsgJyBub3Qgc3VwcG9ydGVkJyk7DQogICAgICAgICAgICBicmVhazsNCiAgICB9DQogICAgdGhpcy5lbnVtZXJhdGVQcm9jZXNzZXMgPSBmdW5jdGlvbiBlbnVtZXJhdGVQcm9jZXNzZXMoKQ0KICAgIHsNCiAgICAgICAgdmFyIHByb21pc2UgPSByZXF1aXJlKCdwcm9taXNlJyk7DQogICAgICAgIHZhciByZXQgPSBuZXcgcHJvbWlzZShmdW5jdGlvbiAocmVzLCByZWopIHsgdGhpcy5fcmVzID0gcmVzOyB0aGlzLl9yZWogPSByZWo7IH0pOw0KICAgICAgICByZXQuY2FsbGJhY2sgPSBmdW5jdGlvbiBjYWxsYmFjayhwcykNCiAgICAgICAgew0KICAgICAgICAgICAgY2FsbGJhY2sucHJvbS5fcmVzKHBzKTsNCiAgICAgICAgfQ0KICAgICAgICByZXQuY2FsbGJhY2sucHJvbSA9IHJldDsNCiAgICAgICAgdGhpcy5nZXRQcm9jZXNzZXMocmV0LmNhbGxiYWNrKTsNCiAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgIH0NCiAgICAvLyBSZXR1cm4gYSBvYmplY3Qgb2Y6IHBpZCAtPiBwcm9jZXNzIGluZm9ybWF0aW9uLg0KICAgIHRoaXMuZ2V0UHJvY2Vzc2VzID0gZnVuY3Rpb24gZ2V0UHJvY2Vzc2VzKGNhbGxiYWNrKQ0KICAgIHsNCiAgICAgICAgc3dpdGNoKHByb2Nlc3MucGxhdGZvcm0pDQogICAgICAgIHsNCiAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgdGhyb3cgKCdFbnVtZXJhdGluZyBwcm9jZXNzZXMgb24gJyArIHByb2Nlc3MucGxhdGZvcm0gKyAnIG5vdCBzdXBwb3J0ZWQnKTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgJ3dpbjMyJzogLy8gV2luZG93cyBwcm9jZXNzZXMNCiAgICAgICAgICAgICAgICB2YXIgcGlkOw0KICAgICAgICAgICAgICAgIHZhciByZXRWYWwgPSB7fTsNCiAgICAgICAgICAgICAgICB2YXIgaCA9IHRoaXMuX2tlcm5lbDMyLkNyZWF0ZVRvb2xoZWxwMzJTbmFwc2hvdChUSDMyQ1NfU05BUFBST0NFU1MsIDApOw0KICAgICAgICAgICAgICAgIHZhciBpbmZvID0gR00uQ3JlYXRlVmFyaWFibGUoR00uUG9pbnRlclNpemUgPT0gOCA/IDU2OCA6IDU1Nik7DQogICAgICAgICAgICAgICAgdmFyIGZ1bGxwYXRoID0gR00uQ3JlYXRlVmFyaWFibGUoMjA0OCk7DQogICAgICAgICAgICAgICAgdmFyIHBhdGhTaXplID0gR00uQ3JlYXRlVmFyaWFibGUoNCk7DQogICAgICAgICAgICAgICAgdmFyIHBoOw0KDQogICAgICAgICAgICAgICAgaW5mby50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoaW5mby5fc2l6ZSwgMCk7DQogICAgICAgICAgICAgICAgdmFyIG5leHRQcm9jZXNzID0gdGhpcy5fa2VybmVsMzIuUHJvY2VzczMyRmlyc3RXKGgsIGluZm8pOw0KICAgICAgICAgICAgICAgIHdoaWxlIChuZXh0UHJvY2Vzcy5WYWwpIA0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgcGlkID0gaW5mby5EZXJlZig4LCA0KS50b0J1ZmZlcigpLnJlYWRVSW50MzJMRSgwKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsW3BpZF0gPSB7IHBpZDogcGlkLCBjbWQ6IGluZm8uRGVyZWYoR00uUG9pbnRlclNpemUgPT0gNCA/IDM2IDogNDQsIDI2MCkuV2lkZTJVVEY4IH07DQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKChwaCA9IHRoaXMuX2tlcm5lbDMyLk9wZW5Qcm9jZXNzKFBST0NFU1NfUVVFUllfTElNSVRFRF9JTkZPUk1BVElPTiwgMCwgcGlkKSkuVmFsICE9IC0xKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBwYXRoU2l6ZS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoZnVsbHBhdGguX3NpemUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2tlcm5lbDMyLlF1ZXJ5RnVsbFByb2Nlc3NJbWFnZU5hbWVXKHBoLCAwLCBmdWxscGF0aCwgcGF0aFNpemUpLlZhbCAhPSAwKQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbFtwaWRdLnBhdGggPSBmdWxscGF0aC5XaWRlMlVURjg7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9rZXJuZWwzMi5DbG9zZUhhbmRsZShwaCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICByZXRWYWxbcGlkXS51c2VyID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmdldFByb2Nlc3NPd25lck5hbWUocGlkKS5uYW1lOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGNhdGNoKGVlKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIG5leHRQcm9jZXNzID0gdGhpcy5fa2VybmVsMzIuUHJvY2VzczMyTmV4dFcoaCwgaW5mbyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHRoaXMuX2tlcm5lbDMyLkNsb3NlSGFuZGxlKGgpOw0KICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykgeyBjYWxsYmFjay5hcHBseSh0aGlzLCBbcmV0VmFsXSk7IH0NCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgJ2xpbnV4JzogLy8gTGludXggcHJvY2Vzc2VzDQogICAgICAgICAgICAgICAgdmFyIHAgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICAgICAgICAgIHAuc3Rkb3V0LnN0ciA9ICcnOyBwLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgcC5zdGRlcnIuc3RyID0gJyc7IHAuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICBwLnN0ZGluLndyaXRlKCdwcyAtYXggLW8gcGlkIC1vIHVzZXI6OTkgLW8gY29tbWFuZCB8IHRyICcgKyAiJ1xcbicgJ1xcdCcgfCBhd2sgLUYiICsgJyJcXHQiIFwneyBwcmludGYgInsiOyBmb3IoaT0yO2k8TkY7KytpKSB7IHNwbGl0KCRpLHRvaywiICIpOyBwaWQ9dG9rWzFdOyB1c2VyPXRva1syXTsgY21kPXN1YnN0cigkaSxsZW5ndGgodG9rWzFdKSsxMDIpOyBnc3ViKC9cXFxcLywiXFxcXFxcXFwmIixjbWQpOyBnc3ViKC8iLywiXFxcXFxcXFwmIixjbWQpOyBnc3ViKC9eWyBdKy8sIiIsY21kKTsgcHJpbnRmICIlc1xcIiVzXFwiOntcXCJwaWRcXCI6XFwiJXNcXCIsXFwidXNlclxcIjpcXCIlc1xcIixcXCJjbWRcXCI6XFwiJXNcXCJ9IiwoaSE9Mj8iLCI6IiIpLHBpZCxwaWQsdXNlcixjbWQ7IH0gcHJpbnRmICJ9IjsgfVwnXG5leGl0XG4nKTsNCiAgICAgICAgICAgICAgICBwLndhaXRFeGl0KCk7DQoNCiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBwLmFyZ3MgPSBbXTsNCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpIHsgcC5hcmdzLnB1c2goYXJndW1lbnRzW2ldKTsgfQ0KDQogICAgICAgICAgICAgICAgICAgIHAuYXJncy51bnNoaWZ0KEpTT04ucGFyc2UocC5zdGRvdXQuc3RyKSk7DQogICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoaXMsIHAuYXJncyk7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICdkYXJ3aW4nOg0KICAgICAgICAgICAgY2FzZSAnZnJlZWJzZCc6DQogICAgICAgICAgICAgICAgdmFyIHAgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICAgICAgICAgIHAuc3Rkb3V0LnN0ciA9ICcnOyBwLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgcC5zdGRlcnIuc3RyID0gJyc7IHAuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICBwLnN0ZGluLndyaXRlKCdwcyAtYXhvIHBpZCAtbyB1c2VyIC1vIGNvbW1hbmQgfCB0ciAnICsgIidcXG4nICdcXHQnIHwgYXdrIC1GIiArICciXFx0IiBcJ3sgcHJpbnRmICJ7IjsgZm9yKGk9MjtpPE5GOysraSkgeyBnc3ViKC9eWyBdKy8sIiIsJGkpOyBzcGxpdCgkaSx0b2ssIiAiKTsgcGlkPXRva1sxXTsgdXNlcj10b2tbMl07IGNtZD1zdWJzdHIoJGksbGVuZ3RoKHRva1sxXSkrbGVuZ3RoKHRva1syXSkrMik7IGdzdWIoL1xcXFwvLCJcXFxcXFxcXCYiLGNtZCk7IGdzdWIoLyIvLCJcXFxcXFxcXCYiLGNtZCk7IGdzdWIoL15bIF0rLywiIixjbWQpOyBwcmludGYgIiVzXFwiJXNcXCI6e1xcInBpZFxcIjpcXCIlc1xcIixcXCJ1c2VyXFwiOlxcIiVzXFwiLFxcImNtZFxcIjpcXCIlc1xcIn0iLChpIT0yPyIsIjoiIikscGlkLHBpZCx1c2VyLGNtZDsgfSBwcmludGYgIn0iOyB9XCdcbmV4aXRcbicpOw0KICAgICAgICAgICAgICAgIHAud2FpdEV4aXQoKTsNCg0KICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHAuYXJncyA9IFtdOw0KICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkgeyBwLmFyZ3MucHVzaChhcmd1bWVudHNbaV0pOyB9DQoNCiAgICAgICAgICAgICAgICAgICAgcC5hcmdzLnVuc2hpZnQoSlNPTi5wYXJzZShwLnN0ZG91dC5zdHIpKTsNCiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhpcywgcC5hcmdzKTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgfQ0KICAgIH07DQoNCiAgICAvLyBHZXQgaW5mb3JtYXRpb24gYWJvdXQgYSBzcGVjaWZpYyBwcm9jZXNzIG9uIExpbnV4DQogICAgdGhpcy5nZXRQcm9jZXNzSW5mbyA9IGZ1bmN0aW9uIGdldFByb2Nlc3NJbmZvKHBpZCkNCiAgICB7DQogICAgICAgIHN3aXRjaChwcm9jZXNzLnBsYXRmb3JtKQ0KICAgICAgICB7DQogICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgIHRocm93ICgnZ2V0UHJvY2Vzc0luZm8oKSBub3Qgc3VwcG9ydGVkIGZvciAnICsgcHJvY2Vzcy5wbGF0Zm9ybSk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICdsaW51eCc6DQogICAgICAgICAgICAgICAgdmFyIHN0YXR1cyA9IHJlcXVpcmUoJ2ZzJykucmVhZEZpbGVTeW5jKCcvcHJvYy8nICsgcGlkICsgJy9zdGF0dXMnKTsNCiAgICAgICAgICAgICAgICB2YXIgaW5mbyA9IHt9Ow0KICAgICAgICAgICAgICAgIHZhciBsaW5lcyA9IHN0YXR1cy50b1N0cmluZygpLnNwbGl0KCdcbicpOw0KICAgICAgICAgICAgICAgIGZvcih2YXIgaT0wO2k8bGluZXMubGVuZ3RoOysraSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSBsaW5lc1tpXS5zcGxpdCgnOicpOw0KICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCA+IDEpIHsgdG9rZW5zWzFdID0gdG9rZW5zWzFdLnRyaW0oKTsgfQ0KICAgICAgICAgICAgICAgICAgICBpbmZvW3Rva2Vuc1swXV0gPSB0b2tlbnNbMV07DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHJldHVybiAoaW5mbyk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCiAgICB9Ow0KDQogICAgaWYocHJvY2Vzcy5wbGF0Zm9ybSAhPSAnd2luMzInKQ0KICAgIHsNCiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdfcGdyZXAnLCB7DQogICAgICAgICAgICB2YWx1ZTogKGZ1bmN0aW9uICgpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7DQogICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJ3aGVyZWlzIHBncmVwIHwgYXdrICd7IHByaW50ICQyIH0nXG5leGl0XG4iKTsNCiAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KICAgICAgICAgICAgICAgIHJldHVybiAoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkpOw0KICAgICAgICAgICAgfSkoKQ0KICAgICAgICB9KTsNCg0KICAgICAgICBpZiAodGhpcy5fcGdyZXAgIT0gJycpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRoaXMuZ2V0UHJvY2VzcyA9IGZ1bmN0aW9uIGdldFByb2Nlc3MoY21kKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGVyci5zdHIgPSAnJzsgY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgicGdyZXAgZ25vbWUtc2Vzc2lvbiB8IHRyICdcXG4nICdcXHQnIHwiICsgJyBhd2sgLUYiXFx0IiBcJ3sgcHJpbnRmICJbIjsgZm9yKGk9MTtpPE5GOysraSkgeyBpZihpPjEpIHsgcHJpbnRmICIsIjsgfSBwcmludGYgIiVkIiwgJGk7IH0gcHJpbnRmICJdIjsgfVwnJyk7DQogICAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoJ1xuZXhpdFxuJyk7DQogICAgICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgICAgICAgICBpZiAoY2hpbGQuc3RkZXJyLnN0ciAhPSAnJykgeyB0aHJvdyAoY2hpbGQuc3RkZXJyLnN0ci50cmltKCkpOyB9DQogICAgICAgICAgICAgICAgaWYgKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpID09ICcnKSB7IHRocm93IChjbWQgKyAnIG5vdCBmb3VuZCcpOyB9DQoNCiAgICAgICAgICAgICAgICByZXR1cm4gKEpTT04ucGFyc2UoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkpKTsNCiAgICAgICAgICAgIH07DQogICAgICAgIH0NCg0KICAgICAgICB0aGlzLmdldFByb2Nlc3NFeCA9IGZ1bmN0aW9uIGdldFByb2Nlc3NFeChjbWQpDQogICAgICAgIHsNCiAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICBjaGlsZC5zdGRlcnIuc3RyID0gJyc7IGNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgncHMgLWF4IC1vIHBpZCAtbyBjb21tYW5kIHwgZ3JlcCAnICsgY21kICsgIiB8IHRyICdcXG4nICdcXHQnIHwgYXdrIC1GIiArICciXFx0IiBcJ3sgcHJpbnRmICJbIjsgZm9yKGk9MTtpPE5GOysraSkgeyBzcGxpdCgkaSxyLCIgIik7IGlmKHJbMl0hPSJncmVwIikgeyBpZihpPjEpIHsgcHJpbnRmICIsIjsgfSBwcmludGYgIiVzIiwgclsxXTsgfSB9IHByaW50ZiAiXSI7IH1cJycpOw0KICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoJ1xuZXhpdFxuJyk7DQogICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KDQogICAgICAgICAgICBpZiAoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkgPT0gJycpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhyb3cgKGNtZCArICcgbm90IGZvdW5kJyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcmV0dXJuIChKU09OLnBhcnNlKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpKSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQp9DQoNCm1vZHVsZS5leHBvcnRzID0gbmV3IHByb2Nlc3NNYW5hZ2VyKCk7DQo=', 'base64').toString());"); diff --git a/modules/power-monitor.js b/modules/power-monitor.js index 757157f..5221ffa 100644 --- a/modules/power-monitor.js +++ b/modules/power-monitor.js @@ -36,10 +36,7 @@ function powerMonitor() this.on('newListener', function (name, callback) { - if (process.platform != 'win32') - { // Windows will already sends an initial event when you hookup the ACPI event, so this would be redundant - if (name == 'acdc') { callback.call(this, this._ACState == 1 ? 'AC' : 'BATTERY'); } - } + if (name == 'acdc') { callback.call(this, this._ACState == 1 ? 'AC' : 'BATTERY'); } if (name == 'batteryLevel') { if (this._BatteryLevel >= 0) { callback.call(this, this._BatteryLevel); } } });