appium-android-driver 4.52.1 → 5.0.1

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 (55) hide show
  1. package/build/index.js +6 -4
  2. package/build/lib/android-helpers.js +12 -9
  3. package/build/lib/bootstrap.js +7 -7
  4. package/build/lib/commands/actions.js +13 -13
  5. package/build/lib/commands/alert.js +7 -7
  6. package/build/lib/commands/app-management.js +6 -6
  7. package/build/lib/commands/context.js +10 -8
  8. package/build/lib/commands/element.js +5 -5
  9. package/build/lib/commands/execute.js +7 -6
  10. package/build/lib/commands/file-actions.js +27 -20
  11. package/build/lib/commands/find.js +6 -6
  12. package/build/lib/commands/general.js +8 -8
  13. package/build/lib/commands/ime.js +4 -4
  14. package/build/lib/commands/intent.js +7 -7
  15. package/build/lib/commands/log.js +6 -6
  16. package/build/lib/commands/network.js +11 -4
  17. package/build/lib/commands/performance.js +1 -1
  18. package/build/lib/commands/recordscreen.js +15 -15
  19. package/build/lib/commands/shell.js +3 -3
  20. package/build/lib/commands/streamscreen.js +7 -7
  21. package/build/lib/commands/touch.js +8 -8
  22. package/build/lib/desired-caps.js +1 -1
  23. package/build/lib/driver.js +12 -12
  24. package/build/lib/logger.js +3 -3
  25. package/build/lib/server.js +4 -4
  26. package/build/lib/uiautomator.js +3 -3
  27. package/build/lib/unlock-helpers.js +8 -8
  28. package/build/lib/webview-helpers.js +7 -7
  29. package/lib/android-helpers.js +1 -1
  30. package/lib/bootstrap.js +2 -2
  31. package/lib/commands/actions.js +1 -1
  32. package/lib/commands/alert.js +1 -1
  33. package/lib/commands/app-management.js +4 -2
  34. package/lib/commands/context.js +2 -2
  35. package/lib/commands/element.js +1 -1
  36. package/lib/commands/execute.js +3 -1
  37. package/lib/commands/file-actions.js +28 -8
  38. package/lib/commands/find.js +2 -2
  39. package/lib/commands/general.js +1 -1
  40. package/lib/commands/ime.js +1 -1
  41. package/lib/commands/intent.js +1 -1
  42. package/lib/commands/log.js +1 -1
  43. package/lib/commands/network.js +22 -1
  44. package/lib/commands/recordscreen.js +1 -1
  45. package/lib/commands/shell.js +1 -1
  46. package/lib/commands/streamscreen.js +1 -1
  47. package/lib/commands/touch.js +2 -2
  48. package/lib/driver.js +2 -2
  49. package/lib/logger.js +1 -1
  50. package/lib/server.js +1 -1
  51. package/lib/uiautomator.js +1 -1
  52. package/lib/unlock-helpers.js +1 -1
  53. package/lib/webview-helpers.js +1 -1
  54. package/package.json +21 -15
  55. package/lib/.DS_Store +0 -0
@@ -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.commands = void 0;
8
+ exports.helpers = exports.default = exports.commands = void 0;
9
9
 
10
10
  require("source-map-support/register");
11
11
 
@@ -17,11 +17,11 @@ var _androidHelpers = _interopRequireDefault(require("../android-helpers"));
17
17
 
18
18
  var _bluebird = _interopRequireDefault(require("bluebird"));
19
19
 
20
- var _appiumBaseDriver = require("appium-base-driver");
20
+ var _baseDriver = require("@appium/base-driver");
21
21
 
22
22
  var _asyncbox = require("asyncbox");
23
23
 
24
- var _appiumSupport = require("appium-support");
24
+ var _support = require("@appium/support");
25
25
 
26
26
  let commands = {},
27
27
  helpers = {},
@@ -30,7 +30,7 @@ exports.helpers = helpers;
30
30
  exports.commands = commands;
31
31
 
32
32
  function getCoordDefault(val) {
33
- return _appiumSupport.util.hasValue(val) ? val : 0.5;
33
+ return _support.util.hasValue(val) ? val : 0.5;
34
34
  }
35
35
 
