oxygen-cli 1.41.0 → 1.43.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/build/core/OxygenCore.js +93 -283
- package/build/core/OxygenEvents.js +2 -12
- package/build/core/OxygenModule.js +1 -16
- package/build/core/OxygenService.js +1 -12
- package/build/core/OxygenSubModule.js +1 -10
- package/build/core/WebDriverModule.js +2 -32
- package/build/core/utils.js +22 -21
- package/build/errors/HookError.js +2 -8
- package/build/errors/ModuleError.js +2 -8
- package/build/errors/ModuleUnavailableError.js +1 -3
- package/build/errors/OxygenError.js +3 -36
- package/build/errors/ScriptNotFound.js +2 -8
- package/build/errors/helper.js +50 -82
- package/build/index.js +8 -22
- package/build/lib/cli-util.js +36 -105
- package/build/lib/cli.js +3 -30
- package/build/lib/debugger.js +2 -145
- package/build/lib/img-merge.js +2 -16
- package/build/lib/launcher.js +3 -31
- package/build/lib/moduleRequire.js +1 -4
- package/build/lib/parallel-launcher.js +44 -84
- package/build/lib/param-manager.js +2 -29
- package/build/lib/param-reader-csv.js +1 -15
- package/build/lib/param-reader-excel.js +1 -14
- package/build/lib/param-reader-json.js +1 -10
- package/build/lib/text-to-image.js +5 -26
- package/build/lib/util.js +13 -84
- 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 +20 -41
- package/build/ox_modules/module-assert.js +9 -28
- package/build/ox_modules/module-date.js +3 -8
- package/build/ox_modules/module-db.js +8 -29
- package/build/ox_modules/module-email.js +14 -45
- package/build/ox_modules/module-eyes.js +6 -47
- package/build/ox_modules/module-http/ntlm-util.js +3 -7
- package/build/ox_modules/module-http/ntlm.js +9 -78
- package/build/ox_modules/module-http.js +69 -172
- package/build/ox_modules/module-log.js +10 -23
- package/build/ox_modules/module-mailinator.js +11 -33
- package/build/ox_modules/module-mob/commands/alertAccept.js +1 -3
- package/build/ox_modules/module-mob/commands/alertDismiss.js +1 -3
- package/build/ox_modules/module-mob/commands/assertAlert.js +1 -7
- package/build/ox_modules/module-mob/commands/assertText.js +1 -4
- package/build/ox_modules/module-mob/commands/assertTitle.js +1 -5
- package/build/ox_modules/module-mob/commands/assertValue.js +9 -17
- package/build/ox_modules/module-mob/commands/back.js +1 -3
- package/build/ox_modules/module-mob/commands/clear.js +1 -5
- package/build/ox_modules/module-mob/commands/click.js +3 -5
- package/build/ox_modules/module-mob/commands/clickHidden.js +3 -10
- package/build/ox_modules/module-mob/commands/clickLong.js +1 -3
- package/build/ox_modules/module-mob/commands/clickMultipleTimes.js +1 -5
- package/build/ox_modules/module-mob/commands/closeApp.js +1 -3
- package/build/ox_modules/module-mob/commands/debug.js +2 -3
- package/build/ox_modules/module-mob/commands/dragAndDrop.js +1 -3
- package/build/ox_modules/module-mob/commands/enableNetwork.js +4 -13
- package/build/ox_modules/module-mob/commands/execute.js +1 -3
- package/build/ox_modules/module-mob/commands/findElement.js +1 -4
- package/build/ox_modules/module-mob/commands/findElements.js +1 -5
- package/build/ox_modules/module-mob/commands/getAlertText.js +1 -3
- package/build/ox_modules/module-mob/commands/getAppiumLogs.js +1 -3
- package/build/ox_modules/module-mob/commands/getBrowserLogs.js +1 -11
- package/build/ox_modules/module-mob/commands/getCurrentActivity.js +1 -3
- package/build/ox_modules/module-mob/commands/getCurrentPackage.js +1 -3
- package/build/ox_modules/module-mob/commands/getDeviceLogs.js +1 -10
- package/build/ox_modules/module-mob/commands/getDeviceTime.js +1 -3
- package/build/ox_modules/module-mob/commands/getLocation.js +1 -3
- package/build/ox_modules/module-mob/commands/getSource.js +1 -3
- package/build/ox_modules/module-mob/commands/getText.js +1 -5
- package/build/ox_modules/module-mob/commands/getTitle.js +1 -3
- package/build/ox_modules/module-mob/commands/getUrl.js +1 -3
- package/build/ox_modules/module-mob/commands/getValue.js +5 -10
- package/build/ox_modules/module-mob/commands/getWindowHandles.js +1 -3
- package/build/ox_modules/module-mob/commands/hideKeyboard.js +1 -3
- package/build/ox_modules/module-mob/commands/index.js +1 -148
- package/build/ox_modules/module-mob/commands/installApp.js +1 -3
- package/build/ox_modules/module-mob/commands/isAppInstalled.js +1 -3
- package/build/ox_modules/module-mob/commands/isCheckable.js +1 -3
- package/build/ox_modules/module-mob/commands/isChecked.js +1 -3
- package/build/ox_modules/module-mob/commands/isClickable.js +1 -3
- package/build/ox_modules/module-mob/commands/isExist.js +1 -4
- package/build/ox_modules/module-mob/commands/isSelected.js +1 -3
- package/build/ox_modules/module-mob/commands/isVisible.js +1 -4
- package/build/ox_modules/module-mob/commands/isWebViewContext.js +1 -3
- package/build/ox_modules/module-mob/commands/launchApp.js +1 -3
- package/build/ox_modules/module-mob/commands/longPressKeyCode.js +1 -3
- package/build/ox_modules/module-mob/commands/open.js +1 -4
- package/build/ox_modules/module-mob/commands/pause.js +1 -3
- package/build/ox_modules/module-mob/commands/removeApp.js +1 -3
- package/build/ox_modules/module-mob/commands/resetApp.js +1 -3
- package/build/ox_modules/module-mob/commands/scrollIntoElement.js +1 -7
- package/build/ox_modules/module-mob/commands/scrollIntoView.js +1 -3
- package/build/ox_modules/module-mob/commands/select.js +1 -5
- package/build/ox_modules/module-mob/commands/selectFrame.js +1 -5
- package/build/ox_modules/module-mob/commands/selectWindow.js +5 -27
- package/build/ox_modules/module-mob/commands/sendKeys.js +6 -10
- package/build/ox_modules/module-mob/commands/setContext.js +1 -3
- package/build/ox_modules/module-mob/commands/setNativeContext.js +1 -3
- package/build/ox_modules/module-mob/commands/setTimeout.js +1 -3
- package/build/ox_modules/module-mob/commands/setWebViewContext.js +3 -7
- package/build/ox_modules/module-mob/commands/shake.js +1 -3
- package/build/ox_modules/module-mob/commands/smsClickLink.js +1 -3
- package/build/ox_modules/module-mob/commands/smsGetText.js +3 -7
- package/build/ox_modules/module-mob/commands/swipe.js +1 -3
- package/build/ox_modules/module-mob/commands/swipeElement.js +1 -3
- package/build/ox_modules/module-mob/commands/swipeScreen.js +1 -3
- package/build/ox_modules/module-mob/commands/takeScreenshot.js +1 -3
- package/build/ox_modules/module-mob/commands/tap.js +1 -3
- package/build/ox_modules/module-mob/commands/type.js +3 -8
- package/build/ox_modules/module-mob/commands/unlockPattern.js +9 -11
- package/build/ox_modules/module-mob/commands/waitForExist.js +1 -3
- package/build/ox_modules/module-mob/commands/waitForInteractable.js +1 -4
- package/build/ox_modules/module-mob/commands/waitForVisible.js +1 -3
- package/build/ox_modules/module-mob.js +107 -217
- package/build/ox_modules/module-mongo.js +14 -51
- package/build/ox_modules/module-pdf.js +24 -65
- package/build/ox_modules/module-proxy.js +9 -69
- package/build/ox_modules/module-serial.js +8 -33
- package/build/ox_modules/module-shell.js +10 -30
- package/build/ox_modules/module-soap.js +17 -52
- package/build/ox_modules/module-twilio.js +11 -54
- package/build/ox_modules/module-utils.js +22 -58
- package/build/ox_modules/module-web/commands/alertAccept.js +1 -3
- package/build/ox_modules/module-web/commands/alertDismiss.js +1 -3
- package/build/ox_modules/module-web/commands/assertAlert.js +1 -7
- package/build/ox_modules/module-web/commands/assertExist.js +1 -3
- package/build/ox_modules/module-web/commands/assertSelectedLabel.js +1 -5
- package/build/ox_modules/module-web/commands/assertSelectedValue.js +1 -4
- package/build/ox_modules/module-web/commands/assertText.js +1 -4
- package/build/ox_modules/module-web/commands/assertTextNotPresent.js +1 -7
- package/build/ox_modules/module-web/commands/assertTextPresent.js +1 -7
- package/build/ox_modules/module-web/commands/assertTitle.js +1 -4
- package/build/ox_modules/module-web/commands/assertValue.js +1 -4
- package/build/ox_modules/module-web/commands/back.js +1 -3
- package/build/ox_modules/module-web/commands/clear.js +1 -6
- package/build/ox_modules/module-web/commands/click.js +4 -15
- package/build/ox_modules/module-web/commands/clickHidden.js +2 -8
- package/build/ox_modules/module-web/commands/closeWindow.js +1 -3
- package/build/ox_modules/module-web/commands/debug.js +2 -3
- package/build/ox_modules/module-web/commands/deleteCookies.js +1 -3
- package/build/ox_modules/module-web/commands/deselect.js +1 -3
- package/build/ox_modules/module-web/commands/doubleClick.js +3 -10
- package/build/ox_modules/module-web/commands/dragAndDrop.js +1 -3
- package/build/ox_modules/module-web/commands/execute.js +1 -3
- package/build/ox_modules/module-web/commands/fileBrowse.js +4 -11
- package/build/ox_modules/module-web/commands/findElement.js +1 -4
- package/build/ox_modules/module-web/commands/findElements.js +1 -5
- package/build/ox_modules/module-web/commands/fullscreenWindow.js +1 -3
- package/build/ox_modules/module-web/commands/getAlertText.js +1 -3
- package/build/ox_modules/module-web/commands/getAttribute.js +1 -5
- package/build/ox_modules/module-web/commands/getBrowserLogs.js +1 -4
- package/build/ox_modules/module-web/commands/getCookies.js +1 -3
- package/build/ox_modules/module-web/commands/getCssValue.js +1 -5
- package/build/ox_modules/module-web/commands/getElementCount.js +1 -3
- package/build/ox_modules/module-web/commands/getHTML.js +1 -3
- package/build/ox_modules/module-web/commands/getSource.js +1 -3
- package/build/ox_modules/module-web/commands/getText.js +1 -5
- package/build/ox_modules/module-web/commands/getTitle.js +1 -3
- package/build/ox_modules/module-web/commands/getUrl.js +1 -3
- package/build/ox_modules/module-web/commands/getValue.js +1 -6
- package/build/ox_modules/module-web/commands/getWindowHandles.js +1 -3
- package/build/ox_modules/module-web/commands/getWindowSize.js +1 -3
- package/build/ox_modules/module-web/commands/getXMLPageSource.js +1 -6
- package/build/ox_modules/module-web/commands/index.js +1 -184
- package/build/ox_modules/module-web/commands/isAlertPresent.js +1 -3
- package/build/ox_modules/module-web/commands/isChecked.js +1 -3
- package/build/ox_modules/module-web/commands/isExist.js +1 -4
- package/build/ox_modules/module-web/commands/isInteractable.js +1 -3
- package/build/ox_modules/module-web/commands/isSelected.js +1 -3
- package/build/ox_modules/module-web/commands/isVisible.js +1 -4
- package/build/ox_modules/module-web/commands/makeVisible.js +2 -11
- package/build/ox_modules/module-web/commands/maximizeWindow.js +1 -3
- package/build/ox_modules/module-web/commands/minimizeWindow.js +1 -3
- package/build/ox_modules/module-web/commands/mock.js +1 -3
- package/build/ox_modules/module-web/commands/mockClearAll.js +1 -3
- package/build/ox_modules/module-web/commands/mockRestoreAll.js +1 -3
- package/build/ox_modules/module-web/commands/newWindow.js +1 -3
- package/build/ox_modules/module-web/commands/open.js +1 -5
- package/build/ox_modules/module-web/commands/pause.js +1 -3
- package/build/ox_modules/module-web/commands/point.js +1 -3
- package/build/ox_modules/module-web/commands/pointJS.js +2 -9
- package/build/ox_modules/module-web/commands/refresh.js +1 -3
- package/build/ox_modules/module-web/commands/rightClick.js +3 -9
- package/build/ox_modules/module-web/commands/rightClickActions.js +1 -3
- package/build/ox_modules/module-web/commands/scrollToElement.js +1 -3
- package/build/ox_modules/module-web/commands/select.js +1 -6
- package/build/ox_modules/module-web/commands/selectFrame.js +1 -4
- package/build/ox_modules/module-web/commands/selectWindow.js +5 -27
- package/build/ox_modules/module-web/commands/sendKeys.js +3 -7
- package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +2 -3
- package/build/ox_modules/module-web/commands/setTimeout.js +1 -3
- package/build/ox_modules/module-web/commands/setWindowSize.js +1 -3
- package/build/ox_modules/module-web/commands/takeScreenshot.js +3 -6
- package/build/ox_modules/module-web/commands/type.js +1 -6
- package/build/ox_modules/module-web/commands/verifyAlert.js +1 -7
- package/build/ox_modules/module-web/commands/verifyExist.js +2 -7
- package/build/ox_modules/module-web/commands/verifySelectedLabel.js +1 -5
- package/build/ox_modules/module-web/commands/verifySelectedValue.js +1 -4
- package/build/ox_modules/module-web/commands/verifyText.js +1 -4
- package/build/ox_modules/module-web/commands/verifyTextNotPresent.js +1 -7
- package/build/ox_modules/module-web/commands/verifyTextPresent.js +1 -7
- package/build/ox_modules/module-web/commands/verifyTitle.js +1 -4
- package/build/ox_modules/module-web/commands/verifyValue.js +1 -4
- package/build/ox_modules/module-web/commands/waitForAngular.js +11 -14
- package/build/ox_modules/module-web/commands/waitForExist.js +1 -3
- package/build/ox_modules/module-web/commands/waitForInteractable.js +1 -3
- package/build/ox_modules/module-web/commands/waitForNotExist.js +1 -9
- package/build/ox_modules/module-web/commands/waitForNotText.js +1 -4
- package/build/ox_modules/module-web/commands/waitForNotValue.js +1 -4
- package/build/ox_modules/module-web/commands/waitForText.js +1 -4
- package/build/ox_modules/module-web/commands/waitForValue.js +1 -4
- package/build/ox_modules/module-web/commands/waitForVisible.js +1 -3
- package/build/ox_modules/module-web/commands/waitForWindow.js +4 -22
- package/build/ox_modules/module-web/webdriver/ChromeWDM.js +287 -0
- package/build/ox_modules/module-web/webdriver/auto-start.js +25 -0
- package/build/ox_modules/module-web.js +169 -233
- package/build/ox_modules/module-win/commands/assertText.js +1 -4
- package/build/ox_modules/module-win/commands/assertTitle.js +1 -5
- package/build/ox_modules/module-win/commands/assertValue.js +9 -17
- package/build/ox_modules/module-win/commands/back.js +1 -3
- package/build/ox_modules/module-win/commands/clear.js +1 -5
- package/build/ox_modules/module-win/commands/click.js +1 -3
- package/build/ox_modules/module-win/commands/clickLong.js +1 -3
- package/build/ox_modules/module-win/commands/clickMultipleTimes.js +1 -5
- package/build/ox_modules/module-win/commands/findElement.js +1 -4
- package/build/ox_modules/module-win/commands/findElements.js +1 -5
- package/build/ox_modules/module-win/commands/getAppiumLogs.js +1 -3
- package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +1 -3
- package/build/ox_modules/module-win/commands/getLocation.js +1 -3
- package/build/ox_modules/module-win/commands/getSource.js +1 -3
- package/build/ox_modules/module-win/commands/getText.js +1 -5
- package/build/ox_modules/module-win/commands/getValue.js +5 -10
- package/build/ox_modules/module-win/commands/getWindowHandles.js +1 -3
- package/build/ox_modules/module-win/commands/index.js +1 -74
- package/build/ox_modules/module-win/commands/isCheckable.js +1 -3
- package/build/ox_modules/module-win/commands/isChecked.js +1 -3
- package/build/ox_modules/module-win/commands/isClickable.js +1 -3
- package/build/ox_modules/module-win/commands/isExist.js +1 -4
- package/build/ox_modules/module-win/commands/isSelected.js +1 -3
- package/build/ox_modules/module-win/commands/isVisible.js +1 -4
- package/build/ox_modules/module-win/commands/open.js +1 -3
- package/build/ox_modules/module-win/commands/pause.js +1 -3
- package/build/ox_modules/module-win/commands/rightClick.js +1 -3
- package/build/ox_modules/module-win/commands/selectWindow.js +1 -16
- package/build/ox_modules/module-win/commands/sendKeys.js +1 -5
- package/build/ox_modules/module-win/commands/setTimeout.js +1 -3
- package/build/ox_modules/module-win/commands/takeScreenshot.js +1 -3
- package/build/ox_modules/module-win/commands/tap.js +1 -3
- package/build/ox_modules/module-win/commands/type.js +1 -5
- package/build/ox_modules/module-win/commands/waitForExist.js +1 -3
- package/build/ox_modules/module-win/commands/waitForInteractable.js +1 -5
- package/build/ox_modules/module-win/commands/waitForVisible.js +1 -3
- package/build/ox_modules/module-win.js +54 -95
- package/build/ox_modules/utils.js +97 -79
- package/build/ox_reporters/reporter-excel.js +2 -59
- package/build/ox_reporters/reporter-html.js +2 -29
- package/build/ox_reporters/reporter-json.js +2 -15
- package/build/ox_reporters/reporter-junit.js +2 -25
- package/build/ox_reporters/reporter-pdf.js +2 -20
- package/build/ox_reporters/reporter-rp.js +4 -92
- package/build/ox_reporters/reporter-xml.js +2 -18
- package/build/ox_services/service-devtools/submodule-network.js +4 -86
- package/build/ox_services/service-devtools.js +2 -24
- package/build/reporter/FileReporterBase.js +6 -45
- package/build/reporter/ReportAggregator.js +7 -121
- package/build/reporter/ReporterBase.js +1 -6
- package/build/reporter/WebSocketReporter.js +1 -39
- package/build/runners/WorkerProcess.js +2 -107
- package/build/runners/cucumber/CucumberEventListener.js +4 -29
- package/build/runners/cucumber/CucumberReporter.js +2 -57
- package/build/runners/cucumber/CucumberWorker.js +3 -69
- package/build/runners/cucumber/index.js +2 -31
- package/build/runners/cucumber/worker.js +2 -19
- package/build/runners/index.js +4 -11
- package/build/runners/oxygen/OxygenWorker.js +3 -61
- package/build/runners/oxygen/index.js +18 -179
- package/build/runners/oxygen/worker.js +3 -27
- package/package.json +4 -1
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
require("source-map-support/register");
|
|
4
|
-
|
|
5
4
|
var _OxygenError = _interopRequireDefault(require("../errors/OxygenError"));
|
|
6
|
-
|
|
7
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
8
|
-
|
|
5
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
6
|
/*
|
|
10
7
|
* Copyright (C) 2015-present CloudBeat Limited
|
|
11
8
|
*
|
|
@@ -23,39 +20,34 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
23
20
|
* * OS X - `brew install unixodbc`
|
|
24
21
|
* * Linux - `sudo apt-get install unixodbc unixodbc-dev` or `sudo dnf install unixODBC unixODBC-devel`
|
|
25
22
|
*/
|
|
26
|
-
var connection;
|
|
27
23
|
|
|
24
|
+
var connection;
|
|
28
25
|
var errHelper = require('../errors/helper');
|
|
29
|
-
|
|
30
26
|
module.exports = function () {
|
|
31
27
|
// FIXME: change setConnectionString to init and add hadnling in here
|
|
32
28
|
module.isInitialized = function () {
|
|
33
29
|
return true;
|
|
34
30
|
};
|
|
35
|
-
|
|
36
31
|
module._openDbConn = async function () {
|
|
37
32
|
if (!this.connString) {
|
|
38
33
|
throw new _OxygenError.default(errHelper.errorCode.DB_CONNECTION_ERROR, 'No connection string specified. Use db.setConnectionString().');
|
|
39
34
|
}
|
|
40
|
-
|
|
41
35
|
try {
|
|
42
36
|
// ignore this module if odbc wasn't installed
|
|
43
37
|
var db;
|
|
44
|
-
|
|
45
38
|
try {
|
|
46
39
|
db = require('odbc');
|
|
47
40
|
} catch (e) {
|
|
48
41
|
// could happen only on unix due to missing unixodbc binaries
|
|
49
42
|
const ModuleUnavailableError = require('../errors/ModuleUnavailableError');
|
|
50
|
-
|
|
51
43
|
throw new ModuleUnavailableError('Unable to load DB module. ' + e.message);
|
|
52
44
|
}
|
|
53
|
-
|
|
54
45
|
connection = await db.connect(this.connString);
|
|
55
46
|
} catch (e) {
|
|
56
47
|
throw new _OxygenError.default(errHelper.errorCode.DB_CONNECTION_ERROR, errHelper.getDbErrorMessage(e));
|
|
57
48
|
}
|
|
58
49
|
};
|
|
50
|
+
|
|
59
51
|
/**
|
|
60
52
|
* @summary Sets DB connection string to be used by other methods.
|
|
61
53
|
* @description This method doesn't actually open the connection as it's opened/closed
|
|
@@ -68,11 +60,10 @@ module.exports = function () {
|
|
|
68
60
|
* @function setConnectionString
|
|
69
61
|
* @param {String} connString - ODBC connection string.
|
|
70
62
|
*/
|
|
71
|
-
|
|
72
|
-
|
|
73
63
|
module.setConnectionString = function (connString) {
|
|
74
64
|
module.connString = connString;
|
|
75
65
|
};
|
|
66
|
+
|
|
76
67
|
/**
|
|
77
68
|
* @summary Executes SQL query and returns the first column of the first row in the result set.
|
|
78
69
|
* @function getScalar
|
|
@@ -80,18 +71,13 @@ module.exports = function () {
|
|
|
80
71
|
* @return {Object} The first column of the first row in the result set, or null if the result
|
|
81
72
|
* set is empty.
|
|
82
73
|
*/
|
|
83
|
-
|
|
84
|
-
|
|
85
74
|
module.getScalar = async function (query) {
|
|
86
75
|
await module._openDbConn();
|
|
87
|
-
|
|
88
76
|
try {
|
|
89
77
|
var resultSet = await connection.query(query);
|
|
90
|
-
|
|
91
78
|
if (resultSet.length === 0) {
|
|
92
79
|
return null;
|
|
93
80
|
}
|
|
94
|
-
|
|
95
81
|
var firstRow = resultSet[0];
|
|
96
82
|
var firstCol = firstRow[Object.keys(firstRow)[0]];
|
|
97
83
|
return firstCol;
|
|
@@ -101,17 +87,15 @@ module.exports = function () {
|
|
|
101
87
|
await connection.close();
|
|
102
88
|
}
|
|
103
89
|
};
|
|
90
|
+
|
|
104
91
|
/**
|
|
105
92
|
* @summary Executes SQL query and returns the result set.
|
|
106
93
|
* @function executeQuery
|
|
107
94
|
* @param {String} query - The query to execute.
|
|
108
95
|
* @return {Object} The result set.
|
|
109
96
|
*/
|
|
110
|
-
|
|
111
|
-
|
|
112
97
|
module.executeQuery = async function (query) {
|
|
113
98
|
await module._openDbConn();
|
|
114
|
-
|
|
115
99
|
try {
|
|
116
100
|
const querySyncRetval = await connection.query(query);
|
|
117
101
|
return querySyncRetval;
|
|
@@ -121,17 +105,15 @@ module.exports = function () {
|
|
|
121
105
|
await connection.close();
|
|
122
106
|
}
|
|
123
107
|
};
|
|
108
|
+
|
|
124
109
|
/**
|
|
125
110
|
* @summary Executes SQL statement.
|
|
126
111
|
* @description Any results from the query are discarded.
|
|
127
112
|
* @function executeNonQuery
|
|
128
113
|
* @param {String} query - The query to execute.
|
|
129
114
|
*/
|
|
130
|
-
|
|
131
|
-
|
|
132
115
|
module.executeNonQuery = async function (query) {
|
|
133
116
|
await module._openDbConn();
|
|
134
|
-
|
|
135
117
|
try {
|
|
136
118
|
await connection.query(query);
|
|
137
119
|
} catch (e) {
|
|
@@ -140,6 +122,7 @@ module.exports = function () {
|
|
|
140
122
|
await connection.close();
|
|
141
123
|
}
|
|
142
124
|
};
|
|
125
|
+
|
|
143
126
|
/**
|
|
144
127
|
* @summary Calls a stored procedure.
|
|
145
128
|
* @function callProcedure
|
|
@@ -151,11 +134,8 @@ module.exports = function () {
|
|
|
151
134
|
* var result = db.callProcedure('test', 3, 4, undefined);
|
|
152
135
|
* log.info(result);
|
|
153
136
|
*/
|
|
154
|
-
|
|
155
|
-
|
|
156
137
|
module.callProcedure = async function (name, ...args) {
|
|
157
138
|
await module._openDbConn();
|
|
158
|
-
|
|
159
139
|
try {
|
|
160
140
|
const querySyncRetval = await connection.callProcedure(null, null, name, [...args]);
|
|
161
141
|
return querySyncRetval;
|
|
@@ -165,7 +145,6 @@ module.exports = function () {
|
|
|
165
145
|
await connection.close();
|
|
166
146
|
}
|
|
167
147
|
};
|
|
168
|
-
|
|
169
148
|
return module;
|
|
170
149
|
};
|
|
171
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1kYi5qcyJdLCJuYW1lcyI6WyJjb25uZWN0aW9uIiwiZXJySGVscGVyIiwicmVxdWlyZSIsIm1vZHVsZSIsImV4cG9ydHMiLCJpc0luaXRpYWxpemVkIiwiX29wZW5EYkNvbm4iLCJjb25uU3RyaW5nIiwiT3hFcnJvciIsImVycm9yQ29kZSIsIkRCX0NPTk5FQ1RJT05fRVJST1IiLCJkYiIsImUiLCJNb2R1bGVVbmF2YWlsYWJsZUVycm9yIiwibWVzc2FnZSIsImNvbm5lY3QiLCJnZXREYkVycm9yTWVzc2FnZSIsInNldENvbm5lY3Rpb25TdHJpbmciLCJnZXRTY2FsYXIiLCJxdWVyeSIsInJlc3VsdFNldCIsImxlbmd0aCIsImZpcnN0Um93IiwiZmlyc3RDb2wiLCJPYmplY3QiLCJrZXlzIiwiREJfUVVFUllfRVJST1IiLCJjbG9zZSIsImV4ZWN1dGVRdWVyeSIsInF1ZXJ5U3luY1JldHZhbCIsImV4ZWN1dGVOb25RdWVyeSIsImNhbGxQcm9jZWR1cmUiLCJuYW1lIiwiYXJncyJdLCJtYXBwaW5ncyI6Ijs7OztBQW9CQTs7OztBQXBCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxJQUFJQSxVQUFKOztBQUdBLElBQUlDLFNBQVMsR0FBR0MsT0FBTyxDQUFDLGtCQUFELENBQXZCOztBQUVBQyxNQUFNLENBQUNDLE9BQVAsR0FBaUIsWUFBVztBQUN4QjtBQUNBRCxFQUFBQSxNQUFNLENBQUNFLGFBQVAsR0FBdUIsWUFBVztBQUM5QixXQUFPLElBQVA7QUFDSCxHQUZEOztBQUlBRixFQUFBQSxNQUFNLENBQUNHLFdBQVAsR0FBcUIsa0JBQWlCO0FBQ2xDLFFBQUksQ0FBQyxLQUFLQyxVQUFWLEVBQXNCO0FBQ2xCLFlBQU0sSUFBSUMsb0JBQUosQ0FBWVAsU0FBUyxDQUFDUSxTQUFWLENBQW9CQyxtQkFBaEMs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Q0EsWUFBTU4sVUFBVSxDQUFDbUIsS0FBWCxDQUFpQkEsS0FBakIsQ0FBTjtBQUNILEtBRkQsQ0FFRSxPQUFPUCxDQUFQLEVBQVU7QUFDUixZQUFNLElBQUlKLG9CQUFKLENBQVlQLFNBQVMsQ0FBQ1EsU0FBVixDQUFvQmlCLGNBQWhDLEVBQWdEekIsU0FBUyxDQUFDZSxpQkFBVixDQUE0QkosQ0FBNUIsQ0FBaEQsQ0FBTjtBQUNILEtBSkQsU0FJVTtBQUNOLFlBQU1aLFVBQVUsQ0FBQzJCLEtBQVgsRUFBTjtBQUNIO0FBQ0osR0FURDtBQVdBO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNJeEIsRUFBQUEsTUFBTSxDQUFDNEIsYUFBUCxHQUF1QixnQkFBZUMsSUFBZixFQUFxQixHQUFHQyxJQUF4QixFQUE4QjtBQUNqRCxVQUFNOUIsTUFBTSxDQUFDRyxXQUFQLEVBQU47O0FBRUEsUUFBSTtBQUNBLFlBQU11QixlQUFlLEdBQUcsTUFBTTdCLFVBQVUsQ0FBQytCLGFBQVgsQ0FBeUIsSUFBekIsRUFBK0IsSUFBL0IsRUFBcUNDLElBQXJDLEVBQTJDLENBQUMsR0FBR0MsSUFBSixDQUEzQyxDQUE5QjtBQUNBLGFBQU9KLGVBQVA7QUFDSCxLQUhELENBR0UsT0FBT2pCLENBQVAsRUFBVTtBQUNSLFlBQU0sSUFBSUosb0JBQUosQ0FBWVAsU0FBUyxDQUFDUSxTQUFWLENBQW9CaUIsY0FBaEMsRUFBZ0R6QixTQUFTLENBQUNlLGlCQUFWLENBQTRCSixDQUE1QixDQUFoRCxDQUFOO0FBQ0gsS0FMRCxTQUtVO0FBQ04sWUFBTVosVUFBVSxDQUFDMkIsS0FBWCxFQUFOO0FBQ0g7QUFDSixHQVhEOztBQWFBLFNBQU94QixNQUFQO0FBQ0gsQ0FoSUQiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBkYlxyXG4gKiBAZGVzY3JpcHRpb24gUHJvdmlkZXMgbWV0aG9kcyBmb3Igd29ya2luZyB3aXRoIERhdGEgQmFzZXMgdGhyb3VnaCBPREJDLlxyXG4gKiBAbm90ZSBCZWZvcmUgdXNpbmcgdGhpcyBtb2R1bGUsIG1ha2Ugc3VyZSB0byBpbnN0YWxsIGB1bml4b2RiY2A6ICBcclxuICogICAqIFdpbmRvd3MgLSBJbnN0YWxsIGBXaW5kb3dzIFNES2AgIFxyXG4gKiAgICogT1MgWCAtICBgYnJldyBpbnN0YWxsIHVuaXhvZGJjYCAgXHJcbiAqICAgKiBMaW51eCAtIGBzdWRvIGFwdC1nZXQgaW5zdGFsbCB1bml4b2RiYyB1bml4b2RiYy1kZXZgIG9yIGBzdWRvIGRuZiBpbnN0YWxsIHVuaXhPREJDIHVuaXhPREJDLWRldmVsYFxyXG4gKi9cclxuXHJcbnZhciBjb25uZWN0aW9uO1xyXG5cclxuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxudmFyIGVyckhlbHBlciA9IHJlcXVpcmUoJy4uL2Vycm9ycy9oZWxwZXInKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XHJcbiAgICAvLyBGSVhNRTogY2hhbmdlIHNldENvbm5lY3Rpb25TdHJpbmcgdG8gaW5pdCBhbmQgYWRkIGhhZG5saW5nIGluIGhlcmVcclxuICAgIG1vZHVsZS5pc0luaXRpYWxpemVkID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9O1xyXG5cclxuICAgIG1vZHVsZS5fb3BlbkRiQ29ubiA9IGFzeW5jIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5jb25uU3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuREJfQ09OTkVDVElPTl9FUlJPUiwgJ05vIGNvbm5lY3Rpb24gc3RyaW5nIHNwZWNpZmllZC4gVXNlIGRiLnNldENvbm5lY3Rpb25TdHJpbmcoKS4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIGlnbm9yZSB0aGlzIG1vZHVsZSBpZiBvZGJjIHdhc24ndCBpbnN0YWxsZWRcclxuICAgICAgICAgICAgdmFyIGRiO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgZGIgPSByZXF1aXJlKCdvZGJjJyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGNvdWxkIGhhcHBlbiBvbmx5IG9uIHVuaXggZHVlIHRvIG1pc3NpbmcgdW5peG9kYmMgYmluYXJpZXNcclxuICAgICAgICAgICAgICAgIGNvbnN0IE1vZHVsZVVuYXZhaWxhYmxlRXJyb3IgPSByZXF1aXJlKCcuLi9lcnJvcnMvTW9kdWxlVW5hdmFpbGFibGVFcnJvcicpO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE1vZHVsZVVuYXZhaWxhYmxlRXJyb3IoJ1VuYWJsZSB0byBsb2FkIERCIG1vZHVsZS4gJytlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25uZWN0aW9uID0gYXdhaXQgZGIuY29ubmVjdCh0aGlzLmNvbm5TdHJpbmcpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5EQl9DT05ORUNUSU9OX0VSUk9SLCBlcnJIZWxwZXIuZ2V0RGJFcnJvck1lc3NhZ2UoZSkpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEBzdW1tYXJ5IFNldHMgREIgY29ubmVjdGlvbiBzdHJpbmcgdG8gYmUgdXNlZCBieSBvdGhlciBtZXRob2RzLlxyXG4gICAgKiBAZGVzY3JpcHRpb24gVGhpcyBtZXRob2QgZG9lc24ndCBhY3R1YWxseSBvcGVuIHRoZSBjb25uZWN0aW9uIGFzIGl0J3Mgb3BlbmVkL2Nsb3NlZFxyXG4gICAgKiAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBieSBxdWVyeSBtZXRob2RzLiAgXHJcbiAgICAqICAgICAgICAgICAgICBFeGFtcGxlIGNvbm5lY3Rpb24gc3RyaW5nczogIFxyXG4gICAgKiAgICAgICAgICAgICAgLSBgRHJpdmVyPXtNeVNRTCBPREJDIDkuMCBVbmljb2RlIERyaXZlcn07U2VydmVyPWxvY2FsaG9zdDtEYXRhYmFzZT1teURhdGFiYXNlO1xyXG4gICAgKiAgICAgICAgICAgICAgICBVc2VyPW15VXNlcm5hbWU7UGFzc3dvcmQ9bXlQYXNzd29yZDtPcHRpb249MztgICBcclxuICAgICogICAgICAgICAgICAgIC0gYERyaXZlcj17T3JhY2xlIGluIGluc3RhbnRjbGllbnRfMTFfMn07ZGJxPTEyNy4wLjAuMToxNTIxL1hFO3VpZD1teVVzZXJuYW1lO1xyXG4gICAgKiAgICAgICAgICAgICAgICBwd2Q9bXlQYXNzd29yZDtgXHJcbiAgICAqIEBmdW5jdGlvbiBzZXRDb25uZWN0aW9uU3RyaW5nXHJcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb25uU3RyaW5nIC0gT0RCQyBjb25uZWN0aW9uIHN0cmluZy5cclxuICAgICovXHJcbiAgICBtb2R1bGUuc2V0Q29ubmVjdGlvblN0cmluZyA9IGZ1bmN0aW9uKGNvbm5TdHJpbmcpIHtcclxuICAgICAgICBtb2R1bGUuY29ublN0cmluZyA9IGNvbm5TdHJpbmc7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgRXhlY3V0ZXMgU1FMIHF1ZXJ5IGFuZCByZXR1cm5zIHRoZSBmaXJzdCBjb2x1bW4gb2YgdGhlIGZpcnN0IHJvdyBpbiB0aGUgcmVzdWx0IHNldC5cclxuICAgICAqIEBmdW5jdGlvbiBnZXRTY2FsYXJcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBxdWVyeSAtIFRoZSBxdWVyeSB0byBleGVjdXRlLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgZmlyc3QgY29sdW1uIG9mIHRoZSBmaXJzdCByb3cgaW4gdGhlIHJlc3VsdCBzZXQsIG9yIG51bGwgaWYgdGhlIHJlc3VsdFxyXG4gICAgICogICAgICAgICAgICAgICAgICBzZXQgaXMgZW1wdHkuXHJcbiAgICAgKi9cclxuICAgIG1vZHVsZS5nZXRTY2FsYXIgPSBhc3luYyBmdW5jdGlvbihxdWVyeSkge1xyXG4gICAgICAgIGF3YWl0IG1vZHVsZS5fb3BlbkRiQ29ubigpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHRTZXQgPSBhd2FpdCBjb25uZWN0aW9uLnF1ZXJ5KHF1ZXJ5KTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdFNldC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBmaXJzdFJvdyA9IHJlc3VsdFNldFswXTtcclxuICAgICAgICAgICAgdmFyIGZpcnN0Q29sID0gZmlyc3RSb3dbT2JqZWN0LmtleXMoZmlyc3RSb3cpWzBdXTtcclxuICAgICAgICAgICAgcmV0dXJuIGZpcnN0Q29sO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5EQl9RVUVSWV9FUlJPUiwgZXJySGVscGVyLmdldERiRXJyb3JNZXNzYWdlKGUpKTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IEV4ZWN1dGVzIFNRTCBxdWVyeSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IHNldC5cclxuICAgICAqIEBmdW5jdGlvbiBleGVjdXRlUXVlcnlcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBxdWVyeSAtIFRoZSBxdWVyeSB0byBleGVjdXRlLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgcmVzdWx0IHNldC5cclxuICAgICAqL1xyXG4gICAgbW9kdWxlLmV4ZWN1dGVRdWVyeSA9IGFzeW5jIGZ1bmN0aW9uKHF1ZXJ5KSB7XHJcbiAgICAgICAgYXdhaXQgbW9kdWxlLl9vcGVuRGJDb25uKCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcXVlcnlTeW5jUmV0dmFsID0gYXdhaXQgY29ubmVjdGlvbi5xdWVyeShxdWVyeSk7XHJcbiAgICAgICAgICAgIHJldHVybiBxdWVyeVN5bmNSZXR2YWw7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkRCX1FVRVJZX0VSUk9SLCBlcnJIZWxwZXIuZ2V0RGJFcnJvck1lc3NhZ2UoZSkpO1xyXG4gICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb24uY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgRXhlY3V0ZXMgU1FMIHN0YXRlbWVudC5cclxuICAgICAqIEBkZXNjcmlwdGlvbiBBbnkgcmVzdWx0cyBmcm9tIHRoZSBxdWVyeSBhcmUgZGlzY2FyZGVkLlxyXG4gICAgICogQGZ1bmN0aW9uIGV4ZWN1dGVOb25RdWVyeVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHF1ZXJ5IC0gVGhlIHF1ZXJ5IHRvIGV4ZWN1dGUuXHJcbiAgICAgKi9cclxuICAgIG1vZHVsZS5leGVjdXRlTm9uUXVlcnkgPSBhc3luYyBmdW5jdGlvbihxdWVyeSkge1xyXG4gICAgICAgIGF3YWl0IG1vZHVsZS5fb3BlbkRiQ29ubigpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb24ucXVlcnkocXVlcnkpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5EQl9RVUVSWV9FUlJPUiwgZXJySGVscGVyLmdldERiRXJyb3JNZXNzYWdlKGUpKTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IENhbGxzIGEgc3RvcmVkIHByb2NlZHVyZS5cclxuICAgICAqIEBmdW5jdGlvbiBjYWxsUHJvY2VkdXJlXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIHByb2NlZHVyZSB0byBjYWxsLlxyXG4gICAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MgLSBQcm9jZWR1cmUgYXJndW1lbnRzLiBJZiBwcm9jZWR1cmUgcHJvZHVjZXMgb3V0cHV0IHBhcmFtZXRlcnMgdGhlbiB0aGVzZSBuZWVkIHRvIGJlIHNwZWNpZmllZCB1c2luZyBgdW5kZWZpbmVkYC5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gUHJvY2VkdXJlIG91dHB1dCBpZiBhbnkuXHJcbiAgICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5bamF2YXNjcmlwdF0gVXNhZ2UgZXhhbXBsZTwvY2FwdGlvbj5cclxuICAgICAqIC8vIGNhbGxzIGEgcHJvY2VkdXJlIHdoaWNoIGV4cGVjdHMgdHdvIGlucHV0IHBhcmFtZXRlcnMgYW5kIG9uZSBvdXRwdXQgcGFyYW1ldGVyLlxyXG4gICAgICogdmFyIHJlc3VsdCA9IGRiLmNhbGxQcm9jZWR1cmUoJ3Rlc3QnLCAzLCA0LCB1bmRlZmluZWQpO1xyXG4gICAgICogbG9nLmluZm8ocmVzdWx0KTtcclxuICAgICAqL1xyXG4gICAgbW9kdWxlLmNhbGxQcm9jZWR1cmUgPSBhc3luYyBmdW5jdGlvbihuYW1lLCAuLi5hcmdzKSB7XHJcbiAgICAgICAgYXdhaXQgbW9kdWxlLl9vcGVuRGJDb25uKCk7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5U3luY1JldHZhbCA9IGF3YWl0IGNvbm5lY3Rpb24uY2FsbFByb2NlZHVyZShudWxsLCBudWxsLCBuYW1lLCBbLi4uYXJnc10pO1xyXG4gICAgICAgICAgICByZXR1cm4gcXVlcnlTeW5jUmV0dmFsO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5EQl9RVUVSWV9FUlJPUiwgZXJySGVscGVyLmdldERiRXJyb3JNZXNzYWdlKGUpKTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gbW9kdWxlO1xyXG59O1xyXG4iXX0=
|
|
150
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfT3h5Z2VuRXJyb3IiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImNvbm5lY3Rpb24iLCJlcnJIZWxwZXIiLCJtb2R1bGUiLCJleHBvcnRzIiwiaXNJbml0aWFsaXplZCIsIl9vcGVuRGJDb25uIiwiY29ublN0cmluZyIsIk94RXJyb3IiLCJlcnJvckNvZGUiLCJEQl9DT05ORUNUSU9OX0VSUk9SIiwiZGIiLCJNb2R1bGVVbmF2YWlsYWJsZUVycm9yIiwibWVzc2FnZSIsImNvbm5lY3QiLCJnZXREYkVycm9yTWVzc2FnZSIsInNldENvbm5lY3Rpb25TdHJpbmciLCJnZXRTY2FsYXIiLCJxdWVyeSIsInJlc3VsdFNldCIsImxlbmd0aCIsImZpcnN0Um93IiwiZmlyc3RDb2wiLCJPYmplY3QiLCJrZXlzIiwiREJfUVVFUllfRVJST1IiLCJjbG9zZSIsImV4ZWN1dGVRdWVyeSIsInF1ZXJ5U3luY1JldHZhbCIsImV4ZWN1dGVOb25RdWVyeSIsImNhbGxQcm9jZWR1cmUiLCJuYW1lIiwiYXJncyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1kYi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBkYlxyXG4gKiBAZGVzY3JpcHRpb24gUHJvdmlkZXMgbWV0aG9kcyBmb3Igd29ya2luZyB3aXRoIERhdGEgQmFzZXMgdGhyb3VnaCBPREJDLlxyXG4gKiBAbm90ZSBCZWZvcmUgdXNpbmcgdGhpcyBtb2R1bGUsIG1ha2Ugc3VyZSB0byBpbnN0YWxsIGB1bml4b2RiY2A6ICBcclxuICogICAqIFdpbmRvd3MgLSBJbnN0YWxsIGBXaW5kb3dzIFNES2AgIFxyXG4gKiAgICogT1MgWCAtICBgYnJldyBpbnN0YWxsIHVuaXhvZGJjYCAgXHJcbiAqICAgKiBMaW51eCAtIGBzdWRvIGFwdC1nZXQgaW5zdGFsbCB1bml4b2RiYyB1bml4b2RiYy1kZXZgIG9yIGBzdWRvIGRuZiBpbnN0YWxsIHVuaXhPREJDIHVuaXhPREJDLWRldmVsYFxyXG4gKi9cclxuXHJcbnZhciBjb25uZWN0aW9uO1xyXG5cclxuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxudmFyIGVyckhlbHBlciA9IHJlcXVpcmUoJy4uL2Vycm9ycy9oZWxwZXInKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XHJcbiAgICAvLyBGSVhNRTogY2hhbmdlIHNldENvbm5lY3Rpb25TdHJpbmcgdG8gaW5pdCBhbmQgYWRkIGhhZG5saW5nIGluIGhlcmVcclxuICAgIG1vZHVsZS5pc0luaXRpYWxpemVkID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9O1xyXG5cclxuICAgIG1vZHVsZS5fb3BlbkRiQ29ubiA9IGFzeW5jIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5jb25uU3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuREJfQ09OTkVDVElPTl9FUlJPUiwgJ05vIGNvbm5lY3Rpb24gc3RyaW5nIHNwZWNpZmllZC4gVXNlIGRiLnNldENvbm5lY3Rpb25TdHJpbmcoKS4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIGlnbm9yZSB0aGlzIG1vZHVsZSBpZiBvZGJjIHdhc24ndCBpbnN0YWxsZWRcclxuICAgICAgICAgICAgdmFyIGRiO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgZGIgPSByZXF1aXJlKCdvZGJjJyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGNvdWxkIGhhcHBlbiBvbmx5IG9uIHVuaXggZHVlIHRvIG1pc3NpbmcgdW5peG9kYmMgYmluYXJpZXNcclxuICAgICAgICAgICAgICAgIGNvbnN0IE1vZHVsZVVuYXZhaWxhYmxlRXJyb3IgPSByZXF1aXJlKCcuLi9lcnJvcnMvTW9kdWxlVW5hdmFpbGFibGVFcnJvcicpO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE1vZHVsZVVuYXZhaWxhYmxlRXJyb3IoJ1VuYWJsZSB0byBsb2FkIERCIG1vZHVsZS4gJytlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25uZWN0aW9uID0gYXdhaXQgZGIuY29ubmVjdCh0aGlzLmNvbm5TdHJpbmcpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5EQl9DT05ORUNUSU9OX0VSUk9SLCBlcnJIZWxwZXIuZ2V0RGJFcnJvck1lc3NhZ2UoZSkpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEBzdW1tYXJ5IFNldHMgREIgY29ubmVjdGlvbiBzdHJpbmcgdG8gYmUgdXNlZCBieSBvdGhlciBtZXRob2RzLlxyXG4gICAgKiBAZGVzY3JpcHRpb24gVGhpcyBtZXRob2QgZG9lc24ndCBhY3R1YWxseSBvcGVuIHRoZSBjb25uZWN0aW9uIGFzIGl0J3Mgb3BlbmVkL2Nsb3NlZFxyXG4gICAgKiAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBieSBxdWVyeSBtZXRob2RzLiAgXHJcbiAgICAqICAgICAgICAgICAgICBFeGFtcGxlIGNvbm5lY3Rpb24gc3RyaW5nczogIFxyXG4gICAgKiAgICAgICAgICAgICAgLSBgRHJpdmVyPXtNeVNRTCBPREJDIDkuMCBVbmljb2RlIERyaXZlcn07U2VydmVyPWxvY2FsaG9zdDtEYXRhYmFzZT1teURhdGFiYXNlO1xyXG4gICAgKiAgICAgICAgICAgICAgICBVc2VyPW15VXNlcm5hbWU7UGFzc3dvcmQ9bXlQYXNzd29yZDtPcHRpb249MztgICBcclxuICAgICogICAgICAgICAgICAgIC0gYERyaXZlcj17T3JhY2xlIGluIGluc3RhbnRjbGllbnRfMTFfMn07ZGJxPTEyNy4wLjAuMToxNTIxL1hFO3VpZD1teVVzZXJuYW1lO1xyXG4gICAgKiAgICAgICAgICAgICAgICBwd2Q9bXlQYXNzd29yZDtgXHJcbiAgICAqIEBmdW5jdGlvbiBzZXRDb25uZWN0aW9uU3RyaW5nXHJcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb25uU3RyaW5nIC0gT0RCQyBjb25uZWN0aW9uIHN0cmluZy5cclxuICAgICovXHJcbiAgICBtb2R1bGUuc2V0Q29ubmVjdGlvblN0cmluZyA9IGZ1bmN0aW9uKGNvbm5TdHJpbmcpIHtcclxuICAgICAgICBtb2R1bGUuY29ublN0cmluZyA9IGNvbm5TdHJpbmc7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgRXhlY3V0ZXMgU1FMIHF1ZXJ5IGFuZCByZXR1cm5zIHRoZSBmaXJzdCBjb2x1bW4gb2YgdGhlIGZpcnN0IHJvdyBpbiB0aGUgcmVzdWx0IHNldC5cclxuICAgICAqIEBmdW5jdGlvbiBnZXRTY2FsYXJcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBxdWVyeSAtIFRoZSBxdWVyeSB0byBleGVjdXRlLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgZmlyc3QgY29sdW1uIG9mIHRoZSBmaXJzdCByb3cgaW4gdGhlIHJlc3VsdCBzZXQsIG9yIG51bGwgaWYgdGhlIHJlc3VsdFxyXG4gICAgICogICAgICAgICAgICAgICAgICBzZXQgaXMgZW1wdHkuXHJcbiAgICAgKi9cclxuICAgIG1vZHVsZS5nZXRTY2FsYXIgPSBhc3luYyBmdW5jdGlvbihxdWVyeSkge1xyXG4gICAgICAgIGF3YWl0IG1vZHVsZS5fb3BlbkRiQ29ubigpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHRTZXQgPSBhd2FpdCBjb25uZWN0aW9uLnF1ZXJ5KHF1ZXJ5KTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdFNldC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBmaXJzdFJvdyA9IHJlc3VsdFNldFswXTtcclxuICAgICAgICAgICAgdmFyIGZpcnN0Q29sID0gZmlyc3RSb3dbT2JqZWN0LmtleXMoZmlyc3RSb3cpWzBdXTtcclxuICAgICAgICAgICAgcmV0dXJuIGZpcnN0Q29sO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5EQl9RVUVSWV9FUlJPUiwgZXJySGVscGVyLmdldERiRXJyb3JNZXNzYWdlKGUpKTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IEV4ZWN1dGVzIFNRTCBxdWVyeSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IHNldC5cclxuICAgICAqIEBmdW5jdGlvbiBleGVjdXRlUXVlcnlcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBxdWVyeSAtIFRoZSBxdWVyeSB0byBleGVjdXRlLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgcmVzdWx0IHNldC5cclxuICAgICAqL1xyXG4gICAgbW9kdWxlLmV4ZWN1dGVRdWVyeSA9IGFzeW5jIGZ1bmN0aW9uKHF1ZXJ5KSB7XHJcbiAgICAgICAgYXdhaXQgbW9kdWxlLl9vcGVuRGJDb25uKCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcXVlcnlTeW5jUmV0dmFsID0gYXdhaXQgY29ubmVjdGlvbi5xdWVyeShxdWVyeSk7XHJcbiAgICAgICAgICAgIHJldHVybiBxdWVyeVN5bmNSZXR2YWw7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkRCX1FVRVJZX0VSUk9SLCBlcnJIZWxwZXIuZ2V0RGJFcnJvck1lc3NhZ2UoZSkpO1xyXG4gICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb24uY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgRXhlY3V0ZXMgU1FMIHN0YXRlbWVudC5cclxuICAgICAqIEBkZXNjcmlwdGlvbiBBbnkgcmVzdWx0cyBmcm9tIHRoZSBxdWVyeSBhcmUgZGlzY2FyZGVkLlxyXG4gICAgICogQGZ1bmN0aW9uIGV4ZWN1dGVOb25RdWVyeVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHF1ZXJ5IC0gVGhlIHF1ZXJ5IHRvIGV4ZWN1dGUuXHJcbiAgICAgKi9cclxuICAgIG1vZHVsZS5leGVjdXRlTm9uUXVlcnkgPSBhc3luYyBmdW5jdGlvbihxdWVyeSkge1xyXG4gICAgICAgIGF3YWl0IG1vZHVsZS5fb3BlbkRiQ29ubigpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb24ucXVlcnkocXVlcnkpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5EQl9RVUVSWV9FUlJPUiwgZXJySGVscGVyLmdldERiRXJyb3JNZXNzYWdlKGUpKTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IENhbGxzIGEgc3RvcmVkIHByb2NlZHVyZS5cclxuICAgICAqIEBmdW5jdGlvbiBjYWxsUHJvY2VkdXJlXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIHByb2NlZHVyZSB0byBjYWxsLlxyXG4gICAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MgLSBQcm9jZWR1cmUgYXJndW1lbnRzLiBJZiBwcm9jZWR1cmUgcHJvZHVjZXMgb3V0cHV0IHBhcmFtZXRlcnMgdGhlbiB0aGVzZSBuZWVkIHRvIGJlIHNwZWNpZmllZCB1c2luZyBgdW5kZWZpbmVkYC5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gUHJvY2VkdXJlIG91dHB1dCBpZiBhbnkuXHJcbiAgICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5bamF2YXNjcmlwdF0gVXNhZ2UgZXhhbXBsZTwvY2FwdGlvbj5cclxuICAgICAqIC8vIGNhbGxzIGEgcHJvY2VkdXJlIHdoaWNoIGV4cGVjdHMgdHdvIGlucHV0IHBhcmFtZXRlcnMgYW5kIG9uZSBvdXRwdXQgcGFyYW1ldGVyLlxyXG4gICAgICogdmFyIHJlc3VsdCA9IGRiLmNhbGxQcm9jZWR1cmUoJ3Rlc3QnLCAzLCA0LCB1bmRlZmluZWQpO1xyXG4gICAgICogbG9nLmluZm8ocmVzdWx0KTtcclxuICAgICAqL1xyXG4gICAgbW9kdWxlLmNhbGxQcm9jZWR1cmUgPSBhc3luYyBmdW5jdGlvbihuYW1lLCAuLi5hcmdzKSB7XHJcbiAgICAgICAgYXdhaXQgbW9kdWxlLl9vcGVuRGJDb25uKCk7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5U3luY1JldHZhbCA9IGF3YWl0IGNvbm5lY3Rpb24uY2FsbFByb2NlZHVyZShudWxsLCBudWxsLCBuYW1lLCBbLi4uYXJnc10pO1xyXG4gICAgICAgICAgICByZXR1cm4gcXVlcnlTeW5jUmV0dmFsO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5EQl9RVUVSWV9FUlJPUiwgZXJySGVscGVyLmdldERiRXJyb3JNZXNzYWdlKGUpKTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gbW9kdWxlO1xyXG59O1xyXG4iXSwibWFwcGluZ3MiOiI7OztBQW9CQSxJQUFBQSxZQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFBNEMsU0FBQUQsdUJBQUFFLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFwQjVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJRyxVQUFVO0FBR2QsSUFBSUMsU0FBUyxHQUFHTCxPQUFPLENBQUMsa0JBQWtCLENBQUM7QUFFM0NNLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHLFlBQVc7RUFDeEI7RUFDQUQsTUFBTSxDQUFDRSxhQUFhLEdBQUcsWUFBVztJQUM5QixPQUFPLElBQUk7RUFDZixDQUFDO0VBRURGLE1BQU0sQ0FBQ0csV0FBVyxHQUFHLGtCQUFpQjtJQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDQyxVQUFVLEVBQUU7TUFDbEIsTUFBTSxJQUFJQyxvQkFBTyxDQUFDTixTQUFTLENBQUNPLFNBQVMsQ0FBQ0MsbUJBQW1CLEVBQUUsK0RBQStELENBQUM7SUFDL0g7SUFFQSxJQUFJO01BQ0E7TUFDQSxJQUFJQyxFQUFFO01BQ04sSUFBSTtRQUNBQSxFQUFFLEdBQUdkLE9BQU8sQ0FBQyxNQUFNLENBQUM7TUFDeEIsQ0FBQyxDQUFDLE9BQU9DLENBQUMsRUFBRTtRQUNSO1FBQ0EsTUFBTWMsc0JBQXNCLEdBQUdmLE9BQU8sQ0FBQyxrQ0FBa0MsQ0FBQztRQUMxRSxNQUFNLElBQUllLHNCQUFzQixDQUFDLDRCQUE0QixHQUFDZCxDQUFDLENBQUNlLE9BQU8sQ0FBQztNQUM1RTtNQUVBWixVQUFVLEdBQUcsTUFBTVUsRUFBRSxDQUFDRyxPQUFPLENBQUMsSUFBSSxDQUFDUCxVQUFVLENBQUM7SUFDbEQsQ0FBQyxDQUFDLE9BQU9ULENBQUMsRUFBRTtNQUNSLE1BQU0sSUFBSVUsb0JBQU8sQ0FBQ04sU0FBUyxDQUFDTyxTQUFTLENBQUNDLG1CQUFtQixFQUFFUixTQUFTLENBQUNhLGlCQUFpQixDQUFDakIsQ0FBQyxDQUFDLENBQUM7SUFDOUY7RUFDSixDQUFDOztFQUVEO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJSyxNQUFNLENBQUNhLG1CQUFtQixHQUFHLFVBQVNULFVBQVUsRUFBRTtJQUM5Q0osTUFBTSxDQUFDSSxVQUFVLEdBQUdBLFVBQVU7RUFDbEMsQ0FBQzs7RUFFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJSixNQUFNLENBQUNjLFNBQVMsR0FBRyxnQkFBZUMsS0FBSyxFQUFFO0lBQ3JDLE1BQU1mLE1BQU0sQ0FBQ0csV0FBVyxDQUFDLENBQUM7SUFDMUIsSUFBSTtNQUNBLElBQUlhLFNBQVMsR0FBRyxNQUFNbEIsVUFBVSxDQUFDaUIsS0FBSyxDQUFDQSxLQUFLLENBQUM7TUFDN0MsSUFBSUMsU0FBUyxDQUFDQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3hCLE9BQU8sSUFBSTtNQUNmO01BQ0EsSUFBSUMsUUFBUSxHQUFHRixTQUFTLENBQUMsQ0FBQyxDQUFDO01BQzNCLElBQUlHLFFBQVEsR0FBR0QsUUFBUSxDQUFDRSxNQUFNLENBQUNDLElBQUksQ0FBQ0gsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDakQsT0FBT0MsUUFBUTtJQUNuQixDQUFDLENBQUMsT0FBT3hCLENBQUMsRUFBRTtNQUNSLE1BQU0sSUFBSVUsb0JBQU8sQ0FBQ04sU0FBUyxDQUFDTyxTQUFTLENBQUNnQixjQUFjLEVBQUV2QixTQUFTLENBQUNhLGlCQUFpQixDQUFDakIsQ0FBQyxDQUFDLENBQUM7SUFDekYsQ0FBQyxTQUFTO01BQ04sTUFBTUcsVUFBVSxDQUFDeUIsS0FBSyxDQUFDLENBQUM7SUFDNUI7RUFDSixDQUFDOztFQUVEO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJdkIsTUFBTSxDQUFDd0IsWUFBWSxHQUFHLGdCQUFlVCxLQUFLLEVBQUU7SUFDeEMsTUFBTWYsTUFBTSxDQUFDRyxXQUFXLENBQUMsQ0FBQztJQUMxQixJQUFJO01BQ0EsTUFBTXNCLGVBQWUsR0FBRyxNQUFNM0IsVUFBVSxDQUFDaUIsS0FBSyxDQUFDQSxLQUFLLENBQUM7TUFDckQsT0FBT1UsZUFBZTtJQUMxQixDQUFDLENBQUMsT0FBTzlCLENBQUMsRUFBRTtNQUNSLE1BQU0sSUFBSVUsb0JBQU8sQ0FBQ04sU0FBUyxDQUFDTyxTQUFTLENBQUNnQixjQUFjLEVBQUV2QixTQUFTLENBQUNhLGlCQUFpQixDQUFDakIsQ0FBQyxDQUFDLENBQUM7SUFDekYsQ0FBQyxTQUFTO01BQ04sTUFBTUcsVUFBVSxDQUFDeUIsS0FBSyxDQUFDLENBQUM7SUFDNUI7RUFDSixDQUFDOztFQUVEO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJdkIsTUFBTSxDQUFDMEIsZUFBZSxHQUFHLGdCQUFlWCxLQUFLLEVBQUU7SUFDM0MsTUFBTWYsTUFBTSxDQUFDRyxXQUFXLENBQUMsQ0FBQztJQUMxQixJQUFJO01BQ0EsTUFBTUwsVUFBVSxDQUFDaUIsS0FBSyxDQUFDQSxLQUFLLENBQUM7SUFDakMsQ0FBQyxDQUFDLE9BQU9wQixDQUFDLEVBQUU7TUFDUixNQUFNLElBQUlVLG9CQUFPLENBQUNOLFNBQVMsQ0FBQ08sU0FBUyxDQUFDZ0IsY0FBYyxFQUFFdkIsU0FBUyxDQUFDYSxpQkFBaUIsQ0FBQ2pCLENBQUMsQ0FBQyxDQUFDO0lBQ3pGLENBQUMsU0FBUztNQUNOLE1BQU1HLFVBQVUsQ0FBQ3lCLEtBQUssQ0FBQyxDQUFDO0lBQzVCO0VBQ0osQ0FBQzs7RUFFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0l2QixNQUFNLENBQUMyQixhQUFhLEdBQUcsZ0JBQWVDLElBQUksRUFBRSxHQUFHQyxJQUFJLEVBQUU7SUFDakQsTUFBTTdCLE1BQU0sQ0FBQ0csV0FBVyxDQUFDLENBQUM7SUFFMUIsSUFBSTtNQUNBLE1BQU1zQixlQUFlLEdBQUcsTUFBTTNCLFVBQVUsQ0FBQzZCLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFQyxJQUFJLEVBQUUsQ0FBQyxHQUFHQyxJQUFJLENBQUMsQ0FBQztNQUNuRixPQUFPSixlQUFlO0lBQzFCLENBQUMsQ0FBQyxPQUFPOUIsQ0FBQyxFQUFFO01BQ1IsTUFBTSxJQUFJVSxvQkFBTyxDQUFDTixTQUFTLENBQUNPLFNBQVMsQ0FBQ2dCLGNBQWMsRUFBRXZCLFNBQVMsQ0FBQ2EsaUJBQWlCLENBQUNqQixDQUFDLENBQUMsQ0FBQztJQUN6RixDQUFDLFNBQVM7TUFDTixNQUFNRyxVQUFVLENBQUN5QixLQUFLLENBQUMsQ0FBQztJQUM1QjtFQUNKLENBQUM7RUFFRCxPQUFPdkIsTUFBTTtBQUNqQixDQUFDIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -1,15 +1,10 @@
|
|
|
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 _utils = _interopRequireDefault(require("./utils"));
|
|
8
|
-
|
|
9
6
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
10
|
-
|
|
11
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
12
|
-
|
|
7
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
8
|
/*
|
|
14
9
|
* Copyright (C) 2015-present CloudBeat Limited
|
|
15
10
|
*
|
|
@@ -23,24 +18,19 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
23
18
|
* @name email
|
|
24
19
|
* @description Provides methods for working with email via IMAP.
|
|
25
20
|
*/
|
|
26
|
-
const nodemailer = require('nodemailer');
|
|
27
21
|
|
|
22
|
+
const nodemailer = require('nodemailer');
|
|
28
23
|
const imaps = require('imap-simple');
|
|
29
|
-
|
|
30
24
|
const simpleParser = require('mailparser').simpleParser;
|
|
31
|
-
|
|
32
25
|
const errHelper = require('../errors/helper');
|
|
33
|
-
|
|
34
26
|
const AUTH_TIMEOUT = 30000;
|
|
35
|
-
|
|
36
27
|
module.exports = function () {
|
|
37
28
|
var _config;
|
|
38
|
-
|
|
39
29
|
var _smtpConfig;
|
|
40
|
-
|
|
41
30
|
module.isInitialized = function () {
|
|
42
31
|
return _config !== undefined;
|
|
43
32
|
};
|
|
33
|
+
|
|
44
34
|
/**
|
|
45
35
|
* @summary Set email connection details.
|
|
46
36
|
* @function init
|
|
@@ -52,21 +42,13 @@ module.exports = function () {
|
|
|
52
42
|
* @param {Number=} authTimeout - Authentication timeout in milliseconds.
|
|
53
43
|
* @param {Boolean=} enableSNI - Enable sending SNI when establishing the connection. This is required for some mail servers. Default is false.
|
|
54
44
|
*/
|
|
55
|
-
|
|
56
|
-
|
|
57
45
|
module.init = function (user, password, host, port, tls, authTimeout = AUTH_TIMEOUT, enableSNI = undefined) {
|
|
58
46
|
_utils.default.assertArgumentNonEmptyString(user, 'user');
|
|
59
|
-
|
|
60
47
|
_utils.default.assertArgumentNonEmptyString(password, 'password');
|
|
61
|
-
|
|
62
48
|
_utils.default.assertArgumentNonEmptyString(host, 'host');
|
|
63
|
-
|
|
64
49
|
_utils.default.assertArgumentNumberNonNegative(port, 'port');
|
|
65
|
-
|
|
66
50
|
_utils.default.assertArgumentBool(tls, 'tls');
|
|
67
|
-
|
|
68
51
|
_utils.default.assertArgumentNumberNonNegative(authTimeout, 'authTimeout');
|
|
69
|
-
|
|
70
52
|
_config = {
|
|
71
53
|
imap: {
|
|
72
54
|
user: user,
|
|
@@ -83,14 +65,16 @@ module.exports = function () {
|
|
|
83
65
|
host: host,
|
|
84
66
|
port,
|
|
85
67
|
tls
|
|
86
|
-
};
|
|
68
|
+
};
|
|
87
69
|
|
|
70
|
+
// set servername if SNI is enabled or we are using Gmail
|
|
88
71
|
if (enableSNI || host === 'imap.gmail.com') {
|
|
89
72
|
_config.imap.tlsOptions = {
|
|
90
73
|
servername: host
|
|
91
74
|
};
|
|
92
75
|
}
|
|
93
76
|
};
|
|
77
|
+
|
|
94
78
|
/**
|
|
95
79
|
* @summary Retrieves last unseen email.
|
|
96
80
|
* @function getLastEmail
|
|
@@ -123,49 +107,42 @@ module.exports = function () {
|
|
|
123
107
|
* });
|
|
124
108
|
* }
|
|
125
109
|
*/
|
|
126
|
-
|
|
127
|
-
|
|
128
110
|
module.getLastEmail = async function (sinceMinutes, subject, timeout) {
|
|
129
111
|
_utils.default.assertArgumentNumberNonNegative(sinceMinutes, 'sinceMinutes');
|
|
130
|
-
|
|
131
112
|
_utils.default.assertArgumentNumberNonNegative(timeout, 'timeout');
|
|
132
|
-
|
|
133
113
|
var mail;
|
|
134
114
|
var now = new Date().getTime();
|
|
135
115
|
var err;
|
|
136
|
-
|
|
137
116
|
while (!err && !mail && new Date().getTime() - now < timeout) {
|
|
138
117
|
try {
|
|
139
118
|
const connection = await imaps.connect(_config);
|
|
140
|
-
await connection.openBox('INBOX');
|
|
119
|
+
await connection.openBox('INBOX');
|
|
141
120
|
|
|
121
|
+
// fetch unseen emails from the last sinceMinutes
|
|
142
122
|
var startDate = new Date();
|
|
143
123
|
startDate.setTime(Date.now() - sinceMinutes * 60 * 1000);
|
|
144
124
|
startDate = startDate.toISOString();
|
|
145
|
-
var searchCriteria = ['UNSEEN', ['SINCE', startDate]];
|
|
125
|
+
var searchCriteria = ['UNSEEN', ['SINCE', startDate]];
|
|
146
126
|
|
|
127
|
+
// fetch certain headers and stripped down body
|
|
147
128
|
var fetchOptions = {
|
|
148
129
|
bodies: ['HEADER.FIELDS (FROM TO SUBJECT DATE)', 'TEXT'],
|
|
149
130
|
struct: true,
|
|
150
131
|
markSeen: false
|
|
151
132
|
};
|
|
152
133
|
const results = await connection.search(searchCriteria, fetchOptions);
|
|
153
|
-
|
|
154
134
|
for (var result of results) {
|
|
155
135
|
const headerPart = _lodash.default.find(result.parts, {
|
|
156
136
|
'which': fetchOptions.bodies[0]
|
|
157
137
|
});
|
|
158
|
-
|
|
159
138
|
const bodyPart = _lodash.default.find(result.parts, {
|
|
160
139
|
'which': fetchOptions.bodies[1]
|
|
161
140
|
});
|
|
162
|
-
|
|
163
141
|
const id = result.attributes.uid;
|
|
164
142
|
const idHeader = 'Imap-Id: ' + id + '\r\n';
|
|
165
143
|
const simple = await simpleParser(idHeader + bodyPart.body);
|
|
166
144
|
const attachments = [];
|
|
167
145
|
const parts = imaps.getParts(result.attributes.struct);
|
|
168
|
-
|
|
169
146
|
for (const part of parts) {
|
|
170
147
|
if (part.disposition && part.disposition.type.toUpperCase() === 'ATTACHMENT') {
|
|
171
148
|
const partData = await connection.getPartData(result, part);
|
|
@@ -175,11 +152,9 @@ module.exports = function () {
|
|
|
175
152
|
});
|
|
176
153
|
}
|
|
177
154
|
}
|
|
178
|
-
|
|
179
155
|
let body;
|
|
180
156
|
let html;
|
|
181
157
|
let textAsHtml;
|
|
182
|
-
|
|
183
158
|
if (simple.html || simple.text || simple.textAsHtml) {
|
|
184
159
|
// parsed success
|
|
185
160
|
body = bodyPart.text;
|
|
@@ -189,7 +164,6 @@ module.exports = function () {
|
|
|
189
164
|
// don't parsed
|
|
190
165
|
body = bodyPart.body;
|
|
191
166
|
}
|
|
192
|
-
|
|
193
167
|
if (headerPart) {
|
|
194
168
|
if (subject && (subject.constructor.name === 'RegExp' && subject.test(headerPart.body.subject[0]) || subject === headerPart.body.subject[0])) {
|
|
195
169
|
let to = headerPart.body.to ? headerPart.body.to[0] : null;
|
|
@@ -210,15 +184,14 @@ module.exports = function () {
|
|
|
210
184
|
err = e;
|
|
211
185
|
}
|
|
212
186
|
}
|
|
213
|
-
|
|
214
187
|
if (err) {
|
|
215
188
|
throw new _OxygenError.default(errHelper.errorCode.EMAIL_ERROR, err.toString());
|
|
216
189
|
} else if (!mail) {
|
|
217
190
|
throw new _OxygenError.default(errHelper.errorCode.TIMEOUT, "Couldn't get an email within " + timeout + ' ms.');
|
|
218
191
|
}
|
|
219
|
-
|
|
220
192
|
return mail;
|
|
221
193
|
};
|
|
194
|
+
|
|
222
195
|
/**
|
|
223
196
|
* @summary Send email using SMTP.
|
|
224
197
|
* @function send
|
|
@@ -227,11 +200,8 @@ module.exports = function () {
|
|
|
227
200
|
* @param {String} content - Email body as a plain text.
|
|
228
201
|
* @param {String=} html - Optional, Email body as HTML.
|
|
229
202
|
*/
|
|
230
|
-
|
|
231
|
-
|
|
232
203
|
module.send = async function (to, subject, content, html = undefined) {
|
|
233
204
|
let err = undefined;
|
|
234
|
-
|
|
235
205
|
try {
|
|
236
206
|
// Create a SMTP transporter object
|
|
237
207
|
const transporter = nodemailer.createTransport({
|
|
@@ -246,8 +216,9 @@ module.exports = function () {
|
|
|
246
216
|
logger: false,
|
|
247
217
|
transactionLog: false,
|
|
248
218
|
debug: false
|
|
249
|
-
});
|
|
219
|
+
});
|
|
250
220
|
|
|
221
|
+
// Message object
|
|
251
222
|
const message = {
|
|
252
223
|
to: to,
|
|
253
224
|
// Subject of the message
|
|
@@ -261,12 +232,10 @@ module.exports = function () {
|
|
|
261
232
|
} catch (e) {
|
|
262
233
|
err = e;
|
|
263
234
|
}
|
|
264
|
-
|
|
265
235
|
if (err) {
|
|
266
236
|
throw new _OxygenError.default(errHelper.errorCode.EMAIL_ERROR, err.toString());
|
|
267
237
|
}
|
|
268
238
|
};
|
|
269
|
-
|
|
270
239
|
return module;
|
|
271
240
|
};
|
|
272
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1lbWFpbC5qcyJdLCJuYW1lcyI6WyJub2RlbWFpbGVyIiwicmVxdWlyZSIsImltYXBzIiwic2ltcGxlUGFyc2VyIiwiZXJySGVscGVyIiwiQVVUSF9USU1FT1VUIiwibW9kdWxlIiwiZXhwb3J0cyIsIl9jb25maWciLCJfc210cENvbmZpZyIsImlzSW5pdGlhbGl6ZWQiLCJ1bmRlZmluZWQiLCJpbml0IiwidXNlciIsInBhc3N3b3JkIiwiaG9zdCIsInBvcnQiLCJ0bHMiLCJhdXRoVGltZW91dCIsImVuYWJsZVNOSSIsInV0aWxzIiwiYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyIsImFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUiLCJhc3NlcnRBcmd1bWVudEJvb2wiLCJpbWFwIiwidXNlcm5hbWUiLCJ0bHNPcHRpb25zIiwic2VydmVybmFtZSIsImdldExhc3RFbWFpbCIsInNpbmNlTWludXRlcyIsInN1YmplY3QiLCJ0aW1lb3V0IiwibWFpbCIsIm5vdyIsIkRhdGUiLCJnZXRUaW1lIiwiZXJyIiwiY29ubmVjdGlvbiIsImNvbm5lY3QiLCJvcGVuQm94Iiwic3RhcnREYXRlIiwic2V0VGltZSIsInRvSVNPU3RyaW5nIiwic2VhcmNoQ3JpdGVyaWEiLCJmZXRjaE9wdGlvbnMiLCJib2RpZXMiLCJzdHJ1Y3QiLCJtYXJrU2VlbiIsInJlc3VsdHMiLCJzZWFyY2giLCJyZXN1bHQiLCJoZWFkZXJQYXJ0IiwiXyIsImZpbmQiLCJwYXJ0cyIsImJvZHlQYXJ0IiwiaWQiLCJhdHRyaWJ1dGVzIiwidWlkIiwiaWRIZWFkZXIiLCJzaW1wbGUiLCJib2R5IiwiYXR0YWNobWVudHMiLCJnZXRQYXJ0cyIsInBhcnQiLCJkaXNwb3NpdGlvbiIsInR5cGUiLCJ0b1VwcGVyQ2FzZSIsInBhcnREYXRhIiwiZ2V0UGFydERhdGEiLCJwdXNoIiwiZmlsZW5hbWUiLCJwYXJhbXMiLCJkYXRhIiwiaHRtbCIsInRleHRBc0h0bWwiLCJ0ZXh0IiwiY29uc3RydWN0b3IiLCJuYW1lIiwidGVzdCIsInRvIiwiZnJvbSIsImRhdGUiLCJlIiwiT3hFcnJvciIsImVycm9yQ29kZSIsIkVNQUlMX0VSUk9SIiwidG9TdHJpbmciLCJUSU1FT1VUIiwic2VuZCIsImNvbnRlbnQiLCJ0cmFuc3BvcnRlciIsImNyZWF0ZVRyYW5zcG9ydCIsInNlY3VyZSIsImF1dGgiLCJwYXNzIiwic2VuZG1haWwiLCJsb2dnZXIiLCJ0cmFuc2FjdGlvbkxvZyIsImRlYnVnIiwibWVzc2FnZSIsInNlbmRNYWlsIl0sIm1hcHBpbmdzIjoiOzs7O0FBY0E7O0FBQ0E7O0FBQ0E7Ozs7QUFoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUtBLE1BQU1BLFVBQVUsR0FBR0MsT0FBTyxDQUFDLFlBQUQsQ0FBMUI7O0FBQ0EsTUFBTUMsS0FBSyxHQUFHRCxPQUFPLENBQUMsYUFBRCxDQUFyQjs7QUFDQSxNQUFNRSxZQUFZLEdBQUdGLE9BQU8sQ0FBQyxZQUFELENBQVAsQ0FBc0JFLFlBQTNDOztBQUVBLE1BQU1DLFNBQVMsR0FBR0gsT0FBTyxDQUFDLGtCQUFELENBQXpCOztBQUNBLE1BQU1JLFlBQVksR0FBRyxLQUFyQjs7QUFFQUMsTUFBTSxDQUFDQyxPQUFQLEdBQWlCLFlBQVc7QUFDeEIsTUFBSUMsT0FBSjs7QUFDQSxNQUFJQyxXQUFKOztBQUVBSCxFQUFBQSxNQUFNLENBQUNJLGFBQVAsR0FBdUIsWUFBVztBQUM5QixXQUFPRixPQUFPLEtBQUtHLFNBQW5CO0FBQ0gsR0FGRDtBQUlBO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNJTCxFQUFBQSxNQUFNLENBQUNNLElBQVAsR0FBYyxVQUFTQyxJQUFULEVBQWVDLFFBQWYsRUFBeUJDLElBQXpCLEVBQStCQyxJQUEvQixFQUFxQ0MsR0FBckMsRUFBMENDLFdBQVcsR0FBR2IsWUFBeEQs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LypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWUgZW1haWxcclxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIG1ldGhvZHMgZm9yIHdvcmtpbmcgd2l0aCBlbWFpbCB2aWEgSU1BUC5cclxuICovXHJcblxyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XHJcbmNvbnN0IG5vZGVtYWlsZXIgPSByZXF1aXJlKCdub2RlbWFpbGVyJyk7XHJcbmNvbnN0IGltYXBzID0gcmVxdWlyZSgnaW1hcC1zaW1wbGUnKTtcclxuY29uc3Qgc2ltcGxlUGFyc2VyID0gcmVxdWlyZSgnbWFpbHBhcnNlcicpLnNpbXBsZVBhcnNlcjtcclxuXHJcbmNvbnN0IGVyckhlbHBlciA9IHJlcXVpcmUoJy4uL2Vycm9ycy9oZWxwZXInKTtcclxuY29uc3QgQVVUSF9USU1FT1VUID0gMzAwMDA7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIF9jb25maWc7XHJcbiAgICB2YXIgX3NtdHBDb25maWc7XHJcblxyXG4gICAgbW9kdWxlLmlzSW5pdGlhbGl6ZWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gX2NvbmZpZyAhPT0gdW5kZWZpbmVkO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFNldCBlbWFpbCBjb25uZWN0aW9uIGRldGFpbHMuXHJcbiAgICAgKiBAZnVuY3Rpb24gaW5pdFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHVzZXIgLSBVc2VybmFtZSAoZS5nLiAneW91ckBlbWFpbC5hZGRyZXNzJykuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gcGFzc3dvcmQgLSBQYXNzd29yZC5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBob3N0IC0gSG9zdCBuYW1lIChlLmcuICdpbWFwLmdtYWlsLmNvbScpLlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IHBvcnQgLSBQb3J0IG51bWJlciAoZS5nLiA5OTMpLlxyXG4gICAgICogQHBhcmFtIHtCb29sZWFufSB0bHMgLSB0cnVlIHRvIHVzZSBUTFMsIGZhbHNlIG90aGVyd2lzZS5cclxuICAgICAqIEBwYXJhbSB7TnVtYmVyPX0gYXV0aFRpbWVvdXQgLSBBdXRoZW50aWNhdGlvbiB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcy5cclxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbj19IGVuYWJsZVNOSSAtIEVuYWJsZSBzZW5kaW5nIFNOSSB3aGVuIGVzdGFibGlzaGluZyB0aGUgY29ubmVjdGlvbi4gVGhpcyBpcyByZXF1aXJlZCBmb3Igc29tZSBtYWlsIHNlcnZlcnMuIERlZmF1bHQgaXMgZmFsc2UuIFxyXG4gICAgICovXHJcbiAgICBtb2R1bGUuaW5pdCA9IGZ1bmN0aW9uKHVzZXIsIHBhc3N3b3JkLCBob3N0LCBwb3J0LCB0bHMsIGF1dGhUaW1lb3V0ID0gQVVUSF9USU1FT1VULCBlbmFibGVTTkkgPSB1bmRlZmluZWQpIHtcclxuICAgICAgICB1dGlscy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nKHVzZXIsICd1c2VyJyk7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyhwYXNzd29yZCwgJ3Bhc3N3b3JkJyk7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyhob3N0LCAnaG9zdCcpO1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUocG9ydCwgJ3BvcnQnKTtcclxuICAgICAgICB1dGlscy5hc3NlcnRBcmd1bWVudEJvb2wodGxzLCAndGxzJyk7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZShhdXRoVGltZW91dCwgJ2F1dGhUaW1lb3V0Jyk7XHJcblxyXG4gICAgICAgIF9jb25maWcgPSB7XHJcbiAgICAgICAgICAgIGltYXA6IHtcclxuICAgICAgICAgICAgICAgIHVzZXI6IHVzZXIsXHJcbiAgICAgICAgICAgICAgICBwYXNzd29yZDogcGFzc3dvcmQsXHJcbiAgICAgICAgICAgICAgICBob3N0OiBob3N0LFxyXG4gICAgICAgICAgICAgICAgcG9ydDogcG9ydCxcclxuICAgICAgICAgICAgICAgIHRsczogdGxzLFxyXG4gICAgICAgICAgICAgICAgYXV0aFRpbWVvdXQ6IGF1dGhUaW1lb3V0XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIF9zbXRwQ29uZmlnID0ge1xyXG4gICAgICAgICAgICB1c2VybmFtZTogdXNlcixcclxuICAgICAgICAgICAgcGFzc3dvcmQsXHJcbiAgICAgICAgICAgIGhvc3Q6IGhvc3QsXHJcbiAgICAgICAgICAgIHBvcnQsXHJcbiAgICAgICAgICAgIHRscyxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvLyBzZXQgc2VydmVybmFtZSBpZiBTTkkgaXMgZW5hYmxlZCBvciB3ZSBhcmUgdXNpbmcgR21haWxcclxuICAgICAgICBpZiAoZW5hYmxlU05JIHx8IGhvc3QgPT09ICdpbWFwLmdtYWlsLmNvbScpIHtcclxuICAgICAgICAgICAgX2NvbmZpZy5pbWFwLnRsc09wdGlvbnMgPSB7IHNlcnZlcm5hbWU6IGhvc3QgfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgUmV0cmlldmVzIGxhc3QgdW5zZWVuIGVtYWlsLlxyXG4gICAgICogQGZ1bmN0aW9uIGdldExhc3RFbWFpbFxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IHNpbmNlTWludXRlcyAtIFNlYXJjaCBmb3IgZW1haWxzIHJlY2VpdmVkIHNpbmNlIHRoZSBzcGVjaWZpZWQgYW1vdW50IG9mIG1pbnV0ZXMgaW50byBwYXN0LlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd8UmVnZXh9IHN1YmplY3QgLSBSZXR1cm4gZW1haWwgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCBzdWJqZWN0LlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IHRpbWVvdXQgLSBUaW1lb3V0IChpbiBtaWxsaXNlY29uZHMpIGZvciB3YWl0aW5nIGZvciB0aGUgbWVzc2FnZSB0byBhcnJpdmUuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEVtYWlsIGJvZHksIHRleHQsIHRleHRBc0h0bWwsIGF0dGFjaG1lbnRzIGlmIGFueSwgYW5kIFRPLCBGUk9NLCBTVUJKRUNULCBEQVRFIGhlYWRlcnMuXHJcbiAgICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5bamF2YXNjcmlwdF0gVXNhZ2UgZXhhbXBsZTwvY2FwdGlvbj5cclxuICAgICAqIGVtYWlsLmluaXQoJ1tZT1VSX0VNQUlMXUBnbWFpbC5jb20nLCAncGFzc3dvcmQnLCAnaW1hcC5nbWFpbC5jb20nLCA5OTMsIHRydWUsIDMwMDApO1xyXG4gICAgICogdmFyIG1haWwgPSBlbWFpbC5nZXRMYXN0RW1haWwoNjAsICdlbWFpbCBzdWJqZWN0JywgNTAwMCk7XHJcbiAgICAgKiBsb2cuaW5mbyhtYWlsKTtcclxuICAgICAqIFxyXG4gICAgICogaWYoci5hdHRhY2htZW50cyAmJiByLmF0dGFjaG1lbnRzLmxlbmd0aCA+IDApe1xyXG4gICAgICogXHRjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XHJcbiAgICAgKiBcdHIuYXR0YWNobWVudHMubWFwKChhdHRhY2htZW50KSA9PiB7XHJcbiAgICAgKiBcdFx0bGV0IGZpbGVEZXNjcmlwdG9yO1xyXG4gICAgICogXHRcdHRyeXtcclxuICAgICAqIFx0XHRcdGZpbGVEZXNjcmlwdG9yID0gZnMub3BlblN5bmMoYXR0YWNobWVudC5maWxlbmFtZSwgJ3cnKTtcclxuICAgICAqIFx0XHR9IGNhdGNoKGUpIHtcclxuICAgICAqIFx0XHRcdHRocm93ICdjb3VsZCBub3Qgb3BlbiBmaWxlOiAnICsgZTtcclxuICAgICAqIFx0XHR9XHJcbiAgICAgKiBcdFx0XHJcbiAgICAgKiBcdFx0dHJ5e1xyXG4gICAgICogXHRcdFx0ZnMud3JpdGVGaWxlU3luYyhmaWxlRGVzY3JpcHRvciwgYXR0YWNobWVudC5kYXRhKTtcclxuICAgICAqIFx0XHR9IGNhdGNoKGUpIHtcclxuICAgICAqIFx0XHRcdHRocm93ICdlcnJvciB3cml0aW5nIGZpbGU6ICcgKyBlO1xyXG4gICAgICogXHRcdH1cclxuICAgICAqIFx0XHRcclxuICAgICAqIFx0XHRmcy5jbG9zZVN5bmMoZmlsZURlc2NyaXB0b3IpO1xyXG4gICAgICogXHR9KTtcclxuICAgICAqIH1cclxuICAgICAqL1xyXG4gICAgbW9kdWxlLmdldExhc3RFbWFpbCA9IGFzeW5jIGZ1bmN0aW9uKHNpbmNlTWludXRlcywgc3ViamVjdCwgdGltZW91dCkge1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUoc2luY2VNaW51dGVzLCAnc2luY2VNaW51dGVzJyk7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSh0aW1lb3V0LCAndGltZW91dCcpO1xyXG5cclxuICAgICAgICB2YXIgbWFpbDtcclxuICAgICAgICB2YXIgbm93ID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcclxuICAgICAgICB2YXIgZXJyO1xyXG5cclxuICAgICAgICB3aGlsZSAoIWVyciAmJiAhbWFpbCAmJiAoKG5ldyBEYXRlKCkpLmdldFRpbWUoKSAtIG5vdykgPCB0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb25uZWN0aW9uID0gYXdhaXQgaW1hcHMuY29ubmVjdChfY29uZmlnKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb24ub3BlbkJveCgnSU5CT1gnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBmZXRjaCB1bnNlZW4gZW1haWxzIGZyb20gdGhlIGxhc3Qgc2luY2VNaW51dGVzXHJcbiAgICAgICAgICAgICAgICB2YXIgc3RhcnREYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZS5zZXRUaW1lKERhdGUubm93KCkgLSAoc2luY2VNaW51dGVzICogNjAgKiAxMDAwKSk7XHJcbiAgICAgICAgICAgICAgICBzdGFydERhdGUgPSBzdGFydERhdGUudG9JU09TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIHZhciBzZWFyY2hDcml0ZXJpYSA9IFsnVU5TRUVOJywgWydTSU5DRScsIHN0YXJ0RGF0ZV1dO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGZldGNoIGNlcnRhaW4gaGVhZGVycyBhbmQgc3RyaXBwZWQgZG93biBib2R5XHJcbiAgICAgICAgICAgICAgICB2YXIgZmV0Y2hPcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGJvZGllczogWydIRUFERVIuRklFTERTIChGUk9NIFRPIFNVQkpFQ1QgREFURSknLCAnVEVYVCddLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0cnVjdDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBtYXJrU2VlbjogZmFsc2VcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IGNvbm5lY3Rpb24uc2VhcmNoKHNlYXJjaENyaXRlcmlhLCBmZXRjaE9wdGlvbnMpO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHJlc3VsdCBvZiByZXN1bHRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGVhZGVyUGFydCA9IF8uZmluZChyZXN1bHQucGFydHMsIHsgJ3doaWNoJzogZmV0Y2hPcHRpb25zLmJvZGllc1swXSB9KTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5UGFydCA9IF8uZmluZChyZXN1bHQucGFydHMsIHsgJ3doaWNoJzogZmV0Y2hPcHRpb25zLmJvZGllc1sxXSB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWQgPSByZXN1bHQuYXR0cmlidXRlcy51aWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWRIZWFkZXIgPSAnSW1hcC1JZDogJytpZCsnXFxyXFxuJztcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaW1wbGUgPSBhd2FpdCBzaW1wbGVQYXJzZXIoaWRIZWFkZXIrYm9keVBhcnQuYm9keSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGltYXBzLmdldFBhcnRzKHJlc3VsdC5hdHRyaWJ1dGVzLnN0cnVjdCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFydC5kaXNwb3NpdGlvbiAmJiBwYXJ0LmRpc3Bvc2l0aW9uLnR5cGUudG9VcHBlckNhc2UoKSA9PT0gJ0FUVEFDSE1FTlQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJ0RGF0YSA9IGF3YWl0IGNvbm5lY3Rpb24uZ2V0UGFydERhdGEocmVzdWx0LCBwYXJ0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lOiBwYXJ0LmRpc3Bvc2l0aW9uLnBhcmFtcy5maWxlbmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBwYXJ0RGF0YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBodG1sO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0ZXh0QXNIdG1sO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzaW1wbGUuaHRtbCB8fCBzaW1wbGUudGV4dCB8fCBzaW1wbGUudGV4dEFzSHRtbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBwYXJzZWQgc3VjY2Vzc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5ID0gYm9keVBhcnQudGV4dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCA9IHNpbXBsZS5odG1sO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QXNIdG1sID0gc2ltcGxlLnRleHRBc0h0bWw7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3QgcGFyc2VkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkgPSBib2R5UGFydC5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhlYWRlclBhcnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViamVjdCAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN1YmplY3QuY29uc3RydWN0b3IubmFtZSA9PT0gJ1JlZ0V4cCcgJiYgc3ViamVjdC50ZXN0KGhlYWRlclBhcnQuYm9keS5zdWJqZWN0WzBdKSkgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3ViamVjdCA9PT0gaGVhZGVyUGFydC5ib2R5LnN1YmplY3RbMF0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRvID0gaGVhZGVyUGFydC5ib2R5LnRvID8gaGVhZGVyUGFydC5ib2R5LnRvWzBdIDogbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlsID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb206IGhlYWRlclBhcnQuYm9keS5mcm9tWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvOiB0byxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJqZWN0OiBoZWFkZXJQYXJ0LmJvZHkuc3ViamVjdFswXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlOiBoZWFkZXJQYXJ0LmJvZHkuZGF0ZVswXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5OiBib2R5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzOiBhdHRhY2htZW50cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QXNIdG1sOiB0ZXh0QXNIdG1sLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWw6IGh0bWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGVyciA9IGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5FTUFJTF9FUlJPUiwgZXJyLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIW1haWwpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5USU1FT1VULCBcIkNvdWxkbid0IGdldCBhbiBlbWFpbCB3aXRoaW4gXCIgKyB0aW1lb3V0ICsgJyBtcy4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBtYWlsO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFNlbmQgZW1haWwgdXNpbmcgU01UUC5cclxuICAgICAqIEBmdW5jdGlvbiBzZW5kXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xBcnJheX0gdG8gLSBSZWNlaXZlcidzIGVtYWlsIGFkZHJlc3MuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gc3ViamVjdCAtIEVtYWlsIHN1YmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gY29udGVudCAtIEVtYWlsIGJvZHkgYXMgYSBwbGFpbiB0ZXh0LlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBodG1sIC0gT3B0aW9uYWwsIEVtYWlsIGJvZHkgYXMgSFRNTC5cclxuICAgICAqL1xyXG4gICAgbW9kdWxlLnNlbmQgPSBhc3luYyBmdW5jdGlvbih0bywgc3ViamVjdCwgY29udGVudCwgaHRtbCA9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGxldCBlcnIgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgU01UUCB0cmFuc3BvcnRlciBvYmplY3RcclxuICAgICAgICAgICAgY29uc3QgdHJhbnNwb3J0ZXIgPSBub2RlbWFpbGVyLmNyZWF0ZVRyYW5zcG9ydCh7XHJcbiAgICAgICAgICAgICAgICBob3N0OiBfc210cENvbmZpZy5ob3N0LFxyXG4gICAgICAgICAgICAgICAgcG9ydDogX3NtdHBDb25maWcucG9ydCxcclxuICAgICAgICAgICAgICAgIHNlY3VyZTogX3NtdHBDb25maWcudGxzLFxyXG4gICAgICAgICAgICAgICAgYXV0aDoge1xyXG4gICAgICAgICAgICAgICAgICAgIHVzZXI6IF9zbXRwQ29uZmlnLnVzZXJuYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhc3M6IF9zbXRwQ29uZmlnLnBhc3N3b3JkLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNlbmRtYWlsOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGxvZ2dlcjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbkxvZzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBkZWJ1ZzogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gTWVzc2FnZSBvYmplY3RcclxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHtcclxuICAgICAgICAgICAgICAgIHRvOiB0byxcclxuICAgICAgICAgICAgICAgIC8vIFN1YmplY3Qgb2YgdGhlIG1lc3NhZ2VcclxuICAgICAgICAgICAgICAgIHN1YmplY3Q6IHN1YmplY3QgfHwgJycsXHJcbiAgICAgICAgICAgICAgICAvLyBwbGFpbnRleHQgYm9keVxyXG4gICAgICAgICAgICAgICAgdGV4dDogY29udGVudCxcclxuICAgICAgICAgICAgICAgIC8vIEhUTUwgYm9keVxyXG4gICAgICAgICAgICAgICAgaHRtbDogaHRtbCxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGF3YWl0IHRyYW5zcG9ydGVyLnNlbmRNYWlsKG1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBlcnIgPSBlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuRU1BSUxfRVJST1IsIGVyci50b1N0cmluZygpKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBtb2R1bGU7XHJcbn07XHJcbiJdfQ==
|
|
241
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfT3h5Z2VuRXJyb3IiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl91dGlscyIsIl9sb2Rhc2giLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJub2RlbWFpbGVyIiwiaW1hcHMiLCJzaW1wbGVQYXJzZXIiLCJlcnJIZWxwZXIiLCJBVVRIX1RJTUVPVVQiLCJtb2R1bGUiLCJleHBvcnRzIiwiX2NvbmZpZyIsIl9zbXRwQ29uZmlnIiwiaXNJbml0aWFsaXplZCIsInVuZGVmaW5lZCIsImluaXQiLCJ1c2VyIiwicGFzc3dvcmQiLCJob3N0IiwicG9ydCIsInRscyIsImF1dGhUaW1lb3V0IiwiZW5hYmxlU05JIiwidXRpbHMiLCJhc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nIiwiYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSIsImFzc2VydEFyZ3VtZW50Qm9vbCIsImltYXAiLCJ1c2VybmFtZSIsInRsc09wdGlvbnMiLCJzZXJ2ZXJuYW1lIiwiZ2V0TGFzdEVtYWlsIiwic2luY2VNaW51dGVzIiwic3ViamVjdCIsInRpbWVvdXQiLCJtYWlsIiwibm93IiwiRGF0ZSIsImdldFRpbWUiLCJlcnIiLCJjb25uZWN0aW9uIiwiY29ubmVjdCIsIm9wZW5Cb3giLCJzdGFydERhdGUiLCJzZXRUaW1lIiwidG9JU09TdHJpbmciLCJzZWFyY2hDcml0ZXJpYSIsImZldGNoT3B0aW9ucyIsImJvZGllcyIsInN0cnVjdCIsIm1hcmtTZWVuIiwicmVzdWx0cyIsInNlYXJjaCIsInJlc3VsdCIsImhlYWRlclBhcnQiLCJfIiwiZmluZCIsInBhcnRzIiwiYm9keVBhcnQiLCJpZCIsImF0dHJpYnV0ZXMiLCJ1aWQiLCJpZEhlYWRlciIsInNpbXBsZSIsImJvZHkiLCJhdHRhY2htZW50cyIsImdldFBhcnRzIiwicGFydCIsImRpc3Bvc2l0aW9uIiwidHlwZSIsInRvVXBwZXJDYXNlIiwicGFydERhdGEiLCJnZXRQYXJ0RGF0YSIsInB1c2giLCJmaWxlbmFtZSIsInBhcmFtcyIsImRhdGEiLCJodG1sIiwidGV4dEFzSHRtbCIsInRleHQiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJ0ZXN0IiwidG8iLCJmcm9tIiwiZGF0ZSIsIk94RXJyb3IiLCJlcnJvckNvZGUiLCJFTUFJTF9FUlJPUiIsInRvU3RyaW5nIiwiVElNRU9VVCIsInNlbmQiLCJjb250ZW50IiwidHJhbnNwb3J0ZXIiLCJjcmVhdGVUcmFuc3BvcnQiLCJzZWN1cmUiLCJhdXRoIiwicGFzcyIsInNlbmRtYWlsIiwibG9nZ2VyIiwidHJhbnNhY3Rpb25Mb2ciLCJkZWJ1ZyIsIm1lc3NhZ2UiLCJzZW5kTWFpbCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1lbWFpbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBlbWFpbFxyXG4gKiBAZGVzY3JpcHRpb24gUHJvdmlkZXMgbWV0aG9kcyBmb3Igd29ya2luZyB3aXRoIGVtYWlsIHZpYSBJTUFQLlxyXG4gKi9cclxuXHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcclxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcclxuY29uc3Qgbm9kZW1haWxlciA9IHJlcXVpcmUoJ25vZGVtYWlsZXInKTtcclxuY29uc3QgaW1hcHMgPSByZXF1aXJlKCdpbWFwLXNpbXBsZScpO1xyXG5jb25zdCBzaW1wbGVQYXJzZXIgPSByZXF1aXJlKCdtYWlscGFyc2VyJykuc2ltcGxlUGFyc2VyO1xyXG5cclxuY29uc3QgZXJySGVscGVyID0gcmVxdWlyZSgnLi4vZXJyb3JzL2hlbHBlcicpO1xyXG5jb25zdCBBVVRIX1RJTUVPVVQgPSAzMDAwMDtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgX2NvbmZpZztcclxuICAgIHZhciBfc210cENvbmZpZztcclxuXHJcbiAgICBtb2R1bGUuaXNJbml0aWFsaXplZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBfY29uZmlnICE9PSB1bmRlZmluZWQ7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgU2V0IGVtYWlsIGNvbm5lY3Rpb24gZGV0YWlscy5cclxuICAgICAqIEBmdW5jdGlvbiBpbml0XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdXNlciAtIFVzZXJuYW1lIChlLmcuICd5b3VyQGVtYWlsLmFkZHJlc3MnKS5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBwYXNzd29yZCAtIFBhc3N3b3JkLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGhvc3QgLSBIb3N0IG5hbWUgKGUuZy4gJ2ltYXAuZ21haWwuY29tJykuXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gcG9ydCAtIFBvcnQgbnVtYmVyIChlLmcuIDk5MykuXHJcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IHRscyAtIHRydWUgdG8gdXNlIFRMUywgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXI9fSBhdXRoVGltZW91dCAtIEF1dGhlbnRpY2F0aW9uIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLlxyXG4gICAgICogQHBhcmFtIHtCb29sZWFuPX0gZW5hYmxlU05JIC0gRW5hYmxlIHNlbmRpbmcgU05JIHdoZW4gZXN0YWJsaXNoaW5nIHRoZSBjb25uZWN0aW9uLiBUaGlzIGlzIHJlcXVpcmVkIGZvciBzb21lIG1haWwgc2VydmVycy4gRGVmYXVsdCBpcyBmYWxzZS4gXHJcbiAgICAgKi9cclxuICAgIG1vZHVsZS5pbml0ID0gZnVuY3Rpb24odXNlciwgcGFzc3dvcmQsIGhvc3QsIHBvcnQsIHRscywgYXV0aFRpbWVvdXQgPSBBVVRIX1RJTUVPVVQsIGVuYWJsZVNOSSA9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmcodXNlciwgJ3VzZXInKTtcclxuICAgICAgICB1dGlscy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nKHBhc3N3b3JkLCAncGFzc3dvcmQnKTtcclxuICAgICAgICB1dGlscy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nKGhvc3QsICdob3N0Jyk7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZShwb3J0LCAncG9ydCcpO1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50Qm9vbCh0bHMsICd0bHMnKTtcclxuICAgICAgICB1dGlscy5hc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlKGF1dGhUaW1lb3V0LCAnYXV0aFRpbWVvdXQnKTtcclxuXHJcbiAgICAgICAgX2NvbmZpZyA9IHtcclxuICAgICAgICAgICAgaW1hcDoge1xyXG4gICAgICAgICAgICAgICAgdXNlcjogdXNlcixcclxuICAgICAgICAgICAgICAgIHBhc3N3b3JkOiBwYXNzd29yZCxcclxuICAgICAgICAgICAgICAgIGhvc3Q6IGhvc3QsXHJcbiAgICAgICAgICAgICAgICBwb3J0OiBwb3J0LFxyXG4gICAgICAgICAgICAgICAgdGxzOiB0bHMsXHJcbiAgICAgICAgICAgICAgICBhdXRoVGltZW91dDogYXV0aFRpbWVvdXRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgX3NtdHBDb25maWcgPSB7XHJcbiAgICAgICAgICAgIHVzZXJuYW1lOiB1c2VyLFxyXG4gICAgICAgICAgICBwYXNzd29yZCxcclxuICAgICAgICAgICAgaG9zdDogaG9zdCxcclxuICAgICAgICAgICAgcG9ydCxcclxuICAgICAgICAgICAgdGxzLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIHNldCBzZXJ2ZXJuYW1lIGlmIFNOSSBpcyBlbmFibGVkIG9yIHdlIGFyZSB1c2luZyBHbWFpbFxyXG4gICAgICAgIGlmIChlbmFibGVTTkkgfHwgaG9zdCA9PT0gJ2ltYXAuZ21haWwuY29tJykge1xyXG4gICAgICAgICAgICBfY29uZmlnLmltYXAudGxzT3B0aW9ucyA9IHsgc2VydmVybmFtZTogaG9zdCB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBSZXRyaWV2ZXMgbGFzdCB1bnNlZW4gZW1haWwuXHJcbiAgICAgKiBAZnVuY3Rpb24gZ2V0TGFzdEVtYWlsXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gc2luY2VNaW51dGVzIC0gU2VhcmNoIGZvciBlbWFpbHMgcmVjZWl2ZWQgc2luY2UgdGhlIHNwZWNpZmllZCBhbW91bnQgb2YgbWludXRlcyBpbnRvIHBhc3QuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xSZWdleH0gc3ViamVjdCAtIFJldHVybiBlbWFpbCBtYXRjaGluZyB0aGUgc3BlY2lmaWVkIHN1YmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gdGltZW91dCAtIFRpbWVvdXQgKGluIG1pbGxpc2Vjb25kcykgZm9yIHdhaXRpbmcgZm9yIHRoZSBtZXNzYWdlIHRvIGFycml2ZS5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gRW1haWwgYm9keSwgdGV4dCwgdGV4dEFzSHRtbCwgYXR0YWNobWVudHMgaWYgYW55LCBhbmQgVE8sIEZST00sIFNVQkpFQ1QsIERBVEUgaGVhZGVycy5cclxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPltqYXZhc2NyaXB0XSBVc2FnZSBleGFtcGxlPC9jYXB0aW9uPlxyXG4gICAgICogZW1haWwuaW5pdCgnW1lPVVJfRU1BSUxdQGdtYWlsLmNvbScsICdwYXNzd29yZCcsICdpbWFwLmdtYWlsLmNvbScsIDk5MywgdHJ1ZSwgMzAwMCk7XHJcbiAgICAgKiB2YXIgbWFpbCA9IGVtYWlsLmdldExhc3RFbWFpbCg2MCwgJ2VtYWlsIHN1YmplY3QnLCA1MDAwKTtcclxuICAgICAqIGxvZy5pbmZvKG1haWwpO1xyXG4gICAgICogXHJcbiAgICAgKiBpZihyLmF0dGFjaG1lbnRzICYmIHIuYXR0YWNobWVudHMubGVuZ3RoID4gMCl7XHJcbiAgICAgKiBcdGNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcclxuICAgICAqIFx0ci5hdHRhY2htZW50cy5tYXAoKGF0dGFjaG1lbnQpID0+IHtcclxuICAgICAqIFx0XHRsZXQgZmlsZURlc2NyaXB0b3I7XHJcbiAgICAgKiBcdFx0dHJ5e1xyXG4gICAgICogXHRcdFx0ZmlsZURlc2NyaXB0b3IgPSBmcy5vcGVuU3luYyhhdHRhY2htZW50LmZpbGVuYW1lLCAndycpO1xyXG4gICAgICogXHRcdH0gY2F0Y2goZSkge1xyXG4gICAgICogXHRcdFx0dGhyb3cgJ2NvdWxkIG5vdCBvcGVuIGZpbGU6ICcgKyBlO1xyXG4gICAgICogXHRcdH1cclxuICAgICAqIFx0XHRcclxuICAgICAqIFx0XHR0cnl7XHJcbiAgICAgKiBcdFx0XHRmcy53cml0ZUZpbGVTeW5jKGZpbGVEZXNjcmlwdG9yLCBhdHRhY2htZW50LmRhdGEpO1xyXG4gICAgICogXHRcdH0gY2F0Y2goZSkge1xyXG4gICAgICogXHRcdFx0dGhyb3cgJ2Vycm9yIHdyaXRpbmcgZmlsZTogJyArIGU7XHJcbiAgICAgKiBcdFx0fVxyXG4gICAgICogXHRcdFxyXG4gICAgICogXHRcdGZzLmNsb3NlU3luYyhmaWxlRGVzY3JpcHRvcik7XHJcbiAgICAgKiBcdH0pO1xyXG4gICAgICogfVxyXG4gICAgICovXHJcbiAgICBtb2R1bGUuZ2V0TGFzdEVtYWlsID0gYXN5bmMgZnVuY3Rpb24oc2luY2VNaW51dGVzLCBzdWJqZWN0LCB0aW1lb3V0KSB7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZShzaW5jZU1pbnV0ZXMsICdzaW5jZU1pbnV0ZXMnKTtcclxuICAgICAgICB1dGlscy5hc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlKHRpbWVvdXQsICd0aW1lb3V0Jyk7XHJcblxyXG4gICAgICAgIHZhciBtYWlsO1xyXG4gICAgICAgIHZhciBub3cgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xyXG4gICAgICAgIHZhciBlcnI7XHJcblxyXG4gICAgICAgIHdoaWxlICghZXJyICYmICFtYWlsICYmICgobmV3IERhdGUoKSkuZ2V0VGltZSgpIC0gbm93KSA8IHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBhd2FpdCBpbWFwcy5jb25uZWN0KF9jb25maWcpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29ubmVjdGlvbi5vcGVuQm94KCdJTkJPWCcpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGZldGNoIHVuc2VlbiBlbWFpbHMgZnJvbSB0aGUgbGFzdCBzaW5jZU1pbnV0ZXNcclxuICAgICAgICAgICAgICAgIHZhciBzdGFydERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgc3RhcnREYXRlLnNldFRpbWUoRGF0ZS5ub3coKSAtIChzaW5jZU1pbnV0ZXMgKiA2MCAqIDEwMDApKTtcclxuICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZSA9IHN0YXJ0RGF0ZS50b0lTT1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNlYXJjaENyaXRlcmlhID0gWydVTlNFRU4nLCBbJ1NJTkNFJywgc3RhcnREYXRlXV07XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gZmV0Y2ggY2VydGFpbiBoZWFkZXJzIGFuZCBzdHJpcHBlZCBkb3duIGJvZHlcclxuICAgICAgICAgICAgICAgIHZhciBmZXRjaE9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9kaWVzOiBbJ0hFQURFUi5GSUVMRFMgKEZST00gVE8gU1VCSkVDVCBEQVRFKScsICdURVhUJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgc3RydWN0OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIG1hcmtTZWVuOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgY29ubmVjdGlvbi5zZWFyY2goc2VhcmNoQ3JpdGVyaWEsIGZldGNoT3B0aW9ucyk7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgcmVzdWx0IG9mIHJlc3VsdHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXJQYXJ0ID0gXy5maW5kKHJlc3VsdC5wYXJ0cywgeyAnd2hpY2gnOiBmZXRjaE9wdGlvbnMuYm9kaWVzWzBdIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvZHlQYXJ0ID0gXy5maW5kKHJlc3VsdC5wYXJ0cywgeyAnd2hpY2gnOiBmZXRjaE9wdGlvbnMuYm9kaWVzWzFdIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHJlc3VsdC5hdHRyaWJ1dGVzLnVpZDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZEhlYWRlciA9ICdJbWFwLUlkOiAnK2lkKydcXHJcXG4nO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpbXBsZSA9IGF3YWl0IHNpbXBsZVBhcnNlcihpZEhlYWRlcitib2R5UGFydC5ib2R5KTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhdHRhY2htZW50cyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gaW1hcHMuZ2V0UGFydHMocmVzdWx0LmF0dHJpYnV0ZXMuc3RydWN0KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0LmRpc3Bvc2l0aW9uICYmIHBhcnQuZGlzcG9zaXRpb24udHlwZS50b1VwcGVyQ2FzZSgpID09PSAnQVRUQUNITUVOVCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnREYXRhID0gYXdhaXQgY29ubmVjdGlvbi5nZXRQYXJ0RGF0YShyZXN1bHQsIHBhcnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWU6IHBhcnQuZGlzcG9zaXRpb24ucGFyYW1zLmZpbGVuYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHBhcnREYXRhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGh0bWw7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRleHRBc0h0bWw7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpbXBsZS5odG1sIHx8IHNpbXBsZS50ZXh0IHx8IHNpbXBsZS50ZXh0QXNIdG1sKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBhcnNlZCBzdWNjZXNzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkgPSBib2R5UGFydC50ZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sID0gc2ltcGxlLmh0bWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBc0h0bWwgPSBzaW1wbGUudGV4dEFzSHRtbDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCBwYXJzZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keSA9IGJvZHlQYXJ0LmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaGVhZGVyUGFydCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJqZWN0ICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3ViamVjdC5jb25zdHJ1Y3Rvci5uYW1lID09PSAnUmVnRXhwJyAmJiBzdWJqZWN0LnRlc3QoaGVhZGVyUGFydC5ib2R5LnN1YmplY3RbMF0pKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdWJqZWN0ID09PSBoZWFkZXJQYXJ0LmJvZHkuc3ViamVjdFswXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdG8gPSBoZWFkZXJQYXJ0LmJvZHkudG8gPyBoZWFkZXJQYXJ0LmJvZHkudG9bMF0gOiBudWxsO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haWwgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbTogaGVhZGVyUGFydC5ib2R5LmZyb21bMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG86IHRvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmplY3Q6IGhlYWRlclBhcnQuYm9keS5zdWJqZWN0WzBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGU6IGhlYWRlclBhcnQuYm9keS5kYXRlWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IGJvZHksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudHM6IGF0dGFjaG1lbnRzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBc0h0bWw6IHRleHRBc0h0bWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbDogaHRtbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgZXJyID0gZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkVNQUlMX0VSUk9SLCBlcnIudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICghbWFpbCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlRJTUVPVVQsIFwiQ291bGRuJ3QgZ2V0IGFuIGVtYWlsIHdpdGhpbiBcIiArIHRpbWVvdXQgKyAnIG1zLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG1haWw7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgU2VuZCBlbWFpbCB1c2luZyBTTVRQLlxyXG4gICAgICogQGZ1bmN0aW9uIHNlbmRcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fSB0byAtIFJlY2VpdmVyJ3MgZW1haWwgYWRkcmVzcy5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzdWJqZWN0IC0gRW1haWwgc3ViamVjdC5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb250ZW50IC0gRW1haWwgYm9keSBhcyBhIHBsYWluIHRleHQuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGh0bWwgLSBPcHRpb25hbCwgRW1haWwgYm9keSBhcyBIVE1MLlxyXG4gICAgICovXHJcbiAgICBtb2R1bGUuc2VuZCA9IGFzeW5jIGZ1bmN0aW9uKHRvLCBzdWJqZWN0LCBjb250ZW50LCBodG1sID0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgbGV0IGVyciA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvLyBDcmVhdGUgYSBTTVRQIHRyYW5zcG9ydGVyIG9iamVjdFxyXG4gICAgICAgICAgICBjb25zdCB0cmFuc3BvcnRlciA9IG5vZGVtYWlsZXIuY3JlYXRlVHJhbnNwb3J0KHtcclxuICAgICAgICAgICAgICAgIGhvc3Q6IF9zbXRwQ29uZmlnLmhvc3QsXHJcbiAgICAgICAgICAgICAgICBwb3J0OiBfc210cENvbmZpZy5wb3J0LFxyXG4gICAgICAgICAgICAgICAgc2VjdXJlOiBfc210cENvbmZpZy50bHMsXHJcbiAgICAgICAgICAgICAgICBhdXRoOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXNlcjogX3NtdHBDb25maWcudXNlcm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFzczogX3NtdHBDb25maWcucGFzc3dvcmQsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc2VuZG1haWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbG9nZ2VyOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uTG9nOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGRlYnVnOiBmYWxzZSxcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyBNZXNzYWdlIG9iamVjdFxyXG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0ge1xyXG4gICAgICAgICAgICAgICAgdG86IHRvLFxyXG4gICAgICAgICAgICAgICAgLy8gU3ViamVjdCBvZiB0aGUgbWVzc2FnZVxyXG4gICAgICAgICAgICAgICAgc3ViamVjdDogc3ViamVjdCB8fCAnJyxcclxuICAgICAgICAgICAgICAgIC8vIHBsYWludGV4dCBib2R5XHJcbiAgICAgICAgICAgICAgICB0ZXh0OiBjb250ZW50LFxyXG4gICAgICAgICAgICAgICAgLy8gSFRNTCBib2R5XHJcbiAgICAgICAgICAgICAgICBodG1sOiBodG1sLFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgYXdhaXQgdHJhbnNwb3J0ZXIuc2VuZE1haWwobWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGVyciA9IGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5FTUFJTF9FUlJPUiwgZXJyLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIG1vZHVsZTtcclxufTtcclxuIl0sIm1hcHBpbmdzIjoiOzs7QUFjQSxJQUFBQSxZQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxNQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFBdUIsU0FBQUQsdUJBQUFJLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FB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QyxDQUFDO0lBQ3RFLENBQUMsTUFBTSxJQUFJLENBQUN0RCxJQUFJLEVBQUU7TUFDZCxNQUFNLElBQUltRCxvQkFBTyxDQUFDL0UsU0FBUyxDQUFDZ0YsU0FBUyxDQUFDRyxPQUFPLEVBQUUsK0JBQStCLEdBQUd4RCxPQUFPLEdBQUcsTUFBTSxDQUFDO0lBQ3RHO0lBRUEsT0FBT0MsSUFBSTtFQUNmLENBQUM7O0VBRUQ7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJMUIsTUFBTSxDQUFDa0YsSUFBSSxHQUFHLGdCQUFlUixFQUFFLEVBQUVsRCxPQUFPLEVBQUUyRCxPQUFPLEVBQUVmLElBQUksR0FBRy9ELFNBQVMsRUFBRTtJQUNqRSxJQUFJeUIsR0FBRyxHQUFHekIsU0FBUztJQUNuQixJQUFJO01BQ0E7TUFDQSxNQUFNK0UsV0FBVyxHQUFHekYsVUFBVSxDQUFDMEYsZUFBZSxDQUFDO1FBQzNDNUUsSUFBSSxFQUFFTixXQUFXLENBQUNNLElBQUk7UUFDdEJDLElBQUksRUFBRVAsV0FBVyxDQUFDTyxJQUFJO1FBQ3RCNEUsTUFBTSxFQUFFbkYsV0FBVyxDQUFDUSxHQUFHO1FBQ3ZCNEUsSUFBSSxFQUFFO1VBQ0ZoRixJQUFJLEVBQUVKLFdBQVcsQ0FBQ2dCLFFBQVE7VUFDMUJxRSxJQUFJLEVBQUVyRixXQUFXLENBQUNLO1FBQ3RCLENBQUM7UUFDRGlGLFFBQVEsRUFBRSxLQUFLO1FBQ2ZDLE1BQU0sRUFBRSxLQUFLO1FBQ2JDLGNBQWMsRUFBRSxLQUFLO1FBQ3JCQyxLQUFLLEVBQUU7TUFDWCxDQUFDLENBQUM7O01BRUY7TUFDQSxNQUFNQyxPQUFPLEdBQUc7UUFDWm5CLEVBQUUsRUFBRUEsRUFBRTtRQUNOO1FBQ0FsRCxPQUFPLEVBQUVBLE9BQU8sSUFBSSxFQUFFO1FBQ3RCO1FBQ0E4QyxJQUFJLEVBQUVhLE9BQU87UUFDYjtRQUNBZixJQUFJLEVBQUVBO01BQ1YsQ0FBQztNQUVELE1BQU1nQixXQUFXLENBQUNVLFFBQVEsQ0FBQ0QsT0FBTyxDQUFDO0lBQ3ZDLENBQUMsQ0FDRCxPQUFPckcsQ0FBQyxFQUFFO01BQ05zQyxHQUFHLEdBQUd0QyxDQUFDO0lBQ1g7SUFDQSxJQUFJc0MsR0FBRyxFQUFFO01BQ0wsTUFBTSxJQUFJK0Msb0JBQU8sQ0FBQy9FLFNBQVMsQ0FBQ2dGLFNBQVMsQ0FBQ0MsV0FBVyxFQUFFakQsR0FBRyxDQUFDa0QsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUN0RTtFQUNKLENBQUM7RUFFRCxPQUFPaEYsTUFBTTtBQUNqQixDQUFDIiwiaWdub3JlTGlzdCI6W119
|