appium-xcuitest-driver 3.59.1 → 3.61.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/README.md CHANGED
@@ -28,12 +28,11 @@ On top of standard Appium requirements XCUITest driver also expects the followin
28
28
  - Web views must be debuggable in order to test them. If it is not possible to connect to your web view(s) using [Safari remote debugger](https://appletoolbox.com/use-web-inspector-debug-mobile-safari/) then XCUITest won't be able to connect to them as well.
29
29
  - Since version 3.33.0 (included into Appium 1.20.0+) of XCUITest driver the [Carthage](https://github.com/Carthage/Carthage) dependency *is not needed anymore*. Prior to that version it was required and could be installed using [brew](https://brew.sh/): `brew install carthage`.
30
30
 
31
-
32
31
  ## Optional dependencies
33
32
 
34
33
  - [xcpretty](https://github.com/supermarin/xcpretty) tool could be used to make Xcode output easier to read. It could be installed using `gem install xcpretty` command.
35
34
  - For test video recording we use [ffmpeg](https://ffmpeg.org/). It could be installed using [brew](https://brew.sh/): `brew install ffmpeg`
36
- - Facebook's [IDB](https://github.com/facebook/idb) tool could be used to improve some real device/Simulator interactions
35
+ - [IDB](https://github.com/facebook/idb), [go-ios](https://github.com/danielpaulus/go-ios) and [tidevice](https://github.com/alibaba/taobao-iphone-device) could be used to improve some real device/Simulator interactions
37
36
  - [WIX AppleSimulatorUtils](https://github.com/wix/AppleSimulatorUtils) could be used to improve some Simulator interactions
38
37
 
39
38
 
@@ -53,7 +52,9 @@ See [real device configuration documentation](docs/real-device-config.md).
53
52
 
54
53
  ### Known problems
55
54
 
56
- After many failures on real devices it could transition to a state where connections are no longer being accepted. To possibly remedy this issue reboot the device. Read https://github.com/facebook/WebDriverAgent/issues/507 for more details.
55
+ - After many failures on real devices it could transition to a state where connections are no longer being accepted. To possibly remedy this issue reboot the device. Read https://github.com/facebook/WebDriverAgent/issues/507 for more details.
56
+ - iPhone/iPad real devices show overlay, which has `Automation Running Hold both volume buttons to stop` text, since iOS/iPadOS 15. This is a known limitation of XCTest framework. This limitation does not affect screenshooting APIs though (e.g. the overlay is not visible on taken screenshots).
57
+ - iPhone/iPad real devices [require passcode or touch id](https://github.com/appium/appium/issues/15898#issuecomment-927340411) when they start a XCTest session since iOS/iPadOS 15. Disabling passcode/touch id in the device preference allows to workaround the behaviour above.
57
58
 
58
59
  #### Weird state
59
60
 
@@ -30,6 +30,8 @@ var _teen_process = require("teen_process");
30
30
 
31
31
  var _portscanner = require("portscanner");
32
32
 
33
+ var _pyIosDeviceClient = _interopRequireDefault(require("../py-ios-device-client"));
34
+
33
35
  let extensions = {},
34
36
  commands = {};
35
37
  exports.commands = commands;
@@ -281,6 +283,17 @@ commands.mobileInstallCertificate = async function mobileInstallCertificate(opts
281
283
 
282
284
  _logger.default.info(`The certificate cannot be installed via CLI. ` + `Falling back to UI-based deployment`);
283
285
  }
286
+ } else {
287
+ const client = new _pyIosDeviceClient.default(this.opts.udid);
288
+
289
+ if (await client.assertExists(false)) {
290
+ await client.installProfile({
291
+ payload: Buffer.from(content, 'base64')
292
+ });
293
+ return;
294
+ } else {
295
+ _logger.default.info('pyidevice is not installed on your system. ' + 'Falling back to the (slow) UI-based installation');
296
+ }
284
297
  }
285
298
 
286
299
  const tmpRoot = await _appiumSupport.tempDir.openDir();
@@ -387,4 +400,4 @@ var _default = extensions;
387
400
  exports.default = _default;require('source-map-support').install();
388
401
 
389
402
 
390
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9jZXJ0aWZpY2F0ZS5qcyJdLCJuYW1lcyI6WyJleHRlbnNpb25zIiwiY29tbWFuZHMiLCJDT05GSUdfRVhURU5TSU9OIiwiSE9TVF9QT1JUX1JBTkdFIiwiVE1QU0VSVkVSX1NUQVJUVVBfVElNRU9VVCIsIlNldHRpbmdzIiwiR2VuZXJhbCIsInR5cGUiLCJ2YWx1ZSIsIlByb2ZpbGUiLCJBYm91dCIsIkNlcnRpZmljYXRlX1RydXN0X1NldHRpbmdzIiwiQnV0dG9uIiwiSW5zdGFsbCIsIkFsbG93IiwiRG9uZSIsIlJldHVybl90b19TZXR0aW5ncyIsIkFsZXJ0IiwiZXh0cmFjdENvbW1vbk5hbWUiLCJjZXJ0QnVmZmVyIiwidGVtcENlcnQiLCJ0ZW1wRGlyIiwib3BlbiIsInByZWZpeCIsInN1ZmZpeCIsImZzIiwid3JpdGVGaWxlIiwicGF0aCIsInN0ZG91dCIsInBhcnNlQ29tbW9uTmFtZSIsImVyciIsIkVycm9yIiwibWVzc2FnZSIsInJpbXJhZiIsIkxJQlJFX1NTTF9QQVRURVJOIiwiT1BFTl9TU0xfUEFUVEVSTiIsInN0cmluZ0NlcnRpZmljYXRlIiwicmVzdWx0IiwicmVkdWNlIiwiYWNjIiwiciIsIm1hdGNoIiwiZXhlYyIsInRvTW9iaWxlQ29uZmlnIiwiY29tbW9uTmFtZSIsImdldFVVSUQiLCJ1dGlsIiwidXVpZFY0IiwidG9VcHBlckNhc2UiLCJjb250ZW50VXVpZCIsIlBheWxvYWRDb250ZW50IiwiUGF5bG9hZENlcnRpZmljYXRlRmlsZU5hbWUiLCJQYXlsb2FkRGVzY3JpcHRpb24iLCJQYXlsb2FkRGlzcGxheU5hbWUiLCJQYXlsb2FkSWRlbnRpZmllciIsIlBheWxvYWRUeXBlIiwiUGF5bG9hZFVVSUQiLCJQYXlsb2FkVmVyc2lvbiIsIm9zIiwiaG9zdG5hbWUiLCJzcGxpdCIsIlBheWxvYWRSZW1vdmFsRGlzYWxsb3dlZCIsImNsaWNrRWxlbWVudCIsImRyaXZlciIsImxvY2F0b3IiLCJvcHRpb25zIiwiZWxlbWVudCIsInRpbWVvdXQiLCJza2lwSWZJbnZpc2libGUiLCJsb29rdXBEZWxheSIsImZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cyIsIkpTT04iLCJzdHJpbmdpZnkiLCJuYXRpdmVDbGljayIsImluc3RhbGxQcmUxMjJDZXJ0aWZpY2F0ZSIsIkIiLCJkZWxheSIsInRydXN0Q2VydGlmaWNhdGVJblByZWZlcmVuY2VzIiwibmFtZSIsInN3aXRjaExvY2F0b3IiLCJtb2JpbGVTd2lwZSIsImRpcmVjdGlvbiIsInBvc3RBY2NlcHRBbGVydCIsImluc3RhbGxQb3N0MTIyQ2VydGlmaWNhdGUiLCJhY3RpdmF0ZUFwcCIsImlzQ2VydEZvdW5kIiwic3dpcGVOdW0iLCJtb2JpbGVJbnN0YWxsQ2VydGlmaWNhdGUiLCJvcHRzIiwiY29udGVudCIsImlzUm9vdCIsIl8iLCJpc0VtcHR5IiwiaXNTaW11bGF0b3IiLCJtZXRob2ROYW1lIiwiZGV2aWNlIiwic2ltY3RsIiwiQnVmZmVyIiwiZnJvbSIsInRvU3RyaW5nIiwicmF3IiwiZSIsImxvZyIsImRlYnVnIiwiaW5mbyIsInRtcFJvb3QiLCJvcGVuRGlyIiwidG1wUG9ydCIsImNvbmZpZ05hbWUiLCJjb25maWdQYXRoIiwicmVzb2x2ZSIsInRtcFNlcnZlciIsImh0dHAiLCJjcmVhdGVTZXJ2ZXIiLCJyZXMiLCJjb25maWdGaWxlIiwicmVhZEZpbGUiLCJlbmQiLCJjbiIsIm1vYmlsZUNvbmZpZyIsInBsaXN0IiwidXBkYXRlUGxpc3RGaWxlIiwiaG9zdCIsImNlcnRVcmwiLCJsaXN0ZW4iLCJpZ24iLCJ3YWl0TXMiLCJpbnRlcnZhbE1zIiwiaXNSZWFsRGV2aWNlIiwicHJveHlDb21tYW5kIiwidXJsIiwiaXNXZWJDb250ZXh0Iiwic2V0VXJsIiwib3BlblVybCIsImlzQ2VydEFscmVhZHlJbnN0YWxsZWQiLCJjb21wYXJlVmVyc2lvbnMiLCJwbGF0Zm9ybVZlcnNpb24iLCJidW5kbGVJZCIsIndhcm4iLCJ0b0luTWVtb3J5QmFzZTY0IiwiY2xvc2UiLCJP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ICdsb2Rhc2gnO1xuaW1wb3J0IHsgZnMsIHBsaXN0LCB0ZW1wRGlyLCB1dGlsIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCwgcmV0cnksIHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgb3MgZnJvbSAnb3MnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgaHR0cCBmcm9tICdodHRwJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgZmluZEFQb3J0Tm90SW5Vc2UsIGNoZWNrUG9ydFN0YXR1cyB9IGZyb20gJ3BvcnRzY2FubmVyJztcblxubGV0IGV4dGVuc2lvbnMgPSB7fSwgY29tbWFuZHMgPSB7fTtcblxuY29uc3QgQ09ORklHX0VYVEVOU0lPTiA9ICdtb2JpbGVjb25maWcnO1xuY29uc3QgSE9TVF9QT1JUX1JBTkdFID0gWzM4MjAwLCAzODI5OV07XG5jb25zdCBUTVBTRVJWRVJfU1RBUlRVUF9USU1FT1VUID0gNTAwMDtcbmNvbnN0IFNldHRpbmdzID0ge1xuICBHZW5lcmFsOiB7XG4gICAgdHlwZTogJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgIHZhbHVlOiAnR2VuZXJhbCcsXG4gIH0sXG4gIFByb2ZpbGU6IHtcbiAgICB0eXBlOiAnLWlvcyBwcmVkaWNhdGUgc3RyaW5nJyxcbiAgICB2YWx1ZTogYG5hbWUgQkVHSU5TV0lUSCAnUHJvZmlsZSdgLFxuICB9LFxuICBBYm91dDoge1xuICAgIHR5cGU6ICdhY2Nlc3NpYmlsaXR5IGlkJyxcbiAgICB2YWx1ZTogJ0Fib3V0JyxcbiAgfSxcbiAgQ2VydGlmaWNhdGVfVHJ1c3RfU2V0dGluZ3M6IHtcbiAgICB0eXBlOiAnYWNjZXNzaWJpbGl0eSBpZCcsXG4gICAgdmFsdWU6ICdDZXJ0aWZpY2F0ZSBUcnVzdCBTZXR0aW5ncycsXG4gIH0sXG59O1xuY29uc3QgQnV0dG9uID0ge1xuICBJbnN0YWxsOiB7XG4gICAgdHlwZTogJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgIHZhbHVlOiAnSW5zdGFsbCcsXG4gIH0sXG4gIEFsbG93OiB7XG4gICAgdHlwZTogJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgIHZhbHVlOiAnQWxsb3cnLFxuICB9LFxuICBEb25lOiB7XG4gICAgdHlwZTogJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgIHZhbHVlOiAnRG9uZScsXG4gIH0sXG4gIFJldHVybl90b19TZXR0aW5nczoge1xuICAgIHR5cGU6ICdhY2Nlc3NpYmlsaXR5IGlkJyxcbiAgICB2YWx1ZTogJ1JldHVybiB0byBTZXR0aW5ncycsXG4gIH0sXG59O1xuY29uc3QgQWxlcnQgPSB7XG4gIEluc3RhbGw6IHtcbiAgICB0eXBlOiAnLWlvcyBjbGFzcyBjaGFpbicsXG4gICAgdmFsdWU6ICcqKi9YQ1VJRWxlbWVudFR5cGVBbnlbYHR5cGUgPT0gXFwnWENVSUVsZW1lbnRUeXBlQWxlcnRcXCcgT1IgdHlwZSA9PSBcXCdYQ1VJRWxlbWVudFR5cGVTaGVldFxcJ2BdLyoqL1hDVUlFbGVtZW50VHlwZUJ1dHRvbltgbGFiZWwgPT0gXFwnSW5zdGFsbFxcJ2BdJyxcbiAgfSxcbn07XG5cblxuYXN5bmMgZnVuY3Rpb24gZXh0cmFjdENvbW1vbk5hbWUgKGNlcnRCdWZmZXIpIHtcbiAgY29uc3QgdGVtcENlcnQgPSBhd2FpdCB0ZW1wRGlyLm9wZW4oe1xuICAgIHByZWZpeDogJ2NlcnQnLFxuICAgIHN1ZmZpeDogJy5jZXInXG4gIH0pO1xuICB0cnkge1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZSh0ZW1wQ2VydC5wYXRoLCBjZXJ0QnVmZmVyKTtcbiAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoJ29wZW5zc2wnLCBbJ3g1MDknLCAnLW5vb3V0JywgJy1zdWJqZWN0JywgJy1pbicsIHRlbXBDZXJ0LnBhdGhdKTtcbiAgICByZXR1cm4gcGFyc2VDb21tb25OYW1lKHN0ZG91dCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHBhcnNlIGNvbW1vbiBuYW1lIHZhbHVlIGZyb20gdGhlIGNlcnRpZmljYXRlLiBJcyBpdCB2YWxpZCBhbmQgYmFzZTY0LWVuY29kZWQ/IGAgK1xuICAgICAgICAgICAgICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZnMucmltcmFmKHRlbXBDZXJ0LnBhdGgpO1xuICB9XG59XG5cbmNvbnN0IExJQlJFX1NTTF9QQVRURVJOID0gL1xcL0NOPShbXlxcL10rKS87IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlbGVzcy1lc2NhcGVcbmNvbnN0IE9QRU5fU1NMX1BBVFRFUk4gPSAvLFxcc0NOXFxzPVxccyhbXixdKykvO1xuXG5mdW5jdGlvbiBwYXJzZUNvbW1vbk5hbWUgKHN0cmluZ0NlcnRpZmljYXRlKSB7XG4gIGNvbnN0IHJlc3VsdCA9IFtMSUJSRV9TU0xfUEFUVEVSTiwgT1BFTl9TU0xfUEFUVEVSTl0ucmVkdWNlKChhY2MsIHIpID0+IHtcbiAgICBpZiAoYWNjKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cbiAgICBjb25zdCBtYXRjaCA9IHIuZXhlYyhzdHJpbmdDZXJ0aWZpY2F0ZSk7XG4gICAgcmV0dXJuIG1hdGNoICYmIG1hdGNoWzFdO1xuICB9LCBudWxsKTtcbiAgaWYgKCFyZXN1bHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGlzIG5vIGNvbW1vbiBuYW1lIHZhbHVlIGluICcke3N0cmluZ0NlcnRpZmljYXRlfScgb3V0cHV0YCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgQXBwbGUncyBvdmVyLXRoZS1haXIgY29uZmlndXJhdGlvbiBwcm9maWxlXG4gKiBmb3IgY2VydGlmaWNhdGUgZGVwbG95bWVudCBiYXNlZCBvbiB0aGUgZ2l2ZW4gUEVNIGNlcnRpZmljYXRlIGNvbnRlbnQuXG4gKiBSZWFkIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9saWJyYXJ5L2NvbnRlbnQvZG9jdW1lbnRhdGlvbi9OZXR3b3JraW5nSW50ZXJuZXQvQ29uY2VwdHVhbC9pUGhvbmVPVEFDb25maWd1cmF0aW9uL0ludHJvZHVjdGlvbi9JbnRyb2R1Y3Rpb24uaHRtbFxuICogZm9yIG1vcmUgZGV0YWlscyBvbiBzdWNoIHByb2ZpbGVzLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBjZXJ0QnVmZmVyIC0gVGhlIGFjdHVhbCBjb250ZW50IG9mIFBFTSBjZXJ0aWZpY2F0ZSBlbmNvZGVkIGludG8gTm9kZUpTIGJ1ZmZlclxuICogQHBhcmFtIHtzdHJpbmd9IGNvbW1vbk5hbWUgLSBDZXJ0aWZpY2F0ZSdzIGNvbW1vbiBuYW1lXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZW5jb2RlZCBzdHJ1Y3R1cmUgb2YgdGhlIGdpdmVuIGNlcnRpZmljYXRlLCB3aGljaCBpcyByZWFkeSB0byBiZSBwYXNzZWRcbiAqIGFzIGFuIGFyZ3VtZW50IHRvIHBsaXN0IGJ1aWxkZXJcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgZ2l2ZW4gY2VydGlmaWNhdGUgY2Fubm90IGJlIHBhcnNlZFxuICovXG5mdW5jdGlvbiB0b01vYmlsZUNvbmZpZyAoY2VydEJ1ZmZlciwgY29tbW9uTmFtZSkge1xuICBjb25zdCBnZXRVVUlEID0gKCkgPT4gdXRpbC51dWlkVjQoKS50b1VwcGVyQ2FzZSgpO1xuICBjb25zdCBjb250ZW50VXVpZCA9IGdldFVVSUQoKTtcbiAgcmV0dXJuIHtcbiAgICBQYXlsb2FkQ29udGVudDogW3tcbiAgICAgIFBheWxvYWRDZXJ0aWZpY2F0ZUZpbGVOYW1lOiBgJHtjb21tb25OYW1lfS5jZXJgLFxuICAgICAgUGF5bG9hZENvbnRlbnQ6IGNlcnRCdWZmZXIsXG4gICAgICBQYXlsb2FkRGVzY3JpcHRpb246ICdBZGRzIGEgQ0Egcm9vdCBjZXJ0aWZpY2F0ZScsXG4gICAgICBQYXlsb2FkRGlzcGxheU5hbWU6IGNvbW1vbk5hbWUsXG4gICAgICBQYXlsb2FkSWRlbnRpZmllcjogYGNvbS5hcHBsZS5zZWN1cml0eS5yb290LiR7Y29udGVudFV1aWR9YCxcbiAgICAgIFBheWxvYWRUeXBlOiAnY29tLmFwcGxlLnNlY3VyaXR5LnJvb3QnLFxuICAgICAgUGF5bG9hZFVVSUQ6IGNvbnRlbnRVdWlkLFxuICAgICAgUGF5bG9hZFZlcnNpb246IDFcbiAgICB9XSxcbiAgICBQYXlsb2FkRGlzcGxheU5hbWU6IGNvbW1vbk5hbWUsXG4gICAgUGF5bG9hZElkZW50aWZpZXI6IGAke29zLmhvc3RuYW1lKCkuc3BsaXQoJy4nKVswXX0uJHtnZXRVVUlEKCl9YCxcbiAgICBQYXlsb2FkUmVtb3ZhbERpc2FsbG93ZWQ6IGZhbHNlLFxuICAgIFBheWxvYWRUeXBlOiAnQ29uZmlndXJhdGlvbicsXG4gICAgUGF5bG9hZFVVSUQ6IGdldFVVSUQoKSxcbiAgICBQYXlsb2FkVmVyc2lvbjogMVxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBjbGlja0VsZW1lbnQgKGRyaXZlciwgbG9jYXRvciwgb3B0aW9ucyA9IHt9KSB7XG4gIGxldCBlbGVtZW50ID0gbnVsbDtcbiAgY29uc3Qge1xuICAgIHRpbWVvdXQgPSA1MDAwLFxuICAgIHNraXBJZkludmlzaWJsZSA9IGZhbHNlXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBsb29rdXBEZWxheSA9IDUwMDtcbiAgdHJ5IHtcbiAgICBlbGVtZW50ID0gYXdhaXQgcmV0cnlJbnRlcnZhbCh0aW1lb3V0IDwgbG9va3VwRGVsYXkgPyAxIDogdGltZW91dCAvIGxvb2t1cERlbGF5LCBsb29rdXBEZWxheSxcbiAgICAgICgpID0+IGRyaXZlci5maW5kTmF0aXZlRWxlbWVudE9yRWxlbWVudHMobG9jYXRvci50eXBlLCBsb2NhdG9yLnZhbHVlLCBmYWxzZSlcbiAgICApO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoc2tpcElmSW52aXNpYmxlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgJHtKU09OLnN0cmluZ2lmeShsb2NhdG9yKX0gd2l0aGluICR7dGltZW91dH1tcyB0aW1lb3V0YCk7XG4gIH1cbiAgYXdhaXQgZHJpdmVyLm5hdGl2ZUNsaWNrKGVsZW1lbnQpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaW5zdGFsbFByZTEyMkNlcnRpZmljYXRlIChkcml2ZXIpIHtcbiAgLy8gQWNjZXB0IFNhZmFyaSBhbGVydFxuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBCdXR0b24uQWxsb3csIHtcbiAgICAvLyBjZXJ0aWZpY2F0ZSBsb2FkIG1pZ2h0IHRha2Ugc29tZSB0aW1lIG9uIHNsb3cgbWFjaGluZXNcbiAgICB0aW1lb3V0OiAxNTAwMCxcbiAgfSk7XG4gIC8vIFdhaXQgdW50aWwgUHJlZmVyZW5jZXMgYXJlIG9wZW5lZFxuICBhd2FpdCBCLmRlbGF5KDIwMDApO1xuXG4gIC8vIEdvIHRocm91Z2ggUHJlZmVyZW5jZXMgd2l6YXJkXG4gIGlmICghYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwgQnV0dG9uLkluc3RhbGwsIHtcbiAgICBza2lwSWZJbnZpc2libGU6IHRydWUsXG4gIH0pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIFdlIG5lZWQgdG8gY2xpY2sgSW5zdGFsbCBidXR0b24gb24gdHdvIGRpZmZlcmVudCB0YWJzXG4gIC8vIFRoZSBzZWNvbmQgb25lIGNvbmZpcm1zIHRoZSBwcmV2aW91c1xuICBhd2FpdCBCLmRlbGF5KDE1MDApO1xuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBCdXR0b24uSW5zdGFsbCk7XG4gIC8vIEFjY2VwdCBhbGVydFxuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBBbGVydC5JbnN0YWxsKTtcbiAgLy8gRmluaXNoIGFkZGluZyBjZXJ0aWZpY2F0ZVxuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBCdXR0b24uRG9uZSk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5hc3luYyBmdW5jdGlvbiB0cnVzdENlcnRpZmljYXRlSW5QcmVmZXJlbmNlcyAoZHJpdmVyLCBuYW1lKSB7XG4gIGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIFNldHRpbmdzLkdlbmVyYWwpO1xuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBTZXR0aW5ncy5BYm91dCk7XG4gIGNvbnN0IHN3aXRjaExvY2F0b3IgPSB7XG4gICAgdHlwZTogJy1pb3MgY2xhc3MgY2hhaW4nLFxuICAgIHZhbHVlOiBgKiovWENVSUVsZW1lbnRUeXBlQ2VsbFtcXGBsYWJlbCA9PSAnJHtuYW1lfSdcXGBdLyoqL1hDVUlFbGVtZW50VHlwZVN3aXRjaGAsXG4gIH07XG4gIGF3YWl0IHJldHJ5KDUsIGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBkcml2ZXIubW9iaWxlU3dpcGUoe1xuICAgICAgZWxlbWVudDogYXdhaXQgZHJpdmVyLmZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cygnY2xhc3MgbmFtZScsICdYQ1VJRWxlbWVudFR5cGVUYWJsZScsIGZhbHNlKSxcbiAgICAgIGRpcmVjdGlvbjogJ3VwJ1xuICAgIH0pO1xuICAgIGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIFNldHRpbmdzLkNlcnRpZmljYXRlX1RydXN0X1NldHRpbmdzLCB7XG4gICAgICB0aW1lb3V0OiA1MDAsXG4gICAgfSk7XG5cbiAgICBhd2FpdCBkcml2ZXIuZmluZE5hdGl2ZUVsZW1lbnRPckVsZW1lbnRzKHN3aXRjaExvY2F0b3IudHlwZSwgc3dpdGNoTG9jYXRvci52YWx1ZSwgZmFsc2UpO1xuICB9KTtcbiAgLy8gT25seSBjbGljayB0aGUgc3dpdGNoIGlmIGl0IGlzIHNldCB0byBPZmZcbiAgaWYgKGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIHtcbiAgICB0eXBlOiBzd2l0Y2hMb2NhdG9yLnR5cGUsXG4gICAgdmFsdWU6IGAke3N3aXRjaExvY2F0b3IudmFsdWV9W1xcYHZhbHVlID09ICcwJ1xcYF1gXG4gIH0sIHtcbiAgICB0aW1lb3V0OiAxMDAwLFxuICAgIHNraXBJZkludmlzaWJsZTogdHJ1ZSxcbiAgfSkpIHtcbiAgICBhd2FpdCBkcml2ZXIucG9zdEFjY2VwdEFsZXJ0KCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gaW5zdGFsbFBvc3QxMjJDZXJ0aWZpY2F0ZSAoZHJpdmVyLCBuYW1lKSB7XG4gIC8vIEFjY2VwdCBTYWZhcmkgYWxlcnRcbiAgYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwgQnV0dG9uLkFsbG93LCB7XG4gICAgLy8gY2VydGlmaWNhdGUgbG9hZCBtaWdodCB0YWtlIHNvbWUgdGltZSBvbiBzbG93IG1hY2hpbmVzXG4gICAgdGltZW91dDogMTUwMDAsXG4gIH0pO1xuICAvLyBXYWl0IGZvciB0aGUgc2Vjb25kIGFsZXJ0XG4gIGF3YWl0IEIuZGVsYXkoMjAwMCk7XG5cbiAgYXdhaXQgZHJpdmVyLnBvc3RBY2NlcHRBbGVydCgpO1xuICBhd2FpdCBkcml2ZXIuYWN0aXZhdGVBcHAoJ2NvbS5hcHBsZS5QcmVmZXJlbmNlcycpO1xuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBTZXR0aW5ncy5HZW5lcmFsKTtcbiAgYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwgU2V0dGluZ3MuUHJvZmlsZSk7XG4gIC8vIFNlbGVjdCB0aGUgdGFyZ2V0IGNlcnRcbiAgbGV0IGlzQ2VydEZvdW5kID0gZmFsc2U7XG4gIGZvciAobGV0IHN3aXBlTnVtID0gMDsgc3dpcGVOdW0gPCA1OyArK3N3aXBlTnVtKSB7XG4gICAgaWYgKGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIHtcbiAgICAgIHR5cGU6ICctaW9zIGNsYXNzIGNoYWluJyxcbiAgICAgIHZhbHVlOiBgKiovWENVSUVsZW1lbnRUeXBlQ2VsbFtcXGBsYWJlbCA9PSAnJHtuYW1lfSdcXGBdYCxcbiAgICB9LCB7XG4gICAgICB0aW1lb3V0OiA1MDAsXG4gICAgICBza2lwSWZJbnZpc2libGU6IHRydWUsXG4gICAgfSkpIHtcbiAgICAgIGlzQ2VydEZvdW5kID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGF3YWl0IGRyaXZlci5tb2JpbGVTd2lwZSh7XG4gICAgICBlbGVtZW50OiBhd2FpdCBkcml2ZXIuZmluZE5hdGl2ZUVsZW1lbnRPckVsZW1lbnRzKCdjbGFzcyBuYW1lJywgJ1hDVUlFbGVtZW50VHlwZVRhYmxlJywgZmFsc2UpLFxuICAgICAgZGlyZWN0aW9uOiAndXAnXG4gICAgfSk7XG4gIH1cbiAgaWYgKCFpc0NlcnRGb3VuZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJyR7bmFtZX0nIGNhbm5vdCBiZSBmb3VuZCBpbiB0aGUgY2VydGlmaWNhdGVzIGxpc3RgKTtcbiAgfVxuXG4gIC8vIEluc3RhbGwgb3B0aW9uIGlzIG9ubHkgdmlzaWJsZSBpZiB0aGUgY2VydCBpcyBub3QgaW5zdGFsbGVkIHlldFxuICBpZiAoIWF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIEJ1dHRvbi5JbnN0YWxsLCB7XG4gICAgc2tpcElmSW52aXNpYmxlOiB0cnVlLFxuICB9KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBhd2FpdCBCLmRlbGF5KDE1MDApO1xuICAvLyBDb25maXJtIHVudHJ1c3RlZCBjZXJ0IGluc3RhbGxcbiAgYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwgQnV0dG9uLkluc3RhbGwpO1xuICAvLyBBY2NlcHQgYWxlcnRcbiAgYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwgQWxlcnQuSW5zdGFsbCk7XG4gIC8vIEZpbmlzaCBhZGRpbmcgY2VydGlmaWNhdGVcbiAgYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwgQnV0dG9uLkRvbmUpO1xuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENlcnRpZmljYXRlSW5zdGFsbGF0aW9uT3B0aW9uc1xuICpcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ30gY29udGVudCAtIEJhc2U2NC1lbmNvZGVkIGNvbnRlbnQgb2YgdGhlIHB1YmxpYyBjZXJ0aWZpY2F0ZVxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBjb21tb25OYW1lIC0gQ29tbW9uIG5hbWUgb2YgdGhlIGNlcnRpZmljYXRlLiBJZiB0aGlzIGlzIG5vdCBzZXRcbiAqIHRoZW4gdGhlIHNjcmlwdCB3aWxsIHRyeSB0byBwYXJzZSBpdCBmcm9tIHRoZSBnaXZlbiBjZXJ0aWZpY2F0ZSBjb250ZW50LlxuICogQHByb3BlcnR5IHs/Ym9vbGVhbn0gaXNSb290IFt0cnVlXSAtIFRoaXMgb3B0aW9uIGRlZmluZXMgd2hlcmUgdGhlIGNlcnRpZmljYXRlIHNob3VsZCBiZVxuICogaW5zdGFsbGVkIHRvOiBlaXRoZXIgVHJ1c3RlZCBSb290IFN0b3JlIChgdHJ1ZWAsIHRoZSBkZWZhdWx0IG9wdGlvbikgb3JcbiAqIHRoZSBLZXljaGFpbiAoYGZhbHNlYCkuIE9uIGVudmlyb25tZW50cyBvdGhlciB0aGFuIFhjb2RlIDExLjQrIFNpbXVsYXRvciB0aGlzXG4gKiBvcHRpb24gaXMgaWdub3JlZC5cbiAqL1xuXG4vKipcbiAqIEluc3RhbGxzIGEgY3VzdG9tIGNlcnRpZmljYXRlIG9udG8gdGhlIGRldmljZS5cbiAqIFNpbmNlIFhjb2RlIFNESyAxMS40IEFwcGxlIGhhcyBhZGRlZCBhIGRlZGljYXRlZCBzaW1jdGwgc3ViY29tbWFuZCB0byBxdWlja2x5IGhhbmRsZVxuICogY2VydGlmaWNhdGVzIG9uIFNpbXVsYXRvciBvdmVyIENMSS5cbiAqIE9uIHJlYWwgZGV2aWNlcyBvciBzaW11bGF0b3JzIGJlZm9yZSBYY29kZSAxMS40IFNES1xuICogQXBwbGUgcHJvdmlkZXMgbm8gb2ZmaWNpYWwgd2F5IHRvIGRvIGl0IHZpYSB0aGUgY29tbWFuZCBsaW5lLlxuICogSW4gc3VjaCBjYXNlIChhbmQgYWxzbyBhcyBhIGZhbGxiYWNrIGlmIENMSSBzZXR1cCBmYWlscylcbiAqIHRoaXMgbWV0aG9kIHRyaWVzIHRvIHdyYXAgdGhlIGNlcnRpZmljYXRlIGludG8gLm1vYmlsZWNvbmZpZyBmb3JtYXRcbiAqIGFuZCB0aGVuIGRlcGxveXMgdGhlIHdyYXBwZWQgZmlsZSB0byB0aGUgaW50ZXJuYWwgSFRUUCBzZXJ2ZXIsXG4gKiBzbyBvbmUgY2FuIG9wZW4gaXQgdmlhIG1vYmlsZSBTYWZhcmkuXG4gKiBUaGVuIHRoZSBhbGdvcml0aG0gZ29lcyB0aHJvdWdoIHRoZSBwcm9maWxlIGluc3RhbGxhdGlvbiBwcm9jZWR1cmUgYnlcbiAqIGNsaWNraW5nIHRoZSBuZWNlc3NhcnkgYnV0dG9ucyB1c2luZyBXZWJEcml2ZXJBZ2VudC5cbiAqXG4gKiBAcGFyYW0ge0NlcnRpZmljYXRlSW5zdGFsbGF0aW9uT3B0aW9uc30gb3B0c1xuICogQHJldHVybnMgez9zdHJpbmd9IFRoZSBjb250ZW50IG9mIHRoZSBnZW5lcmF0ZWQgLm1vYmlsZWNvbmZpZyBmaWxlIGFzXG4gKiBiYXNlNjQtZW5jb2RlZCBzdHJpbmcuIFRoaXMgY29uZmlnIG1pZ2h0IGJlIHVzZWZ1bCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLlxuICogSWYgdGhlIGNlcnRpZmljYXRlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBzZXQgdmlhIENMSSB0aGVuIG5vdGhpbmcgaXMgcmV0dXJuZWQuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUluc3RhbGxDZXJ0aWZpY2F0ZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUluc3RhbGxDZXJ0aWZpY2F0ZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBjb250ZW50LFxuICAgIGNvbW1vbk5hbWUsXG4gICAgaXNSb290ID0gdHJ1ZSxcbiAgfSA9IG9wdHM7XG4gIGlmIChfLmlzRW1wdHkoY29udGVudCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NlcnRpZmljYXRlIGNvbnRlbnQgc2hvdWxkIG5vdCBiZSBlbXB0eScpO1xuICB9XG5cbiAgaWYgKHRoaXMuaXNTaW11bGF0b3IoKSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtZXRob2ROYW1lID0gaXNSb290ID8gJ2FkZFJvb3RDZXJ0aWZpY2F0ZScgOiAnYWRkQ2VydGlmaWNhdGUnO1xuICAgICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5zaW1jdGxbbWV0aG9kTmFtZV0oXG4gICAgICAgIEJ1ZmZlci5mcm9tKGNvbnRlbnQsICdiYXNlNjQnKS50b1N0cmluZygpLCB7cmF3OiB0cnVlfVxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuZGVidWcoZSk7XG4gICAgICBsb2cuaW5mbyhgVGhlIGNlcnRpZmljYXRlIGNhbm5vdCBiZSBpbnN0YWxsZWQgdmlhIENMSS4gYCArXG4gICAgICAgIGBGYWxsaW5nIGJhY2sgdG8gVUktYmFzZWQgZGVwbG95bWVudGApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgY29uc3QgdG1wUG9ydCA9IGF3YWl0IGZpbmRBUG9ydE5vdEluVXNlKEhPU1RfUE9SVF9SQU5HRVswXSwgSE9TVF9QT1JUX1JBTkdFWzFdKTtcbiAgY29uc3QgY29uZmlnTmFtZSA9IGBhcHBpdW0uJHtDT05GSUdfRVhURU5TSU9OfWA7XG4gIGNvbnN0IGNvbmZpZ1BhdGggPSBwYXRoLnJlc29sdmUodG1wUm9vdCwgY29uZmlnTmFtZSk7XG4gIGNvbnN0IHRtcFNlcnZlciA9IGh0dHAuY3JlYXRlU2VydmVyKGFzeW5jIGZ1bmN0aW9uIChfLCByZXMpIHtcbiAgICBjb25zdCBjb25maWdGaWxlID0gYXdhaXQgZnMucmVhZEZpbGUoY29uZmlnUGF0aCk7XG4gICAgcmVzLmVuZChjb25maWdGaWxlKTtcbiAgfSk7XG4gIHRyeSB7XG4gICAgY29uc3QgY2VydEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGNvbnRlbnQsICdiYXNlNjQnKTtcbiAgICBjb25zdCBjbiA9IGNvbW1vbk5hbWUgfHwgYXdhaXQgZXh0cmFjdENvbW1vbk5hbWUoY2VydEJ1ZmZlcik7XG4gICAgY29uc3QgbW9iaWxlQ29uZmlnID0gdG9Nb2JpbGVDb25maWcoY2VydEJ1ZmZlciwgY24pO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBwbGlzdC51cGRhdGVQbGlzdEZpbGUoY29uZmlnUGF0aCwgbW9iaWxlQ29uZmlnLCBmYWxzZSwgZmFsc2UpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc3RvcmUgdGhlIGdlbmVyYXRlZCBjb25maWcgYXMgJyR7Y29uZmlnUGF0aH0nLiBgICtcbiAgICAgICAgICAgICAgICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGhvc3QgPSBvcy5ob3N0bmFtZSgpO1xuICAgICAgY29uc3QgY2VydFVybCA9IGBodHRwOi8vJHtob3N0fToke3RtcFBvcnR9LyR7Y29uZmlnTmFtZX1gO1xuICAgICAgYXdhaXQgdG1wU2VydmVyLmxpc3Rlbih0bXBQb3J0KTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gKGF3YWl0IGNoZWNrUG9ydFN0YXR1cyh0bXBQb3J0LCBob3N0KSkgPT09ICdvcGVuJztcbiAgICAgICAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICB3YWl0TXM6IFRNUFNFUlZFUl9TVEFSVFVQX1RJTUVPVVQsXG4gICAgICAgICAgaW50ZXJ2YWxNczogMzAwLFxuICAgICAgICB9KTtcbiAgICAgICAgbG9nLmRlYnVnKGBUaGUgdGVtcG9yYXJ5IHdlYiBzZXJ2ZXIgaXMgcnVubmluZyBhdCBodHRwOi8vJHtob3N0fToke3RtcFBvcnR9YCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHRlbXBvcmFyeSB3ZWIgc2VydmVyIGNhbm5vdCBiZSBzdGFydGVkIGF0IGh0dHA6Ly8ke2hvc3R9OiR7dG1wUG9ydH0uYCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvdXJsJywgJ1BPU1QnLCB7dXJsOiBjZXJ0VXJsfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGlmICh0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgICAgICAgICAvLyBUaGUgY29tbWFuZCBhYm92ZSBkb2VzIG5vdCBhbHdheXMgd29yayBvbiByZWFsIGRldmljZXNcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0VXJsKGNlcnRVcmwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLm9wZW5VcmwoY2VydFVybCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBpc0NlcnRBbHJlYWR5SW5zdGFsbGVkID0gZmFsc2U7XG4gICAgICBpZiAodXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJz49JywgJzEyLjInKSkge1xuICAgICAgICBpZiAoYXdhaXQgaW5zdGFsbFBvc3QxMjJDZXJ0aWZpY2F0ZSh0aGlzLCBjbikpIHtcbiAgICAgICAgICBhd2FpdCBjbGlja0VsZW1lbnQodGhpcywgU2V0dGluZ3MuUHJvZmlsZSk7XG4gICAgICAgICAgYXdhaXQgdHJ1c3RDZXJ0aWZpY2F0ZUluUHJlZmVyZW5jZXModGhpcywgY24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlzQ2VydEFscmVhZHlJbnN0YWxsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoYXdhaXQgaW5zdGFsbFByZTEyMkNlcnRpZmljYXRlKHRoaXMpKSB7XG4gICAgICAgICAgYXdhaXQgY2xpY2tFbGVtZW50KHRoaXMsIEJ1dHRvbi5SZXR1cm5fdG9fU2V0dGluZ3MpO1xuICAgICAgICAgIGF3YWl0IHRydXN0Q2VydGlmaWNhdGVJblByZWZlcmVuY2VzKHRoaXMsIGNuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpc0NlcnRBbHJlYWR5SW5zdGFsbGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzQ2VydEFscmVhZHlJbnN0YWxsZWQpIHtcbiAgICAgICAgbG9nLmluZm8oYEl0IGxvb2tzIGxpa2UgdGhlICcke2NufScgY2VydGlmaWNhdGUgaGFzIGJlZW4gYWxyZWFkeSBhZGRlZCB0byB0aGUgQ0Egcm9vdGApO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAodGhpcy5vcHRzLmJ1bmRsZUlkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hY3RpdmF0ZUFwcCh0aGlzLm9wdHMuYnVuZGxlSWQpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgbG9nLndhcm4oYENhbm5vdCByZXN0b3JlIHRoZSBhcHBsaWNhdGlvbiAnJHt0aGlzLm9wdHMuYnVuZGxlSWR9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIChhd2FpdCB1dGlsLnRvSW5NZW1vcnlCYXNlNjQoY29uZmlnUGF0aCkpLnRvU3RyaW5nKCk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgdG1wU2VydmVyLmNsb3NlKCk7XG4gICAgYXdhaXQgZnMucmltcmFmKHRtcFJvb3QpO1xuICB9XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzKTtcbmV4cG9ydCB7IGNvbW1hbmRzLCBwYXJzZUNvbW1vbk5hbWUgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9jZXJ0aWZpY2F0ZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
403
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9jZXJ0aWZpY2F0ZS5qcyJdLCJuYW1lcyI6WyJleHRlbnNpb25zIiwiY29tbWFuZHMiLCJDT05GSUdfRVhURU5TSU9OIiwiSE9TVF9QT1JUX1JBTkdFIiwiVE1QU0VSVkVSX1NUQVJUVVBfVElNRU9VVCIsIlNldHRpbmdzIiwiR2VuZXJhbCIsInR5cGUiLCJ2YWx1ZSIsIlByb2ZpbGUiLCJBYm91dCIsIkNlcnRpZmljYXRlX1RydXN0X1NldHRpbmdzIiwiQnV0dG9uIiwiSW5zdGFsbCIsIkFsbG93IiwiRG9uZSIsIlJldHVybl90b19TZXR0aW5ncyIsIkFsZXJ0IiwiZXh0cmFjdENvbW1vbk5hbWUiLCJjZXJ0QnVmZmVyIiwidGVtcENlcnQiLCJ0ZW1wRGlyIiwib3BlbiIsInByZWZpeCIsInN1ZmZpeCIsImZzIiwid3JpdGVGaWxlIiwicGF0aCIsInN0ZG91dCIsInBhcnNlQ29tbW9uTmFtZSIsImVyciIsIkVycm9yIiwibWVzc2FnZSIsInJpbXJhZiIsIkxJQlJFX1NTTF9QQVRURVJOIiwiT1BFTl9TU0xfUEFUVEVSTiIsInN0cmluZ0NlcnRpZmljYXRlIiwicmVzdWx0IiwicmVkdWNlIiwiYWNjIiwiciIsIm1hdGNoIiwiZXhlYyIsInRvTW9iaWxlQ29uZmlnIiwiY29tbW9uTmFtZSIsImdldFVVSUQiLCJ1dGlsIiwidXVpZFY0IiwidG9VcHBlckNhc2UiLCJjb250ZW50VXVpZCIsIlBheWxvYWRDb250ZW50IiwiUGF5bG9hZENlcnRpZmljYXRlRmlsZU5hbWUiLCJQYXlsb2FkRGVzY3JpcHRpb24iLCJQYXlsb2FkRGlzcGxheU5hbWUiLCJQYXlsb2FkSWRlbnRpZmllciIsIlBheWxvYWRUeXBlIiwiUGF5bG9hZFVVSUQiLCJQYXlsb2FkVmVyc2lvbiIsIm9zIiwiaG9zdG5hbWUiLCJzcGxpdCIsIlBheWxvYWRSZW1vdmFsRGlzYWxsb3dlZCIsImNsaWNrRWxlbWVudCIsImRyaXZlciIsImxvY2F0b3IiLCJvcHRpb25zIiwiZWxlbWVudCIsInRpbWVvdXQiLCJza2lwSWZJbnZpc2libGUiLCJsb29rdXBEZWxheSIsImZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cyIsIkpTT04iLCJzdHJpbmdpZnkiLCJuYXRpdmVDbGljayIsImluc3RhbGxQcmUxMjJDZXJ0aWZpY2F0ZSIsIkIiLCJkZWxheSIsInRydXN0Q2VydGlmaWNhdGVJblByZWZlcmVuY2VzIiwibmFtZSIsInN3aXRjaExvY2F0b3IiLCJtb2JpbGVTd2lwZSIsImRpcmVjdGlvbiIsInBvc3RBY2NlcHRBbGVydCIsImluc3RhbGxQb3N0MTIyQ2VydGlmaWNhdGUiLCJhY3RpdmF0ZUFwcCIsImlzQ2VydEZvdW5kIiwic3dpcGVOdW0iLCJtb2JpbGVJbnN0YWxsQ2VydGlmaWNhdGUiLCJvcHRzIiwiY29udGVudCIsImlzUm9vdCIsIl8iLCJpc0VtcHR5IiwiaXNTaW11bGF0b3IiLCJtZXRob2ROYW1lIiwiZGV2aWNlIiwic2ltY3RsIiwiQnVmZmVyIiwiZnJvbSIsInRvU3RyaW5nIiwicmF3IiwiZSIsImxvZyIsImRlYnVnIiwiaW5mbyIsImNsaWVudCIsIlB5aWRldmljZSIsInVkaWQiLCJhc3NlcnRFeGlzdHMiLCJpbnN0YWxsUHJvZmlsZSIsInBheWxvYWQiLCJ0bXBSb290Iiwib3BlbkRpciIsInRtcFBvcnQiLCJjb25maWdOYW1lIiwiY29uZmlnUGF0aCIsInJlc29sdmUiLCJ0bXBTZXJ2ZXIiLCJodHRwIiwiY3JlYXRlU2VydmVyIiwicmVzIiwiY29uZmlnRmlsZSIsInJlYWRGaWxlIiwiZW5kIiwiY24iLCJtb2JpbGVDb25maWciLCJwbGlzdCIsInVwZGF0ZVBsaXN0RmlsZSIsImhvc3QiLCJjZXJ0VXJsIiwibGlzdGVuIiwiaWduIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImlzUmVhbERldmljZSIsInByb3h5Q29tbWFuZCIsInVybCIsImlzV2ViQ29udGV4dCIsInNldFVybCIsIm9wZW5VcmwiLCJpc0NlcnRBbHJlYWR5SW5zdGFsbGVkIiwiY29tcGFyZVZlcnNpb25zIiwicGxhdGZvcm1WZXJzaW9uIiwiYnVuZGxlSWQiLCJ3YXJuIiwidG9Jbk1lbW9yeUJhc2U2NCIsImNsb3NlIiwiT2JqZWN0IiwiYXNzaWduIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxJQUFJQSxVQUFVLEdBQUcsRUFBakI7QUFBQSxJQUFxQkMsUUFBUSxHQUFHLEVBQWhDOztBQUVBLE1BQU1DLGdCQUFnQixHQUFHLGNBQXpCO0FBQ0EsTUFBTUMsZUFBZSxHQUFHLENBQUMsS0FBRCxFQUFRLEtBQVIsQ0FBeEI7QUFDQSxNQUFNQyx5QkFBeUIsR0FBRyxJQUFsQztBQUNBLE1BQU1DLFFBQVEsR0FBRztBQUNmQyxFQUFBQSxPQUFPLEVBQUU7QUFDUEMsSUFBQUEsSUFBSSxFQUFFLGtCQURDO0FBRVBDLElBQUFBLEtBQUssRUFBRTtBQUZBLEdBRE07QUFLZkMsRUFBQUEsT0FBTyxFQUFFO0FBQ1BGLElBQUFBLElBQUksRUFBRSx1QkFEQztBQUVQQyxJQUFBQSxLQUFLLEVBQUc7QUFGRCxHQUxNO0FBU2ZFLEVBQUFBLEtBQUssRUFBRTtBQUNMSCxJQUFBQSxJQUFJLEVBQUUsa0JBREQ7QUFFTEMsSUFBQUEsS0FBSyxFQUFFO0FBRkYsR0FUUTtBQWFmRyxFQUFBQSwwQkFBMEIsRUFBRTtBQUMxQkosSUFBQUEsSUFBSSxFQUFFLGtCQURvQjtBQUUxQkMsSUFBQUEsS0FBSyxFQUFFO0FBRm1CO0FBYmIsQ0FBakI7QUFrQkEsTUFBTUksTUFBTSxHQUFHO0FBQ2JDLEVBQUFBLE9BQU8sRUFBRTtBQUNQTixJQUFBQSxJQUFJLEVBQUUsa0JBREM7QUFFUEMsSUFBQUEsS0FBSyxFQUFFO0FBRkEsR0FESTtBQUtiTSxFQUFBQSxLQUFLLEVBQUU7QUFDTFAsSUFBQUEsSUFBSSxFQUFFLGtCQUREO0FBRUxDLElBQUFBLEtBQUssRUFBRTtBQUZGLEdBTE07QUFTYk8sRUFBQUEsSUFB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QU8xQyxDQUFQLEVBQVU7QUFDVkMsMEJBQUkwQyxJQUFKLENBQVUsbUNBQWtDLEtBQUt4RCxJQUFMLENBQVV1RCxRQUFTLHNCQUFxQjFDLENBQUMsQ0FBQ3JFLE9BQVEsRUFBOUY7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQsV0FBTyxDQUFDLE1BQU1jLG9CQUFLbUcsZ0JBQUwsQ0FBc0I5QixVQUF0QixDQUFQLEVBQTBDaEIsUUFBMUMsRUFBUDtBQUNELEdBM0VELFNBMkVVO0FBQ1IsVUFBTWtCLFNBQVMsQ0FBQzZCLEtBQVYsRUFBTjtBQUNBLFVBQU16SCxrQkFBR1EsTUFBSCxDQUFVOEUsT0FBVixDQUFOO0FBQ0Q7QUFDRixDQXhIRDs7QUEwSEFvQyxNQUFNLENBQUNDLE1BQVAsQ0FBY3BKLFVBQWQsRUFBMEJDLFFBQTFCO2VBRWVELFUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZnMsIHBsaXN0LCB0ZW1wRGlyLCB1dGlsIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCwgcmV0cnksIHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgb3MgZnJvbSAnb3MnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgaHR0cCBmcm9tICdodHRwJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgZmluZEFQb3J0Tm90SW5Vc2UsIGNoZWNrUG9ydFN0YXR1cyB9IGZyb20gJ3BvcnRzY2FubmVyJztcbmltcG9ydCBQeWlkZXZpY2UgZnJvbSAnLi4vcHktaW9zLWRldmljZS1jbGllbnQnO1xuXG5sZXQgZXh0ZW5zaW9ucyA9IHt9LCBjb21tYW5kcyA9IHt9O1xuXG5jb25zdCBDT05GSUdfRVhURU5TSU9OID0gJ21vYmlsZWNvbmZpZyc7XG5jb25zdCBIT1NUX1BPUlRfUkFOR0UgPSBbMzgyMDAsIDM4Mjk5XTtcbmNvbnN0IFRNUFNFUlZFUl9TVEFSVFVQX1RJTUVPVVQgPSA1MDAwO1xuY29uc3QgU2V0dGluZ3MgPSB7XG4gIEdlbmVyYWw6IHtcbiAgICB0eXBlOiAnYWNjZXNzaWJpbGl0eSBpZCcsXG4gICAgdmFsdWU6ICdHZW5lcmFsJyxcbiAgfSxcbiAgUHJvZmlsZToge1xuICAgIHR5cGU6ICctaW9zIHByZWRpY2F0ZSBzdHJpbmcnLFxuICAgIHZhbHVlOiBgbmFtZSBCRUdJTlNXSVRIICdQcm9maWxlJ2AsXG4gIH0sXG4gIEFib3V0OiB7XG4gICAgdHlwZTogJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgIHZhbHVlOiAnQWJvdXQnLFxuICB9LFxuICBDZXJ0aWZpY2F0ZV9UcnVzdF9TZXR0aW5nczoge1xuICAgIHR5cGU6ICdhY2Nlc3NpYmlsaXR5IGlkJyxcbiAgICB2YWx1ZTogJ0NlcnRpZmljYXRlIFRydXN0IFNldHRpbmdzJyxcbiAgfSxcbn07XG5jb25zdCBCdXR0b24gPSB7XG4gIEluc3RhbGw6IHtcbiAgICB0eXBlOiAnYWNjZXNzaWJpbGl0eSBpZCcsXG4gICAgdmFsdWU6ICdJbnN0YWxsJyxcbiAgfSxcbiAgQWxsb3c6IHtcbiAgICB0eXBlOiAnYWNjZXNzaWJpbGl0eSBpZCcsXG4gICAgdmFsdWU6ICdBbGxvdycsXG4gIH0sXG4gIERvbmU6IHtcbiAgICB0eXBlOiAnYWNjZXNzaWJpbGl0eSBpZCcsXG4gICAgdmFsdWU6ICdEb25lJyxcbiAgfSxcbiAgUmV0dXJuX3RvX1NldHRpbmdzOiB7XG4gICAgdHlwZTogJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgIHZhbHVlOiAnUmV0dXJuIHRvIFNldHRpbmdzJyxcbiAgfSxcbn07XG5jb25zdCBBbGVydCA9IHtcbiAgSW5zdGFsbDoge1xuICAgIHR5cGU6ICctaW9zIGNsYXNzIGNoYWluJyxcbiAgICB2YWx1ZTogJyoqL1hDVUlFbGVtZW50VHlwZUFueVtgdHlwZSA9PSBcXCdYQ1VJRWxlbWVudFR5cGVBbGVydFxcJyBPUiB0eXBlID09IFxcJ1hDVUlFbGVtZW50VHlwZVNoZWV0XFwnYF0vKiovWENVSUVsZW1lbnRUeXBlQnV0dG9uW2BsYWJlbCA9PSBcXCdJbnN0YWxsXFwnYF0nLFxuICB9LFxufTtcblxuXG5hc3luYyBmdW5jdGlvbiBleHRyYWN0Q29tbW9uTmFtZSAoY2VydEJ1ZmZlcikge1xuICBjb25zdCB0ZW1wQ2VydCA9IGF3YWl0IHRlbXBEaXIub3Blbih7XG4gICAgcHJlZml4OiAnY2VydCcsXG4gICAgc3VmZml4OiAnLmNlcidcbiAgfSk7XG4gIHRyeSB7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKHRlbXBDZXJ0LnBhdGgsIGNlcnRCdWZmZXIpO1xuICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYygnb3BlbnNzbCcsIFsneDUwOScsICctbm9vdXQnLCAnLXN1YmplY3QnLCAnLWluJywgdGVtcENlcnQucGF0aF0pO1xuICAgIHJldHVybiBwYXJzZUNvbW1vbk5hbWUoc3Rkb3V0KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcGFyc2UgY29tbW9uIG5hbWUgdmFsdWUgZnJvbSB0aGUgY2VydGlmaWNhdGUuIElzIGl0IHZhbGlkIGFuZCBiYXNlNjQtZW5jb2RlZD8gYCArXG4gICAgICAgICAgICAgICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcy5yaW1yYWYodGVtcENlcnQucGF0aCk7XG4gIH1cbn1cblxuY29uc3QgTElCUkVfU1NMX1BBVFRFUk4gPSAvXFwvQ049KFteXFwvXSspLzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuY29uc3QgT1BFTl9TU0xfUEFUVEVSTiA9IC8sXFxzQ05cXHM9XFxzKFteLF0rKS87XG5cbmZ1bmN0aW9uIHBhcnNlQ29tbW9uTmFtZSAoc3RyaW5nQ2VydGlmaWNhdGUpIHtcbiAgY29uc3QgcmVzdWx0ID0gW0xJQlJFX1NTTF9QQVRURVJOLCBPUEVOX1NTTF9QQVRURVJOXS5yZWR1Y2UoKGFjYywgcikgPT4ge1xuICAgIGlmIChhY2MpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuICAgIGNvbnN0IG1hdGNoID0gci5leGVjKHN0cmluZ0NlcnRpZmljYXRlKTtcbiAgICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV07XG4gIH0sIG51bGwpO1xuICBpZiAoIXJlc3VsdCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlcmUgaXMgbm8gY29tbW9uIG5hbWUgdmFsdWUgaW4gJyR7c3RyaW5nQ2VydGlmaWNhdGV9JyBvdXRwdXRgKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBBcHBsZSdzIG92ZXItdGhlLWFpciBjb25maWd1cmF0aW9uIHByb2ZpbGVcbiAqIGZvciBjZXJ0aWZpY2F0ZSBkZXBsb3ltZW50IGJhc2VkIG9uIHRoZSBnaXZlbiBQRU0gY2VydGlmaWNhdGUgY29udGVudC5cbiAqIFJlYWQgaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2xpYnJhcnkvY29udGVudC9kb2N1bWVudGF0aW9uL05ldHdvcmtpbmdJbnRlcm5ldC9Db25jZXB0dWFsL2lQaG9uZU9UQUNvbmZpZ3VyYXRpb24vSW50cm9kdWN0aW9uL0ludHJvZHVjdGlvbi5odG1sXG4gKiBmb3IgbW9yZSBkZXRhaWxzIG9uIHN1Y2ggcHJvZmlsZXMuXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ9IGNlcnRCdWZmZXIgLSBUaGUgYWN0dWFsIGNvbnRlbnQgb2YgUEVNIGNlcnRpZmljYXRlIGVuY29kZWQgaW50byBOb2RlSlMgYnVmZmVyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tbW9uTmFtZSAtIENlcnRpZmljYXRlJ3MgY29tbW9uIG5hbWVcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBlbmNvZGVkIHN0cnVjdHVyZSBvZiB0aGUgZ2l2ZW4gY2VydGlmaWNhdGUsIHdoaWNoIGlzIHJlYWR5IHRvIGJlIHBhc3NlZFxuICogYXMgYW4gYXJndW1lbnQgdG8gcGxpc3QgYnVpbGRlclxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBnaXZlbiBjZXJ0aWZpY2F0ZSBjYW5ub3QgYmUgcGFyc2VkXG4gKi9cbmZ1bmN0aW9uIHRvTW9iaWxlQ29uZmlnIChjZXJ0QnVmZmVyLCBjb21tb25OYW1lKSB7XG4gIGNvbnN0IGdldFVVSUQgPSAoKSA9PiB1dGlsLnV1aWRWNCgpLnRvVXBwZXJDYXNlKCk7XG4gIGNvbnN0IGNvbnRlbnRVdWlkID0gZ2V0VVVJRCgpO1xuICByZXR1cm4ge1xuICAgIFBheWxvYWRDb250ZW50OiBbe1xuICAgICAgUGF5bG9hZENlcnRpZmljYXRlRmlsZU5hbWU6IGAke2NvbW1vbk5hbWV9LmNlcmAsXG4gICAgICBQYXlsb2FkQ29udGVudDogY2VydEJ1ZmZlcixcbiAgICAgIFBheWxvYWREZXNjcmlwdGlvbjogJ0FkZHMgYSBDQSByb290IGNlcnRpZmljYXRlJyxcbiAgICAgIFBheWxvYWREaXNwbGF5TmFtZTogY29tbW9uTmFtZSxcbiAgICAgIFBheWxvYWRJZGVudGlmaWVyOiBgY29tLmFwcGxlLnNlY3VyaXR5LnJvb3QuJHtjb250ZW50VXVpZH1gLFxuICAgICAgUGF5bG9hZFR5cGU6ICdjb20uYXBwbGUuc2VjdXJpdHkucm9vdCcsXG4gICAgICBQYXlsb2FkVVVJRDogY29udGVudFV1aWQsXG4gICAgICBQYXlsb2FkVmVyc2lvbjogMVxuICAgIH1dLFxuICAgIFBheWxvYWREaXNwbGF5TmFtZTogY29tbW9uTmFtZSxcbiAgICBQYXlsb2FkSWRlbnRpZmllcjogYCR7b3MuaG9zdG5hbWUoKS5zcGxpdCgnLicpWzBdfS4ke2dldFVVSUQoKX1gLFxuICAgIFBheWxvYWRSZW1vdmFsRGlzYWxsb3dlZDogZmFsc2UsXG4gICAgUGF5bG9hZFR5cGU6ICdDb25maWd1cmF0aW9uJyxcbiAgICBQYXlsb2FkVVVJRDogZ2V0VVVJRCgpLFxuICAgIFBheWxvYWRWZXJzaW9uOiAxXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNsaWNrRWxlbWVudCAoZHJpdmVyLCBsb2NhdG9yLCBvcHRpb25zID0ge30pIHtcbiAgbGV0IGVsZW1lbnQgPSBudWxsO1xuICBjb25zdCB7XG4gICAgdGltZW91dCA9IDUwMDAsXG4gICAgc2tpcElmSW52aXNpYmxlID0gZmFsc2VcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGxvb2t1cERlbGF5ID0gNTAwO1xuICB0cnkge1xuICAgIGVsZW1lbnQgPSBhd2FpdCByZXRyeUludGVydmFsKHRpbWVvdXQgPCBsb29rdXBEZWxheSA/IDEgOiB0aW1lb3V0IC8gbG9va3VwRGVsYXksIGxvb2t1cERlbGF5LFxuICAgICAgKCkgPT4gZHJpdmVyLmZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cyhsb2NhdG9yLnR5cGUsIGxvY2F0b3IudmFsdWUsIGZhbHNlKVxuICAgICk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChza2lwSWZJbnZpc2libGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCAke0pTT04uc3RyaW5naWZ5KGxvY2F0b3IpfSB3aXRoaW4gJHt0aW1lb3V0fW1zIHRpbWVvdXRgKTtcbiAgfVxuICBhd2FpdCBkcml2ZXIubmF0aXZlQ2xpY2soZWxlbWVudCk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpbnN0YWxsUHJlMTIyQ2VydGlmaWNhdGUgKGRyaXZlcikge1xuICAvLyBBY2NlcHQgU2FmYXJpIGFsZXJ0XG4gIGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIEJ1dHRvbi5BbGxvdywge1xuICAgIC8vIGNlcnRpZmljYXRlIGxvYWQgbWlnaHQgdGFrZSBzb21lIHRpbWUgb24gc2xvdyBtYWNoaW5lc1xuICAgIHRpbWVvdXQ6IDE1MDAwLFxuICB9KTtcbiAgLy8gV2FpdCB1bnRpbCBQcmVmZXJlbmNlcyBhcmUgb3BlbmVkXG4gIGF3YWl0IEIuZGVsYXkoMjAwMCk7XG5cbiAgLy8gR28gdGhyb3VnaCBQcmVmZXJlbmNlcyB3aXphcmRcbiAgaWYgKCFhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBCdXR0b24uSW5zdGFsbCwge1xuICAgIHNraXBJZkludmlzaWJsZTogdHJ1ZSxcbiAgfSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gV2UgbmVlZCB0byBjbGljayBJbnN0YWxsIGJ1dHRvbiBvbiB0d28gZGlmZmVyZW50IHRhYnNcbiAgLy8gVGhlIHNlY29uZCBvbmUgY29uZmlybXMgdGhlIHByZXZpb3VzXG4gIGF3YWl0IEIuZGVsYXkoMTUwMCk7XG4gIGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIEJ1dHRvbi5JbnN0YWxsKTtcbiAgLy8gQWNjZXB0IGFsZXJ0XG4gIGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIEFsZXJ0Lkluc3RhbGwpO1xuICAvLyBGaW5pc2ggYWRkaW5nIGNlcnRpZmljYXRlXG4gIGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIEJ1dHRvbi5Eb25lKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHRydXN0Q2VydGlmaWNhdGVJblByZWZlcmVuY2VzIChkcml2ZXIsIG5hbWUpIHtcbiAgYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwgU2V0dGluZ3MuR2VuZXJhbCk7XG4gIGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIFNldHRpbmdzLkFib3V0KTtcbiAgY29uc3Qgc3dpdGNoTG9jYXRvciA9IHtcbiAgICB0eXBlOiAnLWlvcyBjbGFzcyBjaGFpbicsXG4gICAgdmFsdWU6IGAqKi9YQ1VJRWxlbWVudFR5cGVDZWxsW1xcYGxhYmVsID09ICcke25hbWV9J1xcYF0vKiovWENVSUVsZW1lbnRUeXBlU3dpdGNoYCxcbiAgfTtcbiAgYXdhaXQgcmV0cnkoNSwgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGRyaXZlci5tb2JpbGVTd2lwZSh7XG4gICAgICBlbGVtZW50OiBhd2FpdCBkcml2ZXIuZmluZE5hdGl2ZUVsZW1lbnRPckVsZW1lbnRzKCdjbGFzcyBuYW1lJywgJ1hDVUlFbGVtZW50VHlwZVRhYmxlJywgZmFsc2UpLFxuICAgICAgZGlyZWN0aW9uOiAndXAnXG4gICAgfSk7XG4gICAgYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwgU2V0dGluZ3MuQ2VydGlmaWNhdGVfVHJ1c3RfU2V0dGluZ3MsIHtcbiAgICAgIHRpbWVvdXQ6IDUwMCxcbiAgICB9KTtcblxuICAgIGF3YWl0IGRyaXZlci5maW5kTmF0aXZlRWxlbWVudE9yRWxlbWVudHMoc3dpdGNoTG9jYXRvci50eXBlLCBzd2l0Y2hMb2NhdG9yLnZhbHVlLCBmYWxzZSk7XG4gIH0pO1xuICAvLyBPbmx5IGNsaWNrIHRoZSBzd2l0Y2ggaWYgaXQgaXMgc2V0IHRvIE9mZlxuICBpZiAoYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwge1xuICAgIHR5cGU6IHN3aXRjaExvY2F0b3IudHlwZSxcbiAgICB2YWx1ZTogYCR7c3dpdGNoTG9jYXRvci52YWx1ZX1bXFxgdmFsdWUgPT0gJzAnXFxgXWBcbiAgfSwge1xuICAgIHRpbWVvdXQ6IDEwMDAsXG4gICAgc2tpcElmSW52aXNpYmxlOiB0cnVlLFxuICB9KSkge1xuICAgIGF3YWl0IGRyaXZlci5wb3N0QWNjZXB0QWxlcnQoKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBpbnN0YWxsUG9zdDEyMkNlcnRpZmljYXRlIChkcml2ZXIsIG5hbWUpIHtcbiAgLy8gQWNjZXB0IFNhZmFyaSBhbGVydFxuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBCdXR0b24uQWxsb3csIHtcbiAgICAvLyBjZXJ0aWZpY2F0ZSBsb2FkIG1pZ2h0IHRha2Ugc29tZSB0aW1lIG9uIHNsb3cgbWFjaGluZXNcbiAgICB0aW1lb3V0OiAxNTAwMCxcbiAgfSk7XG4gIC8vIFdhaXQgZm9yIHRoZSBzZWNvbmQgYWxlcnRcbiAgYXdhaXQgQi5kZWxheSgyMDAwKTtcblxuICBhd2FpdCBkcml2ZXIucG9zdEFjY2VwdEFsZXJ0KCk7XG4gIGF3YWl0IGRyaXZlci5hY3RpdmF0ZUFwcCgnY29tLmFwcGxlLlByZWZlcmVuY2VzJyk7XG4gIGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIFNldHRpbmdzLkdlbmVyYWwpO1xuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBTZXR0aW5ncy5Qcm9maWxlKTtcbiAgLy8gU2VsZWN0IHRoZSB0YXJnZXQgY2VydFxuICBsZXQgaXNDZXJ0Rm91bmQgPSBmYWxzZTtcbiAgZm9yIChsZXQgc3dpcGVOdW0gPSAwOyBzd2lwZU51bSA8IDU7ICsrc3dpcGVOdW0pIHtcbiAgICBpZiAoYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwge1xuICAgICAgdHlwZTogJy1pb3MgY2xhc3MgY2hhaW4nLFxuICAgICAgdmFsdWU6IGAqKi9YQ1VJRWxlbWVudFR5cGVDZWxsW1xcYGxhYmVsID09ICcke25hbWV9J1xcYF1gLFxuICAgIH0sIHtcbiAgICAgIHRpbWVvdXQ6IDUwMCxcbiAgICAgIHNraXBJZkludmlzaWJsZTogdHJ1ZSxcbiAgICB9KSkge1xuICAgICAgaXNDZXJ0Rm91bmQgPSB0cnVlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgYXdhaXQgZHJpdmVyLm1vYmlsZVN3aXBlKHtcbiAgICAgIGVsZW1lbnQ6IGF3YWl0IGRyaXZlci5maW5kTmF0aXZlRWxlbWVudE9yRWxlbWVudHMoJ2NsYXNzIG5hbWUnLCAnWENVSUVsZW1lbnRUeXBlVGFibGUnLCBmYWxzZSksXG4gICAgICBkaXJlY3Rpb246ICd1cCdcbiAgICB9KTtcbiAgfVxuICBpZiAoIWlzQ2VydEZvdW5kKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAnJHtuYW1lfScgY2Fubm90IGJlIGZvdW5kIGluIHRoZSBjZXJ0aWZpY2F0ZXMgbGlzdGApO1xuICB9XG5cbiAgLy8gSW5zdGFsbCBvcHRpb24gaXMgb25seSB2aXNpYmxlIGlmIHRoZSBjZXJ0IGlzIG5vdCBpbnN0YWxsZWQgeWV0XG4gIGlmICghYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwgQnV0dG9uLkluc3RhbGwsIHtcbiAgICBza2lwSWZJbnZpc2libGU6IHRydWUsXG4gIH0pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGF3YWl0IEIuZGVsYXkoMTUwMCk7XG4gIC8vIENvbmZpcm0gdW50cnVzdGVkIGNlcnQgaW5zdGFsbFxuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBCdXR0b24uSW5zdGFsbCk7XG4gIC8vIEFjY2VwdCBhbGVydFxuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBBbGVydC5JbnN0YWxsKTtcbiAgLy8gRmluaXNoIGFkZGluZyBjZXJ0aWZpY2F0ZVxuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBCdXR0b24uRG9uZSk7XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ2VydGlmaWNhdGVJbnN0YWxsYXRpb25PcHRpb25zXG4gKlxuICogQHByb3BlcnR5IHshc3RyaW5nfSBjb250ZW50IC0gQmFzZTY0LWVuY29kZWQgY29udGVudCBvZiB0aGUgcHVibGljIGNlcnRpZmljYXRlXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGNvbW1vbk5hbWUgLSBDb21tb24gbmFtZSBvZiB0aGUgY2VydGlmaWNhdGUuIElmIHRoaXMgaXMgbm90IHNldFxuICogdGhlbiB0aGUgc2NyaXB0IHdpbGwgdHJ5IHRvIHBhcnNlIGl0IGZyb20gdGhlIGdpdmVuIGNlcnRpZmljYXRlIGNvbnRlbnQuXG4gKiBAcHJvcGVydHkgez9ib29sZWFufSBpc1Jvb3QgW3RydWVdIC0gVGhpcyBvcHRpb24gZGVmaW5lcyB3aGVyZSB0aGUgY2VydGlmaWNhdGUgc2hvdWxkIGJlXG4gKiBpbnN0YWxsZWQgdG86IGVpdGhlciBUcnVzdGVkIFJvb3QgU3RvcmUgKGB0cnVlYCwgdGhlIGRlZmF1bHQgb3B0aW9uKSBvclxuICogdGhlIEtleWNoYWluIChgZmFsc2VgKS4gT24gZW52aXJvbm1lbnRzIG90aGVyIHRoYW4gWGNvZGUgMTEuNCsgU2ltdWxhdG9yIHRoaXNcbiAqIG9wdGlvbiBpcyBpZ25vcmVkLlxuICovXG5cbi8qKlxuICogSW5zdGFsbHMgYSBjdXN0b20gY2VydGlmaWNhdGUgb250byB0aGUgZGV2aWNlLlxuICogU2luY2UgWGNvZGUgU0RLIDExLjQgQXBwbGUgaGFzIGFkZGVkIGEgZGVkaWNhdGVkIHNpbWN0bCBzdWJjb21tYW5kIHRvIHF1aWNrbHkgaGFuZGxlXG4gKiBjZXJ0aWZpY2F0ZXMgb24gU2ltdWxhdG9yIG92ZXIgQ0xJLlxuICogT24gcmVhbCBkZXZpY2VzIG9yIHNpbXVsYXRvcnMgYmVmb3JlIFhjb2RlIDExLjQgU0RLXG4gKiBBcHBsZSBwcm92aWRlcyBubyBvZmZpY2lhbCB3YXkgdG8gZG8gaXQgdmlhIHRoZSBjb21tYW5kIGxpbmUuXG4gKiBJbiBzdWNoIGNhc2UgKGFuZCBhbHNvIGFzIGEgZmFsbGJhY2sgaWYgQ0xJIHNldHVwIGZhaWxzKVxuICogdGhpcyBtZXRob2QgdHJpZXMgdG8gd3JhcCB0aGUgY2VydGlmaWNhdGUgaW50byAubW9iaWxlY29uZmlnIGZvcm1hdFxuICogYW5kIHRoZW4gZGVwbG95cyB0aGUgd3JhcHBlZCBmaWxlIHRvIHRoZSBpbnRlcm5hbCBIVFRQIHNlcnZlcixcbiAqIHNvIG9uZSBjYW4gb3BlbiBpdCB2aWEgbW9iaWxlIFNhZmFyaS5cbiAqIFRoZW4gdGhlIGFsZ29yaXRobSBnb2VzIHRocm91Z2ggdGhlIHByb2ZpbGUgaW5zdGFsbGF0aW9uIHByb2NlZHVyZSBieVxuICogY2xpY2tpbmcgdGhlIG5lY2Vzc2FyeSBidXR0b25zIHVzaW5nIFdlYkRyaXZlckFnZW50LlxuICpcbiAqIEBwYXJhbSB7Q2VydGlmaWNhdGVJbnN0YWxsYXRpb25PcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7P3N0cmluZ30gVGhlIGNvbnRlbnQgb2YgdGhlIGdlbmVyYXRlZCAubW9iaWxlY29uZmlnIGZpbGUgYXNcbiAqIGJhc2U2NC1lbmNvZGVkIHN0cmluZy4gVGhpcyBjb25maWcgbWlnaHQgYmUgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuXG4gKiBJZiB0aGUgY2VydGlmaWNhdGUgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHNldCB2aWEgQ0xJIHRoZW4gbm90aGluZyBpcyByZXR1cm5lZC5cbiAqL1xuY29tbWFuZHMubW9iaWxlSW5zdGFsbENlcnRpZmljYXRlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlSW5zdGFsbENlcnRpZmljYXRlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGNvbnRlbnQsXG4gICAgY29tbW9uTmFtZSxcbiAgICBpc1Jvb3QgPSB0cnVlLFxuICB9ID0gb3B0cztcbiAgaWYgKF8uaXNFbXB0eShjb250ZW50KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2VydGlmaWNhdGUgY29udGVudCBzaG91bGQgbm90IGJlIGVtcHR5Jyk7XG4gIH1cblxuICBpZiAodGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBpc1Jvb3QgPyAnYWRkUm9vdENlcnRpZmljYXRlJyA6ICdhZGRDZXJ0aWZpY2F0ZSc7XG4gICAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLnNpbWN0bFttZXRob2ROYW1lXShcbiAgICAgICAgQnVmZmVyLmZyb20oY29udGVudCwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCksIHtyYXc6IHRydWV9XG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy5kZWJ1ZyhlKTtcbiAgICAgIGxvZy5pbmZvKGBUaGUgY2VydGlmaWNhdGUgY2Fubm90IGJlIGluc3RhbGxlZCB2aWEgQ0xJLiBgICtcbiAgICAgICAgYEZhbGxpbmcgYmFjayB0byBVSS1iYXNlZCBkZXBsb3ltZW50YCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBQeWlkZXZpY2UodGhpcy5vcHRzLnVkaWQpO1xuICAgIGlmIChhd2FpdCBjbGllbnQuYXNzZXJ0RXhpc3RzKGZhbHNlKSkge1xuICAgICAgYXdhaXQgY2xpZW50Lmluc3RhbGxQcm9maWxlKHtwYXlsb2FkOiBCdWZmZXIuZnJvbShjb250ZW50LCAnYmFzZTY0Jyl9KTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nLmluZm8oJ3B5aWRldmljZSBpcyBub3QgaW5zdGFsbGVkIG9uIHlvdXIgc3lzdGVtLiAnICtcbiAgICAgICAgJ0ZhbGxpbmcgYmFjayB0byB0aGUgKHNsb3cpIFVJLWJhc2VkIGluc3RhbGxhdGlvbicpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgY29uc3QgdG1wUG9ydCA9IGF3YWl0IGZpbmRBUG9ydE5vdEluVXNlKEhPU1RfUE9SVF9SQU5HRVswXSwgSE9TVF9QT1JUX1JBTkdFWzFdKTtcbiAgY29uc3QgY29uZmlnTmFtZSA9IGBhcHBpdW0uJHtDT05GSUdfRVhURU5TSU9OfWA7XG4gIGNvbnN0IGNvbmZpZ1BhdGggPSBwYXRoLnJlc29sdmUodG1wUm9vdCwgY29uZmlnTmFtZSk7XG4gIGNvbnN0IHRtcFNlcnZlciA9IGh0dHAuY3JlYXRlU2VydmVyKGFzeW5jIGZ1bmN0aW9uIChfLCByZXMpIHtcbiAgICBjb25zdCBjb25maWdGaWxlID0gYXdhaXQgZnMucmVhZEZpbGUoY29uZmlnUGF0aCk7XG4gICAgcmVzLmVuZChjb25maWdGaWxlKTtcbiAgfSk7XG4gIHRyeSB7XG4gICAgY29uc3QgY2VydEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGNvbnRlbnQsICdiYXNlNjQnKTtcbiAgICBjb25zdCBjbiA9IGNvbW1vbk5hbWUgfHwgYXdhaXQgZXh0cmFjdENvbW1vbk5hbWUoY2VydEJ1ZmZlcik7XG4gICAgY29uc3QgbW9iaWxlQ29uZmlnID0gdG9Nb2JpbGVDb25maWcoY2VydEJ1ZmZlciwgY24pO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBwbGlzdC51cGRhdGVQbGlzdEZpbGUoY29uZmlnUGF0aCwgbW9iaWxlQ29uZmlnLCBmYWxzZSwgZmFsc2UpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc3RvcmUgdGhlIGdlbmVyYXRlZCBjb25maWcgYXMgJyR7Y29uZmlnUGF0aH0nLiBgICtcbiAgICAgICAgICAgICAgICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGhvc3QgPSBvcy5ob3N0bmFtZSgpO1xuICAgICAgY29uc3QgY2VydFVybCA9IGBodHRwOi8vJHtob3N0fToke3RtcFBvcnR9LyR7Y29uZmlnTmFtZX1gO1xuICAgICAgYXdhaXQgdG1wU2VydmVyLmxpc3Rlbih0bXBQb3J0KTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gKGF3YWl0IGNoZWNrUG9ydFN0YXR1cyh0bXBQb3J0LCBob3N0KSkgPT09ICdvcGVuJztcbiAgICAgICAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICB3YWl0TXM6IFRNUFNFUlZFUl9TVEFSVFVQX1RJTUVPVVQsXG4gICAgICAgICAgaW50ZXJ2YWxNczogMzAwLFxuICAgICAgICB9KTtcbiAgICAgICAgbG9nLmRlYnVnKGBUaGUgdGVtcG9yYXJ5IHdlYiBzZXJ2ZXIgaXMgcnVubmluZyBhdCBodHRwOi8vJHtob3N0fToke3RtcFBvcnR9YCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHRlbXBvcmFyeSB3ZWIgc2VydmVyIGNhbm5vdCBiZSBzdGFydGVkIGF0IGh0dHA6Ly8ke2hvc3R9OiR7dG1wUG9ydH0uYCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvdXJsJywgJ1BPU1QnLCB7dXJsOiBjZXJ0VXJsfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGlmICh0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgICAgICAgICAvLyBUaGUgY29tbWFuZCBhYm92ZSBkb2VzIG5vdCBhbHdheXMgd29yayBvbiByZWFsIGRldmljZXNcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0VXJsKGNlcnRVcmwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLm9wZW5VcmwoY2VydFVybCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBpc0NlcnRBbHJlYWR5SW5zdGFsbGVkID0gZmFsc2U7XG4gICAgICBpZiAodXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJz49JywgJzEyLjInKSkge1xuICAgICAgICBpZiAoYXdhaXQgaW5zdGFsbFBvc3QxMjJDZXJ0aWZpY2F0ZSh0aGlzLCBjbikpIHtcbiAgICAgICAgICBhd2FpdCBjbGlja0VsZW1lbnQodGhpcywgU2V0dGluZ3MuUHJvZmlsZSk7XG4gICAgICAgICAgYXdhaXQgdHJ1c3RDZXJ0aWZpY2F0ZUluUHJlZmVyZW5jZXModGhpcywgY24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlzQ2VydEFscmVhZHlJbnN0YWxsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoYXdhaXQgaW5zdGFsbFByZTEyMkNlcnRpZmljYXRlKHRoaXMpKSB7XG4gICAgICAgICAgYXdhaXQgY2xpY2tFbGVtZW50KHRoaXMsIEJ1dHRvbi5SZXR1cm5fdG9fU2V0dGluZ3MpO1xuICAgICAgICAgIGF3YWl0IHRydXN0Q2VydGlmaWNhdGVJblByZWZlcmVuY2VzKHRoaXMsIGNuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpc0NlcnRBbHJlYWR5SW5zdGFsbGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzQ2VydEFscmVhZHlJbnN0YWxsZWQpIHtcbiAgICAgICAgbG9nLmluZm8oYEl0IGxvb2tzIGxpa2UgdGhlICcke2NufScgY2VydGlmaWNhdGUgaGFzIGJlZW4gYWxyZWFkeSBhZGRlZCB0byB0aGUgQ0Egcm9vdGApO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAodGhpcy5vcHRzLmJ1bmRsZUlkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hY3RpdmF0ZUFwcCh0aGlzLm9wdHMuYnVuZGxlSWQpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgbG9nLndhcm4oYENhbm5vdCByZXN0b3JlIHRoZSBhcHBsaWNhdGlvbiAnJHt0aGlzLm9wdHMuYnVuZGxlSWR9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIChhd2FpdCB1dGlsLnRvSW5NZW1vcnlCYXNlNjQoY29uZmlnUGF0aCkpLnRvU3RyaW5nKCk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgdG1wU2VydmVyLmNsb3NlKCk7XG4gICAgYXdhaXQgZnMucmltcmFmKHRtcFJvb3QpO1xuICB9XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzKTtcbmV4cG9ydCB7IGNvbW1hbmRzLCBwYXJzZUNvbW1vbk5hbWUgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9jZXJ0aWZpY2F0ZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
@@ -21,9 +21,15 @@ var _path = _interopRequireDefault(require("path"));
21
21
 
22
22
  var _lodash = _interopRequireDefault(require("lodash"));
23
23
 
24
+ var _pyIosDeviceClient = _interopRequireDefault(require("../py-ios-device-client"));
25
+
26
+ const REAL_DEVICE_MAGIC = '3620bbb0-fb9f-4b62-a668-896f2edc4d88';
27
+ const MAGIC_SEP = '/';
28
+
24
29
  class IOSCrashLog {
25
30
  constructor(opts = {}) {
26
31
  this.udid = opts.udid;
32
+ this.pyideviceClient = this.udid ? new _pyIosDeviceClient.default(this.udid) : null;
27
33
  const logDir = opts.udid ? _path.default.resolve(process.env.HOME, 'Library', 'Logs', 'CrashReporter', 'MobileDevice') : _path.default.resolve(process.env.HOME, 'Library', 'Logs', 'DiagnosticReports');
28
34
  this.logDir = logDir || _path.default.resolve(process.env.HOME || '/', 'Library', 'Logs', 'DiagnosticReports');
29
35
  this.prevLogs = [];
@@ -32,7 +38,11 @@ class IOSCrashLog {
32
38
  this.sim = opts.sim;
33
39
  }
34
40
 
35
- async getCrashes() {
41
+ async _gatherFromRealDevice() {
42
+ if (await this.pyideviceClient.assertExists(false)) {
43
+ return (await this.pyideviceClient.listCrashes()).map(x => `${REAL_DEVICE_MAGIC}${MAGIC_SEP}${x}`);
44
+ }
45
+
36
46
  let crashLogsRoot = this.logDir;
37
47
 
38
48
  if (this.udid) {
@@ -49,11 +59,19 @@ class IOSCrashLog {
49
59
  const foundFiles = await _appiumSupport.fs.glob(`${crashLogsRoot}/**/*.crash`, {
50
60
  strict: false
51
61
  });
62
+ return foundFiles;
63
+ }
52
64
 
53
- if (this.udid) {
54
- return foundFiles;
65
+ async _gatherFromSimulator() {
66
+ if (!(await _appiumSupport.fs.exists(this.logDir))) {
67
+ _logger.default.debug(`Crash reports root '${this.logDir}' does not exist. Got nothing to gather.`);
68
+
69
+ return [];
55
70
  }
56
71
 
72
+ const foundFiles = await _appiumSupport.fs.glob(`${this.logDir}/**/*.crash`, {
73
+ strict: false
74
+ });
57
75
  return await _bluebird.default.filter(foundFiles, async x => {
58
76
  try {
59
77
  const content = await _appiumSupport.fs.readFile(x, 'utf8');
@@ -64,6 +82,10 @@ class IOSCrashLog {
64
82
  });
65
83
  }
66
84
 
85
+ async getCrashes() {
86
+ return this.udid ? await this._gatherFromRealDevice() : await this._gatherFromSimulator();
87
+ }
88
+
67
89
  async startCapture() {
68
90
  this.prevLogs = await this.getCrashes();
69
91
  }
@@ -88,14 +110,34 @@ class IOSCrashLog {
88
110
  }
89
111
 
90
112
  async filesToJSON(paths) {
91
- return await _bluebird.default.map(paths, async fullPath => {
92
- const stat = await _appiumSupport.fs.stat(fullPath);
93
- return {
94
- timestamp: stat.ctime.getTime(),
95
- level: 'ALL',
96
- message: await _appiumSupport.fs.readFile(fullPath, 'utf8')
97
- };
98
- });
113
+ const tmpRoot = await _appiumSupport.tempDir.openDir();
114
+
115
+ try {
116
+ return (await _bluebird.default.map(paths, async fullPath => {
117
+ if (_lodash.default.includes(fullPath, REAL_DEVICE_MAGIC)) {
118
+ const fileName = _lodash.default.last(fullPath.split(MAGIC_SEP));
119
+
120
+ try {
121
+ await this.pyideviceClient.exportCrash(fileName, tmpRoot);
122
+ } catch (e) {
123
+ _logger.default.warn(`Cannot export the crash report '${fileName}'. Skipping it. ` + `Original error: ${e.message}`);
124
+
125
+ return;
126
+ }
127
+
128
+ fullPath = _path.default.join(tmpRoot, fileName);
129
+ }
130
+
131
+ const stat = await _appiumSupport.fs.stat(fullPath);
132
+ return {
133
+ timestamp: stat.ctime.getTime(),
134
+ level: 'ALL',
135
+ message: await _appiumSupport.fs.readFile(fullPath, 'utf8')
136
+ };
137
+ })).filter(Boolean);
138
+ } finally {
139
+ await _appiumSupport.fs.rimraf(tmpRoot);
140
+ }
99
141
  }
100
142
 
101
143
  }
@@ -105,4 +147,4 @@ var _default = IOSCrashLog;
105
147
  exports.default = _default;require('source-map-support').install();
106
148
 
107
149
 
108
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kZXZpY2UtbG9nL2lvcy1jcmFzaC1sb2cuanMiXSwibmFtZXMiOlsiSU9TQ3Jhc2hMb2ciLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJ1ZGlkIiwibG9nRGlyIiwicGF0aCIsInJlc29sdmUiLCJwcm9jZXNzIiwiZW52IiwiSE9NRSIsInByZXZMb2dzIiwibG9nc1NpbmNlTGFzdFJlcXVlc3QiLCJwaG9uZU5hbWUiLCJzaW0iLCJnZXRDcmFzaGVzIiwiY3Jhc2hMb2dzUm9vdCIsInV0aWxpdGllcyIsImdldERldmljZU5hbWUiLCJmcyIsImV4aXN0cyIsImxvZyIsImRlYnVnIiwiZm91bmRGaWxlcyIsImdsb2IiLCJzdHJpY3QiLCJCIiwiZmlsdGVyIiwieCIsImNvbnRlbnQiLCJyZWFkRmlsZSIsInRvVXBwZXJDYXNlIiwiaW5jbHVkZXMiLCJlcnIiLCJzdGFydENhcHR1cmUiLCJzdG9wQ2FwdHVyZSIsImdldExvZ3MiLCJjcmFzaEZpbGVzIiwiZGlmZiIsIl8iLCJkaWZmZXJlbmNlIiwidW5pb24iLCJmaWxlc1RvSlNPTiIsImdldEFsbExvZ3MiLCJsb2dGaWxlcyIsInBhdGhzIiwibWFwIiwiZnVsbFBhdGgiLCJzdGF0IiwidGltZXN0YW1wIiwiY3RpbWUiLCJnZXRUaW1lIiwibGV2ZWwiLCJtZXNzYWdlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLFdBQU4sQ0FBa0I7QUFDaEJDLEVBQUFBLFdBQVcsQ0FBRUMsSUFBSSxHQUFHLEVBQVQsRUFBYTtBQUN0QixTQUFLQyxJQUFMLEdBQVlELElBQUksQ0FBQ0MsSUFBakI7QUFDQSxVQUFNQyxNQUFNLEdBQUdGLElBQUksQ0FBQ0MsSUFBTCxHQUNYRSxjQUFLQyxPQUFMLENBQWFDLE9BQU8sQ0FBQ0MsR0FBUixDQUFZQyxJQUF6QixFQUErQixTQUEvQixFQUEwQyxNQUExQyxFQUFrRCxlQUFsRCxFQUFtRSxjQUFuRSxD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QixXQUFPLE1BQU1uQixrQkFBRW9CLEdBQUYsQ0FBTUQsS0FBTixFQUFhLE1BQU9FLFFBQVAsSUFBb0I7QUFDNUMsWUFBTUMsSUFBSSxHQUFHLE1BQU03QixrQkFBRzZCLElBQUgsQ0FBUUQsUUFBUixDQUFuQjtBQUNBLGFBQU87QUFDTEUsUUFBQUEsU0FBUyxFQUFFRCxJQUFJLENBQUNFLEtBQUwsQ0FBV0MsT0FBWCxFQUROO0FBRUxDLFFBQUFBLEtBQUssRUFBRSxLQUZGO0FBR0xDLFFBQUFBLE9BQU8sRUFBRSxNQUFNbEMsa0JBQUdXLFFBQUgsQ0FBWWlCLFFBQVosRUFBc0IsTUFBdEI7QUFIVixPQUFQO0FBS0QsS0FQWSxDQUFiO0FBUUQ7O0FBdkVlOzs7ZUEyRUg5QyxXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZnMgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyB1dGlsaXRpZXMgfSBmcm9tICdhcHBpdW0taW9zLWRldmljZSc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cblxuY2xhc3MgSU9TQ3Jhc2hMb2cge1xuICBjb25zdHJ1Y3RvciAob3B0cyA9IHt9KSB7XG4gICAgdGhpcy51ZGlkID0gb3B0cy51ZGlkO1xuICAgIGNvbnN0IGxvZ0RpciA9IG9wdHMudWRpZFxuICAgICAgPyBwYXRoLnJlc29sdmUocHJvY2Vzcy5lbnYuSE9NRSwgJ0xpYnJhcnknLCAnTG9ncycsICdDcmFzaFJlcG9ydGVyJywgJ01vYmlsZURldmljZScpXG4gICAgICA6IHBhdGgucmVzb2x2ZShwcm9jZXNzLmVudi5IT01FLCAnTGlicmFyeScsICdMb2dzJywgJ0RpYWdub3N0aWNSZXBvcnRzJyk7XG4gICAgdGhpcy5sb2dEaXIgPSBsb2dEaXJcbiAgICAgIHx8IHBhdGgucmVzb2x2ZShwcm9jZXNzLmVudi5IT01FIHx8ICcvJywgJ0xpYnJhcnknLCAnTG9ncycsICdEaWFnbm9zdGljUmVwb3J0cycpO1xuICAgIHRoaXMucHJldkxvZ3MgPSBbXTtcbiAgICB0aGlzLmxvZ3NTaW5jZUxhc3RSZXF1ZXN0ID0gW107XG4gICAgdGhpcy5waG9uZU5hbWUgPSBudWxsO1xuICAgIHRoaXMuc2ltID0gb3B0cy5zaW07XG4gIH1cblxuICBhc3luYyBnZXRDcmFzaGVzICgpIHtcbiAgICBsZXQgY3Jhc2hMb2dzUm9vdCA9IHRoaXMubG9nRGlyO1xuICAgIGlmICh0aGlzLnVkaWQpIHtcbiAgICAgIHRoaXMucGhvbmVOYW1lID0gdGhpcy5waG9uZU5hbWUgfHwgYXdhaXQgdXRpbGl0aWVzLmdldERldmljZU5hbWUodGhpcy51ZGlkKTtcbiAgICAgIGNyYXNoTG9nc1Jvb3QgPSBwYXRoLnJlc29sdmUoY3Jhc2hMb2dzUm9vdCwgdGhpcy5waG9uZU5hbWUpO1xuICAgIH1cbiAgICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhjcmFzaExvZ3NSb290KSkge1xuICAgICAgbG9nLmRlYnVnKGBDcmFzaCByZXBvcnRzIHJvb3QgJyR7Y3Jhc2hMb2dzUm9vdH0nIGRvZXMgbm90IGV4aXN0LiBHb3Qgbm90aGluZyB0byBnYXRoZXIuYCk7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGZvdW5kRmlsZXMgPSBhd2FpdCBmcy5nbG9iKGAke2NyYXNoTG9nc1Jvb3R9LyoqLyouY3Jhc2hgLCB7XG4gICAgICBzdHJpY3Q6IGZhbHNlXG4gICAgfSk7XG4gICAgaWYgKHRoaXMudWRpZCkge1xuICAgICAgcmV0dXJuIGZvdW5kRmlsZXM7XG4gICAgfVxuICAgIC8vIEZvciBTaW11bGF0b3Igb25seSBpbmNsdWRlIGZpbGVzLCB0aGF0IGNvbnRhaW4gY3VycmVudCBVRElEXG4gICAgcmV0dXJuIGF3YWl0IEIuZmlsdGVyKGZvdW5kRmlsZXMsIGFzeW5jICh4KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUoeCwgJ3V0ZjgnKTtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQudG9VcHBlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnNpbS51ZGlkLnRvVXBwZXJDYXNlKCkpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0Q2FwdHVyZSAoKSB7XG4gICAgdGhpcy5wcmV2TG9ncyA9IGF3YWl0IHRoaXMuZ2V0Q3Jhc2hlcygpO1xuICB9XG5cbiAgYXN5bmMgc3RvcENhcHR1cmUgKCkge1xuICAgIC8vIG5lZWRlZCBmb3IgY29uc2lzdGVudCBBUEkgd2l0aCBvdGhlciBsb2dzXG4gIH1cblxuICBhc3luYyBnZXRMb2dzICgpIHtcbiAgICBsZXQgY3Jhc2hGaWxlcyA9IGF3YWl0IHRoaXMuZ2V0Q3Jhc2hlcygpO1xuICAgIGxldCBkaWZmID0gXy5kaWZmZXJlbmNlKGNyYXNoRmlsZXMsIHRoaXMucHJldkxvZ3MsIHRoaXMubG9nc1NpbmNlTGFzdFJlcXVlc3QpO1xuICAgIHRoaXMubG9nc1NpbmNlTGFzdFJlcXVlc3QgPSBfLnVuaW9uKHRoaXMubG9nc1NpbmNlTGFzdFJlcXVlc3QsIGRpZmYpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmZpbGVzVG9KU09OKGRpZmYpO1xuICB9XG5cbiAgYXN5bmMgZ2V0QWxsTG9ncyAoKSB7XG4gICAgbGV0IGNyYXNoRmlsZXMgPSBhd2FpdCB0aGlzLmdldENyYXNoZXMoKTtcbiAgICBsZXQgbG9nRmlsZXMgPSBfLmRpZmZlcmVuY2UoY3Jhc2hGaWxlcywgdGhpcy5wcmV2TG9ncyk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZmlsZXNUb0pTT04obG9nRmlsZXMpO1xuICB9XG5cbiAgYXN5bmMgZmlsZXNUb0pTT04gKHBhdGhzKSB7XG4gICAgcmV0dXJuIGF3YWl0IEIubWFwKHBhdGhzLCBhc3luYyAoZnVsbFBhdGgpID0+IHtcbiAgICAgIGNvbnN0IHN0YXQgPSBhd2FpdCBmcy5zdGF0KGZ1bGxQYXRoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpbWVzdGFtcDogc3RhdC5jdGltZS5nZXRUaW1lKCksXG4gICAgICAgIGxldmVsOiAnQUxMJyxcbiAgICAgICAgbWVzc2FnZTogYXdhaXQgZnMucmVhZEZpbGUoZnVsbFBhdGgsICd1dGY4JylcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IHsgSU9TQ3Jhc2hMb2cgfTtcbmV4cG9ydCBkZWZhdWx0IElPU0NyYXNoTG9nO1xuIl0sImZpbGUiOiJsaWIvZGV2aWNlLWxvZy9pb3MtY3Jhc2gtbG9nLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
150
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kZXZpY2UtbG9nL2lvcy1jcmFzaC1sb2cuanMiXSwibmFtZXMiOlsiUkVBTF9ERVZJQ0VfTUFHSUMiLCJNQUdJQ19TRVAiLCJJT1NDcmFzaExvZyIsImNvbnN0cnVjdG9yIiwib3B0cyIsInVkaWQiLCJweWlkZXZpY2VDbGllbnQiLCJQeWlkZXZpY2UiLCJsb2dEaXIiLCJwYXRoIiwicmVzb2x2ZSIsInByb2Nlc3MiLCJlbnYiLCJIT01FIiwicHJldkxvZ3MiLCJsb2dzU2luY2VMYXN0UmVxdWVzdCIsInBob25lTmFtZSIsInNpbSIsIl9nYXRoZXJGcm9tUmVhbERldmljZSIsImFzc2VydEV4aXN0cyIsImxpc3RDcmFzaGVzIiwibWFwIiwieCIsImNyYXNoTG9nc1Jvb3QiLCJ1dGlsaXRpZXMiLCJnZXREZXZpY2VOYW1lIiwiZnMiLCJleGlzdHMiLCJsb2ciLCJkZWJ1ZyIsImZvdW5kRmlsZXMiLCJnbG9iIiwic3RyaWN0IiwiX2dhdGhlckZyb21TaW11bGF0b3IiLCJCIiwiZmlsdGVyIiwiY29udGVudCIsInJlYWRGaWxlIiwidG9VcHBlckNhc2UiLCJpbmNsdWRlcyIsImVyciIsImdldENyYXNoZXMiLCJzdGFydENhcHR1cmUiLCJzdG9wQ2FwdHVyZSIsImdldExvZ3MiLCJjcmFzaEZpbGVzIiwiZGlmZiIsIl8iLCJkaWZmZXJlbmNlIiwidW5pb24iLCJmaWxlc1RvSlNPTiIsImdldEFsbExvZ3MiLCJsb2dGaWxlcyIsInBhdGhzIiwidG1wUm9vdCIsInRlbXBEaXIiLCJvcGVuRGlyIiwiZnVsbFBhdGgiLCJmaWxlTmFtZSIsImxhc3QiLCJzcGxpdCIsImV4cG9ydENyYXNoIiwiZSIsIndhcm4iLCJtZXNzYWdlIiwiam9pbiIsInN0YXQiLCJ0aW1lc3RhbXAiLCJjdGltZSIsImdldFRpbWUiLCJsZXZlbCIsIkJvb2xlYW4iLCJyaW1yYWYiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7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QVVsQixPQUFWLENBQU47QUFDRDtBQUNGOztBQTNHZTs7O2VBK0dIcEQsVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZzLCB0ZW1wRGlyIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHsgdXRpbGl0aWVzIH0gZnJvbSAnYXBwaXVtLWlvcy1kZXZpY2UnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFB5aWRldmljZSBmcm9tICcuLi9weS1pb3MtZGV2aWNlLWNsaWVudCc7XG5cbmNvbnN0IFJFQUxfREVWSUNFX01BR0lDID0gJzM2MjBiYmIwLWZiOWYtNGI2Mi1hNjY4LTg5NmYyZWRjNGQ4OCc7XG5jb25zdCBNQUdJQ19TRVAgPSAnLyc7XG5cblxuY2xhc3MgSU9TQ3Jhc2hMb2cge1xuICBjb25zdHJ1Y3RvciAob3B0cyA9IHt9KSB7XG4gICAgdGhpcy51ZGlkID0gb3B0cy51ZGlkO1xuICAgIHRoaXMucHlpZGV2aWNlQ2xpZW50ID0gdGhpcy51ZGlkID8gbmV3IFB5aWRldmljZSh0aGlzLnVkaWQpIDogbnVsbDtcbiAgICBjb25zdCBsb2dEaXIgPSBvcHRzLnVkaWRcbiAgICAgID8gcGF0aC5yZXNvbHZlKHByb2Nlc3MuZW52LkhPTUUsICdMaWJyYXJ5JywgJ0xvZ3MnLCAnQ3Jhc2hSZXBvcnRlcicsICdNb2JpbGVEZXZpY2UnKVxuICAgICAgOiBwYXRoLnJlc29sdmUocHJvY2Vzcy5lbnYuSE9NRSwgJ0xpYnJhcnknLCAnTG9ncycsICdEaWFnbm9zdGljUmVwb3J0cycpO1xuICAgIHRoaXMubG9nRGlyID0gbG9nRGlyXG4gICAgICB8fCBwYXRoLnJlc29sdmUocHJvY2Vzcy5lbnYuSE9NRSB8fCAnLycsICdMaWJyYXJ5JywgJ0xvZ3MnLCAnRGlhZ25vc3RpY1JlcG9ydHMnKTtcbiAgICB0aGlzLnByZXZMb2dzID0gW107XG4gICAgdGhpcy5sb2dzU2luY2VMYXN0UmVxdWVzdCA9IFtdO1xuICAgIHRoaXMucGhvbmVOYW1lID0gbnVsbDtcbiAgICB0aGlzLnNpbSA9IG9wdHMuc2ltO1xuICB9XG5cbiAgYXN5bmMgX2dhdGhlckZyb21SZWFsRGV2aWNlICgpIHtcbiAgICBpZiAoYXdhaXQgdGhpcy5weWlkZXZpY2VDbGllbnQuYXNzZXJ0RXhpc3RzKGZhbHNlKSkge1xuICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLnB5aWRldmljZUNsaWVudC5saXN0Q3Jhc2hlcygpKVxuICAgICAgICAubWFwKCh4KSA9PiBgJHtSRUFMX0RFVklDRV9NQUdJQ30ke01BR0lDX1NFUH0ke3h9YCk7XG4gICAgfVxuXG4gICAgbGV0IGNyYXNoTG9nc1Jvb3QgPSB0aGlzLmxvZ0RpcjtcbiAgICBpZiAodGhpcy51ZGlkKSB7XG4gICAgICB0aGlzLnBob25lTmFtZSA9IHRoaXMucGhvbmVOYW1lIHx8IGF3YWl0IHV0aWxpdGllcy5nZXREZXZpY2VOYW1lKHRoaXMudWRpZCk7XG4gICAgICBjcmFzaExvZ3NSb290ID0gcGF0aC5yZXNvbHZlKGNyYXNoTG9nc1Jvb3QsIHRoaXMucGhvbmVOYW1lKTtcbiAgICB9XG4gICAgaWYgKCFhd2FpdCBmcy5leGlzdHMoY3Jhc2hMb2dzUm9vdCkpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgQ3Jhc2ggcmVwb3J0cyByb290ICcke2NyYXNoTG9nc1Jvb3R9JyBkb2VzIG5vdCBleGlzdC4gR290IG5vdGhpbmcgdG8gZ2F0aGVyLmApO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBmb3VuZEZpbGVzID0gYXdhaXQgZnMuZ2xvYihgJHtjcmFzaExvZ3NSb290fS8qKi8qLmNyYXNoYCwge1xuICAgICAgc3RyaWN0OiBmYWxzZVxuICAgIH0pO1xuICAgIHJldHVybiBmb3VuZEZpbGVzO1xuICB9XG5cbiAgYXN5bmMgX2dhdGhlckZyb21TaW11bGF0b3IgKCkge1xuICAgIGlmICghYXdhaXQgZnMuZXhpc3RzKHRoaXMubG9nRGlyKSkge1xuICAgICAgbG9nLmRlYnVnKGBDcmFzaCByZXBvcnRzIHJvb3QgJyR7dGhpcy5sb2dEaXJ9JyBkb2VzIG5vdCBleGlzdC4gR290IG5vdGhpbmcgdG8gZ2F0aGVyLmApO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBmb3VuZEZpbGVzID0gYXdhaXQgZnMuZ2xvYihgJHt0aGlzLmxvZ0Rpcn0vKiovKi5jcmFzaGAsIHtcbiAgICAgIHN0cmljdDogZmFsc2VcbiAgICB9KTtcbiAgICAvLyBGb3IgU2ltdWxhdG9yIG9ubHkgaW5jbHVkZSBmaWxlcywgdGhhdCBjb250YWluIGN1cnJlbnQgVURJRFxuICAgIHJldHVybiBhd2FpdCBCLmZpbHRlcihmb3VuZEZpbGVzLCBhc3luYyAoeCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKHgsICd1dGY4Jyk7XG4gICAgICAgIHJldHVybiBjb250ZW50LnRvVXBwZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zaW0udWRpZC50b1VwcGVyQ2FzZSgpKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBnZXRDcmFzaGVzICgpIHtcbiAgICByZXR1cm4gdGhpcy51ZGlkXG4gICAgICA/IGF3YWl0IHRoaXMuX2dhdGhlckZyb21SZWFsRGV2aWNlKClcbiAgICAgIDogYXdhaXQgdGhpcy5fZ2F0aGVyRnJvbVNpbXVsYXRvcigpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRDYXB0dXJlICgpIHtcbiAgICB0aGlzLnByZXZMb2dzID0gYXdhaXQgdGhpcy5nZXRDcmFzaGVzKCk7XG4gIH1cblxuICBhc3luYyBzdG9wQ2FwdHVyZSAoKSB7XG4gICAgLy8gbmVlZGVkIGZvciBjb25zaXN0ZW50IEFQSSB3aXRoIG90aGVyIGxvZ3NcbiAgfVxuXG4gIGFzeW5jIGdldExvZ3MgKCkge1xuICAgIGxldCBjcmFzaEZpbGVzID0gYXdhaXQgdGhpcy5nZXRDcmFzaGVzKCk7XG4gICAgbGV0IGRpZmYgPSBfLmRpZmZlcmVuY2UoY3Jhc2hGaWxlcywgdGhpcy5wcmV2TG9ncywgdGhpcy5sb2dzU2luY2VMYXN0UmVxdWVzdCk7XG4gICAgdGhpcy5sb2dzU2luY2VMYXN0UmVxdWVzdCA9IF8udW5pb24odGhpcy5sb2dzU2luY2VMYXN0UmVxdWVzdCwgZGlmZik7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZmlsZXNUb0pTT04oZGlmZik7XG4gIH1cblxuICBhc3luYyBnZXRBbGxMb2dzICgpIHtcbiAgICBsZXQgY3Jhc2hGaWxlcyA9IGF3YWl0IHRoaXMuZ2V0Q3Jhc2hlcygpO1xuICAgIGxldCBsb2dGaWxlcyA9IF8uZGlmZmVyZW5jZShjcmFzaEZpbGVzLCB0aGlzLnByZXZMb2dzKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5maWxlc1RvSlNPTihsb2dGaWxlcyk7XG4gIH1cblxuICBhc3luYyBmaWxlc1RvSlNPTiAocGF0aHMpIHtcbiAgICBjb25zdCB0bXBSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoYXdhaXQgQi5tYXAocGF0aHMsIGFzeW5jIChmdWxsUGF0aCkgPT4ge1xuICAgICAgICBpZiAoXy5pbmNsdWRlcyhmdWxsUGF0aCwgUkVBTF9ERVZJQ0VfTUFHSUMpKSB7XG4gICAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBfLmxhc3QoZnVsbFBhdGguc3BsaXQoTUFHSUNfU0VQKSk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucHlpZGV2aWNlQ2xpZW50LmV4cG9ydENyYXNoKGZpbGVOYW1lLCB0bXBSb290KTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBsb2cud2FybihgQ2Fubm90IGV4cG9ydCB0aGUgY3Jhc2ggcmVwb3J0ICcke2ZpbGVOYW1lfScuIFNraXBwaW5nIGl0LiBgICtcbiAgICAgICAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZnVsbFBhdGggPSBwYXRoLmpvaW4odG1wUm9vdCwgZmlsZU5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXQgPSBhd2FpdCBmcy5zdGF0KGZ1bGxQYXRoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0aW1lc3RhbXA6IHN0YXQuY3RpbWUuZ2V0VGltZSgpLFxuICAgICAgICAgIGxldmVsOiAnQUxMJyxcbiAgICAgICAgICBtZXNzYWdlOiBhd2FpdCBmcy5yZWFkRmlsZShmdWxsUGF0aCwgJ3V0ZjgnKVxuICAgICAgICB9O1xuICAgICAgfSkpLmZpbHRlcihCb29sZWFuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZnMucmltcmFmKHRtcFJvb3QpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgeyBJT1NDcmFzaExvZyB9O1xuZXhwb3J0IGRlZmF1bHQgSU9TQ3Jhc2hMb2c7XG4iXSwiZmlsZSI6ImxpYi9kZXZpY2UtbG9nL2lvcy1jcmFzaC1sb2cuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==