oxygen-cli 1.37.8 → 1.37.9
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 +1687 -1687
- package/LICENSE +672 -672
- package/README.md +37 -37
- package/build/core/OxygenCore.js +8 -2
- package/build/core/OxygenEvents.js +4 -2
- package/build/core/OxygenModule.js +1 -1
- package/build/core/OxygenService.js +1 -1
- package/build/core/OxygenSubModule.js +1 -1
- package/build/core/WebDriverModule.js +1 -1
- package/build/core/utils.js +1 -1
- package/build/errors/HookError.js +1 -1
- package/build/errors/ModuleError.js +1 -1
- package/build/errors/ModuleUnavailableError.js +1 -1
- package/build/errors/OxygenError.js +1 -1
- package/build/errors/ScriptNotFound.js +1 -1
- package/build/errors/helper.js +1 -1
- package/build/index.js +1 -1
- package/build/lib/cli-util.js +25 -6
- package/build/lib/cli.js +2 -2
- package/build/lib/debugger.js +1 -1
- package/build/lib/img-merge.js +1 -1
- package/build/lib/launcher.js +1 -1
- package/build/lib/logger.js +43 -43
- package/build/lib/moduleRequire.js +1 -1
- package/build/lib/parallel-launcher.js +1 -1
- package/build/lib/param-manager.js +1 -1
- package/build/lib/param-reader-csv.js +1 -1
- package/build/lib/param-reader-excel.js +1 -1
- package/build/lib/param-reader-json.js +1 -1
- package/build/lib/text-to-image.js +1 -1
- package/build/lib/util.js +2 -2
- package/build/model/case-result.js +1 -1
- package/build/model/failure.js +1 -1
- package/build/model/status.js +1 -1
- package/build/model/step-result.js +1 -1
- package/build/model/suite-result.js +2 -1
- package/build/model/test-result.js +1 -1
- package/build/model/testcase.js +1 -1
- package/build/model/testsuite.js +1 -1
- package/build/ox_modules/index.js +1 -1
- package/build/ox_modules/module-assert.js +37 -37
- package/build/ox_modules/module-date.js +24 -24
- package/build/ox_modules/module-db.js +52 -52
- package/build/ox_modules/module-email.js +59 -59
- package/build/ox_modules/module-eyes.js +34 -34
- package/build/ox_modules/module-http/ntlm-util.js +10 -10
- package/build/ox_modules/module-http/ntlm.js +15 -15
- package/build/ox_modules/module-http.js +132 -132
- package/build/ox_modules/module-log.js +27 -27
- package/build/ox_modules/module-mailinator.js +87 -87
- package/build/ox_modules/module-mob/commands/alertAccept.js +17 -17
- package/build/ox_modules/module-mob/commands/alertDismiss.js +17 -17
- package/build/ox_modules/module-mob/commands/assertAlert.js +20 -20
- package/build/ox_modules/module-mob/commands/assertText.js +21 -21
- package/build/ox_modules/module-mob/commands/assertTitle.js +19 -19
- package/build/ox_modules/module-mob/commands/assertValue.js +18 -18
- package/build/ox_modules/module-mob/commands/back.js +16 -16
- package/build/ox_modules/module-mob/commands/clear.js +19 -19
- package/build/ox_modules/module-mob/commands/click.js +17 -17
- package/build/ox_modules/module-mob/commands/clickHidden.js +17 -17
- package/build/ox_modules/module-mob/commands/clickLong.js +18 -18
- package/build/ox_modules/module-mob/commands/clickMultipleTimes.js +18 -18
- package/build/ox_modules/module-mob/commands/closeApp.js +16 -16
- package/build/ox_modules/module-mob/commands/debug.js +16 -16
- package/build/ox_modules/module-mob/commands/dragAndDrop.js +19 -19
- package/build/ox_modules/module-mob/commands/enableNetwork.js +27 -27
- package/build/ox_modules/module-mob/commands/execute.js +21 -21
- package/build/ox_modules/module-mob/commands/findElement.js +20 -20
- package/build/ox_modules/module-mob/commands/findElements.js +23 -23
- package/build/ox_modules/module-mob/commands/getAlertText.js +17 -17
- package/build/ox_modules/module-mob/commands/getAppiumLogs.js +16 -16
- package/build/ox_modules/module-mob/commands/getBrowserLogs.js +16 -16
- package/build/ox_modules/module-mob/commands/getCurrentActivity.js +15 -15
- package/build/ox_modules/module-mob/commands/getCurrentPackage.js +15 -15
- package/build/ox_modules/module-mob/commands/getDeviceLogs.js +16 -16
- package/build/ox_modules/module-mob/commands/getDeviceTime.js +16 -16
- package/build/ox_modules/module-mob/commands/getLocation.js +20 -20
- package/build/ox_modules/module-mob/commands/getSource.js +16 -16
- package/build/ox_modules/module-mob/commands/getText.js +18 -18
- package/build/ox_modules/module-mob/commands/getTitle.js +13 -13
- package/build/ox_modules/module-mob/commands/getUrl.js +17 -17
- package/build/ox_modules/module-mob/commands/getValue.js +18 -18
- package/build/ox_modules/module-mob/commands/getWindowHandles.js +17 -17
- package/build/ox_modules/module-mob/commands/hideKeyboard.js +21 -21
- package/build/ox_modules/module-mob/commands/index.js +1 -1
- package/build/ox_modules/module-mob/commands/installApp.js +16 -16
- package/build/ox_modules/module-mob/commands/isAppInstalled.js +16 -16
- package/build/ox_modules/module-mob/commands/isCheckable.js +18 -18
- package/build/ox_modules/module-mob/commands/isChecked.js +18 -18
- package/build/ox_modules/module-mob/commands/isClickable.js +18 -18
- package/build/ox_modules/module-mob/commands/isExist.js +19 -19
- package/build/ox_modules/module-mob/commands/isSelected.js +23 -23
- package/build/ox_modules/module-mob/commands/isVisible.js +19 -19
- package/build/ox_modules/module-mob/commands/isWebViewContext.js +16 -16
- package/build/ox_modules/module-mob/commands/launchApp.js +15 -15
- package/build/ox_modules/module-mob/commands/longPressKeyCode.js +18 -18
- package/build/ox_modules/module-mob/commands/open.js +17 -17
- package/build/ox_modules/module-mob/commands/pause.js +16 -16
- package/build/ox_modules/module-mob/commands/removeApp.js +16 -16
- package/build/ox_modules/module-mob/commands/resetApp.js +15 -15
- package/build/ox_modules/module-mob/commands/scrollIntoElement.js +22 -22
- package/build/ox_modules/module-mob/commands/scrollIntoView.js +27 -27
- package/build/ox_modules/module-mob/commands/select.js +24 -24
- package/build/ox_modules/module-mob/commands/selectFrame.js +23 -23
- package/build/ox_modules/module-mob/commands/selectWindow.js +28 -28
- package/build/ox_modules/module-mob/commands/sendKeys.js +29 -29
- package/build/ox_modules/module-mob/commands/setContext.js +16 -16
- package/build/ox_modules/module-mob/commands/setNativeContext.js +15 -15
- package/build/ox_modules/module-mob/commands/setTimeout.js +21 -21
- package/build/ox_modules/module-mob/commands/setWebViewContext.js +16 -16
- package/build/ox_modules/module-mob/commands/shake.js +16 -16
- package/build/ox_modules/module-mob/commands/smsClickLink.js +19 -19
- package/build/ox_modules/module-mob/commands/smsGetText.js +20 -20
- package/build/ox_modules/module-mob/commands/swipe.js +20 -20
- package/build/ox_modules/module-mob/commands/swipeElement.js +20 -20
- package/build/ox_modules/module-mob/commands/swipeScreen.js +20 -20
- package/build/ox_modules/module-mob/commands/takeScreenshot.js +17 -17
- package/build/ox_modules/module-mob/commands/tap.js +17 -17
- package/build/ox_modules/module-mob/commands/type.js +20 -20
- package/build/ox_modules/module-mob/commands/unlockPattern.js +22 -22
- package/build/ox_modules/module-mob/commands/waitForExist.js +18 -18
- package/build/ox_modules/module-mob/commands/waitForInteractable.js +17 -17
- package/build/ox_modules/module-mob/commands/waitForVisible.js +17 -17
- package/build/ox_modules/module-mob.js +74 -74
- package/build/ox_modules/module-pdf.js +35 -35
- package/build/ox_modules/module-proxy.js +77 -77
- package/build/ox_modules/module-serial.js +55 -55
- package/build/ox_modules/module-shell.js +25 -25
- package/build/ox_modules/module-soap.js +72 -72
- package/build/ox_modules/module-twilio.js +41 -41
- package/build/ox_modules/module-utils.js +91 -91
- package/build/ox_modules/module-web/commands/alertAccept.js +17 -17
- package/build/ox_modules/module-web/commands/alertDismiss.js +17 -17
- package/build/ox_modules/module-web/commands/assertAlert.js +20 -20
- package/build/ox_modules/module-web/commands/assertExist.js +17 -17
- package/build/ox_modules/module-web/commands/assertSelectedLabel.js +21 -21
- package/build/ox_modules/module-web/commands/assertSelectedValue.js +21 -21
- package/build/ox_modules/module-web/commands/assertText.js +21 -21
- package/build/ox_modules/module-web/commands/assertTextNotPresent.js +18 -18
- package/build/ox_modules/module-web/commands/assertTextPresent.js +18 -18
- package/build/ox_modules/module-web/commands/assertTitle.js +19 -19
- package/build/ox_modules/module-web/commands/assertValue.js +20 -20
- package/build/ox_modules/module-web/commands/back.js +16 -16
- package/build/ox_modules/module-web/commands/clear.js +18 -18
- package/build/ox_modules/module-web/commands/click.js +25 -25
- package/build/ox_modules/module-web/commands/clickHidden.js +23 -23
- package/build/ox_modules/module-web/commands/closeWindow.js +15 -15
- package/build/ox_modules/module-web/commands/debug.js +15 -15
- package/build/ox_modules/module-web/commands/deleteCookies.js +12 -12
- package/build/ox_modules/module-web/commands/deselect.js +22 -22
- package/build/ox_modules/module-web/commands/doubleClick.js +17 -17
- package/build/ox_modules/module-web/commands/dragAndDrop.js +20 -20
- package/build/ox_modules/module-web/commands/execute.js +24 -24
- package/build/ox_modules/module-web/commands/fileBrowse.js +18 -18
- package/build/ox_modules/module-web/commands/findElement.js +19 -19
- package/build/ox_modules/module-web/commands/findElements.js +22 -22
- package/build/ox_modules/module-web/commands/fullscreenWindow.js +14 -14
- package/build/ox_modules/module-web/commands/getAlertText.js +16 -16
- package/build/ox_modules/module-web/commands/getAttribute.js +19 -19
- package/build/ox_modules/module-web/commands/getBrowserLogs.js +17 -17
- package/build/ox_modules/module-web/commands/getCookies.js +13 -13
- package/build/ox_modules/module-web/commands/getCssValue.js +19 -19
- package/build/ox_modules/module-web/commands/getElementCount.js +17 -17
- package/build/ox_modules/module-web/commands/getHTML.js +17 -17
- package/build/ox_modules/module-web/commands/getSource.js +16 -16
- package/build/ox_modules/module-web/commands/getText.js +18 -18
- package/build/ox_modules/module-web/commands/getTitle.js +12 -12
- package/build/ox_modules/module-web/commands/getUrl.js +16 -16
- package/build/ox_modules/module-web/commands/getValue.js +18 -18
- package/build/ox_modules/module-web/commands/getWindowHandles.js +16 -16
- package/build/ox_modules/module-web/commands/getWindowSize.js +16 -16
- package/build/ox_modules/module-web/commands/getXMLPageSource.js +16 -16
- package/build/ox_modules/module-web/commands/index.js +1 -1
- package/build/ox_modules/module-web/commands/isAlertPresent.js +16 -16
- package/build/ox_modules/module-web/commands/isChecked.js +18 -18
- package/build/ox_modules/module-web/commands/isExist.js +19 -19
- package/build/ox_modules/module-web/commands/isInteractable.js +22 -22
- package/build/ox_modules/module-web/commands/isSelected.js +23 -23
- package/build/ox_modules/module-web/commands/isVisible.js +19 -19
- package/build/ox_modules/module-web/commands/makeVisible.js +25 -25
- package/build/ox_modules/module-web/commands/maximizeWindow.js +14 -14
- package/build/ox_modules/module-web/commands/minimizeWindow.js +14 -14
- package/build/ox_modules/module-web/commands/mock.js +20 -20
- package/build/ox_modules/module-web/commands/mockClearAll.js +12 -12
- package/build/ox_modules/module-web/commands/mockRestoreAll.js +12 -12
- package/build/ox_modules/module-web/commands/newWindow.js +16 -16
- package/build/ox_modules/module-web/commands/open.js +16 -16
- package/build/ox_modules/module-web/commands/pause.js +15 -15
- package/build/ox_modules/module-web/commands/point.js +21 -21
- package/build/ox_modules/module-web/commands/pointJS.js +15 -15
- package/build/ox_modules/module-web/commands/refresh.js +15 -15
- package/build/ox_modules/module-web/commands/rightClick.js +17 -17
- package/build/ox_modules/module-web/commands/rightClickActions.js +19 -19
- package/build/ox_modules/module-web/commands/scrollToElement.js +21 -21
- package/build/ox_modules/module-web/commands/select.js +23 -23
- package/build/ox_modules/module-web/commands/selectFrame.js +24 -24
- package/build/ox_modules/module-web/commands/selectWindow.js +27 -27
- package/build/ox_modules/module-web/commands/sendKeys.js +22 -22
- package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +20 -20
- package/build/ox_modules/module-web/commands/setTimeout.js +21 -21
- package/build/ox_modules/module-web/commands/setWindowSize.js +17 -17
- package/build/ox_modules/module-web/commands/takeScreenshot.js +17 -17
- package/build/ox_modules/module-web/commands/type.js +20 -20
- package/build/ox_modules/module-web/commands/verifyAlert.js +20 -20
- package/build/ox_modules/module-web/commands/verifyExist.js +17 -17
- package/build/ox_modules/module-web/commands/verifySelectedLabel.js +21 -21
- package/build/ox_modules/module-web/commands/verifySelectedValue.js +21 -21
- package/build/ox_modules/module-web/commands/verifyText.js +21 -21
- package/build/ox_modules/module-web/commands/verifyTextNotPresent.js +18 -18
- package/build/ox_modules/module-web/commands/verifyTextPresent.js +18 -18
- package/build/ox_modules/module-web/commands/verifyTitle.js +19 -19
- package/build/ox_modules/module-web/commands/verifyValue.js +20 -20
- package/build/ox_modules/module-web/commands/waitForAngular.js +19 -19
- package/build/ox_modules/module-web/commands/waitForExist.js +17 -17
- package/build/ox_modules/module-web/commands/waitForInteractable.js +17 -17
- package/build/ox_modules/module-web/commands/waitForNotExist.js +17 -17
- package/build/ox_modules/module-web/commands/waitForNotText.js +20 -20
- package/build/ox_modules/module-web/commands/waitForNotValue.js +20 -20
- package/build/ox_modules/module-web/commands/waitForText.js +20 -20
- package/build/ox_modules/module-web/commands/waitForValue.js +20 -20
- package/build/ox_modules/module-web/commands/waitForVisible.js +17 -17
- package/build/ox_modules/module-web/commands/waitForWindow.js +22 -22
- package/build/ox_modules/module-web.js +105 -100
- package/build/ox_modules/module-win/commands/assertText.js +17 -17
- package/build/ox_modules/module-win/commands/assertTitle.js +15 -15
- package/build/ox_modules/module-win/commands/assertValue.js +14 -14
- package/build/ox_modules/module-win/commands/back.js +11 -11
- package/build/ox_modules/module-win/commands/clear.js +13 -13
- package/build/ox_modules/module-win/commands/click.js +13 -13
- package/build/ox_modules/module-win/commands/clickLong.js +14 -14
- package/build/ox_modules/module-win/commands/clickMultipleTimes.js +14 -14
- package/build/ox_modules/module-win/commands/findElement.js +15 -15
- package/build/ox_modules/module-win/commands/findElements.js +15 -15
- package/build/ox_modules/module-win/commands/getAppiumLogs.js +12 -12
- package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +15 -15
- package/build/ox_modules/module-win/commands/getLocation.js +14 -14
- package/build/ox_modules/module-win/commands/getSource.js +12 -12
- package/build/ox_modules/module-win/commands/getText.js +14 -14
- package/build/ox_modules/module-win/commands/getValue.js +14 -14
- package/build/ox_modules/module-win/commands/getWindowHandles.js +15 -15
- package/build/ox_modules/module-win/commands/index.js +1 -1
- package/build/ox_modules/module-win/commands/isCheckable.js +14 -14
- package/build/ox_modules/module-win/commands/isChecked.js +14 -14
- package/build/ox_modules/module-win/commands/isClickable.js +14 -14
- package/build/ox_modules/module-win/commands/isExist.js +15 -15
- package/build/ox_modules/module-win/commands/isSelected.js +14 -14
- package/build/ox_modules/module-win/commands/isVisible.js +15 -15
- package/build/ox_modules/module-win/commands/open.js +13 -13
- package/build/ox_modules/module-win/commands/pause.js +12 -12
- package/build/ox_modules/module-win/commands/rightClick.js +13 -13
- package/build/ox_modules/module-win/commands/selectWindow.js +23 -23
- package/build/ox_modules/module-win/commands/sendKeys.js +22 -22
- package/build/ox_modules/module-win/commands/setTimeout.js +17 -17
- package/build/ox_modules/module-win/commands/takeScreenshot.js +16 -16
- package/build/ox_modules/module-win/commands/tap.js +13 -13
- package/build/ox_modules/module-win/commands/type.js +16 -16
- package/build/ox_modules/module-win/commands/waitForExist.js +14 -14
- package/build/ox_modules/module-win/commands/waitForInteractable.js +16 -16
- package/build/ox_modules/module-win/commands/waitForVisible.js +13 -13
- package/build/ox_modules/module-win.js +47 -47
- package/build/ox_modules/utils.js +8 -8
- package/build/ox_reporters/excel/template.json +48 -48
- package/build/ox_reporters/html/index.ejs +163 -163
- package/build/ox_reporters/html/summary.ejs +77 -77
- package/build/ox_reporters/html/tests-details.ejs +134 -134
- package/build/ox_reporters/html/tests-devices-browsers.ejs +83 -83
- package/build/ox_reporters/reporter-excel.js +1 -1
- package/build/ox_reporters/reporter-html.js +1 -1
- package/build/ox_reporters/reporter-json.js +1 -1
- package/build/ox_reporters/reporter-junit.js +1 -1
- package/build/ox_reporters/reporter-pdf.js +1 -1
- package/build/ox_reporters/reporter-rp.js +376 -0
- package/build/ox_reporters/reporter-xml.js +1 -1
- package/build/ox_services/service-devtools/submodule-network.js +1 -1
- package/build/ox_services/service-devtools.js +1 -1
- package/build/reporter/FileReporterBase.js +1 -1
- package/build/reporter/ReportAggregator.js +110 -43
- package/build/reporter/ReporterBase.js +2 -2
- package/build/runners/WorkerProcess.js +1 -1
- package/build/runners/cucumber/CucumberEventListener.js +1 -1
- package/build/runners/cucumber/CucumberReporter.js +1 -1
- package/build/runners/cucumber/CucumberWorker.js +1 -1
- package/build/runners/cucumber/index.js +1 -1
- package/build/runners/cucumber/worker.js +1 -1
- package/build/runners/index.js +1 -1
- package/build/runners/oxygen/OxygenWorker.js +1 -1
- package/build/runners/oxygen/index.js +37 -22
- package/build/runners/oxygen/worker.js +1 -1
- package/config/default.json +6 -6
- package/log.txt +1614 -0
- package/package.json +136 -135
- package/types/index.d.ts +70 -70
- package/types/module-eyes.d.ts +39 -39
- package/types/module-http.d.ts +163 -163
- package/types/module-log.d.ts +34 -34
- package/types/module-mob.d.ts +966 -966
- package/types/module-pdf.d.ts +40 -40
- package/types/module-proxy.d.ts +100 -100
- package/types/module-shell.d.ts +24 -24
- package/types/module-utils.d.ts +99 -99
- package/types/module-web.d.ts +1053 -1053
- package/types/module-win.d.ts +352 -352
- package/types/oxygen.d.ts +53 -53
|
@@ -341,4 +341,4 @@ class NetworkSubModule extends _OxygenSubModule.OxygenSubModule {
|
|
|
341
341
|
}
|
|
342
342
|
|
|
343
343
|
exports.default = NetworkSubModule;
|
|
344
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9veF9zZXJ2aWNlcy9zZXJ2aWNlLWRldnRvb2xzL3N1Ym1vZHVsZS1uZXR3b3JrLmpzIl0sIm5hbWVzIjpbIm9ic2VydmUiLCJOZXR3b3JrU3ViTW9kdWxlIiwiT3h5Z2VuU3ViTW9kdWxlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwicGFyZW50IiwiX2RldlRvb2xzIiwiX2NvbGxlY3REYXRhIiwiX2V2ZW50cyIsImluaXQiLCJkZXZUb29scyIsIl9wYXJlbnQiLCJnZXREcml2ZXIiLCJfZHJpdmVyIiwiZm9yRWFjaCIsIm1ldGhvZCIsIm9uIiwicGFyYW1zIiwicHVzaCIsImRpc3Bvc2UiLCJyZW1vdmVMaXN0ZW5lciIsImVtaXQiLCJlIiwic3RhcnQiLCJzdG9wIiwiZ2V0UmVxdWVzdHMiLCJfZ2V0RW50cmllcyIsImhhciIsImxvZyIsImVudHJpZXMiLCJtYXAiLCJyZXZlcnNlIiwiUHJvbWlzZSIsImFsbCIsIml0ZW0iLCJyZXNwb25zZUJvZHkiLCJjZHAiLCJyZXF1ZXN0SWQiLCJfcmVxdWVzdElkIiwiYm9keSIsIkpTT04iLCJwYXJzZSIsInJlcXVlc3RQb3N0RGF0YSIsInVybCIsInJlcXVlc3QiLCJyZXNwb25zZSIsIndhaXRGb3JVcmwiLCJwYXR0ZXJuIiwidGltZW91dCIsIl9pc0luaXRpYWxpemVkIiwiT3hFcnJvciIsImVyckhlbHBlciIsImVycm9yQ29kZSIsIk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IiLCJoZWxwZXJzIiwiYXNzZXJ0QXJndW1lbnQiLCJhc3NlcnRBcmd1bWVudFRpbWVvdXQiLCJEYXRlIiwibm93IiwibmV0d29ya1JlcXVlc3RzIiwicmVxIiwidGVzdCIsInBhdXNlIiwiVElNRU9VVCIsIndhaXRGb3JOb3RVcmwiLCJ3YWl0Rm9yIiwibWF0Y2hlciIsImFzc2VydFVybCIsIkFTU0VSVF9FUlJPUiIsImFzc2VydFN0YXR1c0NvZGUiLCJzdGF0dXNDb2RlIiwiZmFpbHVyZU1lc3NhZ2UiLCJtYXRjaGVkUmVxIiwic3RhdHVzIiwibWVzc2FnZSIsImFzc2VydFJlc3BvbnNlQ29udGVudCIsImNvbnRlbnQiLCJyZXNwIiwiYmFzZTY0RW5jb2RlZCIsImluZGV4T2YiLCJibG9ja1VybHMiLCJ1cmxzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFZQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUdBLE1BQU1BLE9BQU8sR0FBRyxDQUNaLDJCQURZLEVBR1osb0JBSFksRUFXWixxQkFYWSxFQWtCWiwrQkFsQlksRUFvQlosMEJBcEJZLEVBc0JaLDhCQXRCWSxFQXlCWixzQkF6QlksRUEyQlosdUJBM0JZLEVBNEJaLHlCQTVCWSxFQTZCWixnQ0E3QlksRUE4QlosMkJBOUJZLEVBK0JaLDBCQS9CWSxFQXVDWixvQ0F2Q1ksRUF3Q1osaUNBeENZLEVBeUNaLG1DQXpDWSxDQUFoQjs7QUE2Q2UsTUFBTUMsZ0JBQU4sU0FBK0JDLGdDQUEvQixDQUErQztBQUMxREMsRUFBQUEsV0FBVyxDQUFDQyxJQUFELEVBQU9DLE1BQVAsRUFBZTtBQUN0QixVQUFNRCxJQUFOLEVBQVlDLE1BQVo7QUFDQSxTQUFLQyxTQUFMLEdBQWlCLElBQWpCO0FBQ0EsU0FBS0MsWUFBTCxHQUFvQixLQUFwQjtBQUNBLFNBQUtDLE9BQUwsR0FBZSxFQUFmO0FBQ0g7O0FBRURDLEVBQUFBLElBQUksQ0FBQ0MsUUFBRCxFQUFXO0FBQ1gsUUFBSSxDQUFDQSxRQUFELElBQWEsQ0FBQyxLQUFLQyxPQUFuQixJQUE4QixDQUFDLEtBQUtBLE9BQUwsQ0FBYUMsU0FBNUMsSUFBeUQsT0FBTyxLQUFLRCxPQUFMLENBQWFDLFNBQXBCLEtBQWtDLFVBQTNGLElBQXlHLENBQUMsS0FBS0QsT0FBTCxDQUFhQyxTQUFiLEVBQTlHLEVBQXdJO0FBQ3BJLFlBQU1ILElBQU47QUFDQSxhQUFPLEtBQVA7QUFDSDs7QUFDRCxTQUFLSCxTQUFMLEdBQWlCSSxRQUFqQjtBQUNBLFNBQUtHLE9BQUwsR0FBZSxLQUFLRixPQUFMLENBQWFDLFNBQWIsRUFBZjtBQUVB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LENBQUMsQ0FBbkcsQ0FBSixFQUEyRztBQUN2RyxlQUFPLElBQVA7QUFDSCxPQUZELE1BR0s7QUFDRCxjQUFNRixPQUFPLEdBQUdILGNBQWMsSUFBSyxhQUFZNUIsR0FBSSxrQ0FBaUNpQyxPQUFRLEdBQTVGO0FBQ0EsY0FBTSxJQUFJMUIsb0JBQUosQ0FBWUMsZ0JBQVVDLFNBQVYsQ0FBb0JnQixZQUFoQyxFQUE4Q00sT0FBOUMsQ0FBTjtBQUNIO0FBQ0o7QUFDSjs7QUFPYyxRQUFUTSxTQUFTLENBQUNDLElBQUQsRUFBTztBQUNsQixVQUFNLEtBQUtwRSxPQUFMLENBQWF1QixHQUFiLENBQWlCLFNBQWpCLEVBQTJCLGdCQUEzQixFQUE2QztBQUMvQzZDLE1BQUFBO0FBRCtDLEtBQTdDLENBQU47QUFHSDs7QUFqWHlEIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogUHJvdmlkZXMgbWV0aG9kcyBmb3IgbW9uaXRvcmluZyBhbmQgYW5hbHl6aW5nIENocm9tZSBicm93c2VyIG5ldHdvcmsgYWN0aXZpdGllcy5cclxuKi9cclxuaW1wb3J0IHsgT3h5Z2VuU3ViTW9kdWxlIH0gZnJvbSAnLi4vLi4vY29yZS9PeHlnZW5TdWJNb2R1bGUnO1xyXG5pbXBvcnQgeyBoYXJGcm9tTWVzc2FnZXMgfSBmcm9tICdjaHJvbWUtaGFyJztcclxuaW1wb3J0IGVyckhlbHBlciBmcm9tICcuLi8uLi9lcnJvcnMvaGVscGVyJztcclxuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi4vLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxuXHJcbi8vIGJlbG93IGFyZSB0aGUgZXZlbnRzIHRoYXQgbmVlZCB0byBiZSBvYnNlcnZlZCBmb3IgXCJjaHJvbWUtaGFyXCIgbW9kdWxlIHRvIGdlbmVyYXRlIGEgcHJvcGVyIEhBUiBmaWxlXHJcbmNvbnN0IG9ic2VydmUgPSBbXHJcbiAgICAnUGFnZS5kb21Db250ZW50RXZlbnRGaXJlZCcsXHJcbiAgICAvLydQYWdlLmZpbGVDaG9vc2VyT3BlbmVkJyxcclxuICAgICdQYWdlLmZyYW1lQXR0YWNoZWQnLFxyXG4gICAgLy8nUGFnZS5mcmFtZURldGFjaGVkJyxcclxuICAgIC8vJ1BhZ2UuZnJhbWVOYXZpZ2F0ZWQnLFxyXG4gICAgLy8nUGFnZS5pbnRlcnN0aXRpYWxIaWRkZW4nLFxyXG4gICAgLy8nUGFnZS5pbnRlcnN0aXRpYWxTaG93bicsXHJcbiAgICAvLydQYWdlLmphdmFzY3JpcHREaWFsb2dDbG9zZWQnLFxyXG4gICAgLy8nUGFnZS5qYXZhc2NyaXB0RGlhbG9nT3BlbmluZycsXHJcbiAgICAvLydQYWdlLmxpZmVjeWNsZUV2ZW50JyxcclxuICAgICdQYWdlLmxvYWRFdmVudEZpcmVkJyxcclxuICAgIC8vJ1BhZ2Uud2luZG93T3BlbicsXHJcbiAgICAvLydQYWdlLmZyYW1lQ2xlYXJlZFNjaGVkdWxlZE5hdmlnYXRpb24nLFxyXG4gICAgLy8nUGFnZS5mcmFtZVNjaGVkdWxlZE5hdmlnYXRpb24nLFxyXG4gICAgLy8nUGFnZS5jb21waWxhdGlvbkNhY2hlUHJvZHVjZWQnLFxyXG4gICAgLy8nUGFnZS5kb3dubG9hZFByb2dyZXNzJyxcclxuICAgIC8vJ1BhZ2UuZG93bmxvYWRXaWxsQmVnaW4nLFxyXG4gICAgJ1BhZ2UuZnJhbWVSZXF1ZXN0ZWROYXZpZ2F0aW9uJyxcclxuICAgIC8vJ1BhZ2UuZnJhbWVSZXNpemVkJyxcclxuICAgICdQYWdlLmZyYW1lU3RhcnRlZExvYWRpbmcnLFxyXG4gICAgLy8nUGFnZS5mcmFtZVN0b3BwZWRMb2FkaW5nJyxcclxuICAgICdQYWdlLm5hdmlnYXRlZFdpdGhpbkRvY3VtZW50JyxcclxuICAgIC8vJ1BhZ2Uuc2NyZWVuY2FzdEZyYW1lJyxcclxuICAgIC8vJ1BhZ2Uuc2NyZWVuY2FzdFZpc2liaWxpdHlDaGFuZ2VkJyxcclxuICAgICdOZXR3b3JrLmRhdGFSZWNlaXZlZCcsXHJcbiAgICAvLydOZXR3b3JrLmV2ZW50U291cmNlTWVzc2FnZVJlY2VpdmVkJyxcclxuICAgICdOZXR3b3JrLmxvYWRpbmdGYWlsZWQnLFxyXG4gICAgJ05ldHdvcmsubG9hZGluZ0ZpbmlzaGVkJyxcclxuICAgICdOZXR3b3JrLnJlcXVlc3RTZXJ2ZWRGcm9tQ2FjaGUnLFxyXG4gICAgJ05ldHdvcmsucmVxdWVzdFdpbGxCZVNlbnQnLFxyXG4gICAgJ05ldHdvcmsucmVzcG9uc2VSZWNlaXZlZCcsXHJcbiAgICAvLydOZXR3b3JrLndlYlNvY2tldENsb3NlZCcsXHJcbiAgICAvLydOZXR3b3JrLndlYlNvY2tldENyZWF0ZWQnLFxyXG4gICAgLy8nTmV0d29yay53ZWJTb2NrZXRGcmFtZUVycm9yJyxcclxuICAgIC8vJ05ldHdvcmsud2ViU29ja2V0RnJhbWVSZWNlaXZlZCcsXHJcbiAgICAvLydOZXR3b3JrLndlYlNvY2tldEZyYW1lU2VudCcsXHJcbiAgICAvLydOZXR3b3JrLndlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlUmVjZWl2ZWQnLFxyXG4gICAgLy8nTmV0d29yay53ZWJTb2NrZXRXaWxsU2VuZEhhbmRzaGFrZVJlcXVlc3QnLFxyXG4gICAgJ05ldHdvcmsucmVxdWVzdFdpbGxCZVNlbnRFeHRyYUluZm8nLFxyXG4gICAgJ05ldHdvcmsucmVzb3VyY2VDaGFuZ2VkUHJpb3JpdHknLFxyXG4gICAgJ05ldHdvcmsucmVzcG9uc2VSZWNlaXZlZEV4dHJhSW5mbycsXHJcbiAgICAvLydOZXR3b3JrLnNpZ25lZEV4Y2hhbmdlUmVjZWl2ZWQnLFxyXG4gICAgLy8nTmV0d29yay5yZXF1ZXN0SW50ZXJjZXB0ZWQnXHJcbl07XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5ldHdvcmtTdWJNb2R1bGUgZXh0ZW5kcyBPeHlnZW5TdWJNb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3IobmFtZSwgcGFyZW50KSB7XHJcbiAgICAgICAgc3VwZXIobmFtZSwgcGFyZW50KTtcclxuICAgICAgICB0aGlzLl9kZXZUb29scyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fY29sbGVjdERhdGEgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9ldmVudHMgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0KGRldlRvb2xzKSB7XHJcbiAgICAgICAgaWYgKCFkZXZUb29scyB8fCAhdGhpcy5fcGFyZW50IHx8ICF0aGlzLl9wYXJlbnQuZ2V0RHJpdmVyIHx8IHR5cGVvZiB0aGlzLl9wYXJlbnQuZ2V0RHJpdmVyICE9PSAnZnVuY3Rpb24nIHx8ICF0aGlzLl9wYXJlbnQuZ2V0RHJpdmVyKCkpIHtcclxuICAgICAgICAgICAgc3VwZXIuaW5pdCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2RldlRvb2xzID0gZGV2VG9vbHM7XHJcbiAgICAgICAgdGhpcy5fZHJpdmVyID0gdGhpcy5fcGFyZW50LmdldERyaXZlcigpO1xyXG5cclxuICAgICAgICBvYnNlcnZlLmZvckVhY2gobWV0aG9kID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fZHJpdmVyLm9uKG1ldGhvZCwgcGFyYW1zID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb2xsZWN0RGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5wdXNoKHsgbWV0aG9kLCBwYXJhbXMgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzdXBlci5pbml0KCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGlzcG9zZSgpIHtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2RyaXZlcikge1xyXG5cclxuICAgICAgICAgICAgICAgIG9ic2VydmUuZm9yRWFjaChhc3luYyBtZXRob2QgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2RyaXZlci5yZW1vdmVMaXN0ZW5lcihtZXRob2QsICgpID0+IHt9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2RyaXZlci5lbWl0KCdOZXR3b3JrLmRpc2FibGUnKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2RyaXZlci5lbWl0KCdOZXR3b3JrLmNsb3NlJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9kZXZUb29scyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fZHJpdmVyID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9ldmVudHMgPSBbXTtcclxuICAgICAgICBzdXBlci5kaXNwb3NlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBCZWdpbiBjb2xsZWN0aW5nIG5ldHdvcmsgcmVxdWVzdHMuXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQW55IHByZXZpb3VzbHkgY29sbGVjdGVkIHJlcXVlc3RzIHdpbGwgYmUgZGlzY2FyZGVkLiBOZXR3b3JrIHJlcXVlc3QgY29sbGVjdGlvbiBpcyBzdXBwb3J0ZWQgb25seSBvbiBDaHJvbWUgNjMgYW5kIGxhdGVyLlxyXG4gICAgICogQGZ1bmN0aW9uIHN0YXJ0XHJcbiAgICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5bamF2YXNjcmlwdF0gVXNhZ2UgZXhhbXBsZTwvY2FwdGlvbj5cclxuICAgICAqIHdlYi5pbml0KCk7XHJcbiAgICAgKiB3ZWIubmV0d29yay5zdGFydCgpO1xyXG4gICAgICogd2ViLm9wZW4oXCJodHRwczovL3d3dy55b3Vyd2Vic2l0ZS5jb21cIik7XHJcbiAgICAgKiAvLyBwcmludCB0aGUgY29sbGVjdGVkIHJlcXVlc3Qgc28gZmFyOlxyXG4gICAgICogbGV0IHJlcXVlc3RzID0gd2ViLm5ldHdvcmsuZ2V0UmVxdWVzdHMoKTtcclxuICAgICAqIGZvciAobGV0IHJlcSBvZiByZXF1ZXN0cykge1xyXG4gICAgICogICBsb2cuaW5mbyhyZXEpO1xyXG4gICAgICogfVxyXG4gICAgICogLy8gd2FpdCBmb3IgYSByZXF1ZXN0IHVzaW5nIGEgdmVyYmF0aW0gVVJMIG1hdGNoOlxyXG4gICAgICogd2ViLm5ldHdvcmsud2FpdEZvclVybCgnaHR0cHM6Ly93d3cueW91cndlYnNpdGUuY29tL2Zvby9iYXInKTtcclxuICAgICAqIC8vIHdhaXQgZm9yIGEgcmVxdWVzdCB1c2luZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBVUkwgbWF0Y2g6XHJcbiAgICAgKiB3ZWIubmV0d29yay53YWl0Rm9yVXJsKC9odHRwczpcXC9cXC8uKlxcL2Zvb1xcL2Jhci8pO1xyXG4gICAgICogLy8gd2FpdCBmb3IgYSByZXF1ZXN0IHVzaW5nIGEgY3VzdG9tIG1hdGNoZXI6XHJcbiAgICAgKiB3ZWIubmV0d29yay53YWl0Rm9yKGZ1bmN0aW9uIChyZXF1ZXN0KSB7XHJcbiAgICAgKiAgIHJldHVybiByZXF1ZXN0LnN0YXR1c1RleHQgPT09ICdPSycgJiYgcmVxdWVzdC51cmwgPT09ICdodHRwczovL3d3dy55b3Vyd2Vic2l0ZS5jb20vZm9vL2Jhcic7XHJcbiAgICAgKiB9KTtcclxuICAgICAqL1xyXG4gICAgc3RhcnQoKSB7XHJcbiAgICAgICAgdGhpcy5fY29sbGVjdERhdGEgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2V2ZW50cyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgU3RvcCBjb2xsZWN0aW5nIG5ldHdvcmsgcmVxdWVzdHMuXHJcbiAgICAgKiBAZnVuY3Rpb24gc3RvcFxyXG4gICAgICovXHJcbiAgICBzdG9wKCkge1xyXG4gICAgICAgIHRoaXMuX2NvbGxlY3REYXRhID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm4gYWxsIHRoZSBjb2xsZWN0ZWQgbmV0d29yayByZXF1ZXN0cyBzbyBmYXIuXHJcbiAgICAgKiBAZnVuY3Rpb24gZ2V0UmVxdWVzdHNcclxuICAgICAqIEByZXR1cm4ge09iamVjdFtdfSBBcnJheSBjb250YWluaW5nIG5ldHdvcmsgcmVxdWVzdHMuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGdldFJlcXVlc3RzKCkge1xyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9nZXRFbnRyaWVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2dldEVudHJpZXMoKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgaGFyID0gaGFyRnJvbU1lc3NhZ2VzKHRoaXMuX2V2ZW50cyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoaGFyICYmIGhhci5sb2cgJiYgaGFyLmxvZy5lbnRyaWVzICYmIGhhci5sb2cuZW50cmllcy5tYXApIHtcclxuICAgICAgICAgICAgICAgIGhhci5sb2cuZW50cmllcy5yZXZlcnNlKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoaGFyLmxvZy5lbnRyaWVzLm1hcChhc3luYyAoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlQm9keSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlQm9keSA9IGF3YWl0IHRoaXMuX2RyaXZlci5jZHAoJ05ldHdvcmsnLCdnZXRSZXNwb25zZUJvZHknLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IGl0ZW0uX3JlcXVlc3RJZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBnZXRSZXNwb25zZUJvZHkgZXJyb3JzXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VCb2R5ICYmIHJlc3BvbnNlQm9keS5ib2R5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUJvZHkuYm9keSA9IEpTT04ucGFyc2UocmVzcG9uc2VCb2R5LmJvZHkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgcGFyc2UgZXJyb3JzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXF1ZXN0UG9zdERhdGEgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0UG9zdERhdGEgPSBhd2FpdCB0aGlzLl9kcml2ZXIuY2RwKCdOZXR3b3JrJywnZ2V0UmVxdWVzdFBvc3REYXRhJywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElkOiBpdGVtLl9yZXF1ZXN0SWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZ2V0UmVxdWVzdFBvc3REYXRhIGVycm9yc1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBpdGVtLnJlcXVlc3QudXJsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IGl0ZW0uX3JlcXVlc3RJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbS5yZXNwb25zZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VCb2R5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0UG9zdERhdGFcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgV2FpdCBmb3IgYSBuZXR3b3JrIHJlcXVlc3QgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCBVUkwuXHJcbiAgICAgKiBAZnVuY3Rpb24gd2FpdEZvclVybFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd8UmVnRXhwfSBwYXR0ZXJuIC0gQW4gVVJMIHRvIG1hdGNoIHZlcmJhdGltIG9yIGEgUmVnRXhwLlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXI9fSB0aW1lb3V0IC0gVGltZW91dC4gRGVmYXVsdCBpcyA2MCBzZWNvbmRzLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBOZXR3b3JrIHJlcXVlc3QgZGV0YWlscyBpZiB0aGUgbmV0d29yayByZXF1ZXN0IHdhcyBmb3VuZC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgd2FpdEZvclVybChwYXR0ZXJuLCB0aW1lb3V0ID0gNjAqMTAwMCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fZHJpdmVyIHx8ICF0aGlzLl9pc0luaXRpYWxpemVkIHx8ICF0aGlzLl9wYXJlbnQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SLCAnYG5ldHdvcmtgIG9yIGB3ZWJgIG1vZHVsZSBpcyBub3QgaW5pdGlhbGl6ZWQuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX2NvbGxlY3REYXRhKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiwgJ2BuZXR3b3JrLnN0YXJ0KClgIG11c3QgYmUgZXhlY3V0ZWQgcHJpb3IgdG8gdXNpbmcgYG5ldHdvcmtgIGNvbW1hbmRzLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcGFyZW50LmhlbHBlcnMuYXNzZXJ0QXJndW1lbnQocGF0dGVybiwgJ3BhdHRlcm4nKTtcclxuICAgICAgICB0aGlzLl9wYXJlbnQuaGVscGVycy5hc3NlcnRBcmd1bWVudFRpbWVvdXQodGltZW91dCwgJ3RpbWVvdXQnKTtcclxuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XHJcbiAgICAgICAgd2hpbGUgKERhdGUubm93KCkgLSBzdGFydCA8IHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgY29uc3QgbmV0d29ya1JlcXVlc3RzID0gYXdhaXQgdGhpcy5fZ2V0RW50cmllcygpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCByZXEgb2YgbmV0d29ya1JlcXVlc3RzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocGF0dGVybi5jb25zdHJ1Y3Rvci5uYW1lID09PSAnUmVnRXhwJyAmJiBwYXR0ZXJuLnRlc3QocmVxLnVybCkgfHwgcGF0dGVybiA9PT0gcmVxLnVybCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZHJpdmVyLnBhdXNlKDUwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuVElNRU9VVCwgYE5vIHJlcXVlc3QgbWF0Y2hpbmcgdGhlIFVSTCBcIiR7cGF0dGVybn1cIiB3YXMgZm91bmQuYCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBGYWlsIHRoZSB0ZXN0IGlmIHJlcXVlc3Qgd2l0aCBhIG1hdGNoaW5nIFVSTCB3YXMgcmVjZWl2ZWQgd2l0aGluIHRoZSBzcGVjaWZpZWQgdGltZSBmcmFtZS5cclxuICAgICAqIEBmdW5jdGlvbiB3YWl0Rm9yTm90VXJsXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xSZWdFeHB9IHBhdHRlcm4gLSBBbiBVUkwgdG8gbWF0Y2ggdmVyYmF0aW0gb3IgYSBSZWdFeHAuXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcj19IHRpbWVvdXQgLSBUaW1lb3V0LiBEZWZhdWx0IGlzIDYwIHNlY29uZHMuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHdhaXRGb3JOb3RVcmwocGF0dGVybiwgdGltZW91dCA9IDYwKjEwMDApIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2RyaXZlciB8fCAhdGhpcy5faXNJbml0aWFsaXplZCB8fCAhdGhpcy5fcGFyZW50KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiwgJ2BuZXR3b3JrYCBvciBgd2ViYCBtb2R1bGUgaXMgbm90IGluaXRpYWxpemVkLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9jb2xsZWN0RGF0YSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IsICdgbmV0d29yay5zdGFydCgpYCBtdXN0IGJlIGV4ZWN1dGVkIHByaW9yIHRvIHVzaW5nIGBuZXR3b3JrYCBjb21tYW5kcy4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3BhcmVudC5oZWxwZXJzLmFzc2VydEFyZ3VtZW50KHBhdHRlcm4sICdwYXR0ZXJuJyk7XHJcbiAgICAgICAgdGhpcy5fcGFyZW50LmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0KHRpbWVvdXQsICd0aW1lb3V0Jyk7XHJcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgIHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnQgPCB0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ldHdvcmtSZXF1ZXN0cyA9IGF3YWl0IHRoaXMuX2dldEVudHJpZXMoKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgcmVxIG9mIG5ldHdvcmtSZXF1ZXN0cykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhdHRlcm4uY29uc3RydWN0b3IubmFtZSA9PT0gJ1JlZ0V4cCcgJiYgcGF0dGVybi50ZXN0KHJlcS51cmwpIHx8IHBhdHRlcm4gPT09IHJlcS51cmwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlRJTUVPVVQsIGBBIHJlcXVlc3QgbWF0Y2hpbmcgdGhlIFVSTCBcIiR7cGF0dGVybn1cIiB3YXMgZm91bmQuYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZHJpdmVyLnBhdXNlKDUwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgV2FpdCBmb3IgYSBuZXR3b3JrIHJlcXVlc3QuXHJcbiAgICAgKiBAZnVuY3Rpb24gbmV0d29ya1dhaXRGb3JcclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IG1hdGNoZXIgLSBNYXRjaGluZyBmdW5jdGlvbi4gU2hvdWxkIHJldHVybiB0cnVlIG9uIG1hdGNoLCBvciBmYWxzZSBvdGhlcndpc2UuXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcj19IHRpbWVvdXQgLSBUaW1lb3V0LiBEZWZhdWx0IGlzIDYwIHNlY29uZHMuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IE5ldHdvcmsgcmVxdWVzdCBkZXRhaWxzIGlmIHRoZSBuZXR3b3JrIHJlcXVlc3Qgd2FzIGZvdW5kLlxyXG4gICAgICovXHJcbiAgICBhc3luYyB3YWl0Rm9yKG1hdGNoZXIsIHRpbWVvdXQgPSA2MCoxMDAwKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9kcml2ZXIgfHwgIXRoaXMuX2lzSW5pdGlhbGl6ZWQgfHwgIXRoaXMuX3BhcmVudCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IsICdgbmV0d29ya2AgbW9kdWxlIGlzIG5vdCBpbml0aWFsaXplZC4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fY29sbGVjdERhdGEpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SLCAnYHdlYi5uZXR3b3JrLnN0YXJ0KClgIG11c3QgYmUgZXhlY3V0ZWQgcHJpb3IgdG8gdXNpbmcgYG5ldHdvcmtgIGNvbW1hbmRzLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcGFyZW50LmhlbHBlcnMuYXNzZXJ0QXJndW1lbnQobWF0Y2hlciwgJ21hdGNoZXInKTtcclxuICAgICAgICB0aGlzLl9wYXJlbnQuaGVscGVycy5hc3NlcnRBcmd1bWVudFRpbWVvdXQodGltZW91dCwgJ3RpbWVvdXQnKTtcclxuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XHJcbiAgICAgICAgd2hpbGUgKERhdGUubm93KCkgLSBzdGFydCA8IHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgY29uc3QgbmV0d29ya1JlcXVlc3RzID0gYXdhaXQgdGhpcy5fZ2V0RW50cmllcygpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciByZXEgb2YgbmV0d29ya1JlcXVlc3RzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcihyZXEpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9kcml2ZXIucGF1c2UoNTAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5USU1FT1VULCAnTm8gcmVxdWVzdCBmb3VuZCB1c2luZyB0aGUgcHJvdmlkZWQgbWF0Y2hlci4nKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IEFzc2VydCBpZiBuZXR3b3JrIHJlcXVlc3QgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCBVUkwuXHJcbiAgICAgKiBAZnVuY3Rpb24gYXNzZXJ0VXJsXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xSZWdFeHB9IHVybCAtIEEgcmVxdWVzdCBVUkwgdG8gbWF0Y2ggdmVyYmF0aW0gb3IgYSBSZWdFeHAuXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcj19IHRpbWVvdXQgLSBUaW1lb3V0LiBEZWZhdWx0IGlzIDYwIHNlY29uZHMuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IE5ldHdvcmsgcmVxdWVzdCBkZXRhaWxzIGlmIHRoZSBuZXR3b3JrIHJlcXVlc3Qgd2FzIGZvdW5kLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBhc3NlcnRVcmwodXJsLCB0aW1lb3V0ID0gNjAqMTAwMCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fZHJpdmVyIHx8ICF0aGlzLl9pc0luaXRpYWxpemVkIHx8ICF0aGlzLl9wYXJlbnQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SLCAnYG5ldHdvcmtgIG9yIGB3ZWJgIG1vZHVsZSBpcyBub3QgaW5pdGlhbGl6ZWQuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX2NvbGxlY3REYXRhKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiwgJ2B3ZWIubmV0d29yay5zdGFydCgpYCBtdXN0IGJlIGV4ZWN1dGVkIHByaW9yIHRvIHVzaW5nIGBuZXR3b3JrYCBjb21tYW5kcy4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3BhcmVudC5oZWxwZXJzLmFzc2VydEFyZ3VtZW50KHVybCwgJ3VybCcpO1xyXG4gICAgICAgIHRoaXMuX3BhcmVudC5oZWxwZXJzLmFzc2VydEFyZ3VtZW50VGltZW91dCh0aW1lb3V0LCAndGltZW91dCcpO1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICB3aGlsZSAoRGF0ZS5ub3coKSAtIHN0YXJ0IDwgdGltZW91dCkge1xyXG4gICAgICAgICAgICBjb25zdCBuZXR3b3JrUmVxdWVzdHMgPSBhd2FpdCB0aGlzLl9nZXRFbnRyaWVzKCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHJlcSBvZiBuZXR3b3JrUmVxdWVzdHMpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1cmwuY29uc3RydWN0b3IubmFtZSA9PT0gJ1JlZ0V4cCcgJiYgdXJsLnRlc3QocmVxLnVybCkgfHwgdXJsID09PSByZXEudXJsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9kcml2ZXIucGF1c2UoNTAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfRVJST1IsIGBObyByZXF1ZXN0IG1hdGNoaW5nIHRoZSBVUkwgXCIke3VybH1cIiB3YXMgZm91bmQuYCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBBc3NlcnQgd2hldGhlciBIVFRQIHJlc3BvbnNlIHN0YXR1cyBjb2RlIG1hdGNoZXMgdGhlIHNwZWNpZmllZCB2YWx1ZS5cclxuICAgICAqIEBmdW5jdGlvbiBhc3NlcnRTdGF0dXNDb2RlXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xSZWdFeHB9IHVybCAtIEEgcmVxdWVzdCBVUkwgdG8gbWF0Y2ggdmVyYmF0aW0gb3IgYSBSZWdFeHAuXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gc3RhdHVzQ29kZSAtIEEgcmVzcG9uc2Ugc3RhdHVzIGNvZGUgdG8gbWF0Y2ggdmVyYmF0aW0gb3IgYSBSZWdFeHAuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGZhaWx1cmVNZXNzYWdlIC0gQW4gb3B0aW9uYWwgZmFpbHVyZSBtZXNzYWdlLlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXI9fSB0aW1lb3V0IC0gVGltZW91dC4gRGVmYXVsdCBpcyA2MCBzZWNvbmRzLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBOZXR3b3JrIHJlcXVlc3QgZGV0YWlscyBpZiB0aGUgbmV0d29yayByZXF1ZXN0IHdhcyBmb3VuZC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgYXNzZXJ0U3RhdHVzQ29kZSh1cmwsIHN0YXR1c0NvZGUsIGZhaWx1cmVNZXNzYWdlID0gbnVsbCwgdGltZW91dCA9IDYwKjEwMDApIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2RyaXZlciB8fCAhdGhpcy5faXNJbml0aWFsaXplZCB8fCAhdGhpcy5fcGFyZW50KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiwgJ2BuZXR3b3JrYCBvciBgd2ViYCBtb2R1bGUgaXMgbm90IGluaXRpYWxpemVkLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9jb2xsZWN0RGF0YSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IsICdgd2ViLm5ldHdvcmsuc3RhcnQoKWAgbXVzdCBiZSBleGVjdXRlZCBwcmlvciB0byB1c2luZyBgbmV0d29ya2AgY29tbWFuZHMuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9wYXJlbnQuaGVscGVycy5hc3NlcnRBcmd1bWVudCh1cmwsICd1cmwnKTtcclxuICAgICAgICB0aGlzLl9wYXJlbnQuaGVscGVycy5hc3NlcnRBcmd1bWVudChzdGF0dXNDb2RlLCAnc3RhdHVzQ29kZScpO1xyXG4gICAgICAgIHRoaXMuX3BhcmVudC5oZWxwZXJzLmFzc2VydEFyZ3VtZW50VGltZW91dCh0aW1lb3V0LCAndGltZW91dCcpO1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICBsZXQgbWF0Y2hlZFJlcSA9IG51bGw7XHJcbiAgICAgICAgd2hpbGUgKERhdGUubm93KCkgLSBzdGFydCA8IHRpbWVvdXQgJiYgIW1hdGNoZWRSZXEpIHtcclxuICAgICAgICAgICAgY29uc3QgbmV0d29ya1JlcXVlc3RzID0gYXdhaXQgdGhpcy5fZ2V0RW50cmllcygpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCByZXEgb2YgbmV0d29ya1JlcXVlc3RzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXJsLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdSZWdFeHAnICYmIHVybC50ZXN0KHJlcS51cmwpIHx8IHVybCA9PT0gcmVxLnVybCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoZWRSZXEgPSByZXE7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgIW1hdGNoZWRSZXEgJiYgYXdhaXQgdGhpcy5fZHJpdmVyLnBhdXNlKDUwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghbWF0Y2hlZFJlcSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkFTU0VSVF9FUlJPUiwgYE5vIHJlcXVlc3QgbWF0Y2hpbmcgdGhlIFVSTCBcIiR7dXJsfVwiIHdhcyBmb3VuZC5gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHN0YXR1c0NvZGUgIT09IG1hdGNoZWRSZXEuc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBmYWlsdXJlTWVzc2FnZSB8fCBgVGhlIGV4cGVjdGVkIHN0YXR1cyBjb2RlIFwiJHtzdGF0dXNDb2RlfVwiIGRvZXMgbm90IG1hdGNoIFwiJHttYXRjaGVkUmVxLnN0YXR1c31cIi5gO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkFTU0VSVF9FUlJPUiwgbWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgQXNzZXJ0IHdoZXRoZXIgSFRUUCByZXNwb25zZSBjb250ZW50IG1hdGNoZXMgdGhlIHNwZWNpZmllZCB2YWx1ZSBvciBwYXR0ZXJuLlxyXG4gICAgICogQGZ1bmN0aW9uIGFzc2VydFJlc3BvbnNlQ29udGVudFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd8UmVnRXhwfSB1cmwgLSBBIHJlcXVlc3QgVVJMIHRvIG1hdGNoIHZlcmJhdGltIG9yIGEgUmVnRXhwLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd8UmVnRXhwfSBjb250ZW50IC0gQSByZXNwb25zZSBib2R5IGNvbnRlbnQgdG8gbWF0Y2ggdmVyYmF0aW0gb3IgYSBSZWdFeHAuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGZhaWx1cmVNZXNzYWdlIC0gQW4gb3B0aW9uYWwgZmFpbHVyZSBtZXNzYWdlLlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXI9fSB0aW1lb3V0IC0gVGltZW91dC4gRGVmYXVsdCBpcyA2MCBzZWNvbmRzLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBOZXR3b3JrIHJlcXVlc3QgZGV0YWlscyBpZiB0aGUgbmV0d29yayByZXF1ZXN0IHdhcyBmb3VuZC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgYXNzZXJ0UmVzcG9uc2VDb250ZW50KHVybCwgY29udGVudCwgZmFpbHVyZU1lc3NhZ2UgPSBudWxsLCB0aW1lb3V0ID0gNjAqMTAwMCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fZHJpdmVyIHx8ICF0aGlzLl9pc0luaXRpYWxpemVkIHx8ICF0aGlzLl9wYXJlbnQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SLCAnYG5ldHdvcmtgIG9yIGB3ZWJgIG1vZHVsZSBpcyBub3QgaW5pdGlhbGl6ZWQuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX2NvbGxlY3REYXRhKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiwgJ2B3ZWIubmV0d29yay5zdGFydCgpYCBtdXN0IGJlIGV4ZWN1dGVkIHByaW9yIHRvIHVzaW5nIGBuZXR3b3JrYCBjb21tYW5kcy4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3BhcmVudC5oZWxwZXJzLmFzc2VydEFyZ3VtZW50KHVybCwgJ3VybCcpO1xyXG4gICAgICAgIHRoaXMuX3BhcmVudC5oZWxwZXJzLmFzc2VydEFyZ3VtZW50KGNvbnRlbnQsICdjb250ZW50Jyk7XHJcbiAgICAgICAgdGhpcy5fcGFyZW50LmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0KHRpbWVvdXQsICd0aW1lb3V0Jyk7XHJcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgIGxldCBtYXRjaGVkUmVxID0gbnVsbDtcclxuICAgICAgICB3aGlsZSAoRGF0ZS5ub3coKSAtIHN0YXJ0IDwgdGltZW91dCAmJiAhbWF0Y2hlZFJlcSkge1xyXG4gICAgICAgICAgICBjb25zdCBuZXR3b3JrUmVxdWVzdHMgPSBhd2FpdCB0aGlzLl9nZXRFbnRyaWVzKCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHJlcSBvZiBuZXR3b3JrUmVxdWVzdHMpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1cmwuY29uc3RydWN0b3IubmFtZSA9PT0gJ1JlZ0V4cCcgJiYgdXJsLnRlc3QocmVxLnVybCkgfHwgdXJsID09PSByZXEudXJsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZFJlcSA9IHJlcTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAhbWF0Y2hlZFJlcSAmJiBhd2FpdCB0aGlzLl9kcml2ZXIucGF1c2UoNTAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFtYXRjaGVkUmVxKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX0VSUk9SLCBgTm8gcmVxdWVzdCBtYXRjaGluZyB0aGUgVVJMIFwiJHt1cmx9XCIgd2FzIGZvdW5kLmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5fZHJpdmVyLmNkcCgnTmV0d29yaycsJ2dldFJlc3BvbnNlQm9keScsIHtcclxuICAgICAgICAgICAgcmVxdWVzdElkOiBtYXRjaGVkUmVxLnJlcXVlc3RJZFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChyZXNwICYmIHJlc3AuYm9keSAmJiAhcmVzcC5iYXNlNjRFbmNvZGVkKSB7XHJcbiAgICAgICAgICAgIGlmIChjb250ZW50LmNvbnN0cnVjdG9yLm5hbWUgPT09ICdSZWdFeHAnICYmIChjb250ZW50LnRlc3QocmVzcC5ib2R5KSB8fCByZXNwLmJvZHkuaW5kZXhPZihjb250ZW50KSA+IC0xKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gZmFpbHVyZU1lc3NhZ2UgfHwgYFJlc3BvbnNlIFwiJHt1cmx9XCIgYm9keSBjb250ZW50IGRvZXMgbm90IG1hdGNoIFwiJHtjb250ZW50fS5gO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfRVJST1IsIG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgU2V0cyBhIGxpc3Qgb2YgcmVxdWVzdCBVUkxzIHRvIGJlIGJsb2NrZWQgZnJvbSBsb2FkaW5nLlxyXG4gICAgICogQGZ1bmN0aW9uIGJsb2NrVXJsc1xyXG4gICAgICogQHBhcmFtIHtBcnJheTxTdHJpbmc+fSB1cmxzIC0gQSBsaXN0IG9mIFVSTHMgdGhhdCBtYXRjaCB0aGUgcmVxdWVzdHMgdG8gYmUgYmxvY2tlZC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgYmxvY2tVcmxzKHVybHMpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLl9kcml2ZXIuY2RwKCdOZXR3b3JrJywnc2V0QmxvY2tlZFVSTHMnLCB7XHJcbiAgICAgICAgICAgIHVybHNcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSJdfQ==
|
|
344
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9veF9zZXJ2aWNlcy9zZXJ2aWNlLWRldnRvb2xzL3N1Ym1vZHVsZS1uZXR3b3JrLmpzIl0sIm5hbWVzIjpbIm9ic2VydmUiLCJOZXR3b3JrU3ViTW9kdWxlIiwiT3h5Z2VuU3ViTW9kdWxlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwicGFyZW50IiwiX2RldlRvb2xzIiwiX2NvbGxlY3REYXRhIiwiX2V2ZW50cyIsImluaXQiLCJkZXZUb29scyIsIl9wYXJlbnQiLCJnZXREcml2ZXIiLCJfZHJpdmVyIiwiZm9yRWFjaCIsIm1ldGhvZCIsIm9uIiwicGFyYW1zIiwicHVzaCIsImRpc3Bvc2UiLCJyZW1vdmVMaXN0ZW5lciIsImVtaXQiLCJlIiwic3RhcnQiLCJzdG9wIiwiZ2V0UmVxdWVzdHMiLCJfZ2V0RW50cmllcyIsImhhciIsImxvZyIsImVudHJpZXMiLCJtYXAiLCJyZXZlcnNlIiwiUHJvbWlzZSIsImFsbCIsIml0ZW0iLCJyZXNwb25zZUJvZHkiLCJjZHAiLCJyZXF1ZXN0SWQiLCJfcmVxdWVzdElkIiwiYm9keSIsIkpTT04iLCJwYXJzZSIsInJlcXVlc3RQb3N0RGF0YSIsInVybCIsInJlcXVlc3QiLCJyZXNwb25zZSIsIndhaXRGb3JVcmwiLCJwYXR0ZXJuIiwidGltZW91dCIsIl9pc0luaXRpYWxpemVkIiwiT3hFcnJvciIsImVyckhlbHBlciIsImVycm9yQ29kZSIsIk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IiLCJoZWxwZXJzIiwiYXNzZXJ0QXJndW1lbnQiLCJhc3NlcnRBcmd1bWVudFRpbWVvdXQiLCJEYXRlIiwibm93IiwibmV0d29ya1JlcXVlc3RzIiwicmVxIiwidGVzdCIsInBhdXNlIiwiVElNRU9VVCIsIndhaXRGb3JOb3RVcmwiLCJ3YWl0Rm9yIiwibWF0Y2hlciIsImFzc2VydFVybCIsIkFTU0VSVF9FUlJPUiIsImFzc2VydFN0YXR1c0NvZGUiLCJzdGF0dXNDb2RlIiwiZmFpbHVyZU1lc3NhZ2UiLCJtYXRjaGVkUmVxIiwic3RhdHVzIiwibWVzc2FnZSIsImFzc2VydFJlc3BvbnNlQ29udGVudCIsImNvbnRlbnQiLCJyZXNwIiwiYmFzZTY0RW5jb2RlZCIsImluZGV4T2YiLCJibG9ja1VybHMiLCJ1cmxzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFZQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUdBLE1BQU1BLE9BQU8sR0FBRyxDQUNaLDJCQURZLEVBR1osb0JBSFksRUFXWixxQkFYWSxFQWtCWiwrQkFsQlksRUFvQlosMEJBcEJZLEVBc0JaLDhCQXRCWSxFQXlCWixzQkF6QlksRUEyQlosdUJBM0JZLEVBNEJaLHlCQTVCWSxFQTZCWixnQ0E3QlksRUE4QlosMkJBOUJZLEVBK0JaLDBCQS9CWSxFQXVDWixvQ0F2Q1ksRUF3Q1osaUNBeENZLEVBeUNaLG1DQXpDWSxDQUFoQjs7QUE2Q2UsTUFBTUMsZ0JBQU4sU0FBK0JDLGdDQUEvQixDQUErQztBQUMxREMsRUFBQUEsV0FBVyxDQUFDQyxJQUFELEVBQU9DLE1BQVAsRUFBZTtBQUN0QixVQUFNRCxJQUFOLEVBQVlDLE1BQVo7QUFDQSxTQUFLQyxTQUFMLEdBQWlCLElBQWpCO0FBQ0EsU0FBS0MsWUFBTCxHQUFvQixLQUFwQjtBQUNBLFNBQUtDLE9BQUwsR0FBZSxFQUFmO0FBQ0g7O0FBRURDLEVBQUFBLElBQUksQ0FBQ0MsUUFBRCxFQUFXO0FBQ1gsUUFBSSxDQUFDQSxRQUFELElBQWEsQ0FBQyxLQUFLQyxPQUFuQixJQUE4QixDQUFDLEtBQUtBLE9BQUwsQ0FBYUMsU0FBNUMsSUFBeUQsT0FBTyxLQUFLRCxPQUFMLENBQWFDLFNBQXBCLEtBQWtDLFVBQTNGLElBQXlHLENBQUMsS0FBS0QsT0FBTCxDQUFhQyxTQUFiLEVBQTlHLEVBQXdJO0FBQ3BJLFlBQU1ILElBQU47QUFDQSxhQUFPLEtBQVA7QUFDSDs7QUFDRCxTQUFLSCxTQUFMLEdBQWlCSSxRQUFqQjtBQUNBLFNBQUtHLE9BQUwsR0FBZSxLQUFLRixPQUFMLENBQWFDLFNBQWIsRUFBZjtBQUVB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LENBQUMsQ0FBbkcsQ0FBSixFQUEyRztBQUN2RyxlQUFPLElBQVA7QUFDSCxPQUZELE1BR0s7QUFDRCxjQUFNRixPQUFPLEdBQUdILGNBQWMsSUFBSyxhQUFZNUIsR0FBSSxrQ0FBaUNpQyxPQUFRLEdBQTVGO0FBQ0EsY0FBTSxJQUFJMUIsb0JBQUosQ0FBWUMsZ0JBQVVDLFNBQVYsQ0FBb0JnQixZQUFoQyxFQUE4Q00sT0FBOUMsQ0FBTjtBQUNIO0FBQ0o7QUFDSjs7QUFPYyxRQUFUTSxTQUFTLENBQUNDLElBQUQsRUFBTztBQUNsQixVQUFNLEtBQUtwRSxPQUFMLENBQWF1QixHQUFiLENBQWlCLFNBQWpCLEVBQTJCLGdCQUEzQixFQUE2QztBQUMvQzZDLE1BQUFBO0FBRCtDLEtBQTdDLENBQU47QUFHSDs7QUFqWHlEIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqL1xuXG4vKipcbiAqIFByb3ZpZGVzIG1ldGhvZHMgZm9yIG1vbml0b3JpbmcgYW5kIGFuYWx5emluZyBDaHJvbWUgYnJvd3NlciBuZXR3b3JrIGFjdGl2aXRpZXMuXG4qL1xuaW1wb3J0IHsgT3h5Z2VuU3ViTW9kdWxlIH0gZnJvbSAnLi4vLi4vY29yZS9PeHlnZW5TdWJNb2R1bGUnO1xuaW1wb3J0IHsgaGFyRnJvbU1lc3NhZ2VzIH0gZnJvbSAnY2hyb21lLWhhcic7XG5pbXBvcnQgZXJySGVscGVyIGZyb20gJy4uLy4uL2Vycm9ycy9oZWxwZXInO1xuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi4vLi4vZXJyb3JzL094eWdlbkVycm9yJztcblxuLy8gYmVsb3cgYXJlIHRoZSBldmVudHMgdGhhdCBuZWVkIHRvIGJlIG9ic2VydmVkIGZvciBcImNocm9tZS1oYXJcIiBtb2R1bGUgdG8gZ2VuZXJhdGUgYSBwcm9wZXIgSEFSIGZpbGVcbmNvbnN0IG9ic2VydmUgPSBbXG4gICAgJ1BhZ2UuZG9tQ29udGVudEV2ZW50RmlyZWQnLFxuICAgIC8vJ1BhZ2UuZmlsZUNob29zZXJPcGVuZWQnLFxuICAgICdQYWdlLmZyYW1lQXR0YWNoZWQnLFxuICAgIC8vJ1BhZ2UuZnJhbWVEZXRhY2hlZCcsXG4gICAgLy8nUGFnZS5mcmFtZU5hdmlnYXRlZCcsXG4gICAgLy8nUGFnZS5pbnRlcnN0aXRpYWxIaWRkZW4nLFxuICAgIC8vJ1BhZ2UuaW50ZXJzdGl0aWFsU2hvd24nLFxuICAgIC8vJ1BhZ2UuamF2YXNjcmlwdERpYWxvZ0Nsb3NlZCcsXG4gICAgLy8nUGFnZS5qYXZhc2NyaXB0RGlhbG9nT3BlbmluZycsXG4gICAgLy8nUGFnZS5saWZlY3ljbGVFdmVudCcsXG4gICAgJ1BhZ2UubG9hZEV2ZW50RmlyZWQnLFxuICAgIC8vJ1BhZ2Uud2luZG93T3BlbicsXG4gICAgLy8nUGFnZS5mcmFtZUNsZWFyZWRTY2hlZHVsZWROYXZpZ2F0aW9uJyxcbiAgICAvLydQYWdlLmZyYW1lU2NoZWR1bGVkTmF2aWdhdGlvbicsXG4gICAgLy8nUGFnZS5jb21waWxhdGlvbkNhY2hlUHJvZHVjZWQnLFxuICAgIC8vJ1BhZ2UuZG93bmxvYWRQcm9ncmVzcycsXG4gICAgLy8nUGFnZS5kb3dubG9hZFdpbGxCZWdpbicsXG4gICAgJ1BhZ2UuZnJhbWVSZXF1ZXN0ZWROYXZpZ2F0aW9uJyxcbiAgICAvLydQYWdlLmZyYW1lUmVzaXplZCcsXG4gICAgJ1BhZ2UuZnJhbWVTdGFydGVkTG9hZGluZycsXG4gICAgLy8nUGFnZS5mcmFtZVN0b3BwZWRMb2FkaW5nJyxcbiAgICAnUGFnZS5uYXZpZ2F0ZWRXaXRoaW5Eb2N1bWVudCcsXG4gICAgLy8nUGFnZS5zY3JlZW5jYXN0RnJhbWUnLFxuICAgIC8vJ1BhZ2Uuc2NyZWVuY2FzdFZpc2liaWxpdHlDaGFuZ2VkJyxcbiAgICAnTmV0d29yay5kYXRhUmVjZWl2ZWQnLFxuICAgIC8vJ05ldHdvcmsuZXZlbnRTb3VyY2VNZXNzYWdlUmVjZWl2ZWQnLFxuICAgICdOZXR3b3JrLmxvYWRpbmdGYWlsZWQnLFxuICAgICdOZXR3b3JrLmxvYWRpbmdGaW5pc2hlZCcsXG4gICAgJ05ldHdvcmsucmVxdWVzdFNlcnZlZEZyb21DYWNoZScsXG4gICAgJ05ldHdvcmsucmVxdWVzdFdpbGxCZVNlbnQnLFxuICAgICdOZXR3b3JrLnJlc3BvbnNlUmVjZWl2ZWQnLFxuICAgIC8vJ05ldHdvcmsud2ViU29ja2V0Q2xvc2VkJyxcbiAgICAvLydOZXR3b3JrLndlYlNvY2tldENyZWF0ZWQnLFxuICAgIC8vJ05ldHdvcmsud2ViU29ja2V0RnJhbWVFcnJvcicsXG4gICAgLy8nTmV0d29yay53ZWJTb2NrZXRGcmFtZVJlY2VpdmVkJyxcbiAgICAvLydOZXR3b3JrLndlYlNvY2tldEZyYW1lU2VudCcsXG4gICAgLy8nTmV0d29yay53ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZVJlY2VpdmVkJyxcbiAgICAvLydOZXR3b3JrLndlYlNvY2tldFdpbGxTZW5kSGFuZHNoYWtlUmVxdWVzdCcsXG4gICAgJ05ldHdvcmsucmVxdWVzdFdpbGxCZVNlbnRFeHRyYUluZm8nLFxuICAgICdOZXR3b3JrLnJlc291cmNlQ2hhbmdlZFByaW9yaXR5JyxcbiAgICAnTmV0d29yay5yZXNwb25zZVJlY2VpdmVkRXh0cmFJbmZvJyxcbiAgICAvLydOZXR3b3JrLnNpZ25lZEV4Y2hhbmdlUmVjZWl2ZWQnLFxuICAgIC8vJ05ldHdvcmsucmVxdWVzdEludGVyY2VwdGVkJ1xuXTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5ldHdvcmtTdWJNb2R1bGUgZXh0ZW5kcyBPeHlnZW5TdWJNb2R1bGUge1xuICAgIGNvbnN0cnVjdG9yKG5hbWUsIHBhcmVudCkge1xuICAgICAgICBzdXBlcihuYW1lLCBwYXJlbnQpO1xuICAgICAgICB0aGlzLl9kZXZUb29scyA9IG51bGw7XG4gICAgICAgIHRoaXMuX2NvbGxlY3REYXRhID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2V2ZW50cyA9IFtdO1xuICAgIH1cblxuICAgIGluaXQoZGV2VG9vbHMpIHtcbiAgICAgICAgaWYgKCFkZXZUb29scyB8fCAhdGhpcy5fcGFyZW50IHx8ICF0aGlzLl9wYXJlbnQuZ2V0RHJpdmVyIHx8IHR5cGVvZiB0aGlzLl9wYXJlbnQuZ2V0RHJpdmVyICE9PSAnZnVuY3Rpb24nIHx8ICF0aGlzLl9wYXJlbnQuZ2V0RHJpdmVyKCkpIHtcbiAgICAgICAgICAgIHN1cGVyLmluaXQoKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kZXZUb29scyA9IGRldlRvb2xzO1xuICAgICAgICB0aGlzLl9kcml2ZXIgPSB0aGlzLl9wYXJlbnQuZ2V0RHJpdmVyKCk7XG5cbiAgICAgICAgb2JzZXJ2ZS5mb3JFYWNoKG1ldGhvZCA9PiB7XG4gICAgICAgICAgICB0aGlzLl9kcml2ZXIub24obWV0aG9kLCBwYXJhbXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb2xsZWN0RGF0YSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMucHVzaCh7IG1ldGhvZCwgcGFyYW1zIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBzdXBlci5pbml0KCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGFzeW5jIGRpc3Bvc2UoKSB7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9kcml2ZXIpIHtcblxuICAgICAgICAgICAgICAgIG9ic2VydmUuZm9yRWFjaChhc3luYyBtZXRob2QgPT4ge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9kcml2ZXIucmVtb3ZlTGlzdGVuZXIobWV0aG9kLCAoKSA9PiB7fSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9kcml2ZXIuZW1pdCgnTmV0d29yay5kaXNhYmxlJyk7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fZHJpdmVyLmVtaXQoJ05ldHdvcmsuY2xvc2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gaWdub3JlIGVycm9ycztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2RldlRvb2xzID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZHJpdmVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZXZlbnRzID0gW107XG4gICAgICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBCZWdpbiBjb2xsZWN0aW5nIG5ldHdvcmsgcmVxdWVzdHMuXG4gICAgICogQGRlc2NyaXB0aW9uIEFueSBwcmV2aW91c2x5IGNvbGxlY3RlZCByZXF1ZXN0cyB3aWxsIGJlIGRpc2NhcmRlZC4gTmV0d29yayByZXF1ZXN0IGNvbGxlY3Rpb24gaXMgc3VwcG9ydGVkIG9ubHkgb24gQ2hyb21lIDYzIGFuZCBsYXRlci5cbiAgICAgKiBAZnVuY3Rpb24gc3RhcnRcbiAgICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5bamF2YXNjcmlwdF0gVXNhZ2UgZXhhbXBsZTwvY2FwdGlvbj5cbiAgICAgKiB3ZWIuaW5pdCgpO1xuICAgICAqIHdlYi5uZXR3b3JrLnN0YXJ0KCk7XG4gICAgICogd2ViLm9wZW4oXCJodHRwczovL3d3dy55b3Vyd2Vic2l0ZS5jb21cIik7XG4gICAgICogLy8gcHJpbnQgdGhlIGNvbGxlY3RlZCByZXF1ZXN0IHNvIGZhcjpcbiAgICAgKiBsZXQgcmVxdWVzdHMgPSB3ZWIubmV0d29yay5nZXRSZXF1ZXN0cygpO1xuICAgICAqIGZvciAobGV0IHJlcSBvZiByZXF1ZXN0cykge1xuICAgICAqICAgbG9nLmluZm8ocmVxKTtcbiAgICAgKiB9XG4gICAgICogLy8gd2FpdCBmb3IgYSByZXF1ZXN0IHVzaW5nIGEgdmVyYmF0aW0gVVJMIG1hdGNoOlxuICAgICAqIHdlYi5uZXR3b3JrLndhaXRGb3JVcmwoJ2h0dHBzOi8vd3d3LnlvdXJ3ZWJzaXRlLmNvbS9mb28vYmFyJyk7XG4gICAgICogLy8gd2FpdCBmb3IgYSByZXF1ZXN0IHVzaW5nIGEgcmVndWxhciBleHByZXNzaW9uIFVSTCBtYXRjaDpcbiAgICAgKiB3ZWIubmV0d29yay53YWl0Rm9yVXJsKC9odHRwczpcXC9cXC8uKlxcL2Zvb1xcL2Jhci8pO1xuICAgICAqIC8vIHdhaXQgZm9yIGEgcmVxdWVzdCB1c2luZyBhIGN1c3RvbSBtYXRjaGVyOlxuICAgICAqIHdlYi5uZXR3b3JrLndhaXRGb3IoZnVuY3Rpb24gKHJlcXVlc3QpIHtcbiAgICAgKiAgIHJldHVybiByZXF1ZXN0LnN0YXR1c1RleHQgPT09ICdPSycgJiYgcmVxdWVzdC51cmwgPT09ICdodHRwczovL3d3dy55b3Vyd2Vic2l0ZS5jb20vZm9vL2Jhcic7XG4gICAgICogfSk7XG4gICAgICovXG4gICAgc3RhcnQoKSB7XG4gICAgICAgIHRoaXMuX2NvbGxlY3REYXRhID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fZXZlbnRzID0gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgU3RvcCBjb2xsZWN0aW5nIG5ldHdvcmsgcmVxdWVzdHMuXG4gICAgICogQGZ1bmN0aW9uIHN0b3BcbiAgICAgKi9cbiAgICBzdG9wKCkge1xuICAgICAgICB0aGlzLl9jb2xsZWN0RGF0YSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5IFJldHVybiBhbGwgdGhlIGNvbGxlY3RlZCBuZXR3b3JrIHJlcXVlc3RzIHNvIGZhci5cbiAgICAgKiBAZnVuY3Rpb24gZ2V0UmVxdWVzdHNcbiAgICAgKiBAcmV0dXJuIHtPYmplY3RbXX0gQXJyYXkgY29udGFpbmluZyBuZXR3b3JrIHJlcXVlc3RzLlxuICAgICAqL1xuICAgIGFzeW5jIGdldFJlcXVlc3RzKCkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fZ2V0RW50cmllcygpO1xuICAgIH1cblxuICAgIGFzeW5jIF9nZXRFbnRyaWVzKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgaGFyID0gaGFyRnJvbU1lc3NhZ2VzKHRoaXMuX2V2ZW50cyk7XG5cbiAgICAgICAgICAgIGlmIChoYXIgJiYgaGFyLmxvZyAmJiBoYXIubG9nLmVudHJpZXMgJiYgaGFyLmxvZy5lbnRyaWVzLm1hcCkge1xuICAgICAgICAgICAgICAgIGhhci5sb2cuZW50cmllcy5yZXZlcnNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKGhhci5sb2cuZW50cmllcy5tYXAoYXN5bmMgKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZUJvZHkgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlQm9keSA9IGF3YWl0IHRoaXMuX2RyaXZlci5jZHAoJ05ldHdvcmsnLCdnZXRSZXNwb25zZUJvZHknLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElkOiBpdGVtLl9yZXF1ZXN0SWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZ2V0UmVzcG9uc2VCb2R5IGVycm9yc1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlQm9keSAmJiByZXNwb25zZUJvZHkuYm9keSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUJvZHkuYm9keSA9IEpTT04ucGFyc2UocmVzcG9uc2VCb2R5LmJvZHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBwYXJzZSBlcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXF1ZXN0UG9zdERhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQb3N0RGF0YSA9IGF3YWl0IHRoaXMuX2RyaXZlci5jZHAoJ05ldHdvcmsnLCdnZXRSZXF1ZXN0UG9zdERhdGEnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElkOiBpdGVtLl9yZXF1ZXN0SWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZ2V0UmVxdWVzdFBvc3REYXRhIGVycm9yc1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGl0ZW0ucmVxdWVzdC51cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IGl0ZW0uX3JlcXVlc3RJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0ucmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUJvZHksXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0UG9zdERhdGFcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgV2FpdCBmb3IgYSBuZXR3b3JrIHJlcXVlc3QgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCBVUkwuXG4gICAgICogQGZ1bmN0aW9uIHdhaXRGb3JVcmxcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xSZWdFeHB9IHBhdHRlcm4gLSBBbiBVUkwgdG8gbWF0Y2ggdmVyYmF0aW0gb3IgYSBSZWdFeHAuXG4gICAgICogQHBhcmFtIHtOdW1iZXI9fSB0aW1lb3V0IC0gVGltZW91dC4gRGVmYXVsdCBpcyA2MCBzZWNvbmRzLlxuICAgICAqIEByZXR1cm4ge09iamVjdH0gTmV0d29yayByZXF1ZXN0IGRldGFpbHMgaWYgdGhlIG5ldHdvcmsgcmVxdWVzdCB3YXMgZm91bmQuXG4gICAgICovXG4gICAgYXN5bmMgd2FpdEZvclVybChwYXR0ZXJuLCB0aW1lb3V0ID0gNjAqMTAwMCkge1xuICAgICAgICBpZiAoIXRoaXMuX2RyaXZlciB8fCAhdGhpcy5faXNJbml0aWFsaXplZCB8fCAhdGhpcy5fcGFyZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IsICdgbmV0d29ya2Agb3IgYHdlYmAgbW9kdWxlIGlzIG5vdCBpbml0aWFsaXplZC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fY29sbGVjdERhdGEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiwgJ2BuZXR3b3JrLnN0YXJ0KClgIG11c3QgYmUgZXhlY3V0ZWQgcHJpb3IgdG8gdXNpbmcgYG5ldHdvcmtgIGNvbW1hbmRzLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcGFyZW50LmhlbHBlcnMuYXNzZXJ0QXJndW1lbnQocGF0dGVybiwgJ3BhdHRlcm4nKTtcbiAgICAgICAgdGhpcy5fcGFyZW50LmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0KHRpbWVvdXQsICd0aW1lb3V0Jyk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgd2hpbGUgKERhdGUubm93KCkgLSBzdGFydCA8IHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ldHdvcmtSZXF1ZXN0cyA9IGF3YWl0IHRoaXMuX2dldEVudHJpZXMoKTtcbiAgICAgICAgICAgIGZvciAobGV0IHJlcSBvZiBuZXR3b3JrUmVxdWVzdHMpIHtcbiAgICAgICAgICAgICAgICBpZiAocGF0dGVybi5jb25zdHJ1Y3Rvci5uYW1lID09PSAnUmVnRXhwJyAmJiBwYXR0ZXJuLnRlc3QocmVxLnVybCkgfHwgcGF0dGVybiA9PT0gcmVxLnVybCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2RyaXZlci5wYXVzZSg1MDApO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuVElNRU9VVCwgYE5vIHJlcXVlc3QgbWF0Y2hpbmcgdGhlIFVSTCBcIiR7cGF0dGVybn1cIiB3YXMgZm91bmQuYCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgRmFpbCB0aGUgdGVzdCBpZiByZXF1ZXN0IHdpdGggYSBtYXRjaGluZyBVUkwgd2FzIHJlY2VpdmVkIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHRpbWUgZnJhbWUuXG4gICAgICogQGZ1bmN0aW9uIHdhaXRGb3JOb3RVcmxcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xSZWdFeHB9IHBhdHRlcm4gLSBBbiBVUkwgdG8gbWF0Y2ggdmVyYmF0aW0gb3IgYSBSZWdFeHAuXG4gICAgICogQHBhcmFtIHtOdW1iZXI9fSB0aW1lb3V0IC0gVGltZW91dC4gRGVmYXVsdCBpcyA2MCBzZWNvbmRzLlxuICAgICAqL1xuICAgIGFzeW5jIHdhaXRGb3JOb3RVcmwocGF0dGVybiwgdGltZW91dCA9IDYwKjEwMDApIHtcbiAgICAgICAgaWYgKCF0aGlzLl9kcml2ZXIgfHwgIXRoaXMuX2lzSW5pdGlhbGl6ZWQgfHwgIXRoaXMuX3BhcmVudCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SLCAnYG5ldHdvcmtgIG9yIGB3ZWJgIG1vZHVsZSBpcyBub3QgaW5pdGlhbGl6ZWQuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX2NvbGxlY3REYXRhKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IsICdgbmV0d29yay5zdGFydCgpYCBtdXN0IGJlIGV4ZWN1dGVkIHByaW9yIHRvIHVzaW5nIGBuZXR3b3JrYCBjb21tYW5kcy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3BhcmVudC5oZWxwZXJzLmFzc2VydEFyZ3VtZW50KHBhdHRlcm4sICdwYXR0ZXJuJyk7XG4gICAgICAgIHRoaXMuX3BhcmVudC5oZWxwZXJzLmFzc2VydEFyZ3VtZW50VGltZW91dCh0aW1lb3V0LCAndGltZW91dCcpO1xuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgIHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnQgPCB0aW1lb3V0KSB7XG4gICAgICAgICAgICBjb25zdCBuZXR3b3JrUmVxdWVzdHMgPSBhd2FpdCB0aGlzLl9nZXRFbnRyaWVzKCk7XG4gICAgICAgICAgICBmb3IgKGxldCByZXEgb2YgbmV0d29ya1JlcXVlc3RzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhdHRlcm4uY29uc3RydWN0b3IubmFtZSA9PT0gJ1JlZ0V4cCcgJiYgcGF0dGVybi50ZXN0KHJlcS51cmwpIHx8IHBhdHRlcm4gPT09IHJlcS51cmwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5USU1FT1VULCBgQSByZXF1ZXN0IG1hdGNoaW5nIHRoZSBVUkwgXCIke3BhdHRlcm59XCIgd2FzIGZvdW5kLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2RyaXZlci5wYXVzZSg1MDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgV2FpdCBmb3IgYSBuZXR3b3JrIHJlcXVlc3QuXG4gICAgICogQGZ1bmN0aW9uIG5ldHdvcmtXYWl0Rm9yXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gbWF0Y2hlciAtIE1hdGNoaW5nIGZ1bmN0aW9uLiBTaG91bGQgcmV0dXJuIHRydWUgb24gbWF0Y2gsIG9yIGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKiBAcGFyYW0ge051bWJlcj19IHRpbWVvdXQgLSBUaW1lb3V0LiBEZWZhdWx0IGlzIDYwIHNlY29uZHMuXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBOZXR3b3JrIHJlcXVlc3QgZGV0YWlscyBpZiB0aGUgbmV0d29yayByZXF1ZXN0IHdhcyBmb3VuZC5cbiAgICAgKi9cbiAgICBhc3luYyB3YWl0Rm9yKG1hdGNoZXIsIHRpbWVvdXQgPSA2MCoxMDAwKSB7XG4gICAgICAgIGlmICghdGhpcy5fZHJpdmVyIHx8ICF0aGlzLl9pc0luaXRpYWxpemVkIHx8ICF0aGlzLl9wYXJlbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiwgJ2BuZXR3b3JrYCBtb2R1bGUgaXMgbm90IGluaXRpYWxpemVkLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9jb2xsZWN0RGF0YSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SLCAnYHdlYi5uZXR3b3JrLnN0YXJ0KClgIG11c3QgYmUgZXhlY3V0ZWQgcHJpb3IgdG8gdXNpbmcgYG5ldHdvcmtgIGNvbW1hbmRzLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcGFyZW50LmhlbHBlcnMuYXNzZXJ0QXJndW1lbnQobWF0Y2hlciwgJ21hdGNoZXInKTtcbiAgICAgICAgdGhpcy5fcGFyZW50LmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0KHRpbWVvdXQsICd0aW1lb3V0Jyk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgd2hpbGUgKERhdGUubm93KCkgLSBzdGFydCA8IHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ldHdvcmtSZXF1ZXN0cyA9IGF3YWl0IHRoaXMuX2dldEVudHJpZXMoKTtcbiAgICAgICAgICAgIGZvciAodmFyIHJlcSBvZiBuZXR3b3JrUmVxdWVzdHMpIHtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcihyZXEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZHJpdmVyLnBhdXNlKDUwMCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5USU1FT1VULCAnTm8gcmVxdWVzdCBmb3VuZCB1c2luZyB0aGUgcHJvdmlkZWQgbWF0Y2hlci4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBBc3NlcnQgaWYgbmV0d29yayByZXF1ZXN0IG1hdGNoaW5nIHRoZSBzcGVjaWZpZWQgVVJMLlxuICAgICAqIEBmdW5jdGlvbiBhc3NlcnRVcmxcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xSZWdFeHB9IHVybCAtIEEgcmVxdWVzdCBVUkwgdG8gbWF0Y2ggdmVyYmF0aW0gb3IgYSBSZWdFeHAuXG4gICAgICogQHBhcmFtIHtOdW1iZXI9fSB0aW1lb3V0IC0gVGltZW91dC4gRGVmYXVsdCBpcyA2MCBzZWNvbmRzLlxuICAgICAqIEByZXR1cm4ge09iamVjdH0gTmV0d29yayByZXF1ZXN0IGRldGFpbHMgaWYgdGhlIG5ldHdvcmsgcmVxdWVzdCB3YXMgZm91bmQuXG4gICAgICovXG4gICAgYXN5bmMgYXNzZXJ0VXJsKHVybCwgdGltZW91dCA9IDYwKjEwMDApIHtcbiAgICAgICAgaWYgKCF0aGlzLl9kcml2ZXIgfHwgIXRoaXMuX2lzSW5pdGlhbGl6ZWQgfHwgIXRoaXMuX3BhcmVudCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SLCAnYG5ldHdvcmtgIG9yIGB3ZWJgIG1vZHVsZSBpcyBub3QgaW5pdGlhbGl6ZWQuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX2NvbGxlY3REYXRhKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IsICdgd2ViLm5ldHdvcmsuc3RhcnQoKWAgbXVzdCBiZSBleGVjdXRlZCBwcmlvciB0byB1c2luZyBgbmV0d29ya2AgY29tbWFuZHMuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wYXJlbnQuaGVscGVycy5hc3NlcnRBcmd1bWVudCh1cmwsICd1cmwnKTtcbiAgICAgICAgdGhpcy5fcGFyZW50LmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0KHRpbWVvdXQsICd0aW1lb3V0Jyk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgd2hpbGUgKERhdGUubm93KCkgLSBzdGFydCA8IHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ldHdvcmtSZXF1ZXN0cyA9IGF3YWl0IHRoaXMuX2dldEVudHJpZXMoKTtcbiAgICAgICAgICAgIGZvciAobGV0IHJlcSBvZiBuZXR3b3JrUmVxdWVzdHMpIHtcbiAgICAgICAgICAgICAgICBpZiAodXJsLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdSZWdFeHAnICYmIHVybC50ZXN0KHJlcS51cmwpIHx8IHVybCA9PT0gcmVxLnVybCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2RyaXZlci5wYXVzZSg1MDApO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX0VSUk9SLCBgTm8gcmVxdWVzdCBtYXRjaGluZyB0aGUgVVJMIFwiJHt1cmx9XCIgd2FzIGZvdW5kLmApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5IEFzc2VydCB3aGV0aGVyIEhUVFAgcmVzcG9uc2Ugc3RhdHVzIGNvZGUgbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIHZhbHVlLlxuICAgICAqIEBmdW5jdGlvbiBhc3NlcnRTdGF0dXNDb2RlXG4gICAgICogQHBhcmFtIHtTdHJpbmd8UmVnRXhwfSB1cmwgLSBBIHJlcXVlc3QgVVJMIHRvIG1hdGNoIHZlcmJhdGltIG9yIGEgUmVnRXhwLlxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBzdGF0dXNDb2RlIC0gQSByZXNwb25zZSBzdGF0dXMgY29kZSB0byBtYXRjaCB2ZXJiYXRpbSBvciBhIFJlZ0V4cC5cbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGZhaWx1cmVNZXNzYWdlIC0gQW4gb3B0aW9uYWwgZmFpbHVyZSBtZXNzYWdlLlxuICAgICAqIEBwYXJhbSB7TnVtYmVyPX0gdGltZW91dCAtIFRpbWVvdXQuIERlZmF1bHQgaXMgNjAgc2Vjb25kcy5cbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IE5ldHdvcmsgcmVxdWVzdCBkZXRhaWxzIGlmIHRoZSBuZXR3b3JrIHJlcXVlc3Qgd2FzIGZvdW5kLlxuICAgICAqL1xuICAgIGFzeW5jIGFzc2VydFN0YXR1c0NvZGUodXJsLCBzdGF0dXNDb2RlLCBmYWlsdXJlTWVzc2FnZSA9IG51bGwsIHRpbWVvdXQgPSA2MCoxMDAwKSB7XG4gICAgICAgIGlmICghdGhpcy5fZHJpdmVyIHx8ICF0aGlzLl9pc0luaXRpYWxpemVkIHx8ICF0aGlzLl9wYXJlbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiwgJ2BuZXR3b3JrYCBvciBgd2ViYCBtb2R1bGUgaXMgbm90IGluaXRpYWxpemVkLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9jb2xsZWN0RGF0YSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SLCAnYHdlYi5uZXR3b3JrLnN0YXJ0KClgIG11c3QgYmUgZXhlY3V0ZWQgcHJpb3IgdG8gdXNpbmcgYG5ldHdvcmtgIGNvbW1hbmRzLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcGFyZW50LmhlbHBlcnMuYXNzZXJ0QXJndW1lbnQodXJsLCAndXJsJyk7XG4gICAgICAgIHRoaXMuX3BhcmVudC5oZWxwZXJzLmFzc2VydEFyZ3VtZW50KHN0YXR1c0NvZGUsICdzdGF0dXNDb2RlJyk7XG4gICAgICAgIHRoaXMuX3BhcmVudC5oZWxwZXJzLmFzc2VydEFyZ3VtZW50VGltZW91dCh0aW1lb3V0LCAndGltZW91dCcpO1xuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgIGxldCBtYXRjaGVkUmVxID0gbnVsbDtcbiAgICAgICAgd2hpbGUgKERhdGUubm93KCkgLSBzdGFydCA8IHRpbWVvdXQgJiYgIW1hdGNoZWRSZXEpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ldHdvcmtSZXF1ZXN0cyA9IGF3YWl0IHRoaXMuX2dldEVudHJpZXMoKTtcbiAgICAgICAgICAgIGZvciAobGV0IHJlcSBvZiBuZXR3b3JrUmVxdWVzdHMpIHtcbiAgICAgICAgICAgICAgICBpZiAodXJsLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdSZWdFeHAnICYmIHVybC50ZXN0KHJlcS51cmwpIHx8IHVybCA9PT0gcmVxLnVybCkge1xuICAgICAgICAgICAgICAgICAgICBtYXRjaGVkUmVxID0gcmVxO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAhbWF0Y2hlZFJlcSAmJiBhd2FpdCB0aGlzLl9kcml2ZXIucGF1c2UoNTAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1hdGNoZWRSZXEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX0VSUk9SLCBgTm8gcmVxdWVzdCBtYXRjaGluZyB0aGUgVVJMIFwiJHt1cmx9XCIgd2FzIGZvdW5kLmApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXNDb2RlICE9PSBtYXRjaGVkUmVxLnN0YXR1cykge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGZhaWx1cmVNZXNzYWdlIHx8IGBUaGUgZXhwZWN0ZWQgc3RhdHVzIGNvZGUgXCIke3N0YXR1c0NvZGV9XCIgZG9lcyBub3QgbWF0Y2ggXCIke21hdGNoZWRSZXEuc3RhdHVzfVwiLmA7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkFTU0VSVF9FUlJPUiwgbWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBBc3NlcnQgd2hldGhlciBIVFRQIHJlc3BvbnNlIGNvbnRlbnQgbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIHZhbHVlIG9yIHBhdHRlcm4uXG4gICAgICogQGZ1bmN0aW9uIGFzc2VydFJlc3BvbnNlQ29udGVudFxuICAgICAqIEBwYXJhbSB7U3RyaW5nfFJlZ0V4cH0gdXJsIC0gQSByZXF1ZXN0IFVSTCB0byBtYXRjaCB2ZXJiYXRpbSBvciBhIFJlZ0V4cC5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xSZWdFeHB9IGNvbnRlbnQgLSBBIHJlc3BvbnNlIGJvZHkgY29udGVudCB0byBtYXRjaCB2ZXJiYXRpbSBvciBhIFJlZ0V4cC5cbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGZhaWx1cmVNZXNzYWdlIC0gQW4gb3B0aW9uYWwgZmFpbHVyZSBtZXNzYWdlLlxuICAgICAqIEBwYXJhbSB7TnVtYmVyPX0gdGltZW91dCAtIFRpbWVvdXQuIERlZmF1bHQgaXMgNjAgc2Vjb25kcy5cbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IE5ldHdvcmsgcmVxdWVzdCBkZXRhaWxzIGlmIHRoZSBuZXR3b3JrIHJlcXVlc3Qgd2FzIGZvdW5kLlxuICAgICAqL1xuICAgIGFzeW5jIGFzc2VydFJlc3BvbnNlQ29udGVudCh1cmwsIGNvbnRlbnQsIGZhaWx1cmVNZXNzYWdlID0gbnVsbCwgdGltZW91dCA9IDYwKjEwMDApIHtcbiAgICAgICAgaWYgKCF0aGlzLl9kcml2ZXIgfHwgIXRoaXMuX2lzSW5pdGlhbGl6ZWQgfHwgIXRoaXMuX3BhcmVudCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SLCAnYG5ldHdvcmtgIG9yIGB3ZWJgIG1vZHVsZSBpcyBub3QgaW5pdGlhbGl6ZWQuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX2NvbGxlY3REYXRhKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IsICdgd2ViLm5ldHdvcmsuc3RhcnQoKWAgbXVzdCBiZSBleGVjdXRlZCBwcmlvciB0byB1c2luZyBgbmV0d29ya2AgY29tbWFuZHMuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wYXJlbnQuaGVscGVycy5hc3NlcnRBcmd1bWVudCh1cmwsICd1cmwnKTtcbiAgICAgICAgdGhpcy5fcGFyZW50LmhlbHBlcnMuYXNzZXJ0QXJndW1lbnQoY29udGVudCwgJ2NvbnRlbnQnKTtcbiAgICAgICAgdGhpcy5fcGFyZW50LmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0KHRpbWVvdXQsICd0aW1lb3V0Jyk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgbGV0IG1hdGNoZWRSZXEgPSBudWxsO1xuICAgICAgICB3aGlsZSAoRGF0ZS5ub3coKSAtIHN0YXJ0IDwgdGltZW91dCAmJiAhbWF0Y2hlZFJlcSkge1xuICAgICAgICAgICAgY29uc3QgbmV0d29ya1JlcXVlc3RzID0gYXdhaXQgdGhpcy5fZ2V0RW50cmllcygpO1xuICAgICAgICAgICAgZm9yIChsZXQgcmVxIG9mIG5ldHdvcmtSZXF1ZXN0cykge1xuICAgICAgICAgICAgICAgIGlmICh1cmwuY29uc3RydWN0b3IubmFtZSA9PT0gJ1JlZ0V4cCcgJiYgdXJsLnRlc3QocmVxLnVybCkgfHwgdXJsID09PSByZXEudXJsKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hdGNoZWRSZXEgPSByZXE7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICFtYXRjaGVkUmVxICYmIGF3YWl0IHRoaXMuX2RyaXZlci5wYXVzZSg1MDApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWF0Y2hlZFJlcSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfRVJST1IsIGBObyByZXF1ZXN0IG1hdGNoaW5nIHRoZSBVUkwgXCIke3VybH1cIiB3YXMgZm91bmQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuX2RyaXZlci5jZHAoJ05ldHdvcmsnLCdnZXRSZXNwb25zZUJvZHknLCB7XG4gICAgICAgICAgICByZXF1ZXN0SWQ6IG1hdGNoZWRSZXEucmVxdWVzdElkXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocmVzcCAmJiByZXNwLmJvZHkgJiYgIXJlc3AuYmFzZTY0RW5jb2RlZCkge1xuICAgICAgICAgICAgaWYgKGNvbnRlbnQuY29uc3RydWN0b3IubmFtZSA9PT0gJ1JlZ0V4cCcgJiYgKGNvbnRlbnQudGVzdChyZXNwLmJvZHkpIHx8IHJlc3AuYm9keS5pbmRleE9mKGNvbnRlbnQpID4gLTEpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gZmFpbHVyZU1lc3NhZ2UgfHwgYFJlc3BvbnNlIFwiJHt1cmx9XCIgYm9keSBjb250ZW50IGRvZXMgbm90IG1hdGNoIFwiJHtjb250ZW50fS5gO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX0VSUk9SLCBtZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5IFNldHMgYSBsaXN0IG9mIHJlcXVlc3QgVVJMcyB0byBiZSBibG9ja2VkIGZyb20gbG9hZGluZy5cbiAgICAgKiBAZnVuY3Rpb24gYmxvY2tVcmxzXG4gICAgICogQHBhcmFtIHtBcnJheTxTdHJpbmc+fSB1cmxzIC0gQSBsaXN0IG9mIFVSTHMgdGhhdCBtYXRjaCB0aGUgcmVxdWVzdHMgdG8gYmUgYmxvY2tlZC5cbiAgICAgKi9cbiAgICBhc3luYyBibG9ja1VybHModXJscykge1xuICAgICAgICBhd2FpdCB0aGlzLl9kcml2ZXIuY2RwKCdOZXR3b3JrJywnc2V0QmxvY2tlZFVSTHMnLCB7XG4gICAgICAgICAgICB1cmxzXG4gICAgICAgIH0pO1xuICAgIH1cbn0iXX0=
|
|
@@ -85,4 +85,4 @@ class DevToolsService extends _OxygenService.default {
|
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
exports.default = DevToolsService;
|
|
88
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
88
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9zZXJ2aWNlcy9zZXJ2aWNlLWRldnRvb2xzLmpzIl0sIm5hbWVzIjpbIkNIUk9NRV9CUk9XU0VSIiwiRGV2VG9vbHNTZXJ2aWNlIiwiT3h5Z2VuU2VydmljZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImN0eCIsInJlc3VsdHMiLCJsb2dnZXIiLCJfc3ViTW9kdWxlcyIsImlzU2VydmljZUluaXRpYWxpemVkIiwib25Nb2R1bGVMb2FkZWQiLCJtb2R1bGUiLCJnZXREcml2ZXIiLCJnZXRDYXBhYmlsaXRpZXMiLCJuZXR3b3JrU3VibW9kdWxlIiwiTmV0d29ya1N1Yk1vZHVsZSIsImFkZFN1Yk1vZHVsZSIsIm5hbWUiLCJvbk1vZHVsZUluaXRpYWxpemVkIiwic3VibW9kdWxlIiwiaXNJbml0aWFsaXplZCIsImNhcGFiaWxpdGllcyIsImJyb3dzZXJOYW1lIiwiX2RyaXZlciIsImRlYnVnZ2VyQWRkcmVzcyIsInByb3ZpZGVyIiwidG9Mb3dlckNhc2UiLCJkZXZUb29sc1N2YyIsIldESU9EZXZUb29sc1NlcnZpY2UiLCJVTlNVUFBPUlRFRF9FUlJPUl9NRVNTQUdFIiwiYmVmb3JlU2Vzc2lvbiIsImNvbnNvbGUiLCJsb2ciLCJfaXNTdXBwb3J0ZWQiLCJnbG9iYWwiLCJicm93c2VyIiwiYmVmb3JlIiwiaW5pdCIsIm9uTW9kdWxlV2lsbERpc3Bvc2UiLCJkaXNwb3NlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFDQTs7QUFFQTs7QUFDQTs7OztBQUVBLE1BQU1BLGNBQWMsR0FBRyxRQUF2Qjs7QUFFZSxNQUFNQyxlQUFOLFNBQThCQyxzQkFBOUIsQ0FBNEM7QUFDdkRDLEVBQUFBLFdBQVcsQ0FBQ0MsT0FBRCxFQUFVQyxHQUFWLEVBQWVDLE9BQWYsRUFBd0JDLE1BQXhCLEVBQWdDO0FBQ3ZDLFVBQU1ILE9BQU4sRUFBZUMsR0FBZixFQUFvQkMsT0FBcEIsRUFBNkJDLE1BQTdCO0FBRUEsU0FBS0MsV0FBTCxHQUFtQixFQUFuQjtB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eEIsQ0FBbEI7O0FBQ0EsUUFBSSxDQUFDRSxTQUFMLEVBQWdCO0FBQ1o7QUFDSDs7QUFDREEsSUFBQUEsU0FBUyxDQUFDb0IsT0FBVjtBQUNIOztBQW5Fc0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby11bnJlYWNoYWJsZSAqL1xuaW1wb3J0IFdESU9EZXZUb29sc1NlcnZpY2UgZnJvbSAnQHdkaW8vZGV2dG9vbHMtc2VydmljZSc7XG5cbmltcG9ydCBPeHlnZW5TZXJ2aWNlIGZyb20gJy4uL2NvcmUvT3h5Z2VuU2VydmljZSc7XG5pbXBvcnQgTmV0d29ya1N1Yk1vZHVsZSBmcm9tICcuL3NlcnZpY2UtZGV2dG9vbHMvc3VibW9kdWxlLW5ldHdvcmsnO1xuXG5jb25zdCBDSFJPTUVfQlJPV1NFUiA9ICdjaHJvbWUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZXZUb29sc1NlcnZpY2UgZXh0ZW5kcyBPeHlnZW5TZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCBjdHgsIHJlc3VsdHMsIGxvZ2dlcikge1xuICAgICAgICBzdXBlcihvcHRpb25zLCBjdHgsIHJlc3VsdHMsIGxvZ2dlcik7XG4gICAgICAgIC8vIGhhc2ggb2Ygd2ViZHJpdmVyIGJhc2VkIG1vZHVsZXNcbiAgICAgICAgdGhpcy5fc3ViTW9kdWxlcyA9IHt9O1xuICAgICAgICB0aGlzLmlzU2VydmljZUluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB9XG4gICAgb25Nb2R1bGVMb2FkZWQobW9kdWxlKSB7XG4gICAgICAgIC8vIHNraXAgYW55IG1vZHVsZSB0aGF0IGRvZXMgbm90IGltcGxlbWVudCAuZ2V0RHJpdmVyKCkgbWV0aG9kIChlLmcuIG5vdCB3ZWJkcml2ZXIgYmFzZWQpXG4gICAgICAgIGlmICghbW9kdWxlIHx8ICFtb2R1bGUuZ2V0RHJpdmVyIHx8IHR5cGVvZiBtb2R1bGUuZ2V0RHJpdmVyICE9PSAnZnVuY3Rpb24nIHx8ICFtb2R1bGUuZ2V0Q2FwYWJpbGl0aWVzIHx8IHR5cGVvZiBtb2R1bGUuZ2V0Q2FwYWJpbGl0aWVzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXR3b3JrU3VibW9kdWxlID0gbmV3IE5ldHdvcmtTdWJNb2R1bGUoJ25ldHdvcmsnLCBtb2R1bGUpO1xuICAgICAgICBtb2R1bGUuYWRkU3ViTW9kdWxlKCduZXR3b3JrJywgbmV0d29ya1N1Ym1vZHVsZSk7XG4gICAgICAgIHRoaXMuX3N1Yk1vZHVsZXNbbW9kdWxlLm5hbWVdID0gbmV0d29ya1N1Ym1vZHVsZTtcbiAgICB9XG4gICAgYXN5bmMgb25Nb2R1bGVJbml0aWFsaXplZChtb2R1bGUpIHtcbiAgICAgICAgLy8gc2tpcCBhbnkgbW9kdWxlIHRoYXQgZG9lcyBub3QgaW1wbGVtZW50IGdldERyaXZlciBtZXRob2QgKGUuZy4gbm90IHdlYmRyaXZlciBiYXNlZClcbiAgICAgICAgaWYgKCFtb2R1bGUgfHwgIW1vZHVsZS5nZXREcml2ZXIgfHwgdHlwZW9mIG1vZHVsZS5nZXREcml2ZXIgIT09ICdmdW5jdGlvbicgfHwgIW1vZHVsZS5nZXRDYXBhYmlsaXRpZXMgfHwgdHlwZW9mIG1vZHVsZS5nZXRDYXBhYmlsaXRpZXMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdWJtb2R1bGUgPSB0aGlzLl9zdWJNb2R1bGVzW21vZHVsZS5uYW1lXTtcbiAgICAgICAgaWYgKCFzdWJtb2R1bGUgfHwgc3VibW9kdWxlLmlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBvcHRpb25zID0ge307XG4gICAgICAgIGNvbnN0IGNhcGFiaWxpdGllcyA9IG1vZHVsZS5nZXRDYXBhYmlsaXRpZXMoKSB8fCB7fTtcbiAgICAgICAgY29uc3QgeyBicm93c2VyTmFtZSB9ID0gY2FwYWJpbGl0aWVzO1xuICAgICAgICB0aGlzLl9kcml2ZXIgPSBtb2R1bGUuZ2V0RHJpdmVyKCk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5fZHJpdmVyICYmXG4gICAgICAgICAgICB0aGlzLl9kcml2ZXIuY2FwYWJpbGl0aWVzICYmXG4gICAgICAgICAgICB0aGlzLl9kcml2ZXIuY2FwYWJpbGl0aWVzWydnb29nOmNocm9tZU9wdGlvbnMnXSAmJlxuICAgICAgICAgICAgdGhpcy5fZHJpdmVyLmNhcGFiaWxpdGllc1snZ29vZzpjaHJvbWVPcHRpb25zJ11bJ2RlYnVnZ2VyQWRkcmVzcyddXG4gICAgICAgICkge1xuICAgICAgICAgICAgb3B0aW9ucy5kZWJ1Z2dlckFkZHJlc3MgPSB0aGlzLl9kcml2ZXIuY2FwYWJpbGl0aWVzWydnb29nOmNocm9tZU9wdGlvbnMnXVsnZGVidWdnZXJBZGRyZXNzJ107XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB3ZSBhcmUgbm90IHVzaW5nIGFueSAzcmQgcGFydHkgcHJvdmlkZXJcbiAgICAgICAgaWYgKHRoaXMuX2RyaXZlci5wcm92aWRlciA9PT0gbnVsbCAmJiBicm93c2VyTmFtZSAmJiBicm93c2VyTmFtZS50b0xvd2VyQ2FzZSgpID09PSBDSFJPTUVfQlJPV1NFUikge1xuICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBEZXZUb29sc1NlcnZpY2UgYW5kIGhvb2sgaXQgdG8gdGhlIGN1cnJlbnQgd2ViZHJpdmVyIG9iamVjdFxuICAgICAgICAgICAgY29uc3QgZGV2VG9vbHNTdmMgPSBuZXcgV0RJT0RldlRvb2xzU2VydmljZShvcHRpb25zKTtcbiAgICAgICAgICAgIGNvbnN0IFVOU1VQUE9SVEVEX0VSUk9SX01FU1NBR0UgPSBkZXZUb29sc1N2Yy5iZWZvcmVTZXNzaW9uKG51bGwsIGNhcGFiaWxpdGllcyk7XG5cbiAgICAgICAgICAgIGlmIChVTlNVUFBPUlRFRF9FUlJPUl9NRVNTQUdFKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1VOU1VQUE9SVEVEX0VSUk9SX01FU1NBR0UnLCBVTlNVUFBPUlRFRF9FUlJPUl9NRVNTQUdFKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRldlRvb2xzU3ZjLl9pc1N1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgIC8vIGNoYW5nZSBnbG9iYWwuYnJvd3NlciB0byB0aGUgY3VycmVudCBtb2R1bGUncyB3ZWJkcml2ZXIgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAvLyBjb25zdCBvcmdHbG9iYWxCcm93c2VyID0gZ2xvYmFsLmJyb3dzZXI7XG4gICAgICAgICAgICAgICAgZ2xvYmFsLmJyb3dzZXIgPSBtb2R1bGUuZ2V0RHJpdmVyKCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgZGV2VG9vbHNTdmMuYmVmb3JlKG51bGwsIG51bGwsIHRoaXMuX2RyaXZlcik7XG4gICAgICAgICAgICAgICAgc3VibW9kdWxlLmluaXQoZGV2VG9vbHNTdmMpO1xuICAgICAgICAgICAgICAgIC8vIGdsb2JhbC5icm93c2VyID0gb3JnR2xvYmFsQnJvd3NlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBvbk1vZHVsZVdpbGxEaXNwb3NlKG1vZHVsZSkge1xuICAgICAgICBjb25zdCBzdWJtb2R1bGUgPSB0aGlzLl9zdWJNb2R1bGVzW21vZHVsZS5uYW1lXTtcbiAgICAgICAgaWYgKCFzdWJtb2R1bGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzdWJtb2R1bGUuZGlzcG9zZSgpO1xuICAgIH1cbn0iXX0=
|
|
@@ -163,4 +163,4 @@ class FileReporterBase extends _ReporterBase.default {
|
|
|
163
163
|
}
|
|
164
164
|
|
|
165
165
|
exports.default = FileReporterBase;
|
|
166
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXBvcnRlci9GaWxlUmVwb3J0ZXJCYXNlLmpzIl0sIm5hbWVzIjpbIlJFUE9SVFNfRk9MREVSX05BTUUiLCJSRVBPUlRfRklMRV9OQU1FIiwiRmlsZVJlcG9ydGVyQmFzZSIsIlJlcG9ydGVyQmFzZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNyZWF0ZUZvbGRlclN0cnVjdHVyZUFuZEZpbGVQYXRoIiwiZmlsZUV4dGVuc2lvbiIsImxlbmd0aCIsIkVycm9yIiwic3RhcnRzV2l0aCIsInRhcmdldCIsInJlcG9ydGluZyIsInJlc3VsdHNCYXNlRm9sZGVyIiwiY3dkIiwib3V0cHV0RGlyIiwicGF0aCIsImlzQWJzb2x1dGUiLCJyZXNvbHZlIiwiam9pbiIsImNyZWF0ZUZvbGRlcklmTm90RXhpc3RzIiwicmVzdWx0Rm9sZGVyUGF0aCIsInN1YkZvbGRlck5hbWUiLCJmb3JtYXQiLCJmb2xkZXJQYXRoIiwiZnMiLCJta2RpclN5bmMiLCJlIiwiY29kZSIsInJlcGxhY2VTY3JlZW5zaG90c1dpdGhGaWxlcyIsInJlc3VsdHMiLCJBcnJheSIsImlzQXJyYXkiLCJzdGVwc1dpdGhTY3JlZW5zaG90IiwicmVzdWx0Iiwic3VpdGUiLCJzdWl0ZXMiLCJjYXplIiwiY2FzZXMiLCJfcG9wdWxhdGVTdGVwc1dpdGhTY3JlZW5zaG90cyIsInN0ZXBzIiwic2NyZWVuc2hvdEZpbGVQcmVmaXgiLCJzY3JlZW5zaG90RmlsZVN1ZmZpeCIsImkiLCJmaWxlbmFtZSIsImZpbGVwYXRoIiwic3RlcCIsIndyaXRlRmlsZVN5bmMiLCJzY3JlZW5zaG90Iiwic2NyZWVuc2hvdEZpbGUiLCJmb3JtYXRUb3RhbER1cmF0aW9uIiwiZHVyYXRpb24iLCJmb3JtYXREdXJhdGlvbiIsInB1c2giLCJtaWxpc2Vjb25kcyIsInNlY29uZHMiLCJoaCIsIk1hdGgiLCJmbG9vciIsIm1pbiIsInNlYyIsInRvRml4ZWQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQVlBOztB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ckMsQ0FBVjtBQUNBLFFBQUlJLEdBQUcsR0FBR0wsT0FBTyxHQUFJQyxFQUFFLEdBQUcsSUFBaEIsR0FBeUJHLEdBQUcsR0FBRyxFQUF6QztBQUVBLFFBQUl6QixNQUFNLEdBQUcsRUFBYjs7QUFFQSxRQUFJc0IsRUFBSixFQUFRO0FBQ0p0QixNQUFBQSxNQUFNLElBQUssR0FBRXNCLEVBQUUsQ0FBQ0ssT0FBSCxDQUFXLENBQVgsQ0FBYyxNQUEzQjtBQUNIOztBQUNELFFBQUlGLEdBQUosRUFBUztBQUNMekIsTUFBQUEsTUFBTSxJQUFLLEdBQUV5QixHQUFHLENBQUNFLE9BQUosQ0FBWSxDQUFaLENBQWUsT0FBNUI7QUFDSDs7QUFDRCxRQUFJRCxHQUFKLEVBQVM7QUFDTDFCLE1BQUFBLE1BQU0sSUFBSyxHQUFFMEIsR0FBRyxDQUFDQyxPQUFKLENBQVksQ0FBWixDQUFlLE1BQTVCO0FBQ0g7O0FBRUQsV0FBTzNCLE1BQVA7QUFDSDs7QUE5SHNEIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKlxyXG4gKiBPeHlnZW4gRmlsZSBSZXBvcnRlciBhYnN0cmFjdCBjbGFzc1xyXG4gKi9cclxuaW1wb3J0IGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuXHJcbmltcG9ydCBSZXBvcnRlckJhc2UgZnJvbSAnLi9SZXBvcnRlckJhc2UnO1xyXG5cclxuY29uc3QgUkVQT1JUU19GT0xERVJfTkFNRSA9ICdyZXBvcnRzJztcclxuY29uc3QgUkVQT1JUX0ZJTEVfTkFNRSA9ICdyZXBvcnQnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmlsZVJlcG9ydGVyQmFzZSBleHRlbmRzIFJlcG9ydGVyQmFzZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XHJcbiAgICAgICAgc3VwZXIob3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICBjcmVhdGVGb2xkZXJTdHJ1Y3R1cmVBbmRGaWxlUGF0aChmaWxlRXh0ZW5zaW9uKSB7XHJcbiAgICAgICAgaWYgKCFmaWxlRXh0ZW5zaW9uIHx8IHR5cGVvZiBmaWxlRXh0ZW5zaW9uICE9PSAnc3RyaW5nJyB8fCBmaWxlRXh0ZW5zaW9uLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignXCJmaWxlRXh0ZW5zaW9uXCIgYXJndW1lbnQgbXVzdCBiZSBzcGVjaWZpZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaWYgZmlsZUV4dGVuc2lvbiBkb2Vzbid0IHN0YXJ0IHdpdGggJy4nLCBhZGQgaXQgYXV0b21hdGljYWxseVxyXG4gICAgICAgIGlmICghZmlsZUV4dGVuc2lvbi5zdGFydHNXaXRoKCcuJykpIHtcclxuICAgICAgICAgICAgZmlsZUV4dGVuc2lvbiA9IGAuJHtmaWxlRXh0ZW5zaW9ufWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zIHx8ICF0aGlzLm9wdGlvbnMudGFyZ2V0IHx8ICF0aGlzLm9wdGlvbnMucmVwb3J0aW5nKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmlsZVJlcG9ydGVyQmFzZSBpcyBub3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHJlc3VsdHNCYXNlRm9sZGVyID0gbnVsbDtcclxuICAgICAgICAvLyBwcm9kdWNlIHJlcG9ydCBhdCB0aGUgc3BlY2lmaWVkIHBhdGguIHdpbGwgb3ZlcndyaXRlIGFueSBleGlzdGluZyByZXBvcnRzLlxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY3dkICYmIHRoaXMub3B0aW9ucy5yZXBvcnRpbmcub3V0cHV0RGlyKSB7XHJcbiAgICAgICAgICAgIGlmIChwYXRoLmlzQWJzb2x1dGUodGhpcy5vcHRpb25zLnJlcG9ydGluZy5vdXRwdXREaXIpKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHRzQmFzZUZvbGRlciA9IHRoaXMub3B0aW9ucy5yZXBvcnRpbmcub3V0cHV0RGlyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0c0Jhc2VGb2xkZXIgPSBwYXRoLnJlc29sdmUodGhpcy5vcHRpb25zLmN3ZCwgdGhpcy5vcHRpb25zLnJlcG9ydGluZy5vdXRwdXREaXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGdlbmVyYXRlIGRhdGUtdGltZSBmb2xkZXIgc3RydWN0dXJlIGZvciByZXBvcnQgZmlsZXNcclxuICAgICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMudGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHJlc3VsdHNCYXNlRm9sZGVyID0gcGF0aC5qb2luKHRoaXMub3B0aW9ucy50YXJnZXQuY3dkLCBSRVBPUlRTX0ZPTERFUl9OQU1FKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yIGNvbnN0cnVjdGluZyByZXBvcnRzIHBhdGguIEVpdGhlciBzcmNGaWxlIG9yIG91dHB1dEZvbGRlciBpcyByZXF1aXJlZC4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY3JlYXRlIHJlc3VsdHMgbWFpbiBmb2xkZXIgKHdoZXJlIGFsbCB0aGUgcmVzdWx0cyBmb3IgdGhlIGN1cnJlbnQgdGVzdCBjYXNlIG9yIHRlc3Qgc3VpdGUgYXJlIHN0b3JlZClcclxuICAgICAgICB0aGlzLmNyZWF0ZUZvbGRlcklmTm90RXhpc3RzKHJlc3VsdHNCYXNlRm9sZGVyKTtcclxuICAgICAgICBsZXQgcmVzdWx0Rm9sZGVyUGF0aCA9IHJlc3VsdHNCYXNlRm9sZGVyO1xyXG4gICAgICAgIC8vIGNyZWF0ZSB0aW1lc3RhbXAtYmFzZWQgc3ViIGZvbGRlciBmb3IgdGhlIGN1cnJlbnQgcmVzdWx0cyBpZiBcIm91dHB1dERpclwiIHByb3BlcnR5IGlzIE5PVCBzcGVjaWZpZWRcclxuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5yZXBvcnRpbmcub3V0cHV0RGlyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN1YkZvbGRlck5hbWUgPSBtb21lbnQoKS5mb3JtYXQoJ1lZWVktTU0tRERfSEhtbXNzJyk7XHJcbiAgICAgICAgICAgIHJlc3VsdEZvbGRlclBhdGggPSBwYXRoLmpvaW4ocmVzdWx0c0Jhc2VGb2xkZXIsIHN1YkZvbGRlck5hbWUpO1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUZvbGRlcklmTm90RXhpc3RzKHJlc3VsdEZvbGRlclBhdGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGF0aC5qb2luKHJlc3VsdEZvbGRlclBhdGgsIGAke1JFUE9SVF9GSUxFX05BTUV9JHtmaWxlRXh0ZW5zaW9ufWApO1xyXG5cclxuICAgIH1cclxuICAgIGNyZWF0ZUZvbGRlcklmTm90RXhpc3RzKGZvbGRlclBhdGgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBmcy5ta2RpclN5bmMoZm9sZGVyUGF0aCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBpZiAoIGUuY29kZSAhPSAnRUVYSVNUJyApIHRocm93IGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmb2xkZXJQYXRoO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHNhdmUgYWxsIHNjcmVlbnNob3RzIHRvIGZpbGVzIGFuZCByZXBsYWNlIHNjcmVlbnNob3QgY29udGVudCB3aXRoIGZpbGUgcGF0aCBpbiB0aGUgcmVzdWx0IEpTT04gYmVmb3JlIHNlcmlhbGl6YXRpb25cclxuICAgIHJlcGxhY2VTY3JlZW5zaG90c1dpdGhGaWxlcyhyZXN1bHRzLCBmb2xkZXJQYXRoKSB7XHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdHMpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBhcmd1bWVudCBcInJlc3VsdHNcIiAtIG11c3QgYmUgYW4gYXJyYXkuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZm9sZGVyUGF0aCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiZm9sZGVyUGF0aFwiIGFyZ3VtZW50IGNhbm5vdCBiZSBudWxsIG9yIGVtcHR5LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzdGVwc1dpdGhTY3JlZW5zaG90ID0gW107XHJcbiAgICAgICAgLy8gbWFwIHN0ZXBzIHdpdGggbm9uIGVtcHR5IHNjcmVlbnNob3QgYXR0cmlidXRlXHJcbiAgICAgICAgZm9yIChsZXQgcmVzdWx0IG9mIHJlc3VsdHMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgc3VpdGUgb2YgcmVzdWx0LnN1aXRlcykge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2F6ZSBvZiBzdWl0ZS5jYXNlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcHVsYXRlU3RlcHNXaXRoU2NyZWVuc2hvdHMoY2F6ZS5zdGVwcywgc3RlcHNXaXRoU2NyZWVuc2hvdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc2NyZWVuc2hvdEZpbGVQcmVmaXggPSAnc2NyZWVuc2hvdC0nO1xyXG4gICAgICAgIGNvbnN0IHNjcmVlbnNob3RGaWxlU3VmZml4ID0gJy5wbmcnO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpPHN0ZXBzV2l0aFNjcmVlbnNob3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGZpbGVuYW1lID0gc2NyZWVuc2hvdEZpbGVQcmVmaXggKyBpICsgc2NyZWVuc2hvdEZpbGVTdWZmaXg7XHJcbiAgICAgICAgICAgIGxldCBmaWxlcGF0aCA9IHBhdGguam9pbihmb2xkZXJQYXRoLCBmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgIGxldCBzdGVwID0gc3RlcHNXaXRoU2NyZWVuc2hvdFtpXTtcclxuICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhmaWxlcGF0aCwgc3RlcC5zY3JlZW5zaG90LCAnYmFzZTY0Jyk7XHJcbiAgICAgICAgICAgIHN0ZXAuc2NyZWVuc2hvdEZpbGUgPSBmaWxlbmFtZTtcclxuICAgICAgICAgICAgc3RlcC5zY3JlZW5zaG90ID0gbnVsbDsgLy8gZG9uJ3Qgc2F2ZSBiYXNlNjQgc2NyZWVuc2hvdCBkYXRlIHRvIHRoZSBmaWxlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gZm9ybWF0IHRvdGFsIGR1cmF0aW9uIGxpa2UgOiA1Ni4yIHNlYyAvIDMxIG1pbiA1OSBzZWMgLyAxIGhyIDMxIG1pbiA1OSBzZWNcclxuICAgIGZvcm1hdFRvdGFsRHVyYXRpb24ocmVzdWx0cykge1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyZXN1bHRzKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnQgXCJyZXN1bHRzXCIgLSBtdXN0IGJlIGFuIGFycmF5LicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgcmVzdWx0IG9mIHJlc3VsdHMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgc3VpdGUgb2YgcmVzdWx0LnN1aXRlcykge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2F6ZSBvZiBzdWl0ZS5jYXNlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHN0ZXAgb2YgY2F6ZS5zdGVwcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGVwLmR1cmF0aW9uID0gdGhpcy5mb3JtYXREdXJhdGlvbihzdGVwLmR1cmF0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBfcG9wdWxhdGVTdGVwc1dpdGhTY3JlZW5zaG90cyhzdGVwcywgc3RlcHNXaXRoU2NyZWVuc2hvdCkge1xyXG4gICAgICAgIGZvciAobGV0IHN0ZXAgb2Ygc3RlcHMpIHtcclxuICAgICAgICAgICAgaWYgKHN0ZXAuc2NyZWVuc2hvdCkge1xyXG4gICAgICAgICAgICAgICAgc3RlcHNXaXRoU2NyZWVuc2hvdC5wdXNoKHN0ZXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGhhbmRsZSBjaGlsZCBzdGVwcyB0b29cclxuICAgICAgICAgICAgaWYgKHN0ZXAuc3RlcHMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3BvcHVsYXRlU3RlcHNXaXRoU2NyZWVuc2hvdHMoc3RlcC5zdGVwcywgc3RlcHNXaXRoU2NyZWVuc2hvdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3JtYXREdXJhdGlvbihtaWxpc2Vjb25kcykge1xyXG4gICAgICAgIHZhciBzZWNvbmRzID0gbWlsaXNlY29uZHMgLyAxMDAwO1xyXG4gICAgICAgIHZhciBoaCAgID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gMzYwMCk7XHJcbiAgICAgICAgdmFyIG1pbiA9IE1hdGguZmxvb3IoKHNlY29uZHMgLSAoaGggKiAzNjAwKSkgLyA2MCk7XHJcbiAgICAgICAgdmFyIHNlYyA9IHNlY29uZHMgLSAoaGggKiAzNjAwKSAtIChtaW4gKiA2MCk7XHJcblxyXG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcclxuXHJcbiAgICAgICAgaWYgKGhoKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSBgJHtoaC50b0ZpeGVkKDApfSBociBgO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWluKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSBgJHttaW4udG9GaXhlZCgwKX0gbWluIGA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWMpIHtcclxuICAgICAgICAgICAgcmVzdWx0ICs9IGAke3NlYy50b0ZpeGVkKDApfSBzZWNgO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
166
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXBvcnRlci9GaWxlUmVwb3J0ZXJCYXNlLmpzIl0sIm5hbWVzIjpbIlJFUE9SVFNfRk9MREVSX05BTUUiLCJSRVBPUlRfRklMRV9OQU1FIiwiRmlsZVJlcG9ydGVyQmFzZSIsIlJlcG9ydGVyQmFzZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNyZWF0ZUZvbGRlclN0cnVjdHVyZUFuZEZpbGVQYXRoIiwiZmlsZUV4dGVuc2lvbiIsImxlbmd0aCIsIkVycm9yIiwic3RhcnRzV2l0aCIsInRhcmdldCIsInJlcG9ydGluZyIsInJlc3VsdHNCYXNlRm9sZGVyIiwiY3dkIiwib3V0cHV0RGlyIiwicGF0aCIsImlzQWJzb2x1dGUiLCJyZXNvbHZlIiwiam9pbiIsImNyZWF0ZUZvbGRlcklmTm90RXhpc3RzIiwicmVzdWx0Rm9sZGVyUGF0aCIsInN1YkZvbGRlck5hbWUiLCJmb3JtYXQiLCJmb2xkZXJQYXRoIiwiZnMiLCJta2RpclN5bmMiLCJlIiwiY29kZSIsInJlcGxhY2VTY3JlZW5zaG90c1dpdGhGaWxlcyIsInJlc3VsdHMiLCJBcnJheSIsImlzQXJyYXkiLCJzdGVwc1dpdGhTY3JlZW5zaG90IiwicmVzdWx0Iiwic3VpdGUiLCJzdWl0ZXMiLCJjYXplIiwiY2FzZXMiLCJfcG9wdWxhdGVTdGVwc1dpdGhTY3JlZW5zaG90cyIsInN0ZXBzIiwic2NyZWVuc2hvdEZpbGVQcmVmaXgiLCJzY3JlZW5zaG90RmlsZVN1ZmZpeCIsImkiLCJmaWxlbmFtZSIsImZpbGVwYXRoIiwic3RlcCIsIndyaXRlRmlsZVN5bmMiLCJzY3JlZW5zaG90Iiwic2NyZWVuc2hvdEZpbGUiLCJmb3JtYXRUb3RhbER1cmF0aW9uIiwiZHVyYXRpb24iLCJmb3JtYXREdXJhdGlvbiIsInB1c2giLCJtaWxpc2Vjb25kcyIsInNlY29uZHMiLCJoaCIsIk1hdGgiLCJmbG9vciIsIm1pbiIsInNlYyIsInRvRml4ZWQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQVlBOztB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ckMsQ0FBVjtBQUNBLFFBQUlJLEdBQUcsR0FBR0wsT0FBTyxHQUFJQyxFQUFFLEdBQUcsSUFBaEIsR0FBeUJHLEdBQUcsR0FBRyxFQUF6QztBQUVBLFFBQUl6QixNQUFNLEdBQUcsRUFBYjs7QUFFQSxRQUFJc0IsRUFBSixFQUFRO0FBQ0p0QixNQUFBQSxNQUFNLElBQUssR0FBRXNCLEVBQUUsQ0FBQ0ssT0FBSCxDQUFXLENBQVgsQ0FBYyxNQUEzQjtBQUNIOztBQUNELFFBQUlGLEdBQUosRUFBUztBQUNMekIsTUFBQUEsTUFBTSxJQUFLLEdBQUV5QixHQUFHLENBQUNFLE9BQUosQ0FBWSxDQUFaLENBQWUsT0FBNUI7QUFDSDs7QUFDRCxRQUFJRCxHQUFKLEVBQVM7QUFDTDFCLE1BQUFBLE1BQU0sSUFBSyxHQUFFMEIsR0FBRyxDQUFDQyxPQUFKLENBQVksQ0FBWixDQUFlLE1BQTVCO0FBQ0g7O0FBRUQsV0FBTzNCLE1BQVA7QUFDSDs7QUE5SHNEIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqL1xuXG4vKlxuICogT3h5Z2VuIEZpbGUgUmVwb3J0ZXIgYWJzdHJhY3QgY2xhc3NcbiAqL1xuaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5pbXBvcnQgUmVwb3J0ZXJCYXNlIGZyb20gJy4vUmVwb3J0ZXJCYXNlJztcblxuY29uc3QgUkVQT1JUU19GT0xERVJfTkFNRSA9ICdyZXBvcnRzJztcbmNvbnN0IFJFUE9SVF9GSUxFX05BTUUgPSAncmVwb3J0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmlsZVJlcG9ydGVyQmFzZSBleHRlbmRzIFJlcG9ydGVyQmFzZSB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBzdXBlcihvcHRpb25zKTtcbiAgICB9XG4gICAgY3JlYXRlRm9sZGVyU3RydWN0dXJlQW5kRmlsZVBhdGgoZmlsZUV4dGVuc2lvbikge1xuICAgICAgICBpZiAoIWZpbGVFeHRlbnNpb24gfHwgdHlwZW9mIGZpbGVFeHRlbnNpb24gIT09ICdzdHJpbmcnIHx8IGZpbGVFeHRlbnNpb24ubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignXCJmaWxlRXh0ZW5zaW9uXCIgYXJndW1lbnQgbXVzdCBiZSBzcGVjaWZpZWQnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBmaWxlRXh0ZW5zaW9uIGRvZXNuJ3Qgc3RhcnQgd2l0aCAnLicsIGFkZCBpdCBhdXRvbWF0aWNhbGx5XG4gICAgICAgIGlmICghZmlsZUV4dGVuc2lvbi5zdGFydHNXaXRoKCcuJykpIHtcbiAgICAgICAgICAgIGZpbGVFeHRlbnNpb24gPSBgLiR7ZmlsZUV4dGVuc2lvbn1gO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zIHx8ICF0aGlzLm9wdGlvbnMudGFyZ2V0IHx8ICF0aGlzLm9wdGlvbnMucmVwb3J0aW5nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpbGVSZXBvcnRlckJhc2UgaXMgbm90IHByb3Blcmx5IGluaXRpYWxpemVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3VsdHNCYXNlRm9sZGVyID0gbnVsbDtcbiAgICAgICAgLy8gcHJvZHVjZSByZXBvcnQgYXQgdGhlIHNwZWNpZmllZCBwYXRoLiB3aWxsIG92ZXJ3cml0ZSBhbnkgZXhpc3RpbmcgcmVwb3J0cy5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jd2QgJiYgdGhpcy5vcHRpb25zLnJlcG9ydGluZy5vdXRwdXREaXIpIHtcbiAgICAgICAgICAgIGlmIChwYXRoLmlzQWJzb2x1dGUodGhpcy5vcHRpb25zLnJlcG9ydGluZy5vdXRwdXREaXIpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0c0Jhc2VGb2xkZXIgPSB0aGlzLm9wdGlvbnMucmVwb3J0aW5nLm91dHB1dERpcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNCYXNlRm9sZGVyID0gcGF0aC5yZXNvbHZlKHRoaXMub3B0aW9ucy5jd2QsIHRoaXMub3B0aW9ucy5yZXBvcnRpbmcub3V0cHV0RGlyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBnZW5lcmF0ZSBkYXRlLXRpbWUgZm9sZGVyIHN0cnVjdHVyZSBmb3IgcmVwb3J0IGZpbGVzXG4gICAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy50YXJnZXQpIHtcbiAgICAgICAgICAgIHJlc3VsdHNCYXNlRm9sZGVyID0gcGF0aC5qb2luKHRoaXMub3B0aW9ucy50YXJnZXQuY3dkLCBSRVBPUlRTX0ZPTERFUl9OQU1FKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IgY29uc3RydWN0aW5nIHJlcG9ydHMgcGF0aC4gRWl0aGVyIHNyY0ZpbGUgb3Igb3V0cHV0Rm9sZGVyIGlzIHJlcXVpcmVkLicpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNyZWF0ZSByZXN1bHRzIG1haW4gZm9sZGVyICh3aGVyZSBhbGwgdGhlIHJlc3VsdHMgZm9yIHRoZSBjdXJyZW50IHRlc3QgY2FzZSBvciB0ZXN0IHN1aXRlIGFyZSBzdG9yZWQpXG4gICAgICAgIHRoaXMuY3JlYXRlRm9sZGVySWZOb3RFeGlzdHMocmVzdWx0c0Jhc2VGb2xkZXIpO1xuICAgICAgICBsZXQgcmVzdWx0Rm9sZGVyUGF0aCA9IHJlc3VsdHNCYXNlRm9sZGVyO1xuICAgICAgICAvLyBjcmVhdGUgdGltZXN0YW1wLWJhc2VkIHN1YiBmb2xkZXIgZm9yIHRoZSBjdXJyZW50IHJlc3VsdHMgaWYgXCJvdXRwdXREaXJcIiBwcm9wZXJ0eSBpcyBOT1Qgc3BlY2lmaWVkXG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zLnJlcG9ydGluZy5vdXRwdXREaXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1YkZvbGRlck5hbWUgPSBtb21lbnQoKS5mb3JtYXQoJ1lZWVktTU0tRERfSEhtbXNzJyk7XG4gICAgICAgICAgICByZXN1bHRGb2xkZXJQYXRoID0gcGF0aC5qb2luKHJlc3VsdHNCYXNlRm9sZGVyLCBzdWJGb2xkZXJOYW1lKTtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlRm9sZGVySWZOb3RFeGlzdHMocmVzdWx0Rm9sZGVyUGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhdGguam9pbihyZXN1bHRGb2xkZXJQYXRoLCBgJHtSRVBPUlRfRklMRV9OQU1FfSR7ZmlsZUV4dGVuc2lvbn1gKTtcblxuICAgIH1cbiAgICBjcmVhdGVGb2xkZXJJZk5vdEV4aXN0cyhmb2xkZXJQYXRoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmcy5ta2RpclN5bmMoZm9sZGVyUGF0aCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmICggZS5jb2RlICE9ICdFRVhJU1QnICkgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9sZGVyUGF0aDtcbiAgICB9XG5cbiAgICAvLyBzYXZlIGFsbCBzY3JlZW5zaG90cyB0byBmaWxlcyBhbmQgcmVwbGFjZSBzY3JlZW5zaG90IGNvbnRlbnQgd2l0aCBmaWxlIHBhdGggaW4gdGhlIHJlc3VsdCBKU09OIGJlZm9yZSBzZXJpYWxpemF0aW9uXG4gICAgcmVwbGFjZVNjcmVlbnNob3RzV2l0aEZpbGVzKHJlc3VsdHMsIGZvbGRlclBhdGgpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdHMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnQgXCJyZXN1bHRzXCIgLSBtdXN0IGJlIGFuIGFycmF5LicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZm9sZGVyUGF0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdcImZvbGRlclBhdGhcIiBhcmd1bWVudCBjYW5ub3QgYmUgbnVsbCBvciBlbXB0eS4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGVwc1dpdGhTY3JlZW5zaG90ID0gW107XG4gICAgICAgIC8vIG1hcCBzdGVwcyB3aXRoIG5vbiBlbXB0eSBzY3JlZW5zaG90IGF0dHJpYnV0ZVxuICAgICAgICBmb3IgKGxldCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgICAgICAgICAgZm9yIChsZXQgc3VpdGUgb2YgcmVzdWx0LnN1aXRlcykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGNhemUgb2Ygc3VpdGUuY2FzZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9wdWxhdGVTdGVwc1dpdGhTY3JlZW5zaG90cyhjYXplLnN0ZXBzLCBzdGVwc1dpdGhTY3JlZW5zaG90KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2NyZWVuc2hvdEZpbGVQcmVmaXggPSAnc2NyZWVuc2hvdC0nO1xuICAgICAgICBjb25zdCBzY3JlZW5zaG90RmlsZVN1ZmZpeCA9ICcucG5nJztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGk8c3RlcHNXaXRoU2NyZWVuc2hvdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGZpbGVuYW1lID0gc2NyZWVuc2hvdEZpbGVQcmVmaXggKyBpICsgc2NyZWVuc2hvdEZpbGVTdWZmaXg7XG4gICAgICAgICAgICBsZXQgZmlsZXBhdGggPSBwYXRoLmpvaW4oZm9sZGVyUGF0aCwgZmlsZW5hbWUpO1xuICAgICAgICAgICAgbGV0IHN0ZXAgPSBzdGVwc1dpdGhTY3JlZW5zaG90W2ldO1xuICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhmaWxlcGF0aCwgc3RlcC5zY3JlZW5zaG90LCAnYmFzZTY0Jyk7XG4gICAgICAgICAgICBzdGVwLnNjcmVlbnNob3RGaWxlID0gZmlsZW5hbWU7XG4gICAgICAgICAgICBzdGVwLnNjcmVlbnNob3QgPSBudWxsOyAvLyBkb24ndCBzYXZlIGJhc2U2NCBzY3JlZW5zaG90IGRhdGUgdG8gdGhlIGZpbGVcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBmb3JtYXQgdG90YWwgZHVyYXRpb24gbGlrZSA6IDU2LjIgc2VjIC8gMzEgbWluIDU5IHNlYyAvIDEgaHIgMzEgbWluIDU5IHNlY1xuICAgIGZvcm1hdFRvdGFsRHVyYXRpb24ocmVzdWx0cykge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVzdWx0cykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBhcmd1bWVudCBcInJlc3VsdHNcIiAtIG11c3QgYmUgYW4gYXJyYXkuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgICAgICAgICAgZm9yIChsZXQgc3VpdGUgb2YgcmVzdWx0LnN1aXRlcykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGNhemUgb2Ygc3VpdGUuY2FzZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgc3RlcCBvZiBjYXplLnN0ZXBzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGVwLmR1cmF0aW9uID0gdGhpcy5mb3JtYXREdXJhdGlvbihzdGVwLmR1cmF0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBfcG9wdWxhdGVTdGVwc1dpdGhTY3JlZW5zaG90cyhzdGVwcywgc3RlcHNXaXRoU2NyZWVuc2hvdCkge1xuICAgICAgICBmb3IgKGxldCBzdGVwIG9mIHN0ZXBzKSB7XG4gICAgICAgICAgICBpZiAoc3RlcC5zY3JlZW5zaG90KSB7XG4gICAgICAgICAgICAgICAgc3RlcHNXaXRoU2NyZWVuc2hvdC5wdXNoKHN0ZXApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaGFuZGxlIGNoaWxkIHN0ZXBzIHRvb1xuICAgICAgICAgICAgaWYgKHN0ZXAuc3RlcHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wb3B1bGF0ZVN0ZXBzV2l0aFNjcmVlbnNob3RzKHN0ZXAuc3RlcHMsIHN0ZXBzV2l0aFNjcmVlbnNob3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZvcm1hdER1cmF0aW9uKG1pbGlzZWNvbmRzKSB7XG4gICAgICAgIHZhciBzZWNvbmRzID0gbWlsaXNlY29uZHMgLyAxMDAwO1xuICAgICAgICB2YXIgaGggICA9IE1hdGguZmxvb3Ioc2Vjb25kcyAvIDM2MDApO1xuICAgICAgICB2YXIgbWluID0gTWF0aC5mbG9vcigoc2Vjb25kcyAtIChoaCAqIDM2MDApKSAvIDYwKTtcbiAgICAgICAgdmFyIHNlYyA9IHNlY29uZHMgLSAoaGggKiAzNjAwKSAtIChtaW4gKiA2MCk7XG5cbiAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xuXG4gICAgICAgIGlmIChoaCkge1xuICAgICAgICAgICAgcmVzdWx0ICs9IGAke2hoLnRvRml4ZWQoMCl9IGhyIGA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbikge1xuICAgICAgICAgICAgcmVzdWx0ICs9IGAke21pbi50b0ZpeGVkKDApfSBtaW4gYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VjKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gYCR7c2VjLnRvRml4ZWQoMCl9IHNlY2A7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbiJdfQ==
|