appium-espresso-driver 2.2.2 → 2.2.3
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/build/index.js +1 -1
- package/build/lib/commands/execute.js +1 -1
- package/build/lib/commands/general.js +1 -1
- package/build/lib/commands/idling-resources.js +1 -1
- package/build/lib/commands/index.js +1 -1
- package/build/lib/commands/services.js +1 -1
- package/build/lib/desired-caps.js +1 -1
- package/build/lib/driver.js +1 -1
- package/build/lib/espresso-runner.js +1 -1
- package/build/lib/logger.js +1 -1
- package/build/lib/server-builder.js +1 -1
- package/build/lib/server.js +1 -1
- package/build/lib/utils.js +1 -1
- package/espresso-server/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk +0 -0
- package/npm-shrinkwrap.json +333 -115
- package/package.json +2 -2
package/build/lib/driver.js
CHANGED
|
@@ -546,4 +546,4 @@ var _default = EspressoDriver;
|
|
|
546
546
|
exports.default = _default;require('source-map-support').install();
|
|
547
547
|
|
|
548
548
|
|
|
549
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXIuanMiXSwibmFtZXMiOlsiaGVscGVycyIsImFuZHJvaWRIZWxwZXJzIiwiU1lTVEVNX1BPUlRfUkFOR0UiLCJERVZJQ0VfUE9SVCIsIk5PX1BST1hZIiwiUmVnRXhwIiwiQ0hST01FX05PX1BST1hZIiwiQVBLX0VYVCIsIkFBQl9FWFQiLCJTVVBQT1JURURfRVhURU5TSU9OUyIsIkVzcHJlc3NvRHJpdmVyIiwiQmFzZURyaXZlciIsImNvbnN0cnVjdG9yIiwib3B0cyIsInNob3VsZFZhbGlkYXRlQ2FwcyIsInNoZWxsIiwibG9jYXRvclN0cmF0ZWdpZXMiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJlc3ByZXNzbyIsImp3cFByb3h5QWN0aXZlIiwiZGVmYXVsdElNRSIsImp3cFByb3h5QXZvaWQiLCJhcGtTdHJpbmdzIiwic2V0dGluZ3MiLCJEZXZpY2VTZXR0aW5ncyIsIm9uU2V0dGluZ3NVcGRhdGUiLCJiaW5kIiwiY2hyb21lZHJpdmVyIiwic2Vzc2lvbkNocm9tZWRyaXZlcnMiLCJjcmVhdGVTZXNzaW9uIiwiYXJncyIsInNlc3Npb25JZCIsImNhcHMiLCJzZXJ2ZXJEZXRhaWxzIiwicGxhdGZvcm0iLCJ3ZWJTdG9yYWdlRW5hYmxlZCIsInRha2VzU2NyZWVuc2hvdCIsImphdmFzY3JpcHRFbmFibGVkIiwiZGF0YWJhc2VFbmFibGVkIiwibmV0d29ya0Nvbm5lY3Rpb25FbmFibGVkIiwibG9jYXRpb25Db250ZXh0RW5hYmxlZCIsIndhcm5pbmdzIiwiZGVzaXJlZCIsIk9iamVjdCIsImFzc2lnbiIsImN1ckNvbnRleHQiLCJkZWZhdWx0Q29udGV4dE5hbWUiLCJkZWZhdWx0T3B0cyIsImZ1bGxSZXNldCIsImF1dG9MYXVuY2giLCJhZGJQb3J0IiwiREVGQVVMVF9BREJfUE9SVCIsImFuZHJvaWRJbnN0YWxsVGltZW91dCIsIl8iLCJkZWZhdWx0cyIsImlzQ2hyb21lU2Vzc2lvbiIsImFwcCIsImxvZyIsIndhcm4iLCJlcnJvckFuZFRocm93IiwicmVib290Iiwic2V0QXZkRnJvbUNhcGFiaWxpdGllcyIsImFkZFdpcGVEYXRhVG9BdmRBcmdzIiwic3lzdGVtUG9ydCIsInVkaWQiLCJlbVBvcnQiLCJnZXREZXZpY2VJbmZvRnJvbUNhcHMiLCJhZGIiLCJjcmVhdGVBREIiLCJjb25maWd1cmVBcHAiLCJvblBvc3RQcm9jZXNzIiwib25Qb3N0Q29uZmlndXJlQXBwIiwic3VwcG9ydGVkRXh0ZW5zaW9ucyIsImFwcE9uRGV2aWNlIiwiaW5mbyIsImFwcFBhY2thZ2UiLCJpc0FwcEluc3RhbGxlZCIsInN0YXJ0RXNwcmVzc29TZXNzaW9uIiwiZSIsImRlbGV0ZVNlc3Npb24iLCJtZXNzYWdlIiwiZW5kc1dpdGgiLCJlcnJvcnMiLCJTZXNzaW9uTm90Q3JlYXRlZEVycm9yIiwiZXJyIiwic3RhY2siLCJ1bnppcEFwcCIsImFwcFBhdGgiLCJ1c2VTeXN0ZW1VbnppcEVudiIsInByb2Nlc3MiLCJlbnYiLCJBUFBJVU1fUFJFRkVSX1NZU1RFTV9VTlpJUCIsInVzZVN5c3RlbVVuemlwIiwiaXNFbXB0eSIsImluY2x1ZGVzIiwidG9Mb3dlciIsInRtcFJvb3QiLCJ0ZW1wRGlyIiwib3BlbkRpciIsInppcCIsImV4dHJhY3RBbGxUbyIsImdsb2JQYXR0ZXJuIiwibWFwIiwiZXh0IiwicmVwbGFjZSIsImpvaW4iLCJzb3J0ZWRCdW5kbGVJdGVtcyIsImZzIiwiZ2xvYiIsImN3ZCIsInN0cmljdCIsInNvcnQiLCJhIiwiYiIsInNwbGl0IiwicGF0aCIsInNlcCIsImxlbmd0aCIsInVuemlwcGVkQXBwUGF0aCIsImZpcnN0IiwiZGVidWciLCJjYWNoZWRBcHBJbmZvIiwiaXNVcmwiLCJwcmVzaWduQXBwIiwiYXBwTG9jYXRpb24iLCJub1NpZ24iLCJjaGVja0Fwa0NlcnQiLCJzaWduIiwiaGFzQXBrRXh0IiwiaGFzQWFiRXh0IiwiZXh0cmFjdFVuaXZlcnNhbEFwayIsInNob3VsZEV4dHJhY3QiLCJwYXRoSW5DYWNoZSIsImlzUmVzdWx0QXBwUGF0aEFscmVhZHlDYWNoZWQiLCJpc1BsYWluT2JqZWN0IiwicGFja2FnZUhhc2giLCJoYXNoIiwiZXhpc3RzIiwiZnVsbFBhdGgiLCJpc0FwayIsInNob3VsZFJlc3VsdEFwcFBhdGhCZUNhY2hlZCIsImlzVW56aXBwZWRBcGsiLCJyaW1yYWYiLCJkcml2ZXJEYXRhIiwiaXNFbXVsYXRvciIsImF2ZCIsImRldmljZU5hbWUiLCJwbGF0Zm9ybVZlcnNpb24iLCJhdmREZXZpY2UiLCJhdmRBcmdzIiwidG9Mb3dlckNhc2UiLCJ2ZXJzaW9uIiwiZ2V0QXBpTGV2ZWwiLCJzZXRIaWRkZW5BcGlQb2xpY3kiLCJpZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvciIsImFwcEluZm8iLCJnZXRMYXVuY2hJbmZvIiwiaW5pdERldmljZSIsImlzQW5pbWF0aW9uT24iLCJzZXRBbmltYXRpb25TdGF0ZSIsIndhc0FuaW1hdGlvbkVuYWJsZWQiLCJjdXJEZXZpY2VJZCIsImRldmljZVVESUQiLCJpbml0RXNwcmVzc29TZXJ2ZXIiLCJmb3J3YXJkUG9ydCIsInNraXBVbmxvY2siLCJ1bmxvY2siLCJpbml0QVVUIiwiYXBwV2FpdFBhY2thZ2UiLCJhcHBBY3Rpdml0eSIsImFwcFdhaXRBY3Rpdml0eSIsInN0YXJ0U2Vzc2lvbiIsIndhaXRGb3JBY3Rpdml0eSIsImFwcFdhaXREdXJhdGlvbiIsImF1dG9XZWJ2aWV3IiwiaW5pdFdlYnZpZXciLCJhZGREZXZpY2VJbmZvVG9DYXBzIiwidmlld05hbWUiLCJhbmRyb2lkQ29tbWFuZHMiLCJkZWZhdWx0V2Vidmlld05hbWUiLCJjYWxsIiwidGltZW91dCIsImF1dG9XZWJ2aWV3VGltZW91dCIsInNldENvbnRleHQiLCJhcGlWZXJzaW9uIiwibWFudWZhY3R1cmVyIiwibW9kZWwiLCJyZWFsRGlzcGxheVNpemUiLCJkaXNwbGF5RGVuc2l0eSIsIm1vYmlsZUdldERldmljZUluZm8iLCJkZXZpY2VBcGlMZXZlbCIsInBhcnNlSW50IiwiZGV2aWNlU2NyZWVuU2l6ZSIsImRldmljZVNjcmVlbkRlbnNpdHkiLCJkZXZpY2VNb2RlbCIsImRldmljZU1hbnVmYWN0dXJlciIsIkVzcHJlc3NvUnVubmVyIiwiaG9zdCIsInJlbW90ZUFkYkhvc3QiLCJkZXZpY2VQb3J0IiwiYXBrIiwidG1wRGlyIiwiZm9yY2VFc3ByZXNzb1JlYnVpbGQiLCJlc3ByZXNzb0J1aWxkQ29uZmlnIiwic2hvd0dyYWRsZUxvZyIsInNlcnZlckxhdW5jaFRpbWVvdXQiLCJlc3ByZXNzb1NlcnZlckxhdW5jaFRpbWVvdXQiLCJza2lwU2VydmVySW5zdGFsbGF0aW9uIiwidXNlS2V5c3RvcmUiLCJrZXlzdG9yZVBhdGgiLCJrZXlzdG9yZVBhc3N3b3JkIiwia2V5QWxpYXMiLCJrZXlQYXNzd29yZCIsImRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlIiwicHJveHlSZXFSZXMiLCJwcm94eUNvbW1hbmQiLCJ1bmluc3RhbGxPdGhlclBhY2thZ2VzIiwicGFyc2VBcnJheSIsIlNFVFRJTkdTX0hFTFBFUl9QS0dfSUQiLCJURVNUX0FQS19QS0ciLCJmYXN0UmVzZXQiLCJyZXNldEFwcCIsInNraXBVbmluc3RhbGwiLCJ1bmluc3RhbGxBcGsiLCJpbnN0YWxsQXBrIiwiaW5zdGFsbFRlc3RBcGsiLCJhZGRUb0RldmljZUlkbGVXaGl0ZWxpc3QiLCJzdGRlcnIiLCJfc2NyZWVuUmVjb3JkaW5nUHJvcGVydGllcyIsInN0b3BSZWNvcmRpbmdTY3JlZW4iLCJpZ24iLCJyZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMiLCJzZXJ2ZXIiLCJtb2JpbGVTdG9wU2NyZWVuU3RyZWFtaW5nIiwidW5pY29kZUtleWJvYXJkIiwicmVzZXRLZXlib2FyZCIsInNldElNRSIsImRvbnRTdG9wQXBwT25SZXNldCIsImZvcmNlU3RvcCIsInN0b3BMb2djYXQiLCJhdmROYW1lIiwia2lsbEVtdWxhdG9yIiwic2V0RGVmYXVsdEhpZGRlbkFwaVBvbGljeSIsInVuZGVmaW5lZCIsInJlbW92ZVBvcnRGb3J3YXJkIiwiZXJyb3IiLCJwcm94eUFjdGl2ZSIsImNhblByb3h5IiwiZ2V0UHJveHlBdm9pZExpc3QiLCJpc05pbCIsIm5hdGl2ZVdlYlNjcmVlbnNob3QiLCJpc0Nocm9tZUJyb3dzZXIiLCJicm93c2VyTmFtZSIsImlzUGFja2FnZU9yQnVuZGxlIiwiY21kIiwiZm4iLCJ0b1BhaXJzIiwicHJvdG90eXBlIiwiY29tbWFuZHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBSUEsTUFBTUEsT0FBTyxHQUFHQyxtQ0FBaEI7QUFJQSxNQUFNQyxpQkFBaUIsR0FBRyxDQUFDLElBQUQsRUFBTyxJQUFQLENBQTFCO0FBSUEsTUFBTUMsV0FBVyxHQUFHLElBQXBCO0FBTUEsTUFBTUMsUUFBUSxHQUFHLENBQ2YsQ0FBQyxLQUFELEVBQVEsSUFBSUMsTUFBSixDQUFXLG1CQUFYLENBQVIsQ0FEZSxFQUVmLENBQUMsS0FBRCxFQUFRLElBQUlBLE1BQUosQ0FBVyxnREFBWCxDQUFSLENBRmUsRUFHZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsK0NBQVgsQ0FBUixDQUhlLEVBSWYsQ0FBQyxLQUFELEVBQVEsSUFBSUEsTUFBSixDQUFXLCtDQUFYLENBQVIsQ0FKZSxFQUtmLENBQUMsS0FBRCxFQUFRLElBQUlBLE1BQUosQ0FBVyxpREFBWCxDQUFSLENBTGUsRUFNZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsMkNBQVgsQ0FBUixDQU5lLEVBT2YsQ0FBQyxLQUFELEVBQVEsSUFBSUEsTUFBSixDQUFXLDJDQUFYLENBQVIsQ0FQZSxFQVFmLENBQUMsS0FBRCxFQUFRLElBQUlBLE1BQUosQ0FBVyxpQ0FBWCxDQUFSLENBUmUsRUFTZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcseUJBQVgsQ0FBUixDQVRlLEVBVWYsQ0FBQyxLQUFELEVBQVEsSUFBSUEsTUFB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Q0Q7O2VBR2NyUCxjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgQmFzZURyaXZlciwgZXJyb3JzLCBpc0Vycm9yVHlwZSwgRGV2aWNlU2V0dGluZ3N9IGZyb20gJ0BhcHBpdW0vYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgRXNwcmVzc29SdW5uZXIsIFRFU1RfQVBLX1BLRyB9IGZyb20gJy4vZXNwcmVzc28tcnVubmVyJztcbmltcG9ydCB7IGZzLCB0ZW1wRGlyLCB6aXAgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IGNvbW1hbmRzIGZyb20gJy4vY29tbWFuZHMnO1xuaW1wb3J0IHsgREVGQVVMVF9BREJfUE9SVCB9IGZyb20gJ2FwcGl1bS1hZGInO1xuaW1wb3J0IHsgYW5kcm9pZEhlbHBlcnMsIGFuZHJvaWRDb21tYW5kcywgU0VUVElOR1NfSEVMUEVSX1BLR19JRCB9IGZyb20gJ2FwcGl1bS1hbmRyb2lkLWRyaXZlcic7XG5pbXBvcnQgZGVzaXJlZENhcENvbnN0cmFpbnRzIGZyb20gJy4vZGVzaXJlZC1jYXBzJztcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuLi8uLi9wYWNrYWdlLmpzb24nOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGltcG9ydC9uby11bnJlc29sdmVkXG5pbXBvcnQgeyBmaW5kQVBvcnROb3RJblVzZSB9IGZyb20gJ3BvcnRzY2FubmVyJztcbmltcG9ydCB7IHJldHJ5SW50ZXJ2YWwgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBxdWFsaWZ5QWN0aXZpdHlOYW1lIH0gZnJvbSAnLi91dGlscyc7XG5cblxuLy8gVE9ETyBtZXJnZSBvdXIgb3duIGhlbHBlcnMgb250byB0aGlzIGxhdGVyXG5jb25zdCBoZWxwZXJzID0gYW5kcm9pZEhlbHBlcnM7XG5cbi8vIFRoZSByYW5nZSBvZiBwb3J0cyB3ZSBjYW4gdXNlIG9uIHRoZSBzeXN0ZW0gZm9yIGNvbW11bmljYXRpbmcgdG8gdGhlXG4vLyBFc3ByZXNzbyBIVFRQIHNlcnZlciBvbiB0aGUgZGV2aWNlXG5jb25zdCBTWVNURU1fUE9SVF9SQU5HRSA9IFs4MzAwLCA4Mzk5XTtcblxuLy8gVGhpcyBpcyB0aGUgcG9ydCB0aGF0IHRoZSBlc3ByZXNzbyBzZXJ2ZXIgbGlzdGVucyB0byBvbiB0aGUgZGV2aWNlLiBXZSB3aWxsXG4vLyBmb3J3YXJkIG9uZSBvZiB0aGUgcG9ydHMgYWJvdmUgb24gdGhlIHN5c3RlbSB0byB0aGlzIHBvcnQgb24gdGhlIGRldmljZS5cbmNvbnN0IERFVklDRV9QT1JUID0gNjc5MTtcblxuLy8gTk9fUFJPWFkgY29udGFpbnMgdGhlIHBhdGhzIHRoYXQgd2UgbmV2ZXIgd2FudCB0byBwcm94eSB0byBlc3ByZXNzbyBzZXJ2ZXIuXG4vLyBUT0RPOiAgQWRkIHRoZSBsaXN0IG9mIHBhdGhzIHRoYXQgd2UgbmV2ZXIgd2FudCB0byBwcm94eSB0byBlc3ByZXNzbyBzZXJ2ZXIuXG4vLyBUT0RPOiBOZWVkIHRvIHNlZ3JlZ2F0ZSB0aGUgcGF0aHMgYmV0dGVyIHdheSB1c2luZyByZWd1bGFyIGV4cHJlc3Npb25zIHdoZXJldmVyIGFwcGxpY2FibGUuXG4vLyAoTm90IHNlZ3JlZ2F0aW5nIHJpZ2h0IGF3YXkgYmVjYXVzZSBtb3JlIHBhdGhzIHRvIGJlIGFkZGVkIGluIHRoZSBOT19QUk9YWSBsaXN0KVxuY29uc3QgTk9fUFJPWFkgPSBbXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uLyg/IS4qLyknKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvY3VycmVudF9hY3Rpdml0eScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9jdXJyZW50X3BhY2thZ2UnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvZGlzcGxheV9kZW5zaXR5JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2lzX2tleWJvYXJkX3Nob3duJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL3N5c3RlbV9iYXJzJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL3N5c3RlbV90aW1lJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vc2V0dGluZ3MnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHQnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHRzJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9pbWUvW14vXSsnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL25ldHdvcmtfY29ubmVjdGlvbicpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdGltZW91dHMnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3VybCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9hcHAvYmFja2dyb3VuZCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9hcHAvY2xvc2UnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vYXBwL2xhdW5jaCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9hcHAvcmVzZXQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vYXBwL3N0cmluZ3MnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vY29tcGFyZV9pbWFnZXMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2FjdGl2YXRlX2FwcCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvYXBwX2luc3RhbGxlZCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvYXBwX3N0YXRlJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9maW5nZXJfcHJpbnQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2dldF9jbGlwYm9hcmQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2luc3RhbGxfYXBwJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9pc19sb2NrZWQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2xvY2snKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL3B1bGxfZmlsZScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvcHVsbF9mb2xkZXInKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL3B1c2hfZmlsZScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvcmVtb3ZlX2FwcCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2Uvc3RhcnRfYWN0aXZpdHknKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL3Rlcm1pbmF0ZV9hcHAnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL3VubG9jaycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9nZXRQZXJmb3JtYW5jZURhdGEnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vcGVyZm9ybWFuY2VEYXRhL3R5cGVzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL3NldHRpbmdzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2V4ZWN1dGVfZHJpdmVyJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL3N0YXJ0X3JlY29yZGluZ19zY3JlZW4nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vc3RvcF9yZWNvcmRpbmdfc2NyZWVuJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29udGV4dCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlL2FzeW5jJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZS9zeW5jJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZV9hc3luYycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2ltZS9bXi9dKycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvY2F0aW9uJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbmV0d29ya19jb25uZWN0aW9uJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdGltZW91dHMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy91cmwnKV0sXG5cbiAgLy8gTUpTT05XUCBjb21tYW5kc1xuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9sb2cvdHlwZXMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9sb2cnKV0sXG5cbiAgLy8gVzNDIGNvbW1hbmRzXG4gIC8vIEZvciBTZWxlbml1bSB2NCAoVzNDIGRvZXMgbm90IGhhdmUgdGhpcyByb3V0ZSlcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvc2UvbG9nL3R5cGVzJyldLFxuICAvLyBGb3IgU2VsZW5pdW0gdjQgKFczQyBkb2VzIG5vdCBoYXZlIHRoaXMgcm91dGUpXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zZS9sb2cnKV0sXG5dO1xuXG4vLyBUaGlzIGlzIGEgc2V0IG9mIG1ldGhvZHMgYW5kIHBhdGhzIHRoYXQgd2UgbmV2ZXIgd2FudCB0byBwcm94eSB0byBDaHJvbWVkcml2ZXIuXG5jb25zdCBDSFJPTUVfTk9fUFJPWFkgPSBbXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29udGV4dCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZWxlbWVudC9bXi9dKy9yZWN0JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9vcmllbnRhdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9vcmllbnRhdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3RvdWNoL211bHRpL3BlcmZvcm0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90b3VjaC9wZXJmb3JtJyldLFxuXG4gIC8vIHRoaXMgaXMgbmVlZGVkIHRvIG1ha2UgdGhlIG1vYmlsZTogY29tbWFuZHMgd29ya2luZyBpbiB3ZWIgY29udGV4dFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZSQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlL3N5bmMnKV0sXG5cbiAgLy8gTUpTT05XUCBjb21tYW5kc1xuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9sb2cvdHlwZXMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9sb2cnKV0sXG5cbiAgLy8gVzNDIGNvbW1hbmRzXG4gIC8vIEZvciBTZWxlbml1bSB2NCAoVzNDIGRvZXMgbm90IGhhdmUgdGhpcyByb3V0ZSlcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvc2UvbG9nL3R5cGVzJyldLFxuICAvLyBGb3IgU2VsZW5pdW0gdjQgKFczQyBkb2VzIG5vdCBoYXZlIHRoaXMgcm91dGUpXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zZS9sb2cnKV0sXG5dO1xuXG5cbmNvbnN0IEFQS19FWFQgPSAnLmFwayc7XG5jb25zdCBBQUJfRVhUID0gJy5hYWInO1xuY29uc3QgU1VQUE9SVEVEX0VYVEVOU0lPTlMgPSBbQVBLX0VYVCwgQUFCX0VYVF07XG5cbmNsYXNzIEVzcHJlc3NvRHJpdmVyIGV4dGVuZHMgQmFzZURyaXZlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30sIHNob3VsZFZhbGlkYXRlQ2FwcyA9IHRydWUpIHtcbiAgICAvLyBgc2hlbGxgIG92ZXJ3cml0ZXMgYWRiLnNoZWxsLCBzbyByZW1vdmVcbiAgICBkZWxldGUgb3B0cy5zaGVsbDtcblxuICAgIHN1cGVyKG9wdHMsIHNob3VsZFZhbGlkYXRlQ2Fwcyk7XG4gICAgdGhpcy5sb2NhdG9yU3RyYXRlZ2llcyA9IFtcbiAgICAgICdpZCcsXG4gICAgICAnY2xhc3MgbmFtZScsXG4gICAgICAnYWNjZXNzaWJpbGl0eSBpZCcsXG4gICAgXTtcbiAgICB0aGlzLmRlc2lyZWRDYXBDb25zdHJhaW50cyA9IGRlc2lyZWRDYXBDb25zdHJhaW50cztcbiAgICB0aGlzLmVzcHJlc3NvID0gbnVsbDtcbiAgICB0aGlzLmp3cFByb3h5QWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5kZWZhdWx0SU1FID0gbnVsbDtcbiAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBOT19QUk9YWTtcblxuICAgIHRoaXMuYXBrU3RyaW5ncyA9IHt9OyAvLyBtYXAgb2YgbGFuZ3VhZ2UgLT4gc3RyaW5ncyBvYmpcbiAgICB0aGlzLnNldHRpbmdzID0gbmV3IERldmljZVNldHRpbmdzKHt9LCB0aGlzLm9uU2V0dGluZ3NVcGRhdGUuYmluZCh0aGlzKSk7XG5cbiAgICB0aGlzLmNocm9tZWRyaXZlciA9IG51bGw7XG4gICAgdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVycyA9IHt9O1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlU2Vzc2lvbiAoLi4uYXJncykge1xuICAgIHRyeSB7XG4gICAgICAvLyBUT0RPIGhhbmRsZSBvdGhlclNlc3Npb25EYXRhIGZvciBtdWx0aXBsZSBzZXNzaW9uc1xuICAgICAgbGV0IFtzZXNzaW9uSWQsIGNhcHNdID0gYXdhaXQgc3VwZXIuY3JlYXRlU2Vzc2lvbiguLi5hcmdzKTtcblxuICAgICAgbGV0IHNlcnZlckRldGFpbHMgPSB7XG4gICAgICAgIHBsYXRmb3JtOiAnTElOVVgnLFxuICAgICAgICB3ZWJTdG9yYWdlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHRha2VzU2NyZWVuc2hvdDogdHJ1ZSxcbiAgICAgICAgamF2YXNjcmlwdEVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGRhdGFiYXNlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIG5ldHdvcmtDb25uZWN0aW9uRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgbG9jYXRpb25Db250ZXh0RW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHdhcm5pbmdzOiB7fSxcbiAgICAgICAgZGVzaXJlZDogT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jYXBzKVxuICAgICAgfTtcblxuICAgICAgdGhpcy5jYXBzID0gT2JqZWN0LmFzc2lnbihzZXJ2ZXJEZXRhaWxzLCB0aGlzLmNhcHMpO1xuXG4gICAgICB0aGlzLmN1ckNvbnRleHQgPSB0aGlzLmRlZmF1bHRDb250ZXh0TmFtZSgpO1xuXG4gICAgICBsZXQgZGVmYXVsdE9wdHMgPSB7XG4gICAgICAgIGZ1bGxSZXNldDogZmFsc2UsXG4gICAgICAgIGF1dG9MYXVuY2g6IHRydWUsXG4gICAgICAgIGFkYlBvcnQ6IERFRkFVTFRfQURCX1BPUlQsXG4gICAgICAgIGFuZHJvaWRJbnN0YWxsVGltZW91dDogOTAwMDBcbiAgICAgIH07XG4gICAgICBfLmRlZmF1bHRzKHRoaXMub3B0cywgZGVmYXVsdE9wdHMpO1xuXG4gICAgICBpZiAodGhpcy5pc0Nocm9tZVNlc3Npb24pIHtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5hcHApIHtcbiAgICAgICAgICB0aGlzLmxvZy53YXJuKGAnYnJvd3Nlck5hbWUnIGNhcGFiaWxpdHkgd2lsbCBiZSBpZ25vcmVkYCk7XG4gICAgICAgICAgdGhpcy5sb2cud2FybihgQ2hyb21lIGJyb3dzZXIgY2Fubm90IGJlIHJ1biBpbiBFc3ByZXNzbyBzZXNzaW9ucyBiZWNhdXNlIEVzcHJlc3NvIGF1dG9tYXRpb24gZG9lc24ndCBgICtcbiAgICAgICAgICAgICAgYGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgQ2hyb21lYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgQ2hyb21lIGJyb3dzZXIgc2Vzc2lvbnMgY2Fubm90IGJlIHJ1biBpbiBFc3ByZXNzbyBiZWNhdXNlIEVzcHJlc3NvIGAgK1xuICAgICAgICAgICAgYGF1dG9tYXRpb24gZG9lc24ndCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIENocm9tZWApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdHMucmVib290KSB7XG4gICAgICAgIHRoaXMuc2V0QXZkRnJvbUNhcGFiaWxpdGllcyhjYXBzKTtcbiAgICAgICAgdGhpcy5hZGRXaXBlRGF0YVRvQXZkQXJncygpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm9wdHMuc3lzdGVtUG9ydCA9IHRoaXMub3B0cy5zeXN0ZW1Qb3J0XG4gICAgICAgIHx8IGF3YWl0IGZpbmRBUG9ydE5vdEluVXNlKFNZU1RFTV9QT1JUX1JBTkdFWzBdLCBTWVNURU1fUE9SVF9SQU5HRVsxXSk7XG4gICAgICB0aGlzLm9wdHMuYWRiUG9ydCA9IHRoaXMub3B0cy5hZGJQb3J0IHx8IERFRkFVTFRfQURCX1BPUlQ7XG4gICAgICAvLyBnZXQgZGV2aWNlIHVkaWQgZm9yIHRoaXMgc2Vzc2lvblxuICAgICAgY29uc3Qge3VkaWQsIGVtUG9ydH0gPSBhd2FpdCBoZWxwZXJzLmdldERldmljZUluZm9Gcm9tQ2Fwcyh0aGlzLm9wdHMpO1xuICAgICAgdGhpcy5vcHRzLnVkaWQgPSB1ZGlkO1xuICAgICAgdGhpcy5vcHRzLmVtUG9ydCA9IGVtUG9ydDtcbiAgICAgIC8vIG5vdyB0aGF0IHdlIGtub3cgb3VyIGphdmEgdmVyc2lvbiBhbmQgZGV2aWNlIGluZm8sIHdlIGNhbiBjcmVhdGUgb3VyXG4gICAgICAvLyBBREIgaW5zdGFuY2VcbiAgICAgIHRoaXMuYWRiID0gYXdhaXQgYW5kcm9pZEhlbHBlcnMuY3JlYXRlQURCKHRoaXMub3B0cyk7XG5cbiAgICAgIGlmICh0aGlzLm9wdHMuYXBwKSB7XG4gICAgICAgIC8vIGZpbmQgYW5kIGNvcHksIG9yIGRvd25sb2FkIGFuZCB1bnppcCBhbiBhcHAgdXJsIG9yIHBhdGhcbiAgICAgICAgdGhpcy5vcHRzLmFwcCA9IGF3YWl0IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAodGhpcy5vcHRzLmFwcCwge1xuICAgICAgICAgIG9uUG9zdFByb2Nlc3M6IHRoaXMub25Qb3N0Q29uZmlndXJlQXBwLmJpbmQodGhpcyksXG4gICAgICAgICAgc3VwcG9ydGVkRXh0ZW5zaW9uczogU1VQUE9SVEVEX0VYVEVOU0lPTlNcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuYXBwT25EZXZpY2UpIHtcbiAgICAgICAgLy8gdGhlIGFwcCBpc24ndCBhbiBhY3R1YWwgYXBwIGZpbGUgYnV0IHJhdGhlciBzb21ldGhpbmcgd2Ugd2FudCB0b1xuICAgICAgICAvLyBhc3N1bWUgaXMgb24gdGhlIGRldmljZSBhbmQganVzdCBsYXVuY2ggdmlhIHRoZSBhcHBQYWNrYWdlXG4gICAgICAgIHRoaXMubG9nLmluZm8oYEFwcCBmaWxlIHdhcyBub3QgbGlzdGVkLCBpbnN0ZWFkIHdlJ3JlIGdvaW5nIHRvIHJ1biBgICtcbiAgICAgICAgICAgIGAke3RoaXMub3B0cy5hcHBQYWNrYWdlfSBkaXJlY3RseSBvbiB0aGUgZGV2aWNlYCk7XG4gICAgICAgIGlmICghYXdhaXQgdGhpcy5hZGIuaXNBcHBJbnN0YWxsZWQodGhpcy5vcHRzLmFwcFBhY2thZ2UpKSB7XG4gICAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgQ291bGQgbm90IGZpbmQgdGhlIHBhY2thZ2UgJyR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9JyBgICtcbiAgICAgICAgICAgIGBpbnN0YWxsZWQgb24gdGhlIGRldmljZWApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRFc3ByZXNzb1Nlc3Npb24oKTtcbiAgICAgIHJldHVybiBbc2Vzc2lvbklkLCBjYXBzXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcbiAgICAgIGUubWVzc2FnZSArPSBgJHtfLmVuZHNXaXRoKGUubWVzc2FnZSwgJy4nKSA/ICcnIDogJy4nfSBDaGVjayBgICtcbiAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtLWVzcHJlc3NvLWRyaXZlciN0cm91Ymxlc2hvb3RpbmcgJyArXG4gICAgICAgICdyZWdhcmRpbmcgYWR2YW5jZWQgc2Vzc2lvbiBzdGFydHVwIHRyb3VibGVzaG9vdGluZy4nO1xuICAgICAgaWYgKGlzRXJyb3JUeXBlKGUsIGVycm9ycy5TZXNzaW9uTm90Q3JlYXRlZEVycm9yKSkge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgICAgY29uc3QgZXJyID0gbmV3IGVycm9ycy5TZXNzaW9uTm90Q3JlYXRlZEVycm9yKGUubWVzc2FnZSk7XG4gICAgICBlcnIuc3RhY2sgPSBlLnN0YWNrO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbnppcCB0aGUgZ2l2ZW4gYXBwIHBhdGggYW5kIHJldHVybiB0aGUgZmlyc3QgcGFja2FnZSB0aGF0IGhhcyBTVVBQT1JURURfRVhURU5TSU9OU1xuICAgKiBpbiB0aGUgYXJjaGl2ZWQgZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwcFBhdGggVGhlIHBhdGggdG8gYXBwIGZpbGUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVucyB0aGUgcGF0aCB0byBhbiB1bnppcHBlZCBhcHAgZmlsZSBwYXRoLlxuICAgKiBAdGhyb3dzIFJhaXNlIGFuIGV4Y2VwdGlvbiBpZiB0aGUgemlwIGRpZCBub3QgaGF2ZSBhbnkgU1VQUE9SVEVEX0VYVEVOU0lPTlMgcGFja2FnZXMuXG4gICAqL1xuICBhc3luYyB1bnppcEFwcCAoYXBwUGF0aCkge1xuICAgIGNvbnN0IHVzZVN5c3RlbVVuemlwRW52ID0gcHJvY2Vzcy5lbnYuQVBQSVVNX1BSRUZFUl9TWVNURU1fVU5aSVA7XG4gICAgY29uc3QgdXNlU3lzdGVtVW56aXAgPSBfLmlzRW1wdHkodXNlU3lzdGVtVW56aXBFbnYpXG4gICAgICB8fCAhWycwJywgJ2ZhbHNlJ10uaW5jbHVkZXMoXy50b0xvd2VyKHVzZVN5c3RlbVVuemlwRW52KSk7XG4gICAgY29uc3QgdG1wUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICAgIGF3YWl0IHppcC5leHRyYWN0QWxsVG8oYXBwUGF0aCwgdG1wUm9vdCwge3VzZVN5c3RlbVVuemlwfSk7XG5cbiAgICBjb25zdCBnbG9iUGF0dGVybiA9IGAqKi8qLisoJHtTVVBQT1JURURfRVhURU5TSU9OUy5tYXAoKGV4dCkgPT4gZXh0LnJlcGxhY2UoL15cXC4vLCAnJykpLmpvaW4oJ3wnKX0pYDtcbiAgICBjb25zdCBzb3J0ZWRCdW5kbGVJdGVtcyA9IChhd2FpdCBmcy5nbG9iKGdsb2JQYXR0ZXJuLCB7XG4gICAgICBjd2Q6IHRtcFJvb3QsXG4gICAgICBzdHJpY3Q6IGZhbHNlLFxuICAgIH0pKS5zb3J0KChhLCBiKSA9PiBhLnNwbGl0KHBhdGguc2VwKS5sZW5ndGggLSBiLnNwbGl0KHBhdGguc2VwKS5sZW5ndGgpO1xuICAgIGlmIChzb3J0ZWRCdW5kbGVJdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIG5vIGV4cGVjdGVkIHBhY2thZ2VzIGluIHRoZSB6aXBcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYCR7dGhpcy5vcHRzLmFwcH0gZGlkIG5vdCBoYXZlIGFueSBvZiAnJHtTVVBQT1JURURfRVhURU5TSU9OUy5qb2luKCcsICcpfScgYCArXG4gICAgICAgIGBleHRlbnNpb24gcGFja2FnZXMuIFBsZWFzZSBtYWtlIHN1cmUgdGhlIHByb3ZpZGVkIC56aXAgYXJjaGl2ZSBjb250YWlucyBhdCBsZWFzdCBvbmUgdmFsaWQgYXBwbGljYXRpb24gcGFja2FnZS5gKTtcbiAgICB9XG4gICAgY29uc3QgdW56aXBwZWRBcHBQYXRoID0gcGF0aC5qb2luKHRtcFJvb3QsIF8uZmlyc3Qoc29ydGVkQnVuZGxlSXRlbXMpKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgJyR7dW56aXBwZWRBcHBQYXRofScgaXMgdGhlIHVuemlwcGVkIGZpbGUgZnJvbSAnJHthcHBQYXRofSdgKTtcbiAgICByZXR1cm4gdW56aXBwZWRBcHBQYXRoO1xuICB9XG5cbiAgYXN5bmMgb25Qb3N0Q29uZmlndXJlQXBwICh7Y2FjaGVkQXBwSW5mbywgaXNVcmwsIGFwcFBhdGh9KSB7XG4gICAgY29uc3QgcHJlc2lnbkFwcCA9IGFzeW5jIChhcHBMb2NhdGlvbikgPT4ge1xuICAgICAgaWYgKHRoaXMub3B0cy5ub1NpZ24pIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbygnU2tpcHBpbmcgYXBwbGljYXRpb24gc2lnbmluZyBiZWNhdXNlIG5vU2lnbiBjYXBhYmlsaXR5IGlzIHNldCB0byB0cnVlLiAnICtcbiAgICAgICAgICAnSGF2aW5nIHRoZSBhcHBsaWNhdGlvbiB1bmRlciB0ZXN0IHdpdGggaW1wcm9wZXIgc2lnbmF0dXJlL25vbi1zaWduZWQgd2lsbCBjYXVzZSAnICtcbiAgICAgICAgICAnRXNwcmVzc28gYXV0b21hdGlvbiBzdGFydHVwIGZhaWx1cmUuJyk7XG4gICAgICB9IGVsc2UgaWYgKCFhd2FpdCB0aGlzLmFkYi5jaGVja0Fwa0NlcnQoYXBwTG9jYXRpb24sIHRoaXMub3B0cy5hcHBQYWNrYWdlKSkge1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5zaWduKGFwcExvY2F0aW9uLCB0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGhhc0Fwa0V4dCA9IChhcHBQYXRoKSA9PiBfLmVuZHNXaXRoKF8udG9Mb3dlcihhcHBQYXRoKSwgQVBLX0VYVCk7XG4gICAgY29uc3QgaGFzQWFiRXh0ID0gKGFwcFBhdGgpID0+IF8uZW5kc1dpdGgoXy50b0xvd2VyKGFwcFBhdGgpLCBBQUJfRVhUKTtcbiAgICBjb25zdCBleHRyYWN0VW5pdmVyc2FsQXBrID0gYXN5bmMgKHNob3VsZEV4dHJhY3QsIGFwcFBhdGgpID0+XG4gICAgICBzaG91bGRFeHRyYWN0ID8gYXBwUGF0aCA6IGF3YWl0IHRoaXMuYWRiLmV4dHJhY3RVbml2ZXJzYWxBcGsoYXBwUGF0aCk7XG5cbiAgICBsZXQgcGF0aEluQ2FjaGUgPSBudWxsO1xuICAgIGxldCBpc1Jlc3VsdEFwcFBhdGhBbHJlYWR5Q2FjaGVkID0gZmFsc2U7XG4gICAgaWYgKF8uaXNQbGFpbk9iamVjdChjYWNoZWRBcHBJbmZvKSkge1xuICAgICAgY29uc3QgcGFja2FnZUhhc2ggPSBhd2FpdCBmcy5oYXNoKGFwcFBhdGgpO1xuICAgICAgaWYgKHBhY2thZ2VIYXNoID09PSBjYWNoZWRBcHBJbmZvLnBhY2thZ2VIYXNoICYmIGF3YWl0IGZzLmV4aXN0cyhjYWNoZWRBcHBJbmZvLmZ1bGxQYXRoKSkge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBVc2luZyAnJHtjYWNoZWRBcHBJbmZvLmZ1bGxQYXRofScgd2hpY2ggaXMgY2FjaGVkIGZyb20gJyR7YXBwUGF0aH0nYCk7XG4gICAgICAgIGlzUmVzdWx0QXBwUGF0aEFscmVhZHlDYWNoZWQgPSB0cnVlO1xuICAgICAgICBwYXRoSW5DYWNoZSA9IGNhY2hlZEFwcEluZm8uZnVsbFBhdGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYXBwUGF0aCBjYW4gYmUgLnppcCwgLmFwayBvciAuYWFiXG4gICAgY29uc3QgaXNBcGsgPSBoYXNBcGtFeHQoYXBwUGF0aCk7XG4gICAgLy8gT25seSBsb2NhbCAuYXBrIGZpbGVzIHRoYXQgYXJlIGF2YWlsYWJsZSBpbi1wbGFjZSBzaG91bGQgbm90IGJlIGNhY2hlZFxuICAgIGNvbnN0IHNob3VsZFJlc3VsdEFwcFBhdGhCZUNhY2hlZCA9ICFpc0FwayB8fCAoaXNBcGsgJiYgaXNVcmwpO1xuXG4gICAgaWYgKCFpc1Jlc3VsdEFwcFBhdGhBbHJlYWR5Q2FjaGVkKSB7XG4gICAgICBpZiAoc2hvdWxkUmVzdWx0QXBwUGF0aEJlQ2FjaGVkKSB7XG4gICAgICAgIC8vIC56aXAsIC5hYWIgb3IgZG93bmxvYWRlZCAuYXBrXG5cbiAgICAgICAgbGV0IHVuemlwcGVkQXBwUGF0aDtcbiAgICAgICAgbGV0IGlzVW56aXBwZWRBcGsgPSBmYWxzZTtcbiAgICAgICAgaWYgKCEoaGFzQXBrRXh0KGFwcFBhdGgpIHx8IGhhc0FhYkV4dChhcHBQYXRoKSkpIHtcbiAgICAgICAgICB1bnppcHBlZEFwcFBhdGggPSBhd2FpdCB0aGlzLnVuemlwQXBwKGFwcFBhdGgpO1xuICAgICAgICAgIGlzVW56aXBwZWRBcGsgPSBoYXNBcGtFeHQodW56aXBwZWRBcHBQYXRoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHVuemlwcGVkQXBwUGF0aCBvciBhcHBQYXRoIGhhcyBTVVBQT1JURURfRVhURU5TSU9OUy5cbiAgICAgICAgcGF0aEluQ2FjaGUgPSB1bnppcHBlZEFwcFBhdGhcbiAgICAgICAgICA/IGF3YWl0IGV4dHJhY3RVbml2ZXJzYWxBcGsoaXNVbnppcHBlZEFwaywgdW56aXBwZWRBcHBQYXRoKVxuICAgICAgICAgIDogYXdhaXQgZXh0cmFjdFVuaXZlcnNhbEFwayhpc0FwaywgYXBwUGF0aCk7XG5cbiAgICAgICAgaWYgKCFpc0FwayAmJiBpc1VybCkge1xuICAgICAgICAgIC8vIENsZWFuIHVwIHRoZSB0ZW1wb3JhcmlseSBkb3dubG9hZGVkIC5hYWIgb3IgLnppcCBwYWNrYWdlXG4gICAgICAgICAgYXdhaXQgZnMucmltcmFmKGFwcFBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNBYWJFeHQodW56aXBwZWRBcHBQYXRoKSkge1xuICAgICAgICAgIC8vIENsZWFudXAgdGhlIGxvY2FsIHVuemlwcGVkIC5hYWIgZmlsZVxuICAgICAgICAgIGF3YWl0IGZzLnJpbXJhZih1bnppcHBlZEFwcFBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHByZXNpZ25BcHAocGF0aEluQ2FjaGUpO1xuICAgICAgfSBlbHNlIGlmIChpc0Fwaykge1xuICAgICAgICAvLyBJdCBpcyBwcm9iYWJseSBub3QgdGhlIGJlc3QgaWRlYSB0byBtb2RpZnkgdGhlIHByb3ZpZGVkIGFwcCBpbi1wbGFjZSxcbiAgICAgICAgLy8gYnV0IHRoaXMgaXMgaG93IGl0IHdhcyBhbHdheXMgd29ya2luZ1xuICAgICAgICBhd2FpdCBwcmVzaWduQXBwKGFwcFBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2hvdWxkUmVzdWx0QXBwUGF0aEJlQ2FjaGVkID8ge2FwcFBhdGg6IHBhdGhJbkNhY2hlfSA6IGZhbHNlO1xuICB9XG5cbiAgZ2V0IGRyaXZlckRhdGEgKCkge1xuICAgIC8vIFRPRE8gZmlsbGUgb3V0IHJlc291cmNlIGluZm8gaGVyZVxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGlzRW11bGF0b3IgKCkge1xuICAgIHJldHVybiBoZWxwZXJzLmlzRW11bGF0b3IodGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gIH1cblxuICAvLyBUT0RPIHRoaXMgbWV0aG9kIGlzIGR1cGxpY2F0ZWQgZnJvbSB1aWF1dG9tYXRvcjItZHJpdmVyOyBjb25zb2xpZGF0ZVxuICBzZXRBdmRGcm9tQ2FwYWJpbGl0aWVzIChjYXBzKSB7XG4gICAgaWYgKHRoaXMub3B0cy5hdmQpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ2F2ZCBuYW1lIGRlZmluZWQsIGlnbm9yaW5nIGRldmljZSBuYW1lIGFuZCBwbGF0Zm9ybSB2ZXJzaW9uJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghY2Fwcy5kZXZpY2VOYW1lKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ2F2ZCBvciBkZXZpY2VOYW1lIHNob3VsZCBiZSBzcGVjaWZpZWQgd2hlbiByZWJvb3Qgb3B0aW9uIGlzIGVuYWJsZXMnKTtcbiAgICAgIH1cbiAgICAgIGlmICghY2Fwcy5wbGF0Zm9ybVZlcnNpb24pIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnYXZkIG9yIHBsYXRmb3JtVmVyc2lvbiBzaG91bGQgYmUgc3BlY2lmaWVkIHdoZW4gcmVib290IG9wdGlvbiBpcyBlbmFibGVkJyk7XG4gICAgICB9XG4gICAgICBsZXQgYXZkRGV2aWNlID0gY2Fwcy5kZXZpY2VOYW1lLnJlcGxhY2UoL1teYS16QS1aMC05Xy5dL2csICctJyk7XG4gICAgICB0aGlzLm9wdHMuYXZkID0gYCR7YXZkRGV2aWNlfV9fJHtjYXBzLnBsYXRmb3JtVmVyc2lvbn1gO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRPRE8gdGhpcyBtZXRob2QgaXMgZHVwbGljYXRlZCBmcm9tIHVpYXV0b21hdG9yMi1kcml2ZXI7IGNvbnNvbGlkYXRlXG4gIGFkZFdpcGVEYXRhVG9BdmRBcmdzICgpIHtcbiAgICBpZiAoIXRoaXMub3B0cy5hdmRBcmdzKSB7XG4gICAgICB0aGlzLm9wdHMuYXZkQXJncyA9ICctd2lwZS1kYXRhJztcbiAgICB9IGVsc2UgaWYgKCF0aGlzLm9wdHMuYXZkQXJncy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCctd2lwZS1kYXRhJykpIHtcbiAgICAgIHRoaXMub3B0cy5hdmRBcmdzICs9ICcgLXdpcGUtZGF0YSc7XG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETyBtdWNoIG9mIHRoaXMgbG9naWMgaXMgZHVwbGljYXRlZCBmcm9tIHVpYXV0b21hdG9yMlxuICBhc3luYyBzdGFydEVzcHJlc3NvU2Vzc2lvbiAoKSB7XG4gICAgdGhpcy5sb2cuaW5mbyhgRXNwcmVzc29Ecml2ZXIgdmVyc2lvbjogJHt2ZXJzaW9ufWApO1xuXG4gICAgLy8gUmVhZCBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS1hbmRyb2lkLWRyaXZlci9wdWxsLzQ2MSB3aGF0IGhhcHBlbnMgaWYgdGhlciBpcyBubyBzZXRIaWRkZW5BcGlQb2xpY3kgZm9yIEFuZHJvaWQgUCtcbiAgICBpZiAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA+PSAyOCkgeyAvLyBBbmRyb2lkIFBcbiAgICAgIHRoaXMubG9nLndhcm4oJ1JlbGF4aW5nIGhpZGRlbiBhcGkgcG9saWN5Jyk7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5zZXRIaWRkZW5BcGlQb2xpY3koJzEnLCAhIXRoaXMub3B0cy5pZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvcik7XG4gICAgfVxuXG4gICAgLy8gZ2V0IGFwcFBhY2thZ2UgZXQgYWwgZnJvbSBtYW5pZmVzdCBpZiBuZWNlc3NhcnlcbiAgICBsZXQgYXBwSW5mbyA9IGF3YWl0IGhlbHBlcnMuZ2V0TGF1bmNoSW5mbyh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICBpZiAoYXBwSW5mbykge1xuICAgICAgLy8gYW5kIGdldCBpdCBvbnRvIG91ciAnb3B0cycgb2JqZWN0IHNvIHdlIHVzZSBpdCBmcm9tIG5vdyBvblxuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdHMsIGFwcEluZm8pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBJbmZvID0gdGhpcy5vcHRzO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0IGFuIGF2ZCwgc2V0IHRoZSBsYW5ndWFnZS9sb2NhbGUsIHBpY2sgYW4gZW11bGF0b3IsIGV0Yy4uLlxuICAgIC8vIFRPRE8gd2l0aCBtdWx0aXBsZSBkZXZpY2VzIHdlJ2xsIG5lZWQgdG8gcGFyYW1ldGVyaXplIHRoaXNcbiAgICBhd2FpdCBoZWxwZXJzLmluaXREZXZpY2UodGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0tZXNwcmVzc28tZHJpdmVyL2lzc3Vlcy83MlxuICAgIGlmIChhd2FpdCB0aGlzLmFkYi5pc0FuaW1hdGlvbk9uKCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNldEFuaW1hdGlvblN0YXRlKGZhbHNlKTtcbiAgICAgICAgdGhpcy53YXNBbmltYXRpb25FbmFibGVkID0gdHJ1ZTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gdHVybiBvZmYgYW5pbWF0aW9uczogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZXQgYWN0dWFsIGRldmljZSBuYW1lLCB1ZGlkXG4gICAgdGhpcy5jYXBzLmRldmljZU5hbWUgPSB0aGlzLmFkYi5jdXJEZXZpY2VJZDtcbiAgICB0aGlzLmNhcHMuZGV2aWNlVURJRCA9IHRoaXMub3B0cy51ZGlkO1xuXG4gICAgLy8gc2V0IHVwIHRoZSBtb2RpZmllZCBlc3ByZXNzbyBzZXJ2ZXIgZXRjXG4gICAgdGhpcy5pbml0RXNwcmVzc29TZXJ2ZXIoKTtcbiAgICAvLyBGdXJ0aGVyIHByZXBhcmUgdGhlIGRldmljZSBieSBmb3J3YXJkaW5nIHRoZSBlc3ByZXNzbyBwb3J0XG4gICAgdGhpcy5sb2cuZGVidWcoYEZvcndhcmRpbmcgRXNwcmVzc28gU2VydmVyIHBvcnQgJHtERVZJQ0VfUE9SVH0gdG8gJHt0aGlzLm9wdHMuc3lzdGVtUG9ydH1gKTtcbiAgICBhd2FpdCB0aGlzLmFkYi5mb3J3YXJkUG9ydCh0aGlzLm9wdHMuc3lzdGVtUG9ydCwgREVWSUNFX1BPUlQpO1xuXG4gICAgaWYgKCF0aGlzLm9wdHMuc2tpcFVubG9jaykge1xuICAgICAgLy8gdW5sb2NrIHRoZSBkZXZpY2UgdG8gcHJlcGFyZSBpdCBmb3IgdGVzdGluZ1xuICAgICAgYXdhaXQgaGVscGVycy51bmxvY2sodGhpcywgdGhpcy5hZGIsIHRoaXMuY2Fwcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGAnc2tpcFVubG9jaycgY2FwYWJpbGl0eSBzZXQsIHNvIHNraXBwaW5nIGRldmljZSB1bmxvY2tgKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdXAgYXBwIHVuZGVyIHRlc3RcbiAgICAvLyBwcmVwYXJlIG91ciBhY3R1YWwgQVVULCBnZXQgaXQgb24gdGhlIGRldmljZSwgZXRjLi4uXG4gICAgYXdhaXQgdGhpcy5pbml0QVVUKCk7XG5cbiAgICAvL0FkZGluZyBBVVQgcGFja2FnZSBuYW1lIGluIHRoZSBjYXBhYmlsaXRpZXMgaWYgcGFja2FnZSBuYW1lIG5vdCBleGlzdCBpbiBjYXBzXG4gICAgaWYgKCF0aGlzLmNhcHMuYXBwUGFja2FnZSkge1xuICAgICAgdGhpcy5jYXBzLmFwcFBhY2thZ2UgPSBhcHBJbmZvLmFwcFBhY2thZ2U7XG4gICAgfVxuICAgIGlmICghdGhpcy5jYXBzLmFwcFdhaXRQYWNrYWdlKSB7XG4gICAgICB0aGlzLmNhcHMuYXBwV2FpdFBhY2thZ2UgPSBhcHBJbmZvLmFwcFdhaXRQYWNrYWdlIHx8IGFwcEluZm8uYXBwUGFja2FnZSB8fCB0aGlzLmNhcHMuYXBwUGFja2FnZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2Fwcy5hcHBBY3Rpdml0eSkge1xuICAgICAgdGhpcy5jYXBzLmFwcEFjdGl2aXR5ID0gcXVhbGlmeUFjdGl2aXR5TmFtZSh0aGlzLmNhcHMuYXBwQWN0aXZpdHksIHRoaXMuY2Fwcy5hcHBQYWNrYWdlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jYXBzLmFwcEFjdGl2aXR5ID0gcXVhbGlmeUFjdGl2aXR5TmFtZShhcHBJbmZvLmFwcEFjdGl2aXR5LCB0aGlzLmNhcHMuYXBwUGFja2FnZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNhcHMuYXBwV2FpdEFjdGl2aXR5KSB7XG4gICAgICB0aGlzLmNhcHMuYXBwV2FpdEFjdGl2aXR5ID0gcXVhbGlmeUFjdGl2aXR5TmFtZSh0aGlzLmNhcHMuYXBwV2FpdEFjdGl2aXR5LCB0aGlzLmNhcHMuYXBwV2FpdFBhY2thZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhcHMuYXBwV2FpdEFjdGl2aXR5ID0gcXVhbGlmeUFjdGl2aXR5TmFtZShhcHBJbmZvLmFwcFdhaXRBY3Rpdml0eSB8fCBhcHBJbmZvLmFwcEFjdGl2aXR5IHx8IHRoaXMuY2Fwcy5hcHBBY3Rpdml0eSxcbiAgICAgICAgdGhpcy5jYXBzLmFwcFdhaXRQYWNrYWdlKTtcbiAgICB9XG5cbiAgICAvLyBsYXVuY2ggZXNwcmVzc28gYW5kIHdhaXQgdGlsbCBpdHMgb25saW5lIGFuZCB3ZSBoYXZlIGEgc2Vzc2lvblxuICAgIGF3YWl0IHRoaXMuZXNwcmVzc28uc3RhcnRTZXNzaW9uKHRoaXMuY2Fwcyk7XG4gICAgaWYgKHRoaXMuY2Fwcy5hdXRvTGF1bmNoID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgTm90IHdhaXRpbmcgZm9yIHRoZSBhcHBsaWNhdGlvbiBhY3Rpdml0eSB0byBzdGFydCBiZWNhdXNlICdhdXRvTGF1bmNoJyBpcyBkaXNhYmxlZGApO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi53YWl0Rm9yQWN0aXZpdHkodGhpcy5jYXBzLmFwcFdhaXRQYWNrYWdlLCB0aGlzLmNhcHMuYXBwV2FpdEFjdGl2aXR5LCB0aGlzLm9wdHMuYXBwV2FpdER1cmF0aW9uKTtcbiAgICB9XG4gICAgLy8gaWYgd2Ugd2FudCB0byBpbW1lZGlhdGVseSBnZXQgaW50byBhIHdlYnZpZXcsIHNldCBvdXIgY29udGV4dFxuICAgIC8vIGFwcHJvcHJpYXRlbHlcbiAgICBpZiAodGhpcy5vcHRzLmF1dG9XZWJ2aWV3KSB7XG4gICAgICBhd2FpdCB0aGlzLmluaXRXZWJ2aWV3KCk7XG4gICAgfVxuXG4gICAgLy8gbm93IHRoYXQgZXZlcnl0aGluZyBoYXMgc3RhcnRlZCBzdWNjZXNzZnVsbHksIHR1cm4gb24gcHJveHlpbmcgc28gYWxsXG4gICAgLy8gc3Vic2VxdWVudCBzZXNzaW9uIHJlcXVlc3RzIGdvIHN0cmFpZ2h0IHRvL2Zyb20gZXNwcmVzc29cbiAgICB0aGlzLmp3cFByb3h5QWN0aXZlID0gdHJ1ZTtcblxuICAgIGF3YWl0IHRoaXMuYWRkRGV2aWNlSW5mb1RvQ2FwcygpO1xuICB9XG5cbiAgYXN5bmMgaW5pdFdlYnZpZXcgKCkge1xuICAgIGNvbnN0IHZpZXdOYW1lID0gYW5kcm9pZENvbW1hbmRzLmRlZmF1bHRXZWJ2aWV3TmFtZS5jYWxsKHRoaXMpO1xuICAgIGNvbnN0IHRpbWVvdXQgPSB0aGlzLm9wdHMuYXV0b1dlYnZpZXdUaW1lb3V0IHx8IDIwMDA7XG4gICAgdGhpcy5sb2cuaW5mbyhgU2V0dGluZyB3ZWJ2aWV3IHRvIGNvbnRleHQgJyR7dmlld05hbWV9JyB3aXRoIHRpbWVvdXQgJHt0aW1lb3V0fW1zYCk7XG4gICAgYXdhaXQgcmV0cnlJbnRlcnZhbCh0aW1lb3V0IC8gNTAwLCA1MDAsIHRoaXMuc2V0Q29udGV4dC5iaW5kKHRoaXMpLCB2aWV3TmFtZSk7XG4gIH1cblxuICBhc3luYyBhZGREZXZpY2VJbmZvVG9DYXBzICgpIHtcbiAgICBjb25zdCB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgcGxhdGZvcm1WZXJzaW9uLFxuICAgICAgbWFudWZhY3R1cmVyLFxuICAgICAgbW9kZWwsXG4gICAgICByZWFsRGlzcGxheVNpemUsXG4gICAgICBkaXNwbGF5RGVuc2l0eSxcbiAgICB9ID0gYXdhaXQgdGhpcy5tb2JpbGVHZXREZXZpY2VJbmZvKCk7XG4gICAgdGhpcy5jYXBzLmRldmljZUFwaUxldmVsID0gcGFyc2VJbnQoYXBpVmVyc2lvbiwgMTApO1xuICAgIHRoaXMuY2Fwcy5wbGF0Zm9ybVZlcnNpb24gPSBwbGF0Zm9ybVZlcnNpb247XG4gICAgdGhpcy5jYXBzLmRldmljZVNjcmVlblNpemUgPSByZWFsRGlzcGxheVNpemU7XG4gICAgdGhpcy5jYXBzLmRldmljZVNjcmVlbkRlbnNpdHkgPSBkaXNwbGF5RGVuc2l0eTtcbiAgICB0aGlzLmNhcHMuZGV2aWNlTW9kZWwgPSBtb2RlbDtcbiAgICB0aGlzLmNhcHMuZGV2aWNlTWFudWZhY3R1cmVyID0gbWFudWZhY3R1cmVyO1xuICB9XG5cbiAgaW5pdEVzcHJlc3NvU2VydmVyICgpIHtcbiAgICAvLyBub3cgdGhhdCB3ZSBoYXZlIHBhY2thZ2UgYW5kIGFjdGl2aXR5LCB3ZSBjYW4gY3JlYXRlIGFuIGluc3RhbmNlIG9mXG4gICAgLy8gZXNwcmVzc28gd2l0aCB0aGUgYXBwcm9wcmlhdGUgZGF0YVxuICAgIHRoaXMuZXNwcmVzc28gPSBuZXcgRXNwcmVzc29SdW5uZXIodGhpcy5sb2csIHtcbiAgICAgIGhvc3Q6IHRoaXMub3B0cy5yZW1vdGVBZGJIb3N0IHx8IHRoaXMub3B0cy5ob3N0IHx8ICcxMjcuMC4wLjEnLFxuICAgICAgc3lzdGVtUG9ydDogdGhpcy5vcHRzLnN5c3RlbVBvcnQsXG4gICAgICBkZXZpY2VQb3J0OiBERVZJQ0VfUE9SVCxcbiAgICAgIGFkYjogdGhpcy5hZGIsXG4gICAgICBhcGs6IHRoaXMub3B0cy5hcHAsXG4gICAgICB0bXBEaXI6IHRoaXMub3B0cy50bXBEaXIsXG4gICAgICBhcHBQYWNrYWdlOiB0aGlzLm9wdHMuYXBwUGFja2FnZSxcbiAgICAgIGFwcEFjdGl2aXR5OiB0aGlzLm9wdHMuYXBwQWN0aXZpdHksXG4gICAgICBmb3JjZUVzcHJlc3NvUmVidWlsZDogISF0aGlzLm9wdHMuZm9yY2VFc3ByZXNzb1JlYnVpbGQsXG4gICAgICBlc3ByZXNzb0J1aWxkQ29uZmlnOiB0aGlzLm9wdHMuZXNwcmVzc29CdWlsZENvbmZpZyxcbiAgICAgIHNob3dHcmFkbGVMb2c6ICEhdGhpcy5vcHRzLnNob3dHcmFkbGVMb2csXG4gICAgICBzZXJ2ZXJMYXVuY2hUaW1lb3V0OiB0aGlzLm9wdHMuZXNwcmVzc29TZXJ2ZXJMYXVuY2hUaW1lb3V0LFxuICAgICAgYW5kcm9pZEluc3RhbGxUaW1lb3V0OiB0aGlzLm9wdHMuYW5kcm9pZEluc3RhbGxUaW1lb3V0LFxuICAgICAgc2tpcFNlcnZlckluc3RhbGxhdGlvbjogdGhpcy5vcHRzLnNraXBTZXJ2ZXJJbnN0YWxsYXRpb24sXG4gICAgICB1c2VLZXlzdG9yZTogdGhpcy5vcHRzLnVzZUtleXN0b3JlLFxuICAgICAga2V5c3RvcmVQYXRoOiB0aGlzLm9wdHMua2V5c3RvcmVQYXRoLFxuICAgICAga2V5c3RvcmVQYXNzd29yZDogdGhpcy5vcHRzLmtleXN0b3JlUGFzc3dvcmQsXG4gICAgICBrZXlBbGlhczogdGhpcy5vcHRzLmtleUFsaWFzLFxuICAgICAga2V5UGFzc3dvcmQ6IHRoaXMub3B0cy5rZXlQYXNzd29yZCxcbiAgICAgIGRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlOiB0aGlzLm9wdHMuZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2UsXG4gICAgfSk7XG4gICAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMuZXNwcmVzc28ucHJveHlSZXFSZXMuYmluZCh0aGlzLmVzcHJlc3NvKTtcbiAgICB0aGlzLnByb3h5Q29tbWFuZCA9IHRoaXMuZXNwcmVzc28ucHJveHlDb21tYW5kLmJpbmQodGhpcy5lc3ByZXNzbyk7XG4gIH1cblxuICAvLyBUT0RPIHRoaXMgbWV0aG9kIGlzIG1vc3RseSBkdXBsaWNhdGVkIGZyb20gdWlhdXRvbWF0b3IyXG4gIGFzeW5jIGluaXRBVVQgKCkge1xuICAgIC8vIHNldCB0aGUgbG9jYWxpemVkIHN0cmluZ3MgZm9yIHRoZSBjdXJyZW50IGxhbmd1YWdlIGZyb20gdGhlIGFwa1xuICAgIC8vIFRPRE86IGluY29ycG9yYXRlIGNoYW5nZXMgZnJvbSBhcHBpdW0jNTMwOCB3aGljaCBmaXggYSByYWNlIGNvbmQtXG4gICAgLy8gaXRpb24gYnVnIGluIG9sZCBhcHBpdW0gYW5kIG5lZWQgdG8gYmUgcmVwbGljYXRlZCBoZXJlXG4gICAgLy8gdGhpcy5hcGtTdHJpbmdzW3RoaXMub3B0cy5sYW5ndWFnZV0gPSBhd2FpdCBhbmRyb2lkSGVscGVycy5wdXNoU3RyaW5ncyhcbiAgICAvLyAgICAgdGhpcy5vcHRzLmxhbmd1YWdlLCB0aGlzLmFkYiwgdGhpcy5vcHRzKTtcblxuICAgIC8vIFVuaW5zdGFsbCBhbnkgdW5pbnN0YWxsT3RoZXJQYWNrYWdlcyB3aGljaCB3ZXJlIHNwZWNpZmllZCBpbiBjYXBzXG4gICAgaWYgKHRoaXMub3B0cy51bmluc3RhbGxPdGhlclBhY2thZ2VzKSB7XG4gICAgICBhd2FpdCBoZWxwZXJzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMoXG4gICAgICAgIHRoaXMuYWRiLFxuICAgICAgICBoZWxwZXJzLnBhcnNlQXJyYXkodGhpcy5vcHRzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMpLFxuICAgICAgICBbU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgVEVTVF9BUEtfUEtHXVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMub3B0cy5hcHApIHtcbiAgICAgIGlmICh0aGlzLm9wdHMuZnVsbFJlc2V0KSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ0Z1bGwgcmVzZXQgcmVxdWlyZXMgYW4gYXBwIGNhcGFiaWxpdHksIHVzZSBmYXN0UmVzZXQgaWYgYXBwIGlzIG5vdCBwcm92aWRlZCcpO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2cuZGVidWcoJ05vIGFwcCBjYXBhYmlsaXR5LiBBc3N1bWluZyBpdCBpcyBhbHJlYWR5IG9uIHRoZSBkZXZpY2UnKTtcbiAgICAgIGlmICh0aGlzLm9wdHMuZmFzdFJlc2V0KSB7XG4gICAgICAgIGF3YWl0IGhlbHBlcnMucmVzZXRBcHAodGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLm9wdHMuc2tpcFVuaW5zdGFsbCkge1xuICAgICAgYXdhaXQgdGhpcy5hZGIudW5pbnN0YWxsQXBrKHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0cy5hcHApIHtcbiAgICAgIGF3YWl0IGhlbHBlcnMuaW5zdGFsbEFwayh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0cy5za2lwU2VydmVySW5zdGFsbGF0aW9uKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1Zygnc2tpcFNlcnZlckluc3RhbGxhdGlvbiBjYXBhYmlsaXR5IGlzIHNldC4gTm90IGluc3RhbGxpZyBlc3ByZXNzby1zZXJ2ZXIgJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuZXNwcmVzc28uaW5zdGFsbFRlc3RBcGsoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLmFkZFRvRGV2aWNlSWRsZVdoaXRlbGlzdChTRVRUSU5HU19IRUxQRVJfUEtHX0lELCBURVNUX0FQS19QS0cpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBDYW5ub3QgYWRkIHNlcnZlciBwYWNrYWdlcyB0byB0aGUgRG96ZSB3aGl0ZWxpc3QuIE9yaWdpbmFsIGVycm9yOiBgICtcbiAgICAgICAgICAoZS5zdGRlcnIgfHwgZS5tZXNzYWdlKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlU2Vzc2lvbiAoKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoJ0RlbGV0aW5nIGVzcHJlc3NvIHNlc3Npb24nKTtcblxuICAgIHRyeSB7XG4gICAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLl9zY3JlZW5SZWNvcmRpbmdQcm9wZXJ0aWVzKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3BSZWNvcmRpbmdTY3JlZW4oKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChpZ24pIHt9XG5cbiAgICBhd2FpdCBhbmRyb2lkSGVscGVycy5yZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnModGhpcy5zZXJ2ZXIsIHRoaXMuc2Vzc2lvbklkKTtcblxuICAgIGF3YWl0IHRoaXMubW9iaWxlU3RvcFNjcmVlblN0cmVhbWluZygpO1xuXG4gICAgaWYgKHRoaXMuZXNwcmVzc28pIHtcbiAgICAgIGlmICh0aGlzLmp3cFByb3h5QWN0aXZlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZXNwcmVzc28uZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgfVxuICAgICAgdGhpcy5lc3ByZXNzbyA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSBmYWxzZTtcblxuICAgIC8vIFRPRE8gYmVsb3cgbG9naWMgaXMgZHVwbGljYXRlZCBmcm9tIHVpYXV0b21hdG9yMlxuICAgIGlmICh0aGlzLmFkYikge1xuICAgICAgaWYgKHRoaXMud2FzQW5pbWF0aW9uRW5hYmxlZCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLnNldEFuaW1hdGlvblN0YXRlKHRydWUpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gcmVzZXQgYW5pbWF0aW9uOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRzLnVuaWNvZGVLZXlib2FyZCAmJiB0aGlzLm9wdHMucmVzZXRLZXlib2FyZCAmJlxuICAgICAgICAgIHRoaXMuZGVmYXVsdElNRSkge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgUmVzZXR0aW5nIElNRSB0byAnJHt0aGlzLmRlZmF1bHRJTUV9J2ApO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5zZXRJTUUodGhpcy5kZWZhdWx0SU1FKTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5pc0Nocm9tZVNlc3Npb24gJiYgdGhpcy5vcHRzLmFwcFBhY2thZ2UgJiYgIXRoaXMub3B0cy5kb250U3RvcEFwcE9uUmVzZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuZm9yY2VTdG9wKHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdHMuZnVsbFJlc2V0ICYmICF0aGlzLm9wdHMuc2tpcFVuaW5zdGFsbCAmJiAhdGhpcy5hcHBPbkRldmljZSkge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgRlVMTF9SRVNFVCBzZXQgdG8gJ3RydWUnLCBVbmluc3RhbGxpbmcgJyR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9J2ApO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi51bmluc3RhbGxBcGsodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5hZGIuc3RvcExvZ2NhdCgpO1xuICAgICAgaWYgKHRoaXMub3B0cy5yZWJvb3QpIHtcbiAgICAgICAgbGV0IGF2ZE5hbWUgPSB0aGlzLm9wdHMuYXZkLnJlcGxhY2UoJ0AnLCAnJyk7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBjbG9zaW5nIGVtdWxhdG9yICcke2F2ZE5hbWV9J2ApO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5raWxsRW11bGF0b3IoYXZkTmFtZSk7XG4gICAgICB9XG4gICAgICBpZiAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA+PSAyOCkgeyAvLyBBbmRyb2lkIFBcbiAgICAgICAgdGhpcy5sb2cuaW5mbygnUmVzdG9yaW5nIGhpZGRlbiBhcGkgcG9saWN5IHRvIHRoZSBkZXZpY2UgZGVmYXVsdCBjb25maWd1cmF0aW9uJyk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNldERlZmF1bHRIaWRkZW5BcGlQb2xpY3koISF0aGlzLm9wdHMuaWdub3JlSGlkZGVuQXBpUG9saWN5RXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgICBhd2FpdCBzdXBlci5kZWxldGVTZXNzaW9uKCk7XG4gICAgaWYgKHRoaXMub3B0cy5zeXN0ZW1Qb3J0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnJlbW92ZVBvcnRGb3J3YXJkKHRoaXMub3B0cy5zeXN0ZW1Qb3J0KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYFVuYWJsZSB0byByZW1vdmUgcG9ydCBmb3J3YXJkICcke2Vycm9yLm1lc3NhZ2V9J2ApO1xuICAgICAgICAvL0lnbm9yZSwgdGhpcyBibG9jayB3aWxsIGFsc28gYmUgY2FsbGVkIHdoZW4gd2UgZmFsbCBpbiBjYXRjaCBibG9ja1xuICAgICAgICAvLyBhbmQgYmVmb3JlIGV2ZW4gcG9ydCBmb3J3YXJkLlxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9uU2V0dGluZ3NVcGRhdGUgKCkge1xuICAgIC8vIGludGVudGlvbmFsbHkgZG8gbm90aGluZyBoZXJlLCBzaW5jZSBjb21tYW5kcy51cGRhdGVTZXR0aW5ncyBwcm94aWVzXG4gICAgLy8gc2V0dGluZ3MgdG8gdGhlIGVzcHJlc3NvIHNlcnZlciBhbHJlYWR5XG4gIH1cblxuICBwcm94eUFjdGl2ZSAoc2Vzc2lvbklkKSB7XG4gICAgc3VwZXIucHJveHlBY3RpdmUoc2Vzc2lvbklkKTtcblxuICAgIC8vIHdlIGFsd2F5cyBoYXZlIGFuIGFjdGl2ZSBwcm94eSB0byB0aGUgZXNwcmVzc28gc2VydmVyXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjYW5Qcm94eSAoc2Vzc2lvbklkKSB7XG4gICAgc3VwZXIuY2FuUHJveHkoc2Vzc2lvbklkKTtcblxuICAgIC8vIHdlIGNhbiBhbHdheXMgcHJveHkgdG8gdGhlIGVzcHJlc3NvIHNlcnZlclxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZ2V0UHJveHlBdm9pZExpc3QgKHNlc3Npb25JZCkge1xuICAgIHN1cGVyLmdldFByb3h5QXZvaWRMaXN0KHNlc3Npb25JZCk7XG4gICAgLy8gd2UgYXJlIG1haW50YWluaW5nIHR3byBzZXRzIG9mIE5PX1BST1hZIGxpc3RzLCBvbmUgZm9yIGNocm9tZWRyaXZlcihDSFJPTUVfTk9fUFJPWFkpXG4gICAgLy8gYW5kIG9uZSBmb3IgRXNwcmVzc28oTk9fUFJPWFkpLCBiYXNlZCBvbiBjdXJyZW50IGNvbnRleHQgd2lsbCByZXR1cm4gcmVsYXRlZCBOT19QUk9YWSBsaXN0XG4gICAgdGhpcy5qd3BQcm94eUF2b2lkID0gXy5pc05pbCh0aGlzLmNocm9tZWRyaXZlcikgPyBOT19QUk9YWSA6IENIUk9NRV9OT19QUk9YWTtcbiAgICBpZiAodGhpcy5vcHRzLm5hdGl2ZVdlYlNjcmVlbnNob3QpIHtcbiAgICAgIHRoaXMuandwUHJveHlBdm9pZCA9IFsuLi50aGlzLmp3cFByb3h5QXZvaWQsIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3NjcmVlbnNob3QnKV1dO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmp3cFByb3h5QXZvaWQ7XG4gIH1cblxuICBnZXQgaXNDaHJvbWVTZXNzaW9uICgpIHtcbiAgICByZXR1cm4gaGVscGVycy5pc0Nocm9tZUJyb3dzZXIodGhpcy5vcHRzLmJyb3dzZXJOYW1lKTtcbiAgfVxuXG4gIGdldCBhcHBPbkRldmljZSAoKSB7XG4gICAgcmV0dXJuICF0aGlzLm9wdHMuYXBwICYmIHRoaXMuaGVscGVycy5pc1BhY2thZ2VPckJ1bmRsZSh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gIH1cbn1cblxuLy8gZmlyc3QgYWRkIHRoZSBhbmRyb2lkLWRyaXZlciBjb21tYW5kcyB3aGljaCB3ZSB3aWxsIGZhbGwgYmFjayB0b1xuZm9yIChsZXQgW2NtZCwgZm5dIG9mIF8udG9QYWlycyhhbmRyb2lkQ29tbWFuZHMpKSB7XG4gIC8vIHdlIGRvIHNvbWUgZGlmZmVyZW50L3NwZWNpYWwgdGhpbmdzIHdpdGggdGhlc2UgbWV0aG9kc1xuICBpZiAoIV8uaW5jbHVkZXMoWydkZWZhdWx0V2Vidmlld05hbWUnXSwgY21kKSkge1xuICAgIEVzcHJlc3NvRHJpdmVyLnByb3RvdHlwZVtjbWRdID0gZm47XG4gIH1cbn1cblxuLy8gdGhlbiBvdmVyd3JpdGUgd2l0aCBhbnkgZXNwcmVzc28tc3BlY2lmaWMgY29tbWFuZHNcbmZvciAobGV0IFtjbWQsIGZuXSBvZiBfLnRvUGFpcnMoY29tbWFuZHMpKSB7XG4gIEVzcHJlc3NvRHJpdmVyLnByb3RvdHlwZVtjbWRdID0gZm47XG59XG5cbmV4cG9ydCB7IEVzcHJlc3NvRHJpdmVyIH07XG5leHBvcnQgZGVmYXVsdCBFc3ByZXNzb0RyaXZlcjtcbiJdLCJmaWxlIjoibGliL2RyaXZlci5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
|
|
549
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2RyaXZlci5qcyIsIm5hbWVzIjpbImhlbHBlcnMiLCJhbmRyb2lkSGVscGVycyIsIlNZU1RFTV9QT1JUX1JBTkdFIiwiREVWSUNFX1BPUlQiLCJOT19QUk9YWSIsIlJlZ0V4cCIsIkNIUk9NRV9OT19QUk9YWSIsIkFQS19FWFQiLCJBQUJfRVhUIiwiU1VQUE9SVEVEX0VYVEVOU0lPTlMiLCJFc3ByZXNzb0RyaXZlciIsIkJhc2VEcml2ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJzaG91bGRWYWxpZGF0ZUNhcHMiLCJzaGVsbCIsImxvY2F0b3JTdHJhdGVnaWVzIiwiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwiZXNwcmVzc28iLCJqd3BQcm94eUFjdGl2ZSIsImRlZmF1bHRJTUUiLCJqd3BQcm94eUF2b2lkIiwiYXBrU3RyaW5ncyIsInNldHRpbmdzIiwiRGV2aWNlU2V0dGluZ3MiLCJvblNldHRpbmdzVXBkYXRlIiwiYmluZCIsImNocm9tZWRyaXZlciIsInNlc3Npb25DaHJvbWVkcml2ZXJzIiwiY3JlYXRlU2Vzc2lvbiIsImFyZ3MiLCJzZXNzaW9uSWQiLCJjYXBzIiwic2VydmVyRGV0YWlscyIsInBsYXRmb3JtIiwid2ViU3RvcmFnZUVuYWJsZWQiLCJ0YWtlc1NjcmVlbnNob3QiLCJqYXZhc2NyaXB0RW5hYmxlZCIsImRhdGFiYXNlRW5hYmxlZCIsIm5ldHdvcmtDb25uZWN0aW9uRW5hYmxlZCIsImxvY2F0aW9uQ29udGV4dEVuYWJsZWQiLCJ3YXJuaW5ncyIsImRlc2lyZWQiLCJPYmplY3QiLCJhc3NpZ24iLCJjdXJDb250ZXh0IiwiZGVmYXVsdENvbnRleHROYW1lIiwiZGVmYXVsdE9wdHMiLCJmdWxsUmVzZXQiLCJhdXRvTGF1bmNoIiwiYWRiUG9ydCIsIkRFRkFVTFRfQURCX1BPUlQiLCJhbmRyb2lkSW5zdGFsbFRpbWVvdXQiLCJfIiwiZGVmYXVsdHMiLCJpc0Nocm9tZVNlc3Npb24iLCJhcHAiLCJsb2ciLCJ3YXJuIiwiZXJyb3JBbmRUaHJvdyIsInJlYm9vdCIsInNldEF2ZEZyb21DYXBhYmlsaXRpZXMiLCJhZGRXaXBlRGF0YVRvQXZkQXJncyIsInN5c3RlbVBvcnQiLCJ1ZGlkIiwiZW1Qb3J0IiwiZ2V0RGV2aWNlSW5mb0Zyb21DYXBzIiwiYWRiIiwiY3JlYXRlQURCIiwiY29uZmlndXJlQXBwIiwib25Qb3N0UHJvY2VzcyIsIm9uUG9zdENvbmZpZ3VyZUFwcCIsInN1cHBvcnRlZEV4dGVuc2lvbnMiLCJhcHBPbkRldmljZSIsImluZm8iLCJhcHBQYWNrYWdlIiwiaXNBcHBJbnN0YWxsZWQiLCJzdGFydEVzcHJlc3NvU2Vzc2lvbiIsImUiLCJkZWxldGVTZXNzaW9uIiwibWVzc2FnZSIsImVuZHNXaXRoIiwiZXJyb3JzIiwiU2Vzc2lvbk5vdENyZWF0ZWRFcnJvciIsImVyciIsInN0YWNrIiwidW56aXBBcHAiLCJhcHBQYXRoIiwidXNlU3lzdGVtVW56aXBFbnYiLCJwcm9jZXNzIiwiZW52IiwiQVBQSVVNX1BSRUZFUl9TWVNURU1fVU5aSVAiLCJ1c2VTeXN0ZW1VbnppcCIsImlzRW1wdHkiLCJpbmNsdWRlcyIsInRvTG93ZXIiLCJ0bXBSb290IiwidGVtcERpciIsIm9wZW5EaXIiLCJ6aXAiLCJleHRyYWN0QWxsVG8iLCJnbG9iUGF0dGVybiIsIm1hcCIsImV4dCIsInJlcGxhY2UiLCJqb2luIiwic29ydGVkQnVuZGxlSXRlbXMiLCJmcyIsImdsb2IiLCJjd2QiLCJzdHJpY3QiLCJzb3J0IiwiYSIsImIiLCJzcGxpdCIsInBhdGgiLCJzZXAiLCJsZW5ndGgiLCJ1bnppcHBlZEFwcFBhdGgiLCJmaXJzdCIsImRlYnVnIiwiY2FjaGVkQXBwSW5mbyIsImlzVXJsIiwicHJlc2lnbkFwcCIsImFwcExvY2F0aW9uIiwibm9TaWduIiwiY2hlY2tBcGtDZXJ0Iiwic2lnbiIsImhhc0Fwa0V4dCIsImhhc0FhYkV4dCIsImV4dHJhY3RVbml2ZXJzYWxBcGsiLCJzaG91bGRFeHRyYWN0IiwicGF0aEluQ2FjaGUiLCJpc1Jlc3VsdEFwcFBhdGhBbHJlYWR5Q2FjaGVkIiwiaXNQbGFpbk9iamVjdCIsInBhY2thZ2VIYXNoIiwiaGFzaCIsImV4aXN0cyIsImZ1bGxQYXRoIiwiaXNBcGsiLCJzaG91bGRSZXN1bHRBcHBQYXRoQmVDYWNoZWQiLCJpc1VuemlwcGVkQXBrIiwicmltcmFmIiwiZHJpdmVyRGF0YSIsImlzRW11bGF0b3IiLCJhdmQiLCJkZXZpY2VOYW1lIiwicGxhdGZvcm1WZXJzaW9uIiwiYXZkRGV2aWNlIiwiYXZkQXJncyIsInRvTG93ZXJDYXNlIiwidmVyc2lvbiIsImdldEFwaUxldmVsIiwic2V0SGlkZGVuQXBpUG9saWN5IiwiaWdub3JlSGlkZGVuQXBpUG9saWN5RXJyb3IiLCJhcHBJbmZvIiwiZ2V0TGF1bmNoSW5mbyIsImluaXREZXZpY2UiLCJpc0FuaW1hdGlvbk9uIiwic2V0QW5pbWF0aW9uU3RhdGUiLCJ3YXNBbmltYXRpb25FbmFibGVkIiwiY3VyRGV2aWNlSWQiLCJkZXZpY2VVRElEIiwiaW5pdEVzcHJlc3NvU2VydmVyIiwiZm9yd2FyZFBvcnQiLCJza2lwVW5sb2NrIiwidW5sb2NrIiwiaW5pdEFVVCIsImFwcFdhaXRQYWNrYWdlIiwiYXBwQWN0aXZpdHkiLCJhcHBXYWl0QWN0aXZpdHkiLCJzdGFydFNlc3Npb24iLCJ3YWl0Rm9yQWN0aXZpdHkiLCJhcHBXYWl0RHVyYXRpb24iLCJhdXRvV2VidmlldyIsImluaXRXZWJ2aWV3IiwiYWRkRGV2aWNlSW5mb1RvQ2FwcyIsInZpZXdOYW1lIiwiYW5kcm9pZENvbW1hbmRzIiwiZGVmYXVsdFdlYnZpZXdOYW1lIiwiY2FsbCIsInRpbWVvdXQiLCJhdXRvV2Vidmlld1RpbWVvdXQiLCJzZXRDb250ZXh0IiwiYXBpVmVyc2lvbiIsIm1hbnVmYWN0dXJlciIsIm1vZGVsIiwicmVhbERpc3BsYXlTaXplIiwiZGlzcGxheURlbnNpdHkiLCJtb2JpbGVHZXREZXZpY2VJbmZvIiwiZGV2aWNlQXBpTGV2ZWwiLCJwYXJzZUludCIsImRldmljZVNjcmVlblNpemUiLCJkZXZpY2VTY3JlZW5EZW5zaXR5IiwiZGV2aWNlTW9kZWwiLCJkZXZpY2VNYW51ZmFjdHVyZXIiLCJFc3ByZXNzb1J1bm5lciIsImhvc3QiLCJyZW1vdGVBZGJIb3N0IiwiZGV2aWNlUG9ydCIsImFwayIsInRtcERpciIsImZvcmNlRXNwcmVzc29SZWJ1aWxkIiwiZXNwcmVzc29CdWlsZENvbmZpZyIsInNob3dHcmFkbGVMb2ciLCJzZXJ2ZXJMYXVuY2hUaW1lb3V0IiwiZXNwcmVzc29TZXJ2ZXJMYXVuY2hUaW1lb3V0Iiwic2tpcFNlcnZlckluc3RhbGxhdGlvbiIsInVzZUtleXN0b3JlIiwia2V5c3RvcmVQYXRoIiwia2V5c3RvcmVQYXNzd29yZCIsImtleUFsaWFzIiwia2V5UGFzc3dvcmQiLCJkaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZSIsInByb3h5UmVxUmVzIiwicHJveHlDb21tYW5kIiwidW5pbnN0YWxsT3RoZXJQYWNrYWdlcyIsInBhcnNlQXJyYXkiLCJTRVRUSU5HU19IRUxQRVJfUEtHX0lEIiwiVEVTVF9BUEtfUEtHIiwiZmFzdFJlc2V0IiwicmVzZXRBcHAiLCJza2lwVW5pbnN0YWxsIiwidW5pbnN0YWxsQXBrIiwiaW5zdGFsbEFwayIsImluc3RhbGxUZXN0QXBrIiwiYWRkVG9EZXZpY2VJZGxlV2hpdGVsaXN0Iiwic3RkZXJyIiwiX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMiLCJzdG9wUmVjb3JkaW5nU2NyZWVuIiwiaWduIiwicmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzIiwic2VydmVyIiwibW9iaWxlU3RvcFNjcmVlblN0cmVhbWluZyIsInVuaWNvZGVLZXlib2FyZCIsInJlc2V0S2V5Ym9hcmQiLCJzZXRJTUUiLCJkb250U3RvcEFwcE9uUmVzZXQiLCJmb3JjZVN0b3AiLCJzdG9wTG9nY2F0IiwiYXZkTmFtZSIsImtpbGxFbXVsYXRvciIsInNldERlZmF1bHRIaWRkZW5BcGlQb2xpY3kiLCJ1bmRlZmluZWQiLCJyZW1vdmVQb3J0Rm9yd2FyZCIsImVycm9yIiwicHJveHlBY3RpdmUiLCJjYW5Qcm94eSIsImdldFByb3h5QXZvaWRMaXN0IiwiaXNOaWwiLCJuYXRpdmVXZWJTY3JlZW5zaG90IiwiaXNDaHJvbWVCcm93c2VyIiwiYnJvd3Nlck5hbWUiLCJpc1BhY2thZ2VPckJ1bmRsZSIsImNtZCIsImZuIiwidG9QYWlycyIsInByb3RvdHlwZSIsImNvbW1hbmRzIl0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL2RyaXZlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBCYXNlRHJpdmVyLCBlcnJvcnMsIGlzRXJyb3JUeXBlLCBEZXZpY2VTZXR0aW5nc30gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyBFc3ByZXNzb1J1bm5lciwgVEVTVF9BUEtfUEtHIH0gZnJvbSAnLi9lc3ByZXNzby1ydW5uZXInO1xuaW1wb3J0IHsgZnMsIHRlbXBEaXIsIHppcCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgY29tbWFuZHMgZnJvbSAnLi9jb21tYW5kcyc7XG5pbXBvcnQgeyBERUZBVUxUX0FEQl9QT1JUIH0gZnJvbSAnYXBwaXVtLWFkYic7XG5pbXBvcnQgeyBhbmRyb2lkSGVscGVycywgYW5kcm9pZENvbW1hbmRzLCBTRVRUSU5HU19IRUxQRVJfUEtHX0lEIH0gZnJvbSAnYXBwaXVtLWFuZHJvaWQtZHJpdmVyJztcbmltcG9ydCBkZXNpcmVkQ2FwQ29uc3RyYWludHMgZnJvbSAnLi9kZXNpcmVkLWNhcHMnO1xuaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4uLy4uL3BhY2thZ2UuanNvbic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW1wb3J0L25vLXVucmVzb2x2ZWRcbmltcG9ydCB7IGZpbmRBUG9ydE5vdEluVXNlIH0gZnJvbSAncG9ydHNjYW5uZXInO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IHF1YWxpZnlBY3Rpdml0eU5hbWUgfSBmcm9tICcuL3V0aWxzJztcblxuXG4vLyBUT0RPIG1lcmdlIG91ciBvd24gaGVscGVycyBvbnRvIHRoaXMgbGF0ZXJcbmNvbnN0IGhlbHBlcnMgPSBhbmRyb2lkSGVscGVycztcblxuLy8gVGhlIHJhbmdlIG9mIHBvcnRzIHdlIGNhbiB1c2Ugb24gdGhlIHN5c3RlbSBmb3IgY29tbXVuaWNhdGluZyB0byB0aGVcbi8vIEVzcHJlc3NvIEhUVFAgc2VydmVyIG9uIHRoZSBkZXZpY2VcbmNvbnN0IFNZU1RFTV9QT1JUX1JBTkdFID0gWzgzMDAsIDgzOTldO1xuXG4vLyBUaGlzIGlzIHRoZSBwb3J0IHRoYXQgdGhlIGVzcHJlc3NvIHNlcnZlciBsaXN0ZW5zIHRvIG9uIHRoZSBkZXZpY2UuIFdlIHdpbGxcbi8vIGZvcndhcmQgb25lIG9mIHRoZSBwb3J0cyBhYm92ZSBvbiB0aGUgc3lzdGVtIHRvIHRoaXMgcG9ydCBvbiB0aGUgZGV2aWNlLlxuY29uc3QgREVWSUNFX1BPUlQgPSA2NzkxO1xuXG4vLyBOT19QUk9YWSBjb250YWlucyB0aGUgcGF0aHMgdGhhdCB3ZSBuZXZlciB3YW50IHRvIHByb3h5IHRvIGVzcHJlc3NvIHNlcnZlci5cbi8vIFRPRE86ICBBZGQgdGhlIGxpc3Qgb2YgcGF0aHMgdGhhdCB3ZSBuZXZlciB3YW50IHRvIHByb3h5IHRvIGVzcHJlc3NvIHNlcnZlci5cbi8vIFRPRE86IE5lZWQgdG8gc2VncmVnYXRlIHRoZSBwYXRocyBiZXR0ZXIgd2F5IHVzaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2hlcmV2ZXIgYXBwbGljYWJsZS5cbi8vIChOb3Qgc2VncmVnYXRpbmcgcmlnaHQgYXdheSBiZWNhdXNlIG1vcmUgcGF0aHMgdG8gYmUgYWRkZWQgaW4gdGhlIE5PX1BST1hZIGxpc3QpXG5jb25zdCBOT19QUk9YWSA9IFtcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vKD8hLiovKScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9jdXJyZW50X2FjdGl2aXR5JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2N1cnJlbnRfcGFja2FnZScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9kaXNwbGF5X2RlbnNpdHknKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvaXNfa2V5Ym9hcmRfc2hvd24nKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2Uvc3lzdGVtX2JhcnMnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2Uvc3lzdGVtX3RpbWUnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9zZXR0aW5ncycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29udGV4dCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29udGV4dHMnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2ltZS9bXi9dKycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbmV0d29ya19jb25uZWN0aW9uJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90aW1lb3V0cycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdXJsJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2FwcC9iYWNrZ3JvdW5kJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2FwcC9jbG9zZScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9hcHAvbGF1bmNoJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2FwcC9yZXNldCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9hcHAvc3RyaW5ncycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9jb21wYXJlX2ltYWdlcycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvYWN0aXZhdGVfYXBwJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9hcHBfaW5zdGFsbGVkJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9hcHBfc3RhdGUnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2Zpbmdlcl9wcmludCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvZ2V0X2NsaXBib2FyZCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvaW5zdGFsbF9hcHAnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2lzX2xvY2tlZCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvbG9jaycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvcHVsbF9maWxlJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9wdWxsX2ZvbGRlcicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvcHVzaF9maWxlJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9yZW1vdmVfYXBwJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9zdGFydF9hY3Rpdml0eScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvdGVybWluYXRlX2FwcCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvdW5sb2NrJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2dldFBlcmZvcm1hbmNlRGF0YScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9wZXJmb3JtYW5jZURhdGEvdHlwZXMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vc2V0dGluZ3MnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZXhlY3V0ZV9kcml2ZXInKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vc3RhcnRfcmVjb3JkaW5nX3NjcmVlbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9zdG9wX3JlY29yZGluZ19zY3JlZW4nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUvYXN5bmMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlL3N5bmMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlX2FzeW5jJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvaW1lL1teL10rJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9jYXRpb24nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9uZXR3b3JrX2Nvbm5lY3Rpb24nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90aW1lb3V0cycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3VybCcpXSxcblxuICAvLyBNSlNPTldQIGNvbW1hbmRzXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvZy90eXBlcycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvZycpXSxcblxuICAvLyBXM0MgY29tbWFuZHNcbiAgLy8gRm9yIFNlbGVuaXVtIHY0IChXM0MgZG9lcyBub3QgaGF2ZSB0aGlzIHJvdXRlKVxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zZS9sb2cvdHlwZXMnKV0sXG4gIC8vIEZvciBTZWxlbml1bSB2NCAoVzNDIGRvZXMgbm90IGhhdmUgdGhpcyByb3V0ZSlcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3NlL2xvZycpXSxcbl07XG5cbi8vIFRoaXMgaXMgYSBzZXQgb2YgbWV0aG9kcyBhbmQgcGF0aHMgdGhhdCB3ZSBuZXZlciB3YW50IHRvIHByb3h5IHRvIENocm9tZWRyaXZlci5cbmNvbnN0IENIUk9NRV9OT19QUk9YWSA9IFtcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50L1teL10rL3JlY3QnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL29yaWVudGF0aW9uJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29udGV4dCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL29yaWVudGF0aW9uJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdG91Y2gvbXVsdGkvcGVyZm9ybScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3RvdWNoL3BlcmZvcm0nKV0sXG5cbiAgLy8gdGhpcyBpcyBuZWVkZWQgdG8gbWFrZSB0aGUgbW9iaWxlOiBjb21tYW5kcyB3b3JraW5nIGluIHdlYiBjb250ZXh0XG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlJCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUvc3luYycpXSxcblxuICAvLyBNSlNPTldQIGNvbW1hbmRzXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvZy90eXBlcycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvZycpXSxcblxuICAvLyBXM0MgY29tbWFuZHNcbiAgLy8gRm9yIFNlbGVuaXVtIHY0IChXM0MgZG9lcyBub3QgaGF2ZSB0aGlzIHJvdXRlKVxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zZS9sb2cvdHlwZXMnKV0sXG4gIC8vIEZvciBTZWxlbml1bSB2NCAoVzNDIGRvZXMgbm90IGhhdmUgdGhpcyByb3V0ZSlcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3NlL2xvZycpXSxcbl07XG5cblxuY29uc3QgQVBLX0VYVCA9ICcuYXBrJztcbmNvbnN0IEFBQl9FWFQgPSAnLmFhYic7XG5jb25zdCBTVVBQT1JURURfRVhURU5TSU9OUyA9IFtBUEtfRVhULCBBQUJfRVhUXTtcblxuY2xhc3MgRXNwcmVzc29Ecml2ZXIgZXh0ZW5kcyBCYXNlRHJpdmVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSwgc2hvdWxkVmFsaWRhdGVDYXBzID0gdHJ1ZSkge1xuICAgIC8vIGBzaGVsbGAgb3ZlcndyaXRlcyBhZGIuc2hlbGwsIHNvIHJlbW92ZVxuICAgIGRlbGV0ZSBvcHRzLnNoZWxsO1xuXG4gICAgc3VwZXIob3B0cywgc2hvdWxkVmFsaWRhdGVDYXBzKTtcbiAgICB0aGlzLmxvY2F0b3JTdHJhdGVnaWVzID0gW1xuICAgICAgJ2lkJyxcbiAgICAgICdjbGFzcyBuYW1lJyxcbiAgICAgICdhY2Nlc3NpYmlsaXR5IGlkJyxcbiAgICBdO1xuICAgIHRoaXMuZGVzaXJlZENhcENvbnN0cmFpbnRzID0gZGVzaXJlZENhcENvbnN0cmFpbnRzO1xuICAgIHRoaXMuZXNwcmVzc28gPSBudWxsO1xuICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLmRlZmF1bHRJTUUgPSBudWxsO1xuICAgIHRoaXMuandwUHJveHlBdm9pZCA9IE5PX1BST1hZO1xuXG4gICAgdGhpcy5hcGtTdHJpbmdzID0ge307IC8vIG1hcCBvZiBsYW5ndWFnZSAtPiBzdHJpbmdzIG9ialxuICAgIHRoaXMuc2V0dGluZ3MgPSBuZXcgRGV2aWNlU2V0dGluZ3Moe30sIHRoaXMub25TZXR0aW5nc1VwZGF0ZS5iaW5kKHRoaXMpKTtcblxuICAgIHRoaXMuY2hyb21lZHJpdmVyID0gbnVsbDtcbiAgICB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzID0ge307XG4gIH1cblxuICBhc3luYyBjcmVhdGVTZXNzaW9uICguLi5hcmdzKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRPRE8gaGFuZGxlIG90aGVyU2Vzc2lvbkRhdGEgZm9yIG11bHRpcGxlIHNlc3Npb25zXG4gICAgICBsZXQgW3Nlc3Npb25JZCwgY2Fwc10gPSBhd2FpdCBzdXBlci5jcmVhdGVTZXNzaW9uKC4uLmFyZ3MpO1xuXG4gICAgICBsZXQgc2VydmVyRGV0YWlscyA9IHtcbiAgICAgICAgcGxhdGZvcm06ICdMSU5VWCcsXG4gICAgICAgIHdlYlN0b3JhZ2VFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgdGFrZXNTY3JlZW5zaG90OiB0cnVlLFxuICAgICAgICBqYXZhc2NyaXB0RW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgZGF0YWJhc2VFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgbmV0d29ya0Nvbm5lY3Rpb25FbmFibGVkOiB0cnVlLFxuICAgICAgICBsb2NhdGlvbkNvbnRleHRFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgd2FybmluZ3M6IHt9LFxuICAgICAgICBkZXNpcmVkOiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNhcHMpXG4gICAgICB9O1xuXG4gICAgICB0aGlzLmNhcHMgPSBPYmplY3QuYXNzaWduKHNlcnZlckRldGFpbHMsIHRoaXMuY2Fwcyk7XG5cbiAgICAgIHRoaXMuY3VyQ29udGV4dCA9IHRoaXMuZGVmYXVsdENvbnRleHROYW1lKCk7XG5cbiAgICAgIGxldCBkZWZhdWx0T3B0cyA9IHtcbiAgICAgICAgZnVsbFJlc2V0OiBmYWxzZSxcbiAgICAgICAgYXV0b0xhdW5jaDogdHJ1ZSxcbiAgICAgICAgYWRiUG9ydDogREVGQVVMVF9BREJfUE9SVCxcbiAgICAgICAgYW5kcm9pZEluc3RhbGxUaW1lb3V0OiA5MDAwMFxuICAgICAgfTtcbiAgICAgIF8uZGVmYXVsdHModGhpcy5vcHRzLCBkZWZhdWx0T3B0cyk7XG5cbiAgICAgIGlmICh0aGlzLmlzQ2hyb21lU2Vzc2lvbikge1xuICAgICAgICBpZiAodGhpcy5vcHRzLmFwcCkge1xuICAgICAgICAgIHRoaXMubG9nLndhcm4oYCdicm93c2VyTmFtZScgY2FwYWJpbGl0eSB3aWxsIGJlIGlnbm9yZWRgKTtcbiAgICAgICAgICB0aGlzLmxvZy53YXJuKGBDaHJvbWUgYnJvd3NlciBjYW5ub3QgYmUgcnVuIGluIEVzcHJlc3NvIHNlc3Npb25zIGJlY2F1c2UgRXNwcmVzc28gYXV0b21hdGlvbiBkb2Vzbid0IGAgK1xuICAgICAgICAgICAgICBgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyBDaHJvbWVgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDaHJvbWUgYnJvd3NlciBzZXNzaW9ucyBjYW5ub3QgYmUgcnVuIGluIEVzcHJlc3NvIGJlY2F1c2UgRXNwcmVzc28gYCArXG4gICAgICAgICAgICBgYXV0b21hdGlvbiBkb2Vzbid0IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgQ2hyb21lYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5yZWJvb3QpIHtcbiAgICAgICAgdGhpcy5zZXRBdmRGcm9tQ2FwYWJpbGl0aWVzKGNhcHMpO1xuICAgICAgICB0aGlzLmFkZFdpcGVEYXRhVG9BdmRBcmdzKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMub3B0cy5zeXN0ZW1Qb3J0ID0gdGhpcy5vcHRzLnN5c3RlbVBvcnRcbiAgICAgICAgfHwgYXdhaXQgZmluZEFQb3J0Tm90SW5Vc2UoU1lTVEVNX1BPUlRfUkFOR0VbMF0sIFNZU1RFTV9QT1JUX1JBTkdFWzFdKTtcbiAgICAgIHRoaXMub3B0cy5hZGJQb3J0ID0gdGhpcy5vcHRzLmFkYlBvcnQgfHwgREVGQVVMVF9BREJfUE9SVDtcbiAgICAgIC8vIGdldCBkZXZpY2UgdWRpZCBmb3IgdGhpcyBzZXNzaW9uXG4gICAgICBjb25zdCB7dWRpZCwgZW1Qb3J0fSA9IGF3YWl0IGhlbHBlcnMuZ2V0RGV2aWNlSW5mb0Zyb21DYXBzKHRoaXMub3B0cyk7XG4gICAgICB0aGlzLm9wdHMudWRpZCA9IHVkaWQ7XG4gICAgICB0aGlzLm9wdHMuZW1Qb3J0ID0gZW1Qb3J0O1xuICAgICAgLy8gbm93IHRoYXQgd2Uga25vdyBvdXIgamF2YSB2ZXJzaW9uIGFuZCBkZXZpY2UgaW5mbywgd2UgY2FuIGNyZWF0ZSBvdXJcbiAgICAgIC8vIEFEQiBpbnN0YW5jZVxuICAgICAgdGhpcy5hZGIgPSBhd2FpdCBhbmRyb2lkSGVscGVycy5jcmVhdGVBREIodGhpcy5vcHRzKTtcblxuICAgICAgaWYgKHRoaXMub3B0cy5hcHApIHtcbiAgICAgICAgLy8gZmluZCBhbmQgY29weSwgb3IgZG93bmxvYWQgYW5kIHVuemlwIGFuIGFwcCB1cmwgb3IgcGF0aFxuICAgICAgICB0aGlzLm9wdHMuYXBwID0gYXdhaXQgdGhpcy5oZWxwZXJzLmNvbmZpZ3VyZUFwcCh0aGlzLm9wdHMuYXBwLCB7XG4gICAgICAgICAgb25Qb3N0UHJvY2VzczogdGhpcy5vblBvc3RDb25maWd1cmVBcHAuYmluZCh0aGlzKSxcbiAgICAgICAgICBzdXBwb3J0ZWRFeHRlbnNpb25zOiBTVVBQT1JURURfRVhURU5TSU9OU1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5hcHBPbkRldmljZSkge1xuICAgICAgICAvLyB0aGUgYXBwIGlzbid0IGFuIGFjdHVhbCBhcHAgZmlsZSBidXQgcmF0aGVyIHNvbWV0aGluZyB3ZSB3YW50IHRvXG4gICAgICAgIC8vIGFzc3VtZSBpcyBvbiB0aGUgZGV2aWNlIGFuZCBqdXN0IGxhdW5jaCB2aWEgdGhlIGFwcFBhY2thZ2VcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgQXBwIGZpbGUgd2FzIG5vdCBsaXN0ZWQsIGluc3RlYWQgd2UncmUgZ29pbmcgdG8gcnVuIGAgK1xuICAgICAgICAgICAgYCR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9IGRpcmVjdGx5IG9uIHRoZSBkZXZpY2VgKTtcbiAgICAgICAgaWYgKCFhd2FpdCB0aGlzLmFkYi5pc0FwcEluc3RhbGxlZCh0aGlzLm9wdHMuYXBwUGFja2FnZSkpIHtcbiAgICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgZmluZCB0aGUgcGFja2FnZSAnJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0nIGAgK1xuICAgICAgICAgICAgYGluc3RhbGxlZCBvbiB0aGUgZGV2aWNlYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5zdGFydEVzcHJlc3NvU2Vzc2lvbigpO1xuICAgICAgcmV0dXJuIFtzZXNzaW9uSWQsIGNhcHNdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgZS5tZXNzYWdlICs9IGAke18uZW5kc1dpdGgoZS5tZXNzYWdlLCAnLicpID8gJycgOiAnLid9IENoZWNrIGAgK1xuICAgICAgICAnaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0tZXNwcmVzc28tZHJpdmVyI3Ryb3VibGVzaG9vdGluZyAnICtcbiAgICAgICAgJ3JlZ2FyZGluZyBhZHZhbmNlZCBzZXNzaW9uIHN0YXJ0dXAgdHJvdWJsZXNob290aW5nLic7XG4gICAgICBpZiAoaXNFcnJvclR5cGUoZSwgZXJyb3JzLlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IpKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgICBjb25zdCBlcnIgPSBuZXcgZXJyb3JzLlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IoZS5tZXNzYWdlKTtcbiAgICAgIGVyci5zdGFjayA9IGUuc3RhY2s7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVuemlwIHRoZSBnaXZlbiBhcHAgcGF0aCBhbmQgcmV0dXJuIHRoZSBmaXJzdCBwYWNrYWdlIHRoYXQgaGFzIFNVUFBPUlRFRF9FWFRFTlNJT05TXG4gICAqIGluIHRoZSBhcmNoaXZlZCBmaWxlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXBwUGF0aCBUaGUgcGF0aCB0byBhcHAgZmlsZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gUmV0dW5zIHRoZSBwYXRoIHRvIGFuIHVuemlwcGVkIGFwcCBmaWxlIHBhdGguXG4gICAqIEB0aHJvd3MgUmFpc2UgYW4gZXhjZXB0aW9uIGlmIHRoZSB6aXAgZGlkIG5vdCBoYXZlIGFueSBTVVBQT1JURURfRVhURU5TSU9OUyBwYWNrYWdlcy5cbiAgICovXG4gIGFzeW5jIHVuemlwQXBwIChhcHBQYXRoKSB7XG4gICAgY29uc3QgdXNlU3lzdGVtVW56aXBFbnYgPSBwcm9jZXNzLmVudi5BUFBJVU1fUFJFRkVSX1NZU1RFTV9VTlpJUDtcbiAgICBjb25zdCB1c2VTeXN0ZW1VbnppcCA9IF8uaXNFbXB0eSh1c2VTeXN0ZW1VbnppcEVudilcbiAgICAgIHx8ICFbJzAnLCAnZmFsc2UnXS5pbmNsdWRlcyhfLnRvTG93ZXIodXNlU3lzdGVtVW56aXBFbnYpKTtcbiAgICBjb25zdCB0bXBSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gICAgYXdhaXQgemlwLmV4dHJhY3RBbGxUbyhhcHBQYXRoLCB0bXBSb290LCB7dXNlU3lzdGVtVW56aXB9KTtcblxuICAgIGNvbnN0IGdsb2JQYXR0ZXJuID0gYCoqLyouKygke1NVUFBPUlRFRF9FWFRFTlNJT05TLm1hcCgoZXh0KSA9PiBleHQucmVwbGFjZSgvXlxcLi8sICcnKSkuam9pbignfCcpfSlgO1xuICAgIGNvbnN0IHNvcnRlZEJ1bmRsZUl0ZW1zID0gKGF3YWl0IGZzLmdsb2IoZ2xvYlBhdHRlcm4sIHtcbiAgICAgIGN3ZDogdG1wUm9vdCxcbiAgICAgIHN0cmljdDogZmFsc2UsXG4gICAgfSkpLnNvcnQoKGEsIGIpID0+IGEuc3BsaXQocGF0aC5zZXApLmxlbmd0aCAtIGIuc3BsaXQocGF0aC5zZXApLmxlbmd0aCk7XG4gICAgaWYgKHNvcnRlZEJ1bmRsZUl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gbm8gZXhwZWN0ZWQgcGFja2FnZXMgaW4gdGhlIHppcFxuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgJHt0aGlzLm9wdHMuYXBwfSBkaWQgbm90IGhhdmUgYW55IG9mICcke1NVUFBPUlRFRF9FWFRFTlNJT05TLmpvaW4oJywgJyl9JyBgICtcbiAgICAgICAgYGV4dGVuc2lvbiBwYWNrYWdlcy4gUGxlYXNlIG1ha2Ugc3VyZSB0aGUgcHJvdmlkZWQgLnppcCBhcmNoaXZlIGNvbnRhaW5zIGF0IGxlYXN0IG9uZSB2YWxpZCBhcHBsaWNhdGlvbiBwYWNrYWdlLmApO1xuICAgIH1cbiAgICBjb25zdCB1bnppcHBlZEFwcFBhdGggPSBwYXRoLmpvaW4odG1wUm9vdCwgXy5maXJzdChzb3J0ZWRCdW5kbGVJdGVtcykpO1xuICAgIHRoaXMubG9nLmRlYnVnKGAnJHt1bnppcHBlZEFwcFBhdGh9JyBpcyB0aGUgdW56aXBwZWQgZmlsZSBmcm9tICcke2FwcFBhdGh9J2ApO1xuICAgIHJldHVybiB1bnppcHBlZEFwcFBhdGg7XG4gIH1cblxuICBhc3luYyBvblBvc3RDb25maWd1cmVBcHAgKHtjYWNoZWRBcHBJbmZvLCBpc1VybCwgYXBwUGF0aH0pIHtcbiAgICBjb25zdCBwcmVzaWduQXBwID0gYXN5bmMgKGFwcExvY2F0aW9uKSA9PiB7XG4gICAgICBpZiAodGhpcy5vcHRzLm5vU2lnbikge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKCdTa2lwcGluZyBhcHBsaWNhdGlvbiBzaWduaW5nIGJlY2F1c2Ugbm9TaWduIGNhcGFiaWxpdHkgaXMgc2V0IHRvIHRydWUuICcgK1xuICAgICAgICAgICdIYXZpbmcgdGhlIGFwcGxpY2F0aW9uIHVuZGVyIHRlc3Qgd2l0aCBpbXByb3BlciBzaWduYXR1cmUvbm9uLXNpZ25lZCB3aWxsIGNhdXNlICcgK1xuICAgICAgICAgICdFc3ByZXNzbyBhdXRvbWF0aW9uIHN0YXJ0dXAgZmFpbHVyZS4nKTtcbiAgICAgIH0gZWxzZSBpZiAoIWF3YWl0IHRoaXMuYWRiLmNoZWNrQXBrQ2VydChhcHBMb2NhdGlvbiwgdGhpcy5vcHRzLmFwcFBhY2thZ2UpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNpZ24oYXBwTG9jYXRpb24sIHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgaGFzQXBrRXh0ID0gKGFwcFBhdGgpID0+IF8uZW5kc1dpdGgoXy50b0xvd2VyKGFwcFBhdGgpLCBBUEtfRVhUKTtcbiAgICBjb25zdCBoYXNBYWJFeHQgPSAoYXBwUGF0aCkgPT4gXy5lbmRzV2l0aChfLnRvTG93ZXIoYXBwUGF0aCksIEFBQl9FWFQpO1xuICAgIGNvbnN0IGV4dHJhY3RVbml2ZXJzYWxBcGsgPSBhc3luYyAoc2hvdWxkRXh0cmFjdCwgYXBwUGF0aCkgPT5cbiAgICAgIHNob3VsZEV4dHJhY3QgPyBhcHBQYXRoIDogYXdhaXQgdGhpcy5hZGIuZXh0cmFjdFVuaXZlcnNhbEFwayhhcHBQYXRoKTtcblxuICAgIGxldCBwYXRoSW5DYWNoZSA9IG51bGw7XG4gICAgbGV0IGlzUmVzdWx0QXBwUGF0aEFscmVhZHlDYWNoZWQgPSBmYWxzZTtcbiAgICBpZiAoXy5pc1BsYWluT2JqZWN0KGNhY2hlZEFwcEluZm8pKSB7XG4gICAgICBjb25zdCBwYWNrYWdlSGFzaCA9IGF3YWl0IGZzLmhhc2goYXBwUGF0aCk7XG4gICAgICBpZiAocGFja2FnZUhhc2ggPT09IGNhY2hlZEFwcEluZm8ucGFja2FnZUhhc2ggJiYgYXdhaXQgZnMuZXhpc3RzKGNhY2hlZEFwcEluZm8uZnVsbFBhdGgpKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYFVzaW5nICcke2NhY2hlZEFwcEluZm8uZnVsbFBhdGh9JyB3aGljaCBpcyBjYWNoZWQgZnJvbSAnJHthcHBQYXRofSdgKTtcbiAgICAgICAgaXNSZXN1bHRBcHBQYXRoQWxyZWFkeUNhY2hlZCA9IHRydWU7XG4gICAgICAgIHBhdGhJbkNhY2hlID0gY2FjaGVkQXBwSW5mby5mdWxsUGF0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhcHBQYXRoIGNhbiBiZSAuemlwLCAuYXBrIG9yIC5hYWJcbiAgICBjb25zdCBpc0FwayA9IGhhc0Fwa0V4dChhcHBQYXRoKTtcbiAgICAvLyBPbmx5IGxvY2FsIC5hcGsgZmlsZXMgdGhhdCBhcmUgYXZhaWxhYmxlIGluLXBsYWNlIHNob3VsZCBub3QgYmUgY2FjaGVkXG4gICAgY29uc3Qgc2hvdWxkUmVzdWx0QXBwUGF0aEJlQ2FjaGVkID0gIWlzQXBrIHx8IChpc0FwayAmJiBpc1VybCk7XG5cbiAgICBpZiAoIWlzUmVzdWx0QXBwUGF0aEFscmVhZHlDYWNoZWQpIHtcbiAgICAgIGlmIChzaG91bGRSZXN1bHRBcHBQYXRoQmVDYWNoZWQpIHtcbiAgICAgICAgLy8gLnppcCwgLmFhYiBvciBkb3dubG9hZGVkIC5hcGtcblxuICAgICAgICBsZXQgdW56aXBwZWRBcHBQYXRoO1xuICAgICAgICBsZXQgaXNVbnppcHBlZEFwayA9IGZhbHNlO1xuICAgICAgICBpZiAoIShoYXNBcGtFeHQoYXBwUGF0aCkgfHwgaGFzQWFiRXh0KGFwcFBhdGgpKSkge1xuICAgICAgICAgIHVuemlwcGVkQXBwUGF0aCA9IGF3YWl0IHRoaXMudW56aXBBcHAoYXBwUGF0aCk7XG4gICAgICAgICAgaXNVbnppcHBlZEFwayA9IGhhc0Fwa0V4dCh1bnppcHBlZEFwcFBhdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdW56aXBwZWRBcHBQYXRoIG9yIGFwcFBhdGggaGFzIFNVUFBPUlRFRF9FWFRFTlNJT05TLlxuICAgICAgICBwYXRoSW5DYWNoZSA9IHVuemlwcGVkQXBwUGF0aFxuICAgICAgICAgID8gYXdhaXQgZXh0cmFjdFVuaXZlcnNhbEFwayhpc1VuemlwcGVkQXBrLCB1bnppcHBlZEFwcFBhdGgpXG4gICAgICAgICAgOiBhd2FpdCBleHRyYWN0VW5pdmVyc2FsQXBrKGlzQXBrLCBhcHBQYXRoKTtcblxuICAgICAgICBpZiAoIWlzQXBrICYmIGlzVXJsKSB7XG4gICAgICAgICAgLy8gQ2xlYW4gdXAgdGhlIHRlbXBvcmFyaWx5IGRvd25sb2FkZWQgLmFhYiBvciAuemlwIHBhY2thZ2VcbiAgICAgICAgICBhd2FpdCBmcy5yaW1yYWYoYXBwUGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc0FhYkV4dCh1bnppcHBlZEFwcFBhdGgpKSB7XG4gICAgICAgICAgLy8gQ2xlYW51cCB0aGUgbG9jYWwgdW56aXBwZWQgLmFhYiBmaWxlXG4gICAgICAgICAgYXdhaXQgZnMucmltcmFmKHVuemlwcGVkQXBwUGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgcHJlc2lnbkFwcChwYXRoSW5DYWNoZSk7XG4gICAgICB9IGVsc2UgaWYgKGlzQXBrKSB7XG4gICAgICAgIC8vIEl0IGlzIHByb2JhYmx5IG5vdCB0aGUgYmVzdCBpZGVhIHRvIG1vZGlmeSB0aGUgcHJvdmlkZWQgYXBwIGluLXBsYWNlLFxuICAgICAgICAvLyBidXQgdGhpcyBpcyBob3cgaXQgd2FzIGFsd2F5cyB3b3JraW5nXG4gICAgICAgIGF3YWl0IHByZXNpZ25BcHAoYXBwUGF0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzaG91bGRSZXN1bHRBcHBQYXRoQmVDYWNoZWQgPyB7YXBwUGF0aDogcGF0aEluQ2FjaGV9IDogZmFsc2U7XG4gIH1cblxuICBnZXQgZHJpdmVyRGF0YSAoKSB7XG4gICAgLy8gVE9ETyBmaWxsZSBvdXQgcmVzb3VyY2UgaW5mbyBoZXJlXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgaXNFbXVsYXRvciAoKSB7XG4gICAgcmV0dXJuIGhlbHBlcnMuaXNFbXVsYXRvcih0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgfVxuXG4gIC8vIFRPRE8gdGhpcyBtZXRob2QgaXMgZHVwbGljYXRlZCBmcm9tIHVpYXV0b21hdG9yMi1kcml2ZXI7IGNvbnNvbGlkYXRlXG4gIHNldEF2ZEZyb21DYXBhYmlsaXRpZXMgKGNhcHMpIHtcbiAgICBpZiAodGhpcy5vcHRzLmF2ZCkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnYXZkIG5hbWUgZGVmaW5lZCwgaWdub3JpbmcgZGV2aWNlIG5hbWUgYW5kIHBsYXRmb3JtIHZlcnNpb24nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjYXBzLmRldmljZU5hbWUpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnYXZkIG9yIGRldmljZU5hbWUgc2hvdWxkIGJlIHNwZWNpZmllZCB3aGVuIHJlYm9vdCBvcHRpb24gaXMgZW5hYmxlcycpO1xuICAgICAgfVxuICAgICAgaWYgKCFjYXBzLnBsYXRmb3JtVmVyc2lvbikge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdhdmQgb3IgcGxhdGZvcm1WZXJzaW9uIHNob3VsZCBiZSBzcGVjaWZpZWQgd2hlbiByZWJvb3Qgb3B0aW9uIGlzIGVuYWJsZWQnKTtcbiAgICAgIH1cbiAgICAgIGxldCBhdmREZXZpY2UgPSBjYXBzLmRldmljZU5hbWUucmVwbGFjZSgvW15hLXpBLVowLTlfLl0vZywgJy0nKTtcbiAgICAgIHRoaXMub3B0cy5hdmQgPSBgJHthdmREZXZpY2V9X18ke2NhcHMucGxhdGZvcm1WZXJzaW9ufWA7XG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETyB0aGlzIG1ldGhvZCBpcyBkdXBsaWNhdGVkIGZyb20gdWlhdXRvbWF0b3IyLWRyaXZlcjsgY29uc29saWRhdGVcbiAgYWRkV2lwZURhdGFUb0F2ZEFyZ3MgKCkge1xuICAgIGlmICghdGhpcy5vcHRzLmF2ZEFyZ3MpIHtcbiAgICAgIHRoaXMub3B0cy5hdmRBcmdzID0gJy13aXBlLWRhdGEnO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMub3B0cy5hdmRBcmdzLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJy13aXBlLWRhdGEnKSkge1xuICAgICAgdGhpcy5vcHRzLmF2ZEFyZ3MgKz0gJyAtd2lwZS1kYXRhJztcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPIG11Y2ggb2YgdGhpcyBsb2dpYyBpcyBkdXBsaWNhdGVkIGZyb20gdWlhdXRvbWF0b3IyXG4gIGFzeW5jIHN0YXJ0RXNwcmVzc29TZXNzaW9uICgpIHtcbiAgICB0aGlzLmxvZy5pbmZvKGBFc3ByZXNzb0RyaXZlciB2ZXJzaW9uOiAke3ZlcnNpb259YCk7XG5cbiAgICAvLyBSZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtLWFuZHJvaWQtZHJpdmVyL3B1bGwvNDYxIHdoYXQgaGFwcGVucyBpZiB0aGVyIGlzIG5vIHNldEhpZGRlbkFwaVBvbGljeSBmb3IgQW5kcm9pZCBQK1xuICAgIGlmIChhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpID49IDI4KSB7IC8vIEFuZHJvaWQgUFxuICAgICAgdGhpcy5sb2cud2FybignUmVsYXhpbmcgaGlkZGVuIGFwaSBwb2xpY3knKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnNldEhpZGRlbkFwaVBvbGljeSgnMScsICEhdGhpcy5vcHRzLmlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yKTtcbiAgICB9XG5cbiAgICAvLyBnZXQgYXBwUGFja2FnZSBldCBhbCBmcm9tIG1hbmlmZXN0IGlmIG5lY2Vzc2FyeVxuICAgIGxldCBhcHBJbmZvID0gYXdhaXQgaGVscGVycy5nZXRMYXVuY2hJbmZvKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIGlmIChhcHBJbmZvKSB7XG4gICAgICAvLyBhbmQgZ2V0IGl0IG9udG8gb3VyICdvcHRzJyBvYmplY3Qgc28gd2UgdXNlIGl0IGZyb20gbm93IG9uXG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0cywgYXBwSW5mbyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwcEluZm8gPSB0aGlzLm9wdHM7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQgYW4gYXZkLCBzZXQgdGhlIGxhbmd1YWdlL2xvY2FsZSwgcGljayBhbiBlbXVsYXRvciwgZXRjLi4uXG4gICAgLy8gVE9ETyB3aXRoIG11bHRpcGxlIGRldmljZXMgd2UnbGwgbmVlZCB0byBwYXJhbWV0ZXJpemUgdGhpc1xuICAgIGF3YWl0IGhlbHBlcnMuaW5pdERldmljZSh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS1lc3ByZXNzby1kcml2ZXIvaXNzdWVzLzcyXG4gICAgaWYgKGF3YWl0IHRoaXMuYWRiLmlzQW5pbWF0aW9uT24oKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0QW5pbWF0aW9uU3RhdGUoZmFsc2UpO1xuICAgICAgICB0aGlzLndhc0FuaW1hdGlvbkVuYWJsZWQgPSB0cnVlO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYFVuYWJsZSB0byB0dXJuIG9mZiBhbmltYXRpb25zOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNldCBhY3R1YWwgZGV2aWNlIG5hbWUsIHVkaWRcbiAgICB0aGlzLmNhcHMuZGV2aWNlTmFtZSA9IHRoaXMuYWRiLmN1ckRldmljZUlkO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VVRElEID0gdGhpcy5vcHRzLnVkaWQ7XG5cbiAgICAvLyBzZXQgdXAgdGhlIG1vZGlmaWVkIGVzcHJlc3NvIHNlcnZlciBldGNcbiAgICB0aGlzLmluaXRFc3ByZXNzb1NlcnZlcigpO1xuICAgIC8vIEZ1cnRoZXIgcHJlcGFyZSB0aGUgZGV2aWNlIGJ5IGZvcndhcmRpbmcgdGhlIGVzcHJlc3NvIHBvcnRcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgRm9yd2FyZGluZyBFc3ByZXNzbyBTZXJ2ZXIgcG9ydCAke0RFVklDRV9QT1JUfSB0byAke3RoaXMub3B0cy5zeXN0ZW1Qb3J0fWApO1xuICAgIGF3YWl0IHRoaXMuYWRiLmZvcndhcmRQb3J0KHRoaXMub3B0cy5zeXN0ZW1Qb3J0LCBERVZJQ0VfUE9SVCk7XG5cbiAgICBpZiAoIXRoaXMub3B0cy5za2lwVW5sb2NrKSB7XG4gICAgICAvLyB1bmxvY2sgdGhlIGRldmljZSB0byBwcmVwYXJlIGl0IGZvciB0ZXN0aW5nXG4gICAgICBhd2FpdCBoZWxwZXJzLnVubG9jayh0aGlzLCB0aGlzLmFkYiwgdGhpcy5jYXBzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYCdza2lwVW5sb2NrJyBjYXBhYmlsaXR5IHNldCwgc28gc2tpcHBpbmcgZGV2aWNlIHVubG9ja2ApO1xuICAgIH1cblxuICAgIC8vIHNldCB1cCBhcHAgdW5kZXIgdGVzdFxuICAgIC8vIHByZXBhcmUgb3VyIGFjdHVhbCBBVVQsIGdldCBpdCBvbiB0aGUgZGV2aWNlLCBldGMuLi5cbiAgICBhd2FpdCB0aGlzLmluaXRBVVQoKTtcblxuICAgIC8vQWRkaW5nIEFVVCBwYWNrYWdlIG5hbWUgaW4gdGhlIGNhcGFiaWxpdGllcyBpZiBwYWNrYWdlIG5hbWUgbm90IGV4aXN0IGluIGNhcHNcbiAgICBpZiAoIXRoaXMuY2Fwcy5hcHBQYWNrYWdlKSB7XG4gICAgICB0aGlzLmNhcHMuYXBwUGFja2FnZSA9IGFwcEluZm8uYXBwUGFja2FnZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmNhcHMuYXBwV2FpdFBhY2thZ2UpIHtcbiAgICAgIHRoaXMuY2Fwcy5hcHBXYWl0UGFja2FnZSA9IGFwcEluZm8uYXBwV2FpdFBhY2thZ2UgfHwgYXBwSW5mby5hcHBQYWNrYWdlIHx8IHRoaXMuY2Fwcy5hcHBQYWNrYWdlO1xuICAgIH1cbiAgICBpZiAodGhpcy5jYXBzLmFwcEFjdGl2aXR5KSB7XG4gICAgICB0aGlzLmNhcHMuYXBwQWN0aXZpdHkgPSBxdWFsaWZ5QWN0aXZpdHlOYW1lKHRoaXMuY2Fwcy5hcHBBY3Rpdml0eSwgdGhpcy5jYXBzLmFwcFBhY2thZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhcHMuYXBwQWN0aXZpdHkgPSBxdWFsaWZ5QWN0aXZpdHlOYW1lKGFwcEluZm8uYXBwQWN0aXZpdHksIHRoaXMuY2Fwcy5hcHBQYWNrYWdlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2Fwcy5hcHBXYWl0QWN0aXZpdHkpIHtcbiAgICAgIHRoaXMuY2Fwcy5hcHBXYWl0QWN0aXZpdHkgPSBxdWFsaWZ5QWN0aXZpdHlOYW1lKHRoaXMuY2Fwcy5hcHBXYWl0QWN0aXZpdHksIHRoaXMuY2Fwcy5hcHBXYWl0UGFja2FnZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2Fwcy5hcHBXYWl0QWN0aXZpdHkgPSBxdWFsaWZ5QWN0aXZpdHlOYW1lKGFwcEluZm8uYXBwV2FpdEFjdGl2aXR5IHx8IGFwcEluZm8uYXBwQWN0aXZpdHkgfHwgdGhpcy5jYXBzLmFwcEFjdGl2aXR5LFxuICAgICAgICB0aGlzLmNhcHMuYXBwV2FpdFBhY2thZ2UpO1xuICAgIH1cblxuICAgIC8vIGxhdW5jaCBlc3ByZXNzbyBhbmQgd2FpdCB0aWxsIGl0cyBvbmxpbmUgYW5kIHdlIGhhdmUgYSBzZXNzaW9uXG4gICAgYXdhaXQgdGhpcy5lc3ByZXNzby5zdGFydFNlc3Npb24odGhpcy5jYXBzKTtcbiAgICBpZiAodGhpcy5jYXBzLmF1dG9MYXVuY2ggPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBOb3Qgd2FpdGluZyBmb3IgdGhlIGFwcGxpY2F0aW9uIGFjdGl2aXR5IHRvIHN0YXJ0IGJlY2F1c2UgJ2F1dG9MYXVuY2gnIGlzIGRpc2FibGVkYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLndhaXRGb3JBY3Rpdml0eSh0aGlzLmNhcHMuYXBwV2FpdFBhY2thZ2UsIHRoaXMuY2Fwcy5hcHBXYWl0QWN0aXZpdHksIHRoaXMub3B0cy5hcHBXYWl0RHVyYXRpb24pO1xuICAgIH1cbiAgICAvLyBpZiB3ZSB3YW50IHRvIGltbWVkaWF0ZWx5IGdldCBpbnRvIGEgd2Vidmlldywgc2V0IG91ciBjb250ZXh0XG4gICAgLy8gYXBwcm9wcmlhdGVseVxuICAgIGlmICh0aGlzLm9wdHMuYXV0b1dlYnZpZXcpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdFdlYnZpZXcoKTtcbiAgICB9XG5cbiAgICAvLyBub3cgdGhhdCBldmVyeXRoaW5nIGhhcyBzdGFydGVkIHN1Y2Nlc3NmdWxseSwgdHVybiBvbiBwcm94eWluZyBzbyBhbGxcbiAgICAvLyBzdWJzZXF1ZW50IHNlc3Npb24gcmVxdWVzdHMgZ28gc3RyYWlnaHQgdG8vZnJvbSBlc3ByZXNzb1xuICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xuXG4gICAgYXdhaXQgdGhpcy5hZGREZXZpY2VJbmZvVG9DYXBzKCk7XG4gIH1cblxuICBhc3luYyBpbml0V2VidmlldyAoKSB7XG4gICAgY29uc3Qgdmlld05hbWUgPSBhbmRyb2lkQ29tbWFuZHMuZGVmYXVsdFdlYnZpZXdOYW1lLmNhbGwodGhpcyk7XG4gICAgY29uc3QgdGltZW91dCA9IHRoaXMub3B0cy5hdXRvV2Vidmlld1RpbWVvdXQgfHwgMjAwMDtcbiAgICB0aGlzLmxvZy5pbmZvKGBTZXR0aW5nIHdlYnZpZXcgdG8gY29udGV4dCAnJHt2aWV3TmFtZX0nIHdpdGggdGltZW91dCAke3RpbWVvdXR9bXNgKTtcbiAgICBhd2FpdCByZXRyeUludGVydmFsKHRpbWVvdXQgLyA1MDAsIDUwMCwgdGhpcy5zZXRDb250ZXh0LmJpbmQodGhpcyksIHZpZXdOYW1lKTtcbiAgfVxuXG4gIGFzeW5jIGFkZERldmljZUluZm9Ub0NhcHMgKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBwbGF0Zm9ybVZlcnNpb24sXG4gICAgICBtYW51ZmFjdHVyZXIsXG4gICAgICBtb2RlbCxcbiAgICAgIHJlYWxEaXNwbGF5U2l6ZSxcbiAgICAgIGRpc3BsYXlEZW5zaXR5LFxuICAgIH0gPSBhd2FpdCB0aGlzLm1vYmlsZUdldERldmljZUluZm8oKTtcbiAgICB0aGlzLmNhcHMuZGV2aWNlQXBpTGV2ZWwgPSBwYXJzZUludChhcGlWZXJzaW9uLCAxMCk7XG4gICAgdGhpcy5jYXBzLnBsYXRmb3JtVmVyc2lvbiA9IHBsYXRmb3JtVmVyc2lvbjtcbiAgICB0aGlzLmNhcHMuZGV2aWNlU2NyZWVuU2l6ZSA9IHJlYWxEaXNwbGF5U2l6ZTtcbiAgICB0aGlzLmNhcHMuZGV2aWNlU2NyZWVuRGVuc2l0eSA9IGRpc3BsYXlEZW5zaXR5O1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VNb2RlbCA9IG1vZGVsO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VNYW51ZmFjdHVyZXIgPSBtYW51ZmFjdHVyZXI7XG4gIH1cblxuICBpbml0RXNwcmVzc29TZXJ2ZXIgKCkge1xuICAgIC8vIG5vdyB0aGF0IHdlIGhhdmUgcGFja2FnZSBhbmQgYWN0aXZpdHksIHdlIGNhbiBjcmVhdGUgYW4gaW5zdGFuY2Ugb2ZcbiAgICAvLyBlc3ByZXNzbyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBkYXRhXG4gICAgdGhpcy5lc3ByZXNzbyA9IG5ldyBFc3ByZXNzb1J1bm5lcih0aGlzLmxvZywge1xuICAgICAgaG9zdDogdGhpcy5vcHRzLnJlbW90ZUFkYkhvc3QgfHwgdGhpcy5vcHRzLmhvc3QgfHwgJzEyNy4wLjAuMScsXG4gICAgICBzeXN0ZW1Qb3J0OiB0aGlzLm9wdHMuc3lzdGVtUG9ydCxcbiAgICAgIGRldmljZVBvcnQ6IERFVklDRV9QT1JULFxuICAgICAgYWRiOiB0aGlzLmFkYixcbiAgICAgIGFwazogdGhpcy5vcHRzLmFwcCxcbiAgICAgIHRtcERpcjogdGhpcy5vcHRzLnRtcERpcixcbiAgICAgIGFwcFBhY2thZ2U6IHRoaXMub3B0cy5hcHBQYWNrYWdlLFxuICAgICAgYXBwQWN0aXZpdHk6IHRoaXMub3B0cy5hcHBBY3Rpdml0eSxcbiAgICAgIGZvcmNlRXNwcmVzc29SZWJ1aWxkOiAhIXRoaXMub3B0cy5mb3JjZUVzcHJlc3NvUmVidWlsZCxcbiAgICAgIGVzcHJlc3NvQnVpbGRDb25maWc6IHRoaXMub3B0cy5lc3ByZXNzb0J1aWxkQ29uZmlnLFxuICAgICAgc2hvd0dyYWRsZUxvZzogISF0aGlzLm9wdHMuc2hvd0dyYWRsZUxvZyxcbiAgICAgIHNlcnZlckxhdW5jaFRpbWVvdXQ6IHRoaXMub3B0cy5lc3ByZXNzb1NlcnZlckxhdW5jaFRpbWVvdXQsXG4gICAgICBhbmRyb2lkSW5zdGFsbFRpbWVvdXQ6IHRoaXMub3B0cy5hbmRyb2lkSW5zdGFsbFRpbWVvdXQsXG4gICAgICBza2lwU2VydmVySW5zdGFsbGF0aW9uOiB0aGlzLm9wdHMuc2tpcFNlcnZlckluc3RhbGxhdGlvbixcbiAgICAgIHVzZUtleXN0b3JlOiB0aGlzLm9wdHMudXNlS2V5c3RvcmUsXG4gICAgICBrZXlzdG9yZVBhdGg6IHRoaXMub3B0cy5rZXlzdG9yZVBhdGgsXG4gICAgICBrZXlzdG9yZVBhc3N3b3JkOiB0aGlzLm9wdHMua2V5c3RvcmVQYXNzd29yZCxcbiAgICAgIGtleUFsaWFzOiB0aGlzLm9wdHMua2V5QWxpYXMsXG4gICAgICBrZXlQYXNzd29yZDogdGhpcy5vcHRzLmtleVBhc3N3b3JkLFxuICAgICAgZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2U6IHRoaXMub3B0cy5kaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZSxcbiAgICB9KTtcbiAgICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy5lc3ByZXNzby5wcm94eVJlcVJlcy5iaW5kKHRoaXMuZXNwcmVzc28pO1xuICAgIHRoaXMucHJveHlDb21tYW5kID0gdGhpcy5lc3ByZXNzby5wcm94eUNvbW1hbmQuYmluZCh0aGlzLmVzcHJlc3NvKTtcbiAgfVxuXG4gIC8vIFRPRE8gdGhpcyBtZXRob2QgaXMgbW9zdGx5IGR1cGxpY2F0ZWQgZnJvbSB1aWF1dG9tYXRvcjJcbiAgYXN5bmMgaW5pdEFVVCAoKSB7XG4gICAgLy8gc2V0IHRoZSBsb2NhbGl6ZWQgc3RyaW5ncyBmb3IgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UgZnJvbSB0aGUgYXBrXG4gICAgLy8gVE9ETzogaW5jb3Jwb3JhdGUgY2hhbmdlcyBmcm9tIGFwcGl1bSM1MzA4IHdoaWNoIGZpeCBhIHJhY2UgY29uZC1cbiAgICAvLyBpdGlvbiBidWcgaW4gb2xkIGFwcGl1bSBhbmQgbmVlZCB0byBiZSByZXBsaWNhdGVkIGhlcmVcbiAgICAvLyB0aGlzLmFwa1N0cmluZ3NbdGhpcy5vcHRzLmxhbmd1YWdlXSA9IGF3YWl0IGFuZHJvaWRIZWxwZXJzLnB1c2hTdHJpbmdzKFxuICAgIC8vICAgICB0aGlzLm9wdHMubGFuZ3VhZ2UsIHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuXG4gICAgLy8gVW5pbnN0YWxsIGFueSB1bmluc3RhbGxPdGhlclBhY2thZ2VzIHdoaWNoIHdlcmUgc3BlY2lmaWVkIGluIGNhcHNcbiAgICBpZiAodGhpcy5vcHRzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMpIHtcbiAgICAgIGF3YWl0IGhlbHBlcnMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyhcbiAgICAgICAgdGhpcy5hZGIsXG4gICAgICAgIGhlbHBlcnMucGFyc2VBcnJheSh0aGlzLm9wdHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyksXG4gICAgICAgIFtTRVRUSU5HU19IRUxQRVJfUEtHX0lELCBURVNUX0FQS19QS0ddXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5vcHRzLmFwcCkge1xuICAgICAgaWYgKHRoaXMub3B0cy5mdWxsUmVzZXQpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnRnVsbCByZXNldCByZXF1aXJlcyBhbiBhcHAgY2FwYWJpbGl0eSwgdXNlIGZhc3RSZXNldCBpZiBhcHAgaXMgbm90IHByb3ZpZGVkJyk7XG4gICAgICB9XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnTm8gYXBwIGNhcGFiaWxpdHkuIEFzc3VtaW5nIGl0IGlzIGFscmVhZHkgb24gdGhlIGRldmljZScpO1xuICAgICAgaWYgKHRoaXMub3B0cy5mYXN0UmVzZXQpIHtcbiAgICAgICAgYXdhaXQgaGVscGVycy5yZXNldEFwcCh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMub3B0cy5za2lwVW5pbnN0YWxsKSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi51bmluc3RhbGxBcGsodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRzLmFwcCkge1xuICAgICAgYXdhaXQgaGVscGVycy5pbnN0YWxsQXBrKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRzLnNraXBTZXJ2ZXJJbnN0YWxsYXRpb24pIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdza2lwU2VydmVySW5zdGFsbGF0aW9uIGNhcGFiaWxpdHkgaXMgc2V0LiBOb3QgaW5zdGFsbGlnIGVzcHJlc3NvLXNlcnZlciAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5lc3ByZXNzby5pbnN0YWxsVGVzdEFwaygpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuYWRkVG9EZXZpY2VJZGxlV2hpdGVsaXN0KFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsIFRFU1RfQVBLX1BLRyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYENhbm5vdCBhZGQgc2VydmVyIHBhY2thZ2VzIHRvIHRoZSBEb3plIHdoaXRlbGlzdC4gT3JpZ2luYWwgZXJyb3I6IGAgK1xuICAgICAgICAgIChlLnN0ZGVyciB8fCBlLm1lc3NhZ2UpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBkZWxldGVTZXNzaW9uICgpIHtcbiAgICB0aGlzLmxvZy5kZWJ1ZygnRGVsZXRpbmcgZXNwcmVzc28gc2Vzc2lvbicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghXy5pc0VtcHR5KHRoaXMuX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3RvcFJlY29yZGluZ1NjcmVlbigpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGlnbikge31cblxuICAgIGF3YWl0IGFuZHJvaWRIZWxwZXJzLnJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyh0aGlzLnNlcnZlciwgdGhpcy5zZXNzaW9uSWQpO1xuXG4gICAgYXdhaXQgdGhpcy5tb2JpbGVTdG9wU2NyZWVuU3RyZWFtaW5nKCk7XG5cbiAgICBpZiAodGhpcy5lc3ByZXNzbykge1xuICAgICAgaWYgKHRoaXMuandwUHJveHlBY3RpdmUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5lc3ByZXNzby5kZWxldGVTZXNzaW9uKCk7XG4gICAgICB9XG4gICAgICB0aGlzLmVzcHJlc3NvID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgLy8gVE9ETyBiZWxvdyBsb2dpYyBpcyBkdXBsaWNhdGVkIGZyb20gdWlhdXRvbWF0b3IyXG4gICAgaWYgKHRoaXMuYWRiKSB7XG4gICAgICBpZiAodGhpcy53YXNBbmltYXRpb25FbmFibGVkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0QW5pbWF0aW9uU3RhdGUodHJ1ZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRoaXMubG9nLndhcm4oYFVuYWJsZSB0byByZXNldCBhbmltYXRpb246ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdHMudW5pY29kZUtleWJvYXJkICYmIHRoaXMub3B0cy5yZXNldEtleWJvYXJkICYmXG4gICAgICAgICAgdGhpcy5kZWZhdWx0SU1FKSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBSZXNldHRpbmcgSU1FIHRvICcke3RoaXMuZGVmYXVsdElNRX0nYCk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNldElNRSh0aGlzLmRlZmF1bHRJTUUpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmlzQ2hyb21lU2Vzc2lvbiAmJiB0aGlzLm9wdHMuYXBwUGFja2FnZSAmJiAhdGhpcy5vcHRzLmRvbnRTdG9wQXBwT25SZXNldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5mb3JjZVN0b3AodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0cy5mdWxsUmVzZXQgJiYgIXRoaXMub3B0cy5za2lwVW5pbnN0YWxsICYmICF0aGlzLmFwcE9uRGV2aWNlKSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBGVUxMX1JFU0VUIHNldCB0byAndHJ1ZScsIFVuaW5zdGFsbGluZyAnJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0nYCk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnVuaW5zdGFsbEFwayh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmFkYi5zdG9wTG9nY2F0KCk7XG4gICAgICBpZiAodGhpcy5vcHRzLnJlYm9vdCkge1xuICAgICAgICBsZXQgYXZkTmFtZSA9IHRoaXMub3B0cy5hdmQucmVwbGFjZSgnQCcsICcnKTtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYGNsb3NpbmcgZW11bGF0b3IgJyR7YXZkTmFtZX0nYCk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLmtpbGxFbXVsYXRvcihhdmROYW1lKTtcbiAgICAgIH1cbiAgICAgIGlmIChhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpID49IDI4KSB7IC8vIEFuZHJvaWQgUFxuICAgICAgICB0aGlzLmxvZy5pbmZvKCdSZXN0b3JpbmcgaGlkZGVuIGFwaSBwb2xpY3kgdG8gdGhlIGRldmljZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24nKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0RGVmYXVsdEhpZGRlbkFwaVBvbGljeSghIXRoaXMub3B0cy5pZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIGF3YWl0IHN1cGVyLmRlbGV0ZVNlc3Npb24oKTtcbiAgICBpZiAodGhpcy5vcHRzLnN5c3RlbVBvcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIucmVtb3ZlUG9ydEZvcndhcmQodGhpcy5vcHRzLnN5c3RlbVBvcnQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgVW5hYmxlIHRvIHJlbW92ZSBwb3J0IGZvcndhcmQgJyR7ZXJyb3IubWVzc2FnZX0nYCk7XG4gICAgICAgIC8vSWdub3JlLCB0aGlzIGJsb2NrIHdpbGwgYWxzbyBiZSBjYWxsZWQgd2hlbiB3ZSBmYWxsIGluIGNhdGNoIGJsb2NrXG4gICAgICAgIC8vIGFuZCBiZWZvcmUgZXZlbiBwb3J0IGZvcndhcmQuXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgb25TZXR0aW5nc1VwZGF0ZSAoKSB7XG4gICAgLy8gaW50ZW50aW9uYWxseSBkbyBub3RoaW5nIGhlcmUsIHNpbmNlIGNvbW1hbmRzLnVwZGF0ZVNldHRpbmdzIHByb3hpZXNcbiAgICAvLyBzZXR0aW5ncyB0byB0aGUgZXNwcmVzc28gc2VydmVyIGFscmVhZHlcbiAgfVxuXG4gIHByb3h5QWN0aXZlIChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5wcm94eUFjdGl2ZShzZXNzaW9uSWQpO1xuXG4gICAgLy8gd2UgYWx3YXlzIGhhdmUgYW4gYWN0aXZlIHByb3h5IHRvIHRoZSBlc3ByZXNzbyBzZXJ2ZXJcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNhblByb3h5IChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5jYW5Qcm94eShzZXNzaW9uSWQpO1xuXG4gICAgLy8gd2UgY2FuIGFsd2F5cyBwcm94eSB0byB0aGUgZXNwcmVzc28gc2VydmVyXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBnZXRQcm94eUF2b2lkTGlzdCAoc2Vzc2lvbklkKSB7XG4gICAgc3VwZXIuZ2V0UHJveHlBdm9pZExpc3Qoc2Vzc2lvbklkKTtcbiAgICAvLyB3ZSBhcmUgbWFpbnRhaW5pbmcgdHdvIHNldHMgb2YgTk9fUFJPWFkgbGlzdHMsIG9uZSBmb3IgY2hyb21lZHJpdmVyKENIUk9NRV9OT19QUk9YWSlcbiAgICAvLyBhbmQgb25lIGZvciBFc3ByZXNzbyhOT19QUk9YWSksIGJhc2VkIG9uIGN1cnJlbnQgY29udGV4dCB3aWxsIHJldHVybiByZWxhdGVkIE5PX1BST1hZIGxpc3RcbiAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBfLmlzTmlsKHRoaXMuY2hyb21lZHJpdmVyKSA/IE5PX1BST1hZIDogQ0hST01FX05PX1BST1hZO1xuICAgIGlmICh0aGlzLm9wdHMubmF0aXZlV2ViU2NyZWVuc2hvdCkge1xuICAgICAgdGhpcy5qd3BQcm94eUF2b2lkID0gWy4uLnRoaXMuandwUHJveHlBdm9pZCwgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvc2NyZWVuc2hvdCcpXV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuandwUHJveHlBdm9pZDtcbiAgfVxuXG4gIGdldCBpc0Nocm9tZVNlc3Npb24gKCkge1xuICAgIHJldHVybiBoZWxwZXJzLmlzQ2hyb21lQnJvd3Nlcih0aGlzLm9wdHMuYnJvd3Nlck5hbWUpO1xuICB9XG5cbiAgZ2V0IGFwcE9uRGV2aWNlICgpIHtcbiAgICByZXR1cm4gIXRoaXMub3B0cy5hcHAgJiYgdGhpcy5oZWxwZXJzLmlzUGFja2FnZU9yQnVuZGxlKHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgfVxufVxuXG4vLyBmaXJzdCBhZGQgdGhlIGFuZHJvaWQtZHJpdmVyIGNvbW1hbmRzIHdoaWNoIHdlIHdpbGwgZmFsbCBiYWNrIHRvXG5mb3IgKGxldCBbY21kLCBmbl0gb2YgXy50b1BhaXJzKGFuZHJvaWRDb21tYW5kcykpIHtcbiAgLy8gd2UgZG8gc29tZSBkaWZmZXJlbnQvc3BlY2lhbCB0aGluZ3Mgd2l0aCB0aGVzZSBtZXRob2RzXG4gIGlmICghXy5pbmNsdWRlcyhbJ2RlZmF1bHRXZWJ2aWV3TmFtZSddLCBjbWQpKSB7XG4gICAgRXNwcmVzc29Ecml2ZXIucHJvdG90eXBlW2NtZF0gPSBmbjtcbiAgfVxufVxuXG4vLyB0aGVuIG92ZXJ3cml0ZSB3aXRoIGFueSBlc3ByZXNzby1zcGVjaWZpYyBjb21tYW5kc1xuZm9yIChsZXQgW2NtZCwgZm5dIG9mIF8udG9QYWlycyhjb21tYW5kcykpIHtcbiAgRXNwcmVzc29Ecml2ZXIucHJvdG90eXBlW2NtZF0gPSBmbjtcbn1cblxuZXhwb3J0IHsgRXNwcmVzc29Ecml2ZXIgfTtcbmV4cG9ydCBkZWZhdWx0IEVzcHJlc3NvRHJpdmVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUlBLE1BQU1BLE9BQU8sR0FBR0MsbUNBQWhCO0FBSUEsTUFBTUMsaUJBQWlCLEdBQUcsQ0FBQyxJQUFELEVBQU8sSUFBUCxDQUExQjtBQUlBLE1BQU1DLFdBQVcsR0FBRyxJQUFwQjtBQU1BLE1BQU1DLFFBQVEsR0FBRyxDQUNmLENBQUMsS0FBRCxFQUFRLElBQUlDLE1BQUosQ0FBVyxtQkFBWCxDQUFSLENBRGUsRUFFZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsZ0RBQVgsQ0FBUixDQUZlLEVBR2YsQ0FBQyxLQUFELEVBQVEsSUFBSUEsTUFBSixDQUFXLCtDQUFYLENBQVIsQ0FIZSxFQUlmLENBQUMsS0FBRCxFQUFRLElBQUlBLE1BQUosQ0FBVywrQ0FBWCxDQUFSLENBSmUsRUFLZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsaURBQVgsQ0FBUixDQUxlLEVBTWYsQ0FBQyxLQUFELEVBQVEsSUFBSUEsTUFBSixDQUFXLDJDQUFYLENBQVIsQ0FOZSxFQU9mLENBQUMsS0FBRCxFQUFRLElBQUlBLE1BQUosQ0FBVywyQ0FBWCxDQUFSLENBUGUsRUFRZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsaUNBQVgsQ0FBUixDQVJlLEVBU2YsQ0FBQyxLQUFELEVBQVEsSUFBSUEsTUFBSixDQUFXLHlCQUFYLENBQVIsQ0FUZSxFQVVmLENBQUMsS0FBRCxFQUFRLElBQUlBLE1BQUosQ0FBVywwQkFBWCxDQUFSLENBVmUsRUFXZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsMkJBQVgsQ0FBUixDQVhlLEVBWWYsQ0FBQyxLQUFELEVBQVEsSUFBSUEsTUFBSixDQUFXLG9DQUFYLENBQVIsQ0FaZSxFQWFmLENBQUMsS0FBRCxFQUFRLElBQUlBLE1BQUosQ0FBVywwQkFBWCxDQUFSLENBYmUsRUFjZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcscUJBQVgsQ0FBUixDQWRlLEVBZWYsQ0FBQyxNQUFELEVBQVMsSUFBSUEsTUFBSixDQUFXLHVDQUFYLENBQVQsQ0FmZSxFQWdCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsa0NBQVgsQ0FBVCxDQWhCZSxFQWlCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsbUNBQVgsQ0FBVCxDQWpCZSxFQWtCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsa0NBQVgsQ0FBVCxDQWxCZSxFQW1CZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsb0NBQVgsQ0FBVCxDQW5CZSxFQW9CZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsdUNBQVgsQ0FBVCxDQXBCZSxFQXFCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsNENBQVgsQ0FBVCxDQXJCZSxFQXNCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsNkNBQVgsQ0FBVCxDQXRCZSxFQXVCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcseUNBQVgsQ0FBVCxDQXZCZSxFQXdCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsNENBQVgsQ0FBVCxDQXhCZSxFQXlCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsNkNBQVgsQ0FBVCxDQXpCZSxFQTBCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsMkNBQVgsQ0FBVCxDQTFCZSxFQTJCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcseUNBQVgsQ0FBVCxDQTNCZSxFQTRCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsb0NBQVgsQ0FBVCxDQTVCZSxFQTZCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcseUNBQVgsQ0FBVCxDQTdCZSxFQThCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsMkNBQVgsQ0FBVCxDQTlCZSxFQStCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcseUNBQVgsQ0FBVCxDQS9CZSxFQWdDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsMENBQVgsQ0FBVCxDQWhDZSxFQWlDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsOENBQVgsQ0FBVCxDQWpDZSxFQWtDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsNkNBQVgsQ0FBVCxDQWxDZSxFQW1DZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsc0NBQVgsQ0FBVCxDQW5DZSxFQW9DZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsMkNBQVgsQ0FBVCxDQXBDZSxFQXFDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsOENBQVgsQ0FBVCxDQXJDZSxFQXNDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsaUNBQVgsQ0FBVCxDQXRDZSxFQXVDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsdUNBQVgsQ0FBVCxDQXZDZSxFQXdDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsK0NBQVgsQ0FBVCxDQXhDZSxFQXlDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsOENBQVgsQ0FBVCxDQXpDZSxFQTBDZixDQUFDLE1BQUQsRUFB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
|
|
@@ -354,4 +354,4 @@ var _default = EspressoRunner;
|
|
|
354
354
|
exports.default = _default;require('source-map-support').install();
|
|
355
355
|
|
|
356
356
|
|
|
357
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9lc3ByZXNzby1ydW5uZXIuanMiXSwibmFtZXMiOlsiVEVTVF9TRVJWRVJfUk9PVCIsInBhdGgiLCJyZXNvbHZlIiwiX19kaXJuYW1lIiwiVEVTVF9BUEtfUEtHIiwiUkVRVUlSRURfUEFSQU1TIiwiRVNQUkVTU09fU0VSVkVSX0xBVU5DSF9USU1FT1VUX01TIiwiVEFSR0VUX1BBQ0tBR0VfQ09OVEFJTkVSIiwiRXNwcmVzc29Qcm94eSIsIkpXUHJveHkiLCJwcm94eUNvbW1hbmQiLCJ1cmwiLCJtZXRob2QiLCJib2R5IiwiY3Jhc2hlZCIsImV4aXRlZCIsImluc3RydW1lbnRhdGlvblN0YXRlIiwiZXJyb3JzIiwiSW52YWxpZENvbnRleHRFcnJvciIsIkVzcHJlc3NvUnVubmVyIiwiY29uc3RydWN0b3IiLCJsb2ciLCJvcHRzIiwicmVxIiwidXRpbCIsImhhc1ZhbHVlIiwiRXJyb3IiLCJqd3Byb3h5Iiwic2VydmVyIiwiaG9zdCIsInBvcnQiLCJzeXN0ZW1Qb3J0IiwiYmFzZSIsImtlZXBBbGl2ZSIsInByb3h5UmVxUmVzIiwiYmluZCIsImNvbW1hbmQiLCJtb2RTZXJ2ZXJOYW1lIiwiZnMiLCJzYW5pdGl6ZU5hbWUiLCJ2ZXJzaW9uIiwiYXBwUGFja2FnZSIsImFkYiIsImN1ckRldmljZUlkIiwicmVwbGFjZW1lbnQiLCJtb2RTZXJ2ZXJQYXRoIiwidG1wRGlyIiwic2hvd0dyYWRsZUxvZyIsImVzcHJlc3NvQnVpbGRDb25maWciLCJzZXJ2ZXJMYXVuY2hUaW1lb3V0IiwiYW5kcm9pZEluc3RhbGxUaW1lb3V0IiwiZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2UiLCJ1c2VLZXlzdG9yZSIsImtleXN0b3JlUGF0aCIsImtleXN0b3JlUGFzc3dvcmQiLCJrZXlBbGlhcyIsImtleVBhc3N3b3JkIiwic2lnbmluZ0NvbmZpZyIsImtleXN0b3JlRmlsZSIsImlzQXBwUGFja2FnZUNoYW5nZWQiLCJmaWxlRXhpc3RzIiwiZGVidWciLCJwcmV2aW91c0FwcFBhY2thZ2UiLCJzaGVsbCIsInRyaW0iLCJpbnN0YWxsU2VydmVyIiwiYXBwU3RhdGUiLCJnZXRBcHBsaWNhdGlvbkluc3RhbGxTdGF0ZSIsInNob3VsZFVuaW5zdGFsbEFwcCIsIkFQUF9JTlNUQUxMX1NUQVRFIiwiT0xERVJfVkVSU0lPTl9JTlNUQUxMRUQiLCJORVdFUl9WRVJTSU9OX0lOU1RBTExFRCIsImluY2x1ZGVzIiwic2hvdWxkSW5zdGFsbEFwcCIsIk5PVF9JTlNUQUxMRUQiLCJpbmZvIiwidW5pbnN0YWxsQXBrIiwiZXJyIiwid2FybiIsIm1lc3NhZ2UiLCJpbnN0YWxsIiwicmVwbGFjZSIsInRpbWVvdXQiLCJlcnJvckFuZFRocm93IiwiaW5zdGFsbFRlc3RBcGsiLCJyZWJ1aWxkIiwiZm9yY2VFc3ByZXNzb1JlYnVpbGQiLCJleGlzdHMiLCJ1bmxpbmsiLCJidWlsZE5ld01vZFNlcnZlciIsImlzU2lnbmVkIiwiY2hlY2tBcGtDZXJ0Iiwic2lnbiIsImJ1aWxkQ29uZmlndXJhdGlvbiIsImJ1aWxkQ29uZmlndXJhdGlvblN0ciIsInJlYWRGaWxlIiwiSlNPTiIsInBhcnNlIiwiZSIsImVycm9yIiwiZGlyTmFtZSIsInNlcnZlclBhdGgiLCJyaW1yYWYiLCJTZXJ2ZXJCdWlsZGVyIiwidGVzdEFwcFBhY2thZ2UiLCJidWlsZCIsImFwa1BhdGgiLCJjb3B5RmlsZSIsImNsZWFudXBTZXNzaW9uTGVmdG92ZXJzIiwidmFsdWUiLCJkYXRhIiwiYWN0aXZlU2Vzc2lvbklkcyIsIm1hcCIsInNlc3MiLCJpZCIsImxlbmd0aCIsInN0cmluZ2lmeSIsIkIiLCJhbGwiLCJkZWxheSIsInN0YXJ0U2Vzc2lvbiIsImNhcHMiLCJjbWQiLCJwcm9jZXNzIiwiZW52IiwiRVNQUkVTU09fSkFWQV9ERUJVRyIsIl8iLCJpc0Jvb2xlYW4iLCJwdXNoIiwiam9pbiIsImhhc1NvY2tldEVycm9yIiwiaW5zdFByb2Nlc3MiLCJjcmVhdGVTdWJQcm9jZXNzIiwib24iLCJjb2RlIiwic2lnbmFsIiwic3Rkb3V0Iiwic3RkZXJyIiwibGluZSIsImlzRW1wdHkiLCJ0b0xvd2VyQ2FzZSIsInRpbWVyIiwidGltaW5nIiwiVGltZXIiLCJzdGFydCIsIndhaXRNcyIsImludGVydmFsTXMiLCJ0ZXN0IiwiZ2V0RHVyYXRpb24iLCJhc01pbGxpU2Vjb25kcyIsInRvRml4ZWQiLCJjYXBhYmlsaXRpZXMiLCJmaXJzdE1hdGNoIiwiYWx3YXlzTWF0Y2giLCJyZWNvcmRUYXJnZXRBcHBQYWNrYWdlIiwiZGVsZXRlU2Vzc2lvbiIsImlzUnVubmluZyIsInN0b3AiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTUEsZ0JBQWdCLEdBQUdDLGNBQUtDLE9BQUwsQ0FBYUMsU0FBYixFQUF3QixJQUF4QixFQUE4QixJQUE5QixFQUFvQyxpQkFBcEMsQ0FBekI7O0FBQ0EsTUFBTUMsWUFBWSxHQUFHLCtCQUFyQjs7QUFDQSxNQUFNQyxlQUFlLEdBQUcsQ0FDdEIsS0FEc0IsRUFFdEIsUUFGc0IsRUFHdEIsTUFIc0IsRUFJdEIsWUFKc0IsRUFLdEIsWUFMc0IsRUFNdEIsWUFOc0IsRUFPdEIsc0JBUHNCLENBQXhCOztBQVNBLE1BQU1DLGlDQUFpQyxHQUFHLEtBQTFDO0FBQ0EsTUFBTUMsd0JBQXdCLEdBQUcscUNBQWpDOztBQUVBLE1BQU1DLGFBQU4sU0FBNEJDLG1CQUE1QixDQUFvQztBQUNoQixRQUFaQyxZQUFZLENBQUVDLEdBQUYsRUFBT0MsTUFBUCxFQUFlQyxJQUFJLEdBQUcsSUFBdEIsRUFBNEI7QUFDNUMsVUFBTTtBQUFDQyxNQUFBQSxPQUFEO0FBQVVDLE1BQUFBO0FBQVYsUUFBb0IsS0FBS0Msb0JBQS9COztBQUNBLFFBQUlELE1BQUosRUFBWTtBQUNWLFlBQU0sSUFBSUUsbUJBQU9DLG1CQUFYLENBQWdDLElBQUdOLE1BQU8sSUFBR0QsR0FBSSxpREFBbEIsR0FDbEMsbUNBQWtDRyxP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QGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgU2VydmVyQnVpbGRlciwgYnVpbGRTZXJ2ZXJTaWduaW5nQ29uZmlnIH0gZnJvbSAnLi9zZXJ2ZXItYnVpbGRlcic7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGZzLCB1dGlsLCBta2RpcnAsIHRpbWluZyB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi4vLi4vcGFja2FnZS5qc29uJzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbXBvcnQvbm8tdW5yZXNvbHZlZFxuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGNvcHlHcmFkbGVQcm9qZWN0UmVjdXJzaXZlbHkgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5cblxuY29uc3QgVEVTVF9TRVJWRVJfUk9PVCA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLicsICcuLicsICdlc3ByZXNzby1zZXJ2ZXInKTtcbmNvbnN0IFRFU1RfQVBLX1BLRyA9ICdpby5hcHBpdW0uZXNwcmVzc29zZXJ2ZXIudGVzdCc7XG5jb25zdCBSRVFVSVJFRF9QQVJBTVMgPSBbXG4gICdhZGInLFxuICAndG1wRGlyJyxcbiAgJ2hvc3QnLFxuICAnc3lzdGVtUG9ydCcsXG4gICdkZXZpY2VQb3J0JyxcbiAgJ2FwcFBhY2thZ2UnLFxuICAnZm9yY2VFc3ByZXNzb1JlYnVpbGQnLFxuXTtcbmNvbnN0IEVTUFJFU1NPX1NFUlZFUl9MQVVOQ0hfVElNRU9VVF9NUyA9IDQ1MDAwO1xuY29uc3QgVEFSR0VUX1BBQ0tBR0VfQ09OVEFJTkVSID0gJy9kYXRhL2xvY2FsL3RtcC9lc3ByZXNzby5hcHBwYWNrYWdlJztcblxuY2xhc3MgRXNwcmVzc29Qcm94eSBleHRlbmRzIEpXUHJveHkge1xuICBhc3luYyBwcm94eUNvbW1hbmQgKHVybCwgbWV0aG9kLCBib2R5ID0gbnVsbCkge1xuICAgIGNvbnN0IHtjcmFzaGVkLCBleGl0ZWR9ID0gdGhpcy5pbnN0cnVtZW50YXRpb25TdGF0ZTtcbiAgICBpZiAoZXhpdGVkKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRDb250ZXh0RXJyb3IoYCcke21ldGhvZH0gJHt1cmx9JyBjYW5ub3QgYmUgcHJveGllZCB0byBFc3ByZXNzbyBzZXJ2ZXIgYmVjYXVzZSBgICtcbiAgICAgICAgYHRoZSBpbnN0cnVtZW50YXRpb24gcHJvY2VzcyBoYXMgJHtjcmFzaGVkID8gJ2NyYXNoZWQnIDogJ2JlZW4gdW5leHBlY3RlZGx5IHRlcm1pbmF0ZWQnfS4gYCArXG4gICAgICAgIGBDaGVjayB0aGUgQXBwaXVtIHNlcnZlciBsb2cgYW5kIHRoZSBsb2djYXQgb3V0cHV0IGZvciBtb3JlIGRldGFpbHNgKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLnByb3h5Q29tbWFuZCh1cmwsIG1ldGhvZCwgYm9keSk7XG4gIH1cbn1cblxuY2xhc3MgRXNwcmVzc29SdW5uZXIge1xuICBjb25zdHJ1Y3RvciAobG9nLCBvcHRzID0ge30pIHtcbiAgICBmb3IgKGxldCByZXEgb2YgUkVRVUlSRURfUEFSQU1TKSB7XG4gICAgICBpZiAoIW9wdHMgfHwgIXV0aWwuaGFzVmFsdWUob3B0c1tyZXFdKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wdGlvbiAnJHtyZXF9JyBpcyByZXF1aXJlZCFgKTtcbiAgICAgIH1cbiAgICAgIHRoaXNbcmVxXSA9IG9wdHNbcmVxXTtcbiAgICB9XG4gICAgdGhpcy5sb2cgPSBsb2c7XG4gICAgdGhpcy5qd3Byb3h5ID0gbmV3IEVzcHJlc3NvUHJveHkoe1xuICAgICAgbG9nLFxuICAgICAgc2VydmVyOiB0aGlzLmhvc3QsXG4gICAgICBwb3J0OiB0aGlzLnN5c3RlbVBvcnQsXG4gICAgICBiYXNlOiAnJyxcbiAgICAgIGtlZXBBbGl2ZTogdHJ1ZSxcbiAgICB9KTtcbiAgICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy5qd3Byb3h5LnByb3h5UmVxUmVzLmJpbmQodGhpcy5qd3Byb3h5KTtcbiAgICB0aGlzLnByb3h5Q29tbWFuZCA9IHRoaXMuandwcm94eS5jb21tYW5kLmJpbmQodGhpcy5qd3Byb3h5KTtcbiAgICB0aGlzLmp3cHJveHkuaW5zdHJ1bWVudGF0aW9uU3RhdGUgPSB7XG4gICAgICBleGl0ZWQ6IGZhbHNlLFxuICAgICAgY3Jhc2hlZDogZmFsc2UsXG4gICAgfTtcblxuICAgIGNvbnN0IG1vZFNlcnZlck5hbWUgPSBmcy5zYW5pdGl6ZU5hbWUoYCR7VEVTVF9BUEtfUEtHfV8ke3ZlcnNpb259XyR7dGhpcy5hcHBQYWNrYWdlfV8ke3RoaXMuYWRiLmN1ckRldmljZUlkfS5hcGtgLCB7XG4gICAgICByZXBsYWNlbWVudDogJy0nLFxuICAgIH0pO1xuICAgIHRoaXMubW9kU2VydmVyUGF0aCA9IHBhdGgucmVzb2x2ZSh0aGlzLnRtcERpciwgbW9kU2VydmVyTmFtZSk7XG4gICAgdGhpcy5zaG93R3JhZGxlTG9nID0gb3B0cy5zaG93R3JhZGxlTG9nO1xuICAgIHRoaXMuZXNwcmVzc29CdWlsZENvbmZpZyA9IG9wdHMuZXNwcmVzc29CdWlsZENvbmZpZztcblxuICAgIHRoaXMuc2VydmVyTGF1bmNoVGltZW91dCA9IG9wdHMuc2VydmVyTGF1bmNoVGltZW91dCB8fCBFU1BSRVNTT19TRVJWRVJfTEFVTkNIX1RJTUVPVVRfTVM7XG4gICAgdGhpcy5hbmRyb2lkSW5zdGFsbFRpbWVvdXQgPSBvcHRzLmFuZHJvaWRJbnN0YWxsVGltZW91dDtcblxuICAgIHRoaXMuZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2UgPSBvcHRzLmRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlO1xuXG4gICAgLy8gRXNwcmVzc28gU2VydmVyIGFwcCBuZWVkcyB0byBiZSBzaWduZWQgd2l0aCBzYW1lIGtleVN0b3JlIGFzIGFwcFBhY2thZ2VcbiAgICBpZiAob3B0cy51c2VLZXlzdG9yZSAmJiBvcHRzLmtleXN0b3JlUGF0aCAmJiBvcHRzLmtleXN0b3JlUGFzc3dvcmQgJiYgb3B0cy5rZXlBbGlhcyAmJiBvcHRzLmtleVBhc3N3b3JkKSB7XG4gICAgICB0aGlzLnNpZ25pbmdDb25maWcgPSBidWlsZFNlcnZlclNpZ25pbmdDb25maWcoe1xuICAgICAgICBrZXlzdG9yZUZpbGU6IG9wdHMua2V5c3RvcmVQYXRoLFxuICAgICAgICBrZXlzdG9yZVBhc3N3b3JkOiBvcHRzLmtleXN0b3JlUGFzc3dvcmQsXG4gICAgICAgIGtleUFsaWFzOiBvcHRzLmtleUFsaWFzLFxuICAgICAgICBrZXlQYXNzd29yZDogb3B0cy5rZXlQYXNzd29yZFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2lnbmluZ0NvbmZpZyA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaXNBcHBQYWNrYWdlQ2hhbmdlZCAoKSB7XG4gICAgaWYgKCFhd2FpdCB0aGlzLmFkYi5maWxlRXhpc3RzKFRBUkdFVF9QQUNLQUdFX0NPTlRBSU5FUikpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdUaGUgcHJldmlvdXMgdGFyZ2V0IGFwcGxpY2F0aW9uIHBhY2thZ2UgaXMgdW5rbm93bicpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IHByZXZpb3VzQXBwUGFja2FnZSA9IChhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ2NhdCcsIFRBUkdFVF9QQUNLQUdFX0NPTlRBSU5FUl0pKS50cmltKCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYFRoZSBwcmV2aW91cyB0YXJnZXQgYXBwbGljYXRpb24gcGFja2FnZSB3YXMgJyR7cHJldmlvdXNBcHBQYWNrYWdlfScuIGAgK1xuICAgICAgYFRoZSBjdXJyZW50IHBhY2thZ2UgaXMgJyR7dGhpcy5hcHBQYWNrYWdlfSdgKTtcbiAgICByZXR1cm4gcHJldmlvdXNBcHBQYWNrYWdlICE9PSB0aGlzLmFwcFBhY2thZ2U7XG4gIH1cblxuICAvKipcbiAgICogSW5zdGFsbHMgRXNwcmVzc28gc2VydmVyIGFwayBvbiB0byB0aGUgZGV2aWNlIG9yIGVtdWxhdG9yLlxuICAgKiBFYWNoIGFkYiBjb21tYW5kIHVzZXMgZGVmYXVsdCB0aW1lb3V0IGJ5IHRoZW0uXG4gICAqL1xuICBhc3luYyBpbnN0YWxsU2VydmVyICgpIHtcbiAgICBjb25zdCBhcHBTdGF0ZSA9IGF3YWl0IHRoaXMuYWRiLmdldEFwcGxpY2F0aW9uSW5zdGFsbFN0YXRlKHRoaXMubW9kU2VydmVyUGF0aCwgVEVTVF9BUEtfUEtHKTtcblxuICAgIGNvbnN0IHNob3VsZFVuaW5zdGFsbEFwcCA9IFtcbiAgICAgIHRoaXMuYWRiLkFQUF9JTlNUQUxMX1NUQVRFLk9MREVSX1ZFUlNJT05fSU5TVEFMTEVELFxuICAgICAgdGhpcy5hZGIuQVBQX0lOU1RBTExfU1RBVEUuTkVXRVJfVkVSU0lPTl9JTlNUQUxMRURcbiAgICBdLmluY2x1ZGVzKGFwcFN0YXRlKTtcbiAgICBjb25zdCBzaG91bGRJbnN0YWxsQXBwID0gc2hvdWxkVW5pbnN0YWxsQXBwIHx8IFtcbiAgICAgIHRoaXMuYWRiLkFQUF9JTlNUQUxMX1NUQVRFLk5PVF9JTlNUQUxMRURcbiAgICBdLmluY2x1ZGVzKGFwcFN0YXRlKTtcblxuICAgIGlmIChzaG91bGRVbmluc3RhbGxBcHApIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYFVuaW5zdGFsbGluZyBFc3ByZXNzbyBUZXN0IFNlcnZlciBhcGsgZnJvbSB0aGUgdGFyZ2V0IGRldmljZSAocGtnOiAnJHtURVNUX0FQS19QS0d9JylgKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnVuaW5zdGFsbEFwayhURVNUX0FQS19QS0cpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYEVycm9yIHVuaW5zdGFsbGluZyAnJHtURVNUX0FQS19QS0d9JzogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkSW5zdGFsbEFwcCkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgSW5zdGFsbGluZyBFc3ByZXNzbyBUZXN0IFNlcnZlciBhcGsgZnJvbSB0aGUgdGFyZ2V0IGRldmljZSAocGF0aDogJyR7dGhpcy5tb2RTZXJ2ZXJQYXRofScpYCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5pbnN0YWxsKHRoaXMubW9kU2VydmVyUGF0aCwgeyByZXBsYWNlOiBmYWxzZSwgdGltZW91dDogdGhpcy5hbmRyb2lkSW5zdGFsbFRpbWVvdXQgfSk7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYEluc3RhbGxlZCBFc3ByZXNzbyBUZXN0IFNlcnZlciBhcGsgJyR7dGhpcy5tb2RTZXJ2ZXJQYXRofScgKHBrZzogJyR7VEVTVF9BUEtfUEtHfScpYCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgQ2Fubm90IGluc3RhbGwgJyR7dGhpcy5tb2RTZXJ2ZXJQYXRofScgYmVjYXVzZSBvZiAnJHtlcnIubWVzc2FnZX0nYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW5zdGFsbFRlc3RBcGsgKCkge1xuICAgIGxldCByZWJ1aWxkID0gdGhpcy5mb3JjZUVzcHJlc3NvUmVidWlsZDtcbiAgICBpZiAocmVidWlsZCkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYCdmb3JjZUVzcHJlc3NvUmVidWlsZCcgY2FwYWJpbGl0eSBpcyBlbmFibGVkYCk7XG4gICAgfSBlbHNlIGlmIChhd2FpdCB0aGlzLmlzQXBwUGFja2FnZUNoYW5nZWQoKSkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgRm9yY2luZyBFc3ByZXNzbyBzZXJ2ZXIgcmVidWlsZCBiZWNhdXNlIG9mIGNoYW5nZWQgYXBwbGljYXRpb24gcGFja2FnZWApO1xuICAgICAgcmVidWlsZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHJlYnVpbGQgJiYgYXdhaXQgZnMuZXhpc3RzKHRoaXMubW9kU2VydmVyUGF0aCkpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBEZWxldGluZyB0aGUgb2Jzb2xldGUgRXNwcmVzc28gc2VydmVyIHBhY2thZ2UgJyR7dGhpcy5tb2RTZXJ2ZXJQYXRofSdgKTtcbiAgICAgIGF3YWl0IGZzLnVubGluayh0aGlzLm1vZFNlcnZlclBhdGgpO1xuICAgIH1cbiAgICBpZiAoIShhd2FpdCBmcy5leGlzdHModGhpcy5tb2RTZXJ2ZXJQYXRoKSkpIHtcbiAgICAgIGF3YWl0IHRoaXMuYnVpbGROZXdNb2RTZXJ2ZXIoKTtcbiAgICB9XG4gICAgY29uc3QgaXNTaWduZWQgPSBhd2FpdCB0aGlzLmFkYi5jaGVja0Fwa0NlcnQodGhpcy5tb2RTZXJ2ZXJQYXRoLCBURVNUX0FQS19QS0cpO1xuICAgIGlmICghaXNTaWduZWQpIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnNpZ24odGhpcy5tb2RTZXJ2ZXJQYXRoKTtcbiAgICB9XG4gICAgaWYgKChyZWJ1aWxkIHx8ICFpc1NpZ25lZCkgJiYgYXdhaXQgdGhpcy5hZGIudW5pbnN0YWxsQXBrKFRFU1RfQVBLX1BLRykpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ1VuaW5zdGFsbGVkIHRoZSBvYnNvbGV0ZSBFc3ByZXNzbyBzZXJ2ZXIgcGFja2FnZSBmcm9tIHRoZSBkZXZpY2UgdW5kZXIgdGVzdCcpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuaW5zdGFsbFNlcnZlcigpO1xuICB9XG5cbiAgYXN5bmMgYnVpbGROZXdNb2RTZXJ2ZXIgKCkge1xuICAgIGxldCBidWlsZENvbmZpZ3VyYXRpb24gPSB7fTtcbiAgICBpZiAodGhpcy5lc3ByZXNzb0J1aWxkQ29uZmlnKSB7XG4gICAgICBsZXQgYnVpbGRDb25maWd1cmF0aW9uU3RyO1xuICAgICAgaWYgKGF3YWl0IGZzLmV4aXN0cyh0aGlzLmVzcHJlc3NvQnVpbGRDb25maWcpKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYExvYWRpbmcgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZnJvbSAnJHt0aGlzLmVzcHJlc3NvQnVpbGRDb25maWd9J2ApO1xuICAgICAgICBidWlsZENvbmZpZ3VyYXRpb25TdHIgPSBhd2FpdCBmcy5yZWFkRmlsZSh0aGlzLmVzcHJlc3NvQnVpbGRDb25maWcsICd1dGY4Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBMb2FkaW5nIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGZyb20gJ2VzcHJlc3NvQnVpbGRDb25maWcnIGNhcGFiaWxpdHlgKTtcbiAgICAgICAgYnVpbGRDb25maWd1cmF0aW9uU3RyID0gdGhpcy5lc3ByZXNzb0J1aWxkQ29uZmlnO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgYnVpbGRDb25maWd1cmF0aW9uID0gSlNPTi5wYXJzZShidWlsZENvbmZpZ3VyYXRpb25TdHIpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvcignQ2Fubm90IHBhcnNlIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIEpTT04nLCBlKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZGlyTmFtZSA9IGZzLnNhbml0aXplTmFtZShgZXNwcmVzc28tc2VydmVyLSR7dGhpcy5hZGIuY3VyRGV2aWNlSWR9YCwge1xuICAgICAgcmVwbGFjZW1lbnQ6ICctJyxcbiAgICB9KTtcbiAgICBjb25zdCBzZXJ2ZXJQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMudG1wRGlyLCBkaXJOYW1lKTtcbiAgICB0aGlzLmxvZy5pbmZvKGBCdWlsZGluZyBlc3ByZXNzbyBzZXJ2ZXIgaW4gJyR7c2VydmVyUGF0aH0nYCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYFRoZSBidWlsZCBmb2xkZXIgcm9vdCBjb3VsZCBiZSBjdXN0b21pemVkIGJ5IGNoYW5naW5nIHRoZSAndG1wRGlyJyBjYXBhYmlsaXR5YCk7XG4gICAgYXdhaXQgZnMucmltcmFmKHNlcnZlclBhdGgpO1xuICAgIGF3YWl0IG1rZGlycChzZXJ2ZXJQYXRoKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgQ29weWluZyBlc3ByZXNzbyBzZXJ2ZXIgdGVtcGxhdGUgZnJvbSAoJyR7VEVTVF9TRVJWRVJfUk9PVH0nIHRvICcke3NlcnZlclBhdGh9JylgKTtcbiAgICBhd2FpdCBjb3B5R3JhZGxlUHJvamVjdFJlY3Vyc2l2ZWx5KFRFU1RfU0VSVkVSX1JPT1QsIHNlcnZlclBhdGgpO1xuICAgIHRoaXMubG9nLmRlYnVnKCdCdWxkaW5nIGVzcHJlc3NvIHNlcnZlcicpO1xuICAgIGF3YWl0IG5ldyBTZXJ2ZXJCdWlsZGVyKHRoaXMubG9nLCB7XG4gICAgICBzZXJ2ZXJQYXRoLCBidWlsZENvbmZpZ3VyYXRpb24sXG4gICAgICBzaG93R3JhZGxlTG9nOiB0aGlzLnNob3dHcmFkbGVMb2csXG4gICAgICB0ZXN0QXBwUGFja2FnZTogdGhpcy5hcHBQYWNrYWdlLFxuICAgICAgc2lnbmluZ0NvbmZpZzogdGhpcy5zaWduaW5nQ29uZmlnXG4gICAgfSkuYnVpbGQoKTtcbiAgICBjb25zdCBhcGtQYXRoID0gcGF0aC5yZXNvbHZlKHNlcnZlclBhdGgsICdhcHAnLCAnYnVpbGQnLCAnb3V0cHV0cycsICdhcGsnLCAnYW5kcm9pZFRlc3QnLCAnZGVidWcnLCAnYXBwLWRlYnVnLWFuZHJvaWRUZXN0LmFwaycpO1xuICAgIHRoaXMubG9nLmRlYnVnKGBDb3B5aW5nIGJ1aWx0IGFwayBmcm9tICcke2Fwa1BhdGh9JyB0byAnJHt0aGlzLm1vZFNlcnZlclBhdGh9J2ApO1xuICAgIGF3YWl0IGZzLmNvcHlGaWxlKGFwa1BhdGgsIHRoaXMubW9kU2VydmVyUGF0aCk7XG4gIH1cblxuICBhc3luYyBjbGVhbnVwU2Vzc2lvbkxlZnRvdmVycyAoKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoJ1BlcmZvcm1pbmcgY2xlYW51cCBvZiBhdXRvbWF0aW9uIGxlZnRvdmVycycpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHt2YWx1ZX0gPSAoYXdhaXQgYXhpb3Moe1xuICAgICAgICB1cmw6IGBodHRwOi8vJHt0aGlzLmhvc3R9OiR7dGhpcy5zeXN0ZW1Qb3J0fS9zZXNzaW9uc2AsXG4gICAgICAgIHRpbWVvdXQ6IDUwMCxcbiAgICAgIH0pKS5kYXRhO1xuICAgICAgY29uc3QgYWN0aXZlU2Vzc2lvbklkcyA9IHZhbHVlLm1hcCgoc2VzcykgPT4gc2Vzcy5pZCk7XG4gICAgICBpZiAoYWN0aXZlU2Vzc2lvbklkcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYFRoZSBmb2xsb3dpbmcgb2Jzb2xldGUgc2Vzc2lvbnMgYXJlIHN0aWxsIHJ1bm5pbmc6ICR7SlNPTi5zdHJpbmdpZnkoYWN0aXZlU2Vzc2lvbklkcyl9YCk7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKCdDbGVhbmluZyB1cCB0aGUgb2Jzb2xldGUgc2Vzc2lvbnMnKTtcbiAgICAgICAgYXdhaXQgQi5hbGwoYWN0aXZlU2Vzc2lvbklkcy5tYXAoKGlkKSA9PlxuICAgICAgICAgIGF4aW9zKHtcbiAgICAgICAgICAgIHVybDogYGh0dHA6Ly8ke3RoaXMuaG9zdH06JHt0aGlzLnN5c3RlbVBvcnR9L3Nlc3Npb24vJHtpZH1gLFxuICAgICAgICAgICAgbWV0aG9kOiAnREVMRVRFJyxcbiAgICAgICAgICB9KVxuICAgICAgICApKTtcbiAgICAgICAgLy8gTGV0IGFsbCBzZXNzaW9ucyB0byBiZSBwcm9wZXJseSB0ZXJtaW5hdGVkIGJlZm9yZSBjb250aW51aW5nXG4gICAgICAgIGF3YWl0IEIuZGVsYXkoMTAwMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZygnTm8gb2Jzb2xldGUgc2Vzc2lvbnMgaGF2ZSBiZWVuIGRldGVjdGVkJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYE5vIG9ic29sZXRlIHNlc3Npb25zIGhhdmUgYmVlbiBkZXRlY3RlZCAoJHtlLm1lc3NhZ2V9KWApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0U2Vzc2lvbiAoY2Fwcykge1xuICAgIGF3YWl0IHRoaXMuY2xlYW51cFNlc3Npb25MZWZ0b3ZlcnMoKTtcblxuICAgIGNvbnN0IGNtZCA9IFtcbiAgICAgICdzaGVsbCcsXG4gICAgICAnYW0nLCAnaW5zdHJ1bWVudCcsXG4gICAgICAnLXcnLFxuICAgICAgJy1lJywgJ2RlYnVnJywgcHJvY2Vzcy5lbnYuRVNQUkVTU09fSkFWQV9ERUJVRyA9PT0gJ3RydWUnLFxuICAgICAgJy1lJywgJ2Rpc2FibGVBbmFseXRpY3MnLCB0cnVlLCAvLyBUbyBhdm9pZCB1bmV4cGVjdGVkIGVycm9yIGJ5IGdvb2dsZSBhbmFseXRpY3NcbiAgICBdO1xuXG4gICAgaWYgKF8uaXNCb29sZWFuKHRoaXMuZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2UpKSB7XG4gICAgICBjbWQucHVzaCgnLWUnLCAnRElTQUJMRV9TVVBQUkVTU19BQ0NFU1NJQklMSVRZX1NFUlZJQ0VTJywgdGhpcy5kaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZSk7XG4gICAgfVxuXG4gICAgY21kLnB1c2goYCR7VEVTVF9BUEtfUEtHfS9hbmRyb2lkeC50ZXN0LnJ1bm5lci5BbmRyb2lkSlVuaXRSdW5uZXJgKTtcblxuICAgIHRoaXMubG9nLmluZm8oYFN0YXJ0aW5nIEVzcHJlc3NvIFNlcnZlciB2JHt2ZXJzaW9ufSB3aXRoIGNtZDogYWRiICR7Y21kLmpvaW4oJyAnKX1gKTtcblxuICAgIGxldCBoYXNTb2NrZXRFcnJvciA9IGZhbHNlO1xuICAgIC8vIHN0YXJ0IHRoZSBpbnN0cnVtZW50YXRpb24gcHJvY2Vzc1xuICAgIHRoaXMuandwcm94eS5pbnN0cnVtZW50YXRpb25TdGF0ZSA9IHtcbiAgICAgIGV4aXRlZDogZmFsc2UsXG4gICAgICBjcmFzaGVkOiBmYWxzZSxcbiAgICB9O1xuICAgIHRoaXMuaW5zdFByb2Nlc3MgPSB0aGlzLmFkYi5jcmVhdGVTdWJQcm9jZXNzKGNtZCk7XG4gICAgdGhpcy5pbnN0UHJvY2Vzcy5vbignZXhpdCcsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgIHRoaXMubG9nLmluZm8oYEluc3RydW1lbnRhdGlvbiBwcm9jZXNzIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfSBmcm9tIHNpZ25hbCAke3NpZ25hbH1gKTtcbiAgICAgIHRoaXMuandwcm94eS5pbnN0cnVtZW50YXRpb25TdGF0ZS5leGl0ZWQgPSB0cnVlO1xuICAgIH0pO1xuICAgIHRoaXMuaW5zdFByb2Nlc3Mub24oJ291dHB1dCcsIChzdGRvdXQsIHN0ZGVycikgPT4ge1xuICAgICAgY29uc3QgbGluZSA9IHN0ZG91dCB8fCBzdGRlcnI7XG4gICAgICBpZiAoXy5pc0VtcHR5KGxpbmUudHJpbSgpKSkge1xuICAgICAgICAvLyBEbyBub3QgcHJpbnQgZW1wdHkgbGluZXMgaW50byB0aGUgc3lzdGVtIGxvZ1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9nLmRlYnVnKGBbSW5zdHJ1bWVudGF0aW9uXSAke2xpbmUudHJpbSgpfWApO1xuICAgICAgLy8gQSAnU29ja2V0RXhjZXB0aW9uJyBpbmRpY2F0ZXMgdGhhdCB3ZSBjb3VsZG4ndCBjb25uZWN0IHRvIHRoZSBFc3ByZXNzbyBzZXJ2ZXIsXG4gICAgICAvLyBiZWNhdXNlIHRoZSBJTlRFUk5FVCBwZXJtaXNzaW9uIGlzIG5vdCBzZXRcbiAgICAgIGlmIChsaW5lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2phdmEubmV0LnNvY2tldGV4Y2VwdGlvbicpKSB7XG4gICAgICAgIGhhc1NvY2tldEVycm9yID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAobGluZS5pbmNsdWRlcygnUHJvY2VzcyBjcmFzaGVkJykpIHtcbiAgICAgICAgdGhpcy5qd3Byb3h5Lmluc3RydW1lbnRhdGlvblN0YXRlLmNyYXNoZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgdGltZXIgPSBuZXcgdGltaW5nLlRpbWVyKCkuc3RhcnQoKTtcbiAgICBhd2FpdCB0aGlzLmluc3RQcm9jZXNzLnN0YXJ0KDApO1xuICAgIHRoaXMubG9nLmluZm8oYFdhaXRpbmcgdXAgdG8gJHt0aGlzLnNlcnZlckxhdW5jaFRpbWVvdXR9bXMgZm9yIEVzcHJlc3NvIHNlcnZlciB0byBiZSBvbmxpbmVgKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmIChoYXNTb2NrZXRFcnJvcikge1xuICAgICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYEVzcHJlc3NvIHNlcnZlciBoYXMgZmFpbGVkIHRvIHN0YXJ0IGR1ZSB0byBhbiB1bmV4cGVjdGVkIGV4Y2VwdGlvbi4gYCArXG4gICAgICAgICAgICBgTWFrZSBzdXJlIHRoZSAnSU5URVJORVQnIHBlcm1pc3Npb24gaXMgcmVxdWVzdGVkIGluIHRoZSBBbmRyb2lkIG1hbmlmZXN0IG9mIHlvdXIgYCArXG4gICAgICAgICAgICBgYXBwbGljYXRpb24gdW5kZXIgdGVzdCAoPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9XCJhbmRyb2lkLnBlcm1pc3Npb24uSU5URVJORVRcIiAvPilgKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmp3cHJveHkuaW5zdHJ1bWVudGF0aW9uU3RhdGUuZXhpdGVkKSB7XG4gICAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgRXNwcmVzc28gc2VydmVyIHByb2Nlc3MgaGFzIGJlZW4gdW5leHBlY3RlZGx5IHRlcm1pbmF0ZWQuIGAgK1xuICAgICAgICAgICAgYENoZWNrIHRoZSBBcHBpdW0gc2VydmVyIGxvZyBhbmQgdGhlIGxvZ2NhdCBvdXRwdXQgZm9yIG1vcmUgZGV0YWlsc2ApO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5qd3Byb3h5LmNvbW1hbmQoJy9zdGF0dXMnLCAnR0VUJyk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgd2FpdE1zOiB0aGlzLnNlcnZlckxhdW5jaFRpbWVvdXQsXG4gICAgICAgIGludGVydmFsTXM6IDUwMCxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmICgvQ29uZGl0aW9uIHVubWV0Ly50ZXN0KGUubWVzc2FnZSkpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgVGltZWQgb3V0IHdhaXRpbmcgZm9yIEVzcHJlc3NvIHNlcnZlciB0byBiZSBgICtcbiAgICAgICAgICBgb25saW5lIHdpdGhpbiAke3RoaXMuc2VydmVyTGF1bmNoVGltZW91dH1tcy4gVGhlIHRpbWVvdXQgdmFsdWUgY291bGQgYmUgYCArXG4gICAgICAgICAgYGN1c3RvbWl6ZWQgdXNpbmcgJ2VzcHJlc3NvU2VydmVyTGF1bmNoVGltZW91dCcgY2FwYWJpbGl0eWApO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgdGhpcy5sb2cuaW5mbyhgRXNwcmVzc28gc2VydmVyIGlzIG9ubGluZS4gYCArXG4gICAgICBgVGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgdG9vayAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgIHRoaXMubG9nLmluZm8oJ1N0YXJ0aW5nIHRoZSBzZXNzaW9uJyk7XG5cbiAgICBhd2FpdCB0aGlzLmp3cHJveHkuY29tbWFuZCgnL3Nlc3Npb24nLCAnUE9TVCcsIHtcbiAgICAgIGNhcGFiaWxpdGllczoge1xuICAgICAgICBmaXJzdE1hdGNoOiBbY2Fwc10sXG4gICAgICAgIGFsd2F5c01hdGNoOiB7fVxuICAgICAgfVxuICAgIH0pO1xuICAgIGF3YWl0IHRoaXMucmVjb3JkVGFyZ2V0QXBwUGFja2FnZSgpO1xuICB9XG5cbiAgYXN5bmMgcmVjb3JkVGFyZ2V0QXBwUGFja2FnZSAoKSB7XG4gICAgYXdhaXQgdGhpcy5hZGIuc2hlbGwoW2BlY2hvIFwiJHt0aGlzLmFwcFBhY2thZ2V9XCIgPiBcIiR7VEFSR0VUX1BBQ0tBR0VfQ09OVEFJTkVSfVwiYF0pO1xuICAgIHRoaXMubG9nLmluZm8oYFJlY29yZGVkIHRoZSB0YXJnZXQgYXBwbGljYXRpb24gcGFja2FnZSAnJHt0aGlzLmFwcFBhY2thZ2V9JyB0byAke1RBUkdFVF9QQUNLQUdFX0NPTlRBSU5FUn1gKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVNlc3Npb24gKCkge1xuICAgIHRoaXMubG9nLmRlYnVnKCdEZWxldGluZyBFc3ByZXNzbyBzZXJ2ZXIgc2Vzc2lvbicpO1xuICAgIC8vIHJlbHkgb24gandwcm94eSdzIGludGVsbGlnZW5jZSB0byBrbm93IHdoYXQgd2UncmUgdGFsa2luZyBhYm91dCBhbmRcbiAgICAvLyBkZWxldGUgdGhlIGN1cnJlbnQgc2Vzc2lvblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmp3cHJveHkuY29tbWFuZCgnLycsICdERUxFVEUnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oYERpZCBub3QgZ2V0IGNvbmZpcm1hdGlvbiBFc3ByZXNzbyBkZWxldGVTZXNzaW9uIHdvcmtlZDsgYCArXG4gICAgICAgICAgYEVycm9yIHdhczogJHtlcnJ9YCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW5zdFByb2Nlc3MgJiYgdGhpcy5pbnN0UHJvY2Vzcy5pc1J1bm5pbmcpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5zdFByb2Nlc3Muc3RvcCgpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgeyBFc3ByZXNzb1J1bm5lciwgUkVRVUlSRURfUEFSQU1TLCBURVNUX0FQS19QS0cgfTtcbmV4cG9ydCBkZWZhdWx0IEVzcHJlc3NvUnVubmVyO1xuIl0sImZpbGUiOiJsaWIvZXNwcmVzc28tcnVubmVyLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
|
357
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2VzcHJlc3NvLXJ1bm5lci5qcyIsIm5hbWVzIjpbIlRFU1RfU0VSVkVSX1JPT1QiLCJwYXRoIiwicmVzb2x2ZSIsIl9fZGlybmFtZSIsIlRFU1RfQVBLX1BLRyIsIlJFUVVJUkVEX1BBUkFNUyIsIkVTUFJFU1NPX1NFUlZFUl9MQVVOQ0hfVElNRU9VVF9NUyIsIlRBUkdFVF9QQUNLQUdFX0NPTlRBSU5FUiIsIkVzcHJlc3NvUHJveHkiLCJKV1Byb3h5IiwicHJveHlDb21tYW5kIiwidXJsIiwibWV0aG9kIiwiYm9keSIsImNyYXNoZWQiLCJleGl0ZWQiLCJpbnN0cnVtZW50YXRpb25TdGF0ZSIsImVycm9ycyIsIkludmFsaWRDb250ZXh0RXJyb3IiLCJFc3ByZXNzb1J1bm5lciIsImNvbnN0cnVjdG9yIiwibG9nIiwib3B0cyIsInJlcSIsInV0aWwiLCJoYXNWYWx1ZSIsIkVycm9yIiwiandwcm94eSIsInNlcnZlciIsImhvc3QiLCJwb3J0Iiwic3lzdGVtUG9ydCIsImJhc2UiLCJrZWVwQWxpdmUiLCJwcm94eVJlcVJlcyIsImJpbmQiLCJjb21tYW5kIiwibW9kU2VydmVyTmFtZSIsImZzIiwic2FuaXRpemVOYW1lIiwidmVyc2lvbiIsImFwcFBhY2thZ2UiLCJhZGIiLCJjdXJEZXZpY2VJZCIsInJlcGxhY2VtZW50IiwibW9kU2VydmVyUGF0aCIsInRtcERpciIsInNob3dHcmFkbGVMb2ciLCJlc3ByZXNzb0J1aWxkQ29uZmlnIiwic2VydmVyTGF1bmNoVGltZW91dCIsImFuZHJvaWRJbnN0YWxsVGltZW91dCIsImRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlIiwidXNlS2V5c3RvcmUiLCJrZXlzdG9yZVBhdGgiLCJrZXlzdG9yZVBhc3N3b3JkIiwia2V5QWxpYXMiLCJrZXlQYXNzd29yZCIsInNpZ25pbmdDb25maWciLCJrZXlzdG9yZUZpbGUiLCJpc0FwcFBhY2thZ2VDaGFuZ2VkIiwiZmlsZUV4aXN0cyIsImRlYnVnIiwicHJldmlvdXNBcHBQYWNrYWdlIiwic2hlbGwiLCJ0cmltIiwiaW5zdGFsbFNlcnZlciIsImFwcFN0YXRlIiwiZ2V0QXBwbGljYXRpb25JbnN0YWxsU3RhdGUiLCJzaG91bGRVbmluc3RhbGxBcHAiLCJBUFBfSU5TVEFMTF9TVEFURSIsIk9MREVSX1ZFUlNJT05fSU5TVEFMTEVEIiwiTkVXRVJfVkVSU0lPTl9JTlNUQUxMRUQiLCJpbmNsdWRlcyIsInNob3VsZEluc3RhbGxBcHAiLCJOT1RfSU5TVEFMTEVEIiwiaW5mbyIsInVuaW5zdGFsbEFwayIsImVyciIsIndhcm4iLCJtZXNzYWdlIiwiaW5zdGFsbCIsInJlcGxhY2UiLCJ0aW1lb3V0IiwiZXJyb3JBbmRUaHJvdyIsImluc3RhbGxUZXN0QXBrIiwicmVidWlsZCIsImZvcmNlRXNwcmVzc29SZWJ1aWxkIiwiZXhpc3RzIiwidW5saW5rIiwiYnVpbGROZXdNb2RTZXJ2ZXIiLCJpc1NpZ25lZCIsImNoZWNrQXBrQ2VydCIsInNpZ24iLCJidWlsZENvbmZpZ3VyYXRpb24iLCJidWlsZENvbmZpZ3VyYXRpb25TdHIiLCJyZWFkRmlsZSIsIkpTT04iLCJwYXJzZSIsImUiLCJlcnJvciIsImRpck5hbWUiLCJzZXJ2ZXJQYXRoIiwicmltcmFmIiwiU2VydmVyQnVpbGRlciIsInRlc3RBcHBQYWNrYWdlIiwiYnVpbGQiLCJhcGtQYXRoIiwiY29weUZpbGUiLCJjbGVhbnVwU2Vzc2lvbkxlZnRvdmVycyIsInZhbHVlIiwiZGF0YSIsImFjdGl2ZVNlc3Npb25JZHMiLCJtYXAiLCJzZXNzIiwiaWQiLCJsZW5ndGgiLCJzdHJpbmdpZnkiLCJCIiwiYWxsIiwiZGVsYXkiLCJzdGFydFNlc3Npb24iLCJjYXBzIiwiY21kIiwicHJvY2VzcyIsImVudiIsIkVTUFJFU1NPX0pBVkFfREVCVUciLCJfIiwiaXNCb29sZWFuIiwicHVzaCIsImpvaW4iLCJoYXNTb2NrZXRFcnJvciIsImluc3RQcm9jZXNzIiwiY3JlYXRlU3ViUHJvY2VzcyIsIm9uIiwiY29kZSIsInNpZ25hbCIsInN0ZG91dCIsInN0ZGVyciIsImxpbmUiLCJpc0VtcHR5IiwidG9Mb3dlckNhc2UiLCJ0aW1lciIsInRpbWluZyIsIlRpbWVyIiwic3RhcnQiLCJ3YWl0TXMiLCJpbnRlcnZhbE1zIiwidGVzdCIsImdldER1cmF0aW9uIiwiYXNNaWxsaVNlY29uZHMiLCJ0b0ZpeGVkIiwiY2FwYWJpbGl0aWVzIiwiZmlyc3RNYXRjaCIsImFsd2F5c01hdGNoIiwicmVjb3JkVGFyZ2V0QXBwUGFja2FnZSIsImRlbGV0ZVNlc3Npb24iLCJpc1J1bm5pbmciLCJzdG9wIl0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL2VzcHJlc3NvLXJ1bm5lci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBKV1Byb3h5LCBlcnJvcnMgfSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcbmltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBTZXJ2ZXJCdWlsZGVyLCBidWlsZFNlcnZlclNpZ25pbmdDb25maWcgfSBmcm9tICcuL3NlcnZlci1idWlsZGVyJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZnMsIHV0aWwsIG1rZGlycCwgdGltaW5nIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuLi8uLi9wYWNrYWdlLmpzb24nOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGltcG9ydC9uby11bnJlc29sdmVkXG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgY29weUdyYWRsZVByb2plY3RSZWN1cnNpdmVseSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcblxuXG5jb25zdCBURVNUX1NFUlZFUl9ST09UID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJ2VzcHJlc3NvLXNlcnZlcicpO1xuY29uc3QgVEVTVF9BUEtfUEtHID0gJ2lvLmFwcGl1bS5lc3ByZXNzb3NlcnZlci50ZXN0JztcbmNvbnN0IFJFUVVJUkVEX1BBUkFNUyA9IFtcbiAgJ2FkYicsXG4gICd0bXBEaXInLFxuICAnaG9zdCcsXG4gICdzeXN0ZW1Qb3J0JyxcbiAgJ2RldmljZVBvcnQnLFxuICAnYXBwUGFja2FnZScsXG4gICdmb3JjZUVzcHJlc3NvUmVidWlsZCcsXG5dO1xuY29uc3QgRVNQUkVTU09fU0VSVkVSX0xBVU5DSF9USU1FT1VUX01TID0gNDUwMDA7XG5jb25zdCBUQVJHRVRfUEFDS0FHRV9DT05UQUlORVIgPSAnL2RhdGEvbG9jYWwvdG1wL2VzcHJlc3NvLmFwcHBhY2thZ2UnO1xuXG5jbGFzcyBFc3ByZXNzb1Byb3h5IGV4dGVuZHMgSldQcm94eSB7XG4gIGFzeW5jIHByb3h5Q29tbWFuZCAodXJsLCBtZXRob2QsIGJvZHkgPSBudWxsKSB7XG4gICAgY29uc3Qge2NyYXNoZWQsIGV4aXRlZH0gPSB0aGlzLmluc3RydW1lbnRhdGlvblN0YXRlO1xuICAgIGlmIChleGl0ZWQpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZENvbnRleHRFcnJvcihgJyR7bWV0aG9kfSAke3VybH0nIGNhbm5vdCBiZSBwcm94aWVkIHRvIEVzcHJlc3NvIHNlcnZlciBiZWNhdXNlIGAgK1xuICAgICAgICBgdGhlIGluc3RydW1lbnRhdGlvbiBwcm9jZXNzIGhhcyAke2NyYXNoZWQgPyAnY3Jhc2hlZCcgOiAnYmVlbiB1bmV4cGVjdGVkbHkgdGVybWluYXRlZCd9LiBgICtcbiAgICAgICAgYENoZWNrIHRoZSBBcHBpdW0gc2VydmVyIGxvZyBhbmQgdGhlIGxvZ2NhdCBvdXRwdXQgZm9yIG1vcmUgZGV0YWlsc2ApO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgc3VwZXIucHJveHlDb21tYW5kKHVybCwgbWV0aG9kLCBib2R5KTtcbiAgfVxufVxuXG5jbGFzcyBFc3ByZXNzb1J1bm5lciB7XG4gIGNvbnN0cnVjdG9yIChsb2csIG9wdHMgPSB7fSkge1xuICAgIGZvciAobGV0IHJlcSBvZiBSRVFVSVJFRF9QQVJBTVMpIHtcbiAgICAgIGlmICghb3B0cyB8fCAhdXRpbC5oYXNWYWx1ZShvcHRzW3JlcV0pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgT3B0aW9uICcke3JlcX0nIGlzIHJlcXVpcmVkIWApO1xuICAgICAgfVxuICAgICAgdGhpc1tyZXFdID0gb3B0c1tyZXFdO1xuICAgIH1cbiAgICB0aGlzLmxvZyA9IGxvZztcbiAgICB0aGlzLmp3cHJveHkgPSBuZXcgRXNwcmVzc29Qcm94eSh7XG4gICAgICBsb2csXG4gICAgICBzZXJ2ZXI6IHRoaXMuaG9zdCxcbiAgICAgIHBvcnQ6IHRoaXMuc3lzdGVtUG9ydCxcbiAgICAgIGJhc2U6ICcnLFxuICAgICAga2VlcEFsaXZlOiB0cnVlLFxuICAgIH0pO1xuICAgIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLmp3cHJveHkucHJveHlSZXFSZXMuYmluZCh0aGlzLmp3cHJveHkpO1xuICAgIHRoaXMucHJveHlDb21tYW5kID0gdGhpcy5qd3Byb3h5LmNvbW1hbmQuYmluZCh0aGlzLmp3cHJveHkpO1xuICAgIHRoaXMuandwcm94eS5pbnN0cnVtZW50YXRpb25TdGF0ZSA9IHtcbiAgICAgIGV4aXRlZDogZmFsc2UsXG4gICAgICBjcmFzaGVkOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgY29uc3QgbW9kU2VydmVyTmFtZSA9IGZzLnNhbml0aXplTmFtZShgJHtURVNUX0FQS19QS0d9XyR7dmVyc2lvbn1fJHt0aGlzLmFwcFBhY2thZ2V9XyR7dGhpcy5hZGIuY3VyRGV2aWNlSWR9LmFwa2AsIHtcbiAgICAgIHJlcGxhY2VtZW50OiAnLScsXG4gICAgfSk7XG4gICAgdGhpcy5tb2RTZXJ2ZXJQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMudG1wRGlyLCBtb2RTZXJ2ZXJOYW1lKTtcbiAgICB0aGlzLnNob3dHcmFkbGVMb2cgPSBvcHRzLnNob3dHcmFkbGVMb2c7XG4gICAgdGhpcy5lc3ByZXNzb0J1aWxkQ29uZmlnID0gb3B0cy5lc3ByZXNzb0J1aWxkQ29uZmlnO1xuXG4gICAgdGhpcy5zZXJ2ZXJMYXVuY2hUaW1lb3V0ID0gb3B0cy5zZXJ2ZXJMYXVuY2hUaW1lb3V0IHx8IEVTUFJFU1NPX1NFUlZFUl9MQVVOQ0hfVElNRU9VVF9NUztcbiAgICB0aGlzLmFuZHJvaWRJbnN0YWxsVGltZW91dCA9IG9wdHMuYW5kcm9pZEluc3RhbGxUaW1lb3V0O1xuXG4gICAgdGhpcy5kaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZSA9IG9wdHMuZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2U7XG5cbiAgICAvLyBFc3ByZXNzbyBTZXJ2ZXIgYXBwIG5lZWRzIHRvIGJlIHNpZ25lZCB3aXRoIHNhbWUga2V5U3RvcmUgYXMgYXBwUGFja2FnZVxuICAgIGlmIChvcHRzLnVzZUtleXN0b3JlICYmIG9wdHMua2V5c3RvcmVQYXRoICYmIG9wdHMua2V5c3RvcmVQYXNzd29yZCAmJiBvcHRzLmtleUFsaWFzICYmIG9wdHMua2V5UGFzc3dvcmQpIHtcbiAgICAgIHRoaXMuc2lnbmluZ0NvbmZpZyA9IGJ1aWxkU2VydmVyU2lnbmluZ0NvbmZpZyh7XG4gICAgICAgIGtleXN0b3JlRmlsZTogb3B0cy5rZXlzdG9yZVBhdGgsXG4gICAgICAgIGtleXN0b3JlUGFzc3dvcmQ6IG9wdHMua2V5c3RvcmVQYXNzd29yZCxcbiAgICAgICAga2V5QWxpYXM6IG9wdHMua2V5QWxpYXMsXG4gICAgICAgIGtleVBhc3N3b3JkOiBvcHRzLmtleVBhc3N3b3JkXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaWduaW5nQ29uZmlnID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpc0FwcFBhY2thZ2VDaGFuZ2VkICgpIHtcbiAgICBpZiAoIWF3YWl0IHRoaXMuYWRiLmZpbGVFeGlzdHMoVEFSR0VUX1BBQ0tBR0VfQ09OVEFJTkVSKSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ1RoZSBwcmV2aW91cyB0YXJnZXQgYXBwbGljYXRpb24gcGFja2FnZSBpcyB1bmtub3duJyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgcHJldmlvdXNBcHBQYWNrYWdlID0gKGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsnY2F0JywgVEFSR0VUX1BBQ0tBR0VfQ09OVEFJTkVSXSkpLnRyaW0oKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgVGhlIHByZXZpb3VzIHRhcmdldCBhcHBsaWNhdGlvbiBwYWNrYWdlIHdhcyAnJHtwcmV2aW91c0FwcFBhY2thZ2V9Jy4gYCArXG4gICAgICBgVGhlIGN1cnJlbnQgcGFja2FnZSBpcyAnJHt0aGlzLmFwcFBhY2thZ2V9J2ApO1xuICAgIHJldHVybiBwcmV2aW91c0FwcFBhY2thZ2UgIT09IHRoaXMuYXBwUGFja2FnZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnN0YWxscyBFc3ByZXNzbyBzZXJ2ZXIgYXBrIG9uIHRvIHRoZSBkZXZpY2Ugb3IgZW11bGF0b3IuXG4gICAqIEVhY2ggYWRiIGNvbW1hbmQgdXNlcyBkZWZhdWx0IHRpbWVvdXQgYnkgdGhlbS5cbiAgICovXG4gIGFzeW5jIGluc3RhbGxTZXJ2ZXIgKCkge1xuICAgIGNvbnN0IGFwcFN0YXRlID0gYXdhaXQgdGhpcy5hZGIuZ2V0QXBwbGljYXRpb25JbnN0YWxsU3RhdGUodGhpcy5tb2RTZXJ2ZXJQYXRoLCBURVNUX0FQS19QS0cpO1xuXG4gICAgY29uc3Qgc2hvdWxkVW5pbnN0YWxsQXBwID0gW1xuICAgICAgdGhpcy5hZGIuQVBQX0lOU1RBTExfU1RBVEUuT0xERVJfVkVSU0lPTl9JTlNUQUxMRUQsXG4gICAgICB0aGlzLmFkYi5BUFBfSU5TVEFMTF9TVEFURS5ORVdFUl9WRVJTSU9OX0lOU1RBTExFRFxuICAgIF0uaW5jbHVkZXMoYXBwU3RhdGUpO1xuICAgIGNvbnN0IHNob3VsZEluc3RhbGxBcHAgPSBzaG91bGRVbmluc3RhbGxBcHAgfHwgW1xuICAgICAgdGhpcy5hZGIuQVBQX0lOU1RBTExfU1RBVEUuTk9UX0lOU1RBTExFRFxuICAgIF0uaW5jbHVkZXMoYXBwU3RhdGUpO1xuXG4gICAgaWYgKHNob3VsZFVuaW5zdGFsbEFwcCkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgVW5pbnN0YWxsaW5nIEVzcHJlc3NvIFRlc3QgU2VydmVyIGFwayBmcm9tIHRoZSB0YXJnZXQgZGV2aWNlIChwa2c6ICcke1RFU1RfQVBLX1BLR30nKWApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIudW5pbnN0YWxsQXBrKFRFU1RfQVBLX1BLRyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgRXJyb3IgdW5pbnN0YWxsaW5nICcke1RFU1RfQVBLX1BLR30nOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaG91bGRJbnN0YWxsQXBwKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBJbnN0YWxsaW5nIEVzcHJlc3NvIFRlc3QgU2VydmVyIGFwayBmcm9tIHRoZSB0YXJnZXQgZGV2aWNlIChwYXRoOiAnJHt0aGlzLm1vZFNlcnZlclBhdGh9JylgKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLmluc3RhbGwodGhpcy5tb2RTZXJ2ZXJQYXRoLCB7IHJlcGxhY2U6IGZhbHNlLCB0aW1lb3V0OiB0aGlzLmFuZHJvaWRJbnN0YWxsVGltZW91dCB9KTtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgSW5zdGFsbGVkIEVzcHJlc3NvIFRlc3QgU2VydmVyIGFwayAnJHt0aGlzLm1vZFNlcnZlclBhdGh9JyAocGtnOiAnJHtURVNUX0FQS19QS0d9JylgKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDYW5ub3QgaW5zdGFsbCAnJHt0aGlzLm1vZFNlcnZlclBhdGh9JyBiZWNhdXNlIG9mICcke2Vyci5tZXNzYWdlfSdgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBpbnN0YWxsVGVzdEFwayAoKSB7XG4gICAgbGV0IHJlYnVpbGQgPSB0aGlzLmZvcmNlRXNwcmVzc29SZWJ1aWxkO1xuICAgIGlmIChyZWJ1aWxkKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgJ2ZvcmNlRXNwcmVzc29SZWJ1aWxkJyBjYXBhYmlsaXR5IGlzIGVuYWJsZWRgKTtcbiAgICB9IGVsc2UgaWYgKGF3YWl0IHRoaXMuaXNBcHBQYWNrYWdlQ2hhbmdlZCgpKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBGb3JjaW5nIEVzcHJlc3NvIHNlcnZlciByZWJ1aWxkIGJlY2F1c2Ugb2YgY2hhbmdlZCBhcHBsaWNhdGlvbiBwYWNrYWdlYCk7XG4gICAgICByZWJ1aWxkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocmVidWlsZCAmJiBhd2FpdCBmcy5leGlzdHModGhpcy5tb2RTZXJ2ZXJQYXRoKSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYERlbGV0aW5nIHRoZSBvYnNvbGV0ZSBFc3ByZXNzbyBzZXJ2ZXIgcGFja2FnZSAnJHt0aGlzLm1vZFNlcnZlclBhdGh9J2ApO1xuICAgICAgYXdhaXQgZnMudW5saW5rKHRoaXMubW9kU2VydmVyUGF0aCk7XG4gICAgfVxuICAgIGlmICghKGF3YWl0IGZzLmV4aXN0cyh0aGlzLm1vZFNlcnZlclBhdGgpKSkge1xuICAgICAgYXdhaXQgdGhpcy5idWlsZE5ld01vZFNlcnZlcigpO1xuICAgIH1cbiAgICBjb25zdCBpc1NpZ25lZCA9IGF3YWl0IHRoaXMuYWRiLmNoZWNrQXBrQ2VydCh0aGlzLm1vZFNlcnZlclBhdGgsIFRFU1RfQVBLX1BLRyk7XG4gICAgaWYgKCFpc1NpZ25lZCkge1xuICAgICAgYXdhaXQgdGhpcy5hZGIuc2lnbih0aGlzLm1vZFNlcnZlclBhdGgpO1xuICAgIH1cbiAgICBpZiAoKHJlYnVpbGQgfHwgIWlzU2lnbmVkKSAmJiBhd2FpdCB0aGlzLmFkYi51bmluc3RhbGxBcGsoVEVTVF9BUEtfUEtHKSkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnVW5pbnN0YWxsZWQgdGhlIG9ic29sZXRlIEVzcHJlc3NvIHNlcnZlciBwYWNrYWdlIGZyb20gdGhlIGRldmljZSB1bmRlciB0ZXN0Jyk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5pbnN0YWxsU2VydmVyKCk7XG4gIH1cblxuICBhc3luYyBidWlsZE5ld01vZFNlcnZlciAoKSB7XG4gICAgbGV0IGJ1aWxkQ29uZmlndXJhdGlvbiA9IHt9O1xuICAgIGlmICh0aGlzLmVzcHJlc3NvQnVpbGRDb25maWcpIHtcbiAgICAgIGxldCBidWlsZENvbmZpZ3VyYXRpb25TdHI7XG4gICAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKHRoaXMuZXNwcmVzc29CdWlsZENvbmZpZykpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgTG9hZGluZyB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmcm9tICcke3RoaXMuZXNwcmVzc29CdWlsZENvbmZpZ30nYCk7XG4gICAgICAgIGJ1aWxkQ29uZmlndXJhdGlvblN0ciA9IGF3YWl0IGZzLnJlYWRGaWxlKHRoaXMuZXNwcmVzc29CdWlsZENvbmZpZywgJ3V0ZjgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYExvYWRpbmcgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZnJvbSAnZXNwcmVzc29CdWlsZENvbmZpZycgY2FwYWJpbGl0eWApO1xuICAgICAgICBidWlsZENvbmZpZ3VyYXRpb25TdHIgPSB0aGlzLmVzcHJlc3NvQnVpbGRDb25maWc7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBidWlsZENvbmZpZ3VyYXRpb24gPSBKU09OLnBhcnNlKGJ1aWxkQ29uZmlndXJhdGlvblN0cik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yKCdDYW5ub3QgcGFyc2UgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gSlNPTicsIGUpO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBkaXJOYW1lID0gZnMuc2FuaXRpemVOYW1lKGBlc3ByZXNzby1zZXJ2ZXItJHt0aGlzLmFkYi5jdXJEZXZpY2VJZH1gLCB7XG4gICAgICByZXBsYWNlbWVudDogJy0nLFxuICAgIH0pO1xuICAgIGNvbnN0IHNlcnZlclBhdGggPSBwYXRoLnJlc29sdmUodGhpcy50bXBEaXIsIGRpck5hbWUpO1xuICAgIHRoaXMubG9nLmluZm8oYEJ1aWxkaW5nIGVzcHJlc3NvIHNlcnZlciBpbiAnJHtzZXJ2ZXJQYXRofSdgKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgVGhlIGJ1aWxkIGZvbGRlciByb290IGNvdWxkIGJlIGN1c3RvbWl6ZWQgYnkgY2hhbmdpbmcgdGhlICd0bXBEaXInIGNhcGFiaWxpdHlgKTtcbiAgICBhd2FpdCBmcy5yaW1yYWYoc2VydmVyUGF0aCk7XG4gICAgYXdhaXQgbWtkaXJwKHNlcnZlclBhdGgpO1xuICAgIHRoaXMubG9nLmRlYnVnKGBDb3B5aW5nIGVzcHJlc3NvIHNlcnZlciB0ZW1wbGF0ZSBmcm9tICgnJHtURVNUX1NFUlZFUl9ST09UfScgdG8gJyR7c2VydmVyUGF0aH0nKWApO1xuICAgIGF3YWl0IGNvcHlHcmFkbGVQcm9qZWN0UmVjdXJzaXZlbHkoVEVTVF9TRVJWRVJfUk9PVCwgc2VydmVyUGF0aCk7XG4gICAgdGhpcy5sb2cuZGVidWcoJ0J1bGRpbmcgZXNwcmVzc28gc2VydmVyJyk7XG4gICAgYXdhaXQgbmV3IFNlcnZlckJ1aWxkZXIodGhpcy5sb2csIHtcbiAgICAgIHNlcnZlclBhdGgsIGJ1aWxkQ29uZmlndXJhdGlvbixcbiAgICAgIHNob3dHcmFkbGVMb2c6IHRoaXMuc2hvd0dyYWRsZUxvZyxcbiAgICAgIHRlc3RBcHBQYWNrYWdlOiB0aGlzLmFwcFBhY2thZ2UsXG4gICAgICBzaWduaW5nQ29uZmlnOiB0aGlzLnNpZ25pbmdDb25maWdcbiAgICB9KS5idWlsZCgpO1xuICAgIGNvbnN0IGFwa1BhdGggPSBwYXRoLnJlc29sdmUoc2VydmVyUGF0aCwgJ2FwcCcsICdidWlsZCcsICdvdXRwdXRzJywgJ2FwaycsICdhbmRyb2lkVGVzdCcsICdkZWJ1ZycsICdhcHAtZGVidWctYW5kcm9pZFRlc3QuYXBrJyk7XG4gICAgdGhpcy5sb2cuZGVidWcoYENvcHlpbmcgYnVpbHQgYXBrIGZyb20gJyR7YXBrUGF0aH0nIHRvICcke3RoaXMubW9kU2VydmVyUGF0aH0nYCk7XG4gICAgYXdhaXQgZnMuY29weUZpbGUoYXBrUGF0aCwgdGhpcy5tb2RTZXJ2ZXJQYXRoKTtcbiAgfVxuXG4gIGFzeW5jIGNsZWFudXBTZXNzaW9uTGVmdG92ZXJzICgpIHtcbiAgICB0aGlzLmxvZy5kZWJ1ZygnUGVyZm9ybWluZyBjbGVhbnVwIG9mIGF1dG9tYXRpb24gbGVmdG92ZXJzJyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qge3ZhbHVlfSA9IChhd2FpdCBheGlvcyh7XG4gICAgICAgIHVybDogYGh0dHA6Ly8ke3RoaXMuaG9zdH06JHt0aGlzLnN5c3RlbVBvcnR9L3Nlc3Npb25zYCxcbiAgICAgICAgdGltZW91dDogNTAwLFxuICAgICAgfSkpLmRhdGE7XG4gICAgICBjb25zdCBhY3RpdmVTZXNzaW9uSWRzID0gdmFsdWUubWFwKChzZXNzKSA9PiBzZXNzLmlkKTtcbiAgICAgIGlmIChhY3RpdmVTZXNzaW9uSWRzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgVGhlIGZvbGxvd2luZyBvYnNvbGV0ZSBzZXNzaW9ucyBhcmUgc3RpbGwgcnVubmluZzogJHtKU09OLnN0cmluZ2lmeShhY3RpdmVTZXNzaW9uSWRzKX1gKTtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoJ0NsZWFuaW5nIHVwIHRoZSBvYnNvbGV0ZSBzZXNzaW9ucycpO1xuICAgICAgICBhd2FpdCBCLmFsbChhY3RpdmVTZXNzaW9uSWRzLm1hcCgoaWQpID0+XG4gICAgICAgICAgYXhpb3Moe1xuICAgICAgICAgICAgdXJsOiBgaHR0cDovLyR7dGhpcy5ob3N0fToke3RoaXMuc3lzdGVtUG9ydH0vc2Vzc2lvbi8ke2lkfWAsXG4gICAgICAgICAgICBtZXRob2Q6ICdERUxFVEUnLFxuICAgICAgICAgIH0pXG4gICAgICAgICkpO1xuICAgICAgICAvLyBMZXQgYWxsIHNlc3Npb25zIHRvIGJlIHByb3Blcmx5IHRlcm1pbmF0ZWQgYmVmb3JlIGNvbnRpbnVpbmdcbiAgICAgICAgYXdhaXQgQi5kZWxheSgxMDAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKCdObyBvYnNvbGV0ZSBzZXNzaW9ucyBoYXZlIGJlZW4gZGV0ZWN0ZWQnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgTm8gb2Jzb2xldGUgc2Vzc2lvbnMgaGF2ZSBiZWVuIGRldGVjdGVkICgke2UubWVzc2FnZX0pYCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnRTZXNzaW9uIChjYXBzKSB7XG4gICAgYXdhaXQgdGhpcy5jbGVhbnVwU2Vzc2lvbkxlZnRvdmVycygpO1xuXG4gICAgY29uc3QgY21kID0gW1xuICAgICAgJ3NoZWxsJyxcbiAgICAgICdhbScsICdpbnN0cnVtZW50JyxcbiAgICAgICctdycsXG4gICAgICAnLWUnLCAnZGVidWcnLCBwcm9jZXNzLmVudi5FU1BSRVNTT19KQVZBX0RFQlVHID09PSAndHJ1ZScsXG4gICAgICAnLWUnLCAnZGlzYWJsZUFuYWx5dGljcycsIHRydWUsIC8vIFRvIGF2b2lkIHVuZXhwZWN0ZWQgZXJyb3IgYnkgZ29vZ2xlIGFuYWx5dGljc1xuICAgIF07XG5cbiAgICBpZiAoXy5pc0Jvb2xlYW4odGhpcy5kaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZSkpIHtcbiAgICAgIGNtZC5wdXNoKCctZScsICdESVNBQkxFX1NVUFBSRVNTX0FDQ0VTU0lCSUxJVFlfU0VSVklDRVMnLCB0aGlzLmRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlKTtcbiAgICB9XG5cbiAgICBjbWQucHVzaChgJHtURVNUX0FQS19QS0d9L2FuZHJvaWR4LnRlc3QucnVubmVyLkFuZHJvaWRKVW5pdFJ1bm5lcmApO1xuXG4gICAgdGhpcy5sb2cuaW5mbyhgU3RhcnRpbmcgRXNwcmVzc28gU2VydmVyIHYke3ZlcnNpb259IHdpdGggY21kOiBhZGIgJHtjbWQuam9pbignICcpfWApO1xuXG4gICAgbGV0IGhhc1NvY2tldEVycm9yID0gZmFsc2U7XG4gICAgLy8gc3RhcnQgdGhlIGluc3RydW1lbnRhdGlvbiBwcm9jZXNzXG4gICAgdGhpcy5qd3Byb3h5Lmluc3RydW1lbnRhdGlvblN0YXRlID0ge1xuICAgICAgZXhpdGVkOiBmYWxzZSxcbiAgICAgIGNyYXNoZWQ6IGZhbHNlLFxuICAgIH07XG4gICAgdGhpcy5pbnN0UHJvY2VzcyA9IHRoaXMuYWRiLmNyZWF0ZVN1YlByb2Nlc3MoY21kKTtcbiAgICB0aGlzLmluc3RQcm9jZXNzLm9uKCdleGl0JywgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgSW5zdHJ1bWVudGF0aW9uIHByb2Nlc3MgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9IGZyb20gc2lnbmFsICR7c2lnbmFsfWApO1xuICAgICAgdGhpcy5qd3Byb3h5Lmluc3RydW1lbnRhdGlvblN0YXRlLmV4aXRlZCA9IHRydWU7XG4gICAgfSk7XG4gICAgdGhpcy5pbnN0UHJvY2Vzcy5vbignb3V0cHV0JywgKHN0ZG91dCwgc3RkZXJyKSA9PiB7XG4gICAgICBjb25zdCBsaW5lID0gc3Rkb3V0IHx8IHN0ZGVycjtcbiAgICAgIGlmIChfLmlzRW1wdHkobGluZS50cmltKCkpKSB7XG4gICAgICAgIC8vIERvIG5vdCBwcmludCBlbXB0eSBsaW5lcyBpbnRvIHRoZSBzeXN0ZW0gbG9nXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2cuZGVidWcoYFtJbnN0cnVtZW50YXRpb25dICR7bGluZS50cmltKCl9YCk7XG4gICAgICAvLyBBICdTb2NrZXRFeGNlcHRpb24nIGluZGljYXRlcyB0aGF0IHdlIGNvdWxkbid0IGNvbm5lY3QgdG8gdGhlIEVzcHJlc3NvIHNlcnZlcixcbiAgICAgIC8vIGJlY2F1c2UgdGhlIElOVEVSTkVUIHBlcm1pc3Npb24gaXMgbm90IHNldFxuICAgICAgaWYgKGxpbmUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnamF2YS5uZXQuc29ja2V0ZXhjZXB0aW9uJykpIHtcbiAgICAgICAgaGFzU29ja2V0RXJyb3IgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChsaW5lLmluY2x1ZGVzKCdQcm9jZXNzIGNyYXNoZWQnKSkge1xuICAgICAgICB0aGlzLmp3cHJveHkuaW5zdHJ1bWVudGF0aW9uU3RhdGUuY3Jhc2hlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCB0aW1lciA9IG5ldyB0aW1pbmcuVGltZXIoKS5zdGFydCgpO1xuICAgIGF3YWl0IHRoaXMuaW5zdFByb2Nlc3Muc3RhcnQoMCk7XG4gICAgdGhpcy5sb2cuaW5mbyhgV2FpdGluZyB1cCB0byAke3RoaXMuc2VydmVyTGF1bmNoVGltZW91dH1tcyBmb3IgRXNwcmVzc28gc2VydmVyIHRvIGJlIG9ubGluZWApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKGhhc1NvY2tldEVycm9yKSB7XG4gICAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgRXNwcmVzc28gc2VydmVyIGhhcyBmYWlsZWQgdG8gc3RhcnQgZHVlIHRvIGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uLiBgICtcbiAgICAgICAgICAgIGBNYWtlIHN1cmUgdGhlICdJTlRFUk5FVCcgcGVybWlzc2lvbiBpcyByZXF1ZXN0ZWQgaW4gdGhlIEFuZHJvaWQgbWFuaWZlc3Qgb2YgeW91ciBgICtcbiAgICAgICAgICAgIGBhcHBsaWNhdGlvbiB1bmRlciB0ZXN0ICg8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT1cImFuZHJvaWQucGVybWlzc2lvbi5JTlRFUk5FVFwiIC8+KWApO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuandwcm94eS5pbnN0cnVtZW50YXRpb25TdGF0ZS5leGl0ZWQpIHtcbiAgICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBFc3ByZXNzbyBzZXJ2ZXIgcHJvY2VzcyBoYXMgYmVlbiB1bmV4cGVjdGVkbHkgdGVybWluYXRlZC4gYCArXG4gICAgICAgICAgICBgQ2hlY2sgdGhlIEFwcGl1bSBzZXJ2ZXIgbG9nIGFuZCB0aGUgbG9nY2F0IG91dHB1dCBmb3IgbW9yZSBkZXRhaWxzYCk7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmp3cHJveHkuY29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICB3YWl0TXM6IHRoaXMuc2VydmVyTGF1bmNoVGltZW91dCxcbiAgICAgICAgaW50ZXJ2YWxNczogNTAwLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKC9Db25kaXRpb24gdW5tZXQvLnRlc3QoZS5tZXNzYWdlKSkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBUaW1lZCBvdXQgd2FpdGluZyBmb3IgRXNwcmVzc28gc2VydmVyIHRvIGJlIGAgK1xuICAgICAgICAgIGBvbmxpbmUgd2l0aGluICR7dGhpcy5zZXJ2ZXJMYXVuY2hUaW1lb3V0fW1zLiBUaGUgdGltZW91dCB2YWx1ZSBjb3VsZCBiZSBgICtcbiAgICAgICAgICBgY3VzdG9taXplZCB1c2luZyAnZXNwcmVzc29TZXJ2ZXJMYXVuY2hUaW1lb3V0JyBjYXBhYmlsaXR5YCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICB0aGlzLmxvZy5pbmZvKGBFc3ByZXNzbyBzZXJ2ZXIgaXMgb25saW5lLiBgICtcbiAgICAgIGBUaGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyB0b29rICR7dGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcy50b0ZpeGVkKDApfW1zYCk7XG4gICAgdGhpcy5sb2cuaW5mbygnU3RhcnRpbmcgdGhlIHNlc3Npb24nKTtcblxuICAgIGF3YWl0IHRoaXMuandwcm94eS5jb21tYW5kKCcvc2Vzc2lvbicsICdQT1NUJywge1xuICAgICAgY2FwYWJpbGl0aWVzOiB7XG4gICAgICAgIGZpcnN0TWF0Y2g6IFtjYXBzXSxcbiAgICAgICAgYWx3YXlzTWF0Y2g6IHt9XG4gICAgICB9XG4gICAgfSk7XG4gICAgYXdhaXQgdGhpcy5yZWNvcmRUYXJnZXRBcHBQYWNrYWdlKCk7XG4gIH1cblxuICBhc3luYyByZWNvcmRUYXJnZXRBcHBQYWNrYWdlICgpIHtcbiAgICBhd2FpdCB0aGlzLmFkYi5zaGVsbChbYGVjaG8gXCIke3RoaXMuYXBwUGFja2FnZX1cIiA+IFwiJHtUQVJHRVRfUEFDS0FHRV9DT05UQUlORVJ9XCJgXSk7XG4gICAgdGhpcy5sb2cuaW5mbyhgUmVjb3JkZWQgdGhlIHRhcmdldCBhcHBsaWNhdGlvbiBwYWNrYWdlICcke3RoaXMuYXBwUGFja2FnZX0nIHRvICR7VEFSR0VUX1BBQ0tBR0VfQ09OVEFJTkVSfWApO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlU2Vzc2lvbiAoKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoJ0RlbGV0aW5nIEVzcHJlc3NvIHNlcnZlciBzZXNzaW9uJyk7XG4gICAgLy8gcmVseSBvbiBqd3Byb3h5J3MgaW50ZWxsaWdlbmNlIHRvIGtub3cgd2hhdCB3ZSdyZSB0YWxraW5nIGFib3V0IGFuZFxuICAgIC8vIGRlbGV0ZSB0aGUgY3VycmVudCBzZXNzaW9uXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuandwcm94eS5jb21tYW5kKCcvJywgJ0RFTEVURScpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5sb2cud2FybihgRGlkIG5vdCBnZXQgY29uZmlybWF0aW9uIEVzcHJlc3NvIGRlbGV0ZVNlc3Npb24gd29ya2VkOyBgICtcbiAgICAgICAgICBgRXJyb3Igd2FzOiAke2Vycn1gKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pbnN0UHJvY2VzcyAmJiB0aGlzLmluc3RQcm9jZXNzLmlzUnVubmluZykge1xuICAgICAgYXdhaXQgdGhpcy5pbnN0UHJvY2Vzcy5zdG9wKCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB7IEVzcHJlc3NvUnVubmVyLCBSRVFVSVJFRF9QQVJBTVMsIFRFU1RfQVBLX1BLRyB9O1xuZXhwb3J0IGRlZmF1bHQgRXNwcmVzc29SdW5uZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTUEsZ0JBQWdCLEdBQUdDLGNBQUtDLE9BQUwsQ0FBYUMsU0FBYixFQUF3QixJQUF4QixFQUE4QixJQUE5QixFQUFvQyxpQkFBcEMsQ0FBekI7O0FBQ0EsTUFBTUMsWUFBWSxHQUFHLCtCQUFyQjs7QUFDQSxNQUFNQyxlQUFlLEdBQUcsQ0FDdEIsS0FEc0IsRUFFdEIsUUFGc0IsRUFHdEIsTUFIc0IsRUFJdEIsWUFKc0IsRUFLdEIsWUFMc0IsRUFNdEIsWUFOc0IsRUFPdEIsc0JBUHNCLENBQXhCOztBQVNBLE1BQU1DLGlDQUFpQyxHQUFHLEtBQTFDO0FBQ0EsTUFBTUMsd0JBQXdCLEdBQUcscUNBQWpDOztBQUVBLE1BQU1DLGFBQU4sU0FBNEJDLG1CQUE1QixDQUFvQztFQUNoQixNQUFaQyxZQUFZLENBQUVDLEdBQUYsRUFBT0MsTUFBUCxFQUFlQyxJQUFJLEdBQUcsSUFBdEIsRUFBNEI7SUFDNUMsTUFBTTtNQUFDQyxPQUFEO01BQVVDO0lBQVYsSUFBb0IsS0FBS0Msb0JBQS9COztJQUNBLElBQUlE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
|
package/build/lib/logger.js
CHANGED
|
@@ -15,4 +15,4 @@ var _default = log;
|
|
|
15
15
|
exports.default = _default;require('source-map-support').install();
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2xvZ2dlci5qcyIsIm5hbWVzIjpbImxvZyIsImxvZ2dlciIsImdldExvZ2dlciJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9sb2dnZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcblxuXG5jb25zdCBsb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdFc3ByZXNzbycpO1xuXG5leHBvcnQgZGVmYXVsdCBsb2c7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUdBLE1BQU1BLEdBQUcsR0FBR0MsZ0JBQU9DLFNBQVAsQ0FBaUIsVUFBakIsQ0FBWjs7ZUFFZUYsRyJ9
|
|
@@ -203,4 +203,4 @@ var _default = ServerBuilder;
|
|
|
203
203
|
exports.default = _default;require('source-map-support').install();
|
|
204
204
|
|
|
205
205
|
|
|
206
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zZXJ2ZXItYnVpbGRlci5qcyJdLCJuYW1lcyI6WyJHUkFETEVfVkVSU0lPTl9LRVkiLCJHUkFETEVfVVJMX1BSRUZJWCIsIkdSQURMRV9VUkxfVEVNUExBVEUiLCJHUkFETEVfTUFYX0VSUk9SX0xPR19MSU5FUyIsIkRFUEVOREVOQ1lfUFJPUF9OQU1FUyIsIlZFUlNJT05fS0VZUyIsImJ1aWxkU2VydmVyU2lnbmluZ0NvbmZpZyIsImFyZ3MiLCJ6aXBBbGlnbiIsImtleXN0b3JlRmlsZSIsImtleXN0b3JlUGFzc3dvcmQiLCJrZXlBbGlhcyIsImtleVBhc3N3b3JkIiwiU2VydmVyQnVpbGRlciIsImNvbnN0cnVjdG9yIiwibG9nIiwic2VydmVyUGF0aCIsInNob3dHcmFkbGVMb2ciLCJidWlsZENvbmZpZ3VyYXRpb24iLCJ2ZXJzaW9uQ29uZmlndXJhdGlvbiIsInRvb2xzVmVyc2lvbnMiLCJzZXJ2ZXJWZXJzaW9ucyIsIl8iLCJyZWR1Y2UiLCJhY2MiLCJ2YWx1ZSIsImtleSIsImluY2x1ZGVzIiwid2FybiIsInRlc3RBcHBQYWNrYWdlIiwic2lnbmluZ0NvbmZpZyIsInByb3BOYW1lIiwiYnVpbGQiLCJzZXRHcmFkbGVXcmFwcGVyVmVyc2lvbiIsImluc2VydEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMiLCJydW5CdWlsZFByb2Nlc3MiLCJnZXRDb21tYW5kIiwiY21kIiwic3lzdGVtIiwiaXNXaW5kb3dzIiwicGF0aCIsInJlc29sdmUiLCJidWlsZFByb3BlcnR5IiwiZmlsdGVyIiwibWFwIiwic2VydmVyVmVyc2lvbiIsImdyYWRsZVByb3BlcnR5IiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJzbGljZSIsIkJvb2xlYW4iLCJwdXNoIiwia2V5cyIsInVwcGVyRmlyc3QiLCJrIiwidiIsInZlcnNpb24iLCJwcm9wZXJ0aWVzUGF0aCIsIm9yaWdpbmFsUHJvcGVydGllcyIsImZzIiwicmVhZEZpbGUiLCJuZXdQcm9wZXJ0aWVzIiwidXBkYXRlR3JhZGxlRGlzdFVybCIsIndyaXRlRmlsZSIsInByb3BlcnRpZXNDb250ZW50IiwicmVwbGFjZSIsIlJlZ0V4cCIsImVzY2FwZVJlZ0V4cCIsImhhc0FkZGl0aW9uYWxEZXBzIiwiaXNBcnJheSIsIkVycm9yIiwiaXNFbXB0eSIsImxpbmUiLCJ0cmltIiwiZGVwIiwidGVzdCIsImJ1aWxkUGF0aCIsImNvbmZpZ3VyYXRpb24iLCJwcmVmaXgiLCJkZXBzIiwiaW5mbyIsImRlYnVnIiwiam9pbiIsImdyYWRsZWJ1aWxkIiwiU3ViUHJvY2VzcyIsImN3ZCIsInN0ZGlvIiwid2luZG93c1ZlcmJhdGltQXJndW1lbnRzIiwiYnVpbGRMYXN0TGluZXMiLCJsb2dNc2ciLCJvbiIsInN0YXJ0c1dpdGgiLCJFT0wiLCJsZW5ndGgiLCJzdGFydCIsImVyciIsIm1zZyIsIm1lc3NhZ2UiLCJlcnJvckFuZFRocm93Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsa0JBQWtCLEdBQUcsUUFBM0I7QUFDQSxNQUFNQyxpQkFBaUIsR0FBRyxrQkFBMUI7QUFDQSxNQUFNQyxtQkFBbUIsR0FBRyxvRUFBNUI7O0FBQ0EsTUFBTUMsMEJBQTBCLEdBQUcsRUFBbkM7QUFDQSxNQUFNQyxxQkFBcUIsR0FBRyxDQUFDLDJCQUFELEVBQThCLG1DQUE5QixDQUE5QjtBQUVBLE1BQU1DLFlBQVksR0FBRyxDQUNuQkwsa0JBRG1CLEVBRW5CLHFCQUZtQixFQUduQixZQUhtQixFQUluQixZQUptQixFQUtuQixRQUxtQixFQU1uQixXQU5tQixFQU9uQixRQVBtQixFQVFuQixxQkFSbUIsRUFTbkIscUJBVG1CLEVBVW5CLFdBVm1CLEVBV25CLGdCQVhtQixDQUFyQjs7O0FBY0EsU0FBU00sd0JBQVQsQ0FBbUNDLElBQW5DLEVBQXlDO0FBQ3ZDLFNBQU87QUFDTEMsSUFBQUEsUUFBUSxFQUFFLElBREw7QUFFTEMsSUFBQUEsWUFBWSxFQUFFRixJQUFJLENBQUNF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LFdBQUt6RSxHQUFMLENBQVNtRixhQUFULENBQXVCRixHQUF2QjtBQUNEO0FBQ0Y7O0FBM0ppQjs7O2VBK0pMbkYsYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YlByb2Nlc3MgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgZnMsIHN5c3RlbSB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBFT0wgfSBmcm9tICdvcyc7XG5pbXBvcnQgeyB1cGRhdGVEZXBlbmRlbmN5TGluZXMgfSBmcm9tICcuL3V0aWxzJztcblxuY29uc3QgR1JBRExFX1ZFUlNJT05fS0VZID0gJ2dyYWRsZSc7XG5jb25zdCBHUkFETEVfVVJMX1BSRUZJWCA9ICdkaXN0cmlidXRpb25Vcmw9JztcbmNvbnN0IEdSQURMRV9VUkxfVEVNUExBVEUgPSAnaHR0cHNcXFxcOi8vc2VydmljZXMuZ3JhZGxlLm9yZy9kaXN0cmlidXRpb25zL2dyYWRsZS1WRVJTSU9OLWFsbC56aXAnO1xuY29uc3QgR1JBRExFX01BWF9FUlJPUl9MT0dfTElORVMgPSAxNTtcbmNvbnN0IERFUEVOREVOQ1lfUFJPUF9OQU1FUyA9IFsnYWRkaXRpb25hbEFwcERlcGVuZGVuY2llcycsICdhZGRpdGlvbmFsQW5kcm9pZFRlc3REZXBlbmRlbmNpZXMnXTtcblxuY29uc3QgVkVSU0lPTl9LRVlTID0gW1xuICBHUkFETEVfVkVSU0lPTl9LRVksXG4gICdhbmRyb2lkR3JhZGxlUGx1Z2luJyxcbiAgJ2NvbXBpbGVTZGsnLFxuICAnYnVpbGRUb29scycsXG4gICdtaW5TZGsnLFxuICAndGFyZ2V0U2RrJyxcbiAgJ2tvdGxpbicsXG4gICdzb3VyY2VDb21wYXRpYmlsaXR5JyxcbiAgJ3RhcmdldENvbXBhdGliaWxpdHknLFxuICAnanZtVGFyZ2V0JyxcbiAgJ2NvbXBvc2VWZXJzaW9uJ1xuXTtcblxuZnVuY3Rpb24gYnVpbGRTZXJ2ZXJTaWduaW5nQ29uZmlnIChhcmdzKSB7XG4gIHJldHVybiB7XG4gICAgemlwQWxpZ246IHRydWUsXG4gICAga2V5c3RvcmVGaWxlOiBhcmdzLmtleXN0b3JlRmlsZSxcbiAgICBrZXlzdG9yZVBhc3N3b3JkOiBhcmdzLmtleXN0b3JlUGFzc3dvcmQsXG4gICAga2V5QWxpYXM6IGFyZ3Mua2V5QWxpYXMsXG4gICAga2V5UGFzc3dvcmQ6IGFyZ3Mua2V5UGFzc3dvcmRcbiAgfTtcbn1cblxuY2xhc3MgU2VydmVyQnVpbGRlciB7XG4gIGNvbnN0cnVjdG9yIChsb2csIGFyZ3MgPSB7fSkge1xuICAgIHRoaXMubG9nID0gbG9nO1xuICAgIHRoaXMuc2VydmVyUGF0aCA9IGFyZ3Muc2VydmVyUGF0aDtcbiAgICB0aGlzLnNob3dHcmFkbGVMb2cgPSBhcmdzLnNob3dHcmFkbGVMb2c7XG5cbiAgICBjb25zdCBidWlsZENvbmZpZ3VyYXRpb24gPSBhcmdzLmJ1aWxkQ29uZmlndXJhdGlvbiB8fCB7fTtcblxuICAgIGNvbnN0IHZlcnNpb25Db25maWd1cmF0aW9uID0gYnVpbGRDb25maWd1cmF0aW9uLnRvb2xzVmVyc2lvbnMgfHwge307XG4gICAgdGhpcy5zZXJ2ZXJWZXJzaW9ucyA9IF8ucmVkdWNlKHZlcnNpb25Db25maWd1cmF0aW9uLCAoYWNjLCB2YWx1ZSwga2V5KSA9PiB7XG4gICAgICBpZiAoVkVSU0lPTl9LRVlTLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgYWNjW2tleV0gPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy53YXJuKGBHb3QgdW5leHBlY3RlZCAnJHtrZXl9JyBpbiB0b29sc1ZlcnNpb24gYmxvY2sgb2YgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuXG4gICAgdGhpcy50ZXN0QXBwUGFja2FnZSA9IGFyZ3MudGVzdEFwcFBhY2thZ2U7XG4gICAgdGhpcy5zaWduaW5nQ29uZmlnID0gYXJncy5zaWduaW5nQ29uZmlnO1xuXG4gICAgZm9yIChjb25zdCBwcm9wTmFtZSBvZiBERVBFTkRFTkNZX1BST1BfTkFNRVMpIHtcbiAgICAgIHRoaXNbcHJvcE5hbWVdID0gYnVpbGRDb25maWd1cmF0aW9uW3Byb3BOYW1lXSB8fCBbXTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBidWlsZCAoKSB7XG4gICAgaWYgKHRoaXMuc2VydmVyVmVyc2lvbnNbR1JBRExFX1ZFUlNJT05fS0VZXSkge1xuICAgICAgYXdhaXQgdGhpcy5zZXRHcmFkbGVXcmFwcGVyVmVyc2lvbih0aGlzLnNlcnZlclZlcnNpb25zW0dSQURMRV9WRVJTSU9OX0tFWV0pO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuaW5zZXJ0QWRkaXRpb25hbERlcGVuZGVuY2llcygpO1xuXG4gICAgYXdhaXQgdGhpcy5ydW5CdWlsZFByb2Nlc3MoKTtcbiAgfVxuXG4gIGdldENvbW1hbmQgKCkge1xuICAgIGNvbnN0IGNtZCA9IHN5c3RlbS5pc1dpbmRvd3MoKSA/ICdncmFkbGV3LmJhdCcgOiBwYXRoLnJlc29sdmUodGhpcy5zZXJ2ZXJQYXRoLCAnZ3JhZGxldycpO1xuICAgIGNvbnN0IGJ1aWxkUHJvcGVydHkgPSAoa2V5LCB2YWx1ZSkgPT4gdmFsdWUgPyBgLVAke2tleX09JHt2YWx1ZX1gIDogbnVsbDtcbiAgICBsZXQgYXJncyA9IFZFUlNJT05fS0VZU1xuICAgICAgLmZpbHRlcigoa2V5KSA9PiBrZXkgIT09IEdSQURMRV9WRVJTSU9OX0tFWSlcbiAgICAgIC5tYXAoKGtleSkgPT4ge1xuICAgICAgICBjb25zdCBzZXJ2ZXJWZXJzaW9uID0gdGhpcy5zZXJ2ZXJWZXJzaW9uc1trZXldO1xuICAgICAgICBjb25zdCBncmFkbGVQcm9wZXJ0eSA9IGBhcHBpdW0ke2tleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKX0ke2tleS5zbGljZSgxKX1gO1xuICAgICAgICByZXR1cm4gYnVpbGRQcm9wZXJ0eShncmFkbGVQcm9wZXJ0eSwgc2VydmVyVmVyc2lvbik7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihCb29sZWFuKTtcblxuICAgIGlmICh0aGlzLnNpZ25pbmdDb25maWcpIHtcbiAgICAgIGFyZ3MucHVzaCguLi4oXG4gICAgICAgIF8ua2V5cyh0aGlzLnNpZ25pbmdDb25maWcpXG4gICAgICAgIC5tYXAoKGtleSkgPT4gW2BhcHBpdW0ke18udXBwZXJGaXJzdChrZXkpfWAsIHRoaXMuc2lnbmluZ0NvbmZpZ1trZXldXSlcbiAgICAgICAgLm1hcCgoW2ssIHZdKSA9PiBidWlsZFByb3BlcnR5KGssIHYpKVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICApKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50ZXN0QXBwUGFja2FnZSkge1xuICAgICAgYXJncy5wdXNoKGJ1aWxkUHJvcGVydHkoJ2FwcGl1bVRhcmdldFBhY2thZ2UnLCB0aGlzLnRlc3RBcHBQYWNrYWdlKSk7XG4gICAgfVxuICAgIGFyZ3MucHVzaCgnYXBwOmFzc2VtYmxlQW5kcm9pZFRlc3QnKTtcblxuICAgIHJldHVybiB7Y21kLCBhcmdzfTtcbiAgfVxuXG4gIGFzeW5jIHNldEdyYWRsZVdyYXBwZXJWZXJzaW9uICh2ZXJzaW9uKSB7XG4gICAgY29uc3QgcHJvcGVydGllc1BhdGggPSBwYXRoLnJlc29sdmUodGhpcy5zZXJ2ZXJQYXRoLCAnZ3JhZGxlJywgJ3dyYXBwZXInLCAnZ3JhZGxlLXdyYXBwZXIucHJvcGVydGllcycpO1xuICAgIGNvbnN0IG9yaWdpbmFsUHJvcGVydGllcyA9IGF3YWl0IGZzLnJlYWRGaWxlKHByb3BlcnRpZXNQYXRoLCAndXRmOCcpO1xuICAgIGNvbnN0IG5ld1Byb3BlcnRpZXMgPSB0aGlzLnVwZGF0ZUdyYWRsZURpc3RVcmwob3JpZ2luYWxQcm9wZXJ0aWVzLCB2ZXJzaW9uKTtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUocHJvcGVydGllc1BhdGgsIG5ld1Byb3BlcnRpZXMsICd1dGY4Jyk7XG4gIH1cblxuICB1cGRhdGVHcmFkbGVEaXN0VXJsIChwcm9wZXJ0aWVzQ29udGVudCwgdmVyc2lvbikge1xuICAgIHJldHVybiBwcm9wZXJ0aWVzQ29udGVudC5yZXBsYWNlKFxuICAgICAgbmV3IFJlZ0V4cChgXigke18uZXNjYXBlUmVnRXhwKEdSQURMRV9VUkxfUFJFRklYKX0pLiskYCwgJ2dtJyksXG4gICAgICBgJDEke0dSQURMRV9VUkxfVEVNUExBVEUucmVwbGFjZSgnVkVSU0lPTicsIHZlcnNpb24pfWBcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgaW5zZXJ0QWRkaXRpb25hbERlcGVuZGVuY2llcyAoKSB7XG4gICAgbGV0IGhhc0FkZGl0aW9uYWxEZXBzID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBwcm9wTmFtZSBvZiBERVBFTkRFTkNZX1BST1BfTkFNRVMpIHtcbiAgICAgIGlmICghXy5pc0FycmF5KHRoaXNbcHJvcE5hbWVdKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke3Byb3BOYW1lfScgbXVzdCBiZSBhbiBhcnJheWApO1xuICAgICAgfVxuICAgICAgaWYgKF8uaXNFbXB0eSh0aGlzW3Byb3BOYW1lXS5maWx0ZXIoKGxpbmUpID0+IF8udHJpbShsaW5lKSkpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGRlcCBvZiB0aGlzW3Byb3BOYW1lXSkge1xuICAgICAgICBpZiAoL1tcXHMnXFxcXCRdLy50ZXN0KGRlcCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NpbmdsZSBxdW90ZXMsIGRvbGxhciBjaGFyYWN0ZXJzIGFuZCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMnICtcbiAgICAgICAgICAgIGAgYXJlIGRpc2FsbG93ZWQgaW4gYWRkaXRpb25hbCBkZXBlbmRlbmNpZXM6ICR7ZGVwfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBoYXNBZGRpdGlvbmFsRGVwcyA9IHRydWU7XG4gICAgfVxuICAgIGlmICghaGFzQWRkaXRpb25hbERlcHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBidWlsZFBhdGggPSBwYXRoLnJlc29sdmUodGhpcy5zZXJ2ZXJQYXRoLCAnYXBwJywgJ2J1aWxkLmdyYWRsZS5rdHMnKTtcbiAgICBsZXQgY29uZmlndXJhdGlvbiA9IGF3YWl0IGZzLnJlYWRGaWxlKGJ1aWxkUGF0aCwgJ3V0ZjgnKTtcbiAgICBmb3IgKGNvbnN0IHByb3BOYW1lIG9mIERFUEVOREVOQ1lfUFJPUF9OQU1FUykge1xuICAgICAgY29uc3QgcHJlZml4ID0gcHJvcE5hbWUgPT09IERFUEVOREVOQ1lfUFJPUF9OQU1FU1swXVxuICAgICAgICA/ICdpbXBsZW1lbnRhdGlvbidcbiAgICAgICAgOiAnYW5kcm9pZFRlc3RJbXBsZW1lbnRhdGlvbic7XG4gICAgICBjb25zdCBkZXBzID0gdGhpc1twcm9wTmFtZV1cbiAgICAgICAgLmZpbHRlcigobGluZSkgPT4gXy50cmltKGxpbmUpKVxuICAgICAgICAubWFwKChsaW5lKSA9PiBgJHtwcmVmaXh9KFwiJHtsaW5lfVwiKWApO1xuICAgICAgaWYgKF8uaXNFbXB0eShkZXBzKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2cuaW5mbyhgQWRkaW5nIHRoZSBmb2xsb3dpbmcgJHtwcm9wTmFtZX0gdG8gYnVpbGQuZ3JhZGxlLmt0czogJHtkZXBzfWApO1xuICAgICAgY29uZmlndXJhdGlvbiA9IHVwZGF0ZURlcGVuZGVuY3lMaW5lcyhjb25maWd1cmF0aW9uLCBwcm9wTmFtZSwgZGVwcyk7XG4gICAgfVxuICAgIGF3YWl0IGZzLndyaXRlRmlsZShidWlsZFBhdGgsIGNvbmZpZ3VyYXRpb24sICd1dGY4Jyk7XG4gIH1cblxuICBhc3luYyBydW5CdWlsZFByb2Nlc3MgKCkge1xuICAgIGNvbnN0IHtjbWQsIGFyZ3N9ID0gdGhpcy5nZXRDb21tYW5kKCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYEJlZ2lubmluZyBidWlsZCB3aXRoIGNvbW1hbmQgJyR7Y21kfSAke2FyZ3Muam9pbignICcpfScgYCArXG4gICAgICBgaW4gZGlyZWN0b3J5ICcke3RoaXMuc2VydmVyUGF0aH0nYCk7XG4gICAgY29uc3QgZ3JhZGxlYnVpbGQgPSBuZXcgU3ViUHJvY2VzcyhjbWQsIGFyZ3MsIHtcbiAgICAgIGN3ZDogdGhpcy5zZXJ2ZXJQYXRoLFxuICAgICAgc3RkaW86IFsnaWdub3JlJywgJ3BpcGUnLCAncGlwZSddLFxuICAgICAgd2luZG93c1ZlcmJhdGltQXJndW1lbnRzOiB0cnVlXG4gICAgfSk7XG4gICAgbGV0IGJ1aWxkTGFzdExpbmVzID0gW107XG5cbiAgICBjb25zdCBsb2dNc2cgPSBgT3V0cHV0IGZyb20gR3JhZGxlICR7dGhpcy5zaG93R3JhZGxlTG9nID8gJ3dpbGwnIDogJ3dpbGwgbm90J30gYmUgbG9nZ2VkYDtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgJHtsb2dNc2d9LiBUbyBjaGFuZ2UgdGhpcywgdXNlICdzaG93R3JhZGxlTG9nJyBkZXNpcmVkIGNhcGFiaWxpdHlgKTtcbiAgICBncmFkbGVidWlsZC5vbignc3RyZWFtLWxpbmUnLCAobGluZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuc2hvd0dyYWRsZUxvZykge1xuICAgICAgICBpZiAobGluZS5zdGFydHNXaXRoKCdbU1RERVJSXScpKSB7XG4gICAgICAgICAgdGhpcy5sb2cud2FybihgW0dyYWRsZV0gJHtsaW5lfWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9nLmluZm8oYFtHcmFkbGVdICR7bGluZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnVpbGRMYXN0TGluZXMucHVzaChgJHtFT0x9JHtsaW5lfWApO1xuICAgICAgaWYgKGJ1aWxkTGFzdExpbmVzLmxlbmd0aCA+IEdSQURMRV9NQVhfRVJST1JfTE9HX0xJTkVTKSB7XG4gICAgICAgIGJ1aWxkTGFzdExpbmVzID0gYnVpbGRMYXN0TGluZXMuc2xpY2UoLUdSQURMRV9NQVhfRVJST1JfTE9HX0xJTkVTKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBncmFkbGVidWlsZC5zdGFydCgpO1xuICAgICAgYXdhaXQgZ3JhZGxlYnVpbGQuam9pbigpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbGV0IG1zZyA9IGBVbmFibGUgdG8gYnVpbGQgRXNwcmVzc28gc2VydmVyIC0gJHtlcnIubWVzc2FnZX1cXG5gICtcbiAgICAgICAgYEdyYWRsZSBlcnJvciBtZXNzYWdlOiR7RU9MfSR7YnVpbGRMYXN0TGluZXN9YDtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3cobXNnKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHsgU2VydmVyQnVpbGRlciwgVkVSU0lPTl9LRVlTLCBHUkFETEVfVVJMX1RFTVBMQVRFLCBidWlsZFNlcnZlclNpZ25pbmdDb25maWcgfTtcbmV4cG9ydCBkZWZhdWx0IFNlcnZlckJ1aWxkZXI7XG4iXSwiZmlsZSI6ImxpYi9zZXJ2ZXItYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
|
|
206
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3NlcnZlci1idWlsZGVyLmpzIiwibmFtZXMiOlsiR1JBRExFX1ZFUlNJT05fS0VZIiwiR1JBRExFX1VSTF9QUkVGSVgiLCJHUkFETEVfVVJMX1RFTVBMQVRFIiwiR1JBRExFX01BWF9FUlJPUl9MT0dfTElORVMiLCJERVBFTkRFTkNZX1BST1BfTkFNRVMiLCJWRVJTSU9OX0tFWVMiLCJidWlsZFNlcnZlclNpZ25pbmdDb25maWciLCJhcmdzIiwiemlwQWxpZ24iLCJrZXlzdG9yZUZpbGUiLCJrZXlzdG9yZVBhc3N3b3JkIiwia2V5QWxpYXMiLCJrZXlQYXNzd29yZCIsIlNlcnZlckJ1aWxkZXIiLCJjb25zdHJ1Y3RvciIsImxvZyIsInNlcnZlclBhdGgiLCJzaG93R3JhZGxlTG9nIiwiYnVpbGRDb25maWd1cmF0aW9uIiwidmVyc2lvbkNvbmZpZ3VyYXRpb24iLCJ0b29sc1ZlcnNpb25zIiwic2VydmVyVmVyc2lvbnMiLCJfIiwicmVkdWNlIiwiYWNjIiwidmFsdWUiLCJrZXkiLCJpbmNsdWRlcyIsIndhcm4iLCJ0ZXN0QXBwUGFja2FnZSIsInNpZ25pbmdDb25maWciLCJwcm9wTmFtZSIsImJ1aWxkIiwic2V0R3JhZGxlV3JhcHBlclZlcnNpb24iLCJpbnNlcnRBZGRpdGlvbmFsRGVwZW5kZW5jaWVzIiwicnVuQnVpbGRQcm9jZXNzIiwiZ2V0Q29tbWFuZCIsImNtZCIsInN5c3RlbSIsImlzV2luZG93cyIsInBhdGgiLCJyZXNvbHZlIiwiYnVpbGRQcm9wZXJ0eSIsImZpbHRlciIsIm1hcCIsInNlcnZlclZlcnNpb24iLCJncmFkbGVQcm9wZXJ0eSIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJCb29sZWFuIiwicHVzaCIsImtleXMiLCJ1cHBlckZpcnN0IiwiayIsInYiLCJ2ZXJzaW9uIiwicHJvcGVydGllc1BhdGgiLCJvcmlnaW5hbFByb3BlcnRpZXMiLCJmcyIsInJlYWRGaWxlIiwibmV3UHJvcGVydGllcyIsInVwZGF0ZUdyYWRsZURpc3RVcmwiLCJ3cml0ZUZpbGUiLCJwcm9wZXJ0aWVzQ29udGVudCIsInJlcGxhY2UiLCJSZWdFeHAiLCJlc2NhcGVSZWdFeHAiLCJoYXNBZGRpdGlvbmFsRGVwcyIsImlzQXJyYXkiLCJFcnJvciIsImlzRW1wdHkiLCJsaW5lIiwidHJpbSIsImRlcCIsInRlc3QiLCJidWlsZFBhdGgiLCJjb25maWd1cmF0aW9uIiwicHJlZml4IiwiZGVwcyIsImluZm8iLCJkZWJ1ZyIsImpvaW4iLCJncmFkbGVidWlsZCIsIlN1YlByb2Nlc3MiLCJjd2QiLCJzdGRpbyIsIndpbmRvd3NWZXJiYXRpbUFyZ3VtZW50cyIsImJ1aWxkTGFzdExpbmVzIiwibG9nTXNnIiwib24iLCJzdGFydHNXaXRoIiwiRU9MIiwibGVuZ3RoIiwic3RhcnQiLCJlcnIiLCJtc2ciLCJtZXNzYWdlIiwiZXJyb3JBbmRUaHJvdyJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9zZXJ2ZXItYnVpbGRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdWJQcm9jZXNzIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCB7IGZzLCBzeXN0ZW0gfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgRU9MIH0gZnJvbSAnb3MnO1xuaW1wb3J0IHsgdXBkYXRlRGVwZW5kZW5jeUxpbmVzIH0gZnJvbSAnLi91dGlscyc7XG5cbmNvbnN0IEdSQURMRV9WRVJTSU9OX0tFWSA9ICdncmFkbGUnO1xuY29uc3QgR1JBRExFX1VSTF9QUkVGSVggPSAnZGlzdHJpYnV0aW9uVXJsPSc7XG5jb25zdCBHUkFETEVfVVJMX1RFTVBMQVRFID0gJ2h0dHBzXFxcXDovL3NlcnZpY2VzLmdyYWRsZS5vcmcvZGlzdHJpYnV0aW9ucy9ncmFkbGUtVkVSU0lPTi1hbGwuemlwJztcbmNvbnN0IEdSQURMRV9NQVhfRVJST1JfTE9HX0xJTkVTID0gMTU7XG5jb25zdCBERVBFTkRFTkNZX1BST1BfTkFNRVMgPSBbJ2FkZGl0aW9uYWxBcHBEZXBlbmRlbmNpZXMnLCAnYWRkaXRpb25hbEFuZHJvaWRUZXN0RGVwZW5kZW5jaWVzJ107XG5cbmNvbnN0IFZFUlNJT05fS0VZUyA9IFtcbiAgR1JBRExFX1ZFUlNJT05fS0VZLFxuICAnYW5kcm9pZEdyYWRsZVBsdWdpbicsXG4gICdjb21waWxlU2RrJyxcbiAgJ2J1aWxkVG9vbHMnLFxuICAnbWluU2RrJyxcbiAgJ3RhcmdldFNkaycsXG4gICdrb3RsaW4nLFxuICAnc291cmNlQ29tcGF0aWJpbGl0eScsXG4gICd0YXJnZXRDb21wYXRpYmlsaXR5JyxcbiAgJ2p2bVRhcmdldCcsXG4gICdjb21wb3NlVmVyc2lvbidcbl07XG5cbmZ1bmN0aW9uIGJ1aWxkU2VydmVyU2lnbmluZ0NvbmZpZyAoYXJncykge1xuICByZXR1cm4ge1xuICAgIHppcEFsaWduOiB0cnVlLFxuICAgIGtleXN0b3JlRmlsZTogYXJncy5rZXlzdG9yZUZpbGUsXG4gICAga2V5c3RvcmVQYXNzd29yZDogYXJncy5rZXlzdG9yZVBhc3N3b3JkLFxuICAgIGtleUFsaWFzOiBhcmdzLmtleUFsaWFzLFxuICAgIGtleVBhc3N3b3JkOiBhcmdzLmtleVBhc3N3b3JkXG4gIH07XG59XG5cbmNsYXNzIFNlcnZlckJ1aWxkZXIge1xuICBjb25zdHJ1Y3RvciAobG9nLCBhcmdzID0ge30pIHtcbiAgICB0aGlzLmxvZyA9IGxvZztcbiAgICB0aGlzLnNlcnZlclBhdGggPSBhcmdzLnNlcnZlclBhdGg7XG4gICAgdGhpcy5zaG93R3JhZGxlTG9nID0gYXJncy5zaG93R3JhZGxlTG9nO1xuXG4gICAgY29uc3QgYnVpbGRDb25maWd1cmF0aW9uID0gYXJncy5idWlsZENvbmZpZ3VyYXRpb24gfHwge307XG5cbiAgICBjb25zdCB2ZXJzaW9uQ29uZmlndXJhdGlvbiA9IGJ1aWxkQ29uZmlndXJhdGlvbi50b29sc1ZlcnNpb25zIHx8IHt9O1xuICAgIHRoaXMuc2VydmVyVmVyc2lvbnMgPSBfLnJlZHVjZSh2ZXJzaW9uQ29uZmlndXJhdGlvbiwgKGFjYywgdmFsdWUsIGtleSkgPT4ge1xuICAgICAgaWYgKFZFUlNJT05fS0VZUy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIGFjY1trZXldID0gdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cud2FybihgR290IHVuZXhwZWN0ZWQgJyR7a2V5fScgaW4gdG9vbHNWZXJzaW9uIGJsb2NrIG9mIHRoZSBidWlsZCBjb25maWd1cmF0aW9uYCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcblxuICAgIHRoaXMudGVzdEFwcFBhY2thZ2UgPSBhcmdzLnRlc3RBcHBQYWNrYWdlO1xuICAgIHRoaXMuc2lnbmluZ0NvbmZpZyA9IGFyZ3Muc2lnbmluZ0NvbmZpZztcblxuICAgIGZvciAoY29uc3QgcHJvcE5hbWUgb2YgREVQRU5ERU5DWV9QUk9QX05BTUVTKSB7XG4gICAgICB0aGlzW3Byb3BOYW1lXSA9IGJ1aWxkQ29uZmlndXJhdGlvbltwcm9wTmFtZV0gfHwgW107XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYnVpbGQgKCkge1xuICAgIGlmICh0aGlzLnNlcnZlclZlcnNpb25zW0dSQURMRV9WRVJTSU9OX0tFWV0pIHtcbiAgICAgIGF3YWl0IHRoaXMuc2V0R3JhZGxlV3JhcHBlclZlcnNpb24odGhpcy5zZXJ2ZXJWZXJzaW9uc1tHUkFETEVfVkVSU0lPTl9LRVldKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmluc2VydEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMoKTtcblxuICAgIGF3YWl0IHRoaXMucnVuQnVpbGRQcm9jZXNzKCk7XG4gIH1cblxuICBnZXRDb21tYW5kICgpIHtcbiAgICBjb25zdCBjbWQgPSBzeXN0ZW0uaXNXaW5kb3dzKCkgPyAnZ3JhZGxldy5iYXQnIDogcGF0aC5yZXNvbHZlKHRoaXMuc2VydmVyUGF0aCwgJ2dyYWRsZXcnKTtcbiAgICBjb25zdCBidWlsZFByb3BlcnR5ID0gKGtleSwgdmFsdWUpID0+IHZhbHVlID8gYC1QJHtrZXl9PSR7dmFsdWV9YCA6IG51bGw7XG4gICAgbGV0IGFyZ3MgPSBWRVJTSU9OX0tFWVNcbiAgICAgIC5maWx0ZXIoKGtleSkgPT4ga2V5ICE9PSBHUkFETEVfVkVSU0lPTl9LRVkpXG4gICAgICAubWFwKChrZXkpID0+IHtcbiAgICAgICAgY29uc3Qgc2VydmVyVmVyc2lvbiA9IHRoaXMuc2VydmVyVmVyc2lvbnNba2V5XTtcbiAgICAgICAgY29uc3QgZ3JhZGxlUHJvcGVydHkgPSBgYXBwaXVtJHtrZXkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCl9JHtrZXkuc2xpY2UoMSl9YDtcbiAgICAgICAgcmV0dXJuIGJ1aWxkUHJvcGVydHkoZ3JhZGxlUHJvcGVydHksIHNlcnZlclZlcnNpb24pO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG5cbiAgICBpZiAodGhpcy5zaWduaW5nQ29uZmlnKSB7XG4gICAgICBhcmdzLnB1c2goLi4uKFxuICAgICAgICBfLmtleXModGhpcy5zaWduaW5nQ29uZmlnKVxuICAgICAgICAubWFwKChrZXkpID0+IFtgYXBwaXVtJHtfLnVwcGVyRmlyc3Qoa2V5KX1gLCB0aGlzLnNpZ25pbmdDb25maWdba2V5XV0pXG4gICAgICAgIC5tYXAoKFtrLCB2XSkgPT4gYnVpbGRQcm9wZXJ0eShrLCB2KSlcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGVzdEFwcFBhY2thZ2UpIHtcbiAgICAgIGFyZ3MucHVzaChidWlsZFByb3BlcnR5KCdhcHBpdW1UYXJnZXRQYWNrYWdlJywgdGhpcy50ZXN0QXBwUGFja2FnZSkpO1xuICAgIH1cbiAgICBhcmdzLnB1c2goJ2FwcDphc3NlbWJsZUFuZHJvaWRUZXN0Jyk7XG5cbiAgICByZXR1cm4ge2NtZCwgYXJnc307XG4gIH1cblxuICBhc3luYyBzZXRHcmFkbGVXcmFwcGVyVmVyc2lvbiAodmVyc2lvbikge1xuICAgIGNvbnN0IHByb3BlcnRpZXNQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMuc2VydmVyUGF0aCwgJ2dyYWRsZScsICd3cmFwcGVyJywgJ2dyYWRsZS13cmFwcGVyLnByb3BlcnRpZXMnKTtcbiAgICBjb25zdCBvcmlnaW5hbFByb3BlcnRpZXMgPSBhd2FpdCBmcy5yZWFkRmlsZShwcm9wZXJ0aWVzUGF0aCwgJ3V0ZjgnKTtcbiAgICBjb25zdCBuZXdQcm9wZXJ0aWVzID0gdGhpcy51cGRhdGVHcmFkbGVEaXN0VXJsKG9yaWdpbmFsUHJvcGVydGllcywgdmVyc2lvbik7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKHByb3BlcnRpZXNQYXRoLCBuZXdQcm9wZXJ0aWVzLCAndXRmOCcpO1xuICB9XG5cbiAgdXBkYXRlR3JhZGxlRGlzdFVybCAocHJvcGVydGllc0NvbnRlbnQsIHZlcnNpb24pIHtcbiAgICByZXR1cm4gcHJvcGVydGllc0NvbnRlbnQucmVwbGFjZShcbiAgICAgIG5ldyBSZWdFeHAoYF4oJHtfLmVzY2FwZVJlZ0V4cChHUkFETEVfVVJMX1BSRUZJWCl9KS4rJGAsICdnbScpLFxuICAgICAgYCQxJHtHUkFETEVfVVJMX1RFTVBMQVRFLnJlcGxhY2UoJ1ZFUlNJT04nLCB2ZXJzaW9uKX1gXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGluc2VydEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMgKCkge1xuICAgIGxldCBoYXNBZGRpdGlvbmFsRGVwcyA9IGZhbHNlO1xuICAgIGZvciAoY29uc3QgcHJvcE5hbWUgb2YgREVQRU5ERU5DWV9QUk9QX05BTUVTKSB7XG4gICAgICBpZiAoIV8uaXNBcnJheSh0aGlzW3Byb3BOYW1lXSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtwcm9wTmFtZX0nIG11c3QgYmUgYW4gYXJyYXlgKTtcbiAgICAgIH1cbiAgICAgIGlmIChfLmlzRW1wdHkodGhpc1twcm9wTmFtZV0uZmlsdGVyKChsaW5lKSA9PiBfLnRyaW0obGluZSkpKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBkZXAgb2YgdGhpc1twcm9wTmFtZV0pIHtcbiAgICAgICAgaWYgKC9bXFxzJ1xcXFwkXS8udGVzdChkZXApKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaW5nbGUgcXVvdGVzLCBkb2xsYXIgY2hhcmFjdGVycyBhbmQgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzJyArXG4gICAgICAgICAgICBgIGFyZSBkaXNhbGxvd2VkIGluIGFkZGl0aW9uYWwgZGVwZW5kZW5jaWVzOiAke2RlcH1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaGFzQWRkaXRpb25hbERlcHMgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoIWhhc0FkZGl0aW9uYWxEZXBzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYnVpbGRQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMuc2VydmVyUGF0aCwgJ2FwcCcsICdidWlsZC5ncmFkbGUua3RzJyk7XG4gICAgbGV0IGNvbmZpZ3VyYXRpb24gPSBhd2FpdCBmcy5yZWFkRmlsZShidWlsZFBhdGgsICd1dGY4Jyk7XG4gICAgZm9yIChjb25zdCBwcm9wTmFtZSBvZiBERVBFTkRFTkNZX1BST1BfTkFNRVMpIHtcbiAgICAgIGNvbnN0IHByZWZpeCA9IHByb3BOYW1lID09PSBERVBFTkRFTkNZX1BST1BfTkFNRVNbMF1cbiAgICAgICAgPyAnaW1wbGVtZW50YXRpb24nXG4gICAgICAgIDogJ2FuZHJvaWRUZXN0SW1wbGVtZW50YXRpb24nO1xuICAgICAgY29uc3QgZGVwcyA9IHRoaXNbcHJvcE5hbWVdXG4gICAgICAgIC5maWx0ZXIoKGxpbmUpID0+IF8udHJpbShsaW5lKSlcbiAgICAgICAgLm1hcCgobGluZSkgPT4gYCR7cHJlZml4fShcIiR7bGluZX1cIilgKTtcbiAgICAgIGlmIChfLmlzRW1wdHkoZGVwcykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9nLmluZm8oYEFkZGluZyB0aGUgZm9sbG93aW5nICR7cHJvcE5hbWV9IHRvIGJ1aWxkLmdyYWRsZS5rdHM6ICR7ZGVwc31gKTtcbiAgICAgIGNvbmZpZ3VyYXRpb24gPSB1cGRhdGVEZXBlbmRlbmN5TGluZXMoY29uZmlndXJhdGlvbiwgcHJvcE5hbWUsIGRlcHMpO1xuICAgIH1cbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoYnVpbGRQYXRoLCBjb25maWd1cmF0aW9uLCAndXRmOCcpO1xuICB9XG5cbiAgYXN5bmMgcnVuQnVpbGRQcm9jZXNzICgpIHtcbiAgICBjb25zdCB7Y21kLCBhcmdzfSA9IHRoaXMuZ2V0Q29tbWFuZCgpO1xuICAgIHRoaXMubG9nLmRlYnVnKGBCZWdpbm5pbmcgYnVpbGQgd2l0aCBjb21tYW5kICcke2NtZH0gJHthcmdzLmpvaW4oJyAnKX0nIGAgK1xuICAgICAgYGluIGRpcmVjdG9yeSAnJHt0aGlzLnNlcnZlclBhdGh9J2ApO1xuICAgIGNvbnN0IGdyYWRsZWJ1aWxkID0gbmV3IFN1YlByb2Nlc3MoY21kLCBhcmdzLCB7XG4gICAgICBjd2Q6IHRoaXMuc2VydmVyUGF0aCxcbiAgICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgICAgIHdpbmRvd3NWZXJiYXRpbUFyZ3VtZW50czogdHJ1ZVxuICAgIH0pO1xuICAgIGxldCBidWlsZExhc3RMaW5lcyA9IFtdO1xuXG4gICAgY29uc3QgbG9nTXNnID0gYE91dHB1dCBmcm9tIEdyYWRsZSAke3RoaXMuc2hvd0dyYWRsZUxvZyA/ICd3aWxsJyA6ICd3aWxsIG5vdCd9IGJlIGxvZ2dlZGA7XG4gICAgdGhpcy5sb2cuZGVidWcoYCR7bG9nTXNnfS4gVG8gY2hhbmdlIHRoaXMsIHVzZSAnc2hvd0dyYWRsZUxvZycgZGVzaXJlZCBjYXBhYmlsaXR5YCk7XG4gICAgZ3JhZGxlYnVpbGQub24oJ3N0cmVhbS1saW5lJywgKGxpbmUpID0+IHtcbiAgICAgIGlmICh0aGlzLnNob3dHcmFkbGVMb2cpIHtcbiAgICAgICAgaWYgKGxpbmUuc3RhcnRzV2l0aCgnW1NUREVSUl0nKSkge1xuICAgICAgICAgIHRoaXMubG9nLndhcm4oYFtHcmFkbGVdICR7bGluZX1gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvZy5pbmZvKGBbR3JhZGxlXSAke2xpbmV9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJ1aWxkTGFzdExpbmVzLnB1c2goYCR7RU9MfSR7bGluZX1gKTtcbiAgICAgIGlmIChidWlsZExhc3RMaW5lcy5sZW5ndGggPiBHUkFETEVfTUFYX0VSUk9SX0xPR19MSU5FUykge1xuICAgICAgICBidWlsZExhc3RMaW5lcyA9IGJ1aWxkTGFzdExpbmVzLnNsaWNlKC1HUkFETEVfTUFYX0VSUk9SX0xPR19MSU5FUyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZ3JhZGxlYnVpbGQuc3RhcnQoKTtcbiAgICAgIGF3YWl0IGdyYWRsZWJ1aWxkLmpvaW4oKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxldCBtc2cgPSBgVW5hYmxlIHRvIGJ1aWxkIEVzcHJlc3NvIHNlcnZlciAtICR7ZXJyLm1lc3NhZ2V9XFxuYCArXG4gICAgICAgIGBHcmFkbGUgZXJyb3IgbWVzc2FnZToke0VPTH0ke2J1aWxkTGFzdExpbmVzfWA7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KG1zZyk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB7IFNlcnZlckJ1aWxkZXIsIFZFUlNJT05fS0VZUywgR1JBRExFX1VSTF9URU1QTEFURSwgYnVpbGRTZXJ2ZXJTaWduaW5nQ29uZmlnIH07XG5leHBvcnQgZGVmYXVsdCBTZXJ2ZXJCdWlsZGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsa0JBQWtCLEdBQUcsUUFBM0I7QUFDQSxNQUFN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
|