36
36
  function getSwipeTouchDuration(waitGesture) {
@@ -174,7 +174,7 @@ helpers.performGesture = async function performGesture(gesture) {
174
174
  try {
175
175
  return await this.doTouchAction(gesture.action, gesture.options || {});
176
176
  } catch (e) {
177
- if ((0, _appiumBaseDriver.isErrorType)(e, _appiumBaseDriver.errors.NoSuchElementError) && gesture.action === 'release' && gesture.options.element) {
177
+ if ((0, _baseDriver.isErrorType)(e, _baseDriver.errors.NoSuchElementError) && gesture.action === 'release' && gesture.options.element) {
178
178
  delete gesture.options.element;
179
179
 
180
180
  _logger.default.debug(`retrying release without element opts: ${gesture.options}.`);
@@ -195,7 +195,7 @@ commands.getSwipeOptions = async function getSwipeOptions(gestures, touchCount =
195
195
  element = gestures[0].options.element,
196
196
  destElement = gestures[2].options.element || gestures[0].options.element;
197
197
 
198
- if (_appiumSupport.util.hasValue(destElement)) {
198
+ if (_support.util.hasValue(destElement)) {
199
199
  let locResult = await this.getLocationInView(destElement);
200
200
  let sizeResult = await this.getSize(destElement);
201
201
  let offsetX = Math.abs(endX) < 1 && Math.abs(endX) > 0 ? sizeResult.width * endX : endX;
@@ -203,7 +203,7 @@ commands.getSwipeOptions = async function getSwipeOptions(gestures, touchCount =
203
203
  endX = locResult.x + offsetX;
204
204
  endY = locResult.y + offsetY;
205
205
 
206
- if (_appiumSupport.util.hasValue(element)) {
206
+ if (_support.util.hasValue(element)) {
207
207
  let firstElLocation = await this.getLocationInView(element);
208
208
  endX -= firstElLocation.x;
209
209
  endY -= firstElLocation.y;
@@ -401,4 +401,4 @@ var _default = extensions;
401
401
  exports.default = _default;require('source-map-support').install();
402
402
 
403
403
 
404
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy90b3VjaC5qcyJdLCJuYW1lcyI6WyJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwiZ2V0Q29vcmREZWZhdWx0IiwidmFsIiwidXRpbCIsImhhc1ZhbHVlIiwiZ2V0U3dpcGVUb3VjaER1cmF0aW9uIiwid2FpdEdlc3R1cmUiLCJkdXJhdGlvbiIsIm9wdGlvbnMiLCJtcyIsImRvVG91Y2hBY3Rpb24iLCJhY3Rpb24iLCJvcHRzIiwiZWxlbWVudCIsIngiLCJ5IiwiY291bnQiLCJ0YXAiLCJ0b3VjaERvd24iLCJ0b3VjaFVwIiwidG91Y2hNb3ZlIiwiQiIsImRlbGF5IiwidG91Y2hMb25nQ2xpY2siLCJsb2ciLCJ3YXJuIiwiZXJyb3JBbmRUaHJvdyIsImRvVG91Y2hEcmFnIiwiZ2VzdHVyZXMiLCJsb25nUHJlc3MiLCJtb3ZlVG8iLCJzdGFydFgiLCJzdGFydFkiLCJlbmRYIiwiZW5kWSIsImdldExvY2F0aW9uSW5WaWV3IiwiYXBpTGV2ZWwiLCJhZGIiLCJnZXRBcGlMZXZlbCIsIk1hdGgiLCJtYXgiLCJkcmFnIiwiZml4UmVsZWFzZSIsInJlbGVhc2UiLCJfIiwibGFzdCIsImNsb25lIiwicmVmIiwiZ2VzdHVyZSIsInJldmVyc2UiLCJsb2MiLCJzaXplIiwiZ2V0U2l6ZSIsIndpZHRoIiwiaGVpZ2h0IiwicGljayIsInBlcmZvcm1HZXN0dXJlIiwiZSIsImVycm9ycyIsIk5vU3VjaEVsZW1lbnRFcnJvciIsImRlYnVnIiwiZ2V0U3dpcGVPcHRpb25zIiwidG91Y2hDb3VudCIsImRlc3RFbGVtZW50IiwibG9jUmVzdWx0Iiwic2l6ZVJlc3VsdCIsIm9mZnNldFgiLCJhYnMiLCJvZmZzZXRZIiwiZmlyc3RFbExvY2F0aW9uIiwicGVyZm9ybVRvdWNoIiwibGVuZ3RoIiwic3dpcGVPcHRzIiwic3dpcGUiLCJhY3Rpb25zIiwibWFwIiwiaGVhZCIsInBvcCIsInNsaWNlIiwicHJlc3MiLCJzaGlmdCIsIndhaXQiLCJmaXhlZEdlc3R1cmVzIiwicGFyc2VUb3VjaCIsImciLCJtdWx0aSIsInRvdWNoU3RhdGVPYmplY3RzIiwiaW5jbHVkZXMiLCJvZmZzZXQiLCJlbGVtZW50SWQiLCJwb3MiLCJ0b3VjaFN0YXRlT2JqZWN0IiwidGltZU9mZnNldCIsInBhcnNlSW50IiwicHJldlBvcyIsInRpbWUiLCJzdGF0ZSIsImlzVW5kZWZpbmVkIiwiYW5kcm9pZEhlbHBlcnMiLCJ0cnVuY2F0ZURlY2ltYWxzIiwidG91Y2giLCJwZXJmb3JtTXVsdGlBY3Rpb24iLCJFcnJvciIsInN0YXRlcyIsImRvUGVyZm9ybU11bHRpQWN0aW9uIiwiYm9vdHN0cmFwIiwic2VuZEFjdGlvbiIsIk9iamVjdCIsImFzc2lnbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxJQUFJQSxRQUFRLEdBQUcsRUFBZjtBQUFBLElBQW1CQyxPQUFPLEdBQUcsRUFBN0I7QUFBQSxJQUFpQ0MsVUFBVSxHQUFHLEVBQTlDOzs7O0FBRUEsU0FBU0MsZUFBVCxDQUEwQkMsR0FBMUIsRUFBK0I7QUFJN0IsU0FBT0Msb0JBQUtDLFFBQUwsQ0FBY0YsR0FBZCxJQUFxQkEsR0FBckIsR0FBMkIsR0FBbEM7QUFDRDs7QUFFRCxTQUFTRyxxQkFBVCxDQUFnQ0MsV0FBaEMsRUFBNkM7QUFHM0MsTUFBSUMsUUFBUSxHQUFHLEdBQWY7O0FBQ0EsTUFBSSxPQUFPRCxXQUFXLENBQUNFLE9BQVosQ0FBb0JDLEVBQTNCLEtBQWtDLFdBQWxDLElBQWlESCxXQUFXLENBQUNFLE9BQVosQ0FBb0JDLEVBQXpFLEVBQTZFO0FBQzNFRixJQUFBQSxRQUFRLEdBQUdELFdBQVcsQ0FBQ0UsT0FBWixDQUFvQkMsRUFBcEIsR0FBeUIsSUFBcEM7O0FBQ0EsUUFBSUYsUUFBUSxLQUFLLENBQWpCLEVBQW9CO0FBR2xCQSxNQUFBQSxRQUFRLEdBQUcsR0FBWDtBQUNEO0FBQ0Y7O0FBQ0QsU0FBT0EsUUFBUDtBQUNEOztB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TSxLQUFLd0UsVUFBTCxDQUFnQnhFLE1BQWhCLEVBQXdCLElBQXhCLENBQTFDLEVBQXlFLEtBQXpFLENBQXJCO0FBRUEsU0FBTyxNQUFNLEtBQUs2RixvQkFBTCxDQUEwQmYsU0FBMUIsRUFBcUNjLE1BQXJDLENBQWI7QUFDRCxDQVZEOztBQWtCQXpHLFFBQVEsQ0FBQzBHLG9CQUFULEdBQWdDLGVBQWVBLG9CQUFmLENBQXFDZixTQUFyQyxFQUFnRGMsTUFBaEQsRUFBd0Q7QUFDdEYsTUFBSTNGLElBQUo7O0FBQ0EsTUFBSTZFLFNBQUosRUFBZTtBQUNiN0UsSUFBQUEsSUFBSSxHQUFHO0FBQ0w2RSxNQUFBQSxTQURLO0FBRUxmLE1BQUFBLE9BQU8sRUFBRTZCO0FBRkosS0FBUDtBQUlBLFdBQU8sTUFBTSxLQUFLRSxTQUFMLENBQWVDLFVBQWYsQ0FBMEIsb0NBQTFCLEVBQWdFOUYsSUFBaEUsQ0FBYjtBQUNELEdBTkQsTUFNTztBQUNMQSxJQUFBQSxJQUFJLEdBQUc7QUFDTDhELE1BQUFBLE9BQU8sRUFBRTZCO0FBREosS0FBUDtBQUdBLFdBQU8sTUFBTSxLQUFLRSxTQUFMLENBQWVDLFVBQWYsQ0FBMEIsNEJBQTFCLEVBQXdEOUYsSUFBeEQsQ0FBYjtBQUNEO0FBQ0YsQ0FkRDs7QUFnQkErRixNQUFNLENBQUNDLE1BQVAsQ0FBYzVHLFVBQWQsRUFBMEJGLFFBQTFCLEVBQW9DQyxPQUFwQztlQUVlQyxVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBhbmRyb2lkSGVscGVycyBmcm9tICcuLi9hbmRyb2lkLWhlbHBlcnMnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgZXJyb3JzLCBpc0Vycm9yVHlwZSB9IGZyb20gJ2FwcGl1bS1iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyBhc3luY21hcCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5cbmxldCBjb21tYW5kcyA9IHt9LCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gZ2V0Q29vcmREZWZhdWx0ICh2YWwpIHtcbiAgLy8gZ29pbmcgdGhlIGxvbmcgd2F5IGFuZCBjaGVja2luZyBmb3IgdW5kZWZpbmVkIGFuZCBudWxsIHNpbmNlXG4gIC8vIHdlIGNhbid0IGJlIGFzc3VyZWQgYGVsSWRgIGlzIGEgc3RyaW5nIGFuZCBub3QgYW4gaW50LiBTYW1lXG4gIC8vIHRoaW5nIHdpdGggZGVzdEVsZW1lbnQgYmVsb3cuXG4gIHJldHVybiB1dGlsLmhhc1ZhbHVlKHZhbCkgPyB2YWwgOiAwLjU7XG59XG5cbmZ1bmN0aW9uIGdldFN3aXBlVG91Y2hEdXJhdGlvbiAod2FpdEdlc3R1cmUpIHtcbiAgLy8gdGhlIHRvdWNoIGFjdGlvbiBhcGkgdXNlcyBtcywgd2Ugd2FudCBzZWNvbmRzXG4gIC8vIDAuOCBpcyB0aGUgZGVmYXVsdCB0aW1lIGZvciB0aGUgb3BlcmF0aW9uXG4gIGxldCBkdXJhdGlvbiA9IDAuODtcbiAgaWYgKHR5cGVvZiB3YWl0R2VzdHVyZS5vcHRpb25zLm1zICE9PSAndW5kZWZpbmVkJyAmJiB3YWl0R2VzdHVyZS5vcHRpb25zLm1zKSB7XG4gICAgZHVyYXRpb24gPSB3YWl0R2VzdHVyZS5vcHRpb25zLm1zIC8gMTAwMDtcbiAgICBpZiAoZHVyYXRpb24gPT09IDApIHtcbiAgICAgIC8vIHNldCB0byBhIHZlcnkgbG93IG51bWJlciwgc2luY2UgdGhleSB3YW50ZWQgaXQgZmFzdFxuICAgICAgLy8gYnV0IGJlbG93IDAuMSBiZWNvbWVzIDAgc3RlcHMsIHdoaWNoIGNhdXNlcyBlcnJvcnNcbiAgICAgIGR1cmF0aW9uID0gMC4xO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZHVyYXRpb247XG59XG5cbmNvbW1hbmRzLmRvVG91Y2hBY3Rpb24gPSBhc3luYyBmdW5jdGlvbiBkb1RvdWNoQWN0aW9uIChhY3Rpb24sIG9wdHMgPSB7fSkge1xuICBjb25zdCB7IGVsZW1lbnQsIHgsIHksIGNvdW50LCBtcywgZHVyYXRpb24gfSA9IG9wdHM7XG4gIC8vIHBhcnNlVG91Y2ggcHJlY2FsY3VsYXRlcyBhYnNvbHV0ZSBlbGVtZW50IHBvc2l0aW9uc1xuICAvLyBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHBhc3MgYGVsZW1lbnRgIHRvIHRoZSBhZmZlY3RlZCBnZXN0dXJlc1xuICBzd2l0Y2ggKGFjdGlvbikge1xuICAgIGNhc2UgJ3RhcCc6XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy50YXAobnVsbCwgeCwgeSwgY291bnQpO1xuICAgIGNhc2UgJ3ByZXNzJzpcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnRvdWNoRG93bihudWxsLCB4LCB5KTtcbiAgICBjYXNlICdyZWxlYXNlJzpcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnRvdWNoVXAoZWxlbWVudCwgeCwgeSk7XG4gICAgY2FzZSAnbW92ZVRvJzpcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnRvdWNoTW92ZShudWxsLCB4LCB5KTtcbiAgICBjYXNlICd3YWl0JzpcbiAgICAgIHJldHVybiBhd2FpdCBCLmRlbGF5KG1zKTtcbiAgICBjYXNlICdsb25nUHJlc3MnOlxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudG91Y2hMb25nQ2xpY2sobnVsbCwgeCwgeSwgZHVyYXRpb24gfHwgMTAwMCk7XG4gICAgY2FzZSAnY2FuY2VsJzpcbiAgICAgIC8vIFRPRE86IGNsYXJpZnkgYmVoYXZpb3Igb2YgJ2NhbmNlbCcgYWN0aW9uIGFuZCBmaXggdGhpc1xuICAgICAgbG9nLndhcm4oJ0NhbmNlbCBhY3Rpb24gY3VycmVudGx5IGhhcyBubyBlZmZlY3QnKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgdW5rbm93biBhY3Rpb24gJHthY3Rpb259YCk7XG4gIH1cbn07XG5cbi8vIGRyYWcgaXMgKm5vdCogcHJlc3MtbW92ZS1yZWxlYXNlLCBzbyB3ZSBuZWVkIHRvIHRyYW5zbGF0ZVxuLy8gZHJhZyB3b3JrcyBmaW5lIGZvciBzY3JvbGwsIGFzIHdlbGxcbmhlbHBlcnMuZG9Ub3VjaERyYWcgPSBhc3luYyBmdW5jdGlvbiBkb1RvdWNoRHJhZyAoZ2VzdHVyZXMpIHtcbiAgbGV0IGxvbmdQcmVzcyA9IGdlc3R1cmVzWzBdO1xuICBsZXQgbW92ZVRvID0gZ2VzdHVyZXNbMV07XG4gIGxldCBzdGFydFggPSBsb25nUHJlc3Mub3B0aW9ucy54IHx8IDAsXG4gICAgICBzdGFydFkgPSBsb25nUHJlc3Mub3B0aW9ucy55IHx8IDAsXG4gICAgICBlbmRYID0gbW92ZVRvLm9wdGlvbnMueCB8fCAwLFxuICAgICAgZW5kWSA9IG1vdmVUby5vcHRpb25zLnkgfHwgMDtcbiAgaWYgKGxvbmdQcmVzcy5vcHRpb25zLmVsZW1lbnQpIHtcbiAgICBsZXQge3gsIHl9ID0gYXdhaXQgdGhpcy5nZXRMb2NhdGlvbkluVmlldyhsb25nUHJlc3Mub3B0aW9ucy5lbGVtZW50KTtcbiAgICBzdGFydFggKz0geCB8fCAwO1xuICAgIHN0YXJ0WSArPSB5IHx8IDA7XG4gIH1cbiAgaWYgKG1vdmVUby5vcHRpb25zLmVsZW1lbnQpIHtcbiAgICBsZXQge3gsIHl9ID0gYXdhaXQgdGhpcy5nZXRMb2NhdGlvbkluVmlldyhtb3ZlVG8ub3B0aW9ucy5lbGVtZW50KTtcbiAgICBlbmRYICs9IHggfHwgMDtcbiAgICBlbmRZICs9IHkgfHwgMDtcbiAgfVxuXG4gIGxldCBhcGlMZXZlbCA9IGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCk7XG4gIC8vIGxvbGxpcG9wIHRha2VzIGEgbGl0dGxlIGxvbmdlciB0byBnZXQgdGhpbmdzIHJvbGxpbmdcbiAgbGV0IGR1cmF0aW9uID0gYXBpTGV2ZWwgPj0gNSA/IDIgOiAxO1xuICAvLyBtYWtlIHN1cmUgdGhhdCBpZiB0aGUgbG9uZyBwcmVzcyBoYXMgYSBkdXJhdGlvbiwgd2UgdXNlIGl0LlxuICBpZiAobG9uZ1ByZXNzLm9wdGlvbnMgJiYgbG9uZ1ByZXNzLm9wdGlvbnMuZHVyYXRpb24pIHtcbiAgICBkdXJhdGlvbiA9IE1hdGgubWF4KGxvbmdQcmVzcy5vcHRpb25zLmR1cmF0aW9uIC8gMTAwMCwgZHVyYXRpb24pO1xuICB9XG5cbiAgLy8gYGRyYWdgIHdpbGwgdGFrZSBjYXJlIG9mIHdoZXRoZXIgdGhlcmUgaXMgYW4gZWxlbWVudCBvciBub3QgYXQgdGhhdCBsZXZlbFxuICByZXR1cm4gYXdhaXQgdGhpcy5kcmFnKHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZLCBkdXJhdGlvbiwgMSwgbG9uZ1ByZXNzLm9wdGlvbnMuZWxlbWVudCwgbW92ZVRvLm9wdGlvbnMuZWxlbWVudCk7XG59O1xuXG4vLyBSZWxlYXNlIGdlc3R1cmUgbmVlZHMgZWxlbWVudCBvciBjby1vcmRpbmF0ZXMgdG8gcmVsZWFzZSBpdCBmcm9tIHRoYXQgcG9zaXRpb25cbi8vIG9yIGVsc2UgcmVsZWFzZSBnZXN0dXJlIGlzIHBlcmZvcm1lZCBmcm9tIGNlbnRlciBvZiB0aGUgc2NyZWVuLCBzbyB0byBmaXggaXRcbi8vIFRoaXMgbWV0aG9kIHNldHMgY28tb3JkaW5hdGVzL2VsZW1lbnQgdG8gcmVsZWFzZSBnZXN0dXJlIGlmIGl0IGhhcyBubyBvcHRpb25zIHNldCBhbHJlYWR5LlxuaGVscGVycy5maXhSZWxlYXNlID0gYXN5bmMgZnVuY3Rpb24gZml4UmVsZWFzZSAoZ2VzdHVyZXMpIHtcbiAgbGV0IHJlbGVhc2UgPSBfLmxhc3QoZ2VzdHVyZXMpO1xuICAvLyBzb21ldGltZXMgdGhlcmUgYXJlIG5vIG9wdGlvbnNcbiAgcmVsZWFzZS5vcHRpb25zID0gcmVsZWFzZS5vcHRpb25zIHx8IHt9O1xuICAvLyBub3RoaW5nIHRvIGRvIGlmIHJlbGVhc2Ugb3B0aW9ucyBhcmUgYWxyZWFkeSBzZXRcbiAgaWYgKHJlbGVhc2Uub3B0aW9ucy5lbGVtZW50IHx8IChyZWxlYXNlLm9wdGlvbnMueCAmJiByZWxlYXNlLm9wdGlvbnMueSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gd2l0aG91dCBjb29yZGluYXRlcywgYHJlbGVhc2VgIHVzZXMgdGhlIGNlbnRlciBvZiB0aGUgc2NyZWVuLCB3aGljaCxcbiAgLy8gZ2VuZXJhbGx5IHNwZWFraW5nLCBpcyBub3Qgd2hhdCB3ZSB3YW50XG4gIC8vIHRoZXJlZm9yZTogbG9vcCBiYWNrd2FyZHMgYW5kIHVzZSB0aGUgbGFzdCBjb21tYW5kIHdpdGggYW4gZWxlbWVudCBhbmQvb3JcbiAgLy8gb2Zmc2V0IGNvb3JkaW5hdGVzXG4gIGdlc3R1cmVzID0gXy5jbG9uZShnZXN0dXJlcyk7XG4gIGxldCByZWYgPSBudWxsO1xuICBmb3IgKGxldCBnZXN0dXJlIG9mIGdlc3R1cmVzLnJldmVyc2UoKSkge1xuICAgIGxldCBvcHRzID0gZ2VzdHVyZS5vcHRpb25zO1xuICAgIGlmIChvcHRzLmVsZW1lbnQgfHwgKG9wdHMueCAmJiBvcHRzLnkpKSB7XG4gICAgICByZWYgPSBnZXN0dXJlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChyZWYpIHtcbiAgICBsZXQgb3B0cyA9IHJlZi5vcHRpb25zO1xuICAgIGlmIChvcHRzLmVsZW1lbnQpIHtcbiAgICAgIGxldCBsb2MgPSBhd2FpdCB0aGlzLmdldExvY2F0aW9uSW5WaWV3KG9wdHMuZWxlbWVudCk7XG4gICAgICBpZiAob3B0cy54ICYmIG9wdHMueSkge1xuICAgICAgICAvLyB0aGlzIGlzIGFuIG9mZnNldCBmcm9tIHRoZSBlbGVtZW50XG4gICAgICAgIHJlbGVhc2Uub3B0aW9ucyA9IHtcbiAgICAgICAgICB4OiBsb2MueCArIG9wdHMueCxcbiAgICAgICAgICB5OiBsb2MueSArIG9wdHMueVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdGhpcyBpcyB0aGUgY2VudGVyIG9mIHRoZSBlbGVtZW50XG4gICAgICAgIGxldCBzaXplID0gYXdhaXQgdGhpcy5nZXRTaXplKG9wdHMuZWxlbWVudCk7XG4gICAgICAgIHJlbGVhc2Uub3B0aW9ucyA9IHtcbiAgICAgICAgICB4OiBsb2MueCArIHNpemUud2lkdGggLyAyLFxuICAgICAgICAgIHk6IGxvYy55ICsgc2l6ZS5oZWlnaHQgLyAyXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbGVhc2Uub3B0aW9ucyA9IF8ucGljayhvcHRzLCAneCcsICd5Jyk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWxlYXNlO1xufTtcblxuLy8gUGVyZm9ybSBvbmUgZ2VzdHVyZVxuaGVscGVycy5wZXJmb3JtR2VzdHVyZSA9IGFzeW5jIGZ1bmN0aW9uIHBlcmZvcm1HZXN0dXJlIChnZXN0dXJlKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZG9Ub3VjaEFjdGlvbihnZXN0dXJlLmFjdGlvbiwgZ2VzdHVyZS5vcHRpb25zIHx8IHt9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIHNvbWV0aW1lIHRoZSBlbGVtZW50IGlzIG5vdCBhdmFpbGFibGUgd2hlbiByZWxlYXNpbmcsIHJldHJ5IHdpdGhvdXQgaXRcbiAgICBpZiAoaXNFcnJvclR5cGUoZSwgZXJyb3JzLk5vU3VjaEVsZW1lbnRFcnJvcikgJiYgZ2VzdHVyZS5hY3Rpb24gPT09ICdyZWxlYXNlJyAmJlxuICAgICAgICBnZXN0dXJlLm9wdGlvbnMuZWxlbWVudCkge1xuICAgICAgZGVsZXRlIGdlc3R1cmUub3B0aW9ucy5lbGVtZW50O1xuICAgICAgbG9nLmRlYnVnKGByZXRyeWluZyByZWxlYXNlIHdpdGhvdXQgZWxlbWVudCBvcHRzOiAke2dlc3R1cmUub3B0aW9uc30uYCk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5kb1RvdWNoQWN0aW9uKGdlc3R1cmUuYWN0aW9uLCBnZXN0dXJlLm9wdGlvbnMgfHwge30pO1xuICAgIH1cbiAgICB0aHJvdyBlO1xuICB9XG59O1xuXG5jb21tYW5kcy5nZXRTd2lwZU9wdGlvbnMgPSBhc3luYyBmdW5jdGlvbiBnZXRTd2lwZU9wdGlvbnMgKGdlc3R1cmVzLCB0b3VjaENvdW50ID0gMSkge1xuICBsZXQgc3RhcnRYID0gZ2V0Q29vcmREZWZhdWx0KGdlc3R1cmVzWzBdLm9wdGlvbnMueCksXG4gICAgICBzdGFydFkgPSBnZXRDb29yZERlZmF1bHQoZ2VzdHVyZXNbMF0ub3B0aW9ucy55KSxcbiAgICAgIGVuZFggPSBnZXRDb29yZERlZmF1bHQoZ2VzdHVyZXNbMl0ub3B0aW9ucy54KSxcbiAgICAgIGVuZFkgPSBnZXRDb29yZERlZmF1bHQoZ2VzdHVyZXNbMl0ub3B0aW9ucy55KSxcbiAgICAgIGR1cmF0aW9uID0gZ2V0U3dpcGVUb3VjaER1cmF0aW9uKGdlc3R1cmVzWzFdKSxcbiAgICAgIGVsZW1lbnQgPSBnZXN0dXJlc1swXS5vcHRpb25zLmVsZW1lbnQsXG4gICAgICBkZXN0RWxlbWVudCA9IGdlc3R1cmVzWzJdLm9wdGlvbnMuZWxlbWVudCB8fCBnZXN0dXJlc1swXS5vcHRpb25zLmVsZW1lbnQ7XG5cbiAgLy8gdGhlcmUncyBubyBkZXN0aW5hdGlvbiBlbGVtZW50IGhhbmRsaW5nIGluIGJvb3RzdHJhcCBhbmQgc2luY2UgaXQgYXBwbGllcyB0byBhbGwgcGxhdGZvcm1zLCB3ZSBoYW5kbGUgaXQgaGVyZVxuICBpZiAodXRpbC5oYXNWYWx1ZShkZXN0RWxlbWVudCkpIHtcbiAgICBsZXQgbG9jUmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRMb2NhdGlvbkluVmlldyhkZXN0RWxlbWVudCk7XG4gICAgbGV0IHNpemVSZXN1bHQgPSBhd2FpdCB0aGlzLmdldFNpemUoZGVzdEVsZW1lbnQpO1xuICAgIGxldCBvZmZzZXRYID0gKE1hdGguYWJzKGVuZFgpIDwgMSAmJiBNYXRoLmFicyhlbmRYKSA+IDApID8gc2l6ZVJlc3VsdC53aWR0aCAqIGVuZFggOiBlbmRYO1xuICAgIGxldCBvZmZzZXRZID0gKE1hdGguYWJzKGVuZFkpIDwgMSAmJiBNYXRoLmFicyhlbmRZKSA+IDApID8gc2l6ZVJlc3VsdC5oZWlnaHQgKiBlbmRZIDogZW5kWTtcbiAgICBlbmRYID0gbG9jUmVzdWx0LnggKyBvZmZzZXRYO1xuICAgIGVuZFkgPSBsb2NSZXN1bHQueSArIG9mZnNldFk7XG4gICAgLy8gaWYgdGhlIHRhcmdldCBlbGVtZW50IHdhcyBwcm92aWRlZCwgdGhlIGNvb3JkaW5hdGVzIGZvciB0aGUgZGVzdGluYXRpb24gbmVlZCB0byBiZSByZWxhdGl2ZSB0byBpdC5cbiAgICBpZiAodXRpbC5oYXNWYWx1ZShlbGVtZW50KSkge1xuICAgICAgbGV0IGZpcnN0RWxMb2NhdGlvbiA9IGF3YWl0IHRoaXMuZ2V0TG9jYXRpb25JblZpZXcoZWxlbWVudCk7XG4gICAgICBlbmRYIC09IGZpcnN0RWxMb2NhdGlvbi54O1xuICAgICAgZW5kWSAtPSBmaXJzdEVsTG9jYXRpb24ueTtcbiAgICB9XG4gIH1cbiAgLy8gY2xpZW50cyBhcmUgcmVzcG9uc2libGUgdG8gdXNlIHRoZXNlIG9wdGlvbnMgY29ycmVjdGx5XG4gIHJldHVybiB7c3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFksIGR1cmF0aW9uLCB0b3VjaENvdW50LCBlbGVtZW50fTtcbn07XG5cbmNvbW1hbmRzLnBlcmZvcm1Ub3VjaCA9IGFzeW5jIGZ1bmN0aW9uIHBlcmZvcm1Ub3VjaCAoZ2VzdHVyZXMpIHtcbiAgLy8gcHJlc3Mtd2FpdC1tb3ZlVG8tcmVsZWFzZSBpcyBgc3dpcGVgLCBzbyB1c2UgbmF0aXZlIG1ldGhvZFxuICBpZiAoZ2VzdHVyZXMubGVuZ3RoID09PSA0ICYmXG4gICAgICBnZXN0dXJlc1swXS5hY3Rpb24gPT09ICdwcmVzcycgJiZcbiAgICAgIGdlc3R1cmVzWzFdLmFjdGlvbiA9PT0gJ3dhaXQnICYmXG4gICAgICBnZXN0dXJlc1syXS5hY3Rpb24gPT09ICdtb3ZlVG8nICYmXG4gICAgICBnZXN0dXJlc1szXS5hY3Rpb24gPT09ICdyZWxlYXNlJykge1xuXG4gICAgbGV0IHN3aXBlT3B0cyA9IGF3YWl0IHRoaXMuZ2V0U3dpcGVPcHRpb25zKGdlc3R1cmVzKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5zd2lwZShzd2lwZU9wdHMuc3RhcnRYLCBzd2lwZU9wdHMuc3RhcnRZLCBzd2lwZU9wdHMuZW5kWCxcbiAgICAgICAgc3dpcGVPcHRzLmVuZFksIHN3aXBlT3B0cy5kdXJhdGlvbiwgc3dpcGVPcHRzLnRvdWNoQ291bnQsXG4gICAgICAgIHN3aXBlT3B0cy5lbGVtZW50KTtcbiAgfVxuICBsZXQgYWN0aW9ucyA9IF8ubWFwKGdlc3R1cmVzLCAnYWN0aW9uJyk7XG5cbiAgaWYgKGFjdGlvbnNbMF0gPT09ICdsb25nUHJlc3MnICYmIGFjdGlvbnNbMV0gPT09ICdtb3ZlVG8nICYmIGFjdGlvbnNbMl0gPT09ICdyZWxlYXNlJykge1xuICAgIC8vIHNvbWUgdGhpbmdzIGFyZSBzcGVjaWFsXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZG9Ub3VjaERyYWcoZ2VzdHVyZXMpO1xuICB9IGVsc2Uge1xuICAgIGlmIChhY3Rpb25zLmxlbmd0aCA9PT0gMikge1xuICAgICAgLy8gYHByZXNzYCB3aXRob3V0IGEgd2FpdCBpcyB0b28gc2xvdyBhbmQgZ2V0cyBpbnRlcnByZXR0ZWQgYXMgYSBgbG9uZ1ByZXNzYFxuICAgICAgaWYgKF8uaGVhZChhY3Rpb25zKSA9PT0gJ3ByZXNzJyAmJiBfLmxhc3QoYWN0aW9ucykgPT09ICdyZWxlYXNlJykge1xuICAgICAgICBhY3Rpb25zWzBdID0gJ3RhcCc7XG4gICAgICAgIGdlc3R1cmVzWzBdLmFjdGlvbiA9ICd0YXAnO1xuICAgICAgfVxuXG4gICAgICAvLyB0aGUgYGxvbmdQcmVzc2AgYW5kIGB0YXBgIG1ldGhvZHMgcmVsZWFzZSBvbiB0aGVpciBvd25cbiAgICAgIGlmICgoXy5oZWFkKGFjdGlvbnMpID09PSAndGFwJyB8fCBfLmhlYWQoYWN0aW9ucykgPT09ICdsb25nUHJlc3MnKSAmJiBfLmxhc3QoYWN0aW9ucykgPT09ICdyZWxlYXNlJykge1xuICAgICAgICBnZXN0dXJlcy5wb3AoKTtcbiAgICAgICAgYWN0aW9ucy5wb3AoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbG9uZ3ByZXNzIGZvbGxvd2VkIGJ5IGFueXRoaW5nIG90aGVyIHRoYW4gcmVsZWFzZSBzaG91bGQgYmVjb21lIGEgcHJlc3MgYW5kIHdhaXRcbiAgICAgIGlmIChhY3Rpb25zWzBdID09PSAnbG9uZ1ByZXNzJykge1xuICAgICAgICBhY3Rpb25zID0gWydwcmVzcycsICd3YWl0JywgLi4uYWN0aW9ucy5zbGljZSgxKV07XG5cbiAgICAgICAgbGV0IHByZXNzID0gZ2VzdHVyZXMuc2hpZnQoKTtcbiAgICAgICAgcHJlc3MuYWN0aW9uID0gJ3ByZXNzJztcbiAgICAgICAgbGV0IHdhaXQgPSB7XG4gICAgICAgICAgYWN0aW9uOiAnd2FpdCcsXG4gICAgICAgICAgb3B0aW9uczoge21zOiBwcmVzcy5vcHRpb25zLmR1cmF0aW9uIHx8IDEwMDB9XG4gICAgICAgIH07XG4gICAgICAgIGRlbGV0ZSBwcmVzcy5vcHRpb25zLmR1cmF0aW9uO1xuICAgICAgICBnZXN0dXJlcyA9IFtwcmVzcywgd2FpdCwgLi4uZ2VzdHVyZXNdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBmaXhlZEdlc3R1cmVzID0gYXdhaXQgdGhpcy5wYXJzZVRvdWNoKGdlc3R1cmVzLCBmYWxzZSk7XG4gICAgLy8gZml4IHJlbGVhc2UgYWN0aW9uIHRoZW4gcGVyZm9ybSBhbGwgYWN0aW9uc1xuICAgIGlmIChhY3Rpb25zW2FjdGlvbnMubGVuZ3RoIC0gMV0gPT09ICdyZWxlYXNlJykge1xuICAgICAgYWN0aW9uc1thY3Rpb25zLmxlbmd0aCAtIDFdID0gYXdhaXQgdGhpcy5maXhSZWxlYXNlKGdlc3R1cmVzKTtcbiAgICB9XG4gICAgZm9yIChsZXQgZyBvZiBmaXhlZEdlc3R1cmVzKSB7XG4gICAgICBhd2FpdCB0aGlzLnBlcmZvcm1HZXN0dXJlKGcpO1xuICAgIH1cbiAgfVxufTtcblxuaGVscGVycy5wYXJzZVRvdWNoID0gYXN5bmMgZnVuY3Rpb24gcGFyc2VUb3VjaCAoZ2VzdHVyZXMsIG11bHRpKSB7XG4gIC8vIGJlY2F1c2UgbXVsdGktdG91Y2ggcmVsZWFzZXMgYXQgdGhlIGVuZCBieSBkZWZhdWx0XG4gIGlmIChtdWx0aSAmJiBfLmxhc3QoZ2VzdHVyZXMpLmFjdGlvbiA9PT0gJ3JlbGVhc2UnKSB7XG4gICAgZ2VzdHVyZXMucG9wKCk7XG4gIH1cblxuICBsZXQgdG91Y2hTdGF0ZU9iamVjdHMgPSBhd2FpdCBhc3luY21hcChnZXN0dXJlcywgYXN5bmMgKGdlc3R1cmUpID0+IHtcbiAgICBsZXQgb3B0aW9ucyA9IGdlc3R1cmUub3B0aW9ucyB8fCB7fTtcbiAgICBpZiAoXy5pbmNsdWRlcyhbJ3ByZXNzJywgJ21vdmVUbycsICd0YXAnLCAnbG9uZ1ByZXNzJ10sIGdlc3R1cmUuYWN0aW9uKSkge1xuICAgICAgb3B0aW9ucy5vZmZzZXQgPSBmYWxzZTtcbiAgICAgIGxldCBlbGVtZW50SWQgPSBnZXN0dXJlLm9wdGlvbnMuZWxlbWVudDtcbiAgICAgIGlmIChlbGVtZW50SWQpIHtcbiAgICAgICAgbGV0IHBvcyA9IGF3YWl0IHRoaXMuZ2V0TG9jYXRpb25JblZpZXcoZWxlbWVudElkKTtcbiAgICAgICAgaWYgKGdlc3R1cmUub3B0aW9ucy54IHx8IGdlc3R1cmUub3B0aW9ucy55KSB7XG4gICAgICAgICAgb3B0aW9ucy54ID0gcG9zLnggKyAoZ2VzdHVyZS5vcHRpb25zLnggfHwgMCk7XG4gICAgICAgICAgb3B0aW9ucy55ID0gcG9zLnkgKyAoZ2VzdHVyZS5vcHRpb25zLnkgfHwgMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gYXdhaXQgdGhpcy5nZXRTaXplKGVsZW1lbnRJZCk7XG4gICAgICAgICAgb3B0aW9ucy54ID0gcG9zLnggKyAod2lkdGggLyAyKTtcbiAgICAgICAgICBvcHRpb25zLnkgPSBwb3MueSArIChoZWlnaHQgLyAyKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdG91Y2hTdGF0ZU9iamVjdCA9IHtcbiAgICAgICAgICBhY3Rpb246IGdlc3R1cmUuYWN0aW9uLFxuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgdGltZU9mZnNldDogMC4wMDUsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0b3VjaFN0YXRlT2JqZWN0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3B0aW9ucy54ID0gKGdlc3R1cmUub3B0aW9ucy54IHx8IDApO1xuICAgICAgICBvcHRpb25zLnkgPSAoZ2VzdHVyZS5vcHRpb25zLnkgfHwgMCk7XG5cbiAgICAgICAgbGV0IHRvdWNoU3RhdGVPYmplY3QgPSB7XG4gICAgICAgICAgYWN0aW9uOiBnZXN0dXJlLmFjdGlvbixcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgIHRpbWVPZmZzZXQ6IDAuMDA1LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdG91Y2hTdGF0ZU9iamVjdDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IG9mZnNldCA9IDAuMDA1O1xuICAgICAgaWYgKGdlc3R1cmUuYWN0aW9uID09PSAnd2FpdCcpIHtcbiAgICAgICAgb3B0aW9ucyA9IGdlc3R1cmUub3B0aW9ucztcbiAgICAgICAgb2Zmc2V0ID0gKHBhcnNlSW50KGdlc3R1cmUub3B0aW9ucy5tcywgMTApIC8gMTAwMCk7XG4gICAgICB9XG4gICAgICBsZXQgdG91Y2hTdGF0ZU9iamVjdCA9IHtcbiAgICAgICAgYWN0aW9uOiBnZXN0dXJlLmFjdGlvbixcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgdGltZU9mZnNldDogb2Zmc2V0LFxuICAgICAgfTtcbiAgICAgIHJldHVybiB0b3VjaFN0YXRlT2JqZWN0O1xuICAgIH1cbiAgfSwgZmFsc2UpO1xuICAvLyB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgdGltZSAod2hpY2ggaXMgbm93IGFuIG9mZnNldClcbiAgLy8gYW5kIHRoZSBwb3NpdGlvbiAod2hpY2ggbWF5IGJlIGFuIG9mZnNldClcbiAgbGV0IHByZXZQb3MgPSBudWxsLFxuICAgICAgdGltZSA9IDA7XG4gIGZvciAobGV0IHN0YXRlIG9mIHRvdWNoU3RhdGVPYmplY3RzKSB7XG4gICAgaWYgKF8uaXNVbmRlZmluZWQoc3RhdGUub3B0aW9ucy54KSAmJiBfLmlzVW5kZWZpbmVkKHN0YXRlLm9wdGlvbnMueSkgJiYgcHJldlBvcyAhPT0gbnVsbCkge1xuICAgICAgLy8gdGhpcyBoYXBwZW5zIHdpdGggd2FpdFxuICAgICAgc3RhdGUub3B0aW9ucy54ID0gcHJldlBvcy54O1xuICAgICAgc3RhdGUub3B0aW9ucy55ID0gcHJldlBvcy55O1xuICAgIH1cbiAgICBpZiAoc3RhdGUub3B0aW9ucy5vZmZzZXQgJiYgcHJldlBvcykge1xuICAgICAgLy8gdGhlIGN1cnJlbnQgcG9zaXRpb24gaXMgYW4gb2Zmc2V0XG4gICAgICBzdGF0ZS5vcHRpb25zLnggKz0gcHJldlBvcy54O1xuICAgICAgc3RhdGUub3B0aW9ucy55ICs9IHByZXZQb3MueTtcbiAgICB9XG4gICAgZGVsZXRlIHN0YXRlLm9wdGlvbnMub2Zmc2V0O1xuICAgIGlmICghXy5pc1VuZGVmaW5lZChzdGF0ZS5vcHRpb25zLngpICYmICFfLmlzVW5kZWZpbmVkKHN0YXRlLm9wdGlvbnMueSkpIHtcbiAgICAgIHByZXZQb3MgPSBzdGF0ZS5vcHRpb25zO1xuICAgIH1cblxuICAgIGlmIChtdWx0aSkge1xuICAgICAgbGV0IHRpbWVPZmZzZXQgPSBzdGF0ZS50aW1lT2Zmc2V0O1xuICAgICAgdGltZSArPSB0aW1lT2Zmc2V0O1xuICAgICAgc3RhdGUudGltZSA9IGFuZHJvaWRIZWxwZXJzLnRydW5jYXRlRGVjaW1hbHModGltZSwgMyk7XG5cbiAgICAgIC8vIG11bHRpIGdlc3R1cmVzIHJlcXVpcmUgJ3RvdWNoJyByYXRoZXIgdGhhbiAnb3B0aW9ucydcbiAgICAgIGlmICghXy5pc1VuZGVmaW5lZChzdGF0ZS5vcHRpb25zLngpICYmICFfLmlzVW5kZWZpbmVkKHN0YXRlLm9wdGlvbnMueSkpIHtcbiAgICAgICAgc3RhdGUudG91Y2ggPSB7XG4gICAgICAgICAgeDogc3RhdGUub3B0aW9ucy54LFxuICAgICAgICAgIHk6IHN0YXRlLm9wdGlvbnMueVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZGVsZXRlIHN0YXRlLm9wdGlvbnM7XG4gICAgfVxuICAgIGRlbGV0ZSBzdGF0ZS50aW1lT2Zmc2V0O1xuICB9XG4gIHJldHVybiB0b3VjaFN0YXRlT2JqZWN0cztcbn07XG5cblxuY29tbWFuZHMucGVyZm9ybU11bHRpQWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gcGVyZm9ybU11bHRpQWN0aW9uIChhY3Rpb25zLCBlbGVtZW50SWQpIHtcbiAgLy8gQW5kcm9pZCBuZWVkcyBhdCBsZWFzdCB0d28gYWN0aW9ucyB0byBiZSBhYmxlIHRvIHBlcmZvcm0gYSBtdWx0aSBwb2ludGVyIGdlc3R1cmVcbiAgaWYgKGFjdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNdWx0aSBQb2ludGVyIEdlc3R1cmVzIG5lZWQgYXQgbGVhc3QgdHdvIGFjdGlvbnMuICcgK1xuICAgICAgICAnVXNlIFRvdWNoIEFjdGlvbnMgZm9yIGEgc2luZ2xlIGFjdGlvbi4nKTtcbiAgfVxuXG4gIGNvbnN0IHN0YXRlcyA9IGF3YWl0IGFzeW5jbWFwKGFjdGlvbnMsIGFzeW5jIChhY3Rpb24pID0+IGF3YWl0IHRoaXMucGFyc2VUb3VjaChhY3Rpb24sIHRydWUpLCBmYWxzZSk7XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZG9QZXJmb3JtTXVsdGlBY3Rpb24oZWxlbWVudElkLCBzdGF0ZXMpO1xufTtcblxuLyoqXG4gKiBSZWFzb24gZm9yIGlzb2xhdGluZyBkb1BlcmZvcm1NdWx0aUFjdGlvbiBmcm9tIHBlcmZvcm1NdWx0aUFjdGlvbiBpcyBmb3IgcmV1c2luZyBwZXJmb3JtTXVsdGlBY3Rpb25cbiAqIGFjcm9zcyBhbmRyb2lkLWRyaXZlcnMgKGxpa2UgYXBwaXVtLXVpYXV0b21hdG9yMi1kcml2ZXIpIGFuZCB0byBhdm9pZCBjb2RlIGR1cGxpY2F0aW9uLlxuICogT3RoZXIgYW5kcm9pZC1kcml2ZXJzIChsaWtlIGFwcGl1bS11aWF1dG9tYXRvcjItZHJpdmVyKSBuZWVkIHRvIG92ZXJyaWRlIGRvUGVyZm9ybU11bHRpQWN0aW9uXG4gKiB0byBmYWNpbGl0YXRlIHBlcmZvcm1NdWx0aUFjdGlvbi5cbiAqL1xuY29tbWFuZHMuZG9QZXJmb3JtTXVsdGlBY3Rpb24gPSBhc3luYyBmdW5jdGlvbiBkb1BlcmZvcm1NdWx0aUFjdGlvbiAoZWxlbWVudElkLCBzdGF0ZXMpIHtcbiAgbGV0IG9wdHM7XG4gIGlmIChlbGVtZW50SWQpIHtcbiAgICBvcHRzID0ge1xuICAgICAgZWxlbWVudElkLFxuICAgICAgYWN0aW9uczogc3RhdGVzXG4gICAgfTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZWxlbWVudDpwZXJmb3JtTXVsdGlQb2ludGVyR2VzdHVyZScsIG9wdHMpO1xuICB9IGVsc2Uge1xuICAgIG9wdHMgPSB7XG4gICAgICBhY3Rpb25zOiBzdGF0ZXNcbiAgICB9O1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdwZXJmb3JtTXVsdGlQb2ludGVyR2VzdHVyZScsIG9wdHMpO1xuICB9XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzLCBoZWxwZXJzKTtcbmV4cG9ydCB7IGNvbW1hbmRzLCBoZWxwZXJzIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sImZpbGUiOiJsaWIvY29tbWFuZHMvdG91Y2guanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
404
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy90b3VjaC5qcyJdLCJuYW1lcyI6WyJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwiZ2V0Q29vcmREZWZhdWx0IiwidmFsIiwidXRpbCIsImhhc1ZhbHVlIiwiZ2V0U3dpcGVUb3VjaER1cmF0aW9uIiwid2FpdEdlc3R1cmUiLCJkdXJhdGlvbiIsIm9wdGlvbnMiLCJtcyIsImRvVG91Y2hBY3Rpb24iLCJhY3Rpb24iLCJvcHRzIiwiZWxlbWVudCIsIngiLCJ5IiwiY291bnQiLCJ0YXAiLCJ0b3VjaERvd24iLCJ0b3VjaFVwIiwidG91Y2hNb3ZlIiwiQiIsImRlbGF5IiwidG91Y2hMb25nQ2xpY2siLCJsb2ciLCJ3YXJuIiwiZXJyb3JBbmRUaHJvdyIsImRvVG91Y2hEcmFnIiwiZ2VzdHVyZXMiLCJsb25nUHJlc3MiLCJtb3ZlVG8iLCJzdGFydFgiLCJzdGFydFkiLCJlbmRYIiwiZW5kWSIsImdldExvY2F0aW9uSW5WaWV3IiwiYXBpTGV2ZWwiLCJhZGIiLCJnZXRBcGlMZXZlbCIsIk1hdGgiLCJtYXgiLCJkcmFnIiwiZml4UmVsZWFzZSIsInJlbGVhc2UiLCJfIiwibGFzdCIsImNsb25lIiwicmVmIiwiZ2VzdHVyZSIsInJldmVyc2UiLCJsb2MiLCJzaXplIiwiZ2V0U2l6ZSIsIndpZHRoIiwiaGVpZ2h0IiwicGljayIsInBlcmZvcm1HZXN0dXJlIiwiZSIsImVycm9ycyIsIk5vU3VjaEVsZW1lbnRFcnJvciIsImRlYnVnIiwiZ2V0U3dpcGVPcHRpb25zIiwidG91Y2hDb3VudCIsImRlc3RFbGVtZW50IiwibG9jUmVzdWx0Iiwic2l6ZVJlc3VsdCIsIm9mZnNldFgiLCJhYnMiLCJvZmZzZXRZIiwiZmlyc3RFbExvY2F0aW9uIiwicGVyZm9ybVRvdWNoIiwibGVuZ3RoIiwic3dpcGVPcHRzIiwic3dpcGUiLCJhY3Rpb25zIiwibWFwIiwiaGVhZCIsInBvcCIsInNsaWNlIiwicHJlc3MiLCJzaGlmdCIsIndhaXQiLCJmaXhlZEdlc3R1cmVzIiwicGFyc2VUb3VjaCIsImciLCJtdWx0aSIsInRvdWNoU3RhdGVPYmplY3RzIiwiaW5jbHVkZXMiLCJvZmZzZXQiLCJlbGVtZW50SWQiLCJwb3MiLCJ0b3VjaFN0YXRlT2JqZWN0IiwidGltZU9mZnNldCIsInBhcnNlSW50IiwicHJldlBvcyIsInRpbWUiLCJzdGF0ZSIsImlzVW5kZWZpbmVkIiwiYW5kcm9pZEhlbHBlcnMiLCJ0cnVuY2F0ZURlY2ltYWxzIiwidG91Y2giLCJwZXJmb3JtTXVsdGlBY3Rpb24iLCJFcnJvciIsInN0YXRlcyIsImRvUGVyZm9ybU11bHRpQWN0aW9uIiwiYm9vdHN0cmFwIiwic2VuZEFjdGlvbiIsIk9iamVjdCIsImFzc2lnbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxJQUFJQSxRQUFRLEdBQUcsRUFBZjtBQUFBLElBQW1CQyxPQUFPLEdBQUcsRUFBN0I7QUFBQSxJQUFpQ0MsVUFBVSxHQUFHLEVBQTlDOzs7O0FBRUEsU0FBU0MsZUFBVCxDQUEwQkMsR0FBMUIsRUFBK0I7QUFJN0IsU0FBT0MsY0FBS0MsUUFBTCxDQUFjRixHQUFkLElBQXFCQSxHQUFyQixHQUEyQixHQUFsQztBQUNEOztBQUVELFNBQVNHLHFCQUFULENBQWdDQyxXQUFoQyxFQUE2QztBQUczQyxNQUFJQyxRQUFRLEdBQUcsR0FBZjs7QUFDQSxNQUFJLE9BQU9ELFdBQVcsQ0FBQ0UsT0FBWixDQUFvQkMsRUFBM0IsS0FBa0MsV0FBbEMsSUFBaURILFdBQVcsQ0FBQ0UsT0FBWixDQUFvQkMsRUFBekUsRUFBNkU7QUFDM0VGLElBQUFBLFFBQVEsR0FBR0QsV0FBVyxDQUFDRSxPQUFaLENBQW9CQyxFQUFwQixHQUF5QixJQUFwQzs7QUFDQSxRQUFJRixRQUFRLEtBQUssQ0FBakIsRUFBb0I7QUFHbEJBLE1BQUFBLFFBQVEsR0FBRyxHQUFYO0FBQ0Q7QUFDRjs7QUFDRCxTQUFPQSxRQUFQO0FBQ0Q7O0FB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QUFLd0UsVUFBTCxDQUFnQnhFLE1BQWhCLEVBQXdCLElBQXhCLENBQTFDLEVBQXlFLEtBQXpFLENBQXJCO0FBRUEsU0FBTyxNQUFNLEtBQUs2RixvQkFBTCxDQUEwQmYsU0FBMUIsRUFBcUNjLE1BQXJDLENBQWI7QUFDRCxDQVZEOztBQWtCQXpHLFFBQVEsQ0FBQzBHLG9CQUFULEdBQWdDLGVBQWVBLG9CQUFmLENBQXFDZixTQUFyQyxFQUFnRGMsTUFBaEQsRUFBd0Q7QUFDdEYsTUFBSTNGLElBQUo7O0FBQ0EsTUFBSTZFLFNBQUosRUFBZTtBQUNiN0UsSUFBQUEsSUFBSSxHQUFHO0FBQ0w2RSxNQUFBQSxTQURLO0FBRUxmLE1BQUFBLE9BQU8sRUFBRTZCO0FBRkosS0FBUDtBQUlBLFdBQU8sTUFBTSxLQUFLRSxTQUFMLENBQWVDLFVBQWYsQ0FBMEIsb0NBQTFCLEVBQWdFOUYsSUFBaEUsQ0FBYjtBQUNELEdBTkQsTUFNTztBQUNMQSxJQUFBQSxJQUFJLEdBQUc7QUFDTDhELE1BQUFBLE9BQU8sRUFBRTZCO0FBREosS0FBUDtBQUdBLFdBQU8sTUFBTSxLQUFLRSxTQUFMLENBQWVDLFVBQWYsQ0FBMEIsNEJBQTFCLEVBQXdEOUYsSUFBeEQsQ0FBYjtBQUNEO0FBQ0YsQ0FkRDs7QUFnQkErRixNQUFNLENBQUNDLE1BQVAsQ0FBYzVHLFVBQWQsRUFBMEJGLFFBQTFCLEVBQW9DQyxPQUFwQztlQUVlQyxVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBhbmRyb2lkSGVscGVycyBmcm9tICcuLi9hbmRyb2lkLWhlbHBlcnMnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgZXJyb3JzLCBpc0Vycm9yVHlwZSB9IGZyb20gJ0BhcHBpdW0vYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgYXN5bmNtYXAgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcblxubGV0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBnZXRDb29yZERlZmF1bHQgKHZhbCkge1xuICAvLyBnb2luZyB0aGUgbG9uZyB3YXkgYW5kIGNoZWNraW5nIGZvciB1bmRlZmluZWQgYW5kIG51bGwgc2luY2VcbiAgLy8gd2UgY2FuJ3QgYmUgYXNzdXJlZCBgZWxJZGAgaXMgYSBzdHJpbmcgYW5kIG5vdCBhbiBpbnQuIFNhbWVcbiAgLy8gdGhpbmcgd2l0aCBkZXN0RWxlbWVudCBiZWxvdy5cbiAgcmV0dXJuIHV0aWwuaGFzVmFsdWUodmFsKSA/IHZhbCA6IDAuNTtcbn1cblxuZnVuY3Rpb24gZ2V0U3dpcGVUb3VjaER1cmF0aW9uICh3YWl0R2VzdHVyZSkge1xuICAvLyB0aGUgdG91Y2ggYWN0aW9uIGFwaSB1c2VzIG1zLCB3ZSB3YW50IHNlY29uZHNcbiAgLy8gMC44IGlzIHRoZSBkZWZhdWx0IHRpbWUgZm9yIHRoZSBvcGVyYXRpb25cbiAgbGV0IGR1cmF0aW9uID0gMC44O1xuICBpZiAodHlwZW9mIHdhaXRHZXN0dXJlLm9wdGlvbnMubXMgIT09ICd1bmRlZmluZWQnICYmIHdhaXRHZXN0dXJlLm9wdGlvbnMubXMpIHtcbiAgICBkdXJhdGlvbiA9IHdhaXRHZXN0dXJlLm9wdGlvbnMubXMgLyAxMDAwO1xuICAgIGlmIChkdXJhdGlvbiA9PT0gMCkge1xuICAgICAgLy8gc2V0IHRvIGEgdmVyeSBsb3cgbnVtYmVyLCBzaW5jZSB0aGV5IHdhbnRlZCBpdCBmYXN0XG4gICAgICAvLyBidXQgYmVsb3cgMC4xIGJlY29tZXMgMCBzdGVwcywgd2hpY2ggY2F1c2VzIGVycm9yc1xuICAgICAgZHVyYXRpb24gPSAwLjE7XG4gICAgfVxuICB9XG4gIHJldHVybiBkdXJhdGlvbjtcbn1cblxuY29tbWFuZHMuZG9Ub3VjaEFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIGRvVG91Y2hBY3Rpb24gKGFjdGlvbiwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHsgZWxlbWVudCwgeCwgeSwgY291bnQsIG1zLCBkdXJhdGlvbiB9ID0gb3B0cztcbiAgLy8gcGFyc2VUb3VjaCBwcmVjYWxjdWxhdGVzIGFic29sdXRlIGVsZW1lbnQgcG9zaXRpb25zXG4gIC8vIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gcGFzcyBgZWxlbWVudGAgdG8gdGhlIGFmZmVjdGVkIGdlc3R1cmVzXG4gIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgY2FzZSAndGFwJzpcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnRhcChudWxsLCB4LCB5LCBjb3VudCk7XG4gICAgY2FzZSAncHJlc3MnOlxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudG91Y2hEb3duKG51bGwsIHgsIHkpO1xuICAgIGNhc2UgJ3JlbGVhc2UnOlxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudG91Y2hVcChlbGVtZW50LCB4LCB5KTtcbiAgICBjYXNlICdtb3ZlVG8nOlxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudG91Y2hNb3ZlKG51bGwsIHgsIHkpO1xuICAgIGNhc2UgJ3dhaXQnOlxuICAgICAgcmV0dXJuIGF3YWl0IEIuZGVsYXkobXMpO1xuICAgIGNhc2UgJ2xvbmdQcmVzcyc6XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy50b3VjaExvbmdDbGljayhudWxsLCB4LCB5LCBkdXJhdGlvbiB8fCAxMDAwKTtcbiAgICBjYXNlICdjYW5jZWwnOlxuICAgICAgLy8gVE9ETzogY2xhcmlmeSBiZWhhdmlvciBvZiAnY2FuY2VsJyBhY3Rpb24gYW5kIGZpeCB0aGlzXG4gICAgICBsb2cud2FybignQ2FuY2VsIGFjdGlvbiBjdXJyZW50bHkgaGFzIG5vIGVmZmVjdCcpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGxvZy5lcnJvckFuZFRocm93KGB1bmtub3duIGFjdGlvbiAke2FjdGlvbn1gKTtcbiAgfVxufTtcblxuLy8gZHJhZyBpcyAqbm90KiBwcmVzcy1tb3ZlLXJlbGVhc2UsIHNvIHdlIG5lZWQgdG8gdHJhbnNsYXRlXG4vLyBkcmFnIHdvcmtzIGZpbmUgZm9yIHNjcm9sbCwgYXMgd2VsbFxuaGVscGVycy5kb1RvdWNoRHJhZyA9IGFzeW5jIGZ1bmN0aW9uIGRvVG91Y2hEcmFnIChnZXN0dXJlcykge1xuICBsZXQgbG9uZ1ByZXNzID0gZ2VzdHVyZXNbMF07XG4gIGxldCBtb3ZlVG8gPSBnZXN0dXJlc1sxXTtcbiAgbGV0IHN0YXJ0WCA9IGxvbmdQcmVzcy5vcHRpb25zLnggfHwgMCxcbiAgICAgIHN0YXJ0WSA9IGxvbmdQcmVzcy5vcHRpb25zLnkgfHwgMCxcbiAgICAgIGVuZFggPSBtb3ZlVG8ub3B0aW9ucy54IHx8IDAsXG4gICAgICBlbmRZID0gbW92ZVRvLm9wdGlvbnMueSB8fCAwO1xuICBpZiAobG9uZ1ByZXNzLm9wdGlvbnMuZWxlbWVudCkge1xuICAgIGxldCB7eCwgeX0gPSBhd2FpdCB0aGlzLmdldExvY2F0aW9uSW5WaWV3KGxvbmdQcmVzcy5vcHRpb25zLmVsZW1lbnQpO1xuICAgIHN0YXJ0WCArPSB4IHx8IDA7XG4gICAgc3RhcnRZICs9IHkgfHwgMDtcbiAgfVxuICBpZiAobW92ZVRvLm9wdGlvbnMuZWxlbWVudCkge1xuICAgIGxldCB7eCwgeX0gPSBhd2FpdCB0aGlzLmdldExvY2F0aW9uSW5WaWV3KG1vdmVUby5vcHRpb25zLmVsZW1lbnQpO1xuICAgIGVuZFggKz0geCB8fCAwO1xuICAgIGVuZFkgKz0geSB8fCAwO1xuICB9XG5cbiAgbGV0IGFwaUxldmVsID0gYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKTtcbiAgLy8gbG9sbGlwb3AgdGFrZXMgYSBsaXR0bGUgbG9uZ2VyIHRvIGdldCB0aGluZ3Mgcm9sbGluZ1xuICBsZXQgZHVyYXRpb24gPSBhcGlMZXZlbCA+PSA1ID8gMiA6IDE7XG4gIC8vIG1ha2Ugc3VyZSB0aGF0IGlmIHRoZSBsb25nIHByZXNzIGhhcyBhIGR1cmF0aW9uLCB3ZSB1c2UgaXQuXG4gIGlmIChsb25nUHJlc3Mub3B0aW9ucyAmJiBsb25nUHJlc3Mub3B0aW9ucy5kdXJhdGlvbikge1xuICAgIGR1cmF0aW9uID0gTWF0aC5tYXgobG9uZ1ByZXNzLm9wdGlvbnMuZHVyYXRpb24gLyAxMDAwLCBkdXJhdGlvbik7XG4gIH1cblxuICAvLyBgZHJhZ2Agd2lsbCB0YWtlIGNhcmUgb2Ygd2hldGhlciB0aGVyZSBpcyBhbiBlbGVtZW50IG9yIG5vdCBhdCB0aGF0IGxldmVsXG4gIHJldHVybiBhd2FpdCB0aGlzLmRyYWcoc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFksIGR1cmF0aW9uLCAxLCBsb25nUHJlc3Mub3B0aW9ucy5lbGVtZW50LCBtb3ZlVG8ub3B0aW9ucy5lbGVtZW50KTtcbn07XG5cbi8vIFJlbGVhc2UgZ2VzdHVyZSBuZWVkcyBlbGVtZW50IG9yIGNvLW9yZGluYXRlcyB0byByZWxlYXNlIGl0IGZyb20gdGhhdCBwb3NpdGlvblxuLy8gb3IgZWxzZSByZWxlYXNlIGdlc3R1cmUgaXMgcGVyZm9ybWVkIGZyb20gY2VudGVyIG9mIHRoZSBzY3JlZW4sIHNvIHRvIGZpeCBpdFxuLy8gVGhpcyBtZXRob2Qgc2V0cyBjby1vcmRpbmF0ZXMvZWxlbWVudCB0byByZWxlYXNlIGdlc3R1cmUgaWYgaXQgaGFzIG5vIG9wdGlvbnMgc2V0IGFscmVhZHkuXG5oZWxwZXJzLmZpeFJlbGVhc2UgPSBhc3luYyBmdW5jdGlvbiBmaXhSZWxlYXNlIChnZXN0dXJlcykge1xuICBsZXQgcmVsZWFzZSA9IF8ubGFzdChnZXN0dXJlcyk7XG4gIC8vIHNvbWV0aW1lcyB0aGVyZSBhcmUgbm8gb3B0aW9uc1xuICByZWxlYXNlLm9wdGlvbnMgPSByZWxlYXNlLm9wdGlvbnMgfHwge307XG4gIC8vIG5vdGhpbmcgdG8gZG8gaWYgcmVsZWFzZSBvcHRpb25zIGFyZSBhbHJlYWR5IHNldFxuICBpZiAocmVsZWFzZS5vcHRpb25zLmVsZW1lbnQgfHwgKHJlbGVhc2Uub3B0aW9ucy54ICYmIHJlbGVhc2Uub3B0aW9ucy55KSkge1xuICAgIHJldHVybjtcbiAgfVxuICAvLyB3aXRob3V0IGNvb3JkaW5hdGVzLCBgcmVsZWFzZWAgdXNlcyB0aGUgY2VudGVyIG9mIHRoZSBzY3JlZW4sIHdoaWNoLFxuICAvLyBnZW5lcmFsbHkgc3BlYWtpbmcsIGlzIG5vdCB3aGF0IHdlIHdhbnRcbiAgLy8gdGhlcmVmb3JlOiBsb29wIGJhY2t3YXJkcyBhbmQgdXNlIHRoZSBsYXN0IGNvbW1hbmQgd2l0aCBhbiBlbGVtZW50IGFuZC9vclxuICAvLyBvZmZzZXQgY29vcmRpbmF0ZXNcbiAgZ2VzdHVyZXMgPSBfLmNsb25lKGdlc3R1cmVzKTtcbiAgbGV0IHJlZiA9IG51bGw7XG4gIGZvciAobGV0IGdlc3R1cmUgb2YgZ2VzdHVyZXMucmV2ZXJzZSgpKSB7XG4gICAgbGV0IG9wdHMgPSBnZXN0dXJlLm9wdGlvbnM7XG4gICAgaWYgKG9wdHMuZWxlbWVudCB8fCAob3B0cy54ICYmIG9wdHMueSkpIHtcbiAgICAgIHJlZiA9IGdlc3R1cmU7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKHJlZikge1xuICAgIGxldCBvcHRzID0gcmVmLm9wdGlvbnM7XG4gICAgaWYgKG9wdHMuZWxlbWVudCkge1xuICAgICAgbGV0IGxvYyA9IGF3YWl0IHRoaXMuZ2V0TG9jYXRpb25JblZpZXcob3B0cy5lbGVtZW50KTtcbiAgICAgIGlmIChvcHRzLnggJiYgb3B0cy55KSB7XG4gICAgICAgIC8vIHRoaXMgaXMgYW4gb2Zmc2V0IGZyb20gdGhlIGVsZW1lbnRcbiAgICAgICAgcmVsZWFzZS5vcHRpb25zID0ge1xuICAgICAgICAgIHg6IGxvYy54ICsgb3B0cy54LFxuICAgICAgICAgIHk6IGxvYy55ICsgb3B0cy55XG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0aGlzIGlzIHRoZSBjZW50ZXIgb2YgdGhlIGVsZW1lbnRcbiAgICAgICAgbGV0IHNpemUgPSBhd2FpdCB0aGlzLmdldFNpemUob3B0cy5lbGVtZW50KTtcbiAgICAgICAgcmVsZWFzZS5vcHRpb25zID0ge1xuICAgICAgICAgIHg6IGxvYy54ICsgc2l6ZS53aWR0aCAvIDIsXG4gICAgICAgICAgeTogbG9jLnkgKyBzaXplLmhlaWdodCAvIDJcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVsZWFzZS5vcHRpb25zID0gXy5waWNrKG9wdHMsICd4JywgJ3knKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlbGVhc2U7XG59O1xuXG4vLyBQZXJmb3JtIG9uZSBnZXN0dXJlXG5oZWxwZXJzLnBlcmZvcm1HZXN0dXJlID0gYXN5bmMgZnVuY3Rpb24gcGVyZm9ybUdlc3R1cmUgKGdlc3R1cmUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5kb1RvdWNoQWN0aW9uKGdlc3R1cmUuYWN0aW9uLCBnZXN0dXJlLm9wdGlvbnMgfHwge30pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gc29tZXRpbWUgdGhlIGVsZW1lbnQgaXMgbm90IGF2YWlsYWJsZSB3aGVuIHJlbGVhc2luZywgcmV0cnkgd2l0aG91dCBpdFxuICAgIGlmIChpc0Vycm9yVHlwZShlLCBlcnJvcnMuTm9TdWNoRWxlbWVudEVycm9yKSAmJiBnZXN0dXJlLmFjdGlvbiA9PT0gJ3JlbGVhc2UnICYmXG4gICAgICAgIGdlc3R1cmUub3B0aW9ucy5lbGVtZW50KSB7XG4gICAgICBkZWxldGUgZ2VzdHVyZS5vcHRpb25zLmVsZW1lbnQ7XG4gICAgICBsb2cuZGVidWcoYHJldHJ5aW5nIHJlbGVhc2Ugd2l0aG91dCBlbGVtZW50IG9wdHM6ICR7Z2VzdHVyZS5vcHRpb25zfS5gKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRvVG91Y2hBY3Rpb24oZ2VzdHVyZS5hY3Rpb24sIGdlc3R1cmUub3B0aW9ucyB8fCB7fSk7XG4gICAgfVxuICAgIHRocm93IGU7XG4gIH1cbn07XG5cbmNvbW1hbmRzLmdldFN3aXBlT3B0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uIGdldFN3aXBlT3B0aW9ucyAoZ2VzdHVyZXMsIHRvdWNoQ291bnQgPSAxKSB7XG4gIGxldCBzdGFydFggPSBnZXRDb29yZERlZmF1bHQoZ2VzdHVyZXNbMF0ub3B0aW9ucy54KSxcbiAgICAgIHN0YXJ0WSA9IGdldENvb3JkRGVmYXVsdChnZXN0dXJlc1swXS5vcHRpb25zLnkpLFxuICAgICAgZW5kWCA9IGdldENvb3JkRGVmYXVsdChnZXN0dXJlc1syXS5vcHRpb25zLngpLFxuICAgICAgZW5kWSA9IGdldENvb3JkRGVmYXVsdChnZXN0dXJlc1syXS5vcHRpb25zLnkpLFxuICAgICAgZHVyYXRpb24gPSBnZXRTd2lwZVRvdWNoRHVyYXRpb24oZ2VzdHVyZXNbMV0pLFxuICAgICAgZWxlbWVudCA9IGdlc3R1cmVzWzBdLm9wdGlvbnMuZWxlbWVudCxcbiAgICAgIGRlc3RFbGVtZW50ID0gZ2VzdHVyZXNbMl0ub3B0aW9ucy5lbGVtZW50IHx8IGdlc3R1cmVzWzBdLm9wdGlvbnMuZWxlbWVudDtcblxuICAvLyB0aGVyZSdzIG5vIGRlc3RpbmF0aW9uIGVsZW1lbnQgaGFuZGxpbmcgaW4gYm9vdHN0cmFwIGFuZCBzaW5jZSBpdCBhcHBsaWVzIHRvIGFsbCBwbGF0Zm9ybXMsIHdlIGhhbmRsZSBpdCBoZXJlXG4gIGlmICh1dGlsLmhhc1ZhbHVlKGRlc3RFbGVtZW50KSkge1xuICAgIGxldCBsb2NSZXN1bHQgPSBhd2FpdCB0aGlzLmdldExvY2F0aW9uSW5WaWV3KGRlc3RFbGVtZW50KTtcbiAgICBsZXQgc2l6ZVJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0U2l6ZShkZXN0RWxlbWVudCk7XG4gICAgbGV0IG9mZnNldFggPSAoTWF0aC5hYnMoZW5kWCkgPCAxICYmIE1hdGguYWJzKGVuZFgpID4gMCkgPyBzaXplUmVzdWx0LndpZHRoICogZW5kWCA6IGVuZFg7XG4gICAgbGV0IG9mZnNldFkgPSAoTWF0aC5hYnMoZW5kWSkgPCAxICYmIE1hdGguYWJzKGVuZFkpID4gMCkgPyBzaXplUmVzdWx0LmhlaWdodCAqIGVuZFkgOiBlbmRZO1xuICAgIGVuZFggPSBsb2NSZXN1bHQueCArIG9mZnNldFg7XG4gICAgZW5kWSA9IGxvY1Jlc3VsdC55ICsgb2Zmc2V0WTtcbiAgICAvLyBpZiB0aGUgdGFyZ2V0IGVsZW1lbnQgd2FzIHByb3ZpZGVkLCB0aGUgY29vcmRpbmF0ZXMgZm9yIHRoZSBkZXN0aW5hdGlvbiBuZWVkIHRvIGJlIHJlbGF0aXZlIHRvIGl0LlxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKGVsZW1lbnQpKSB7XG4gICAgICBsZXQgZmlyc3RFbExvY2F0aW9uID0gYXdhaXQgdGhpcy5nZXRMb2NhdGlvbkluVmlldyhlbGVtZW50KTtcbiAgICAgIGVuZFggLT0gZmlyc3RFbExvY2F0aW9uLng7XG4gICAgICBlbmRZIC09IGZpcnN0RWxMb2NhdGlvbi55O1xuICAgIH1cbiAgfVxuICAvLyBjbGllbnRzIGFyZSByZXNwb25zaWJsZSB0byB1c2UgdGhlc2Ugb3B0aW9ucyBjb3JyZWN0bHlcbiAgcmV0dXJuIHtzdGFydFgsIHN0YXJ0WSwgZW5kWCwgZW5kWSwgZHVyYXRpb24sIHRvdWNoQ291bnQsIGVsZW1lbnR9O1xufTtcblxuY29tbWFuZHMucGVyZm9ybVRvdWNoID0gYXN5bmMgZnVuY3Rpb24gcGVyZm9ybVRvdWNoIChnZXN0dXJlcykge1xuICAvLyBwcmVzcy13YWl0LW1vdmVUby1yZWxlYXNlIGlzIGBzd2lwZWAsIHNvIHVzZSBuYXRpdmUgbWV0aG9kXG4gIGlmIChnZXN0dXJlcy5sZW5ndGggPT09IDQgJiZcbiAgICAgIGdlc3R1cmVzWzBdLmFjdGlvbiA9PT0gJ3ByZXNzJyAmJlxuICAgICAgZ2VzdHVyZXNbMV0uYWN0aW9uID09PSAnd2FpdCcgJiZcbiAgICAgIGdlc3R1cmVzWzJdLmFjdGlvbiA9PT0gJ21vdmVUbycgJiZcbiAgICAgIGdlc3R1cmVzWzNdLmFjdGlvbiA9PT0gJ3JlbGVhc2UnKSB7XG5cbiAgICBsZXQgc3dpcGVPcHRzID0gYXdhaXQgdGhpcy5nZXRTd2lwZU9wdGlvbnMoZ2VzdHVyZXMpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnN3aXBlKHN3aXBlT3B0cy5zdGFydFgsIHN3aXBlT3B0cy5zdGFydFksIHN3aXBlT3B0cy5lbmRYLFxuICAgICAgICBzd2lwZU9wdHMuZW5kWSwgc3dpcGVPcHRzLmR1cmF0aW9uLCBzd2lwZU9wdHMudG91Y2hDb3VudCxcbiAgICAgICAgc3dpcGVPcHRzLmVsZW1lbnQpO1xuICB9XG4gIGxldCBhY3Rpb25zID0gXy5tYXAoZ2VzdHVyZXMsICdhY3Rpb24nKTtcblxuICBpZiAoYWN0aW9uc1swXSA9PT0gJ2xvbmdQcmVzcycgJiYgYWN0aW9uc1sxXSA9PT0gJ21vdmVUbycgJiYgYWN0aW9uc1syXSA9PT0gJ3JlbGVhc2UnKSB7XG4gICAgLy8gc29tZSB0aGluZ3MgYXJlIHNwZWNpYWxcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5kb1RvdWNoRHJhZyhnZXN0dXJlcyk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGFjdGlvbnMubGVuZ3RoID09PSAyKSB7XG4gICAgICAvLyBgcHJlc3NgIHdpdGhvdXQgYSB3YWl0IGlzIHRvbyBzbG93IGFuZCBnZXRzIGludGVycHJldHRlZCBhcyBhIGBsb25nUHJlc3NgXG4gICAgICBpZiAoXy5oZWFkKGFjdGlvbnMpID09PSAncHJlc3MnICYmIF8ubGFzdChhY3Rpb25zKSA9PT0gJ3JlbGVhc2UnKSB7XG4gICAgICAgIGFjdGlvbnNbMF0gPSAndGFwJztcbiAgICAgICAgZ2VzdHVyZXNbMF0uYWN0aW9uID0gJ3RhcCc7XG4gICAgICB9XG5cbiAgICAgIC8vIHRoZSBgbG9uZ1ByZXNzYCBhbmQgYHRhcGAgbWV0aG9kcyByZWxlYXNlIG9uIHRoZWlyIG93blxuICAgICAgaWYgKChfLmhlYWQoYWN0aW9ucykgPT09ICd0YXAnIHx8IF8uaGVhZChhY3Rpb25zKSA9PT0gJ2xvbmdQcmVzcycpICYmIF8ubGFzdChhY3Rpb25zKSA9PT0gJ3JlbGVhc2UnKSB7XG4gICAgICAgIGdlc3R1cmVzLnBvcCgpO1xuICAgICAgICBhY3Rpb25zLnBvcCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBsb25ncHJlc3MgZm9sbG93ZWQgYnkgYW55dGhpbmcgb3RoZXIgdGhhbiByZWxlYXNlIHNob3VsZCBiZWNvbWUgYSBwcmVzcyBhbmQgd2FpdFxuICAgICAgaWYgKGFjdGlvbnNbMF0gPT09ICdsb25nUHJlc3MnKSB7XG4gICAgICAgIGFjdGlvbnMgPSBbJ3ByZXNzJywgJ3dhaXQnLCAuLi5hY3Rpb25zLnNsaWNlKDEpXTtcblxuICAgICAgICBsZXQgcHJlc3MgPSBnZXN0dXJlcy5zaGlmdCgpO1xuICAgICAgICBwcmVzcy5hY3Rpb24gPSAncHJlc3MnO1xuICAgICAgICBsZXQgd2FpdCA9IHtcbiAgICAgICAgICBhY3Rpb246ICd3YWl0JyxcbiAgICAgICAgICBvcHRpb25zOiB7bXM6IHByZXNzLm9wdGlvbnMuZHVyYXRpb24gfHwgMTAwMH1cbiAgICAgICAgfTtcbiAgICAgICAgZGVsZXRlIHByZXNzLm9wdGlvbnMuZHVyYXRpb247XG4gICAgICAgIGdlc3R1cmVzID0gW3ByZXNzLCB3YWl0LCAuLi5nZXN0dXJlc107XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGZpeGVkR2VzdHVyZXMgPSBhd2FpdCB0aGlzLnBhcnNlVG91Y2goZ2VzdHVyZXMsIGZhbHNlKTtcbiAgICAvLyBmaXggcmVsZWFzZSBhY3Rpb24gdGhlbiBwZXJmb3JtIGFsbCBhY3Rpb25zXG4gICAgaWYgKGFjdGlvbnNbYWN0aW9ucy5sZW5ndGggLSAxXSA9PT0gJ3JlbGVhc2UnKSB7XG4gICAgICBhY3Rpb25zW2FjdGlvbnMubGVuZ3RoIC0gMV0gPSBhd2FpdCB0aGlzLmZpeFJlbGVhc2UoZ2VzdHVyZXMpO1xuICAgIH1cbiAgICBmb3IgKGxldCBnIG9mIGZpeGVkR2VzdHVyZXMpIHtcbiAgICAgIGF3YWl0IHRoaXMucGVyZm9ybUdlc3R1cmUoZyk7XG4gICAgfVxuICB9XG59O1xuXG5oZWxwZXJzLnBhcnNlVG91Y2ggPSBhc3luYyBmdW5jdGlvbiBwYXJzZVRvdWNoIChnZXN0dXJlcywgbXVsdGkpIHtcbiAgLy8gYmVjYXVzZSBtdWx0aS10b3VjaCByZWxlYXNlcyBhdCB0aGUgZW5kIGJ5IGRlZmF1bHRcbiAgaWYgKG11bHRpICYmIF8ubGFzdChnZXN0dXJlcykuYWN0aW9uID09PSAncmVsZWFzZScpIHtcbiAgICBnZXN0dXJlcy5wb3AoKTtcbiAgfVxuXG4gIGxldCB0b3VjaFN0YXRlT2JqZWN0cyA9IGF3YWl0IGFzeW5jbWFwKGdlc3R1cmVzLCBhc3luYyAoZ2VzdHVyZSkgPT4ge1xuICAgIGxldCBvcHRpb25zID0gZ2VzdHVyZS5vcHRpb25zIHx8IHt9O1xuICAgIGlmIChfLmluY2x1ZGVzKFsncHJlc3MnLCAnbW92ZVRvJywgJ3RhcCcsICdsb25nUHJlc3MnXSwgZ2VzdHVyZS5hY3Rpb24pKSB7XG4gICAgICBvcHRpb25zLm9mZnNldCA9IGZhbHNlO1xuICAgICAgbGV0IGVsZW1lbnRJZCA9IGdlc3R1cmUub3B0aW9ucy5lbGVtZW50O1xuICAgICAgaWYgKGVsZW1lbnRJZCkge1xuICAgICAgICBsZXQgcG9zID0gYXdhaXQgdGhpcy5nZXRMb2NhdGlvbkluVmlldyhlbGVtZW50SWQpO1xuICAgICAgICBpZiAoZ2VzdHVyZS5vcHRpb25zLnggfHwgZ2VzdHVyZS5vcHRpb25zLnkpIHtcbiAgICAgICAgICBvcHRpb25zLnggPSBwb3MueCArIChnZXN0dXJlLm9wdGlvbnMueCB8fCAwKTtcbiAgICAgICAgICBvcHRpb25zLnkgPSBwb3MueSArIChnZXN0dXJlLm9wdGlvbnMueSB8fCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSBhd2FpdCB0aGlzLmdldFNpemUoZWxlbWVudElkKTtcbiAgICAgICAgICBvcHRpb25zLnggPSBwb3MueCArICh3aWR0aCAvIDIpO1xuICAgICAgICAgIG9wdGlvbnMueSA9IHBvcy55ICsgKGhlaWdodCAvIDIpO1xuICAgICAgICB9XG4gICAgICAgIGxldCB0b3VjaFN0YXRlT2JqZWN0ID0ge1xuICAgICAgICAgIGFjdGlvbjogZ2VzdHVyZS5hY3Rpb24sXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICB0aW1lT2Zmc2V0OiAwLjAwNSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRvdWNoU3RhdGVPYmplY3Q7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25zLnggPSAoZ2VzdHVyZS5vcHRpb25zLnggfHwgMCk7XG4gICAgICAgIG9wdGlvbnMueSA9IChnZXN0dXJlLm9wdGlvbnMueSB8fCAwKTtcblxuICAgICAgICBsZXQgdG91Y2hTdGF0ZU9iamVjdCA9IHtcbiAgICAgICAgICBhY3Rpb246IGdlc3R1cmUuYWN0aW9uLFxuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgdGltZU9mZnNldDogMC4wMDUsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0b3VjaFN0YXRlT2JqZWN0O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgb2Zmc2V0ID0gMC4wMDU7XG4gICAgICBpZiAoZ2VzdHVyZS5hY3Rpb24gPT09ICd3YWl0Jykge1xuICAgICAgICBvcHRpb25zID0gZ2VzdHVyZS5vcHRpb25zO1xuICAgICAgICBvZmZzZXQgPSAocGFyc2VJbnQoZ2VzdHVyZS5vcHRpb25zLm1zLCAxMCkgLyAxMDAwKTtcbiAgICAgIH1cbiAgICAgIGxldCB0b3VjaFN0YXRlT2JqZWN0ID0ge1xuICAgICAgICBhY3Rpb246IGdlc3R1cmUuYWN0aW9uLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICB0aW1lT2Zmc2V0OiBvZmZzZXQsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHRvdWNoU3RhdGVPYmplY3Q7XG4gICAgfVxuICB9LCBmYWxzZSk7XG4gIC8vIHdlIG5lZWQgdG8gY2hhbmdlIHRoZSB0aW1lICh3aGljaCBpcyBub3cgYW4gb2Zmc2V0KVxuICAvLyBhbmQgdGhlIHBvc2l0aW9uICh3aGljaCBtYXkgYmUgYW4gb2Zmc2V0KVxuICBsZXQgcHJldlBvcyA9IG51bGwsXG4gICAgICB0aW1lID0gMDtcbiAgZm9yIChsZXQgc3RhdGUgb2YgdG91Y2hTdGF0ZU9iamVjdHMpIHtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZChzdGF0ZS5vcHRpb25zLngpICYmIF8uaXNVbmRlZmluZWQoc3RhdGUub3B0aW9ucy55KSAmJiBwcmV2UG9zICE9PSBudWxsKSB7XG4gICAgICAvLyB0aGlzIGhhcHBlbnMgd2l0aCB3YWl0XG4gICAgICBzdGF0ZS5vcHRpb25zLnggPSBwcmV2UG9zLng7XG4gICAgICBzdGF0ZS5vcHRpb25zLnkgPSBwcmV2UG9zLnk7XG4gICAgfVxuICAgIGlmIChzdGF0ZS5vcHRpb25zLm9mZnNldCAmJiBwcmV2UG9zKSB7XG4gICAgICAvLyB0aGUgY3VycmVudCBwb3NpdGlvbiBpcyBhbiBvZmZzZXRcbiAgICAgIHN0YXRlLm9wdGlvbnMueCArPSBwcmV2UG9zLng7XG4gICAgICBzdGF0ZS5vcHRpb25zLnkgKz0gcHJldlBvcy55O1xuICAgIH1cbiAgICBkZWxldGUgc3RhdGUub3B0aW9ucy5vZmZzZXQ7XG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKHN0YXRlLm9wdGlvbnMueCkgJiYgIV8uaXNVbmRlZmluZWQoc3RhdGUub3B0aW9ucy55KSkge1xuICAgICAgcHJldlBvcyA9IHN0YXRlLm9wdGlvbnM7XG4gICAgfVxuXG4gICAgaWYgKG11bHRpKSB7XG4gICAgICBsZXQgdGltZU9mZnNldCA9IHN0YXRlLnRpbWVPZmZzZXQ7XG4gICAgICB0aW1lICs9IHRpbWVPZmZzZXQ7XG4gICAgICBzdGF0ZS50aW1lID0gYW5kcm9pZEhlbHBlcnMudHJ1bmNhdGVEZWNpbWFscyh0aW1lLCAzKTtcblxuICAgICAgLy8gbXVsdGkgZ2VzdHVyZXMgcmVxdWlyZSAndG91Y2gnIHJhdGhlciB0aGFuICdvcHRpb25zJ1xuICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHN0YXRlLm9wdGlvbnMueCkgJiYgIV8uaXNVbmRlZmluZWQoc3RhdGUub3B0aW9ucy55KSkge1xuICAgICAgICBzdGF0ZS50b3VjaCA9IHtcbiAgICAgICAgICB4OiBzdGF0ZS5vcHRpb25zLngsXG4gICAgICAgICAgeTogc3RhdGUub3B0aW9ucy55XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBkZWxldGUgc3RhdGUub3B0aW9ucztcbiAgICB9XG4gICAgZGVsZXRlIHN0YXRlLnRpbWVPZmZzZXQ7XG4gIH1cbiAgcmV0dXJuIHRvdWNoU3RhdGVPYmplY3RzO1xufTtcblxuXG5jb21tYW5kcy5wZXJmb3JtTXVsdGlBY3Rpb24gPSBhc3luYyBmdW5jdGlvbiBwZXJmb3JtTXVsdGlBY3Rpb24gKGFjdGlvbnMsIGVsZW1lbnRJZCkge1xuICAvLyBBbmRyb2lkIG5lZWRzIGF0IGxlYXN0IHR3byBhY3Rpb25zIHRvIGJlIGFibGUgdG8gcGVyZm9ybSBhIG11bHRpIHBvaW50ZXIgZ2VzdHVyZVxuICBpZiAoYWN0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ011bHRpIFBvaW50ZXIgR2VzdHVyZXMgbmVlZCBhdCBsZWFzdCB0d28gYWN0aW9ucy4gJyArXG4gICAgICAgICdVc2UgVG91Y2ggQWN0aW9ucyBmb3IgYSBzaW5nbGUgYWN0aW9uLicpO1xuICB9XG5cbiAgY29uc3Qgc3RhdGVzID0gYXdhaXQgYXN5bmNtYXAoYWN0aW9ucywgYXN5bmMgKGFjdGlvbikgPT4gYXdhaXQgdGhpcy5wYXJzZVRvdWNoKGFjdGlvbiwgdHJ1ZSksIGZhbHNlKTtcblxuICByZXR1cm4gYXdhaXQgdGhpcy5kb1BlcmZvcm1NdWx0aUFjdGlvbihlbGVtZW50SWQsIHN0YXRlcyk7XG59O1xuXG4vKipcbiAqIFJlYXNvbiBmb3IgaXNvbGF0aW5nIGRvUGVyZm9ybU11bHRpQWN0aW9uIGZyb20gcGVyZm9ybU11bHRpQWN0aW9uIGlzIGZvciByZXVzaW5nIHBlcmZvcm1NdWx0aUFjdGlvblxuICogYWNyb3NzIGFuZHJvaWQtZHJpdmVycyAobGlrZSBhcHBpdW0tdWlhdXRvbWF0b3IyLWRyaXZlcikgYW5kIHRvIGF2b2lkIGNvZGUgZHVwbGljYXRpb24uXG4gKiBPdGhlciBhbmRyb2lkLWRyaXZlcnMgKGxpa2UgYXBwaXVtLXVpYXV0b21hdG9yMi1kcml2ZXIpIG5lZWQgdG8gb3ZlcnJpZGUgZG9QZXJmb3JtTXVsdGlBY3Rpb25cbiAqIHRvIGZhY2lsaXRhdGUgcGVyZm9ybU11bHRpQWN0aW9uLlxuICovXG5jb21tYW5kcy5kb1BlcmZvcm1NdWx0aUFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIGRvUGVyZm9ybU11bHRpQWN0aW9uIChlbGVtZW50SWQsIHN0YXRlcykge1xuICBsZXQgb3B0cztcbiAgaWYgKGVsZW1lbnRJZCkge1xuICAgIG9wdHMgPSB7XG4gICAgICBlbGVtZW50SWQsXG4gICAgICBhY3Rpb25zOiBzdGF0ZXNcbiAgICB9O1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdlbGVtZW50OnBlcmZvcm1NdWx0aVBvaW50ZXJHZXN0dXJlJywgb3B0cyk7XG4gIH0gZWxzZSB7XG4gICAgb3B0cyA9IHtcbiAgICAgIGFjdGlvbnM6IHN0YXRlc1xuICAgIH07XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ3BlcmZvcm1NdWx0aVBvaW50ZXJHZXN0dXJlJywgb3B0cyk7XG4gIH1cbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuZXhwb3J0IHsgY29tbWFuZHMsIGhlbHBlcnMgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy90b3VjaC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.commonCapConstraints = exports.default = void 0;
6
+ exports.default = exports.commonCapConstraints = void 0;
7
7
 
8
8
  require("source-map-support/register");
9
9
 
@@ -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==