appium-android-driver 4.54.0 → 5.0.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.
Files changed (60) hide show
  1. package/README.md +1 -2
  2. package/build/index.js +6 -4
  3. package/build/lib/android-helpers.js +12 -9
  4. package/build/lib/bootstrap.js +7 -7
  5. package/build/lib/commands/actions.js +13 -13
  6. package/build/lib/commands/alert.js +7 -7
  7. package/build/lib/commands/app-management.js +6 -6
  8. package/build/lib/commands/context.js +10 -8
  9. package/build/lib/commands/element.js +5 -5
  10. package/build/lib/commands/execute.js +5 -5
  11. package/build/lib/commands/file-actions.js +12 -12
  12. package/build/lib/commands/find.js +6 -6
  13. package/build/lib/commands/general.js +7 -69
  14. package/build/lib/commands/ime.js +4 -4
  15. package/build/lib/commands/index.js +4 -2
  16. package/build/lib/commands/intent.js +7 -7
  17. package/build/lib/commands/log.js +6 -6
  18. package/build/lib/commands/network.js +4 -4
  19. package/build/lib/commands/performance.js +1 -1
  20. package/build/lib/commands/recordscreen.js +15 -15
  21. package/build/lib/commands/shell.js +3 -3
  22. package/build/lib/commands/streamscreen.js +7 -7
  23. package/build/lib/commands/system-bars.js +144 -0
  24. package/build/lib/commands/touch.js +8 -8
  25. package/build/lib/desired-caps.js +1 -1
  26. package/build/lib/driver.js +12 -12
  27. package/build/lib/logger.js +3 -3
  28. package/build/lib/server.js +4 -4
  29. package/build/lib/uiautomator.js +3 -3
  30. package/build/lib/unlock-helpers.js +8 -8
  31. package/build/lib/webview-helpers.js +7 -7
  32. package/lib/android-helpers.js +1 -1
  33. package/lib/bootstrap.js +2 -2
  34. package/lib/commands/actions.js +1 -1
  35. package/lib/commands/alert.js +1 -1
  36. package/lib/commands/app-management.js +4 -2
  37. package/lib/commands/context.js +2 -2
  38. package/lib/commands/element.js +1 -1
  39. package/lib/commands/execute.js +1 -1
  40. package/lib/commands/file-actions.js +1 -1
  41. package/lib/commands/find.js +2 -2
  42. package/lib/commands/general.js +1 -83
  43. package/lib/commands/ime.js +1 -1
  44. package/lib/commands/index.js +2 -0
  45. package/lib/commands/intent.js +1 -1
  46. package/lib/commands/log.js +1 -1
  47. package/lib/commands/network.js +1 -1
  48. package/lib/commands/recordscreen.js +1 -1
  49. package/lib/commands/shell.js +1 -1
  50. package/lib/commands/streamscreen.js +1 -1
  51. package/lib/commands/system-bars.js +131 -0
  52. package/lib/commands/touch.js +2 -2
  53. package/lib/driver.js +2 -2
  54. package/lib/logger.js +1 -1
  55. package/lib/server.js +1 -1
  56. package/lib/uiautomator.js +1 -1
  57. package/lib/unlock-helpers.js +1 -1
  58. package/lib/webview-helpers.js +1 -1
  59. package/package.json +14 -12
  60. package/lib/.DS_Store +0 -0
@@ -9,7 +9,7 @@ exports.default = exports.AndroidDriver = void 0;
9
9
 
10
10
  require("source-map-support/register");
11
11
 
12
- var _appiumBaseDriver = require("appium-base-driver");
12
+ var _baseDriver = require("@appium/base-driver");
13
13
 
14
14
  var _desiredCaps = _interopRequireDefault(require("./desired-caps"));
15
15
 
@@ -23,7 +23,7 @@ var _lodash = _interopRequireDefault(require("lodash"));
23
23
 
24
24
  var _appiumAdb = require("appium-adb");
25
25
 
26
- var _appiumSupport = require("appium-support");
26
+ var _support = require("@appium/support");
27
27
 
28
28
  var _asyncbox = require("asyncbox");
29
29
 
@@ -35,7 +35,7 @@ const APP_EXTENSION = '.apk';
35
35
  const DEVICE_PORT = 4724;
36
36
  const NO_PROXY = [['POST', new RegExp('^/session/[^/]+/context')], ['GET', new RegExp('^/session/[^/]+/context')], ['POST', new RegExp('^/session/[^/]+/appium')], ['GET', new RegExp('^/session/[^/]+/appium')], ['POST', new RegExp('^/session/[^/]+/touch/perform')], ['POST', new RegExp('^/session/[^/]+/touch/multi/perform')], ['POST', new RegExp('^/session/[^/]+/orientation')], ['GET', new RegExp('^/session/[^/]+/orientation')], ['POST', new RegExp('^/session/[^/]+/execute')], ['POST', new RegExp('^/session/[^/]+/execute/sync')], ['GET', new RegExp('^/session/[^/]+/network_connection')], ['POST', new RegExp('^/session/[^/]+/network_connection')]];
37
37
 
