oxygen-cli 1.28.0 → 1.29.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +49 -0
- package/build/errors/helper.js +5 -1
- package/build/lib/debugger.js +2 -2
- package/build/lib/util.js +2 -2
- package/build/ox_modules/module-web/commands/verifyAlert.js +4 -4
- package/build/ox_modules/module-web/commands/verifyExist.js +8 -2
- package/build/ox_modules/module-web/commands/verifySelectedLabel.js +4 -4
- package/build/ox_modules/module-web/commands/verifySelectedValue.js +4 -4
- package/build/ox_modules/module-web/commands/verifyText.js +4 -4
- package/build/ox_modules/module-web/commands/verifyTextNotPresent.js +2 -2
- package/build/ox_modules/module-web/commands/verifyTextPresent.js +2 -2
- package/build/ox_modules/module-web/commands/verifyTitle.js +2 -2
- package/build/ox_modules/module-web/commands/verifyValue.js +4 -4
- package/build/ox_modules/utils.js +11 -5
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,54 @@
|
|
|
1
1
|
# CHANGELOG
|
|
2
2
|
|
|
3
|
+
## v1.29.1 (2023-07-26)
|
|
4
|
+
|
|
5
|
+
#### :beetle: Bug Fix
|
|
6
|
+
* Invalid chrome-remote-interface require.
|
|
7
|
+
|
|
8
|
+
## v1.29.0 (2023-07-26)
|
|
9
|
+
|
|
10
|
+
#### :tada: New Feature
|
|
11
|
+
* Add `web.verify*` commands.
|
|
12
|
+
|
|
13
|
+
#### :house: Internal
|
|
14
|
+
* Bump dependencies.
|
|
15
|
+
|
|
16
|
+
## v1.28.0 (2023-07-14)
|
|
17
|
+
|
|
18
|
+
#### :tada: New Feature
|
|
19
|
+
* Add support for parallel execution of cases inside a suite.
|
|
20
|
+
* Expose `attributes` object to Oxygen scripts.
|
|
21
|
+
|
|
22
|
+
#### :beetle: Bug Fix
|
|
23
|
+
* `clearDeviceLogsOnStart` capability not working properly.
|
|
24
|
+
* Make sure to set test status to warning if one of the step's status is warning.
|
|
25
|
+
* Generate HTML report by default when running tests from Oxygen CLI.
|
|
26
|
+
* EventEmitter memory leak.
|
|
27
|
+
* Do not crash on invalid arguments to `transaction` commands.
|
|
28
|
+
|
|
29
|
+
#### :house: Internal
|
|
30
|
+
* Bump dependencies.
|
|
31
|
+
|
|
32
|
+
## v1.27.5 (2023-04-14)
|
|
33
|
+
|
|
34
|
+
#### :tada: New Feature
|
|
35
|
+
* Allow "web" module to run Appium-based tests.
|
|
36
|
+
|
|
37
|
+
#### :house: Internal
|
|
38
|
+
* Bump dependencies.
|
|
39
|
+
|
|
40
|
+
## v1.27.4 (2023-02-23)
|
|
41
|
+
|
|
42
|
+
#### :tada: New Feature
|
|
43
|
+
* Add types to Oxygen module to allow auto completion in popular IDEs.
|
|
44
|
+
|
|
45
|
+
#### :beetle: Bug Fix
|
|
46
|
+
* Issue with multi iterations debugging.
|
|
47
|
+
* Fix issue with re-run failed tests mechanism.
|
|
48
|
+
|
|
49
|
+
#### :house: Internal
|
|
50
|
+
* Bump dependencies.
|
|
51
|
+
|
|
3
52
|
## v1.27.2 (2023-02-09)
|
|
4
53
|
|
|
5
54
|
#### :beetle: Bug Fix
|
package/build/errors/helper.js
CHANGED
|
@@ -261,6 +261,10 @@ module.exports = {
|
|
|
261
261
|
actual = actual.toString().replace(/\n/g, '\\n');
|
|
262
262
|
return new _OxygenError.default(ERROR_CODES.ASSERT_ERROR, `Expected: "${expected}". Got: "${actual}"`, undefined, isFatal);
|
|
263
263
|
},
|
|
264
|
+
getVerifyError: function (expected, actual) {
|
|
265
|
+
actual = actual.toString().replace(/\n/g, '\\n');
|
|
266
|
+
return new _OxygenError.default(ERROR_CODES.VERIFY_ERROR, `Expected: "${expected}". Got: "${actual}"`, undefined, false);
|
|
267
|
+
},
|
|
264
268
|
errorCode: ERROR_CODES
|
|
265
269
|
};
|
|
266
270
|
const ORIGINAL_ERROR_MESSAGE = 'Original error: ';
|
|
@@ -287,4 +291,4 @@ function extractOriginalError(msg) {
|
|
|
287
291
|
|
|
288
292
|
return msg;
|
|
289
293
|
}
|
|
290
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lcnJvcnMvaGVscGVyLmpzIl0sIm5hbWVzIjpbInV0aWwiLCJyZXF1aXJlIiwiRVJST1JfQ09ERVMiLCJTQ1JJUFRfRVJST1IiLCJVTktOT1dOX0VSUk9SIiwiQVNTRVJUX0VSUk9SIiwiUERGX0VSUk9SIiwiVkVSSUZZX0VSUk9SIiwiRUxFTUVOVF9OT1RfRk9VTkQiLCJGUkFNRV9OT1RfRk9VTkQiLCJVTktOT1dOX0NPTU1BTkRfRVJST1IiLCJTVEFMRV9FTEVNRU5UX1JFRkVSRU5DRSIsIkVMRU1FTlRfTk9UX1ZJU0lCTEUiLCJFTEVNRU5UX05PVF9JTlRFUkFDVEFCTEUiLCJMT0NBVE9SX01BVENIRVNfTVVMVElQTEVfRUxFTUVOVFMiLCJFTEVNRU5UX1NUSUxMX0VYSVNUUyIsIkJST1dTRVJfSlNfRVhFQ1VURV9FUlJPUiIsIlRJTUVPVVQiLCJXSU5ET1dfTk9UX0ZPVU5EIiwiVU5FWFBFQ1RFRF9BTEVSVF9PUEVOIiwiTk9fQUxFUlRfT1BFTl9FUlJPUiIsIk1BSUxJTkFUT1JfRVJST1IiLCJBUFBJVU1fVU5SRUFDSEFCTEVfRVJST1IiLCJTRUxFTklVTV9VTlJFQUNIQUJMRV9FUlJPUiIsIkNIUk9NRURSSVZFUl9FUlJPUiIsIldFQkRSSVZFUl9FUlJPUiIsIkRCX0NPTk5FQ1RJT05fRVJST1IiLCJEQl9RVUVSWV9FUlJPUiIsIlNPQVBfRVJST1IiLCJTSEVMTF9FUlJPUiIsIk5PVF9JTVBMRU1FTlRFRF9FUlJPUiIsIlNFUklBTF9QT1JUX0VSUk9SIiwiSFRUUF9FUlJPUiIsIkVNQUlMX0VSUk9SIiwiTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiIsIkRFVklDRV9OT1RfRk9VTkQiLCJQQVJBTUVURVJTX0VSUk9SIiwiSU5WQUxJRF9DQVBBQklMSVRJRVMiLCJCUk9XU0VSX0NPTkZJR1VSQVRJT05fRVJST1IiLCJBUFBJVU1fQ09OTkVDVElPTl9FUlJPUiIsIkFQUElVTV9TRVNTSU9OX0VSUk9SIiwiQVBQSVVNX1NFU1NJT05fVElNRU9VVCIsIlNFTEVOSVVNX1NFU1NJT05fRVJST1IiLCJTRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQiLCJTRUxFTklVTV9DT05ORUNUSU9OX0VSUk9SIiwiVVJMX09QRU5fRVJST1IiLCJPUFRJT05fTk9UX0ZPVU5EIiwiQVRUUklCVVRFX05PVF9GT1VORCIsIkVMRU1FTlRfU1RBVEVfRVJST1IiLCJNT0JJTEVfQ09OVEVYVF9FUlJPUiIsIkFQUExJQ0FUSU9OX05PVF9GT1VORF9FUlJPUiIsIlRXSUxJT19FUlJPUiIsIkhPT0tfRVJST1IiLCJOT1RfU1VQUE9SVEVEIiwiQVNTRVJUX1BBU1NFRCIsIk1PRFVMRV9OT1RfRk9VTkQiLCJGSUxFX0JST1dTRV9FUlJPUiIsIkNTVl9FUlJPUiIsIkNSWVBUT19FUlJPUiIsIkROU19FUlJPUiIsIkNJUkNVTEFSX0VSUk9SIiwiWE1MX0VSUk9SIiwiQ0hBSV9FUlJPUl9DT0RFUyIsIkFzc2VydGlvbkVycm9yIiwiU0NSSVBUX0VSUk9SX0NPREVTIiwiVHlwZUVycm9yIiwiU3ludGF4RXJyb3IiLCJSZWZlcmVuY2VFcnJvciIsIm1vZHVsZSIsImV4cG9ydHMiLCJnZXRGYWlsdXJlRnJvbUVycm9yIiwiZXJyIiwiT3hFcnJvciIsImdldE94eWdlbkVycm9yIiwidHlwZSIsIm1lc3NhZ2UiLCJkYXRhIiwibG9jYXRpb24iLCJzdGFja3RyYWNlIiwiZ2V0RGJFcnJvck1lc3NhZ2UiLCJvZGJjRXJyb3JzIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwibWFwIiwiaXRlbSIsImNtZCIsImFyZ3MiLCJlcnJUeXBlIiwibmFtZSIsImluY2x1ZGVzIiwibWF0Y2hlcyIsIm1hdGNoIiwic3RhcnRzV2l0aCIsImV4dHJhY3RPcmlnaW5hbEVycm9yIiwiT1JJR0lOQUxfRVJST1JfTUVTU0FHRSIsImluc3BlY3QiLCJjb2RlIiwiZXJyTWVzc2FnZSIsInJlcGxhY2UiLCJveEVycm9yQ29kZSIsIkFTU0VSVCIsImluZGV4T2YiLCJWRVJJRlkiLCJjb25zb2xlIiwibG9nIiwiZ2V0U2VsZW5pdW1Jbml0RXJyb3IiLCJpZVpvb21FcnJvck1zZyIsInRvU3RyaW5nIiwiY2hyb21lRHJpdmVyTXNnIiwiZ2V0QXBwaXVtSW5pdEVycm9yIiwiZ2V0QXNzZXJ0RXJyb3IiLCJleHBlY3RlZCIsImFjdHVhbCIsImlzRmF0YWwiLCJ1bmRlZmluZWQiLCJlcnJvckNvZGUiLCJVTktOT1dOX0VSUk9SX01FU1NBR0UiLCJtc2ciLCJlcnJvckluZGV4MSIsImVycm9ySW5kZXgyIiwic3Vic3RyaW5nIiwidW5rbm93bkVycm9ySW5kZXgiXSwibWFwcGluZ3MiOiI7Ozs7QUFhQTs7OztBQUNBLE1BQU1BLElBQUksR0FBR0MsT0FBTyxDQUFDLE1BQUQsQ0FBcEI7O0FBRUEsTUFBTUMsV0FBVyxHQUFHO0FBQ2hCQyxFQUFBQSxZQUFZLEVBQUUsY0FERTtBQUVoQkMsRUFBQUEsYUFBYSxFQUFFLGVBRkM7QUFHaEJDLEVBQUFBLFlBQVksRUFBRSxjQUhFO0FBSWhCQyxFQUFBQSxTQUFTLEVBQUUsV0FKSztBQUtoQkMsRUFBQUEsWUFBWSxFQUFFLGNBTEU7QUFNaEJDLEVBQUFBLGlCQUFpQixFQUFFLG1CQU5IO0FBT2hCQyxFQUFBQSxlQUFlLEVBQUUsaUJBUEQ7QUFRaEJDLEVBQUFBLHFCQUFxQixFQUFFLHVCQVJQO0FBU2hCQyxFQUFBQSx1QkFBdUIsRUFBRSx5QkFUVDtBQVVoQkMsRUFBQUEsbUJBQW1CLEVBQUUscUJBVkw7QUFXaEJDLEVBQUFBLHdCQUF3QixFQUFFLDBCQVhWO0FBWWhCQyxFQUFBQSxpQ0FBaUMsRUFBRSxtQ0FabkI7QUFhaEJDLEVBQUFBLG9CQUFvQixFQUFFLHNCQWJOO0FBY2hCQyxFQUFBQSx3QkFBd0IsRUFBRSwwQkFkVjtBQWVoQkMsRUFBQUEsT0FBTyxFQUFFLFNBZk87QUFnQmhCQyxFQUFBQSxnQkFBZ0IsRUFBRSxrQkFoQkY7QUFpQmhCQyxFQUFBQSxxQkFBcUIsRUFBRSx1QkFqQlA7QUFrQmhCQyxFQUFBQSxtQkFBbUIsRUFBRSxxQkFsQkw7QUFtQmhCQyxF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QUksQ0FBQ0EsR0FBTCxFQUFVO0FBQ04sV0FBTyxFQUFQO0FBQ0g7O0FBRUQsTUFBSUMsV0FBVyxHQUFHRCxHQUFHLENBQUNoQixPQUFKLENBQVlQLHNCQUFaLENBQWxCOztBQUNBLE1BQUl3QixXQUFXLEtBQUssQ0FBQyxDQUFyQixFQUF3QjtBQUNwQixXQUFPRCxHQUFQO0FBQ0g7O0FBR0QsTUFBSUUsV0FBVyxHQUFHRixHQUFHLENBQUNoQixPQUFKLENBQVlQLHNCQUFaLEVBQW9Dd0IsV0FBVyxHQUFHeEIsc0JBQXNCLENBQUNaLE1BQXpFLENBQWxCO0FBRUFtQyxFQUFBQSxHQUFHLEdBQUdBLEdBQUcsQ0FBQ0csU0FBSixDQUFjLENBQUNELFdBQVcsR0FBRyxDQUFDLENBQWYsR0FBbUJBLFdBQW5CLEdBQWlDRCxXQUFsQyxJQUFrRHhCLHNCQUFzQixDQUFDWixNQUF2RixDQUFOO0FBR0EsTUFBSXVDLGlCQUFpQixHQUFHSixHQUFHLENBQUNoQixPQUFKLENBQVllLHFCQUFaLENBQXhCOztBQUNBLE1BQUlLLGlCQUFpQixHQUFHLENBQUMsQ0FBekIsRUFBNEI7QUFDeEIsV0FBT0osR0FBRyxDQUFDRyxTQUFKLENBQWNDLGlCQUFpQixHQUFHTCxxQkFBcUIsQ0FBQ2xDLE1BQXhELENBQVA7QUFDSDs7QUFFRCxTQUFPbUMsR0FBUDtBQUNIIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogSGVscGVyIG1vZHVsZSBmb3IgaGFuZGxpbmcgYW5kIGNvbnZlcnRpbmcgdmFyaW91cyBlcnJvciB0eXBlc1xyXG4gKi9cclxuXHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4vT3h5Z2VuRXJyb3InO1xyXG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xyXG5cclxuY29uc3QgRVJST1JfQ09ERVMgPSB7XHJcbiAgICBTQ1JJUFRfRVJST1I6ICdTQ1JJUFRfRVJST1InLFxyXG4gICAgVU5LTk9XTl9FUlJPUjogJ1VOS05PV05fRVJST1InLFxyXG4gICAgQVNTRVJUX0VSUk9SOiAnQVNTRVJUX0VSUk9SJyxcclxuICAgIFBERl9FUlJPUjogJ1BERl9FUlJPUicsXHJcbiAgICBWRVJJRllfRVJST1I6ICdWRVJJRllfRVJST1InLFxyXG4gICAgRUxFTUVOVF9OT1RfRk9VTkQ6ICdFTEVNRU5UX05PVF9GT1VORCcsXHJcbiAgICBGUkFNRV9OT1RfRk9VTkQ6ICdGUkFNRV9OT1RfRk9VTkQnLFxyXG4gICAgVU5LTk9XTl9DT01NQU5EX0VSUk9SOiAnVU5LTk9XTl9DT01NQU5EX0VSUk9SJyxcclxuICAgIFNUQUxFX0VMRU1FTlRfUkVGRVJFTkNFOiAnU1RBTEVfRUxFTUVOVF9SRUZFUkVOQ0UnLFxyXG4gICAgRUxFTUVOVF9OT1RfVklTSUJMRTogJ0VMRU1FTlRfTk9UX1ZJU0lCTEUnLFxyXG4gICAgRUxFTUVOVF9OT1RfSU5URVJBQ1RBQkxFOiAnRUxFTUVOVF9OT1RfSU5URVJBQ1RBQkxFJyxcclxuICAgIExPQ0FUT1JfTUFUQ0hFU19NVUxUSVBMRV9FTEVNRU5UUzogJ0xPQ0FUT1JfTUFUQ0hFU19NVUxUSVBMRV9FTEVNRU5UUycsXHJcbiAgICBFTEVNRU5UX1NUSUxMX0VYSVNUUzogJ0VMRU1FTlRfU1RJTExfRVhJU1RTJyxcclxuICAgIEJST1dTRVJfSlNfRVhFQ1VURV9FUlJPUjogJ0JST1dTRVJfSlNfRVhFQ1VURV9FUlJPUicsXHJcbiAgICBUSU1FT1VUOiAnVElNRU9VVCcsXHJcbiAgICBXSU5ET1dfTk9UX0ZPVU5EOiAnV0lORE9XX05PVF9GT1VORCcsXHJcbiAgICBVTkVYUEVDVEVEX0FMRVJUX09QRU46ICdVTkVYUEVDVEVEX0FMRVJUX09QRU4nLFxyXG4gICAgTk9fQUxFUlRfT1BFTl9FUlJPUjogJ05PX0FMRVJUX09QRU5fRVJST1InLFxyXG4gICAgTUFJTElOQVRPUl9FUlJPUjogJ01BSUxJTkFUT1JfRVJST1InLFxyXG4gICAgQVBQSVVNX1VOUkVBQ0hBQkxFX0VSUk9SOiAnQVBQSVVNX1VOUkVBQ0hBQkxFX0VSUk9SJyxcclxuICAgIFNFTEVOSVVNX1VOUkVBQ0hBQkxFX0VSUk9SOiAnU0VMRU5JVU1fVU5SRUFDSEFCTEVfRVJST1InLFxyXG4gICAgQ0hST01FRFJJVkVSX0VSUk9SOiAnQ0hST01FRFJJVkVSX0VSUk9SJyxcclxuICAgIFdFQkRSSVZFUl9FUlJPUjogJ1dFQkRSSVZFUl9FUlJPUicsXHJcbiAgICBEQl9DT05ORUNUSU9OX0VSUk9SOiAnREJfQ09OTkVDVElPTl9FUlJPUicsXHJcbiAgICBEQl9RVUVSWV9FUlJPUjogJ0RCX1FVRVJZX0VSUk9SJyxcclxuICAgIFNPQVBfRVJST1I6ICdTT0FQX0VSUk9SJyxcclxuICAgIFNIRUxMX0VSUk9SOiAnU0hFTExfRVJST1InLFxyXG4gICAgTk9UX0lNUExFTUVOVEVEX0VSUk9SOiAnTk9UX0lNUExFTUVOVEVEX0VSUk9SJyxcclxuICAgIFNFUklBTF9QT1JUX0VSUk9SOiAnU0VSSUFMX1BPUlRfRVJST1InLFxyXG4gICAgSFRUUF9FUlJPUjogJ0hUVFBfRVJST1InLFxyXG4gICAgRU1BSUxfRVJST1I6ICdFTUFJTF9FUlJPUicsXHJcbiAgICBNT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SOiAnTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUicsXHJcbiAgICBERVZJQ0VfTk9UX0ZPVU5EOiAnREVWSUNFX05PVF9GT1VORCcsXHJcbiAgICBQQVJBTUVURVJTX0VSUk9SOiAnUEFSQU1FVEVSU19FUlJPUicsXHJcbiAgICBJTlZBTElEX0NBUEFCSUxJVElFUzogJ0lOVkFMSURfQ0FQQUJJTElUSUVTJyxcclxuICAgIEJST1dTRVJfQ09ORklHVVJBVElPTl9FUlJPUjogJ0JST1dTRVJfQ09ORklHVVJBVElPTl9FUlJPUicsXHJcbiAgICBBUFBJVU1fQ09OTkVDVElPTl9FUlJPUjogJ0FQUElVTV9DT05ORUNUSU9OX0VSUk9SJyxcclxuICAgIEFQUElVTV9TRVNTSU9OX0VSUk9SOiAnQVBQSVVNX1NFU1NJT05fRVJST1InLFxyXG4gICAgQVBQSVVNX1NFU1NJT05fVElNRU9VVDogJ0FQUElVTV9TRVNTSU9OX1RJTUVPVVQnLFxyXG4gICAgU0VMRU5JVU1fU0VTU0lPTl9FUlJPUjogJ1NFTEVOSVVNX1NFU1NJT05fRVJST1InLFxyXG4gICAgU0VMRU5JVU1fU0VTU0lPTl9USU1FT1VUOiAnU0VMRU5JVU1fU0VTU0lPTl9USU1FT1VUJyxcclxuICAgIFNFTEVOSVVNX0NPTk5FQ1RJT05fRVJST1I6ICdTRUxFTklVTV9DT05ORUNUSU9OX0VSUk9SJyxcclxuICAgIFVSTF9PUEVOX0VSUk9SOiAnVVJMX09QRU5fRVJST1InLFxyXG4gICAgT1BUSU9OX05PVF9GT1VORDogJ09QVElPTl9OT1RfRk9VTkQnLFxyXG4gICAgQVRUUklCVVRFX05PVF9GT1VORDogJ0FUVFJJQlVURV9OT1RfRk9VTkQnLFxyXG4gICAgRUxFTUVOVF9TVEFURV9FUlJPUjogJ0VMRU1FTlRfU1RBVEVfRVJST1InLFxyXG4gICAgTU9CSUxFX0NPTlRFWFRfRVJST1I6ICdNT0JJTEVfQ09OVEVYVF9FUlJPUicsXHJcbiAgICBBUFBMSUNBVElPTl9OT1RfRk9VTkRfRVJST1I6ICdBUFBMSUNBVElPTl9OT1RfRk9VTkRfRVJST1InLFxyXG4gICAgVFdJTElPX0VSUk9SOiAnVFdJTElPX0VSUk9SJyxcclxuICAgIEhPT0tfRVJST1I6ICdIT09LX0VSUk9SJyxcclxuICAgIE5PVF9TVVBQT1JURUQ6ICdOT1RfU1VQUE9SVEVEJyxcclxuICAgIEFTU0VSVF9QQVNTRUQ6ICdBU1NFUlRfUEFTU0VEJyxcclxuICAgIE1PRFVMRV9OT1RfRk9VTkQ6ICdNT0RVTEVfTk9UX0ZPVU5EJyxcclxuICAgIEZJTEVfQlJPV1NFX0VSUk9SOiAnRklMRV9CUk9XU0VfRVJST1InLFxyXG4gICAgQ1NWX0VSUk9SOiAnQ1NWX0VSUk9SJyxcclxuICAgIENSWVBUT19FUlJPUjogJ0NSWVBUT19FUlJPUicsXHJcbiAgICBETlNfRVJST1I6ICdETlNfRVJST1InLFxyXG4gICAgQ0lSQ1VMQVJfRVJST1I6ICdDSVJDVUxBUl9FUlJPUicsXHJcbiAgICBYTUxfRVJST1I6ICdYTUxfRVJST1InXHJcbn07XHJcblxyXG4vLyBDaGFpIHRvIE94eWdlbiBlcnJvciBjb2RlcyBtYXBwaW5nXHJcbmNvbnN0IENIQUlfRVJST1JfQ09ERVMgPSB7XHJcbiAgICBBc3NlcnRpb25FcnJvcjogRVJST1JfQ09ERVMuQVNTRVJUX0VSUk9SXHJcbn07XHJcblxyXG4vLyBHZW5lcmFsIEphdmFTY3JpcHQgZXJyb3IgY29kZXMgbWFwcGluZ1xyXG5jb25zdCBTQ1JJUFRfRVJST1JfQ09ERVMgPSB7XHJcbiAgICBUeXBlRXJyb3I6IEVSUk9SX0NPREVTLlNDUklQVF9FUlJPUixcclxuICAgIFN5bnRheEVycm9yOiBFUlJPUl9DT0RFUy5TQ1JJUFRfRVJST1IsXHJcbiAgICBSZWZlcmVuY2VFcnJvcjogRVJST1JfQ09ERVMuU0NSSVBUX0VSUk9SLFxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgICBnZXRGYWlsdXJlRnJvbUVycm9yOiBmdW5jdGlvbihlcnIpIHtcclxuICAgICAgICBpZiAoIWVycikge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCEoZXJyIGluc3RhbmNlb2YgT3hFcnJvcikpIHtcclxuICAgICAgICAgICAgZXJyID0gdGhpcy5nZXRPeHlnZW5FcnJvcihlcnIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0eXBlOiBlcnIudHlwZSxcclxuICAgICAgICAgICAgbWVzc2FnZTogZXJyLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgIGRhdGE6IGVyci5kYXRhLFxyXG4gICAgICAgICAgICBsb2NhdGlvbjogZXJyLmxvY2F0aW9uLFxyXG4gICAgICAgICAgICBzdGFja3RyYWNlOiBlcnIuc3RhY2t0cmFjZSB8fCBudWxsXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBnZXREYkVycm9yTWVzc2FnZTogZnVuY3Rpb24oZXJyKSB7XHJcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSAnJztcclxuXHJcbiAgICAgICAgaWYgKGVyciAmJiBlcnIubWVzc2FnZSkge1xyXG4gICAgICAgICAgICBtZXNzYWdlICs9IGVyci5tZXNzYWdlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBlcnIgJiZcclxuICAgICAgICAgICAgZXJyLm9kYmNFcnJvcnMgJiZcclxuICAgICAgICAgICAgQXJyYXkuaXNBcnJheShlcnIub2RiY0Vycm9ycykgJiZcclxuICAgICAgICAgICAgZXJyLm9kYmNFcnJvcnMubGVuZ3RoID4gMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBlcnIub2RiY0Vycm9ycy5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBpdGVtICYmXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5tZXNzYWdlXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICc6ICcgK2l0ZW0ubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcclxuICAgIH0sXHJcbiAgICBnZXRPeHlnZW5FcnJvcjogZnVuY3Rpb24oZXJyLCBtb2R1bGUsIGNtZCwgYXJncykge1xyXG4gICAgICAgIC8vIHJldHVybiB0aGUgZXJyb3IgYXMgaXMgaWYgaXQgaGFzIGJlZW4gYWxyZWFkeSBwcm9jZXNzZWRcclxuICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgT3hFcnJvcikge1xyXG4gICAgICAgICAgICByZXR1cm4gZXJyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGVyclR5cGUgPSBlcnIudHlwZSB8fCBlcnIubmFtZSB8fCB0eXBlb2YgZXJyO1xyXG4gICAgICAgIC8vIGhhbmRsZSBcIkNhbid0IGNhbGwgPGNvbW1hbmQ+IG9uIGVsZW1lbnQgd2l0aCBzZWxlY3RvciA8c2VsZWN0b3I+IGJlY2F1c2UgZWxlbWVudCB3YXNuJ3QgZm91bmRcIlxyXG4gICAgICAgIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnYmVjYXVzZSBlbGVtZW50IHdhc25cXCd0IGZvdW5kJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkVMRU1FTlRfTk9UX0ZPVU5ELCBlcnIubWVzc2FnZSwgbnVsbCwgdHJ1ZSwgZXJyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaGFuZGxlIFwiaW52YWxpZCBhcmd1bWVudDogVW5zdXBwb3J0ZWQgbG9jYXRvciBzdHJhdGVneTogLWFuZHJvaWQgdWlhdXRvbWF0b3JcIiBmb3IgbW9iaWxlLlxyXG4gICAgICAgIC8vIHVzdWFsbHkgZHVlIHRvIG5vdCB1c2luZyB0aGUgY29ycmVjdCBjb250ZXh0XHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ1Vuc3VwcG9ydGVkIGxvY2F0b3Igc3RyYXRlZ3knKSkge1xyXG4gICAgICAgICAgICBsZXQgbWF0Y2hlcyA9IGVyci5tZXNzYWdlLm1hdGNoKC9pbnZhbGlkIGFyZ3VtZW50OiAoLiopL2kpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuTU9CSUxFX0NPTlRFWFRfRVJST1IsIChtYXRjaGVzLmxlbmd0aCA9PT0gMiA/IG1hdGNoZXNbMV0gOiBlcnIubWVzc2FnZSkgK1xyXG4gICAgICAgICAgICAgICAgJy4gTWFrZSBzdXJlIHlvdSBhcmUgdXNpbmcgdGhlIGNvcnJlY3QgbW9iaWxlIGNvbnRleHQuIFNlZSBtb2Iuc2V0TmF0aXZlQ29udGV4dCBhbmQgbW9iLnNldFdlYlZpZXdDb250ZXh0LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBoYW5kbGUgXCJpbnZhbGlkIHNlbGVjdG9yOiBVbmFibGUgdG8gbG9jYXRlIGFuIGVsZW1lbnQgd2l0aCB0aGUgeHBhdGggZXhwcmVzc2lvblwiXHJcbiAgICAgICAgLy8gdXN1YWxseSBkdWUgdG8gaW52YWxpZCB4cGF0aFxyXG4gICAgICAgIGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdVbmFibGUgdG8gbG9jYXRlIGFuIGVsZW1lbnQgd2l0aCB0aGUgeHBhdGggZXhwcmVzc2lvbicpKSB7XHJcbiAgICAgICAgICAgIGxldCBtYXRjaGVzID0gZXJyLm1lc3NhZ2UubWF0Y2goLyhUaGUgc3RyaW5nICcuKicgaXMgbm90IGEgdmFsaWQgWFBhdGggZXhwcmVzc2lvbi4pL2kpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuU0NSSVBUX0VSUk9SLCAobWF0Y2hlcyAmJiBtYXRjaGVzLmxlbmd0aCA9PT0gMiA/IG1hdGNoZXNbMV0gOiBlcnIubWVzc2FnZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpbnZhbGlkIGNzcyBsb2NhdG9yIG9uIENocm9tZS9JRS4gZS5nLiBjc3M9I1xcOnAwXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ0FuIGludmFsaWQgb3IgaWxsZWdhbCBzZWxlY3RvciB3YXMgc3BlY2lmaWVkJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlNDUklQVF9FUlJPUiwgJ0FuIGludmFsaWQgb3IgaWxsZWdhbCBzZWxlY3RvciB3YXMgc3BlY2lmaWVkJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGludmFsaWQgY3NzIGxvY2F0b3Igb24gRmlyZWZveC4gZS5nLiBjc3M9I1xcOnAwXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2Uuc3RhcnRzV2l0aCgnR2l2ZW4gY3NzIHNlbGVjdG9yIGV4cHJlc3Npb24nKSkge1xyXG4gICAgICAgICAgICBsZXQgbWF0Y2hlcyA9IGVyci5tZXNzYWdlLm1hdGNoKC8oR2l2ZW4gY3NzIHNlbGVjdG9yIGV4cHJlc3Npb24gXCIuKlwiIGlzIGludmFsaWQpLiovaSk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5TQ1JJUFRfRVJST1IsIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoID09PSAyID8gbWF0Y2hlc1sxXSA6IGVyci5tZXNzYWdlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIChlcnIubWVzc2FnZS5pbmNsdWRlcygnVW5hYmxlIHRvIGF1dG9tYXRlIENocm9tZSB2ZXJzaW9uJykgfHxcclxuICAgICAgICAgICAgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ05vIENocm9tZWRyaXZlciBmb3VuZCB0aGF0IGNhbiBhdXRvbWF0ZScpKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQ0hST01FRFJJVkVSX0VSUk9SLCBleHRyYWN0T3JpZ2luYWxFcnJvcihlcnIubWVzc2FnZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBoYW5kbGUgdmFyaW91cyB0eXBlcyBvZiAnT3JpZ2luYWwgZXJyb3InXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoT1JJR0lOQUxfRVJST1JfTUVTU0FHRSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlVOS05PV05fRVJST1IsIGV4dHJhY3RPcmlnaW5hbEVycm9yKGVyci5tZXNzYWdlKSwgdXRpbC5pbnNwZWN0KGVycikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpbnZhbGlkIFVSTCBpbiBvcGVuIGNvbW1hbmRcclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnSW52YWxpZCBVUkwnKSkge1xyXG4gICAgICAgICAgICBsZXQgbWF0Y2hlcyA9IGVyci5tZXNzYWdlLm1hdGNoKC8oIEludmFsaWQgVVJMOiAuKiQpLiovaSk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5TQ1JJUFRfRVJST1IsIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoID09PSAyID8gbWF0Y2hlc1sxXSA6IGVyci5tZXNzYWdlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHVzdWFsbHkgb24gbW9iaWxlIENocm9tZSB3aGVuIGVsZW1lbnQgaXMgb3ZlcmxhcHBlZCBieSBhbm90aGVyIGVsZW1lbnRcclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5zdGFydHNXaXRoKCdlbGVtZW50IGNsaWNrIGludGVyY2VwdGVkJykpIHtcclxuICAgICAgICAgICAgbGV0IG1hdGNoZXMgPSBlcnIubWVzc2FnZS5tYXRjaCgvZWxlbWVudCBjbGljayBpbnRlcmNlcHRlZDogKC4qKS9pKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkVMRU1FTlRfTk9UX1ZJU0lCTEUsIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoID09PSAyID8gbWF0Y2hlc1sxXSA6IGVyci5tZXNzYWdlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHVzdWFsbHkgYmVjYXVzZSBTZWxlbml1bSBoYXMga2lsbGVkIHRoZSBzZXNzaW9uIGR1ZSB0byBleGNlZWRpbmcgJy10aW1lb3V0JyB0aW1lb3V0XHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2Uuc3RhcnRzV2l0aCgnTm8gYWN0aXZlIHNlc3Npb24gd2l0aCBJRCcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5TRUxFTklVTV9TRVNTSU9OX0VSUk9SLCAnRXhlY3V0aW9uIHRpbWUgZXhjZWVkZWQgdGhlIHRpbWVvdXQgc2V0IGJ5IFNlbGVuaXVtJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHdoZW4gZHJpdmVyIChJRURyaXZlclNlcnZlciwgQ2hyb21lRHJpdmVyLCBldGMpIGNyYXNoZXNcclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSA9PT0gJ2phdmEubmV0LkNvbm5lY3RFeGNlcHRpb246IENvbm5lY3Rpb24gcmVmdXNlZDogY29ubmVjdCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLldFQkRSSVZFUl9FUlJPUiwgJ1RoZSB1bmRlcmx5aW5nIFdlYkRyaXZlciBzZWVtcyB0byBoYXZlIGNyYXNoZWQ6ICcgKyBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHN0YWxlIGVsZW1lbnQgcmVmZXJlbmNlXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm5hbWUgJiYgZXJyLm5hbWUuaW5jbHVkZXMoJ3N0YWxlIGVsZW1lbnQgcmVmZXJlbmNlJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlNUQUxFX0VMRU1FTlRfUkVGRVJFTkNFLCBlcnIubmFtZSArICcgJyArIGVyci5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLmNvZGUgJiYgZXJyLmNvZGUgPT09ICdNT0RVTEVfTk9UX0ZPVU5EJykge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuTU9EVUxFX05PVF9GT1VORCwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyAgd2hlbiBkb2luZyBhbiBvcGVyYXRpb24gb24gYW4gZWxlbWVudCAoZS5nLiBjbGljaykgYnV0IHRoZSB3aW5kb3cgd2FzIGFscmVhZHkgY2xvc2VkXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ25vIHN1Y2ggd2luZG93JykgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ3RhcmdldCB3aW5kb3cgYWxyZWFkeSBjbG9zZWQnKSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnd2ViIHZpZXcgbm90IGZvdW5kJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLldJTkRPV19OT1RfRk9VTkQsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZXhhbXBsZTogVGhlIGVsZW1lbnQgd2l0aCBzZWxlY3RvciAqKiogeW91IHRyeWluZyB0byBwYXNzIGludG8gdGhlIGV4ZWN1dGUgbWV0aG9kIHdhc24ndCBmb3VuZFxyXG4gICAgICAgIC8vIHdoZW4gZWxlbWVudCB3YXMgZGVsZXRlZCBmcm9tIERPTVxyXG4gICAgICAgIGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCd5b3UgdHJ5aW5nIHRvIHBhc3MgaW50byB0aGUgZXhlY3V0ZSBtZXRob2Qgd2FzblxcJ3QgZm91bmQnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuRUxFTUVOVF9OT1RfRk9VTkQsICBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHdoZW4gZG9pbmcgYW4gb3BlcmF0aW9uIG9uIGFuIGVsZW1lbnQgcmVmZXJlbmNlIChlLmcuIGNsaWNrKSBidXQgdGhlIHBhZ2Ugd2FzIGFscmVhZHkgY2hhbmdlZFxyXG4gICAgICAgIGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdlbGVtZW50IG5vdCBpbnRlcmFjdGFibGUnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuRUxFTUVOVF9OT1RfSU5URVJBQ1RBQkxFLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGludmFsaWQgc2VsZWN0b3I6IGphdmEubGFuZy5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb246IFVuYWJsZSB0byBjb21waWxlIHNlbGVjdG9yIC4uLlxyXG4gICAgICAgIGVsc2UgaWYgKFxyXG4gICAgICAgICAgICBlcnIubmFtZSAmJlxyXG4gICAgICAgICAgICBlcnIubmFtZSA9PT0gJ2ludmFsaWQgc2VsZWN0b3InXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5TQ1JJUFRfRVJST1IsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gUmVxdWVzdEVycm9yOiBUaW1lb3V0IGF3YWl0aW5nICdyZXF1ZXN0JyBmb3IgMzEwMDAwbXMsIG5hbWU6ICdUaW1lb3V0RXJyb3InXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ1RpbWVvdXQgYXdhaXRpbmcgXFwncmVxdWVzdFxcJyBmb3InKSkge1xyXG4gICAgICAgICAgICBjb25zdCBlcnJNZXNzYWdlID0gZXJyLm1lc3NhZ2UucmVwbGFjZShcclxuICAgICAgICAgICAgICAgICdUaW1lb3V0IGF3YWl0aW5nIFxcJ3JlcXVlc3RcXCcgZm9yJyxcclxuICAgICAgICAgICAgICAgICdDb3VsZG5cXCd0IGdldCBhIHJlc3BvbnNlIGZyb20gU2VsZW5pdW0vV2ViRHJpdmVyIHdpdGhpbidcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKG1vZHVsZSA9PT0gJ3dlYicgPyBFUlJPUl9DT0RFUy5TRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQgOiBFUlJPUl9DT0RFUy5BUFBJVU1fU0VTU0lPTl9USU1FT1VULCBlcnJNZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZXJyICYmIGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdzb2NrZXQgaGFuZyB1cCcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihtb2R1bGUgPT09ICd3ZWInID8gRVJST1JfQ09ERVMuU0VMRU5JVU1fU0VTU0lPTl9USU1FT1VUIDogRVJST1JfQ09ERVMuQVBQSVVNX1NFU1NJT05fVElNRU9VVCwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyICYmIGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdUaW1lZCBvdXQgcmVjZWl2aW5nIG1lc3NhZ2UgZnJvbSByZW5kZXJlJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKG1vZHVsZSA9PT0gJ3dlYicgPyBFUlJPUl9DT0RFUy5TRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQgOiBFUlJPUl9DT0RFUy5BUFBJVU1fU0VTU0lPTl9USU1FT1VULCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0cnkgdG8gcmVzb2x2ZSBDaGFpIGVycm9yIGNvZGVcclxuICAgICAgICB2YXIgb3hFcnJvckNvZGUgPSBDSEFJX0VSUk9SX0NPREVTW2VyclR5cGVdO1xyXG4gICAgICAgIGlmIChveEVycm9yQ29kZSkge1xyXG4gICAgICAgICAgICAvLyB0aHJvdyBub24tZmF0YWwgZXJyb3IgaWYgaXQncyBhIFwidmVyaWZ5XCIgbW9kdWxlIG9yIG1ldGhvZCBcclxuICAgICAgICAgICAgaWYgKG94RXJyb3JDb2RlID09PSBFUlJPUl9DT0RFUy5BU1NFUlQgJiZcclxuXHRcdFx0XHQobW9kdWxlID09PSAndmVyaWZ5JyB8fCBjbWQuaW5kZXhPZigndmVyaWZ5JykgPT09IDApKSB7IC8vIHZlcmlmeS4qLCAqLnZlcmlmeSpcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5WRVJJRlksIGVyci5tZXNzYWdlLCBudWxsLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKG94RXJyb3JDb2RlLCBlcnIubWVzc2FnZSwgbnVsbCwgdHJ1ZSwgZXJyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRyeSB0byByZXNvbHZlIEphdmFTY3JpcHQgZXJyb3IgY29kZVxyXG4gICAgICAgIG94RXJyb3JDb2RlID0gU0NSSVBUX0VSUk9SX0NPREVTW2VyclR5cGVdO1xyXG4gICAgICAgIGlmIChveEVycm9yQ29kZSkge1xyXG4gICAgICAgICAgICAvLyB0aHJvdyBub24tZmF0YWwgZXJyb3IgaWYgaXQncyBhIFwidmVyaWZ5XCIgbW9kdWxlIG9yIG1ldGhvZCBcclxuICAgICAgICAgICAgaWYgKG94RXJyb3JDb2RlID09PSBFUlJPUl9DT0RFUy5BU1NFUlQgJiZcclxuXHRcdFx0XHQobW9kdWxlID09PSAndmVyaWZ5JyB8fCBjbWQuaW5kZXhPZigndmVyaWZ5JykgPT09IDApKSB7IC8vIHZlcmlmeS4qLCAqLnZlcmlmeSpcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5WRVJJRlksIGVyci5tZXNzYWdlLCBudWxsLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKG94RXJyb3JDb2RlLCBlcnIubWVzc2FnZSB8fCBudWxsLCBudWxsLCB0cnVlLCBlcnIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coJz09PSBFcnJvciBEZXRhaWxzID09PScpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdUeXBlOiAnICsgZXJyLnR5cGUgKyAnIE5hbWU6ICcgKyBlcnIubmFtZSArICcgQ29kZTogJyArIGVyci5jb2RlICsgJyBNc2c6ICcgKyBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgY29uc29sZS5sb2codXRpbC5pbnNwZWN0KGVycikpO1xyXG5cclxuICAgICAgICBjb25zdCBlcnJNZXNzYWdlID0gZXJyLm1lc3NhZ2UgPyBgJHtlcnJUeXBlfTogJHtlcnIubWVzc2FnZX1gIDogYCR7ZXJyVHlwZX1gO1xyXG4gICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5VTktOT1dOX0VSUk9SLCBlcnJNZXNzYWdlLCB1dGlsLmluc3BlY3QoZXJyKSwgdHJ1ZSwgZXJyKTtcclxuICAgIH0sXHJcbiAgICBnZXRTZWxlbml1bUluaXRFcnJvcjogZnVuY3Rpb24oZXJyKSB7XHJcbiAgICAgICAgaWYgKGVyci5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIHZhciBpZVpvb21FcnJvck1zZyA9IGVyci5tZXNzYWdlLm1hdGNoKC8oVW5leHBlY3RlZCBlcnJvciBsYXVuY2hpbmcgSW50ZXJuZXQgRXhwbG9yZXJcXC4gQnJvd3NlciB6b29tIGxldmVsIHdhcyBzZXQgdG8gXFxkKyVcXC4gSXQgc2hvdWxkIGJlIHNldCB0byBcXGQrJSkvZ20pO1xyXG4gICAgICAgICAgICBpZiAoaWVab29tRXJyb3JNc2cpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5CUk9XU0VSX0NPTkZJR1VSQVRJT05fRVJST1IsIGllWm9vbUVycm9yTXNnLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ1VuYWJsZSB0byBjcmVhdGUgbmV3IHNlcnZpY2U6IENocm9tZURyaXZlclNlcnZpY2UnKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkNIUk9NRURSSVZFUl9FUlJPUiwgZXJyLm1lc3NhZ2UsIG51bGwsIHRydWUsIGVycik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChlcnIubWVzc2FnZS5pbmNsdWRlcygnVW5hYmxlIHRvIGNyZWF0ZSBuZXcgc2VydmljZTonKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlNFTEVOSVVNX1VOUkVBQ0hBQkxFX0VSUk9SLCBlcnIubWVzc2FnZSwgbnVsbCwgdHJ1ZSwgZXJyKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGNocm9tZURyaXZlck1zZyA9IGVyci5tZXNzYWdlLm1hdGNoKC8oVGhpcyB2ZXJzaW9uIG9mIENocm9tZURyaXZlciBvbmx5IHN1cHBvcnRzIENocm9tZSB2ZXJzaW9uIFswLTldKikvZ20pO1xyXG4gICAgICAgICAgICBpZiAoY2hyb21lRHJpdmVyTXNnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQ0hST01FRFJJVkVSX0VSUk9SLCBjaHJvbWVEcml2ZXJNc2cudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnY2Fubm90IGZpbmQgQ2hyb21lIGJpbmFyeScpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5DSFJPTUVEUklWRVJfRVJST1IsICdDYW5ub3QgZmluZCBDaHJvbWUgYmluYXJ5Jyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlcnIuY29kZSA9PT0gJ0VDT05OUkVGVVNFRCcgfHwgZXJyLmNvZGUgPT09ICdFQ09OTlJFU0VUJyB8fCBlcnIuY29kZSA9PT0gJ0VOT1RGT1VORCcgfHwgZXJyLm1lc3NhZ2UgPT09ICdGYWlsZWQgdG8gY3JlYXRlIHNlc3Npb24uXFxuc29ja2V0IGhhbmcgdXAnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5TRUxFTklVTV9VTlJFQUNIQUJMRV9FUlJPUiwgXCJDb3VsZG4ndCBjb25uZWN0IHRvIFNlbGVuaXVtIHNlcnZlclwiKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGVyci5tZXNzYWdlID09PSAnQWxsIG1pbnV0ZXMgZm9yIHRoaXMgb3JnYW5pemF0aW9uIGhhcyBiZWVuIGV4YXVzdGVkJyB8fFxyXG4gICAgICAgICAgICBlcnIubWVzc2FnZSA9PT0gJzQwMSBVbmF1dGhvcml6ZWQnIHx8XHJcbiAgICAgICAgICAgIGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLnN0YXJ0c1dpdGgoJ0ZhaWxlZCB0byBjcmVhdGUgc2Vzc2lvbi4nKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuU0VMRU5JVU1fQ09OTkVDVElPTl9FUlJPUiwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ1VuYWJsZSB0byBjcmVhdGUgbmV3IHNlcnZpY2U6JykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlNFTEVOSVVNX0NPTk5FQ1RJT05fRVJST1IsIGVyci5tZXNzYWdlICsgJ1xcblxcblRoaXMgaXMgcHJvYmFibHkgZHVlIHRvIG1pc3NpbmcgQ2hyb21lRHJpdmVyL0lFRHJpdmVyU2VydmVyL0dlY2tvRHJpdmVyIGJpbmFyeS5cXG4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKCc9PT0gRXJyb3IgRGV0YWlscyA9PT0nKTtcclxuICAgICAgICBjb25zb2xlLmxvZygnVHlwZTogJyArIGVyci50eXBlICsgJyBOYW1lOiAnICsgZXJyLm5hbWUgKyAnIENvZGU6ICcgKyBlcnIuY29kZSArICcgTXNnOiAnICsgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHV0aWwuaW5zcGVjdChlcnIpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlVOS05PV05fRVJST1IsIGVyci50eXBlICsgJzogJyArIGVyci5tZXNzYWdlLCB1dGlsLmluc3BlY3QoZXJyKSk7XHJcbiAgICB9LFxyXG4gICAgZ2V0QXBwaXVtSW5pdEVycm9yOiBmdW5jdGlvbihlcnIpIHtcclxuICAgICAgICBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ2Nhbm5vdCBmaW5kIENocm9tZSBiaW5hcnknKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQ0hST01FRFJJVkVSX0VSUk9SLCAnQ2Fubm90IGZpbmQgQ2hyb21lIGJpbmFyeScpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyLmNvZGUgPT09ICdFQ09OTlJFRlVTRUQnIHx8IGVyci5jb2RlID09PSAnRUNPTk5SRVNFVCcgfHwgZXJyLmNvZGUgPT09ICdFTk9URk9VTkQnIHx8IGVyci5tZXNzYWdlID09PSAnRmFpbGVkIHRvIGNyZWF0ZSBzZXNzaW9uLlxcbnNvY2tldCBoYW5nIHVwJykge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQVBQSVVNX1VOUkVBQ0hBQkxFX0VSUk9SLCBcIkNvdWxkbid0IGNvbm5lY3QgdG8gQXBwaXVtIHNlcnZlclwiKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdDb3VsZCBub3QgZmluZCBhIGNvbm5lY3RlZCBBbmRyb2lkIGRldmljZScpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5ERVZJQ0VfTk9UX0ZPVU5ELCAnQ291bGQgbm90IGZpbmQgYSBjb25uZWN0ZWQgQW5kcm9pZCBkZXZpY2UnKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdVbmFibGUgdG8gYXV0b21hdGUgQ2hyb21lIHZlcnNpb24nKSkgeyAgICAgICAgICAvLyBhcHBpdW0gPD0gMS4xNFxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQ0hST01FRFJJVkVSX0VSUk9SLCBleHRyYWN0T3JpZ2luYWxFcnJvcihlcnIubWVzc2FnZSkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ05vIENocm9tZWRyaXZlciBmb3VuZCB0aGF0IGNhbiBhdXRvbWF0ZScpKSB7ICAgIC8vIGFwcGl1bSA+PSAxLjE1XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5DSFJPTUVEUklWRVJfRVJST1IsIGV4dHJhY3RPcmlnaW5hbEVycm9yKGVyci5tZXNzYWdlKSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnVW5hYmxlIHRvIGZpbmQgYW4gYWN0aXZlIGRldmljZSBvciBlbXVsYXRvciB3aXRoJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkRFVklDRV9OT1RfRk9VTkQsIGV4dHJhY3RPcmlnaW5hbEVycm9yKGVyci5tZXNzYWdlKSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnaXMgbm90IGluc3RhbGxlZCBvbiBkZXZpY2UnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQVBQTElDQVRJT05fTk9UX0ZPVU5EX0VSUk9SLCBleHRyYWN0T3JpZ2luYWxFcnJvcihlcnIubWVzc2FnZSkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyLm1lc3NhZ2UgPT09ICdBbGwgbWludXRlcyBmb3IgdGhpcyBvcmdhbml6YXRpb24gaGFzIGJlZW4gZXhhdXN0ZWQnIHx8XHJcbiAgICAgICAgICAgIGVyci5tZXNzYWdlID09PSAnNDAxIFVuYXV0aG9yaXplZCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkFQUElVTV9DT05ORUNUSU9OX0VSUk9SLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiAoXHJcbiAgICAgICAgICAgICAgICBlcnIubWVzc2FnZS5pbmNsdWRlcygnQSBuZXcgc2Vzc2lvbiBjb3VsZCBub3QgYmUgY3JlYXRlZC4nKSB8fFxyXG4gICAgICAgICAgICAgICAgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ0ZhaWxlZCB0byBjcmVhdGUgc2Vzc2lvbi4nKSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkFQUElVTV9TRVNTSU9OX0VSUk9SLCBleHRyYWN0T3JpZ2luYWxFcnJvcihlcnIubWVzc2FnZSksIG51bGwsIHRydWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coJz09PSBFcnJvciBEZXRhaWxzID09PScpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdUeXBlOiAnICsgZXJyLnR5cGUgKyAnIE5hbWU6ICcgKyBlcnIubmFtZSArICcgQ29kZTogJyArIGVyci5jb2RlICsgJyBNc2c6ICcgKyBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgY29uc29sZS5sb2codXRpbC5pbnNwZWN0KGVycikpO1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuVU5LTk9XTl9FUlJPUiwgZXh0cmFjdE9yaWdpbmFsRXJyb3IoZXJyLm1lc3NhZ2UpLCB1dGlsLmluc3BlY3QoZXJyKSk7XHJcbiAgICB9LFxyXG4gICAgZ2V0QXNzZXJ0RXJyb3I6IGZ1bmN0aW9uKGV4cGVjdGVkLCBhY3R1YWwsIGlzRmF0YWwgPSB0cnVlKSB7XHJcbiAgICAgICAgYWN0dWFsID0gYWN0dWFsLnRvU3RyaW5nKCkucmVwbGFjZSgvXFxuL2csICdcXFxcbicpO1xyXG4gICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5BU1NFUlRfRVJST1IsIGBFeHBlY3RlZDogXCIke2V4cGVjdGVkfVwiLiBHb3Q6IFwiJHthY3R1YWx9XCJgLCB1bmRlZmluZWQsIGlzRmF0YWwpO1xyXG4gICAgfSxcclxuICAgIGVycm9yQ29kZTogRVJST1JfQ09ERVNcclxufTtcclxuXHJcbmNvbnN0IE9SSUdJTkFMX0VSUk9SX01FU1NBR0UgPSAnT3JpZ2luYWwgZXJyb3I6ICc7XHJcbmNvbnN0IFVOS05PV05fRVJST1JfTUVTU0FHRSA9ICd1bmtub3duIGVycm9yOiAnO1xyXG5cclxuZnVuY3Rpb24gZXh0cmFjdE9yaWdpbmFsRXJyb3IobXNnKSB7XHJcbiAgICBpZiAoIW1zZykge1xyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZXJyb3JJbmRleDEgPSBtc2cuaW5kZXhPZihPUklHSU5BTF9FUlJPUl9NRVNTQUdFKTtcclxuICAgIGlmIChlcnJvckluZGV4MSA9PT0gLTEpIHtcclxuICAgICAgICByZXR1cm4gbXNnO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHRoZXJlIGNvdWxkIGFub3RoZSBuZXN0ZWQgXCJvcmlnaW5hbCBlcnJvclwiXHJcbiAgICB2YXIgZXJyb3JJbmRleDIgPSBtc2cuaW5kZXhPZihPUklHSU5BTF9FUlJPUl9NRVNTQUdFLCBlcnJvckluZGV4MSArIE9SSUdJTkFMX0VSUk9SX01FU1NBR0UubGVuZ3RoKTtcclxuXHJcbiAgICBtc2cgPSBtc2cuc3Vic3RyaW5nKChlcnJvckluZGV4MiA+IC0xID8gZXJyb3JJbmRleDIgOiBlcnJvckluZGV4MSkgICsgT1JJR0lOQUxfRVJST1JfTUVTU0FHRS5sZW5ndGgpO1xyXG5cclxuICAgIC8vIHN0cmlwICd1bmtub3duIGVycm9yOidcclxuICAgIHZhciB1bmtub3duRXJyb3JJbmRleCA9IG1zZy5pbmRleE9mKFVOS05PV05fRVJST1JfTUVTU0FHRSk7XHJcbiAgICBpZiAodW5rbm93bkVycm9ySW5kZXggPiAtMSkge1xyXG4gICAgICAgIHJldHVybiBtc2cuc3Vic3RyaW5nKHVua25vd25FcnJvckluZGV4ICsgVU5LTk9XTl9FUlJPUl9NRVNTQUdFLmxlbmd0aCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG1zZztcclxufVxyXG4iXX0=
|
|
294
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lcnJvcnMvaGVscGVyLmpzIl0sIm5hbWVzIjpbInV0aWwiLCJyZXF1aXJlIiwiRVJST1JfQ09ERVMiLCJTQ1JJUFRfRVJST1IiLCJVTktOT1dOX0VSUk9SIiwiQVNTRVJUX0VSUk9SIiwiUERGX0VSUk9SIiwiVkVSSUZZX0VSUk9SIiwiRUxFTUVOVF9OT1RfRk9VTkQiLCJGUkFNRV9OT1RfRk9VTkQiLCJVTktOT1dOX0NPTU1BTkRfRVJST1IiLCJTVEFMRV9FTEVNRU5UX1JFRkVSRU5DRSIsIkVMRU1FTlRfTk9UX1ZJU0lCTEUiLCJFTEVNRU5UX05PVF9JTlRFUkFDVEFCTEUiLCJMT0NBVE9SX01BVENIRVNfTVVMVElQTEVfRUxFTUVOVFMiLCJFTEVNRU5UX1NUSUxMX0VYSVNUUyIsIkJST1dTRVJfSlNfRVhFQ1VURV9FUlJPUiIsIlRJTUVPVVQiLCJXSU5ET1dfTk9UX0ZPVU5EIiwiVU5FWFBFQ1RFRF9BTEVSVF9PUEVOIiwiTk9fQUxFUlRfT1BFTl9FUlJPUiIsIk1BSUxJTkFUT1JfRVJST1IiLCJBUFBJVU1fVU5SRUFDSEFCTEVfRVJST1IiLCJTRUxFTklVTV9VTlJFQUNIQUJMRV9FUlJPUiIsIkNIUk9NRURSSVZFUl9FUlJPUiIsIldFQkRSSVZFUl9FUlJPUiIsIkRCX0NPTk5FQ1RJT05fRVJST1IiLCJEQl9RVUVSWV9FUlJPUiIsIlNPQVBfRVJST1IiLCJTSEVMTF9FUlJPUiIsIk5PVF9JTVBMRU1FTlRFRF9FUlJPUiIsIlNFUklBTF9QT1JUX0VSUk9SIiwiSFRUUF9FUlJPUiIsIkVNQUlMX0VSUk9SIiwiTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiIsIkRFVklDRV9OT1RfRk9VTkQiLCJQQVJBTUVURVJTX0VSUk9SIiwiSU5WQUxJRF9DQVBBQklMSVRJRVMiLCJCUk9XU0VSX0NPTkZJR1VSQVRJT05fRVJST1IiLCJBUFBJVU1fQ09OTkVDVElPTl9FUlJPUiIsIkFQUElVTV9TRVNTSU9OX0VSUk9SIiwiQVBQSVVNX1NFU1NJT05fVElNRU9VVCIsIlNFTEVOSVVNX1NFU1NJT05fRVJST1IiLCJTRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQiLCJTRUxFTklVTV9DT05ORUNUSU9OX0VSUk9SIiwiVVJMX09QRU5fRVJST1IiLCJPUFRJT05fTk9UX0ZPVU5EIiwiQVRUUklCVVRFX05PVF9GT1VORCIsIkVMRU1FTlRfU1RBVEVfRVJST1IiLCJNT0JJTEVfQ09OVEVYVF9FUlJPUiIsIkFQUExJQ0FUSU9OX05PVF9GT1VORF9FUlJPUiIsIlRXSUxJT19FUlJPUiIsIkhPT0tfRVJST1IiLCJOT1RfU1VQUE9SVEVEIiwiQVNTRVJUX1BBU1NFRCIsIk1PRFVMRV9OT1RfRk9VTkQiLCJGSUxFX0JST1dTRV9FUlJPUiIsIkNTVl9FUlJPUiIsIkNSWVBUT19FUlJPUiIsIkROU19FUlJPUiIsIkNJUkNVTEFSX0VSUk9SIiwiWE1MX0VSUk9SIiwiQ0hBSV9FUlJPUl9DT0RFUyIsIkFzc2VydGlvbkVycm9yIiwiU0NSSVBUX0VSUk9SX0NPREVTIiwiVHlwZUVycm9yIiwiU3ludGF4RXJyb3IiLCJSZWZlcmVuY2VFcnJvciIsIm1vZHVsZSIsImV4cG9ydHMiLCJnZXRGYWlsdXJlRnJvbUVycm9yIiwiZXJyIiwiT3hFcnJvciIsImdldE94eWdlbkVycm9yIiwidHlwZSIsIm1lc3NhZ2UiLCJkYXRhIiwibG9jYXRpb24iLCJzdGFja3RyYWNlIiwiZ2V0RGJFcnJvck1lc3NhZ2UiLCJvZGJjRXJyb3JzIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwibWFwIiwiaXRlbSIsImNtZCIsImFyZ3MiLCJlcnJUeXBlIiwibmFtZSIsImluY2x1ZGVzIiwibWF0Y2hlcyIsIm1hdGNoIiwic3RhcnRzV2l0aCIsImV4dHJhY3RPcmlnaW5hbEVycm9yIiwiT1JJR0lOQUxfRVJST1JfTUVTU0FHRSIsImluc3BlY3QiLCJjb2RlIiwiZXJyTWVzc2FnZSIsInJlcGxhY2UiLCJveEVycm9yQ29kZSIsIkFTU0VSVCIsImluZGV4T2YiLCJWRVJJRlkiLCJjb25zb2xlIiwibG9nIiwiZ2V0U2VsZW5pdW1Jbml0RXJyb3IiLCJpZVpvb21FcnJvck1zZyIsInRvU3RyaW5nIiwiY2hyb21lRHJpdmVyTXNnIiwiZ2V0QXBwaXVtSW5pdEVycm9yIiwiZ2V0QXNzZXJ0RXJyb3IiLCJleHBlY3RlZCIsImFjdHVhbCIsImlzRmF0YWwiLCJ1bmRlZmluZWQiLCJnZXRWZXJpZnlFcnJvciIsImVycm9yQ29kZSIsIlVOS05PV05fRVJST1JfTUVTU0FHRSIsIm1zZyIsImVycm9ySW5kZXgxIiwiZXJyb3JJbmRleDIiLCJzdWJzdHJpbmciLCJ1bmtub3duRXJyb3JJbmRleCJdLCJtYXBwaW5ncyI6Ijs7OztBQWFBOzs7O0FBQ0EsTUFBTUEsSUFBSSxHQUFHQyxPQUFPLENBQUMsTUFBRCxDQUFwQjs7QUFFQSxNQUFNQyxXQUFXLEdBQUc7QUFDaEJDLEVBQUFBLFlBQVksRUFBRSxjQURFO0FBRWhCQyxFQUFBQSxhQUFhLEVBQUUsZUFGQztBQUdoQkMsRUFBQUEsWUFBWSxFQUFFLGNBSEU7QUFJaEJDLEVBQUFBLFNBQVMsRUFBRSxXQUpLO0FBS2hCQyxFQUFBQSxZQUFZLEVBQUUsY0FMRTtBQU1oQkMsRUFBQUEsaUJBQWlCLEVBQUUsbUJBTkg7QUFPaEJDLEVBQUFBLGVBQWUsRUFBRSxpQkFQRDtBQVFoQkMsRUFBQUEscUJBQXFCLEVBQUUsdUJBUlA7QUFTaEJDLEVBQUFBLHVCQUF1QixFQUFFLHlCQVRUO0FBVWhCQyxFQUFBQSxtQkFBbUIsRUFBRSxxQkFWTDtBQVdoQkMsRUFBQUEsd0JBQXdCLEVBQUUsMEJBWFY7QUFZaEJDLEVBQUFBLGlDQUFpQyxFQUFFLG1DQVpuQjtBQWFoQkMsRUFBQUEsb0JBQW9CLEVBQUUsc0JBYk47QUFjaEJDLEVBQUFBLHdCQUF3QixFQUFFLDBCQWRWO0FBZWhCQyxFQUFBQSxPQUFPLEVBQUUsU0FmTztBQWdCaEJDLEVBQUFBLGdCQUFnQixFQUFFLGtCQWhCRjtBQWlCaEJDLEVBQUFBLHFCQUFxQixFQUFFLHVCQWpCUDtBQWtCaEJDLEVBQUFBLG1CQUFtQixFQUFF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IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogSGVscGVyIG1vZHVsZSBmb3IgaGFuZGxpbmcgYW5kIGNvbnZlcnRpbmcgdmFyaW91cyBlcnJvciB0eXBlc1xyXG4gKi9cclxuXHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4vT3h5Z2VuRXJyb3InO1xyXG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xyXG5cclxuY29uc3QgRVJST1JfQ09ERVMgPSB7XHJcbiAgICBTQ1JJUFRfRVJST1I6ICdTQ1JJUFRfRVJST1InLFxyXG4gICAgVU5LTk9XTl9FUlJPUjogJ1VOS05PV05fRVJST1InLFxyXG4gICAgQVNTRVJUX0VSUk9SOiAnQVNTRVJUX0VSUk9SJyxcclxuICAgIFBERl9FUlJPUjogJ1BERl9FUlJPUicsXHJcbiAgICBWRVJJRllfRVJST1I6ICdWRVJJRllfRVJST1InLFxyXG4gICAgRUxFTUVOVF9OT1RfRk9VTkQ6ICdFTEVNRU5UX05PVF9GT1VORCcsXHJcbiAgICBGUkFNRV9OT1RfRk9VTkQ6ICdGUkFNRV9OT1RfRk9VTkQnLFxyXG4gICAgVU5LTk9XTl9DT01NQU5EX0VSUk9SOiAnVU5LTk9XTl9DT01NQU5EX0VSUk9SJyxcclxuICAgIFNUQUxFX0VMRU1FTlRfUkVGRVJFTkNFOiAnU1RBTEVfRUxFTUVOVF9SRUZFUkVOQ0UnLFxyXG4gICAgRUxFTUVOVF9OT1RfVklTSUJMRTogJ0VMRU1FTlRfTk9UX1ZJU0lCTEUnLFxyXG4gICAgRUxFTUVOVF9OT1RfSU5URVJBQ1RBQkxFOiAnRUxFTUVOVF9OT1RfSU5URVJBQ1RBQkxFJyxcclxuICAgIExPQ0FUT1JfTUFUQ0hFU19NVUxUSVBMRV9FTEVNRU5UUzogJ0xPQ0FUT1JfTUFUQ0hFU19NVUxUSVBMRV9FTEVNRU5UUycsXHJcbiAgICBFTEVNRU5UX1NUSUxMX0VYSVNUUzogJ0VMRU1FTlRfU1RJTExfRVhJU1RTJyxcclxuICAgIEJST1dTRVJfSlNfRVhFQ1VURV9FUlJPUjogJ0JST1dTRVJfSlNfRVhFQ1VURV9FUlJPUicsXHJcbiAgICBUSU1FT1VUOiAnVElNRU9VVCcsXHJcbiAgICBXSU5ET1dfTk9UX0ZPVU5EOiAnV0lORE9XX05PVF9GT1VORCcsXHJcbiAgICBVTkVYUEVDVEVEX0FMRVJUX09QRU46ICdVTkVYUEVDVEVEX0FMRVJUX09QRU4nLFxyXG4gICAgTk9fQUxFUlRfT1BFTl9FUlJPUjogJ05PX0FMRVJUX09QRU5fRVJST1InLFxyXG4gICAgTUFJTElOQVRPUl9FUlJPUjogJ01BSUxJTkFUT1JfRVJST1InLFxyXG4gICAgQVBQSVVNX1VOUkVBQ0hBQkxFX0VSUk9SOiAnQVBQSVVNX1VOUkVBQ0hBQkxFX0VSUk9SJyxcclxuICAgIFNFTEVOSVVNX1VOUkVBQ0hBQkxFX0VSUk9SOiAnU0VMRU5JVU1fVU5SRUFDSEFCTEVfRVJST1InLFxyXG4gICAgQ0hST01FRFJJVkVSX0VSUk9SOiAnQ0hST01FRFJJVkVSX0VSUk9SJyxcclxuICAgIFdFQkRSSVZFUl9FUlJPUjogJ1dFQkRSSVZFUl9FUlJPUicsXHJcbiAgICBEQl9DT05ORUNUSU9OX0VSUk9SOiAnREJfQ09OTkVDVElPTl9FUlJPUicsXHJcbiAgICBEQl9RVUVSWV9FUlJPUjogJ0RCX1FVRVJZX0VSUk9SJyxcclxuICAgIFNPQVBfRVJST1I6ICdTT0FQX0VSUk9SJyxcclxuICAgIFNIRUxMX0VSUk9SOiAnU0hFTExfRVJST1InLFxyXG4gICAgTk9UX0lNUExFTUVOVEVEX0VSUk9SOiAnTk9UX0lNUExFTUVOVEVEX0VSUk9SJyxcclxuICAgIFNFUklBTF9QT1JUX0VSUk9SOiAnU0VSSUFMX1BPUlRfRVJST1InLFxyXG4gICAgSFRUUF9FUlJPUjogJ0hUVFBfRVJST1InLFxyXG4gICAgRU1BSUxfRVJST1I6ICdFTUFJTF9FUlJPUicsXHJcbiAgICBNT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SOiAnTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUicsXHJcbiAgICBERVZJQ0VfTk9UX0ZPVU5EOiAnREVWSUNFX05PVF9GT1VORCcsXHJcbiAgICBQQVJBTUVURVJTX0VSUk9SOiAnUEFSQU1FVEVSU19FUlJPUicsXHJcbiAgICBJTlZBTElEX0NBUEFCSUxJVElFUzogJ0lOVkFMSURfQ0FQQUJJTElUSUVTJyxcclxuICAgIEJST1dTRVJfQ09ORklHVVJBVElPTl9FUlJPUjogJ0JST1dTRVJfQ09ORklHVVJBVElPTl9FUlJPUicsXHJcbiAgICBBUFBJVU1fQ09OTkVDVElPTl9FUlJPUjogJ0FQUElVTV9DT05ORUNUSU9OX0VSUk9SJyxcclxuICAgIEFQUElVTV9TRVNTSU9OX0VSUk9SOiAnQVBQSVVNX1NFU1NJT05fRVJST1InLFxyXG4gICAgQVBQSVVNX1NFU1NJT05fVElNRU9VVDogJ0FQUElVTV9TRVNTSU9OX1RJTUVPVVQnLFxyXG4gICAgU0VMRU5JVU1fU0VTU0lPTl9FUlJPUjogJ1NFTEVOSVVNX1NFU1NJT05fRVJST1InLFxyXG4gICAgU0VMRU5JVU1fU0VTU0lPTl9USU1FT1VUOiAnU0VMRU5JVU1fU0VTU0lPTl9USU1FT1VUJyxcclxuICAgIFNFTEVOSVVNX0NPTk5FQ1RJT05fRVJST1I6ICdTRUxFTklVTV9DT05ORUNUSU9OX0VSUk9SJyxcclxuICAgIFVSTF9PUEVOX0VSUk9SOiAnVVJMX09QRU5fRVJST1InLFxyXG4gICAgT1BUSU9OX05PVF9GT1VORDogJ09QVElPTl9OT1RfRk9VTkQnLFxyXG4gICAgQVRUUklCVVRFX05PVF9GT1VORDogJ0FUVFJJQlVURV9OT1RfRk9VTkQnLFxyXG4gICAgRUxFTUVOVF9TVEFURV9FUlJPUjogJ0VMRU1FTlRfU1RBVEVfRVJST1InLFxyXG4gICAgTU9CSUxFX0NPTlRFWFRfRVJST1I6ICdNT0JJTEVfQ09OVEVYVF9FUlJPUicsXHJcbiAgICBBUFBMSUNBVElPTl9OT1RfRk9VTkRfRVJST1I6ICdBUFBMSUNBVElPTl9OT1RfRk9VTkRfRVJST1InLFxyXG4gICAgVFdJTElPX0VSUk9SOiAnVFdJTElPX0VSUk9SJyxcclxuICAgIEhPT0tfRVJST1I6ICdIT09LX0VSUk9SJyxcclxuICAgIE5PVF9TVVBQT1JURUQ6ICdOT1RfU1VQUE9SVEVEJyxcclxuICAgIEFTU0VSVF9QQVNTRUQ6ICdBU1NFUlRfUEFTU0VEJyxcclxuICAgIE1PRFVMRV9OT1RfRk9VTkQ6ICdNT0RVTEVfTk9UX0ZPVU5EJyxcclxuICAgIEZJTEVfQlJPV1NFX0VSUk9SOiAnRklMRV9CUk9XU0VfRVJST1InLFxyXG4gICAgQ1NWX0VSUk9SOiAnQ1NWX0VSUk9SJyxcclxuICAgIENSWVBUT19FUlJPUjogJ0NSWVBUT19FUlJPUicsXHJcbiAgICBETlNfRVJST1I6ICdETlNfRVJST1InLFxyXG4gICAgQ0lSQ1VMQVJfRVJST1I6ICdDSVJDVUxBUl9FUlJPUicsXHJcbiAgICBYTUxfRVJST1I6ICdYTUxfRVJST1InXHJcbn07XHJcblxyXG4vLyBDaGFpIHRvIE94eWdlbiBlcnJvciBjb2RlcyBtYXBwaW5nXHJcbmNvbnN0IENIQUlfRVJST1JfQ09ERVMgPSB7XHJcbiAgICBBc3NlcnRpb25FcnJvcjogRVJST1JfQ09ERVMuQVNTRVJUX0VSUk9SXHJcbn07XHJcblxyXG4vLyBHZW5lcmFsIEphdmFTY3JpcHQgZXJyb3IgY29kZXMgbWFwcGluZ1xyXG5jb25zdCBTQ1JJUFRfRVJST1JfQ09ERVMgPSB7XHJcbiAgICBUeXBlRXJyb3I6IEVSUk9SX0NPREVTLlNDUklQVF9FUlJPUixcclxuICAgIFN5bnRheEVycm9yOiBFUlJPUl9DT0RFUy5TQ1JJUFRfRVJST1IsXHJcbiAgICBSZWZlcmVuY2VFcnJvcjogRVJST1JfQ09ERVMuU0NSSVBUX0VSUk9SLFxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgICBnZXRGYWlsdXJlRnJvbUVycm9yOiBmdW5jdGlvbihlcnIpIHtcclxuICAgICAgICBpZiAoIWVycikge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCEoZXJyIGluc3RhbmNlb2YgT3hFcnJvcikpIHtcclxuICAgICAgICAgICAgZXJyID0gdGhpcy5nZXRPeHlnZW5FcnJvcihlcnIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0eXBlOiBlcnIudHlwZSxcclxuICAgICAgICAgICAgbWVzc2FnZTogZXJyLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgIGRhdGE6IGVyci5kYXRhLFxyXG4gICAgICAgICAgICBsb2NhdGlvbjogZXJyLmxvY2F0aW9uLFxyXG4gICAgICAgICAgICBzdGFja3RyYWNlOiBlcnIuc3RhY2t0cmFjZSB8fCBudWxsXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBnZXREYkVycm9yTWVzc2FnZTogZnVuY3Rpb24oZXJyKSB7XHJcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSAnJztcclxuXHJcbiAgICAgICAgaWYgKGVyciAmJiBlcnIubWVzc2FnZSkge1xyXG4gICAgICAgICAgICBtZXNzYWdlICs9IGVyci5tZXNzYWdlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBlcnIgJiZcclxuICAgICAgICAgICAgZXJyLm9kYmNFcnJvcnMgJiZcclxuICAgICAgICAgICAgQXJyYXkuaXNBcnJheShlcnIub2RiY0Vycm9ycykgJiZcclxuICAgICAgICAgICAgZXJyLm9kYmNFcnJvcnMubGVuZ3RoID4gMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBlcnIub2RiY0Vycm9ycy5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBpdGVtICYmXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5tZXNzYWdlXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICc6ICcgK2l0ZW0ubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcclxuICAgIH0sXHJcbiAgICBnZXRPeHlnZW5FcnJvcjogZnVuY3Rpb24oZXJyLCBtb2R1bGUsIGNtZCwgYXJncykge1xyXG4gICAgICAgIC8vIHJldHVybiB0aGUgZXJyb3IgYXMgaXMgaWYgaXQgaGFzIGJlZW4gYWxyZWFkeSBwcm9jZXNzZWRcclxuICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgT3hFcnJvcikge1xyXG4gICAgICAgICAgICByZXR1cm4gZXJyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGVyclR5cGUgPSBlcnIudHlwZSB8fCBlcnIubmFtZSB8fCB0eXBlb2YgZXJyO1xyXG4gICAgICAgIC8vIGhhbmRsZSBcIkNhbid0IGNhbGwgPGNvbW1hbmQ+IG9uIGVsZW1lbnQgd2l0aCBzZWxlY3RvciA8c2VsZWN0b3I+IGJlY2F1c2UgZWxlbWVudCB3YXNuJ3QgZm91bmRcIlxyXG4gICAgICAgIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnYmVjYXVzZSBlbGVtZW50IHdhc25cXCd0IGZvdW5kJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkVMRU1FTlRfTk9UX0ZPVU5ELCBlcnIubWVzc2FnZSwgbnVsbCwgdHJ1ZSwgZXJyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaGFuZGxlIFwiaW52YWxpZCBhcmd1bWVudDogVW5zdXBwb3J0ZWQgbG9jYXRvciBzdHJhdGVneTogLWFuZHJvaWQgdWlhdXRvbWF0b3JcIiBmb3IgbW9iaWxlLlxyXG4gICAgICAgIC8vIHVzdWFsbHkgZHVlIHRvIG5vdCB1c2luZyB0aGUgY29ycmVjdCBjb250ZXh0XHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ1Vuc3VwcG9ydGVkIGxvY2F0b3Igc3RyYXRlZ3knKSkge1xyXG4gICAgICAgICAgICBsZXQgbWF0Y2hlcyA9IGVyci5tZXNzYWdlLm1hdGNoKC9pbnZhbGlkIGFyZ3VtZW50OiAoLiopL2kpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuTU9CSUxFX0NPTlRFWFRfRVJST1IsIChtYXRjaGVzLmxlbmd0aCA9PT0gMiA/IG1hdGNoZXNbMV0gOiBlcnIubWVzc2FnZSkgK1xyXG4gICAgICAgICAgICAgICAgJy4gTWFrZSBzdXJlIHlvdSBhcmUgdXNpbmcgdGhlIGNvcnJlY3QgbW9iaWxlIGNvbnRleHQuIFNlZSBtb2Iuc2V0TmF0aXZlQ29udGV4dCBhbmQgbW9iLnNldFdlYlZpZXdDb250ZXh0LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBoYW5kbGUgXCJpbnZhbGlkIHNlbGVjdG9yOiBVbmFibGUgdG8gbG9jYXRlIGFuIGVsZW1lbnQgd2l0aCB0aGUgeHBhdGggZXhwcmVzc2lvblwiXHJcbiAgICAgICAgLy8gdXN1YWxseSBkdWUgdG8gaW52YWxpZCB4cGF0aFxyXG4gICAgICAgIGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdVbmFibGUgdG8gbG9jYXRlIGFuIGVsZW1lbnQgd2l0aCB0aGUgeHBhdGggZXhwcmVzc2lvbicpKSB7XHJcbiAgICAgICAgICAgIGxldCBtYXRjaGVzID0gZXJyLm1lc3NhZ2UubWF0Y2goLyhUaGUgc3RyaW5nICcuKicgaXMgbm90IGEgdmFsaWQgWFBhdGggZXhwcmVzc2lvbi4pL2kpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuU0NSSVBUX0VSUk9SLCAobWF0Y2hlcyAmJiBtYXRjaGVzLmxlbmd0aCA9PT0gMiA/IG1hdGNoZXNbMV0gOiBlcnIubWVzc2FnZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpbnZhbGlkIGNzcyBsb2NhdG9yIG9uIENocm9tZS9JRS4gZS5nLiBjc3M9I1xcOnAwXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ0FuIGludmFsaWQgb3IgaWxsZWdhbCBzZWxlY3RvciB3YXMgc3BlY2lmaWVkJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlNDUklQVF9FUlJPUiwgJ0FuIGludmFsaWQgb3IgaWxsZWdhbCBzZWxlY3RvciB3YXMgc3BlY2lmaWVkJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGludmFsaWQgY3NzIGxvY2F0b3Igb24gRmlyZWZveC4gZS5nLiBjc3M9I1xcOnAwXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2Uuc3RhcnRzV2l0aCgnR2l2ZW4gY3NzIHNlbGVjdG9yIGV4cHJlc3Npb24nKSkge1xyXG4gICAgICAgICAgICBsZXQgbWF0Y2hlcyA9IGVyci5tZXNzYWdlLm1hdGNoKC8oR2l2ZW4gY3NzIHNlbGVjdG9yIGV4cHJlc3Npb24gXCIuKlwiIGlzIGludmFsaWQpLiovaSk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5TQ1JJUFRfRVJST1IsIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoID09PSAyID8gbWF0Y2hlc1sxXSA6IGVyci5tZXNzYWdlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIChlcnIubWVzc2FnZS5pbmNsdWRlcygnVW5hYmxlIHRvIGF1dG9tYXRlIENocm9tZSB2ZXJzaW9uJykgfHxcclxuICAgICAgICAgICAgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ05vIENocm9tZWRyaXZlciBmb3VuZCB0aGF0IGNhbiBhdXRvbWF0ZScpKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQ0hST01FRFJJVkVSX0VSUk9SLCBleHRyYWN0T3JpZ2luYWxFcnJvcihlcnIubWVzc2FnZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBoYW5kbGUgdmFyaW91cyB0eXBlcyBvZiAnT3JpZ2luYWwgZXJyb3InXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoT1JJR0lOQUxfRVJST1JfTUVTU0FHRSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlVOS05PV05fRVJST1IsIGV4dHJhY3RPcmlnaW5hbEVycm9yKGVyci5tZXNzYWdlKSwgdXRpbC5pbnNwZWN0KGVycikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpbnZhbGlkIFVSTCBpbiBvcGVuIGNvbW1hbmRcclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnSW52YWxpZCBVUkwnKSkge1xyXG4gICAgICAgICAgICBsZXQgbWF0Y2hlcyA9IGVyci5tZXNzYWdlLm1hdGNoKC8oIEludmFsaWQgVVJMOiAuKiQpLiovaSk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5TQ1JJUFRfRVJST1IsIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoID09PSAyID8gbWF0Y2hlc1sxXSA6IGVyci5tZXNzYWdlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHVzdWFsbHkgb24gbW9iaWxlIENocm9tZSB3aGVuIGVsZW1lbnQgaXMgb3ZlcmxhcHBlZCBieSBhbm90aGVyIGVsZW1lbnRcclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5zdGFydHNXaXRoKCdlbGVtZW50IGNsaWNrIGludGVyY2VwdGVkJykpIHtcclxuICAgICAgICAgICAgbGV0IG1hdGNoZXMgPSBlcnIubWVzc2FnZS5tYXRjaCgvZWxlbWVudCBjbGljayBpbnRlcmNlcHRlZDogKC4qKS9pKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkVMRU1FTlRfTk9UX1ZJU0lCTEUsIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoID09PSAyID8gbWF0Y2hlc1sxXSA6IGVyci5tZXNzYWdlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHVzdWFsbHkgYmVjYXVzZSBTZWxlbml1bSBoYXMga2lsbGVkIHRoZSBzZXNzaW9uIGR1ZSB0byBleGNlZWRpbmcgJy10aW1lb3V0JyB0aW1lb3V0XHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2Uuc3RhcnRzV2l0aCgnTm8gYWN0aXZlIHNlc3Npb24gd2l0aCBJRCcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5TRUxFTklVTV9TRVNTSU9OX0VSUk9SLCAnRXhlY3V0aW9uIHRpbWUgZXhjZWVkZWQgdGhlIHRpbWVvdXQgc2V0IGJ5IFNlbGVuaXVtJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHdoZW4gZHJpdmVyIChJRURyaXZlclNlcnZlciwgQ2hyb21lRHJpdmVyLCBldGMpIGNyYXNoZXNcclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSA9PT0gJ2phdmEubmV0LkNvbm5lY3RFeGNlcHRpb246IENvbm5lY3Rpb24gcmVmdXNlZDogY29ubmVjdCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLldFQkRSSVZFUl9FUlJPUiwgJ1RoZSB1bmRlcmx5aW5nIFdlYkRyaXZlciBzZWVtcyB0byBoYXZlIGNyYXNoZWQ6ICcgKyBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHN0YWxlIGVsZW1lbnQgcmVmZXJlbmNlXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm5hbWUgJiYgZXJyLm5hbWUuaW5jbHVkZXMoJ3N0YWxlIGVsZW1lbnQgcmVmZXJlbmNlJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlNUQUxFX0VMRU1FTlRfUkVGRVJFTkNFLCBlcnIubmFtZSArICcgJyArIGVyci5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLmNvZGUgJiYgZXJyLmNvZGUgPT09ICdNT0RVTEVfTk9UX0ZPVU5EJykge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuTU9EVUxFX05PVF9GT1VORCwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyAgd2hlbiBkb2luZyBhbiBvcGVyYXRpb24gb24gYW4gZWxlbWVudCAoZS5nLiBjbGljaykgYnV0IHRoZSB3aW5kb3cgd2FzIGFscmVhZHkgY2xvc2VkXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ25vIHN1Y2ggd2luZG93JykgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ3RhcmdldCB3aW5kb3cgYWxyZWFkeSBjbG9zZWQnKSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnd2ViIHZpZXcgbm90IGZvdW5kJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLldJTkRPV19OT1RfRk9VTkQsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZXhhbXBsZTogVGhlIGVsZW1lbnQgd2l0aCBzZWxlY3RvciAqKiogeW91IHRyeWluZyB0byBwYXNzIGludG8gdGhlIGV4ZWN1dGUgbWV0aG9kIHdhc24ndCBmb3VuZFxyXG4gICAgICAgIC8vIHdoZW4gZWxlbWVudCB3YXMgZGVsZXRlZCBmcm9tIERPTVxyXG4gICAgICAgIGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCd5b3UgdHJ5aW5nIHRvIHBhc3MgaW50byB0aGUgZXhlY3V0ZSBtZXRob2Qgd2FzblxcJ3QgZm91bmQnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuRUxFTUVOVF9OT1RfRk9VTkQsICBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHdoZW4gZG9pbmcgYW4gb3BlcmF0aW9uIG9uIGFuIGVsZW1lbnQgcmVmZXJlbmNlIChlLmcuIGNsaWNrKSBidXQgdGhlIHBhZ2Ugd2FzIGFscmVhZHkgY2hhbmdlZFxyXG4gICAgICAgIGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdlbGVtZW50IG5vdCBpbnRlcmFjdGFibGUnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuRUxFTUVOVF9OT1RfSU5URVJBQ1RBQkxFLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGludmFsaWQgc2VsZWN0b3I6IGphdmEubGFuZy5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb246IFVuYWJsZSB0byBjb21waWxlIHNlbGVjdG9yIC4uLlxyXG4gICAgICAgIGVsc2UgaWYgKFxyXG4gICAgICAgICAgICBlcnIubmFtZSAmJlxyXG4gICAgICAgICAgICBlcnIubmFtZSA9PT0gJ2ludmFsaWQgc2VsZWN0b3InXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5TQ1JJUFRfRVJST1IsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gUmVxdWVzdEVycm9yOiBUaW1lb3V0IGF3YWl0aW5nICdyZXF1ZXN0JyBmb3IgMzEwMDAwbXMsIG5hbWU6ICdUaW1lb3V0RXJyb3InXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ1RpbWVvdXQgYXdhaXRpbmcgXFwncmVxdWVzdFxcJyBmb3InKSkge1xyXG4gICAgICAgICAgICBjb25zdCBlcnJNZXNzYWdlID0gZXJyLm1lc3NhZ2UucmVwbGFjZShcclxuICAgICAgICAgICAgICAgICdUaW1lb3V0IGF3YWl0aW5nIFxcJ3JlcXVlc3RcXCcgZm9yJyxcclxuICAgICAgICAgICAgICAgICdDb3VsZG5cXCd0IGdldCBhIHJlc3BvbnNlIGZyb20gU2VsZW5pdW0vV2ViRHJpdmVyIHdpdGhpbidcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKG1vZHVsZSA9PT0gJ3dlYicgPyBFUlJPUl9DT0RFUy5TRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQgOiBFUlJPUl9DT0RFUy5BUFBJVU1fU0VTU0lPTl9USU1FT1VULCBlcnJNZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZXJyICYmIGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdzb2NrZXQgaGFuZyB1cCcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihtb2R1bGUgPT09ICd3ZWInID8gRVJST1JfQ09ERVMuU0VMRU5JVU1fU0VTU0lPTl9USU1FT1VUIDogRVJST1JfQ09ERVMuQVBQSVVNX1NFU1NJT05fVElNRU9VVCwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyICYmIGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdUaW1lZCBvdXQgcmVjZWl2aW5nIG1lc3NhZ2UgZnJvbSByZW5kZXJlJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKG1vZHVsZSA9PT0gJ3dlYicgPyBFUlJPUl9DT0RFUy5TRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQgOiBFUlJPUl9DT0RFUy5BUFBJVU1fU0VTU0lPTl9USU1FT1VULCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0cnkgdG8gcmVzb2x2ZSBDaGFpIGVycm9yIGNvZGVcclxuICAgICAgICB2YXIgb3hFcnJvckNvZGUgPSBDSEFJX0VSUk9SX0NPREVTW2VyclR5cGVdO1xyXG4gICAgICAgIGlmIChveEVycm9yQ29kZSkge1xyXG4gICAgICAgICAgICAvLyB0aHJvdyBub24tZmF0YWwgZXJyb3IgaWYgaXQncyBhIFwidmVyaWZ5XCIgbW9kdWxlIG9yIG1ldGhvZCBcclxuICAgICAgICAgICAgaWYgKG94RXJyb3JDb2RlID09PSBFUlJPUl9DT0RFUy5BU1NFUlQgJiZcclxuXHRcdFx0XHQobW9kdWxlID09PSAndmVyaWZ5JyB8fCBjbWQuaW5kZXhPZigndmVyaWZ5JykgPT09IDApKSB7IC8vIHZlcmlmeS4qLCAqLnZlcmlmeSpcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5WRVJJRlksIGVyci5tZXNzYWdlLCBudWxsLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKG94RXJyb3JDb2RlLCBlcnIubWVzc2FnZSwgbnVsbCwgdHJ1ZSwgZXJyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRyeSB0byByZXNvbHZlIEphdmFTY3JpcHQgZXJyb3IgY29kZVxyXG4gICAgICAgIG94RXJyb3JDb2RlID0gU0NSSVBUX0VSUk9SX0NPREVTW2VyclR5cGVdO1xyXG4gICAgICAgIGlmIChveEVycm9yQ29kZSkge1xyXG4gICAgICAgICAgICAvLyB0aHJvdyBub24tZmF0YWwgZXJyb3IgaWYgaXQncyBhIFwidmVyaWZ5XCIgbW9kdWxlIG9yIG1ldGhvZCBcclxuICAgICAgICAgICAgaWYgKG94RXJyb3JDb2RlID09PSBFUlJPUl9DT0RFUy5BU1NFUlQgJiZcclxuXHRcdFx0XHQobW9kdWxlID09PSAndmVyaWZ5JyB8fCBjbWQuaW5kZXhPZigndmVyaWZ5JykgPT09IDApKSB7IC8vIHZlcmlmeS4qLCAqLnZlcmlmeSpcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5WRVJJRlksIGVyci5tZXNzYWdlLCBudWxsLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKG94RXJyb3JDb2RlLCBlcnIubWVzc2FnZSB8fCBudWxsLCBudWxsLCB0cnVlLCBlcnIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coJz09PSBFcnJvciBEZXRhaWxzID09PScpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdUeXBlOiAnICsgZXJyLnR5cGUgKyAnIE5hbWU6ICcgKyBlcnIubmFtZSArICcgQ29kZTogJyArIGVyci5jb2RlICsgJyBNc2c6ICcgKyBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgY29uc29sZS5sb2codXRpbC5pbnNwZWN0KGVycikpO1xyXG5cclxuICAgICAgICBjb25zdCBlcnJNZXNzYWdlID0gZXJyLm1lc3NhZ2UgPyBgJHtlcnJUeXBlfTogJHtlcnIubWVzc2FnZX1gIDogYCR7ZXJyVHlwZX1gO1xyXG4gICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5VTktOT1dOX0VSUk9SLCBlcnJNZXNzYWdlLCB1dGlsLmluc3BlY3QoZXJyKSwgdHJ1ZSwgZXJyKTtcclxuICAgIH0sXHJcbiAgICBnZXRTZWxlbml1bUluaXRFcnJvcjogZnVuY3Rpb24oZXJyKSB7XHJcbiAgICAgICAgaWYgKGVyci5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIHZhciBpZVpvb21FcnJvck1zZyA9IGVyci5tZXNzYWdlLm1hdGNoKC8oVW5leHBlY3RlZCBlcnJvciBsYXVuY2hpbmcgSW50ZXJuZXQgRXhwbG9yZXJcXC4gQnJvd3NlciB6b29tIGxldmVsIHdhcyBzZXQgdG8gXFxkKyVcXC4gSXQgc2hvdWxkIGJlIHNldCB0byBcXGQrJSkvZ20pO1xyXG4gICAgICAgICAgICBpZiAoaWVab29tRXJyb3JNc2cpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5CUk9XU0VSX0NPTkZJR1VSQVRJT05fRVJST1IsIGllWm9vbUVycm9yTXNnLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ1VuYWJsZSB0byBjcmVhdGUgbmV3IHNlcnZpY2U6IENocm9tZURyaXZlclNlcnZpY2UnKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkNIUk9NRURSSVZFUl9FUlJPUiwgZXJyLm1lc3NhZ2UsIG51bGwsIHRydWUsIGVycik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChlcnIubWVzc2FnZS5pbmNsdWRlcygnVW5hYmxlIHRvIGNyZWF0ZSBuZXcgc2VydmljZTonKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlNFTEVOSVVNX1VOUkVBQ0hBQkxFX0VSUk9SLCBlcnIubWVzc2FnZSwgbnVsbCwgdHJ1ZSwgZXJyKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGNocm9tZURyaXZlck1zZyA9IGVyci5tZXNzYWdlLm1hdGNoKC8oVGhpcyB2ZXJzaW9uIG9mIENocm9tZURyaXZlciBvbmx5IHN1cHBvcnRzIENocm9tZSB2ZXJzaW9uIFswLTldKikvZ20pO1xyXG4gICAgICAgICAgICBpZiAoY2hyb21lRHJpdmVyTXNnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQ0hST01FRFJJVkVSX0VSUk9SLCBjaHJvbWVEcml2ZXJNc2cudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnY2Fubm90IGZpbmQgQ2hyb21lIGJpbmFyeScpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5DSFJPTUVEUklWRVJfRVJST1IsICdDYW5ub3QgZmluZCBDaHJvbWUgYmluYXJ5Jyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlcnIuY29kZSA9PT0gJ0VDT05OUkVGVVNFRCcgfHwgZXJyLmNvZGUgPT09ICdFQ09OTlJFU0VUJyB8fCBlcnIuY29kZSA9PT0gJ0VOT1RGT1VORCcgfHwgZXJyLm1lc3NhZ2UgPT09ICdGYWlsZWQgdG8gY3JlYXRlIHNlc3Npb24uXFxuc29ja2V0IGhhbmcgdXAnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5TRUxFTklVTV9VTlJFQUNIQUJMRV9FUlJPUiwgXCJDb3VsZG4ndCBjb25uZWN0IHRvIFNlbGVuaXVtIHNlcnZlclwiKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGVyci5tZXNzYWdlID09PSAnQWxsIG1pbnV0ZXMgZm9yIHRoaXMgb3JnYW5pemF0aW9uIGhhcyBiZWVuIGV4YXVzdGVkJyB8fFxyXG4gICAgICAgICAgICBlcnIubWVzc2FnZSA9PT0gJzQwMSBVbmF1dGhvcml6ZWQnIHx8XHJcbiAgICAgICAgICAgIGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLnN0YXJ0c1dpdGgoJ0ZhaWxlZCB0byBjcmVhdGUgc2Vzc2lvbi4nKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuU0VMRU5JVU1fQ09OTkVDVElPTl9FUlJPUiwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ1VuYWJsZSB0byBjcmVhdGUgbmV3IHNlcnZpY2U6JykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlNFTEVOSVVNX0NPTk5FQ1RJT05fRVJST1IsIGVyci5tZXNzYWdlICsgJ1xcblxcblRoaXMgaXMgcHJvYmFibHkgZHVlIHRvIG1pc3NpbmcgQ2hyb21lRHJpdmVyL0lFRHJpdmVyU2VydmVyL0dlY2tvRHJpdmVyIGJpbmFyeS5cXG4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKCc9PT0gRXJyb3IgRGV0YWlscyA9PT0nKTtcclxuICAgICAgICBjb25zb2xlLmxvZygnVHlwZTogJyArIGVyci50eXBlICsgJyBOYW1lOiAnICsgZXJyLm5hbWUgKyAnIENvZGU6ICcgKyBlcnIuY29kZSArICcgTXNnOiAnICsgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHV0aWwuaW5zcGVjdChlcnIpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlVOS05PV05fRVJST1IsIGVyci50eXBlICsgJzogJyArIGVyci5tZXNzYWdlLCB1dGlsLmluc3BlY3QoZXJyKSk7XHJcbiAgICB9LFxyXG4gICAgZ2V0QXBwaXVtSW5pdEVycm9yOiBmdW5jdGlvbihlcnIpIHtcclxuICAgICAgICBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ2Nhbm5vdCBmaW5kIENocm9tZSBiaW5hcnknKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQ0hST01FRFJJVkVSX0VSUk9SLCAnQ2Fubm90IGZpbmQgQ2hyb21lIGJpbmFyeScpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyLmNvZGUgPT09ICdFQ09OTlJFRlVTRUQnIHx8IGVyci5jb2RlID09PSAnRUNPTk5SRVNFVCcgfHwgZXJyLmNvZGUgPT09ICdFTk9URk9VTkQnIHx8IGVyci5tZXNzYWdlID09PSAnRmFpbGVkIHRvIGNyZWF0ZSBzZXNzaW9uLlxcbnNvY2tldCBoYW5nIHVwJykge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQVBQSVVNX1VOUkVBQ0hBQkxFX0VSUk9SLCBcIkNvdWxkbid0IGNvbm5lY3QgdG8gQXBwaXVtIHNlcnZlclwiKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdDb3VsZCBub3QgZmluZCBhIGNvbm5lY3RlZCBBbmRyb2lkIGRldmljZScpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5ERVZJQ0VfTk9UX0ZPVU5ELCAnQ291bGQgbm90IGZpbmQgYSBjb25uZWN0ZWQgQW5kcm9pZCBkZXZpY2UnKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdVbmFibGUgdG8gYXV0b21hdGUgQ2hyb21lIHZlcnNpb24nKSkgeyAgICAgICAgICAvLyBhcHBpdW0gPD0gMS4xNFxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQ0hST01FRFJJVkVSX0VSUk9SLCBleHRyYWN0T3JpZ2luYWxFcnJvcihlcnIubWVzc2FnZSkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ05vIENocm9tZWRyaXZlciBmb3VuZCB0aGF0IGNhbiBhdXRvbWF0ZScpKSB7ICAgIC8vIGFwcGl1bSA+PSAxLjE1XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5DSFJPTUVEUklWRVJfRVJST1IsIGV4dHJhY3RPcmlnaW5hbEVycm9yKGVyci5tZXNzYWdlKSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnVW5hYmxlIHRvIGZpbmQgYW4gYWN0aXZlIGRldmljZSBvciBlbXVsYXRvciB3aXRoJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkRFVklDRV9OT1RfRk9VTkQsIGV4dHJhY3RPcmlnaW5hbEVycm9yKGVyci5tZXNzYWdlKSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnaXMgbm90IGluc3RhbGxlZCBvbiBkZXZpY2UnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQVBQTElDQVRJT05fTk9UX0ZPVU5EX0VSUk9SLCBleHRyYWN0T3JpZ2luYWxFcnJvcihlcnIubWVzc2FnZSkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyLm1lc3NhZ2UgPT09ICdBbGwgbWludXRlcyBmb3IgdGhpcyBvcmdhbml6YXRpb24gaGFzIGJlZW4gZXhhdXN0ZWQnIHx8XHJcbiAgICAgICAgICAgIGVyci5tZXNzYWdlID09PSAnNDAxIFVuYXV0aG9yaXplZCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkFQUElVTV9DT05ORUNUSU9OX0VSUk9SLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiAoXHJcbiAgICAgICAgICAgICAgICBlcnIubWVzc2FnZS5pbmNsdWRlcygnQSBuZXcgc2Vzc2lvbiBjb3VsZCBub3QgYmUgY3JlYXRlZC4nKSB8fFxyXG4gICAgICAgICAgICAgICAgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ0ZhaWxlZCB0byBjcmVhdGUgc2Vzc2lvbi4nKSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkFQUElVTV9TRVNTSU9OX0VSUk9SLCBleHRyYWN0T3JpZ2luYWxFcnJvcihlcnIubWVzc2FnZSksIG51bGwsIHRydWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coJz09PSBFcnJvciBEZXRhaWxzID09PScpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdUeXBlOiAnICsgZXJyLnR5cGUgKyAnIE5hbWU6ICcgKyBlcnIubmFtZSArICcgQ29kZTogJyArIGVyci5jb2RlICsgJyBNc2c6ICcgKyBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgY29uc29sZS5sb2codXRpbC5pbnNwZWN0KGVycikpO1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuVU5LTk9XTl9FUlJPUiwgZXh0cmFjdE9yaWdpbmFsRXJyb3IoZXJyLm1lc3NhZ2UpLCB1dGlsLmluc3BlY3QoZXJyKSk7XHJcbiAgICB9LFxyXG4gICAgZ2V0QXNzZXJ0RXJyb3I6IGZ1bmN0aW9uKGV4cGVjdGVkLCBhY3R1YWwsIGlzRmF0YWwgPSB0cnVlKSB7XHJcbiAgICAgICAgYWN0dWFsID0gYWN0dWFsLnRvU3RyaW5nKCkucmVwbGFjZSgvXFxuL2csICdcXFxcbicpO1xyXG4gICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5BU1NFUlRfRVJST1IsIGBFeHBlY3RlZDogXCIke2V4cGVjdGVkfVwiLiBHb3Q6IFwiJHthY3R1YWx9XCJgLCB1bmRlZmluZWQsIGlzRmF0YWwpO1xyXG4gICAgfSxcclxuICAgIGdldFZlcmlmeUVycm9yOiBmdW5jdGlvbihleHBlY3RlZCwgYWN0dWFsKSB7XHJcbiAgICAgICAgYWN0dWFsID0gYWN0dWFsLnRvU3RyaW5nKCkucmVwbGFjZSgvXFxuL2csICdcXFxcbicpO1xyXG4gICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5WRVJJRllfRVJST1IsIGBFeHBlY3RlZDogXCIke2V4cGVjdGVkfVwiLiBHb3Q6IFwiJHthY3R1YWx9XCJgLCB1bmRlZmluZWQsIGZhbHNlIC8qIG5vdCBmYXRhbCAqLyk7XHJcbiAgICB9LFxyXG4gICAgZXJyb3JDb2RlOiBFUlJPUl9DT0RFU1xyXG59O1xyXG5cclxuY29uc3QgT1JJR0lOQUxfRVJST1JfTUVTU0FHRSA9ICdPcmlnaW5hbCBlcnJvcjogJztcclxuY29uc3QgVU5LTk9XTl9FUlJPUl9NRVNTQUdFID0gJ3Vua25vd24gZXJyb3I6ICc7XHJcblxyXG5mdW5jdGlvbiBleHRyYWN0T3JpZ2luYWxFcnJvcihtc2cpIHtcclxuICAgIGlmICghbXNnKSB7XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBlcnJvckluZGV4MSA9IG1zZy5pbmRleE9mKE9SSUdJTkFMX0VSUk9SX01FU1NBR0UpO1xyXG4gICAgaWYgKGVycm9ySW5kZXgxID09PSAtMSkge1xyXG4gICAgICAgIHJldHVybiBtc2c7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdGhlcmUgY291bGQgYW5vdGhlIG5lc3RlZCBcIm9yaWdpbmFsIGVycm9yXCJcclxuICAgIHZhciBlcnJvckluZGV4MiA9IG1zZy5pbmRleE9mKE9SSUdJTkFMX0VSUk9SX01FU1NBR0UsIGVycm9ySW5kZXgxICsgT1JJR0lOQUxfRVJST1JfTUVTU0FHRS5sZW5ndGgpO1xyXG5cclxuICAgIG1zZyA9IG1zZy5zdWJzdHJpbmcoKGVycm9ySW5kZXgyID4gLTEgPyBlcnJvckluZGV4MiA6IGVycm9ySW5kZXgxKSAgKyBPUklHSU5BTF9FUlJPUl9NRVNTQUdFLmxlbmd0aCk7XHJcblxyXG4gICAgLy8gc3RyaXAgJ3Vua25vd24gZXJyb3I6J1xyXG4gICAgdmFyIHVua25vd25FcnJvckluZGV4ID0gbXNnLmluZGV4T2YoVU5LTk9XTl9FUlJPUl9NRVNTQUdFKTtcclxuICAgIGlmICh1bmtub3duRXJyb3JJbmRleCA+IC0xKSB7XHJcbiAgICAgICAgcmV0dXJuIG1zZy5zdWJzdHJpbmcodW5rbm93bkVycm9ySW5kZXggKyBVTktOT1dOX0VSUk9SX01FU1NBR0UubGVuZ3RoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbXNnO1xyXG59XHJcbiJdfQ==
|