oxygen-cli 1.40.2 → 1.42.0
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 +13 -0
- package/build/core/OxygenCore.js +41 -274
- package/build/core/OxygenEvents.js +2 -12
- package/build/core/OxygenModule.js +1 -16
- package/build/core/OxygenService.js +1 -12
- package/build/core/OxygenSubModule.js +1 -10
- package/build/core/WebDriverModule.js +2 -32
- package/build/core/utils.js +2 -21
- package/build/errors/HookError.js +2 -8
- package/build/errors/ModuleError.js +2 -8
- package/build/errors/ModuleUnavailableError.js +1 -3
- package/build/errors/OxygenError.js +3 -36
- package/build/errors/ScriptNotFound.js +2 -8
- package/build/errors/helper.js +51 -82
- package/build/index.js +8 -22
- package/build/lib/cli-util.js +39 -105
- package/build/lib/cli.js +3 -30
- package/build/lib/debugger.js +2 -145
- package/build/lib/img-merge.js +2 -16
- package/build/lib/launcher.js +3 -31
- package/build/lib/moduleRequire.js +1 -4
- package/build/lib/parallel-launcher.js +44 -84
- package/build/lib/param-manager.js +2 -29
- package/build/lib/param-reader-csv.js +1 -15
- package/build/lib/param-reader-excel.js +1 -14
- package/build/lib/param-reader-json.js +1 -10
- package/build/lib/text-to-image.js +5 -26
- package/build/lib/util.js +4 -75
- package/build/model/case-result.js +1 -2
- package/build/model/failure.js +1 -2
- package/build/model/status.js +1 -2
- package/build/model/step-result.js +1 -2
- package/build/model/suite-result.js +1 -2
- package/build/model/test-result.js +1 -2
- package/build/model/testcase.js +1 -2
- package/build/model/testsuite.js +1 -2
- package/build/ox_modules/index.js +21 -34
- package/build/ox_modules/module-assert.js +9 -28
- package/build/ox_modules/module-date.js +3 -8
- package/build/ox_modules/module-db.js +8 -29
- package/build/ox_modules/module-email.js +14 -45
- package/build/ox_modules/module-eyes.js +6 -47
- package/build/ox_modules/module-http/ntlm-util.js +3 -7
- package/build/ox_modules/module-http/ntlm.js +9 -78
- package/build/ox_modules/module-http.js +69 -172
- package/build/ox_modules/module-log.js +10 -23
- package/build/ox_modules/module-mailinator.js +11 -33
- package/build/ox_modules/module-mob/commands/alertAccept.js +1 -3
- package/build/ox_modules/module-mob/commands/alertDismiss.js +1 -3
- package/build/ox_modules/module-mob/commands/assertAlert.js +1 -7
- package/build/ox_modules/module-mob/commands/assertText.js +1 -4
- package/build/ox_modules/module-mob/commands/assertTitle.js +1 -5
- package/build/ox_modules/module-mob/commands/assertValue.js +9 -17
- package/build/ox_modules/module-mob/commands/back.js +1 -3
- package/build/ox_modules/module-mob/commands/clear.js +1 -5
- package/build/ox_modules/module-mob/commands/click.js +3 -5
- package/build/ox_modules/module-mob/commands/clickHidden.js +3 -10
- package/build/ox_modules/module-mob/commands/clickLong.js +1 -3
- package/build/ox_modules/module-mob/commands/clickMultipleTimes.js +1 -5
- package/build/ox_modules/module-mob/commands/closeApp.js +1 -3
- package/build/ox_modules/module-mob/commands/debug.js +2 -3
- package/build/ox_modules/module-mob/commands/dragAndDrop.js +1 -3
- package/build/ox_modules/module-mob/commands/enableNetwork.js +4 -13
- package/build/ox_modules/module-mob/commands/execute.js +1 -3
- package/build/ox_modules/module-mob/commands/findElement.js +1 -4
- package/build/ox_modules/module-mob/commands/findElements.js +1 -5
- package/build/ox_modules/module-mob/commands/getAlertText.js +1 -3
- package/build/ox_modules/module-mob/commands/getAppiumLogs.js +1 -3
- package/build/ox_modules/module-mob/commands/getBrowserLogs.js +1 -11
- package/build/ox_modules/module-mob/commands/getCurrentActivity.js +1 -3
- package/build/ox_modules/module-mob/commands/getCurrentPackage.js +1 -3
- package/build/ox_modules/module-mob/commands/getDeviceLogs.js +1 -10
- package/build/ox_modules/module-mob/commands/getDeviceTime.js +1 -3
- package/build/ox_modules/module-mob/commands/getLocation.js +1 -3
- package/build/ox_modules/module-mob/commands/getSource.js +1 -3
- package/build/ox_modules/module-mob/commands/getText.js +1 -5
- package/build/ox_modules/module-mob/commands/getTitle.js +1 -3
- package/build/ox_modules/module-mob/commands/getUrl.js +1 -3
- package/build/ox_modules/module-mob/commands/getValue.js +5 -10
- package/build/ox_modules/module-mob/commands/getWindowHandles.js +1 -3
- package/build/ox_modules/module-mob/commands/hideKeyboard.js +1 -3
- package/build/ox_modules/module-mob/commands/index.js +1 -148
- package/build/ox_modules/module-mob/commands/installApp.js +1 -3
- package/build/ox_modules/module-mob/commands/isAppInstalled.js +1 -3
- package/build/ox_modules/module-mob/commands/isCheckable.js +1 -3
- package/build/ox_modules/module-mob/commands/isChecked.js +1 -3
- package/build/ox_modules/module-mob/commands/isClickable.js +1 -3
- package/build/ox_modules/module-mob/commands/isExist.js +1 -4
- package/build/ox_modules/module-mob/commands/isSelected.js +1 -3
- package/build/ox_modules/module-mob/commands/isVisible.js +1 -4
- package/build/ox_modules/module-mob/commands/isWebViewContext.js +1 -3
- package/build/ox_modules/module-mob/commands/launchApp.js +1 -3
- package/build/ox_modules/module-mob/commands/longPressKeyCode.js +1 -3
- package/build/ox_modules/module-mob/commands/open.js +1 -4
- package/build/ox_modules/module-mob/commands/pause.js +1 -3
- package/build/ox_modules/module-mob/commands/removeApp.js +1 -3
- package/build/ox_modules/module-mob/commands/resetApp.js +1 -3
- package/build/ox_modules/module-mob/commands/scrollIntoElement.js +1 -7
- package/build/ox_modules/module-mob/commands/scrollIntoView.js +1 -3
- package/build/ox_modules/module-mob/commands/select.js +1 -5
- package/build/ox_modules/module-mob/commands/selectFrame.js +1 -5
- package/build/ox_modules/module-mob/commands/selectWindow.js +5 -27
- package/build/ox_modules/module-mob/commands/sendKeys.js +6 -10
- package/build/ox_modules/module-mob/commands/setContext.js +1 -3
- package/build/ox_modules/module-mob/commands/setNativeContext.js +1 -3
- package/build/ox_modules/module-mob/commands/setTimeout.js +1 -3
- package/build/ox_modules/module-mob/commands/setWebViewContext.js +3 -7
- package/build/ox_modules/module-mob/commands/shake.js +1 -3
- package/build/ox_modules/module-mob/commands/smsClickLink.js +1 -3
- package/build/ox_modules/module-mob/commands/smsGetText.js +3 -7
- package/build/ox_modules/module-mob/commands/swipe.js +1 -3
- package/build/ox_modules/module-mob/commands/swipeElement.js +1 -3
- package/build/ox_modules/module-mob/commands/swipeScreen.js +1 -3
- package/build/ox_modules/module-mob/commands/takeScreenshot.js +1 -3
- package/build/ox_modules/module-mob/commands/tap.js +1 -3
- package/build/ox_modules/module-mob/commands/type.js +3 -8
- package/build/ox_modules/module-mob/commands/unlockPattern.js +9 -11
- package/build/ox_modules/module-mob/commands/waitForExist.js +1 -3
- package/build/ox_modules/module-mob/commands/waitForInteractable.js +1 -4
- package/build/ox_modules/module-mob/commands/waitForVisible.js +1 -3
- package/build/ox_modules/module-mob.js +74 -216
- package/build/ox_modules/module-mongo.js +265 -0
- package/build/ox_modules/module-pdf.js +24 -65
- package/build/ox_modules/module-proxy.js +9 -69
- package/build/ox_modules/module-serial.js +8 -33
- package/build/ox_modules/module-shell.js +10 -30
- package/build/ox_modules/module-soap.js +17 -52
- package/build/ox_modules/module-twilio.js +11 -54
- package/build/ox_modules/module-utils.js +22 -58
- package/build/ox_modules/module-web/commands/alertAccept.js +1 -3
- package/build/ox_modules/module-web/commands/alertDismiss.js +1 -3
- package/build/ox_modules/module-web/commands/assertAlert.js +1 -7
- package/build/ox_modules/module-web/commands/assertExist.js +1 -3
- package/build/ox_modules/module-web/commands/assertSelectedLabel.js +1 -5
- package/build/ox_modules/module-web/commands/assertSelectedValue.js +1 -4
- package/build/ox_modules/module-web/commands/assertText.js +1 -4
- package/build/ox_modules/module-web/commands/assertTextNotPresent.js +1 -7
- package/build/ox_modules/module-web/commands/assertTextPresent.js +1 -7
- package/build/ox_modules/module-web/commands/assertTitle.js +1 -4
- package/build/ox_modules/module-web/commands/assertValue.js +1 -4
- package/build/ox_modules/module-web/commands/back.js +1 -3
- package/build/ox_modules/module-web/commands/clear.js +1 -6
- package/build/ox_modules/module-web/commands/click.js +4 -15
- package/build/ox_modules/module-web/commands/clickHidden.js +2 -8
- package/build/ox_modules/module-web/commands/closeWindow.js +1 -3
- package/build/ox_modules/module-web/commands/debug.js +2 -3
- package/build/ox_modules/module-web/commands/deleteCookies.js +1 -3
- package/build/ox_modules/module-web/commands/deselect.js +1 -3
- package/build/ox_modules/module-web/commands/doubleClick.js +3 -10
- package/build/ox_modules/module-web/commands/dragAndDrop.js +1 -3
- package/build/ox_modules/module-web/commands/execute.js +1 -3
- package/build/ox_modules/module-web/commands/fileBrowse.js +4 -11
- package/build/ox_modules/module-web/commands/findElement.js +1 -4
- package/build/ox_modules/module-web/commands/findElements.js +1 -5
- package/build/ox_modules/module-web/commands/fullscreenWindow.js +1 -3
- package/build/ox_modules/module-web/commands/getAlertText.js +1 -3
- package/build/ox_modules/module-web/commands/getAttribute.js +1 -5
- package/build/ox_modules/module-web/commands/getBrowserLogs.js +1 -4
- package/build/ox_modules/module-web/commands/getCookies.js +1 -3
- package/build/ox_modules/module-web/commands/getCssValue.js +1 -5
- package/build/ox_modules/module-web/commands/getElementCount.js +1 -3
- package/build/ox_modules/module-web/commands/getHTML.js +1 -3
- package/build/ox_modules/module-web/commands/getSource.js +1 -3
- package/build/ox_modules/module-web/commands/getText.js +1 -5
- package/build/ox_modules/module-web/commands/getTitle.js +1 -3
- package/build/ox_modules/module-web/commands/getUrl.js +1 -3
- package/build/ox_modules/module-web/commands/getValue.js +1 -6
- package/build/ox_modules/module-web/commands/getWindowHandles.js +1 -3
- package/build/ox_modules/module-web/commands/getWindowSize.js +1 -3
- package/build/ox_modules/module-web/commands/getXMLPageSource.js +1 -6
- package/build/ox_modules/module-web/commands/index.js +1 -184
- package/build/ox_modules/module-web/commands/isAlertPresent.js +1 -3
- package/build/ox_modules/module-web/commands/isChecked.js +1 -3
- package/build/ox_modules/module-web/commands/isExist.js +1 -4
- package/build/ox_modules/module-web/commands/isInteractable.js +1 -3
- package/build/ox_modules/module-web/commands/isSelected.js +1 -3
- package/build/ox_modules/module-web/commands/isVisible.js +1 -4
- package/build/ox_modules/module-web/commands/makeVisible.js +2 -11
- package/build/ox_modules/module-web/commands/maximizeWindow.js +1 -3
- package/build/ox_modules/module-web/commands/minimizeWindow.js +1 -3
- package/build/ox_modules/module-web/commands/mock.js +1 -3
- package/build/ox_modules/module-web/commands/mockClearAll.js +1 -3
- package/build/ox_modules/module-web/commands/mockRestoreAll.js +1 -3
- package/build/ox_modules/module-web/commands/newWindow.js +1 -3
- package/build/ox_modules/module-web/commands/open.js +1 -5
- package/build/ox_modules/module-web/commands/pause.js +1 -3
- package/build/ox_modules/module-web/commands/point.js +1 -3
- package/build/ox_modules/module-web/commands/pointJS.js +2 -9
- package/build/ox_modules/module-web/commands/refresh.js +1 -3
- package/build/ox_modules/module-web/commands/rightClick.js +3 -9
- package/build/ox_modules/module-web/commands/rightClickActions.js +1 -3
- package/build/ox_modules/module-web/commands/scrollToElement.js +1 -3
- package/build/ox_modules/module-web/commands/select.js +1 -6
- package/build/ox_modules/module-web/commands/selectFrame.js +1 -4
- package/build/ox_modules/module-web/commands/selectWindow.js +5 -27
- package/build/ox_modules/module-web/commands/sendKeys.js +3 -7
- package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +2 -3
- package/build/ox_modules/module-web/commands/setTimeout.js +1 -3
- package/build/ox_modules/module-web/commands/setWindowSize.js +1 -3
- package/build/ox_modules/module-web/commands/takeScreenshot.js +3 -6
- package/build/ox_modules/module-web/commands/type.js +1 -6
- package/build/ox_modules/module-web/commands/verifyAlert.js +1 -7
- package/build/ox_modules/module-web/commands/verifyExist.js +2 -7
- package/build/ox_modules/module-web/commands/verifySelectedLabel.js +1 -5
- package/build/ox_modules/module-web/commands/verifySelectedValue.js +1 -4
- package/build/ox_modules/module-web/commands/verifyText.js +1 -4
- package/build/ox_modules/module-web/commands/verifyTextNotPresent.js +1 -7
- package/build/ox_modules/module-web/commands/verifyTextPresent.js +1 -7
- package/build/ox_modules/module-web/commands/verifyTitle.js +1 -4
- package/build/ox_modules/module-web/commands/verifyValue.js +1 -4
- package/build/ox_modules/module-web/commands/waitForAngular.js +11 -14
- package/build/ox_modules/module-web/commands/waitForExist.js +1 -3
- package/build/ox_modules/module-web/commands/waitForInteractable.js +1 -3
- package/build/ox_modules/module-web/commands/waitForNotExist.js +1 -9
- package/build/ox_modules/module-web/commands/waitForNotText.js +1 -4
- package/build/ox_modules/module-web/commands/waitForNotValue.js +1 -4
- package/build/ox_modules/module-web/commands/waitForText.js +1 -4
- package/build/ox_modules/module-web/commands/waitForValue.js +1 -4
- package/build/ox_modules/module-web/commands/waitForVisible.js +1 -3
- package/build/ox_modules/module-web/commands/waitForWindow.js +4 -22
- package/build/ox_modules/module-web/webdriver/ChromeWDM.js +287 -0
- package/build/ox_modules/module-web/webdriver/auto-start.js +25 -0
- package/build/ox_modules/module-web.js +112 -232
- package/build/ox_modules/module-win/commands/assertText.js +1 -4
- package/build/ox_modules/module-win/commands/assertTitle.js +1 -5
- package/build/ox_modules/module-win/commands/assertValue.js +9 -17
- package/build/ox_modules/module-win/commands/back.js +1 -3
- package/build/ox_modules/module-win/commands/clear.js +1 -5
- package/build/ox_modules/module-win/commands/click.js +1 -3
- package/build/ox_modules/module-win/commands/clickLong.js +1 -3
- package/build/ox_modules/module-win/commands/clickMultipleTimes.js +1 -5
- package/build/ox_modules/module-win/commands/findElement.js +1 -4
- package/build/ox_modules/module-win/commands/findElements.js +1 -5
- package/build/ox_modules/module-win/commands/getAppiumLogs.js +1 -3
- package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +1 -3
- package/build/ox_modules/module-win/commands/getLocation.js +1 -3
- package/build/ox_modules/module-win/commands/getSource.js +1 -3
- package/build/ox_modules/module-win/commands/getText.js +1 -5
- package/build/ox_modules/module-win/commands/getValue.js +5 -10
- package/build/ox_modules/module-win/commands/getWindowHandles.js +1 -3
- package/build/ox_modules/module-win/commands/index.js +1 -74
- package/build/ox_modules/module-win/commands/isCheckable.js +1 -3
- package/build/ox_modules/module-win/commands/isChecked.js +1 -3
- package/build/ox_modules/module-win/commands/isClickable.js +1 -3
- package/build/ox_modules/module-win/commands/isExist.js +1 -4
- package/build/ox_modules/module-win/commands/isSelected.js +1 -3
- package/build/ox_modules/module-win/commands/isVisible.js +1 -4
- package/build/ox_modules/module-win/commands/open.js +1 -3
- package/build/ox_modules/module-win/commands/pause.js +1 -3
- package/build/ox_modules/module-win/commands/rightClick.js +1 -3
- package/build/ox_modules/module-win/commands/selectWindow.js +1 -16
- package/build/ox_modules/module-win/commands/sendKeys.js +1 -5
- package/build/ox_modules/module-win/commands/setTimeout.js +1 -3
- package/build/ox_modules/module-win/commands/takeScreenshot.js +1 -3
- package/build/ox_modules/module-win/commands/tap.js +1 -3
- package/build/ox_modules/module-win/commands/type.js +1 -5
- package/build/ox_modules/module-win/commands/waitForExist.js +1 -3
- package/build/ox_modules/module-win/commands/waitForInteractable.js +1 -5
- package/build/ox_modules/module-win/commands/waitForVisible.js +1 -3
- package/build/ox_modules/module-win.js +54 -95
- package/build/ox_modules/utils.js +91 -79
- package/build/ox_reporters/reporter-excel.js +2 -59
- package/build/ox_reporters/reporter-html.js +2 -29
- package/build/ox_reporters/reporter-json.js +2 -15
- package/build/ox_reporters/reporter-junit.js +2 -25
- package/build/ox_reporters/reporter-pdf.js +2 -20
- package/build/ox_reporters/reporter-rp.js +2 -91
- package/build/ox_reporters/reporter-xml.js +2 -18
- package/build/ox_services/service-devtools/submodule-network.js +4 -86
- package/build/ox_services/service-devtools.js +2 -24
- package/build/reporter/FileReporterBase.js +6 -45
- package/build/reporter/ReportAggregator.js +14 -120
- package/build/reporter/ReporterBase.js +1 -6
- package/build/reporter/WebSocketReporter.js +1 -39
- package/build/runners/WorkerProcess.js +2 -107
- package/build/runners/cucumber/CucumberEventListener.js +4 -29
- package/build/runners/cucumber/CucumberReporter.js +2 -57
- package/build/runners/cucumber/CucumberWorker.js +3 -69
- package/build/runners/cucumber/index.js +2 -31
- package/build/runners/cucumber/worker.js +2 -19
- package/build/runners/index.js +4 -11
- package/build/runners/oxygen/OxygenWorker.js +3 -61
- package/build/runners/oxygen/index.js +18 -179
- package/build/runners/oxygen/worker.js +3 -27
- package/package.json +5 -1
package/build/lib/util.js
CHANGED
|
@@ -1,41 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
require("source-map-support/register");
|
|
4
|
-
|
|
5
4
|
var _OxygenError = _interopRequireDefault(require("../errors/OxygenError"));
|
|
6
|
-
|
|
7
5
|
var _helper = _interopRequireDefault(require("../errors/helper"));
|
|
8
|
-
|
|
9
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
-
|
|
6
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
7
|
const path = require('path');
|
|
12
|
-
|
|
13
8
|
const fs = require('fs');
|
|
14
|
-
|
|
15
9
|
const moment = require('moment');
|
|
16
|
-
|
|
17
10
|
const crypto = require('crypto');
|
|
18
|
-
|
|
19
11
|
const util = require('util');
|
|
20
|
-
|
|
21
12
|
const password = require('../../package.json').encryptionKey;
|
|
22
|
-
|
|
23
13
|
const key = crypto.scryptSync(password, 'GfG', 24);
|
|
24
14
|
const iv = Buffer.alloc(16, 0);
|
|
25
15
|
const algorithm = 'aes-192-cbc';
|
|
26
|
-
|
|
27
16
|
const download = require('download');
|
|
28
|
-
|
|
29
17
|
const request = require('request');
|
|
30
|
-
|
|
31
18
|
function DecryptResult(result) {
|
|
32
19
|
const decryptResult = result;
|
|
33
|
-
|
|
34
20
|
this.getDecryptResult = () => {
|
|
35
21
|
return decryptResult;
|
|
36
22
|
};
|
|
37
23
|
}
|
|
38
|
-
|
|
39
24
|
const DUMMY_HOOKS = {
|
|
40
25
|
beforeTest: () => {},
|
|
41
26
|
beforeSuite: () => {},
|
|
@@ -49,30 +34,23 @@ const DUMMY_HOOKS = {
|
|
|
49
34
|
const CB_ATTACHMENTS_DIR_NAME = '.cb-attachments';
|
|
50
35
|
const DOWNLOAD_RETRIES = 40;
|
|
51
36
|
const DOWNLOAD_RETRY_WAIT_TIME = 2500;
|
|
52
|
-
|
|
53
37
|
function getVideoAttachmentPath(fileName, options) {
|
|
54
38
|
const cwd = getCwd(options);
|
|
55
39
|
const attachmentsDirPath = path.join(cwd, CB_ATTACHMENTS_DIR_NAME);
|
|
56
|
-
|
|
57
40
|
if (!fs.existsSync(attachmentsDirPath)) {
|
|
58
41
|
fs.mkdirSync(attachmentsDirPath);
|
|
59
42
|
}
|
|
60
|
-
|
|
61
43
|
return path.join(attachmentsDirPath, fileName);
|
|
62
44
|
}
|
|
63
|
-
|
|
64
45
|
const getCwd = options => {
|
|
65
46
|
let cwd = process.cwd();
|
|
66
|
-
|
|
67
47
|
if (options && options.cwd) {
|
|
68
48
|
cwd = options.cwd;
|
|
69
49
|
} else if (options && options.rootPath) {
|
|
70
50
|
cwd = options.rootPath;
|
|
71
51
|
}
|
|
72
|
-
|
|
73
52
|
return cwd.trim();
|
|
74
53
|
};
|
|
75
|
-
|
|
76
54
|
var self = module.exports = {
|
|
77
55
|
generateUniqueId: function () {
|
|
78
56
|
return crypto.randomBytes(4).toString('hex');
|
|
@@ -88,11 +66,9 @@ var self = module.exports = {
|
|
|
88
66
|
suite.iterationCount = suiteDef.iterations || suiteDef.iterationCount || testConfig.iterations || iterationCount;
|
|
89
67
|
const suiteFilePath = suiteDef.path || path.join(testConfig.target.cwd, 'suites', `${suiteDef.name}.json`);
|
|
90
68
|
suite.paramManager = await self.getParameterManager(suiteFilePath, testConfig.parameters, testConfig.target.cwd);
|
|
91
|
-
|
|
92
69
|
if (suite.paramManager && suite.paramManager.getMode() == 'all') {
|
|
93
70
|
suite.iterationCount = suite.paramManager.rows;
|
|
94
71
|
}
|
|
95
|
-
|
|
96
72
|
suite.capabilities = suiteDef.capabilities || testConfig.capabilities || {};
|
|
97
73
|
suite.environment = testConfig.environment || null;
|
|
98
74
|
suite.options = testConfig.options || null;
|
|
@@ -119,44 +95,37 @@ var self = module.exports = {
|
|
|
119
95
|
suite.id = testcase.id;
|
|
120
96
|
suite.iterationCount = iterationCount;
|
|
121
97
|
suite.cases.push(testcase);
|
|
122
|
-
|
|
123
98
|
if (testcase.reopenSession) {
|
|
124
99
|
suite.reopenSession = testcase.reopenSession;
|
|
125
100
|
}
|
|
126
|
-
|
|
127
101
|
const cwd = path.dirname(filePath);
|
|
128
102
|
suite.paramManager = await self.getParameterManager(filePath, {
|
|
129
103
|
file: paramFile,
|
|
130
104
|
mode: paramMode
|
|
131
105
|
}, cwd);
|
|
132
|
-
|
|
133
106
|
if (suite.paramManager && paramMode == 'all') {
|
|
134
107
|
suite.iterationCount = suite.paramManager.rows;
|
|
135
108
|
}
|
|
136
|
-
|
|
137
109
|
return suite;
|
|
138
110
|
},
|
|
139
111
|
getParameterManager: async function (mainFilePath, paramOpts = null, cwd = null, autoSearch = true) {
|
|
140
112
|
let paramFilePath = paramOpts && paramOpts.file ? paramOpts.file : null;
|
|
141
113
|
let paramMode = paramOpts && paramOpts.mode ? paramOpts.mode : 'seq';
|
|
142
|
-
|
|
143
114
|
if (paramFilePath && cwd && !path.isAbsolute(paramFilePath)) {
|
|
144
115
|
paramFilePath = path.join(cwd, paramFilePath);
|
|
145
116
|
}
|
|
146
|
-
|
|
147
117
|
return await self.loadParameterManager(mainFilePath, paramFilePath, paramMode, autoSearch);
|
|
148
118
|
},
|
|
149
119
|
generateTestSuiteFromJsonFile: async function (filePath, paramFile, paramMode = null, options = {}) {
|
|
150
|
-
const testConfig = {
|
|
120
|
+
const testConfig = {
|
|
121
|
+
...(options || {})
|
|
151
122
|
};
|
|
152
|
-
|
|
153
123
|
if (paramFile) {
|
|
154
124
|
testConfig.parameters = {
|
|
155
125
|
file: paramFile,
|
|
156
126
|
mode: paramMode
|
|
157
127
|
};
|
|
158
128
|
}
|
|
159
|
-
|
|
160
129
|
return await self.generateTestSuiteFromJson(require(filePath), testConfig);
|
|
161
130
|
},
|
|
162
131
|
getFileNameWithoutExt: function (filePath) {
|
|
@@ -167,14 +136,12 @@ var self = module.exports = {
|
|
|
167
136
|
},
|
|
168
137
|
loadParameterManager: async function (mainFile, paramFile, paramMode, autoSearch = false) {
|
|
169
138
|
var paramManager = null;
|
|
170
|
-
|
|
171
139
|
if (!paramFile && autoSearch) {
|
|
172
140
|
var fileNameNoExt = self.getFileNameWithoutExt(mainFile);
|
|
173
141
|
var csvParamFile = path.join(path.dirname(mainFile), fileNameNoExt + '.csv');
|
|
174
142
|
var txtParamFile = path.join(path.dirname(mainFile), fileNameNoExt + '.txt');
|
|
175
143
|
var xlsParamFile = path.join(path.dirname(mainFile), fileNameNoExt + '.xls');
|
|
176
144
|
var xlsxParamFile = path.join(path.dirname(mainFile), fileNameNoExt + '.xlsx');
|
|
177
|
-
|
|
178
145
|
if (fs.existsSync(csvParamFile)) {
|
|
179
146
|
paramFile = csvParamFile;
|
|
180
147
|
} else if (fs.existsSync(txtParamFile)) {
|
|
@@ -185,13 +152,11 @@ var self = module.exports = {
|
|
|
185
152
|
paramFile = xlsxParamFile;
|
|
186
153
|
}
|
|
187
154
|
}
|
|
188
|
-
|
|
189
155
|
if (paramFile) {
|
|
190
156
|
paramManager = new require('./param-manager')(paramFile, paramMode || 'seq');
|
|
191
157
|
await paramManager.init();
|
|
192
158
|
return paramManager;
|
|
193
159
|
}
|
|
194
|
-
|
|
195
160
|
return null;
|
|
196
161
|
},
|
|
197
162
|
resolvePath: function (pathToResolve, baseFolder) {
|
|
@@ -202,9 +167,7 @@ var self = module.exports = {
|
|
|
202
167
|
if (typeof err === 'object') {
|
|
203
168
|
return destroyCircular(err, []);
|
|
204
169
|
}
|
|
205
|
-
|
|
206
170
|
return err;
|
|
207
|
-
|
|
208
171
|
function destroyCircular(from, seen) {
|
|
209
172
|
var to = Array.isArray(from) ? [] : {};
|
|
210
173
|
seen.push(from);
|
|
@@ -227,9 +190,7 @@ var self = module.exports = {
|
|
|
227
190
|
} else if (args.length === 1 && (typeof args[0] === 'string' || args[0] instanceof String)) {
|
|
228
191
|
return args[0];
|
|
229
192
|
}
|
|
230
|
-
|
|
231
193
|
let str;
|
|
232
|
-
|
|
233
194
|
try {
|
|
234
195
|
str = JSON.stringify(args, (key, value) => {
|
|
235
196
|
if (typeof value === 'bigint') {
|
|
@@ -243,19 +204,15 @@ var self = module.exports = {
|
|
|
243
204
|
} else if (value instanceof RegExp) {
|
|
244
205
|
return '/' + value.source + '/' + value.flags;
|
|
245
206
|
}
|
|
246
|
-
|
|
247
207
|
return value;
|
|
248
208
|
}, indentation);
|
|
249
209
|
str = str.replace(/^\[{1}\s*|\s*\]{1}$/g, '');
|
|
250
|
-
|
|
251
210
|
if (str.endsWith(' }')) {
|
|
252
211
|
str = str.substring(0, str.length - 3) + '}';
|
|
253
212
|
}
|
|
254
|
-
|
|
255
213
|
if (str.endsWith(' ]')) {
|
|
256
214
|
str = str.substring(0, str.length - 3) + ']';
|
|
257
215
|
}
|
|
258
|
-
|
|
259
216
|
str = str.replace(/"__UNDEFINED"/g, 'undefined');
|
|
260
217
|
} catch (e) {
|
|
261
218
|
console.warn('Failed to serialize command arguments: ', e);
|
|
@@ -263,7 +220,6 @@ var self = module.exports = {
|
|
|
263
220
|
depth: 3
|
|
264
221
|
});
|
|
265
222
|
}
|
|
266
|
-
|
|
267
223
|
return str;
|
|
268
224
|
},
|
|
269
225
|
isInDebugMode: function () {
|
|
@@ -271,7 +227,6 @@ var self = module.exports = {
|
|
|
271
227
|
},
|
|
272
228
|
loadTestHooks: function (options) {
|
|
273
229
|
let hooks = DUMMY_HOOKS;
|
|
274
|
-
|
|
275
230
|
if (options && options.target && options.target.name === 'oxygen.conf') {
|
|
276
231
|
try {
|
|
277
232
|
hooks = require(options.target.path).hooks || DUMMY_HOOKS;
|
|
@@ -279,24 +234,19 @@ var self = module.exports = {
|
|
|
279
234
|
console.warn('Error loading user hooks:', e);
|
|
280
235
|
}
|
|
281
236
|
}
|
|
282
|
-
|
|
283
237
|
return hooks;
|
|
284
238
|
},
|
|
285
239
|
executeTestHook: async function (hooks, method, args) {
|
|
286
240
|
if (!hooks || !method || !hooks[method] || typeof hooks[method] !== 'function') {
|
|
287
241
|
return null;
|
|
288
242
|
}
|
|
289
|
-
|
|
290
243
|
if (['beforeTest', 'beforeSuite', 'beforeCase', 'afterCase', 'afterSuite', 'afterTest'].includes(method)) {
|
|
291
244
|
global._lastTransactionName = null;
|
|
292
245
|
}
|
|
293
|
-
|
|
294
246
|
try {
|
|
295
247
|
if (global.chaiAndMockeryLoaded) {} else {
|
|
296
248
|
const chai = require('chai');
|
|
297
|
-
|
|
298
249
|
const mockery = require('mockery');
|
|
299
|
-
|
|
300
250
|
mockery.enable({
|
|
301
251
|
useCleanCache: true,
|
|
302
252
|
warnOnReplace: false,
|
|
@@ -305,7 +255,6 @@ var self = module.exports = {
|
|
|
305
255
|
mockery.registerMock('chai', chai);
|
|
306
256
|
global.chaiAndMockeryLoaded = true;
|
|
307
257
|
}
|
|
308
|
-
|
|
309
258
|
await hooks[method].apply(undefined, args);
|
|
310
259
|
} catch (e) {
|
|
311
260
|
console.error(`Hook "${method}" has thrown an error: ${e.toString()}`);
|
|
@@ -315,17 +264,14 @@ var self = module.exports = {
|
|
|
315
264
|
getOxModulesDir: function () {
|
|
316
265
|
return path.join(__dirname, '..', 'ox_modules');
|
|
317
266
|
},
|
|
318
|
-
|
|
319
267
|
hookLogs(logger) {
|
|
320
268
|
const origlog = console.log;
|
|
321
269
|
const origDebug = console.debug;
|
|
322
270
|
const origInfo = console.info;
|
|
323
271
|
const origWarn = console.warn;
|
|
324
272
|
const origError = console.error;
|
|
325
|
-
|
|
326
273
|
const processArgs = argumentArray => {
|
|
327
274
|
let result = [];
|
|
328
|
-
|
|
329
275
|
if (argumentArray && argumentArray.map) {
|
|
330
276
|
argumentArray.map(item => {
|
|
331
277
|
if (typeof item === 'string') {
|
|
@@ -335,36 +281,29 @@ var self = module.exports = {
|
|
|
335
281
|
}
|
|
336
282
|
});
|
|
337
283
|
}
|
|
338
|
-
|
|
339
284
|
return result.join(' ');
|
|
340
285
|
};
|
|
341
|
-
|
|
342
286
|
console.log = function (...argumentArray) {
|
|
343
287
|
origlog.apply(this, argumentArray);
|
|
344
288
|
logger.info(processArgs(argumentArray));
|
|
345
289
|
};
|
|
346
|
-
|
|
347
290
|
console.debug = function (...argumentArray) {
|
|
348
291
|
origDebug.apply(this, argumentArray);
|
|
349
292
|
logger.debug(processArgs(argumentArray));
|
|
350
293
|
};
|
|
351
|
-
|
|
352
294
|
console.info = function (...argumentArray) {
|
|
353
295
|
origInfo.apply(this, argumentArray);
|
|
354
296
|
logger.info(processArgs(argumentArray));
|
|
355
297
|
};
|
|
356
|
-
|
|
357
298
|
console.warn = function (...argumentArray) {
|
|
358
299
|
origWarn.apply(this, argumentArray);
|
|
359
300
|
logger.warn(processArgs(argumentArray));
|
|
360
301
|
};
|
|
361
|
-
|
|
362
302
|
console.error = function (...argumentArray) {
|
|
363
303
|
origError.apply(this, argumentArray);
|
|
364
304
|
logger.error(processArgs(argumentArray));
|
|
365
305
|
};
|
|
366
306
|
},
|
|
367
|
-
|
|
368
307
|
makeTransactionFailedIfStepFailed(steps) {
|
|
369
308
|
if (steps && steps.length && steps.length > 0) {
|
|
370
309
|
let lastFindedTransactionIndex = false;
|
|
@@ -373,17 +312,14 @@ var self = module.exports = {
|
|
|
373
312
|
if (item.name && item.name.includes && item.name.includes('.transaction(')) {
|
|
374
313
|
lastFindedTransactionIndex = idx;
|
|
375
314
|
}
|
|
376
|
-
|
|
377
315
|
if (typeof lastFindedTransactionIndex === 'number' && item.status && item.status === 'failed') {
|
|
378
316
|
newSteps[lastFindedTransactionIndex]['status'] = 'failed';
|
|
379
317
|
}
|
|
380
318
|
});
|
|
381
319
|
return newSteps;
|
|
382
320
|
}
|
|
383
|
-
|
|
384
321
|
return steps;
|
|
385
322
|
},
|
|
386
|
-
|
|
387
323
|
decrypt(text) {
|
|
388
324
|
try {
|
|
389
325
|
let encryptedText = Buffer.from(text, 'hex');
|
|
@@ -396,34 +332,28 @@ var self = module.exports = {
|
|
|
396
332
|
throw new _OxygenError.default(_helper.default.errorCode.CRYPTO_ERROR, "The provided argument doesn't seem to be a valid cipher produced by 'utils.encrypt'");
|
|
397
333
|
}
|
|
398
334
|
},
|
|
399
|
-
|
|
400
335
|
encrypt(text) {
|
|
401
336
|
let cipher = crypto.createCipheriv(algorithm, key, iv);
|
|
402
337
|
let encrypted = cipher.update(text);
|
|
403
338
|
encrypted = Buffer.concat([encrypted, cipher.final()]);
|
|
404
339
|
return encrypted.toString('hex');
|
|
405
340
|
},
|
|
406
|
-
|
|
407
341
|
sleep: function (timeout) {
|
|
408
342
|
return new Promise(resolve => setTimeout(resolve, timeout));
|
|
409
343
|
},
|
|
410
344
|
downloadVideo: async function (fileName, videoUrl, options) {
|
|
411
345
|
const localVideoFilePath = getVideoAttachmentPath(fileName, options);
|
|
412
346
|
let error;
|
|
413
|
-
|
|
414
347
|
for (let i = 0; i < DOWNLOAD_RETRIES; i++) {
|
|
415
348
|
error = undefined;
|
|
416
|
-
|
|
417
349
|
try {
|
|
418
350
|
fs.writeFileSync(localVideoFilePath, await download(videoUrl));
|
|
419
351
|
break;
|
|
420
352
|
} catch (e) {
|
|
421
353
|
error = e;
|
|
422
354
|
}
|
|
423
|
-
|
|
424
355
|
await self.sleep(DOWNLOAD_RETRY_WAIT_TIME);
|
|
425
356
|
}
|
|
426
|
-
|
|
427
357
|
if (!error) {
|
|
428
358
|
const options = {
|
|
429
359
|
url: videoUrl,
|
|
@@ -431,7 +361,6 @@ var self = module.exports = {
|
|
|
431
361
|
json: false,
|
|
432
362
|
rejectUnauthorized: false
|
|
433
363
|
};
|
|
434
|
-
|
|
435
364
|
try {
|
|
436
365
|
return new Promise((resolve, reject) => {
|
|
437
366
|
request(options, (err, res, body) => {
|
|
@@ -446,4 +375,4 @@ var self = module.exports = {
|
|
|
446
375
|
}
|
|
447
376
|
}
|
|
448
377
|
};
|
|
449
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdXRpbC5qcyJdLCJuYW1lcyI6WyJwYXRoIiwicmVxdWlyZSIsImZzIiwibW9tZW50IiwiY3J5cHRvIiwidXRpbCIsInBhc3N3b3JkIiwiZW5jcnlwdGlvbktleSIsImtleSIsInNjcnlwdFN5bmMiLCJpdiIsIkJ1ZmZlciIsImFsbG9jIiwiYWxnb3JpdGhtIiwiZG93bmxvYWQiLCJyZXF1ZXN0IiwiRGVjcnlwdFJlc3VsdCIsInJlc3VsdCIsImRlY3J5cHRSZXN1bHQiLCJnZXREZWNyeXB0UmVzdWx0IiwiRFVNTVlfSE9PS1MiLCJiZWZvcmVUZXN0IiwiYmVmb3JlU3VpdGUiLCJiZWZvcmVDYXNlIiwiYmVmb3JlQ29tbWFuZCIsImFmdGVyQ29tbWFuZCIsImFmdGVyVGVzdCIsImFmdGVyU3VpdGUiLCJhZnRlckNhc2UiLCJDQl9BVFRBQ0hNRU5UU19ESVJfTkFNRSIsIkRPV05MT0FEX1JFVFJJRVMiLCJET1dOTE9BRF9SRVRSWV9XQUlUX1RJTUUiLCJnZXRWaWRlb0F0dGFjaG1lbnRQYXRoIiwiZmlsZU5hbWUiLCJvcHRpb25zIiwiY3dkIiwiZ2V0Q3dkIiwiYXR0YWNobWVudHNEaXJQYXRoIiwiam9pbiIsImV4aXN0c1N5bmMiLCJta2RpclN5bmMiLCJwcm9jZXNzIiwicm9vdFBhdGgiLCJ0cmltIiwic2VsZiIsIm1vZHVsZSIsImV4cG9ydHMiLCJnZW5lcmF0ZVVuaXF1ZUlkIiwicmFuZG9tQnl0ZXMiLCJ0b1N0cmluZyIsImdldFRpbWVTdGFtcCIsInV0YyIsInZhbHVlT2YiLCJnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uIiwic3VpdGVEZWYiLCJ0ZXN0Q29uZmlnIiwiaXRlcmF0aW9uQ291bnQiLCJzdWl0ZSIsImlkIiwibmFtZSIsIml0ZXJhdGlvbnMiLCJzdWl0ZUZpbGVQYXRoIiwidGFyZ2V0IiwicGFyYW1NYW5hZ2VyIiwiZ2V0UGFyYW1ldGVyTWFuYWdlciIsInBhcmFtZXRlcnMiLCJnZXRNb2RlIiwicm93cyIsImNhcGFiaWxpdGllcyIsImVudmlyb25tZW50IiwicGFyYWxsZWwiLCJjb25jdXJyZW5jeSIsImNhc2VzIiwiZm9yRWFjaCIsImNhc2VEZWYiLCJ0YyIsImdldEZpbGVOYW1lV2l0aG91dEV4dCIsInJlc29sdmVQYXRoIiwiZm9ybWF0IiwicHVzaCIsImdlbmVyYXRlVGVzdFN1aXRlRnJvbUpTRmlsZSIsImZpbGVQYXRoIiwicGFyYW1GaWxlIiwicGFyYW1Nb2RlIiwibm9QYXJhbUF1dG9TZWFyY2giLCJmaWxlTmFtZU5vRXh0IiwidGVzdGNhc2UiLCJyZW9wZW5TZXNzaW9uIiwiZGlybmFtZSIsImZpbGUiLCJtb2RlIiwibWFpbkZpbGVQYXRoIiwicGFyYW1PcHRzIiwiYXV0b1NlYXJjaCIsInBhcmFtRmlsZVBhdGgiLCJpc0Fic29sdXRlIiwibG9hZFBhcmFtZXRlck1hbmFnZXIiLCJnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uRmlsZSIsImJhc2VuYW1lIiwiZmlsZUV4dCIsImV4dG5hbWUiLCJmaWxlUGF0aE5vRXh0Iiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJtYWluRmlsZSIsImNzdlBhcmFtRmlsZSIsInR4dFBhcmFtRmlsZSIsInhsc1BhcmFtRmlsZSIsInhsc3hQYXJhbUZpbGUiLCJpbml0IiwicGF0aFRvUmVzb2x2ZSIsImJhc2VGb2xkZXIiLCJyZXNvbHZlIiwibWFrZVNlcmlhbGl6YWJsZSIsImVyciIsImRlc3Ryb3lDaXJjdWxhciIsImZyb20iLCJzZWVuIiwidG8iLCJBcnJheSIsImlzQXJyYXkiLCJPYmplY3QiLCJrZXlzIiwiaW5kZXhPZiIsInNsaWNlIiwiZ2V0TWV0aG9kU2lnbmF0dXJlIiwibW9kdWxlTmFtZSIsIm1ldGhvZE5hbWUiLCJtZXRob2RBcmdzIiwic3RyaW5naWZ5IiwiYXJncyIsImluZGVudGF0aW9uIiwiU3RyaW5nIiwibGVuZ3RoIiwic3RyIiwiSlNPTiIsInZhbHVlIiwiRXJyb3IiLCJSZWdFeHAiLCJzb3VyY2UiLCJmbGFncyIsInJlcGxhY2UiLCJlbmRzV2l0aCIsImUiLCJjb25zb2xlIiwid2FybiIsImluc3BlY3QiLCJkZXB0aCIsImlzSW5EZWJ1Z01vZGUiLCJsb2FkVGVzdEhvb2tzIiwiaG9va3MiLCJleGVjdXRlVGVzdEhvb2siLCJtZXRob2QiLCJpbmNsdWRlcyIsImdsb2JhbCIsIl9sYXN0VHJhbnNhY3Rpb25OYW1lIiwiY2hhaUFuZE1vY2tlcnlMb2FkZWQiLCJjaGFpIiwibW9ja2VyeSIsImVuYWJsZSIsInVzZUNsZWFuQ2FjaGUiLCJ3YXJuT25SZXBsYWNlIiwid2Fybk9uVW5yZWdpc3RlcmVkIiwicmVnaXN0ZXJNb2NrIiwiYXBwbHkiLCJ1bmRlZmluZWQiLCJlcnJvciIsImdldE94TW9kdWxlc0RpciIsIl9fZGlybmFtZSIsImhvb2tMb2dzIiwibG9nZ2VyIiwib3JpZ2xvZyIsImxvZyIsIm9yaWdEZWJ1ZyIsImRlYnVnIiwib3JpZ0luZm8iLCJpbmZvIiwib3JpZ1dhcm4iLCJvcmlnRXJyb3IiLCJwcm9jZXNzQXJncyIsImFyZ3VtZW50QXJyYXkiLCJtYXAiLCJpdGVtIiwibWFrZVRyYW5zYWN0aW9uRmFpbGVkSWZTdGVwRmFpbGVkIiwic3RlcHMiLCJsYXN0RmluZGVkVHJhbnNhY3Rpb25JbmRleCIsIm5ld1N0ZXBzIiwiaWR4Iiwic3RhdHVzIiwiZGVjcnlwdCIsInRleHQiLCJlbmNyeXB0ZWRUZXh0IiwiZGVjaXBoZXIiLCJjcmVhdGVEZWNpcGhlcml2IiwiZGVjcnlwdGVkIiwidXBkYXRlIiwiY29uY2F0IiwiZmluYWwiLCJyZXRWYWwiLCJPeHlnZW5FcnJvciIsImVycm9ySGVscGVyIiwiZXJyb3JDb2RlIiwiQ1JZUFRPX0VSUk9SIiwiZW5jcnlwdCIsImNpcGhlciIsImNyZWF0ZUNpcGhlcml2IiwiZW5jcnlwdGVkIiwic2xlZXAiLCJ0aW1lb3V0IiwiUHJvbWlzZSIsInNldFRpbWVvdXQiLCJkb3dubG9hZFZpZGVvIiwidmlkZW9VcmwiLCJsb2NhbFZpZGVvRmlsZVBhdGgiLCJpIiwid3JpdGVGaWxlU3luYyIsInVybCIsImpz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Y2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBIZWxwZXIgbW9kdWxlIGZvciBpbnRlcm5hbCBPeHlnZW4gdXNlXHJcbiAqL1xyXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xyXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XHJcbmNvbnN0IG1vbWVudCA9IHJlcXVpcmUoJ21vbWVudCcpO1xyXG5jb25zdCBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcclxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcclxuY29uc3QgcGFzc3dvcmQgPSByZXF1aXJlKCcuLi8uLi9wYWNrYWdlLmpzb24nKS5lbmNyeXB0aW9uS2V5O1xyXG5jb25zdCBrZXkgPSBjcnlwdG8uc2NyeXB0U3luYyhwYXNzd29yZCwgJ0dmRycsIDI0KTtcclxuY29uc3QgaXYgPSBCdWZmZXIuYWxsb2MoMTYsIDApO1xyXG5jb25zdCBhbGdvcml0aG0gPSAnYWVzLTE5Mi1jYmMnO1xyXG5jb25zdCBkb3dubG9hZCA9IHJlcXVpcmUoJ2Rvd25sb2FkJyk7XHJcbmNvbnN0IHJlcXVlc3QgPSByZXF1aXJlKCdyZXF1ZXN0Jyk7XHJcblxyXG5pbXBvcnQgT3h5Z2VuRXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxuaW1wb3J0IGVycm9ySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5cclxuZnVuY3Rpb24gRGVjcnlwdFJlc3VsdChyZXN1bHQpIHtcclxuICAgIGNvbnN0IGRlY3J5cHRSZXN1bHQgPSByZXN1bHQ7XHJcblxyXG4gICAgdGhpcy5nZXREZWNyeXB0UmVzdWx0ID0gKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBkZWNyeXB0UmVzdWx0O1xyXG4gICAgfTtcclxufVxyXG5cclxuY29uc3QgRFVNTVlfSE9PS1MgPSB7XHJcbiAgICBiZWZvcmVUZXN0OiAoKSA9PiB7fSxcclxuICAgIGJlZm9yZVN1aXRlOiAoKSA9PiB7fSxcclxuICAgIGJlZm9yZUNhc2U6ICgpID0+IHt9LFxyXG4gICAgYmVmb3JlQ29tbWFuZDogKCkgPT4ge30sXHJcbiAgICBhZnRlckNvbW1hbmQ6ICgpID0+IHt9LFxyXG4gICAgYWZ0ZXJUZXN0OiAoKSA9PiB7fSxcclxuICAgIGFmdGVyU3VpdGU6ICgpID0+IHt9LFxyXG4gICAgYWZ0ZXJDYXNlOiAoKSA9PiB7fSxcclxufTtcclxuXHJcbmNvbnN0IENCX0FUVEFDSE1FTlRTX0RJUl9OQU1FID0gJy5jYi1hdHRhY2htZW50cyc7XHJcbmNvbnN0IERPV05MT0FEX1JFVFJJRVMgPSA0MDtcclxuY29uc3QgRE9XTkxPQURfUkVUUllfV0FJVF9USU1FID0gMjUwMDtcclxuXHJcbmZ1bmN0aW9uIGdldFZpZGVvQXR0YWNobWVudFBhdGgoZmlsZU5hbWUsIG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IGN3ZCA9IGdldEN3ZChvcHRpb25zKTtcclxuICAgIGNvbnN0IGF0dGFjaG1lbnRzRGlyUGF0aCA9IHBhdGguam9pbihjd2QsIENCX0FUVEFDSE1FTlRTX0RJUl9OQU1FKTtcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhhdHRhY2htZW50c0RpclBhdGgpKSB7XHJcbiAgICAgICAgZnMubWtkaXJTeW5jKGF0dGFjaG1lbnRzRGlyUGF0aCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGF0aC5qb2luKGF0dGFjaG1lbnRzRGlyUGF0aCwgZmlsZU5hbWUpO1xyXG59XHJcblxyXG5jb25zdCBnZXRDd2QgPSAob3B0aW9ucykgPT4ge1xyXG4gICAgbGV0IGN3ZCA9IHByb2Nlc3MuY3dkKCk7XHJcblxyXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5jd2QpIHtcclxuICAgICAgICBjd2QgPSBvcHRpb25zLmN3ZDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5yb290UGF0aCkge1xyXG4gICAgICAgIGN3ZCA9IG9wdGlvbnMucm9vdFBhdGg7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGN3ZC50cmltKCk7XHJcbn07XHJcblxyXG52YXIgc2VsZiA9IG1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIGdlbmVyYXRlVW5pcXVlSWQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBjcnlwdG8ucmFuZG9tQnl0ZXMoNCkudG9TdHJpbmcoJ2hleCcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRUaW1lU3RhbXA6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBtb21lbnQudXRjKCkudmFsdWVPZigpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uOiBhc3luYyBmdW5jdGlvbihzdWl0ZURlZiwgdGVzdENvbmZpZywgaXRlcmF0aW9uQ291bnQgPSAxKSB7XHJcbiAgICAgICAgdmFyIHN1aXRlID0gbmV3IHJlcXVpcmUoJy4uL21vZGVsL3Rlc3RzdWl0ZS5qcycpKCk7XHJcbiAgICAgICAgc3VpdGUuaWQgPSBudWxsO1xyXG4gICAgICAgIHN1aXRlLm5hbWUgPSBzdWl0ZURlZi5uYW1lO1xyXG4gICAgICAgIHN1aXRlLmlkID0gc3VpdGVEZWYuaWQ7XHJcbiAgICAgICAgc3VpdGUuaXRlcmF0aW9uQ291bnQgPSBzdWl0ZURlZi5pdGVyYXRpb25zIHx8IHN1aXRlRGVmLml0ZXJhdGlvbkNvdW50IHx8IHRlc3RDb25maWcuaXRlcmF0aW9ucyB8fCBpdGVyYXRpb25Db3VudDtcclxuICAgICAgICBjb25zdCBzdWl0ZUZpbGVQYXRoID0gc3VpdGVEZWYucGF0aCB8fCBwYXRoLmpvaW4odGVzdENvbmZpZy50YXJnZXQuY3dkLCAnc3VpdGVzJywgYCR7c3VpdGVEZWYubmFtZX0uanNvbmApO1xyXG4gICAgICAgIHN1aXRlLnBhcmFtTWFuYWdlciA9IGF3YWl0IHNlbGYuZ2V0UGFyYW1ldGVyTWFuYWdlcihzdWl0ZUZpbGVQYXRoLCB0ZXN0Q29uZmlnLnBhcmFtZXRlcnMsIHRlc3RDb25maWcudGFyZ2V0LmN3ZCk7XHJcbiAgICAgICAgaWYgKHN1aXRlLnBhcmFtTWFuYWdlciAmJiBzdWl0ZS5wYXJhbU1hbmFnZXIuZ2V0TW9kZSgpID09ICdhbGwnKSB7XHJcbiAgICAgICAgICAgIHN1aXRlLml0ZXJhdGlvbkNvdW50ID0gc3VpdGUucGFyYW1NYW5hZ2VyLnJvd3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN1aXRlLmNhcGFiaWxpdGllcyA9IHN1aXRlRGVmLmNhcGFiaWxpdGllcyB8fCB0ZXN0Q29uZmlnLmNhcGFiaWxpdGllcyB8fCB7fTtcclxuICAgICAgICBzdWl0ZS5lbnZpcm9ubWVudCA9IHRlc3RDb25maWcuZW52aXJvbm1lbnQgfHwgbnVsbDtcclxuICAgICAgICBzdWl0ZS5vcHRpb25zID0gdGVzdENvbmZpZy5vcHRpb25zIHx8IG51bGw7XHJcbiAgICAgICAgc3VpdGUucGFyYWxsZWwgPSBzdWl0ZURlZi5wYXJhbGxlbCB8fCB0ZXN0Q29uZmlnLnBhcmFsbGVsIHx8IHRlc3RDb25maWcuY29uY3VycmVuY3kgfHwgMTtcclxuICAgICAgICAvLyBpbml0aWFsaXplIGVhY2ggdGVzdCBjYXNlXHJcbiAgICAgICAgc3VpdGVEZWYuY2FzZXMuZm9yRWFjaChjYXNlRGVmID0+IHtcclxuICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSB0ZXN0Y2FzZSBvYmplY3RcclxuICAgICAgICAgICAgY29uc3QgdGMgPSBuZXcgcmVxdWlyZSgnLi4vbW9kZWwvdGVzdGNhc2UuanMnKSgpO1xyXG4gICAgICAgICAgICBpZiAoY2FzZURlZi5uYW1lKVxyXG4gICAgICAgICAgICAgICAgdGMubmFtZSA9IGNhc2VEZWYubmFtZTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGMubmFtZSA9IHNlbGYuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KGNhc2VEZWYucGF0aCk7XHJcbiAgICAgICAgICAgIHRjLnBhdGggPSBzZWxmLnJlc29sdmVQYXRoKGNhc2VEZWYucGF0aCwgdGVzdENvbmZpZy50YXJnZXQuY3dkKTtcclxuICAgICAgICAgICAgdGMuZm9ybWF0ID0gJ2pzJztcclxuICAgICAgICAgICAgdGMuaXRlcmF0aW9uQ291bnQgPSBjYXNlRGVmLml0ZXJhdGlvbnMgfHwgY2FzZURlZi5pdGVyYXRpb25Db3VudCB8fCAxO1xyXG4gICAgICAgICAgICBzdWl0ZS5jYXNlcy5wdXNoKHRjKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gc3VpdGU7XHJcbiAgICB9LFxyXG5cclxuICAgIGdlbmVyYXRlVGVzdFN1aXRlRnJvbUpTRmlsZTogYXN5bmMgZnVuY3Rpb24gKGZpbGVQYXRoLCBwYXJhbUZpbGUgPSBudWxsLCBwYXJhbU1vZGUgPSBudWxsLCBub1BhcmFtQXV0b1NlYXJjaCA9IHRydWUsIGl0ZXJhdGlvbkNvdW50ID0gMSkge1xyXG4gICAgICAgIHZhciBmaWxlTmFtZU5vRXh0ID0gc2VsZi5nZXRGaWxlTmFtZVdpdGhvdXRFeHQoZmlsZVBhdGgpO1xyXG5cclxuICAgICAgICB2YXIgdGVzdGNhc2UgPSBuZXcgcmVxdWlyZSgnLi4vbW9kZWwvdGVzdGNhc2UuanMnKSgpO1xyXG4gICAgICAgIHRlc3RjYXNlLm5hbWUgPSBmaWxlTmFtZU5vRXh0O1xyXG4gICAgICAgIHRlc3RjYXNlLnBhdGggPSBmaWxlUGF0aDtcclxuICAgICAgICB0ZXN0Y2FzZS5mb3JtYXQgPSAnanMnO1xyXG4gICAgICAgIHRlc3RjYXNlLml0ZXJhdGlvbkNvdW50ID0gMTtcclxuXHJcbiAgICAgICAgdmFyIHN1aXRlID0gbmV3IHJlcXVpcmUoJy4uL21vZGVsL3Rlc3RzdWl0ZS5qcycpKCk7XHJcbiAgICAgICAgc3VpdGUubmFtZSA9IHRlc3RjYXNlLm5hbWU7XHJcbiAgICAgICAgc3VpdGUuaWQgPSB0ZXN0Y2FzZS5pZDtcclxuICAgICAgICBzdWl0ZS5pdGVyYXRpb25Db3VudCA9IGl0ZXJhdGlvbkNvdW50O1xyXG4gICAgICAgIHN1aXRlLmNhc2VzLnB1c2godGVzdGNhc2UpO1xyXG4gICAgICAgIGlmICh0ZXN0Y2FzZS5yZW9wZW5TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgIHN1aXRlLnJlb3BlblNlc3Npb24gPSB0ZXN0Y2FzZS5yZW9wZW5TZXNzaW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjd2QgPSBwYXRoLmRpcm5hbWUoZmlsZVBhdGgpO1xyXG4gICAgICAgIHN1aXRlLnBhcmFtTWFuYWdlciA9IGF3YWl0IHNlbGYuZ2V0UGFyYW1ldGVyTWFuYWdlcihmaWxlUGF0aCwgeyBmaWxlOiBwYXJhbUZpbGUsIG1vZGU6IHBhcmFtTW9kZSB9LCBjd2QpO1xyXG4gICAgICAgIC8vIGlmIHBhcmFtZXRlciByZWFkaW5nIG1vZGUgaXMgJ2FsbCcgdGhlbiBjaGFuZ2UgaXRlcmF0aW9uQ291bnQgdG8gdGhlIGFtb3VudCBvZiByb3dzIGluIHRoZSBwYXJhbSBmaWxlXHJcbiAgICAgICAgaWYgKHN1aXRlLnBhcmFtTWFuYWdlciAmJiBwYXJhbU1vZGUgPT0gJ2FsbCcpIHtcclxuICAgICAgICAgICAgc3VpdGUuaXRlcmF0aW9uQ291bnQgPSBzdWl0ZS5wYXJhbU1hbmFnZXIucm93cztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN1aXRlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRQYXJhbWV0ZXJNYW5hZ2VyOiBhc3luYyBmdW5jdGlvbihtYWluRmlsZVBhdGgsIHBhcmFtT3B0cyA9IG51bGwsIGN3ZCA9IG51bGwsIGF1dG9TZWFyY2ggPSB0cnVlKSB7XHJcbiAgICAgICAgbGV0IHBhcmFtRmlsZVBhdGggPSBwYXJhbU9wdHMgJiYgcGFyYW1PcHRzLmZpbGUgPyBwYXJhbU9wdHMuZmlsZSA6IG51bGw7XHJcbiAgICAgICAgbGV0IHBhcmFtTW9kZSA9IHBhcmFtT3B0cyAmJiBwYXJhbU9wdHMubW9kZSA/IHBhcmFtT3B0cy5tb2RlIDogJ3NlcSc7XHJcblxyXG4gICAgICAgIGlmIChwYXJhbUZpbGVQYXRoICYmIGN3ZCAmJiAhcGF0aC5pc0Fic29sdXRlKHBhcmFtRmlsZVBhdGgpKSB7XHJcbiAgICAgICAgICAgIHBhcmFtRmlsZVBhdGggPSBwYXRoLmpvaW4oY3dkLCBwYXJhbUZpbGVQYXRoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBhd2FpdCBzZWxmLmxvYWRQYXJhbWV0ZXJNYW5hZ2VyKG1haW5GaWxlUGF0aCwgcGFyYW1GaWxlUGF0aCwgcGFyYW1Nb2RlLCBhdXRvU2VhcmNoKTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbkZpbGU6IGFzeW5jIGZ1bmN0aW9uIChmaWxlUGF0aCwgcGFyYW1GaWxlLCBwYXJhbU1vZGUgPSBudWxsLCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICBjb25zdCB0ZXN0Q29uZmlnID0ge1xyXG4gICAgICAgICAgICAuLi5vcHRpb25zIHx8IHt9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKHBhcmFtRmlsZSkge1xyXG4gICAgICAgICAgICB0ZXN0Q29uZmlnLnBhcmFtZXRlcnMgPSB7XHJcbiAgICAgICAgICAgICAgICBmaWxlOiBwYXJhbUZpbGUsXHJcbiAgICAgICAgICAgICAgICBtb2RlOiBwYXJhbU1vZGUsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhd2FpdCBzZWxmLmdlbmVyYXRlVGVzdFN1aXRlRnJvbUpzb24ocmVxdWlyZShmaWxlUGF0aCksIHRlc3RDb25maWcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRGaWxlTmFtZVdpdGhvdXRFeHQ6IGZ1bmN0aW9uIChmaWxlUGF0aCkge1xyXG4gICAgICAgIHZhciBmaWxlTmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZVBhdGgpO1xyXG4gICAgICAgIHZhciBmaWxlRXh0ID0gcGF0aC5leHRuYW1lKGZpbGVQYXRoKTtcclxuICAgICAgICB2YXIgZmlsZVBhdGhOb0V4dCA9IGZpbGVOYW1lLnN1YnN0cmluZygwLCBmaWxlTmFtZS5sYXN0SW5kZXhPZihmaWxlRXh0KSk7XHJcbiAgICAgICAgcmV0dXJuIGZpbGVQYXRoTm9FeHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIGxvYWRQYXJhbWV0ZXJNYW5hZ2VyOiBhc3luYyBmdW5jdGlvbihtYWluRmlsZSwgcGFyYW1GaWxlLCBwYXJhbU1vZGUsIGF1dG9TZWFyY2ggPSBmYWxzZSkge1xyXG4gICAgICAgIHZhciBwYXJhbU1hbmFnZXIgPSBudWxsO1xyXG4gICAgICAgIC8vIGlmIHBhcmFtIGZpbGUgaXMgbm90IHNwZWNpZmllZCwgdGhlbiBjaGVjayBpZiBKUyBmaWxlIGlzIGNvbWluZyBpbiBwYWlyIHdpdGggYSBwYXJhbWV0ZXIgZmlsZSBcclxuICAgICAgICAvLyAoY3VycmVudGx5IHN1cHBvcnRpbmcgQ1NWIG9yIFRYVClcclxuICAgICAgICBpZiAoIXBhcmFtRmlsZSAmJiBhdXRvU2VhcmNoKSB7XHJcbiAgICAgICAgICAgIHZhciBmaWxlTmFtZU5vRXh0ID0gc2VsZi5nZXRGaWxlTmFtZVdpdGhvdXRFeHQobWFpbkZpbGUpO1xyXG4gICAgICAgICAgICB2YXIgY3N2UGFyYW1GaWxlID0gcGF0aC5qb2luKHBhdGguZGlybmFtZShtYWluRmlsZSksIGZpbGVOYW1lTm9FeHQgKyAnLmNzdicpO1xyXG4gICAgICAgICAgICB2YXIgdHh0UGFyYW1GaWxlID0gcGF0aC5qb2luKHBhdGguZGlybmFtZShtYWluRmlsZSksIGZpbGVOYW1lTm9FeHQgKyAnLnR4dCcpO1xyXG4gICAgICAgICAgICB2YXIgeGxzUGFyYW1GaWxlID0gcGF0aC5qb2luKHBhdGguZGlybmFtZShtYWluRmlsZSksIGZpbGVOYW1lTm9FeHQgKyAnLnhscycpO1xyXG4gICAgICAgICAgICB2YXIgeGxzeFBhcmFtRmlsZSA9IHBhdGguam9pbihwYXRoLmRpcm5hbWUobWFpbkZpbGUpLCBmaWxlTmFtZU5vRXh0ICsgJy54bHN4Jyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhjc3ZQYXJhbUZpbGUpKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbUZpbGUgPSBjc3ZQYXJhbUZpbGU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZnMuZXhpc3RzU3luYyh0eHRQYXJhbUZpbGUpKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbUZpbGUgPSB0eHRQYXJhbUZpbGU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZnMuZXhpc3RzU3luYyh4bHNQYXJhbUZpbGUpKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbUZpbGUgPSB4bHNQYXJhbUZpbGU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZnMuZXhpc3RzU3luYyh4bHN4UGFyYW1GaWxlKSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1GaWxlID0geGxzeFBhcmFtRmlsZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyYW1GaWxlKSB7XHJcbiAgICAgICAgICAgIHBhcmFtTWFuYWdlciA9IG5ldyByZXF1aXJlKCcuL3BhcmFtLW1hbmFnZXInKShwYXJhbUZpbGUsIHBhcmFtTW9kZSB8fCAnc2VxJyk7XHJcbiAgICAgICAgICAgIGF3YWl0IHBhcmFtTWFuYWdlci5pbml0KCk7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJhbU1hbmFnZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICByZXNvbHZlUGF0aDogZnVuY3Rpb24ocGF0aFRvUmVzb2x2ZSwgYmFzZUZvbGRlcikge1xyXG4gICAgICAgIGlmIChwYXRoLmlzQWJzb2x1dGUocGF0aFRvUmVzb2x2ZSkpXHJcbiAgICAgICAgICAgIHJldHVybiBwYXRoVG9SZXNvbHZlO1xyXG4gICAgICAgIHJldHVybiBwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgcGF0aFRvUmVzb2x2ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VTZXJpYWxpemFibGU6IGZ1bmN0aW9uKGVycikge1xyXG4gICAgICAgIGlmICh0eXBlb2YgZXJyID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICByZXR1cm4gZGVzdHJveUNpcmN1bGFyKGVyciwgW10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZXJyO1xyXG5cclxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vam9ucGFja2VyL2Rlc3Ryb3ktY2lyY3VsYXJcclxuICAgICAgICBmdW5jdGlvbiBkZXN0cm95Q2lyY3VsYXIoZnJvbSwgc2Vlbikge1xyXG4gICAgICAgICAgICB2YXIgdG8gPSBBcnJheS5pc0FycmF5KGZyb20pID8gW10gOiB7fTtcclxuICAgICAgICAgICAgc2Vlbi5wdXNoKGZyb20pO1xyXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhmcm9tKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFmcm9tW2tleV0gfHwgKHR5cGVvZiBmcm9tW2tleV0gIT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoZnJvbVtrZXldKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0b1trZXldID0gZnJvbVtrZXldO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWVuLmluZGV4T2YoZnJvbVtrZXldKSA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRvW2tleV0gPSBkZXN0cm95Q2lyY3VsYXIoZnJvbVtrZXldLCBzZWVuLnNsaWNlKDApKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB0b1trZXldID0gJ1tDaXJjdWxhcl0nO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHRvO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0TWV0aG9kU2lnbmF0dXJlOiBmdW5jdGlvbihtb2R1bGVOYW1lLCBtZXRob2ROYW1lLCBtZXRob2RBcmdzKSB7XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZU5hbWUgKyAnLicgKyBtZXRob2ROYW1lICsgJygnICsgc2VsZi5zdHJpbmdpZnkobWV0aG9kQXJncywgMCkgKyAnKSc7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBVc2VkIHRvIHNlcmlhbGl6ZSBveHlnZW4gY29tbWFuZCBwYXJhbWV0ZXJzLiBQcm9kdWNlcyBhIG5vbi1jb21wbGlhbnQgSlNPTiBzZXJpYWxpemF0aW9uLlxyXG4gICAgICovXHJcbiAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uIChhcmdzLCBpbmRlbnRhdGlvbiA9IDApIHtcclxuICAgICAgICAvLyByZXR1cm4gc3RyaW5ncyBhcyBpcyAob3RoZXJ3aXNlIGlmIHdlIHNlcmlhbGl6ZSBzdHJpbmcgaXQgd2lsbCBnZXQgd3JhcHBlZCBpbiBkb3VibGUgcXVvdGVzKVxyXG4gICAgICAgIGlmICh0eXBlb2YgYXJncyA9PT0gJ3N0cmluZycgfHwgYXJncyBpbnN0YW5jZW9mIFN0cmluZykge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJncztcclxuICAgICAgICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmICh0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycgfHwgYXJnc1swXSBpbnN0YW5jZW9mIFN0cmluZykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFyZ3NbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3RyO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHN0ciA9IEpTT04uc3RyaW5naWZ5KGFyZ3MsIChrZXksIHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYmlnaW50JykgeyAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vR29vZ2xlQ2hyb21lTGFicy9qc2JpL2lzc3Vlcy8zMFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHVuZGVmaW5lZCBpcyBpbnNpZGUgYW4gYXJyYXkgdGhlbiBpdCB3aWxsIGJlIHNlcmlhbGl6ZWQgYXMgbnVsbC5cclxuICAgICAgICAgICAgICAgICAgICAvLyBob3dldmVyIGlmIHdlIGp1c3QgcmV0dXJuICd1bmRlZmluZWQnIGhlcmUgYXMgc3RyaW5nLCBpdCB3aWxsIGJlIGVuY2xvc2VkIGluIHF1b3Rlcy5cclxuICAgICAgICAgICAgICAgICAgICAvLyBzbyByZXR1cm4gbWFnaWMgc3RyaW5nIGluc3RlYWQgYW5kIHRyaW0gdGhlIHF1b3RlcyBsYXRlciBvblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnX19VTkRFRklORUQnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcvJyArIHZhbHVlLnNvdXJjZSArICcvJyArIHZhbHVlLmZsYWdzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgICAgICB9LCBpbmRlbnRhdGlvbik7XHJcbiAgICAgICAgICAgIC8vIHRyaW0gdGhlIGVuY2xvc2luZyBhcnJheSBhbmQgYW55IHdoaXRlc3BhY2VcclxuICAgICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL15cXFt7MX1cXHMqfFxccypcXF17MX0kL2csICcnKTtcclxuICAgICAgICAgICAgLy8gcmVtb3ZlIHNwYWNlIGJlZm9yZSBsYXN0IH0gYW5kIF0sIHRvIG1ha2UgaW5kZW50YXRpb24gbXRjaCB0aGUgb3BlbmluZyBicmFja2V0XHJcbiAgICAgICAgICAgIGlmIChzdHIuZW5kc1dpdGgoJyAgfScpKSB7XHJcbiAgICAgICAgICAgICAgICBzdHIgPSBzdHIuc3Vic3RyaW5nKDAsIHN0ci5sZW5ndGggLSAzKSArICd9JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc3RyLmVuZHNXaXRoKCcgIF0nKSkge1xyXG4gICAgICAgICAgICAgICAgc3RyID0gc3RyLnN1YnN0cmluZygwLCBzdHIubGVuZ3RoIC0gMykgKyAnXSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gY29udmVydCBtYWdpYyAndW5kZWZpbmVkJyBzdHJpbmcgdG8gcHJvcGVyIHJlcHJlc2VudGF0aW9uXHJcbiAgICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cIl9fVU5ERUZJTkVEXCIvZywgJ3VuZGVmaW5lZCcpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gc2VyaWFsaXplIGNvbW1hbmQgYXJndW1lbnRzOiAnLCBlKTtcclxuICAgICAgICAgICAgLy8gaWYgSlNPTi5zdHJpbmdpZnkgZmFpbHMsIHRoZW4gZmFsbGJhY2sgdG8gdXRpbC5pbnNwZWN0LlxyXG4gICAgICAgICAgICAvLyAod2UgZG9uJ3QgdXNlIHV0aWwuaW5zcGVjdCBpbml0aWFseSBiZWNhdXNlIGl0IGRvZXNuJ3Qgc3VwcG9ydCBvdXRwdXQgaW5kZW50YXRpb24pXHJcbiAgICAgICAgICAgIHJldHVybiB1dGlsLmluc3BlY3QoYXJnc1swXSwgeyBkZXB0aDogMyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN0cjtcclxuICAgIH0sXHJcblxyXG4gICAgaXNJbkRlYnVnTW9kZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgLy8gdGhpcyBhbHdheXMgdHJ1ZTtcclxuICAgICAgICAvLyBjb25zdCBhcmd2ID0gcHJvY2Vzcy5leGVjQXJndi5qb2luKCk7XHJcblxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdwcm9jZXNzLmRlYnVnUG9ydCcsIHByb2Nlc3MuZGVidWdQb3J0KTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImFyZ3YuaW5jbHVkZXMoJ2luc3BlY3QnKVwiLCBhcmd2LmluY2x1ZGVzKCdpbnNwZWN0JykpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYXJndi5pbmNsdWRlcygnaW5zcGVjdC1icmsnKVwiLCBhcmd2LmluY2x1ZGVzKCdpbnNwZWN0LWJyaycpKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImFyZ3YuaW5jbHVkZXMoJ2RlYnVnJylcIiwgYXJndi5pbmNsdWRlcygnZGVidWcnKSk7XHJcblxyXG4gICAgICAgIC8vIHJldHVybiBwcm9jZXNzLmRlYnVnUG9ydCB8fCBhcmd2LmluY2x1ZGVzKCdpbnNwZWN0JykgfHwgYXJndi5pbmNsdWRlcygnaW5zcGVjdC1icmsnKSB8fCBhcmd2LmluY2x1ZGVzKCdkZWJ1ZycpO1xyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIGxvYWRUZXN0SG9va3M6IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuICAgICAgICBsZXQgaG9va3MgPSBEVU1NWV9IT09LUztcclxuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnRhcmdldCAmJiBvcHRpb25zLnRhcmdldC5uYW1lID09PSAnb3h5Z2VuLmNvbmYnKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBob29rcyA9IHJlcXVpcmUob3B0aW9ucy50YXJnZXQucGF0aCkuaG9va3MgfHwgRFVNTVlfSE9PS1M7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignRXJyb3IgbG9hZGluZyB1c2VyIGhvb2tzOicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBob29rcztcclxuICAgIH0sXHJcblxyXG4gICAgZXhlY3V0ZVRlc3RIb29rOiBhc3luYyBmdW5jdGlvbihob29rcywgbWV0aG9kLCBhcmdzKSB7XHJcbiAgICAgICAgLy8gaWYgaG9vayBpcyBub3QgZGVmaW5lZCwganVzdCBxdWlldGx5IGlnbm9yZSBpdFxyXG4gICAgICAgIGlmICghaG9va3MgfHwgIW1ldGhvZCB8fCAhaG9va3NbbWV0aG9kXSB8fCB0eXBlb2YgaG9va3NbbWV0aG9kXSAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGNsZWFyIHRyYW5zYWN0aW9uIG5hbWUgd2hlbiBleGVjdXRpbmcgaG9va3MgKGV4Y2VwdCBjb21tYW5kIHN0YXJ0L2VuZCBob29rcylcclxuICAgICAgICAvLyBvdGhlcndpc2UgdGVzdCBzdGVwcyB3aWxsIGJlIG1lc3NlZCB1cC4gZS5nLiB0cmFuc2FjdGlvbiBmcm9tIGNhc2UgMSB3aWxsIGJlIHNob3duIGluIGNhc2UgMiwgZXRjLlxyXG4gICAgICAgIGlmIChbJ2JlZm9yZVRlc3QnLCAnYmVmb3JlU3VpdGUnLCAnYmVmb3JlQ2FzZScsICdhZnRlckNhc2UnLCAnYWZ0ZXJTdWl0ZScsICdhZnRlclRlc3QnXS5pbmNsdWRlcyhtZXRob2QpKSB7XHJcbiAgICAgICAgICAgIGdsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZ2xvYmFsLmNoYWlBbmRNb2NrZXJ5TG9hZGVkKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoYWkgPSByZXF1aXJlKCdjaGFpJyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtb2NrZXJ5ID0gcmVxdWlyZSgnbW9ja2VyeScpO1xyXG4gICAgICAgICAgICAgICAgbW9ja2VyeS5lbmFibGUoe1xyXG4gICAgICAgICAgICAgICAgICAgIHVzZUNsZWFuQ2FjaGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgd2Fybk9uUmVwbGFjZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgd2Fybk9uVW5yZWdpc3RlcmVkOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBtb2NrZXJ5LnJlZ2lzdGVyTW9jaygnY2hhaScsIGNoYWkpO1xyXG4gICAgICAgICAgICAgICAgZ2xvYmFsLmNoYWlBbmRNb2NrZXJ5TG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgYXdhaXQgaG9va3NbbWV0aG9kXS5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBIb29rIFwiJHttZXRob2R9XCIgaGFzIHRocm93biBhbiBlcnJvcjogJHtlLnRvU3RyaW5nKCl9YCk7XHJcbiAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBnZXRPeE1vZHVsZXNEaXI6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAnb3hfbW9kdWxlcycpO1xyXG4gICAgfSxcclxuXHJcbiAgICBob29rTG9ncyhsb2dnZXIpIHtcclxuICAgICAgICBjb25zdCBvcmlnbG9nID0gY29uc29sZS5sb2c7XHJcbiAgICAgICAgY29uc3Qgb3JpZ0RlYnVnID0gY29uc29sZS5kZWJ1ZztcclxuICAgICAgICBjb25zdCBvcmlnSW5mbyA9IGNvbnNvbGUuaW5mbztcclxuICAgICAgICBjb25zdCBvcmlnV2FybiA9IGNvbnNvbGUud2FybjtcclxuICAgICAgICBjb25zdCBvcmlnRXJyb3IgPSBjb25zb2xlLmVycm9yO1xyXG5cclxuICAgICAgICBjb25zdCBwcm9jZXNzQXJncyA9IChhcmd1bWVudEFycmF5KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBbXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChhcmd1bWVudEFycmF5ICYmIGFyZ3VtZW50QXJyYXkubWFwKSB7XHJcbiAgICAgICAgICAgICAgICBhcmd1bWVudEFycmF5Lm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYCR7aXRlbX1gKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChgJHt1dGlsLmluc3BlY3QoaXRlbSl9YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQuam9pbignICcpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nID0gZnVuY3Rpb24gKC4uLmFyZ3VtZW50QXJyYXkpIHtcclxuICAgICAgICAgICAgb3JpZ2xvZy5hcHBseSh0aGlzLCBhcmd1bWVudEFycmF5KTtcclxuICAgICAgICAgICAgbG9nZ2VyLmluZm8ocHJvY2Vzc0FyZ3MoYXJndW1lbnRBcnJheSkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc29sZS5kZWJ1ZyA9IGZ1bmN0aW9uICguLi5hcmd1bWVudEFycmF5KSB7XHJcbiAgICAgICAgICAgIG9yaWdEZWJ1Zy5hcHBseSh0aGlzLCBhcmd1bWVudEFycmF5KTtcclxuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKHByb2Nlc3NBcmdzKGFyZ3VtZW50QXJyYXkpKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnNvbGUuaW5mbyA9IGZ1bmN0aW9uICguLi5hcmd1bWVudEFycmF5KSB7XHJcbiAgICAgICAgICAgIG9yaWdJbmZvLmFwcGx5KHRoaXMsIGFyZ3VtZW50QXJyYXkpO1xyXG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhwcm9jZXNzQXJncyhhcmd1bWVudEFycmF5KSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zb2xlLndhcm4gPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRBcnJheSkge1xyXG4gICAgICAgICAgICBvcmlnV2Fybi5hcHBseSh0aGlzLCBhcmd1bWVudEFycmF5KTtcclxuICAgICAgICAgICAgbG9nZ2VyLndhcm4ocHJvY2Vzc0FyZ3MoYXJndW1lbnRBcnJheSkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc29sZS5lcnJvciA9IGZ1bmN0aW9uICguLi5hcmd1bWVudEFycmF5KSB7XHJcbiAgICAgICAgICAgIG9yaWdFcnJvci5hcHBseSh0aGlzLCBhcmd1bWVudEFycmF5KTtcclxuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHByb2Nlc3NBcmdzKGFyZ3VtZW50QXJyYXkpKTtcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlVHJhbnNhY3Rpb25GYWlsZWRJZlN0ZXBGYWlsZWQoc3RlcHMpIHtcclxuICAgICAgICBpZiAoc3RlcHMgJiYgc3RlcHMubGVuZ3RoICYmIHN0ZXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgbGV0IGxhc3RGaW5kZWRUcmFuc2FjdGlvbkluZGV4ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1N0ZXBzID0gWy4uLnN0ZXBzXTtcclxuICAgICAgICAgICAgc3RlcHMubWFwKChpdGVtLCBpZHgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLm5hbWUgJiYgaXRlbS5uYW1lLmluY2x1ZGVzICYmIGl0ZW0ubmFtZS5pbmNsdWRlcygnLnRyYW5zYWN0aW9uKCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdEZpbmRlZFRyYW5zYWN0aW9uSW5kZXggPSBpZHg7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBsYXN0RmluZGVkVHJhbnNhY3Rpb25JbmRleCA9PT0gJ251bWJlcicgJiYgaXRlbS5zdGF0dXMgJiYgaXRlbS5zdGF0dXMgPT09ICdmYWlsZWQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3U3RlcHNbbGFzdEZpbmRlZFRyYW5zYWN0aW9uSW5kZXhdWydzdGF0dXMnXSA9ICdmYWlsZWQnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBuZXdTdGVwcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdGVwcztcclxuICAgIH0sXHJcblxyXG4gICAgZGVjcnlwdCh0ZXh0KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IGVuY3J5cHRlZFRleHQgPSBCdWZmZXIuZnJvbSh0ZXh0LCAnaGV4Jyk7XHJcbiAgICAgICAgICAgIGxldCBkZWNpcGhlciA9IGNyeXB0by5jcmVhdGVEZWNpcGhlcml2KGFsZ29yaXRobSwga2V5LCBpdik7XHJcbiAgICAgICAgICAgIGxldCBkZWNyeXB0ZWQgPSBkZWNpcGhlci51cGRhdGUoZW5jcnlwdGVkVGV4dCk7XHJcbiAgICAgICAgICAgIGRlY3J5cHRlZCA9IEJ1ZmZlci5jb25jYXQoW2RlY3J5cHRlZCwgZGVjaXBoZXIuZmluYWwoKV0pO1xyXG4gICAgICAgICAgICBjb25zdCByZXRWYWwgPSBkZWNyeXB0ZWQudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEZWNyeXB0UmVzdWx0KHJldFZhbCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3h5Z2VuRXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLkNSWVBUT19FUlJPUiwgXCJUaGUgcHJvdmlkZWQgYXJndW1lbnQgZG9lc24ndCBzZWVtIHRvIGJlIGEgdmFsaWQgY2lwaGVyIHByb2R1Y2VkIGJ5ICd1dGlscy5lbmNyeXB0J1wiKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGVuY3J5cHQodGV4dCkge1xyXG4gICAgICAgIGxldCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYoYWxnb3JpdGhtLCBrZXksIGl2KTtcclxuICAgICAgICBsZXQgZW5jcnlwdGVkID0gY2lwaGVyLnVwZGF0ZSh0ZXh0KTtcclxuICAgICAgICBlbmNyeXB0ZWQgPSBCdWZmZXIuY29uY2F0KFtlbmNyeXB0ZWQsIGNpcGhlci5maW5hbCgpXSk7XHJcbiAgICAgICAgcmV0dXJuIGVuY3J5cHRlZC50b1N0cmluZygnaGV4Jyk7XHJcbiAgICB9LFxyXG5cclxuICAgIHNsZWVwOiBmdW5jdGlvbih0aW1lb3V0KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXQpKTtcclxuICAgIH0sXHJcblxyXG4gICAgZG93bmxvYWRWaWRlbzogYXN5bmMgZnVuY3Rpb24oZmlsZU5hbWUsIHZpZGVvVXJsLCBvcHRpb25zKSB7XHJcbiAgICAgICAgY29uc3QgbG9jYWxWaWRlb0ZpbGVQYXRoID0gZ2V0VmlkZW9BdHRhY2htZW50UGF0aChmaWxlTmFtZSwgb3B0aW9ucyk7XHJcbiAgICAgICAgbGV0IGVycm9yO1xyXG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxET1dOTE9BRF9SRVRSSUVTOyBpKyspIHtcclxuICAgICAgICAgICAgZXJyb3IgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGxvY2FsVmlkZW9GaWxlUGF0aCwgYXdhaXQgZG93bmxvYWQodmlkZW9VcmwpKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvciA9IGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXdhaXQgc2VsZi5zbGVlcChET1dOTE9BRF9SRVRSWV9XQUlUX1RJTUUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWVycm9yKSB7XHJcbiAgICAgICAgICAgIC8vIGRlbGV0ZSB0aGUgdmlkZW8gZmlsZSBmcm9tIHRoZSBzZXJ2ZXJcclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHVybDogdmlkZW9VcmwsXHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdERUxFVEUnLFxyXG4gICAgICAgICAgICAgICAganNvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdChvcHRpb25zLCAoZXJyLCByZXMsIGJvZHkpID0+IHsgcmVzb2x2ZShlcnIgPyBudWxsIDogbG9jYWxWaWRlb0ZpbGVQYXRoKTsgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdVbmFibGUgdG8gZGVsZXRlIHZpZGVvIGZpbGUgZnJvbSB0aGUgcmVtb3RlIHNlcnZlcjogJywgZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdVbmFibGUgdG8gZG93bmxvYWQgYW5kIHNhdmUgdmlkZW8gYXR0YWNobWVudDogJywgZXJyb3IubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxufTtcclxuIl19
|
|
378
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfT3h5Z2VuRXJyb3IiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9oZWxwZXIiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJwYXRoIiwiZnMiLCJtb21lbnQiLCJjcnlwdG8iLCJ1dGlsIiwicGFzc3dvcmQiLCJlbmNyeXB0aW9uS2V5Iiwia2V5Iiwic2NyeXB0U3luYyIsIml2IiwiQnVmZmVyIiwiYWxsb2MiLCJhbGdvcml0aG0iLCJkb3dubG9hZCIsInJlcXVlc3QiLCJEZWNyeXB0UmVzdWx0IiwicmVzdWx0IiwiZGVjcnlwdFJlc3VsdCIsImdldERlY3J5cHRSZXN1bHQiLCJEVU1NWV9IT09LUyIsImJlZm9yZVRlc3QiLCJiZWZvcmVTdWl0ZSIsImJlZm9yZUNhc2UiLCJiZWZvcmVDb21tYW5kIiwiYWZ0ZXJDb21tYW5kIiwiYWZ0ZXJUZXN0IiwiYWZ0ZXJTdWl0ZSIsImFmdGVyQ2FzZSIsIkNCX0FUVEFDSE1FTlRTX0RJUl9OQU1FIiwiRE9XTkxPQURfUkVUUklFUyIsIkRPV05MT0FEX1JFVFJZX1dBSVRfVElNRSIsImdldFZpZGVvQXR0YWNobWVudFBhdGgiLCJmaWxlTmFtZSIsIm9wdGlvbnMiLCJjd2QiLCJnZXRDd2QiLCJhdHRhY2htZW50c0RpclBhdGgiLCJqb2luIiwiZXhpc3RzU3luYyIsIm1rZGlyU3luYyIsInByb2Nlc3MiLCJyb290UGF0aCIsInRyaW0iLCJzZWxmIiwibW9kdWxlIiwiZXhwb3J0cyIsImdlbmVyYXRlVW5pcXVlSWQiLCJyYW5kb21CeXRlcyIsInRvU3RyaW5nIiwiZ2V0VGltZVN0YW1wIiwidXRjIiwidmFsdWVPZiIsImdlbmVyYXRlVGVzdFN1aXRlRnJvbUpzb24iLCJzdWl0ZURlZiIsInRlc3RDb25maWciLCJpdGVyYXRpb25Db3VudCIsInN1aXRlIiwiaWQiLCJuYW1lIiwiaXRlcmF0aW9ucyIsInN1aXRlRmlsZVBhdGgiLCJ0YXJnZXQiLCJwYXJhbU1hbmFnZXIiLCJnZXRQYXJhbWV0ZXJNYW5hZ2VyIiwicGFyYW1ldGVycyIsImdldE1vZGUiLCJyb3dzIiwiY2FwYWJpbGl0aWVzIiwiZW52aXJvbm1lbnQiLCJwYXJhbGxlbCIsImNvbmN1cnJlbmN5IiwiY2FzZXMiLCJmb3JFYWNoIiwiY2FzZURlZiIsInRjIiwiZ2V0RmlsZU5hbWVXaXRob3V0RXh0IiwicmVzb2x2ZVBhdGgiLCJmb3JtYXQiLCJwdXNoIiwiZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSlNGaWxlIiwiZmlsZVBhdGgiLCJwYXJhbUZpbGUiLCJwYXJhbU1vZGUiLCJub1BhcmFtQXV0b1NlYXJjaCIsImZpbGVOYW1lTm9FeHQiLCJ0ZXN0Y2FzZSIsInJlb3BlblNlc3Npb24iLCJkaXJuYW1lIiwiZmlsZSIsIm1vZGUiLCJtYWluRmlsZVBhdGgiLCJwYXJhbU9wdHMiLCJhdXRvU2VhcmNoIiwicGFyYW1GaWxlUGF0aCIsImlzQWJzb2x1dGUiLCJsb2FkUGFyYW1ldGVyTWFuYWdlciIsImdlbmVyYXRlVGVzdFN1aXRlRnJvbUpzb25GaWxlIiwiYmFzZW5hbWUiLCJmaWxlRXh0IiwiZXh0bmFtZSIsImZpbGVQYXRoTm9FeHQiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsIm1haW5GaWxlIiwiY3N2UGFyYW1GaWxlIiwidHh0UGFyYW1GaWxlIiwieGxzUGFyYW1GaWxlIiwieGxzeFBhcmFtRmlsZSIsImluaXQiLCJwYXRoVG9SZXNvbHZlIiwiYmFzZUZvbGRlciIsInJlc29sdmUiLCJtYWtlU2VyaWFsaXphYmxlIiwiZXJyIiwiZGVzdHJveUNpcmN1bGFyIiwiZnJvbSIsInNlZW4iLCJ0byIsIkFycmF5IiwiaXNBcnJheSIsIk9iamVjdCIsImtleXMiLCJpbmRleE9mIiwic2xpY2UiLCJnZXRNZXRob2RTaWduYXR1cmUiLCJtb2R1bGVOYW1lIiwibWV0aG9kTmFtZSIsIm1ldGhvZEFyZ3MiLCJzdHJpbmdpZnkiLCJhcmdzIiwiaW5kZW50YXRpb24iLCJTdHJpbmciLCJsZW5ndGgiLCJzdHIiLCJKU09OIiwidmFsdWUiLCJFcnJvciIsIlJlZ0V4cCIsInNvdXJjZSIsImZsYWdzIiwicmVwbGFjZSIsImVuZHNXaXRoIiwiY29uc29sZSIsIndhcm4iLCJpbnNwZWN0IiwiZGVwdGgiLCJpc0luRGVidWdNb2RlIiwibG9hZFRlc3RIb29rcyIsImhvb2tzIiwiZXhlY3V0ZVRlc3RIb29rIiwibWV0aG9kIiwiaW5jbHVkZXMiLCJnbG9iYWwiLCJfbGFzdFRyYW5zYWN0aW9uTmFtZSIsImNoYWlBbmRNb2NrZXJ5TG9hZGVkIiwiY2hhaSIsIm1vY2tlcnkiLCJlbmFibGUiLCJ1c2VDbGVhbkNhY2hlIiwid2Fybk9uUmVwbGFjZSIsIndhcm5PblVucmVnaXN0ZXJlZCIsInJlZ2lzdGVyTW9jayIsImFwcGx5IiwidW5kZWZpbmVkIiwiZXJyb3IiLCJnZXRPeE1vZHVsZXNEaXIiLCJfX2Rpcm5hbWUiLCJob29rTG9ncyIsImxvZ2dlciIsIm9yaWdsb2ciLCJsb2ciLCJvcmlnRGVidWciLCJkZWJ1ZyIsIm9yaWdJbmZvIiwiaW5mbyIsIm9yaWdXYXJuIiwib3JpZ0Vycm9yIiwicHJvY2Vzc0FyZ3MiLCJhcmd1bWVudEFycmF5IiwibWFwIiwiaXRlbSIsIm1ha2VUcmFuc2FjdGlvbkZhaWxlZElmU3RlcEZhaWxlZCIsInN0ZXBzIiwibGFzdEZpbmRlZFRyYW5zYWN0aW9uSW5kZXgiLCJuZXdTdGVwcyIsImlkeCIsInN0YXR1cyIsImRlY3J5cHQiLCJ0ZXh0IiwiZW5jcnlwdGVkVGV4dCIsImRlY2lwaGVyIiwiY3JlYXRlRGVjaXBoZXJpdiIsImRlY3J5cHRlZCIsInVwZGF0ZSIsImNvbmNhdCIsImZpbmFsIiwicmV0VmFsIiwiT3h5Z2VuRXJyb3IiLCJlcnJvckhlbHBlciIsImVycm9yQ29kZSIsIkNSWVBUT19FUlJPUiIsImVuY3J5cHQiLCJjaXBoZXIiLCJjcmVhdGVDaXBoZXJpdiIsImVuY3J5cHRlZCIsInNsZWVwIiwidGltZW91dCIsIlByb21pc2UiLCJzZXRUaW1lb3V0IiwiZG93bmxvYWRWaWRlbyIsInZpZGVvVXJsIiwibG9jYWxWaWRlb0ZpbGVQYXRoIiwiaSIsIndyaXRlRmlsZVN5bmMiLCJ1cmwiLCJqc29uIiwicmVqZWN0VW5hdXRob3JpemVkIiwicmVqZWN0IiwicmVzIiwiYm9keSIsIm1lc3NhZ2UiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3V0aWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogSGVscGVyIG1vZHVsZSBmb3IgaW50ZXJuYWwgT3h5Z2VuIHVzZVxyXG4gKi9cclxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcclxuY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xyXG5jb25zdCBtb21lbnQgPSByZXF1aXJlKCdtb21lbnQnKTtcclxuY29uc3QgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XHJcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XHJcbmNvbnN0IHBhc3N3b3JkID0gcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJykuZW5jcnlwdGlvbktleTtcclxuY29uc3Qga2V5ID0gY3J5cHRvLnNjcnlwdFN5bmMocGFzc3dvcmQsICdHZkcnLCAyNCk7XHJcbmNvbnN0IGl2ID0gQnVmZmVyLmFsbG9jKDE2LCAwKTtcclxuY29uc3QgYWxnb3JpdGhtID0gJ2Flcy0xOTItY2JjJztcclxuY29uc3QgZG93bmxvYWQgPSByZXF1aXJlKCdkb3dubG9hZCcpO1xyXG5jb25zdCByZXF1ZXN0ID0gcmVxdWlyZSgncmVxdWVzdCcpO1xyXG5cclxuaW1wb3J0IE94eWdlbkVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbmltcG9ydCBlcnJvckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxuXHJcbmZ1bmN0aW9uIERlY3J5cHRSZXN1bHQocmVzdWx0KSB7XHJcbiAgICBjb25zdCBkZWNyeXB0UmVzdWx0ID0gcmVzdWx0O1xyXG5cclxuICAgIHRoaXMuZ2V0RGVjcnlwdFJlc3VsdCA9ICgpID0+IHtcclxuICAgICAgICByZXR1cm4gZGVjcnlwdFJlc3VsdDtcclxuICAgIH07XHJcbn1cclxuXHJcbmNvbnN0IERVTU1ZX0hPT0tTID0ge1xyXG4gICAgYmVmb3JlVGVzdDogKCkgPT4ge30sXHJcbiAgICBiZWZvcmVTdWl0ZTogKCkgPT4ge30sXHJcbiAgICBiZWZvcmVDYXNlOiAoKSA9PiB7fSxcclxuICAgIGJlZm9yZUNvbW1hbmQ6ICgpID0+IHt9LFxyXG4gICAgYWZ0ZXJDb21tYW5kOiAoKSA9PiB7fSxcclxuICAgIGFmdGVyVGVzdDogKCkgPT4ge30sXHJcbiAgICBhZnRlclN1aXRlOiAoKSA9PiB7fSxcclxuICAgIGFmdGVyQ2FzZTogKCkgPT4ge30sXHJcbn07XHJcblxyXG5jb25zdCBDQl9BVFRBQ0hNRU5UU19ESVJfTkFNRSA9ICcuY2ItYXR0YWNobWVudHMnO1xyXG5jb25zdCBET1dOTE9BRF9SRVRSSUVTID0gNDA7XHJcbmNvbnN0IERPV05MT0FEX1JFVFJZX1dBSVRfVElNRSA9IDI1MDA7XHJcblxyXG5mdW5jdGlvbiBnZXRWaWRlb0F0dGFjaG1lbnRQYXRoKGZpbGVOYW1lLCBvcHRpb25zKSB7XHJcbiAgICBjb25zdCBjd2QgPSBnZXRDd2Qob3B0aW9ucyk7XHJcbiAgICBjb25zdCBhdHRhY2htZW50c0RpclBhdGggPSBwYXRoLmpvaW4oY3dkLCBDQl9BVFRBQ0hNRU5UU19ESVJfTkFNRSk7XHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoYXR0YWNobWVudHNEaXJQYXRoKSkge1xyXG4gICAgICAgIGZzLm1rZGlyU3luYyhhdHRhY2htZW50c0RpclBhdGgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBhdGguam9pbihhdHRhY2htZW50c0RpclBhdGgsIGZpbGVOYW1lKTtcclxufVxyXG5cclxuY29uc3QgZ2V0Q3dkID0gKG9wdGlvbnMpID0+IHtcclxuICAgIGxldCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xyXG5cclxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuY3dkKSB7XHJcbiAgICAgICAgY3dkID0gb3B0aW9ucy5jd2Q7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChvcHRpb25zICYmIG9wdGlvbnMucm9vdFBhdGgpIHtcclxuICAgICAgICBjd2QgPSBvcHRpb25zLnJvb3RQYXRoO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjd2QudHJpbSgpO1xyXG59O1xyXG5cclxudmFyIHNlbGYgPSBtb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBnZW5lcmF0ZVVuaXF1ZUlkOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gY3J5cHRvLnJhbmRvbUJ5dGVzKDQpLnRvU3RyaW5nKCdoZXgnKTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0VGltZVN0YW1wOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbW9tZW50LnV0YygpLnZhbHVlT2YoKTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbjogYXN5bmMgZnVuY3Rpb24oc3VpdGVEZWYsIHRlc3RDb25maWcsIGl0ZXJhdGlvbkNvdW50ID0gMSkge1xyXG4gICAgICAgIHZhciBzdWl0ZSA9IG5ldyByZXF1aXJlKCcuLi9tb2RlbC90ZXN0c3VpdGUuanMnKSgpO1xyXG4gICAgICAgIHN1aXRlLmlkID0gbnVsbDtcclxuICAgICAgICBzdWl0ZS5uYW1lID0gc3VpdGVEZWYubmFtZTtcclxuICAgICAgICBzdWl0ZS5pZCA9IHN1aXRlRGVmLmlkO1xyXG4gICAgICAgIHN1aXRlLml0ZXJhdGlvbkNvdW50ID0gc3VpdGVEZWYuaXRlcmF0aW9ucyB8fCBzdWl0ZURlZi5pdGVyYXRpb25Db3VudCB8fCB0ZXN0Q29uZmlnLml0ZXJhdGlvbnMgfHwgaXRlcmF0aW9uQ291bnQ7XHJcbiAgICAgICAgY29uc3Qgc3VpdGVGaWxlUGF0aCA9IHN1aXRlRGVmLnBhdGggfHwgcGF0aC5qb2luKHRlc3RDb25maWcudGFyZ2V0LmN3ZCwgJ3N1aXRlcycsIGAke3N1aXRlRGVmLm5hbWV9Lmpzb25gKTtcclxuICAgICAgICBzdWl0ZS5wYXJhbU1hbmFnZXIgPSBhd2FpdCBzZWxmLmdldFBhcmFtZXRlck1hbmFnZXIoc3VpdGVGaWxlUGF0aCwgdGVzdENvbmZpZy5wYXJhbWV0ZXJzLCB0ZXN0Q29uZmlnLnRhcmdldC5jd2QpO1xyXG4gICAgICAgIGlmIChzdWl0ZS5wYXJhbU1hbmFnZXIgJiYgc3VpdGUucGFyYW1NYW5hZ2VyLmdldE1vZGUoKSA9PSAnYWxsJykge1xyXG4gICAgICAgICAgICBzdWl0ZS5pdGVyYXRpb25Db3VudCA9IHN1aXRlLnBhcmFtTWFuYWdlci5yb3dzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzdWl0ZS5jYXBhYmlsaXRpZXMgPSBzdWl0ZURlZi5jYXBhYmlsaXRpZXMgfHwgdGVzdENvbmZpZy5jYXBhYmlsaXRpZXMgfHwge307XHJcbiAgICAgICAgc3VpdGUuZW52aXJvbm1lbnQgPSB0ZXN0Q29uZmlnLmVudmlyb25tZW50IHx8IG51bGw7XHJcbiAgICAgICAgc3VpdGUub3B0aW9ucyA9IHRlc3RDb25maWcub3B0aW9ucyB8fCBudWxsO1xyXG4gICAgICAgIHN1aXRlLnBhcmFsbGVsID0gc3VpdGVEZWYucGFyYWxsZWwgfHwgdGVzdENvbmZpZy5wYXJhbGxlbCB8fCB0ZXN0Q29uZmlnLmNvbmN1cnJlbmN5IHx8IDE7XHJcbiAgICAgICAgLy8gaW5pdGlhbGl6ZSBlYWNoIHRlc3QgY2FzZVxyXG4gICAgICAgIHN1aXRlRGVmLmNhc2VzLmZvckVhY2goY2FzZURlZiA9PiB7XHJcbiAgICAgICAgICAgIC8vIGluaXRpYWxpemUgdGVzdGNhc2Ugb2JqZWN0XHJcbiAgICAgICAgICAgIGNvbnN0IHRjID0gbmV3IHJlcXVpcmUoJy4uL21vZGVsL3Rlc3RjYXNlLmpzJykoKTtcclxuICAgICAgICAgICAgaWYgKGNhc2VEZWYubmFtZSlcclxuICAgICAgICAgICAgICAgIHRjLm5hbWUgPSBjYXNlRGVmLm5hbWU7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRjLm5hbWUgPSBzZWxmLmdldEZpbGVOYW1lV2l0aG91dEV4dChjYXNlRGVmLnBhdGgpO1xyXG4gICAgICAgICAgICB0Yy5wYXRoID0gc2VsZi5yZXNvbHZlUGF0aChjYXNlRGVmLnBhdGgsIHRlc3RDb25maWcudGFyZ2V0LmN3ZCk7XHJcbiAgICAgICAgICAgIHRjLmZvcm1hdCA9ICdqcyc7XHJcbiAgICAgICAgICAgIHRjLml0ZXJhdGlvbkNvdW50ID0gY2FzZURlZi5pdGVyYXRpb25zIHx8IGNhc2VEZWYuaXRlcmF0aW9uQ291bnQgfHwgMTtcclxuICAgICAgICAgICAgc3VpdGUuY2FzZXMucHVzaCh0Yyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHN1aXRlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZW5lcmF0ZVRlc3RTdWl0ZUZyb21KU0ZpbGU6IGFzeW5jIGZ1bmN0aW9uIChmaWxlUGF0aCwgcGFyYW1GaWxlID0gbnVsbCwgcGFyYW1Nb2RlID0gbnVsbCwgbm9QYXJhbUF1dG9TZWFyY2ggPSB0cnVlLCBpdGVyYXRpb25Db3VudCA9IDEpIHtcclxuICAgICAgICB2YXIgZmlsZU5hbWVOb0V4dCA9IHNlbGYuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KGZpbGVQYXRoKTtcclxuXHJcbiAgICAgICAgdmFyIHRlc3RjYXNlID0gbmV3IHJlcXVpcmUoJy4uL21vZGVsL3Rlc3RjYXNlLmpzJykoKTtcclxuICAgICAgICB0ZXN0Y2FzZS5uYW1lID0gZmlsZU5hbWVOb0V4dDtcclxuICAgICAgICB0ZXN0Y2FzZS5wYXRoID0gZmlsZVBhdGg7XHJcbiAgICAgICAgdGVzdGNhc2UuZm9ybWF0ID0gJ2pzJztcclxuICAgICAgICB0ZXN0Y2FzZS5pdGVyYXRpb25Db3VudCA9IDE7XHJcblxyXG4gICAgICAgIHZhciBzdWl0ZSA9IG5ldyByZXF1aXJlKCcuLi9tb2RlbC90ZXN0c3VpdGUuanMnKSgpO1xyXG4gICAgICAgIHN1aXRlLm5hbWUgPSB0ZXN0Y2FzZS5uYW1lO1xyXG4gICAgICAgIHN1aXRlLmlkID0gdGVzdGNhc2UuaWQ7XHJcbiAgICAgICAgc3VpdGUuaXRlcmF0aW9uQ291bnQgPSBpdGVyYXRpb25Db3VudDtcclxuICAgICAgICBzdWl0ZS5jYXNlcy5wdXNoKHRlc3RjYXNlKTtcclxuICAgICAgICBpZiAodGVzdGNhc2UucmVvcGVuU2Vzc2lvbikge1xyXG4gICAgICAgICAgICBzdWl0ZS5yZW9wZW5TZXNzaW9uID0gdGVzdGNhc2UucmVvcGVuU2Vzc2lvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3dkID0gcGF0aC5kaXJuYW1lKGZpbGVQYXRoKTtcclxuICAgICAgICBzdWl0ZS5wYXJhbU1hbmFnZXIgPSBhd2FpdCBzZWxmLmdldFBhcmFtZXRlck1hbmFnZXIoZmlsZVBhdGgsIHsgZmlsZTogcGFyYW1GaWxlLCBtb2RlOiBwYXJhbU1vZGUgfSwgY3dkKTtcclxuICAgICAgICAvLyBpZiBwYXJhbWV0ZXIgcmVhZGluZyBtb2RlIGlzICdhbGwnIHRoZW4gY2hhbmdlIGl0ZXJhdGlvbkNvdW50IHRvIHRoZSBhbW91bnQgb2Ygcm93cyBpbiB0aGUgcGFyYW0gZmlsZVxyXG4gICAgICAgIGlmIChzdWl0ZS5wYXJhbU1hbmFnZXIgJiYgcGFyYW1Nb2RlID09ICdhbGwnKSB7XHJcbiAgICAgICAgICAgIHN1aXRlLml0ZXJhdGlvbkNvdW50ID0gc3VpdGUucGFyYW1NYW5hZ2VyLnJvd3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdWl0ZTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0UGFyYW1ldGVyTWFuYWdlcjogYXN5bmMgZnVuY3Rpb24obWFpbkZpbGVQYXRoLCBwYXJhbU9wdHMgPSBudWxsLCBjd2QgPSBudWxsLCBhdXRvU2VhcmNoID0gdHJ1ZSkge1xyXG4gICAgICAgIGxldCBwYXJhbUZpbGVQYXRoID0gcGFyYW1PcHRzICYmIHBhcmFtT3B0cy5maWxlID8gcGFyYW1PcHRzLmZpbGUgOiBudWxsO1xyXG4gICAgICAgIGxldCBwYXJhbU1vZGUgPSBwYXJhbU9wdHMgJiYgcGFyYW1PcHRzLm1vZGUgPyBwYXJhbU9wdHMubW9kZSA6ICdzZXEnO1xyXG5cclxuICAgICAgICBpZiAocGFyYW1GaWxlUGF0aCAmJiBjd2QgJiYgIXBhdGguaXNBYnNvbHV0ZShwYXJhbUZpbGVQYXRoKSkge1xyXG4gICAgICAgICAgICBwYXJhbUZpbGVQYXRoID0gcGF0aC5qb2luKGN3ZCwgcGFyYW1GaWxlUGF0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYXdhaXQgc2VsZi5sb2FkUGFyYW1ldGVyTWFuYWdlcihtYWluRmlsZVBhdGgsIHBhcmFtRmlsZVBhdGgsIHBhcmFtTW9kZSwgYXV0b1NlYXJjaCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGdlbmVyYXRlVGVzdFN1aXRlRnJvbUpzb25GaWxlOiBhc3luYyBmdW5jdGlvbiAoZmlsZVBhdGgsIHBhcmFtRmlsZSwgcGFyYW1Nb2RlID0gbnVsbCwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgY29uc3QgdGVzdENvbmZpZyA9IHtcclxuICAgICAgICAgICAgLi4ub3B0aW9ucyB8fCB7fSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChwYXJhbUZpbGUpIHtcclxuICAgICAgICAgICAgdGVzdENvbmZpZy5wYXJhbWV0ZXJzID0ge1xyXG4gICAgICAgICAgICAgICAgZmlsZTogcGFyYW1GaWxlLFxyXG4gICAgICAgICAgICAgICAgbW9kZTogcGFyYW1Nb2RlLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXdhaXQgc2VsZi5nZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uKHJlcXVpcmUoZmlsZVBhdGgpLCB0ZXN0Q29uZmlnKTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0RmlsZU5hbWVXaXRob3V0RXh0OiBmdW5jdGlvbiAoZmlsZVBhdGgpIHtcclxuICAgICAgICB2YXIgZmlsZU5hbWUgPSBwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKTtcclxuICAgICAgICB2YXIgZmlsZUV4dCA9IHBhdGguZXh0bmFtZShmaWxlUGF0aCk7XHJcbiAgICAgICAgdmFyIGZpbGVQYXRoTm9FeHQgPSBmaWxlTmFtZS5zdWJzdHJpbmcoMCwgZmlsZU5hbWUubGFzdEluZGV4T2YoZmlsZUV4dCkpO1xyXG4gICAgICAgIHJldHVybiBmaWxlUGF0aE5vRXh0O1xyXG4gICAgfSxcclxuXHJcbiAgICBsb2FkUGFyYW1ldGVyTWFuYWdlcjogYXN5bmMgZnVuY3Rpb24obWFpbkZpbGUsIHBhcmFtRmlsZSwgcGFyYW1Nb2RlLCBhdXRvU2VhcmNoID0gZmFsc2UpIHtcclxuICAgICAgICB2YXIgcGFyYW1NYW5hZ2VyID0gbnVsbDtcclxuICAgICAgICAvLyBpZiBwYXJhbSBmaWxlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZW4gY2hlY2sgaWYgSlMgZmlsZSBpcyBjb21pbmcgaW4gcGFpciB3aXRoIGEgcGFyYW1ldGVyIGZpbGUgXHJcbiAgICAgICAgLy8gKGN1cnJlbnRseSBzdXBwb3J0aW5nIENTViBvciBUWFQpXHJcbiAgICAgICAgaWYgKCFwYXJhbUZpbGUgJiYgYXV0b1NlYXJjaCkge1xyXG4gICAgICAgICAgICB2YXIgZmlsZU5hbWVOb0V4dCA9IHNlbGYuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KG1haW5GaWxlKTtcclxuICAgICAgICAgICAgdmFyIGNzdlBhcmFtRmlsZSA9IHBhdGguam9pbihwYXRoLmRpcm5hbWUobWFpbkZpbGUpLCBmaWxlTmFtZU5vRXh0ICsgJy5jc3YnKTtcclxuICAgICAgICAgICAgdmFyIHR4dFBhcmFtRmlsZSA9IHBhdGguam9pbihwYXRoLmRpcm5hbWUobWFpbkZpbGUpLCBmaWxlTmFtZU5vRXh0ICsgJy50eHQnKTtcclxuICAgICAgICAgICAgdmFyIHhsc1BhcmFtRmlsZSA9IHBhdGguam9pbihwYXRoLmRpcm5hbWUobWFpbkZpbGUpLCBmaWxlTmFtZU5vRXh0ICsgJy54bHMnKTtcclxuICAgICAgICAgICAgdmFyIHhsc3hQYXJhbUZpbGUgPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKG1haW5GaWxlKSwgZmlsZU5hbWVOb0V4dCArICcueGxzeCcpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoY3N2UGFyYW1GaWxlKSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1GaWxlID0gY3N2UGFyYW1GaWxlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZzLmV4aXN0c1N5bmModHh0UGFyYW1GaWxlKSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1GaWxlID0gdHh0UGFyYW1GaWxlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZzLmV4aXN0c1N5bmMoeGxzUGFyYW1GaWxlKSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1GaWxlID0geGxzUGFyYW1GaWxlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZzLmV4aXN0c1N5bmMoeGxzeFBhcmFtRmlsZSkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtRmlsZSA9IHhsc3hQYXJhbUZpbGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcmFtRmlsZSkge1xyXG4gICAgICAgICAgICBwYXJhbU1hbmFnZXIgPSBuZXcgcmVxdWlyZSgnLi9wYXJhbS1tYW5hZ2VyJykocGFyYW1GaWxlLCBwYXJhbU1vZGUgfHwgJ3NlcScpO1xyXG4gICAgICAgICAgICBhd2FpdCBwYXJhbU1hbmFnZXIuaW5pdCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcGFyYW1NYW5hZ2VyO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgcmVzb2x2ZVBhdGg6IGZ1bmN0aW9uKHBhdGhUb1Jlc29sdmUsIGJhc2VGb2xkZXIpIHtcclxuICAgICAgICBpZiAocGF0aC5pc0Fic29sdXRlKHBhdGhUb1Jlc29sdmUpKVxyXG4gICAgICAgICAgICByZXR1cm4gcGF0aFRvUmVzb2x2ZTtcclxuICAgICAgICByZXR1cm4gcGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIHBhdGhUb1Jlc29sdmUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlU2VyaWFsaXphYmxlOiBmdW5jdGlvbihlcnIpIHtcclxuICAgICAgICBpZiAodHlwZW9mIGVyciA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRlc3Ryb3lDaXJjdWxhcihlcnIsIFtdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGVycjtcclxuXHJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2pvbnBhY2tlci9kZXN0cm95LWNpcmN1bGFyXHJcbiAgICAgICAgZnVuY3Rpb24gZGVzdHJveUNpcmN1bGFyKGZyb20sIHNlZW4pIHtcclxuICAgICAgICAgICAgdmFyIHRvID0gQXJyYXkuaXNBcnJheShmcm9tKSA/IFtdIDoge307XHJcbiAgICAgICAgICAgIHNlZW4ucHVzaChmcm9tKTtcclxuICAgICAgICAgICAgT2JqZWN0LmtleXMoZnJvbSkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcclxuICAgICAgICAgICAgICAgIGlmICghZnJvbVtrZXldIHx8ICh0eXBlb2YgZnJvbVtrZXldICE9ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGZyb21ba2V5XSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG9ba2V5XSA9IGZyb21ba2V5XTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Vlbi5pbmRleE9mKGZyb21ba2V5XSkgPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0b1trZXldID0gZGVzdHJveUNpcmN1bGFyKGZyb21ba2V5XSwgc2Vlbi5zbGljZSgwKSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgdG9ba2V5XSA9ICdbQ2lyY3VsYXJdJztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0bztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGdldE1ldGhvZFNpZ25hdHVyZTogZnVuY3Rpb24obW9kdWxlTmFtZSwgbWV0aG9kTmFtZSwgbWV0aG9kQXJncykge1xyXG4gICAgICAgIHJldHVybiBtb2R1bGVOYW1lICsgJy4nICsgbWV0aG9kTmFtZSArICcoJyArIHNlbGYuc3RyaW5naWZ5KG1ldGhvZEFyZ3MsIDApICsgJyknO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKlxyXG4gICAgICogVXNlZCB0byBzZXJpYWxpemUgb3h5Z2VuIGNvbW1hbmQgcGFyYW1ldGVycy4gUHJvZHVjZXMgYSBub24tY29tcGxpYW50IEpTT04gc2VyaWFsaXphdGlvbi5cclxuICAgICAqL1xyXG4gICAgc3RyaW5naWZ5OiBmdW5jdGlvbiAoYXJncywgaW5kZW50YXRpb24gPSAwKSB7XHJcbiAgICAgICAgLy8gcmV0dXJuIHN0cmluZ3MgYXMgaXMgKG90aGVyd2lzZSBpZiB3ZSBzZXJpYWxpemUgc3RyaW5nIGl0IHdpbGwgZ2V0IHdyYXBwZWQgaW4gZG91YmxlIHF1b3RlcylcclxuICAgICAgICBpZiAodHlwZW9mIGFyZ3MgPT09ICdzdHJpbmcnIHx8IGFyZ3MgaW5zdGFuY2VvZiBTdHJpbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XHJcbiAgICAgICAgfSBlbHNlIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiAodHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnIHx8IGFyZ3NbMF0gaW5zdGFuY2VvZiBTdHJpbmcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhcmdzWzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHN0cjtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBzdHIgPSBKU09OLnN0cmluZ2lmeShhcmdzLCAoa2V5LCB2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHsgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0dvb2dsZUNocm9tZUxhYnMvanNiaS9pc3N1ZXMvMzBcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZiB1bmRlZmluZWQgaXMgaW5zaWRlIGFuIGFycmF5IHRoZW4gaXQgd2lsbCBiZSBzZXJpYWxpemVkIGFzIG51bGwuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaG93ZXZlciBpZiB3ZSBqdXN0IHJldHVybiAndW5kZWZpbmVkJyBoZXJlIGFzIHN0cmluZywgaXQgd2lsbCBiZSBlbmNsb3NlZCBpbiBxdW90ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc28gcmV0dXJuIG1hZ2ljIHN0cmluZyBpbnN0ZWFkIGFuZCB0cmltIHRoZSBxdW90ZXMgbGF0ZXIgb25cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ19fVU5ERUZJTkVEJztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnLycgKyB2YWx1ZS5zb3VyY2UgKyAnLycgKyB2YWx1ZS5mbGFncztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICAgICAgfSwgaW5kZW50YXRpb24pO1xyXG4gICAgICAgICAgICAvLyB0cmltIHRoZSBlbmNsb3NpbmcgYXJyYXkgYW5kIGFueSB3aGl0ZXNwYWNlXHJcbiAgICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9eXFxbezF9XFxzKnxcXHMqXFxdezF9JC9nLCAnJyk7XHJcbiAgICAgICAgICAgIC8vIHJlbW92ZSBzcGFjZSBiZWZvcmUgbGFzdCB9IGFuZCBdLCB0byBtYWtlIGluZGVudGF0aW9uIG10Y2ggdGhlIG9wZW5pbmcgYnJhY2tldFxyXG4gICAgICAgICAgICBpZiAoc3RyLmVuZHNXaXRoKCcgIH0nKSkge1xyXG4gICAgICAgICAgICAgICAgc3RyID0gc3RyLnN1YnN0cmluZygwLCBzdHIubGVuZ3RoIC0gMykgKyAnfSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHN0ci5lbmRzV2l0aCgnICBdJykpIHtcclxuICAgICAgICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMCwgc3RyLmxlbmd0aCAtIDMpICsgJ10nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGNvbnZlcnQgbWFnaWMgJ3VuZGVmaW5lZCcgc3RyaW5nIHRvIHByb3BlciByZXByZXNlbnRhdGlvblxyXG4gICAgICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXCJfX1VOREVGSU5FRFwiL2csICd1bmRlZmluZWQnKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIHNlcmlhbGl6ZSBjb21tYW5kIGFyZ3VtZW50czogJywgZSk7XHJcbiAgICAgICAgICAgIC8vIGlmIEpTT04uc3RyaW5naWZ5IGZhaWxzLCB0aGVuIGZhbGxiYWNrIHRvIHV0aWwuaW5zcGVjdC5cclxuICAgICAgICAgICAgLy8gKHdlIGRvbid0IHVzZSB1dGlsLmluc3BlY3QgaW5pdGlhbHkgYmVjYXVzZSBpdCBkb2Vzbid0IHN1cHBvcnQgb3V0cHV0IGluZGVudGF0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm4gdXRpbC5pbnNwZWN0KGFyZ3NbMF0sIHsgZGVwdGg6IDMgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdHI7XHJcbiAgICB9LFxyXG5cclxuICAgIGlzSW5EZWJ1Z01vZGU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIC8vIHRoaXMgYWx3YXlzIHRydWU7XHJcbiAgICAgICAgLy8gY29uc3QgYXJndiA9IHByb2Nlc3MuZXhlY0FyZ3Yuam9pbigpO1xyXG5cclxuICAgICAgICAvLyBjb25zb2xlLmxvZygncHJvY2Vzcy5kZWJ1Z1BvcnQnLCBwcm9jZXNzLmRlYnVnUG9ydCk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJhcmd2LmluY2x1ZGVzKCdpbnNwZWN0JylcIiwgYXJndi5pbmNsdWRlcygnaW5zcGVjdCcpKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImFyZ3YuaW5jbHVkZXMoJ2luc3BlY3QtYnJrJylcIiwgYXJndi5pbmNsdWRlcygnaW5zcGVjdC1icmsnKSk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJhcmd2LmluY2x1ZGVzKCdkZWJ1ZycpXCIsIGFyZ3YuaW5jbHVkZXMoJ2RlYnVnJykpO1xyXG5cclxuICAgICAgICAvLyByZXR1cm4gcHJvY2Vzcy5kZWJ1Z1BvcnQgfHwgYXJndi5pbmNsdWRlcygnaW5zcGVjdCcpIHx8IGFyZ3YuaW5jbHVkZXMoJ2luc3BlY3QtYnJrJykgfHwgYXJndi5pbmNsdWRlcygnZGVidWcnKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICBsb2FkVGVzdEhvb2tzOiBmdW5jdGlvbihvcHRpb25zKSB7XHJcbiAgICAgICAgbGV0IGhvb2tzID0gRFVNTVlfSE9PS1M7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy50YXJnZXQgJiYgb3B0aW9ucy50YXJnZXQubmFtZSA9PT0gJ294eWdlbi5jb25mJykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaG9va3MgPSByZXF1aXJlKG9wdGlvbnMudGFyZ2V0LnBhdGgpLmhvb2tzIHx8IERVTU1ZX0hPT0tTO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0Vycm9yIGxvYWRpbmcgdXNlciBob29rczonLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaG9va3M7XHJcbiAgICB9LFxyXG5cclxuICAgIGV4ZWN1dGVUZXN0SG9vazogYXN5bmMgZnVuY3Rpb24oaG9va3MsIG1ldGhvZCwgYXJncykge1xyXG4gICAgICAgIC8vIGlmIGhvb2sgaXMgbm90IGRlZmluZWQsIGp1c3QgcXVpZXRseSBpZ25vcmUgaXRcclxuICAgICAgICBpZiAoIWhvb2tzIHx8ICFtZXRob2QgfHwgIWhvb2tzW21ldGhvZF0gfHwgdHlwZW9mIGhvb2tzW21ldGhvZF0gIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBjbGVhciB0cmFuc2FjdGlvbiBuYW1lIHdoZW4gZXhlY3V0aW5nIGhvb2tzIChleGNlcHQgY29tbWFuZCBzdGFydC9lbmQgaG9va3MpXHJcbiAgICAgICAgLy8gb3RoZXJ3aXNlIHRlc3Qgc3RlcHMgd2lsbCBiZSBtZXNzZWQgdXAuIGUuZy4gdHJhbnNhY3Rpb24gZnJvbSBjYXNlIDEgd2lsbCBiZSBzaG93biBpbiBjYXNlIDIsIGV0Yy5cclxuICAgICAgICBpZiAoWydiZWZvcmVUZXN0JywgJ2JlZm9yZVN1aXRlJywgJ2JlZm9yZUNhc2UnLCAnYWZ0ZXJDYXNlJywgJ2FmdGVyU3VpdGUnLCAnYWZ0ZXJUZXN0J10uaW5jbHVkZXMobWV0aG9kKSkge1xyXG4gICAgICAgICAgICBnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGdsb2JhbC5jaGFpQW5kTW9ja2VyeUxvYWRlZCkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGFpID0gcmVxdWlyZSgnY2hhaScpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9ja2VyeSA9IHJlcXVpcmUoJ21vY2tlcnknKTtcclxuICAgICAgICAgICAgICAgIG1vY2tlcnkuZW5hYmxlKHtcclxuICAgICAgICAgICAgICAgICAgICB1c2VDbGVhbkNhY2hlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHdhcm5PblJlcGxhY2U6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHdhcm5PblVucmVnaXN0ZXJlZDogZmFsc2VcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgbW9ja2VyeS5yZWdpc3Rlck1vY2soJ2NoYWknLCBjaGFpKTtcclxuICAgICAgICAgICAgICAgIGdsb2JhbC5jaGFpQW5kTW9ja2VyeUxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGF3YWl0IGhvb2tzW21ldGhvZF0uYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgSG9vayBcIiR7bWV0aG9kfVwiIGhhcyB0aHJvd24gYW4gZXJyb3I6ICR7ZS50b1N0cmluZygpfWApO1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0T3hNb2R1bGVzRGlyOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJ294X21vZHVsZXMnKTtcclxuICAgIH0sXHJcblxyXG4gICAgaG9va0xvZ3MobG9nZ2VyKSB7XHJcbiAgICAgICAgY29uc3Qgb3JpZ2xvZyA9IGNvbnNvbGUubG9nO1xyXG4gICAgICAgIGNvbnN0IG9yaWdEZWJ1ZyA9IGNvbnNvbGUuZGVidWc7XHJcbiAgICAgICAgY29uc3Qgb3JpZ0luZm8gPSBjb25zb2xlLmluZm87XHJcbiAgICAgICAgY29uc3Qgb3JpZ1dhcm4gPSBjb25zb2xlLndhcm47XHJcbiAgICAgICAgY29uc3Qgb3JpZ0Vycm9yID0gY29uc29sZS5lcnJvcjtcclxuXHJcbiAgICAgICAgY29uc3QgcHJvY2Vzc0FyZ3MgPSAoYXJndW1lbnRBcnJheSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gW107XHJcblxyXG4gICAgICAgICAgICBpZiAoYXJndW1lbnRBcnJheSAmJiBhcmd1bWVudEFycmF5Lm1hcCkge1xyXG4gICAgICAgICAgICAgICAgYXJndW1lbnRBcnJheS5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGAke2l0ZW19YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYCR7dXRpbC5pbnNwZWN0KGl0ZW0pfWApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LmpvaW4oJyAnKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyA9IGZ1bmN0aW9uICguLi5hcmd1bWVudEFycmF5KSB7XHJcbiAgICAgICAgICAgIG9yaWdsb2cuYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKHByb2Nlc3NBcmdzKGFyZ3VtZW50QXJyYXkpKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnNvbGUuZGVidWcgPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRBcnJheSkge1xyXG4gICAgICAgICAgICBvcmlnRGVidWcuYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1Zyhwcm9jZXNzQXJncyhhcmd1bWVudEFycmF5KSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zb2xlLmluZm8gPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRBcnJheSkge1xyXG4gICAgICAgICAgICBvcmlnSW5mby5hcHBseSh0aGlzLCBhcmd1bWVudEFycmF5KTtcclxuICAgICAgICAgICAgbG9nZ2VyLmluZm8ocHJvY2Vzc0FyZ3MoYXJndW1lbnRBcnJheSkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc29sZS53YXJuID0gZnVuY3Rpb24gKC4uLmFyZ3VtZW50QXJyYXkpIHtcclxuICAgICAgICAgICAgb3JpZ1dhcm4uYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci53YXJuKHByb2Nlc3NBcmdzKGFyZ3VtZW50QXJyYXkpKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IgPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRBcnJheSkge1xyXG4gICAgICAgICAgICBvcmlnRXJyb3IuYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihwcm9jZXNzQXJncyhhcmd1bWVudEFycmF5KSk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgbWFrZVRyYW5zYWN0aW9uRmFpbGVkSWZTdGVwRmFpbGVkKHN0ZXBzKSB7XHJcbiAgICAgICAgaWYgKHN0ZXBzICYmIHN0ZXBzLmxlbmd0aCAmJiBzdGVwcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBsYXN0RmluZGVkVHJhbnNhY3Rpb25JbmRleCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdTdGVwcyA9IFsuLi5zdGVwc107XHJcbiAgICAgICAgICAgIHN0ZXBzLm1hcCgoaXRlbSwgaWR4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5uYW1lICYmIGl0ZW0ubmFtZS5pbmNsdWRlcyAmJiBpdGVtLm5hbWUuaW5jbHVkZXMoJy50cmFuc2FjdGlvbignKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhc3RGaW5kZWRUcmFuc2FjdGlvbkluZGV4ID0gaWR4O1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbGFzdEZpbmRlZFRyYW5zYWN0aW9uSW5kZXggPT09ICdudW1iZXInICYmIGl0ZW0uc3RhdHVzICYmIGl0ZW0uc3RhdHVzID09PSAnZmFpbGVkJykge1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1N0ZXBzW2xhc3RGaW5kZWRUcmFuc2FjdGlvbkluZGV4XVsnc3RhdHVzJ10gPSAnZmFpbGVkJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbmV3U3RlcHM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc3RlcHM7XHJcbiAgICB9LFxyXG5cclxuICAgIGRlY3J5cHQodGV4dCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCBlbmNyeXB0ZWRUZXh0ID0gQnVmZmVyLmZyb20odGV4dCwgJ2hleCcpO1xyXG4gICAgICAgICAgICBsZXQgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdihhbGdvcml0aG0sIGtleSwgaXYpO1xyXG4gICAgICAgICAgICBsZXQgZGVjcnlwdGVkID0gZGVjaXBoZXIudXBkYXRlKGVuY3J5cHRlZFRleHQpO1xyXG4gICAgICAgICAgICBkZWNyeXB0ZWQgPSBCdWZmZXIuY29uY2F0KFtkZWNyeXB0ZWQsIGRlY2lwaGVyLmZpbmFsKCldKTtcclxuICAgICAgICAgICAgY29uc3QgcmV0VmFsID0gZGVjcnlwdGVkLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGVjcnlwdFJlc3VsdChyZXRWYWwpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94eWdlbkVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5DUllQVE9fRVJST1IsIFwiVGhlIHByb3ZpZGVkIGFyZ3VtZW50IGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHZhbGlkIGNpcGhlciBwcm9kdWNlZCBieSAndXRpbHMuZW5jcnlwdCdcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBlbmNyeXB0KHRleHQpIHtcclxuICAgICAgICBsZXQgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KGFsZ29yaXRobSwga2V5LCBpdik7XHJcbiAgICAgICAgbGV0IGVuY3J5cHRlZCA9IGNpcGhlci51cGRhdGUodGV4dCk7XHJcbiAgICAgICAgZW5jcnlwdGVkID0gQnVmZmVyLmNvbmNhdChbZW5jcnlwdGVkLCBjaXBoZXIuZmluYWwoKV0pO1xyXG4gICAgICAgIHJldHVybiBlbmNyeXB0ZWQudG9TdHJpbmcoJ2hleCcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzbGVlcDogZnVuY3Rpb24odGltZW91dCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0KSk7XHJcbiAgICB9LFxyXG5cclxuICAgIGRvd25sb2FkVmlkZW86IGFzeW5jIGZ1bmN0aW9uKGZpbGVOYW1lLCB2aWRlb1VybCwgb3B0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IGxvY2FsVmlkZW9GaWxlUGF0aCA9IGdldFZpZGVvQXR0YWNobWVudFBhdGgoZmlsZU5hbWUsIG9wdGlvbnMpO1xyXG4gICAgICAgIGxldCBlcnJvcjtcclxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8RE9XTkxPQURfUkVUUklFUzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGVycm9yID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhsb2NhbFZpZGVvRmlsZVBhdGgsIGF3YWl0IGRvd25sb2FkKHZpZGVvVXJsKSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgZXJyb3IgPSBlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGF3YWl0IHNlbGYuc2xlZXAoRE9XTkxPQURfUkVUUllfV0FJVF9USU1FKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFlcnJvcikge1xyXG4gICAgICAgICAgICAvLyBkZWxldGUgdGhlIHZpZGVvIGZpbGUgZnJvbSB0aGUgc2VydmVyXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICB1cmw6IHZpZGVvVXJsLFxyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnREVMRVRFJyxcclxuICAgICAgICAgICAgICAgIGpzb246IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZSxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3Qob3B0aW9ucywgKGVyciwgcmVzLCBib2R5KSA9PiB7IHJlc29sdmUoZXJyID8gbnVsbCA6IGxvY2FsVmlkZW9GaWxlUGF0aCk7IH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5hYmxlIHRvIGRlbGV0ZSB2aWRlbyBmaWxlIGZyb20gdGhlIHJlbW90ZSBzZXJ2ZXI6ICcsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5hYmxlIHRvIGRvd25sb2FkIGFuZCBzYXZlIHZpZGVvIGF0dGFjaG1lbnQ6ICcsIGVycm9yLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbn07XHJcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBd0JBLElBQUFBLFlBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUEyQyxTQUFBRCx1QkFBQUcsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQWIzQyxNQUFNRyxJQUFJLEdBQUdMLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDNUIsTUFBTU0sRUFBRSxHQUFHTixPQUFPLENBQUMsSUFBSSxDQUFDO0FBQ3hCLE1BQU1PLE1BQU0sR0FBR1AsT0FB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
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
require("source-map-support/register");
|
|
4
|
-
|
|
5
4
|
module.exports = function () {
|
|
6
5
|
return {
|
|
7
6
|
name: null,
|
|
@@ -20,4 +19,4 @@ module.exports = function () {
|
|
|
20
19
|
attachments: []
|
|
21
20
|
};
|
|
22
21
|
};
|
|
23
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwibmFtZSIsIml0ZXJhdGlvbk51bSIsImxvY2F0aW9uIiwic3RhcnRUaW1lIiwiZW5kVGltZSIsImR1cmF0aW9uIiwic3RhdHVzIiwic3RlcHMiLCJsb2dzIiwiaGFyIiwiZmFpbHVyZSIsImNvbnRleHQiLCJ0ZXN0QXR0cmlidXRlcyIsImF0dGFjaG1lbnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVsL2Nhc2UtcmVzdWx0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLypcclxuICogVGVzdCBDYXNlIFJlc3VsdHNcclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBuYW1lOiBudWxsLFxyXG4gICAgICAgIGl0ZXJhdGlvbk51bTogMSxcclxuICAgICAgICBsb2NhdGlvbjogbnVsbCxcclxuICAgICAgICBzdGFydFRpbWU6IG51bGwsXHJcbiAgICAgICAgZW5kVGltZTogbnVsbCxcclxuICAgICAgICBkdXJhdGlvbjogbnVsbCxcclxuICAgICAgICBzdGF0dXM6IG51bGwsXHJcbiAgICAgICAgc3RlcHM6IFtdLCAgICAvLyBhcnJheSBvZiBzdGVwLXJlc3VsdC5qc1xyXG4gICAgICAgIGxvZ3M6IFtdLFxyXG4gICAgICAgIGhhcjogbnVsbCxcclxuICAgICAgICBmYWlsdXJlOiBudWxsLFxyXG4gICAgICAgIGNvbnRleHQ6IG51bGwsXHJcbiAgICAgICAgdGVzdEF0dHJpYnV0ZXM6IHt9LFxyXG4gICAgICAgIGF0dGFjaG1lbnRzOiBbXVxyXG4gICAgfTtcclxufTtcclxuIl0sIm1hcHBpbmdzIjoiOzs7QUFZQUEsTUFBTSxDQUFDQyxPQUFPLEdBQUcsWUFBWTtFQUN6QixPQUFPO0lBQ0hDLElBQUksRUFBRSxJQUFJO0lBQ1ZDLFlBQVksRUFBRSxDQUFDO0lBQ2ZDLFFBQVEsRUFBRSxJQUFJO0lBQ2RDLFNBQVMsRUFBRSxJQUFJO0lBQ2ZDLE9BQU8sRUFBRSxJQUFJO0lBQ2JDLFFBQVEsRUFBRSxJQUFJO0lBQ2RDLE1BQU0sRUFBRSxJQUFJO0lBQ1pDLEtBQUssRUFBRSxFQUFFO0lBQ1RDLElBQUksRUFBRSxFQUFFO0lBQ1JDLEdBQUcsRUFBRSxJQUFJO0lBQ1RDLE9BQU8sRUFBRSxJQUFJO0lBQ2JDLE9BQU8sRUFBRSxJQUFJO0lBQ2JDLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDbEJDLFdBQVcsRUFBRTtFQUNqQixDQUFDO0FBQ0wsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
|
package/build/model/failure.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
require("source-map-support/register");
|
|
4
|
-
|
|
5
4
|
module.exports = function () {
|
|
6
5
|
return {
|
|
7
6
|
type: null,
|
|
@@ -12,4 +11,4 @@ module.exports = function () {
|
|
|
12
11
|
fatal: false
|
|
13
12
|
};
|
|
14
13
|
};
|
|
15
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
14
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwidHlwZSIsIm1lc3NhZ2UiLCJkZXRhaWxzIiwibG9jYXRpb24iLCJkYXRhIiwiZmF0YWwiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwvZmFpbHVyZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qXHJcbiAqIFRlc3QsIENhc2UsIFN1aXRlIGFuZCBTdGVwIGZhaWx1cmUgZGV0YWlsc1xyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHR5cGU6IG51bGwsXHJcbiAgICAgICAgbWVzc2FnZTogbnVsbCxcclxuICAgICAgICBkZXRhaWxzOiBudWxsLFxyXG4gICAgICAgIGxvY2F0aW9uOiBudWxsLFxyXG4gICAgICAgIGRhdGE6IG51bGwsXHJcbiAgICAgICAgZmF0YWw6IGZhbHNlLFxyXG4gICAgfTtcclxufTtcclxuIl0sIm1hcHBpbmdzIjoiOzs7QUFZQUEsTUFBTSxDQUFDQyxPQUFPLEdBQUcsWUFBWTtFQUN6QixPQUFPO0lBQ0hDLElBQUksRUFBRSxJQUFJO0lBQ1ZDLE9BQU8sRUFBRSxJQUFJO0lBQ2JDLE9BQU8sRUFBRSxJQUFJO0lBQ2JDLFFBQVEsRUFBRSxJQUFJO0lBQ2RDLElBQUksRUFBRSxJQUFJO0lBQ1ZDLEtBQUssRUFBRTtFQUNYLENBQUM7QUFDTCxDQUFDIiwiaWdub3JlTGlzdCI6W119
|
package/build/model/status.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
require("source-map-support/register");
|
|
4
|
-
|
|
5
4
|
module.exports = {
|
|
6
5
|
FAILED: 'failed',
|
|
7
6
|
PASSED: 'passed',
|
|
8
7
|
WARNING: 'warning',
|
|
9
8
|
SKIPPED: 'skipped'
|
|
10
9
|
};
|
|
11
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
10
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwiRkFJTEVEIiwiUEFTU0VEIiwiV0FSTklORyIsIlNLSVBQRUQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwvc3RhdHVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgICBGQUlMRUQ6ICdmYWlsZWQnLFxyXG4gICAgUEFTU0VEOiAncGFzc2VkJyxcclxuICAgIFdBUk5JTkc6ICd3YXJuaW5nJyxcclxuICAgIFNLSVBQRUQ6ICdza2lwcGVkJ1xyXG59O1xyXG4iXSwibWFwcGluZ3MiOiI7OztBQVNBQSxNQUFNLENBQUNDLE9BQU8sR0FBRztFQUNiQyxNQUFNLEVBQUUsUUFBUTtFQUNoQkMsTUFBTSxFQUFFLFFBQVE7RUFDaEJDLE9BQU8sRUFBRSxTQUFTO0VBQ2xCQyxPQUFPLEVBQUU7QUFDYixDQUFDIiwiaWdub3JlTGlzdCI6W119
|