appium-webdriveragent 4.4.3 → 4.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/PrivateHeaders/XCTest/XCUICoordinate.h +2 -0
- package/PrivateHeaders/XCTest/XCUIDevice.h +2 -0
- package/PrivateHeaders/XCTest/XCUIElement.h +2 -0
- package/README.md +1 -0
- package/Scripts/build-webdriveragent.js +1 -1
- package/Scripts/fetch-prebuilt-wda.js +1 -1
- package/WebDriverAgent.xcodeproj/project.xcworkspace/xcuserdata/elf.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/WebDriverAgent.xcodeproj/xcuserdata/elf.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +91 -0
- package/WebDriverAgent.xcodeproj/xcuserdata/elf.xcuserdatad/xcschemes/xcschememanagement.plist +59 -0
- package/WebDriverAgentLib/Categories/XCUIElement+FBForceTouch.h +13 -13
- package/WebDriverAgentLib/Categories/XCUIElement+FBForceTouch.m +34 -45
- package/WebDriverAgentLib/Commands/FBElementCommands.m +47 -40
- package/WebDriverAgentLib/Utilities/FBW3CActionsSynthesizer.m +22 -5
- package/WebDriverAgentRunner-Runner.app.zip +0 -0
- package/WebDriverAgentTests/IntegrationTests/FBAppiumTouchActionsIntegrationTests.m +1 -29
- package/WebDriverAgentTests/IntegrationTests/FBElementScreenshotTests.m +1 -16
- package/WebDriverAgentTests/IntegrationTests/FBForceTouchTests.m +16 -5
- package/WebDriverAgentTests/IntegrationTests/FBPasteboardTests.m +8 -2
- package/WebDriverAgentTests/IntegrationTests/FBW3CTouchActionsIntegrationTests.m +35 -4
- package/WebDriverAgentTests/IntegrationTests/XCUIDeviceHelperTests.m +17 -6
- package/build/index.js +1 -1
- package/build/lib/check-dependencies.js +2 -2
- package/build/lib/constants.js +1 -1
- package/build/lib/logger.js +2 -2
- package/build/lib/no-session-proxy.js +3 -3
- package/build/lib/utils.js +2 -2
- package/build/lib/webdriveragent.js +4 -4
- package/build/lib/xcodebuild.js +2 -2
- package/lib/check-dependencies.js +1 -1
- package/lib/logger.js +1 -1
- package/lib/no-session-proxy.js +1 -1
- package/lib/utils.js +1 -1
- package/lib/webdriveragent.js +2 -2
- package/lib/xcodebuild.js +1 -1
- package/package.json +5 -3
|
@@ -17,9 +17,9 @@ var _url2 = _interopRequireDefault(require("url"));
|
|
|
17
17
|
|
|
18
18
|
var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
19
19
|
|
|
20
|
-
var
|
|
20
|
+
var _driver = require("appium/driver");
|
|
21
21
|
|
|
22
|
-
var _support = require("
|
|
22
|
+
var _support = require("appium/support");
|
|
23
23
|
|
|
24
24
|
var _logger = _interopRequireDefault(require("./logger"));
|
|
25
25
|
|
|
@@ -345,7 +345,7 @@ class WebDriverAgent {
|
|
|
345
345
|
timeout: this.wdaConnectionTimeout,
|
|
346
346
|
keepAlive: true
|
|
347
347
|
};
|
|
348
|
-
this.jwproxy = new
|
|
348
|
+
this.jwproxy = new _driver.JWProxy(proxyOpts);
|
|
349
349
|
this.jwproxy.sessionId = sessionId;
|
|
350
350
|
this.proxyReqRes = this.jwproxy.proxyReqRes.bind(this.jwproxy);
|
|
351
351
|
this.noSessionProxy = new _noSessionProxy.NoSessionProxy(proxyOpts);
|
|
@@ -451,4 +451,4 @@ var _default = WebDriverAgent;
|
|
|
451
451
|
exports.default = _default;require('source-map-support').install();
|
|
452
452
|
|
|
453
453
|
|
|
454
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3dlYmRyaXZlcmFnZW50LmpzIiwibmFtZXMiOlsiV0RBX0xBVU5DSF9USU1FT1VUIiwiV0RBX0FHRU5UX1BPUlQiLCJXREFfQ0ZfQlVORExFX05BTUUiLCJTSEFSRURfUkVTT1VSQ0VTX0dVQVJEIiwiQXN5bmNMb2NrIiwiV2ViRHJpdmVyQWdlbnQiLCJjb25zdHJ1Y3RvciIsInhjb2RlVmVyc2lvbiIsImFyZ3MiLCJsb2ciLCJfIiwiY2xvbmUiLCJkZWZhdWx0TG9nZ2VyIiwiZGV2aWNlIiwicGxhdGZvcm1WZXJzaW9uIiwicGxhdGZvcm1OYW1lIiwiaW9zU2RrVmVyc2lvbiIsImhvc3QiLCJpc1JlYWxEZXZpY2UiLCJyZWFsRGV2aWNlIiwiaWRiIiwid2RhQnVuZGxlUGF0aCIsInNldFdEQVBhdGhzIiwiYm9vdHN0cmFwUGF0aCIsImFnZW50UGF0aCIsIndkYUxvY2FsUG9ydCIsIndkYVJlbW90ZVBvcnQiLCJ3ZGFCYXNlVXJsIiwiV0RBX0JBU0VfVVJMIiwicHJlYnVpbGRXREEiLCJ3ZWJEcml2ZXJBZ2VudFVybCIsInN0YXJ0ZWQiLCJ3ZGFDb25uZWN0aW9uVGltZW91dCIsInVzZVhjdGVzdHJ1bkZpbGUiLCJ1c2VQcmVidWlsdFdEQSIsImRlcml2ZWREYXRhUGF0aCIsIm1qcGVnU2VydmVyUG9ydCIsInVwZGF0ZWRXREFCdW5kbGVJZCIsInhjb2RlYnVpbGQiLCJYY29kZUJ1aWxkIiwic2hvd1hjb2RlTG9nIiwieGNvZGVDb25maWdGaWxlIiwieGNvZGVPcmdJZCIsInhjb2RlU2lnbmluZ0lkIiwia2V5Y2hhaW5QYXRoIiwia2V5Y2hhaW5QYXNzd29yZCIsInVzZVNpbXBsZUJ1aWxkVGVzdCIsImxhdW5jaFRpbWVvdXQiLCJ3ZGFMYXVuY2hUaW1lb3V0IiwiYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb24iLCJyZXN1bHRCdW5kbGVQYXRoIiwicmVzdWx0QnVuZGxlVmVyc2lvbiIsIkJPT1RTVFJBUF9QQVRIIiwiaW5mbyIsInBhdGgiLCJyZXNvbHZlIiwiY2xlYW51cE9ic29sZXRlUHJvY2Vzc2VzIiwib2Jzb2xldGVQaWRzIiwidXJsIiwicG9ydCIsImNtZExpbmUiLCJpbmNsdWRlcyIsInRvTG93ZXJDYXNlIiwidWRpZCIsImlzRW1wdHkiLCJkZWJ1ZyIsImxlbmd0aCIsImUiLCJ3YXJuIiwibWVzc2FnZSIsImlzUnVubmluZyIsImdldFN0YXR1cyIsImJhc2VQYXRoIiwibm9TZXNzaW9uUHJveHkiLCJOb1Nlc3Npb25Qcm94eSIsInNlcnZlciIsImhvc3RuYW1lIiwiYmFzZSIsInRpbWVvdXQiLCJjb21tYW5kIiwiZXJyIiwiaHJlZiIsInVuaW5zdGFsbCIsImJ1bmRsZUlkcyIsImdldFVzZXJJbnN0YWxsZWRCdW5kbGVJZHNCeUJ1bmRsZU5hbWUiLCJidW5kbGVJZCIsInJlbW92ZUFwcCIsIl9jbGVhbnVwUHJvamVjdElmRnJlc2giLCJob21lRm9sZGVyIiwicHJvY2VzcyIsImVudiIsIkhPTUUiLCJjdXJyZW50VXBncmFkZVRpbWVzdGFtcCIsImlzSW50ZWdlciIsInRpbWVzdGFtcFBhdGgiLCJXREFfVVBHUkFERV9USU1FU1RBTVBfUEFUSCIsImRpZFRpbWVzdGFtcEV4aXN0IiwiZnMiLCJleGlzdHMiLCJhY2Nlc3MiLCJXX09LIiwiaWduIiwicmVjZW50VXBncmFkZVRpbWVzdGFtcCIsInBhcnNlSW50IiwicmVhZEZpbGUiLCJkaXJuYW1lIiwid3JpdGVGaWxlIiwiY2xlYW5Qcm9qZWN0IiwibGF1bmNoIiwic2Vzc2lvbklkIiwic2V0dXBQcm94aWVzIiwiRXJyb3IiLCJzeW5jaHJvbml6YXRpb25LZXkiLCJub3JtYWxpemUiLCJhY3F1aXJlIiwic3RhcnRXaXRoSURCIiwiaW5pdCIsInByZWJ1aWxkIiwic3RhcnQiLCJ3ZGFCdW5kbGVJZCIsInRlc3RCdW5kbGVJZCIsInByZXBhcmVXREEiLCJVU0VfUE9SVCIsIldEQV9QUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSIiwiTUpQRUdfU0VSVkVSX1BPUlQiLCJydW5YQ1VJVGVzdCIsInBhcnNlQnVuZGxlSWQiLCJpbmZvUGxpc3RQYXRoIiwiam9pbiIsImluZm9QbGlzdCIsInBsaXN0IiwicGFyc2VQbGlzdCIsIkNGQnVuZGxlSWRlbnRpZmllciIsImZldGNoV0RBQnVuZGxlIiwiaXNBcHBJbnN0YWxsZWQiLCJpbnN0YWxsQXBwIiwiaW5zdGFsbFhDVGVzdEJ1bmRsZSIsIndkYUJ1bmRsZVBhdGhzIiwiZ2xvYiIsIldEQV9SVU5ORVJfQVBQIiwiYWJzb2x1dGUiLCJpc1NvdXJjZUZyZXNoIiwiZXhpc3RzUHJvbWlzZXMiLCJzZXAiLCJtYXAiLCJzdWJQYXRoIiwiQiIsImFsbCIsInNvbWUiLCJ2IiwicHJveHlPcHRzIiwia2VlcEFsaXZlIiwiandwcm94eSIsIkpXUHJveHkiLCJwcm94eVJlcVJlcyIsImJpbmQiLCJxdWl0IiwicmVzZXQiLCJfdXJsIiwicGFyc2UiLCJwcm90b2NvbCIsImZ1bGx5U3RhcnRlZCIsInJldHJpZXZlRGVyaXZlZERhdGFQYXRoIiwic2V0dXBDYWNoaW5nIiwic3RhdHVzIiwiYnVpbGQiLCJwcm9kdWN0QnVuZGxlSWRlbnRpZmllciIsInVwZ3JhZGVkQXQiLCJ1dGlsIiwiaGFzVmFsdWUiLCJXREFfUlVOTkVSX0JVTkRMRV9JRCIsImFjdHVhbFVwZ3JhZGVUaW1lc3RhbXAiLCJ0b0xvd2VyIiwicXVpdEFuZFVuaW5zdGFsbCJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi93ZWJkcml2ZXJhZ2VudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyBKV1Byb3h5IH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyBmcywgdXRpbCwgcGxpc3QsIG1rZGlycCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgZGVmYXVsdExvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBOb1Nlc3Npb25Qcm94eSB9IGZyb20gJy4vbm8tc2Vzc2lvbi1wcm94eSc7XG5pbXBvcnQge1xuICBnZXRXREFVcGdyYWRlVGltZXN0YW1wLCByZXNldFRlc3RQcm9jZXNzZXMsIGdldFBJRHNMaXN0ZW5pbmdPblBvcnRcbn0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgWGNvZGVCdWlsZCBmcm9tICcuL3hjb2RlYnVpbGQnO1xuaW1wb3J0IEFzeW5jTG9jayBmcm9tICdhc3luYy1sb2NrJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgYnVuZGxlV0RBU2ltIH0gZnJvbSAnLi9jaGVjay1kZXBlbmRlbmNpZXMnO1xuaW1wb3J0IHtcbiAgQk9PVFNUUkFQX1BBVEgsIFdEQV9SVU5ORVJfQlVORExFX0lELCBXREFfUlVOTkVSX0FQUCxcbiAgV0RBX0JBU0VfVVJMLCBXREFfVVBHUkFERV9USU1FU1RBTVBfUEFUSCxcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5jb25zdCBXREFfTEFVTkNIX1RJTUVPVVQgPSA2MCAqIDEwMDA7XG5jb25zdCBXREFfQUdFTlRfUE9SVCA9IDgxMDA7XG5jb25zdCBXREFfQ0ZfQlVORExFX05BTUUgPSAnV2ViRHJpdmVyQWdlbnRSdW5uZXItUnVubmVyJztcbmNvbnN0IFNIQVJFRF9SRVNPVVJDRVNfR1VBUkQgPSBuZXcgQXN5bmNMb2NrKCk7XG5cbmNsYXNzIFdlYkRyaXZlckFnZW50IHtcbiAgY29uc3RydWN0b3IgKHhjb2RlVmVyc2lvbiwgYXJncyA9IHt9LCBsb2cgPSBudWxsKSB7XG4gICAgdGhpcy54Y29kZVZlcnNpb24gPSB4Y29kZVZlcnNpb247XG5cbiAgICB0aGlzLmFyZ3MgPSBfLmNsb25lKGFyZ3MpO1xuICAgIHRoaXMubG9nID0gbG9nID8/IGRlZmF1bHRMb2dnZXI7XG5cbiAgICB0aGlzLmRldmljZSA9IGFyZ3MuZGV2aWNlO1xuICAgIHRoaXMucGxhdGZvcm1WZXJzaW9uID0gYXJncy5wbGF0Zm9ybVZlcnNpb247XG4gICAgdGhpcy5wbGF0Zm9ybU5hbWUgPSBhcmdzLnBsYXRmb3JtTmFtZTtcbiAgICB0aGlzLmlvc1Nka1ZlcnNpb24gPSBhcmdzLmlvc1Nka1ZlcnNpb247XG4gICAgdGhpcy5ob3N0ID0gYXJncy5ob3N0O1xuICAgIHRoaXMuaXNSZWFsRGV2aWNlID0gISFhcmdzLnJlYWxEZXZpY2U7XG4gICAgdGhpcy5pZGIgPSAoYXJncy5kZXZpY2UgfHwge30pLmlkYjtcbiAgICB0aGlzLndkYUJ1bmRsZVBhdGggPSBhcmdzLndkYUJ1bmRsZVBhdGg7XG5cbiAgICB0aGlzLnNldFdEQVBhdGhzKGFyZ3MuYm9vdHN0cmFwUGF0aCwgYXJncy5hZ2VudFBhdGgpO1xuXG4gICAgdGhpcy53ZGFMb2NhbFBvcnQgPSBhcmdzLndkYUxvY2FsUG9ydDtcbiAgICB0aGlzLndkYVJlbW90ZVBvcnQgPSBhcmdzLndkYUxvY2FsUG9ydCB8fCBXREFfQUdFTlRfUE9SVDtcbiAgICB0aGlzLndkYUJhc2VVcmwgPSBhcmdzLndkYUJhc2VVcmwgfHwgV0RBX0JBU0VfVVJMO1xuXG4gICAgdGhpcy5wcmVidWlsZFdEQSA9IGFyZ3MucHJlYnVpbGRXREE7XG5cbiAgICB0aGlzLndlYkRyaXZlckFnZW50VXJsID0gYXJncy53ZWJEcml2ZXJBZ2VudFVybDtcblxuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy53ZGFDb25uZWN0aW9uVGltZW91dCA9IGFyZ3Mud2RhQ29ubmVjdGlvblRpbWVvdXQ7XG5cbiAgICB0aGlzLnVzZVhjdGVzdHJ1bkZpbGUgPSBhcmdzLnVzZVhjdGVzdHJ1bkZpbGU7XG4gICAgdGhpcy51c2VQcmVidWlsdFdEQSA9IGFyZ3MudXNlUHJlYnVpbHRXREE7XG4gICAgdGhpcy5kZXJpdmVkRGF0YVBhdGggPSBhcmdzLmRlcml2ZWREYXRhUGF0aDtcbiAgICB0aGlzLm1qcGVnU2VydmVyUG9ydCA9IGFyZ3MubWpwZWdTZXJ2ZXJQb3J0O1xuXG4gICAgdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQgPSBhcmdzLnVwZGF0ZWRXREFCdW5kbGVJZDtcblxuICAgIHRoaXMueGNvZGVidWlsZCA9IG5ldyBYY29kZUJ1aWxkKHRoaXMueGNvZGVWZXJzaW9uLCB0aGlzLmRldmljZSwge1xuICAgICAgcGxhdGZvcm1WZXJzaW9uOiB0aGlzLnBsYXRmb3JtVmVyc2lvbixcbiAgICAgIHBsYXRmb3JtTmFtZTogdGhpcy5wbGF0Zm9ybU5hbWUsXG4gICAgICBpb3NTZGtWZXJzaW9uOiB0aGlzLmlvc1Nka1ZlcnNpb24sXG4gICAgICBhZ2VudFBhdGg6IHRoaXMuYWdlbnRQYXRoLFxuICAgICAgYm9vdHN0cmFwUGF0aDogdGhpcy5ib290c3RyYXBQYXRoLFxuICAgICAgcmVhbERldmljZTogdGhpcy5pc1JlYWxEZXZpY2UsXG4gICAgICBzaG93WGNvZGVMb2c6IGFyZ3Muc2hvd1hjb2RlTG9nLFxuICAgICAgeGNvZGVDb25maWdGaWxlOiBhcmdzLnhjb2RlQ29uZmlnRmlsZSxcbiAgICAgIHhjb2RlT3JnSWQ6IGFyZ3MueGNvZGVPcmdJZCxcbiAgICAgIHhjb2RlU2lnbmluZ0lkOiBhcmdzLnhjb2RlU2lnbmluZ0lkLFxuICAgICAga2V5Y2hhaW5QYXRoOiBhcmdzLmtleWNoYWluUGF0aCxcbiAgICAgIGtleWNoYWluUGFzc3dvcmQ6IGFyZ3Mua2V5Y2hhaW5QYXNzd29yZCxcbiAgICAgIHVzZVNpbXBsZUJ1aWxkVGVzdDogYXJncy51c2VTaW1wbGVCdWlsZFRlc3QsXG4gICAgICB1c2VQcmVidWlsdFdEQTogYXJncy51c2VQcmVidWlsdFdEQSxcbiAgICAgIHVwZGF0ZWRXREFCdW5kbGVJZDogdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQsXG4gICAgICBsYXVuY2hUaW1lb3V0OiBhcmdzLndkYUxhdW5jaFRpbWVvdXQgfHwgV0RBX0xBVU5DSF9USU1FT1VULFxuICAgICAgd2RhUmVtb3RlUG9ydDogdGhpcy53ZGFSZW1vdGVQb3J0LFxuICAgICAgdXNlWGN0ZXN0cnVuRmlsZTogdGhpcy51c2VYY3Rlc3RydW5GaWxlLFxuICAgICAgZGVyaXZlZERhdGFQYXRoOiBhcmdzLmRlcml2ZWREYXRhUGF0aCxcbiAgICAgIG1qcGVnU2VydmVyUG9ydDogdGhpcy5tanBlZ1NlcnZlclBvcnQsXG4gICAgICBhbGxvd1Byb3Zpc2lvbmluZ0RldmljZVJlZ2lzdHJhdGlvbjogYXJncy5hbGxvd1Byb3Zpc2lvbmluZ0RldmljZVJlZ2lzdHJhdGlvbixcbiAgICAgIHJlc3VsdEJ1bmRsZVBhdGg6IGFyZ3MucmVzdWx0QnVuZGxlUGF0aCxcbiAgICAgIHJlc3VsdEJ1bmRsZVZlcnNpb246IGFyZ3MucmVzdWx0QnVuZGxlVmVyc2lvbixcbiAgICB9LCB0aGlzLmxvZyk7XG4gIH1cblxuICBzZXRXREFQYXRocyAoYm9vdHN0cmFwUGF0aCwgYWdlbnRQYXRoKSB7XG4gICAgLy8gYWxsb3cgdGhlIHVzZXIgdG8gc3BlY2lmeSBhIHBsYWNlIGZvciBXREEuIFRoaXMgaXMgdW5kb2N1bWVudGVkIGFuZFxuICAgIC8vIG9ubHkgaGVyZSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRlc3RpbmcgZGV2ZWxvcG1lbnQgb2YgV0RBXG4gICAgdGhpcy5ib290c3RyYXBQYXRoID0gYm9vdHN0cmFwUGF0aCB8fCBCT09UU1RSQVBfUEFUSDtcbiAgICB0aGlzLmxvZy5pbmZvKGBVc2luZyBXREEgcGF0aDogJyR7dGhpcy5ib290c3RyYXBQYXRofSdgKTtcblxuICAgIC8vIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdlIG5lZWQgdG8gYmUgYWJsZSB0byBzcGVjaWZ5IGFnZW50UGF0aCB0b29cbiAgICB0aGlzLmFnZW50UGF0aCA9IGFnZW50UGF0aCB8fCBwYXRoLnJlc29sdmUodGhpcy5ib290c3RyYXBQYXRoLCAnV2ViRHJpdmVyQWdlbnQueGNvZGVwcm9qJyk7XG4gICAgdGhpcy5sb2cuaW5mbyhgVXNpbmcgV0RBIGFnZW50OiAnJHt0aGlzLmFnZW50UGF0aH0nYCk7XG4gIH1cblxuICBhc3luYyBjbGVhbnVwT2Jzb2xldGVQcm9jZXNzZXMgKCkge1xuICAgIGNvbnN0IG9ic29sZXRlUGlkcyA9IGF3YWl0IGdldFBJRHNMaXN0ZW5pbmdPblBvcnQodGhpcy51cmwucG9ydCxcbiAgICAgIChjbWRMaW5lKSA9PiBjbWRMaW5lLmluY2x1ZGVzKCcvV2ViRHJpdmVyQWdlbnRSdW5uZXInKSAmJlxuICAgICAgICAhY21kTGluZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuZGV2aWNlLnVkaWQudG9Mb3dlckNhc2UoKSkpO1xuXG4gICAgaWYgKF8uaXNFbXB0eShvYnNvbGV0ZVBpZHMpKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgTm8gb2Jzb2xldGUgY2FjaGVkIHByb2Nlc3NlcyBmcm9tIHByZXZpb3VzIFdEQSBzZXNzaW9ucyBgICtcbiAgICAgICAgYGxpc3RlbmluZyBvbiBwb3J0ICR7dGhpcy51cmwucG9ydH0gaGF2ZSBiZWVuIGZvdW5kYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2cuaW5mbyhgRGV0ZWN0ZWQgJHtvYnNvbGV0ZVBpZHMubGVuZ3RofSBvYnNvbGV0ZSBjYWNoZWQgcHJvY2VzcyR7b2Jzb2xldGVQaWRzLmxlbmd0aCA9PT0gMSA/ICcnIDogJ2VzJ30gYCArXG4gICAgICBgZnJvbSBwcmV2aW91cyBXREEgc2Vzc2lvbnMuIENsZWFuaW5nIHRoZW0gdXBgKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlYygna2lsbCcsIG9ic29sZXRlUGlkcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cud2FybihgRmFpbGVkIHRvIGtpbGwgb2Jzb2xldGUgY2FjaGVkIHByb2Nlc3Mke29ic29sZXRlUGlkcy5sZW5ndGggPT09IDEgPyAnJyA6ICdlcyd9ICcke29ic29sZXRlUGlkc30nLiBgICtcbiAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGJvb2xlYW4gaWYgV0RBIGlzIHJ1bm5pbmcgb3Igbm90XG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgV0RBIGlzIHJ1bm5pbmdcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBpbnZhbGlkIHJlc3BvbnNlIGNvZGUgb3IgYm9keVxuICAgKi9cbiAgYXN5bmMgaXNSdW5uaW5nICgpIHtcbiAgICByZXR1cm4gISEoYXdhaXQgdGhpcy5nZXRTdGF0dXMoKSk7XG4gIH1cblxuICBnZXQgYmFzZVBhdGggKCkge1xuICAgIGlmICh0aGlzLnVybC5wYXRoID09PSAnLycpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudXJsLnBhdGggfHwgJyc7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGN1cnJlbnQgcnVubmluZyBXREEncyBzdGF0dXMgbGlrZSBiZWxvd1xuICAgKiB7XG4gICAqICAgXCJzdGF0ZVwiOiBcInN1Y2Nlc3NcIixcbiAgICogICBcIm9zXCI6IHtcbiAgICogICAgIFwibmFtZVwiOiBcImlPU1wiLFxuICAgKiAgICAgXCJ2ZXJzaW9uXCI6IFwiMTEuNFwiLFxuICAgKiAgICAgXCJzZGtWZXJzaW9uXCI6IFwiMTEuM1wiXG4gICAqICAgfSxcbiAgICogICBcImlvc1wiOiB7XG4gICAqICAgICBcInNpbXVsYXRvclZlcnNpb25cIjogXCIxMS40XCIsXG4gICAqICAgICBcImlwXCI6IFwiMTcyLjI1NC45OS4zNFwiXG4gICAqICAgfSxcbiAgICogICBcImJ1aWxkXCI6IHtcbiAgICogICAgIFwidGltZVwiOiBcIkp1biAyNCAyMDE4IDE3OjA4OjIxXCIsXG4gICAqICAgICBcInByb2R1Y3RCdW5kbGVJZGVudGlmaWVyXCI6IFwiY29tLmZhY2Vib29rLldlYkRyaXZlckFnZW50UnVubmVyXCJcbiAgICogICB9XG4gICAqIH1cbiAgICpcbiAgICogQHJldHVybiB7P29iamVjdH0gU3RhdGUgT2JqZWN0XG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgaW52YWxpZCByZXNwb25zZSBjb2RlIG9yIGJvZHlcbiAgICovXG4gIGFzeW5jIGdldFN0YXR1cyAoKSB7XG4gICAgY29uc3Qgbm9TZXNzaW9uUHJveHkgPSBuZXcgTm9TZXNzaW9uUHJveHkoe1xuICAgICAgc2VydmVyOiB0aGlzLnVybC5ob3N0bmFtZSxcbiAgICAgIHBvcnQ6IHRoaXMudXJsLnBvcnQsXG4gICAgICBiYXNlOiB0aGlzLmJhc2VQYXRoLFxuICAgICAgdGltZW91dDogMzAwMCxcbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IG5vU2Vzc2lvblByb3h5LmNvbW1hbmQoJy9zdGF0dXMnLCAnR0VUJyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgV0RBIGlzIG5vdCBsaXN0ZW5pbmcgYXQgJyR7dGhpcy51cmwuaHJlZn0nYCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5pbnN0YWxsIFdEQXMgZnJvbSB0aGUgdGVzdCBkZXZpY2UuXG4gICAqIE92ZXIgWGNvZGUgMTEsIG11bHRpcGxlIFdEQSBjYW4gYmUgaW4gdGhlIGRldmljZSBzaW5jZSBYY29kZSAxMSBnZW5lcmF0ZXMgZGlmZmVyZW50IFdEQS5cbiAgICogQXBwaXVtIGRvZXMgbm90IGV4cGVjdCBtdWx0aXBsZSBXREFzIGFyZSBydW5uaW5nIG9uIGEgZGV2aWNlLlxuICAgKi9cbiAgYXN5bmMgdW5pbnN0YWxsICgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYnVuZGxlSWRzID0gYXdhaXQgdGhpcy5kZXZpY2UuZ2V0VXNlckluc3RhbGxlZEJ1bmRsZUlkc0J5QnVuZGxlTmFtZShXREFfQ0ZfQlVORExFX05BTUUpO1xuICAgICAgaWYgKF8uaXNFbXB0eShidW5kbGVJZHMpKSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKCdObyBXREFzIG9uIHRoZSBkZXZpY2UuJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2cuZGVidWcoYFVuaW5zdGFsbGluZyBXREFzOiAnJHtidW5kbGVJZHN9J2ApO1xuICAgICAgZm9yIChjb25zdCBidW5kbGVJZCBvZiBidW5kbGVJZHMpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5kZXZpY2UucmVtb3ZlQXBwKGJ1bmRsZUlkKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhlKTtcbiAgICAgIHRoaXMubG9nLndhcm4oYFdlYkRyaXZlckFnZW50IHVuaW5zdGFsbCBmYWlsZWQuIFBlcmhhcHMsIGl0IGlzIGFscmVhZHkgdW5pbnN0YWxsZWQ/IGAgK1xuICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF9jbGVhbnVwUHJvamVjdElmRnJlc2ggKCkge1xuICAgIGNvbnN0IGhvbWVGb2xkZXIgPSBwcm9jZXNzLmVudi5IT01FO1xuICAgIGlmICghaG9tZUZvbGRlcikge1xuICAgICAgdGhpcy5sb2cuaW5mbygnVGhlIEhPTUUgZm9sZGVyIHBhdGggY2Fubm90IGJlIGRldGVybWluZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50VXBncmFkZVRpbWVzdGFtcCA9IGF3YWl0IGdldFdEQVVwZ3JhZGVUaW1lc3RhbXAoKTtcbiAgICBpZiAoIV8uaXNJbnRlZ2VyKGN1cnJlbnRVcGdyYWRlVGltZXN0YW1wKSkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnSXQgaXMgaW1wb3NzaWJsZSB0byBkZXRlcm1pbmUgdGhlIHRpbWVzdGFtcCBvZiB0aGUgcGFja2FnZScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRpbWVzdGFtcFBhdGggPSBwYXRoLnJlc29sdmUoaG9tZUZvbGRlciwgV0RBX1VQR1JBREVfVElNRVNUQU1QX1BBVEgpO1xuICAgIGNvbnN0IGRpZFRpbWVzdGFtcEV4aXN0ID0gYXdhaXQgZnMuZXhpc3RzKHRpbWVzdGFtcFBhdGgpO1xuICAgIGlmIChkaWRUaW1lc3RhbXBFeGlzdCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZnMuYWNjZXNzKHRpbWVzdGFtcFBhdGgsIGZzLldfT0spO1xuICAgICAgfSBjYXRjaCAoaWduKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYFdlYkRyaXZlckFnZW50IHVwZ3JhZGUgdGltZXN0YW1wIGF0ICcke3RpbWVzdGFtcFBhdGh9JyBpcyBub3Qgd3JpdGVhYmxlLiBgICtcbiAgICAgICAgICBgU2tpcHBpbmcgc291cmNlcyBjbGVhbnVwYCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY2VudFVwZ3JhZGVUaW1lc3RhbXAgPSBwYXJzZUludChhd2FpdCBmcy5yZWFkRmlsZSh0aW1lc3RhbXBQYXRoLCAndXRmOCcpLCAxMCk7XG4gICAgICBpZiAoXy5pc0ludGVnZXIocmVjZW50VXBncmFkZVRpbWVzdGFtcCkpIHtcbiAgICAgICAgaWYgKHJlY2VudFVwZ3JhZGVUaW1lc3RhbXAgPj0gY3VycmVudFVwZ3JhZGVUaW1lc3RhbXApIHtcbiAgICAgICAgICB0aGlzLmxvZy5pbmZvKGBXZWJEcml2ZXJBZ2VudCBkb2VzIG5vdCBuZWVkIGEgY2xlYW51cC4gVGhlIHNvdXJjZXMgYXJlIHVwIHRvIGRhdGUgYCArXG4gICAgICAgICAgICBgKCR7cmVjZW50VXBncmFkZVRpbWVzdGFtcH0gPj0gJHtjdXJyZW50VXBncmFkZVRpbWVzdGFtcH0pYCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9nLmluZm8oYFdlYkRyaXZlckFnZW50IHNvdXJjZXMgaGF2ZSBiZWVuIHVwZ3JhZGVkIGAgK1xuICAgICAgICAgIGAoJHtyZWNlbnRVcGdyYWRlVGltZXN0YW1wfSA8ICR7Y3VycmVudFVwZ3JhZGVUaW1lc3RhbXB9KWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgVGhlIHJlY2VudCB1cGdyYWRlIHRpbWVzdGFtcCBhdCAnJHt0aW1lc3RhbXBQYXRofScgaXMgY29ycnVwdGVkLiBUcnlpbmcgdG8gZml4IGl0YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG1rZGlycChwYXRoLmRpcm5hbWUodGltZXN0YW1wUGF0aCkpO1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHRpbWVzdGFtcFBhdGgsIGAke2N1cnJlbnRVcGdyYWRlVGltZXN0YW1wfWAsICd1dGY4Jyk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgU3RvcmVkIHRoZSByZWNlbnQgV2ViRHJpdmVyQWdlbnQgdXBncmFkZSB0aW1lc3RhbXAgJHtjdXJyZW50VXBncmFkZVRpbWVzdGFtcH0gYCArXG4gICAgICAgIGBhdCAnJHt0aW1lc3RhbXBQYXRofSdgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBVbmFibGUgdG8gY3JlYXRlIHRoZSByZWNlbnQgV2ViRHJpdmVyQWdlbnQgdXBncmFkZSB0aW1lc3RhbXAgYXQgJyR7dGltZXN0YW1wUGF0aH0nLiBgICtcbiAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWRpZFRpbWVzdGFtcEV4aXN0KSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdUaGVyZSBpcyBubyBuZWVkIHRvIHBlcmZvcm0gdGhlIHByb2plY3QgY2xlYW51cC4gQSBmcmVzaCBpbnN0YWxsIGhhcyBiZWVuIGRldGVjdGVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMueGNvZGVidWlsZC5jbGVhblByb2plY3QoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKGBDYW5ub3QgcGVyZm9ybSBXZWJEcml2ZXJBZ2VudCBwcm9qZWN0IGNsZWFudXAuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGN1cnJlbnQgcnVubmluZyBXREEncyBzdGF0dXMgbGlrZSBiZWxvdyBhZnRlciBsYXVuY2hpbmcgV0RBXG4gICAqIHtcbiAgICogICBcInN0YXRlXCI6IFwic3VjY2Vzc1wiLFxuICAgKiAgIFwib3NcIjoge1xuICAgKiAgICAgXCJuYW1lXCI6IFwiaU9TXCIsXG4gICAqICAgICBcInZlcnNpb25cIjogXCIxMS40XCIsXG4gICAqICAgICBcInNka1ZlcnNpb25cIjogXCIxMS4zXCJcbiAgICogICB9LFxuICAgKiAgIFwiaW9zXCI6IHtcbiAgICogICAgIFwic2ltdWxhdG9yVmVyc2lvblwiOiBcIjExLjRcIixcbiAgICogICAgIFwiaXBcIjogXCIxNzIuMjU0Ljk5LjM0XCJcbiAgICogICB9LFxuICAgKiAgIFwiYnVpbGRcIjoge1xuICAgKiAgICAgXCJ0aW1lXCI6IFwiSnVuIDI0IDIwMTggMTc6MDg6MjFcIixcbiAgICogICAgIFwicHJvZHVjdEJ1bmRsZUlkZW50aWZpZXJcIjogXCJjb20uZmFjZWJvb2suV2ViRHJpdmVyQWdlbnRSdW5uZXJcIlxuICAgKiAgIH1cbiAgICogfVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2Vzc2lvbklkIExhdW5jaCBXREEgYW5kIGVzdGFibGlzaCB0aGUgc2Vzc2lvbiB3aXRoIHRoaXMgc2Vzc2lvbklkXG4gICAqIEByZXR1cm4gez9vYmplY3R9IFN0YXRlIE9iamVjdFxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGludmFsaWQgcmVzcG9uc2UgY29kZSBvciBib2R5XG4gICAqL1xuICBhc3luYyBsYXVuY2ggKHNlc3Npb25JZCkge1xuICAgIGlmICh0aGlzLndlYkRyaXZlckFnZW50VXJsKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBVc2luZyBwcm92aWRlZCBXZWJkcml2ZXJBZ2VudCBhdCAnJHt0aGlzLndlYkRyaXZlckFnZW50VXJsfSdgKTtcbiAgICAgIHRoaXMudXJsID0gdGhpcy53ZWJEcml2ZXJBZ2VudFVybDtcbiAgICAgIHRoaXMuc2V0dXBQcm94aWVzKHNlc3Npb25JZCk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRTdGF0dXMoKTtcbiAgICB9XG5cbiAgICB0aGlzLmxvZy5pbmZvKCdMYXVuY2hpbmcgV2ViRHJpdmVyQWdlbnQgb24gdGhlIGRldmljZScpO1xuXG4gICAgdGhpcy5zZXR1cFByb3hpZXMoc2Vzc2lvbklkKTtcblxuICAgIGlmICghdGhpcy51c2VYY3Rlc3RydW5GaWxlICYmICFhd2FpdCBmcy5leGlzdHModGhpcy5hZ2VudFBhdGgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRyeWluZyB0byB1c2UgV2ViRHJpdmVyQWdlbnQgcHJvamVjdCBhdCAnJHt0aGlzLmFnZW50UGF0aH0nIGJ1dCB0aGUgYCArXG4gICAgICAgICAgICAgICAgICAgICAgJ2ZpbGUgZG9lcyBub3QgZXhpc3QnKTtcbiAgICB9XG5cbiAgICAvLyB1c2VYY3Rlc3RydW5GaWxlIGFuZCB1c2VQcmVidWlsdFdEQSB1c2UgZXhpc3RpbmcgZGVwZW5kZW5jaWVzXG4gICAgLy8gSXQgZGVwZW5kcyBvbiB1c2VyIHNpZGVcbiAgICBpZiAodGhpcy5pZGIgfHwgdGhpcy51c2VYY3Rlc3RydW5GaWxlIHx8ICh0aGlzLmRlcml2ZWREYXRhUGF0aCAmJiB0aGlzLnVzZVByZWJ1aWx0V0RBKSkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnU2tpcHBlZCBXREEgcHJvamVjdCBjbGVhbnVwIGFjY29yZGluZyB0byB0aGUgcHJvdmlkZWQgY2FwYWJpbGl0aWVzJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN5bmNocm9uaXphdGlvbktleSA9IHBhdGgubm9ybWFsaXplKHRoaXMuYm9vdHN0cmFwUGF0aCk7XG4gICAgICBhd2FpdCBTSEFSRURfUkVTT1VSQ0VTX0dVQVJELmFjcXVpcmUoc3luY2hyb25pemF0aW9uS2V5LFxuICAgICAgICBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLl9jbGVhbnVwUHJvamVjdElmRnJlc2goKSk7XG4gICAgfVxuXG4gICAgLy8gV2UgbmVlZCB0byBwcm92aWRlIFdEQSBsb2NhbCBwb3J0LCBiZWNhdXNlIGl0IG1pZ2h0IGJlIG9jY3VwaWVkXG4gICAgYXdhaXQgcmVzZXRUZXN0UHJvY2Vzc2VzKHRoaXMuZGV2aWNlLnVkaWQsICF0aGlzLmlzUmVhbERldmljZSk7XG5cbiAgICBpZiAodGhpcy5pZGIpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnN0YXJ0V2l0aElEQigpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMueGNvZGVidWlsZC5pbml0KHRoaXMubm9TZXNzaW9uUHJveHkpO1xuXG4gICAgLy8gU3RhcnQgdGhlIHhjb2RlYnVpbGQgcHJvY2Vzc1xuICAgIGlmICh0aGlzLnByZWJ1aWxkV0RBKSB7XG4gICAgICBhd2FpdCB0aGlzLnhjb2RlYnVpbGQucHJlYnVpbGQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMueGNvZGVidWlsZC5zdGFydCgpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRXaXRoSURCICgpIHtcbiAgICB0aGlzLmxvZy5pbmZvKCdXaWxsIGxhdW5jaCBXREEgd2l0aCBpZGIgaW5zdGVhZCBvZiB4Y29kZWJ1aWxkIHNpbmNlIHRoZSBjb3JyZXNwb25kaW5nIGZsYWcgaXMgZW5hYmxlZCcpO1xuICAgIGNvbnN0IHt3ZGFCdW5kbGVJZCwgdGVzdEJ1bmRsZUlkfSA9IGF3YWl0IHRoaXMucHJlcGFyZVdEQSgpO1xuICAgIGNvbnN0IGVudiA9IHtcbiAgICAgIFVTRV9QT1JUOiB0aGlzLndkYVJlbW90ZVBvcnQsXG4gICAgICBXREFfUFJPRFVDVF9CVU5ETEVfSURFTlRJRklFUjogdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQsXG4gICAgfTtcbiAgICBpZiAodGhpcy5tanBlZ1NlcnZlclBvcnQpIHtcbiAgICAgIGVudi5NSlBFR19TRVJWRVJfUE9SVCA9IHRoaXMubWpwZWdTZXJ2ZXJQb3J0O1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmlkYi5ydW5YQ1VJVGVzdCh3ZGFCdW5kbGVJZCwgd2RhQnVuZGxlSWQsIHRlc3RCdW5kbGVJZCwge2Vudn0pO1xuICB9XG5cbiAgYXN5bmMgcGFyc2VCdW5kbGVJZCAod2RhQnVuZGxlUGF0aCkge1xuICAgIGNvbnN0IGluZm9QbGlzdFBhdGggPSBwYXRoLmpvaW4od2RhQnVuZGxlUGF0aCwgJ0luZm8ucGxpc3QnKTtcbiAgICBjb25zdCBpbmZvUGxpc3QgPSBhd2FpdCBwbGlzdC5wYXJzZVBsaXN0KGF3YWl0IGZzLnJlYWRGaWxlKGluZm9QbGlzdFBhdGgpKTtcbiAgICBpZiAoIWluZm9QbGlzdC5DRkJ1bmRsZUlkZW50aWZpZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgYnVuZGxlIGlkIGluICcke2luZm9QbGlzdFBhdGh9J2ApO1xuICAgIH1cbiAgICByZXR1cm4gaW5mb1BsaXN0LkNGQnVuZGxlSWRlbnRpZmllcjtcbiAgfVxuXG4gIGFzeW5jIHByZXBhcmVXREEgKCkge1xuICAgIGNvbnN0IHdkYUJ1bmRsZVBhdGggPSB0aGlzLndkYUJ1bmRsZVBhdGggfHwgYXdhaXQgdGhpcy5mZXRjaFdEQUJ1bmRsZSgpO1xuICAgIGNvbnN0IHdkYUJ1bmRsZUlkID0gYXdhaXQgdGhpcy5wYXJzZUJ1bmRsZUlkKHdkYUJ1bmRsZVBhdGgpO1xuICAgIGlmICghYXdhaXQgdGhpcy5kZXZpY2UuaXNBcHBJbnN0YWxsZWQod2RhQnVuZGxlSWQpKSB7XG4gICAgICBhd2FpdCB0aGlzLmRldmljZS5pbnN0YWxsQXBwKHdkYUJ1bmRsZVBhdGgpO1xuICAgIH1cbiAgICBjb25zdCB0ZXN0QnVuZGxlSWQgPSBhd2FpdCB0aGlzLmlkYi5pbnN0YWxsWENUZXN0QnVuZGxlKHBhdGguam9pbih3ZGFCdW5kbGVQYXRoLCAnUGx1Z0lucycsICdXZWJEcml2ZXJBZ2VudFJ1bm5lci54Y3Rlc3QnKSk7XG4gICAgcmV0dXJuIHt3ZGFCdW5kbGVJZCwgdGVzdEJ1bmRsZUlkLCB3ZGFCdW5kbGVQYXRofTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoV0RBQnVuZGxlICgpIHtcbiAgICBpZiAoIXRoaXMuZGVyaXZlZERhdGFQYXRoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgYnVuZGxlV0RBU2ltKHRoaXMueGNvZGVidWlsZCk7XG4gICAgfVxuICAgIGNvbnN0IHdkYUJ1bmRsZVBhdGhzID0gYXdhaXQgZnMuZ2xvYihgJHt0aGlzLmRlcml2ZWREYXRhUGF0aH0vKiovKiR7V0RBX1JVTk5FUl9BUFB9L2AsIHtcbiAgICAgIGFic29sdXRlOiB0cnVlLFxuICAgIH0pO1xuICAgIGlmIChfLmlzRW1wdHkod2RhQnVuZGxlUGF0aHMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHRoZSBXREEgYnVuZGxlIGluICcke3RoaXMuZGVyaXZlZERhdGFQYXRofSdgKTtcbiAgICB9XG4gICAgcmV0dXJuIHdkYUJ1bmRsZVBhdGhzWzBdO1xuICB9XG5cbiAgYXN5bmMgaXNTb3VyY2VGcmVzaCAoKSB7XG4gICAgY29uc3QgZXhpc3RzUHJvbWlzZXMgPSBbXG4gICAgICAnUmVzb3VyY2VzJyxcbiAgICAgIGBSZXNvdXJjZXMke3BhdGguc2VwfVdlYkRyaXZlckFnZW50LmJ1bmRsZWAsXG4gICAgXS5tYXAoKHN1YlBhdGgpID0+IGZzLmV4aXN0cyhwYXRoLnJlc29sdmUodGhpcy5ib290c3RyYXBQYXRoLCBzdWJQYXRoKSkpO1xuICAgIHJldHVybiAoYXdhaXQgQi5hbGwoZXhpc3RzUHJvbWlzZXMpKS5zb21lKCh2KSA9PiB2ID09PSBmYWxzZSk7XG4gIH1cblxuICBzZXR1cFByb3hpZXMgKHNlc3Npb25JZCkge1xuICAgIGNvbnN0IHByb3h5T3B0cyA9IHtcbiAgICAgIGxvZzogdGhpcy5sb2csXG4gICAgICBzZXJ2ZXI6IHRoaXMudXJsLmhvc3RuYW1lLFxuICAgICAgcG9ydDogdGhpcy51cmwucG9ydCxcbiAgICAgIGJhc2U6IHRoaXMuYmFzZVBhdGgsXG4gICAgICB0aW1lb3V0OiB0aGlzLndkYUNvbm5lY3Rpb25UaW1lb3V0LFxuICAgICAga2VlcEFsaXZlOiB0cnVlLFxuICAgIH07XG5cbiAgICB0aGlzLmp3cHJveHkgPSBuZXcgSldQcm94eShwcm94eU9wdHMpO1xuICAgIHRoaXMuandwcm94eS5zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG4gICAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMuandwcm94eS5wcm94eVJlcVJlcy5iaW5kKHRoaXMuandwcm94eSk7XG5cbiAgICB0aGlzLm5vU2Vzc2lvblByb3h5ID0gbmV3IE5vU2Vzc2lvblByb3h5KHByb3h5T3B0cyk7XG4gIH1cblxuICBhc3luYyBxdWl0ICgpIHtcbiAgICB0aGlzLmxvZy5pbmZvKCdTaHV0dGluZyBkb3duIHN1Yi1wcm9jZXNzZXMnKTtcblxuICAgIGF3YWl0IHRoaXMueGNvZGVidWlsZC5xdWl0KCk7XG4gICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnJlc2V0KCk7XG5cbiAgICBpZiAodGhpcy5qd3Byb3h5KSB7XG4gICAgICB0aGlzLmp3cHJveHkuc2Vzc2lvbklkID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcblxuICAgIGlmICghdGhpcy5hcmdzLndlYkRyaXZlckFnZW50VXJsKSB7XG4gICAgICAvLyBpZiB3ZSBwb3B1bGF0ZWQgdGhlIHVybCBvdXJzZWx2ZXMgKGR1cmluZyBgc2V0dXBDYWNoaW5nYCBjYWxsLCBmb3IgaW5zdGFuY2UpXG4gICAgICAvLyB0aGVuIGNsZWFuIHRoYXQgdXAuIElmIHRoZSB1cmwgd2FzIHN1cHBsaWVkLCB3ZSB3YW50IHRvIGtlZXAgaXRcbiAgICAgIHRoaXMud2ViRHJpdmVyQWdlbnRVcmwgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdldCB1cmwgKCkge1xuICAgIGlmICghdGhpcy5fdXJsKSB7XG4gICAgICBpZiAodGhpcy53ZWJEcml2ZXJBZ2VudFVybCkge1xuICAgICAgICB0aGlzLl91cmwgPSB1cmwucGFyc2UodGhpcy53ZWJEcml2ZXJBZ2VudFVybCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwb3J0ID0gdGhpcy53ZGFMb2NhbFBvcnQgfHwgV0RBX0FHRU5UX1BPUlQ7XG4gICAgICAgIGNvbnN0IHtwcm90b2NvbCwgaG9zdG5hbWV9ID0gdXJsLnBhcnNlKHRoaXMud2RhQmFzZVVybCB8fCBXREFfQkFTRV9VUkwpO1xuICAgICAgICB0aGlzLl91cmwgPSB1cmwucGFyc2UoYCR7cHJvdG9jb2x9Ly8ke2hvc3RuYW1lfToke3BvcnR9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsIChfdXJsKSB7XG4gICAgdGhpcy5fdXJsID0gdXJsLnBhcnNlKF91cmwpO1xuICB9XG5cbiAgZ2V0IGZ1bGx5U3RhcnRlZCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRlZDtcbiAgfVxuXG4gIHNldCBmdWxseVN0YXJ0ZWQgKHN0YXJ0ZWQgPSBmYWxzZSkge1xuICAgIHRoaXMuc3RhcnRlZCA9IHN0YXJ0ZWQ7XG4gIH1cblxuICBhc3luYyByZXRyaWV2ZURlcml2ZWREYXRhUGF0aCAoKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMueGNvZGVidWlsZC5yZXRyaWV2ZURlcml2ZWREYXRhUGF0aCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldXNlIHJ1bm5pbmcgV0RBIGlmIGl0IGhhcyB0aGUgc2FtZSBidW5kbGUgaWQgd2l0aCB1cGRhdGVkV0RBQnVuZGxlSWQuXG4gICAqIE9yIHJldXNlIGl0IGlmIGl0IGhhcyB0aGUgZGVmYXVsdCBpZCB3aXRob3V0IHVwZGF0ZWRXREFCdW5kbGVJZC5cbiAgICogVW5pbnN0YWxsIGl0IGlmIHRoZSBtZXRob2QgZmFjZXMgYW4gZXhjZXB0aW9uIGZvciB0aGUgYWJvdmUgc2l0dWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXBkYXRlZFdEQUJ1bmRsZUlkIEJ1bmRsZUlkIHlvdSdkIGxpa2UgdG8gdXNlXG4gICAqL1xuICBhc3luYyBzZXR1cENhY2hpbmcgKCkge1xuICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IHRoaXMuZ2V0U3RhdHVzKCk7XG4gICAgaWYgKCFzdGF0dXMgfHwgIXN0YXR1cy5idWlsZCkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ1dEQSBpcyBjdXJyZW50bHkgbm90IHJ1bm5pbmcuIFRoZXJlIGlzIG5vdGhpbmcgdG8gY2FjaGUnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBwcm9kdWN0QnVuZGxlSWRlbnRpZmllcixcbiAgICAgIHVwZ3JhZGVkQXQsXG4gICAgfSA9IHN0YXR1cy5idWlsZDtcbiAgICAvLyBmb3IgcmVhbCBkZXZpY2VcbiAgICBpZiAodXRpbC5oYXNWYWx1ZShwcm9kdWN0QnVuZGxlSWRlbnRpZmllcikgJiYgdXRpbC5oYXNWYWx1ZSh0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCkgJiYgdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQgIT09IHByb2R1Y3RCdW5kbGVJZGVudGlmaWVyKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBXaWxsIHVuaW5zdGFsbCBydW5uaW5nIFdEQSBzaW5jZSBpdCBoYXMgZGlmZmVyZW50IGJ1bmRsZSBpZC4gVGhlIGFjdHVhbCB2YWx1ZSBpcyAnJHtwcm9kdWN0QnVuZGxlSWRlbnRpZmllcn0nLmApO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudW5pbnN0YWxsKCk7XG4gICAgfVxuICAgIC8vIGZvciBzaW11bGF0b3JcbiAgICBpZiAodXRpbC5oYXNWYWx1ZShwcm9kdWN0QnVuZGxlSWRlbnRpZmllcikgJiYgIXV0aWwuaGFzVmFsdWUodGhpcy51cGRhdGVkV0RBQnVuZGxlSWQpICYmIFdEQV9SVU5ORVJfQlVORExFX0lEICE9PSBwcm9kdWN0QnVuZGxlSWRlbnRpZmllcikge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgV2lsbCB1bmluc3RhbGwgcnVubmluZyBXREEgc2luY2UgaXRzIGJ1bmRsZSBpZCBpcyBub3QgZXF1YWwgdG8gdGhlIGRlZmF1bHQgdmFsdWUgJHtXREFfUlVOTkVSX0JVTkRMRV9JRH1gKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnVuaW5zdGFsbCgpO1xuICAgIH1cblxuICAgIGNvbnN0IGFjdHVhbFVwZ3JhZGVUaW1lc3RhbXAgPSBhd2FpdCBnZXRXREFVcGdyYWRlVGltZXN0YW1wKCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYFVwZ3JhZGUgdGltZXN0YW1wIG9mIHRoZSBjdXJyZW50bHkgYnVuZGxlZCBXREE6ICR7YWN0dWFsVXBncmFkZVRpbWVzdGFtcH1gKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgVXBncmFkZSB0aW1lc3RhbXAgb2YgdGhlIFdEQSBvbiB0aGUgZGV2aWNlOiAke3VwZ3JhZGVkQXR9YCk7XG4gICAgaWYgKGFjdHVhbFVwZ3JhZGVUaW1lc3RhbXAgJiYgdXBncmFkZWRBdCAmJiBfLnRvTG93ZXIoYCR7YWN0dWFsVXBncmFkZVRpbWVzdGFtcH1gKSAhPT0gXy50b0xvd2VyKGAke3VwZ3JhZGVkQXR9YCkpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ1dpbGwgdW5pbnN0YWxsIHJ1bm5pbmcgV0RBIHNpbmNlIGl0IGhhcyBkaWZmZXJlbnQgdmVyc2lvbiBpbiBjb21wYXJpc29uIHRvIHRoZSBvbmUgJyArXG4gICAgICAgIGB3aGljaCBpcyBidW5kbGVkIHdpdGggYXBwaXVtLXhjdWl0ZXN0LWRyaXZlciBtb2R1bGUgKCR7YWN0dWFsVXBncmFkZVRpbWVzdGFtcH0gIT0gJHt1cGdyYWRlZEF0fSlgKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnVuaW5zdGFsbCgpO1xuICAgIH1cblxuICAgIGNvbnN0IG1lc3NhZ2UgPSB1dGlsLmhhc1ZhbHVlKHByb2R1Y3RCdW5kbGVJZGVudGlmaWVyKVxuICAgICAgPyBgV2lsbCByZXVzZSBwcmV2aW91c2x5IGNhY2hlZCBXREEgaW5zdGFuY2UgYXQgJyR7dGhpcy51cmwuaHJlZn0nIHdpdGggJyR7cHJvZHVjdEJ1bmRsZUlkZW50aWZpZXJ9J2BcbiAgICAgIDogYFdpbGwgcmV1c2UgcHJldmlvdXNseSBjYWNoZWQgV0RBIGluc3RhbmNlIGF0ICcke3RoaXMudXJsLmhyZWZ9J2A7XG4gICAgdGhpcy5sb2cuaW5mbyhgJHttZXNzYWdlfS4gU2V0IHRoZSB3ZGFMb2NhbFBvcnQgY2FwYWJpbGl0eSB0byBhIHZhbHVlIGRpZmZlcmVudCBmcm9tICR7dGhpcy51cmwucG9ydH0gaWYgdGhpcyBpcyBhbiB1bmRlc2lyZWQgYmVoYXZpb3IuYCk7XG4gICAgdGhpcy53ZWJEcml2ZXJBZ2VudFVybCA9IHRoaXMudXJsLmhyZWY7XG4gIH1cblxuICAvKipcbiAgICogUXVpdCBhbmQgdW5pbnN0YWxsIHJ1bm5pbmcgV0RBLlxuICAgKi9cbiAgYXN5bmMgcXVpdEFuZFVuaW5zdGFsbCAoKSB7XG4gICAgYXdhaXQgdGhpcy5xdWl0KCk7XG4gICAgYXdhaXQgdGhpcy51bmluc3RhbGwoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBXZWJEcml2ZXJBZ2VudDtcbmV4cG9ydCB7IFdlYkRyaXZlckFnZW50IH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBS0EsTUFBTUEsa0JBQWtCLEdBQUcsS0FBSyxJQUFoQztBQUNBLE1BQU1DLGNBQWMsR0FBRyxJQUF2QjtBQUNBLE1BQU1DLGtCQUFrQixHQUFHLDZCQUEzQjtBQUNBLE1BQU1DLHNCQUFzQixHQUFHLElBQUlDLGtCQUFKLEVBQS9COztBQUVBLE1BQU1DLGNBQU4sQ0FBcUI7RUFDbkJDLFdBQVcsQ0FBRUMsWUFBRixFQUFnQkMsSUFBSSxHQUFHLEVBQXZCLEVBQTJCQyxHQUFHLEdBQUcsSUFBakMsRUFBdUM7SUFDaEQsS0FBS0YsWUFBTCxHQUFv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
|
|
454
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3dlYmRyaXZlcmFnZW50LmpzIiwibmFtZXMiOlsiV0RBX0xBVU5DSF9USU1FT1VUIiwiV0RBX0FHRU5UX1BPUlQiLCJXREFfQ0ZfQlVORExFX05BTUUiLCJTSEFSRURfUkVTT1VSQ0VTX0dVQVJEIiwiQXN5bmNMb2NrIiwiV2ViRHJpdmVyQWdlbnQiLCJjb25zdHJ1Y3RvciIsInhjb2RlVmVyc2lvbiIsImFyZ3MiLCJsb2ciLCJfIiwiY2xvbmUiLCJkZWZhdWx0TG9nZ2VyIiwiZGV2aWNlIiwicGxhdGZvcm1WZXJzaW9uIiwicGxhdGZvcm1OYW1lIiwiaW9zU2RrVmVyc2lvbiIsImhvc3QiLCJpc1JlYWxEZXZpY2UiLCJyZWFsRGV2aWNlIiwiaWRiIiwid2RhQnVuZGxlUGF0aCIsInNldFdEQVBhdGhzIiwiYm9vdHN0cmFwUGF0aCIsImFnZW50UGF0aCIsIndkYUxvY2FsUG9ydCIsIndkYVJlbW90ZVBvcnQiLCJ3ZGFCYXNlVXJsIiwiV0RBX0JBU0VfVVJMIiwicHJlYnVpbGRXREEiLCJ3ZWJEcml2ZXJBZ2VudFVybCIsInN0YXJ0ZWQiLCJ3ZGFDb25uZWN0aW9uVGltZW91dCIsInVzZVhjdGVzdHJ1bkZpbGUiLCJ1c2VQcmVidWlsdFdEQSIsImRlcml2ZWREYXRhUGF0aCIsIm1qcGVnU2VydmVyUG9ydCIsInVwZGF0ZWRXREFCdW5kbGVJZCIsInhjb2RlYnVpbGQiLCJYY29kZUJ1aWxkIiwic2hvd1hjb2RlTG9nIiwieGNvZGVDb25maWdGaWxlIiwieGNvZGVPcmdJZCIsInhjb2RlU2lnbmluZ0lkIiwia2V5Y2hhaW5QYXRoIiwia2V5Y2hhaW5QYXNzd29yZCIsInVzZVNpbXBsZUJ1aWxkVGVzdCIsImxhdW5jaFRpbWVvdXQiLCJ3ZGFMYXVuY2hUaW1lb3V0IiwiYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb24iLCJyZXN1bHRCdW5kbGVQYXRoIiwicmVzdWx0QnVuZGxlVmVyc2lvbiIsIkJPT1RTVFJBUF9QQVRIIiwiaW5mbyIsInBhdGgiLCJyZXNvbHZlIiwiY2xlYW51cE9ic29sZXRlUHJvY2Vzc2VzIiwib2Jzb2xldGVQaWRzIiwiZ2V0UElEc0xpc3RlbmluZ09uUG9ydCIsInVybCIsInBvcnQiLCJjbWRMaW5lIiwiaW5jbHVkZXMiLCJ0b0xvd2VyQ2FzZSIsInVkaWQiLCJpc0VtcHR5IiwiZGVidWciLCJsZW5ndGgiLCJleGVjIiwiZSIsIndhcm4iLCJtZXNzYWdlIiwiaXNSdW5uaW5nIiwiZ2V0U3RhdHVzIiwiYmFzZVBhdGgiLCJub1Nlc3Npb25Qcm94eSIsIk5vU2Vzc2lvblByb3h5Iiwic2VydmVyIiwiaG9zdG5hbWUiLCJiYXNlIiwidGltZW91dCIsImNvbW1hbmQiLCJlcnIiLCJocmVmIiwidW5pbnN0YWxsIiwiYnVuZGxlSWRzIiwiZ2V0VXNlckluc3RhbGxlZEJ1bmRsZUlkc0J5QnVuZGxlTmFtZSIsImJ1bmRsZUlkIiwicmVtb3ZlQXBwIiwiX2NsZWFudXBQcm9qZWN0SWZGcmVzaCIsImhvbWVGb2xkZXIiLCJwcm9jZXNzIiwiZW52IiwiSE9NRSIsImN1cnJlbnRVcGdyYWRlVGltZXN0YW1wIiwiZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCIsImlzSW50ZWdlciIsInRpbWVzdGFtcFBhdGgiLCJXREFfVVBHUkFERV9USU1FU1RBTVBfUEFUSCIsImRpZFRpbWVzdGFtcEV4aXN0IiwiZnMiLCJleGlzdHMiLCJhY2Nlc3MiLCJXX09LIiwiaWduIiwicmVjZW50VXBncmFkZVRpbWVzdGFtcCIsInBhcnNlSW50IiwicmVhZEZpbGUiLCJta2RpcnAiLCJkaXJuYW1lIiwid3JpdGVGaWxlIiwiY2xlYW5Qcm9qZWN0IiwibGF1bmNoIiwic2Vzc2lvbklkIiwic2V0dXBQcm94aWVzIiwiRXJyb3IiLCJzeW5jaHJvbml6YXRpb25LZXkiLCJub3JtYWxpemUiLCJhY3F1aXJlIiwicmVzZXRUZXN0UHJvY2Vzc2VzIiwic3RhcnRXaXRoSURCIiwiaW5pdCIsInByZWJ1aWxkIiwic3RhcnQiLCJ3ZGFCdW5kbGVJZCIsInRlc3RCdW5kbGVJZCIsInByZXBhcmVXREEiLCJVU0VfUE9SVCIsIldEQV9QUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSIiwiTUpQRUdfU0VSVkVSX1BPUlQiLCJydW5YQ1VJVGVzdCIsInBhcnNlQnVuZGxlSWQiLCJpbmZvUGxpc3RQYXRoIiwiam9pbiIsImluZm9QbGlzdCIsInBsaXN0IiwicGFyc2VQbGlzdCIsIkNGQnVuZGxlSWRlbnRpZmllciIsImZldGNoV0RBQnVuZGxlIiwiaXNBcHBJbnN0YWxsZWQiLCJpbnN0YWxsQXBwIiwiaW5zdGFsbFhDVGVzdEJ1bmRsZSIsImJ1bmRsZVdEQVNpbSIsIndkYUJ1bmRsZVBhdGhzIiwiZ2xvYiIsIldEQV9SVU5ORVJfQVBQIiwiYWJzb2x1dGUiLCJpc1NvdXJjZUZyZXNoIiwiZXhpc3RzUHJvbWlzZXMiLCJzZXAiLCJtYXAiLCJzdWJQYXRoIiwiQiIsImFsbCIsInNvbWUiLCJ2IiwicHJveHlPcHRzIiwia2VlcEFsaXZlIiwiandwcm94eSIsIkpXUHJveHkiLCJwcm94eVJlcVJlcyIsImJpbmQiLCJxdWl0IiwicmVzZXQiLCJfdXJsIiwicGFyc2UiLCJwcm90b2NvbCIsImZ1bGx5U3RhcnRlZCIsInJldHJpZXZlRGVyaXZlZERhdGFQYXRoIiwic2V0dXBDYWNoaW5nIiwic3RhdHVzIiwiYnVpbGQiLCJwcm9kdWN0QnVuZGxlSWRlbnRpZmllciIsInVwZ3JhZGVkQXQiLCJ1dGlsIiwiaGFzVmFsdWUiLCJXREFfUlVOTkVSX0JVTkRMRV9JRCIsImFjdHVhbFVwZ3JhZGVUaW1lc3RhbXAiLCJ0b0xvd2VyIiwicXVpdEFuZFVuaW5zdGFsbCJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi93ZWJkcml2ZXJhZ2VudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyBKV1Byb3h5IH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgeyBmcywgdXRpbCwgcGxpc3QsIG1rZGlycCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBkZWZhdWx0TG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IE5vU2Vzc2lvblByb3h5IH0gZnJvbSAnLi9uby1zZXNzaW9uLXByb3h5JztcbmltcG9ydCB7XG4gIGdldFdEQVVwZ3JhZGVUaW1lc3RhbXAsIHJlc2V0VGVzdFByb2Nlc3NlcywgZ2V0UElEc0xpc3RlbmluZ09uUG9ydFxufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBYY29kZUJ1aWxkIGZyb20gJy4veGNvZGVidWlsZCc7XG5pbXBvcnQgQXN5bmNMb2NrIGZyb20gJ2FzeW5jLWxvY2snO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgeyBidW5kbGVXREFTaW0gfSBmcm9tICcuL2NoZWNrLWRlcGVuZGVuY2llcyc7XG5pbXBvcnQge1xuICBCT09UU1RSQVBfUEFUSCwgV0RBX1JVTk5FUl9CVU5ETEVfSUQsIFdEQV9SVU5ORVJfQVBQLFxuICBXREFfQkFTRV9VUkwsIFdEQV9VUEdSQURFX1RJTUVTVEFNUF9QQVRILFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmNvbnN0IFdEQV9MQVVOQ0hfVElNRU9VVCA9IDYwICogMTAwMDtcbmNvbnN0IFdEQV9BR0VOVF9QT1JUID0gODEwMDtcbmNvbnN0IFdEQV9DRl9CVU5ETEVfTkFNRSA9ICdXZWJEcml2ZXJBZ2VudFJ1bm5lci1SdW5uZXInO1xuY29uc3QgU0hBUkVEX1JFU09VUkNFU19HVUFSRCA9IG5ldyBBc3luY0xvY2soKTtcblxuY2xhc3MgV2ViRHJpdmVyQWdlbnQge1xuICBjb25zdHJ1Y3RvciAoeGNvZGVWZXJzaW9uLCBhcmdzID0ge30sIGxvZyA9IG51bGwpIHtcbiAgICB0aGlzLnhjb2RlVmVyc2lvbiA9IHhjb2RlVmVyc2lvbjtcblxuICAgIHRoaXMuYXJncyA9IF8uY2xvbmUoYXJncyk7XG4gICAgdGhpcy5sb2cgPSBsb2cgPz8gZGVmYXVsdExvZ2dlcjtcblxuICAgIHRoaXMuZGV2aWNlID0gYXJncy5kZXZpY2U7XG4gICAgdGhpcy5wbGF0Zm9ybVZlcnNpb24gPSBhcmdzLnBsYXRmb3JtVmVyc2lvbjtcbiAgICB0aGlzLnBsYXRmb3JtTmFtZSA9IGFyZ3MucGxhdGZvcm1OYW1lO1xuICAgIHRoaXMuaW9zU2RrVmVyc2lvbiA9IGFyZ3MuaW9zU2RrVmVyc2lvbjtcbiAgICB0aGlzLmhvc3QgPSBhcmdzLmhvc3Q7XG4gICAgdGhpcy5pc1JlYWxEZXZpY2UgPSAhIWFyZ3MucmVhbERldmljZTtcbiAgICB0aGlzLmlkYiA9IChhcmdzLmRldmljZSB8fCB7fSkuaWRiO1xuICAgIHRoaXMud2RhQnVuZGxlUGF0aCA9IGFyZ3Mud2RhQnVuZGxlUGF0aDtcblxuICAgIHRoaXMuc2V0V0RBUGF0aHMoYXJncy5ib290c3RyYXBQYXRoLCBhcmdzLmFnZW50UGF0aCk7XG5cbiAgICB0aGlzLndkYUxvY2FsUG9ydCA9IGFyZ3Mud2RhTG9jYWxQb3J0O1xuICAgIHRoaXMud2RhUmVtb3RlUG9ydCA9IGFyZ3Mud2RhTG9jYWxQb3J0IHx8IFdEQV9BR0VOVF9QT1JUO1xuICAgIHRoaXMud2RhQmFzZVVybCA9IGFyZ3Mud2RhQmFzZVVybCB8fCBXREFfQkFTRV9VUkw7XG5cbiAgICB0aGlzLnByZWJ1aWxkV0RBID0gYXJncy5wcmVidWlsZFdEQTtcblxuICAgIHRoaXMud2ViRHJpdmVyQWdlbnRVcmwgPSBhcmdzLndlYkRyaXZlckFnZW50VXJsO1xuXG4gICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLndkYUNvbm5lY3Rpb25UaW1lb3V0ID0gYXJncy53ZGFDb25uZWN0aW9uVGltZW91dDtcblxuICAgIHRoaXMudXNlWGN0ZXN0cnVuRmlsZSA9IGFyZ3MudXNlWGN0ZXN0cnVuRmlsZTtcbiAgICB0aGlzLnVzZVByZWJ1aWx0V0RBID0gYXJncy51c2VQcmVidWlsdFdEQTtcbiAgICB0aGlzLmRlcml2ZWREYXRhUGF0aCA9IGFyZ3MuZGVyaXZlZERhdGFQYXRoO1xuICAgIHRoaXMubWpwZWdTZXJ2ZXJQb3J0ID0gYXJncy5tanBlZ1NlcnZlclBvcnQ7XG5cbiAgICB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCA9IGFyZ3MudXBkYXRlZFdEQUJ1bmRsZUlkO1xuXG4gICAgdGhpcy54Y29kZWJ1aWxkID0gbmV3IFhjb2RlQnVpbGQodGhpcy54Y29kZVZlcnNpb24sIHRoaXMuZGV2aWNlLCB7XG4gICAgICBwbGF0Zm9ybVZlcnNpb246IHRoaXMucGxhdGZvcm1WZXJzaW9uLFxuICAgICAgcGxhdGZvcm1OYW1lOiB0aGlzLnBsYXRmb3JtTmFtZSxcbiAgICAgIGlvc1Nka1ZlcnNpb246IHRoaXMuaW9zU2RrVmVyc2lvbixcbiAgICAgIGFnZW50UGF0aDogdGhpcy5hZ2VudFBhdGgsXG4gICAgICBib290c3RyYXBQYXRoOiB0aGlzLmJvb3RzdHJhcFBhdGgsXG4gICAgICByZWFsRGV2aWNlOiB0aGlzLmlzUmVhbERldmljZSxcbiAgICAgIHNob3dYY29kZUxvZzogYXJncy5zaG93WGNvZGVMb2csXG4gICAgICB4Y29kZUNvbmZpZ0ZpbGU6IGFyZ3MueGNvZGVDb25maWdGaWxlLFxuICAgICAgeGNvZGVPcmdJZDogYXJncy54Y29kZU9yZ0lkLFxuICAgICAgeGNvZGVTaWduaW5nSWQ6IGFyZ3MueGNvZGVTaWduaW5nSWQsXG4gICAgICBrZXljaGFpblBhdGg6IGFyZ3Mua2V5Y2hhaW5QYXRoLFxuICAgICAga2V5Y2hhaW5QYXNzd29yZDogYXJncy5rZXljaGFpblBhc3N3b3JkLFxuICAgICAgdXNlU2ltcGxlQnVpbGRUZXN0OiBhcmdzLnVzZVNpbXBsZUJ1aWxkVGVzdCxcbiAgICAgIHVzZVByZWJ1aWx0V0RBOiBhcmdzLnVzZVByZWJ1aWx0V0RBLFxuICAgICAgdXBkYXRlZFdEQUJ1bmRsZUlkOiB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCxcbiAgICAgIGxhdW5jaFRpbWVvdXQ6IGFyZ3Mud2RhTGF1bmNoVGltZW91dCB8fCBXREFfTEFVTkNIX1RJTUVPVVQsXG4gICAgICB3ZGFSZW1vdGVQb3J0OiB0aGlzLndkYVJlbW90ZVBvcnQsXG4gICAgICB1c2VYY3Rlc3RydW5GaWxlOiB0aGlzLnVzZVhjdGVzdHJ1bkZpbGUsXG4gICAgICBkZXJpdmVkRGF0YVBhdGg6IGFyZ3MuZGVyaXZlZERhdGFQYXRoLFxuICAgICAgbWpwZWdTZXJ2ZXJQb3J0OiB0aGlzLm1qcGVnU2VydmVyUG9ydCxcbiAgICAgIGFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uOiBhcmdzLmFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uLFxuICAgICAgcmVzdWx0QnVuZGxlUGF0aDogYXJncy5yZXN1bHRCdW5kbGVQYXRoLFxuICAgICAgcmVzdWx0QnVuZGxlVmVyc2lvbjogYXJncy5yZXN1bHRCdW5kbGVWZXJzaW9uLFxuICAgIH0sIHRoaXMubG9nKTtcbiAgfVxuXG4gIHNldFdEQVBhdGhzIChib290c3RyYXBQYXRoLCBhZ2VudFBhdGgpIHtcbiAgICAvLyBhbGxvdyB0aGUgdXNlciB0byBzcGVjaWZ5IGEgcGxhY2UgZm9yIFdEQS4gVGhpcyBpcyB1bmRvY3VtZW50ZWQgYW5kXG4gICAgLy8gb25seSBoZXJlIGZvciB0aGUgcHVycG9zZXMgb2YgdGVzdGluZyBkZXZlbG9wbWVudCBvZiBXREFcbiAgICB0aGlzLmJvb3RzdHJhcFBhdGggPSBib290c3RyYXBQYXRoIHx8IEJPT1RTVFJBUF9QQVRIO1xuICAgIHRoaXMubG9nLmluZm8oYFVzaW5nIFdEQSBwYXRoOiAnJHt0aGlzLmJvb3RzdHJhcFBhdGh9J2ApO1xuXG4gICAgLy8gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2UgbmVlZCB0byBiZSBhYmxlIHRvIHNwZWNpZnkgYWdlbnRQYXRoIHRvb1xuICAgIHRoaXMuYWdlbnRQYXRoID0gYWdlbnRQYXRoIHx8IHBhdGgucmVzb2x2ZSh0aGlzLmJvb3RzdHJhcFBhdGgsICdXZWJEcml2ZXJBZ2VudC54Y29kZXByb2onKTtcbiAgICB0aGlzLmxvZy5pbmZvKGBVc2luZyBXREEgYWdlbnQ6ICcke3RoaXMuYWdlbnRQYXRofSdgKTtcbiAgfVxuXG4gIGFzeW5jIGNsZWFudXBPYnNvbGV0ZVByb2Nlc3NlcyAoKSB7XG4gICAgY29uc3Qgb2Jzb2xldGVQaWRzID0gYXdhaXQgZ2V0UElEc0xpc3RlbmluZ09uUG9ydCh0aGlzLnVybC5wb3J0LFxuICAgICAgKGNtZExpbmUpID0+IGNtZExpbmUuaW5jbHVkZXMoJy9XZWJEcml2ZXJBZ2VudFJ1bm5lcicpICYmXG4gICAgICAgICFjbWRMaW5lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5kZXZpY2UudWRpZC50b0xvd2VyQ2FzZSgpKSk7XG5cbiAgICBpZiAoXy5pc0VtcHR5KG9ic29sZXRlUGlkcykpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBObyBvYnNvbGV0ZSBjYWNoZWQgcHJvY2Vzc2VzIGZyb20gcHJldmlvdXMgV0RBIHNlc3Npb25zIGAgK1xuICAgICAgICBgbGlzdGVuaW5nIG9uIHBvcnQgJHt0aGlzLnVybC5wb3J0fSBoYXZlIGJlZW4gZm91bmRgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZy5pbmZvKGBEZXRlY3RlZCAke29ic29sZXRlUGlkcy5sZW5ndGh9IG9ic29sZXRlIGNhY2hlZCBwcm9jZXNzJHtvYnNvbGV0ZVBpZHMubGVuZ3RoID09PSAxID8gJycgOiAnZXMnfSBgICtcbiAgICAgIGBmcm9tIHByZXZpb3VzIFdEQSBzZXNzaW9ucy4gQ2xlYW5pbmcgdGhlbSB1cGApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleGVjKCdraWxsJywgb2Jzb2xldGVQaWRzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKGBGYWlsZWQgdG8ga2lsbCBvYnNvbGV0ZSBjYWNoZWQgcHJvY2VzcyR7b2Jzb2xldGVQaWRzLmxlbmd0aCA9PT0gMSA/ICcnIDogJ2VzJ30gJyR7b2Jzb2xldGVQaWRzfScuIGAgK1xuICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYm9vbGVhbiBpZiBXREEgaXMgcnVubmluZyBvciBub3RcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBXREEgaXMgcnVubmluZ1xuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGludmFsaWQgcmVzcG9uc2UgY29kZSBvciBib2R5XG4gICAqL1xuICBhc3luYyBpc1J1bm5pbmcgKCkge1xuICAgIHJldHVybiAhIShhd2FpdCB0aGlzLmdldFN0YXR1cygpKTtcbiAgfVxuXG4gIGdldCBiYXNlUGF0aCAoKSB7XG4gICAgaWYgKHRoaXMudXJsLnBhdGggPT09ICcvJykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy51cmwucGF0aCB8fCAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gY3VycmVudCBydW5uaW5nIFdEQSdzIHN0YXR1cyBsaWtlIGJlbG93XG4gICAqIHtcbiAgICogICBcInN0YXRlXCI6IFwic3VjY2Vzc1wiLFxuICAgKiAgIFwib3NcIjoge1xuICAgKiAgICAgXCJuYW1lXCI6IFwiaU9TXCIsXG4gICAqICAgICBcInZlcnNpb25cIjogXCIxMS40XCIsXG4gICAqICAgICBcInNka1ZlcnNpb25cIjogXCIxMS4zXCJcbiAgICogICB9LFxuICAgKiAgIFwiaW9zXCI6IHtcbiAgICogICAgIFwic2ltdWxhdG9yVmVyc2lvblwiOiBcIjExLjRcIixcbiAgICogICAgIFwiaXBcIjogXCIxNzIuMjU0Ljk5LjM0XCJcbiAgICogICB9LFxuICAgKiAgIFwiYnVpbGRcIjoge1xuICAgKiAgICAgXCJ0aW1lXCI6IFwiSnVuIDI0IDIwMTggMTc6MDg6MjFcIixcbiAgICogICAgIFwicHJvZHVjdEJ1bmRsZUlkZW50aWZpZXJcIjogXCJjb20uZmFjZWJvb2suV2ViRHJpdmVyQWdlbnRSdW5uZXJcIlxuICAgKiAgIH1cbiAgICogfVxuICAgKlxuICAgKiBAcmV0dXJuIHs/b2JqZWN0fSBTdGF0ZSBPYmplY3RcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBpbnZhbGlkIHJlc3BvbnNlIGNvZGUgb3IgYm9keVxuICAgKi9cbiAgYXN5bmMgZ2V0U3RhdHVzICgpIHtcbiAgICBjb25zdCBub1Nlc3Npb25Qcm94eSA9IG5ldyBOb1Nlc3Npb25Qcm94eSh7XG4gICAgICBzZXJ2ZXI6IHRoaXMudXJsLmhvc3RuYW1lLFxuICAgICAgcG9ydDogdGhpcy51cmwucG9ydCxcbiAgICAgIGJhc2U6IHRoaXMuYmFzZVBhdGgsXG4gICAgICB0aW1lb3V0OiAzMDAwLFxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgbm9TZXNzaW9uUHJveHkuY29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBXREEgaXMgbm90IGxpc3RlbmluZyBhdCAnJHt0aGlzLnVybC5ocmVmfSdgKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbmluc3RhbGwgV0RBcyBmcm9tIHRoZSB0ZXN0IGRldmljZS5cbiAgICogT3ZlciBYY29kZSAxMSwgbXVsdGlwbGUgV0RBIGNhbiBiZSBpbiB0aGUgZGV2aWNlIHNpbmNlIFhjb2RlIDExIGdlbmVyYXRlcyBkaWZmZXJlbnQgV0RBLlxuICAgKiBBcHBpdW0gZG9lcyBub3QgZXhwZWN0IG11bHRpcGxlIFdEQXMgYXJlIHJ1bm5pbmcgb24gYSBkZXZpY2UuXG4gICAqL1xuICBhc3luYyB1bmluc3RhbGwgKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBidW5kbGVJZHMgPSBhd2FpdCB0aGlzLmRldmljZS5nZXRVc2VySW5zdGFsbGVkQnVuZGxlSWRzQnlCdW5kbGVOYW1lKFdEQV9DRl9CVU5ETEVfTkFNRSk7XG4gICAgICBpZiAoXy5pc0VtcHR5KGJ1bmRsZUlkcykpIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoJ05vIFdEQXMgb24gdGhlIGRldmljZS4nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgVW5pbnN0YWxsaW5nIFdEQXM6ICcke2J1bmRsZUlkc30nYCk7XG4gICAgICBmb3IgKGNvbnN0IGJ1bmRsZUlkIG9mIGJ1bmRsZUlkcykge1xuICAgICAgICBhd2FpdCB0aGlzLmRldmljZS5yZW1vdmVBcHAoYnVuZGxlSWQpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGUpO1xuICAgICAgdGhpcy5sb2cud2FybihgV2ViRHJpdmVyQWdlbnQgdW5pbnN0YWxsIGZhaWxlZC4gUGVyaGFwcywgaXQgaXMgYWxyZWFkeSB1bmluc3RhbGxlZD8gYCArXG4gICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgX2NsZWFudXBQcm9qZWN0SWZGcmVzaCAoKSB7XG4gICAgY29uc3QgaG9tZUZvbGRlciA9IHByb2Nlc3MuZW52LkhPTUU7XG4gICAgaWYgKCFob21lRm9sZGVyKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdUaGUgSE9NRSBmb2xkZXIgcGF0aCBjYW5ub3QgYmUgZGV0ZXJtaW5lZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRVcGdyYWRlVGltZXN0YW1wID0gYXdhaXQgZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCgpO1xuICAgIGlmICghXy5pc0ludGVnZXIoY3VycmVudFVwZ3JhZGVUaW1lc3RhbXApKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdJdCBpcyBpbXBvc3NpYmxlIHRvIGRldGVybWluZSB0aGUgdGltZXN0YW1wIG9mIHRoZSBwYWNrYWdlJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGltZXN0YW1wUGF0aCA9IHBhdGgucmVzb2x2ZShob21lRm9sZGVyLCBXREFfVVBHUkFERV9USU1FU1RBTVBfUEFUSCk7XG4gICAgY29uc3QgZGlkVGltZXN0YW1wRXhpc3QgPSBhd2FpdCBmcy5leGlzdHModGltZXN0YW1wUGF0aCk7XG4gICAgaWYgKGRpZFRpbWVzdGFtcEV4aXN0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmcy5hY2Nlc3ModGltZXN0YW1wUGF0aCwgZnMuV19PSyk7XG4gICAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgV2ViRHJpdmVyQWdlbnQgdXBncmFkZSB0aW1lc3RhbXAgYXQgJyR7dGltZXN0YW1wUGF0aH0nIGlzIG5vdCB3cml0ZWFibGUuIGAgK1xuICAgICAgICAgIGBTa2lwcGluZyBzb3VyY2VzIGNsZWFudXBgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVjZW50VXBncmFkZVRpbWVzdGFtcCA9IHBhcnNlSW50KGF3YWl0IGZzLnJlYWRGaWxlKHRpbWVzdGFtcFBhdGgsICd1dGY4JyksIDEwKTtcbiAgICAgIGlmIChfLmlzSW50ZWdlcihyZWNlbnRVcGdyYWRlVGltZXN0YW1wKSkge1xuICAgICAgICBpZiAocmVjZW50VXBncmFkZVRpbWVzdGFtcCA+PSBjdXJyZW50VXBncmFkZVRpbWVzdGFtcCkge1xuICAgICAgICAgIHRoaXMubG9nLmluZm8oYFdlYkRyaXZlckFnZW50IGRvZXMgbm90IG5lZWQgYSBjbGVhbnVwLiBUaGUgc291cmNlcyBhcmUgdXAgdG8gZGF0ZSBgICtcbiAgICAgICAgICAgIGAoJHtyZWNlbnRVcGdyYWRlVGltZXN0YW1wfSA+PSAke2N1cnJlbnRVcGdyYWRlVGltZXN0YW1wfSlgKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgV2ViRHJpdmVyQWdlbnQgc291cmNlcyBoYXZlIGJlZW4gdXBncmFkZWQgYCArXG4gICAgICAgICAgYCgke3JlY2VudFVwZ3JhZGVUaW1lc3RhbXB9IDwgJHtjdXJyZW50VXBncmFkZVRpbWVzdGFtcH0pYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBUaGUgcmVjZW50IHVwZ3JhZGUgdGltZXN0YW1wIGF0ICcke3RpbWVzdGFtcFBhdGh9JyBpcyBjb3JydXB0ZWQuIFRyeWluZyB0byBmaXggaXRgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgbWtkaXJwKHBhdGguZGlybmFtZSh0aW1lc3RhbXBQYXRoKSk7XG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUodGltZXN0YW1wUGF0aCwgYCR7Y3VycmVudFVwZ3JhZGVUaW1lc3RhbXB9YCwgJ3V0ZjgnKTtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBTdG9yZWQgdGhlIHJlY2VudCBXZWJEcml2ZXJBZ2VudCB1cGdyYWRlIHRpbWVzdGFtcCAke2N1cnJlbnRVcGdyYWRlVGltZXN0YW1wfSBgICtcbiAgICAgICAgYGF0ICcke3RpbWVzdGFtcFBhdGh9J2ApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYFVuYWJsZSB0byBjcmVhdGUgdGhlIHJlY2VudCBXZWJEcml2ZXJBZ2VudCB1cGdyYWRlIHRpbWVzdGFtcCBhdCAnJHt0aW1lc3RhbXBQYXRofScuIGAgK1xuICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghZGlkVGltZXN0YW1wRXhpc3QpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ1RoZXJlIGlzIG5vIG5lZWQgdG8gcGVyZm9ybSB0aGUgcHJvamVjdCBjbGVhbnVwLiBBIGZyZXNoIGluc3RhbGwgaGFzIGJlZW4gZGV0ZWN0ZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLmNsZWFuUHJvamVjdCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oYENhbm5vdCBwZXJmb3JtIFdlYkRyaXZlckFnZW50IHByb2plY3QgY2xlYW51cC4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gY3VycmVudCBydW5uaW5nIFdEQSdzIHN0YXR1cyBsaWtlIGJlbG93IGFmdGVyIGxhdW5jaGluZyBXREFcbiAgICoge1xuICAgKiAgIFwic3RhdGVcIjogXCJzdWNjZXNzXCIsXG4gICAqICAgXCJvc1wiOiB7XG4gICAqICAgICBcIm5hbWVcIjogXCJpT1NcIixcbiAgICogICAgIFwidmVyc2lvblwiOiBcIjExLjRcIixcbiAgICogICAgIFwic2RrVmVyc2lvblwiOiBcIjExLjNcIlxuICAgKiAgIH0sXG4gICAqICAgXCJpb3NcIjoge1xuICAgKiAgICAgXCJzaW11bGF0b3JWZXJzaW9uXCI6IFwiMTEuNFwiLFxuICAgKiAgICAgXCJpcFwiOiBcIjE3Mi4yNTQuOTkuMzRcIlxuICAgKiAgIH0sXG4gICAqICAgXCJidWlsZFwiOiB7XG4gICAqICAgICBcInRpbWVcIjogXCJKdW4gMjQgMjAxOCAxNzowODoyMVwiLFxuICAgKiAgICAgXCJwcm9kdWN0QnVuZGxlSWRlbnRpZmllclwiOiBcImNvbS5mYWNlYm9vay5XZWJEcml2ZXJBZ2VudFJ1bm5lclwiXG4gICAqICAgfVxuICAgKiB9XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZXNzaW9uSWQgTGF1bmNoIFdEQSBhbmQgZXN0YWJsaXNoIHRoZSBzZXNzaW9uIHdpdGggdGhpcyBzZXNzaW9uSWRcbiAgICogQHJldHVybiB7P29iamVjdH0gU3RhdGUgT2JqZWN0XG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgaW52YWxpZCByZXNwb25zZSBjb2RlIG9yIGJvZHlcbiAgICovXG4gIGFzeW5jIGxhdW5jaCAoc2Vzc2lvbklkKSB7XG4gICAgaWYgKHRoaXMud2ViRHJpdmVyQWdlbnRVcmwpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYFVzaW5nIHByb3ZpZGVkIFdlYmRyaXZlckFnZW50IGF0ICcke3RoaXMud2ViRHJpdmVyQWdlbnRVcmx9J2ApO1xuICAgICAgdGhpcy51cmwgPSB0aGlzLndlYkRyaXZlckFnZW50VXJsO1xuICAgICAgdGhpcy5zZXR1cFByb3hpZXMoc2Vzc2lvbklkKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldFN0YXR1cygpO1xuICAgIH1cblxuICAgIHRoaXMubG9nLmluZm8oJ0xhdW5jaGluZyBXZWJEcml2ZXJBZ2VudCBvbiB0aGUgZGV2aWNlJyk7XG5cbiAgICB0aGlzLnNldHVwUHJveGllcyhzZXNzaW9uSWQpO1xuXG4gICAgaWYgKCF0aGlzLnVzZVhjdGVzdHJ1bkZpbGUgJiYgIWF3YWl0IGZzLmV4aXN0cyh0aGlzLmFnZW50UGF0aCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVHJ5aW5nIHRvIHVzZSBXZWJEcml2ZXJBZ2VudCBwcm9qZWN0IGF0ICcke3RoaXMuYWdlbnRQYXRofScgYnV0IHRoZSBgICtcbiAgICAgICAgICAgICAgICAgICAgICAnZmlsZSBkb2VzIG5vdCBleGlzdCcpO1xuICAgIH1cblxuICAgIC8vIHVzZVhjdGVzdHJ1bkZpbGUgYW5kIHVzZVByZWJ1aWx0V0RBIHVzZSBleGlzdGluZyBkZXBlbmRlbmNpZXNcbiAgICAvLyBJdCBkZXBlbmRzIG9uIHVzZXIgc2lkZVxuICAgIGlmICh0aGlzLmlkYiB8fCB0aGlzLnVzZVhjdGVzdHJ1bkZpbGUgfHwgKHRoaXMuZGVyaXZlZERhdGFQYXRoICYmIHRoaXMudXNlUHJlYnVpbHRXREEpKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdTa2lwcGVkIFdEQSBwcm9qZWN0IGNsZWFudXAgYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRlZCBjYXBhYmlsaXRpZXMnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3luY2hyb25pemF0aW9uS2V5ID0gcGF0aC5ub3JtYWxpemUodGhpcy5ib290c3RyYXBQYXRoKTtcbiAgICAgIGF3YWl0IFNIQVJFRF9SRVNPVVJDRVNfR1VBUkQuYWNxdWlyZShzeW5jaHJvbml6YXRpb25LZXksXG4gICAgICAgIGFzeW5jICgpID0+IGF3YWl0IHRoaXMuX2NsZWFudXBQcm9qZWN0SWZGcmVzaCgpKTtcbiAgICB9XG5cbiAgICAvLyBXZSBuZWVkIHRvIHByb3ZpZGUgV0RBIGxvY2FsIHBvcnQsIGJlY2F1c2UgaXQgbWlnaHQgYmUgb2NjdXBpZWRcbiAgICBhd2FpdCByZXNldFRlc3RQcm9jZXNzZXModGhpcy5kZXZpY2UudWRpZCwgIXRoaXMuaXNSZWFsRGV2aWNlKTtcblxuICAgIGlmICh0aGlzLmlkYikge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc3RhcnRXaXRoSURCKCk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLmluaXQodGhpcy5ub1Nlc3Npb25Qcm94eSk7XG5cbiAgICAvLyBTdGFydCB0aGUgeGNvZGVidWlsZCBwcm9jZXNzXG4gICAgaWYgKHRoaXMucHJlYnVpbGRXREEpIHtcbiAgICAgIGF3YWl0IHRoaXMueGNvZGVidWlsZC5wcmVidWlsZCgpO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnN0YXJ0KCk7XG4gIH1cblxuICBhc3luYyBzdGFydFdpdGhJREIgKCkge1xuICAgIHRoaXMubG9nLmluZm8oJ1dpbGwgbGF1bmNoIFdEQSB3aXRoIGlkYiBpbnN0ZWFkIG9mIHhjb2RlYnVpbGQgc2luY2UgdGhlIGNvcnJlc3BvbmRpbmcgZmxhZyBpcyBlbmFibGVkJyk7XG4gICAgY29uc3Qge3dkYUJ1bmRsZUlkLCB0ZXN0QnVuZGxlSWR9ID0gYXdhaXQgdGhpcy5wcmVwYXJlV0RBKCk7XG4gICAgY29uc3QgZW52ID0ge1xuICAgICAgVVNFX1BPUlQ6IHRoaXMud2RhUmVtb3RlUG9ydCxcbiAgICAgIFdEQV9QUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSOiB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCxcbiAgICB9O1xuICAgIGlmICh0aGlzLm1qcGVnU2VydmVyUG9ydCkge1xuICAgICAgZW52Lk1KUEVHX1NFUlZFUl9QT1JUID0gdGhpcy5tanBlZ1NlcnZlclBvcnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuaWRiLnJ1blhDVUlUZXN0KHdkYUJ1bmRsZUlkLCB3ZGFCdW5kbGVJZCwgdGVzdEJ1bmRsZUlkLCB7ZW52fSk7XG4gIH1cblxuICBhc3luYyBwYXJzZUJ1bmRsZUlkICh3ZGFCdW5kbGVQYXRoKSB7XG4gICAgY29uc3QgaW5mb1BsaXN0UGF0aCA9IHBhdGguam9pbih3ZGFCdW5kbGVQYXRoLCAnSW5mby5wbGlzdCcpO1xuICAgIGNvbnN0IGluZm9QbGlzdCA9IGF3YWl0IHBsaXN0LnBhcnNlUGxpc3QoYXdhaXQgZnMucmVhZEZpbGUoaW5mb1BsaXN0UGF0aCkpO1xuICAgIGlmICghaW5mb1BsaXN0LkNGQnVuZGxlSWRlbnRpZmllcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBidW5kbGUgaWQgaW4gJyR7aW5mb1BsaXN0UGF0aH0nYCk7XG4gICAgfVxuICAgIHJldHVybiBpbmZvUGxpc3QuQ0ZCdW5kbGVJZGVudGlmaWVyO1xuICB9XG5cbiAgYXN5bmMgcHJlcGFyZVdEQSAoKSB7XG4gICAgY29uc3Qgd2RhQnVuZGxlUGF0aCA9IHRoaXMud2RhQnVuZGxlUGF0aCB8fCBhd2FpdCB0aGlzLmZldGNoV0RBQnVuZGxlKCk7XG4gICAgY29uc3Qgd2RhQnVuZGxlSWQgPSBhd2FpdCB0aGlzLnBhcnNlQnVuZGxlSWQod2RhQnVuZGxlUGF0aCk7XG4gICAgaWYgKCFhd2FpdCB0aGlzLmRldmljZS5pc0FwcEluc3RhbGxlZCh3ZGFCdW5kbGVJZCkpIHtcbiAgICAgIGF3YWl0IHRoaXMuZGV2aWNlLmluc3RhbGxBcHAod2RhQnVuZGxlUGF0aCk7XG4gICAgfVxuICAgIGNvbnN0IHRlc3RCdW5kbGVJZCA9IGF3YWl0IHRoaXMuaWRiLmluc3RhbGxYQ1Rlc3RCdW5kbGUocGF0aC5qb2luKHdkYUJ1bmRsZVBhdGgsICdQbHVnSW5zJywgJ1dlYkRyaXZlckFnZW50UnVubmVyLnhjdGVzdCcpKTtcbiAgICByZXR1cm4ge3dkYUJ1bmRsZUlkLCB0ZXN0QnVuZGxlSWQsIHdkYUJ1bmRsZVBhdGh9O1xuICB9XG5cbiAgYXN5bmMgZmV0Y2hXREFCdW5kbGUgKCkge1xuICAgIGlmICghdGhpcy5kZXJpdmVkRGF0YVBhdGgpIHtcbiAgICAgIHJldHVybiBhd2FpdCBidW5kbGVXREFTaW0odGhpcy54Y29kZWJ1aWxkKTtcbiAgICB9XG4gICAgY29uc3Qgd2RhQnVuZGxlUGF0aHMgPSBhd2FpdCBmcy5nbG9iKGAke3RoaXMuZGVyaXZlZERhdGFQYXRofS8qKi8qJHtXREFfUlVOTkVSX0FQUH0vYCwge1xuICAgICAgYWJzb2x1dGU6IHRydWUsXG4gICAgfSk7XG4gICAgaWYgKF8uaXNFbXB0eSh3ZGFCdW5kbGVQYXRocykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgdGhlIFdEQSBidW5kbGUgaW4gJyR7dGhpcy5kZXJpdmVkRGF0YVBhdGh9J2ApO1xuICAgIH1cbiAgICByZXR1cm4gd2RhQnVuZGxlUGF0aHNbMF07XG4gIH1cblxuICBhc3luYyBpc1NvdXJjZUZyZXNoICgpIHtcbiAgICBjb25zdCBleGlzdHNQcm9taXNlcyA9IFtcbiAgICAgICdSZXNvdXJjZXMnLFxuICAgICAgYFJlc291cmNlcyR7cGF0aC5zZXB9V2ViRHJpdmVyQWdlbnQuYnVuZGxlYCxcbiAgICBdLm1hcCgoc3ViUGF0aCkgPT4gZnMuZXhpc3RzKHBhdGgucmVzb2x2ZSh0aGlzLmJvb3RzdHJhcFBhdGgsIHN1YlBhdGgpKSk7XG4gICAgcmV0dXJuIChhd2FpdCBCLmFsbChleGlzdHNQcm9taXNlcykpLnNvbWUoKHYpID0+IHYgPT09IGZhbHNlKTtcbiAgfVxuXG4gIHNldHVwUHJveGllcyAoc2Vzc2lvbklkKSB7XG4gICAgY29uc3QgcHJveHlPcHRzID0ge1xuICAgICAgbG9nOiB0aGlzLmxvZyxcbiAgICAgIHNlcnZlcjogdGhpcy51cmwuaG9zdG5hbWUsXG4gICAgICBwb3J0OiB0aGlzLnVybC5wb3J0LFxuICAgICAgYmFzZTogdGhpcy5iYXNlUGF0aCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMud2RhQ29ubmVjdGlvblRpbWVvdXQsXG4gICAgICBrZWVwQWxpdmU6IHRydWUsXG4gICAgfTtcblxuICAgIHRoaXMuandwcm94eSA9IG5ldyBKV1Byb3h5KHByb3h5T3B0cyk7XG4gICAgdGhpcy5qd3Byb3h5LnNlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy5qd3Byb3h5LnByb3h5UmVxUmVzLmJpbmQodGhpcy5qd3Byb3h5KTtcblxuICAgIHRoaXMubm9TZXNzaW9uUHJveHkgPSBuZXcgTm9TZXNzaW9uUHJveHkocHJveHlPcHRzKTtcbiAgfVxuXG4gIGFzeW5jIHF1aXQgKCkge1xuICAgIHRoaXMubG9nLmluZm8oJ1NodXR0aW5nIGRvd24gc3ViLXByb2Nlc3NlcycpO1xuXG4gICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnF1aXQoKTtcbiAgICBhd2FpdCB0aGlzLnhjb2RlYnVpbGQucmVzZXQoKTtcblxuICAgIGlmICh0aGlzLmp3cHJveHkpIHtcbiAgICAgIHRoaXMuandwcm94eS5zZXNzaW9uSWQgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgaWYgKCF0aGlzLmFyZ3Mud2ViRHJpdmVyQWdlbnRVcmwpIHtcbiAgICAgIC8vIGlmIHdlIHBvcHVsYXRlZCB0aGUgdXJsIG91cnNlbHZlcyAoZHVyaW5nIGBzZXR1cENhY2hpbmdgIGNhbGwsIGZvciBpbnN0YW5jZSlcbiAgICAgIC8vIHRoZW4gY2xlYW4gdGhhdCB1cC4gSWYgdGhlIHVybCB3YXMgc3VwcGxpZWQsIHdlIHdhbnQgdG8ga2VlcCBpdFxuICAgICAgdGhpcy53ZWJEcml2ZXJBZ2VudFVybCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHVybCAoKSB7XG4gICAgaWYgKCF0aGlzLl91cmwpIHtcbiAgICAgIGlmICh0aGlzLndlYkRyaXZlckFnZW50VXJsKSB7XG4gICAgICAgIHRoaXMuX3VybCA9IHVybC5wYXJzZSh0aGlzLndlYkRyaXZlckFnZW50VXJsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBvcnQgPSB0aGlzLndkYUxvY2FsUG9ydCB8fCBXREFfQUdFTlRfUE9SVDtcbiAgICAgICAgY29uc3Qge3Byb3RvY29sLCBob3N0bmFtZX0gPSB1cmwucGFyc2UodGhpcy53ZGFCYXNlVXJsIHx8IFdEQV9CQVNFX1VSTCk7XG4gICAgICAgIHRoaXMuX3VybCA9IHVybC5wYXJzZShgJHtwcm90b2NvbH0vLyR7aG9zdG5hbWV9OiR7cG9ydH1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHNldCB1cmwgKF91cmwpIHtcbiAgICB0aGlzLl91cmwgPSB1cmwucGFyc2UoX3VybCk7XG4gIH1cblxuICBnZXQgZnVsbHlTdGFydGVkICgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydGVkO1xuICB9XG5cbiAgc2V0IGZ1bGx5U3RhcnRlZCAoc3RhcnRlZCA9IGZhbHNlKSB7XG4gICAgdGhpcy5zdGFydGVkID0gc3RhcnRlZDtcbiAgfVxuXG4gIGFzeW5jIHJldHJpZXZlRGVyaXZlZERhdGFQYXRoICgpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnJldHJpZXZlRGVyaXZlZERhdGFQYXRoKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV1c2UgcnVubmluZyBXREEgaWYgaXQgaGFzIHRoZSBzYW1lIGJ1bmRsZSBpZCB3aXRoIHVwZGF0ZWRXREFCdW5kbGVJZC5cbiAgICogT3IgcmV1c2UgaXQgaWYgaXQgaGFzIHRoZSBkZWZhdWx0IGlkIHdpdGhvdXQgdXBkYXRlZFdEQUJ1bmRsZUlkLlxuICAgKiBVbmluc3RhbGwgaXQgaWYgdGhlIG1ldGhvZCBmYWNlcyBhbiBleGNlcHRpb24gZm9yIHRoZSBhYm92ZSBzaXR1YXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cGRhdGVkV0RBQnVuZGxlSWQgQnVuZGxlSWQgeW91J2QgbGlrZSB0byB1c2VcbiAgICovXG4gIGFzeW5jIHNldHVwQ2FjaGluZyAoKSB7XG4gICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgdGhpcy5nZXRTdGF0dXMoKTtcbiAgICBpZiAoIXN0YXR1cyB8fCAhc3RhdHVzLmJ1aWxkKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnV0RBIGlzIGN1cnJlbnRseSBub3QgcnVubmluZy4gVGhlcmUgaXMgbm90aGluZyB0byBjYWNoZScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHtcbiAgICAgIHByb2R1Y3RCdW5kbGVJZGVudGlmaWVyLFxuICAgICAgdXBncmFkZWRBdCxcbiAgICB9ID0gc3RhdHVzLmJ1aWxkO1xuICAgIC8vIGZvciByZWFsIGRldmljZVxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHByb2R1Y3RCdW5kbGVJZGVudGlmaWVyKSAmJiB1dGlsLmhhc1ZhbHVlKHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkKSAmJiB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCAhPT0gcHJvZHVjdEJ1bmRsZUlkZW50aWZpZXIpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYFdpbGwgdW5pbnN0YWxsIHJ1bm5pbmcgV0RBIHNpbmNlIGl0IGhhcyBkaWZmZXJlbnQgYnVuZGxlIGlkLiBUaGUgYWN0dWFsIHZhbHVlIGlzICcke3Byb2R1Y3RCdW5kbGVJZGVudGlmaWVyfScuYCk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy51bmluc3RhbGwoKTtcbiAgICB9XG4gICAgLy8gZm9yIHNpbXVsYXRvclxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHByb2R1Y3RCdW5kbGVJZGVudGlmaWVyKSAmJiAhdXRpbC5oYXNWYWx1ZSh0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCkgJiYgV0RBX1JVTk5FUl9CVU5ETEVfSUQgIT09IHByb2R1Y3RCdW5kbGVJZGVudGlmaWVyKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBXaWxsIHVuaW5zdGFsbCBydW5uaW5nIFdEQSBzaW5jZSBpdHMgYnVuZGxlIGlkIGlzIG5vdCBlcXVhbCB0byB0aGUgZGVmYXVsdCB2YWx1ZSAke1dEQV9SVU5ORVJfQlVORExFX0lEfWApO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudW5pbnN0YWxsKCk7XG4gICAgfVxuXG4gICAgY29uc3QgYWN0dWFsVXBncmFkZVRpbWVzdGFtcCA9IGF3YWl0IGdldFdEQVVwZ3JhZGVUaW1lc3RhbXAoKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgVXBncmFkZSB0aW1lc3RhbXAgb2YgdGhlIGN1cnJlbnRseSBidW5kbGVkIFdEQTogJHthY3R1YWxVcGdyYWRlVGltZXN0YW1wfWApO1xuICAgIHRoaXMubG9nLmRlYnVnKGBVcGdyYWRlIHRpbWVzdGFtcCBvZiB0aGUgV0RBIG9uIHRoZSBkZXZpY2U6ICR7dXBncmFkZWRBdH1gKTtcbiAgICBpZiAoYWN0dWFsVXBncmFkZVRpbWVzdGFtcCAmJiB1cGdyYWRlZEF0ICYmIF8udG9Mb3dlcihgJHthY3R1YWxVcGdyYWRlVGltZXN0YW1wfWApICE9PSBfLnRvTG93ZXIoYCR7dXBncmFkZWRBdH1gKSkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnV2lsbCB1bmluc3RhbGwgcnVubmluZyBXREEgc2luY2UgaXQgaGFzIGRpZmZlcmVudCB2ZXJzaW9uIGluIGNvbXBhcmlzb24gdG8gdGhlIG9uZSAnICtcbiAgICAgICAgYHdoaWNoIGlzIGJ1bmRsZWQgd2l0aCBhcHBpdW0teGN1aXRlc3QtZHJpdmVyIG1vZHVsZSAoJHthY3R1YWxVcGdyYWRlVGltZXN0YW1wfSAhPSAke3VwZ3JhZGVkQXR9KWApO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudW5pbnN0YWxsKCk7XG4gICAgfVxuXG4gICAgY29uc3QgbWVzc2FnZSA9IHV0aWwuaGFzVmFsdWUocHJvZHVjdEJ1bmRsZUlkZW50aWZpZXIpXG4gICAgICA/IGBXaWxsIHJldXNlIHByZXZpb3VzbHkgY2FjaGVkIFdEQSBpbnN0YW5jZSBhdCAnJHt0aGlzLnVybC5ocmVmfScgd2l0aCAnJHtwcm9kdWN0QnVuZGxlSWRlbnRpZmllcn0nYFxuICAgICAgOiBgV2lsbCByZXVzZSBwcmV2aW91c2x5IGNhY2hlZCBXREEgaW5zdGFuY2UgYXQgJyR7dGhpcy51cmwuaHJlZn0nYDtcbiAgICB0aGlzLmxvZy5pbmZvKGAke21lc3NhZ2V9LiBTZXQgdGhlIHdkYUxvY2FsUG9ydCBjYXBhYmlsaXR5IHRvIGEgdmFsdWUgZGlmZmVyZW50IGZyb20gJHt0aGlzLnVybC5wb3J0fSBpZiB0aGlzIGlzIGFuIHVuZGVzaXJlZCBiZWhhdmlvci5gKTtcbiAgICB0aGlzLndlYkRyaXZlckFnZW50VXJsID0gdGhpcy51cmwuaHJlZjtcbiAgfVxuXG4gIC8qKlxuICAgKiBRdWl0IGFuZCB1bmluc3RhbGwgcnVubmluZyBXREEuXG4gICAqL1xuICBhc3luYyBxdWl0QW5kVW5pbnN0YWxsICgpIHtcbiAgICBhd2FpdCB0aGlzLnF1aXQoKTtcbiAgICBhd2FpdCB0aGlzLnVuaW5zdGFsbCgpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFdlYkRyaXZlckFnZW50O1xuZXhwb3J0IHsgV2ViRHJpdmVyQWdlbnQgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFLQSxNQUFNQSxrQkFBa0IsR0FBRyxLQUFLLElBQWhDO0FBQ0EsTUFBTUMsY0FBYyxHQUFHLElBQXZCO0FBQ0EsTUFBTUMsa0JBQWtCLEdBQUcsNkJBQTNCO0FBQ0EsTUFBTUMsc0JBQXNCLEdBQUcsSUFBSUMsa0JBQUosRUFBL0I7O0FBRUEsTUFBTUMsY0FBTixDQUFxQjtF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
|
package/build/lib/xcodebuild.js
CHANGED
|
@@ -13,7 +13,7 @@ var _asyncbox = require("asyncbox");
|
|
|
13
13
|
|
|
14
14
|
var _teen_process = require("teen_process");
|
|
15
15
|
|
|
16
|
-
var _support = require("
|
|
16
|
+
var _support = require("appium/support");
|
|
17
17
|
|
|
18
18
|
var _logger = _interopRequireDefault(require("./logger"));
|
|
19
19
|
|
|
@@ -393,4 +393,4 @@ var _default = XcodeBuild;
|
|
|
393
393
|
exports.default = _default;require('source-map-support').install();
|
|
394
394
|
|
|
395
395
|
|
|
396
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3hjb2RlYnVpbGQuanMiLCJuYW1lcyI6WyJERUZBVUxUX1NJR05JTkdfSUQiLCJQUkVCVUlMRF9ERUxBWSIsIlJVTk5FUl9TQ0hFTUVfSU9TIiwiTElCX1NDSEVNRV9JT1MiLCJFUlJPUl9XUklUSU5HX0FUVEFDSE1FTlQiLCJFUlJPUl9DT1BZSU5HX0FUVEFDSE1FTlQiLCJJR05PUkVEX0VSUk9SUyIsIlJVTk5FUl9TQ0hFTUVfVFYiLCJMSUJfU0NIRU1FX1RWIiwieGNvZGVMb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJYY29kZUJ1aWxkIiwiY29uc3RydWN0b3IiLCJ4Y29kZVZlcnNpb24iLCJkZXZpY2UiLCJhcmdzIiwibG9nIiwiZGVmYXVsdExvZ2dlciIsInJlYWxEZXZpY2UiLCJhZ2VudFBhdGgiLCJib290c3RyYXBQYXRoIiwicGxhdGZvcm1WZXJzaW9uIiwicGxhdGZvcm1OYW1lIiwiaW9zU2RrVmVyc2lvbiIsInNob3dYY29kZUxvZyIsInhjb2RlQ29uZmlnRmlsZSIsInhjb2RlT3JnSWQiLCJ4Y29kZVNpZ25pbmdJZCIsImtleWNoYWluUGF0aCIsImtleWNoYWluUGFzc3dvcmQiLCJwcmVidWlsZFdEQSIsInVzZVByZWJ1aWx0V0RBIiwidXNlU2ltcGxlQnVpbGRUZXN0IiwidXNlWGN0ZXN0cnVuRmlsZSIsImxhdW5jaFRpbWVvdXQiLCJ3ZGFSZW1vdGVQb3J0IiwidXBkYXRlZFdEQUJ1bmRsZUlkIiwiZGVyaXZlZERhdGFQYXRoIiwibWpwZWdTZXJ2ZXJQb3J0IiwicHJlYnVpbGREZWxheSIsIl8iLCJpc051bWJlciIsImFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uIiwicmVzdWx0QnVuZGxlUGF0aCIsInJlc3VsdEJ1bmRsZVZlcnNpb24iLCJpbml0Iiwibm9TZXNzaW9uUHJveHkiLCJkZXZpdmVJbmZvIiwiaXNSZWFsRGV2aWNlIiwidWRpZCIsInhjdGVzdHJ1bkZpbGVQYXRoIiwicmV0cmlldmVEZXJpdmVkRGF0YVBhdGgiLCJfZGVyaXZlZERhdGFQYXRoUHJvbWlzZSIsInN0ZG91dCIsImVyciIsIndhcm4iLCJtZXNzYWdlIiwicGF0dGVybiIsIm1hdGNoIiwiZXhlYyIsInRydW5jYXRlIiwibGVuZ3RoIiwiZGVidWciLCJwYXRoIiwiZGlybmFtZSIsIm5vcm1hbGl6ZSIsInJlc2V0IiwicHJlYnVpbGQiLCJzdGFydCIsInhjb2RlYnVpbGQiLCJCIiwiZGVsYXkiLCJjbGVhblByb2plY3QiLCJ0bXBJc1R2T1MiLCJsaWJTY2hlbWUiLCJydW5uZXJTY2hlbWUiLCJzY2hlbWUiLCJnZXRDb21tYW5kIiwiYnVpbGRPbmx5IiwiY21kIiwiYnVpbGRDbWQiLCJ0ZXN0Q21kIiwicHVzaCIsInZlcnNpb25NYXRjaCIsIlJlZ0V4cCIsInByb2Nlc3MiLCJlbnYiLCJBUFBJVU1fWENVSVRFU1RfVFJFQVRfV0FSTklOR1NfQVNfRVJST1JTIiwiY3JlYXRlU3ViUHJvY2VzcyIsImpvaW4iLCJPYmplY3QiLCJhc3NpZ24iLCJVU0VfUE9SVCIsIldEQV9QUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSIiwiV0RBX1JVTk5FUl9CVU5ETEVfSUQiLCJNSlBFR19TRVJWRVJfUE9SVCIsInVwZ3JhZGVUaW1lc3RhbXAiLCJVUEdSQURFX1RJTUVTVEFNUCIsIlN1YlByb2Nlc3MiLCJjd2QiLCJkZXRhY2hlZCIsInN0ZGlvIiwibG9nWGNvZGVPdXRwdXQiLCJsb2dNc2ciLCJpc0Jvb2xlYW4iLCJvbiIsInN0ZGVyciIsIm91dCIsImluY2x1ZGVzIiwibG9nTG9jYXRpb24iLCJmaXJzdCIsInJlbW92ZSIsInRyaW0iLCJzcGxpdCIsInYiLCJzdGFydHNXaXRoIiwic2VwIiwiaWdub3JlRXJyb3IiLCJzb21lIiwieCIsIl93ZGFfZXJyb3Jfb2NjdXJyZWQiLCJsaW5lIiwiRU9MIiwiZXJyb3IiLCJfd2RhX2Vycm9yX21lc3NhZ2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiY29kZSIsInNpZ25hbCIsImRhdGEiLCJmcyIsInJlYWRGaWxlIiwicHJvY2Vzc0V4aXRlZCIsIkVycm9yIiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsInN0YXR1cyIsIndhaXRGb3JTdGFydCIsIm1zZyIsImN1cnJlbnRTdGF0dXMiLCJyZXRyaWVzIiwicGFyc2VJbnQiLCJwcm94eVRpbWVvdXQiLCJ0aW1lb3V0IiwiY29tbWFuZCIsImlvcyIsImlwIiwiYWdlbnRVcmwiLCJKU09OIiwic3RyaW5naWZ5IiwiZ2V0RHVyYXRpb24iLCJhc01pbGxpU2Vjb25kcyIsInRvRml4ZWQiLCJxdWl0Il0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL3hjb2RlYnVpbGQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IFN1YlByb2Nlc3MsIGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgZnMsIGxvZ2dlciwgdGltaW5nIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBkZWZhdWx0TG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7XG4gIHNldFJlYWxEZXZpY2VTZWN1cml0eSwgZ2VuZXJhdGVYY29kZUNvbmZpZ0ZpbGUsIHNldFhjdGVzdHJ1bkZpbGUsXG4gIHVwZGF0ZVByb2plY3RGaWxlLCByZXNldFByb2plY3RGaWxlLCBraWxsUHJvY2VzcyxcbiAgZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCwgaXNUdk9TIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBFT0wgfSBmcm9tICdvcyc7XG5pbXBvcnQgeyBXREFfUlVOTkVSX0JVTkRMRV9JRCB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuXG5jb25zdCBERUZBVUxUX1NJR05JTkdfSUQgPSAnaVBob25lIERldmVsb3Blcic7XG5jb25zdCBQUkVCVUlMRF9ERUxBWSA9IDA7XG5jb25zdCBSVU5ORVJfU0NIRU1FX0lPUyA9ICdXZWJEcml2ZXJBZ2VudFJ1bm5lcic7XG5jb25zdCBMSUJfU0NIRU1FX0lPUyA9ICdXZWJEcml2ZXJBZ2VudExpYic7XG5cbmNvbnN0IEVSUk9SX1dSSVRJTkdfQVRUQUNITUVOVCA9ICdFcnJvciB3cml0aW5nIGF0dGFjaG1lbnQgZGF0YSB0byBmaWxlJztcbmNvbnN0IEVSUk9SX0NPUFlJTkdfQVRUQUNITUVOVCA9ICdFcnJvciBjb3B5aW5nIHRlc3RpbmcgYXR0YWNobWVudCc7XG5jb25zdCBJR05PUkVEX0VSUk9SUyA9IFtcbiAgRVJST1JfV1JJVElOR19BVFRBQ0hNRU5ULFxuICBFUlJPUl9DT1BZSU5HX0FUVEFDSE1FTlQsXG4gICdGYWlsZWQgdG8gcmVtb3ZlIHNjcmVlbnNob3QgYXQgcGF0aCcsXG5dO1xuXG5jb25zdCBSVU5ORVJfU0NIRU1FX1RWID0gJ1dlYkRyaXZlckFnZW50UnVubmVyX3R2T1MnO1xuY29uc3QgTElCX1NDSEVNRV9UViA9ICdXZWJEcml2ZXJBZ2VudExpYl90dk9TJztcblxuY29uc3QgeGNvZGVMb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdYY29kZScpO1xuXG5cbmNsYXNzIFhjb2RlQnVpbGQge1xuICBjb25zdHJ1Y3RvciAoeGNvZGVWZXJzaW9uLCBkZXZpY2UsIGFyZ3MgPSB7fSwgbG9nID0gbnVsbCkge1xuICAgIHRoaXMueGNvZGVWZXJzaW9uID0geGNvZGVWZXJzaW9uO1xuXG4gICAgdGhpcy5kZXZpY2UgPSBkZXZpY2U7XG4gICAgdGhpcy5sb2cgPSBsb2cgPz8gZGVmYXVsdExvZ2dlcjtcblxuICAgIHRoaXMucmVhbERldmljZSA9IGFyZ3MucmVhbERldmljZTtcblxuICAgIHRoaXMuYWdlbnRQYXRoID0gYXJncy5hZ2VudFBhdGg7XG4gICAgdGhpcy5ib290c3RyYXBQYXRoID0gYXJncy5ib290c3RyYXBQYXRoO1xuXG4gICAgdGhpcy5wbGF0Zm9ybVZlcnNpb24gPSBhcmdzLnBsYXRmb3JtVmVyc2lvbjtcbiAgICB0aGlzLnBsYXRmb3JtTmFtZSA9IGFyZ3MucGxhdGZvcm1OYW1lO1xuICAgIHRoaXMuaW9zU2RrVmVyc2lvbiA9IGFyZ3MuaW9zU2RrVmVyc2lvbjtcblxuICAgIHRoaXMuc2hvd1hjb2RlTG9nID0gYXJncy5zaG93WGNvZGVMb2c7XG5cbiAgICB0aGlzLnhjb2RlQ29uZmlnRmlsZSA9IGFyZ3MueGNvZGVDb25maWdGaWxlO1xuICAgIHRoaXMueGNvZGVPcmdJZCA9IGFyZ3MueGNvZGVPcmdJZDtcbiAgICB0aGlzLnhjb2RlU2lnbmluZ0lkID0gYXJncy54Y29kZVNpZ25pbmdJZCB8fCBERUZBVUxUX1NJR05JTkdfSUQ7XG4gICAgdGhpcy5rZXljaGFpblBhdGggPSBhcmdzLmtleWNoYWluUGF0aDtcbiAgICB0aGlzLmtleWNoYWluUGFzc3dvcmQgPSBhcmdzLmtleWNoYWluUGFzc3dvcmQ7XG5cbiAgICB0aGlzLnByZWJ1aWxkV0RBID0gYXJncy5wcmVidWlsZFdEQTtcbiAgICB0aGlzLnVzZVByZWJ1aWx0V0RBID0gYXJncy51c2VQcmVidWlsdFdEQTtcbiAgICB0aGlzLnVzZVNpbXBsZUJ1aWxkVGVzdCA9IGFyZ3MudXNlU2ltcGxlQnVpbGRUZXN0O1xuXG4gICAgdGhpcy51c2VYY3Rlc3RydW5GaWxlID0gYXJncy51c2VYY3Rlc3RydW5GaWxlO1xuXG4gICAgdGhpcy5sYXVuY2hUaW1lb3V0ID0gYXJncy5sYXVuY2hUaW1lb3V0O1xuXG4gICAgdGhpcy53ZGFSZW1vdGVQb3J0ID0gYXJncy53ZGFSZW1vdGVQb3J0O1xuXG4gICAgdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQgPSBhcmdzLnVwZGF0ZWRXREFCdW5kbGVJZDtcbiAgICB0aGlzLmRlcml2ZWREYXRhUGF0aCA9IGFyZ3MuZGVyaXZlZERhdGFQYXRoO1xuXG4gICAgdGhpcy5tanBlZ1NlcnZlclBvcnQgPSBhcmdzLm1qcGVnU2VydmVyUG9ydDtcblxuICAgIHRoaXMucHJlYnVpbGREZWxheSA9IF8uaXNOdW1iZXIoYXJncy5wcmVidWlsZERlbGF5KSA/IGFyZ3MucHJlYnVpbGREZWxheSA6IFBSRUJVSUxEX0RFTEFZO1xuXG4gICAgdGhpcy5hbGxvd1Byb3Zpc2lvbmluZ0RldmljZVJlZ2lzdHJhdGlvbiA9IGFyZ3MuYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb247XG5cbiAgICB0aGlzLnJlc3VsdEJ1bmRsZVBhdGggPSBhcmdzLnJlc3VsdEJ1bmRsZVBhdGg7XG4gICAgdGhpcy5yZXN1bHRCdW5kbGVWZXJzaW9uID0gYXJncy5yZXN1bHRCdW5kbGVWZXJzaW9uO1xuICB9XG5cbiAgYXN5bmMgaW5pdCAobm9TZXNzaW9uUHJveHkpIHtcbiAgICB0aGlzLm5vU2Vzc2lvblByb3h5ID0gbm9TZXNzaW9uUHJveHk7XG5cbiAgICBpZiAodGhpcy51c2VYY3Rlc3RydW5GaWxlKSB7XG4gICAgICBjb25zdCBkZXZpdmVJbmZvID0ge1xuICAgICAgICBpc1JlYWxEZXZpY2U6IHRoaXMucmVhbERldmljZSxcbiAgICAgICAgdWRpZDogdGhpcy5kZXZpY2UudWRpZCxcbiAgICAgICAgcGxhdGZvcm1WZXJzaW9uOiB0aGlzLnBsYXRmb3JtVmVyc2lvbixcbiAgICAgICAgcGxhdGZvcm1OYW1lOiB0aGlzLnBsYXRmb3JtTmFtZVxuICAgICAgfTtcbiAgICAgIHRoaXMueGN0ZXN0cnVuRmlsZVBhdGggPSBhd2FpdCBzZXRYY3Rlc3RydW5GaWxlKGRldml2ZUluZm8sIHRoaXMuaW9zU2RrVmVyc2lvbiwgdGhpcy5ib290c3RyYXBQYXRoLCB0aGlzLndkYVJlbW90ZVBvcnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGlmIG5lY2Vzc2FyeSwgdXBkYXRlIHRoZSBidW5kbGVJZCB0byB1c2VyJ3Mgc3BlY2lmaWNhdGlvblxuICAgIGlmICh0aGlzLnJlYWxEZXZpY2UpIHtcbiAgICAgIC8vIEluIGNhc2UgdGhlIHByb2plY3Qgc3RpbGwgaGFzIHRoZSB1c2VyIHNwZWNpZmljIGJ1bmRsZSBJRCwgcmVzZXQgdGhlIHByb2plY3QgZmlsZSBmaXJzdC5cbiAgICAgIC8vIC0gV2UgZG8gdGhpcyByZXNldCBldmVuIGlmIHVwZGF0ZWRXREFCdW5kbGVJZCBpcyBub3Qgc3BlY2lmaWVkLFxuICAgICAgLy8gICBzaW5jZSB0aGUgcHJldmlvdXMgdXBkYXRlZFdEQUJ1bmRsZUlkIHRlc3QgaGFzIGdlbmVyYXRlZCB0aGUgdXNlciBzcGVjaWZpYyBidW5kbGUgSUQgcHJvamVjdCBmaWxlLlxuICAgICAgLy8gLSBXZSBkb24ndCBjYWxsIHJlc2V0UHJvamVjdEZpbGUgZm9yIHNpbXVsYXRvcixcbiAgICAgIC8vICAgc2luY2Ugc2ltdWxhdG9yIHRlc3QgcnVuIHdpbGwgd29yayB3aXRoIGFueSB1c2VyIHNwZWNpZmljIGJ1bmRsZSBJRC5cbiAgICAgIGF3YWl0IHJlc2V0UHJvamVjdEZpbGUodGhpcy5hZ2VudFBhdGgpO1xuICAgICAgaWYgKHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkKSB7XG4gICAgICAgIGF3YWl0IHVwZGF0ZVByb2plY3RGaWxlKHRoaXMuYWdlbnRQYXRoLCB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmV0cmlldmVEZXJpdmVkRGF0YVBhdGggKCkge1xuICAgIGlmICh0aGlzLmRlcml2ZWREYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVyaXZlZERhdGFQYXRoO1xuICAgIH1cblxuICAgIC8vIGF2b2lkIHJhY2UgY29uZGl0aW9uc1xuICAgIGlmICh0aGlzLl9kZXJpdmVkRGF0YVBhdGhQcm9taXNlKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fZGVyaXZlZERhdGFQYXRoUHJvbWlzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9kZXJpdmVkRGF0YVBhdGhQcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgIGxldCBzdGRvdXQ7XG4gICAgICB0cnkge1xuICAgICAgICAoe3N0ZG91dH0gPSBhd2FpdCBleGVjKCd4Y29kZWJ1aWxkJywgWyctcHJvamVjdCcsIHRoaXMuYWdlbnRQYXRoLCAnLXNob3dCdWlsZFNldHRpbmdzJ10pKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBDYW5ub3QgcmV0cmlldmUgV0RBIGJ1aWxkIHNldHRpbmdzLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXR0ZXJuID0gL15cXHMqQlVJTERfRElSXFxzKz1cXHMrKFxcLy4qKS9tO1xuICAgICAgY29uc3QgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWMoc3Rkb3V0KTtcbiAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgQ2Fubm90IHBhcnNlIFdEQSBidWlsZCBkaXIgZnJvbSAke18udHJ1bmNhdGUoc3Rkb3V0LCB7bGVuZ3RoOiAzMDB9KX1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2cuZGVidWcoYFBhcnNlZCBCVUlMRF9ESVIgY29uZmlndXJhdGlvbiB2YWx1ZTogJyR7bWF0Y2hbMV19J2ApO1xuICAgICAgLy8gRGVyaXZlZCBkYXRhIHJvb3QgaXMgdHdvIGxldmVscyBoaWdoZXIgb3ZlciB0aGUgYnVpbGQgZGlyXG4gICAgICB0aGlzLmRlcml2ZWREYXRhUGF0aCA9IHBhdGguZGlybmFtZShwYXRoLmRpcm5hbWUocGF0aC5ub3JtYWxpemUobWF0Y2hbMV0pKSk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgR290IGRlcml2ZWQgZGF0YSByb290OiAnJHt0aGlzLmRlcml2ZWREYXRhUGF0aH0nYCk7XG4gICAgICByZXR1cm4gdGhpcy5kZXJpdmVkRGF0YVBhdGg7XG4gICAgfSkoKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fZGVyaXZlZERhdGFQYXRoUHJvbWlzZTtcbiAgfVxuXG4gIGFzeW5jIHJlc2V0ICgpIHtcbiAgICAvLyBpZiBuZWNlc3NhcnksIHJlc2V0IHRoZSBidW5kbGVJZCB0byBvcmlnaW5hbCB2YWx1ZVxuICAgIGlmICh0aGlzLnJlYWxEZXZpY2UgJiYgdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQpIHtcbiAgICAgIGF3YWl0IHJlc2V0UHJvamVjdEZpbGUodGhpcy5hZ2VudFBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHByZWJ1aWxkICgpIHtcbiAgICAvLyBmaXJzdCBkbyBhIGJ1aWxkIHBoYXNlXG4gICAgdGhpcy5sb2cuZGVidWcoJ1ByZS1idWlsZGluZyBXREEgYmVmb3JlIGxhdW5jaGluZyB0ZXN0Jyk7XG4gICAgdGhpcy51c2VQcmVidWlsdFdEQSA9IHRydWU7XG4gICAgYXdhaXQgdGhpcy5zdGFydCh0cnVlKTtcblxuICAgIHRoaXMueGNvZGVidWlsZCA9IG51bGw7XG5cbiAgICAvLyBwYXVzZSBhIG1vbWVudFxuICAgIGF3YWl0IEIuZGVsYXkodGhpcy5wcmVidWlsZERlbGF5KTtcbiAgfVxuXG4gIGFzeW5jIGNsZWFuUHJvamVjdCAoKSB7XG4gICAgY29uc3QgdG1wSXNUdk9TID0gaXNUdk9TKHRoaXMucGxhdGZvcm1OYW1lKTtcbiAgICBjb25zdCBsaWJTY2hlbWUgPSB0bXBJc1R2T1MgPyBMSUJfU0NIRU1FX1RWIDogTElCX1NDSEVNRV9JT1M7XG4gICAgY29uc3QgcnVubmVyU2NoZW1lID0gdG1wSXNUdk9TID8gUlVOTkVSX1NDSEVNRV9UViA6IFJVTk5FUl9TQ0hFTUVfSU9TO1xuXG4gICAgZm9yIChjb25zdCBzY2hlbWUgb2YgW2xpYlNjaGVtZSwgcnVubmVyU2NoZW1lXSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYENsZWFuaW5nIHRoZSBwcm9qZWN0IHNjaGVtZSAnJHtzY2hlbWV9JyB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIGxlZnRvdmVycyBmcm9tIHByZXZpb3VzIGluc3RhbGxzYCk7XG4gICAgICBhd2FpdCBleGVjKCd4Y29kZWJ1aWxkJywgW1xuICAgICAgICAnY2xlYW4nLFxuICAgICAgICAnLXByb2plY3QnLCB0aGlzLmFnZW50UGF0aCxcbiAgICAgICAgJy1zY2hlbWUnLCBzY2hlbWUsXG4gICAgICBdKTtcbiAgICB9XG4gIH1cblxuICBnZXRDb21tYW5kIChidWlsZE9ubHkgPSBmYWxzZSkge1xuICAgIGxldCBjbWQgPSAneGNvZGVidWlsZCc7XG4gICAgbGV0IGFyZ3M7XG5cbiAgICAvLyBmaWd1cmUgb3V0IHRoZSB0YXJnZXRzIGZvciB4Y29kZWJ1aWxkXG4gICAgY29uc3QgW2J1aWxkQ21kLCB0ZXN0Q21kXSA9IHRoaXMudXNlU2ltcGxlQnVpbGRUZXN0ID8gWydidWlsZCcsICd0ZXN0J10gOiBbJ2J1aWxkLWZvci10ZXN0aW5nJywgJ3Rlc3Qtd2l0aG91dC1idWlsZGluZyddO1xuICAgIGlmIChidWlsZE9ubHkpIHtcbiAgICAgIGFyZ3MgPSBbYnVpbGRDbWRdO1xuICAgIH0gZWxzZSBpZiAodGhpcy51c2VQcmVidWlsdFdEQSB8fCB0aGlzLnVzZVhjdGVzdHJ1bkZpbGUpIHtcbiAgICAgIGFyZ3MgPSBbdGVzdENtZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGFyZ3MgPSBbYnVpbGRDbWQsIHRlc3RDbWRdO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uKSB7XG4gICAgICAvLyBUbyAtYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb24gZmxhZyB0YWtlcyBlZmZlY3QsIC1hbGxvd1Byb3Zpc2lvbmluZ1VwZGF0ZXMgbmVlZHMgdG8gYmUgcGFzc2VkIGFzIHdlbGwuXG4gICAgICBhcmdzLnB1c2goJy1hbGxvd1Byb3Zpc2lvbmluZ1VwZGF0ZXMnLCAnLWFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVzdWx0QnVuZGxlUGF0aCkge1xuICAgICAgYXJncy5wdXNoKCctcmVzdWx0QnVuZGxlUGF0aCcsIHRoaXMucmVzdWx0QnVuZGxlUGF0aCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVzdWx0QnVuZGxlVmVyc2lvbikge1xuICAgICAgYXJncy5wdXNoKCctcmVzdWx0QnVuZGxlVmVyc2lvbicsIHRoaXMucmVzdWx0QnVuZGxlVmVyc2lvbik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudXNlWGN0ZXN0cnVuRmlsZSkge1xuICAgICAgYXJncy5wdXNoKCcteGN0ZXN0cnVuJywgdGhpcy54Y3Rlc3RydW5GaWxlUGF0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJ1bm5lclNjaGVtZSA9IGlzVHZPUyh0aGlzLnBsYXRmb3JtTmFtZSkgPyBSVU5ORVJfU0NIRU1FX1RWIDogUlVOTkVSX1NDSEVNRV9JT1M7XG4gICAgICBhcmdzLnB1c2goJy1wcm9qZWN0JywgdGhpcy5hZ2VudFBhdGgsICctc2NoZW1lJywgcnVubmVyU2NoZW1lKTtcbiAgICAgIGlmICh0aGlzLmRlcml2ZWREYXRhUGF0aCkge1xuICAgICAgICBhcmdzLnB1c2goJy1kZXJpdmVkRGF0YVBhdGgnLCB0aGlzLmRlcml2ZWREYXRhUGF0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIGFyZ3MucHVzaCgnLWRlc3RpbmF0aW9uJywgYGlkPSR7dGhpcy5kZXZpY2UudWRpZH1gKTtcblxuICAgIGNvbnN0IHZlcnNpb25NYXRjaCA9IG5ldyBSZWdFeHAoL14oXFxkKylcXC4oXFxkKykvKS5leGVjKHRoaXMucGxhdGZvcm1WZXJzaW9uKTtcbiAgICBpZiAodmVyc2lvbk1hdGNoKSB7XG4gICAgICBhcmdzLnB1c2goYElQSE9ORU9TX0RFUExPWU1FTlRfVEFSR0VUPSR7dmVyc2lvbk1hdGNoWzFdfS4ke3ZlcnNpb25NYXRjaFsyXX1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2cud2FybihgQ2Fubm90IHBhcnNlIG1ham9yIGFuZCBtaW5vciB2ZXJzaW9uIG51bWJlcnMgZnJvbSBwbGF0Zm9ybVZlcnNpb24gXCIke3RoaXMucGxhdGZvcm1WZXJzaW9ufVwiLiBgICtcbiAgICAgICAgJ1dpbGwgYnVpbGQgZm9yIHRoZSBkZWZhdWx0IHBsYXRmb3JtIGluc3RlYWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZWFsRGV2aWNlICYmIHRoaXMueGNvZGVDb25maWdGaWxlKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgVXNpbmcgWGNvZGUgY29uZmlndXJhdGlvbiBmaWxlOiAnJHt0aGlzLnhjb2RlQ29uZmlnRmlsZX0nYCk7XG4gICAgICBhcmdzLnB1c2goJy14Y2NvbmZpZycsIHRoaXMueGNvZGVDb25maWdGaWxlKTtcbiAgICB9XG5cbiAgICBpZiAoIXByb2Nlc3MuZW52LkFQUElVTV9YQ1VJVEVTVF9UUkVBVF9XQVJOSU5HU19BU19FUlJPUlMpIHtcbiAgICAgIC8vIFRoaXMgc29tZXRpbWVzIGhlbHBzIHRvIHN1cnZpdmUgWGNvZGUgdXBkYXRlc1xuICAgICAgYXJncy5wdXNoKCdHQ0NfVFJFQVRfV0FSTklOR1NfQVNfRVJST1JTPTAnKTtcbiAgICB9XG5cbiAgICAvLyBCZWxvdyBvcHRpb24gc2xpZ2h0bHkgcmVkdWNlcyBidWlsZCB0aW1lIGluIGRlYnVnIGJ1aWxkXG4gICAgLy8gd2l0aCBwcmV2ZW50aW5nIHRvIGdlbmVyYXRlIGAvSW5kZXgvRGF0YVN0b3JlYCB3aGljaCBpcyB1c2VkIGJ5IGRldmVsb3BtZW50XG4gICAgYXJncy5wdXNoKCdDT01QSUxFUl9JTkRFWF9TVE9SRV9FTkFCTEU9Tk8nKTtcblxuICAgIHJldHVybiB7Y21kLCBhcmdzfTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVN1YlByb2Nlc3MgKGJ1aWxkT25seSA9IGZhbHNlKSB7XG4gICAgaWYgKCF0aGlzLnVzZVhjdGVzdHJ1bkZpbGUgJiYgdGhpcy5yZWFsRGV2aWNlKSB7XG4gICAgICBpZiAodGhpcy5rZXljaGFpblBhdGggJiYgdGhpcy5rZXljaGFpblBhc3N3b3JkKSB7XG4gICAgICAgIGF3YWl0IHNldFJlYWxEZXZpY2VTZWN1cml0eSh0aGlzLmtleWNoYWluUGF0aCwgdGhpcy5rZXljaGFpblBhc3N3b3JkKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnhjb2RlT3JnSWQgJiYgdGhpcy54Y29kZVNpZ25pbmdJZCAmJiAhdGhpcy54Y29kZUNvbmZpZ0ZpbGUpIHtcbiAgICAgICAgdGhpcy54Y29kZUNvbmZpZ0ZpbGUgPSBhd2FpdCBnZW5lcmF0ZVhjb2RlQ29uZmlnRmlsZSh0aGlzLnhjb2RlT3JnSWQsIHRoaXMueGNvZGVTaWduaW5nSWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHtjbWQsIGFyZ3N9ID0gdGhpcy5nZXRDb21tYW5kKGJ1aWxkT25seSk7XG4gICAgdGhpcy5sb2cuZGVidWcoYEJlZ2lubmluZyAke2J1aWxkT25seSA/ICdidWlsZCcgOiAndGVzdCd9IHdpdGggY29tbWFuZCAnJHtjbWR9ICR7YXJncy5qb2luKCcgJyl9JyBgICtcbiAgICAgIGBpbiBkaXJlY3RvcnkgJyR7dGhpcy5ib290c3RyYXBQYXRofSdgKTtcbiAgICBjb25zdCBlbnYgPSBPYmplY3QuYXNzaWduKHt9LCBwcm9jZXNzLmVudiwge1xuICAgICAgVVNFX1BPUlQ6IHRoaXMud2RhUmVtb3RlUG9ydCxcbiAgICAgIFdEQV9QUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSOiB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCB8fCBXREFfUlVOTkVSX0JVTkRMRV9JRCxcbiAgICB9KTtcbiAgICBpZiAodGhpcy5tanBlZ1NlcnZlclBvcnQpIHtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vV2ViRHJpdmVyQWdlbnQvcHVsbC8xMDVcbiAgICAgIGVudi5NSlBFR19TRVJWRVJfUE9SVCA9IHRoaXMubWpwZWdTZXJ2ZXJQb3J0O1xuICAgIH1cbiAgICBjb25zdCB1cGdyYWRlVGltZXN0YW1wID0gYXdhaXQgZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCh0aGlzLmJvb3RzdHJhcFBhdGgpO1xuICAgIGlmICh1cGdyYWRlVGltZXN0YW1wKSB7XG4gICAgICBlbnYuVVBHUkFERV9USU1FU1RBTVAgPSB1cGdyYWRlVGltZXN0YW1wO1xuICAgIH1cbiAgICBjb25zdCB4Y29kZWJ1aWxkID0gbmV3IFN1YlByb2Nlc3MoY21kLCBhcmdzLCB7XG4gICAgICBjd2Q6IHRoaXMuYm9vdHN0cmFwUGF0aCxcbiAgICAgIGVudixcbiAgICAgIGRldGFjaGVkOiB0cnVlLFxuICAgICAgc3RkaW86IFsnaWdub3JlJywgJ3BpcGUnLCAncGlwZSddLFxuICAgIH0pO1xuXG4gICAgbGV0IGxvZ1hjb2RlT3V0cHV0ID0gISF0aGlzLnNob3dYY29kZUxvZztcbiAgICBjb25zdCBsb2dNc2cgPSBfLmlzQm9vbGVhbih0aGlzLnNob3dYY29kZUxvZylcbiAgICAgID8gYE91dHB1dCBmcm9tIHhjb2RlYnVpbGQgJHt0aGlzLnNob3dYY29kZUxvZyA/ICd3aWxsJyA6ICd3aWxsIG5vdCd9IGJlIGxvZ2dlZGBcbiAgICAgIDogJ091dHB1dCBmcm9tIHhjb2RlYnVpbGQgd2lsbCBvbmx5IGJlIGxvZ2dlZCBpZiBhbnkgZXJyb3JzIGFyZSBwcmVzZW50IHRoZXJlJztcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgJHtsb2dNc2d9LiBUbyBjaGFuZ2UgdGhpcywgdXNlICdzaG93WGNvZGVMb2cnIGRlc2lyZWQgY2FwYWJpbGl0eWApO1xuICAgIHhjb2RlYnVpbGQub24oJ291dHB1dCcsIChzdGRvdXQsIHN0ZGVycikgPT4ge1xuICAgICAgbGV0IG91dCA9IHN0ZG91dCB8fCBzdGRlcnI7XG4gICAgICAvLyB3ZSB3YW50IHRvIHB1bGwgb3V0IHRoZSBsb2cgZmlsZSB0aGF0IGlzIGNyZWF0ZWQsIGFuZCBoaWdobGlnaHQgaXRcbiAgICAgIC8vIGZvciBkaWFnbm9zdGljIHB1cnBvc2VzXG4gICAgICBpZiAob3V0LmluY2x1ZGVzKCdXcml0aW5nIGRpYWdub3N0aWMgbG9nIGZvciB0ZXN0IHNlc3Npb24gdG8nKSkge1xuICAgICAgICAvLyBwdWxsIG91dCB0aGUgZmlyc3QgbGluZSB0aGF0IGJlZ2lucyB3aXRoIHRoZSBwYXRoIHNlcGFyYXRvclxuICAgICAgICAvLyB3aGljaCAqc2hvdWxkKiBiZSB0aGUgbGluZSBpbmRpY2F0aW5nIHRoZSBsb2cgZmlsZSBnZW5lcmF0ZWRcbiAgICAgICAgeGNvZGVidWlsZC5sb2dMb2NhdGlvbiA9IF8uZmlyc3QoXy5yZW1vdmUob3V0LnRyaW0oKS5zcGxpdCgnXFxuJyksICh2KSA9PiB2LnN0YXJ0c1dpdGgocGF0aC5zZXApKSk7XG4gICAgICAgIHhjb2RlTG9nLmRlYnVnKGBMb2cgZmlsZSBmb3IgeGNvZGVidWlsZCB0ZXN0OiAke3hjb2RlYnVpbGQubG9nTG9jYXRpb259YCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIHdlIGhhdmUgYW4gZXJyb3Igd2Ugd2FudCB0byBvdXRwdXQgdGhlIGxvZ3NcbiAgICAgIC8vIG90aGVyd2lzZSB0aGUgZmFpbHVyZSBpcyBpbnNjcnV0aWJsZVxuICAgICAgLy8gYnV0IGRvIG5vdCBsb2cgcGVybWlzc2lvbiBlcnJvcnMgZnJvbSB0cnlpbmcgdG8gd3JpdGUgdG8gYXR0YWNobWVudHMgZm9sZGVyXG4gICAgICBjb25zdCBpZ25vcmVFcnJvciA9IElHTk9SRURfRVJST1JTLnNvbWUoKHgpID0+IG91dC5pbmNsdWRlcyh4KSk7XG4gICAgICBpZiAodGhpcy5zaG93WGNvZGVMb2cgIT09IGZhbHNlICYmIG91dC5pbmNsdWRlcygnRXJyb3IgRG9tYWluPScpICYmICFpZ25vcmVFcnJvcikge1xuICAgICAgICBsb2dYY29kZU91dHB1dCA9IHRydWU7XG5cbiAgICAgICAgLy8gdGVycmlibGUgaGFjayB0byBoYW5kbGUgY2FzZSB3aGVyZSB4Y29kZSByZXR1cm4gMCBidXQgaXMgZmFpbGluZ1xuICAgICAgICB4Y29kZWJ1aWxkLl93ZGFfZXJyb3Jfb2NjdXJyZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBkbyBub3QgbG9nIHBlcm1pc3Npb24gZXJyb3JzIGZyb20gdHJ5aW5nIHRvIHdyaXRlIHRvIGF0dGFjaG1lbnRzIGZvbGRlclxuICAgICAgaWYgKGxvZ1hjb2RlT3V0cHV0ICYmICFpZ25vcmVFcnJvcikge1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2Ygb3V0LnNwbGl0KEVPTCkpIHtcbiAgICAgICAgICB4Y29kZUxvZy5lcnJvcihsaW5lKTtcbiAgICAgICAgICBpZiAobGluZSkge1xuICAgICAgICAgICAgeGNvZGVidWlsZC5fd2RhX2Vycm9yX21lc3NhZ2UgKz0gYCR7RU9MfSR7bGluZX1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHhjb2RlYnVpbGQ7XG4gIH1cblxuICBhc3luYyBzdGFydCAoYnVpbGRPbmx5ID0gZmFsc2UpIHtcbiAgICB0aGlzLnhjb2RlYnVpbGQgPSBhd2FpdCB0aGlzLmNyZWF0ZVN1YlByb2Nlc3MoYnVpbGRPbmx5KTtcbiAgICAvLyBTdG9yZSB4Y29kZWJ1aWxkIG1lc3NhZ2VcbiAgICB0aGlzLnhjb2RlYnVpbGQuX3dkYV9lcnJvcl9tZXNzYWdlID0gJyc7XG5cbiAgICAvLyB3cmFwIHRoZSBzdGFydCBwcm9jZWR1cmUgaW4gYSBwcm9taXNlIHNvIHRoYXQgd2UgY2FuIGNhdGNoLCBhbmQgcmVwb3J0LFxuICAgIC8vIGFueSBzdGFydHVwIGVycm9ycyB0aGF0IGFyZSB0aHJvd24gYXMgZXZlbnRzXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMueGNvZGVidWlsZC5vbignZXhpdCcsIGFzeW5jIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgeGNvZGVMb2cuZXJyb3IoYHhjb2RlYnVpbGQgZXhpdGVkIHdpdGggY29kZSAnJHtjb2RlfScgYW5kIHNpZ25hbCAnJHtzaWduYWx9J2ApO1xuICAgICAgICAvLyBwcmludCBvdXQgdGhlIHhjb2RlYnVpbGQgZmlsZSBpZiB1c2VycyBoYXZlIGFza2VkIGZvciBpdFxuICAgICAgICBpZiAodGhpcy5zaG93WGNvZGVMb2cgJiYgdGhpcy54Y29kZWJ1aWxkLmxvZ0xvY2F0aW9uKSB7XG4gICAgICAgICAgeGNvZGVMb2cuZXJyb3IoYENvbnRlbnRzIG9mIHhjb2RlYnVpbGQgbG9nIGZpbGUgJyR7dGhpcy54Y29kZWJ1aWxkLmxvZ0xvY2F0aW9ufSc6YCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBkYXRhID0gYXdhaXQgZnMucmVhZEZpbGUodGhpcy54Y29kZWJ1aWxkLmxvZ0xvY2F0aW9uLCAndXRmOCcpO1xuICAgICAgICAgICAgZm9yIChsZXQgbGluZSBvZiBkYXRhLnNwbGl0KCdcXG4nKSkge1xuICAgICAgICAgICAgICB4Y29kZUxvZy5lcnJvcihsaW5lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHhjb2RlTG9nLmVycm9yKGBVbmFibGUgdG8gYWNjZXNzIHhjb2RlYnVpbGQgbG9nIGZpbGU6ICcke2Vyci5tZXNzYWdlfSdgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy54Y29kZWJ1aWxkLnByb2Nlc3NFeGl0ZWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy54Y29kZWJ1aWxkLl93ZGFfZXJyb3Jfb2NjdXJyZWQgfHwgKCFzaWduYWwgJiYgY29kZSAhPT0gMCkpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihgeGNvZGVidWlsZCBmYWlsZWQgd2l0aCBjb2RlICR7Y29kZX0ke0VPTH1gICtcbiAgICAgICAgICAgIGB4Y29kZWJ1aWxkIGVycm9yIG1lc3NhZ2U6JHtFT0x9JHt0aGlzLnhjb2RlYnVpbGQuX3dkYV9lcnJvcl9tZXNzYWdlfWApKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpbiB0aGUgY2FzZSBvZiBqdXN0IGJ1aWxkaW5nLCB0aGUgcHJvY2VzcyB3aWxsIGV4aXQgYW5kIHRoYXQgaXMgb3VyIGZpbmlzaFxuICAgICAgICBpZiAoYnVpbGRPbmx5KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiAoYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnN0YXJ0KHRydWUpO1xuICAgICAgICAgIGlmICghYnVpbGRPbmx5KSB7XG4gICAgICAgICAgICBsZXQgc3RhdHVzID0gYXdhaXQgdGhpcy53YWl0Rm9yU3RhcnQodGltZXIpO1xuICAgICAgICAgICAgcmVzb2x2ZShzdGF0dXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgbGV0IG1zZyA9IGBVbmFibGUgdG8gc3RhcnQgV2ViRHJpdmVyQWdlbnQ6ICR7ZXJyfWA7XG4gICAgICAgICAgdGhpcy5sb2cuZXJyb3IobXNnKTtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKG1zZykpO1xuICAgICAgICB9XG4gICAgICB9KSgpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgd2FpdEZvclN0YXJ0ICh0aW1lcikge1xuICAgIC8vIHRyeSB0byBjb25uZWN0IG9uY2UgZXZlcnkgMC41IHNlY29uZHMsIHVudGlsIGBsYXVuY2hUaW1lb3V0YCBpcyB1cFxuICAgIHRoaXMubG9nLmRlYnVnKGBXYWl0aW5nIHVwIHRvICR7dGhpcy5sYXVuY2hUaW1lb3V0fW1zIGZvciBXZWJEcml2ZXJBZ2VudCB0byBzdGFydGApO1xuICAgIGxldCBjdXJyZW50U3RhdHVzID0gbnVsbDtcbiAgICB0cnkge1xuICAgICAgbGV0IHJldHJpZXMgPSBwYXJzZUludCh0aGlzLmxhdW5jaFRpbWVvdXQgLyA1MDAsIDEwKTtcbiAgICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwocmV0cmllcywgMTAwMCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy54Y29kZWJ1aWxkLnByb2Nlc3NFeGl0ZWQpIHtcbiAgICAgICAgICAvLyB0aGVyZSBoYXMgYmVlbiBhbiBlcnJvciBlbHNld2hlcmUgYW5kIHdlIG5lZWQgdG8gc2hvcnQtY2lyY3VpdFxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm94eVRpbWVvdXQgPSB0aGlzLm5vU2Vzc2lvblByb3h5LnRpbWVvdXQ7XG4gICAgICAgIHRoaXMubm9TZXNzaW9uUHJveHkudGltZW91dCA9IDEwMDA7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY3VycmVudFN0YXR1cyA9IGF3YWl0IHRoaXMubm9TZXNzaW9uUHJveHkuY29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgICAgICBpZiAoY3VycmVudFN0YXR1cyAmJiBjdXJyZW50U3RhdHVzLmlvcyAmJiBjdXJyZW50U3RhdHVzLmlvcy5pcCkge1xuICAgICAgICAgICAgdGhpcy5hZ2VudFVybCA9IGN1cnJlbnRTdGF0dXMuaW9zLmlwO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgV2ViRHJpdmVyQWdlbnQgaW5mb3JtYXRpb246YCk7XG4gICAgICAgICAgdGhpcy5sb2cuZGVidWcoSlNPTi5zdHJpbmdpZnkoY3VycmVudFN0YXR1cywgbnVsbCwgMikpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBjb25uZWN0IHRvIHJ1bm5pbmcgV2ViRHJpdmVyQWdlbnQ6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhpcy5ub1Nlc3Npb25Qcm94eS50aW1lb3V0ID0gcHJveHlUaW1lb3V0O1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMueGNvZGVidWlsZC5wcm9jZXNzRXhpdGVkKSB7XG4gICAgICAgIC8vIHRoZXJlIGhhcyBiZWVuIGFuIGVycm9yIGVsc2V3aGVyZSBhbmQgd2UgbmVlZCB0byBzaG9ydC1jaXJjdWl0XG4gICAgICAgIHJldHVybiBjdXJyZW50U3RhdHVzO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgV2ViRHJpdmVyQWdlbnQgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgYWZ0ZXIgJHt0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzLnRvRml4ZWQoMCl9bXNgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIGlmIHdlIGhhdmUgbm90IGhhZCBhbnkgZXJyb3JzIGZyb20geGNvZGUgaXRzZWxmIChyZXBvcnRlZFxuICAgICAgLy8gZWxzZXdoZXJlKSwgd2UgY2FuIGxldCB0aGlzIGdvIHRocm91Z2ggYW5kIHRyeSB0byBjcmVhdGUgdGhlIHNlc3Npb25cbiAgICAgIHRoaXMubG9nLmRlYnVnKGVyci5tZXNzYWdlKTtcbiAgICAgIHRoaXMubG9nLndhcm4oYEdldHRpbmcgc3RhdHVzIG9mIFdlYkRyaXZlckFnZW50IG9uIGRldmljZSB0aW1lZCBvdXQuIENvbnRpbnVpbmdgKTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnRTdGF0dXM7XG4gIH1cblxuICBhc3luYyBxdWl0ICgpIHtcbiAgICBhd2FpdCBraWxsUHJvY2VzcygneGNvZGVidWlsZCcsIHRoaXMueGNvZGVidWlsZCk7XG4gIH1cbn1cblxuZXhwb3J0IHsgWGNvZGVCdWlsZCB9O1xuZXhwb3J0IGRlZmF1bHQgWGNvZGVCdWlsZDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFJQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQSxNQUFNQSxrQkFBa0IsR0FBRyxrQkFBM0I7QUFDQSxNQUFNQyxjQUFjLEdBQUcsQ0FBdkI7QUFDQSxNQUFNQyxpQkFBaUIsR0FBRyxzQkFBMUI7QUFDQSxNQUFNQyxjQUFjLEdBQUcsbUJBQXZCO0FBRUEsTUFBTUMsd0JBQXdCLEdBQUcsdUNBQWpDO0FBQ0EsTUFBTUMsd0JBQXdCLEdBQUcs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
|
|
396
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3hjb2RlYnVpbGQuanMiLCJuYW1lcyI6WyJERUZBVUxUX1NJR05JTkdfSUQiLCJQUkVCVUlMRF9ERUxBWSIsIlJVTk5FUl9TQ0hFTUVfSU9TIiwiTElCX1NDSEVNRV9JT1MiLCJFUlJPUl9XUklUSU5HX0FUVEFDSE1FTlQiLCJFUlJPUl9DT1BZSU5HX0FUVEFDSE1FTlQiLCJJR05PUkVEX0VSUk9SUyIsIlJVTk5FUl9TQ0hFTUVfVFYiLCJMSUJfU0NIRU1FX1RWIiwieGNvZGVMb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJYY29kZUJ1aWxkIiwiY29uc3RydWN0b3IiLCJ4Y29kZVZlcnNpb24iLCJkZXZpY2UiLCJhcmdzIiwibG9nIiwiZGVmYXVsdExvZ2dlciIsInJlYWxEZXZpY2UiLCJhZ2VudFBhdGgiLCJib290c3RyYXBQYXRoIiwicGxhdGZvcm1WZXJzaW9uIiwicGxhdGZvcm1OYW1lIiwiaW9zU2RrVmVyc2lvbiIsInNob3dYY29kZUxvZyIsInhjb2RlQ29uZmlnRmlsZSIsInhjb2RlT3JnSWQiLCJ4Y29kZVNpZ25pbmdJZCIsImtleWNoYWluUGF0aCIsImtleWNoYWluUGFzc3dvcmQiLCJwcmVidWlsZFdEQSIsInVzZVByZWJ1aWx0V0RBIiwidXNlU2ltcGxlQnVpbGRUZXN0IiwidXNlWGN0ZXN0cnVuRmlsZSIsImxhdW5jaFRpbWVvdXQiLCJ3ZGFSZW1vdGVQb3J0IiwidXBkYXRlZFdEQUJ1bmRsZUlkIiwiZGVyaXZlZERhdGFQYXRoIiwibWpwZWdTZXJ2ZXJQb3J0IiwicHJlYnVpbGREZWxheSIsIl8iLCJpc051bWJlciIsImFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uIiwicmVzdWx0QnVuZGxlUGF0aCIsInJlc3VsdEJ1bmRsZVZlcnNpb24iLCJpbml0Iiwibm9TZXNzaW9uUHJveHkiLCJkZXZpdmVJbmZvIiwiaXNSZWFsRGV2aWNlIiwidWRpZCIsInhjdGVzdHJ1bkZpbGVQYXRoIiwic2V0WGN0ZXN0cnVuRmlsZSIsInJlc2V0UHJvamVjdEZpbGUiLCJ1cGRhdGVQcm9qZWN0RmlsZSIsInJldHJpZXZlRGVyaXZlZERhdGFQYXRoIiwiX2Rlcml2ZWREYXRhUGF0aFByb21pc2UiLCJzdGRvdXQiLCJleGVjIiwiZXJyIiwid2FybiIsIm1lc3NhZ2UiLCJwYXR0ZXJuIiwibWF0Y2giLCJ0cnVuY2F0ZSIsImxlbmd0aCIsImRlYnVnIiwicGF0aCIsImRpcm5hbWUiLCJub3JtYWxpemUiLCJyZXNldCIsInByZWJ1aWxkIiwic3RhcnQiLCJ4Y29kZWJ1aWxkIiwiQiIsImRlbGF5IiwiY2xlYW5Qcm9qZWN0IiwidG1wSXNUdk9TIiwiaXNUdk9TIiwibGliU2NoZW1lIiwicnVubmVyU2NoZW1lIiwic2NoZW1lIiwiZ2V0Q29tbWFuZCIsImJ1aWxkT25seSIsImNtZCIsImJ1aWxkQ21kIiwidGVzdENtZCIsInB1c2giLCJ2ZXJzaW9uTWF0Y2giLCJSZWdFeHAiLCJwcm9jZXNzIiwiZW52IiwiQVBQSVVNX1hDVUlURVNUX1RSRUFUX1dBUk5JTkdTX0FTX0VSUk9SUyIsImNyZWF0ZVN1YlByb2Nlc3MiLCJzZXRSZWFsRGV2aWNlU2VjdXJpdHkiLCJnZW5lcmF0ZVhjb2RlQ29uZmlnRmlsZSIsImpvaW4iLCJPYmplY3QiLCJhc3NpZ24iLCJVU0VfUE9SVCIsIldEQV9QUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSIiwiV0RBX1JVTk5FUl9CVU5ETEVfSUQiLCJNSlBFR19TRVJWRVJfUE9SVCIsInVwZ3JhZGVUaW1lc3RhbXAiLCJnZXRXREFVcGdyYWRlVGltZXN0YW1wIiwiVVBHUkFERV9USU1FU1RBTVAiLCJTdWJQcm9jZXNzIiwiY3dkIiwiZGV0YWNoZWQiLCJzdGRpbyIsImxvZ1hjb2RlT3V0cHV0IiwibG9nTXNnIiwiaXNCb29sZWFuIiwib24iLCJzdGRlcnIiLCJvdXQiLCJpbmNsdWRlcyIsImxvZ0xvY2F0aW9uIiwiZmlyc3QiLCJyZW1vdmUiLCJ0cmltIiwic3BsaXQiLCJ2Iiwic3RhcnRzV2l0aCIsInNlcCIsImlnbm9yZUVycm9yIiwic29tZSIsIngiLCJfd2RhX2Vycm9yX29jY3VycmVkIiwibGluZSIsIkVPTCIsImVycm9yIiwiX3dkYV9lcnJvcl9tZXNzYWdlIiwicmVzb2x2ZSIsInJlamVjdCIsImNvZGUiLCJzaWduYWwiLCJkYXRhIiwiZnMiLCJyZWFkRmlsZSIsInByb2Nlc3NFeGl0ZWQiLCJFcnJvciIsInRpbWVyIiwidGltaW5nIiwiVGltZXIiLCJzdGF0dXMiLCJ3YWl0Rm9yU3RhcnQiLCJtc2ciLCJjdXJyZW50U3RhdHVzIiwicmV0cmllcyIsInBhcnNlSW50IiwicmV0cnlJbnRlcnZhbCIsInByb3h5VGltZW91dCIsInRpbWVvdXQiLCJjb21tYW5kIiwiaW9zIiwiaXAiLCJhZ2VudFVybCIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXREdXJhdGlvbiIsImFzTWlsbGlTZWNvbmRzIiwidG9GaXhlZCIsInF1aXQiLCJraWxsUHJvY2VzcyJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi94Y29kZWJ1aWxkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJldHJ5SW50ZXJ2YWwgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBTdWJQcm9jZXNzLCBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCB7IGZzLCBsb2dnZXIsIHRpbWluZyB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBkZWZhdWx0TG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7XG4gIHNldFJlYWxEZXZpY2VTZWN1cml0eSwgZ2VuZXJhdGVYY29kZUNvbmZpZ0ZpbGUsIHNldFhjdGVzdHJ1bkZpbGUsXG4gIHVwZGF0ZVByb2plY3RGaWxlLCByZXNldFByb2plY3RGaWxlLCBraWxsUHJvY2VzcyxcbiAgZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCwgaXNUdk9TIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBFT0wgfSBmcm9tICdvcyc7XG5pbXBvcnQgeyBXREFfUlVOTkVSX0JVTkRMRV9JRCB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuXG5jb25zdCBERUZBVUxUX1NJR05JTkdfSUQgPSAnaVBob25lIERldmVsb3Blcic7XG5jb25zdCBQUkVCVUlMRF9ERUxBWSA9IDA7XG5jb25zdCBSVU5ORVJfU0NIRU1FX0lPUyA9ICdXZWJEcml2ZXJBZ2VudFJ1bm5lcic7XG5jb25zdCBMSUJfU0NIRU1FX0lPUyA9ICdXZWJEcml2ZXJBZ2VudExpYic7XG5cbmNvbnN0IEVSUk9SX1dSSVRJTkdfQVRUQUNITUVOVCA9ICdFcnJvciB3cml0aW5nIGF0dGFjaG1lbnQgZGF0YSB0byBmaWxlJztcbmNvbnN0IEVSUk9SX0NPUFlJTkdfQVRUQUNITUVOVCA9ICdFcnJvciBjb3B5aW5nIHRlc3RpbmcgYXR0YWNobWVudCc7XG5jb25zdCBJR05PUkVEX0VSUk9SUyA9IFtcbiAgRVJST1JfV1JJVElOR19BVFRBQ0hNRU5ULFxuICBFUlJPUl9DT1BZSU5HX0FUVEFDSE1FTlQsXG4gICdGYWlsZWQgdG8gcmVtb3ZlIHNjcmVlbnNob3QgYXQgcGF0aCcsXG5dO1xuXG5jb25zdCBSVU5ORVJfU0NIRU1FX1RWID0gJ1dlYkRyaXZlckFnZW50UnVubmVyX3R2T1MnO1xuY29uc3QgTElCX1NDSEVNRV9UViA9ICdXZWJEcml2ZXJBZ2VudExpYl90dk9TJztcblxuY29uc3QgeGNvZGVMb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdYY29kZScpO1xuXG5cbmNsYXNzIFhjb2RlQnVpbGQge1xuICBjb25zdHJ1Y3RvciAoeGNvZGVWZXJzaW9uLCBkZXZpY2UsIGFyZ3MgPSB7fSwgbG9nID0gbnVsbCkge1xuICAgIHRoaXMueGNvZGVWZXJzaW9uID0geGNvZGVWZXJzaW9uO1xuXG4gICAgdGhpcy5kZXZpY2UgPSBkZXZpY2U7XG4gICAgdGhpcy5sb2cgPSBsb2cgPz8gZGVmYXVsdExvZ2dlcjtcblxuICAgIHRoaXMucmVhbERldmljZSA9IGFyZ3MucmVhbERldmljZTtcblxuICAgIHRoaXMuYWdlbnRQYXRoID0gYXJncy5hZ2VudFBhdGg7XG4gICAgdGhpcy5ib290c3RyYXBQYXRoID0gYXJncy5ib290c3RyYXBQYXRoO1xuXG4gICAgdGhpcy5wbGF0Zm9ybVZlcnNpb24gPSBhcmdzLnBsYXRmb3JtVmVyc2lvbjtcbiAgICB0aGlzLnBsYXRmb3JtTmFtZSA9IGFyZ3MucGxhdGZvcm1OYW1lO1xuICAgIHRoaXMuaW9zU2RrVmVyc2lvbiA9IGFyZ3MuaW9zU2RrVmVyc2lvbjtcblxuICAgIHRoaXMuc2hvd1hjb2RlTG9nID0gYXJncy5zaG93WGNvZGVMb2c7XG5cbiAgICB0aGlzLnhjb2RlQ29uZmlnRmlsZSA9IGFyZ3MueGNvZGVDb25maWdGaWxlO1xuICAgIHRoaXMueGNvZGVPcmdJZCA9IGFyZ3MueGNvZGVPcmdJZDtcbiAgICB0aGlzLnhjb2RlU2lnbmluZ0lkID0gYXJncy54Y29kZVNpZ25pbmdJZCB8fCBERUZBVUxUX1NJR05JTkdfSUQ7XG4gICAgdGhpcy5rZXljaGFpblBhdGggPSBhcmdzLmtleWNoYWluUGF0aDtcbiAgICB0aGlzLmtleWNoYWluUGFzc3dvcmQgPSBhcmdzLmtleWNoYWluUGFzc3dvcmQ7XG5cbiAgICB0aGlzLnByZWJ1aWxkV0RBID0gYXJncy5wcmVidWlsZFdEQTtcbiAgICB0aGlzLnVzZVByZWJ1aWx0V0RBID0gYXJncy51c2VQcmVidWlsdFdEQTtcbiAgICB0aGlzLnVzZVNpbXBsZUJ1aWxkVGVzdCA9IGFyZ3MudXNlU2ltcGxlQnVpbGRUZXN0O1xuXG4gICAgdGhpcy51c2VYY3Rlc3RydW5GaWxlID0gYXJncy51c2VYY3Rlc3RydW5GaWxlO1xuXG4gICAgdGhpcy5sYXVuY2hUaW1lb3V0ID0gYXJncy5sYXVuY2hUaW1lb3V0O1xuXG4gICAgdGhpcy53ZGFSZW1vdGVQb3J0ID0gYXJncy53ZGFSZW1vdGVQb3J0O1xuXG4gICAgdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQgPSBhcmdzLnVwZGF0ZWRXREFCdW5kbGVJZDtcbiAgICB0aGlzLmRlcml2ZWREYXRhUGF0aCA9IGFyZ3MuZGVyaXZlZERhdGFQYXRoO1xuXG4gICAgdGhpcy5tanBlZ1NlcnZlclBvcnQgPSBhcmdzLm1qcGVnU2VydmVyUG9ydDtcblxuICAgIHRoaXMucHJlYnVpbGREZWxheSA9IF8uaXNOdW1iZXIoYXJncy5wcmVidWlsZERlbGF5KSA/IGFyZ3MucHJlYnVpbGREZWxheSA6IFBSRUJVSUxEX0RFTEFZO1xuXG4gICAgdGhpcy5hbGxvd1Byb3Zpc2lvbmluZ0RldmljZVJlZ2lzdHJhdGlvbiA9IGFyZ3MuYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb247XG5cbiAgICB0aGlzLnJlc3VsdEJ1bmRsZVBhdGggPSBhcmdzLnJlc3VsdEJ1bmRsZVBhdGg7XG4gICAgdGhpcy5yZXN1bHRCdW5kbGVWZXJzaW9uID0gYXJncy5yZXN1bHRCdW5kbGVWZXJzaW9uO1xuICB9XG5cbiAgYXN5bmMgaW5pdCAobm9TZXNzaW9uUHJveHkpIHtcbiAgICB0aGlzLm5vU2Vzc2lvblByb3h5ID0gbm9TZXNzaW9uUHJveHk7XG5cbiAgICBpZiAodGhpcy51c2VYY3Rlc3RydW5GaWxlKSB7XG4gICAgICBjb25zdCBkZXZpdmVJbmZvID0ge1xuICAgICAgICBpc1JlYWxEZXZpY2U6IHRoaXMucmVhbERldmljZSxcbiAgICAgICAgdWRpZDogdGhpcy5kZXZpY2UudWRpZCxcbiAgICAgICAgcGxhdGZvcm1WZXJzaW9uOiB0aGlzLnBsYXRmb3JtVmVyc2lvbixcbiAgICAgICAgcGxhdGZvcm1OYW1lOiB0aGlzLnBsYXRmb3JtTmFtZVxuICAgICAgfTtcbiAgICAgIHRoaXMueGN0ZXN0cnVuRmlsZVBhdGggPSBhd2FpdCBzZXRYY3Rlc3RydW5GaWxlKGRldml2ZUluZm8sIHRoaXMuaW9zU2RrVmVyc2lvbiwgdGhpcy5ib290c3RyYXBQYXRoLCB0aGlzLndkYVJlbW90ZVBvcnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGlmIG5lY2Vzc2FyeSwgdXBkYXRlIHRoZSBidW5kbGVJZCB0byB1c2VyJ3Mgc3BlY2lmaWNhdGlvblxuICAgIGlmICh0aGlzLnJlYWxEZXZpY2UpIHtcbiAgICAgIC8vIEluIGNhc2UgdGhlIHByb2plY3Qgc3RpbGwgaGFzIHRoZSB1c2VyIHNwZWNpZmljIGJ1bmRsZSBJRCwgcmVzZXQgdGhlIHByb2plY3QgZmlsZSBmaXJzdC5cbiAgICAgIC8vIC0gV2UgZG8gdGhpcyByZXNldCBldmVuIGlmIHVwZGF0ZWRXREFCdW5kbGVJZCBpcyBub3Qgc3BlY2lmaWVkLFxuICAgICAgLy8gICBzaW5jZSB0aGUgcHJldmlvdXMgdXBkYXRlZFdEQUJ1bmRsZUlkIHRlc3QgaGFzIGdlbmVyYXRlZCB0aGUgdXNlciBzcGVjaWZpYyBidW5kbGUgSUQgcHJvamVjdCBmaWxlLlxuICAgICAgLy8gLSBXZSBkb24ndCBjYWxsIHJlc2V0UHJvamVjdEZpbGUgZm9yIHNpbXVsYXRvcixcbiAgICAgIC8vICAgc2luY2Ugc2ltdWxhdG9yIHRlc3QgcnVuIHdpbGwgd29yayB3aXRoIGFueSB1c2VyIHNwZWNpZmljIGJ1bmRsZSBJRC5cbiAgICAgIGF3YWl0IHJlc2V0UHJvamVjdEZpbGUodGhpcy5hZ2VudFBhdGgpO1xuICAgICAgaWYgKHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkKSB7XG4gICAgICAgIGF3YWl0IHVwZGF0ZVByb2plY3RGaWxlKHRoaXMuYWdlbnRQYXRoLCB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmV0cmlldmVEZXJpdmVkRGF0YVBhdGggKCkge1xuICAgIGlmICh0aGlzLmRlcml2ZWREYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVyaXZlZERhdGFQYXRoO1xuICAgIH1cblxuICAgIC8vIGF2b2lkIHJhY2UgY29uZGl0aW9uc1xuICAgIGlmICh0aGlzLl9kZXJpdmVkRGF0YVBhdGhQcm9taXNlKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fZGVyaXZlZERhdGFQYXRoUHJvbWlzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9kZXJpdmVkRGF0YVBhdGhQcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgIGxldCBzdGRvdXQ7XG4gICAgICB0cnkge1xuICAgICAgICAoe3N0ZG91dH0gPSBhd2FpdCBleGVjKCd4Y29kZWJ1aWxkJywgWyctcHJvamVjdCcsIHRoaXMuYWdlbnRQYXRoLCAnLXNob3dCdWlsZFNldHRpbmdzJ10pKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBDYW5ub3QgcmV0cmlldmUgV0RBIGJ1aWxkIHNldHRpbmdzLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXR0ZXJuID0gL15cXHMqQlVJTERfRElSXFxzKz1cXHMrKFxcLy4qKS9tO1xuICAgICAgY29uc3QgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWMoc3Rkb3V0KTtcbiAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgQ2Fubm90IHBhcnNlIFdEQSBidWlsZCBkaXIgZnJvbSAke18udHJ1bmNhdGUoc3Rkb3V0LCB7bGVuZ3RoOiAzMDB9KX1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2cuZGVidWcoYFBhcnNlZCBCVUlMRF9ESVIgY29uZmlndXJhdGlvbiB2YWx1ZTogJyR7bWF0Y2hbMV19J2ApO1xuICAgICAgLy8gRGVyaXZlZCBkYXRhIHJvb3QgaXMgdHdvIGxldmVscyBoaWdoZXIgb3ZlciB0aGUgYnVpbGQgZGlyXG4gICAgICB0aGlzLmRlcml2ZWREYXRhUGF0aCA9IHBhdGguZGlybmFtZShwYXRoLmRpcm5hbWUocGF0aC5ub3JtYWxpemUobWF0Y2hbMV0pKSk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgR290IGRlcml2ZWQgZGF0YSByb290OiAnJHt0aGlzLmRlcml2ZWREYXRhUGF0aH0nYCk7XG4gICAgICByZXR1cm4gdGhpcy5kZXJpdmVkRGF0YVBhdGg7XG4gICAgfSkoKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fZGVyaXZlZERhdGFQYXRoUHJvbWlzZTtcbiAgfVxuXG4gIGFzeW5jIHJlc2V0ICgpIHtcbiAgICAvLyBpZiBuZWNlc3NhcnksIHJlc2V0IHRoZSBidW5kbGVJZCB0byBvcmlnaW5hbCB2YWx1ZVxuICAgIGlmICh0aGlzLnJlYWxEZXZpY2UgJiYgdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQpIHtcbiAgICAgIGF3YWl0IHJlc2V0UHJvamVjdEZpbGUodGhpcy5hZ2VudFBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHByZWJ1aWxkICgpIHtcbiAgICAvLyBmaXJzdCBkbyBhIGJ1aWxkIHBoYXNlXG4gICAgdGhpcy5sb2cuZGVidWcoJ1ByZS1idWlsZGluZyBXREEgYmVmb3JlIGxhdW5jaGluZyB0ZXN0Jyk7XG4gICAgdGhpcy51c2VQcmVidWlsdFdEQSA9IHRydWU7XG4gICAgYXdhaXQgdGhpcy5zdGFydCh0cnVlKTtcblxuICAgIHRoaXMueGNvZGVidWlsZCA9IG51bGw7XG5cbiAgICAvLyBwYXVzZSBhIG1vbWVudFxuICAgIGF3YWl0IEIuZGVsYXkodGhpcy5wcmVidWlsZERlbGF5KTtcbiAgfVxuXG4gIGFzeW5jIGNsZWFuUHJvamVjdCAoKSB7XG4gICAgY29uc3QgdG1wSXNUdk9TID0gaXNUdk9TKHRoaXMucGxhdGZvcm1OYW1lKTtcbiAgICBjb25zdCBsaWJTY2hlbWUgPSB0bXBJc1R2T1MgPyBMSUJfU0NIRU1FX1RWIDogTElCX1NDSEVNRV9JT1M7XG4gICAgY29uc3QgcnVubmVyU2NoZW1lID0gdG1wSXNUdk9TID8gUlVOTkVSX1NDSEVNRV9UViA6IFJVTk5FUl9TQ0hFTUVfSU9TO1xuXG4gICAgZm9yIChjb25zdCBzY2hlbWUgb2YgW2xpYlNjaGVtZSwgcnVubmVyU2NoZW1lXSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYENsZWFuaW5nIHRoZSBwcm9qZWN0IHNjaGVtZSAnJHtzY2hlbWV9JyB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIGxlZnRvdmVycyBmcm9tIHByZXZpb3VzIGluc3RhbGxzYCk7XG4gICAgICBhd2FpdCBleGVjKCd4Y29kZWJ1aWxkJywgW1xuICAgICAgICAnY2xlYW4nLFxuICAgICAgICAnLXByb2plY3QnLCB0aGlzLmFnZW50UGF0aCxcbiAgICAgICAgJy1zY2hlbWUnLCBzY2hlbWUsXG4gICAgICBdKTtcbiAgICB9XG4gIH1cblxuICBnZXRDb21tYW5kIChidWlsZE9ubHkgPSBmYWxzZSkge1xuICAgIGxldCBjbWQgPSAneGNvZGVidWlsZCc7XG4gICAgbGV0IGFyZ3M7XG5cbiAgICAvLyBmaWd1cmUgb3V0IHRoZSB0YXJnZXRzIGZvciB4Y29kZWJ1aWxkXG4gICAgY29uc3QgW2J1aWxkQ21kLCB0ZXN0Q21kXSA9IHRoaXMudXNlU2ltcGxlQnVpbGRUZXN0ID8gWydidWlsZCcsICd0ZXN0J10gOiBbJ2J1aWxkLWZvci10ZXN0aW5nJywgJ3Rlc3Qtd2l0aG91dC1idWlsZGluZyddO1xuICAgIGlmIChidWlsZE9ubHkpIHtcbiAgICAgIGFyZ3MgPSBbYnVpbGRDbWRdO1xuICAgIH0gZWxzZSBpZiAodGhpcy51c2VQcmVidWlsdFdEQSB8fCB0aGlzLnVzZVhjdGVzdHJ1bkZpbGUpIHtcbiAgICAgIGFyZ3MgPSBbdGVzdENtZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGFyZ3MgPSBbYnVpbGRDbWQsIHRlc3RDbWRdO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uKSB7XG4gICAgICAvLyBUbyAtYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb24gZmxhZyB0YWtlcyBlZmZlY3QsIC1hbGxvd1Byb3Zpc2lvbmluZ1VwZGF0ZXMgbmVlZHMgdG8gYmUgcGFzc2VkIGFzIHdlbGwuXG4gICAgICBhcmdzLnB1c2goJy1hbGxvd1Byb3Zpc2lvbmluZ1VwZGF0ZXMnLCAnLWFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVzdWx0QnVuZGxlUGF0aCkge1xuICAgICAgYXJncy5wdXNoKCctcmVzdWx0QnVuZGxlUGF0aCcsIHRoaXMucmVzdWx0QnVuZGxlUGF0aCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVzdWx0QnVuZGxlVmVyc2lvbikge1xuICAgICAgYXJncy5wdXNoKCctcmVzdWx0QnVuZGxlVmVyc2lvbicsIHRoaXMucmVzdWx0QnVuZGxlVmVyc2lvbik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudXNlWGN0ZXN0cnVuRmlsZSkge1xuICAgICAgYXJncy5wdXNoKCcteGN0ZXN0cnVuJywgdGhpcy54Y3Rlc3RydW5GaWxlUGF0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJ1bm5lclNjaGVtZSA9IGlzVHZPUyh0aGlzLnBsYXRmb3JtTmFtZSkgPyBSVU5ORVJfU0NIRU1FX1RWIDogUlVOTkVSX1NDSEVNRV9JT1M7XG4gICAgICBhcmdzLnB1c2goJy1wcm9qZWN0JywgdGhpcy5hZ2VudFBhdGgsICctc2NoZW1lJywgcnVubmVyU2NoZW1lKTtcbiAgICAgIGlmICh0aGlzLmRlcml2ZWREYXRhUGF0aCkge1xuICAgICAgICBhcmdzLnB1c2goJy1kZXJpdmVkRGF0YVBhdGgnLCB0aGlzLmRlcml2ZWREYXRhUGF0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIGFyZ3MucHVzaCgnLWRlc3RpbmF0aW9uJywgYGlkPSR7dGhpcy5kZXZpY2UudWRpZH1gKTtcblxuICAgIGNvbnN0IHZlcnNpb25NYXRjaCA9IG5ldyBSZWdFeHAoL14oXFxkKylcXC4oXFxkKykvKS5leGVjKHRoaXMucGxhdGZvcm1WZXJzaW9uKTtcbiAgICBpZiAodmVyc2lvbk1hdGNoKSB7XG4gICAgICBhcmdzLnB1c2goYElQSE9ORU9TX0RFUExPWU1FTlRfVEFSR0VUPSR7dmVyc2lvbk1hdGNoWzFdfS4ke3ZlcnNpb25NYXRjaFsyXX1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2cud2FybihgQ2Fubm90IHBhcnNlIG1ham9yIGFuZCBtaW5vciB2ZXJzaW9uIG51bWJlcnMgZnJvbSBwbGF0Zm9ybVZlcnNpb24gXCIke3RoaXMucGxhdGZvcm1WZXJzaW9ufVwiLiBgICtcbiAgICAgICAgJ1dpbGwgYnVpbGQgZm9yIHRoZSBkZWZhdWx0IHBsYXRmb3JtIGluc3RlYWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZWFsRGV2aWNlICYmIHRoaXMueGNvZGVDb25maWdGaWxlKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgVXNpbmcgWGNvZGUgY29uZmlndXJhdGlvbiBmaWxlOiAnJHt0aGlzLnhjb2RlQ29uZmlnRmlsZX0nYCk7XG4gICAgICBhcmdzLnB1c2goJy14Y2NvbmZpZycsIHRoaXMueGNvZGVDb25maWdGaWxlKTtcbiAgICB9XG5cbiAgICBpZiAoIXByb2Nlc3MuZW52LkFQUElVTV9YQ1VJVEVTVF9UUkVBVF9XQVJOSU5HU19BU19FUlJPUlMpIHtcbiAgICAgIC8vIFRoaXMgc29tZXRpbWVzIGhlbHBzIHRvIHN1cnZpdmUgWGNvZGUgdXBkYXRlc1xuICAgICAgYXJncy5wdXNoKCdHQ0NfVFJFQVRfV0FSTklOR1NfQVNfRVJST1JTPTAnKTtcbiAgICB9XG5cbiAgICAvLyBCZWxvdyBvcHRpb24gc2xpZ2h0bHkgcmVkdWNlcyBidWlsZCB0aW1lIGluIGRlYnVnIGJ1aWxkXG4gICAgLy8gd2l0aCBwcmV2ZW50aW5nIHRvIGdlbmVyYXRlIGAvSW5kZXgvRGF0YVN0b3JlYCB3aGljaCBpcyB1c2VkIGJ5IGRldmVsb3BtZW50XG4gICAgYXJncy5wdXNoKCdDT01QSUxFUl9JTkRFWF9TVE9SRV9FTkFCTEU9Tk8nKTtcblxuICAgIHJldHVybiB7Y21kLCBhcmdzfTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVN1YlByb2Nlc3MgKGJ1aWxkT25seSA9IGZhbHNlKSB7XG4gICAgaWYgKCF0aGlzLnVzZVhjdGVzdHJ1bkZpbGUgJiYgdGhpcy5yZWFsRGV2aWNlKSB7XG4gICAgICBpZiAodGhpcy5rZXljaGFpblBhdGggJiYgdGhpcy5rZXljaGFpblBhc3N3b3JkKSB7XG4gICAgICAgIGF3YWl0IHNldFJlYWxEZXZpY2VTZWN1cml0eSh0aGlzLmtleWNoYWluUGF0aCwgdGhpcy5rZXljaGFpblBhc3N3b3JkKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnhjb2RlT3JnSWQgJiYgdGhpcy54Y29kZVNpZ25pbmdJZCAmJiAhdGhpcy54Y29kZUNvbmZpZ0ZpbGUpIHtcbiAgICAgICAgdGhpcy54Y29kZUNvbmZpZ0ZpbGUgPSBhd2FpdCBnZW5lcmF0ZVhjb2RlQ29uZmlnRmlsZSh0aGlzLnhjb2RlT3JnSWQsIHRoaXMueGNvZGVTaWduaW5nSWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHtjbWQsIGFyZ3N9ID0gdGhpcy5nZXRDb21tYW5kKGJ1aWxkT25seSk7XG4gICAgdGhpcy5sb2cuZGVidWcoYEJlZ2lubmluZyAke2J1aWxkT25seSA/ICdidWlsZCcgOiAndGVzdCd9IHdpdGggY29tbWFuZCAnJHtjbWR9ICR7YXJncy5qb2luKCcgJyl9JyBgICtcbiAgICAgIGBpbiBkaXJlY3RvcnkgJyR7dGhpcy5ib290c3RyYXBQYXRofSdgKTtcbiAgICBjb25zdCBlbnYgPSBPYmplY3QuYXNzaWduKHt9LCBwcm9jZXNzLmVudiwge1xuICAgICAgVVNFX1BPUlQ6IHRoaXMud2RhUmVtb3RlUG9ydCxcbiAgICAgIFdEQV9QUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSOiB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCB8fCBXREFfUlVOTkVSX0JVTkRMRV9JRCxcbiAgICB9KTtcbiAgICBpZiAodGhpcy5tanBlZ1NlcnZlclBvcnQpIHtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vV2ViRHJpdmVyQWdlbnQvcHVsbC8xMDVcbiAgICAgIGVudi5NSlBFR19TRVJWRVJfUE9SVCA9IHRoaXMubWpwZWdTZXJ2ZXJQb3J0O1xuICAgIH1cbiAgICBjb25zdCB1cGdyYWRlVGltZXN0YW1wID0gYXdhaXQgZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCh0aGlzLmJvb3RzdHJhcFBhdGgpO1xuICAgIGlmICh1cGdyYWRlVGltZXN0YW1wKSB7XG4gICAgICBlbnYuVVBHUkFERV9USU1FU1RBTVAgPSB1cGdyYWRlVGltZXN0YW1wO1xuICAgIH1cbiAgICBjb25zdCB4Y29kZWJ1aWxkID0gbmV3IFN1YlByb2Nlc3MoY21kLCBhcmdzLCB7XG4gICAgICBjd2Q6IHRoaXMuYm9vdHN0cmFwUGF0aCxcbiAgICAgIGVudixcbiAgICAgIGRldGFjaGVkOiB0cnVlLFxuICAgICAgc3RkaW86IFsnaWdub3JlJywgJ3BpcGUnLCAncGlwZSddLFxuICAgIH0pO1xuXG4gICAgbGV0IGxvZ1hjb2RlT3V0cHV0ID0gISF0aGlzLnNob3dYY29kZUxvZztcbiAgICBjb25zdCBsb2dNc2cgPSBfLmlzQm9vbGVhbih0aGlzLnNob3dYY29kZUxvZylcbiAgICAgID8gYE91dHB1dCBmcm9tIHhjb2RlYnVpbGQgJHt0aGlzLnNob3dYY29kZUxvZyA/ICd3aWxsJyA6ICd3aWxsIG5vdCd9IGJlIGxvZ2dlZGBcbiAgICAgIDogJ091dHB1dCBmcm9tIHhjb2RlYnVpbGQgd2lsbCBvbmx5IGJlIGxvZ2dlZCBpZiBhbnkgZXJyb3JzIGFyZSBwcmVzZW50IHRoZXJlJztcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgJHtsb2dNc2d9LiBUbyBjaGFuZ2UgdGhpcywgdXNlICdzaG93WGNvZGVMb2cnIGRlc2lyZWQgY2FwYWJpbGl0eWApO1xuICAgIHhjb2RlYnVpbGQub24oJ291dHB1dCcsIChzdGRvdXQsIHN0ZGVycikgPT4ge1xuICAgICAgbGV0IG91dCA9IHN0ZG91dCB8fCBzdGRlcnI7XG4gICAgICAvLyB3ZSB3YW50IHRvIHB1bGwgb3V0IHRoZSBsb2cgZmlsZSB0aGF0IGlzIGNyZWF0ZWQsIGFuZCBoaWdobGlnaHQgaXRcbiAgICAgIC8vIGZvciBkaWFnbm9zdGljIHB1cnBvc2VzXG4gICAgICBpZiAob3V0LmluY2x1ZGVzKCdXcml0aW5nIGRpYWdub3N0aWMgbG9nIGZvciB0ZXN0IHNlc3Npb24gdG8nKSkge1xuICAgICAgICAvLyBwdWxsIG91dCB0aGUgZmlyc3QgbGluZSB0aGF0IGJlZ2lucyB3aXRoIHRoZSBwYXRoIHNlcGFyYXRvclxuICAgICAgICAvLyB3aGljaCAqc2hvdWxkKiBiZSB0aGUgbGluZSBpbmRpY2F0aW5nIHRoZSBsb2cgZmlsZSBnZW5lcmF0ZWRcbiAgICAgICAgeGNvZGVidWlsZC5sb2dMb2NhdGlvbiA9IF8uZmlyc3QoXy5yZW1vdmUob3V0LnRyaW0oKS5zcGxpdCgnXFxuJyksICh2KSA9PiB2LnN0YXJ0c1dpdGgocGF0aC5zZXApKSk7XG4gICAgICAgIHhjb2RlTG9nLmRlYnVnKGBMb2cgZmlsZSBmb3IgeGNvZGVidWlsZCB0ZXN0OiAke3hjb2RlYnVpbGQubG9nTG9jYXRpb259YCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIHdlIGhhdmUgYW4gZXJyb3Igd2Ugd2FudCB0byBvdXRwdXQgdGhlIGxvZ3NcbiAgICAgIC8vIG90aGVyd2lzZSB0aGUgZmFpbHVyZSBpcyBpbnNjcnV0aWJsZVxuICAgICAgLy8gYnV0IGRvIG5vdCBsb2cgcGVybWlzc2lvbiBlcnJvcnMgZnJvbSB0cnlpbmcgdG8gd3JpdGUgdG8gYXR0YWNobWVudHMgZm9sZGVyXG4gICAgICBjb25zdCBpZ25vcmVFcnJvciA9IElHTk9SRURfRVJST1JTLnNvbWUoKHgpID0+IG91dC5pbmNsdWRlcyh4KSk7XG4gICAgICBpZiAodGhpcy5zaG93WGNvZGVMb2cgIT09IGZhbHNlICYmIG91dC5pbmNsdWRlcygnRXJyb3IgRG9tYWluPScpICYmICFpZ25vcmVFcnJvcikge1xuICAgICAgICBsb2dYY29kZU91dHB1dCA9IHRydWU7XG5cbiAgICAgICAgLy8gdGVycmlibGUgaGFjayB0byBoYW5kbGUgY2FzZSB3aGVyZSB4Y29kZSByZXR1cm4gMCBidXQgaXMgZmFpbGluZ1xuICAgICAgICB4Y29kZWJ1aWxkLl93ZGFfZXJyb3Jfb2NjdXJyZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBkbyBub3QgbG9nIHBlcm1pc3Npb24gZXJyb3JzIGZyb20gdHJ5aW5nIHRvIHdyaXRlIHRvIGF0dGFjaG1lbnRzIGZvbGRlclxuICAgICAgaWYgKGxvZ1hjb2RlT3V0cHV0ICYmICFpZ25vcmVFcnJvcikge1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2Ygb3V0LnNwbGl0KEVPTCkpIHtcbiAgICAgICAgICB4Y29kZUxvZy5lcnJvcihsaW5lKTtcbiAgICAgICAgICBpZiAobGluZSkge1xuICAgICAgICAgICAgeGNvZGVidWlsZC5fd2RhX2Vycm9yX21lc3NhZ2UgKz0gYCR7RU9MfSR7bGluZX1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHhjb2RlYnVpbGQ7XG4gIH1cblxuICBhc3luYyBzdGFydCAoYnVpbGRPbmx5ID0gZmFsc2UpIHtcbiAgICB0aGlzLnhjb2RlYnVpbGQgPSBhd2FpdCB0aGlzLmNyZWF0ZVN1YlByb2Nlc3MoYnVpbGRPbmx5KTtcbiAgICAvLyBTdG9yZSB4Y29kZWJ1aWxkIG1lc3NhZ2VcbiAgICB0aGlzLnhjb2RlYnVpbGQuX3dkYV9lcnJvcl9tZXNzYWdlID0gJyc7XG5cbiAgICAvLyB3cmFwIHRoZSBzdGFydCBwcm9jZWR1cmUgaW4gYSBwcm9taXNlIHNvIHRoYXQgd2UgY2FuIGNhdGNoLCBhbmQgcmVwb3J0LFxuICAgIC8vIGFueSBzdGFydHVwIGVycm9ycyB0aGF0IGFyZSB0aHJvd24gYXMgZXZlbnRzXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMueGNvZGVidWlsZC5vbignZXhpdCcsIGFzeW5jIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgeGNvZGVMb2cuZXJyb3IoYHhjb2RlYnVpbGQgZXhpdGVkIHdpdGggY29kZSAnJHtjb2RlfScgYW5kIHNpZ25hbCAnJHtzaWduYWx9J2ApO1xuICAgICAgICAvLyBwcmludCBvdXQgdGhlIHhjb2RlYnVpbGQgZmlsZSBpZiB1c2VycyBoYXZlIGFza2VkIGZvciBpdFxuICAgICAgICBpZiAodGhpcy5zaG93WGNvZGVMb2cgJiYgdGhpcy54Y29kZWJ1aWxkLmxvZ0xvY2F0aW9uKSB7XG4gICAgICAgICAgeGNvZGVMb2cuZXJyb3IoYENvbnRlbnRzIG9mIHhjb2RlYnVpbGQgbG9nIGZpbGUgJyR7dGhpcy54Y29kZWJ1aWxkLmxvZ0xvY2F0aW9ufSc6YCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBkYXRhID0gYXdhaXQgZnMucmVhZEZpbGUodGhpcy54Y29kZWJ1aWxkLmxvZ0xvY2F0aW9uLCAndXRmOCcpO1xuICAgICAgICAgICAgZm9yIChsZXQgbGluZSBvZiBkYXRhLnNwbGl0KCdcXG4nKSkge1xuICAgICAgICAgICAgICB4Y29kZUxvZy5lcnJvcihsaW5lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHhjb2RlTG9nLmVycm9yKGBVbmFibGUgdG8gYWNjZXNzIHhjb2RlYnVpbGQgbG9nIGZpbGU6ICcke2Vyci5tZXNzYWdlfSdgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy54Y29kZWJ1aWxkLnByb2Nlc3NFeGl0ZWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy54Y29kZWJ1aWxkLl93ZGFfZXJyb3Jfb2NjdXJyZWQgfHwgKCFzaWduYWwgJiYgY29kZSAhPT0gMCkpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihgeGNvZGVidWlsZCBmYWlsZWQgd2l0aCBjb2RlICR7Y29kZX0ke0VPTH1gICtcbiAgICAgICAgICAgIGB4Y29kZWJ1aWxkIGVycm9yIG1lc3NhZ2U6JHtFT0x9JHt0aGlzLnhjb2RlYnVpbGQuX3dkYV9lcnJvcl9tZXNzYWdlfWApKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpbiB0aGUgY2FzZSBvZiBqdXN0IGJ1aWxkaW5nLCB0aGUgcHJvY2VzcyB3aWxsIGV4aXQgYW5kIHRoYXQgaXMgb3VyIGZpbmlzaFxuICAgICAgICBpZiAoYnVpbGRPbmx5KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiAoYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnN0YXJ0KHRydWUpO1xuICAgICAgICAgIGlmICghYnVpbGRPbmx5KSB7XG4gICAgICAgICAgICBsZXQgc3RhdHVzID0gYXdhaXQgdGhpcy53YWl0Rm9yU3RhcnQodGltZXIpO1xuICAgICAgICAgICAgcmVzb2x2ZShzdGF0dXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgbGV0IG1zZyA9IGBVbmFibGUgdG8gc3RhcnQgV2ViRHJpdmVyQWdlbnQ6ICR7ZXJyfWA7XG4gICAgICAgICAgdGhpcy5sb2cuZXJyb3IobXNnKTtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKG1zZykpO1xuICAgICAgICB9XG4gICAgICB9KSgpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgd2FpdEZvclN0YXJ0ICh0aW1lcikge1xuICAgIC8vIHRyeSB0byBjb25uZWN0IG9uY2UgZXZlcnkgMC41IHNlY29uZHMsIHVudGlsIGBsYXVuY2hUaW1lb3V0YCBpcyB1cFxuICAgIHRoaXMubG9nLmRlYnVnKGBXYWl0aW5nIHVwIHRvICR7dGhpcy5sYXVuY2hUaW1lb3V0fW1zIGZvciBXZWJEcml2ZXJBZ2VudCB0byBzdGFydGApO1xuICAgIGxldCBjdXJyZW50U3RhdHVzID0gbnVsbDtcbiAgICB0cnkge1xuICAgICAgbGV0IHJldHJpZXMgPSBwYXJzZUludCh0aGlzLmxhdW5jaFRpbWVvdXQgLyA1MDAsIDEwKTtcbiAgICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwocmV0cmllcywgMTAwMCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy54Y29kZWJ1aWxkLnByb2Nlc3NFeGl0ZWQpIHtcbiAgICAgICAgICAvLyB0aGVyZSBoYXMgYmVlbiBhbiBlcnJvciBlbHNld2hlcmUgYW5kIHdlIG5lZWQgdG8gc2hvcnQtY2lyY3VpdFxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm94eVRpbWVvdXQgPSB0aGlzLm5vU2Vzc2lvblByb3h5LnRpbWVvdXQ7XG4gICAgICAgIHRoaXMubm9TZXNzaW9uUHJveHkudGltZW91dCA9IDEwMDA7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY3VycmVudFN0YXR1cyA9IGF3YWl0IHRoaXMubm9TZXNzaW9uUHJveHkuY29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgICAgICBpZiAoY3VycmVudFN0YXR1cyAmJiBjdXJyZW50U3RhdHVzLmlvcyAmJiBjdXJyZW50U3RhdHVzLmlvcy5pcCkge1xuICAgICAgICAgICAgdGhpcy5hZ2VudFVybCA9IGN1cnJlbnRTdGF0dXMuaW9zLmlwO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgV2ViRHJpdmVyQWdlbnQgaW5mb3JtYXRpb246YCk7XG4gICAgICAgICAgdGhpcy5sb2cuZGVidWcoSlNPTi5zdHJpbmdpZnkoY3VycmVudFN0YXR1cywgbnVsbCwgMikpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBjb25uZWN0IHRvIHJ1bm5pbmcgV2ViRHJpdmVyQWdlbnQ6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhpcy5ub1Nlc3Npb25Qcm94eS50aW1lb3V0ID0gcHJveHlUaW1lb3V0O1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMueGNvZGVidWlsZC5wcm9jZXNzRXhpdGVkKSB7XG4gICAgICAgIC8vIHRoZXJlIGhhcyBiZWVuIGFuIGVycm9yIGVsc2V3aGVyZSBhbmQgd2UgbmVlZCB0byBzaG9ydC1jaXJjdWl0XG4gICAgICAgIHJldHVybiBjdXJyZW50U3RhdHVzO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgV2ViRHJpdmVyQWdlbnQgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgYWZ0ZXIgJHt0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzLnRvRml4ZWQoMCl9bXNgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIGlmIHdlIGhhdmUgbm90IGhhZCBhbnkgZXJyb3JzIGZyb20geGNvZGUgaXRzZWxmIChyZXBvcnRlZFxuICAgICAgLy8gZWxzZXdoZXJlKSwgd2UgY2FuIGxldCB0aGlzIGdvIHRocm91Z2ggYW5kIHRyeSB0byBjcmVhdGUgdGhlIHNlc3Npb25cbiAgICAgIHRoaXMubG9nLmRlYnVnKGVyci5tZXNzYWdlKTtcbiAgICAgIHRoaXMubG9nLndhcm4oYEdldHRpbmcgc3RhdHVzIG9mIFdlYkRyaXZlckFnZW50IG9uIGRldmljZSB0aW1lZCBvdXQuIENvbnRpbnVpbmdgKTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnRTdGF0dXM7XG4gIH1cblxuICBhc3luYyBxdWl0ICgpIHtcbiAgICBhd2FpdCBraWxsUHJvY2VzcygneGNvZGVidWlsZCcsIHRoaXMueGNvZGVidWlsZCk7XG4gIH1cbn1cblxuZXhwb3J0IHsgWGNvZGVCdWlsZCB9O1xuZXhwb3J0IGRlZmF1bHQgWGNvZGVCdWlsZDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFJQTs7QUFDQTs7QUFDQTs7QUFD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
|
package/lib/logger.js
CHANGED
package/lib/no-session-proxy.js
CHANGED
package/lib/utils.js
CHANGED
package/lib/webdriveragent.js
CHANGED
|
@@ -2,8 +2,8 @@ import _ from 'lodash';
|
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import url from 'url';
|
|
4
4
|
import B from 'bluebird';
|
|
5
|
-
import { JWProxy } from '
|
|
6
|
-
import { fs, util, plist, mkdirp } from '
|
|
5
|
+
import { JWProxy } from 'appium/driver';
|
|
6
|
+
import { fs, util, plist, mkdirp } from 'appium/support';
|
|
7
7
|
import defaultLogger from './logger';
|
|
8
8
|
import { NoSessionProxy } from './no-session-proxy';
|
|
9
9
|
import {
|
package/lib/xcodebuild.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { retryInterval } from 'asyncbox';
|
|
2
2
|
import { SubProcess, exec } from 'teen_process';
|
|
3
|
-
import { fs, logger, timing } from '
|
|
3
|
+
import { fs, logger, timing } from 'appium/support';
|
|
4
4
|
import defaultLogger from './logger';
|
|
5
5
|
import B from 'bluebird';
|
|
6
6
|
import {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "appium-webdriveragent",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.6.0",
|
|
4
4
|
"description": "Package bundling WebDriverAgent",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -47,6 +47,7 @@
|
|
|
47
47
|
"@appium/eslint-config-appium": "^6.0.0",
|
|
48
48
|
"@appium/test-support": "^1.0.0",
|
|
49
49
|
"@semantic-release/git": "^10.0.1",
|
|
50
|
+
"appium": "^2.0.0-beta.40",
|
|
50
51
|
"appium-xcode": "^4.0.0",
|
|
51
52
|
"chai": "^4.2.0",
|
|
52
53
|
"chai-as-promised": "^7.1.1",
|
|
@@ -59,9 +60,10 @@
|
|
|
59
60
|
"semantic-release": "^19.0.2",
|
|
60
61
|
"sinon": "^14.0.0"
|
|
61
62
|
},
|
|
63
|
+
"peerDependencies": {
|
|
64
|
+
"appium": "^2.0.0-beta.40"
|
|
65
|
+
},
|
|
62
66
|
"dependencies": {
|
|
63
|
-
"@appium/base-driver": "^8.3.0",
|
|
64
|
-
"@appium/support": "^2.55.3",
|
|
65
67
|
"@babel/runtime": "^7.0.0",
|
|
66
68
|
"appium-ios-simulator": "^4.0.0",
|
|
67
69
|
"async-lock": "^1.0.0",
|