oxygen-cli 1.25.0 → 1.26.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 +6 -0
- package/build/core/OxygenCore.js +266 -37
- package/build/core/OxygenEvents.js +11 -1
- package/build/core/OxygenModule.js +14 -1
- package/build/core/OxygenService.js +12 -1
- package/build/core/OxygenSubModule.js +10 -1
- package/build/core/WebDriverModule.js +30 -1
- package/build/core/utils.js +17 -1
- package/build/errors/HookError.js +7 -1
- package/build/errors/ModuleError.js +7 -1
- package/build/errors/ModuleUnavailableError.js +3 -1
- package/build/errors/OxygenError.js +33 -1
- package/build/errors/ScriptNotFound.js +7 -1
- package/build/errors/helper.js +77 -45
- package/build/index.js +18 -6
- package/build/lib/cli-util.js +90 -28
- package/build/lib/cli.js +23 -1
- package/build/lib/debugger.js +144 -1
- package/build/lib/img-merge.js +15 -1
- package/build/lib/launcher.js +28 -1
- package/build/lib/moduleRequire.js +4 -1
- package/build/lib/param-manager.js +28 -1
- package/build/lib/param-reader-csv.js +15 -1
- package/build/lib/param-reader-excel.js +14 -1
- package/build/lib/param-reader-json.js +10 -1
- package/build/lib/util.js +58 -3
- package/build/model/case-result.js +4 -2
- package/build/model/failure.js +2 -1
- package/build/model/status.js +2 -1
- package/build/model/step-result.js +2 -1
- package/build/model/suite-result.js +2 -1
- package/build/model/test-result.js +2 -1
- package/build/model/testcase.js +2 -1
- package/build/model/testsuite.js +2 -1
- package/build/ox_modules/index.js +33 -13
- package/build/ox_modules/module-assert.js +24 -8
- package/build/ox_modules/module-date.js +8 -3
- package/build/ox_modules/module-db.js +28 -7
- package/build/ox_modules/module-email.js +36 -10
- package/build/ox_modules/module-eyes.js +46 -5
- package/build/ox_modules/module-http.js +102 -41
- package/build/ox_modules/module-log.js +22 -5
- package/build/ox_modules/module-mailinator.js +32 -10
- package/build/ox_modules/module-mob/commands/alertAccept.js +2 -1
- package/build/ox_modules/module-mob/commands/alertDismiss.js +2 -1
- package/build/ox_modules/module-mob/commands/assertAlert.js +6 -1
- package/build/ox_modules/module-mob/commands/assertText.js +3 -1
- package/build/ox_modules/module-mob/commands/assertTitle.js +4 -1
- package/build/ox_modules/module-mob/commands/assertValue.js +15 -9
- package/build/ox_modules/module-mob/commands/back.js +2 -1
- package/build/ox_modules/module-mob/commands/clear.js +4 -1
- package/build/ox_modules/module-mob/commands/click.js +4 -3
- package/build/ox_modules/module-mob/commands/clickHidden.js +9 -3
- package/build/ox_modules/module-mob/commands/clickLong.js +2 -1
- package/build/ox_modules/module-mob/commands/clickMultipleTimes.js +4 -1
- package/build/ox_modules/module-mob/commands/closeApp.js +2 -1
- package/build/ox_modules/module-mob/commands/debug.js +2 -2
- package/build/ox_modules/module-mob/commands/dragAndDrop.js +2 -1
- package/build/ox_modules/module-mob/commands/enableNetwork.js +12 -4
- package/build/ox_modules/module-mob/commands/execute.js +2 -1
- package/build/ox_modules/module-mob/commands/findElement.js +3 -1
- package/build/ox_modules/module-mob/commands/findElements.js +4 -1
- package/build/ox_modules/module-mob/commands/getAlertText.js +2 -1
- package/build/ox_modules/module-mob/commands/getAppiumLogs.js +2 -1
- package/build/ox_modules/module-mob/commands/getBrowserLogs.js +10 -1
- package/build/ox_modules/module-mob/commands/getCurrentActivity.js +2 -1
- package/build/ox_modules/module-mob/commands/getCurrentPackage.js +2 -1
- package/build/ox_modules/module-mob/commands/getDeviceLogs.js +9 -1
- package/build/ox_modules/module-mob/commands/getDeviceTime.js +2 -1
- package/build/ox_modules/module-mob/commands/getLocation.js +2 -1
- package/build/ox_modules/module-mob/commands/getSource.js +2 -1
- package/build/ox_modules/module-mob/commands/getText.js +4 -1
- package/build/ox_modules/module-mob/commands/getTitle.js +2 -1
- package/build/ox_modules/module-mob/commands/getUrl.js +2 -1
- package/build/ox_modules/module-mob/commands/getValue.js +9 -5
- package/build/ox_modules/module-mob/commands/getWindowHandles.js +2 -1
- package/build/ox_modules/module-mob/commands/hideKeyboard.js +2 -1
- package/build/ox_modules/module-mob/commands/index.js +94 -19
- package/build/ox_modules/module-mob/commands/installApp.js +2 -1
- package/build/ox_modules/module-mob/commands/isAppInstalled.js +2 -1
- package/build/ox_modules/module-mob/commands/isCheckable.js +2 -1
- package/build/ox_modules/module-mob/commands/isChecked.js +2 -1
- package/build/ox_modules/module-mob/commands/isClickable.js +2 -1
- package/build/ox_modules/module-mob/commands/isExist.js +3 -1
- package/build/ox_modules/module-mob/commands/isSelected.js +2 -1
- package/build/ox_modules/module-mob/commands/isVisible.js +3 -1
- package/build/ox_modules/module-mob/commands/isWebViewContext.js +2 -1
- package/build/ox_modules/module-mob/commands/launchApp.js +2 -1
- package/build/ox_modules/module-mob/commands/longPressKeyCode.js +2 -1
- package/build/ox_modules/module-mob/commands/open.js +3 -1
- package/build/ox_modules/module-mob/commands/pause.js +2 -1
- package/build/ox_modules/module-mob/commands/removeApp.js +2 -1
- package/build/ox_modules/module-mob/commands/resetApp.js +2 -1
- package/build/ox_modules/module-mob/commands/scrollIntoElement.js +6 -1
- package/build/ox_modules/module-mob/commands/scrollIntoView.js +2 -1
- package/build/ox_modules/module-mob/commands/select.js +4 -1
- package/build/ox_modules/module-mob/commands/selectFrame.js +4 -1
- package/build/ox_modules/module-mob/commands/selectWindow.js +26 -5
- package/build/ox_modules/module-mob/commands/sendKeys.js +9 -6
- package/build/ox_modules/module-mob/commands/setContext.js +2 -1
- package/build/ox_modules/module-mob/commands/setNativeContext.js +2 -1
- package/build/ox_modules/module-mob/commands/setTimeout.js +2 -1
- package/build/ox_modules/module-mob/commands/setWebViewContext.js +6 -3
- package/build/ox_modules/module-mob/commands/shake.js +2 -1
- package/build/ox_modules/module-mob/commands/smsClickLink.js +2 -1
- package/build/ox_modules/module-mob/commands/smsGetText.js +6 -3
- package/build/ox_modules/module-mob/commands/swipe.js +2 -1
- package/build/ox_modules/module-mob/commands/swipeElement.js +2 -1
- package/build/ox_modules/module-mob/commands/swipeScreen.js +2 -1
- package/build/ox_modules/module-mob/commands/takeScreenshot.js +2 -1
- package/build/ox_modules/module-mob/commands/tap.js +2 -1
- package/build/ox_modules/module-mob/commands/type.js +7 -3
- package/build/ox_modules/module-mob/commands/unlockPattern.js +10 -9
- package/build/ox_modules/module-mob/commands/waitForExist.js +2 -1
- package/build/ox_modules/module-mob/commands/waitForInteractable.js +3 -1
- package/build/ox_modules/module-mob/commands/waitForVisible.js +2 -1
- package/build/ox_modules/module-mob.js +139 -67
- package/build/ox_modules/module-pdf.js +62 -23
- package/build/ox_modules/module-proxy.js +68 -8
- package/build/ox_modules/module-serial.js +32 -7
- package/build/ox_modules/module-shell.js +27 -8
- package/build/ox_modules/module-soap.js +47 -14
- package/build/ox_modules/module-twilio.js +53 -10
- package/build/ox_modules/module-utils.js +51 -16
- package/build/ox_modules/module-web/commands/alertAccept.js +2 -1
- package/build/ox_modules/module-web/commands/alertDismiss.js +2 -1
- package/build/ox_modules/module-web/commands/assertAlert.js +6 -1
- package/build/ox_modules/module-web/commands/assertExist.js +2 -1
- package/build/ox_modules/module-web/commands/assertSelectedLabel.js +4 -1
- package/build/ox_modules/module-web/commands/assertSelectedValue.js +3 -1
- package/build/ox_modules/module-web/commands/assertText.js +3 -1
- package/build/ox_modules/module-web/commands/assertTextNotPresent.js +6 -1
- package/build/ox_modules/module-web/commands/assertTextPresent.js +6 -1
- package/build/ox_modules/module-web/commands/assertTitle.js +3 -1
- package/build/ox_modules/module-web/commands/assertValue.js +3 -1
- package/build/ox_modules/module-web/commands/back.js +2 -1
- package/build/ox_modules/module-web/commands/clear.js +5 -1
- package/build/ox_modules/module-web/commands/click.js +13 -4
- package/build/ox_modules/module-web/commands/clickHidden.js +7 -2
- package/build/ox_modules/module-web/commands/closeWindow.js +2 -1
- package/build/ox_modules/module-web/commands/debug.js +2 -2
- package/build/ox_modules/module-web/commands/deleteCookies.js +2 -1
- package/build/ox_modules/module-web/commands/deselect.js +2 -1
- package/build/ox_modules/module-web/commands/doubleClick.js +9 -3
- package/build/ox_modules/module-web/commands/dragAndDrop.js +2 -1
- package/build/ox_modules/module-web/commands/execute.js +2 -1
- package/build/ox_modules/module-web/commands/fileBrowse.js +10 -4
- package/build/ox_modules/module-web/commands/findElement.js +3 -1
- package/build/ox_modules/module-web/commands/findElements.js +4 -1
- package/build/ox_modules/module-web/commands/fullscreenWindow.js +2 -1
- package/build/ox_modules/module-web/commands/getAlertText.js +2 -1
- package/build/ox_modules/module-web/commands/getAttribute.js +4 -1
- package/build/ox_modules/module-web/commands/getBrowserLogs.js +3 -1
- package/build/ox_modules/module-web/commands/getCookies.js +2 -1
- package/build/ox_modules/module-web/commands/getCssValue.js +4 -1
- package/build/ox_modules/module-web/commands/getElementCount.js +2 -1
- package/build/ox_modules/module-web/commands/getHTML.js +2 -1
- package/build/ox_modules/module-web/commands/getSource.js +2 -1
- package/build/ox_modules/module-web/commands/getText.js +4 -1
- package/build/ox_modules/module-web/commands/getTitle.js +2 -1
- package/build/ox_modules/module-web/commands/getUrl.js +2 -1
- package/build/ox_modules/module-web/commands/getValue.js +5 -1
- package/build/ox_modules/module-web/commands/getWindowHandles.js +2 -1
- package/build/ox_modules/module-web/commands/getWindowSize.js +2 -1
- package/build/ox_modules/module-web/commands/getXMLPageSource.js +5 -1
- package/build/ox_modules/module-web/commands/index.js +100 -19
- package/build/ox_modules/module-web/commands/isAlertPresent.js +2 -1
- package/build/ox_modules/module-web/commands/isChecked.js +2 -1
- package/build/ox_modules/module-web/commands/isExist.js +3 -1
- package/build/ox_modules/module-web/commands/isInteractable.js +2 -1
- package/build/ox_modules/module-web/commands/isSelected.js +2 -1
- package/build/ox_modules/module-web/commands/isVisible.js +3 -1
- package/build/ox_modules/module-web/commands/makeVisible.js +10 -2
- package/build/ox_modules/module-web/commands/maximizeWindow.js +2 -1
- package/build/ox_modules/module-web/commands/minimizeWindow.js +2 -1
- package/build/ox_modules/module-web/commands/newWindow.js +2 -1
- package/build/ox_modules/module-web/commands/open.js +4 -1
- package/build/ox_modules/module-web/commands/pause.js +2 -1
- package/build/ox_modules/module-web/commands/point.js +2 -1
- package/build/ox_modules/module-web/commands/pointJS.js +8 -2
- package/build/ox_modules/module-web/commands/refresh.js +2 -1
- package/build/ox_modules/module-web/commands/rightClick.js +8 -3
- package/build/ox_modules/module-web/commands/rightClickActions.js +2 -1
- package/build/ox_modules/module-web/commands/scrollToElement.js +2 -1
- package/build/ox_modules/module-web/commands/select.js +5 -1
- package/build/ox_modules/module-web/commands/selectFrame.js +3 -1
- package/build/ox_modules/module-web/commands/selectWindow.js +26 -5
- package/build/ox_modules/module-web/commands/sendKeys.js +6 -3
- package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +2 -2
- package/build/ox_modules/module-web/commands/setTimeout.js +2 -1
- package/build/ox_modules/module-web/commands/setWindowSize.js +2 -1
- package/build/ox_modules/module-web/commands/takeScreenshot.js +5 -3
- package/build/ox_modules/module-web/commands/type.js +5 -1
- package/build/ox_modules/module-web/commands/waitForAngular.js +11 -6
- package/build/ox_modules/module-web/commands/waitForExist.js +2 -1
- package/build/ox_modules/module-web/commands/waitForInteractable.js +2 -1
- package/build/ox_modules/module-web/commands/waitForNotExist.js +8 -1
- package/build/ox_modules/module-web/commands/waitForNotText.js +3 -1
- package/build/ox_modules/module-web/commands/waitForNotValue.js +3 -1
- package/build/ox_modules/module-web/commands/waitForText.js +3 -1
- package/build/ox_modules/module-web/commands/waitForValue.js +3 -1
- package/build/ox_modules/module-web/commands/waitForVisible.js +2 -1
- package/build/ox_modules/module-web/commands/waitForWindow.js +21 -4
- package/build/ox_modules/module-web.js +179 -77
- package/build/ox_modules/module-win/commands/assertText.js +3 -1
- package/build/ox_modules/module-win/commands/assertTitle.js +4 -1
- package/build/ox_modules/module-win/commands/assertValue.js +15 -9
- package/build/ox_modules/module-win/commands/back.js +2 -1
- package/build/ox_modules/module-win/commands/clear.js +4 -1
- package/build/ox_modules/module-win/commands/click.js +2 -1
- package/build/ox_modules/module-win/commands/clickLong.js +2 -1
- package/build/ox_modules/module-win/commands/clickMultipleTimes.js +4 -1
- package/build/ox_modules/module-win/commands/findElement.js +3 -1
- package/build/ox_modules/module-win/commands/findElements.js +4 -1
- package/build/ox_modules/module-win/commands/getAppiumLogs.js +2 -1
- package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +2 -1
- package/build/ox_modules/module-win/commands/getLocation.js +2 -1
- package/build/ox_modules/module-win/commands/getSource.js +2 -1
- package/build/ox_modules/module-win/commands/getText.js +4 -1
- package/build/ox_modules/module-win/commands/getValue.js +9 -5
- package/build/ox_modules/module-win/commands/getWindowHandles.js +2 -1
- package/build/ox_modules/module-win/commands/index.js +43 -5
- package/build/ox_modules/module-win/commands/isCheckable.js +2 -1
- package/build/ox_modules/module-win/commands/isChecked.js +2 -1
- package/build/ox_modules/module-win/commands/isClickable.js +2 -1
- package/build/ox_modules/module-win/commands/isExist.js +3 -1
- package/build/ox_modules/module-win/commands/isSelected.js +2 -1
- package/build/ox_modules/module-win/commands/isVisible.js +3 -1
- package/build/ox_modules/module-win/commands/open.js +2 -1
- package/build/ox_modules/module-win/commands/pause.js +2 -1
- package/build/ox_modules/module-win/commands/rightClick.js +2 -1
- package/build/ox_modules/module-win/commands/selectWindow.js +15 -1
- package/build/ox_modules/module-win/commands/sendKeys.js +4 -1
- package/build/ox_modules/module-win/commands/setTimeout.js +2 -1
- package/build/ox_modules/module-win/commands/takeScreenshot.js +2 -1
- package/build/ox_modules/module-win/commands/tap.js +2 -1
- package/build/ox_modules/module-win/commands/type.js +4 -1
- package/build/ox_modules/module-win/commands/waitForExist.js +2 -1
- package/build/ox_modules/module-win/commands/waitForInteractable.js +4 -1
- package/build/ox_modules/module-win/commands/waitForVisible.js +2 -1
- package/build/ox_modules/module-win.js +87 -48
- package/build/ox_modules/utils.js +76 -22
- package/build/ox_reporters/reporter-excel.js +58 -1
- package/build/ox_reporters/reporter-html.js +28 -1
- package/build/ox_reporters/reporter-json.js +14 -1
- package/build/ox_reporters/reporter-junit.js +24 -1
- package/build/ox_reporters/reporter-pdf.js +19 -1
- package/build/ox_reporters/reporter-xml.js +17 -1
- package/build/ox_services/service-devtools/submodule-network.js +91 -4
- package/build/ox_services/service-devtools.js +23 -1
- package/build/reporter/FileReporterBase.js +44 -5
- package/build/reporter/ReportAggregator.js +65 -1
- package/build/reporter/ReporterBase.js +6 -1
- package/build/runners/WorkerProcess.js +99 -1
- package/build/runners/cucumber/CucumberEventListener.js +29 -4
- package/build/runners/cucumber/CucumberReporter.js +56 -1
- package/build/runners/cucumber/CucumberWorker.js +66 -1
- package/build/runners/cucumber/index.js +30 -1
- package/build/runners/cucumber/worker.js +18 -1
- package/build/runners/index.js +6 -1
- package/build/runners/oxygen/OxygenWorker.js +60 -3
- package/build/runners/oxygen/index.js +178 -17
- package/build/runners/oxygen/worker.js +25 -2
- package/package.json +1 -1
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
require("source-map-support/register");
|
|
4
|
+
|
|
4
5
|
var _logger = require("../../lib/logger");
|
|
6
|
+
|
|
5
7
|
var _OxygenWorker = _interopRequireDefault(require("./OxygenWorker"));
|
|
8
|
+
|
|
6
9
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
+
|
|
7
11
|
const oxutil = require('../../lib/util');
|
|
12
|
+
|
|
8
13
|
const errorHelper = require('../../errors/helper');
|
|
14
|
+
|
|
9
15
|
const reporter = {
|
|
10
16
|
onSuiteStart: function (...args) {
|
|
11
17
|
emitReporterEvent('onSuiteStart', args);
|
|
@@ -55,6 +61,7 @@ const logger = {
|
|
|
55
61
|
if (!src) {
|
|
56
62
|
src = _logger.DEFAULT_LOGGER_ISSUER;
|
|
57
63
|
}
|
|
64
|
+
|
|
58
65
|
const ts = oxutil.getTimeStamp();
|
|
59
66
|
processSend({
|
|
60
67
|
time: ts,
|
|
@@ -76,10 +83,13 @@ const logger = {
|
|
|
76
83
|
});
|
|
77
84
|
}
|
|
78
85
|
};
|
|
86
|
+
|
|
79
87
|
let _worker = new _OxygenWorker.default(reporter, logger);
|
|
88
|
+
|
|
80
89
|
function stringify(obj) {
|
|
81
90
|
return typeof obj === 'string' || obj instanceof String ? obj : JSON.stringify(obj, null, 2);
|
|
82
91
|
}
|
|
92
|
+
|
|
83
93
|
oxutil.hookLogs(logger);
|
|
84
94
|
process.on('unhandledRejection', async (err, origin) => {
|
|
85
95
|
logger.error(err.message, _logger.ISSUERS.USER);
|
|
@@ -104,6 +114,7 @@ process.on('message', async function (msg) {
|
|
|
104
114
|
if (!msg.type) {
|
|
105
115
|
return;
|
|
106
116
|
}
|
|
117
|
+
|
|
107
118
|
if ((msg.type === 'invoke' || msg.type === 'invoke:hook') && msg.method) {
|
|
108
119
|
const {
|
|
109
120
|
callId,
|
|
@@ -126,6 +137,7 @@ process.on('message', async function (msg) {
|
|
|
126
137
|
subscribe(msg.event);
|
|
127
138
|
}
|
|
128
139
|
});
|
|
140
|
+
|
|
129
141
|
async function dispose(status = null) {
|
|
130
142
|
if (_worker) {
|
|
131
143
|
try {
|
|
@@ -133,6 +145,7 @@ async function dispose(status = null) {
|
|
|
133
145
|
} catch (e) {}
|
|
134
146
|
}
|
|
135
147
|
}
|
|
148
|
+
|
|
136
149
|
function processSend(msg) {
|
|
137
150
|
try {
|
|
138
151
|
process.connected && process.send({
|
|
@@ -141,8 +154,10 @@ function processSend(msg) {
|
|
|
141
154
|
});
|
|
142
155
|
} catch (e) {}
|
|
143
156
|
}
|
|
157
|
+
|
|
144
158
|
async function invoke(method, args) {
|
|
145
159
|
let retval, error;
|
|
160
|
+
|
|
146
161
|
if (_worker && _worker[method] && typeof _worker[method] === 'function') {
|
|
147
162
|
try {
|
|
148
163
|
retval = await _worker[method].apply(_worker, args || []);
|
|
@@ -153,32 +168,39 @@ async function invoke(method, args) {
|
|
|
153
168
|
} else {
|
|
154
169
|
error = new Error(`Method "${method}" does not exist`);
|
|
155
170
|
}
|
|
171
|
+
|
|
156
172
|
if (error) {
|
|
157
173
|
error = errorHelper.getFailureFromError(error);
|
|
158
174
|
}
|
|
175
|
+
|
|
159
176
|
return {
|
|
160
177
|
retval,
|
|
161
178
|
error
|
|
162
179
|
};
|
|
163
180
|
}
|
|
181
|
+
|
|
164
182
|
async function invokeTestHook(method, args) {
|
|
165
183
|
let retval = undefined,
|
|
166
|
-
|
|
184
|
+
error = null;
|
|
185
|
+
|
|
167
186
|
try {
|
|
168
187
|
retval = await _worker.callTestHook(method, args);
|
|
169
188
|
} catch (e) {
|
|
170
189
|
error = e.message;
|
|
171
190
|
}
|
|
191
|
+
|
|
172
192
|
return {
|
|
173
193
|
retval,
|
|
174
194
|
error
|
|
175
195
|
};
|
|
176
196
|
}
|
|
197
|
+
|
|
177
198
|
async function subscribe(eventName) {
|
|
178
199
|
if (_worker && _worker.on) {
|
|
179
200
|
_worker.on(eventName, (...args) => emitWorkerEvent(eventName, args));
|
|
180
201
|
}
|
|
181
202
|
}
|
|
203
|
+
|
|
182
204
|
function emitWorkerEvent(eventName, eventArgs) {
|
|
183
205
|
processSend({
|
|
184
206
|
event: 'event',
|
|
@@ -186,6 +208,7 @@ function emitWorkerEvent(eventName, eventArgs) {
|
|
|
186
208
|
args: eventArgs
|
|
187
209
|
});
|
|
188
210
|
}
|
|
211
|
+
|
|
189
212
|
function emitReporterEvent(eventName, eventArgs) {
|
|
190
213
|
processSend({
|
|
191
214
|
event: 'reporter',
|
|
@@ -193,4 +216,4 @@ function emitReporterEvent(eventName, eventArgs) {
|
|
|
193
216
|
args: eventArgs
|
|
194
217
|
});
|
|
195
218
|
}
|
|
196
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJveHV0aWwiLCJyZXF1aXJlIiwiZXJyb3JIZWxwZXIiLCJyZXBvcnRlciIsIm9uU3VpdGVTdGFydCIsImFyZ3MiLCJlbWl0UmVwb3J0ZXJFdmVudCIsIm9uU3VpdGVFbmQiLCJvbkNhc2VTdGFydCIsIm9uQ2FzZUVuZCIsIm9uU3RlcFN0YXJ0Iiwib25TdGVwRW5kIiwib25SdW5uZXJFbmQiLCJnbG9iYWwiLCJicm93c2VyIiwibG9nZ2VyIiwiaW5mbyIsIm1lc3NhZ2UiLCJzcmMiLCJERUZBVUxUX0xPR0dFUl9JU1NVRVIiLCJ0cyIsImdldFRpbWVTdGFtcCIsInByb2Nlc3NTZW5kIiwidGltZSIsImV2ZW50IiwibGV2ZWwiLCJMRVZFTFMiLCJJTkZPIiwibXNnIiwic3RyaW5naWZ5IiwiZGVidWciLCJERUJVRyIsImVycm9yIiwiZXJyIiwiRVJST1IiLCJ3YXJuIiwiV0FSTiIsIl93b3JrZXIiLCJPeHlnZW5Xb3JrZXIiLCJvYmoiLCJTdHJpbmciLCJKU09OIiwiaG9va0xvZ3MiLCJwcm9jZXNzIiwib24iLCJvcmlnaW4iLCJJU1NVRVJTIiwiVVNFUiIsImNvbnNvbGUiLCJsb2ciLCJlcnJNZXNzYWdlIiwiZGlzcG9zZSIsInR5cGUiLCJtZXRob2QiLCJjYWxsSWQiLCJpbnZva2VGdW5jIiwiaW52b2tlVGVzdEhvb2siLCJpbnZva2UiLCJyZXR2YWwiLCJzdWJzY3JpYmUiLCJzdGF0dXMiLCJlIiwiY29ubmVjdGVkIiwic2VuZCIsImFwcGx5IiwiRXJyb3IiLCJnZXRGYWlsdXJlRnJvbUVycm9yIiwidW5kZWZpbmVkIiwiY2FsbFRlc3RIb29rIiwiZXZlbnROYW1lIiwiZW1pdFdvcmtlckV2ZW50IiwiZXZlbnRBcmdzIiwibmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydW5uZXJzL294eWdlbi93b3JrZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKlxyXG4gKiBCb2lsZXJwbGF0ZSBjb2RlIGZvciB1c2VyIHNjcmlwdHMuXHJcbiAqIFByb3ZpZGVzIGV2ZXJ5dGhpbmcgbmVjZXNzYXJ5IGZvciBleGVjdXRpbmcgSlMgdGVzdCBzY3JpcHRzLlxyXG4gKi9cclxuaW1wb3J0IHsgTEVWRUxTLCBERUZBVUxUX0xPR0dFUl9JU1NVRVIsIElTU1VFUlMgfSBmcm9tICcuLi8uLi9saWIvbG9nZ2VyJztcclxuaW1wb3J0IE94eWdlbldvcmtlciBmcm9tICcuL094eWdlbldvcmtlcic7XHJcbmNvbnN0IG94dXRpbCA9IHJlcXVpcmUoJy4uLy4uL2xpYi91dGlsJyk7XHJcbmNvbnN0IGVycm9ySGVscGVyID0gcmVxdWlyZSgnLi4vLi4vZXJyb3JzL2hlbHBlcicpO1xyXG5cclxuY29uc3QgcmVwb3J0ZXIgPSB7XHJcbiAgICBvblN1aXRlU3RhcnQ6IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcclxuICAgICAgICBlbWl0UmVwb3J0ZXJFdmVudCgnb25TdWl0ZVN0YXJ0JywgYXJncyk7XHJcbiAgICB9LFxyXG4gICAgb25TdWl0ZUVuZDogZnVuY3Rpb24oLi4uYXJncykge1xyXG4gICAgICAgIGVtaXRSZXBvcnRlckV2ZW50KCdvblN1aXRlRW5kJywgYXJncyk7XHJcbiAgICB9LFxyXG4gICAgb25DYXNlU3RhcnQ6IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcclxuICAgICAgICBlbWl0UmVwb3J0ZXJFdmVudCgnb25DYXNlU3RhcnQnLCBhcmdzKTtcclxuICAgIH0sXHJcbiAgICBvbkNhc2VFbmQ6IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcclxuICAgICAgICBlbWl0UmVwb3J0ZXJFdmVudCgnb25DYXNlRW5kJywgYXJncyk7XHJcbiAgICB9LFxyXG4gICAgb25TdGVwU3RhcnQ6IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcclxuICAgICAgICBlbWl0UmVwb3J0ZXJFdmVudCgnb25TdGVwU3RhcnQnLCBhcmdzKTtcclxuICAgIH0sXHJcbiAgICBvblN0ZXBFbmQ6IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcclxuICAgICAgICBlbWl0UmVwb3J0ZXJFdmVudCgnb25TdGVwRW5kJywgYXJncyk7XHJcbiAgICB9LFxyXG4gICAgb25SdW5uZXJFbmQ6IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcclxuICAgICAgICBlbWl0UmVwb3J0ZXJFdmVudCgnb25SdW5uZXJFbmQnLCBhcmdzKTtcclxuICAgIH1cclxufTtcclxuXHJcbi8vIG1vY2t1cCBnbG9iYmFsLmJyb3dzZXIgb2JqZWN0IGZvciBpbnRlcm5hbCBXRElPIGZ1bmN0aW9ucyB0byB3b3JrIHByb3Blcmx5XHJcbmdsb2JhbC5icm93c2VyID0ge307XHJcblxyXG5jb25zdCBsb2dnZXIgPSB7XHJcbiAgICBpbmZvOiBmdW5jdGlvbihtZXNzYWdlLCBzcmMgPSBERUZBVUxUX0xPR0dFUl9JU1NVRVIpIHtcclxuICAgICAgICBjb25zdCB0cyA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICBwcm9jZXNzU2VuZCh7IHRpbWU6IHRzLCBldmVudDogJ2xvZycsIGxldmVsOiBMRVZFTFMuSU5GTywgbXNnOiBzdHJpbmdpZnkobWVzc2FnZSksIHNyYyB9KTtcclxuICAgIH0sXHJcbiAgICBkZWJ1ZzogZnVuY3Rpb24obWVzc2FnZSwgc3JjID0gREVGQVVMVF9MT0dHRVJfSVNTVUVSKSB7XHJcbiAgICAgICAgY29uc3QgdHMgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcbiAgICAgICAgcHJvY2Vzc1NlbmQoeyB0aW1lOiB0cywgZXZlbnQ6ICdsb2cnLCBsZXZlbDogTEVWRUxTLkRFQlVHLCBtc2c6IHN0cmluZ2lmeShtZXNzYWdlKSwgc3JjIH0pO1xyXG4gICAgfSxcclxuICAgIGVycm9yOiBmdW5jdGlvbihtZXNzYWdlLCBzcmMgPSBERUZBVUxUX0xPR0dFUl9JU1NVRVIsIGVyciA9IG51bGwpIHtcclxuICAgICAgICBpZiAoIXNyYykge1xyXG4gICAgICAgICAgICBzcmMgPSBERUZBVUxUX0xPR0dFUl9JU1NVRVI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRzID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgIHByb2Nlc3NTZW5kKHsgdGltZTogdHMsIGV2ZW50OiAnbG9nJywgbGV2ZWw6IExFVkVMUy5FUlJPUiwgbXNnOiBzdHJpbmdpZnkobWVzc2FnZSksIHNyYywgZXJyOiBlcnIgfSk7XHJcbiAgICB9LFxyXG4gICAgd2FybjogZnVuY3Rpb24obWVzc2FnZSwgc3JjID0gREVGQVVMVF9MT0dHRVJfSVNTVUVSKSB7XHJcbiAgICAgICAgY29uc3QgdHMgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcbiAgICAgICAgcHJvY2Vzc1NlbmQoeyB0aW1lOiB0cywgZXZlbnQ6ICdsb2cnLCBsZXZlbDogTEVWRUxTLldBUk4sIG1zZzogc3RyaW5naWZ5KG1lc3NhZ2UpLCBzcmMgfSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5sZXQgX3dvcmtlciA9IG5ldyBPeHlnZW5Xb3JrZXIocmVwb3J0ZXIsIGxvZ2dlcik7XHJcblxyXG5mdW5jdGlvbiBzdHJpbmdpZnkob2JqKSB7XHJcbiAgICByZXR1cm4gKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnIHx8IG9iaiBpbnN0YW5jZW9mIFN0cmluZyA/IG9iaiA6IEpTT04uc3RyaW5naWZ5KG9iaiwgbnVsbCwgMikpO1xyXG59XHJcblxyXG5veHV0aWwuaG9va0xvZ3MobG9nZ2VyKTtcclxuLy8gcmVkaXJlY3Qgc3Rkb3V0IGFuZCBzdGRlcnIgdG8gdGhlIGxvZ2dlclxyXG4vL3Byb2Nlc3Muc3Rkb3V0LndyaXRlID0gbG9nZ2VyLmRlYnVnO1xyXG4vL3Byb2Nlc3Muc3RkZXJyLndyaXRlID0gbG9nZ2VyLmVycm9yO1xyXG5cclxucHJvY2Vzcy5vbigndW5oYW5kbGVkUmVqZWN0aW9uJywgYXN5bmMoZXJyLCBvcmlnaW4pID0+IHtcclxuICAgIGxvZ2dlci5lcnJvcihlcnIubWVzc2FnZSwgSVNTVUVSUy5VU0VSKTtcclxuICAgIGNvbnNvbGUubG9nKCd1bmhhbmRsZWRSZWplY3Rpb24nLCBlcnIpO1xyXG4gICAgcHJvY2Vzc1NlbmQoe1xyXG4gICAgICAgIGV2ZW50OiAnd29ya2VyRXJyb3InLFxyXG4gICAgICAgIGVyck1lc3NhZ2U6IGVyci5tZXNzYWdlLFxyXG4gICAgfSk7XHJcbn0pO1xyXG5cclxucHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCBhc3luYyhlcnIsIG9yaWdpbikgPT4ge1xyXG4gICAgbG9nZ2VyLmVycm9yKGVyci5tZXNzYWdlLCBJU1NVRVJTLlVTRVIpO1xyXG4gICAgY29uc29sZS5sb2coJ3VuY2F1Z2h0RXhjZXB0aW9uJywgZXJyKTtcclxuICAgIHByb2Nlc3NTZW5kKHtcclxuICAgICAgICBldmVudDogJ3dvcmtlckVycm9yJyxcclxuICAgICAgICBlcnJNZXNzYWdlOiBlcnIubWVzc2FnZSxcclxuICAgIH0pO1xyXG59KTtcclxuXHJcbnByb2Nlc3Mub24oJ1NJR0lOVCcsIGFzeW5jIGZ1bmN0aW9uKCkge1xyXG4gICAgYXdhaXQgZGlzcG9zZSgnQ0FOQ0VMRUQnKTtcclxufSk7XHJcblxyXG5wcm9jZXNzLm9uKCdtZXNzYWdlJywgYXN5bmMgZnVuY3Rpb24gKG1zZykge1xyXG4gICAgaWYgKCFtc2cudHlwZSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICgobXNnLnR5cGUgPT09ICdpbnZva2UnIHx8IG1zZy50eXBlID09PSAnaW52b2tlOmhvb2snKSAmJiBtc2cubWV0aG9kKSB7XHJcbiAgICAgICAgY29uc3QgeyBjYWxsSWQsIG1ldGhvZCwgYXJncyB9ID0gbXNnO1xyXG4gICAgICAgIGNvbnN0IGludm9rZUZ1bmMgPSBtc2cudHlwZSA9PT0gJ2ludm9rZTpob29rJyA/IGludm9rZVRlc3RIb29rIDogaW52b2tlO1xyXG4gICAgICAgIGNvbnN0IHsgcmV0dmFsLCBlcnJvciB9ID0gYXdhaXQgaW52b2tlRnVuYyhtZXRob2QsIGFyZ3MpO1xyXG4gICAgICAgIHByb2Nlc3NTZW5kKHtcclxuICAgICAgICAgICAgZXZlbnQ6ICdpbnZva2U6cmVzdWx0JyxcclxuICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QsXHJcbiAgICAgICAgICAgIGNhbGxJZDogY2FsbElkLFxyXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IsXHJcbiAgICAgICAgICAgIHJldHZhbDogcmV0dmFsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChtc2cudHlwZSA9PT0gJ3N1YnNjcmliZScpIHtcclxuICAgICAgICBzdWJzY3JpYmUobXNnLmV2ZW50KTtcclxuICAgIH1cclxufSk7XHJcblxyXG5hc3luYyBmdW5jdGlvbiBkaXNwb3NlKHN0YXR1cz0gbnVsbCkge1xyXG4gICAgaWYgKF93b3JrZXIpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCBfd29ya2VyLmRpc3Bvc2Uoc3RhdHVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBwcm9jZXNzU2VuZChtc2cpIHtcclxuICAgIC8vIHdyYXAgcHJvY2Vzcy5zZW5kIHdpdGggdHJ5L2NhdGNoIGFzIHNvbWV0aW1lcyB3ZSBtaWdodCBjYWxsIHByb2Nlc3Muc2VuZCBcclxuICAgIC8vIHdoZW4gcGFyZW50IHByb2Nlc3MgaXMgYWxyZWFkeSBkaXNjb25uZWN0ZWQgKHdoZW4gdXNlIGtpbGxzIHRoZSBtYWluIHByb2Nlc3MpXHJcbiAgICB0cnkge1xyXG4gICAgICAgIC8vIGFkZCB1dGMgdGltZXN0YW1wXHJcbiAgICAgICAgcHJvY2Vzcy5jb25uZWN0ZWQgJiYgcHJvY2Vzcy5zZW5kKHsgdGltZTogb3h1dGlsLmdldFRpbWVTdGFtcCgpLCAuLi5tc2cgfSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgIC8vIGlnbm9yZVxyXG4gICAgfVxyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmdzKSB7XHJcbiAgICBsZXQgcmV0dmFsLCBlcnJvcjtcclxuICAgIGlmIChfd29ya2VyICYmIF93b3JrZXJbbWV0aG9kXSAmJiB0eXBlb2YgX3dvcmtlclttZXRob2RdID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dmFsID0gYXdhaXQgX3dvcmtlclttZXRob2RdLmFwcGx5KF93b3JrZXIsIGFyZ3MgfHwgW10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgRmFpbGVkIHRvIGludm9rZTogJHttZXRob2R9OmAsIGUpO1xyXG4gICAgICAgICAgICBlcnJvciA9IGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoYE1ldGhvZCBcIiR7bWV0aG9kfVwiIGRvZXMgbm90IGV4aXN0YCk7XHJcbiAgICB9XHJcbiAgICAvLyBjb252ZXJ0IEpTIGVycm9yIHRvIE94eWdlbiBGYWlsdXJlIG9iamVjdFxyXG4gICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgZXJyb3IgPSBlcnJvckhlbHBlci5nZXRGYWlsdXJlRnJvbUVycm9yKGVycm9yKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7IHJldHZhbCwgZXJyb3IgfTtcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gaW52b2tlVGVzdEhvb2sobWV0aG9kLCBhcmdzKSB7XHJcbiAgICBsZXQgcmV0dmFsID0gdW5kZWZpbmVkLCBlcnJvciA9IG51bGw7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHJldHZhbCA9IGF3YWl0IF93b3JrZXIuY2FsbFRlc3RIb29rKG1ldGhvZCwgYXJncyk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgIGVycm9yID0gZS5tZXNzYWdlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgcmV0dmFsLCBlcnJvciB9O1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBzdWJzY3JpYmUoZXZlbnROYW1lKSB7XHJcbiAgICBpZiAoX3dvcmtlciAmJiBfd29ya2VyLm9uKSB7XHJcbiAgICAgICAgX3dvcmtlci5vbihldmVudE5hbWUsICguLi5hcmdzKSA9PiBlbWl0V29ya2VyRXZlbnQoZXZlbnROYW1lLCBhcmdzKSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVtaXRXb3JrZXJFdmVudChldmVudE5hbWUsIGV2ZW50QXJncykge1xyXG4gICAgcHJvY2Vzc1NlbmQoe1xyXG4gICAgICAgIGV2ZW50OiAnZXZlbnQnLFxyXG4gICAgICAgIG5hbWU6IGV2ZW50TmFtZSxcclxuICAgICAgICBhcmdzOiBldmVudEFyZ3NcclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlbWl0UmVwb3J0ZXJFdmVudChldmVudE5hbWUsIGV2ZW50QXJncykge1xyXG4gICAgcHJvY2Vzc1NlbmQoe1xyXG4gICAgICAgIGV2ZW50OiAncmVwb3J0ZXInLFxyXG4gICAgICAgIG1ldGhvZDogZXZlbnROYW1lLFxyXG4gICAgICAgIGFyZ3M6IGV2ZW50QXJnc1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBYUE7QUFDQTtBQUEwQztBQUMxQyxNQUFNQSxNQUFNLEdBQUdDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztBQUN4QyxNQUFNQyxXQUFXLEdBQUdELE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQztBQUVsRCxNQUFNRSxRQUFRLEdBQUc7RUFDYkMsWUFBWSxFQUFFLFVBQVMsR0FBR0MsSUFBSSxFQUFFO0lBQzVCQyxpQkFBaUIsQ0FBQyxjQUFjLEVBQUVELElBQUksQ0FBQztFQUMzQyxDQUFDO0VBQ0RFLFVBQVUsRUFBRSxVQUFTLEdBQUdGLElBQUksRUFBRTtJQUMxQkMsaUJBQWlCLENBQUMsWUFBWSxFQUFFRCxJQUFJLENBQUM7RUFDekMsQ0FBQztFQUNERyxXQUFXLEVBQUUsVUFBUyxHQUFHSCxJQUFJLEVBQUU7SUFDM0JDLGlCQUFpQixDQUFDLGFBQWEsRUFBRUQsSUFBSSxDQUFDO0VBQzFDLENBQUM7RUFDREksU0FBUyxFQUFFLFVBQVMsR0FBR0osSUFBSSxFQUFFO0lBQ3pCQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUVELElBQUksQ0FBQztFQUN4QyxDQUFDO0VBQ0RLLFdBQVcsRUFBRSxVQUFTLEdBQUdMLElBQUksRUFBRTtJQUMzQkMsaUJBQWlCLENBQUMsYUFBYSxFQUFFRCxJQUFJLENBQUM7RUFDMUMsQ0FBQztFQUNETSxTQUFTLEVBQUUsVUFBUyxHQUFHTixJQUFJLEVBQUU7SUFDekJDLGlCQUFpQixDQUFDLFdBQVcsRUFBRUQsSUFBSSxDQUFDO0VBQ3hDLENBQUM7RUFDRE8sV0FBVyxFQUFFLFVBQVMsR0FBR1AsSUFBSSxFQUFFO0lBQzNCQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUVELElBQUksQ0FBQztFQUMxQztBQUNKLENBQUM7QUFHRFEsTUFBTSxDQUFDQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBRW5CLE1BQU1DLE1BQU0sR0FBRztFQUNYQyxJQUFJLEVBQUUsVUFBU0MsT0FBTyxFQUFFQyxHQUFHLEdBQUdDLDZCQUFxQixFQUFFO0lBQ2pELE1BQU1DLEVBQUUsR0FBR3BCLE1BQU0sQ0FBQ3FCLFlBQVksRUFBRTtJQUNoQ0MsV0FBVyxDQUFDO01BQUVDLElBQUksRUFBRUgsRUFBRTtNQUFFSSxLQUFLLEVBQUUsS0FBSztNQUFFQyxLQUFLLEVBQUVDLGNBQU0sQ0FBQ0MsSUFBSTtNQUFFQyxHQUFHLEVBQUVDLFNBQVMsQ0FBQ1osT0FBTyxDQUFDO01BQUVDO0lBQUksQ0FBQyxDQUFDO0VBQzdGLENBQUM7RUFDRFksS0FBSyxFQUFFLFVBQVNiLE9BQU8sRUFBRUMsR0FBRyxHQUFHQyw2QkFBcUIsRUFBRTtJQUNsRCxNQUFNQyxFQUFFLEdBQUdwQixNQUFNLENBQUNxQixZQUFZLEVBQUU7SUFDaENDLFdBQVcsQ0FBQztNQUFFQyxJQUFJLEVBQUVILEVBQUU7TUFBRUksS0FBSyxFQUFFLEtBQUs7TUFBRUMsS0FBSyxFQUFFQyxjQUFNLENBQUNLLEtBQUs7TUFBRUgsR0FBRyxFQUFFQyxTQUFTLENBQUNaLE9BQU8sQ0FBQztNQUFFQztJQUFJLENBQUMsQ0FBQztFQUM5RixDQUFDO0VBQ0RjLEtBQUssRUFBRSxVQUFTZixPQUFPLEVBQUVDLEdBQUcsR0FBR0MsNkJBQXFCLEVBQUVjLEdBQUcsR0FBRyxJQUFJLEVBQUU7SUFDOUQsSUFBSSxDQUFDZixHQUFHLEVBQUU7TUFDTkEsR0FBRyxHQUFHQyw2QkFBcUI7SUFDL0I7SUFDQSxNQUFNQyxFQUFFLEdBQUdwQixNQUFNLENBQUNxQixZQUFZLEVBQUU7SUFDaENDLFdBQVcsQ0FBQztNQUFFQyxJQUFJLEVBQUVILEVBQUU7TUFBRUksS0FBSyxFQUFFLEtBQUs7TUFBRUMsS0FBSyxFQUFFQyxjQUFNLENBQUNRLEtBQUs7TUFBRU4sR0FBRyxFQUFFQyxTQUFTLENBQUNaLE9BQU8sQ0FBQztNQUFFQyxHQUFHO01BQUVlLEdBQUcsRUFBRUE7SUFBSSxDQUFDLENBQUM7RUFDeEcsQ0FBQztFQUNERSxJQUFJLEVBQUUsVUFBU2xCLE9BQU8sRUFBRUMsR0FBRyxHQUFHQyw2QkFBcUIsRUFBRTtJQUNqRCxNQUFNQyxFQUFFLEdBQUdwQixNQUFNLENBQUNxQixZQUFZLEVBQUU7SUFDaENDLFdBQVcsQ0FBQztNQUFFQyxJQUFJLEVBQUVILEVBQUU7TUFBRUksS0FBSyxFQUFFLEtBQUs7TUFBRUMsS0FBSyxFQUFFQyxjQUFNLENBQUNVLElBQUk7TUFBRVIsR0FBRyxFQUFFQyxTQUFTLENBQUNaLE9BQU8sQ0FBQztNQUFFQztJQUFJLENBQUMsQ0FBQztFQUM3RjtBQUNKLENBQUM7QUFFRCxJQUFJbUIsT0FBTyxHQUFHLElBQUlDLHFCQUFZLENBQUNuQyxRQUFRLEVBQUVZLE1BQU0sQ0FBQztBQUVoRCxTQUFTYyxTQUFTLENBQUNVLEdBQUcsRUFBRTtFQUNwQixPQUFRLE9BQU9BLEdBQUcsS0FBSyxRQUFRLElBQUlBLEdBQUcsWUFBWUMsTUFBTSxHQUFHRCxHQUFHLEdBQUdFLElBQUksQ0FBQ1osU0FBUyxDQUFDVSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNqRztBQUVBdkMsTUFBTSxDQUFDMEMsUUFBUSxDQUFDM0IsTUFBTSxDQUFDO0FBS3ZCNEIsT0FBTyxDQUFDQyxFQUFFLENBQUMsb0JBQW9CLEVBQUUsT0FBTVgsR0FBRyxFQUFFWSxNQUFNLEtBQUs7RUFDbkQ5QixNQUFNLENBQUNpQixLQUFLLENBQUNDLEdBQUcsQ0FBQ2hCLE9BQU8sRUFBRTZCLGVBQU8sQ0FBQ0MsSUFBSSxDQUFDO0VBQ3ZDQyxPQUFPLENBQUNDLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRWhCLEdBQUcsQ0FBQztFQUN0Q1gsV0FBVyxDQUFDO0lBQ1JFLEtBQUssRUFBRSxhQUFhO0lBQ3BCMEIsVUFBVSxFQUFFakIsR0FBRyxDQUFDaEI7RUFDcEIsQ0FBQyxDQUFDO0FBQ04sQ0FBQyxDQUFDO0FBRUYwQixPQUFPLENBQUNDLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxPQUFNWCxHQUFHLEVBQUVZLE1BQU0sS0FBSztFQUNsRDlCLE1BQU0sQ0FBQ2lCLEtBQUssQ0FBQ0MsR0FBRyxDQUFDaEIsT0FBTyxFQUFFNkIsZUFBTyxDQUFDQyxJQUFJLENBQUM7RUFDdkNDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLG1CQUFtQixFQUFFaEIsR0FBRyxDQUFDO0VBQ3JDWCxXQUFXLENBQUM7SUFDUkUsS0FBSyxFQUFFLGFBQWE7SUFDcEIwQixVQUFVLEVBQUVqQixHQUFHLENBQUNoQjtFQUNwQixDQUFDLENBQUM7QUFDTixDQUFDLENBQUM7QUFFRjBCLE9BQU8sQ0FBQ0MsRUFBRSxDQUFDLFFBQVEsRUFBRSxrQkFBaUI7RUFDbEMsTUFBTU8sT0FBTyxDQUFDLFVBQVUsQ0FBQztBQUM3QixDQUFDLENBQUM7QUFFRlIsT0FBTyxDQUFDQyxFQUFFLENBQUMsU0FBUyxFQUFFLGdCQUFnQmhCLEdBQUcsRUFBRTtFQUN2QyxJQUFJLENBQUNBLEdBQUcsQ0FBQ3dCLElBQUksRUFBRTtJQUNYO0VBQ0o7RUFDQSxJQUFJLENBQUN4QixHQUFHLENBQUN3QixJQUFJLEtBQUssUUFBUSxJQUFJeEIsR0FBRyxDQUFDd0IsSUFBSSxLQUFLLGFBQWEsS0FBS3hCLEdBQUcsQ0FBQ3lCLE1BQU0sRUFBRTtJQUNyRSxNQUFNO01BQUVDLE1BQU07TUFBRUQsTUFBTTtNQUFFaEQ7SUFBSyxDQUFDLEdBQUd1QixHQUFHO0lBQ3BDLE1BQU0yQixVQUFVLEdBQUczQixHQUFHLENBQUN3QixJQUFJLEtBQUssYUFBYSxHQUFHSSxjQUFjLEdBQUdDLE1BQU07SUFDdkUsTUFBTTtNQUFFQyxNQUFNO01BQUUxQjtJQUFNLENBQUMsR0FBRyxNQUFNdUIsVUFBVSxDQUFDRixNQUFNLEVBQUVoRCxJQUFJLENBQUM7SUFDeERpQixXQUFXLENBQUM7TUFDUkUsS0FBSyxFQUFFLGVBQWU7TUFDdEI2QixNQUFNLEVBQUVBLE1BQU07TUFDZEMsTUFBTSxFQUFFQSxNQUFNO01BQ2R0QixLQUFLLEVBQUVBLEtBQUs7TUFDWjBCLE1BQU0sRUFBRUE7SUFDWixDQUFDLENBQUM7RUFDTixDQUFDLE1BQ0ksSUFBSTlCLEdBQUcsQ0FBQ3dCLElBQUksS0FBSyxXQUFXLEVBQUU7SUFDL0JPLFNBQVMsQ0FBQy9CLEdBQUcsQ0FBQ0osS0FBSyxDQUFDO0VBQ3hCO0FBQ0osQ0FBQyxDQUFDO0FBRUYsZUFBZTJCLE9BQU8sQ0FBQ1MsTUFBTSxHQUFFLElBQUksRUFBRTtFQUNqQyxJQUFJdkIsT0FBTyxFQUFFO0lBQ1QsSUFBSTtNQUNBLE1BQU1BLE9BQU8sQ0FBQ2MsT0FBTyxDQUFDUyxNQUFNLENBQUM7SUFDakMsQ0FBQyxDQUNELE9BQU9DLENBQUMsRUFBRSxDQUVWO0VBQ0o7QUFDSjtBQUVBLFNBQVN2QyxXQUFXLENBQUNNLEdBQUcsRUFBRTtFQUd0QixJQUFJO0lBRUFlLE9BQU8sQ0FBQ21CLFNBQVMsSUFBSW5CLE9BQU8sQ0FBQ29CLElBQUksQ0FBQztNQUFFeEMsSUFBSSxFQUFFdkIsTUFBTSxDQUFDcUIsWUFBWSxFQUFFO01BQUUsR0FBR087SUFBSSxDQUFDLENBQUM7RUFDOUUsQ0FBQyxDQUNELE9BQU9pQyxDQUFDLEVBQUUsQ0FFVjtBQUNKO0FBRUEsZUFBZUosTUFBTSxDQUFDSixNQUFNLEVBQUVoRCxJQUFJLEVBQUU7RUFDaEMsSUFBSXFELE1BQU0sRUFBRTFCLEtBQUs7RUFDakIsSUFBSUssT0FBTyxJQUFJQSxPQUFPLENBQUNnQixNQUFNLENBQUMsSUFBSSxPQUFPaEIsT0FBTyxDQUFDZ0IsTUFBTSxDQUFDLEtBQUssVUFBVSxFQUFFO0lBQ3JFLElBQUk7TUFDQUssTUFBTSxHQUFHLE1BQU1yQixPQUFPLENBQUNnQixNQUFNLENBQUMsQ0FBQ1csS0FBSyxDQUFDM0IsT0FBTyxFQUFFaEMsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUM3RCxDQUFDLENBQ0QsT0FBT3dELENBQUMsRUFBRTtNQUNOYixPQUFPLENBQUNDLEdBQUcsQ0FBRSxxQkFBb0JJLE1BQU8sR0FBRSxFQUFFUSxDQUFDLENBQUM7TUFDOUM3QixLQUFLLEdBQUc2QixDQUFDO0lBQ2I7RUFDSixDQUFDLE1BQ0k7SUFDRDdCLEtBQUssR0FBRyxJQUFJaUMsS0FBSyxDQUFFLFdBQVVaLE1BQU8sa0JBQWlCLENBQUM7RUFDMUQ7RUFFQSxJQUFJckIsS0FBSyxFQUFFO0lBQ1BBLEtBQUssR0FBRzlCLFdBQVcsQ0FBQ2dFLG1CQUFtQixDQUFDbEMsS0FBSyxDQUFDO0VBQ2xEO0VBQ0EsT0FBTztJQUFFMEIsTUFBTTtJQUFFMUI7RUFBTSxDQUFDO0FBQzVCO0FBRUEsZUFBZXdCLGNBQWMsQ0FBQ0gsTUFBTSxFQUFFaEQsSUFBSSxFQUFFO0VBQ3hDLElBQUlxRCxNQUFNLEdBQUdTLFNBQVM7SUFBRW5DLEtBQUssR0FBRyxJQUFJO0VBQ3BDLElBQUk7SUFDQTBCLE1BQU0sR0FBRyxNQUFNckIsT0FBTyxDQUFDK0IsWUFBWSxDQUFDZixNQUFNLEVBQUVoRCxJQUFJLENBQUM7RUFDckQsQ0FBQyxDQUNELE9BQU93RCxDQUFDLEVBQUU7SUFDTjdCLEtBQUssR0FBRzZCLENBQUMsQ0FBQzVDLE9BQU87RUFDckI7RUFDQSxPQUFPO0lBQUV5QyxNQUFNO0lBQUUxQjtFQUFNLENBQUM7QUFDNUI7QUFFQSxlQUFlMkIsU0FBUyxDQUFDVSxTQUFTLEVBQUU7RUFDaEMsSUFBSWhDLE9BQU8sSUFBSUEsT0FBTyxDQUFDTyxFQUFFLEVBQUU7SUFDdkJQLE9BQU8sQ0FBQ08sRUFBRSxDQUFDeUIsU0FBUyxFQUFFLENBQUMsR0FBR2hFLElBQUksS0FBS2lFLGVBQWUsQ0FBQ0QsU0FBUyxFQUFFaEUsSUFBSSxDQUFDLENBQUM7RUFDeEU7QUFDSjtBQUVBLFNBQVNpRSxlQUFlLENBQUNELFNBQVMsRUFBRUUsU0FBUyxFQUFFO0VBQzNDakQsV0FBVyxDQUFDO0lBQ1JFLEtBQUssRUFBRSxPQUFPO0lBQ2RnRCxJQUFJLEVBQUVILFNBQVM7SUFDZmhFLElBQUksRUFBRWtFO0VBQ1YsQ0FBQyxDQUFDO0FBQ047QUFFQSxTQUFTakUsaUJBQWlCLENBQUMrRCxTQUFTLEVBQUVFLFNBQVMsRUFBRTtFQUM3Q2pELFdBQVcsQ0FBQztJQUNSRSxLQUFLLEVBQUUsVUFBVTtJQUNqQjZCLE1BQU0sRUFBRWdCLFNBQVM7SUFDakJoRSxJQUFJLEVBQUVrRTtFQUNWLENBQUMsQ0FBQztBQUNOIn0=
|
|
219
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydW5uZXJzL294eWdlbi93b3JrZXIuanMiXSwibmFtZXMiOlsib3h1dGlsIiwicmVxdWlyZSIsImVycm9ySGVscGVyIiwicmVwb3J0ZXIiLCJvblN1aXRlU3RhcnQiLCJhcmdzIiwiZW1pdFJlcG9ydGVyRXZlbnQiLCJvblN1aXRlRW5kIiwib25DYXNlU3RhcnQiLCJvbkNhc2VFbmQiLCJvblN0ZXBTdGFydCIsIm9uU3RlcEVuZCIsIm9uUnVubmVyRW5kIiwiZ2xvYmFsIiwiYnJvd3NlciIsImxvZ2dlciIsImluZm8iLCJtZXNzYWdlIiwic3JjIiwiREVGQVVMVF9MT0dHRVJfSVNTVUVSIiwidHMiLCJnZXRUaW1lU3RhbXAiLCJwcm9jZXNzU2VuZCIsInRpbWUiLCJldmVudCIsImxldmVsIiwiTEVWRUxTIiwiSU5GTyIsIm1zZyIsInN0cmluZ2lmeSIsImRlYnVnIiwiREVCVUciLCJlcnJvciIsImVyciIsIkVSUk9SIiwid2FybiIsIldBUk4iLCJfd29ya2VyIiwiT3h5Z2VuV29ya2VyIiwib2JqIiwiU3RyaW5nIiwiSlNPTiIsImhvb2tMb2dzIiwicHJvY2VzcyIsIm9uIiwib3JpZ2luIiwiSVNTVUVSUyIsIlVTRVIiLCJjb25zb2xlIiwibG9nIiwiZXJyTWVzc2FnZSIsImRpc3Bvc2UiLCJ0eXBlIiwibWV0aG9kIiwiY2FsbElkIiwiaW52b2tlRnVuYyIsImludm9rZVRlc3RIb29rIiwiaW52b2tlIiwicmV0dmFsIiwic3Vic2NyaWJlIiwic3RhdHVzIiwiZSIsImNvbm5lY3RlZCIsInNlbmQiLCJhcHBseSIsIkVycm9yIiwiZ2V0RmFpbHVyZUZyb21FcnJvciIsInVuZGVmaW5lZCIsImNhbGxUZXN0SG9vayIsImV2ZW50TmFtZSIsImVtaXRXb3JrZXJFdmVudCIsImV2ZW50QXJncyIsIm5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7QUFhQTs7QUFDQTs7OztBQUNBLE1BQU1BLE1BQU0sR0FBR0MsT0FBTyxDQUFDLGdCQUFELENBQXRC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QUFJQSxPQUFPLENBQUNPLEVBQXZCLEVBQTJCO0FBQ3ZCUCxJQUFBQSxPQUFPLENBQUNPLEVBQVIsQ0FBV3lCLFNBQVgsRUFBc0IsQ0FBQyxHQUFHaEUsSUFBSixLQUFhaUUsZUFBZSxDQUFDRCxTQUFELEVBQVloRSxJQUFaLENBQWxEO0FBQ0g7QUFDSjs7QUFFRCxTQUFTaUUsZUFBVCxDQUF5QkQsU0FBekIsRUFBb0NFLFNBQXBDLEVBQStDO0FBQzNDakQsRUFBQUEsV0FBVyxDQUFDO0FBQ1JFLElBQUFBLEtBQUssRUFBRSxPQURDO0FBRVJnRCxJQUFBQSxJQUFJLEVBQUVILFNBRkU7QUFHUmhFLElBQUFBLElBQUksRUFBRWtFO0FBSEUsR0FBRCxDQUFYO0FBS0g7O0FBRUQsU0FBU2pFLGlCQUFULENBQTJCK0QsU0FBM0IsRUFBc0NFLFNBQXRDLEVBQWlEO0FBQzdDakQsRUFBQUEsV0FBVyxDQUFDO0FBQ1JFLElBQUFBLEtBQUssRUFBRSxVQURDO0FBRVI2QixJQUFBQSxNQUFNLEVBQUVnQixTQUZBO0FBR1JoRSxJQUFBQSxJQUFJLEVBQUVrRTtBQUhFLEdBQUQsQ0FBWDtBQUtIIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKlxyXG4gKiBCb2lsZXJwbGF0ZSBjb2RlIGZvciB1c2VyIHNjcmlwdHMuXHJcbiAqIFByb3ZpZGVzIGV2ZXJ5dGhpbmcgbmVjZXNzYXJ5IGZvciBleGVjdXRpbmcgSlMgdGVzdCBzY3JpcHRzLlxyXG4gKi9cclxuaW1wb3J0IHsgTEVWRUxTLCBERUZBVUxUX0xPR0dFUl9JU1NVRVIsIElTU1VFUlMgfSBmcm9tICcuLi8uLi9saWIvbG9nZ2VyJztcclxuaW1wb3J0IE94eWdlbldvcmtlciBmcm9tICcuL094eWdlbldvcmtlcic7XHJcbmNvbnN0IG94dXRpbCA9IHJlcXVpcmUoJy4uLy4uL2xpYi91dGlsJyk7XHJcbmNvbnN0IGVycm9ySGVscGVyID0gcmVxdWlyZSgnLi4vLi4vZXJyb3JzL2hlbHBlcicpO1xyXG5cclxuY29uc3QgcmVwb3J0ZXIgPSB7XHJcbiAgICBvblN1aXRlU3RhcnQ6IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcclxuICAgICAgICBlbWl0UmVwb3J0ZXJFdmVudCgnb25TdWl0ZVN0YXJ0JywgYXJncyk7XHJcbiAgICB9LFxyXG4gICAgb25TdWl0ZUVuZDogZnVuY3Rpb24oLi4uYXJncykge1xyXG4gICAgICAgIGVtaXRSZXBvcnRlckV2ZW50KCdvblN1aXRlRW5kJywgYXJncyk7XHJcbiAgICB9LFxyXG4gICAgb25DYXNlU3RhcnQ6IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcclxuICAgICAgICBlbWl0UmVwb3J0ZXJFdmVudCgnb25DYXNlU3RhcnQnLCBhcmdzKTtcclxuICAgIH0sXHJcbiAgICBvbkNhc2VFbmQ6IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcclxuICAgICAgICBlbWl0UmVwb3J0ZXJFdmVudCgnb25DYXNlRW5kJywgYXJncyk7XHJcbiAgICB9LFxyXG4gICAgb25TdGVwU3RhcnQ6IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcclxuICAgICAgICBlbWl0UmVwb3J0ZXJFdmVudCgnb25TdGVwU3RhcnQnLCBhcmdzKTtcclxuICAgIH0sXHJcbiAgICBvblN0ZXBFbmQ6IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcclxuICAgICAgICBlbWl0UmVwb3J0ZXJFdmVudCgnb25TdGVwRW5kJywgYXJncyk7XHJcbiAgICB9LFxyXG4gICAgb25SdW5uZXJFbmQ6IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcclxuICAgICAgICBlbWl0UmVwb3J0ZXJFdmVudCgnb25SdW5uZXJFbmQnLCBhcmdzKTtcclxuICAgIH1cclxufTtcclxuXHJcbi8vIG1vY2t1cCBnbG9iYmFsLmJyb3dzZXIgb2JqZWN0IGZvciBpbnRlcm5hbCBXRElPIGZ1bmN0aW9ucyB0byB3b3JrIHByb3Blcmx5XHJcbmdsb2JhbC5icm93c2VyID0ge307XHJcblxyXG5jb25zdCBsb2dnZXIgPSB7XHJcbiAgICBpbmZvOiBmdW5jdGlvbihtZXNzYWdlLCBzcmMgPSBERUZBVUxUX0xPR0dFUl9JU1NVRVIpIHtcclxuICAgICAgICBjb25zdCB0cyA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICBwcm9jZXNzU2VuZCh7IHRpbWU6IHRzLCBldmVudDogJ2xvZycsIGxldmVsOiBMRVZFTFMuSU5GTywgbXNnOiBzdHJpbmdpZnkobWVzc2FnZSksIHNyYyB9KTtcclxuICAgIH0sXHJcbiAgICBkZWJ1ZzogZnVuY3Rpb24obWVzc2FnZSwgc3JjID0gREVGQVVMVF9MT0dHRVJfSVNTVUVSKSB7XHJcbiAgICAgICAgY29uc3QgdHMgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcbiAgICAgICAgcHJvY2Vzc1NlbmQoeyB0aW1lOiB0cywgZXZlbnQ6ICdsb2cnLCBsZXZlbDogTEVWRUxTLkRFQlVHLCBtc2c6IHN0cmluZ2lmeShtZXNzYWdlKSwgc3JjIH0pO1xyXG4gICAgfSxcclxuICAgIGVycm9yOiBmdW5jdGlvbihtZXNzYWdlLCBzcmMgPSBERUZBVUxUX0xPR0dFUl9JU1NVRVIsIGVyciA9IG51bGwpIHtcclxuICAgICAgICBpZiAoIXNyYykge1xyXG4gICAgICAgICAgICBzcmMgPSBERUZBVUxUX0xPR0dFUl9JU1NVRVI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRzID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgIHByb2Nlc3NTZW5kKHsgdGltZTogdHMsIGV2ZW50OiAnbG9nJywgbGV2ZWw6IExFVkVMUy5FUlJPUiwgbXNnOiBzdHJpbmdpZnkobWVzc2FnZSksIHNyYywgZXJyOiBlcnIgfSk7XHJcbiAgICB9LFxyXG4gICAgd2FybjogZnVuY3Rpb24obWVzc2FnZSwgc3JjID0gREVGQVVMVF9MT0dHRVJfSVNTVUVSKSB7XHJcbiAgICAgICAgY29uc3QgdHMgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcbiAgICAgICAgcHJvY2Vzc1NlbmQoeyB0aW1lOiB0cywgZXZlbnQ6ICdsb2cnLCBsZXZlbDogTEVWRUxTLldBUk4sIG1zZzogc3RyaW5naWZ5KG1lc3NhZ2UpLCBzcmMgfSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5sZXQgX3dvcmtlciA9IG5ldyBPeHlnZW5Xb3JrZXIocmVwb3J0ZXIsIGxvZ2dlcik7XHJcblxyXG5mdW5jdGlvbiBzdHJpbmdpZnkob2JqKSB7XHJcbiAgICByZXR1cm4gKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnIHx8IG9iaiBpbnN0YW5jZW9mIFN0cmluZyA/IG9iaiA6IEpTT04uc3RyaW5naWZ5KG9iaiwgbnVsbCwgMikpO1xyXG59XHJcblxyXG5veHV0aWwuaG9va0xvZ3MobG9nZ2VyKTtcclxuLy8gcmVkaXJlY3Qgc3Rkb3V0IGFuZCBzdGRlcnIgdG8gdGhlIGxvZ2dlclxyXG4vL3Byb2Nlc3Muc3Rkb3V0LndyaXRlID0gbG9nZ2VyLmRlYnVnO1xyXG4vL3Byb2Nlc3Muc3RkZXJyLndyaXRlID0gbG9nZ2VyLmVycm9yO1xyXG5cclxucHJvY2Vzcy5vbigndW5oYW5kbGVkUmVqZWN0aW9uJywgYXN5bmMoZXJyLCBvcmlnaW4pID0+IHtcclxuICAgIGxvZ2dlci5lcnJvcihlcnIubWVzc2FnZSwgSVNTVUVSUy5VU0VSKTtcclxuICAgIGNvbnNvbGUubG9nKCd1bmhhbmRsZWRSZWplY3Rpb24nLCBlcnIpO1xyXG4gICAgcHJvY2Vzc1NlbmQoe1xyXG4gICAgICAgIGV2ZW50OiAnd29ya2VyRXJyb3InLFxyXG4gICAgICAgIGVyck1lc3NhZ2U6IGVyci5tZXNzYWdlLFxyXG4gICAgfSk7XHJcbn0pO1xyXG5cclxucHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCBhc3luYyhlcnIsIG9yaWdpbikgPT4ge1xyXG4gICAgbG9nZ2VyLmVycm9yKGVyci5tZXNzYWdlLCBJU1NVRVJTLlVTRVIpO1xyXG4gICAgY29uc29sZS5sb2coJ3VuY2F1Z2h0RXhjZXB0aW9uJywgZXJyKTtcclxuICAgIHByb2Nlc3NTZW5kKHtcclxuICAgICAgICBldmVudDogJ3dvcmtlckVycm9yJyxcclxuICAgICAgICBlcnJNZXNzYWdlOiBlcnIubWVzc2FnZSxcclxuICAgIH0pO1xyXG59KTtcclxuXHJcbnByb2Nlc3Mub24oJ1NJR0lOVCcsIGFzeW5jIGZ1bmN0aW9uKCkge1xyXG4gICAgYXdhaXQgZGlzcG9zZSgnQ0FOQ0VMRUQnKTtcclxufSk7XHJcblxyXG5wcm9jZXNzLm9uKCdtZXNzYWdlJywgYXN5bmMgZnVuY3Rpb24gKG1zZykge1xyXG4gICAgaWYgKCFtc2cudHlwZSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICgobXNnLnR5cGUgPT09ICdpbnZva2UnIHx8IG1zZy50eXBlID09PSAnaW52b2tlOmhvb2snKSAmJiBtc2cubWV0aG9kKSB7XHJcbiAgICAgICAgY29uc3QgeyBjYWxsSWQsIG1ldGhvZCwgYXJncyB9ID0gbXNnO1xyXG4gICAgICAgIGNvbnN0IGludm9rZUZ1bmMgPSBtc2cudHlwZSA9PT0gJ2ludm9rZTpob29rJyA/IGludm9rZVRlc3RIb29rIDogaW52b2tlO1xyXG4gICAgICAgIGNvbnN0IHsgcmV0dmFsLCBlcnJvciB9ID0gYXdhaXQgaW52b2tlRnVuYyhtZXRob2QsIGFyZ3MpO1xyXG4gICAgICAgIHByb2Nlc3NTZW5kKHtcclxuICAgICAgICAgICAgZXZlbnQ6ICdpbnZva2U6cmVzdWx0JyxcclxuICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QsXHJcbiAgICAgICAgICAgIGNhbGxJZDogY2FsbElkLFxyXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IsXHJcbiAgICAgICAgICAgIHJldHZhbDogcmV0dmFsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChtc2cudHlwZSA9PT0gJ3N1YnNjcmliZScpIHtcclxuICAgICAgICBzdWJzY3JpYmUobXNnLmV2ZW50KTtcclxuICAgIH1cclxufSk7XHJcblxyXG5hc3luYyBmdW5jdGlvbiBkaXNwb3NlKHN0YXR1cz0gbnVsbCkge1xyXG4gICAgaWYgKF93b3JrZXIpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCBfd29ya2VyLmRpc3Bvc2Uoc3RhdHVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBwcm9jZXNzU2VuZChtc2cpIHtcclxuICAgIC8vIHdyYXAgcHJvY2Vzcy5zZW5kIHdpdGggdHJ5L2NhdGNoIGFzIHNvbWV0aW1lcyB3ZSBtaWdodCBjYWxsIHByb2Nlc3Muc2VuZCBcclxuICAgIC8vIHdoZW4gcGFyZW50IHByb2Nlc3MgaXMgYWxyZWFkeSBkaXNjb25uZWN0ZWQgKHdoZW4gdXNlIGtpbGxzIHRoZSBtYWluIHByb2Nlc3MpXHJcbiAgICB0cnkge1xyXG4gICAgICAgIC8vIGFkZCB1dGMgdGltZXN0YW1wXHJcbiAgICAgICAgcHJvY2Vzcy5jb25uZWN0ZWQgJiYgcHJvY2Vzcy5zZW5kKHsgdGltZTogb3h1dGlsLmdldFRpbWVTdGFtcCgpLCAuLi5tc2cgfSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgIC8vIGlnbm9yZVxyXG4gICAgfVxyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmdzKSB7XHJcbiAgICBsZXQgcmV0dmFsLCBlcnJvcjtcclxuICAgIGlmIChfd29ya2VyICYmIF93b3JrZXJbbWV0aG9kXSAmJiB0eXBlb2YgX3dvcmtlclttZXRob2RdID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dmFsID0gYXdhaXQgX3dvcmtlclttZXRob2RdLmFwcGx5KF93b3JrZXIsIGFyZ3MgfHwgW10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgRmFpbGVkIHRvIGludm9rZTogJHttZXRob2R9OmAsIGUpO1xyXG4gICAgICAgICAgICBlcnJvciA9IGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoYE1ldGhvZCBcIiR7bWV0aG9kfVwiIGRvZXMgbm90IGV4aXN0YCk7XHJcbiAgICB9XHJcbiAgICAvLyBjb252ZXJ0IEpTIGVycm9yIHRvIE94eWdlbiBGYWlsdXJlIG9iamVjdFxyXG4gICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgZXJyb3IgPSBlcnJvckhlbHBlci5nZXRGYWlsdXJlRnJvbUVycm9yKGVycm9yKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7IHJldHZhbCwgZXJyb3IgfTtcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gaW52b2tlVGVzdEhvb2sobWV0aG9kLCBhcmdzKSB7XHJcbiAgICBsZXQgcmV0dmFsID0gdW5kZWZpbmVkLCBlcnJvciA9IG51bGw7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHJldHZhbCA9IGF3YWl0IF93b3JrZXIuY2FsbFRlc3RIb29rKG1ldGhvZCwgYXJncyk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgIGVycm9yID0gZS5tZXNzYWdlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgcmV0dmFsLCBlcnJvciB9O1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBzdWJzY3JpYmUoZXZlbnROYW1lKSB7XHJcbiAgICBpZiAoX3dvcmtlciAmJiBfd29ya2VyLm9uKSB7XHJcbiAgICAgICAgX3dvcmtlci5vbihldmVudE5hbWUsICguLi5hcmdzKSA9PiBlbWl0V29ya2VyRXZlbnQoZXZlbnROYW1lLCBhcmdzKSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVtaXRXb3JrZXJFdmVudChldmVudE5hbWUsIGV2ZW50QXJncykge1xyXG4gICAgcHJvY2Vzc1NlbmQoe1xyXG4gICAgICAgIGV2ZW50OiAnZXZlbnQnLFxyXG4gICAgICAgIG5hbWU6IGV2ZW50TmFtZSxcclxuICAgICAgICBhcmdzOiBldmVudEFyZ3NcclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlbWl0UmVwb3J0ZXJFdmVudChldmVudE5hbWUsIGV2ZW50QXJncykge1xyXG4gICAgcHJvY2Vzc1NlbmQoe1xyXG4gICAgICAgIGV2ZW50OiAncmVwb3J0ZXInLFxyXG4gICAgICAgIG1ldGhvZDogZXZlbnROYW1lLFxyXG4gICAgICAgIGFyZ3M6IGV2ZW50QXJnc1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbiJdfQ==
|