oxygen-cli 1.25.0-beta.2 → 1.25.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/.husky/pre-commit +4 -0
- package/CHANGELOG.md +65 -0
- package/build/core/OxygenCore.js +36 -257
- package/build/core/OxygenEvents.js +1 -11
- package/build/core/OxygenModule.js +1 -14
- package/build/core/OxygenService.js +1 -12
- package/build/core/OxygenSubModule.js +1 -10
- package/build/core/WebDriverModule.js +1 -30
- package/build/core/utils.js +1 -17
- package/build/errors/HookError.js +1 -7
- package/build/errors/ModuleError.js +1 -7
- package/build/errors/ModuleUnavailableError.js +1 -3
- package/build/errors/OxygenError.js +1 -33
- package/build/errors/ScriptNotFound.js +1 -7
- package/build/errors/helper.js +46 -77
- package/build/index.js +6 -18
- package/build/lib/cli-util.js +28 -90
- package/build/lib/cli.js +1 -23
- package/build/lib/debugger.js +1 -144
- package/build/lib/img-merge.js +1 -15
- package/build/lib/launcher.js +1 -28
- package/build/lib/moduleRequire.js +1 -4
- package/build/lib/param-manager.js +1 -28
- 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/util.js +3 -58
- 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 +13 -33
- package/build/ox_modules/module-assert.js +8 -24
- package/build/ox_modules/module-date.js +3 -8
- package/build/ox_modules/module-db.js +7 -28
- package/build/ox_modules/module-email.js +10 -36
- package/build/ox_modules/module-eyes.js +5 -46
- package/build/ox_modules/module-http.js +42 -104
- package/build/ox_modules/module-log.js +5 -22
- package/build/ox_modules/module-mailinator.js +10 -32
- package/build/ox_modules/module-mob/commands/alertAccept.js +1 -2
- package/build/ox_modules/module-mob/commands/alertDismiss.js +1 -2
- package/build/ox_modules/module-mob/commands/assertAlert.js +1 -6
- package/build/ox_modules/module-mob/commands/assertText.js +1 -3
- package/build/ox_modules/module-mob/commands/assertTitle.js +1 -4
- package/build/ox_modules/module-mob/commands/assertValue.js +9 -15
- package/build/ox_modules/module-mob/commands/back.js +1 -2
- package/build/ox_modules/module-mob/commands/clear.js +1 -4
- package/build/ox_modules/module-mob/commands/click.js +3 -4
- package/build/ox_modules/module-mob/commands/clickHidden.js +3 -9
- package/build/ox_modules/module-mob/commands/clickLong.js +1 -2
- package/build/ox_modules/module-mob/commands/clickMultipleTimes.js +1 -4
- package/build/ox_modules/module-mob/commands/closeApp.js +1 -2
- package/build/ox_modules/module-mob/commands/debug.js +2 -2
- package/build/ox_modules/module-mob/commands/dragAndDrop.js +1 -2
- package/build/ox_modules/module-mob/commands/enableNetwork.js +4 -12
- package/build/ox_modules/module-mob/commands/execute.js +1 -2
- package/build/ox_modules/module-mob/commands/findElement.js +1 -3
- package/build/ox_modules/module-mob/commands/findElements.js +1 -4
- package/build/ox_modules/module-mob/commands/getAlertText.js +1 -2
- package/build/ox_modules/module-mob/commands/getAppiumLogs.js +1 -2
- package/build/ox_modules/module-mob/commands/getBrowserLogs.js +1 -10
- package/build/ox_modules/module-mob/commands/getCurrentActivity.js +1 -2
- package/build/ox_modules/module-mob/commands/getCurrentPackage.js +1 -2
- package/build/ox_modules/module-mob/commands/getDeviceLogs.js +1 -9
- package/build/ox_modules/module-mob/commands/getDeviceTime.js +1 -2
- package/build/ox_modules/module-mob/commands/getLocation.js +1 -2
- package/build/ox_modules/module-mob/commands/getSource.js +1 -2
- package/build/ox_modules/module-mob/commands/getText.js +1 -4
- package/build/ox_modules/module-mob/commands/getTitle.js +1 -2
- package/build/ox_modules/module-mob/commands/getUrl.js +1 -2
- package/build/ox_modules/module-mob/commands/getValue.js +5 -9
- package/build/ox_modules/module-mob/commands/getWindowHandles.js +1 -2
- package/build/ox_modules/module-mob/commands/hideKeyboard.js +1 -2
- package/build/ox_modules/module-mob/commands/index.js +19 -94
- package/build/ox_modules/module-mob/commands/installApp.js +1 -2
- package/build/ox_modules/module-mob/commands/isAppInstalled.js +1 -2
- package/build/ox_modules/module-mob/commands/isCheckable.js +1 -2
- package/build/ox_modules/module-mob/commands/isChecked.js +1 -2
- package/build/ox_modules/module-mob/commands/isClickable.js +1 -2
- package/build/ox_modules/module-mob/commands/isExist.js +1 -3
- package/build/ox_modules/module-mob/commands/isSelected.js +1 -2
- package/build/ox_modules/module-mob/commands/isVisible.js +1 -3
- package/build/ox_modules/module-mob/commands/isWebViewContext.js +1 -2
- package/build/ox_modules/module-mob/commands/launchApp.js +1 -2
- package/build/ox_modules/module-mob/commands/longPressKeyCode.js +1 -2
- package/build/ox_modules/module-mob/commands/open.js +1 -3
- package/build/ox_modules/module-mob/commands/pause.js +1 -2
- package/build/ox_modules/module-mob/commands/removeApp.js +1 -2
- package/build/ox_modules/module-mob/commands/resetApp.js +1 -2
- package/build/ox_modules/module-mob/commands/scrollIntoElement.js +1 -6
- package/build/ox_modules/module-mob/commands/scrollIntoView.js +1 -2
- package/build/ox_modules/module-mob/commands/select.js +1 -4
- package/build/ox_modules/module-mob/commands/selectFrame.js +1 -4
- package/build/ox_modules/module-mob/commands/selectWindow.js +5 -26
- package/build/ox_modules/module-mob/commands/sendKeys.js +6 -9
- package/build/ox_modules/module-mob/commands/setContext.js +1 -2
- package/build/ox_modules/module-mob/commands/setNativeContext.js +1 -2
- package/build/ox_modules/module-mob/commands/setTimeout.js +1 -2
- package/build/ox_modules/module-mob/commands/setWebViewContext.js +3 -6
- package/build/ox_modules/module-mob/commands/shake.js +1 -2
- package/build/ox_modules/module-mob/commands/smsClickLink.js +1 -2
- package/build/ox_modules/module-mob/commands/smsGetText.js +3 -6
- package/build/ox_modules/module-mob/commands/swipe.js +1 -2
- package/build/ox_modules/module-mob/commands/swipeElement.js +1 -2
- package/build/ox_modules/module-mob/commands/swipeScreen.js +1 -2
- package/build/ox_modules/module-mob/commands/takeScreenshot.js +1 -2
- package/build/ox_modules/module-mob/commands/tap.js +1 -2
- package/build/ox_modules/module-mob/commands/type.js +3 -7
- package/build/ox_modules/module-mob/commands/unlockPattern.js +9 -10
- package/build/ox_modules/module-mob/commands/waitForExist.js +1 -2
- package/build/ox_modules/module-mob/commands/waitForInteractable.js +1 -3
- package/build/ox_modules/module-mob/commands/waitForVisible.js +1 -2
- package/build/ox_modules/module-mob.js +72 -142
- package/build/ox_modules/module-pdf.js +23 -62
- package/build/ox_modules/module-proxy.js +8 -68
- package/build/ox_modules/module-serial.js +7 -32
- package/build/ox_modules/module-shell.js +8 -27
- package/build/ox_modules/module-soap.js +14 -47
- package/build/ox_modules/module-twilio.js +10 -53
- package/build/ox_modules/module-utils.js +16 -51
- package/build/ox_modules/module-web/commands/alertAccept.js +1 -2
- package/build/ox_modules/module-web/commands/alertDismiss.js +1 -2
- package/build/ox_modules/module-web/commands/assertAlert.js +1 -6
- package/build/ox_modules/module-web/commands/assertExist.js +1 -2
- package/build/ox_modules/module-web/commands/assertSelectedLabel.js +1 -4
- package/build/ox_modules/module-web/commands/assertSelectedValue.js +1 -3
- package/build/ox_modules/module-web/commands/assertText.js +1 -3
- package/build/ox_modules/module-web/commands/assertTextNotPresent.js +1 -6
- package/build/ox_modules/module-web/commands/assertTextPresent.js +1 -6
- package/build/ox_modules/module-web/commands/assertTitle.js +1 -3
- package/build/ox_modules/module-web/commands/assertValue.js +1 -3
- package/build/ox_modules/module-web/commands/back.js +1 -2
- package/build/ox_modules/module-web/commands/clear.js +1 -5
- package/build/ox_modules/module-web/commands/click.js +4 -13
- package/build/ox_modules/module-web/commands/clickHidden.js +2 -7
- package/build/ox_modules/module-web/commands/closeWindow.js +1 -2
- package/build/ox_modules/module-web/commands/debug.js +2 -2
- package/build/ox_modules/module-web/commands/deleteCookies.js +1 -2
- package/build/ox_modules/module-web/commands/deselect.js +1 -2
- package/build/ox_modules/module-web/commands/doubleClick.js +3 -9
- package/build/ox_modules/module-web/commands/dragAndDrop.js +1 -2
- package/build/ox_modules/module-web/commands/execute.js +1 -2
- package/build/ox_modules/module-web/commands/fileBrowse.js +4 -10
- package/build/ox_modules/module-web/commands/findElement.js +1 -3
- package/build/ox_modules/module-web/commands/findElements.js +1 -4
- package/build/ox_modules/module-web/commands/fullscreenWindow.js +1 -2
- package/build/ox_modules/module-web/commands/getAlertText.js +1 -2
- package/build/ox_modules/module-web/commands/getAttribute.js +1 -4
- package/build/ox_modules/module-web/commands/getBrowserLogs.js +1 -3
- package/build/ox_modules/module-web/commands/getCookies.js +1 -2
- package/build/ox_modules/module-web/commands/getCssValue.js +1 -4
- package/build/ox_modules/module-web/commands/getElementCount.js +1 -2
- package/build/ox_modules/module-web/commands/getHTML.js +1 -2
- package/build/ox_modules/module-web/commands/getSource.js +1 -2
- package/build/ox_modules/module-web/commands/getText.js +1 -4
- package/build/ox_modules/module-web/commands/getTitle.js +1 -2
- package/build/ox_modules/module-web/commands/getUrl.js +1 -2
- package/build/ox_modules/module-web/commands/getValue.js +1 -5
- package/build/ox_modules/module-web/commands/getWindowHandles.js +1 -2
- package/build/ox_modules/module-web/commands/getWindowSize.js +1 -2
- package/build/ox_modules/module-web/commands/getXMLPageSource.js +1 -5
- package/build/ox_modules/module-web/commands/index.js +26 -99
- package/build/ox_modules/module-web/commands/isAlertPresent.js +1 -2
- package/build/ox_modules/module-web/commands/isChecked.js +1 -2
- package/build/ox_modules/module-web/commands/isExist.js +1 -3
- package/build/ox_modules/module-web/commands/isInteractable.js +33 -0
- package/build/ox_modules/module-web/commands/isSelected.js +1 -2
- package/build/ox_modules/module-web/commands/isVisible.js +1 -3
- package/build/ox_modules/module-web/commands/makeVisible.js +2 -10
- package/build/ox_modules/module-web/commands/maximizeWindow.js +1 -2
- package/build/ox_modules/module-web/commands/minimizeWindow.js +1 -2
- package/build/ox_modules/module-web/commands/newWindow.js +1 -2
- package/build/ox_modules/module-web/commands/open.js +1 -4
- package/build/ox_modules/module-web/commands/pause.js +1 -2
- package/build/ox_modules/module-web/commands/point.js +1 -2
- package/build/ox_modules/module-web/commands/pointJS.js +2 -8
- package/build/ox_modules/module-web/commands/refresh.js +1 -2
- package/build/ox_modules/module-web/commands/rightClick.js +3 -8
- package/build/ox_modules/module-web/commands/rightClickActions.js +1 -2
- package/build/ox_modules/module-web/commands/scrollToElement.js +1 -2
- package/build/ox_modules/module-web/commands/select.js +1 -5
- package/build/ox_modules/module-web/commands/selectFrame.js +1 -3
- package/build/ox_modules/module-web/commands/selectWindow.js +5 -26
- package/build/ox_modules/module-web/commands/sendKeys.js +3 -6
- package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +2 -2
- package/build/ox_modules/module-web/commands/setTimeout.js +1 -2
- package/build/ox_modules/module-web/commands/setWindowSize.js +1 -2
- package/build/ox_modules/module-web/commands/takeScreenshot.js +3 -5
- package/build/ox_modules/module-web/commands/type.js +1 -5
- package/build/ox_modules/module-web/commands/waitForAngular.js +6 -11
- package/build/ox_modules/module-web/commands/waitForExist.js +1 -2
- package/build/ox_modules/module-web/commands/waitForInteractable.js +1 -2
- package/build/ox_modules/module-web/commands/waitForNotExist.js +1 -8
- package/build/ox_modules/module-web/commands/waitForNotText.js +3 -5
- package/build/ox_modules/module-web/commands/waitForNotValue.js +3 -5
- package/build/ox_modules/module-web/commands/waitForText.js +3 -5
- package/build/ox_modules/module-web/commands/waitForValue.js +3 -5
- package/build/ox_modules/module-web/commands/waitForVisible.js +1 -2
- package/build/ox_modules/module-web/commands/waitForWindow.js +4 -21
- package/build/ox_modules/module-web.js +86 -192
- package/build/ox_modules/module-win/commands/assertText.js +1 -3
- package/build/ox_modules/module-win/commands/assertTitle.js +1 -4
- package/build/ox_modules/module-win/commands/assertValue.js +9 -15
- package/build/ox_modules/module-win/commands/back.js +1 -2
- package/build/ox_modules/module-win/commands/clear.js +1 -4
- package/build/ox_modules/module-win/commands/click.js +1 -2
- package/build/ox_modules/module-win/commands/clickLong.js +1 -2
- package/build/ox_modules/module-win/commands/clickMultipleTimes.js +1 -4
- package/build/ox_modules/module-win/commands/findElement.js +1 -3
- package/build/ox_modules/module-win/commands/findElements.js +1 -4
- package/build/ox_modules/module-win/commands/getAppiumLogs.js +1 -2
- package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +1 -2
- package/build/ox_modules/module-win/commands/getLocation.js +1 -2
- package/build/ox_modules/module-win/commands/getSource.js +1 -2
- package/build/ox_modules/module-win/commands/getText.js +1 -4
- package/build/ox_modules/module-win/commands/getValue.js +5 -9
- package/build/ox_modules/module-win/commands/getWindowHandles.js +1 -2
- package/build/ox_modules/module-win/commands/index.js +5 -43
- package/build/ox_modules/module-win/commands/isCheckable.js +1 -2
- package/build/ox_modules/module-win/commands/isChecked.js +1 -2
- package/build/ox_modules/module-win/commands/isClickable.js +1 -2
- package/build/ox_modules/module-win/commands/isExist.js +1 -3
- package/build/ox_modules/module-win/commands/isSelected.js +1 -2
- package/build/ox_modules/module-win/commands/isVisible.js +1 -3
- package/build/ox_modules/module-win/commands/open.js +1 -2
- package/build/ox_modules/module-win/commands/pause.js +1 -2
- package/build/ox_modules/module-win/commands/rightClick.js +1 -2
- package/build/ox_modules/module-win/commands/selectWindow.js +1 -15
- package/build/ox_modules/module-win/commands/sendKeys.js +1 -4
- package/build/ox_modules/module-win/commands/setTimeout.js +1 -2
- package/build/ox_modules/module-win/commands/takeScreenshot.js +1 -2
- package/build/ox_modules/module-win/commands/tap.js +1 -2
- package/build/ox_modules/module-win/commands/type.js +1 -4
- package/build/ox_modules/module-win/commands/waitForExist.js +1 -2
- package/build/ox_modules/module-win/commands/waitForInteractable.js +1 -4
- package/build/ox_modules/module-win/commands/waitForVisible.js +1 -2
- package/build/ox_modules/module-win.js +48 -87
- package/build/ox_modules/utils.js +22 -76
- package/build/ox_reporters/reporter-excel.js +1 -58
- package/build/ox_reporters/reporter-html.js +1 -28
- package/build/ox_reporters/reporter-json.js +1 -14
- package/build/ox_reporters/reporter-junit.js +1 -24
- package/build/ox_reporters/reporter-pdf.js +1 -19
- package/build/ox_reporters/reporter-xml.js +1 -17
- package/build/ox_services/service-devtools/submodule-network.js +3 -84
- package/build/ox_services/service-devtools.js +1 -23
- package/build/reporter/FileReporterBase.js +5 -44
- package/build/reporter/ReportAggregator.js +1 -65
- package/build/reporter/ReporterBase.js +1 -6
- package/build/runners/WorkerProcess.js +1 -99
- package/build/runners/cucumber/CucumberEventListener.js +4 -29
- package/build/runners/cucumber/CucumberReporter.js +1 -56
- package/build/runners/cucumber/CucumberWorker.js +1 -66
- package/build/runners/cucumber/index.js +1 -30
- package/build/runners/cucumber/worker.js +1 -18
- package/build/runners/index.js +1 -6
- package/build/runners/oxygen/OxygenWorker.js +20 -54
- package/build/runners/oxygen/index.js +17 -177
- package/build/runners/oxygen/worker.js +2 -25
- package/package.json +28 -29
package/build/lib/util.js
CHANGED
|
@@ -1,37 +1,24 @@
|
|
|
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
6
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
-
|
|
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
|
function DecryptResult(result) {
|
|
28
17
|
const decryptResult = result;
|
|
29
|
-
|
|
30
18
|
this.getDecryptResult = () => {
|
|
31
19
|
return decryptResult;
|
|
32
20
|
};
|
|
33
21
|
}
|
|
34
|
-
|
|
35
22
|
const DUMMY_HOOKS = {
|
|
36
23
|
beforeTest: () => {},
|
|
37
24
|
beforeSuite: () => {},
|
|
@@ -57,11 +44,9 @@ var self = module.exports = {
|
|
|
57
44
|
suite.iterationCount = suiteDef.iterations || testConfig.iterations || iterationCount;
|
|
58
45
|
const suiteFilePath = suiteDef.path || path.join(testConfig.target.cwd, 'suites', `${suiteDef.name}.json`);
|
|
59
46
|
suite.paramManager = await self.getParameterManager(suiteFilePath, testConfig.parameters, testConfig.target.cwd);
|
|
60
|
-
|
|
61
47
|
if (suite.paramManager && suite.paramManager.getMode() == 'all') {
|
|
62
48
|
suite.iterationCount = suite.paramManager.rows;
|
|
63
49
|
}
|
|
64
|
-
|
|
65
50
|
suite.capabilities = suiteDef.capabilities || testConfig.capabilities || {};
|
|
66
51
|
suite.environment = testConfig.environment || null;
|
|
67
52
|
suite.options = testConfig.options || null;
|
|
@@ -88,44 +73,37 @@ var self = module.exports = {
|
|
|
88
73
|
suite.id = testcase.id;
|
|
89
74
|
suite.iterationCount = iterationCount;
|
|
90
75
|
suite.cases.push(testcase);
|
|
91
|
-
|
|
92
76
|
if (testcase.reopenSession) {
|
|
93
77
|
suite.reopenSession = testcase.reopenSession;
|
|
94
78
|
}
|
|
95
|
-
|
|
96
79
|
const cwd = path.dirname(filePath);
|
|
97
80
|
suite.paramManager = await self.getParameterManager(filePath, {
|
|
98
81
|
file: paramFile,
|
|
99
82
|
mode: paramMode
|
|
100
83
|
}, cwd);
|
|
101
|
-
|
|
102
84
|
if (suite.paramManager && paramMode == 'all') {
|
|
103
85
|
suite.iterationCount = suite.paramManager.rows;
|
|
104
86
|
}
|
|
105
|
-
|
|
106
87
|
return suite;
|
|
107
88
|
},
|
|
108
89
|
getParameterManager: async function (mainFilePath, paramOpts = null, cwd = null, autoSearch = false) {
|
|
109
90
|
let paramFilePath = paramOpts && paramOpts.file ? paramOpts.file : null;
|
|
110
91
|
let paramMode = paramOpts && paramOpts.mode ? paramOpts.mode : 'seq';
|
|
111
|
-
|
|
112
92
|
if (paramFilePath && cwd && !path.isAbsolute(paramFilePath)) {
|
|
113
93
|
paramFilePath = path.join(cwd, paramFilePath);
|
|
114
94
|
}
|
|
115
|
-
|
|
116
95
|
return await self.loadParameterManager(mainFilePath, paramFilePath, paramMode, autoSearch);
|
|
117
96
|
},
|
|
118
97
|
generateTestSuiteFromJsonFile: async function (filePath, paramFile, paramMode = null, options = {}) {
|
|
119
|
-
const testConfig = {
|
|
98
|
+
const testConfig = {
|
|
99
|
+
...(options || {})
|
|
120
100
|
};
|
|
121
|
-
|
|
122
101
|
if (paramFile) {
|
|
123
102
|
testConfig.parameters = {
|
|
124
103
|
file: paramFile,
|
|
125
104
|
mode: paramMode
|
|
126
105
|
};
|
|
127
106
|
}
|
|
128
|
-
|
|
129
107
|
return await self.generateTestSuiteFromJson(require(filePath), testConfig);
|
|
130
108
|
},
|
|
131
109
|
getFileNameWithoutExt: function (filePath) {
|
|
@@ -136,14 +114,12 @@ var self = module.exports = {
|
|
|
136
114
|
},
|
|
137
115
|
loadParameterManager: async function (mainFile, paramFile, paramMode, autoSearch = false) {
|
|
138
116
|
var paramManager = null;
|
|
139
|
-
|
|
140
117
|
if (!paramFile && autoSearch) {
|
|
141
118
|
var fileNameNoExt = self.getFileNameWithoutExt(mainFile);
|
|
142
119
|
var csvParamFile = path.join(path.dirname(mainFile), fileNameNoExt + '.csv');
|
|
143
120
|
var txtParamFile = path.join(path.dirname(mainFile), fileNameNoExt + '.txt');
|
|
144
121
|
var xlsParamFile = path.join(path.dirname(mainFile), fileNameNoExt + '.xls');
|
|
145
122
|
var xlsxParamFile = path.join(path.dirname(mainFile), fileNameNoExt + '.xlsx');
|
|
146
|
-
|
|
147
123
|
if (fs.existsSync(csvParamFile)) {
|
|
148
124
|
paramFile = csvParamFile;
|
|
149
125
|
} else if (fs.existsSync(txtParamFile)) {
|
|
@@ -154,13 +130,11 @@ var self = module.exports = {
|
|
|
154
130
|
paramFile = xlsxParamFile;
|
|
155
131
|
}
|
|
156
132
|
}
|
|
157
|
-
|
|
158
133
|
if (paramFile) {
|
|
159
134
|
paramManager = new require('./param-manager')(paramFile, paramMode || 'sequential');
|
|
160
135
|
await paramManager.init();
|
|
161
136
|
return paramManager;
|
|
162
137
|
}
|
|
163
|
-
|
|
164
138
|
return null;
|
|
165
139
|
},
|
|
166
140
|
resolvePath: function (pathToResolve, baseFolder) {
|
|
@@ -171,9 +145,7 @@ var self = module.exports = {
|
|
|
171
145
|
if (typeof err === 'object') {
|
|
172
146
|
return destroyCircular(err, []);
|
|
173
147
|
}
|
|
174
|
-
|
|
175
148
|
return err;
|
|
176
|
-
|
|
177
149
|
function destroyCircular(from, seen) {
|
|
178
150
|
var to = Array.isArray(from) ? [] : {};
|
|
179
151
|
seen.push(from);
|
|
@@ -192,7 +164,6 @@ var self = module.exports = {
|
|
|
192
164
|
},
|
|
193
165
|
stringify: function (args, indentation = 0) {
|
|
194
166
|
let str;
|
|
195
|
-
|
|
196
167
|
try {
|
|
197
168
|
str = JSON.stringify(args, (key, value) => {
|
|
198
169
|
if (typeof value === 'bigint') {
|
|
@@ -206,19 +177,15 @@ var self = module.exports = {
|
|
|
206
177
|
} else if (value instanceof RegExp) {
|
|
207
178
|
return '/' + value.source + '/' + value.flags;
|
|
208
179
|
}
|
|
209
|
-
|
|
210
180
|
return value;
|
|
211
181
|
}, indentation);
|
|
212
182
|
str = str.replace(/^\[{1}\s*|\s*\]{1}$/g, '');
|
|
213
|
-
|
|
214
183
|
if (str.endsWith(' }')) {
|
|
215
184
|
str = str.substring(0, str.length - 3) + '}';
|
|
216
185
|
}
|
|
217
|
-
|
|
218
186
|
if (str.endsWith(' ]')) {
|
|
219
187
|
str = str.substring(0, str.length - 3) + ']';
|
|
220
188
|
}
|
|
221
|
-
|
|
222
189
|
str = str.replace(/"__UNDEFINED"/g, 'undefined');
|
|
223
190
|
} catch (e) {
|
|
224
191
|
console.warn('Failed to serialize command arguments: ', e);
|
|
@@ -226,7 +193,6 @@ var self = module.exports = {
|
|
|
226
193
|
depth: 3
|
|
227
194
|
});
|
|
228
195
|
}
|
|
229
|
-
|
|
230
196
|
return str;
|
|
231
197
|
},
|
|
232
198
|
isInDebugMode: function () {
|
|
@@ -234,7 +200,6 @@ var self = module.exports = {
|
|
|
234
200
|
},
|
|
235
201
|
loadTestHooks: function (options) {
|
|
236
202
|
let hooks = DUMMY_HOOKS;
|
|
237
|
-
|
|
238
203
|
if (options && options.target && options.target.name === 'oxygen.conf') {
|
|
239
204
|
try {
|
|
240
205
|
hooks = require(options.target.path).hooks || DUMMY_HOOKS;
|
|
@@ -242,20 +207,16 @@ var self = module.exports = {
|
|
|
242
207
|
console.warn('Error loading user hooks:', e);
|
|
243
208
|
}
|
|
244
209
|
}
|
|
245
|
-
|
|
246
210
|
return hooks;
|
|
247
211
|
},
|
|
248
212
|
executeTestHook: async function (hooks, method, args) {
|
|
249
213
|
if (!hooks || !method || !hooks[method] || typeof hooks[method] !== 'function') {
|
|
250
214
|
return null;
|
|
251
215
|
}
|
|
252
|
-
|
|
253
216
|
try {
|
|
254
217
|
if (global.chaiAndMockeryLoaded) {} else {
|
|
255
218
|
const chai = require('chai');
|
|
256
|
-
|
|
257
219
|
const mockery = require('mockery');
|
|
258
|
-
|
|
259
220
|
mockery.enable({
|
|
260
221
|
useCleanCache: true,
|
|
261
222
|
warnOnReplace: false,
|
|
@@ -264,7 +225,6 @@ var self = module.exports = {
|
|
|
264
225
|
mockery.registerMock('chai', chai);
|
|
265
226
|
global.chaiAndMockeryLoaded = true;
|
|
266
227
|
}
|
|
267
|
-
|
|
268
228
|
await hooks[method].apply(undefined, args);
|
|
269
229
|
} catch (e) {
|
|
270
230
|
console.error(`Hook "${method}" has thrown an error: ${e.toString()}`);
|
|
@@ -274,17 +234,14 @@ var self = module.exports = {
|
|
|
274
234
|
getOxModulesDir: function () {
|
|
275
235
|
return path.join(__dirname, '..', 'ox_modules');
|
|
276
236
|
},
|
|
277
|
-
|
|
278
237
|
hookLogs(logger) {
|
|
279
238
|
const origlog = console.log;
|
|
280
239
|
const origDebug = console.debug;
|
|
281
240
|
const origInfo = console.info;
|
|
282
241
|
const origWarn = console.warn;
|
|
283
242
|
const origError = console.error;
|
|
284
|
-
|
|
285
243
|
const processArgs = argumentArray => {
|
|
286
244
|
let result = [];
|
|
287
|
-
|
|
288
245
|
if (argumentArray && argumentArray.map) {
|
|
289
246
|
argumentArray.map(item => {
|
|
290
247
|
if (typeof item === 'string') {
|
|
@@ -294,36 +251,29 @@ var self = module.exports = {
|
|
|
294
251
|
}
|
|
295
252
|
});
|
|
296
253
|
}
|
|
297
|
-
|
|
298
254
|
return result.join(' ');
|
|
299
255
|
};
|
|
300
|
-
|
|
301
256
|
console.log = function (...argumentArray) {
|
|
302
257
|
origlog.apply(this, argumentArray);
|
|
303
258
|
logger.info(processArgs(argumentArray));
|
|
304
259
|
};
|
|
305
|
-
|
|
306
260
|
console.debug = function (...argumentArray) {
|
|
307
261
|
origDebug.apply(this, argumentArray);
|
|
308
262
|
logger.debug(processArgs(argumentArray));
|
|
309
263
|
};
|
|
310
|
-
|
|
311
264
|
console.info = function (...argumentArray) {
|
|
312
265
|
origInfo.apply(this, argumentArray);
|
|
313
266
|
logger.info(processArgs(argumentArray));
|
|
314
267
|
};
|
|
315
|
-
|
|
316
268
|
console.warn = function (...argumentArray) {
|
|
317
269
|
origWarn.apply(this, argumentArray);
|
|
318
270
|
logger.warn(processArgs(argumentArray));
|
|
319
271
|
};
|
|
320
|
-
|
|
321
272
|
console.error = function (...argumentArray) {
|
|
322
273
|
origError.apply(this, argumentArray);
|
|
323
274
|
logger.error(processArgs(argumentArray));
|
|
324
275
|
};
|
|
325
276
|
},
|
|
326
|
-
|
|
327
277
|
makeTransactionFailedIfStepFailed(steps) {
|
|
328
278
|
if (steps && steps.length && steps.length > 0) {
|
|
329
279
|
let lastFindedTransactionIndex = false;
|
|
@@ -332,17 +282,14 @@ var self = module.exports = {
|
|
|
332
282
|
if (item.name && item.name.includes && item.name.includes('.transaction(')) {
|
|
333
283
|
lastFindedTransactionIndex = idx;
|
|
334
284
|
}
|
|
335
|
-
|
|
336
285
|
if (typeof lastFindedTransactionIndex === 'number' && item.status && item.status === 'failed') {
|
|
337
286
|
newSteps[lastFindedTransactionIndex]['status'] = 'failed';
|
|
338
287
|
}
|
|
339
288
|
});
|
|
340
289
|
return newSteps;
|
|
341
290
|
}
|
|
342
|
-
|
|
343
291
|
return steps;
|
|
344
292
|
},
|
|
345
|
-
|
|
346
293
|
decrypt(text) {
|
|
347
294
|
try {
|
|
348
295
|
let encryptedText = Buffer.from(text, 'hex');
|
|
@@ -355,16 +302,14 @@ var self = module.exports = {
|
|
|
355
302
|
throw new _OxygenError.default(_helper.default.errorCode.CRYPTO_ERROR, "The provided argument doesn't seem to be a valid cipher produced by 'utils.encrypt'");
|
|
356
303
|
}
|
|
357
304
|
},
|
|
358
|
-
|
|
359
305
|
encrypt(text) {
|
|
360
306
|
let cipher = crypto.createCipheriv(algorithm, key, iv);
|
|
361
307
|
let encrypted = cipher.update(text);
|
|
362
308
|
encrypted = Buffer.concat([encrypted, cipher.final()]);
|
|
363
309
|
return encrypted.toString('hex');
|
|
364
310
|
},
|
|
365
|
-
|
|
366
311
|
sleep: function (timeout) {
|
|
367
312
|
return new Promise(resolve => setTimeout(resolve, timeout));
|
|
368
313
|
}
|
|
369
314
|
};
|
|
370
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdXRpbC5qcyJdLCJuYW1lcyI6WyJwYXRoIiwicmVxdWlyZSIsImZzIiwibW9tZW50IiwiY3J5cHRvIiwidXRpbCIsInBhc3N3b3JkIiwiZW5jcnlwdGlvbktleSIsImtleSIsInNjcnlwdFN5bmMiLCJpdiIsIkJ1ZmZlciIsImFsbG9jIiwiYWxnb3JpdGhtIiwiRGVjcnlwdFJlc3VsdCIsInJlc3VsdCIsImRlY3J5cHRSZXN1bHQiLCJnZXREZWNyeXB0UmVzdWx0IiwiRFVNTVlfSE9PS1MiLCJiZWZvcmVUZXN0IiwiYmVmb3JlU3VpdGUiLCJiZWZvcmVDYXNlIiwiYmVmb3JlQ29tbWFuZCIsImFmdGVyQ29tbWFuZCIsImFmdGVyVGVzdCIsImFmdGVyU3VpdGUiLCJhZnRlckNhc2UiLCJzZWxmIiwibW9kdWxlIiwiZXhwb3J0cyIsImdlbmVyYXRlVW5pcXVlSWQiLCJyYW5kb21CeXRlcyIsInRvU3RyaW5nIiwiZ2V0VGltZVN0YW1wIiwidXRjIiwidmFsdWVPZiIsImdlbmVyYXRlVGVzdFN1aXRlRnJvbUpzb24iLCJzdWl0ZURlZiIsInRlc3RDb25maWciLCJpdGVyYXRpb25Db3VudCIsInN1aXRlIiwiaWQiLCJuYW1lIiwiaXRlcmF0aW9ucyIsInN1aXRlRmlsZVBhdGgiLCJqb2luIiwidGFyZ2V0IiwiY3dkIiwicGFyYW1NYW5hZ2VyIiwiZ2V0UGFyYW1ldGVyTWFuYWdlciIsInBhcmFtZXRlcnMiLCJnZXRNb2RlIiwicm93cyIsImNhcGFiaWxpdGllcyIsImVudmlyb25tZW50Iiwib3B0aW9ucyIsInBhcmFsbGVsIiwiY29uY3VycmVuY3kiLCJjYXNlcyIsImZvckVhY2giLCJjYXNlRGVmIiwidGMiLCJnZXRGaWxlTmFtZVdpdGhvdXRFeHQiLCJyZXNvbHZlUGF0aCIsImZvcm1hdCIsInB1c2giLCJnZW5lcmF0ZVRlc3RTdWl0ZUZyb21KU0ZpbGUiLCJmaWxlUGF0aCIsInBhcmFtRmlsZSIsInBhcmFtTW9kZSIsIm5vUGFyYW1BdXRvU2VhcmNoIiwiZmlsZU5hbWVOb0V4dCIsInRlc3RjYXNlIiwicmVvcGVuU2Vzc2lvbiIsImRpcm5hbWUiLCJmaWxlIiwibW9kZSIsIm1haW5GaWxlUGF0aCIsInBhcmFtT3B0cyIsImF1dG9TZWFyY2giLCJwYXJhbUZpbGVQYXRoIiwiaXNBYnNvbHV0ZSIsImxvYWRQYXJhbWV0ZXJNYW5hZ2VyIiwiZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbkZpbGUiLCJmaWxlTmFtZSIsImJhc2VuYW1lIiwiZmlsZUV4dCIsImV4dG5hbWUiLCJmaWxlUGF0aE5vRXh0Iiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJtYWluRmlsZSIsImNzdlBhcmFtRmlsZSIsInR4dFBhcmFtRmlsZSIsInhsc1BhcmFtRmlsZSIsInhsc3hQYXJhbUZpbGUiLCJleGlzdHNTeW5jIiwiaW5pdCIsInBhdGhUb1Jlc29sdmUiLCJiYXNlRm9sZGVyIiwicmVzb2x2ZSIsIm1ha2VTZXJpYWxpemFibGUiLCJlcnIiLCJkZXN0cm95Q2lyY3VsYXIiLCJmcm9tIiwic2VlbiIsInRvIiwiQXJyYXkiLCJpc0FycmF5IiwiT2JqZWN0Iiwia2V5cyIsImluZGV4T2YiLCJzbGljZSIsImdldE1ldGhvZFNpZ25hdHVyZSIsIm1vZHVsZU5hbWUiLCJtZXRob2ROYW1lIiwibWV0aG9kQXJncyIsInN0cmluZ2lmeSIsImFyZ3MiLCJpbmRlbnRhdGlvbiIsInN0ciIsIkpTT04iLCJ2YWx1ZSIsIkVycm9yIiwiUmVnRXhwIiwic291cmNlIiwiZmxhZ3MiLCJyZXBsYWNlIiwiZW5kc1dpdGgiLCJsZW5ndGgiLCJlIiwiY29uc29sZSIsIndhcm4iLCJpbnNwZWN0IiwiZGVwdGgiLCJpc0luRGVidWdNb2RlIiwibG9hZFRlc3RIb29rcyIsImhvb2tzIiwiZXhlY3V0ZVRlc3RIb29rIiwibWV0aG9kIiwiZ2xvYmFsIiwiY2hhaUFuZE1vY2tlcnlMb2FkZWQiLCJjaGFpIiwibW9ja2VyeSIsImVuYWJsZSIsInVzZUNsZWFuQ2FjaGUiLCJ3YXJuT25SZXBsYWNlIiwid2Fybk9uVW5yZWdpc3RlcmVkIiwicmVnaXN0ZXJNb2NrIiwiYXBwbHkiLCJ1bmRlZmluZWQiLCJlcnJvciIsImdldE94TW9kdWxlc0RpciIsIl9fZGlybmFtZSIsImhvb2tMb2dzIiwibG9nZ2VyIiwib3JpZ2xvZyIsImxvZyIsIm9yaWdEZWJ1ZyIsImRlYnVnIiwib3JpZ0luZm8iLCJpbmZvIiwib3JpZ1dhcm4iLCJvcmlnRXJyb3IiLCJwcm9jZXNzQXJncyIsImFyZ3VtZW50QXJyYXkiLCJtYXAiLCJpdGVtIiwibWFrZVRyYW5zYWN0aW9uRmFpbGVkSWZTdGVwRmFpbGVkIiwic3RlcHMiLCJsYXN0RmluZGVkVHJhbnNhY3Rpb25JbmRleCIsIm5ld1N0ZXBzIiwiaWR4IiwiaW5jbHVkZXMiLCJzdGF0dXMiLCJkZWNyeXB0IiwidGV4dCIsImVuY3J5cHRlZFRleHQiLCJkZWNpcGhlciIsImNyZWF0ZURlY2lwaGVyaXYiLCJkZWNyeXB0ZWQiLCJ1cGRhdGUiLCJjb25jYXQiLCJmaW5hbCIsInJldFZhbCIsIk94eWdlbkVycm9yIiwiZXJyb3JIZWxwZXIiLCJlcnJvckNvZGUiLCJDUllQVE9fRVJST1IiLCJlbmNyeXB0IiwiY2lwaGVyIiwiY3JlYXRlQ2lwaGVyaXYiLCJlbmNyeXB0ZWQiLCJzbGVlcCIsInRpbWVvdXQiLCJQcm9taXNlIiwic2V0VGltZW91dCJdLCJtYXBwaW5ncyI6Ijs7OztBQXNCQTs7QUFDQTs7OztBQVhBLE1BQU1BLElBQUksR0FBR0MsT0FBTyxDQUFDLE1BQUQsQ0FBcEI7O0FBQ0EsTUFBTUMsRUFBRSxHQUFHRCxPQUFPLENBQUMsSUFBRCxDQUFsQjs7QUFDQSxNQUFNRSxNQUFNLEdBQUdGLE9BQU8sQ0FBQyxRQUFELENBQXRCOztBQUNBLE1BQU1HLE1BQU0sR0FBR0gsT0FBTyxDQUFDLFFBQUQsQ0FBdEI7O0FBQ0EsTUFBTUksSUFBSSxHQUFHSixPQUFPLENBQUMsTUFBRCxDQUFwQjs7QUFDQSxNQUFNSyxRQUFRLEdBQUdMLE9BQU8sQ0FBQyxvQkFBRCxDQUFQLENB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cHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBIZWxwZXIgbW9kdWxlIGZvciBpbnRlcm5hbCBPeHlnZW4gdXNlXHJcbiAqL1xyXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xyXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XHJcbmNvbnN0IG1vbWVudCA9IHJlcXVpcmUoJ21vbWVudCcpO1xyXG5jb25zdCBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcclxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcclxuY29uc3QgcGFzc3dvcmQgPSByZXF1aXJlKCcuLi8uLi9wYWNrYWdlLmpzb24nKS5lbmNyeXB0aW9uS2V5O1xyXG5jb25zdCBrZXkgPSBjcnlwdG8uc2NyeXB0U3luYyhwYXNzd29yZCwgJ0dmRycsIDI0KTtcclxuY29uc3QgaXYgPSBCdWZmZXIuYWxsb2MoMTYsIDApO1xyXG5jb25zdCBhbGdvcml0aG0gPSAnYWVzLTE5Mi1jYmMnO1xyXG5cclxuaW1wb3J0IE94eWdlbkVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbmltcG9ydCBlcnJvckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxuXHJcbmZ1bmN0aW9uIERlY3J5cHRSZXN1bHQocmVzdWx0KSB7XHJcbiAgICBjb25zdCBkZWNyeXB0UmVzdWx0ID0gcmVzdWx0O1xyXG5cclxuICAgIHRoaXMuZ2V0RGVjcnlwdFJlc3VsdCA9ICgpID0+IHtcclxuICAgICAgICByZXR1cm4gZGVjcnlwdFJlc3VsdDtcclxuICAgIH07XHJcbn1cclxuXHJcbmNvbnN0IERVTU1ZX0hPT0tTID0ge1xyXG4gICAgYmVmb3JlVGVzdDogKCkgPT4ge30sXHJcbiAgICBiZWZvcmVTdWl0ZTogKCkgPT4ge30sXHJcbiAgICBiZWZvcmVDYXNlOiAoKSA9PiB7fSxcclxuICAgIGJlZm9yZUNvbW1hbmQ6ICgpID0+IHt9LFxyXG4gICAgYWZ0ZXJDb21tYW5kOiAoKSA9PiB7fSxcclxuICAgIGFmdGVyVGVzdDogKCkgPT4ge30sXHJcbiAgICBhZnRlclN1aXRlOiAoKSA9PiB7fSxcclxuICAgIGFmdGVyQ2FzZTogKCkgPT4ge30sXHJcbn07XHJcblxyXG52YXIgc2VsZiA9IG1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIGdlbmVyYXRlVW5pcXVlSWQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBjcnlwdG8ucmFuZG9tQnl0ZXMoNCkudG9TdHJpbmcoJ2hleCcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRUaW1lU3RhbXA6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBtb21lbnQudXRjKCkudmFsdWVPZigpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uOiBhc3luYyBmdW5jdGlvbihzdWl0ZURlZiwgdGVzdENvbmZpZywgaXRlcmF0aW9uQ291bnQgPSAxKSB7XHJcbiAgICAgICAgdmFyIHN1aXRlID0gbmV3IHJlcXVpcmUoJy4uL21vZGVsL3Rlc3RzdWl0ZS5qcycpKCk7XHJcbiAgICAgICAgc3VpdGUuaWQgPSBudWxsO1xyXG4gICAgICAgIHN1aXRlLm5hbWUgPSBzdWl0ZURlZi5uYW1lO1xyXG4gICAgICAgIHN1aXRlLmlkID0gc3VpdGVEZWYuaWQ7XHJcbiAgICAgICAgc3VpdGUuaXRlcmF0aW9uQ291bnQgPSBzdWl0ZURlZi5pdGVyYXRpb25zIHx8IHRlc3RDb25maWcuaXRlcmF0aW9ucyB8fCBpdGVyYXRpb25Db3VudDtcclxuICAgICAgICBjb25zdCBzdWl0ZUZpbGVQYXRoID0gc3VpdGVEZWYucGF0aCB8fCBwYXRoLmpvaW4odGVzdENvbmZpZy50YXJnZXQuY3dkLCAnc3VpdGVzJywgYCR7c3VpdGVEZWYubmFtZX0uanNvbmApO1xyXG4gICAgICAgIHN1aXRlLnBhcmFtTWFuYWdlciA9IGF3YWl0IHNlbGYuZ2V0UGFyYW1ldGVyTWFuYWdlcihzdWl0ZUZpbGVQYXRoLCB0ZXN0Q29uZmlnLnBhcmFtZXRlcnMsIHRlc3RDb25maWcudGFyZ2V0LmN3ZCk7XHJcbiAgICAgICAgaWYgKHN1aXRlLnBhcmFtTWFuYWdlciAmJiBzdWl0ZS5wYXJhbU1hbmFnZXIuZ2V0TW9kZSgpID09ICdhbGwnKSB7XHJcbiAgICAgICAgICAgIHN1aXRlLml0ZXJhdGlvbkNvdW50ID0gc3VpdGUucGFyYW1NYW5hZ2VyLnJvd3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN1aXRlLmNhcGFiaWxpdGllcyA9IHN1aXRlRGVmLmNhcGFiaWxpdGllcyB8fCB0ZXN0Q29uZmlnLmNhcGFiaWxpdGllcyB8fCB7fTtcclxuICAgICAgICBzdWl0ZS5lbnZpcm9ubWVudCA9IHRlc3RDb25maWcuZW52aXJvbm1lbnQgfHwgbnVsbDtcclxuICAgICAgICBzdWl0ZS5vcHRpb25zID0gdGVzdENvbmZpZy5vcHRpb25zIHx8IG51bGw7XHJcbiAgICAgICAgc3VpdGUucGFyYWxsZWwgPSBzdWl0ZURlZi5wYXJhbGxlbCB8fCB0ZXN0Q29uZmlnLnBhcmFsbGVsIHx8IHRlc3RDb25maWcuY29uY3VycmVuY3kgfHwgMTtcclxuICAgICAgICAvLyBpbml0aWFsaXplIGVhY2ggdGVzdCBjYXNlXHJcbiAgICAgICAgc3VpdGVEZWYuY2FzZXMuZm9yRWFjaChjYXNlRGVmID0+IHtcclxuICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSB0ZXN0Y2FzZSBvYmplY3RcclxuICAgICAgICAgICAgY29uc3QgdGMgPSBuZXcgcmVxdWlyZSgnLi4vbW9kZWwvdGVzdGNhc2UuanMnKSgpO1xyXG4gICAgICAgICAgICBpZiAoY2FzZURlZi5uYW1lKVxyXG4gICAgICAgICAgICAgICAgdGMubmFtZSA9IGNhc2VEZWYubmFtZTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGMubmFtZSA9IHNlbGYuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KGNhc2VEZWYucGF0aCk7XHJcbiAgICAgICAgICAgIHRjLnBhdGggPSBzZWxmLnJlc29sdmVQYXRoKGNhc2VEZWYucGF0aCwgdGVzdENvbmZpZy50YXJnZXQuY3dkKTtcclxuICAgICAgICAgICAgdGMuZm9ybWF0ID0gJ2pzJztcclxuICAgICAgICAgICAgdGMuaXRlcmF0aW9uQ291bnQgPSBjYXNlRGVmLml0ZXJhdGlvbnMgfHwgMTtcclxuICAgICAgICAgICAgc3VpdGUuY2FzZXMucHVzaCh0Yyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHN1aXRlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZW5lcmF0ZVRlc3RTdWl0ZUZyb21KU0ZpbGU6IGFzeW5jIGZ1bmN0aW9uIChmaWxlUGF0aCwgcGFyYW1GaWxlID0gbnVsbCwgcGFyYW1Nb2RlID0gbnVsbCwgbm9QYXJhbUF1dG9TZWFyY2ggPSB0cnVlLCBpdGVyYXRpb25Db3VudCA9IDEpIHtcclxuICAgICAgICB2YXIgZmlsZU5hbWVOb0V4dCA9IHNlbGYuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KGZpbGVQYXRoKTtcclxuXHJcbiAgICAgICAgdmFyIHRlc3RjYXNlID0gbmV3IHJlcXVpcmUoJy4uL21vZGVsL3Rlc3RjYXNlLmpzJykoKTtcclxuICAgICAgICB0ZXN0Y2FzZS5uYW1lID0gZmlsZU5hbWVOb0V4dDtcclxuICAgICAgICB0ZXN0Y2FzZS5wYXRoID0gZmlsZVBhdGg7XHJcbiAgICAgICAgdGVzdGNhc2UuZm9ybWF0ID0gJ2pzJztcclxuICAgICAgICB0ZXN0Y2FzZS5pdGVyYXRpb25Db3VudCA9IDE7XHJcblxyXG4gICAgICAgIHZhciBzdWl0ZSA9IG5ldyByZXF1aXJlKCcuLi9tb2RlbC90ZXN0c3VpdGUuanMnKSgpO1xyXG4gICAgICAgIHN1aXRlLm5hbWUgPSB0ZXN0Y2FzZS5uYW1lO1xyXG4gICAgICAgIHN1aXRlLmlkID0gdGVzdGNhc2UuaWQ7XHJcbiAgICAgICAgc3VpdGUuaXRlcmF0aW9uQ291bnQgPSBpdGVyYXRpb25Db3VudDtcclxuICAgICAgICBzdWl0ZS5jYXNlcy5wdXNoKHRlc3RjYXNlKTtcclxuICAgICAgICBpZiAodGVzdGNhc2UucmVvcGVuU2Vzc2lvbikge1xyXG4gICAgICAgICAgICBzdWl0ZS5yZW9wZW5TZXNzaW9uID0gdGVzdGNhc2UucmVvcGVuU2Vzc2lvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3dkID0gcGF0aC5kaXJuYW1lKGZpbGVQYXRoKTtcclxuICAgICAgICBzdWl0ZS5wYXJhbU1hbmFnZXIgPSBhd2FpdCBzZWxmLmdldFBhcmFtZXRlck1hbmFnZXIoZmlsZVBhdGgsIHsgZmlsZTogcGFyYW1GaWxlLCBtb2RlOiBwYXJhbU1vZGUgfSwgY3dkKTtcclxuICAgICAgICAvLyBpZiBwYXJhbWV0ZXIgcmVhZGluZyBtb2RlIGlzICdhbGwnIHRoZW4gY2hhbmdlIGl0ZXJhdGlvbkNvdW50IHRvIHRoZSBhbW91bnQgb2Ygcm93cyBpbiB0aGUgcGFyYW0gZmlsZVxyXG4gICAgICAgIGlmIChzdWl0ZS5wYXJhbU1hbmFnZXIgJiYgcGFyYW1Nb2RlID09ICdhbGwnKSB7XHJcbiAgICAgICAgICAgIHN1aXRlLml0ZXJhdGlvbkNvdW50ID0gc3VpdGUucGFyYW1NYW5hZ2VyLnJvd3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdWl0ZTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0UGFyYW1ldGVyTWFuYWdlcjogYXN5bmMgZnVuY3Rpb24obWFpbkZpbGVQYXRoLCBwYXJhbU9wdHMgPSBudWxsLCBjd2QgPSBudWxsLCBhdXRvU2VhcmNoID0gZmFsc2UpIHtcclxuICAgICAgICBsZXQgcGFyYW1GaWxlUGF0aCA9IHBhcmFtT3B0cyAmJiBwYXJhbU9wdHMuZmlsZSA/IHBhcmFtT3B0cy5maWxlIDogbnVsbDtcclxuICAgICAgICBsZXQgcGFyYW1Nb2RlID0gcGFyYW1PcHRzICYmIHBhcmFtT3B0cy5tb2RlID8gcGFyYW1PcHRzLm1vZGUgOiAnc2VxJztcclxuXHJcbiAgICAgICAgaWYgKHBhcmFtRmlsZVBhdGggJiYgY3dkICYmICFwYXRoLmlzQWJzb2x1dGUocGFyYW1GaWxlUGF0aCkpIHtcclxuICAgICAgICAgICAgcGFyYW1GaWxlUGF0aCA9IHBhdGguam9pbihjd2QsIHBhcmFtRmlsZVBhdGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHNlbGYubG9hZFBhcmFtZXRlck1hbmFnZXIobWFpbkZpbGVQYXRoLCBwYXJhbUZpbGVQYXRoLCBwYXJhbU1vZGUsIGF1dG9TZWFyY2gpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uRmlsZTogYXN5bmMgZnVuY3Rpb24gKGZpbGVQYXRoLCBwYXJhbUZpbGUsIHBhcmFtTW9kZSA9IG51bGwsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgIGNvbnN0IHRlc3RDb25maWcgPSB7XHJcbiAgICAgICAgICAgIC4uLm9wdGlvbnMgfHwge30sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAocGFyYW1GaWxlKSB7XHJcbiAgICAgICAgICAgIHRlc3RDb25maWcucGFyYW1ldGVycyA9IHtcclxuICAgICAgICAgICAgICAgIGZpbGU6IHBhcmFtRmlsZSxcclxuICAgICAgICAgICAgICAgIG1vZGU6IHBhcmFtTW9kZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHNlbGYuZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbihyZXF1aXJlKGZpbGVQYXRoKSwgdGVzdENvbmZpZyk7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEZpbGVOYW1lV2l0aG91dEV4dDogZnVuY3Rpb24gKGZpbGVQYXRoKSB7XHJcbiAgICAgICAgdmFyIGZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlUGF0aCk7XHJcbiAgICAgICAgdmFyIGZpbGVFeHQgPSBwYXRoLmV4dG5hbWUoZmlsZVBhdGgpO1xyXG4gICAgICAgIHZhciBmaWxlUGF0aE5vRXh0ID0gZmlsZU5hbWUuc3Vic3RyaW5nKDAsIGZpbGVOYW1lLmxhc3RJbmRleE9mKGZpbGVFeHQpKTtcclxuICAgICAgICByZXR1cm4gZmlsZVBhdGhOb0V4dDtcclxuICAgIH0sXHJcblxyXG4gICAgbG9hZFBhcmFtZXRlck1hbmFnZXI6IGFzeW5jIGZ1bmN0aW9uKG1haW5GaWxlLCBwYXJhbUZpbGUsIHBhcmFtTW9kZSwgYXV0b1NlYXJjaCA9IGZhbHNlKSB7XHJcbiAgICAgICAgdmFyIHBhcmFtTWFuYWdlciA9IG51bGw7XHJcbiAgICAgICAgLy8gaWYgcGFyYW0gZmlsZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIGNoZWNrIGlmIEpTIGZpbGUgaXMgY29taW5nIGluIHBhaXIgd2l0aCBhIHBhcmFtZXRlciBmaWxlIFxyXG4gICAgICAgIC8vIChjdXJyZW50bHkgc3VwcG9ydGluZyBDU1Ygb3IgVFhUKVxyXG4gICAgICAgIGlmICghcGFyYW1GaWxlICYmIGF1dG9TZWFyY2gpIHtcclxuICAgICAgICAgICAgdmFyIGZpbGVOYW1lTm9FeHQgPSBzZWxmLmdldEZpbGVOYW1lV2l0aG91dEV4dChtYWluRmlsZSk7XHJcbiAgICAgICAgICAgIHZhciBjc3ZQYXJhbUZpbGUgPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKG1haW5GaWxlKSwgZmlsZU5hbWVOb0V4dCArICcuY3N2Jyk7XHJcbiAgICAgICAgICAgIHZhciB0eHRQYXJhbUZpbGUgPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKG1haW5GaWxlKSwgZmlsZU5hbWVOb0V4dCArICcudHh0Jyk7XHJcbiAgICAgICAgICAgIHZhciB4bHNQYXJhbUZpbGUgPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKG1haW5GaWxlKSwgZmlsZU5hbWVOb0V4dCArICcueGxzJyk7XHJcbiAgICAgICAgICAgIHZhciB4bHN4UGFyYW1GaWxlID0gcGF0aC5qb2luKHBhdGguZGlybmFtZShtYWluRmlsZSksIGZpbGVOYW1lTm9FeHQgKyAnLnhsc3gnKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGNzdlBhcmFtRmlsZSkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtRmlsZSA9IGNzdlBhcmFtRmlsZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmcy5leGlzdHNTeW5jKHR4dFBhcmFtRmlsZSkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtRmlsZSA9IHR4dFBhcmFtRmlsZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmcy5leGlzdHNTeW5jKHhsc1BhcmFtRmlsZSkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtRmlsZSA9IHhsc1BhcmFtRmlsZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmcy5leGlzdHNTeW5jKHhsc3hQYXJhbUZpbGUpKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbUZpbGUgPSB4bHN4UGFyYW1GaWxlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJhbUZpbGUpIHtcclxuICAgICAgICAgICAgcGFyYW1NYW5hZ2VyID0gbmV3IHJlcXVpcmUoJy4vcGFyYW0tbWFuYWdlcicpKHBhcmFtRmlsZSwgcGFyYW1Nb2RlIHx8ICdzZXF1ZW50aWFsJyk7XHJcbiAgICAgICAgICAgIGF3YWl0IHBhcmFtTWFuYWdlci5pbml0KCk7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJhbU1hbmFnZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICByZXNvbHZlUGF0aDogZnVuY3Rpb24ocGF0aFRvUmVzb2x2ZSwgYmFzZUZvbGRlcikge1xyXG4gICAgICAgIGlmIChwYXRoLmlzQWJzb2x1dGUocGF0aFRvUmVzb2x2ZSkpXHJcbiAgICAgICAgICAgIHJldHVybiBwYXRoVG9SZXNvbHZlO1xyXG4gICAgICAgIHJldHVybiBwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgcGF0aFRvUmVzb2x2ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VTZXJpYWxpemFibGU6IGZ1bmN0aW9uKGVycikge1xyXG4gICAgICAgIGlmICh0eXBlb2YgZXJyID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICByZXR1cm4gZGVzdHJveUNpcmN1bGFyKGVyciwgW10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZXJyO1xyXG5cclxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vam9ucGFja2VyL2Rlc3Ryb3ktY2lyY3VsYXJcclxuICAgICAgICBmdW5jdGlvbiBkZXN0cm95Q2lyY3VsYXIoZnJvbSwgc2Vlbikge1xyXG4gICAgICAgICAgICB2YXIgdG8gPSBBcnJheS5pc0FycmF5KGZyb20pID8gW10gOiB7fTtcclxuICAgICAgICAgICAgc2Vlbi5wdXNoKGZyb20pO1xyXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhmcm9tKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFmcm9tW2tleV0gfHwgKHR5cGVvZiBmcm9tW2tleV0gIT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoZnJvbVtrZXldKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0b1trZXldID0gZnJvbVtrZXldO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWVuLmluZGV4T2YoZnJvbVtrZXldKSA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRvW2tleV0gPSBkZXN0cm95Q2lyY3VsYXIoZnJvbVtrZXldLCBzZWVuLnNsaWNlKDApKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB0b1trZXldID0gJ1tDaXJjdWxhcl0nO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHRvO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0TWV0aG9kU2lnbmF0dXJlOiBmdW5jdGlvbihtb2R1bGVOYW1lLCBtZXRob2ROYW1lLCBtZXRob2RBcmdzKSB7XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZU5hbWUgKyAnLicgKyBtZXRob2ROYW1lICsgJygnICsgc2VsZi5zdHJpbmdpZnkobWV0aG9kQXJncywgMCkgKyAnKSc7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBVc2VkIHRvIHNlcmlhbGl6ZSBveHlnZW4gY29tbWFuZCBwYXJhbWV0ZXJzLiBQcm9kdWNlcyBhIG5vbi1jb21wbGlhbnQgSlNPTiBzZXJpYWxpemF0aW9uLlxyXG4gICAgICovXHJcbiAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uIChhcmdzLCBpbmRlbnRhdGlvbiA9IDApIHtcclxuICAgICAgICBsZXQgc3RyO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHN0ciA9IEpTT04uc3RyaW5naWZ5KGFyZ3MsIChrZXksIHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYmlnaW50JykgeyAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vR29vZ2xlQ2hyb21lTGFicy9qc2JpL2lzc3Vlcy8zMFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHVuZGVmaW5lZCBpcyBpbnNpZGUgYW4gYXJyYXkgdGhlbiBpdCB3aWxsIGJlIHNlcmlhbGl6ZWQgYXMgbnVsbC5cclxuICAgICAgICAgICAgICAgICAgICAvLyBob3dldmVyIGlmIHdlIGp1c3QgcmV0dXJuICd1bmRlZmluZWQnIGhlcmUgYXMgc3RyaW5nLCBpdCB3aWxsIGJlIGVuY2xvc2VkIGluIHF1b3Rlcy5cclxuICAgICAgICAgICAgICAgICAgICAvLyBzbyByZXR1cm4gbWFnaWMgc3RyaW5nIGluc3RlYWQgYW5kIHRyaW0gdGhlIHF1b3RlcyBsYXRlciBvblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnX19VTkRFRklORUQnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcvJyArIHZhbHVlLnNvdXJjZSArICcvJyArIHZhbHVlLmZsYWdzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgICAgICB9LCBpbmRlbnRhdGlvbik7XHJcbiAgICAgICAgICAgIC8vIHRyaW0gdGhlIGVuY2xvc2luZyBhcnJheSBhbmQgYW55IHdoaXRlc3BhY2VcclxuICAgICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL15cXFt7MX1cXHMqfFxccypcXF17MX0kL2csICcnKTtcclxuICAgICAgICAgICAgLy8gcmVtb3ZlIHNwYWNlIGJlZm9yZSBsYXN0IH0gYW5kIF0sIHRvIG1ha2UgaW5kZW50YXRpb24gbXRjaCB0aGUgb3BlbmluZyBicmFja2V0XHJcbiAgICAgICAgICAgIGlmIChzdHIuZW5kc1dpdGgoJyAgfScpKSB7XHJcbiAgICAgICAgICAgICAgICBzdHIgPSBzdHIuc3Vic3RyaW5nKDAsIHN0ci5sZW5ndGggLSAzKSArICd9JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc3RyLmVuZHNXaXRoKCcgIF0nKSkge1xyXG4gICAgICAgICAgICAgICAgc3RyID0gc3RyLnN1YnN0cmluZygwLCBzdHIubGVuZ3RoIC0gMykgKyAnXSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gY29udmVydCBtYWdpYyAndW5kZWZpbmVkJyBzdHJpbmcgdG8gcHJvcGVyIHJlcHJlc2VudGF0aW9uXHJcbiAgICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cIl9fVU5ERUZJTkVEXCIvZywgJ3VuZGVmaW5lZCcpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gc2VyaWFsaXplIGNvbW1hbmQgYXJndW1lbnRzOiAnLCBlKTtcclxuICAgICAgICAgICAgLy8gaWYgSlNPTi5zdHJpbmdpZnkgZmFpbHMsIHRoZW4gZmFsbGJhY2sgdG8gdXRpbC5pbnNwZWN0LlxyXG4gICAgICAgICAgICAvLyAod2UgZG9uJ3QgdXNlIHV0aWwuaW5zcGVjdCBpbml0aWFseSBiZWNhdXNlIGl0IGRvZXNuJ3Qgc3VwcG9ydCBvdXRwdXQgaW5kZW50YXRpb24pXHJcbiAgICAgICAgICAgIHJldHVybiB1dGlsLmluc3BlY3QoYXJnc1swXSwgeyBkZXB0aDogMyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN0cjtcclxuICAgIH0sXHJcblxyXG4gICAgaXNJbkRlYnVnTW9kZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgLy8gdGhpcyBhbHdheXMgdHJ1ZTtcclxuICAgICAgICAvLyBjb25zdCBhcmd2ID0gcHJvY2Vzcy5leGVjQXJndi5qb2luKCk7XHJcblxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdwcm9jZXNzLmRlYnVnUG9ydCcsIHByb2Nlc3MuZGVidWdQb3J0KTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImFyZ3YuaW5jbHVkZXMoJ2luc3BlY3QnKVwiLCBhcmd2LmluY2x1ZGVzKCdpbnNwZWN0JykpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYXJndi5pbmNsdWRlcygnaW5zcGVjdC1icmsnKVwiLCBhcmd2LmluY2x1ZGVzKCdpbnNwZWN0LWJyaycpKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImFyZ3YuaW5jbHVkZXMoJ2RlYnVnJylcIiwgYXJndi5pbmNsdWRlcygnZGVidWcnKSk7XHJcblxyXG4gICAgICAgIC8vIHJldHVybiBwcm9jZXNzLmRlYnVnUG9ydCB8fCBhcmd2LmluY2x1ZGVzKCdpbnNwZWN0JykgfHwgYXJndi5pbmNsdWRlcygnaW5zcGVjdC1icmsnKSB8fCBhcmd2LmluY2x1ZGVzKCdkZWJ1ZycpO1xyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIGxvYWRUZXN0SG9va3M6IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuICAgICAgICBsZXQgaG9va3MgPSBEVU1NWV9IT09LUztcclxuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnRhcmdldCAmJiBvcHRpb25zLnRhcmdldC5uYW1lID09PSAnb3h5Z2VuLmNvbmYnKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBob29rcyA9IHJlcXVpcmUob3B0aW9ucy50YXJnZXQucGF0aCkuaG9va3MgfHwgRFVNTVlfSE9PS1M7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignRXJyb3IgbG9hZGluZyB1c2VyIGhvb2tzOicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBob29rcztcclxuICAgIH0sXHJcblxyXG4gICAgZXhlY3V0ZVRlc3RIb29rOiBhc3luYyBmdW5jdGlvbihob29rcywgbWV0aG9kLCBhcmdzKSB7XHJcbiAgICAgICAgLy8gaWYgaG9vayBpcyBub3QgZGVmaW5lZCwganVzdCBxdWlldGx5IGlnbm9yZSBpdFxyXG4gICAgICAgIGlmICghaG9va3MgfHwgIW1ldGhvZCB8fCAhaG9va3NbbWV0aG9kXSB8fCB0eXBlb2YgaG9va3NbbWV0aG9kXSAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGdsb2JhbC5jaGFpQW5kTW9ja2VyeUxvYWRlZCkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGFpID0gcmVxdWlyZSgnY2hhaScpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9ja2VyeSA9IHJlcXVpcmUoJ21vY2tlcnknKTtcclxuICAgICAgICAgICAgICAgIG1vY2tlcnkuZW5hYmxlKHtcclxuICAgICAgICAgICAgICAgICAgICB1c2VDbGVhbkNhY2hlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHdhcm5PblJlcGxhY2U6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHdhcm5PblVucmVnaXN0ZXJlZDogZmFsc2VcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgbW9ja2VyeS5yZWdpc3Rlck1vY2soJ2NoYWknLCBjaGFpKTtcclxuICAgICAgICAgICAgICAgIGdsb2JhbC5jaGFpQW5kTW9ja2VyeUxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGF3YWl0IGhvb2tzW21ldGhvZF0uYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgSG9vayBcIiR7bWV0aG9kfVwiIGhhcyB0aHJvd24gYW4gZXJyb3I6ICR7ZS50b1N0cmluZygpfWApO1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0T3hNb2R1bGVzRGlyOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJ294X21vZHVsZXMnKTtcclxuICAgIH0sXHJcblxyXG4gICAgaG9va0xvZ3MobG9nZ2VyKSB7XHJcbiAgICAgICAgY29uc3Qgb3JpZ2xvZyA9IGNvbnNvbGUubG9nO1xyXG4gICAgICAgIGNvbnN0IG9yaWdEZWJ1ZyA9IGNvbnNvbGUuZGVidWc7XHJcbiAgICAgICAgY29uc3Qgb3JpZ0luZm8gPSBjb25zb2xlLmluZm87XHJcbiAgICAgICAgY29uc3Qgb3JpZ1dhcm4gPSBjb25zb2xlLndhcm47XHJcbiAgICAgICAgY29uc3Qgb3JpZ0Vycm9yID0gY29uc29sZS5lcnJvcjtcclxuXHJcbiAgICAgICAgY29uc3QgcHJvY2Vzc0FyZ3MgPSAoYXJndW1lbnRBcnJheSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gW107XHJcblxyXG4gICAgICAgICAgICBpZiAoYXJndW1lbnRBcnJheSAmJiBhcmd1bWVudEFycmF5Lm1hcCkge1xyXG4gICAgICAgICAgICAgICAgYXJndW1lbnRBcnJheS5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGAke2l0ZW19YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYCR7dXRpbC5pbnNwZWN0KGl0ZW0pfWApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LmpvaW4oJyAnKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyA9IGZ1bmN0aW9uICguLi5hcmd1bWVudEFycmF5KSB7XHJcbiAgICAgICAgICAgIG9yaWdsb2cuYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKHByb2Nlc3NBcmdzKGFyZ3VtZW50QXJyYXkpKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnNvbGUuZGVidWcgPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRBcnJheSkge1xyXG4gICAgICAgICAgICBvcmlnRGVidWcuYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1Zyhwcm9jZXNzQXJncyhhcmd1bWVudEFycmF5KSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zb2xlLmluZm8gPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRBcnJheSkge1xyXG4gICAgICAgICAgICBvcmlnSW5mby5hcHBseSh0aGlzLCBhcmd1bWVudEFycmF5KTtcclxuICAgICAgICAgICAgbG9nZ2VyLmluZm8ocHJvY2Vzc0FyZ3MoYXJndW1lbnRBcnJheSkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc29sZS53YXJuID0gZnVuY3Rpb24gKC4uLmFyZ3VtZW50QXJyYXkpIHtcclxuICAgICAgICAgICAgb3JpZ1dhcm4uYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci53YXJuKHByb2Nlc3NBcmdzKGFyZ3VtZW50QXJyYXkpKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IgPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRBcnJheSkge1xyXG4gICAgICAgICAgICBvcmlnRXJyb3IuYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihwcm9jZXNzQXJncyhhcmd1bWVudEFycmF5KSk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgbWFrZVRyYW5zYWN0aW9uRmFpbGVkSWZTdGVwRmFpbGVkKHN0ZXBzKSB7XHJcbiAgICAgICAgaWYgKHN0ZXBzICYmIHN0ZXBzLmxlbmd0aCAmJiBzdGVwcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBsYXN0RmluZGVkVHJhbnNhY3Rpb25JbmRleCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdTdGVwcyA9IFsuLi5zdGVwc107XHJcbiAgICAgICAgICAgIHN0ZXBzLm1hcCgoaXRlbSwgaWR4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5uYW1lICYmIGl0ZW0ubmFtZS5pbmNsdWRlcyAmJiBpdGVtLm5hbWUuaW5jbHVkZXMoJy50cmFuc2FjdGlvbignKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhc3RGaW5kZWRUcmFuc2FjdGlvbkluZGV4ID0gaWR4O1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbGFzdEZpbmRlZFRyYW5zYWN0aW9uSW5kZXggPT09ICdudW1iZXInICYmIGl0ZW0uc3RhdHVzICYmIGl0ZW0uc3RhdHVzID09PSAnZmFpbGVkJykge1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1N0ZXBzW2xhc3RGaW5kZWRUcmFuc2FjdGlvbkluZGV4XVsnc3RhdHVzJ10gPSAnZmFpbGVkJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbmV3U3RlcHM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc3RlcHM7XHJcbiAgICB9LFxyXG5cclxuICAgIGRlY3J5cHQodGV4dCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCBlbmNyeXB0ZWRUZXh0ID0gQnVmZmVyLmZyb20odGV4dCwgJ2hleCcpO1xyXG4gICAgICAgICAgICBsZXQgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdihhbGdvcml0aG0sIGtleSwgaXYpO1xyXG4gICAgICAgICAgICBsZXQgZGVjcnlwdGVkID0gZGVjaXBoZXIudXBkYXRlKGVuY3J5cHRlZFRleHQpO1xyXG4gICAgICAgICAgICBkZWNyeXB0ZWQgPSBCdWZmZXIuY29uY2F0KFtkZWNyeXB0ZWQsIGRlY2lwaGVyLmZpbmFsKCldKTtcclxuICAgICAgICAgICAgY29uc3QgcmV0VmFsID0gZGVjcnlwdGVkLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGVjcnlwdFJlc3VsdChyZXRWYWwpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94eWdlbkVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5DUllQVE9fRVJST1IsIFwiVGhlIHByb3ZpZGVkIGFyZ3VtZW50IGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHZhbGlkIGNpcGhlciBwcm9kdWNlZCBieSAndXRpbHMuZW5jcnlwdCdcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBlbmNyeXB0KHRleHQpIHtcclxuICAgICAgICBsZXQgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KGFsZ29yaXRobSwga2V5LCBpdik7XHJcbiAgICAgICAgbGV0IGVuY3J5cHRlZCA9IGNpcGhlci51cGRhdGUodGV4dCk7XHJcbiAgICAgICAgZW5jcnlwdGVkID0gQnVmZmVyLmNvbmNhdChbZW5jcnlwdGVkLCBjaXBoZXIuZmluYWwoKV0pO1xyXG4gICAgICAgIHJldHVybiBlbmNyeXB0ZWQudG9TdHJpbmcoJ2hleCcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzbGVlcDogZnVuY3Rpb24odGltZW91dCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0KSk7XHJcbiAgICB9XHJcbn07XHJcbiJdfQ==
|
|
315
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXRoIiwicmVxdWlyZSIsImZzIiwibW9tZW50IiwiY3J5cHRvIiwidXRpbCIsInBhc3N3b3JkIiwiZW5jcnlwdGlvbktleSIsImtleSIsInNjcnlwdFN5bmMiLCJpdiIsIkJ1ZmZlciIsImFsbG9jIiwiYWxnb3JpdGhtIiwiRGVjcnlwdFJlc3VsdCIsInJlc3VsdCIsImRlY3J5cHRSZXN1bHQiLCJnZXREZWNyeXB0UmVzdWx0IiwiRFVNTVlfSE9PS1MiLCJiZWZvcmVUZXN0IiwiYmVmb3JlU3VpdGUiLCJiZWZvcmVDYXNlIiwiYmVmb3JlQ29tbWFuZCIsImFmdGVyQ29tbWFuZCIsImFmdGVyVGVzdCIsImFmdGVyU3VpdGUiLCJhZnRlckNhc2UiLCJzZWxmIiwibW9kdWxlIiwiZXhwb3J0cyIsImdlbmVyYXRlVW5pcXVlSWQiLCJyYW5kb21CeXRlcyIsInRvU3RyaW5nIiwiZ2V0VGltZVN0YW1wIiwidXRjIiwidmFsdWVPZiIsImdlbmVyYXRlVGVzdFN1aXRlRnJvbUpzb24iLCJzdWl0ZURlZiIsInRlc3RDb25maWciLCJpdGVyYXRpb25Db3VudCIsInN1aXRlIiwiaWQiLCJuYW1lIiwiaXRlcmF0aW9ucyIsInN1aXRlRmlsZVBhdGgiLCJqb2luIiwidGFyZ2V0IiwiY3dkIiwicGFyYW1NYW5hZ2VyIiwiZ2V0UGFyYW1ldGVyTWFuYWdlciIsInBhcmFtZXRlcnMiLCJnZXRNb2RlIiwicm93cyIsImNhcGFiaWxpdGllcyIsImVudmlyb25tZW50Iiwib3B0aW9ucyIsInBhcmFsbGVsIiwiY29uY3VycmVuY3kiLCJjYXNlcyIsImZvckVhY2giLCJjYXNlRGVmIiwidGMiLCJnZXRGaWxlTmFtZVdpdGhvdXRFeHQiLCJyZXNvbHZlUGF0aCIsImZvcm1hdCIsInB1c2giLCJnZW5lcmF0ZVRlc3RTdWl0ZUZyb21KU0ZpbGUiLCJmaWxlUGF0aCIsInBhcmFtRmlsZSIsInBhcmFtTW9kZSIsIm5vUGFyYW1BdXRvU2VhcmNoIiwiZmlsZU5hbWVOb0V4dCIsInRlc3RjYXNlIiwicmVvcGVuU2Vzc2lvbiIsImRpcm5hbWUiLCJmaWxlIiwibW9kZSIsIm1haW5GaWxlUGF0aCIsInBhcmFtT3B0cyIsImF1dG9TZWFyY2giLCJwYXJhbUZpbGVQYXRoIiwiaXNBYnNvbHV0ZSIsImxvYWRQYXJhbWV0ZXJNYW5hZ2VyIiwiZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbkZpbGUiLCJmaWxlTmFtZSIsImJhc2VuYW1lIiwiZmlsZUV4dCIsImV4dG5hbWUiLCJmaWxlUGF0aE5vRXh0Iiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJtYWluRmlsZSIsImNzdlBhcmFtRmlsZSIsInR4dFBhcmFtRmlsZSIsInhsc1BhcmFtRmlsZSIsInhsc3hQYXJhbUZpbGUiLCJleGlzdHNTeW5jIiwiaW5pdCIsInBhdGhUb1Jlc29sdmUiLCJiYXNlRm9sZGVyIiwicmVzb2x2ZSIsIm1ha2VTZXJpYWxpemFibGUiLCJlcnIiLCJkZXN0cm95Q2lyY3VsYXIiLCJmcm9tIiwic2VlbiIsInRvIiwiQXJyYXkiLCJpc0FycmF5IiwiT2JqZWN0Iiwia2V5cyIsImluZGV4T2YiLCJzbGljZSIsImdldE1ldGhvZFNpZ25hdHVyZSIsIm1vZHVsZU5hbWUiLCJtZXRob2ROYW1lIiwibWV0aG9kQXJncyIsInN0cmluZ2lmeSIsImFyZ3MiLCJpbmRlbnRhdGlvbiIsInN0ciIsIkpTT04iLCJ2YWx1ZSIsIkVycm9yIiwiUmVnRXhwIiwic291cmNlIiwiZmxhZ3MiLCJyZXBsYWNlIiwiZW5kc1dpdGgiLCJsZW5ndGgiLCJlIiwiY29uc29sZSIsIndhcm4iLCJpbnNwZWN0IiwiZGVwdGgiLCJpc0luRGVidWdNb2RlIiwibG9hZFRlc3RIb29rcyIsImhvb2tzIiwiZXhlY3V0ZVRlc3RIb29rIiwibWV0aG9kIiwiZ2xvYmFsIiwiY2hhaUFuZE1vY2tlcnlMb2FkZWQiLCJjaGFpIiwibW9ja2VyeSIsImVuYWJsZSIsInVzZUNsZWFuQ2FjaGUiLCJ3YXJuT25SZXBsYWNlIiwid2Fybk9uVW5yZWdpc3RlcmVkIiwicmVnaXN0ZXJNb2NrIiwiYXBwbHkiLCJ1bmRlZmluZWQiLCJlcnJvciIsImdldE94TW9kdWxlc0RpciIsIl9fZGlybmFtZSIsImhvb2tMb2dzIiwibG9nZ2VyIiwib3JpZ2xvZyIsImxvZyIsIm9yaWdEZWJ1ZyIsImRlYnVnIiwib3JpZ0luZm8iLCJpbmZvIiwib3JpZ1dhcm4iLCJvcmlnRXJyb3IiLCJwcm9jZXNzQXJncyIsImFyZ3VtZW50QXJyYXkiLCJtYXAiLCJpdGVtIiwibWFrZVRyYW5zYWN0aW9uRmFpbGVkSWZTdGVwRmFpbGVkIiwic3RlcHMiLCJsYXN0RmluZGVkVHJhbnNhY3Rpb25JbmRleCIsIm5ld1N0ZXBzIiwiaWR4IiwiaW5jbHVkZXMiLCJzdGF0dXMiLCJkZWNyeXB0IiwidGV4dCIsImVuY3J5cHRlZFRleHQiLCJkZWNpcGhlciIsImNyZWF0ZURlY2lwaGVyaXYiLCJkZWNyeXB0ZWQiLCJ1cGRhdGUiLCJjb25jYXQiLCJmaW5hbCIsInJldFZhbCIsIk94eWdlbkVycm9yIiwiZXJyb3JIZWxwZXIiLCJlcnJvckNvZGUiLCJDUllQVE9fRVJST1IiLCJlbmNyeXB0IiwiY2lwaGVyIiwiY3JlYXRlQ2lwaGVyaXYiLCJlbmNyeXB0ZWQiLCJzbGVlcCIsInRpbWVvdXQiLCJQcm9taXNlIiwic2V0VGltZW91dCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdXRpbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBIZWxwZXIgbW9kdWxlIGZvciBpbnRlcm5hbCBPeHlnZW4gdXNlXHJcbiAqL1xyXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xyXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XHJcbmNvbnN0IG1vbWVudCA9IHJlcXVpcmUoJ21vbWVudCcpO1xyXG5jb25zdCBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcclxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcclxuY29uc3QgcGFzc3dvcmQgPSByZXF1aXJlKCcuLi8uLi9wYWNrYWdlLmpzb24nKS5lbmNyeXB0aW9uS2V5O1xyXG5jb25zdCBrZXkgPSBjcnlwdG8uc2NyeXB0U3luYyhwYXNzd29yZCwgJ0dmRycsIDI0KTtcclxuY29uc3QgaXYgPSBCdWZmZXIuYWxsb2MoMTYsIDApO1xyXG5jb25zdCBhbGdvcml0aG0gPSAnYWVzLTE5Mi1jYmMnO1xyXG5cclxuaW1wb3J0IE94eWdlbkVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbmltcG9ydCBlcnJvckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxuXHJcbmZ1bmN0aW9uIERlY3J5cHRSZXN1bHQocmVzdWx0KSB7XHJcbiAgICBjb25zdCBkZWNyeXB0UmVzdWx0ID0gcmVzdWx0O1xyXG5cclxuICAgIHRoaXMuZ2V0RGVjcnlwdFJlc3VsdCA9ICgpID0+IHtcclxuICAgICAgICByZXR1cm4gZGVjcnlwdFJlc3VsdDtcclxuICAgIH07XHJcbn1cclxuXHJcbmNvbnN0IERVTU1ZX0hPT0tTID0ge1xyXG4gICAgYmVmb3JlVGVzdDogKCkgPT4ge30sXHJcbiAgICBiZWZvcmVTdWl0ZTogKCkgPT4ge30sXHJcbiAgICBiZWZvcmVDYXNlOiAoKSA9PiB7fSxcclxuICAgIGJlZm9yZUNvbW1hbmQ6ICgpID0+IHt9LFxyXG4gICAgYWZ0ZXJDb21tYW5kOiAoKSA9PiB7fSxcclxuICAgIGFmdGVyVGVzdDogKCkgPT4ge30sXHJcbiAgICBhZnRlclN1aXRlOiAoKSA9PiB7fSxcclxuICAgIGFmdGVyQ2FzZTogKCkgPT4ge30sXHJcbn07XHJcblxyXG52YXIgc2VsZiA9IG1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIGdlbmVyYXRlVW5pcXVlSWQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBjcnlwdG8ucmFuZG9tQnl0ZXMoNCkudG9TdHJpbmcoJ2hleCcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRUaW1lU3RhbXA6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBtb21lbnQudXRjKCkudmFsdWVPZigpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uOiBhc3luYyBmdW5jdGlvbihzdWl0ZURlZiwgdGVzdENvbmZpZywgaXRlcmF0aW9uQ291bnQgPSAxKSB7XHJcbiAgICAgICAgdmFyIHN1aXRlID0gbmV3IHJlcXVpcmUoJy4uL21vZGVsL3Rlc3RzdWl0ZS5qcycpKCk7XHJcbiAgICAgICAgc3VpdGUuaWQgPSBudWxsO1xyXG4gICAgICAgIHN1aXRlLm5hbWUgPSBzdWl0ZURlZi5uYW1lO1xyXG4gICAgICAgIHN1aXRlLmlkID0gc3VpdGVEZWYuaWQ7XHJcbiAgICAgICAgc3VpdGUuaXRlcmF0aW9uQ291bnQgPSBzdWl0ZURlZi5pdGVyYXRpb25zIHx8IHRlc3RDb25maWcuaXRlcmF0aW9ucyB8fCBpdGVyYXRpb25Db3VudDtcclxuICAgICAgICBjb25zdCBzdWl0ZUZpbGVQYXRoID0gc3VpdGVEZWYucGF0aCB8fCBwYXRoLmpvaW4odGVzdENvbmZpZy50YXJnZXQuY3dkLCAnc3VpdGVzJywgYCR7c3VpdGVEZWYubmFtZX0uanNvbmApO1xyXG4gICAgICAgIHN1aXRlLnBhcmFtTWFuYWdlciA9IGF3YWl0IHNlbGYuZ2V0UGFyYW1ldGVyTWFuYWdlcihzdWl0ZUZpbGVQYXRoLCB0ZXN0Q29uZmlnLnBhcmFtZXRlcnMsIHRlc3RDb25maWcudGFyZ2V0LmN3ZCk7XHJcbiAgICAgICAgaWYgKHN1aXRlLnBhcmFtTWFuYWdlciAmJiBzdWl0ZS5wYXJhbU1hbmFnZXIuZ2V0TW9kZSgpID09ICdhbGwnKSB7XHJcbiAgICAgICAgICAgIHN1aXRlLml0ZXJhdGlvbkNvdW50ID0gc3VpdGUucGFyYW1NYW5hZ2VyLnJvd3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN1aXRlLmNhcGFiaWxpdGllcyA9IHN1aXRlRGVmLmNhcGFiaWxpdGllcyB8fCB0ZXN0Q29uZmlnLmNhcGFiaWxpdGllcyB8fCB7fTtcclxuICAgICAgICBzdWl0ZS5lbnZpcm9ubWVudCA9IHRlc3RDb25maWcuZW52aXJvbm1lbnQgfHwgbnVsbDtcclxuICAgICAgICBzdWl0ZS5vcHRpb25zID0gdGVzdENvbmZpZy5vcHRpb25zIHx8IG51bGw7XHJcbiAgICAgICAgc3VpdGUucGFyYWxsZWwgPSBzdWl0ZURlZi5wYXJhbGxlbCB8fCB0ZXN0Q29uZmlnLnBhcmFsbGVsIHx8IHRlc3RDb25maWcuY29uY3VycmVuY3kgfHwgMTtcclxuICAgICAgICAvLyBpbml0aWFsaXplIGVhY2ggdGVzdCBjYXNlXHJcbiAgICAgICAgc3VpdGVEZWYuY2FzZXMuZm9yRWFjaChjYXNlRGVmID0+IHtcclxuICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSB0ZXN0Y2FzZSBvYmplY3RcclxuICAgICAgICAgICAgY29uc3QgdGMgPSBuZXcgcmVxdWlyZSgnLi4vbW9kZWwvdGVzdGNhc2UuanMnKSgpO1xyXG4gICAgICAgICAgICBpZiAoY2FzZURlZi5uYW1lKVxyXG4gICAgICAgICAgICAgICAgdGMubmFtZSA9IGNhc2VEZWYubmFtZTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGMubmFtZSA9IHNlbGYuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KGNhc2VEZWYucGF0aCk7XHJcbiAgICAgICAgICAgIHRjLnBhdGggPSBzZWxmLnJlc29sdmVQYXRoKGNhc2VEZWYucGF0aCwgdGVzdENvbmZpZy50YXJnZXQuY3dkKTtcclxuICAgICAgICAgICAgdGMuZm9ybWF0ID0gJ2pzJztcclxuICAgICAgICAgICAgdGMuaXRlcmF0aW9uQ291bnQgPSBjYXNlRGVmLml0ZXJhdGlvbnMgfHwgMTtcclxuICAgICAgICAgICAgc3VpdGUuY2FzZXMucHVzaCh0Yyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHN1aXRlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZW5lcmF0ZVRlc3RTdWl0ZUZyb21KU0ZpbGU6IGFzeW5jIGZ1bmN0aW9uIChmaWxlUGF0aCwgcGFyYW1GaWxlID0gbnVsbCwgcGFyYW1Nb2RlID0gbnVsbCwgbm9QYXJhbUF1dG9TZWFyY2ggPSB0cnVlLCBpdGVyYXRpb25Db3VudCA9IDEpIHtcclxuICAgICAgICB2YXIgZmlsZU5hbWVOb0V4dCA9IHNlbGYuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KGZpbGVQYXRoKTtcclxuXHJcbiAgICAgICAgdmFyIHRlc3RjYXNlID0gbmV3IHJlcXVpcmUoJy4uL21vZGVsL3Rlc3RjYXNlLmpzJykoKTtcclxuICAgICAgICB0ZXN0Y2FzZS5uYW1lID0gZmlsZU5hbWVOb0V4dDtcclxuICAgICAgICB0ZXN0Y2FzZS5wYXRoID0gZmlsZVBhdGg7XHJcbiAgICAgICAgdGVzdGNhc2UuZm9ybWF0ID0gJ2pzJztcclxuICAgICAgICB0ZXN0Y2FzZS5pdGVyYXRpb25Db3VudCA9IDE7XHJcblxyXG4gICAgICAgIHZhciBzdWl0ZSA9IG5ldyByZXF1aXJlKCcuLi9tb2RlbC90ZXN0c3VpdGUuanMnKSgpO1xyXG4gICAgICAgIHN1aXRlLm5hbWUgPSB0ZXN0Y2FzZS5uYW1lO1xyXG4gICAgICAgIHN1aXRlLmlkID0gdGVzdGNhc2UuaWQ7XHJcbiAgICAgICAgc3VpdGUuaXRlcmF0aW9uQ291bnQgPSBpdGVyYXRpb25Db3VudDtcclxuICAgICAgICBzdWl0ZS5jYXNlcy5wdXNoKHRlc3RjYXNlKTtcclxuICAgICAgICBpZiAodGVzdGNhc2UucmVvcGVuU2Vzc2lvbikge1xyXG4gICAgICAgICAgICBzdWl0ZS5yZW9wZW5TZXNzaW9uID0gdGVzdGNhc2UucmVvcGVuU2Vzc2lvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3dkID0gcGF0aC5kaXJuYW1lKGZpbGVQYXRoKTtcclxuICAgICAgICBzdWl0ZS5wYXJhbU1hbmFnZXIgPSBhd2FpdCBzZWxmLmdldFBhcmFtZXRlck1hbmFnZXIoZmlsZVBhdGgsIHsgZmlsZTogcGFyYW1GaWxlLCBtb2RlOiBwYXJhbU1vZGUgfSwgY3dkKTtcclxuICAgICAgICAvLyBpZiBwYXJhbWV0ZXIgcmVhZGluZyBtb2RlIGlzICdhbGwnIHRoZW4gY2hhbmdlIGl0ZXJhdGlvbkNvdW50IHRvIHRoZSBhbW91bnQgb2Ygcm93cyBpbiB0aGUgcGFyYW0gZmlsZVxyXG4gICAgICAgIGlmIChzdWl0ZS5wYXJhbU1hbmFnZXIgJiYgcGFyYW1Nb2RlID09ICdhbGwnKSB7XHJcbiAgICAgICAgICAgIHN1aXRlLml0ZXJhdGlvbkNvdW50ID0gc3VpdGUucGFyYW1NYW5hZ2VyLnJvd3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdWl0ZTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0UGFyYW1ldGVyTWFuYWdlcjogYXN5bmMgZnVuY3Rpb24obWFpbkZpbGVQYXRoLCBwYXJhbU9wdHMgPSBudWxsLCBjd2QgPSBudWxsLCBhdXRvU2VhcmNoID0gZmFsc2UpIHtcclxuICAgICAgICBsZXQgcGFyYW1GaWxlUGF0aCA9IHBhcmFtT3B0cyAmJiBwYXJhbU9wdHMuZmlsZSA/IHBhcmFtT3B0cy5maWxlIDogbnVsbDtcclxuICAgICAgICBsZXQgcGFyYW1Nb2RlID0gcGFyYW1PcHRzICYmIHBhcmFtT3B0cy5tb2RlID8gcGFyYW1PcHRzLm1vZGUgOiAnc2VxJztcclxuXHJcbiAgICAgICAgaWYgKHBhcmFtRmlsZVBhdGggJiYgY3dkICYmICFwYXRoLmlzQWJzb2x1dGUocGFyYW1GaWxlUGF0aCkpIHtcclxuICAgICAgICAgICAgcGFyYW1GaWxlUGF0aCA9IHBhdGguam9pbihjd2QsIHBhcmFtRmlsZVBhdGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHNlbGYubG9hZFBhcmFtZXRlck1hbmFnZXIobWFpbkZpbGVQYXRoLCBwYXJhbUZpbGVQYXRoLCBwYXJhbU1vZGUsIGF1dG9TZWFyY2gpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uRmlsZTogYXN5bmMgZnVuY3Rpb24gKGZpbGVQYXRoLCBwYXJhbUZpbGUsIHBhcmFtTW9kZSA9IG51bGwsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgIGNvbnN0IHRlc3RDb25maWcgPSB7XHJcbiAgICAgICAgICAgIC4uLm9wdGlvbnMgfHwge30sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAocGFyYW1GaWxlKSB7XHJcbiAgICAgICAgICAgIHRlc3RDb25maWcucGFyYW1ldGVycyA9IHtcclxuICAgICAgICAgICAgICAgIGZpbGU6IHBhcmFtRmlsZSxcclxuICAgICAgICAgICAgICAgIG1vZGU6IHBhcmFtTW9kZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHNlbGYuZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbihyZXF1aXJlKGZpbGVQYXRoKSwgdGVzdENvbmZpZyk7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEZpbGVOYW1lV2l0aG91dEV4dDogZnVuY3Rpb24gKGZpbGVQYXRoKSB7XHJcbiAgICAgICAgdmFyIGZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlUGF0aCk7XHJcbiAgICAgICAgdmFyIGZpbGVFeHQgPSBwYXRoLmV4dG5hbWUoZmlsZVBhdGgpO1xyXG4gICAgICAgIHZhciBmaWxlUGF0aE5vRXh0ID0gZmlsZU5hbWUuc3Vic3RyaW5nKDAsIGZpbGVOYW1lLmxhc3RJbmRleE9mKGZpbGVFeHQpKTtcclxuICAgICAgICByZXR1cm4gZmlsZVBhdGhOb0V4dDtcclxuICAgIH0sXHJcblxyXG4gICAgbG9hZFBhcmFtZXRlck1hbmFnZXI6IGFzeW5jIGZ1bmN0aW9uKG1haW5GaWxlLCBwYXJhbUZpbGUsIHBhcmFtTW9kZSwgYXV0b1NlYXJjaCA9IGZhbHNlKSB7XHJcbiAgICAgICAgdmFyIHBhcmFtTWFuYWdlciA9IG51bGw7XHJcbiAgICAgICAgLy8gaWYgcGFyYW0gZmlsZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIGNoZWNrIGlmIEpTIGZpbGUgaXMgY29taW5nIGluIHBhaXIgd2l0aCBhIHBhcmFtZXRlciBmaWxlIFxyXG4gICAgICAgIC8vIChjdXJyZW50bHkgc3VwcG9ydGluZyBDU1Ygb3IgVFhUKVxyXG4gICAgICAgIGlmICghcGFyYW1GaWxlICYmIGF1dG9TZWFyY2gpIHtcclxuICAgICAgICAgICAgdmFyIGZpbGVOYW1lTm9FeHQgPSBzZWxmLmdldEZpbGVOYW1lV2l0aG91dEV4dChtYWluRmlsZSk7XHJcbiAgICAgICAgICAgIHZhciBjc3ZQYXJhbUZpbGUgPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKG1haW5GaWxlKSwgZmlsZU5hbWVOb0V4dCArICcuY3N2Jyk7XHJcbiAgICAgICAgICAgIHZhciB0eHRQYXJhbUZpbGUgPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKG1haW5GaWxlKSwgZmlsZU5hbWVOb0V4dCArICcudHh0Jyk7XHJcbiAgICAgICAgICAgIHZhciB4bHNQYXJhbUZpbGUgPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKG1haW5GaWxlKSwgZmlsZU5hbWVOb0V4dCArICcueGxzJyk7XHJcbiAgICAgICAgICAgIHZhciB4bHN4UGFyYW1GaWxlID0gcGF0aC5qb2luKHBhdGguZGlybmFtZShtYWluRmlsZSksIGZpbGVOYW1lTm9FeHQgKyAnLnhsc3gnKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGNzdlBhcmFtRmlsZSkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtRmlsZSA9IGNzdlBhcmFtRmlsZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmcy5leGlzdHNTeW5jKHR4dFBhcmFtRmlsZSkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtRmlsZSA9IHR4dFBhcmFtRmlsZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmcy5leGlzdHNTeW5jKHhsc1BhcmFtRmlsZSkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtRmlsZSA9IHhsc1BhcmFtRmlsZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmcy5leGlzdHNTeW5jKHhsc3hQYXJhbUZpbGUpKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbUZpbGUgPSB4bHN4UGFyYW1GaWxlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJhbUZpbGUpIHtcclxuICAgICAgICAgICAgcGFyYW1NYW5hZ2VyID0gbmV3IHJlcXVpcmUoJy4vcGFyYW0tbWFuYWdlcicpKHBhcmFtRmlsZSwgcGFyYW1Nb2RlIHx8ICdzZXF1ZW50aWFsJyk7XHJcbiAgICAgICAgICAgIGF3YWl0IHBhcmFtTWFuYWdlci5pbml0KCk7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJhbU1hbmFnZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICByZXNvbHZlUGF0aDogZnVuY3Rpb24ocGF0aFRvUmVzb2x2ZSwgYmFzZUZvbGRlcikge1xyXG4gICAgICAgIGlmIChwYXRoLmlzQWJzb2x1dGUocGF0aFRvUmVzb2x2ZSkpXHJcbiAgICAgICAgICAgIHJldHVybiBwYXRoVG9SZXNvbHZlO1xyXG4gICAgICAgIHJldHVybiBwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgcGF0aFRvUmVzb2x2ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VTZXJpYWxpemFibGU6IGZ1bmN0aW9uKGVycikge1xyXG4gICAgICAgIGlmICh0eXBlb2YgZXJyID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICByZXR1cm4gZGVzdHJveUNpcmN1bGFyKGVyciwgW10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZXJyO1xyXG5cclxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vam9ucGFja2VyL2Rlc3Ryb3ktY2lyY3VsYXJcclxuICAgICAgICBmdW5jdGlvbiBkZXN0cm95Q2lyY3VsYXIoZnJvbSwgc2Vlbikge1xyXG4gICAgICAgICAgICB2YXIgdG8gPSBBcnJheS5pc0FycmF5KGZyb20pID8gW10gOiB7fTtcclxuICAgICAgICAgICAgc2Vlbi5wdXNoKGZyb20pO1xyXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhmcm9tKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFmcm9tW2tleV0gfHwgKHR5cGVvZiBmcm9tW2tleV0gIT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoZnJvbVtrZXldKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0b1trZXldID0gZnJvbVtrZXldO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWVuLmluZGV4T2YoZnJvbVtrZXldKSA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRvW2tleV0gPSBkZXN0cm95Q2lyY3VsYXIoZnJvbVtrZXldLCBzZWVuLnNsaWNlKDApKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB0b1trZXldID0gJ1tDaXJjdWxhcl0nO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHRvO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0TWV0aG9kU2lnbmF0dXJlOiBmdW5jdGlvbihtb2R1bGVOYW1lLCBtZXRob2ROYW1lLCBtZXRob2RBcmdzKSB7XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZU5hbWUgKyAnLicgKyBtZXRob2ROYW1lICsgJygnICsgc2VsZi5zdHJpbmdpZnkobWV0aG9kQXJncywgMCkgKyAnKSc7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBVc2VkIHRvIHNlcmlhbGl6ZSBveHlnZW4gY29tbWFuZCBwYXJhbWV0ZXJzLiBQcm9kdWNlcyBhIG5vbi1jb21wbGlhbnQgSlNPTiBzZXJpYWxpemF0aW9uLlxyXG4gICAgICovXHJcbiAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uIChhcmdzLCBpbmRlbnRhdGlvbiA9IDApIHtcclxuICAgICAgICBsZXQgc3RyO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHN0ciA9IEpTT04uc3RyaW5naWZ5KGFyZ3MsIChrZXksIHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYmlnaW50JykgeyAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vR29vZ2xlQ2hyb21lTGFicy9qc2JpL2lzc3Vlcy8zMFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHVuZGVmaW5lZCBpcyBpbnNpZGUgYW4gYXJyYXkgdGhlbiBpdCB3aWxsIGJlIHNlcmlhbGl6ZWQgYXMgbnVsbC5cclxuICAgICAgICAgICAgICAgICAgICAvLyBob3dldmVyIGlmIHdlIGp1c3QgcmV0dXJuICd1bmRlZmluZWQnIGhlcmUgYXMgc3RyaW5nLCBpdCB3aWxsIGJlIGVuY2xvc2VkIGluIHF1b3Rlcy5cclxuICAgICAgICAgICAgICAgICAgICAvLyBzbyByZXR1cm4gbWFnaWMgc3RyaW5nIGluc3RlYWQgYW5kIHRyaW0gdGhlIHF1b3RlcyBsYXRlciBvblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnX19VTkRFRklORUQnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcvJyArIHZhbHVlLnNvdXJjZSArICcvJyArIHZhbHVlLmZsYWdzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgICAgICB9LCBpbmRlbnRhdGlvbik7XHJcbiAgICAgICAgICAgIC8vIHRyaW0gdGhlIGVuY2xvc2luZyBhcnJheSBhbmQgYW55IHdoaXRlc3BhY2VcclxuICAgICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL15cXFt7MX1cXHMqfFxccypcXF17MX0kL2csICcnKTtcclxuICAgICAgICAgICAgLy8gcmVtb3ZlIHNwYWNlIGJlZm9yZSBsYXN0IH0gYW5kIF0sIHRvIG1ha2UgaW5kZW50YXRpb24gbXRjaCB0aGUgb3BlbmluZyBicmFja2V0XHJcbiAgICAgICAgICAgIGlmIChzdHIuZW5kc1dpdGgoJyAgfScpKSB7XHJcbiAgICAgICAgICAgICAgICBzdHIgPSBzdHIuc3Vic3RyaW5nKDAsIHN0ci5sZW5ndGggLSAzKSArICd9JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc3RyLmVuZHNXaXRoKCcgIF0nKSkge1xyXG4gICAgICAgICAgICAgICAgc3RyID0gc3RyLnN1YnN0cmluZygwLCBzdHIubGVuZ3RoIC0gMykgKyAnXSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gY29udmVydCBtYWdpYyAndW5kZWZpbmVkJyBzdHJpbmcgdG8gcHJvcGVyIHJlcHJlc2VudGF0aW9uXHJcbiAgICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cIl9fVU5ERUZJTkVEXCIvZywgJ3VuZGVmaW5lZCcpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gc2VyaWFsaXplIGNvbW1hbmQgYXJndW1lbnRzOiAnLCBlKTtcclxuICAgICAgICAgICAgLy8gaWYgSlNPTi5zdHJpbmdpZnkgZmFpbHMsIHRoZW4gZmFsbGJhY2sgdG8gdXRpbC5pbnNwZWN0LlxyXG4gICAgICAgICAgICAvLyAod2UgZG9uJ3QgdXNlIHV0aWwuaW5zcGVjdCBpbml0aWFseSBiZWNhdXNlIGl0IGRvZXNuJ3Qgc3VwcG9ydCBvdXRwdXQgaW5kZW50YXRpb24pXHJcbiAgICAgICAgICAgIHJldHVybiB1dGlsLmluc3BlY3QoYXJnc1swXSwgeyBkZXB0aDogMyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN0cjtcclxuICAgIH0sXHJcblxyXG4gICAgaXNJbkRlYnVnTW9kZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgLy8gdGhpcyBhbHdheXMgdHJ1ZTtcclxuICAgICAgICAvLyBjb25zdCBhcmd2ID0gcHJvY2Vzcy5leGVjQXJndi5qb2luKCk7XHJcblxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdwcm9jZXNzLmRlYnVnUG9ydCcsIHByb2Nlc3MuZGVidWdQb3J0KTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImFyZ3YuaW5jbHVkZXMoJ2luc3BlY3QnKVwiLCBhcmd2LmluY2x1ZGVzKCdpbnNwZWN0JykpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYXJndi5pbmNsdWRlcygnaW5zcGVjdC1icmsnKVwiLCBhcmd2LmluY2x1ZGVzKCdpbnNwZWN0LWJyaycpKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImFyZ3YuaW5jbHVkZXMoJ2RlYnVnJylcIiwgYXJndi5pbmNsdWRlcygnZGVidWcnKSk7XHJcblxyXG4gICAgICAgIC8vIHJldHVybiBwcm9jZXNzLmRlYnVnUG9ydCB8fCBhcmd2LmluY2x1ZGVzKCdpbnNwZWN0JykgfHwgYXJndi5pbmNsdWRlcygnaW5zcGVjdC1icmsnKSB8fCBhcmd2LmluY2x1ZGVzKCdkZWJ1ZycpO1xyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIGxvYWRUZXN0SG9va3M6IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuICAgICAgICBsZXQgaG9va3MgPSBEVU1NWV9IT09LUztcclxuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnRhcmdldCAmJiBvcHRpb25zLnRhcmdldC5uYW1lID09PSAnb3h5Z2VuLmNvbmYnKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBob29rcyA9IHJlcXVpcmUob3B0aW9ucy50YXJnZXQucGF0aCkuaG9va3MgfHwgRFVNTVlfSE9PS1M7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignRXJyb3IgbG9hZGluZyB1c2VyIGhvb2tzOicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBob29rcztcclxuICAgIH0sXHJcblxyXG4gICAgZXhlY3V0ZVRlc3RIb29rOiBhc3luYyBmdW5jdGlvbihob29rcywgbWV0aG9kLCBhcmdzKSB7XHJcbiAgICAgICAgLy8gaWYgaG9vayBpcyBub3QgZGVmaW5lZCwganVzdCBxdWlldGx5IGlnbm9yZSBpdFxyXG4gICAgICAgIGlmICghaG9va3MgfHwgIW1ldGhvZCB8fCAhaG9va3NbbWV0aG9kXSB8fCB0eXBlb2YgaG9va3NbbWV0aG9kXSAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGdsb2JhbC5jaGFpQW5kTW9ja2VyeUxvYWRlZCkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGFpID0gcmVxdWlyZSgnY2hhaScpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9ja2VyeSA9IHJlcXVpcmUoJ21vY2tlcnknKTtcclxuICAgICAgICAgICAgICAgIG1vY2tlcnkuZW5hYmxlKHtcclxuICAgICAgICAgICAgICAgICAgICB1c2VDbGVhbkNhY2hlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHdhcm5PblJlcGxhY2U6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHdhcm5PblVucmVnaXN0ZXJlZDogZmFsc2VcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgbW9ja2VyeS5yZWdpc3Rlck1vY2soJ2NoYWknLCBjaGFpKTtcclxuICAgICAgICAgICAgICAgIGdsb2JhbC5jaGFpQW5kTW9ja2VyeUxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGF3YWl0IGhvb2tzW21ldGhvZF0uYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgSG9vayBcIiR7bWV0aG9kfVwiIGhhcyB0aHJvd24gYW4gZXJyb3I6ICR7ZS50b1N0cmluZygpfWApO1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0T3hNb2R1bGVzRGlyOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJ294X21vZHVsZXMnKTtcclxuICAgIH0sXHJcblxyXG4gICAgaG9va0xvZ3MobG9nZ2VyKSB7XHJcbiAgICAgICAgY29uc3Qgb3JpZ2xvZyA9IGNvbnNvbGUubG9nO1xyXG4gICAgICAgIGNvbnN0IG9yaWdEZWJ1ZyA9IGNvbnNvbGUuZGVidWc7XHJcbiAgICAgICAgY29uc3Qgb3JpZ0luZm8gPSBjb25zb2xlLmluZm87XHJcbiAgICAgICAgY29uc3Qgb3JpZ1dhcm4gPSBjb25zb2xlLndhcm47XHJcbiAgICAgICAgY29uc3Qgb3JpZ0Vycm9yID0gY29uc29sZS5lcnJvcjtcclxuXHJcbiAgICAgICAgY29uc3QgcHJvY2Vzc0FyZ3MgPSAoYXJndW1lbnRBcnJheSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gW107XHJcblxyXG4gICAgICAgICAgICBpZiAoYXJndW1lbnRBcnJheSAmJiBhcmd1bWVudEFycmF5Lm1hcCkge1xyXG4gICAgICAgICAgICAgICAgYXJndW1lbnRBcnJheS5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGAke2l0ZW19YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYCR7dXRpbC5pbnNwZWN0KGl0ZW0pfWApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LmpvaW4oJyAnKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyA9IGZ1bmN0aW9uICguLi5hcmd1bWVudEFycmF5KSB7XHJcbiAgICAgICAgICAgIG9yaWdsb2cuYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKHByb2Nlc3NBcmdzKGFyZ3VtZW50QXJyYXkpKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnNvbGUuZGVidWcgPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRBcnJheSkge1xyXG4gICAgICAgICAgICBvcmlnRGVidWcuYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1Zyhwcm9jZXNzQXJncyhhcmd1bWVudEFycmF5KSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zb2xlLmluZm8gPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRBcnJheSkge1xyXG4gICAgICAgICAgICBvcmlnSW5mby5hcHBseSh0aGlzLCBhcmd1bWVudEFycmF5KTtcclxuICAgICAgICAgICAgbG9nZ2VyLmluZm8ocHJvY2Vzc0FyZ3MoYXJndW1lbnRBcnJheSkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc29sZS53YXJuID0gZnVuY3Rpb24gKC4uLmFyZ3VtZW50QXJyYXkpIHtcclxuICAgICAgICAgICAgb3JpZ1dhcm4uYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci53YXJuKHByb2Nlc3NBcmdzKGFyZ3VtZW50QXJyYXkpKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IgPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRBcnJheSkge1xyXG4gICAgICAgICAgICBvcmlnRXJyb3IuYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihwcm9jZXNzQXJncyhhcmd1bWVudEFycmF5KSk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgbWFrZVRyYW5zYWN0aW9uRmFpbGVkSWZTdGVwRmFpbGVkKHN0ZXBzKSB7XHJcbiAgICAgICAgaWYgKHN0ZXBzICYmIHN0ZXBzLmxlbmd0aCAmJiBzdGVwcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBsYXN0RmluZGVkVHJhbnNhY3Rpb25JbmRleCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdTdGVwcyA9IFsuLi5zdGVwc107XHJcbiAgICAgICAgICAgIHN0ZXBzLm1hcCgoaXRlbSwgaWR4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5uYW1lICYmIGl0ZW0ubmFtZS5pbmNsdWRlcyAmJiBpdGVtLm5hbWUuaW5jbHVkZXMoJy50cmFuc2FjdGlvbignKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhc3RGaW5kZWRUcmFuc2FjdGlvbkluZGV4ID0gaWR4O1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbGFzdEZpbmRlZFRyYW5zYWN0aW9uSW5kZXggPT09ICdudW1iZXInICYmIGl0ZW0uc3RhdHVzICYmIGl0ZW0uc3RhdHVzID09PSAnZmFpbGVkJykge1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1N0ZXBzW2xhc3RGaW5kZWRUcmFuc2FjdGlvbkluZGV4XVsnc3RhdHVzJ10gPSAnZmFpbGVkJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbmV3U3RlcHM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc3RlcHM7XHJcbiAgICB9LFxyXG5cclxuICAgIGRlY3J5cHQodGV4dCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCBlbmNyeXB0ZWRUZXh0ID0gQnVmZmVyLmZyb20odGV4dCwgJ2hleCcpO1xyXG4gICAgICAgICAgICBsZXQgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdihhbGdvcml0aG0sIGtleSwgaXYpO1xyXG4gICAgICAgICAgICBsZXQgZGVjcnlwdGVkID0gZGVjaXBoZXIudXBkYXRlKGVuY3J5cHRlZFRleHQpO1xyXG4gICAgICAgICAgICBkZWNyeXB0ZWQgPSBCdWZmZXIuY29uY2F0KFtkZWNyeXB0ZWQsIGRlY2lwaGVyLmZpbmFsKCldKTtcclxuICAgICAgICAgICAgY29uc3QgcmV0VmFsID0gZGVjcnlwdGVkLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGVjcnlwdFJlc3VsdChyZXRWYWwpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94eWdlbkVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5DUllQVE9fRVJST1IsIFwiVGhlIHByb3ZpZGVkIGFyZ3VtZW50IGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHZhbGlkIGNpcGhlciBwcm9kdWNlZCBieSAndXRpbHMuZW5jcnlwdCdcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBlbmNyeXB0KHRleHQpIHtcclxuICAgICAgICBsZXQgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KGFsZ29yaXRobSwga2V5LCBpdik7XHJcbiAgICAgICAgbGV0IGVuY3J5cHRlZCA9IGNpcGhlci51cGRhdGUodGV4dCk7XHJcbiAgICAgICAgZW5jcnlwdGVkID0gQnVmZmVyLmNvbmNhdChbZW5jcnlwdGVkLCBjaXBoZXIuZmluYWwoKV0pO1xyXG4gICAgICAgIHJldHVybiBlbmNyeXB0ZWQudG9TdHJpbmcoJ2hleCcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzbGVlcDogZnVuY3Rpb24odGltZW91dCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0KSk7XHJcbiAgICB9XHJcbn07XHJcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBc0JBO0FBQ0E7QUFBMkM7QUFYM0MsTUFBTUEsSUFBSSxHQUFHQyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQzVCLE1BQU1DLEVBQUUsR0FBR0QsT0FBTyxD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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,
|
|
@@ -18,4 +17,4 @@ module.exports = function () {
|
|
|
18
17
|
context: null
|
|
19
18
|
};
|
|
20
19
|
};
|
|
21
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwibmFtZSIsIml0ZXJhdGlvbk51bSIsImxvY2F0aW9uIiwic3RhcnRUaW1lIiwiZW5kVGltZSIsImR1cmF0aW9uIiwic3RhdHVzIiwic3RlcHMiLCJsb2dzIiwiaGFyIiwiZmFpbHVyZSIsImNvbnRleHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwvY2FzZS1yZXN1bHQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKlxyXG4gKiBUZXN0IENhc2UgUmVzdWx0c1xyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5hbWU6IG51bGwsXHJcbiAgICAgICAgaXRlcmF0aW9uTnVtOiAxLFxyXG4gICAgICAgIGxvY2F0aW9uOiBudWxsLFxyXG4gICAgICAgIHN0YXJ0VGltZTogbnVsbCxcclxuICAgICAgICBlbmRUaW1lOiBudWxsLFxyXG4gICAgICAgIGR1cmF0aW9uOiBudWxsLFxyXG4gICAgICAgIHN0YXR1czogbnVsbCxcclxuICAgICAgICBzdGVwczogW10sICAgIC8vIGFycmF5IG9mIHN0ZXAtcmVzdWx0LmpzXHJcbiAgICAgICAgbG9nczogW10sXHJcbiAgICAgICAgaGFyOiBudWxsLFxyXG4gICAgICAgIGZhaWx1cmU6IG51bGwsXHJcbiAgICAgICAgY29udGV4dDogbnVsbFxyXG4gICAgfTtcclxufTtcclxuIl0sIm1hcHBpbmdzIjoiOzs7QUFZQUEsTUFBTSxDQUFDQyxPQUFPLEdBQUcsWUFBWTtFQUN6QixPQUFPO0lBQ0hDLElBQUksRUFBRSxJQUFJO0lBQ1ZDLFlBQVksRUFBRSxDQUFDO0lBQ2ZDLFFBQVEsRUFBRSxJQUFJO0lBQ2RDLFNBQVMsRUFBRSxJQUFJO0lBQ2ZDLE9BQU8sRUFBRSxJQUFJO0lBQ2JDLFFBQVEsRUFBRSxJQUFJO0lBQ2RDLE1BQU0sRUFBRSxJQUFJO0lBQ1pDLEtBQUssRUFBRSxFQUFFO0lBQ1RDLElBQUksRUFBRSxFQUFFO0lBQ1JDLEdBQUcsRUFBRSxJQUFJO0lBQ1RDLE9BQU8sRUFBRSxJQUFJO0lBQ2JDLE9BQU8sRUFBRTtFQUNiLENBQUM7QUFDTCxDQUFDIn0=
|
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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwidHlwZSIsIm1lc3NhZ2UiLCJkZXRhaWxzIiwibG9jYXRpb24iLCJkYXRhIiwiZmF0YWwiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwvZmFpbHVyZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qXHJcbiAqIFRlc3QsIENhc2UsIFN1aXRlIGFuZCBTdGVwIGZhaWx1cmUgZGV0YWlsc1xyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHR5cGU6IG51bGwsXHJcbiAgICAgICAgbWVzc2FnZTogbnVsbCxcclxuICAgICAgICBkZXRhaWxzOiBudWxsLFxyXG4gICAgICAgIGxvY2F0aW9uOiBudWxsLFxyXG4gICAgICAgIGRhdGE6IG51bGwsXHJcbiAgICAgICAgZmF0YWw6IGZhbHNlLFxyXG4gICAgfTtcclxufTtcclxuIl0sIm1hcHBpbmdzIjoiOzs7QUFZQUEsTUFBTSxDQUFDQyxPQUFPLEdBQUcsWUFBWTtFQUN6QixPQUFPO0lBQ0hDLElBQUksRUFBRSxJQUFJO0lBQ1ZDLE9BQU8sRUFBRSxJQUFJO0lBQ2JDLE9BQU8sRUFBRSxJQUFJO0lBQ2JDLFFBQVEsRUFBRSxJQUFJO0lBQ2RDLElBQUksRUFBRSxJQUFJO0lBQ1ZDLEtBQUssRUFBRTtFQUNYLENBQUM7QUFDTCxDQUFDIn0=
|
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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwiRkFJTEVEIiwiUEFTU0VEIiwiV0FSTklORyIsIlNLSVBQRUQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwvc3RhdHVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgICBGQUlMRUQ6ICdmYWlsZWQnLFxyXG4gICAgUEFTU0VEOiAncGFzc2VkJyxcclxuICAgIFdBUk5JTkc6ICd3YXJuaW5nJyxcclxuICAgIFNLSVBQRUQ6ICdza2lwcGVkJ1xyXG59O1xyXG4iXSwibWFwcGluZ3MiOiI7OztBQVNBQSxNQUFNLENBQUNDLE9BQU8sR0FBRztFQUNiQyxNQUFNLEVBQUUsUUFBUTtFQUNoQkMsTUFBTSxFQUFFLFFBQVE7RUFDaEJDLE9BQU8sRUFBRSxTQUFTO0VBQ2xCQyxPQUFPLEVBQUU7QUFDYixDQUFDIn0=
|
|
@@ -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,
|
|
@@ -19,4 +18,4 @@ module.exports = function () {
|
|
|
19
18
|
steps: []
|
|
20
19
|
};
|
|
21
20
|
};
|
|
22
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwibmFtZSIsImxvY2F0aW9uIiwic3RhdHVzIiwic3RhcnRUaW1lIiwiZW5kVGltZSIsImR1cmF0aW9uIiwidHJhbnNhY3Rpb24iLCJhY3Rpb24iLCJzY3JlZW5zaG90RmlsZSIsImZhaWx1cmUiLCJzY3JlZW5zaG90Iiwic3RhdHMiLCJzdGVwcyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC9zdGVwLXJlc3VsdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qXHJcbiAqIFRlc3QgU3RlcCBSZXN1bHRzXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbmFtZTogbnVsbCxcclxuICAgICAgICBsb2NhdGlvbjogbnVsbCxcclxuICAgICAgICBzdGF0dXM6IG51bGwsXHJcbiAgICAgICAgc3RhcnRUaW1lOiBudWxsLFxyXG4gICAgICAgIGVuZFRpbWU6IG51bGwsXHJcbiAgICAgICAgZHVyYXRpb246IG51bGwsXHJcbiAgICAgICAgdHJhbnNhY3Rpb246IG51bGwsXHJcbiAgICAgICAgYWN0aW9uOiBudWxsLCAgLy8gdHJ1ZSAvIGZhbHNlXHJcbiAgICAgICAgc2NyZWVuc2hvdEZpbGU6IG51bGwsXHJcbiAgICAgICAgZmFpbHVyZTogbnVsbCwgIC8vIHR5cGUgb2Ygc3RlcGZhaWx1cmUuanNcclxuICAgICAgICBzY3JlZW5zaG90OiBudWxsLCAvL3sgXzogbnVsbCB9XHJcbiAgICAgICAgc3RhdHM6IG51bGwsICAgICAvLyBuYXZpZ2F0aW9uIHRpbWluZ3Mgb3Igb3RoZXIgcGVyZm9ybWFuY2Ugc3RhdGlzdGljc1xyXG4gICAgICAgIHN0ZXBzOiBbXSwgICAgICAvLyBzdWIgc3RlcHNcclxuICAgIH07XHJcbn07XHJcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBWUFBLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHLFlBQVk7RUFDekIsT0FBTztJQUNIQyxJQUFJLEVBQUUsSUFBSTtJQUNWQyxRQUFRLEVBQUUsSUFBSTtJQUNkQyxNQUFNLEVBQUUsSUFBSTtJQUNaQyxTQUFTLEVBQUUsSUFBSTtJQUNmQyxPQUFPLEVBQUUsSUFBSTtJQUNiQyxRQUFRLEVBQUUsSUFBSTtJQUNkQyxXQUFXLEVBQUUsSUFBSTtJQUNqQkMsTUFBTSxFQUFFLElBQUk7SUFDWkMsY0FBYyxFQUFFLElBQUk7SUFDcEJDLE9BQU8sRUFBRSxJQUFJO0lBQ2JDLFVBQVUsRUFBRSxJQUFJO0lBQ2hCQyxLQUFLLEVBQUUsSUFBSTtJQUNYQyxLQUFLLEVBQUU7RUFDWCxDQUFDO0FBQ0wsQ0FBQyJ9
|
|
@@ -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,
|
|
@@ -13,4 +12,4 @@ module.exports = function () {
|
|
|
13
12
|
cases: []
|
|
14
13
|
};
|
|
15
14
|
};
|
|
16
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
15
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwibmFtZSIsIml0ZXJhdGlvbk51bSIsInN0YXJ0VGltZSIsImVuZFRpbWUiLCJkdXJhdGlvbiIsInN0YXR1cyIsImNhc2VzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVsL3N1aXRlLXJlc3VsdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qXHJcbiAqIFRlc3QgU3VpdGUgUmVzdWx0XHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbmFtZTogbnVsbCxcclxuICAgICAgICBpdGVyYXRpb25OdW06IDEsXHJcbiAgICAgICAgc3RhcnRUaW1lOiBudWxsLFxyXG4gICAgICAgIGVuZFRpbWU6IG51bGwsXHJcbiAgICAgICAgZHVyYXRpb246IG51bGwsXHJcbiAgICAgICAgc3RhdHVzOiBudWxsLFxyXG4gICAgICAgIGNhc2VzOiBbXSAgICAvLyBhcnJheSBvZiBjYXNlLXJlc3VsdC5qc1xyXG4gICAgfTtcclxufTtcclxuIl0sIm1hcHBpbmdzIjoiOzs7QUFZQUEsTUFBTSxDQUFDQyxPQUFPLEdBQUcsWUFBWTtFQUN6QixPQUFPO0lBQ0hDLElBQUksRUFBRSxJQUFJO0lBQ1ZDLFlBQVksRUFBRSxDQUFDO0lBQ2ZDLFNBQVMsRUFBRSxJQUFJO0lBQ2ZDLE9BQU8sRUFBRSxJQUFJO0lBQ2JDLFFBQVEsRUFBRSxJQUFJO0lBQ2RDLE1BQU0sRUFBRSxJQUFJO0lBQ1pDLEtBQUssRUFBRTtFQUNYLENBQUM7QUFDTCxDQUFDIn0=
|
|
@@ -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,
|
|
@@ -17,4 +16,4 @@ module.exports = function () {
|
|
|
17
16
|
suites: []
|
|
18
17
|
};
|
|
19
18
|
};
|
|
20
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwibmFtZSIsInN0YXR1cyIsInN0YXJ0VGltZSIsImVuZFRpbWUiLCJkdXJhdGlvbiIsInRvdGFsQ2FzZXMiLCJmYWlsdXJlIiwiZW52aXJvbm1lbnQiLCJjYXBhYmlsaXRpZXMiLCJvcHRpb25zIiwic3VpdGVzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVsL3Rlc3QtcmVzdWx0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLypcclxuICogVGVzdCBSZXN1bHRcclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBuYW1lOiBudWxsLFxyXG4gICAgICAgIHN0YXR1czogbnVsbCxcclxuICAgICAgICBzdGFydFRpbWU6IG51bGwsXHJcbiAgICAgICAgZW5kVGltZTogbnVsbCxcclxuICAgICAgICBkdXJhdGlvbjogbnVsbCxcclxuICAgICAgICB0b3RhbENhc2VzOiBudWxsLFxyXG4gICAgICAgIGZhaWx1cmU6IG51bGwsXHJcbiAgICAgICAgZW52aXJvbm1lbnQ6IG51bGwsXHJcbiAgICAgICAgY2FwYWJpbGl0aWVzOiBudWxsLFxyXG4gICAgICAgIG9wdGlvbnM6IG51bGwsXHJcbiAgICAgICAgc3VpdGVzOiBbXSAgICAvLyB0eXBlIG9mIHN1aXRlLXJlc3VsdC5qc1xyXG4gICAgfTtcclxufTtcclxuIl0sIm1hcHBpbmdzIjoiOzs7QUFZQUEsTUFBTSxDQUFDQyxPQUFPLEdBQUcsWUFBWTtFQUN6QixPQUFPO0lBQ0hDLElBQUksRUFBRSxJQUFJO0lBQ1ZDLE1BQU0sRUFBRSxJQUFJO0lBQ1pDLFNBQVMsRUFBRSxJQUFJO0lBQ2ZDLE9BQU8sRUFBRSxJQUFJO0lBQ2JDLFFBQVEsRUFBRSxJQUFJO0lBQ2RDLFVBQVUsRUFBRSxJQUFJO0lBQ2hCQyxPQUFPLEVBQUUsSUFBSTtJQUNiQyxXQUFXLEVBQUUsSUFBSTtJQUNqQkMsWUFBWSxFQUFFLElBQUk7SUFDbEJDLE9BQU8sRUFBRSxJQUFJO0lBQ2JDLE1BQU0sRUFBRTtFQUNaLENBQUM7QUFDTCxDQUFDIn0=
|
package/build/model/testcase.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
|
name: null,
|
|
@@ -13,4 +12,4 @@ module.exports = function () {
|
|
|
13
12
|
poManager: null
|
|
14
13
|
};
|
|
15
14
|
};
|
|
16
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
15
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwibmFtZSIsImlkIiwiZm9ybWF0IiwiY29udGVudCIsIml0ZXJhdGlvbkNvdW50IiwicGFyYW1NYW5hZ2VyIiwicG9NYW5hZ2VyIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVsL3Rlc3RjYXNlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5hbWU6IG51bGwsXHJcbiAgICAgICAgaWQ6IG51bGwsXHJcbiAgICAgICAgZm9ybWF0OiBudWxsLFxyXG4gICAgICAgIGNvbnRlbnQ6IG51bGwsXHJcbiAgICAgICAgaXRlcmF0aW9uQ291bnQ6IDEsXHJcbiAgICAgICAgcGFyYW1NYW5hZ2VyOiBudWxsLFxyXG4gICAgICAgIHBvTWFuYWdlcjogbnVsbFxyXG4gICAgfTtcclxufTtcclxuIl0sIm1hcHBpbmdzIjoiOzs7QUFTQUEsTUFBTSxDQUFDQyxPQUFPLEdBQUcsWUFBWTtFQUN6QixPQUFPO0lBQ0hDLElBQUksRUFBRSxJQUFJO0lBQ1ZDLEVBQUUsRUFBRSxJQUFJO0lBQ1JDLE1BQU0sRUFBRSxJQUFJO0lBQ1pDLE9BQU8sRUFBRSxJQUFJO0lBQ2JDLGNBQWMsRUFBRSxDQUFDO0lBQ2pCQyxZQUFZLEVBQUUsSUFBSTtJQUNsQkMsU0FBUyxFQUFFO0VBQ2YsQ0FBQztBQUNMLENBQUMifQ==
|