38
- class AndroidDriver extends _appiumBaseDriver.BaseDriver {
38
+ class AndroidDriver extends _baseDriver.BaseDriver {
39
39
  constructor(opts = {}, shouldValidateCaps = true) {
40
40
  super(opts, shouldValidateCaps);
41
41
  this.locatorStrategies = ['xpath', 'id', 'class name', 'accessibility id', '-android uiautomator'];
@@ -43,7 +43,7 @@ class AndroidDriver extends _appiumBaseDriver.BaseDriver {
43
43
  this.sessionChromedrivers = {};
44
44
  this.jwpProxyActive = false;
45
45
  this.jwpProxyAvoid = _lodash.default.clone(NO_PROXY);
46
- this.settings = new _appiumBaseDriver.DeviceSettings({
46
+ this.settings = new _baseDriver.DeviceSettings({
47
47
  ignoreUnimportantViews: false
48
48
  }, this.onSettingsUpdate.bind(this));
49
49
  this.chromedriver = null;
@@ -77,7 +77,7 @@ class AndroidDriver extends _appiumBaseDriver.BaseDriver {
77
77
  category: 'android.intent.category.LAUNCHER',
78
78
  flags: '0x10200000',
79
79
  disableAndroidWatchers: false,
80
- tmpDir: await _appiumSupport.tempDir.staticDir(),
80
+ tmpDir: await _support.tempDir.staticDir(),
81
81
  fullReset: false,
82
82
  autoLaunch: true,
83
83
  adbPort: _appiumAdb.DEFAULT_ADB_PORT,
@@ -147,7 +147,7 @@ class AndroidDriver extends _appiumBaseDriver.BaseDriver {
147
147
  await this.checkPackagePresent();
148
148
  }
149
149
 
150
- if (_appiumSupport.util.hasValue(this.opts.networkSpeed)) {
150
+ if (_support.util.hasValue(this.opts.networkSpeed)) {
151
151
  if (!this.isEmulator()) {
152
152
  _logger.default.warn('Sorry, networkSpeed capability is only available for emulators');
153
153
  } else {
@@ -156,7 +156,7 @@ class AndroidDriver extends _appiumBaseDriver.BaseDriver {
156
156
  }
157
157
  }
158
158
 
159
- if (_appiumSupport.util.hasValue(this.opts.gpsEnabled)) {
159
+ if (_support.util.hasValue(this.opts.gpsEnabled)) {
160
160
  if (this.isEmulator()) {
161
161
  _logger.default.info(`Trying to ${this.opts.gpsEnabled ? 'enable' : 'disable'} gps location provider`);
162
162
 
@@ -267,7 +267,7 @@ class AndroidDriver extends _appiumBaseDriver.BaseDriver {
267
267
  }
268
268
  }
269
269
 
270
- if (_appiumSupport.util.hasValue(this.opts.orientation)) {
270
+ if (_support.util.hasValue(this.opts.orientation)) {
271
271
  _logger.default.debug(`Setting initial orientation to '${this.opts.orientation}'`);
272
272
 
273
273
  await this.setOrientation(this.opts.orientation);
@@ -346,7 +346,7 @@ class AndroidDriver extends _appiumBaseDriver.BaseDriver {
346
346
  async checkAppPresent() {
347
347
  _logger.default.debug('Checking whether app is actually present');
348
348
 
349
- if (!(await _appiumSupport.fs.exists(this.opts.app))) {
349
+ if (!(await _support.fs.exists(this.opts.app))) {
350
350
  _logger.default.errorAndThrow(`Could not find app apk at ${this.opts.app}`);
351
351
  }
352
352
  }
@@ -464,8 +464,8 @@ class AndroidDriver extends _appiumBaseDriver.BaseDriver {
464
464
  try {
465
465
  _logger.default.info(`Trying to remove shared preferences temporary file`);
466
466
 
467
- if (await _appiumSupport.fs.exists(localPath)) {
468
- await _appiumSupport.fs.unlink(localPath);
467
+ if (await _support.fs.exists(localPath)) {
468
+ await _support.fs.unlink(localPath);
469
469
  }
470
470
  } catch (e) {
471
471
  _logger.default.warn(`Error trying to remove temporary file ${localPath}`);
@@ -512,4 +512,4 @@ var _default = AndroidDriver;
512
512
  exports.default = _default;require('source-map-support').install();
513
513
 
514
514
 
515
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXIuanMiXSwibmFtZXMiOlsiQVBQX0VYVEVOU0lPTiIsIkRFVklDRV9QT1JUIiwiTk9fUFJPWFkiLCJSZWdFeHAiLCJBbmRyb2lkRHJpdmVyIiwiQmFzZURyaXZlciIsImNvbnN0cnVjdG9yIiwib3B0cyIsInNob3VsZFZhbGlkYXRlQ2FwcyIsImxvY2F0b3JTdHJhdGVnaWVzIiwiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwiZGVzaXJlZENvbnN0cmFpbnRzIiwic2Vzc2lvbkNocm9tZWRyaXZlcnMiLCJqd3BQcm94eUFjdGl2ZSIsImp3cFByb3h5QXZvaWQiLCJfIiwiY2xvbmUiLCJzZXR0aW5ncyIsIkRldmljZVNldHRpbmdzIiwiaWdub3JlVW5pbXBvcnRhbnRWaWV3cyIsIm9uU2V0dGluZ3NVcGRhdGUiLCJiaW5kIiwiY2hyb21lZHJpdmVyIiwiYXBrU3RyaW5ncyIsInVubG9ja2VyIiwiaGVscGVycyIsImNtZCIsImZuIiwidG9QYWlycyIsImNvbW1hbmRzIiwicHJvdG90eXBlIiwiY3VyQ29udGV4dCIsImRlZmF1bHRDb250ZXh0TmFtZSIsImNyZWF0ZVNlc3Npb24iLCJhcmdzIiwic2Vzc2lvbklkIiwiY2FwcyIsInNlcnZlckRldGFpbHMiLCJwbGF0Zm9ybSIsIndlYlN0b3JhZ2VFbmFibGVkIiwidGFrZXNTY3JlZW5zaG90IiwiamF2YXNjcmlwdEVuYWJsZWQiLCJkYXRhYmFzZUVuYWJsZWQiLCJuZXR3b3JrQ29ubmVjdGlvbkVuYWJsZWQiLCJsb2NhdGlvbkNvbnRleHRFbmFibGVkIiwid2FybmluZ3MiLCJkZXNpcmVkIiwiT2JqZWN0IiwiYXNzaWduIiwiZGVmYXVsdE9wdHMiLCJhY3Rpb24iLCJjYXRlZ29yeSIsImZsYWdzIiwiZGlzYWJsZUFuZHJvaWRXYXRjaGVycyIsInRtcERpciIsInRlbXBEaXIiLCJzdGF0aWNEaXIiLCJmdWxsUmVzZXQiLCJhdXRvTGF1bmNoIiwiYWRiUG9ydCIsIkRFRkFVTFRfQURCX1BPUlQiLCJib290c3RyYXBQb3J0IiwiYW5kcm9pZEluc3RhbGxUaW1lb3V0IiwiZGVmYXVsdHMiLCJ1c2VVbmxvY2tIZWxwZXJBcHAiLCJpc1VuZGVmaW5lZCIsInVubG9ja1R5cGUiLCJub1Jlc2V0IiwiZmFzdFJlc2V0Iiwic2tpcFVuaW5zdGFsbCIsImlzQ2hyb21lU2Vzc2lvbiIsImFkanVzdEJyb3dzZXJTZXNzaW9uQ2FwcyIsIm5hdGl2ZVdlYlNjcmVlbnNob3QiLCJwdXNoIiwicmVib290Iiwic2V0QXZkRnJvbUNhcGFiaWxpdGllcyIsInVkaWQiLCJlbVBvcnQiLCJnZXREZXZpY2VJbmZvRnJvbUNhcHMiLCJhZGIiLCJjcmVhdGVBREIiLCJzdXBwcmVzc0tpbGxTZXJ2ZXIiLCJyZW1vdGVBZGJIb3N0IiwiY2xlYXJEZXZpY2VMb2dzT25TdGFydCIsImFkYkV4ZWNUaW1lb3V0IiwiYWxsb3dPZmZsaW5lRGV2aWNlcyIsImdldEFwaUxldmVsIiwibG9nIiwid2FybiIsImlzUGFja2FnZU9yQnVuZGxlIiwiYXBwIiwiYXBwUGFja2FnZSIsImNvbmZpZ3VyZUFwcCIsImNoZWNrQXBwUHJlc2VudCIsImFwcE9uRGV2aWNlIiwiaW5mbyIsImNoZWNrUGFja2FnZVByZXNlbnQiLCJ1dGlsIiwiaGFzVmFsdWUiLCJuZXR3b3JrU3BlZWQiLCJpc0VtdWxhdG9yIiwiZ3BzRW5hYmxlZCIsInRvZ2dsZUdQU0xvY2F0aW9uUHJvdmlkZXIiLCJzdGFydEFuZHJvaWRTZXNzaW9uIiwiZSIsImRlbGV0ZVNlc3Npb24iLCJpZ24iLCJhdmQiLCJkZXZpY2VOYW1lIiwiZXJyb3JBbmRUaHJvdyIsInBsYXRmb3JtVmVyc2lvbiIsImF2ZERldmljZSIsInJlcGxhY2UiLCJpc0Nocm9tZUJyb3dzZXIiLCJicm93c2VyTmFtZSIsImtleSIsInZhbHVlIiwic2V0Q29tcHJlc3NlZExheW91dEhpZXJhcmNoeSIsImRlZmF1bHRJTUUiLCJpbml0RGV2aWNlIiwiY3VyRGV2aWNlSWQiLCJkZXZpY2VVRElEIiwiZ2V0UGxhdGZvcm1WZXJzaW9uIiwiZGV2aWNlU2NyZWVuU2l6ZSIsImdldFNjcmVlblNpemUiLCJkZXZpY2VNb2RlbCIsImdldE1vZGVsIiwiZGV2aWNlTWFudWZhY3R1cmVyIiwiZ2V0TWFudWZhY3R1cmVyIiwiZGlzYWJsZVdpbmRvd0FuaW1hdGlvbiIsImlzQW5pbWF0aW9uT24iLCJzZXRIaWRkZW5BcGlQb2xpY3kiLCJpZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvciIsInNldEFuaW1hdGlvblN0YXRlIiwiX3dhc1dpbmRvd0FuaW1hdGlvbkRpc2FibGVkIiwiaW5pdEFVVCIsImJvb3RzdHJhcCIsIndlYnNvY2tldCIsInN0YXJ0IiwiYWNjZXB0U3NsQ2VydHMiLCJvblVuZXhwZWN0ZWRTaHV0ZG93biIsImNhdGNoIiwiZXJyIiwiaWdub3JlVW5leHBlY3RlZFNodXRkb3duIiwic3RhcnRVbmV4cGVjdGVkU2h1dGRvd24iLCJza2lwVW5sb2NrIiwidW5sb2NrIiwidXBkYXRlIiwic3RhcnRDaHJvbWVTZXNzaW9uIiwic3RhcnRBVVQiLCJvcmllbnRhdGlvbiIsImRlYnVnIiwic2V0T3JpZW50YXRpb24iLCJpbml0QXV0b1dlYnZpZXciLCJhdXRvV2VidmlldyIsInZpZXdOYW1lIiwiZGVmYXVsdFdlYnZpZXdOYW1lIiwidGltZW91dCIsImF1dG9XZWJ2aWV3VGltZW91dCIsInNldENvbnRleHQiLCJsYXVuY2hJbmZvIiwiZ2V0TGF1bmNoSW5mbyIsInVuaW5zdGFsbE90aGVyUGFja2FnZXMiLCJ2YWxpZGF0ZURlc2lyZWRDYXBzIiwicGFyc2VBcnJheSIsIlNFVFRJTkdTX0hFTFBFUl9QS0dfSUQiLCJvdGhlckFwcHMiLCJtZXNzYWdlIiwiQiIsImFsbCIsIm1hcCIsImluc3RhbGxPdGhlckFwa3MiLCJyZXNldEFwcCIsInVuaW5zdGFsbEFwayIsImluc3RhbGxBcGsiLCJhcGtTdHJpbmdzRm9yTGFuZ3VhZ2UiLCJwdXNoU3RyaW5ncyIsImxhbmd1YWdlIiwic2hhcmVkUHJlZmVyZW5jZXMiLCJzZXRTaGFyZWRQcmVmZXJlbmNlcyIsImZzIiwiZXhpc3RzIiwic2hlbGwiLCJjb21wcmVzcyIsInNlbmRBY3Rpb24iLCJjb21wcmVzc0xheW91dCIsImlzRW1wdHkiLCJfc2NyZWVuUmVjb3JkaW5nUHJvcGVydGllcyIsInN0b3BSZWNvcmRpbmdTY3JlZW4iLCJyZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMiLCJzZXJ2ZXIiLCJtb2JpbGVTdG9wU2NyZWVuU3RyZWFtaW5nIiwic3RvcENocm9tZWRyaXZlclByb3hpZXMiLCJ1bmljb2RlS2V5Ym9hcmQiLCJyZXNldEtleWJvYXJkIiwic2V0SU1FIiwiZG9udFN0b3BBcHBPblJlc2V0IiwiZm9yY2VTdG9wIiwiZ29Ub0hvbWUiLCJzaHV0ZG93biIsInN0b3BMb2djYXQiLCJzZXREZWZhdWx0SGlkZGVuQXBpUG9saWN5IiwiYXZkTmFtZSIsImtpbGxFbXVsYXRvciIsInNoYXJlZFByZWZzIiwibmFtZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZW1vdGVQYXRoIiwicmVtb3RlRmlsZSIsImxvY2FsUGF0aCIsImJ1aWxkZXIiLCJnZXRQcmVmc0J1aWxkZXIiLCJidWlsZCIsInByZWZzIiwidG9GaWxlIiwidW5saW5rIiwiU2hhcmVkUHJlZnNCdWlsZGVyIiwicHJveHlBY3RpdmUiLCJnZXRQcm94eUF2b2lkTGlzdCIsImNhblByb3h5IiwiaXNGdW5jdGlvbiIsInByb3h5UmVxUmVzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUlBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLGFBQWEsR0FBRyxNQUF0QjtBQUNBLE1BQU1DLFdBQVcsR0FBRyxJQUFwQjtBQUlBLE1BQU1DLFFBQVEsR0FBRyxDQUNmLENBQUMsTUFBRCxFQUFTLElBQUlDLE1BQUosQ0FBVyx5QkFBWCxDQUFULENBRGUsRUFFZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcseUJBQVgsQ0FBUixDQUZlLEVBR2Ys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IERldmljZVNldHRpbmdzIH0gZnJvbSAnYXBwaXVtLWJhc2UtZHJpdmVyJztcbmltcG9ydCBkZXNpcmVkQ29uc3RyYWludHMgZnJvbSAnLi9kZXNpcmVkLWNhcHMnO1xuaW1wb3J0IGNvbW1hbmRzIGZyb20gJy4vY29tbWFuZHMvaW5kZXgnO1xuaW1wb3J0IHtcbiAgaGVscGVycywgZW5zdXJlTmV0d29ya1NwZWVkLFxuICBTRVRUSU5HU19IRUxQRVJfUEtHX0lELFxufSBmcm9tICcuL2FuZHJvaWQtaGVscGVycyc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBERUZBVUxUX0FEQl9QT1JUIH0gZnJvbSAnYXBwaXVtLWFkYic7XG5pbXBvcnQgeyBmcywgdGVtcERpciwgdXRpbCB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCB7IHJldHJ5SW50ZXJ2YWwgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBTaGFyZWRQcmVmc0J1aWxkZXIgfSBmcm9tICdzaGFyZWQtcHJlZmVyZW5jZXMtYnVpbGRlcic7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5cbmNvbnN0IEFQUF9FWFRFTlNJT04gPSAnLmFwayc7XG5jb25zdCBERVZJQ0VfUE9SVCA9IDQ3MjQ7XG5cbi8vIFRoaXMgaXMgYSBzZXQgb2YgbWV0aG9kcyBhbmQgcGF0aHMgdGhhdCB3ZSBuZXZlciB3YW50IHRvIHByb3h5IHRvXG4vLyBDaHJvbWVkcml2ZXJcbmNvbnN0IE5PX1BST1hZID0gW1xuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29udGV4dCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29udGV4dCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdG91Y2gvcGVyZm9ybScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3RvdWNoL211bHRpL3BlcmZvcm0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9vcmllbnRhdGlvbicpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvb3JpZW50YXRpb24nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZS9zeW5jJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9uZXR3b3JrX2Nvbm5lY3Rpb24nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9uZXR3b3JrX2Nvbm5lY3Rpb24nKV0sXG5dO1xuXG5jbGFzcyBBbmRyb2lkRHJpdmVyIGV4dGVuZHMgQmFzZURyaXZlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30sIHNob3VsZFZhbGlkYXRlQ2FwcyA9IHRydWUpIHtcbiAgICBzdXBlcihvcHRzLCBzaG91bGRWYWxpZGF0ZUNhcHMpO1xuXG4gICAgdGhpcy5sb2NhdG9yU3RyYXRlZ2llcyA9IFtcbiAgICAgICd4cGF0aCcsXG4gICAgICAnaWQnLFxuICAgICAgJ2NsYXNzIG5hbWUnLFxuICAgICAgJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgICAgJy1hbmRyb2lkIHVpYXV0b21hdG9yJ1xuICAgIF07XG4gICAgdGhpcy5kZXNpcmVkQ2FwQ29uc3RyYWludHMgPSBkZXNpcmVkQ29uc3RyYWludHM7XG4gICAgdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVycyA9IHt9O1xuICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBfLmNsb25lKE5PX1BST1hZKTtcbiAgICB0aGlzLnNldHRpbmdzID0gbmV3IERldmljZVNldHRpbmdzKHtpZ25vcmVVbmltcG9ydGFudFZpZXdzOiBmYWxzZX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uU2V0dGluZ3NVcGRhdGUuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5jaHJvbWVkcml2ZXIgPSBudWxsO1xuICAgIHRoaXMuYXBrU3RyaW5ncyA9IHt9O1xuICAgIHRoaXMudW5sb2NrZXIgPSBoZWxwZXJzLnVubG9ja2VyO1xuXG4gICAgZm9yIChsZXQgW2NtZCwgZm5dIG9mIF8udG9QYWlycyhjb21tYW5kcykpIHtcbiAgICAgIEFuZHJvaWREcml2ZXIucHJvdG90eXBlW2NtZF0gPSBmbjtcbiAgICB9XG5cbiAgICAvLyBuZWVkcyB0byBiZSBhZnRlciB0aGUgbGluZSB3aGljaCBhc3NpZ25zIGNvbW1hbmRzIHRvIEFuZHJvaWREcml2ZXIucHJvdG90eXBlLCBzbyB0aGF0IGB0aGlzLmRlZmF1bHRDb250ZXh0TmFtZWAgaXMgZGVmaW5lZC5cbiAgICB0aGlzLmN1ckNvbnRleHQgPSB0aGlzLmRlZmF1bHRDb250ZXh0TmFtZSgpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlU2Vzc2lvbiAoLi4uYXJncykge1xuICAgIC8vIHRoZSB3aG9sZSBjcmVhdGVTZXNzaW9uIGZsb3cgaXMgc3Vycm91bmRlZCBpbiBhIHRyeS1jYXRjaCBzdGF0ZW1lbnRcbiAgICAvLyBpZiBjcmVhdGluZyBhIHNlc3Npb24gZmFpbHMgYXQgYW55IHBvaW50LCB3ZSB0ZWFyZG93biBldmVyeXRoaW5nIHdlXG4gICAgLy8gc2V0IHVwIGJlZm9yZSB0aHJvd2luZyB0aGUgZXJyb3IuXG4gICAgdHJ5IHtcbiAgICAgIGxldCBbc2Vzc2lvbklkLCBjYXBzXSA9IGF3YWl0IHN1cGVyLmNyZWF0ZVNlc3Npb24oLi4uYXJncyk7XG5cbiAgICAgIGxldCBzZXJ2ZXJEZXRhaWxzID0ge1xuICAgICAgICBwbGF0Zm9ybTogJ0xJTlVYJyxcbiAgICAgICAgd2ViU3RvcmFnZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB0YWtlc1NjcmVlbnNob3Q6IHRydWUsXG4gICAgICAgIGphdmFzY3JpcHRFbmFibGVkOiB0cnVlLFxuICAgICAgICBkYXRhYmFzZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBuZXR3b3JrQ29ubmVjdGlvbkVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGxvY2F0aW9uQ29udGV4dEVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB3YXJuaW5nczoge30sXG4gICAgICAgIGRlc2lyZWQ6IHRoaXMuY2Fwc1xuICAgICAgfTtcblxuICAgICAgdGhpcy5jYXBzID0gT2JqZWN0LmFzc2lnbihzZXJ2ZXJEZXRhaWxzLCB0aGlzLmNhcHMpO1xuXG4gICAgICAvLyBhc3NpZ25pbmcgZGVmYXVsdHNcbiAgICAgIGxldCBkZWZhdWx0T3B0cyA9IHtcbiAgICAgICAgYWN0aW9uOiAnYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4nLFxuICAgICAgICBjYXRlZ29yeTogJ2FuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkxBVU5DSEVSJyxcbiAgICAgICAgZmxhZ3M6ICcweDEwMjAwMDAwJyxcbiAgICAgICAgZGlzYWJsZUFuZHJvaWRXYXRjaGVyczogZmFsc2UsXG4gICAgICAgIHRtcERpcjogYXdhaXQgdGVtcERpci5zdGF0aWNEaXIoKSxcbiAgICAgICAgZnVsbFJlc2V0OiBmYWxzZSxcbiAgICAgICAgYXV0b0xhdW5jaDogdHJ1ZSxcbiAgICAgICAgYWRiUG9ydDogREVGQVVMVF9BREJfUE9SVCxcbiAgICAgICAgYm9vdHN0cmFwUG9ydDogREVWSUNFX1BPUlQsXG4gICAgICAgIGFuZHJvaWRJbnN0YWxsVGltZW91dDogOTAwMDAsXG4gICAgICB9O1xuICAgICAgXy5kZWZhdWx0cyh0aGlzLm9wdHMsIGRlZmF1bHRPcHRzKTtcbiAgICAgIHRoaXMudXNlVW5sb2NrSGVscGVyQXBwID0gXy5pc1VuZGVmaW5lZCh0aGlzLmNhcHMudW5sb2NrVHlwZSk7XG5cbiAgICAgIC8vIG5vdCB1c2VyIHZpc2libGUgdmlhIGNhcHNcbiAgICAgIGlmICh0aGlzLm9wdHMubm9SZXNldCA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLm9wdHMuZnVsbFJlc2V0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRzLmZ1bGxSZXNldCA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLm9wdHMubm9SZXNldCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5vcHRzLmZhc3RSZXNldCA9ICF0aGlzLm9wdHMuZnVsbFJlc2V0ICYmICF0aGlzLm9wdHMubm9SZXNldDtcbiAgICAgIHRoaXMub3B0cy5za2lwVW5pbnN0YWxsID0gdGhpcy5vcHRzLmZhc3RSZXNldCB8fCB0aGlzLm9wdHMubm9SZXNldDtcblxuICAgICAgaWYgKHRoaXMuaXNDaHJvbWVTZXNzaW9uKSB7XG4gICAgICAgIGhlbHBlcnMuYWRqdXN0QnJvd3NlclNlc3Npb25DYXBzKHRoaXMub3B0cyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdHMubmF0aXZlV2ViU2NyZWVuc2hvdCkge1xuICAgICAgICB0aGlzLmp3cFByb3h5QXZvaWQucHVzaChbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zY3JlZW5zaG90JyldKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5yZWJvb3QpIHtcbiAgICAgICAgdGhpcy5zZXRBdmRGcm9tQ2FwYWJpbGl0aWVzKGNhcHMpO1xuICAgICAgfVxuXG4gICAgICAvLyBnZXQgZGV2aWNlIHVkaWQgZm9yIHRoaXMgc2Vzc2lvblxuICAgICAgbGV0IHt1ZGlkLCBlbVBvcnR9ID0gYXdhaXQgaGVscGVycy5nZXREZXZpY2VJbmZvRnJvbUNhcHModGhpcy5vcHRzKTtcbiAgICAgIHRoaXMub3B0cy51ZGlkID0gdWRpZDtcbiAgICAgIHRoaXMub3B0cy5lbVBvcnQgPSBlbVBvcnQ7XG5cbiAgICAgIC8vIHNldCB1cCBhbiBpbnN0YW5jZSBvZiBBREJcbiAgICAgIHRoaXMuYWRiID0gYXdhaXQgaGVscGVycy5jcmVhdGVBREIoe1xuICAgICAgICB1ZGlkOiB0aGlzLm9wdHMudWRpZCxcbiAgICAgICAgZW1Qb3J0OiB0aGlzLm9wdHMuZW1Qb3J0LFxuICAgICAgICBhZGJQb3J0OiB0aGlzLm9wdHMuYWRiUG9ydCxcbiAgICAgICAgc3VwcHJlc3NLaWxsU2VydmVyOiB0aGlzLm9wdHMuc3VwcHJlc3NLaWxsU2VydmVyLFxuICAgICAgICByZW1vdGVBZGJIb3N0OiB0aGlzLm9wdHMucmVtb3RlQWRiSG9zdCxcbiAgICAgICAgY2xlYXJEZXZpY2VMb2dzT25TdGFydDogdGhpcy5vcHRzLmNsZWFyRGV2aWNlTG9nc09uU3RhcnQsXG4gICAgICAgIGFkYkV4ZWNUaW1lb3V0OiB0aGlzLm9wdHMuYWRiRXhlY1RpbWVvdXQsXG4gICAgICAgIGFsbG93T2ZmbGluZURldmljZXM6IHRoaXMub3B0cy5hbGxvd09mZmxpbmVEZXZpY2VzLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpID49IDIzKSB7XG4gICAgICAgIGxvZy53YXJuKFwiQ29uc2lkZXIgc2V0dGluZyAnYXV0b21hdGlvbk5hbWUnIGNhcGFiaWxpdHkgdG8gXCIgK1xuICAgICAgICAgIFwiJ3VpYXV0b21hdG9yMicgb24gQW5kcm9pZCA+PSA2LCBzaW5jZSBVSUF1dG9tYXRvciBmcmFtZXdvcmsgXCIgK1xuICAgICAgICAgICdpcyBub3QgbWFpbnRhaW5lZCBhbnltb3JlIGJ5IHRoZSBPUyB2ZW5kb3IuJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmhlbHBlcnMuaXNQYWNrYWdlT3JCdW5kbGUodGhpcy5vcHRzLmFwcCkpIHtcbiAgICAgICAgLy8gdXNlciBwcm92aWRlZCBwYWNrYWdlIGluc3RlYWQgb2YgYXBwIGZvciAnYXBwJyBjYXBhYmlsaXR5LCBtYXNzYWdlIG9wdGlvbnNcbiAgICAgICAgdGhpcy5vcHRzLmFwcFBhY2thZ2UgPSB0aGlzLm9wdHMuYXBwO1xuICAgICAgICB0aGlzLm9wdHMuYXBwID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5hcHApIHtcbiAgICAgICAgLy8gZmluZCBhbmQgY29weSwgb3IgZG93bmxvYWQgYW5kIHVuemlwIGFuIGFwcCB1cmwgb3IgcGF0aFxuICAgICAgICB0aGlzLm9wdHMuYXBwID0gYXdhaXQgdGhpcy5oZWxwZXJzLmNvbmZpZ3VyZUFwcCh0aGlzLm9wdHMuYXBwLCBBUFBfRVhURU5TSU9OKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jaGVja0FwcFByZXNlbnQoKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5hcHBPbkRldmljZSkge1xuICAgICAgICAvLyB0aGUgYXBwIGlzbid0IGFuIGFjdHVhbCBhcHAgZmlsZSBidXQgcmF0aGVyIHNvbWV0aGluZyB3ZSB3YW50IHRvXG4gICAgICAgIC8vIGFzc3VtZSBpcyBvbiB0aGUgZGV2aWNlIGFuZCBqdXN0IGxhdW5jaCB2aWEgdGhlIGFwcFBhY2thZ2VcbiAgICAgICAgbG9nLmluZm8oYEFwcCBmaWxlIHdhcyBub3QgbGlzdGVkLCBpbnN0ZWFkIHdlJ3JlIGdvaW5nIHRvIHJ1biBgICtcbiAgICAgICAgICBgJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0gZGlyZWN0bHkgb24gdGhlIGRldmljZWApO1xuICAgICAgICBhd2FpdCB0aGlzLmNoZWNrUGFja2FnZVByZXNlbnQoKTtcbiAgICAgIH1cblxuICAgICAgLy8gU29tZSBjbG91ZCBzZXJ2aWNlcyB1c2luZyBhcHBpdW0gbGF1bmNoIHRoZSBhdmQgdGhlbXNlbHZlcywgc28gd2UgZW5zdXJlIG5ldHNwZWVkXG4gICAgICAvLyBpcyBzZXQgZm9yIGVtdWxhdG9ycyBieSBjYWxsaW5nIGFkYi5uZXR3b3JrU3BlZWQgYmVmb3JlIHJ1bm5pbmcgdGhlIGFwcFxuICAgICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLm5ldHdvcmtTcGVlZCkpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgICAgICAgIGxvZy53YXJuKCdTb3JyeSwgbmV0d29ya1NwZWVkIGNhcGFiaWxpdHkgaXMgb25seSBhdmFpbGFibGUgZm9yIGVtdWxhdG9ycycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IG5ldHdvcmtTcGVlZCA9IGVuc3VyZU5ldHdvcmtTcGVlZCh0aGlzLmFkYiwgdGhpcy5vcHRzLm5ldHdvcmtTcGVlZCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGIubmV0d29ya1NwZWVkKG5ldHdvcmtTcGVlZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGNoZWNrIGlmIHdlIGhhdmUgdG8gZW5hYmxlL2Rpc2FibGUgZ3BzIGJlZm9yZSBydW5uaW5nIHRoZSBhcHBsaWNhdGlvblxuICAgICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLmdwc0VuYWJsZWQpKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgICAgICAgIGxvZy5pbmZvKGBUcnlpbmcgdG8gJHt0aGlzLm9wdHMuZ3BzRW5hYmxlZCA/ICdlbmFibGUnIDogJ2Rpc2FibGUnfSBncHMgbG9jYXRpb24gcHJvdmlkZXJgKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkYi50b2dnbGVHUFNMb2NhdGlvblByb3ZpZGVyKHRoaXMub3B0cy5ncHNFbmFibGVkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2cud2FybignU29ycnkhIGdwc0VuYWJsZWQgY2FwYWJpbGl0eSBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5zdGFydEFuZHJvaWRTZXNzaW9uKHRoaXMub3B0cyk7XG4gICAgICByZXR1cm4gW3Nlc3Npb25JZCwgdGhpcy5jYXBzXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBpZ25vcmluZyBkZWxldGUgc2Vzc2lvbiBleGNlcHRpb24gaWYgYW55IGFuZCB0aHJvdyB0aGUgcmVhbCBlcnJvclxuICAgICAgLy8gdGhhdCBoYXBwZW5lZCB3aGlsZSBjcmVhdGluZyB0aGUgc2Vzc2lvbi5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgfSBjYXRjaCAoaWduKSB7fVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBpc0VtdWxhdG9yICgpIHtcbiAgICByZXR1cm4gaGVscGVycy5pc0VtdWxhdG9yKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICB9XG5cbiAgc2V0QXZkRnJvbUNhcGFiaWxpdGllcyAoY2Fwcykge1xuICAgIGlmICh0aGlzLm9wdHMuYXZkKSB7XG4gICAgICBsb2cuaW5mbygnYXZkIG5hbWUgZGVmaW5lZCwgaWdub3JpbmcgZGV2aWNlIG5hbWUgYW5kIHBsYXRmb3JtIHZlcnNpb24nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjYXBzLmRldmljZU5hbWUpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coJ2F2ZCBvciBkZXZpY2VOYW1lIHNob3VsZCBiZSBzcGVjaWZpZWQgd2hlbiByZWJvb3Qgb3B0aW9uIGlzIGVuYWJsZXMnKTtcbiAgICAgIH1cbiAgICAgIGlmICghY2Fwcy5wbGF0Zm9ybVZlcnNpb24pIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coJ2F2ZCBvciBwbGF0Zm9ybVZlcnNpb24gc2hvdWxkIGJlIHNwZWNpZmllZCB3aGVuIHJlYm9vdCBvcHRpb24gaXMgZW5hYmxlZCcpO1xuICAgICAgfVxuICAgICAgbGV0IGF2ZERldmljZSA9IGNhcHMuZGV2aWNlTmFtZS5yZXBsYWNlKC9bXmEtekEtWjAtOV8uXS9nLCAnLScpO1xuICAgICAgdGhpcy5vcHRzLmF2ZCA9IGAke2F2ZERldmljZX1fXyR7Y2Fwcy5wbGF0Zm9ybVZlcnNpb259YDtcbiAgICB9XG4gIH1cblxuICBnZXQgYXBwT25EZXZpY2UgKCkge1xuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuaXNQYWNrYWdlT3JCdW5kbGUodGhpcy5vcHRzLmFwcCkgfHwgKCF0aGlzLm9wdHMuYXBwICYmXG4gICAgICAgICAgIHRoaXMuaGVscGVycy5pc1BhY2thZ2VPckJ1bmRsZSh0aGlzLm9wdHMuYXBwUGFja2FnZSkpO1xuICB9XG5cbiAgZ2V0IGlzQ2hyb21lU2Vzc2lvbiAoKSB7XG4gICAgcmV0dXJuIGhlbHBlcnMuaXNDaHJvbWVCcm93c2VyKHRoaXMub3B0cy5icm93c2VyTmFtZSk7XG4gIH1cblxuICBhc3luYyBvblNldHRpbmdzVXBkYXRlIChrZXksIHZhbHVlKSB7XG4gICAgaWYgKGtleSA9PT0gJ2lnbm9yZVVuaW1wb3J0YW50Vmlld3MnKSB7XG4gICAgICBhd2FpdCB0aGlzLnNldENvbXByZXNzZWRMYXlvdXRIaWVyYXJjaHkodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0QW5kcm9pZFNlc3Npb24gKCkge1xuICAgIGxvZy5pbmZvKGBTdGFydGluZyBBbmRyb2lkIHNlc3Npb25gKTtcbiAgICAvLyBzZXQgdXAgdGhlIGRldmljZSB0byBydW4gb24gKHJlYWwgb3IgZW11bGF0b3IsIGV0YylcbiAgICB0aGlzLmRlZmF1bHRJTUUgPSBhd2FpdCBoZWxwZXJzLmluaXREZXZpY2UodGhpcy5hZGIsIHRoaXMub3B0cyk7XG5cbiAgICAvLyBzZXQgYWN0dWFsIGRldmljZSBuYW1lLCB1ZGlkLCBwbGF0Zm9ybSB2ZXJzaW9uLCBzY3JlZW4gc2l6ZSwgbW9kZWwgYW5kIG1hbnVmYWN0dXJlciBkZXRhaWxzLlxuICAgIHRoaXMuY2Fwcy5kZXZpY2VOYW1lID0gdGhpcy5hZGIuY3VyRGV2aWNlSWQ7XG4gICAgdGhpcy5jYXBzLmRldmljZVVESUQgPSB0aGlzLm9wdHMudWRpZDtcbiAgICB0aGlzLmNhcHMucGxhdGZvcm1WZXJzaW9uID0gYXdhaXQgdGhpcy5hZGIuZ2V0UGxhdGZvcm1WZXJzaW9uKCk7XG4gICAgdGhpcy5jYXBzLmRldmljZVNjcmVlblNpemUgPSBhd2FpdCB0aGlzLmFkYi5nZXRTY3JlZW5TaXplKCk7XG4gICAgdGhpcy5jYXBzLmRldmljZU1vZGVsID0gYXdhaXQgdGhpcy5hZGIuZ2V0TW9kZWwoKTtcbiAgICB0aGlzLmNhcHMuZGV2aWNlTWFudWZhY3R1cmVyID0gYXdhaXQgdGhpcy5hZGIuZ2V0TWFudWZhY3R1cmVyKCk7XG5cbiAgICBpZiAodGhpcy5vcHRzLmRpc2FibGVXaW5kb3dBbmltYXRpb24pIHtcbiAgICAgIGlmIChhd2FpdCB0aGlzLmFkYi5pc0FuaW1hdGlvbk9uKCkpIHtcbiAgICAgICAgaWYgKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPj0gMjgpIHsgLy8gQVBJIGxldmVsIDI4IGlzIEFuZHJvaWQgUFxuICAgICAgICAgIC8vIERvbid0IGZvcmdldCB0byByZXNldCB0aGUgcmVsYXhpbmcgaW4gZGVsZXRlIHNlc3Npb25cbiAgICAgICAgICBsb2cud2FybignUmVsYXhpbmcgaGlkZGVuIGFwaSBwb2xpY3kgdG8gbWFuYWdlIGFuaW1hdGlvbiBzY2FsZScpO1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLnNldEhpZGRlbkFwaVBvbGljeSgnMScsICEhdGhpcy5vcHRzLmlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvZy5pbmZvKCdEaXNhYmxpbmcgd2luZG93IGFuaW1hdGlvbiBhcyBpdCBpcyByZXF1ZXN0ZWQgYnkgXCJkaXNhYmxlV2luZG93QW5pbWF0aW9uXCIgY2FwYWJpbGl0eScpO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5zZXRBbmltYXRpb25TdGF0ZShmYWxzZSk7XG4gICAgICAgIHRoaXMuX3dhc1dpbmRvd0FuaW1hdGlvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy5pbmZvKCdXaW5kb3cgYW5pbWF0aW9uIGlzIGFscmVhZHkgZGlzYWJsZWQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZXQgdXAgYXBwIHVuZGVyIHRlc3RcbiAgICBhd2FpdCB0aGlzLmluaXRBVVQoKTtcblxuICAgIC8vIHN0YXJ0IFVpQXV0b21hdG9yXG4gICAgdGhpcy5ib290c3RyYXAgPSBuZXcgaGVscGVycy5ib290c3RyYXAodGhpcy5hZGIsIHRoaXMub3B0cy5ib290c3RyYXBQb3J0LCB0aGlzLm9wdHMud2Vic29ja2V0KTtcbiAgICBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zdGFydCh0aGlzLm9wdHMuYXBwUGFja2FnZSwgdGhpcy5vcHRzLmRpc2FibGVBbmRyb2lkV2F0Y2hlcnMsIHRoaXMub3B0cy5hY2NlcHRTc2xDZXJ0cyk7XG4gICAgLy8gaGFuZGxpbmcgdW5leHBlY3RlZCBzaHV0ZG93blxuICAgIHRoaXMuYm9vdHN0cmFwLm9uVW5leHBlY3RlZFNodXRkb3duLmNhdGNoKGFzeW5jIChlcnIpID0+IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBwcm9taXNlL3ByZWZlci1hd2FpdC10by1jYWxsYmFja3NcbiAgICAgIGlmICghdGhpcy5ib290c3RyYXAuaWdub3JlVW5leHBlY3RlZFNodXRkb3duKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3RhcnRVbmV4cGVjdGVkU2h1dGRvd24oZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghdGhpcy5vcHRzLnNraXBVbmxvY2spIHtcbiAgICAgIC8vIExldCdzIHRyeSB0byB1bmxvY2sgdGhlIGRldmljZVxuICAgICAgYXdhaXQgaGVscGVycy51bmxvY2sodGhpcywgdGhpcy5hZGIsIHRoaXMuY2Fwcyk7XG4gICAgfVxuXG4gICAgLy8gU2V0IENvbXByZXNzZWRMYXlvdXRIaWVyYXJjaHkgb24gdGhlIGRldmljZSBiYXNlZCBvbiBjdXJyZW50IHNldHRpbmdzIG9iamVjdFxuICAgIC8vIHRoaXMgaGFzIHRvIGhhcHBlbiBfYWZ0ZXJfIGJvb3RzdHJhcCBpcyBpbml0aWFsaXplZFxuICAgIGlmICh0aGlzLm9wdHMuaWdub3JlVW5pbXBvcnRhbnRWaWV3cykge1xuICAgICAgYXdhaXQgdGhpcy5zZXR0aW5ncy51cGRhdGUoe2lnbm9yZVVuaW1wb3J0YW50Vmlld3M6IHRoaXMub3B0cy5pZ25vcmVVbmltcG9ydGFudFZpZXdzfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNDaHJvbWVTZXNzaW9uKSB7XG4gICAgICAvLyBzdGFydCBhIGNocm9tZWRyaXZlciBzZXNzaW9uIGFuZCBwcm94eSB0byBpdFxuICAgICAgYXdhaXQgdGhpcy5zdGFydENocm9tZVNlc3Npb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMub3B0cy5hdXRvTGF1bmNoKSB7XG4gICAgICAgIC8vIHN0YXJ0IGFwcFxuICAgICAgICBhd2FpdCB0aGlzLnN0YXJ0QVVUKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLm9yaWVudGF0aW9uKSkge1xuICAgICAgbG9nLmRlYnVnKGBTZXR0aW5nIGluaXRpYWwgb3JpZW50YXRpb24gdG8gJyR7dGhpcy5vcHRzLm9yaWVudGF0aW9ufSdgKTtcbiAgICAgIGF3YWl0IHRoaXMuc2V0T3JpZW50YXRpb24odGhpcy5vcHRzLm9yaWVudGF0aW9uKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmluaXRBdXRvV2VidmlldygpO1xuICB9XG5cbiAgYXN5bmMgaW5pdEF1dG9XZWJ2aWV3ICgpIHtcbiAgICBpZiAodGhpcy5vcHRzLmF1dG9XZWJ2aWV3KSB7XG4gICAgICBsZXQgdmlld05hbWUgPSB0aGlzLmRlZmF1bHRXZWJ2aWV3TmFtZSgpO1xuICAgICAgbGV0IHRpbWVvdXQgPSAodGhpcy5vcHRzLmF1dG9XZWJ2aWV3VGltZW91dCkgfHwgMjAwMDtcblxuICAgICAgbG9nLmluZm8oYFNldHRpbmcgYXV0byB3ZWJ2aWV3IHRvIGNvbnRleHQgJyR7dmlld05hbWV9JyB3aXRoIHRpbWVvdXQgJHt0aW1lb3V0fW1zYCk7XG5cbiAgICAgIC8vIHRyeSBldmVyeSA1MDBtcyB1bnRpbCB0aW1lb3V0IGlzIG92ZXJcbiAgICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwodGltZW91dCAvIDUwMCwgNTAwLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0Q29udGV4dCh2aWV3TmFtZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpbml0QVVUICgpIHtcbiAgICAvLyBwb3B1bGF0ZSBhcHBQYWNrYWdlLCBhcHBBY3Rpdml0eSwgYXBwV2FpdFBhY2thZ2UsIGFwcFdhaXRBY3Rpdml0eSxcbiAgICAvLyBhbmQgdGhlIGRldmljZSBiZWluZyB1c2VkXG4gICAgLy8gaW4gdGhlIG9wdHMgYW5kIGNhcHMgKHNvIGl0IGdldHMgYmFjayB0byB0aGUgdXNlciBvbiBzZXNzaW9uIGNyZWF0aW9uKVxuICAgIGxldCBsYXVuY2hJbmZvID0gYXdhaXQgaGVscGVycy5nZXRMYXVuY2hJbmZvKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRzLCBsYXVuY2hJbmZvKTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuY2FwcywgbGF1bmNoSW5mbyk7XG5cbiAgICAvLyBVbmluc3RhbGwgYW55IHVuaW5zdGFsbE90aGVyUGFja2FnZXMgd2hpY2ggd2VyZSBzcGVjaWZpZWQgaW4gY2Fwc1xuICAgIGlmICh0aGlzLm9wdHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcykge1xuICAgICAgaGVscGVycy52YWxpZGF0ZURlc2lyZWRDYXBzKHRoaXMub3B0cyk7XG4gICAgICAvLyBPbmx5IFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQgcGFja2FnZSBpcyB1c2VkIGJ5IFVJQTFcbiAgICAgIGF3YWl0IGhlbHBlcnMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyhcbiAgICAgICAgdGhpcy5hZGIsXG4gICAgICAgIGhlbHBlcnMucGFyc2VBcnJheSh0aGlzLm9wdHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyksXG4gICAgICAgIFtTRVRUSU5HU19IRUxQRVJfUEtHX0lEXVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBJbnN0YWxsIGFueSBcIm90aGVyQXBwc1wiIHRoYXQgd2VyZSBzcGVjaWZpZWQgaW4gY2Fwc1xuICAgIGlmICh0aGlzLm9wdHMub3RoZXJBcHBzKSB7XG4gICAgICBsZXQgb3RoZXJBcHBzO1xuICAgICAgdHJ5IHtcbiAgICAgICAgb3RoZXJBcHBzID0gaGVscGVycy5wYXJzZUFycmF5KHRoaXMub3B0cy5vdGhlckFwcHMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgQ291bGQgbm90IHBhcnNlIFwib3RoZXJBcHBzXCIgY2FwYWJpbGl0eTogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgICBvdGhlckFwcHMgPSBhd2FpdCBCLmFsbChvdGhlckFwcHMubWFwKChhcHApID0+IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCBBUFBfRVhURU5TSU9OKSkpO1xuICAgICAgYXdhaXQgaGVscGVycy5pbnN0YWxsT3RoZXJBcGtzKG90aGVyQXBwcywgdGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgfVxuXG4gICAgLy8gaW5zdGFsbCBhcHBcbiAgICBpZiAoIXRoaXMub3B0cy5hcHApIHtcbiAgICAgIGlmICh0aGlzLm9wdHMuZnVsbFJlc2V0KSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KCdGdWxsIHJlc2V0IHJlcXVpcmVzIGFuIGFwcCBjYXBhYmlsaXR5LCB1c2UgZmFzdFJlc2V0IGlmIGFwcCBpcyBub3QgcHJvdmlkZWQnKTtcbiAgICAgIH1cbiAgICAgIGxvZy5kZWJ1ZygnTm8gYXBwIGNhcGFiaWxpdHkuIEFzc3VtaW5nIGl0IGlzIGFscmVhZHkgb24gdGhlIGRldmljZScpO1xuICAgICAgaWYgKHRoaXMub3B0cy5mYXN0UmVzZXQpIHtcbiAgICAgICAgYXdhaXQgaGVscGVycy5yZXNldEFwcCh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLm9wdHMuc2tpcFVuaW5zdGFsbCkge1xuICAgICAgYXdhaXQgdGhpcy5hZGIudW5pbnN0YWxsQXBrKHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgICB9XG4gICAgYXdhaXQgaGVscGVycy5pbnN0YWxsQXBrKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIGNvbnN0IGFwa1N0cmluZ3NGb3JMYW5ndWFnZSA9IGF3YWl0IGhlbHBlcnMucHVzaFN0cmluZ3ModGhpcy5vcHRzLmxhbmd1YWdlLCB0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICBpZiAodGhpcy5vcHRzLmxhbmd1YWdlKSB7XG4gICAgICB0aGlzLmFwa1N0cmluZ3NbdGhpcy5vcHRzLmxhbmd1YWdlXSA9IGFwa1N0cmluZ3NGb3JMYW5ndWFnZTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIG11c3QgcnVuIGFmdGVyIGluc3RhbGxpbmcgdGhlIGFwaywgb3RoZXJ3aXNlIGl0IHdvdWxkIGNhdXNlIHRoZVxuICAgIC8vIGluc3RhbGwgdG8gZmFpbC4gQW5kIGJlZm9yZSBydW5uaW5nIHRoZSBhcHAuXG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKHRoaXMub3B0cy5zaGFyZWRQcmVmZXJlbmNlcykpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2V0U2hhcmVkUHJlZmVyZW5jZXModGhpcy5vcHRzKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjaGVja0FwcFByZXNlbnQgKCkge1xuICAgIGxvZy5kZWJ1ZygnQ2hlY2tpbmcgd2hldGhlciBhcHAgaXMgYWN0dWFsbHkgcHJlc2VudCcpO1xuICAgIGlmICghKGF3YWl0IGZzLmV4aXN0cyh0aGlzLm9wdHMuYXBwKSkpIHtcbiAgICAgIGxvZy5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgZmluZCBhcHAgYXBrIGF0ICR7dGhpcy5vcHRzLmFwcH1gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjaGVja1BhY2thZ2VQcmVzZW50ICgpIHtcbiAgICBsb2cuZGVidWcoJ0NoZWNraW5nIHdoZXRoZXIgcGFja2FnZSBpcyBwcmVzZW50IG9uIHRoZSBkZXZpY2UnKTtcbiAgICBpZiAoIShhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ3BtJywgJ2xpc3QnLCAncGFja2FnZXMnLCB0aGlzLm9wdHMuYXBwUGFja2FnZV0pKSkge1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBmaW5kIHBhY2thZ2UgJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0gb24gdGhlIGRldmljZWApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNldCBDb21wcmVzc2VkTGF5b3V0SGllcmFyY2h5IG9uIHRoZSBkZXZpY2VcbiAgYXN5bmMgc2V0Q29tcHJlc3NlZExheW91dEhpZXJhcmNoeSAoY29tcHJlc3MpIHtcbiAgICBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdjb21wcmVzc2VkTGF5b3V0SGllcmFyY2h5Jywge2NvbXByZXNzTGF5b3V0OiBjb21wcmVzc30pO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlU2Vzc2lvbiAoKSB7XG4gICAgbG9nLmRlYnVnKCdTaHV0dGluZyBkb3duIEFuZHJvaWQgZHJpdmVyJyk7XG5cbiAgICB0cnkge1xuICAgICAgaWYgKCFfLmlzRW1wdHkodGhpcy5fc2NyZWVuUmVjb3JkaW5nUHJvcGVydGllcykpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zdG9wUmVjb3JkaW5nU2NyZWVuKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuXG4gICAgYXdhaXQgaGVscGVycy5yZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnModGhpcy5zZXJ2ZXIsIHRoaXMuc2Vzc2lvbklkKTtcblxuICAgIGF3YWl0IHRoaXMubW9iaWxlU3RvcFNjcmVlblN0cmVhbWluZygpO1xuXG4gICAgYXdhaXQgc3VwZXIuZGVsZXRlU2Vzc2lvbigpO1xuXG4gICAgaWYgKHRoaXMuYm9vdHN0cmFwKSB7XG4gICAgICAvLyBjZXJ0YWluIGNsZWFudXAgd2Ugb25seSBjYXJlIHRvIGRvIGlmIHRoZSBib290c3RyYXAgd2FzIGV2ZXIgcnVuXG4gICAgICBhd2FpdCB0aGlzLnN0b3BDaHJvbWVkcml2ZXJQcm94aWVzKCk7XG4gICAgICBpZiAodGhpcy5vcHRzLnVuaWNvZGVLZXlib2FyZCAmJiB0aGlzLm9wdHMucmVzZXRLZXlib2FyZCAmJiB0aGlzLmRlZmF1bHRJTUUpIHtcbiAgICAgICAgbG9nLmRlYnVnKGBSZXNldHRpbmcgSU1FIHRvICR7dGhpcy5kZWZhdWx0SU1FfWApO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5zZXRJTUUodGhpcy5kZWZhdWx0SU1FKTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5pc0Nocm9tZVNlc3Npb24gJiYgIXRoaXMub3B0cy5kb250U3RvcEFwcE9uUmVzZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuZm9yY2VTdG9wKHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuYWRiLmdvVG9Ib21lKCk7XG4gICAgICBpZiAodGhpcy5vcHRzLmZ1bGxSZXNldCAmJiAhdGhpcy5vcHRzLnNraXBVbmluc3RhbGwgJiYgIXRoaXMuYXBwT25EZXZpY2UpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIudW5pbnN0YWxsQXBrKHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNodXRkb3duKCk7XG4gICAgICB0aGlzLmJvb3RzdHJhcCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZy5kZWJ1ZyhcIkNhbGxlZCBkZWxldGVTZXNzaW9uIGJ1dCBib290c3RyYXAgd2Fzbid0IGFjdGl2ZVwiKTtcbiAgICB9XG4gICAgLy8gc29tZSBjbGVhbnVwIHdlIHdhbnQgdG8gZG8gcmVnYXJkbGVzcywgaW4gY2FzZSB3ZSBhcmUgc2h1dHRpbmcgZG93blxuICAgIC8vIG1pZC1zdGFydHVwXG4gICAgYXdhaXQgdGhpcy5hZGIuc3RvcExvZ2NhdCgpO1xuICAgIGlmICh0aGlzLnVzZVVubG9ja0hlbHBlckFwcCkge1xuICAgICAgYXdhaXQgdGhpcy5hZGIuZm9yY2VTdG9wKCdpby5hcHBpdW0udW5sb2NrJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLl93YXNXaW5kb3dBbmltYXRpb25EaXNhYmxlZCkge1xuICAgICAgbG9nLmluZm8oJ1Jlc3RvcmluZyB3aW5kb3cgYW5pbWF0aW9uIHN0YXRlJyk7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5zZXRBbmltYXRpb25TdGF0ZSh0cnVlKTtcblxuICAgICAgLy8gVGhpcyB3YXMgbmVjZXNzYXJ5IHRvIGNoYW5nZSBhbmltYXRpb24gc2NhbGUgb3ZlciBBbmRyb2lkIFAuIFdlIG11c3QgcmVzZXQgdGhlIHBvbGljeSBmb3IgdGhlIHNlY3VyaXR5LlxuICAgICAgaWYgKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPj0gMjgpIHtcbiAgICAgICAgbG9nLmluZm8oJ1Jlc3RvcmluZyBoaWRkZW4gYXBpIHBvbGljeSB0byB0aGUgZGV2aWNlIGRlZmF1bHQgY29uZmlndXJhdGlvbicpO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5zZXREZWZhdWx0SGlkZGVuQXBpUG9saWN5KCEhdGhpcy5vcHRzLmlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRzLnJlYm9vdCkge1xuICAgICAgbGV0IGF2ZE5hbWUgPSB0aGlzLm9wdHMuYXZkLnJlcGxhY2UoJ0AnLCAnJyk7XG4gICAgICBsb2cuZGVidWcoYGNsb3NpbmcgZW11bGF0b3IgJyR7YXZkTmFtZX0nYCk7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5raWxsRW11bGF0b3IoYXZkTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2V0U2hhcmVkUHJlZmVyZW5jZXMgKCkge1xuICAgIGxldCBzaGFyZWRQcmVmcyA9IHRoaXMub3B0cy5zaGFyZWRQcmVmZXJlbmNlcztcbiAgICBsb2cuaW5mbygnVHJ5aW5nIHRvIHNldCBzaGFyZWQgcHJlZmVyZW5jZXMnKTtcbiAgICBsZXQgbmFtZSA9IHNoYXJlZFByZWZzLm5hbWU7XG4gICAgaWYgKF8uaXNVbmRlZmluZWQobmFtZSkpIHtcbiAgICAgIGxvZy53YXJuKGBTa2lwcGluZyBzZXR0aW5nIFNoYXJlZCBwcmVmZXJlbmNlcywgbmFtZSBpcyB1bmRlZmluZWQ6ICR7SlNPTi5zdHJpbmdpZnkoc2hhcmVkUHJlZnMpfWApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBsZXQgcmVtb3RlUGF0aCA9IGAvZGF0YS9kYXRhLyR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9L3NoYXJlZF9wcmVmc2A7XG4gICAgbGV0IHJlbW90ZUZpbGUgPSBgJHtyZW1vdGVQYXRofS8ke25hbWV9LnhtbGA7XG4gICAgbGV0IGxvY2FsUGF0aCA9IGAvdG1wLyR7bmFtZX0ueG1sYDtcbiAgICBsZXQgYnVpbGRlciA9IHRoaXMuZ2V0UHJlZnNCdWlsZGVyKCk7XG4gICAgYnVpbGRlci5idWlsZChzaGFyZWRQcmVmcy5wcmVmcyk7XG4gICAgbG9nLmluZm8oYENyZWF0aW5nIHRlbXBvcmFyeSBzaGFyZWQgcHJlZmVyZW5jZXM6ICR7bG9jYWxQYXRofWApO1xuICAgIGJ1aWxkZXIudG9GaWxlKGxvY2FsUGF0aCk7XG4gICAgbG9nLmluZm8oYENyZWF0aW5nIHNoYXJlZF9wcmVmcyByZW1vdGUgZm9sZGVyOiAke3JlbW90ZVBhdGh9YCk7XG4gICAgYXdhaXQgdGhpcy5hZGIuc2hlbGwoWydta2RpcicsICctcCcsIHJlbW90ZVBhdGhdKTtcbiAgICBsb2cuaW5mbyhgUHVzaGluZyBzaGFyZWRfcHJlZnMgdG8gJHtyZW1vdGVGaWxlfWApO1xuICAgIGF3YWl0IHRoaXMuYWRiLnB1c2gobG9jYWxQYXRoLCByZW1vdGVGaWxlKTtcbiAgICB0cnkge1xuICAgICAgbG9nLmluZm8oYFRyeWluZyB0byByZW1vdmUgc2hhcmVkIHByZWZlcmVuY2VzIHRlbXBvcmFyeSBmaWxlYCk7XG4gICAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKGxvY2FsUGF0aCkpIHtcbiAgICAgICAgYXdhaXQgZnMudW5saW5rKGxvY2FsUGF0aCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLndhcm4oYEVycm9yIHRyeWluZyB0byByZW1vdmUgdGVtcG9yYXJ5IGZpbGUgJHtsb2NhbFBhdGh9YCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZ2V0UHJlZnNCdWlsZGVyICgpIHtcbiAgICAvKiBBZGQgdGhpcyBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IFNoYXJlZFByZWZzQnVpbGRlciBpbnN0ZWFkIG9mXG4gICAgICogZGlyZWN0bHkgY3JlYXRpbmcgdGhlIG9iamVjdCBvbiBzZXRTaGFyZWRQcmVmZXJlbmNlcyBmb3IgdGVzdGluZyBwdXJwb3Nlc1xuICAgICovXG4gICAgcmV0dXJuIG5ldyBTaGFyZWRQcmVmc0J1aWxkZXIoKTtcbiAgfVxuXG4gIHZhbGlkYXRlRGVzaXJlZENhcHMgKGNhcHMpIHtcbiAgICBpZiAoIXN1cGVyLnZhbGlkYXRlRGVzaXJlZENhcHMoY2FwcykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCghY2Fwcy5icm93c2VyTmFtZSB8fCAhaGVscGVycy5pc0Nocm9tZUJyb3dzZXIoY2Fwcy5icm93c2VyTmFtZSkpICYmICFjYXBzLmFwcCAmJiAhY2Fwcy5hcHBQYWNrYWdlKSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdygnVGhlIGRlc2lyZWQgY2FwYWJpbGl0aWVzIG11c3QgaW5jbHVkZSBlaXRoZXIgYW4gYXBwLCBhcHBQYWNrYWdlIG9yIGJyb3dzZXJOYW1lJyk7XG4gICAgfVxuICAgIHJldHVybiBoZWxwZXJzLnZhbGlkYXRlRGVzaXJlZENhcHMoY2Fwcyk7XG4gIH1cblxuICBwcm94eUFjdGl2ZSAoc2Vzc2lvbklkKSB7XG4gICAgc3VwZXIucHJveHlBY3RpdmUoc2Vzc2lvbklkKTtcblxuICAgIHJldHVybiB0aGlzLmp3cFByb3h5QWN0aXZlO1xuICB9XG5cbiAgZ2V0UHJveHlBdm9pZExpc3QgKHNlc3Npb25JZCkge1xuICAgIHN1cGVyLmdldFByb3h5QXZvaWRMaXN0KHNlc3Npb25JZCk7XG5cbiAgICByZXR1cm4gdGhpcy5qd3BQcm94eUF2b2lkO1xuICB9XG5cbiAgY2FuUHJveHkgKHNlc3Npb25JZCkge1xuICAgIHN1cGVyLmNhblByb3h5KHNlc3Npb25JZCk7XG5cbiAgICAvLyB0aGlzIHdpbGwgY2hhbmdlIGRlcGVuZGluZyBvbiBDaHJvbWVEcml2ZXIgc3RhdHVzXG4gICAgcmV0dXJuIF8uaXNGdW5jdGlvbih0aGlzLnByb3h5UmVxUmVzKTtcbiAgfVxufVxuXG5leHBvcnQgeyBBbmRyb2lkRHJpdmVyIH07XG5leHBvcnQgZGVmYXVsdCBBbmRyb2lkRHJpdmVyO1xuIl0sImZpbGUiOiJsaWIvZHJpdmVyLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
515
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXIuanMiXSwibmFtZXMiOlsiQVBQX0VYVEVOU0lPTiIsIkRFVklDRV9QT1JUIiwiTk9fUFJPWFkiLCJSZWdFeHAiLCJBbmRyb2lkRHJpdmVyIiwiQmFzZURyaXZlciIsImNvbnN0cnVjdG9yIiwib3B0cyIsInNob3VsZFZhbGlkYXRlQ2FwcyIsImxvY2F0b3JTdHJhdGVnaWVzIiwiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwiZGVzaXJlZENvbnN0cmFpbnRzIiwic2Vzc2lvbkNocm9tZWRyaXZlcnMiLCJqd3BQcm94eUFjdGl2ZSIsImp3cFByb3h5QXZvaWQiLCJfIiwiY2xvbmUiLCJzZXR0aW5ncyIsIkRldmljZVNldHRpbmdzIiwiaWdub3JlVW5pbXBvcnRhbnRWaWV3cyIsIm9uU2V0dGluZ3NVcGRhdGUiLCJiaW5kIiwiY2hyb21lZHJpdmVyIiwiYXBrU3RyaW5ncyIsInVubG9ja2VyIiwiaGVscGVycyIsImNtZCIsImZuIiwidG9QYWlycyIsImNvbW1hbmRzIiwicHJvdG90eXBlIiwiY3VyQ29udGV4dCIsImRlZmF1bHRDb250ZXh0TmFtZSIsImNyZWF0ZVNlc3Npb24iLCJhcmdzIiwic2Vzc2lvbklkIiwiY2FwcyIsInNlcnZlckRldGFpbHMiLCJwbGF0Zm9ybSIsIndlYlN0b3JhZ2VFbmFibGVkIiwidGFrZXNTY3JlZW5zaG90IiwiamF2YXNjcmlwdEVuYWJsZWQiLCJkYXRhYmFzZUVuYWJsZWQiLCJuZXR3b3JrQ29ubmVjdGlvbkVuYWJsZWQiLCJsb2NhdGlvbkNvbnRleHRFbmFibGVkIiwid2FybmluZ3MiLCJkZXNpcmVkIiwiT2JqZWN0IiwiYXNzaWduIiwiZGVmYXVsdE9wdHMiLCJhY3Rpb24iLCJjYXRlZ29yeSIsImZsYWdzIiwiZGlzYWJsZUFuZHJvaWRXYXRjaGVycyIsInRtcERpciIsInRlbXBEaXIiLCJzdGF0aWNEaXIiLCJmdWxsUmVzZXQiLCJhdXRvTGF1bmNoIiwiYWRiUG9ydCIsIkRFRkFVTFRfQURCX1BPUlQiLCJib290c3RyYXBQb3J0IiwiYW5kcm9pZEluc3RhbGxUaW1lb3V0IiwiZGVmYXVsdHMiLCJ1c2VVbmxvY2tIZWxwZXJBcHAiLCJpc1VuZGVmaW5lZCIsInVubG9ja1R5cGUiLCJub1Jlc2V0IiwiZmFzdFJlc2V0Iiwic2tpcFVuaW5zdGFsbCIsImlzQ2hyb21lU2Vzc2lvbiIsImFkanVzdEJyb3dzZXJTZXNzaW9uQ2FwcyIsIm5hdGl2ZVdlYlNjcmVlbnNob3QiLCJwdXNoIiwicmVib290Iiwic2V0QXZkRnJvbUNhcGFiaWxpdGllcyIsInVkaWQiLCJlbVBvcnQiLCJnZXREZXZpY2VJbmZvRnJvbUNhcHMiLCJhZGIiLCJjcmVhdGVBREIiLCJzdXBwcmVzc0tpbGxTZXJ2ZXIiLCJyZW1vdGVBZGJIb3N0IiwiY2xlYXJEZXZpY2VMb2dzT25TdGFydCIsImFkYkV4ZWNUaW1lb3V0IiwiYWxsb3dPZmZsaW5lRGV2aWNlcyIsImdldEFwaUxldmVsIiwibG9nIiwid2FybiIsImlzUGFja2FnZU9yQnVuZGxlIiwiYXBwIiwiYXBwUGFja2FnZSIsImNvbmZpZ3VyZUFwcCIsImNoZWNrQXBwUHJlc2VudCIsImFwcE9uRGV2aWNlIiwiaW5mbyIsImNoZWNrUGFja2FnZVByZXNlbnQiLCJ1dGlsIiwiaGFzVmFsdWUiLCJuZXR3b3JrU3BlZWQiLCJpc0VtdWxhdG9yIiwiZ3BzRW5hYmxlZCIsInRvZ2dsZUdQU0xvY2F0aW9uUHJvdmlkZXIiLCJzdGFydEFuZHJvaWRTZXNzaW9uIiwiZSIsImRlbGV0ZVNlc3Npb24iLCJpZ24iLCJhdmQiLCJkZXZpY2VOYW1lIiwiZXJyb3JBbmRUaHJvdyIsInBsYXRmb3JtVmVyc2lvbiIsImF2ZERldmljZSIsInJlcGxhY2UiLCJpc0Nocm9tZUJyb3dzZXIiLCJicm93c2VyTmFtZSIsImtleSIsInZhbHVlIiwic2V0Q29tcHJlc3NlZExheW91dEhpZXJhcmNoeSIsImRlZmF1bHRJTUUiLCJpbml0RGV2aWNlIiwiY3VyRGV2aWNlSWQiLCJkZXZpY2VVRElEIiwiZ2V0UGxhdGZvcm1WZXJzaW9uIiwiZGV2aWNlU2NyZWVuU2l6ZSIsImdldFNjcmVlblNpemUiLCJkZXZpY2VNb2RlbCIsImdldE1vZGVsIiwiZGV2aWNlTWFudWZhY3R1cmVyIiwiZ2V0TWFudWZhY3R1cmVyIiwiZGlzYWJsZVdpbmRvd0FuaW1hdGlvbiIsImlzQW5pbWF0aW9uT24iLCJzZXRIaWRkZW5BcGlQb2xpY3kiLCJpZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvciIsInNldEFuaW1hdGlvblN0YXRlIiwiX3dhc1dpbmRvd0FuaW1hdGlvbkRpc2FibGVkIiwiaW5pdEFVVCIsImJvb3RzdHJhcCIsIndlYnNvY2tldCIsInN0YXJ0IiwiYWNjZXB0U3NsQ2VydHMiLCJvblVuZXhwZWN0ZWRTaHV0ZG93biIsImNhdGNoIiwiZXJyIiwiaWdub3JlVW5leHBlY3RlZFNodXRkb3duIiwic3RhcnRVbmV4cGVjdGVkU2h1dGRvd24iLCJza2lwVW5sb2NrIiwidW5sb2NrIiwidXBkYXRlIiwic3RhcnRDaHJvbWVTZXNzaW9uIiwic3RhcnRBVVQiLCJvcmllbnRhdGlvbiIsImRlYnVnIiwic2V0T3JpZW50YXRpb24iLCJpbml0QXV0b1dlYnZpZXciLCJhdXRvV2VidmlldyIsInZpZXdOYW1lIiwiZGVmYXVsdFdlYnZpZXdOYW1lIiwidGltZW91dCIsImF1dG9XZWJ2aWV3VGltZW91dCIsInNldENvbnRleHQiLCJsYXVuY2hJbmZvIiwiZ2V0TGF1bmNoSW5mbyIsInVuaW5zdGFsbE90aGVyUGFja2FnZXMiLCJ2YWxpZGF0ZURlc2lyZWRDYXBzIiwicGFyc2VBcnJheSIsIlNFVFRJTkdTX0hFTFBFUl9QS0dfSUQiLCJvdGhlckFwcHMiLCJtZXNzYWdlIiwiQiIsImFsbCIsIm1hcCIsImluc3RhbGxPdGhlckFwa3MiLCJyZXNldEFwcCIsInVuaW5zdGFsbEFwayIsImluc3RhbGxBcGsiLCJhcGtTdHJpbmdzRm9yTGFuZ3VhZ2UiLCJwdXNoU3RyaW5ncyIsImxhbmd1YWdlIiwic2hhcmVkUHJlZmVyZW5jZXMiLCJzZXRTaGFyZWRQcmVmZXJlbmNlcyIsImZzIiwiZXhpc3RzIiwic2hlbGwiLCJjb21wcmVzcyIsInNlbmRBY3Rpb24iLCJjb21wcmVzc0xheW91dCIsImlzRW1wdHkiLCJfc2NyZWVuUmVjb3JkaW5nUHJvcGVydGllcyIsInN0b3BSZWNvcmRpbmdTY3JlZW4iLCJyZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMiLCJzZXJ2ZXIiLCJtb2JpbGVTdG9wU2NyZWVuU3RyZWFtaW5nIiwic3RvcENocm9tZWRyaXZlclByb3hpZXMiLCJ1bmljb2RlS2V5Ym9hcmQiLCJyZXNldEtleWJvYXJkIiwic2V0SU1FIiwiZG9udFN0b3BBcHBPblJlc2V0IiwiZm9yY2VTdG9wIiwiZ29Ub0hvbWUiLCJzaHV0ZG93biIsInN0b3BMb2djYXQiLCJzZXREZWZhdWx0SGlkZGVuQXBpUG9saWN5IiwiYXZkTmFtZSIsImtpbGxFbXVsYXRvciIsInNoYXJlZFByZWZzIiwibmFtZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZW1vdGVQYXRoIiwicmVtb3RlRmlsZSIsImxvY2FsUGF0aCIsImJ1aWxkZXIiLCJnZXRQcmVmc0J1aWxkZXIiLCJidWlsZCIsInByZWZzIiwidG9GaWxlIiwidW5saW5rIiwiU2hhcmVkUHJlZnNCdWlsZGVyIiwicHJveHlBY3RpdmUiLCJnZXRQcm94eUF2b2lkTGlzdCIsImNhblByb3h5IiwiaXNGdW5jdGlvbiIsInByb3h5UmVxUmVzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUlBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLGFBQWEsR0FBRyxNQUF0QjtBQUNBLE1BQU1DLFdBQVcsR0FBRyxJQUFwQjtBQUlBLE1BQU1DLFFBQVEsR0FBRyxDQUNmLENBQUMsTUFBRCxFQUFTLElBQUlDLE1BQUosQ0FBVyx5QkFBWCxDQUFULENBRGUsRUFFZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcseUJBQVgsQ0FBUixDQUZlLEVBR2Ys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ZVNldHRpbmdzIH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgZGVzaXJlZENvbnN0cmFpbnRzIGZyb20gJy4vZGVzaXJlZC1jYXBzJztcbmltcG9ydCBjb21tYW5kcyBmcm9tICcuL2NvbW1hbmRzL2luZGV4JztcbmltcG9ydCB7XG4gIGhlbHBlcnMsIGVuc3VyZU5ldHdvcmtTcGVlZCxcbiAgU0VUVElOR1NfSEVMUEVSX1BLR19JRCxcbn0gZnJvbSAnLi9hbmRyb2lkLWhlbHBlcnMnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgREVGQVVMVF9BREJfUE9SVCB9IGZyb20gJ2FwcGl1bS1hZGInO1xuaW1wb3J0IHsgZnMsIHRlbXBEaXIsIHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IFNoYXJlZFByZWZzQnVpbGRlciB9IGZyb20gJ3NoYXJlZC1wcmVmZXJlbmNlcy1idWlsZGVyJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcblxuY29uc3QgQVBQX0VYVEVOU0lPTiA9ICcuYXBrJztcbmNvbnN0IERFVklDRV9QT1JUID0gNDcyNDtcblxuLy8gVGhpcyBpcyBhIHNldCBvZiBtZXRob2RzIGFuZCBwYXRocyB0aGF0IHdlIG5ldmVyIHdhbnQgdG8gcHJveHkgdG9cbi8vIENocm9tZWRyaXZlclxuY29uc3QgTk9fUFJPWFkgPSBbXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90b3VjaC9wZXJmb3JtJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdG91Y2gvbXVsdGkvcGVyZm9ybScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL29yaWVudGF0aW9uJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9vcmllbnRhdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlL3N5bmMnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL25ldHdvcmtfY29ubmVjdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL25ldHdvcmtfY29ubmVjdGlvbicpXSxcbl07XG5cbmNsYXNzIEFuZHJvaWREcml2ZXIgZXh0ZW5kcyBCYXNlRHJpdmVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSwgc2hvdWxkVmFsaWRhdGVDYXBzID0gdHJ1ZSkge1xuICAgIHN1cGVyKG9wdHMsIHNob3VsZFZhbGlkYXRlQ2Fwcyk7XG5cbiAgICB0aGlzLmxvY2F0b3JTdHJhdGVnaWVzID0gW1xuICAgICAgJ3hwYXRoJyxcbiAgICAgICdpZCcsXG4gICAgICAnY2xhc3MgbmFtZScsXG4gICAgICAnYWNjZXNzaWJpbGl0eSBpZCcsXG4gICAgICAnLWFuZHJvaWQgdWlhdXRvbWF0b3InXG4gICAgXTtcbiAgICB0aGlzLmRlc2lyZWRDYXBDb25zdHJhaW50cyA9IGRlc2lyZWRDb25zdHJhaW50cztcbiAgICB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzID0ge307XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuandwUHJveHlBdm9pZCA9IF8uY2xvbmUoTk9fUFJPWFkpO1xuICAgIHRoaXMuc2V0dGluZ3MgPSBuZXcgRGV2aWNlU2V0dGluZ3Moe2lnbm9yZVVuaW1wb3J0YW50Vmlld3M6IGZhbHNlfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25TZXR0aW5nc1VwZGF0ZS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLmNocm9tZWRyaXZlciA9IG51bGw7XG4gICAgdGhpcy5hcGtTdHJpbmdzID0ge307XG4gICAgdGhpcy51bmxvY2tlciA9IGhlbHBlcnMudW5sb2NrZXI7XG5cbiAgICBmb3IgKGxldCBbY21kLCBmbl0gb2YgXy50b1BhaXJzKGNvbW1hbmRzKSkge1xuICAgICAgQW5kcm9pZERyaXZlci5wcm90b3R5cGVbY21kXSA9IGZuO1xuICAgIH1cblxuICAgIC8vIG5lZWRzIHRvIGJlIGFmdGVyIHRoZSBsaW5lIHdoaWNoIGFzc2lnbnMgY29tbWFuZHMgdG8gQW5kcm9pZERyaXZlci5wcm90b3R5cGUsIHNvIHRoYXQgYHRoaXMuZGVmYXVsdENvbnRleHROYW1lYCBpcyBkZWZpbmVkLlxuICAgIHRoaXMuY3VyQ29udGV4dCA9IHRoaXMuZGVmYXVsdENvbnRleHROYW1lKCk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVTZXNzaW9uICguLi5hcmdzKSB7XG4gICAgLy8gdGhlIHdob2xlIGNyZWF0ZVNlc3Npb24gZmxvdyBpcyBzdXJyb3VuZGVkIGluIGEgdHJ5LWNhdGNoIHN0YXRlbWVudFxuICAgIC8vIGlmIGNyZWF0aW5nIGEgc2Vzc2lvbiBmYWlscyBhdCBhbnkgcG9pbnQsIHdlIHRlYXJkb3duIGV2ZXJ5dGhpbmcgd2VcbiAgICAvLyBzZXQgdXAgYmVmb3JlIHRocm93aW5nIHRoZSBlcnJvci5cbiAgICB0cnkge1xuICAgICAgbGV0IFtzZXNzaW9uSWQsIGNhcHNdID0gYXdhaXQgc3VwZXIuY3JlYXRlU2Vzc2lvbiguLi5hcmdzKTtcblxuICAgICAgbGV0IHNlcnZlckRldGFpbHMgPSB7XG4gICAgICAgIHBsYXRmb3JtOiAnTElOVVgnLFxuICAgICAgICB3ZWJTdG9yYWdlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHRha2VzU2NyZWVuc2hvdDogdHJ1ZSxcbiAgICAgICAgamF2YXNjcmlwdEVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGRhdGFiYXNlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIG5ldHdvcmtDb25uZWN0aW9uRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgbG9jYXRpb25Db250ZXh0RW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHdhcm5pbmdzOiB7fSxcbiAgICAgICAgZGVzaXJlZDogdGhpcy5jYXBzXG4gICAgICB9O1xuXG4gICAgICB0aGlzLmNhcHMgPSBPYmplY3QuYXNzaWduKHNlcnZlckRldGFpbHMsIHRoaXMuY2Fwcyk7XG5cbiAgICAgIC8vIGFzc2lnbmluZyBkZWZhdWx0c1xuICAgICAgbGV0IGRlZmF1bHRPcHRzID0ge1xuICAgICAgICBhY3Rpb246ICdhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTicsXG4gICAgICAgIGNhdGVnb3J5OiAnYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVInLFxuICAgICAgICBmbGFnczogJzB4MTAyMDAwMDAnLFxuICAgICAgICBkaXNhYmxlQW5kcm9pZFdhdGNoZXJzOiBmYWxzZSxcbiAgICAgICAgdG1wRGlyOiBhd2FpdCB0ZW1wRGlyLnN0YXRpY0RpcigpLFxuICAgICAgICBmdWxsUmVzZXQ6IGZhbHNlLFxuICAgICAgICBhdXRvTGF1bmNoOiB0cnVlLFxuICAgICAgICBhZGJQb3J0OiBERUZBVUxUX0FEQl9QT1JULFxuICAgICAgICBib290c3RyYXBQb3J0OiBERVZJQ0VfUE9SVCxcbiAgICAgICAgYW5kcm9pZEluc3RhbGxUaW1lb3V0OiA5MDAwMCxcbiAgICAgIH07XG4gICAgICBfLmRlZmF1bHRzKHRoaXMub3B0cywgZGVmYXVsdE9wdHMpO1xuICAgICAgdGhpcy51c2VVbmxvY2tIZWxwZXJBcHAgPSBfLmlzVW5kZWZpbmVkKHRoaXMuY2Fwcy51bmxvY2tUeXBlKTtcblxuICAgICAgLy8gbm90IHVzZXIgdmlzaWJsZSB2aWEgY2Fwc1xuICAgICAgaWYgKHRoaXMub3B0cy5ub1Jlc2V0ID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMub3B0cy5mdWxsUmVzZXQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdHMuZnVsbFJlc2V0ID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMub3B0cy5ub1Jlc2V0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLm9wdHMuZmFzdFJlc2V0ID0gIXRoaXMub3B0cy5mdWxsUmVzZXQgJiYgIXRoaXMub3B0cy5ub1Jlc2V0O1xuICAgICAgdGhpcy5vcHRzLnNraXBVbmluc3RhbGwgPSB0aGlzLm9wdHMuZmFzdFJlc2V0IHx8IHRoaXMub3B0cy5ub1Jlc2V0O1xuXG4gICAgICBpZiAodGhpcy5pc0Nocm9tZVNlc3Npb24pIHtcbiAgICAgICAgaGVscGVycy5hZGp1c3RCcm93c2VyU2Vzc2lvbkNhcHModGhpcy5vcHRzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5uYXRpdmVXZWJTY3JlZW5zaG90KSB7XG4gICAgICAgIHRoaXMuandwUHJveHlBdm9pZC5wdXNoKFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3NjcmVlbnNob3QnKV0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRzLnJlYm9vdCkge1xuICAgICAgICB0aGlzLnNldEF2ZEZyb21DYXBhYmlsaXRpZXMoY2Fwcyk7XG4gICAgICB9XG5cbiAgICAgIC8vIGdldCBkZXZpY2UgdWRpZCBmb3IgdGhpcyBzZXNzaW9uXG4gICAgICBsZXQge3VkaWQsIGVtUG9ydH0gPSBhd2FpdCBoZWxwZXJzLmdldERldmljZUluZm9Gcm9tQ2Fwcyh0aGlzLm9wdHMpO1xuICAgICAgdGhpcy5vcHRzLnVkaWQgPSB1ZGlkO1xuICAgICAgdGhpcy5vcHRzLmVtUG9ydCA9IGVtUG9ydDtcblxuICAgICAgLy8gc2V0IHVwIGFuIGluc3RhbmNlIG9mIEFEQlxuICAgICAgdGhpcy5hZGIgPSBhd2FpdCBoZWxwZXJzLmNyZWF0ZUFEQih7XG4gICAgICAgIHVkaWQ6IHRoaXMub3B0cy51ZGlkLFxuICAgICAgICBlbVBvcnQ6IHRoaXMub3B0cy5lbVBvcnQsXG4gICAgICAgIGFkYlBvcnQ6IHRoaXMub3B0cy5hZGJQb3J0LFxuICAgICAgICBzdXBwcmVzc0tpbGxTZXJ2ZXI6IHRoaXMub3B0cy5zdXBwcmVzc0tpbGxTZXJ2ZXIsXG4gICAgICAgIHJlbW90ZUFkYkhvc3Q6IHRoaXMub3B0cy5yZW1vdGVBZGJIb3N0LFxuICAgICAgICBjbGVhckRldmljZUxvZ3NPblN0YXJ0OiB0aGlzLm9wdHMuY2xlYXJEZXZpY2VMb2dzT25TdGFydCxcbiAgICAgICAgYWRiRXhlY1RpbWVvdXQ6IHRoaXMub3B0cy5hZGJFeGVjVGltZW91dCxcbiAgICAgICAgYWxsb3dPZmZsaW5lRGV2aWNlczogdGhpcy5vcHRzLmFsbG93T2ZmbGluZURldmljZXMsXG4gICAgICB9KTtcblxuICAgICAgaWYgKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPj0gMjMpIHtcbiAgICAgICAgbG9nLndhcm4oXCJDb25zaWRlciBzZXR0aW5nICdhdXRvbWF0aW9uTmFtZScgY2FwYWJpbGl0eSB0byBcIiArXG4gICAgICAgICAgXCIndWlhdXRvbWF0b3IyJyBvbiBBbmRyb2lkID49IDYsIHNpbmNlIFVJQXV0b21hdG9yIGZyYW1ld29yayBcIiArXG4gICAgICAgICAgJ2lzIG5vdCBtYWludGFpbmVkIGFueW1vcmUgYnkgdGhlIE9TIHZlbmRvci4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuaGVscGVycy5pc1BhY2thZ2VPckJ1bmRsZSh0aGlzLm9wdHMuYXBwKSkge1xuICAgICAgICAvLyB1c2VyIHByb3ZpZGVkIHBhY2thZ2UgaW5zdGVhZCBvZiBhcHAgZm9yICdhcHAnIGNhcGFiaWxpdHksIG1hc3NhZ2Ugb3B0aW9uc1xuICAgICAgICB0aGlzLm9wdHMuYXBwUGFja2FnZSA9IHRoaXMub3B0cy5hcHA7XG4gICAgICAgIHRoaXMub3B0cy5hcHAgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRzLmFwcCkge1xuICAgICAgICAvLyBmaW5kIGFuZCBjb3B5LCBvciBkb3dubG9hZCBhbmQgdW56aXAgYW4gYXBwIHVybCBvciBwYXRoXG4gICAgICAgIHRoaXMub3B0cy5hcHAgPSBhd2FpdCB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKHRoaXMub3B0cy5hcHAsIEFQUF9FWFRFTlNJT04pO1xuICAgICAgICBhd2FpdCB0aGlzLmNoZWNrQXBwUHJlc2VudCgpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmFwcE9uRGV2aWNlKSB7XG4gICAgICAgIC8vIHRoZSBhcHAgaXNuJ3QgYW4gYWN0dWFsIGFwcCBmaWxlIGJ1dCByYXRoZXIgc29tZXRoaW5nIHdlIHdhbnQgdG9cbiAgICAgICAgLy8gYXNzdW1lIGlzIG9uIHRoZSBkZXZpY2UgYW5kIGp1c3QgbGF1bmNoIHZpYSB0aGUgYXBwUGFja2FnZVxuICAgICAgICBsb2cuaW5mbyhgQXBwIGZpbGUgd2FzIG5vdCBsaXN0ZWQsIGluc3RlYWQgd2UncmUgZ29pbmcgdG8gcnVuIGAgK1xuICAgICAgICAgIGAke3RoaXMub3B0cy5hcHBQYWNrYWdlfSBkaXJlY3RseSBvbiB0aGUgZGV2aWNlYCk7XG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tQYWNrYWdlUHJlc2VudCgpO1xuICAgICAgfVxuXG4gICAgICAvLyBTb21lIGNsb3VkIHNlcnZpY2VzIHVzaW5nIGFwcGl1bSBsYXVuY2ggdGhlIGF2ZCB0aGVtc2VsdmVzLCBzbyB3ZSBlbnN1cmUgbmV0c3BlZWRcbiAgICAgIC8vIGlzIHNldCBmb3IgZW11bGF0b3JzIGJ5IGNhbGxpbmcgYWRiLm5ldHdvcmtTcGVlZCBiZWZvcmUgcnVubmluZyB0aGUgYXBwXG4gICAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMubmV0d29ya1NwZWVkKSkge1xuICAgICAgICBpZiAoIXRoaXMuaXNFbXVsYXRvcigpKSB7XG4gICAgICAgICAgbG9nLndhcm4oJ1NvcnJ5LCBuZXR3b3JrU3BlZWQgY2FwYWJpbGl0eSBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgbmV0d29ya1NwZWVkID0gZW5zdXJlTmV0d29ya1NwZWVkKHRoaXMuYWRiLCB0aGlzLm9wdHMubmV0d29ya1NwZWVkKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkYi5uZXR3b3JrU3BlZWQobmV0d29ya1NwZWVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gY2hlY2sgaWYgd2UgaGF2ZSB0byBlbmFibGUvZGlzYWJsZSBncHMgYmVmb3JlIHJ1bm5pbmcgdGhlIGFwcGxpY2F0aW9uXG4gICAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMuZ3BzRW5hYmxlZCkpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNFbXVsYXRvcigpKSB7XG4gICAgICAgICAgbG9nLmluZm8oYFRyeWluZyB0byAke3RoaXMub3B0cy5ncHNFbmFibGVkID8gJ2VuYWJsZScgOiAnZGlzYWJsZSd9IGdwcyBsb2NhdGlvbiBwcm92aWRlcmApO1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLnRvZ2dsZUdQU0xvY2F0aW9uUHJvdmlkZXIodGhpcy5vcHRzLmdwc0VuYWJsZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZy53YXJuKCdTb3JyeSEgZ3BzRW5hYmxlZCBjYXBhYmlsaXR5IGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnMnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0QW5kcm9pZFNlc3Npb24odGhpcy5vcHRzKTtcbiAgICAgIHJldHVybiBbc2Vzc2lvbklkLCB0aGlzLmNhcHNdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGlnbm9yaW5nIGRlbGV0ZSBzZXNzaW9uIGV4Y2VwdGlvbiBpZiBhbnkgYW5kIHRocm93IHRoZSByZWFsIGVycm9yXG4gICAgICAvLyB0aGF0IGhhcHBlbmVkIHdoaWxlIGNyZWF0aW5nIHRoZSBzZXNzaW9uLlxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKCk7XG4gICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIGlzRW11bGF0b3IgKCkge1xuICAgIHJldHVybiBoZWxwZXJzLmlzRW11bGF0b3IodGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gIH1cblxuICBzZXRBdmRGcm9tQ2FwYWJpbGl0aWVzIChjYXBzKSB7XG4gICAgaWYgKHRoaXMub3B0cy5hdmQpIHtcbiAgICAgIGxvZy5pbmZvKCdhdmQgbmFtZSBkZWZpbmVkLCBpZ25vcmluZyBkZXZpY2UgbmFtZSBhbmQgcGxhdGZvcm0gdmVyc2lvbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWNhcHMuZGV2aWNlTmFtZSkge1xuICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdygnYXZkIG9yIGRldmljZU5hbWUgc2hvdWxkIGJlIHNwZWNpZmllZCB3aGVuIHJlYm9vdCBvcHRpb24gaXMgZW5hYmxlcycpO1xuICAgICAgfVxuICAgICAgaWYgKCFjYXBzLnBsYXRmb3JtVmVyc2lvbikge1xuICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdygnYXZkIG9yIHBsYXRmb3JtVmVyc2lvbiBzaG91bGQgYmUgc3BlY2lmaWVkIHdoZW4gcmVib290IG9wdGlvbiBpcyBlbmFibGVkJyk7XG4gICAgICB9XG4gICAgICBsZXQgYXZkRGV2aWNlID0gY2Fwcy5kZXZpY2VOYW1lLnJlcGxhY2UoL1teYS16QS1aMC05Xy5dL2csICctJyk7XG4gICAgICB0aGlzLm9wdHMuYXZkID0gYCR7YXZkRGV2aWNlfV9fJHtjYXBzLnBsYXRmb3JtVmVyc2lvbn1gO1xuICAgIH1cbiAgfVxuXG4gIGdldCBhcHBPbkRldmljZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5pc1BhY2thZ2VPckJ1bmRsZSh0aGlzLm9wdHMuYXBwKSB8fCAoIXRoaXMub3B0cy5hcHAgJiZcbiAgICAgICAgICAgdGhpcy5oZWxwZXJzLmlzUGFja2FnZU9yQnVuZGxlKHRoaXMub3B0cy5hcHBQYWNrYWdlKSk7XG4gIH1cblxuICBnZXQgaXNDaHJvbWVTZXNzaW9uICgpIHtcbiAgICByZXR1cm4gaGVscGVycy5pc0Nocm9tZUJyb3dzZXIodGhpcy5vcHRzLmJyb3dzZXJOYW1lKTtcbiAgfVxuXG4gIGFzeW5jIG9uU2V0dGluZ3NVcGRhdGUgKGtleSwgdmFsdWUpIHtcbiAgICBpZiAoa2V5ID09PSAnaWdub3JlVW5pbXBvcnRhbnRWaWV3cycpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2V0Q29tcHJlc3NlZExheW91dEhpZXJhcmNoeSh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnRBbmRyb2lkU2Vzc2lvbiAoKSB7XG4gICAgbG9nLmluZm8oYFN0YXJ0aW5nIEFuZHJvaWQgc2Vzc2lvbmApO1xuICAgIC8vIHNldCB1cCB0aGUgZGV2aWNlIHRvIHJ1biBvbiAocmVhbCBvciBlbXVsYXRvciwgZXRjKVxuICAgIHRoaXMuZGVmYXVsdElNRSA9IGF3YWl0IGhlbHBlcnMuaW5pdERldmljZSh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcblxuICAgIC8vIHNldCBhY3R1YWwgZGV2aWNlIG5hbWUsIHVkaWQsIHBsYXRmb3JtIHZlcnNpb24sIHNjcmVlbiBzaXplLCBtb2RlbCBhbmQgbWFudWZhY3R1cmVyIGRldGFpbHMuXG4gICAgdGhpcy5jYXBzLmRldmljZU5hbWUgPSB0aGlzLmFkYi5jdXJEZXZpY2VJZDtcbiAgICB0aGlzLmNhcHMuZGV2aWNlVURJRCA9IHRoaXMub3B0cy51ZGlkO1xuICAgIHRoaXMuY2Fwcy5wbGF0Zm9ybVZlcnNpb24gPSBhd2FpdCB0aGlzLmFkYi5nZXRQbGF0Zm9ybVZlcnNpb24oKTtcbiAgICB0aGlzLmNhcHMuZGV2aWNlU2NyZWVuU2l6ZSA9IGF3YWl0IHRoaXMuYWRiLmdldFNjcmVlblNpemUoKTtcbiAgICB0aGlzLmNhcHMuZGV2aWNlTW9kZWwgPSBhd2FpdCB0aGlzLmFkYi5nZXRNb2RlbCgpO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VNYW51ZmFjdHVyZXIgPSBhd2FpdCB0aGlzLmFkYi5nZXRNYW51ZmFjdHVyZXIoKTtcblxuICAgIGlmICh0aGlzLm9wdHMuZGlzYWJsZVdpbmRvd0FuaW1hdGlvbikge1xuICAgICAgaWYgKGF3YWl0IHRoaXMuYWRiLmlzQW5pbWF0aW9uT24oKSkge1xuICAgICAgICBpZiAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA+PSAyOCkgeyAvLyBBUEkgbGV2ZWwgMjggaXMgQW5kcm9pZCBQXG4gICAgICAgICAgLy8gRG9uJ3QgZm9yZ2V0IHRvIHJlc2V0IHRoZSByZWxheGluZyBpbiBkZWxldGUgc2Vzc2lvblxuICAgICAgICAgIGxvZy53YXJuKCdSZWxheGluZyBoaWRkZW4gYXBpIHBvbGljeSB0byBtYW5hZ2UgYW5pbWF0aW9uIHNjYWxlJyk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0SGlkZGVuQXBpUG9saWN5KCcxJywgISF0aGlzLm9wdHMuaWdub3JlSGlkZGVuQXBpUG9saWN5RXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgbG9nLmluZm8oJ0Rpc2FibGluZyB3aW5kb3cgYW5pbWF0aW9uIGFzIGl0IGlzIHJlcXVlc3RlZCBieSBcImRpc2FibGVXaW5kb3dBbmltYXRpb25cIiBjYXBhYmlsaXR5Jyk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNldEFuaW1hdGlvblN0YXRlKGZhbHNlKTtcbiAgICAgICAgdGhpcy5fd2FzV2luZG93QW5pbWF0aW9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmluZm8oJ1dpbmRvdyBhbmltYXRpb24gaXMgYWxyZWFkeSBkaXNhYmxlZCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNldCB1cCBhcHAgdW5kZXIgdGVzdFxuICAgIGF3YWl0IHRoaXMuaW5pdEFVVCgpO1xuXG4gICAgLy8gc3RhcnQgVWlBdXRvbWF0b3JcbiAgICB0aGlzLmJvb3RzdHJhcCA9IG5ldyBoZWxwZXJzLmJvb3RzdHJhcCh0aGlzLmFkYiwgdGhpcy5vcHRzLmJvb3RzdHJhcFBvcnQsIHRoaXMub3B0cy53ZWJzb2NrZXQpO1xuICAgIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnN0YXJ0KHRoaXMub3B0cy5hcHBQYWNrYWdlLCB0aGlzLm9wdHMuZGlzYWJsZUFuZHJvaWRXYXRjaGVycywgdGhpcy5vcHRzLmFjY2VwdFNzbENlcnRzKTtcbiAgICAvLyBoYW5kbGluZyB1bmV4cGVjdGVkIHNodXRkb3duXG4gICAgdGhpcy5ib290c3RyYXAub25VbmV4cGVjdGVkU2h1dGRvd24uY2F0Y2goYXN5bmMgKGVycikgPT4geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLWNhbGxiYWNrc1xuICAgICAgaWYgKCF0aGlzLmJvb3RzdHJhcC5pZ25vcmVVbmV4cGVjdGVkU2h1dGRvd24pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zdGFydFVuZXhwZWN0ZWRTaHV0ZG93bihlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCF0aGlzLm9wdHMuc2tpcFVubG9jaykge1xuICAgICAgLy8gTGV0J3MgdHJ5IHRvIHVubG9jayB0aGUgZGV2aWNlXG4gICAgICBhd2FpdCBoZWxwZXJzLnVubG9jayh0aGlzLCB0aGlzLmFkYiwgdGhpcy5jYXBzKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgQ29tcHJlc3NlZExheW91dEhpZXJhcmNoeSBvbiB0aGUgZGV2aWNlIGJhc2VkIG9uIGN1cnJlbnQgc2V0dGluZ3Mgb2JqZWN0XG4gICAgLy8gdGhpcyBoYXMgdG8gaGFwcGVuIF9hZnRlcl8gYm9vdHN0cmFwIGlzIGluaXRpYWxpemVkXG4gICAgaWYgKHRoaXMub3B0cy5pZ25vcmVVbmltcG9ydGFudFZpZXdzKSB7XG4gICAgICBhd2FpdCB0aGlzLnNldHRpbmdzLnVwZGF0ZSh7aWdub3JlVW5pbXBvcnRhbnRWaWV3czogdGhpcy5vcHRzLmlnbm9yZVVuaW1wb3J0YW50Vmlld3N9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0Nocm9tZVNlc3Npb24pIHtcbiAgICAgIC8vIHN0YXJ0IGEgY2hyb21lZHJpdmVyIHNlc3Npb24gYW5kIHByb3h5IHRvIGl0XG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0Q2hyb21lU2Vzc2lvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5vcHRzLmF1dG9MYXVuY2gpIHtcbiAgICAgICAgLy8gc3RhcnQgYXBwXG4gICAgICAgIGF3YWl0IHRoaXMuc3RhcnRBVVQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMub3JpZW50YXRpb24pKSB7XG4gICAgICBsb2cuZGVidWcoYFNldHRpbmcgaW5pdGlhbCBvcmllbnRhdGlvbiB0byAnJHt0aGlzLm9wdHMub3JpZW50YXRpb259J2ApO1xuICAgICAgYXdhaXQgdGhpcy5zZXRPcmllbnRhdGlvbih0aGlzLm9wdHMub3JpZW50YXRpb24pO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuaW5pdEF1dG9XZWJ2aWV3KCk7XG4gIH1cblxuICBhc3luYyBpbml0QXV0b1dlYnZpZXcgKCkge1xuICAgIGlmICh0aGlzLm9wdHMuYXV0b1dlYnZpZXcpIHtcbiAgICAgIGxldCB2aWV3TmFtZSA9IHRoaXMuZGVmYXVsdFdlYnZpZXdOYW1lKCk7XG4gICAgICBsZXQgdGltZW91dCA9ICh0aGlzLm9wdHMuYXV0b1dlYnZpZXdUaW1lb3V0KSB8fCAyMDAwO1xuXG4gICAgICBsb2cuaW5mbyhgU2V0dGluZyBhdXRvIHdlYnZpZXcgdG8gY29udGV4dCAnJHt2aWV3TmFtZX0nIHdpdGggdGltZW91dCAke3RpbWVvdXR9bXNgKTtcblxuICAgICAgLy8gdHJ5IGV2ZXJ5IDUwMG1zIHVudGlsIHRpbWVvdXQgaXMgb3ZlclxuICAgICAgYXdhaXQgcmV0cnlJbnRlcnZhbCh0aW1lb3V0IC8gNTAwLCA1MDAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5zZXRDb250ZXh0KHZpZXdOYW1lKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGluaXRBVVQgKCkge1xuICAgIC8vIHBvcHVsYXRlIGFwcFBhY2thZ2UsIGFwcEFjdGl2aXR5LCBhcHBXYWl0UGFja2FnZSwgYXBwV2FpdEFjdGl2aXR5LFxuICAgIC8vIGFuZCB0aGUgZGV2aWNlIGJlaW5nIHVzZWRcbiAgICAvLyBpbiB0aGUgb3B0cyBhbmQgY2FwcyAoc28gaXQgZ2V0cyBiYWNrIHRvIHRoZSB1c2VyIG9uIHNlc3Npb24gY3JlYXRpb24pXG4gICAgbGV0IGxhdW5jaEluZm8gPSBhd2FpdCBoZWxwZXJzLmdldExhdW5jaEluZm8odGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdHMsIGxhdW5jaEluZm8pO1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5jYXBzLCBsYXVuY2hJbmZvKTtcblxuICAgIC8vIFVuaW5zdGFsbCBhbnkgdW5pbnN0YWxsT3RoZXJQYWNrYWdlcyB3aGljaCB3ZXJlIHNwZWNpZmllZCBpbiBjYXBzXG4gICAgaWYgKHRoaXMub3B0cy51bmluc3RhbGxPdGhlclBhY2thZ2VzKSB7XG4gICAgICBoZWxwZXJzLnZhbGlkYXRlRGVzaXJlZENhcHModGhpcy5vcHRzKTtcbiAgICAgIC8vIE9ubHkgU0VUVElOR1NfSEVMUEVSX1BLR19JRCBwYWNrYWdlIGlzIHVzZWQgYnkgVUlBMVxuICAgICAgYXdhaXQgaGVscGVycy51bmluc3RhbGxPdGhlclBhY2thZ2VzKFxuICAgICAgICB0aGlzLmFkYixcbiAgICAgICAgaGVscGVycy5wYXJzZUFycmF5KHRoaXMub3B0cy51bmluc3RhbGxPdGhlclBhY2thZ2VzKSxcbiAgICAgICAgW1NFVFRJTkdTX0hFTFBFUl9QS0dfSURdXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEluc3RhbGwgYW55IFwib3RoZXJBcHBzXCIgdGhhdCB3ZXJlIHNwZWNpZmllZCBpbiBjYXBzXG4gICAgaWYgKHRoaXMub3B0cy5vdGhlckFwcHMpIHtcbiAgICAgIGxldCBvdGhlckFwcHM7XG4gICAgICB0cnkge1xuICAgICAgICBvdGhlckFwcHMgPSBoZWxwZXJzLnBhcnNlQXJyYXkodGhpcy5vcHRzLm90aGVyQXBwcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgcGFyc2UgXCJvdGhlckFwcHNcIiBjYXBhYmlsaXR5OiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIG90aGVyQXBwcyA9IGF3YWl0IEIuYWxsKG90aGVyQXBwcy5tYXAoKGFwcCkgPT4gdGhpcy5oZWxwZXJzLmNvbmZpZ3VyZUFwcChhcHAsIEFQUF9FWFRFTlNJT04pKSk7XG4gICAgICBhd2FpdCBoZWxwZXJzLmluc3RhbGxPdGhlckFwa3Mob3RoZXJBcHBzLCB0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICB9XG5cbiAgICAvLyBpbnN0YWxsIGFwcFxuICAgIGlmICghdGhpcy5vcHRzLmFwcCkge1xuICAgICAgaWYgKHRoaXMub3B0cy5mdWxsUmVzZXQpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coJ0Z1bGwgcmVzZXQgcmVxdWlyZXMgYW4gYXBwIGNhcGFiaWxpdHksIHVzZSBmYXN0UmVzZXQgaWYgYXBwIGlzIG5vdCBwcm92aWRlZCcpO1xuICAgICAgfVxuICAgICAgbG9nLmRlYnVnKCdObyBhcHAgY2FwYWJpbGl0eS4gQXNzdW1pbmcgaXQgaXMgYWxyZWFkeSBvbiB0aGUgZGV2aWNlJyk7XG4gICAgICBpZiAodGhpcy5vcHRzLmZhc3RSZXNldCkge1xuICAgICAgICBhd2FpdCBoZWxwZXJzLnJlc2V0QXBwKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMub3B0cy5za2lwVW5pbnN0YWxsKSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi51bmluc3RhbGxBcGsodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgIH1cbiAgICBhd2FpdCBoZWxwZXJzLmluc3RhbGxBcGsodGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgY29uc3QgYXBrU3RyaW5nc0Zvckxhbmd1YWdlID0gYXdhaXQgaGVscGVycy5wdXNoU3RyaW5ncyh0aGlzLm9wdHMubGFuZ3VhZ2UsIHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIGlmICh0aGlzLm9wdHMubGFuZ3VhZ2UpIHtcbiAgICAgIHRoaXMuYXBrU3RyaW5nc1t0aGlzLm9wdHMubGFuZ3VhZ2VdID0gYXBrU3RyaW5nc0Zvckxhbmd1YWdlO1xuICAgIH1cblxuICAgIC8vIFRoaXMgbXVzdCBydW4gYWZ0ZXIgaW5zdGFsbGluZyB0aGUgYXBrLCBvdGhlcndpc2UgaXQgd291bGQgY2F1c2UgdGhlXG4gICAgLy8gaW5zdGFsbCB0byBmYWlsLiBBbmQgYmVmb3JlIHJ1bm5pbmcgdGhlIGFwcC5cbiAgICBpZiAoIV8uaXNVbmRlZmluZWQodGhpcy5vcHRzLnNoYXJlZFByZWZlcmVuY2VzKSkge1xuICAgICAgYXdhaXQgdGhpcy5zZXRTaGFyZWRQcmVmZXJlbmNlcyh0aGlzLm9wdHMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNoZWNrQXBwUHJlc2VudCAoKSB7XG4gICAgbG9nLmRlYnVnKCdDaGVja2luZyB3aGV0aGVyIGFwcCBpcyBhY3R1YWxseSBwcmVzZW50Jyk7XG4gICAgaWYgKCEoYXdhaXQgZnMuZXhpc3RzKHRoaXMub3B0cy5hcHApKSkge1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBmaW5kIGFwcCBhcGsgYXQgJHt0aGlzLm9wdHMuYXBwfWApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNoZWNrUGFja2FnZVByZXNlbnQgKCkge1xuICAgIGxvZy5kZWJ1ZygnQ2hlY2tpbmcgd2hldGhlciBwYWNrYWdlIGlzIHByZXNlbnQgb24gdGhlIGRldmljZScpO1xuICAgIGlmICghKGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsncG0nLCAnbGlzdCcsICdwYWNrYWdlcycsIHRoaXMub3B0cy5hcHBQYWNrYWdlXSkpKSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgQ291bGQgbm90IGZpbmQgcGFja2FnZSAke3RoaXMub3B0cy5hcHBQYWNrYWdlfSBvbiB0aGUgZGV2aWNlYCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2V0IENvbXByZXNzZWRMYXlvdXRIaWVyYXJjaHkgb24gdGhlIGRldmljZVxuICBhc3luYyBzZXRDb21wcmVzc2VkTGF5b3V0SGllcmFyY2h5IChjb21wcmVzcykge1xuICAgIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2NvbXByZXNzZWRMYXlvdXRIaWVyYXJjaHknLCB7Y29tcHJlc3NMYXlvdXQ6IGNvbXByZXNzfSk7XG4gIH1cblxuICBhc3luYyBkZWxldGVTZXNzaW9uICgpIHtcbiAgICBsb2cuZGVidWcoJ1NodXR0aW5nIGRvd24gQW5kcm9pZCBkcml2ZXInKTtcblxuICAgIHRyeSB7XG4gICAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLl9zY3JlZW5SZWNvcmRpbmdQcm9wZXJ0aWVzKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3BSZWNvcmRpbmdTY3JlZW4oKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChpZ24pIHt9XG5cbiAgICBhd2FpdCBoZWxwZXJzLnJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyh0aGlzLnNlcnZlciwgdGhpcy5zZXNzaW9uSWQpO1xuXG4gICAgYXdhaXQgdGhpcy5tb2JpbGVTdG9wU2NyZWVuU3RyZWFtaW5nKCk7XG5cbiAgICBhd2FpdCBzdXBlci5kZWxldGVTZXNzaW9uKCk7XG5cbiAgICBpZiAodGhpcy5ib290c3RyYXApIHtcbiAgICAgIC8vIGNlcnRhaW4gY2xlYW51cCB3ZSBvbmx5IGNhcmUgdG8gZG8gaWYgdGhlIGJvb3RzdHJhcCB3YXMgZXZlciBydW5cbiAgICAgIGF3YWl0IHRoaXMuc3RvcENocm9tZWRyaXZlclByb3hpZXMoKTtcbiAgICAgIGlmICh0aGlzLm9wdHMudW5pY29kZUtleWJvYXJkICYmIHRoaXMub3B0cy5yZXNldEtleWJvYXJkICYmIHRoaXMuZGVmYXVsdElNRSkge1xuICAgICAgICBsb2cuZGVidWcoYFJlc2V0dGluZyBJTUUgdG8gJHt0aGlzLmRlZmF1bHRJTUV9YCk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNldElNRSh0aGlzLmRlZmF1bHRJTUUpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmlzQ2hyb21lU2Vzc2lvbiAmJiAhdGhpcy5vcHRzLmRvbnRTdG9wQXBwT25SZXNldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5mb3JjZVN0b3AodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5hZGIuZ29Ub0hvbWUoKTtcbiAgICAgIGlmICh0aGlzLm9wdHMuZnVsbFJlc2V0ICYmICF0aGlzLm9wdHMuc2tpcFVuaW5zdGFsbCAmJiAhdGhpcy5hcHBPbkRldmljZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi51bmluc3RhbGxBcGsodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5ib290c3RyYXAuc2h1dGRvd24oKTtcbiAgICAgIHRoaXMuYm9vdHN0cmFwID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nLmRlYnVnKFwiQ2FsbGVkIGRlbGV0ZVNlc3Npb24gYnV0IGJvb3RzdHJhcCB3YXNuJ3QgYWN0aXZlXCIpO1xuICAgIH1cbiAgICAvLyBzb21lIGNsZWFudXAgd2Ugd2FudCB0byBkbyByZWdhcmRsZXNzLCBpbiBjYXNlIHdlIGFyZSBzaHV0dGluZyBkb3duXG4gICAgLy8gbWlkLXN0YXJ0dXBcbiAgICBhd2FpdCB0aGlzLmFkYi5zdG9wTG9nY2F0KCk7XG4gICAgaWYgKHRoaXMudXNlVW5sb2NrSGVscGVyQXBwKSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5mb3JjZVN0b3AoJ2lvLmFwcGl1bS51bmxvY2snKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3dhc1dpbmRvd0FuaW1hdGlvbkRpc2FibGVkKSB7XG4gICAgICBsb2cuaW5mbygnUmVzdG9yaW5nIHdpbmRvdyBhbmltYXRpb24gc3RhdGUnKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnNldEFuaW1hdGlvblN0YXRlKHRydWUpO1xuXG4gICAgICAvLyBUaGlzIHdhcyBuZWNlc3NhcnkgdG8gY2hhbmdlIGFuaW1hdGlvbiBzY2FsZSBvdmVyIEFuZHJvaWQgUC4gV2UgbXVzdCByZXNldCB0aGUgcG9saWN5IGZvciB0aGUgc2VjdXJpdHkuXG4gICAgICBpZiAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA+PSAyOCkge1xuICAgICAgICBsb2cuaW5mbygnUmVzdG9yaW5nIGhpZGRlbiBhcGkgcG9saWN5IHRvIHRoZSBkZXZpY2UgZGVmYXVsdCBjb25maWd1cmF0aW9uJyk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNldERlZmF1bHRIaWRkZW5BcGlQb2xpY3koISF0aGlzLm9wdHMuaWdub3JlSGlkZGVuQXBpUG9saWN5RXJyb3IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdHMucmVib290KSB7XG4gICAgICBsZXQgYXZkTmFtZSA9IHRoaXMub3B0cy5hdmQucmVwbGFjZSgnQCcsICcnKTtcbiAgICAgIGxvZy5kZWJ1ZyhgY2xvc2luZyBlbXVsYXRvciAnJHthdmROYW1lfSdgKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLmtpbGxFbXVsYXRvcihhdmROYW1lKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzZXRTaGFyZWRQcmVmZXJlbmNlcyAoKSB7XG4gICAgbGV0IHNoYXJlZFByZWZzID0gdGhpcy5vcHRzLnNoYXJlZFByZWZlcmVuY2VzO1xuICAgIGxvZy5pbmZvKCdUcnlpbmcgdG8gc2V0IHNoYXJlZCBwcmVmZXJlbmNlcycpO1xuICAgIGxldCBuYW1lID0gc2hhcmVkUHJlZnMubmFtZTtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZChuYW1lKSkge1xuICAgICAgbG9nLndhcm4oYFNraXBwaW5nIHNldHRpbmcgU2hhcmVkIHByZWZlcmVuY2VzLCBuYW1lIGlzIHVuZGVmaW5lZDogJHtKU09OLnN0cmluZ2lmeShzaGFyZWRQcmVmcyl9YCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGxldCByZW1vdGVQYXRoID0gYC9kYXRhL2RhdGEvJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0vc2hhcmVkX3ByZWZzYDtcbiAgICBsZXQgcmVtb3RlRmlsZSA9IGAke3JlbW90ZVBhdGh9LyR7bmFtZX0ueG1sYDtcbiAgICBsZXQgbG9jYWxQYXRoID0gYC90bXAvJHtuYW1lfS54bWxgO1xuICAgIGxldCBidWlsZGVyID0gdGhpcy5nZXRQcmVmc0J1aWxkZXIoKTtcbiAgICBidWlsZGVyLmJ1aWxkKHNoYXJlZFByZWZzLnByZWZzKTtcbiAgICBsb2cuaW5mbyhgQ3JlYXRpbmcgdGVtcG9yYXJ5IHNoYXJlZCBwcmVmZXJlbmNlczogJHtsb2NhbFBhdGh9YCk7XG4gICAgYnVpbGRlci50b0ZpbGUobG9jYWxQYXRoKTtcbiAgICBsb2cuaW5mbyhgQ3JlYXRpbmcgc2hhcmVkX3ByZWZzIHJlbW90ZSBmb2xkZXI6ICR7cmVtb3RlUGF0aH1gKTtcbiAgICBhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ21rZGlyJywgJy1wJywgcmVtb3RlUGF0aF0pO1xuICAgIGxvZy5pbmZvKGBQdXNoaW5nIHNoYXJlZF9wcmVmcyB0byAke3JlbW90ZUZpbGV9YCk7XG4gICAgYXdhaXQgdGhpcy5hZGIucHVzaChsb2NhbFBhdGgsIHJlbW90ZUZpbGUpO1xuICAgIHRyeSB7XG4gICAgICBsb2cuaW5mbyhgVHJ5aW5nIHRvIHJlbW92ZSBzaGFyZWQgcHJlZmVyZW5jZXMgdGVtcG9yYXJ5IGZpbGVgKTtcbiAgICAgIGlmIChhd2FpdCBmcy5leGlzdHMobG9jYWxQYXRoKSkge1xuICAgICAgICBhd2FpdCBmcy51bmxpbmsobG9jYWxQYXRoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cud2FybihgRXJyb3IgdHJ5aW5nIHRvIHJlbW92ZSB0ZW1wb3JhcnkgZmlsZSAke2xvY2FsUGF0aH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBnZXRQcmVmc0J1aWxkZXIgKCkge1xuICAgIC8qIEFkZCB0aGlzIG1ldGhvZCB0byBjcmVhdGUgYSBuZXcgU2hhcmVkUHJlZnNCdWlsZGVyIGluc3RlYWQgb2ZcbiAgICAgKiBkaXJlY3RseSBjcmVhdGluZyB0aGUgb2JqZWN0IG9uIHNldFNoYXJlZFByZWZlcmVuY2VzIGZvciB0ZXN0aW5nIHB1cnBvc2VzXG4gICAgKi9cbiAgICByZXR1cm4gbmV3IFNoYXJlZFByZWZzQnVpbGRlcigpO1xuICB9XG5cbiAgdmFsaWRhdGVEZXNpcmVkQ2FwcyAoY2Fwcykge1xuICAgIGlmICghc3VwZXIudmFsaWRhdGVEZXNpcmVkQ2FwcyhjYXBzKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoKCFjYXBzLmJyb3dzZXJOYW1lIHx8ICFoZWxwZXJzLmlzQ2hyb21lQnJvd3NlcihjYXBzLmJyb3dzZXJOYW1lKSkgJiYgIWNhcHMuYXBwICYmICFjYXBzLmFwcFBhY2thZ2UpIHtcbiAgICAgIGxvZy5lcnJvckFuZFRocm93KCdUaGUgZGVzaXJlZCBjYXBhYmlsaXRpZXMgbXVzdCBpbmNsdWRlIGVpdGhlciBhbiBhcHAsIGFwcFBhY2thZ2Ugb3IgYnJvd3Nlck5hbWUnKTtcbiAgICB9XG4gICAgcmV0dXJuIGhlbHBlcnMudmFsaWRhdGVEZXNpcmVkQ2FwcyhjYXBzKTtcbiAgfVxuXG4gIHByb3h5QWN0aXZlIChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5wcm94eUFjdGl2ZShzZXNzaW9uSWQpO1xuXG4gICAgcmV0dXJuIHRoaXMuandwUHJveHlBY3RpdmU7XG4gIH1cblxuICBnZXRQcm94eUF2b2lkTGlzdCAoc2Vzc2lvbklkKSB7XG4gICAgc3VwZXIuZ2V0UHJveHlBdm9pZExpc3Qoc2Vzc2lvbklkKTtcblxuICAgIHJldHVybiB0aGlzLmp3cFByb3h5QXZvaWQ7XG4gIH1cblxuICBjYW5Qcm94eSAoc2Vzc2lvbklkKSB7XG4gICAgc3VwZXIuY2FuUHJveHkoc2Vzc2lvbklkKTtcblxuICAgIC8vIHRoaXMgd2lsbCBjaGFuZ2UgZGVwZW5kaW5nIG9uIENocm9tZURyaXZlciBzdGF0dXNcbiAgICByZXR1cm4gXy5pc0Z1bmN0aW9uKHRoaXMucHJveHlSZXFSZXMpO1xuICB9XG59XG5cbmV4cG9ydCB7IEFuZHJvaWREcml2ZXIgfTtcbmV4cG9ydCBkZWZhdWx0IEFuZHJvaWREcml2ZXI7XG4iXSwiZmlsZSI6ImxpYi9kcml2ZXIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
@@ -7,12 +7,12 @@ exports.default = void 0;
7
7
 
8
8
  require("source-map-support/register");
9
9
 
10
- var _appiumSupport = require("appium-support");
10
+ var _support = require("@appium/support");
11
11
 
12
- const log = _appiumSupport.logger.getLogger('AndroidDriver');
12
+ const log = _support.logger.getLogger('AndroidDriver');
13
13
 
14
14
  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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9sb2dnZXIuanMiXSwibmFtZXMiOlsibG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQSxNQUFNQSxHQUFHLEdBQUdDLHNCQUFPQyxTQUFQLENBQWlCLGVBQWpCLENBQVo7O2VBRWVGLEciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBsb2dnZXIgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5jb25zdCBsb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdBbmRyb2lkRHJpdmVyJyk7XG5cbmV4cG9ydCBkZWZhdWx0IGxvZztcbiJdLCJmaWxlIjoibGliL2xvZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
18
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9sb2dnZXIuanMiXSwibmFtZXMiOlsibG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQSxNQUFNQSxHQUFHLEdBQUdDLGdCQUFPQyxTQUFQLENBQWlCLGVBQWpCLENBQVo7O2VBRWVGLEciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBsb2dnZXIgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuY29uc3QgbG9nID0gbG9nZ2VyLmdldExvZ2dlcignQW5kcm9pZERyaXZlcicpO1xuXG5leHBvcnQgZGVmYXVsdCBsb2c7XG4iXSwiZmlsZSI6ImxpYi9sb2dnZXIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
@@ -11,14 +11,14 @@ require("source-map-support/register");
11
11
 
12
12
  var _logger = _interopRequireDefault(require("./logger"));
13
13
 
14
- var _appiumBaseDriver = require("appium-base-driver");
14
+ var _baseDriver = require("@appium/base-driver");
15
15
 
16
16
  var _driver = _interopRequireDefault(require("./driver"));
17
17
 
18
18
  async function startServer(port, host) {
19
19
  let d = new _driver.default();
20
- let routeConfiguringFunction = (0, _appiumBaseDriver.routeConfiguringFunction)(d);
21
- let server = await (0, _appiumBaseDriver.server)({
20
+ let routeConfiguringFunction = (0, _baseDriver.routeConfiguringFunction)(d);
21
+ let server = await (0, _baseDriver.server)({
22
22
  routeConfiguringFunction,
23
23
  port,
24
24
  hostname: host
@@ -31,4 +31,4 @@ async function startServer(port, host) {
31
31
  }require('source-map-support').install();
32
32
 
33
33
 
34
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zZXJ2ZXIuanMiXSwibmFtZXMiOlsic3RhcnRTZXJ2ZXIiLCJwb3J0IiwiaG9zdCIsImQiLCJBbmRyb2lkRHJpdmVyIiwicm91dGVDb25maWd1cmluZ0Z1bmN0aW9uIiwic2VydmVyIiwiaG9zdG5hbWUiLCJsb2ciLCJpbmZvIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUVBLGVBQWVBLFdBQWYsQ0FBNEJDLElBQTVCLEVBQWtDQyxJQUFsQyxFQUF3QztBQUN0QyxNQUFJQyxDQUFDLEdBQUcsSUFBSUMsZUFBSixFQUFSO0FBQ0EsTUFBSUMsd0JBQXdCLEdBQUcsZ0RBQVdGLENBQVgsQ0FBL0I7QUFDQSxNQUFJRyxNQUFNLEdBQUcsTUFBTSw4QkFBVztBQUFDRCxJQUFBQSx3QkFBRDtBQUEyQkosSUFBQUEsSUFBM0I7QUFBaUNNLElBQUFBLFFBQVEsRUFBRUw7QUFBM0MsR0FBWCxDQUFuQjs7QUFDQU0sa0JBQUlDLElBQUosQ0FBVSw0Q0FBMkNQLElBQUssSUFBR0QsSUFBSyxFQUFsRTs7QUFDQUUsRUFBQUEsQ0FBQyxDQUFDRyxNQUFGLEdBQVdBLE1BQVg7QUFDQSxTQUFPQSxNQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IHNlcnZlciBhcyBiYXNlU2VydmVyLCByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24gYXMgbWFrZVJvdXRlciB9IGZyb20gJ2FwcGl1bS1iYXNlLWRyaXZlcic7XG5pbXBvcnQgQW5kcm9pZERyaXZlciBmcm9tICcuL2RyaXZlcic7XG5cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0U2VydmVyIChwb3J0LCBob3N0KSB7XG4gIGxldCBkID0gbmV3IEFuZHJvaWREcml2ZXIoKTtcbiAgbGV0IHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiA9IG1ha2VSb3V0ZXIoZCk7XG4gIGxldCBzZXJ2ZXIgPSBhd2FpdCBiYXNlU2VydmVyKHtyb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24sIHBvcnQsIGhvc3RuYW1lOiBob3N0fSk7XG4gIGxvZy5pbmZvKGBBbmRyb2lkRHJpdmVyIHNlcnZlciBsaXN0ZW5pbmcgb24gaHR0cDovLyR7aG9zdH06JHtwb3J0fWApO1xuICBkLnNlcnZlciA9IHNlcnZlcjtcbiAgcmV0dXJuIHNlcnZlcjtcbn1cblxuZXhwb3J0IHsgc3RhcnRTZXJ2ZXIgfTtcbiJdLCJmaWxlIjoibGliL3NlcnZlci5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
34
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zZXJ2ZXIuanMiXSwibmFtZXMiOlsic3RhcnRTZXJ2ZXIiLCJwb3J0IiwiaG9zdCIsImQiLCJBbmRyb2lkRHJpdmVyIiwicm91dGVDb25maWd1cmluZ0Z1bmN0aW9uIiwic2VydmVyIiwiaG9zdG5hbWUiLCJsb2ciLCJpbmZvIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUVBLGVBQWVBLFdBQWYsQ0FBNEJDLElBQTVCLEVBQWtDQyxJQUFsQyxFQUF3QztBQUN0QyxNQUFJQyxDQUFDLEdBQUcsSUFBSUMsZUFBSixFQUFSO0FBQ0EsTUFBSUMsd0JBQXdCLEdBQUcsMENBQVdGLENBQVgsQ0FBL0I7QUFDQSxNQUFJRyxNQUFNLEdBQUcsTUFBTSx3QkFBVztBQUFDRCxJQUFBQSx3QkFBRDtBQUEyQkosSUFBQUEsSUFBM0I7QUFBaUNNLElBQUFBLFFBQVEsRUFBRUw7QUFBM0MsR0FBWCxDQUFuQjs7QUFDQU0sa0JBQUlDLElBQUosQ0FBVSw0Q0FBMkNQLElBQUssSUFBR0QsSUFBSyxFQUFsRTs7QUFDQUUsRUFBQUEsQ0FBQyxDQUFDRyxNQUFGLEdBQVdBLE1BQVg7QUFDQSxTQUFPQSxNQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IHNlcnZlciBhcyBiYXNlU2VydmVyLCByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24gYXMgbWFrZVJvdXRlciB9IGZyb20gJ0BhcHBpdW0vYmFzZS1kcml2ZXInO1xuaW1wb3J0IEFuZHJvaWREcml2ZXIgZnJvbSAnLi9kcml2ZXInO1xuXG5hc3luYyBmdW5jdGlvbiBzdGFydFNlcnZlciAocG9ydCwgaG9zdCkge1xuICBsZXQgZCA9IG5ldyBBbmRyb2lkRHJpdmVyKCk7XG4gIGxldCByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24gPSBtYWtlUm91dGVyKGQpO1xuICBsZXQgc2VydmVyID0gYXdhaXQgYmFzZVNlcnZlcih7cm91dGVDb25maWd1cmluZ0Z1bmN0aW9uLCBwb3J0LCBob3N0bmFtZTogaG9zdH0pO1xuICBsb2cuaW5mbyhgQW5kcm9pZERyaXZlciBzZXJ2ZXIgbGlzdGVuaW5nIG9uIGh0dHA6Ly8ke2hvc3R9OiR7cG9ydH1gKTtcbiAgZC5zZXJ2ZXIgPSBzZXJ2ZXI7XG4gIHJldHVybiBzZXJ2ZXI7XG59XG5cbmV4cG9ydCB7IHN0YXJ0U2VydmVyIH07XG4iXSwiZmlsZSI6ImxpYi9zZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
@@ -11,9 +11,9 @@ require("source-map-support/register");
11
11
 
12
12
  var _events = _interopRequireDefault(require("events"));
13
13
 
14
- var _appiumSupport = require("appium-support");
14
+ var _support = require("@appium/support");
15
15
 
16
- const log = _appiumSupport.logger.getLogger('UiAutomator');
16
+ const log = _support.logger.getLogger('UiAutomator');
17
17
 
18
18
  class UiAutomator extends _events.default.EventEmitter {
19
19
  constructor(adb) {
@@ -120,4 +120,4 @@ var _default = UiAutomator;
120
120
  exports.default = _default;require('source-map-support').install();
121
121
 
122
122
 
123
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91aWF1dG9tYXRvci5qcyJdLCJuYW1lcyI6WyJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJVaUF1dG9tYXRvciIsImV2ZW50cyIsIkV2ZW50RW1pdHRlciIsImNvbnN0cnVjdG9yIiwiYWRiIiwiZXJyb3JBbmRUaHJvdyIsInRlbXBQYXRoIiwic3RhcnQiLCJ1aUF1dG9tYXRvckJpbmFyeVBhdGgiLCJjbGFzc05hbWUiLCJzdGFydERldGVjdG9yIiwiZXh0cmFQYXJhbXMiLCJwcm9jZXNzSXNBbGl2ZSIsImRlYnVnIiwiY2hhbmdlU3RhdGUiLCJTVEFURV9TVEFSVElORyIsImphck5hbWUiLCJwYXJzZUphck5hbWVGcm9tUGF0aCIsInB1c2giLCJraWxsVWlBdXRvbWF0b3JPbkRldmljZSIsImFyZ3MiLCJwcm9jIiwiY3JlYXRlU3ViUHJvY2VzcyIsIm9uIiwiY29kZSIsInNpZ25hbCIsInN0YXRlIiwiU1RBVEVfU1RPUFBFRCIsIlNUQVRFX1NUT1BQSU5HIiwibXNnIiwiZXJyb3IiLCJTVEFURV9PTkxJTkUiLCJlIiwiZW1pdCIsIkVWRU5UX0VSUk9SIiwic3RvcCIsInNodXRkb3duIiwiYmluYXJ5UGF0aCIsInJlVGVzdCIsImV4ZWMiLCJFcnJvciIsIkVWRU5UX0NIQU5HRUQiLCJraWxsUHJvY2Vzc2VzQnlOYW1lIiwid2FybiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFHQSxNQUFNQSxHQUFHLEdBQUdDLHNCQUFPQyxTQUFQLENBQWlCLGFBQWpCLENBQVo7O0FBRUEsTUFBTUMsV0FBTixTQUEwQkMsZ0JBQU9DLFlBQWpDLENBQThDO0FBQzVDQyxFQUFBQSxXQUFXLENBQUVDLEdBQUYsRUFBTztBQUNoQixRQUFJLENBQUNBLEdBQUwsRUFBVTtBQUNSUCxNQUFBQSxHQUFHLENBQUNRLGFBQUosQ0FBa0IsNENBQWxCO0FBQ0Q7O0FBQ0Q7QUFDQSxTQUFLRCxHQUFMLEdBQVdBLEdBQVg7QUFDQSxTQUFLRSxRQUFMLEdB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QUExQixDQUFiOztBQUNBLFFBQUksQ0FBQ0MsTUFBTCxFQUFhO0FBQ1gsWUFBTSxJQUFJRSxLQUFKLENBQVcsaUNBQWdDSCxVQUFXLEVBQXRELENBQU47QUFDRDs7QUFDRCxRQUFJckIsT0FBTyxHQUFHc0IsTUFBTSxDQUFDLENBQUQsQ0FBcEI7QUFDQXpDLElBQUFBLEdBQUcsQ0FBQ2dCLEtBQUosQ0FBVyxvQkFBbUJHLE9BQVEsR0FBdEM7QUFDQSxXQUFPQSxPQUFQO0FBQ0Q7O0FBRURGLEVBQUFBLFdBQVcsQ0FBRVksS0FBRixFQUFTO0FBQ2xCN0IsSUFBQUEsR0FBRyxDQUFDZ0IsS0FBSixDQUFXLG9CQUFtQmEsS0FBTSxHQUFwQztBQUNBLFNBQUtBLEtBQUwsR0FBYUEsS0FBYjtBQUNBLFNBQUtPLElBQUwsQ0FBVWpDLFdBQVcsQ0FBQ3lDLGFBQXRCLEVBQXFDO0FBQUNmLE1BQUFBO0FBQUQsS0FBckM7QUFDRDs7QUFFNEIsUUFBdkJQLHVCQUF1QixHQUFJO0FBQy9CLFFBQUk7QUFDRixZQUFNLEtBQUtmLEdBQUwsQ0FBU3NDLG1CQUFULENBQTZCLGFBQTdCLENBQU47QUFDRCxLQUZELENBRUUsT0FBT1YsQ0FBUCxFQUFVO0FBQ1ZuQyxNQUFBQSxHQUFHLENBQUM4QyxJQUFKLENBQVUsb0NBQW1DWCxDQUFFLEVBQS9DO0FBQ0Q7QUFDRjs7QUF6RjJDOzs7QUE2RjlDaEMsV0FBVyxDQUFDa0MsV0FBWixHQUEwQixtQkFBMUI7QUFDQWxDLFdBQVcsQ0FBQ3lDLGFBQVosR0FBNEIsY0FBNUI7QUFDQXpDLFdBQVcsQ0FBQzRCLGNBQVosR0FBNkIsVUFBN0I7QUFDQTVCLFdBQVcsQ0FBQzJCLGFBQVosR0FBNEIsU0FBNUI7QUFDQTNCLFdBQVcsQ0FBQ2UsY0FBWixHQUE2QixVQUE3QjtBQUNBZixXQUFXLENBQUMrQixZQUFaLEdBQTJCLFFBQTNCO2VBSWUvQixXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGV2ZW50cyBmcm9tICdldmVudHMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuXG5cbmNvbnN0IGxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ1VpQXV0b21hdG9yJyk7XG5cbmNsYXNzIFVpQXV0b21hdG9yIGV4dGVuZHMgZXZlbnRzLkV2ZW50RW1pdHRlciB7XG4gIGNvbnN0cnVjdG9yIChhZGIpIHtcbiAgICBpZiAoIWFkYikge1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3coJ2FkYiBpcyByZXF1aXJlZCB0byBpbnN0YW50aWF0ZSBVaUF1dG9tYXRvcicpO1xuICAgIH1cbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYWRiID0gYWRiO1xuICAgIHRoaXMudGVtcFBhdGggPSAnL2RhdGEvbG9jYWwvdG1wLyc7XG4gIH1cblxuICBhc3luYyBzdGFydCAodWlBdXRvbWF0b3JCaW5hcnlQYXRoLCBjbGFzc05hbWUsIHN0YXJ0RGV0ZWN0b3IsIC4uLmV4dHJhUGFyYW1zKSB7XG4gICAgbGV0IHByb2Nlc3NJc0FsaXZlO1xuICAgIHRyeSB7XG4gICAgICBsb2cuZGVidWcoJ1N0YXJ0aW5nIFVpQXV0b21hdG9yJyk7XG4gICAgICB0aGlzLmNoYW5nZVN0YXRlKFVpQXV0b21hdG9yLlNUQVRFX1NUQVJUSU5HKTtcblxuICAgICAgbG9nLmRlYnVnKCdQYXJzaW5nIHVpYXV0b21hdG9yIGphcicpO1xuICAgICAgLy8gZXhwZWN0aW5nIGEgcGF0aCBsaWtlIC9hZHMvYWRzL2Zvby5qYXIgb3IgXFxhc2RcXGFzZFxcZm9vLmphclxuICAgICAgbGV0IGphck5hbWUgPSB0aGlzLnBhcnNlSmFyTmFtZUZyb21QYXRoKHVpQXV0b21hdG9yQmluYXJ5UGF0aCk7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5wdXNoKHVpQXV0b21hdG9yQmluYXJ5UGF0aCwgdGhpcy50ZW1wUGF0aCk7XG5cbiAgICAgIC8vIGtpbGxpbmcgYW55IHVpYXV0b21hdG9yIGV4aXN0aW5nIHByb2Nlc3Nlc1xuICAgICAgYXdhaXQgdGhpcy5raWxsVWlBdXRvbWF0b3JPbkRldmljZSgpO1xuXG4gICAgICBsb2cuZGVidWcoJ1N0YXJ0aW5nIFVJQXV0b21hdG9yJyk7XG4gICAgICBsZXQgYXJncyA9IFsnc2hlbGwnLCAndWlhdXRvbWF0b3InLCAncnVudGVzdCcsIGphck5hbWUsICctYycsIGNsYXNzTmFtZSwgLi4uZXh0cmFQYXJhbXNdO1xuICAgICAgdGhpcy5wcm9jID0gdGhpcy5hZGIuY3JlYXRlU3ViUHJvY2VzcyhhcmdzKTtcblxuICAgICAgLy8gaGFuZGxlIG91dC1vZi1ib3VuZCBleGl0IGJ5IHNpbXBseSBlbWl0dGluZyBhIHN0b3BwZWQgc3RhdGVcbiAgICAgIHRoaXMucHJvYy5vbignZXhpdCcsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgcHJvY2Vzc0lzQWxpdmUgPSBmYWxzZTtcbiAgICAgICAgLy8gY2xlYW51cFxuICAgICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBFRCAmJlxuICAgICAgICAgICAgdGhpcy5zdGF0ZSAhPT0gVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBJTkcpIHtcbiAgICAgICAgICBsZXQgbXNnID0gYFVpQXV0b21hdG9yIGV4aXRlZCB1bmV4cGVjdGVkbHkgd2l0aCBjb2RlICR7Y29kZX0sIGAgK1xuICAgICAgICAgICAgICAgICAgICBgc2lnbmFsICR7c2lnbmFsfWA7XG4gICAgICAgICAgbG9nLmVycm9yKG1zZyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZSA9PT0gVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBJTkcpIHtcbiAgICAgICAgICBsb2cuZGVidWcoJ1VpQXV0b21hdG9yIHNodXQgZG93biBub3JtYWxseScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hhbmdlU3RhdGUoVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBFRCk7XG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0YXJ0KHN0YXJ0RGV0ZWN0b3IpO1xuICAgICAgcHJvY2Vzc0lzQWxpdmUgPSB0cnVlO1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShVaUF1dG9tYXRvci5TVEFURV9PTkxJTkUpO1xuICAgICAgcmV0dXJuIHRoaXMucHJvYztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmVtaXQoVWlBdXRvbWF0b3IuRVZFTlRfRVJST1IsIGUpO1xuICAgICAgaWYgKHByb2Nlc3NJc0FsaXZlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMua2lsbFVpQXV0b21hdG9yT25EZXZpY2UoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0b3AoKTtcbiAgICAgIH1cbiAgICAgIGxvZy5lcnJvckFuZFRocm93KGUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNodXRkb3duICgpIHtcbiAgICBsb2cuZGVidWcoJ1NodXR0aW5nIGRvd24gVWlBdXRvbWF0b3InKTtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBFRCkge1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShVaUF1dG9tYXRvci5TVEFURV9TVE9QUElORyk7XG4gICAgICBhd2FpdCB0aGlzLnByb2Muc3RvcCgpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmtpbGxVaUF1dG9tYXRvck9uRGV2aWNlKCk7XG4gICAgdGhpcy5jaGFuZ2VTdGF0ZShVaUF1dG9tYXRvci5TVEFURV9TVE9QUEVEKTtcbiAgfVxuXG4gIHBhcnNlSmFyTmFtZUZyb21QYXRoIChiaW5hcnlQYXRoKSB7XG4gICAgbGV0IHJlVGVzdCA9IC8uKihcXC98XFxcXCkoLipcXC5qYXIpLy5leGVjKGJpbmFyeVBhdGgpO1xuICAgIGlmICghcmVUZXN0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBwYXJzZSBqYXIgbmFtZSBmcm9tICR7YmluYXJ5UGF0aH1gKTtcbiAgICB9XG4gICAgbGV0IGphck5hbWUgPSByZVRlc3RbMl07XG4gICAgbG9nLmRlYnVnKGBGb3VuZCBqYXIgbmFtZTogJyR7amFyTmFtZX0nYCk7XG4gICAgcmV0dXJuIGphck5hbWU7XG4gIH1cblxuICBjaGFuZ2VTdGF0ZSAoc3RhdGUpIHtcbiAgICBsb2cuZGVidWcoYE1vdmluZyB0byBzdGF0ZSAnJHtzdGF0ZX0nYCk7XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgIHRoaXMuZW1pdChVaUF1dG9tYXRvci5FVkVOVF9DSEFOR0VELCB7c3RhdGV9KTtcbiAgfVxuXG4gIGFzeW5jIGtpbGxVaUF1dG9tYXRvck9uRGV2aWNlICgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5hZGIua2lsbFByb2Nlc3Nlc0J5TmFtZSgndWlhdXRvbWF0b3InKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cud2FybihgRXJyb3Igd2hpbGUga2lsbGluZyB1aUF1dG9tYXRvcjogJHtlfWApO1xuICAgIH1cbiAgfVxuXG59XG5cblVpQXV0b21hdG9yLkVWRU5UX0VSUk9SID0gJ3VpYXV0b21hdG9yX2Vycm9yJztcblVpQXV0b21hdG9yLkVWRU5UX0NIQU5HRUQgPSAnc3RhdGVDaGFuZ2VkJztcblVpQXV0b21hdG9yLlNUQVRFX1NUT1BQSU5HID0gJ3N0b3BwaW5nJztcblVpQXV0b21hdG9yLlNUQVRFX1NUT1BQRUQgPSAnc3RvcHBlZCc7XG5VaUF1dG9tYXRvci5TVEFURV9TVEFSVElORyA9ICdzdGFydGluZyc7XG5VaUF1dG9tYXRvci5TVEFURV9PTkxJTkUgPSAnb25saW5lJztcblxuXG5leHBvcnQgeyBVaUF1dG9tYXRvciB9O1xuZXhwb3J0IGRlZmF1bHQgVWlBdXRvbWF0b3I7XG4iXSwiZmlsZSI6ImxpYi91aWF1dG9tYXRvci5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
123
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91aWF1dG9tYXRvci5qcyJdLCJuYW1lcyI6WyJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJVaUF1dG9tYXRvciIsImV2ZW50cyIsIkV2ZW50RW1pdHRlciIsImNvbnN0cnVjdG9yIiwiYWRiIiwiZXJyb3JBbmRUaHJvdyIsInRlbXBQYXRoIiwic3RhcnQiLCJ1aUF1dG9tYXRvckJpbmFyeVBhdGgiLCJjbGFzc05hbWUiLCJzdGFydERldGVjdG9yIiwiZXh0cmFQYXJhbXMiLCJwcm9jZXNzSXNBbGl2ZSIsImRlYnVnIiwiY2hhbmdlU3RhdGUiLCJTVEFURV9TVEFSVElORyIsImphck5hbWUiLCJwYXJzZUphck5hbWVGcm9tUGF0aCIsInB1c2giLCJraWxsVWlBdXRvbWF0b3JPbkRldmljZSIsImFyZ3MiLCJwcm9jIiwiY3JlYXRlU3ViUHJvY2VzcyIsIm9uIiwiY29kZSIsInNpZ25hbCIsInN0YXRlIiwiU1RBVEVfU1RPUFBFRCIsIlNUQVRFX1NUT1BQSU5HIiwibXNnIiwiZXJyb3IiLCJTVEFURV9PTkxJTkUiLCJlIiwiZW1pdCIsIkVWRU5UX0VSUk9SIiwic3RvcCIsInNodXRkb3duIiwiYmluYXJ5UGF0aCIsInJlVGVzdCIsImV4ZWMiLCJFcnJvciIsIkVWRU5UX0NIQU5HRUQiLCJraWxsUHJvY2Vzc2VzQnlOYW1lIiwid2FybiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFHQSxNQUFNQSxHQUFHLEdBQUdDLGdCQUFPQyxTQUFQLENBQWlCLGFBQWpCLENBQVo7O0FBRUEsTUFBTUMsV0FBTixTQUEwQkMsZ0JBQU9DLFlBQWpDLENBQThDO0FBQzVDQyxFQUFBQSxXQUFXLENBQUVDLEdBQUYsRUFBTztBQUNoQixRQUFJLENBQUNBLEdBQUwsRUFBVTtBQUNSUCxNQUFBQSxHQUFHLENBQUNRLGFBQUosQ0FBa0IsNENBQWxCO0FBQ0Q7O0FBQ0Q7QUFDQSxTQUFLRCxHQUFMLEdBQVdBLEdBQVg7QUFDQSxTQUFLRSxRQUFMLEdB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QUExQixDQUFiOztBQUNBLFFBQUksQ0FBQ0MsTUFBTCxFQUFhO0FBQ1gsWUFBTSxJQUFJRSxLQUFKLENBQVcsaUNBQWdDSCxVQUFXLEVBQXRELENBQU47QUFDRDs7QUFDRCxRQUFJckIsT0FBTyxHQUFHc0IsTUFBTSxDQUFDLENBQUQsQ0FBcEI7QUFDQXpDLElBQUFBLEdBQUcsQ0FBQ2dCLEtBQUosQ0FBVyxvQkFBbUJHLE9BQVEsR0FBdEM7QUFDQSxXQUFPQSxPQUFQO0FBQ0Q7O0FBRURGLEVBQUFBLFdBQVcsQ0FBRVksS0FBRixFQUFTO0FBQ2xCN0IsSUFBQUEsR0FBRyxDQUFDZ0IsS0FBSixDQUFXLG9CQUFtQmEsS0FBTSxHQUFwQztBQUNBLFNBQUtBLEtBQUwsR0FBYUEsS0FBYjtBQUNBLFNBQUtPLElBQUwsQ0FBVWpDLFdBQVcsQ0FBQ3lDLGFBQXRCLEVBQXFDO0FBQUNmLE1BQUFBO0FBQUQsS0FBckM7QUFDRDs7QUFFNEIsUUFBdkJQLHVCQUF1QixHQUFJO0FBQy9CLFFBQUk7QUFDRixZQUFNLEtBQUtmLEdBQUwsQ0FBU3NDLG1CQUFULENBQTZCLGFBQTdCLENBQU47QUFDRCxLQUZELENBRUUsT0FBT1YsQ0FBUCxFQUFVO0FBQ1ZuQyxNQUFBQSxHQUFHLENBQUM4QyxJQUFKLENBQVUsb0NBQW1DWCxDQUFFLEVBQS9DO0FBQ0Q7QUFDRjs7QUF6RjJDOzs7QUE2RjlDaEMsV0FBVyxDQUFDa0MsV0FBWixHQUEwQixtQkFBMUI7QUFDQWxDLFdBQVcsQ0FBQ3lDLGFBQVosR0FBNEIsY0FBNUI7QUFDQXpDLFdBQVcsQ0FBQzRCLGNBQVosR0FBNkIsVUFBN0I7QUFDQTVCLFdBQVcsQ0FBQzJCLGFBQVosR0FBNEIsU0FBNUI7QUFDQTNCLFdBQVcsQ0FBQ2UsY0FBWixHQUE2QixVQUE3QjtBQUNBZixXQUFXLENBQUMrQixZQUFaLEdBQTJCLFFBQTNCO2VBSWUvQixXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGV2ZW50cyBmcm9tICdldmVudHMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcblxuXG5jb25zdCBsb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdVaUF1dG9tYXRvcicpO1xuXG5jbGFzcyBVaUF1dG9tYXRvciBleHRlbmRzIGV2ZW50cy5FdmVudEVtaXR0ZXIge1xuICBjb25zdHJ1Y3RvciAoYWRiKSB7XG4gICAgaWYgKCFhZGIpIHtcbiAgICAgIGxvZy5lcnJvckFuZFRocm93KCdhZGIgaXMgcmVxdWlyZWQgdG8gaW5zdGFudGlhdGUgVWlBdXRvbWF0b3InKTtcbiAgICB9XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkYiA9IGFkYjtcbiAgICB0aGlzLnRlbXBQYXRoID0gJy9kYXRhL2xvY2FsL3RtcC8nO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQgKHVpQXV0b21hdG9yQmluYXJ5UGF0aCwgY2xhc3NOYW1lLCBzdGFydERldGVjdG9yLCAuLi5leHRyYVBhcmFtcykge1xuICAgIGxldCBwcm9jZXNzSXNBbGl2ZTtcbiAgICB0cnkge1xuICAgICAgbG9nLmRlYnVnKCdTdGFydGluZyBVaUF1dG9tYXRvcicpO1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShVaUF1dG9tYXRvci5TVEFURV9TVEFSVElORyk7XG5cbiAgICAgIGxvZy5kZWJ1ZygnUGFyc2luZyB1aWF1dG9tYXRvciBqYXInKTtcbiAgICAgIC8vIGV4cGVjdGluZyBhIHBhdGggbGlrZSAvYWRzL2Fkcy9mb28uamFyIG9yIFxcYXNkXFxhc2RcXGZvby5qYXJcbiAgICAgIGxldCBqYXJOYW1lID0gdGhpcy5wYXJzZUphck5hbWVGcm9tUGF0aCh1aUF1dG9tYXRvckJpbmFyeVBhdGgpO1xuICAgICAgYXdhaXQgdGhpcy5hZGIucHVzaCh1aUF1dG9tYXRvckJpbmFyeVBhdGgsIHRoaXMudGVtcFBhdGgpO1xuXG4gICAgICAvLyBraWxsaW5nIGFueSB1aWF1dG9tYXRvciBleGlzdGluZyBwcm9jZXNzZXNcbiAgICAgIGF3YWl0IHRoaXMua2lsbFVpQXV0b21hdG9yT25EZXZpY2UoKTtcblxuICAgICAgbG9nLmRlYnVnKCdTdGFydGluZyBVSUF1dG9tYXRvcicpO1xuICAgICAgbGV0IGFyZ3MgPSBbJ3NoZWxsJywgJ3VpYXV0b21hdG9yJywgJ3J1bnRlc3QnLCBqYXJOYW1lLCAnLWMnLCBjbGFzc05hbWUsIC4uLmV4dHJhUGFyYW1zXTtcbiAgICAgIHRoaXMucHJvYyA9IHRoaXMuYWRiLmNyZWF0ZVN1YlByb2Nlc3MoYXJncyk7XG5cbiAgICAgIC8vIGhhbmRsZSBvdXQtb2YtYm91bmQgZXhpdCBieSBzaW1wbHkgZW1pdHRpbmcgYSBzdG9wcGVkIHN0YXRlXG4gICAgICB0aGlzLnByb2Mub24oJ2V4aXQnLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgIHByb2Nlc3NJc0FsaXZlID0gZmFsc2U7XG4gICAgICAgIC8vIGNsZWFudXBcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IFVpQXV0b21hdG9yLlNUQVRFX1NUT1BQRUQgJiZcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgIT09IFVpQXV0b21hdG9yLlNUQVRFX1NUT1BQSU5HKSB7XG4gICAgICAgICAgbGV0IG1zZyA9IGBVaUF1dG9tYXRvciBleGl0ZWQgdW5leHBlY3RlZGx5IHdpdGggY29kZSAke2NvZGV9LCBgICtcbiAgICAgICAgICAgICAgICAgICAgYHNpZ25hbCAke3NpZ25hbH1gO1xuICAgICAgICAgIGxvZy5lcnJvcihtc2cpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGUgPT09IFVpQXV0b21hdG9yLlNUQVRFX1NUT1BQSU5HKSB7XG4gICAgICAgICAgbG9nLmRlYnVnKCdVaUF1dG9tYXRvciBzaHV0IGRvd24gbm9ybWFsbHknKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoYW5nZVN0YXRlKFVpQXV0b21hdG9yLlNUQVRFX1NUT1BQRUQpO1xuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHRoaXMucHJvYy5zdGFydChzdGFydERldGVjdG9yKTtcbiAgICAgIHByb2Nlc3NJc0FsaXZlID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2hhbmdlU3RhdGUoVWlBdXRvbWF0b3IuU1RBVEVfT05MSU5FKTtcbiAgICAgIHJldHVybiB0aGlzLnByb2M7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5lbWl0KFVpQXV0b21hdG9yLkVWRU5UX0VSUk9SLCBlKTtcbiAgICAgIGlmIChwcm9jZXNzSXNBbGl2ZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmtpbGxVaUF1dG9tYXRvck9uRGV2aWNlKCk7XG4gICAgICAgIGF3YWl0IHRoaXMucHJvYy5zdG9wKCk7XG4gICAgICB9XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzaHV0ZG93biAoKSB7XG4gICAgbG9nLmRlYnVnKCdTaHV0dGluZyBkb3duIFVpQXV0b21hdG9yJyk7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09IFVpQXV0b21hdG9yLlNUQVRFX1NUT1BQRUQpIHtcbiAgICAgIHRoaXMuY2hhbmdlU3RhdGUoVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBJTkcpO1xuICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0b3AoKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5raWxsVWlBdXRvbWF0b3JPbkRldmljZSgpO1xuICAgIHRoaXMuY2hhbmdlU3RhdGUoVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBFRCk7XG4gIH1cblxuICBwYXJzZUphck5hbWVGcm9tUGF0aCAoYmluYXJ5UGF0aCkge1xuICAgIGxldCByZVRlc3QgPSAvLiooXFwvfFxcXFwpKC4qXFwuamFyKS8uZXhlYyhiaW5hcnlQYXRoKTtcbiAgICBpZiAoIXJlVGVzdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcGFyc2UgamFyIG5hbWUgZnJvbSAke2JpbmFyeVBhdGh9YCk7XG4gICAgfVxuICAgIGxldCBqYXJOYW1lID0gcmVUZXN0WzJdO1xuICAgIGxvZy5kZWJ1ZyhgRm91bmQgamFyIG5hbWU6ICcke2phck5hbWV9J2ApO1xuICAgIHJldHVybiBqYXJOYW1lO1xuICB9XG5cbiAgY2hhbmdlU3RhdGUgKHN0YXRlKSB7XG4gICAgbG9nLmRlYnVnKGBNb3ZpbmcgdG8gc3RhdGUgJyR7c3RhdGV9J2ApO1xuICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICB0aGlzLmVtaXQoVWlBdXRvbWF0b3IuRVZFTlRfQ0hBTkdFRCwge3N0YXRlfSk7XG4gIH1cblxuICBhc3luYyBraWxsVWlBdXRvbWF0b3JPbkRldmljZSAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLmtpbGxQcm9jZXNzZXNCeU5hbWUoJ3VpYXV0b21hdG9yJyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLndhcm4oYEVycm9yIHdoaWxlIGtpbGxpbmcgdWlBdXRvbWF0b3I6ICR7ZX1gKTtcbiAgICB9XG4gIH1cblxufVxuXG5VaUF1dG9tYXRvci5FVkVOVF9FUlJPUiA9ICd1aWF1dG9tYXRvcl9lcnJvcic7XG5VaUF1dG9tYXRvci5FVkVOVF9DSEFOR0VEID0gJ3N0YXRlQ2hhbmdlZCc7XG5VaUF1dG9tYXRvci5TVEFURV9TVE9QUElORyA9ICdzdG9wcGluZyc7XG5VaUF1dG9tYXRvci5TVEFURV9TVE9QUEVEID0gJ3N0b3BwZWQnO1xuVWlBdXRvbWF0b3IuU1RBVEVfU1RBUlRJTkcgPSAnc3RhcnRpbmcnO1xuVWlBdXRvbWF0b3IuU1RBVEVfT05MSU5FID0gJ29ubGluZSc7XG5cblxuZXhwb3J0IHsgVWlBdXRvbWF0b3IgfTtcbmV4cG9ydCBkZWZhdWx0IFVpQXV0b21hdG9yO1xuIl0sImZpbGUiOiJsaWIvdWlhdXRvbWF0b3IuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.default = exports.helpers = exports.FINGERPRINT_UNLOCK = exports.PATTERN_UNLOCK = exports.PASSWORD_UNLOCK = exports.PIN_UNLOCK_KEY_EVENT = exports.PIN_UNLOCK = void 0;
8
+ exports.helpers = exports.default = exports.PIN_UNLOCK_KEY_EVENT = exports.PIN_UNLOCK = exports.PATTERN_UNLOCK = exports.PASSWORD_UNLOCK = exports.FINGERPRINT_UNLOCK = void 0;
9
9
 
10
10
  require("source-map-support/register");
11
11
 
@@ -15,7 +15,7 @@ var _asyncbox = require("asyncbox");
15
15
 
16
16
  var _lodash = _interopRequireDefault(require("lodash"));
17
17
 
18
- var _appiumSupport = require("appium-support");
18
+ var _support = require("@appium/support");
19
19
 
20
20
  const PIN_UNLOCK = 'pin';
21
21
  exports.PIN_UNLOCK = PIN_UNLOCK;
@@ -127,13 +127,13 @@ helpers.pinUnlock = async function pinUnlock(adb, driver, capabilities) {
127
127
  const pins = {};
128
128
 
129
129
  for (const el of els) {
130
- const text = await driver.getAttribute('text', _appiumSupport.util.unwrapElement(el));
130
+ const text = await driver.getAttribute('text', _support.util.unwrapElement(el));
131
131
  pins[text] = el;
132
132
  }
133
133
 
134
134
  for (const pin of keys) {
135
135
  const el = pins[pin];
136
- await driver.click(_appiumSupport.util.unwrapElement(el));
136
+ await driver.click(_support.util.unwrapElement(el));
137
137
  }
138
138
  } else {
139
139
  for (const pin of keys) {
@@ -143,7 +143,7 @@ helpers.pinUnlock = async function pinUnlock(adb, driver, capabilities) {
143
143
  return await helpers.pinUnlockWithKeyEvent(adb, driver, capabilities);
144
144
  }
145
145
 
146
- await driver.click(_appiumSupport.util.unwrapElement(el));
146
+ await driver.click(_support.util.unwrapElement(el));
147
147
  }
148
148
  }
149
149
 
@@ -287,8 +287,8 @@ helpers.patternUnlock = async function patternUnlock(adb, driver, capabilities)
287
287
  const keys = helpers.stringKeyToArr(unlockKey);
288
288
  const apiLevel = await adb.getApiLevel();
289
289
  const el = await driver.findElOrEls('id', `com.android.${apiLevel >= 21 ? 'systemui' : 'keyguard'}:id/lockPatternView`, false);
290
- const initPos = await driver.getLocation(_appiumSupport.util.unwrapElement(el));
291
- const size = await driver.getSize(_appiumSupport.util.unwrapElement(el));
290
+ const initPos = await driver.getLocation(_support.util.unwrapElement(el));
291
+ const size = await driver.getSize(_support.util.unwrapElement(el));
292
292
  const actions = helpers.getPatternActions(keys, initPos, size.width / 3);
293
293
  await driver.performTouch(actions);
294
294
  await (0, _asyncbox.sleep)(UNLOCK_WAIT_TIME);
@@ -303,4 +303,4 @@ var _default = helpers;
303
303
  exports.default = _default;require('source-map-support').install();
304
304
 
305
305
 
306
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91bmxvY2staGVscGVycy5qcyJdLCJuYW1lcyI6WyJQSU5fVU5MT0NLIiwiUElOX1VOTE9DS19LRVlfRVZFTlQiLCJQQVNTV09SRF9VTkxPQ0siLCJQQVRURVJOX1VOTE9DSyIsIkZJTkdFUlBSSU5UX1VOTE9DSyIsIlVOTE9DS19UWVBFUyIsIktFWUNPREVfTlVNUEFEX0VOVEVSIiwiVU5MT0NLX1dBSVRfVElNRSIsIklOUFVUX0tFWVNfV0FJVF9USU1FIiwiTlVNQkVSX1pFUk9fS0VZQ09ERSIsImhlbHBlcnMiLCJ2YWxpZGF0ZVVubG9ja0NhcGFiaWxpdGllcyIsImNhcHMiLCJ1bmxvY2tLZXkiLCJ1bmxvY2tUeXBlIiwiXyIsImlzTmlsIiwiRXJyb3IiLCJpbmNsdWRlcyIsInRlc3QiLCJ0cmltIiwiZmFzdFVubG9jayIsImFkYiIsIm9wdHMiLCJjcmVkZW50aWFsIiwiY3JlZGVudGlhbFR5cGUiLCJsb2dnZXIiLCJpbmZvIiwid2FzTG9ja0VuYWJsZWQiLCJpc0xvY2tFbmFibGVkIiwiY2xlYXJMb2NrQ3JlZGVudGlhbCIsImN5Y2xlV2FrZVVwIiwiZGlzbWlzc0tleWd1YXJkIiwic2V0TG9ja0NyZWRlbnRpYWwiLCJlbmNvZGVQYXNzd29yZCIsImtleSIsInJlcGxhY2UiLCJzdHJpbmdLZXlUb0FyciIsInNwbGl0IiwiZmluZ2VycHJpbnRVbmxvY2siLCJkcml2ZXIiLCJjYXBhYmlsaXRpZXMiLCJnZXRBcGlMZXZlbCIsImZpbmdlcnByaW50IiwicGluVW5sb2NrIiwia2V5cyIsImVscyIsImZpbmRFbE9yRWxzIiwiaXNFbXB0eSIsInBpblVubG9ja1dpdGhLZXlFdmVudCIsInBpbnMiLCJlbCIsInRleHQiLCJnZXRBdHRyaWJ1dGUiLCJ1dGlsIiwidW53cmFwRWxlbWVudCIsInBpbiIsImNsaWNrIiwid2FpdEZvclVubG9jayIsImlzU2NyZWVuTG9ja2VkIiwia2V5ZXZlbnQiLCJzaGVsbCIsInBhcnNlSW50IiwicGFzc3dvcmRVbmxvY2siLCJnZXRQYXR0ZXJuS2V5UG9zaXRpb24iLCJpbml0UG9zIiwicGllY2UiLCJjb2xzIiwieFBvcyIsIngiLCJNYXRoIiwicm91bmQiLCJ5UG9zIiwieSIsImNlaWwiLCJnZXRQYXR0ZXJuQWN0aW9ucyIsImFjdGlvbnMiLCJsYXN0UG9zIiwia2V5UG9zIiwicHVzaCIsImFjdGlvbiIsIm9wdGlvbnMiLCJlbGVtZW50IiwibW92ZVRvIiwiZGlmZlgiLCJhYnMiLCJkaWZmWSIsInBhdHRlcm5VbmxvY2siLCJhcGlMZXZlbCIsImdldExvY2F0aW9uIiwic2l6ZSIsImdldFNpemUiLCJ3aWR0aCIsInBlcmZvcm1Ub3VjaCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxVQUFVLEdBQUcsS0FBbkI7O0FBQ0EsTUFBTUMsb0JBQW9CLEdBQUcsaUJBQTdCOztBQUNBLE1BQU1DLGVBQWUsR0FBRyxVQUF4Qjs7QUFDQSxNQUFNQyxjQUFjLEdBQUcsU0FBdkI7O0FBQ0EsTUFBTUMsa0JBQWtCLEdBQUcsYUFBM0I7O0FBQ0EsTUFBTUMsWUFBWSxHQUFHLENBQ25CTCxVQURtQixFQUNQQyxvQkFETyxFQUNlQyxlQURmLEVBRW5CQyxjQUZtQixFQUVIQyxrQkFGRyxDQUFyQjtBQUlBLE1BQU1FLG9CQUFvQixHQUFHLEVBQTdCO0FBQ0EsTUFBTUMsZ0JBQWdCLEdBQUcsR0FBekI7QUFDQSxNQUFNQyxvQkFBb0IsR0FBRyxHQUE3QjtBQUNBLE1BQU1DLG1CQUFtQixHQUFHLENBQTVCO0FBRUEsTUFBTUMsT0FBTyxHQUFHLEVBQWhCOzs7QUFFQUEsT0FBTyxDQUFDQywwQkFBUixHQUFxQyxTQUFTQSwwQkFBVCxDQUFxQ0MsSUFBSSxHQUFHLEVBQTVDLEVBQWdEO0FBQ25GLFFBQU07QUFDSkMsSUFBQUEsU0FESTtBQUVKQyxJQUFBQTtBQUZJLE1BR0ZGLElBSEo7O0FBSUEsTUFBSUcsZ0JBQUVDLEtBQUYsQ0FBUUgsU0FBUixLQUFzQkEsU0FBUyxLQUFLLEVBQXhD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QUNBTyxPQUFPLENBQUNOLGtCQUFSLEdBQTZCQSxrQkFBN0I7ZUFNZU0sTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2dnZXIgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcblxuY29uc3QgUElOX1VOTE9DSyA9ICdwaW4nO1xuY29uc3QgUElOX1VOTE9DS19LRVlfRVZFTlQgPSAncGluV2l0aEtleUV2ZW50JztcbmNvbnN0IFBBU1NXT1JEX1VOTE9DSyA9ICdwYXNzd29yZCc7XG5jb25zdCBQQVRURVJOX1VOTE9DSyA9ICdwYXR0ZXJuJztcbmNvbnN0IEZJTkdFUlBSSU5UX1VOTE9DSyA9ICdmaW5nZXJwcmludCc7XG5jb25zdCBVTkxPQ0tfVFlQRVMgPSBbXG4gIFBJTl9VTkxPQ0ssIFBJTl9VTkxPQ0tfS0VZX0VWRU5ULCBQQVNTV09SRF9VTkxPQ0ssXG4gIFBBVFRFUk5fVU5MT0NLLCBGSU5HRVJQUklOVF9VTkxPQ0tcbl07XG5jb25zdCBLRVlDT0RFX05VTVBBRF9FTlRFUiA9IDY2O1xuY29uc3QgVU5MT0NLX1dBSVRfVElNRSA9IDEwMDtcbmNvbnN0IElOUFVUX0tFWVNfV0FJVF9USU1FID0gMTAwO1xuY29uc3QgTlVNQkVSX1pFUk9fS0VZQ09ERSA9IDc7XG5cbmNvbnN0IGhlbHBlcnMgPSB7fTtcblxuaGVscGVycy52YWxpZGF0ZVVubG9ja0NhcGFiaWxpdGllcyA9IGZ1bmN0aW9uIHZhbGlkYXRlVW5sb2NrQ2FwYWJpbGl0aWVzIChjYXBzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHVubG9ja0tleSxcbiAgICB1bmxvY2tUeXBlLFxuICB9ID0gY2FwcztcbiAgaWYgKF8uaXNOaWwodW5sb2NrS2V5KSB8fCB1bmxvY2tLZXkgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBIG5vbi1lbXB0eSB1bmxvY2sga2V5IHZhbHVlIG11c3QgYmUgcHJvdmlkZWQnKTtcbiAgfVxuXG4gIGlmIChbUElOX1VOTE9DSywgUElOX1VOTE9DS19LRVlfRVZFTlQsIEZJTkdFUlBSSU5UX1VOTE9DS10uaW5jbHVkZXModW5sb2NrVHlwZSkpIHtcbiAgICBpZiAoIS9eWzAtOV0rJC8udGVzdChfLnRyaW0odW5sb2NrS2V5KSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5sb2NrIGtleSB2YWx1ZSAnJHt1bmxvY2tLZXl9JyBtdXN0IG9ubHkgY29uc2lzdCBvZiBkaWdpdHNgKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodW5sb2NrVHlwZSA9PT0gUEFUVEVSTl9VTkxPQ0spIHtcbiAgICBpZiAoIS9eWzEtOV17Miw5fSQvLnRlc3QoXy50cmltKHVubG9ja0tleSkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVubG9jayBrZXkgdmFsdWUgJyR7dW5sb2NrS2V5fScgbXVzdCBvbmx5IGluY2x1ZGUgZnJvbSB0d28gdG8gbmluZSBkaWdpdHMgaW4gcmFuZ2UgMS4uOWApO1xuICAgIH1cbiAgICBpZiAoLyhbMS05XSkuKj9cXDEvLnRlc3QoXy50cmltKHVubG9ja0tleSkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVubG9jayBrZXkgdmFsdWUgJyR7dW5sb2NrS2V5fScgbXVzdCBkZWZpbmUgYSB2YWxpZCBwYXR0ZXJuIHdoZXJlIHJlcGVhdHMgYXJlIG5vdCBhbGxvd2VkYCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHVubG9ja1R5cGUgPT09IFBBU1NXT1JEX1VOTE9DSykge1xuICAgIC8vIERvbnQgdHJpbSBwYXNzd29yZCBrZXksIHlvdSBjYW4gdXNlIGJsYW5rIHNwYWNlcyBpbiB5b3VyIGFuZHJvaWQgcGFzc3dvcmRcbiAgICAvLyDCr1xcXyjjg4QpXy/Cr1xuICAgIGlmICghLy57NCx9L2cudGVzdCh1bmxvY2tLZXkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBtaW5pbXVtIGFsbG93ZWQgbGVuZ3RoIG9mIHVubG9jayBrZXkgdmFsdWUgJyR7dW5sb2NrS2V5fScgaXMgNCBjaGFyYWN0ZXJzYCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB1bmxvY2sgdHlwZSAnJHt1bmxvY2tUeXBlfScuIGAgK1xuICAgICAgYE9ubHkgdGhlIGZvbGxvd2luZyB1bmxvY2sgdHlwZXMgYXJlIHN1cHBvcnRlZDogJHtVTkxPQ0tfVFlQRVN9YCk7XG4gIH1cbiAgcmV0dXJuIGNhcHM7XG59O1xuXG5oZWxwZXJzLmZhc3RVbmxvY2sgPSBhc3luYyBmdW5jdGlvbiBmYXN0VW5sb2NrIChhZGIsIG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgY3JlZGVudGlhbCxcbiAgICBjcmVkZW50aWFsVHlwZSxcbiAgfSA9IG9wdHM7XG4gIGxvZ2dlci5pbmZvKGBVbmxvY2tpbmcgdGhlIGRldmljZSB2aWEgQURCIHVzaW5nICR7Y3JlZGVudGlhbFR5cGV9IGNyZWRlbnRpYWwgJyR7Y3JlZGVudGlhbH0nYCk7XG4gIGNvbnN0IHdhc0xvY2tFbmFibGVkID0gYXdhaXQgYWRiLmlzTG9ja0VuYWJsZWQoKTtcbiAgaWYgKHdhc0xvY2tFbmFibGVkKSB7XG4gICAgYXdhaXQgYWRiLmNsZWFyTG9ja0NyZWRlbnRpYWwoY3JlZGVudGlhbCk7XG4gICAgLy8gbm90IHN1cmUgd2h5LCBidXQgdGhlIGRldmljZSdzIHNjcmVlbiBzdGlsbCByZW1haW5zIGxvY2tlZFxuICAgIC8vIGlmIGEgcHJlbGltaW5hcnkgd2FrZSB1cCBjeWNsZSBoYXMgbm90IGJlZW4gcGVyZm9ybWVkXG4gICAgYXdhaXQgYWRiLmN5Y2xlV2FrZVVwKCk7XG4gIH0gZWxzZSB7XG4gICAgbG9nZ2VyLmluZm8oJ05vIGFjdGl2ZSBsb2NrIGhhcyBiZWVuIGRldGVjdGVkLiBQcm9jZWVkaW5nIHRvIHRoZSBrZXlndWFyZCBkaXNtaXNzYWwnKTtcbiAgfVxuICB0cnkge1xuICAgIGF3YWl0IGFkYi5kaXNtaXNzS2V5Z3VhcmQoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAod2FzTG9ja0VuYWJsZWQpIHtcbiAgICAgIGF3YWl0IGFkYi5zZXRMb2NrQ3JlZGVudGlhbChjcmVkZW50aWFsVHlwZSwgY3JlZGVudGlhbCk7XG4gICAgfVxuICB9XG59O1xuXG5oZWxwZXJzLmVuY29kZVBhc3N3b3JkID0gZnVuY3Rpb24gZW5jb2RlUGFzc3dvcmQgKGtleSkge1xuICByZXR1cm4gYCR7a2V5fWAucmVwbGFjZSgvXFxzL2lnLCAnJXMnKTtcbn07XG5cbmhlbHBlcnMuc3RyaW5nS2V5VG9BcnIgPSBmdW5jdGlvbiBzdHJpbmdLZXlUb0FyciAoa2V5KSB7XG4gIHJldHVybiBgJHtrZXl9YC50cmltKCkucmVwbGFjZSgvXFxzKy9nLCAnJykuc3BsaXQoL1xccyovKTtcbn07XG5cbmhlbHBlcnMuZmluZ2VycHJpbnRVbmxvY2sgPSBhc3luYyBmdW5jdGlvbiBmaW5nZXJwcmludFVubG9jayAoYWRiLCBkcml2ZXIsIGNhcGFiaWxpdGllcykge1xuICBpZiAoYXdhaXQgYWRiLmdldEFwaUxldmVsKCkgPCAyMykge1xuICAgIHRocm93IG5ldyBFcnJvcignRmluZ2VycHJpbnQgdW5sb2NrIG9ubHkgd29ya3MgZm9yIEFuZHJvaWQgNisgZW11bGF0b3JzJyk7XG4gIH1cbiAgYXdhaXQgYWRiLmZpbmdlcnByaW50KGNhcGFiaWxpdGllcy51bmxvY2tLZXkpO1xuICBhd2FpdCBzbGVlcChVTkxPQ0tfV0FJVF9USU1FKTtcbn07XG5cbmhlbHBlcnMucGluVW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gcGluVW5sb2NrIChhZGIsIGRyaXZlciwgY2FwYWJpbGl0aWVzKSB7XG4gIGxvZ2dlci5pbmZvKGBUcnlpbmcgdG8gdW5sb2NrIGRldmljZSB1c2luZyBwaW4gJHtjYXBhYmlsaXRpZXMudW5sb2NrS2V5fWApO1xuICBhd2FpdCBhZGIuZGlzbWlzc0tleWd1YXJkKCk7XG4gIGNvbnN0IGtleXMgPSBoZWxwZXJzLnN0cmluZ0tleVRvQXJyKGNhcGFiaWxpdGllcy51bmxvY2tLZXkpO1xuICBpZiAoYXdhaXQgYWRiLmdldEFwaUxldmVsKCkgPj0gMjEpIHtcbiAgICBjb25zdCBlbHMgPSBhd2FpdCBkcml2ZXIuZmluZEVsT3JFbHMoJ2lkJywgJ2NvbS5hbmRyb2lkLnN5c3RlbXVpOmlkL2RpZ2l0X3RleHQnLCB0cnVlKTtcbiAgICBpZiAoXy5pc0VtcHR5KGVscykpIHtcbiAgICAgIC8vIGZhbGxiYWNrIHRvIHBpbiB3aXRoIGtleSBldmVudFxuICAgICAgcmV0dXJuIGF3YWl0IGhlbHBlcnMucGluVW5sb2NrV2l0aEtleUV2ZW50KGFkYiwgZHJpdmVyLCBjYXBhYmlsaXRpZXMpO1xuICAgIH1cbiAgICBjb25zdCBwaW5zID0ge307XG4gICAgZm9yIChjb25zdCBlbCBvZiBlbHMpIHtcbiAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCBkcml2ZXIuZ2V0QXR0cmlidXRlKCd0ZXh0JywgdXRpbC51bndyYXBFbGVtZW50KGVsKSk7XG4gICAgICBwaW5zW3RleHRdID0gZWw7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcGluIG9mIGtleXMpIHtcbiAgICAgIGNvbnN0IGVsID0gcGluc1twaW5dO1xuICAgICAgYXdhaXQgZHJpdmVyLmNsaWNrKHV0aWwudW53cmFwRWxlbWVudChlbCkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGNvbnN0IHBpbiBvZiBrZXlzKSB7XG4gICAgICBjb25zdCBlbCA9IGF3YWl0IGRyaXZlci5maW5kRWxPckVscygnaWQnLCBgY29tLmFuZHJvaWQua2V5Z3VhcmQ6aWQva2V5JHtwaW59YCwgZmFsc2UpO1xuICAgICAgaWYgKGVsID09PSBudWxsKSB7XG4gICAgICAgIC8vIGZhbGxiYWNrIHRvIHBpbiB3aXRoIGtleSBldmVudFxuICAgICAgICByZXR1cm4gYXdhaXQgaGVscGVycy5waW5VbmxvY2tXaXRoS2V5RXZlbnQoYWRiLCBkcml2ZXIsIGNhcGFiaWxpdGllcyk7XG4gICAgICB9XG4gICAgICBhd2FpdCBkcml2ZXIuY2xpY2sodXRpbC51bndyYXBFbGVtZW50KGVsKSk7XG4gICAgfVxuICB9XG4gIGF3YWl0IHdhaXRGb3JVbmxvY2soYWRiKTtcbn07XG5cbi8qKlxuICogV2FpdCBmb3IgdGhlIGRpc3BsYXkgdG8gYmUgdW5sb2NrZWQuXG4gKiBTb21lIGRldmljZXMgYXV0b21hdGljYWxseSBhY2NlcHQgdHlwZWQgJ3BpbicgYW5kICdwYXNzd29yZCcgY29kZVxuICogd2l0aG91dCBwcmVzc2luZyB0aGUgRW50ZXIga2V5LiBCdXQgc29tZSBkZXZpY2VzIG5lZWQgaXQuXG4gKiBUaGlzIG1ldGhvZCB3YWl0cyBhIGZldyBzZWNvbmRzIGZpcnN0IGZvciBzdWNoIGF1dG9tYXRpYyBhY2NlcHRhbmNlIGNhc2UuXG4gKiBJZiB0aGUgZGV2aWNlIGlzIHN0aWxsIGxvY2tlZCwgdGhlbiB0aGlzIG1ldGhvZCB3aWxsIHRyeSB0byBzZW5kXG4gKiB0aGUgZW50ZXIga2V5IGNvZGUuXG4gKlxuICogQHBhcmFtIHtBREJ9IGFkYiBUaGUgaW5zdGFuY2Ugb2YgQURCXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JVbmxvY2sgKGFkYikge1xuICBhd2FpdCBzbGVlcChVTkxPQ0tfV0FJVF9USU1FKTtcbiAgaWYgKCFhd2FpdCBhZGIuaXNTY3JlZW5Mb2NrZWQoKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IGFkYi5rZXlldmVudChLRVlDT0RFX05VTVBBRF9FTlRFUik7XG4gIGF3YWl0IHNsZWVwKFVOTE9DS19XQUlUX1RJTUUpO1xufVxuXG5oZWxwZXJzLnBpblVubG9ja1dpdGhLZXlFdmVudCA9IGFzeW5jIGZ1bmN0aW9uIHBpblVubG9ja1dpdGhLZXlFdmVudCAoYWRiLCBkcml2ZXIsIGNhcGFiaWxpdGllcykge1xuICBsb2dnZXIuaW5mbyhgVHJ5aW5nIHRvIHVubG9jayBkZXZpY2UgdXNpbmcgcGluIHdpdGgga2V5Y29kZSAke2NhcGFiaWxpdGllcy51bmxvY2tLZXl9YCk7XG4gIGF3YWl0IGFkYi5kaXNtaXNzS2V5Z3VhcmQoKTtcbiAgY29uc3Qga2V5cyA9IGhlbHBlcnMuc3RyaW5nS2V5VG9BcnIoY2FwYWJpbGl0aWVzLnVubG9ja0tleSk7XG5cbiAgLy8gU29tZSBkZXZpY2UgZG9lcyBub3QgaGF2ZSBzeXN0ZW0ga2V5IGlkcyBsaWtlICdjb20uYW5kcm9pZC5rZXlndWFyZDppZC9rZXknXG4gIC8vIFRoZW4sIHNlbmRpbmcga2V5ZXZlbnRzIGFyZSBtb3JlIHJlbGlhYmxlIHRvIHVubG9jayB0aGUgc2NyZWVuLlxuICBmb3IgKGNvbnN0IHBpbiBvZiBrZXlzKSB7XG4gICAgLy8gJ3BpbicgaXMgbnVtYmVyICgwLTkpIGluIHN0cmluZy5cbiAgICAvLyBOdW1iZXIgJzAnIGlzIGtleWNvZGUgJzcnLiBudW1iZXIgJzknIGlzIGtleWNvZGUgJzE2Jy5cbiAgICBhd2FpdCBhZGIuc2hlbGwoWydpbnB1dCcsICdrZXlldmVudCcsIHBhcnNlSW50KHBpbiwgMTApICsgTlVNQkVSX1pFUk9fS0VZQ09ERV0pO1xuICB9XG4gIGF3YWl0IHdhaXRGb3JVbmxvY2soYWRiLCBkcml2ZXIpO1xufTtcblxuaGVscGVycy5wYXNzd29yZFVubG9jayA9IGFzeW5jIGZ1bmN0aW9uIHBhc3N3b3JkVW5sb2NrIChhZGIsIGRyaXZlciwgY2FwYWJpbGl0aWVzKSB7XG4gIGNvbnN0IHsgdW5sb2NrS2V5IH0gPSBjYXBhYmlsaXRpZXM7XG4gIGxvZ2dlci5pbmZvKGBUcnlpbmcgdG8gdW5sb2NrIGRldmljZSB1c2luZyBwYXNzd29yZCAke3VubG9ja0tleX1gKTtcbiAgYXdhaXQgYWRiLmRpc21pc3NLZXlndWFyZCgpO1xuICAvLyBSZXBsYWNlIGJsYW5rIHNwYWNlcyB3aXRoICVzXG4gIGNvbnN0IGtleSA9IGhlbHBlcnMuZW5jb2RlUGFzc3dvcmQodW5sb2NrS2V5KTtcbiAgLy8gV2h5IGFkYiA/IEl0IHdhcyBsZXNzIGZsYWt5XG4gIGF3YWl0IGFkYi5zaGVsbChbJ2lucHV0JywgJ3RleHQnLCBrZXldKTtcbiAgLy8gV2h5IHNsZWVwcyA/IEF2b2lkIHNvbWUgZmxha3luZXNzIHdhaXRpbmcgZm9yIHRoZSBpbnB1dCB0byByZWNlaXZlIHRoZSBrZXlzXG4gIGF3YWl0IHNsZWVwKElOUFVUX0tFWVNfV0FJVF9USU1FKTtcbiAgYXdhaXQgYWRiLnNoZWxsKFsnaW5wdXQnLCAna2V5ZXZlbnQnLCBLRVlDT0RFX05VTVBBRF9FTlRFUl0pO1xuICAvLyBXYWl0cyBhIGJpdCBmb3IgdGhlIGRldmljZSB0byBiZSB1bmxvY2tlZFxuICBhd2FpdCB3YWl0Rm9yVW5sb2NrKGFkYiwgZHJpdmVyKTtcbn07XG5cbmhlbHBlcnMuZ2V0UGF0dGVybktleVBvc2l0aW9uID0gZnVuY3Rpb24gZ2V0UGF0dGVybktleVBvc2l0aW9uIChrZXksIGluaXRQb3MsIHBpZWNlKSB7XG4gIC8qXG4gIEhvdyB0aGUgbWF0aCB3b3JrczpcbiAgV2UgaGF2ZSA5IGJ1dHRvbnMgZGl2aWRlZCBpbiAzIGNvbHVtbnMgYW5kIDMgcm93cyBpbnNpZGUgdGhlIGxvY2tQYXR0ZXJuVmlldyxcbiAgZXZlcnkgYnV0dG9uIGhhcyBhIHBvc2l0aW9uIG9uIHRoZSBzY3JlZW4gY29ycmVzcG9uZGluZyB0byB0aGUgbG9ja1BhdHRlcm5WaWV3IHNpbmNlXG4gIGl0IGlzIHRoZSBwYXJlbnQgdmlldyByaWdodCBhdCB0aGUgbWlkZGxlIG9mIGVhY2ggY29sdW1uIG9yIHJvdy5cbiAgKi9cbiAgY29uc3QgY29scyA9IDM7XG4gIGNvbnN0IHBpbnMgPSA5O1xuICBjb25zdCB4UG9zID0gKGtleSwgeCwgcGllY2UpID0+IE1hdGgucm91bmQoeCArICgoa2V5ICUgY29scykgfHwgY29scykgKiBwaWVjZSAtIHBpZWNlIC8gMik7XG4gIGNvbnN0IHlQb3MgPSAoa2V5LCB5LCBwaWVjZSkgPT4gTWF0aC5yb3VuZCh5ICsgKE1hdGguY2VpbCgoKGtleSAlIHBpbnMpIHx8IHBpbnMpIC8gY29scykgKiBwaWVjZSAtIHBpZWNlIC8gMikpO1xuICByZXR1cm4ge1xuICAgIHg6IHhQb3Moa2V5LCBpbml0UG9zLngsIHBpZWNlKSxcbiAgICB5OiB5UG9zKGtleSwgaW5pdFBvcy55LCBwaWVjZSlcbiAgfTtcbn07XG5cbmhlbHBlcnMuZ2V0UGF0dGVybkFjdGlvbnMgPSBmdW5jdGlvbiBnZXRQYXR0ZXJuQWN0aW9ucyAoa2V5cywgaW5pdFBvcywgcGllY2UpIHtcbiAgY29uc3QgYWN0aW9ucyA9IFtdO1xuICBsZXQgbGFzdFBvcztcbiAgZm9yIChsZXQga2V5IG9mIGtleXMpIHtcbiAgICBjb25zdCBrZXlQb3MgPSBoZWxwZXJzLmdldFBhdHRlcm5LZXlQb3NpdGlvbihrZXksIGluaXRQb3MsIHBpZWNlKTtcbiAgICBpZiAoa2V5ID09PSBrZXlzWzBdKSB7XG4gICAgICBhY3Rpb25zLnB1c2goe2FjdGlvbjogJ3ByZXNzJywgb3B0aW9uczoge2VsZW1lbnQ6IG51bGwsIHg6IGtleVBvcy54LCB5OiBrZXlQb3MueX19KTtcbiAgICAgIGxhc3RQb3MgPSBrZXlQb3M7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgbW92ZVRvID0ge3g6IDAsIHk6IDB9O1xuICAgIGNvbnN0IGRpZmZYID0ga2V5UG9zLnggLSBsYXN0UG9zLng7XG4gICAgaWYgKGRpZmZYID4gMCkge1xuICAgICAgbW92ZVRvLnggPSBwaWVjZTtcbiAgICAgIGlmIChNYXRoLmFicyhkaWZmWCkgPiBwaWVjZSkge1xuICAgICAgICBtb3ZlVG8ueCArPSBwaWVjZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRpZmZYIDwgMCkge1xuICAgICAgbW92ZVRvLnggPSAtMSAqIHBpZWNlO1xuICAgICAgaWYgKE1hdGguYWJzKGRpZmZYKSA+IHBpZWNlKSB7XG4gICAgICAgIG1vdmVUby54IC09IHBpZWNlO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBkaWZmWSA9IGtleVBvcy55IC0gbGFzdFBvcy55O1xuICAgIGlmIChkaWZmWSA+IDApIHtcbiAgICAgIG1vdmVUby55ID0gcGllY2U7XG4gICAgICBpZiAoTWF0aC5hYnMoZGlmZlkpID4gcGllY2UpIHtcbiAgICAgICAgbW92ZVRvLnkgKz0gcGllY2U7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkaWZmWSA8IDApIHtcbiAgICAgIG1vdmVUby55ID0gLTEgKiBwaWVjZTtcbiAgICAgIGlmIChNYXRoLmFicyhkaWZmWSkgPiBwaWVjZSkge1xuICAgICAgICBtb3ZlVG8ueSAtPSBwaWVjZTtcbiAgICAgIH1cbiAgICB9XG4gICAgYWN0aW9ucy5wdXNoKHtcbiAgICAgIGFjdGlvbjogJ21vdmVUbycsXG4gICAgICBvcHRpb25zOiB7ZWxlbWVudDogbnVsbCwgeDogbW92ZVRvLnggKyBsYXN0UG9zLngsIHk6IG1vdmVUby55ICsgbGFzdFBvcy55fVxuICAgIH0pO1xuICAgIGxhc3RQb3MgPSBrZXlQb3M7XG4gIH1cbiAgYWN0aW9ucy5wdXNoKHthY3Rpb246ICdyZWxlYXNlJ30pO1xuICByZXR1cm4gYWN0aW9ucztcbn07XG5cbmhlbHBlcnMucGF0dGVyblVubG9jayA9IGFzeW5jIGZ1bmN0aW9uIHBhdHRlcm5VbmxvY2sgKGFkYiwgZHJpdmVyLCBjYXBhYmlsaXRpZXMpIHtcbiAgY29uc3QgeyB1bmxvY2tLZXkgfSA9IGNhcGFiaWxpdGllcztcbiAgbG9nZ2VyLmluZm8oYFRyeWluZyB0byB1bmxvY2sgZGV2aWNlIHVzaW5nIHBhdHRlcm4gJHt1bmxvY2tLZXl9YCk7XG4gIGF3YWl0IGFkYi5kaXNtaXNzS2V5Z3VhcmQoKTtcbiAgY29uc3Qga2V5cyA9IGhlbHBlcnMuc3RyaW5nS2V5VG9BcnIodW5sb2NrS2V5KTtcbiAgLyogV2Ugc2V0IHRoZSBkZXZpY2UgcGF0dGVybiBidXR0b25zIGFzIG51bWJlciBvZiBhIHJlZ3VsYXIgcGhvbmVcbiAgICogIHwg4oCiIOKAoiDigKIgfCAgICAgfCAxIDIgMyB8XG4gICAqICB8IOKAoiDigKIg4oCiIHwgLS0+IHwgNCA1IDYgfFxuICAgKiAgfCDigKIg4oCiIOKAoiB8ICAgICB8IDcgOCA5IHxcblxuICBUaGUgcGF0dGVybiB2aWV3IGJ1dHRvbnMgYXJlIG5vdCBzZWVpbmcgYnkgdGhlIHVpYXV0b21hdG9yIHNpbmNlIHRoZXkgYXJlXG4gIGluY2x1ZGVkIGluc2lkZSBhIEZyYW1lTGF5b3V0LCBzbyB3ZSBhcmUgZ29pbmcgdG8gdHJ5IGNsaWNraW5nIG9uIHRoZSBidXR0b25zXG4gIHVzaW5nIHRoZSBwYXJlbnQgdmlldyBib3VuZHMgYW5kIG1hdGguXG4gICovXG4gIGNvbnN0IGFwaUxldmVsID0gYXdhaXQgYWRiLmdldEFwaUxldmVsKCk7XG4gIGNvbnN0IGVsID0gYXdhaXQgZHJpdmVyLmZpbmRFbE9yRWxzKCdpZCcsXG4gICAgYGNvbS5hbmRyb2lkLiR7YXBpTGV2ZWwgPj0gMjEgPyAnc3lzdGVtdWknIDogJ2tleWd1YXJkJ306aWQvbG9ja1BhdHRlcm5WaWV3YCxcbiAgICBmYWxzZVxuICApO1xuICBjb25zdCBpbml0UG9zID0gYXdhaXQgZHJpdmVyLmdldExvY2F0aW9uKHV0aWwudW53cmFwRWxlbWVudChlbCkpO1xuICBjb25zdCBzaXplID0gYXdhaXQgZHJpdmVyLmdldFNpemUodXRpbC51bndyYXBFbGVtZW50KGVsKSk7XG4gIC8vIEdldCBhY3Rpb25zIHRvIHBlcmZvcm1cbiAgY29uc3QgYWN0aW9ucyA9IGhlbHBlcnMuZ2V0UGF0dGVybkFjdGlvbnMoa2V5cywgaW5pdFBvcywgc2l6ZS53aWR0aCAvIDMpO1xuICAvLyBQZXJmb3JtIGdlc3R1cmVcbiAgYXdhaXQgZHJpdmVyLnBlcmZvcm1Ub3VjaChhY3Rpb25zKTtcbiAgLy8gV2FpdHMgYSBiaXQgZm9yIHRoZSBkZXZpY2UgdG8gYmUgdW5sb2NrZWRcbiAgYXdhaXQgc2xlZXAoVU5MT0NLX1dBSVRfVElNRSk7XG59O1xuXG5oZWxwZXJzLlBJTl9VTkxPQ0sgPSBQSU5fVU5MT0NLO1xuaGVscGVycy5QSU5fVU5MT0NLX0tFWV9FVkVOVCA9IFBJTl9VTkxPQ0tfS0VZX0VWRU5UO1xuaGVscGVycy5QQVNTV09SRF9VTkxPQ0sgPSBQQVNTV09SRF9VTkxPQ0s7XG5oZWxwZXJzLlBBVFRFUk5fVU5MT0NLID0gUEFUVEVSTl9VTkxPQ0s7XG5oZWxwZXJzLkZJTkdFUlBSSU5UX1VOTE9DSyA9IEZJTkdFUlBSSU5UX1VOTE9DSztcblxuZXhwb3J0IHtcbiAgUElOX1VOTE9DSywgUElOX1VOTE9DS19LRVlfRVZFTlQsIFBBU1NXT1JEX1VOTE9DSywgUEFUVEVSTl9VTkxPQ0ssXG4gIEZJTkdFUlBSSU5UX1VOTE9DSywgaGVscGVyc1xufTtcbmV4cG9ydCBkZWZhdWx0IGhlbHBlcnM7XG4iXSwiZmlsZSI6ImxpYi91bmxvY2staGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
306
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91bmxvY2staGVscGVycy5qcyJdLCJuYW1lcyI6WyJQSU5fVU5MT0NLIiwiUElOX1VOTE9DS19LRVlfRVZFTlQiLCJQQVNTV09SRF9VTkxPQ0siLCJQQVRURVJOX1VOTE9DSyIsIkZJTkdFUlBSSU5UX1VOTE9DSyIsIlVOTE9DS19UWVBFUyIsIktFWUNPREVfTlVNUEFEX0VOVEVSIiwiVU5MT0NLX1dBSVRfVElNRSIsIklOUFVUX0tFWVNfV0FJVF9USU1FIiwiTlVNQkVSX1pFUk9fS0VZQ09ERSIsImhlbHBlcnMiLCJ2YWxpZGF0ZVVubG9ja0NhcGFiaWxpdGllcyIsImNhcHMiLCJ1bmxvY2tLZXkiLCJ1bmxvY2tUeXBlIiwiXyIsImlzTmlsIiwiRXJyb3IiLCJpbmNsdWRlcyIsInRlc3QiLCJ0cmltIiwiZmFzdFVubG9jayIsImFkYiIsIm9wdHMiLCJjcmVkZW50aWFsIiwiY3JlZGVudGlhbFR5cGUiLCJsb2dnZXIiLCJpbmZvIiwid2FzTG9ja0VuYWJsZWQiLCJpc0xvY2tFbmFibGVkIiwiY2xlYXJMb2NrQ3JlZGVudGlhbCIsImN5Y2xlV2FrZVVwIiwiZGlzbWlzc0tleWd1YXJkIiwic2V0TG9ja0NyZWRlbnRpYWwiLCJlbmNvZGVQYXNzd29yZCIsImtleSIsInJlcGxhY2UiLCJzdHJpbmdLZXlUb0FyciIsInNwbGl0IiwiZmluZ2VycHJpbnRVbmxvY2siLCJkcml2ZXIiLCJjYXBhYmlsaXRpZXMiLCJnZXRBcGlMZXZlbCIsImZpbmdlcnByaW50IiwicGluVW5sb2NrIiwia2V5cyIsImVscyIsImZpbmRFbE9yRWxzIiwiaXNFbXB0eSIsInBpblVubG9ja1dpdGhLZXlFdmVudCIsInBpbnMiLCJlbCIsInRleHQiLCJnZXRBdHRyaWJ1dGUiLCJ1dGlsIiwidW53cmFwRWxlbWVudCIsInBpbiIsImNsaWNrIiwid2FpdEZvclVubG9jayIsImlzU2NyZWVuTG9ja2VkIiwia2V5ZXZlbnQiLCJzaGVsbCIsInBhcnNlSW50IiwicGFzc3dvcmRVbmxvY2siLCJnZXRQYXR0ZXJuS2V5UG9zaXRpb24iLCJpbml0UG9zIiwicGllY2UiLCJjb2xzIiwieFBvcyIsIngiLCJNYXRoIiwicm91bmQiLCJ5UG9zIiwieSIsImNlaWwiLCJnZXRQYXR0ZXJuQWN0aW9ucyIsImFjdGlvbnMiLCJsYXN0UG9zIiwia2V5UG9zIiwicHVzaCIsImFjdGlvbiIsIm9wdGlvbnMiLCJlbGVtZW50IiwibW92ZVRvIiwiZGlmZlgiLCJhYnMiLCJkaWZmWSIsInBhdHRlcm5VbmxvY2siLCJhcGlMZXZlbCIsImdldExvY2F0aW9uIiwic2l6ZSIsImdldFNpemUiLCJ3aWR0aCIsInBlcmZvcm1Ub3VjaCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxVQUFVLEdBQUcsS0FBbkI7O0FBQ0EsTUFBTUMsb0JBQW9CLEdBQUcsaUJBQTdCOztBQUNBLE1BQU1DLGVBQWUsR0FBRyxVQUF4Qjs7QUFDQSxNQUFNQyxjQUFjLEdBQUcsU0FBdkI7O0FBQ0EsTUFBTUMsa0JBQWtCLEdBQUcsYUFBM0I7O0FBQ0EsTUFBTUMsWUFBWSxHQUFHLENBQ25CTCxVQURtQixFQUNQQyxvQkFETyxFQUNlQyxlQURmLEVBRW5CQyxjQUZtQixFQUVIQyxrQkFGRyxDQUFyQjtBQUlBLE1BQU1FLG9CQUFvQixHQUFHLEVBQTdCO0FBQ0EsTUFBTUMsZ0JBQWdCLEdBQUcsR0FBekI7QUFDQSxNQUFNQyxvQkFBb0IsR0FBRyxHQUE3QjtBQUNBLE1BQU1DLG1CQUFtQixHQUFHLENBQTVCO0FBRUEsTUFBTUMsT0FBTyxHQUFHLEVBQWhCOzs7QUFFQUEsT0FBTyxDQUFDQywwQkFBUixHQUFxQyxTQUFTQSwwQkFBVCxDQUFxQ0MsSUFBSSxHQUFHLEVBQTVDLEVBQWdEO0FBQ25GLFFBQU07QUFDSkMsSUFBQUEsU0FESTtBQUVKQyxJQUFBQTtBQUZJLE1BR0ZGLElBSEo7O0FBSUEsTUFBSUcsZ0JBQUVDLEtBQUYsQ0FBUUgsU0FBUixLQUFzQkEsU0FBUyxLQUFLLEVBQXhD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T0FBTyxDQUFDTixrQkFBUixHQUE2QkEsa0JBQTdCO2VBTWVNLE8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuXG5jb25zdCBQSU5fVU5MT0NLID0gJ3Bpbic7XG5jb25zdCBQSU5fVU5MT0NLX0tFWV9FVkVOVCA9ICdwaW5XaXRoS2V5RXZlbnQnO1xuY29uc3QgUEFTU1dPUkRfVU5MT0NLID0gJ3Bhc3N3b3JkJztcbmNvbnN0IFBBVFRFUk5fVU5MT0NLID0gJ3BhdHRlcm4nO1xuY29uc3QgRklOR0VSUFJJTlRfVU5MT0NLID0gJ2ZpbmdlcnByaW50JztcbmNvbnN0IFVOTE9DS19UWVBFUyA9IFtcbiAgUElOX1VOTE9DSywgUElOX1VOTE9DS19LRVlfRVZFTlQsIFBBU1NXT1JEX1VOTE9DSyxcbiAgUEFUVEVSTl9VTkxPQ0ssIEZJTkdFUlBSSU5UX1VOTE9DS1xuXTtcbmNvbnN0IEtFWUNPREVfTlVNUEFEX0VOVEVSID0gNjY7XG5jb25zdCBVTkxPQ0tfV0FJVF9USU1FID0gMTAwO1xuY29uc3QgSU5QVVRfS0VZU19XQUlUX1RJTUUgPSAxMDA7XG5jb25zdCBOVU1CRVJfWkVST19LRVlDT0RFID0gNztcblxuY29uc3QgaGVscGVycyA9IHt9O1xuXG5oZWxwZXJzLnZhbGlkYXRlVW5sb2NrQ2FwYWJpbGl0aWVzID0gZnVuY3Rpb24gdmFsaWRhdGVVbmxvY2tDYXBhYmlsaXRpZXMgKGNhcHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdW5sb2NrS2V5LFxuICAgIHVubG9ja1R5cGUsXG4gIH0gPSBjYXBzO1xuICBpZiAoXy5pc05pbCh1bmxvY2tLZXkpIHx8IHVubG9ja0tleSA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Egbm9uLWVtcHR5IHVubG9jayBrZXkgdmFsdWUgbXVzdCBiZSBwcm92aWRlZCcpO1xuICB9XG5cbiAgaWYgKFtQSU5fVU5MT0NLLCBQSU5fVU5MT0NLX0tFWV9FVkVOVCwgRklOR0VSUFJJTlRfVU5MT0NLXS5pbmNsdWRlcyh1bmxvY2tUeXBlKSkge1xuICAgIGlmICghL15bMC05XSskLy50ZXN0KF8udHJpbSh1bmxvY2tLZXkpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmxvY2sga2V5IHZhbHVlICcke3VubG9ja0tleX0nIG11c3Qgb25seSBjb25zaXN0IG9mIGRpZ2l0c2ApO1xuICAgIH1cbiAgfSBlbHNlIGlmICh1bmxvY2tUeXBlID09PSBQQVRURVJOX1VOTE9DSykge1xuICAgIGlmICghL15bMS05XXsyLDl9JC8udGVzdChfLnRyaW0odW5sb2NrS2V5KSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5sb2NrIGtleSB2YWx1ZSAnJHt1bmxvY2tLZXl9JyBtdXN0IG9ubHkgaW5jbHVkZSBmcm9tIHR3byB0byBuaW5lIGRpZ2l0cyBpbiByYW5nZSAxLi45YCk7XG4gICAgfVxuICAgIGlmICgvKFsxLTldKS4qP1xcMS8udGVzdChfLnRyaW0odW5sb2NrS2V5KSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5sb2NrIGtleSB2YWx1ZSAnJHt1bmxvY2tLZXl9JyBtdXN0IGRlZmluZSBhIHZhbGlkIHBhdHRlcm4gd2hlcmUgcmVwZWF0cyBhcmUgbm90IGFsbG93ZWRgKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodW5sb2NrVHlwZSA9PT0gUEFTU1dPUkRfVU5MT0NLKSB7XG4gICAgLy8gRG9udCB0cmltIHBhc3N3b3JkIGtleSwgeW91IGNhbiB1c2UgYmxhbmsgc3BhY2VzIGluIHlvdXIgYW5kcm9pZCBwYXNzd29yZFxuICAgIC8vIMKvXFxfKOODhClfL8KvXG4gICAgaWYgKCEvLns0LH0vZy50ZXN0KHVubG9ja0tleSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIG1pbmltdW0gYWxsb3dlZCBsZW5ndGggb2YgdW5sb2NrIGtleSB2YWx1ZSAnJHt1bmxvY2tLZXl9JyBpcyA0IGNoYXJhY3RlcnNgKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHVubG9jayB0eXBlICcke3VubG9ja1R5cGV9Jy4gYCArXG4gICAgICBgT25seSB0aGUgZm9sbG93aW5nIHVubG9jayB0eXBlcyBhcmUgc3VwcG9ydGVkOiAke1VOTE9DS19UWVBFU31gKTtcbiAgfVxuICByZXR1cm4gY2Fwcztcbn07XG5cbmhlbHBlcnMuZmFzdFVubG9jayA9IGFzeW5jIGZ1bmN0aW9uIGZhc3RVbmxvY2sgKGFkYiwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBjcmVkZW50aWFsLFxuICAgIGNyZWRlbnRpYWxUeXBlLFxuICB9ID0gb3B0cztcbiAgbG9nZ2VyLmluZm8oYFVubG9ja2luZyB0aGUgZGV2aWNlIHZpYSBBREIgdXNpbmcgJHtjcmVkZW50aWFsVHlwZX0gY3JlZGVudGlhbCAnJHtjcmVkZW50aWFsfSdgKTtcbiAgY29uc3Qgd2FzTG9ja0VuYWJsZWQgPSBhd2FpdCBhZGIuaXNMb2NrRW5hYmxlZCgpO1xuICBpZiAod2FzTG9ja0VuYWJsZWQpIHtcbiAgICBhd2FpdCBhZGIuY2xlYXJMb2NrQ3JlZGVudGlhbChjcmVkZW50aWFsKTtcbiAgICAvLyBub3Qgc3VyZSB3aHksIGJ1dCB0aGUgZGV2aWNlJ3Mgc2NyZWVuIHN0aWxsIHJlbWFpbnMgbG9ja2VkXG4gICAgLy8gaWYgYSBwcmVsaW1pbmFyeSB3YWtlIHVwIGN5Y2xlIGhhcyBub3QgYmVlbiBwZXJmb3JtZWRcbiAgICBhd2FpdCBhZGIuY3ljbGVXYWtlVXAoKTtcbiAgfSBlbHNlIHtcbiAgICBsb2dnZXIuaW5mbygnTm8gYWN0aXZlIGxvY2sgaGFzIGJlZW4gZGV0ZWN0ZWQuIFByb2NlZWRpbmcgdG8gdGhlIGtleWd1YXJkIGRpc21pc3NhbCcpO1xuICB9XG4gIHRyeSB7XG4gICAgYXdhaXQgYWRiLmRpc21pc3NLZXlndWFyZCgpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmICh3YXNMb2NrRW5hYmxlZCkge1xuICAgICAgYXdhaXQgYWRiLnNldExvY2tDcmVkZW50aWFsKGNyZWRlbnRpYWxUeXBlLCBjcmVkZW50aWFsKTtcbiAgICB9XG4gIH1cbn07XG5cbmhlbHBlcnMuZW5jb2RlUGFzc3dvcmQgPSBmdW5jdGlvbiBlbmNvZGVQYXNzd29yZCAoa2V5KSB7XG4gIHJldHVybiBgJHtrZXl9YC5yZXBsYWNlKC9cXHMvaWcsICclcycpO1xufTtcblxuaGVscGVycy5zdHJpbmdLZXlUb0FyciA9IGZ1bmN0aW9uIHN0cmluZ0tleVRvQXJyIChrZXkpIHtcbiAgcmV0dXJuIGAke2tleX1gLnRyaW0oKS5yZXBsYWNlKC9cXHMrL2csICcnKS5zcGxpdCgvXFxzKi8pO1xufTtcblxuaGVscGVycy5maW5nZXJwcmludFVubG9jayA9IGFzeW5jIGZ1bmN0aW9uIGZpbmdlcnByaW50VW5sb2NrIChhZGIsIGRyaXZlciwgY2FwYWJpbGl0aWVzKSB7XG4gIGlmIChhd2FpdCBhZGIuZ2V0QXBpTGV2ZWwoKSA8IDIzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGaW5nZXJwcmludCB1bmxvY2sgb25seSB3b3JrcyBmb3IgQW5kcm9pZCA2KyBlbXVsYXRvcnMnKTtcbiAgfVxuICBhd2FpdCBhZGIuZmluZ2VycHJpbnQoY2FwYWJpbGl0aWVzLnVubG9ja0tleSk7XG4gIGF3YWl0IHNsZWVwKFVOTE9DS19XQUlUX1RJTUUpO1xufTtcblxuaGVscGVycy5waW5VbmxvY2sgPSBhc3luYyBmdW5jdGlvbiBwaW5VbmxvY2sgKGFkYiwgZHJpdmVyLCBjYXBhYmlsaXRpZXMpIHtcbiAgbG9nZ2VyLmluZm8oYFRyeWluZyB0byB1bmxvY2sgZGV2aWNlIHVzaW5nIHBpbiAke2NhcGFiaWxpdGllcy51bmxvY2tLZXl9YCk7XG4gIGF3YWl0IGFkYi5kaXNtaXNzS2V5Z3VhcmQoKTtcbiAgY29uc3Qga2V5cyA9IGhlbHBlcnMuc3RyaW5nS2V5VG9BcnIoY2FwYWJpbGl0aWVzLnVubG9ja0tleSk7XG4gIGlmIChhd2FpdCBhZGIuZ2V0QXBpTGV2ZWwoKSA+PSAyMSkge1xuICAgIGNvbnN0IGVscyA9IGF3YWl0IGRyaXZlci5maW5kRWxPckVscygnaWQnLCAnY29tLmFuZHJvaWQuc3lzdGVtdWk6aWQvZGlnaXRfdGV4dCcsIHRydWUpO1xuICAgIGlmIChfLmlzRW1wdHkoZWxzKSkge1xuICAgICAgLy8gZmFsbGJhY2sgdG8gcGluIHdpdGgga2V5IGV2ZW50XG4gICAgICByZXR1cm4gYXdhaXQgaGVscGVycy5waW5VbmxvY2tXaXRoS2V5RXZlbnQoYWRiLCBkcml2ZXIsIGNhcGFiaWxpdGllcyk7XG4gICAgfVxuICAgIGNvbnN0IHBpbnMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIGVscykge1xuICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IGRyaXZlci5nZXRBdHRyaWJ1dGUoJ3RleHQnLCB1dGlsLnVud3JhcEVsZW1lbnQoZWwpKTtcbiAgICAgIHBpbnNbdGV4dF0gPSBlbDtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwaW4gb2Yga2V5cykge1xuICAgICAgY29uc3QgZWwgPSBwaW5zW3Bpbl07XG4gICAgICBhd2FpdCBkcml2ZXIuY2xpY2sodXRpbC51bndyYXBFbGVtZW50KGVsKSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAoY29uc3QgcGluIG9mIGtleXMpIHtcbiAgICAgIGNvbnN0IGVsID0gYXdhaXQgZHJpdmVyLmZpbmRFbE9yRWxzKCdpZCcsIGBjb20uYW5kcm9pZC5rZXlndWFyZDppZC9rZXkke3Bpbn1gLCBmYWxzZSk7XG4gICAgICBpZiAoZWwgPT09IG51bGwpIHtcbiAgICAgICAgLy8gZmFsbGJhY2sgdG8gcGluIHdpdGgga2V5IGV2ZW50XG4gICAgICAgIHJldHVybiBhd2FpdCBoZWxwZXJzLnBpblVubG9ja1dpdGhLZXlFdmVudChhZGIsIGRyaXZlciwgY2FwYWJpbGl0aWVzKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IGRyaXZlci5jbGljayh1dGlsLnVud3JhcEVsZW1lbnQoZWwpKTtcbiAgICB9XG4gIH1cbiAgYXdhaXQgd2FpdEZvclVubG9jayhhZGIpO1xufTtcblxuLyoqXG4gKiBXYWl0IGZvciB0aGUgZGlzcGxheSB0byBiZSB1bmxvY2tlZC5cbiAqIFNvbWUgZGV2aWNlcyBhdXRvbWF0aWNhbGx5IGFjY2VwdCB0eXBlZCAncGluJyBhbmQgJ3Bhc3N3b3JkJyBjb2RlXG4gKiB3aXRob3V0IHByZXNzaW5nIHRoZSBFbnRlciBrZXkuIEJ1dCBzb21lIGRldmljZXMgbmVlZCBpdC5cbiAqIFRoaXMgbWV0aG9kIHdhaXRzIGEgZmV3IHNlY29uZHMgZmlyc3QgZm9yIHN1Y2ggYXV0b21hdGljIGFjY2VwdGFuY2UgY2FzZS5cbiAqIElmIHRoZSBkZXZpY2UgaXMgc3RpbGwgbG9ja2VkLCB0aGVuIHRoaXMgbWV0aG9kIHdpbGwgdHJ5IHRvIHNlbmRcbiAqIHRoZSBlbnRlciBrZXkgY29kZS5cbiAqXG4gKiBAcGFyYW0ge0FEQn0gYWRiIFRoZSBpbnN0YW5jZSBvZiBBREJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gd2FpdEZvclVubG9jayAoYWRiKSB7XG4gIGF3YWl0IHNsZWVwKFVOTE9DS19XQUlUX1RJTUUpO1xuICBpZiAoIWF3YWl0IGFkYi5pc1NjcmVlbkxvY2tlZCgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgYWRiLmtleWV2ZW50KEtFWUNPREVfTlVNUEFEX0VOVEVSKTtcbiAgYXdhaXQgc2xlZXAoVU5MT0NLX1dBSVRfVElNRSk7XG59XG5cbmhlbHBlcnMucGluVW5sb2NrV2l0aEtleUV2ZW50ID0gYXN5bmMgZnVuY3Rpb24gcGluVW5sb2NrV2l0aEtleUV2ZW50IChhZGIsIGRyaXZlciwgY2FwYWJpbGl0aWVzKSB7XG4gIGxvZ2dlci5pbmZvKGBUcnlpbmcgdG8gdW5sb2NrIGRldmljZSB1c2luZyBwaW4gd2l0aCBrZXljb2RlICR7Y2FwYWJpbGl0aWVzLnVubG9ja0tleX1gKTtcbiAgYXdhaXQgYWRiLmRpc21pc3NLZXlndWFyZCgpO1xuICBjb25zdCBrZXlzID0gaGVscGVycy5zdHJpbmdLZXlUb0FycihjYXBhYmlsaXRpZXMudW5sb2NrS2V5KTtcblxuICAvLyBTb21lIGRldmljZSBkb2VzIG5vdCBoYXZlIHN5c3RlbSBrZXkgaWRzIGxpa2UgJ2NvbS5hbmRyb2lkLmtleWd1YXJkOmlkL2tleSdcbiAgLy8gVGhlbiwgc2VuZGluZyBrZXlldmVudHMgYXJlIG1vcmUgcmVsaWFibGUgdG8gdW5sb2NrIHRoZSBzY3JlZW4uXG4gIGZvciAoY29uc3QgcGluIG9mIGtleXMpIHtcbiAgICAvLyAncGluJyBpcyBudW1iZXIgKDAtOSkgaW4gc3RyaW5nLlxuICAgIC8vIE51bWJlciAnMCcgaXMga2V5Y29kZSAnNycuIG51bWJlciAnOScgaXMga2V5Y29kZSAnMTYnLlxuICAgIGF3YWl0IGFkYi5zaGVsbChbJ2lucHV0JywgJ2tleWV2ZW50JywgcGFyc2VJbnQocGluLCAxMCkgKyBOVU1CRVJfWkVST19LRVlDT0RFXSk7XG4gIH1cbiAgYXdhaXQgd2FpdEZvclVubG9jayhhZGIsIGRyaXZlcik7XG59O1xuXG5oZWxwZXJzLnBhc3N3b3JkVW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gcGFzc3dvcmRVbmxvY2sgKGFkYiwgZHJpdmVyLCBjYXBhYmlsaXRpZXMpIHtcbiAgY29uc3QgeyB1bmxvY2tLZXkgfSA9IGNhcGFiaWxpdGllcztcbiAgbG9nZ2VyLmluZm8oYFRyeWluZyB0byB1bmxvY2sgZGV2aWNlIHVzaW5nIHBhc3N3b3JkICR7dW5sb2NrS2V5fWApO1xuICBhd2FpdCBhZGIuZGlzbWlzc0tleWd1YXJkKCk7XG4gIC8vIFJlcGxhY2UgYmxhbmsgc3BhY2VzIHdpdGggJXNcbiAgY29uc3Qga2V5ID0gaGVscGVycy5lbmNvZGVQYXNzd29yZCh1bmxvY2tLZXkpO1xuICAvLyBXaHkgYWRiID8gSXQgd2FzIGxlc3MgZmxha3lcbiAgYXdhaXQgYWRiLnNoZWxsKFsnaW5wdXQnLCAndGV4dCcsIGtleV0pO1xuICAvLyBXaHkgc2xlZXBzID8gQXZvaWQgc29tZSBmbGFreW5lc3Mgd2FpdGluZyBmb3IgdGhlIGlucHV0IHRvIHJlY2VpdmUgdGhlIGtleXNcbiAgYXdhaXQgc2xlZXAoSU5QVVRfS0VZU19XQUlUX1RJTUUpO1xuICBhd2FpdCBhZGIuc2hlbGwoWydpbnB1dCcsICdrZXlldmVudCcsIEtFWUNPREVfTlVNUEFEX0VOVEVSXSk7XG4gIC8vIFdhaXRzIGEgYml0IGZvciB0aGUgZGV2aWNlIHRvIGJlIHVubG9ja2VkXG4gIGF3YWl0IHdhaXRGb3JVbmxvY2soYWRiLCBkcml2ZXIpO1xufTtcblxuaGVscGVycy5nZXRQYXR0ZXJuS2V5UG9zaXRpb24gPSBmdW5jdGlvbiBnZXRQYXR0ZXJuS2V5UG9zaXRpb24gKGtleSwgaW5pdFBvcywgcGllY2UpIHtcbiAgLypcbiAgSG93IHRoZSBtYXRoIHdvcmtzOlxuICBXZSBoYXZlIDkgYnV0dG9ucyBkaXZpZGVkIGluIDMgY29sdW1ucyBhbmQgMyByb3dzIGluc2lkZSB0aGUgbG9ja1BhdHRlcm5WaWV3LFxuICBldmVyeSBidXR0b24gaGFzIGEgcG9zaXRpb24gb24gdGhlIHNjcmVlbiBjb3JyZXNwb25kaW5nIHRvIHRoZSBsb2NrUGF0dGVyblZpZXcgc2luY2VcbiAgaXQgaXMgdGhlIHBhcmVudCB2aWV3IHJpZ2h0IGF0IHRoZSBtaWRkbGUgb2YgZWFjaCBjb2x1bW4gb3Igcm93LlxuICAqL1xuICBjb25zdCBjb2xzID0gMztcbiAgY29uc3QgcGlucyA9IDk7XG4gIGNvbnN0IHhQb3MgPSAoa2V5LCB4LCBwaWVjZSkgPT4gTWF0aC5yb3VuZCh4ICsgKChrZXkgJSBjb2xzKSB8fCBjb2xzKSAqIHBpZWNlIC0gcGllY2UgLyAyKTtcbiAgY29uc3QgeVBvcyA9IChrZXksIHksIHBpZWNlKSA9PiBNYXRoLnJvdW5kKHkgKyAoTWF0aC5jZWlsKCgoa2V5ICUgcGlucykgfHwgcGlucykgLyBjb2xzKSAqIHBpZWNlIC0gcGllY2UgLyAyKSk7XG4gIHJldHVybiB7XG4gICAgeDogeFBvcyhrZXksIGluaXRQb3MueCwgcGllY2UpLFxuICAgIHk6IHlQb3Moa2V5LCBpbml0UG9zLnksIHBpZWNlKVxuICB9O1xufTtcblxuaGVscGVycy5nZXRQYXR0ZXJuQWN0aW9ucyA9IGZ1bmN0aW9uIGdldFBhdHRlcm5BY3Rpb25zIChrZXlzLCBpbml0UG9zLCBwaWVjZSkge1xuICBjb25zdCBhY3Rpb25zID0gW107XG4gIGxldCBsYXN0UG9zO1xuICBmb3IgKGxldCBrZXkgb2Yga2V5cykge1xuICAgIGNvbnN0IGtleVBvcyA9IGhlbHBlcnMuZ2V0UGF0dGVybktleVBvc2l0aW9uKGtleSwgaW5pdFBvcywgcGllY2UpO1xuICAgIGlmIChrZXkgPT09IGtleXNbMF0pIHtcbiAgICAgIGFjdGlvbnMucHVzaCh7YWN0aW9uOiAncHJlc3MnLCBvcHRpb25zOiB7ZWxlbWVudDogbnVsbCwgeDoga2V5UG9zLngsIHk6IGtleVBvcy55fX0pO1xuICAgICAgbGFzdFBvcyA9IGtleVBvcztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBtb3ZlVG8gPSB7eDogMCwgeTogMH07XG4gICAgY29uc3QgZGlmZlggPSBrZXlQb3MueCAtIGxhc3RQb3MueDtcbiAgICBpZiAoZGlmZlggPiAwKSB7XG4gICAgICBtb3ZlVG8ueCA9IHBpZWNlO1xuICAgICAgaWYgKE1hdGguYWJzKGRpZmZYKSA+IHBpZWNlKSB7XG4gICAgICAgIG1vdmVUby54ICs9IHBpZWNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGlmZlggPCAwKSB7XG4gICAgICBtb3ZlVG8ueCA9IC0xICogcGllY2U7XG4gICAgICBpZiAoTWF0aC5hYnMoZGlmZlgpID4gcGllY2UpIHtcbiAgICAgICAgbW92ZVRvLnggLT0gcGllY2U7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGRpZmZZID0ga2V5UG9zLnkgLSBsYXN0UG9zLnk7XG4gICAgaWYgKGRpZmZZID4gMCkge1xuICAgICAgbW92ZVRvLnkgPSBwaWVjZTtcbiAgICAgIGlmIChNYXRoLmFicyhkaWZmWSkgPiBwaWVjZSkge1xuICAgICAgICBtb3ZlVG8ueSArPSBwaWVjZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRpZmZZIDwgMCkge1xuICAgICAgbW92ZVRvLnkgPSAtMSAqIHBpZWNlO1xuICAgICAgaWYgKE1hdGguYWJzKGRpZmZZKSA+IHBpZWNlKSB7XG4gICAgICAgIG1vdmVUby55IC09IHBpZWNlO1xuICAgICAgfVxuICAgIH1cbiAgICBhY3Rpb25zLnB1c2goe1xuICAgICAgYWN0aW9uOiAnbW92ZVRvJyxcbiAgICAgIG9wdGlvbnM6IHtlbGVtZW50OiBudWxsLCB4OiBtb3ZlVG8ueCArIGxhc3RQb3MueCwgeTogbW92ZVRvLnkgKyBsYXN0UG9zLnl9XG4gICAgfSk7XG4gICAgbGFzdFBvcyA9IGtleVBvcztcbiAgfVxuICBhY3Rpb25zLnB1c2goe2FjdGlvbjogJ3JlbGVhc2UnfSk7XG4gIHJldHVybiBhY3Rpb25zO1xufTtcblxuaGVscGVycy5wYXR0ZXJuVW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gcGF0dGVyblVubG9jayAoYWRiLCBkcml2ZXIsIGNhcGFiaWxpdGllcykge1xuICBjb25zdCB7IHVubG9ja0tleSB9ID0gY2FwYWJpbGl0aWVzO1xuICBsb2dnZXIuaW5mbyhgVHJ5aW5nIHRvIHVubG9jayBkZXZpY2UgdXNpbmcgcGF0dGVybiAke3VubG9ja0tleX1gKTtcbiAgYXdhaXQgYWRiLmRpc21pc3NLZXlndWFyZCgpO1xuICBjb25zdCBrZXlzID0gaGVscGVycy5zdHJpbmdLZXlUb0Fycih1bmxvY2tLZXkpO1xuICAvKiBXZSBzZXQgdGhlIGRldmljZSBwYXR0ZXJuIGJ1dHRvbnMgYXMgbnVtYmVyIG9mIGEgcmVndWxhciBwaG9uZVxuICAgKiAgfCDigKIg4oCiIOKAoiB8ICAgICB8IDEgMiAzIHxcbiAgICogIHwg4oCiIOKAoiDigKIgfCAtLT4gfCA0IDUgNiB8XG4gICAqICB8IOKAoiDigKIg4oCiIHwgICAgIHwgNyA4IDkgfFxuXG4gIFRoZSBwYXR0ZXJuIHZpZXcgYnV0dG9ucyBhcmUgbm90IHNlZWluZyBieSB0aGUgdWlhdXRvbWF0b3Igc2luY2UgdGhleSBhcmVcbiAgaW5jbHVkZWQgaW5zaWRlIGEgRnJhbWVMYXlvdXQsIHNvIHdlIGFyZSBnb2luZyB0byB0cnkgY2xpY2tpbmcgb24gdGhlIGJ1dHRvbnNcbiAgdXNpbmcgdGhlIHBhcmVudCB2aWV3IGJvdW5kcyBhbmQgbWF0aC5cbiAgKi9cbiAgY29uc3QgYXBpTGV2ZWwgPSBhd2FpdCBhZGIuZ2V0QXBpTGV2ZWwoKTtcbiAgY29uc3QgZWwgPSBhd2FpdCBkcml2ZXIuZmluZEVsT3JFbHMoJ2lkJyxcbiAgICBgY29tLmFuZHJvaWQuJHthcGlMZXZlbCA+PSAyMSA/ICdzeXN0ZW11aScgOiAna2V5Z3VhcmQnfTppZC9sb2NrUGF0dGVyblZpZXdgLFxuICAgIGZhbHNlXG4gICk7XG4gIGNvbnN0IGluaXRQb3MgPSBhd2FpdCBkcml2ZXIuZ2V0TG9jYXRpb24odXRpbC51bndyYXBFbGVtZW50KGVsKSk7XG4gIGNvbnN0IHNpemUgPSBhd2FpdCBkcml2ZXIuZ2V0U2l6ZSh1dGlsLnVud3JhcEVsZW1lbnQoZWwpKTtcbiAgLy8gR2V0IGFjdGlvbnMgdG8gcGVyZm9ybVxuICBjb25zdCBhY3Rpb25zID0gaGVscGVycy5nZXRQYXR0ZXJuQWN0aW9ucyhrZXlzLCBpbml0UG9zLCBzaXplLndpZHRoIC8gMyk7XG4gIC8vIFBlcmZvcm0gZ2VzdHVyZVxuICBhd2FpdCBkcml2ZXIucGVyZm9ybVRvdWNoKGFjdGlvbnMpO1xuICAvLyBXYWl0cyBhIGJpdCBmb3IgdGhlIGRldmljZSB0byBiZSB1bmxvY2tlZFxuICBhd2FpdCBzbGVlcChVTkxPQ0tfV0FJVF9USU1FKTtcbn07XG5cbmhlbHBlcnMuUElOX1VOTE9DSyA9IFBJTl9VTkxPQ0s7XG5oZWxwZXJzLlBJTl9VTkxPQ0tfS0VZX0VWRU5UID0gUElOX1VOTE9DS19LRVlfRVZFTlQ7XG5oZWxwZXJzLlBBU1NXT1JEX1VOTE9DSyA9IFBBU1NXT1JEX1VOTE9DSztcbmhlbHBlcnMuUEFUVEVSTl9VTkxPQ0sgPSBQQVRURVJOX1VOTE9DSztcbmhlbHBlcnMuRklOR0VSUFJJTlRfVU5MT0NLID0gRklOR0VSUFJJTlRfVU5MT0NLO1xuXG5leHBvcnQge1xuICBQSU5fVU5MT0NLLCBQSU5fVU5MT0NLX0tFWV9FVkVOVCwgUEFTU1dPUkRfVU5MT0NLLCBQQVRURVJOX1VOTE9DSyxcbiAgRklOR0VSUFJJTlRfVU5MT0NLLCBoZWxwZXJzXG59O1xuZXhwb3J0IGRlZmF1bHQgaGVscGVycztcbiJdLCJmaWxlIjoibGliL3VubG9jay1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=