appium-xcuitest-driver 3.56.1 → 3.56.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/index.js CHANGED
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = exports.startServer = exports.XCUITestDriver = void 0;
6
+ exports.startServer = exports.default = exports.XCUITestDriver = void 0;
7
7
 
8
8
  require("source-map-support/register");
9
9
 
@@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports.extractBundleId = extractBundleId;
9
- exports.verifyApplicationPlatform = verifyApplicationPlatform;
10
9
  exports.parseLocalizableStrings = parseLocalizableStrings;
10
+ exports.verifyApplicationPlatform = verifyApplicationPlatform;
11
11
 
12
12
  require("source-map-support/register");
13
13
 
@@ -5,10 +5,10 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
+ exports.doesSupportKeychainApi = void 0;
9
+ exports.hasCertificateLegacy = hasCertificateLegacy;
8
10
  exports.installCertificate = installCertificate;
9
11
  exports.installCertificateLegacy = installCertificateLegacy;
10
- exports.hasCertificateLegacy = hasCertificateLegacy;
11
- exports.doesSupportKeychainApi = void 0;
12
12
 
13
13
  require("source-map-support/register");
14
14
 
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = exports.helpers = exports.commands = void 0;
6
+ exports.helpers = exports.default = exports.commands = void 0;
7
7
 
8
8
  require("source-map-support/register");
9
9
 
@@ -5,8 +5,8 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.parseCommonName = parseCommonName;
9
8
  exports.default = exports.commands = void 0;
9
+ exports.parseCommonName = parseCommonName;
10
10
 
11
11
  require("source-map-support/register");
12
12
 
@@ -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
 
@@ -45,7 +45,8 @@ extensions.execute = async function execute(script, args) {
45
45
  return await this.executeMobile(script, _lodash.default.isArray(args) ? args[0] : args);
46
46
  } else if (this.isWebContext()) {
47
47
  args = this.convertElementsForAtoms(args);
48
- return await this.executeAtom('execute_script', [script, args]);
48
+ const result = await this.executeAtom('execute_script', [script, args]);
49
+ return this.cacheWebElements(result);
49
50
  } else {
50
51
  throw new _appiumBaseDriver.errors.NotImplementedError();
51
52
  }
@@ -137,4 +138,4 @@ var _default = extensions;
137
138
  exports.default = _default;require('source-map-support').install();
138
139
 
139
140
 
140
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9leGVjdXRlLmpzIl0sIm5hbWVzIjpbImV4dGVuc2lvbnMiLCJyZWNlaXZlQXN5bmNSZXNwb25zZSIsInN0YXR1cyIsInZhbHVlIiwibG9nIiwiZGVidWciLCJKU09OIiwic3RyaW5naWZ5IiwidXRpbCIsImhhc1ZhbHVlIiwiYXN5bmNQcm9taXNlIiwid2FybiIsInJlamVjdCIsIm1lc3NhZ2UiLCJfIiwiaXNTdHJpbmciLCJlcnJvciIsInN0YWNrdHJhY2UiLCJyZXNvbHZlIiwiZXhlY3V0ZSIsInNjcmlwdCIsImFyZ3MiLCJtYXRjaCIsInJlcGxhY2UiLCJ0cmltIiwiZXhlY3V0ZU1vYmlsZSIsImlzQXJyYXkiLCJpc1dlYkNvbnRleHQiLCJjb252ZXJ0RWxlbWVudHNGb3JBdG9tcyIsImV4ZWN1dGVBdG9tIiwiZXJyb3JzIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsImV4ZWN1dGVBc3luYyIsImFzeW5jV2FpdE1zIiwicHJvbWlzZSIsInJlbW90ZSIsImV4ZWN1dGVBdG9tQXN5bmMiLCJjdXJXZWJGcmFtZXMiLCJ3YWl0Rm9yQXRvbSIsIm1vYmlsZUNvbW1hbmQiLCJvcHRzIiwiY29tbWFuZE1hcCIsInRhcCIsInNjcm9sbCIsInNlbGVjdFBpY2tlcldoZWVsVmFsdWUiLCJzd2lwZSIsInBpbmNoIiwiZG91YmxlVGFwIiwidHdvRmluZ2VyVGFwIiwidGFwV2l0aE51bWJlck9mVGFwcyIsInRvdWNoQW5kSG9sZCIsImRyYWdGcm9tVG9Gb3JEdXJhdGlvbiIsInJvdGF0ZUVsZW1lbnQiLCJhbGVydCIsInNldFBhc3RlYm9hcmQiLCJnZXRQYXN0ZWJvYXJkIiwic291cmNlIiwiZ2V0Q29udGV4dHMiLCJpbnN0YWxsQXBwIiwiaXNBcHBJbnN0YWxsZWQiLCJyZW1vdmVBcHAiLCJsYXVuY2hBcHAiLCJ0ZXJtaW5hdGVBcHAiLCJxdWVyeUFwcFN0YXRlIiwiYWN0aXZhdGVBcHAiLCJsaXN0QXBwcyIsInZpZXdwb3J0U2NyZWVuc2hvdCIsInZpZXdwb3J0UmVjdCIsInN0YXJ0UGVyZlJlY29yZCIsInN0b3BQZXJmUmVjb3JkIiwiaW5zdGFsbENlcnRpZmljYXRlIiwic3RhcnRMb2dzQnJvYWRjYXN0Iiwic3RvcExvZ3NCcm9hZGNhc3QiLCJiYXR0ZXJ5SW5mbyIsImRldmljZUluZm8iLCJnZXREZXZpY2VUaW1lIiwiYWN0aXZlQXBwSW5mbyIsImRldmljZVNjcmVlbkluZm8iLCJwcmVzc0J1dHRvbiIsImVucm9sbEJpb21ldHJpYyIsInNlbmRCaW9tZXRyaWNNYXRjaCIsImlzQmlvbWV0cmljRW5yb2xsZWQiLCJjbGVhcktleWNoYWlucyIsImdldFBlcm1pc3Npb24iLCJzZXRQZXJtaXNzaW9uIiwicmVzZXRQZXJtaXNzaW9uIiwiZ2V0QXBwZWFyYW5jZSIsInNldEFwcGVhcmFuY2UiLCJzaXJpQ29tbWFuZCIsImRlbGV0ZUZpbGUiLCJkZWxldGVGb2xkZXIiLCJzdGFydEF1ZGlvUmVjb3JkaW5nIiwic3RvcEF1ZGlvUmVjb3JkaW5nIiwicnVuWENUZXN0IiwiaW5zdGFsbFhDVGVzdEJ1bmRsZSIsImxpc3RYQ1Rlc3RCdW5kbGVzIiwibGlzdFhDVGVzdHNJblRlc3RCdW5kbGUiLCJwdXNoTm90aWZpY2F0aW9uIiwiZXhwZWN0Tm90aWZpY2F0aW9uIiwicGVyZm9ybUlvSGlkRXZlbnQiLCJjb25maWd1cmVMb2NhbGl6YXRpb24iLCJyZXNldExvY2F0aW9uU2VydmljZSIsImhhcyIsIlVua25vd25Db21tYW5kRXJyb3IiLCJrZXlzIiwiam9pbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFHQTs7QUFDQTs7QUFFQSxNQUFNQSxVQUFVLEdBQUcsRUFBbkI7O0FBRUFBLFVBQVUsQ0FBQ0Msb0JBQVgsR0FBa0MsZUFBZUEsb0JBQWYsQ0FBcUNDLE1BQXJDLEVBQTZDQyxLQUE3QyxFQUFvRDtBQUNwRkMsa0JBQUlDLEtBQUosQ0FBVyw0QkFBMkJDLElBQUksQ0FBQ0MsU0FBTCxDQUFlSixLQUFmLENBQXNCLEVBQTVEOztB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QSxNQUFJLENBQUN2RixnQkFBRXdGLEdBQUYsQ0FBTTdELFVBQU4sRUFBa0JGLGFBQWxCLENBQUwsRUFBdUM7QUFDckMsVUFBTSxJQUFJVCx5QkFBT3lFLG1CQUFYLENBQWdDLDJCQUEwQmhFLGFBQWMsV0FBVXpCLGdCQUFFMEYsSUFBRixDQUFPL0QsVUFBUCxFQUFtQmdFLElBQW5CLENBQXdCLElBQXhCLENBQThCLDBCQUFoSCxDQUFOO0FBQ0Q7O0FBQ0QsU0FBTyxNQUFNLEtBQUtoRSxVQUFVLENBQUNGLGFBQUQsQ0FBZixFQUFnQ0MsSUFBaEMsQ0FBYjtBQUNELENBMUdEOztlQTRHZXhDLFUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgZXJyb3JzLCBlcnJvckZyb21Db2RlLCBlcnJvckZyb21XM0NKc29uQ29kZVxufSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcblxuY29uc3QgZXh0ZW5zaW9ucyA9IHt9O1xuXG5leHRlbnNpb25zLnJlY2VpdmVBc3luY1Jlc3BvbnNlID0gYXN5bmMgZnVuY3Rpb24gcmVjZWl2ZUFzeW5jUmVzcG9uc2UgKHN0YXR1cywgdmFsdWUpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gIGxvZy5kZWJ1ZyhgUmVjZWl2ZWQgYXN5bmMgcmVzcG9uc2U6ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICBpZiAoIXV0aWwuaGFzVmFsdWUodGhpcy5hc3luY1Byb21pc2UpKSB7XG4gICAgbG9nLndhcm4oYFJlY2VpdmVkIGFzeW5jIHJlc3BvbnNlIHdoZW4gd2Ugd2VyZSBub3QgZXhwZWN0aW5nIG9uZSEgYCArXG4gICAgICBgUmVzcG9uc2Ugd2FzOiAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodXRpbC5oYXNWYWx1ZShzdGF0dXMpICYmIHN0YXR1cyAhPT0gMCkge1xuICAgIC8vIE1KU09OV1BcbiAgICByZXR1cm4gdGhpcy5hc3luY1Byb21pc2UucmVqZWN0KGVycm9yRnJvbUNvZGUoc3RhdHVzLCB2YWx1ZS5tZXNzYWdlKSk7XG4gIH1cbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKHN0YXR1cykgJiYgdmFsdWUgJiYgXy5pc1N0cmluZyh2YWx1ZS5lcnJvcikpIHtcbiAgICAvLyBXM0NcbiAgICByZXR1cm4gdGhpcy5hc3luY1Byb21pc2UucmVqZWN0KGVycm9yRnJvbVczQ0pzb25Db2RlKHZhbHVlLmVycm9yLCB2YWx1ZS5tZXNzYWdlLCB2YWx1ZS5zdGFja3RyYWNlKSk7XG4gIH1cbiAgcmV0dXJuIHRoaXMuYXN5bmNQcm9taXNlLnJlc29sdmUodmFsdWUpO1xufTtcblxuZXh0ZW5zaW9ucy5leGVjdXRlID0gYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZSAoc2NyaXB0LCBhcmdzKSB7XG4gIGlmIChzY3JpcHQubWF0Y2goL15tb2JpbGU6LykpIHtcbiAgICBzY3JpcHQgPSBzY3JpcHQucmVwbGFjZSgvXm1vYmlsZTovLCAnJykudHJpbSgpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4ZWN1dGVNb2JpbGUoc2NyaXB0LCBfLmlzQXJyYXkoYXJncykgPyBhcmdzWzBdIDogYXJncyk7XG4gIH0gZWxzZSBpZiAodGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIGFyZ3MgPSB0aGlzLmNvbnZlcnRFbGVtZW50c0ZvckF0b21zKGFyZ3MpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdleGVjdXRlX3NjcmlwdCcsIFtzY3JpcHQsIGFyZ3NdKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxufTtcblxuZXh0ZW5zaW9ucy5leGVjdXRlQXN5bmMgPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlQXN5bmMgKHNjcmlwdCwgYXJncykge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGFyZ3MgPSB0aGlzLmNvbnZlcnRFbGVtZW50c0ZvckF0b21zKGFyZ3MpO1xuICB0aGlzLmFzeW5jV2FpdE1zID0gdGhpcy5hc3luY1dhaXRNcyB8fCAwO1xuICBjb25zdCBwcm9taXNlID0gdGhpcy5yZW1vdGUuZXhlY3V0ZUF0b21Bc3luYygnZXhlY3V0ZV9hc3luY19zY3JpcHQnLCBbc2NyaXB0LCBhcmdzLCB0aGlzLmFzeW5jV2FpdE1zXSwgdGhpcy5jdXJXZWJGcmFtZXMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy53YWl0Rm9yQXRvbShwcm9taXNlKTtcbn07XG5cbmV4dGVuc2lvbnMuZXhlY3V0ZU1vYmlsZSA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVNb2JpbGUgKG1vYmlsZUNvbW1hbmQsIG9wdHMgPSB7fSkge1xuICBjb25zdCBjb21tYW5kTWFwID0ge1xuICAgIC8vcmVnaW9uIGdlc3R1cmVzIHN1cHBvcnRcbiAgICB0YXA6ICdtb2JpbGVUYXAnLFxuICAgIHNjcm9sbDogJ21vYmlsZVNjcm9sbCcsXG4gICAgc2VsZWN0UGlja2VyV2hlZWxWYWx1ZTogJ21vYmlsZVNlbGVjdFBpY2tlcldoZWVsVmFsdWUnLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjY4LXN3aXBlbGVmdD9sYW5ndWFnZT1vYmpjXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NzQtc3dpcGVyaWdodD9sYW5ndWFnZT1vYmpjXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2Njctc3dpcGV1cD9sYW5ndWFnZT1vYmpjXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NjQtc3dpcGVkb3duP2xhbmd1YWdlPW9iamNcbiAgICBzd2lwZTogJ21vYmlsZVN3aXBlJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY2OS1waW5jaHdpdGhzY2FsZT9sYW5ndWFnZT1vYmpjXG4gICAgcGluY2g6ICdtb2JpbGVQaW5jaCcsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NzMtZG91YmxldGFwP2xhbmd1YWdlPW9iamNcbiAgICBkb3VibGVUYXA6ICdtb2JpbGVEb3VibGVUYXAnLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4Njc1LXR3b2ZpbmdlcnRhcD9sYW5ndWFnZT1vYmpjXG4gICAgdHdvRmluZ2VyVGFwOiAnbW9iaWxlVHdvRmluZ2VyVGFwJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY3MS10YXB3aXRobnVtYmVyb2Z0YXBzP2xhbmd1YWdlPW9iamNcbiAgICB0YXBXaXRoTnVtYmVyT2ZUYXBzOiAnbW9iaWxlVGFwV2l0aE51bWJlck9mVGFwcycsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NjMtcHJlc3Nmb3JkdXJhdGlvbj9sYW5ndWFnZT1vYmpjXG4gICAgdG91Y2hBbmRIb2xkOiAnbW9iaWxlVG91Y2hBbmRIb2xkJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY3MC1wcmVzc2ZvcmR1cmF0aW9uP2xhbmd1YWdlPW9iamNcbiAgICBkcmFnRnJvbVRvRm9yRHVyYXRpb246ICdtb2JpbGVEcmFnRnJvbVRvRm9yRHVyYXRpb24nLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjY1LXJvdGF0ZT9sYW5ndWFnZT1vYmpjXG4gICAgcm90YXRlRWxlbWVudDogJ21vYmlsZVJvdGF0ZUVsZW1lbnQnLFxuXG4gICAgLy9lbmRyZWdpb24gZ2VzdHVyZXMgc3VwcG9ydFxuICAgIGFsZXJ0OiAnbW9iaWxlSGFuZGxlQWxlcnQnLFxuXG4gICAgc2V0UGFzdGVib2FyZDogJ21vYmlsZVNldFBhc3RlYm9hcmQnLFxuICAgIGdldFBhc3RlYm9hcmQ6ICdtb2JpbGVHZXRQYXN0ZWJvYXJkJyxcblxuICAgIHNvdXJjZTogJ21vYmlsZUdldFNvdXJjZScsXG4gICAgZ2V0Q29udGV4dHM6ICdtb2JpbGVHZXRDb250ZXh0cycsXG5cbiAgICAvL3JlZ2lvbiBtdWx0aXBsZSBhcHBzIG1hbmFnZW1lbnRcbiAgICBpbnN0YWxsQXBwOiAnbW9iaWxlSW5zdGFsbEFwcCcsXG4gICAgaXNBcHBJbnN0YWxsZWQ6ICdtb2JpbGVJc0FwcEluc3RhbGxlZCcsXG4gICAgcmVtb3ZlQXBwOiAnbW9iaWxlUmVtb3ZlQXBwJyxcbiAgICBsYXVuY2hBcHA6ICdtb2JpbGVMYXVuY2hBcHAnLFxuICAgIHRlcm1pbmF0ZUFwcDogJ21vYmlsZVRlcm1pbmF0ZUFwcCcsXG4gICAgcXVlcnlBcHBTdGF0ZTogJ21vYmlsZVF1ZXJ5QXBwU3RhdGUnLFxuICAgIGFjdGl2YXRlQXBwOiAnbW9iaWxlQWN0aXZhdGVBcHAnLFxuICAgIGxpc3RBcHBzOiAnbW9iaWxlTGlzdEFwcHMnLFxuICAgIC8vZW5kcmVnaW9uIG11bHRpcGxlIGFwcHMgbWFuYWdlbWVudFxuXG4gICAgdmlld3BvcnRTY3JlZW5zaG90OiAnZ2V0Vmlld3BvcnRTY3JlZW5zaG90JyxcbiAgICB2aWV3cG9ydFJlY3Q6ICdnZXRWaWV3cG9ydFJlY3QnLFxuXG4gICAgc3RhcnRQZXJmUmVjb3JkOiAnbW9iaWxlU3RhcnRQZXJmUmVjb3JkJyxcbiAgICBzdG9wUGVyZlJlY29yZDogJ21vYmlsZVN0b3BQZXJmUmVjb3JkJyxcblxuICAgIGluc3RhbGxDZXJ0aWZpY2F0ZTogJ21vYmlsZUluc3RhbGxDZXJ0aWZpY2F0ZScsXG5cbiAgICBzdGFydExvZ3NCcm9hZGNhc3Q6ICdtb2JpbGVTdGFydExvZ3NCcm9hZGNhc3QnLFxuICAgIHN0b3BMb2dzQnJvYWRjYXN0OiAnbW9iaWxlU3RvcExvZ3NCcm9hZGNhc3QnLFxuXG4gICAgYmF0dGVyeUluZm86ICdtb2JpbGVHZXRCYXR0ZXJ5SW5mbycsXG4gICAgZGV2aWNlSW5mbzogJ21vYmlsZUdldERldmljZUluZm8nLFxuICAgIGdldERldmljZVRpbWU6ICdtb2JpbGVHZXREZXZpY2VUaW1lJyxcbiAgICBhY3RpdmVBcHBJbmZvOiAnbW9iaWxlR2V0QWN0aXZlQXBwSW5mbycsXG4gICAgZGV2aWNlU2NyZWVuSW5mbzogJ2dldFNjcmVlbkluZm8nLFxuXG4gICAgcHJlc3NCdXR0b246ICdtb2JpbGVQcmVzc0J1dHRvbicsXG5cbiAgICBlbnJvbGxCaW9tZXRyaWM6ICdtb2JpbGVFbnJvbGxCaW9tZXRyaWMnLFxuICAgIHNlbmRCaW9tZXRyaWNNYXRjaDogJ21vYmlsZVNlbmRCaW9tZXRyaWNNYXRjaCcsXG4gICAgaXNCaW9tZXRyaWNFbnJvbGxlZDogJ21vYmlsZUlzQmlvbWV0cmljRW5yb2xsZWQnLFxuXG4gICAgY2xlYXJLZXljaGFpbnM6ICdtb2JpbGVDbGVhcktleWNoYWlucycsXG5cbiAgICBnZXRQZXJtaXNzaW9uOiAnbW9iaWxlR2V0UGVybWlzc2lvbicsXG4gICAgc2V0UGVybWlzc2lvbjogJ21vYmlsZVNldFBlcm1pc3Npb25zJyxcbiAgICByZXNldFBlcm1pc3Npb246ICdtb2JpbGVSZXNldFBlcm1pc3Npb24nLFxuXG4gICAgZ2V0QXBwZWFyYW5jZTogJ21vYmlsZUdldEFwcGVhcmFuY2UnLFxuICAgIHNldEFwcGVhcmFuY2U6ICdtb2JpbGVTZXRBcHBlYXJhbmNlJyxcblxuICAgIHNpcmlDb21tYW5kOiAnbW9iaWxlU2lyaUNvbW1hbmQnLFxuXG4gICAgZGVsZXRlRmlsZTogJ21vYmlsZURlbGV0ZUZpbGUnLFxuICAgIGRlbGV0ZUZvbGRlcjogJ21vYmlsZURlbGV0ZUZvbGRlcicsXG5cbiAgICBzdGFydEF1ZGlvUmVjb3JkaW5nOiAnc3RhcnRBdWRpb1JlY29yZGluZycsXG4gICAgc3RvcEF1ZGlvUmVjb3JkaW5nOiAnc3RvcEF1ZGlvUmVjb3JkaW5nJyxcblxuICAgIC8vIFhDVGVzdFxuICAgIHJ1blhDVGVzdDogJ21vYmlsZVJ1blhDVGVzdCcsXG4gICAgaW5zdGFsbFhDVGVzdEJ1bmRsZTogJ21vYmlsZUluc3RhbGxYQ1Rlc3RCdW5kbGUnLFxuICAgIGxpc3RYQ1Rlc3RCdW5kbGVzOiAnbW9iaWxlTGlzdFhDVGVzdEJ1bmRsZXMnLFxuICAgIGxpc3RYQ1Rlc3RzSW5UZXN0QnVuZGxlOiAnbW9iaWxlTGlzdFhDVGVzdHNJblRlc3RCdW5kbGUnLFxuXG4gICAgcHVzaE5vdGlmaWNhdGlvbjogJ21vYmlsZVB1c2hOb3RpZmljYXRpb24nLFxuICAgIGV4cGVjdE5vdGlmaWNhdGlvbjogJ21vYmlsZUV4cGVjdE5vdGlmaWNhdGlvbicsXG5cbiAgICBwZXJmb3JtSW9IaWRFdmVudDogJ21vYmlsZVBlcmZvcm1Jb0hpZEV2ZW50JyxcblxuICAgIGNvbmZpZ3VyZUxvY2FsaXphdGlvbjogJ21vYmlsZUNvbmZpZ3VyZUxvY2FsaXphdGlvbicsXG5cbiAgICByZXNldExvY2F0aW9uU2VydmljZTogJ21vYmlsZVJlc2V0TG9jYXRpb25TZXJ2aWNlJyxcbiAgfTtcblxuICBpZiAoIV8uaGFzKGNvbW1hbmRNYXAsIG1vYmlsZUNvbW1hbmQpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Vbmtub3duQ29tbWFuZEVycm9yKGBVbmtub3duIG1vYmlsZSBjb21tYW5kICcke21vYmlsZUNvbW1hbmR9Jy4gT25seSAke18ua2V5cyhjb21tYW5kTWFwKS5qb2luKCcsICcpfSBjb21tYW5kcyBhcmUgc3VwcG9ydGVkLmApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzW2NvbW1hbmRNYXBbbW9iaWxlQ29tbWFuZF1dKG9wdHMpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJmaWxlIjoibGliL2NvbW1hbmRzL2V4ZWN1dGUuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
141
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9leGVjdXRlLmpzIl0sIm5hbWVzIjpbImV4dGVuc2lvbnMiLCJyZWNlaXZlQXN5bmNSZXNwb25zZSIsInN0YXR1cyIsInZhbHVlIiwibG9nIiwiZGVidWciLCJKU09OIiwic3RyaW5naWZ5IiwidXRpbCIsImhhc1ZhbHVlIiwiYXN5bmNQcm9taXNlIiwid2FybiIsInJlamVjdCIsIm1lc3NhZ2UiLCJfIiwiaXNTdHJpbmciLCJlcnJvciIsInN0YWNrdHJhY2UiLCJyZXNvbHZlIiwiZXhlY3V0ZSIsInNjcmlwdCIsImFyZ3MiLCJtYXRjaCIsInJlcGxhY2UiLCJ0cmltIiwiZXhlY3V0ZU1vYmlsZSIsImlzQXJyYXkiLCJpc1dlYkNvbnRleHQiLCJjb252ZXJ0RWxlbWVudHNGb3JBdG9tcyIsInJlc3VsdCIsImV4ZWN1dGVBdG9tIiwiY2FjaGVXZWJFbGVtZW50cyIsImVycm9ycyIsIk5vdEltcGxlbWVudGVkRXJyb3IiLCJleGVjdXRlQXN5bmMiLCJhc3luY1dhaXRNcyIsInByb21pc2UiLCJyZW1vdGUiLCJleGVjdXRlQXRvbUFzeW5jIiwiY3VyV2ViRnJhbWVzIiwid2FpdEZvckF0b20iLCJtb2JpbGVDb21tYW5kIiwib3B0cyIsImNvbW1hbmRNYXAiLCJ0YXAiLCJzY3JvbGwiLCJzZWxlY3RQaWNrZXJXaGVlbFZhbHVlIiwic3dpcGUiLCJwaW5jaCIsImRvdWJsZVRhcCIsInR3b0ZpbmdlclRhcCIsInRhcFdpdGhOdW1iZXJPZlRhcHMiLCJ0b3VjaEFuZEhvbGQiLCJkcmFnRnJvbVRvRm9yRHVyYXRpb24iLCJyb3RhdGVFbGVtZW50IiwiYWxlcnQiLCJzZXRQYXN0ZWJvYXJkIiwiZ2V0UGFzdGVib2FyZCIsInNvdXJjZSIsImdldENvbnRleHRzIiwiaW5zdGFsbEFwcCIsImlzQXBwSW5zdGFsbGVkIiwicmVtb3ZlQXBwIiwibGF1bmNoQXBwIiwidGVybWluYXRlQXBwIiwicXVlcnlBcHBTdGF0ZSIsImFjdGl2YXRlQXBwIiwibGlzdEFwcHMiLCJ2aWV3cG9ydFNjcmVlbnNob3QiLCJ2aWV3cG9ydFJlY3QiLCJzdGFydFBlcmZSZWNvcmQiLCJzdG9wUGVyZlJlY29yZCIsImluc3RhbGxDZXJ0aWZpY2F0ZSIsInN0YXJ0TG9nc0Jyb2FkY2FzdCIsInN0b3BMb2dzQnJvYWRjYXN0IiwiYmF0dGVyeUluZm8iLCJkZXZpY2VJbmZvIiwiZ2V0RGV2aWNlVGltZSIsImFjdGl2ZUFwcEluZm8iLCJkZXZpY2VTY3JlZW5JbmZvIiwicHJlc3NCdXR0b24iLCJlbnJvbGxCaW9tZXRyaWMiLCJzZW5kQmlvbWV0cmljTWF0Y2giLCJpc0Jpb21ldHJpY0Vucm9sbGVkIiwiY2xlYXJLZXljaGFpbnMiLCJnZXRQZXJtaXNzaW9uIiwic2V0UGVybWlzc2lvbiIsInJlc2V0UGVybWlzc2lvbiIsImdldEFwcGVhcmFuY2UiLCJzZXRBcHBlYXJhbmNlIiwic2lyaUNvbW1hbmQiLCJkZWxldGVGaWxlIiwiZGVsZXRlRm9sZGVyIiwic3RhcnRBdWRpb1JlY29yZGluZyIsInN0b3BBdWRpb1JlY29yZGluZyIsInJ1blhDVGVzdCIsImluc3RhbGxYQ1Rlc3RCdW5kbGUiLCJsaXN0WENUZXN0QnVuZGxlcyIsImxpc3RYQ1Rlc3RzSW5UZXN0QnVuZGxlIiwicHVzaE5vdGlmaWNhdGlvbiIsImV4cGVjdE5vdGlmaWNhdGlvbiIsInBlcmZvcm1Jb0hpZEV2ZW50IiwiY29uZmlndXJlTG9jYWxpemF0aW9uIiwicmVzZXRMb2NhdGlvblNlcnZpY2UiLCJoYXMiLCJVbmtub3duQ29tbWFuZEVycm9yIiwia2V5cyIsImpvaW4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBR0E7O0FBQ0E7O0FBRUEsTUFBTUEsVUFBVSxHQUFHLEVBQW5COztBQUVBQSxVQUFVLENBQUNDLG9CQUFYLEdBQWtDLGVBQWVBLG9CQUFmLENBQXFDQyxNQUFyQyxFQUE2Q0MsS0FBN0MsRUFBb0Q7QUFDcEZDLGtCQUFJQyxLQUFKLENBQVcsNEJBQTJCQyxJQUFJLENBQUNDLFNB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QTlGRjtBQWdHakJDLElBQUFBLHFCQUFxQixFQUFFLDZCQWhHTjtBQWtHakJDLElBQUFBLG9CQUFvQixFQUFFO0FBbEdMLEdBQW5COztBQXFHQSxNQUFJLENBQUN6RixnQkFBRTBGLEdBQUYsQ0FBTTdELFVBQU4sRUFBa0JGLGFBQWxCLENBQUwsRUFBdUM7QUFDckMsVUFBTSxJQUFJVCx5QkFBT3lFLG1CQUFYLENBQWdDLDJCQUEwQmhFLGFBQWMsV0FBVTNCLGdCQUFFNEYsSUFBRixDQUFPL0QsVUFBUCxFQUFtQmdFLElBQW5CLENBQXdCLElBQXhCLENBQThCLDBCQUFoSCxDQUFOO0FBQ0Q7O0FBQ0QsU0FBTyxNQUFNLEtBQUtoRSxVQUFVLENBQUNGLGFBQUQsQ0FBZixFQUFnQ0MsSUFBaEMsQ0FBYjtBQUNELENBMUdEOztlQTRHZTFDLFUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgZXJyb3JzLCBlcnJvckZyb21Db2RlLCBlcnJvckZyb21XM0NKc29uQ29kZVxufSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcblxuY29uc3QgZXh0ZW5zaW9ucyA9IHt9O1xuXG5leHRlbnNpb25zLnJlY2VpdmVBc3luY1Jlc3BvbnNlID0gYXN5bmMgZnVuY3Rpb24gcmVjZWl2ZUFzeW5jUmVzcG9uc2UgKHN0YXR1cywgdmFsdWUpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gIGxvZy5kZWJ1ZyhgUmVjZWl2ZWQgYXN5bmMgcmVzcG9uc2U6ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICBpZiAoIXV0aWwuaGFzVmFsdWUodGhpcy5hc3luY1Byb21pc2UpKSB7XG4gICAgbG9nLndhcm4oYFJlY2VpdmVkIGFzeW5jIHJlc3BvbnNlIHdoZW4gd2Ugd2VyZSBub3QgZXhwZWN0aW5nIG9uZSEgYCArXG4gICAgICBgUmVzcG9uc2Ugd2FzOiAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodXRpbC5oYXNWYWx1ZShzdGF0dXMpICYmIHN0YXR1cyAhPT0gMCkge1xuICAgIC8vIE1KU09OV1BcbiAgICByZXR1cm4gdGhpcy5hc3luY1Byb21pc2UucmVqZWN0KGVycm9yRnJvbUNvZGUoc3RhdHVzLCB2YWx1ZS5tZXNzYWdlKSk7XG4gIH1cbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKHN0YXR1cykgJiYgdmFsdWUgJiYgXy5pc1N0cmluZyh2YWx1ZS5lcnJvcikpIHtcbiAgICAvLyBXM0NcbiAgICByZXR1cm4gdGhpcy5hc3luY1Byb21pc2UucmVqZWN0KGVycm9yRnJvbVczQ0pzb25Db2RlKHZhbHVlLmVycm9yLCB2YWx1ZS5tZXNzYWdlLCB2YWx1ZS5zdGFja3RyYWNlKSk7XG4gIH1cbiAgcmV0dXJuIHRoaXMuYXN5bmNQcm9taXNlLnJlc29sdmUodmFsdWUpO1xufTtcblxuZXh0ZW5zaW9ucy5leGVjdXRlID0gYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZSAoc2NyaXB0LCBhcmdzKSB7XG4gIGlmIChzY3JpcHQubWF0Y2goL15tb2JpbGU6LykpIHtcbiAgICBzY3JpcHQgPSBzY3JpcHQucmVwbGFjZSgvXm1vYmlsZTovLCAnJykudHJpbSgpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4ZWN1dGVNb2JpbGUoc2NyaXB0LCBfLmlzQXJyYXkoYXJncykgPyBhcmdzWzBdIDogYXJncyk7XG4gIH0gZWxzZSBpZiAodGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIGFyZ3MgPSB0aGlzLmNvbnZlcnRFbGVtZW50c0ZvckF0b21zKGFyZ3MpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ2V4ZWN1dGVfc2NyaXB0JywgW3NjcmlwdCwgYXJnc10pO1xuICAgIHJldHVybiB0aGlzLmNhY2hlV2ViRWxlbWVudHMocmVzdWx0KTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxufTtcblxuZXh0ZW5zaW9ucy5leGVjdXRlQXN5bmMgPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlQXN5bmMgKHNjcmlwdCwgYXJncykge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGFyZ3MgPSB0aGlzLmNvbnZlcnRFbGVtZW50c0ZvckF0b21zKGFyZ3MpO1xuICB0aGlzLmFzeW5jV2FpdE1zID0gdGhpcy5hc3luY1dhaXRNcyB8fCAwO1xuICBjb25zdCBwcm9taXNlID0gdGhpcy5yZW1vdGUuZXhlY3V0ZUF0b21Bc3luYygnZXhlY3V0ZV9hc3luY19zY3JpcHQnLCBbc2NyaXB0LCBhcmdzLCB0aGlzLmFzeW5jV2FpdE1zXSwgdGhpcy5jdXJXZWJGcmFtZXMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy53YWl0Rm9yQXRvbShwcm9taXNlKTtcbn07XG5cbmV4dGVuc2lvbnMuZXhlY3V0ZU1vYmlsZSA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVNb2JpbGUgKG1vYmlsZUNvbW1hbmQsIG9wdHMgPSB7fSkge1xuICBjb25zdCBjb21tYW5kTWFwID0ge1xuICAgIC8vcmVnaW9uIGdlc3R1cmVzIHN1cHBvcnRcbiAgICB0YXA6ICdtb2JpbGVUYXAnLFxuICAgIHNjcm9sbDogJ21vYmlsZVNjcm9sbCcsXG4gICAgc2VsZWN0UGlja2VyV2hlZWxWYWx1ZTogJ21vYmlsZVNlbGVjdFBpY2tlcldoZWVsVmFsdWUnLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjY4LXN3aXBlbGVmdD9sYW5ndWFnZT1vYmpjXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NzQtc3dpcGVyaWdodD9sYW5ndWFnZT1vYmpjXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2Njctc3dpcGV1cD9sYW5ndWFnZT1vYmpjXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NjQtc3dpcGVkb3duP2xhbmd1YWdlPW9iamNcbiAgICBzd2lwZTogJ21vYmlsZVN3aXBlJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY2OS1waW5jaHdpdGhzY2FsZT9sYW5ndWFnZT1vYmpjXG4gICAgcGluY2g6ICdtb2JpbGVQaW5jaCcsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NzMtZG91YmxldGFwP2xhbmd1YWdlPW9iamNcbiAgICBkb3VibGVUYXA6ICdtb2JpbGVEb3VibGVUYXAnLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4Njc1LXR3b2ZpbmdlcnRhcD9sYW5ndWFnZT1vYmpjXG4gICAgdHdvRmluZ2VyVGFwOiAnbW9iaWxlVHdvRmluZ2VyVGFwJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY3MS10YXB3aXRobnVtYmVyb2Z0YXBzP2xhbmd1YWdlPW9iamNcbiAgICB0YXBXaXRoTnVtYmVyT2ZUYXBzOiAnbW9iaWxlVGFwV2l0aE51bWJlck9mVGFwcycsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NjMtcHJlc3Nmb3JkdXJhdGlvbj9sYW5ndWFnZT1vYmpjXG4gICAgdG91Y2hBbmRIb2xkOiAnbW9iaWxlVG91Y2hBbmRIb2xkJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY3MC1wcmVzc2ZvcmR1cmF0aW9uP2xhbmd1YWdlPW9iamNcbiAgICBkcmFnRnJvbVRvRm9yRHVyYXRpb246ICdtb2JpbGVEcmFnRnJvbVRvRm9yRHVyYXRpb24nLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjY1LXJvdGF0ZT9sYW5ndWFnZT1vYmpjXG4gICAgcm90YXRlRWxlbWVudDogJ21vYmlsZVJvdGF0ZUVsZW1lbnQnLFxuXG4gICAgLy9lbmRyZWdpb24gZ2VzdHVyZXMgc3VwcG9ydFxuICAgIGFsZXJ0OiAnbW9iaWxlSGFuZGxlQWxlcnQnLFxuXG4gICAgc2V0UGFzdGVib2FyZDogJ21vYmlsZVNldFBhc3RlYm9hcmQnLFxuICAgIGdldFBhc3RlYm9hcmQ6ICdtb2JpbGVHZXRQYXN0ZWJvYXJkJyxcblxuICAgIHNvdXJjZTogJ21vYmlsZUdldFNvdXJjZScsXG4gICAgZ2V0Q29udGV4dHM6ICdtb2JpbGVHZXRDb250ZXh0cycsXG5cbiAgICAvL3JlZ2lvbiBtdWx0aXBsZSBhcHBzIG1hbmFnZW1lbnRcbiAgICBpbnN0YWxsQXBwOiAnbW9iaWxlSW5zdGFsbEFwcCcsXG4gICAgaXNBcHBJbnN0YWxsZWQ6ICdtb2JpbGVJc0FwcEluc3RhbGxlZCcsXG4gICAgcmVtb3ZlQXBwOiAnbW9iaWxlUmVtb3ZlQXBwJyxcbiAgICBsYXVuY2hBcHA6ICdtb2JpbGVMYXVuY2hBcHAnLFxuICAgIHRlcm1pbmF0ZUFwcDogJ21vYmlsZVRlcm1pbmF0ZUFwcCcsXG4gICAgcXVlcnlBcHBTdGF0ZTogJ21vYmlsZVF1ZXJ5QXBwU3RhdGUnLFxuICAgIGFjdGl2YXRlQXBwOiAnbW9iaWxlQWN0aXZhdGVBcHAnLFxuICAgIGxpc3RBcHBzOiAnbW9iaWxlTGlzdEFwcHMnLFxuICAgIC8vZW5kcmVnaW9uIG11bHRpcGxlIGFwcHMgbWFuYWdlbWVudFxuXG4gICAgdmlld3BvcnRTY3JlZW5zaG90OiAnZ2V0Vmlld3BvcnRTY3JlZW5zaG90JyxcbiAgICB2aWV3cG9ydFJlY3Q6ICdnZXRWaWV3cG9ydFJlY3QnLFxuXG4gICAgc3RhcnRQZXJmUmVjb3JkOiAnbW9iaWxlU3RhcnRQZXJmUmVjb3JkJyxcbiAgICBzdG9wUGVyZlJlY29yZDogJ21vYmlsZVN0b3BQZXJmUmVjb3JkJyxcblxuICAgIGluc3RhbGxDZXJ0aWZpY2F0ZTogJ21vYmlsZUluc3RhbGxDZXJ0aWZpY2F0ZScsXG5cbiAgICBzdGFydExvZ3NCcm9hZGNhc3Q6ICdtb2JpbGVTdGFydExvZ3NCcm9hZGNhc3QnLFxuICAgIHN0b3BMb2dzQnJvYWRjYXN0OiAnbW9iaWxlU3RvcExvZ3NCcm9hZGNhc3QnLFxuXG4gICAgYmF0dGVyeUluZm86ICdtb2JpbGVHZXRCYXR0ZXJ5SW5mbycsXG4gICAgZGV2aWNlSW5mbzogJ21vYmlsZUdldERldmljZUluZm8nLFxuICAgIGdldERldmljZVRpbWU6ICdtb2JpbGVHZXREZXZpY2VUaW1lJyxcbiAgICBhY3RpdmVBcHBJbmZvOiAnbW9iaWxlR2V0QWN0aXZlQXBwSW5mbycsXG4gICAgZGV2aWNlU2NyZWVuSW5mbzogJ2dldFNjcmVlbkluZm8nLFxuXG4gICAgcHJlc3NCdXR0b246ICdtb2JpbGVQcmVzc0J1dHRvbicsXG5cbiAgICBlbnJvbGxCaW9tZXRyaWM6ICdtb2JpbGVFbnJvbGxCaW9tZXRyaWMnLFxuICAgIHNlbmRCaW9tZXRyaWNNYXRjaDogJ21vYmlsZVNlbmRCaW9tZXRyaWNNYXRjaCcsXG4gICAgaXNCaW9tZXRyaWNFbnJvbGxlZDogJ21vYmlsZUlzQmlvbWV0cmljRW5yb2xsZWQnLFxuXG4gICAgY2xlYXJLZXljaGFpbnM6ICdtb2JpbGVDbGVhcktleWNoYWlucycsXG5cbiAgICBnZXRQZXJtaXNzaW9uOiAnbW9iaWxlR2V0UGVybWlzc2lvbicsXG4gICAgc2V0UGVybWlzc2lvbjogJ21vYmlsZVNldFBlcm1pc3Npb25zJyxcbiAgICByZXNldFBlcm1pc3Npb246ICdtb2JpbGVSZXNldFBlcm1pc3Npb24nLFxuXG4gICAgZ2V0QXBwZWFyYW5jZTogJ21vYmlsZUdldEFwcGVhcmFuY2UnLFxuICAgIHNldEFwcGVhcmFuY2U6ICdtb2JpbGVTZXRBcHBlYXJhbmNlJyxcblxuICAgIHNpcmlDb21tYW5kOiAnbW9iaWxlU2lyaUNvbW1hbmQnLFxuXG4gICAgZGVsZXRlRmlsZTogJ21vYmlsZURlbGV0ZUZpbGUnLFxuICAgIGRlbGV0ZUZvbGRlcjogJ21vYmlsZURlbGV0ZUZvbGRlcicsXG5cbiAgICBzdGFydEF1ZGlvUmVjb3JkaW5nOiAnc3RhcnRBdWRpb1JlY29yZGluZycsXG4gICAgc3RvcEF1ZGlvUmVjb3JkaW5nOiAnc3RvcEF1ZGlvUmVjb3JkaW5nJyxcblxuICAgIC8vIFhDVGVzdFxuICAgIHJ1blhDVGVzdDogJ21vYmlsZVJ1blhDVGVzdCcsXG4gICAgaW5zdGFsbFhDVGVzdEJ1bmRsZTogJ21vYmlsZUluc3RhbGxYQ1Rlc3RCdW5kbGUnLFxuICAgIGxpc3RYQ1Rlc3RCdW5kbGVzOiAnbW9iaWxlTGlzdFhDVGVzdEJ1bmRsZXMnLFxuICAgIGxpc3RYQ1Rlc3RzSW5UZXN0QnVuZGxlOiAnbW9iaWxlTGlzdFhDVGVzdHNJblRlc3RCdW5kbGUnLFxuXG4gICAgcHVzaE5vdGlmaWNhdGlvbjogJ21vYmlsZVB1c2hOb3RpZmljYXRpb24nLFxuICAgIGV4cGVjdE5vdGlmaWNhdGlvbjogJ21vYmlsZUV4cGVjdE5vdGlmaWNhdGlvbicsXG5cbiAgICBwZXJmb3JtSW9IaWRFdmVudDogJ21vYmlsZVBlcmZvcm1Jb0hpZEV2ZW50JyxcblxuICAgIGNvbmZpZ3VyZUxvY2FsaXphdGlvbjogJ21vYmlsZUNvbmZpZ3VyZUxvY2FsaXphdGlvbicsXG5cbiAgICByZXNldExvY2F0aW9uU2VydmljZTogJ21vYmlsZVJlc2V0TG9jYXRpb25TZXJ2aWNlJyxcbiAgfTtcblxuICBpZiAoIV8uaGFzKGNvbW1hbmRNYXAsIG1vYmlsZUNvbW1hbmQpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Vbmtub3duQ29tbWFuZEVycm9yKGBVbmtub3duIG1vYmlsZSBjb21tYW5kICcke21vYmlsZUNvbW1hbmR9Jy4gT25seSAke18ua2V5cyhjb21tYW5kTWFwKS5qb2luKCcsICcpfSBjb21tYW5kcyBhcmUgc3VwcG9ydGVkLmApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzW2NvbW1hbmRNYXBbbW9iaWxlQ29tbWFuZF1dKG9wdHMpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJmaWxlIjoibGliL2NvbW1hbmRzL2V4ZWN1dGUuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
@@ -5,8 +5,8 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.parseContainerPath = parseContainerPath;
9
8
  exports.default = exports.commands = void 0;
9
+ exports.parseContainerPath = parseContainerPath;
10
10
 
11
11
  require("source-map-support/register");
12
12
 
@@ -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
 
@@ -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.extensions = exports.helpers = exports.commands = void 0;
8
+ exports.helpers = exports.extensions = exports.default = exports.commands = void 0;
9
9
 
10
10
  require("source-map-support/register");
11
11
 
@@ -5,8 +5,9 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
+ exports.extensions = exports.default = exports.commands = void 0;
8
9
  exports.gesturesChainToString = gesturesChainToString;
9
- exports.default = exports.commands = exports.helpers = exports.extensions = void 0;
10
+ exports.helpers = void 0;
10
11
 
11
12
  require("source-map-support/register");
12
13
 
@@ -449,4 +450,4 @@ var _default = extensions;
449
450
  exports.default = _default;require('source-map-support').install();
450
451
 
451
452
 
452
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9nZXN0dXJlLmpzIl0sIm5hbWVzIjpbIlNVUFBPUlRFRF9HRVNUVVJFX0RJUkVDVElPTlMiLCJoZWxwZXJzIiwiZXh0ZW5zaW9ucyIsImNvbW1hbmRzIiwidG9FbGVtZW50SWQiLCJvcHRzIiwiZWxlbWVudCIsImxvZyIsImluZm8iLCJlbCIsImVsZW1lbnRJZCIsInV0aWwiLCJ1bndyYXBFbGVtZW50IiwidG9FbGVtZW50T3JBcHBsaWNhdGlvbklkIiwiZHJpdmVyIiwiZmluZE5hdGl2ZUVsZW1lbnRPckVsZW1lbnRzIiwibW92ZVRvIiwieG9mZnNldCIsInlvZmZzZXQiLCJpc1dlYkNvbnRleHQiLCJ4IiwieSIsImdldExvY2F0aW9uIiwiY29vcmRzIiwiY3VyV2ViQ29vcmRzIiwiYXRvbXNFbGVtZW50IiwiZ2V0QXRvbXNFbGVtZW50IiwicmVsQ29vcmRzIiwiZXhlY3V0ZUF0b20iLCJfIiwiaXNOaWwiLCJjdXJDb29yZHMiLCJlcnJvcnMiLCJVbmtub3duRXhjZXB0aW9uIiwiZWxQb3MiLCJyZXF1aXJlRmxvYXRQYXJhbWV0ZXIiLCJwYXJhbU5hbWUiLCJwYXJhbVZhbHVlIiwibWV0aG9kTmFtZSIsImlzVW5kZWZpbmVkIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJyZXN1bHQiLCJwYXJzZUZsb2F0IiwiaXNOYU4iLCJyZXF1aXJlSW50UGFyYW1ldGVyIiwicGFyc2VJbnQiLCJtb2JpbGVTaGFrZSIsImlzU2ltdWxhdG9yIiwiVW5rbm93bkVycm9yIiwiZGV2aWNlIiwic2hha2UiLCJjbGljayIsIm5hdGl2ZUNsaWNrIiwic2V0dGluZ3MiLCJnZXRTZXR0aW5ncyIsIm5hdGl2ZVdlYlRhcCIsIm5hdGl2ZVdlYlRhcFN0cmljdCIsImRlYnVnIiwiZ2VzdHVyZXNDaGFpblRvU3RyaW5nIiwiZ2VzdHVyZXMiLCJrZXlzVG9JbmNsdWRlIiwibWFwIiwiaXRlbSIsIm90aGVyS2V5cyIsImRpZmZlcmVuY2UiLCJrZXlzIiwiaXNBcnJheSIsImludGVyc2VjdGlvbiIsImxlbmd0aCIsImFjdGlvbiIsImlzUGxhaW5PYmplY3QiLCJKU09OIiwic3RyaW5naWZ5Iiwiam9pbiIsInBlcmZvcm1BY3Rpb25zIiwiYWN0aW9ucyIsInByZXByb2Nlc3NlZEFjdGlvbnMiLCJPYmplY3QiLCJhc3NpZ24iLCJ0eXBlIiwicGFyYW1ldGVycyIsInBvaW50ZXJUeXBlIiwibW9kaWZpZWRBY3Rpb24iLCJjbG9uZSIsImZpbHRlciIsImlubmVyQWN0aW9uIiwiZHVyYXRpb24iLCJwcm94eUNvbW1hbmQiLCJyZWxlYXNlQWN0aW9ucyIsIndhcm4iLCJwZXJmb3JtVG91Y2giLCJlIiwiZXJyb3JBbmRUaHJvdyIsIm1lc3NhZ2UiLCJwZXJmb3JtTXVsdGlBY3Rpb24iLCJpIiwiZW5kcG9pbnQiLCJtb2JpbGVTY3JvbGwiLCJuYW1lIiwiZGlyZWN0aW9uIiwicHJlZGljYXRlU3RyaW5nIiwidG9WaXNpYmxlIiwiZGlzdGFuY2UiLCJwYXJhbXMiLCJpbmNsdWRlcyIsInRvTG93ZXIiLCJtb2JpbGVTd2lwZSIsInZlbG9jaXR5IiwibW9iaWxlUGluY2giLCJzY2FsZSIsIm1vYmlsZURvdWJsZVRhcCIsIm1vYmlsZVR3b0ZpbmdlclRhcCIsIm1vYmlsZVRvdWNoQW5kSG9sZCIsIm1vYmlsZVRhcCIsIm1vYmlsZURyYWdGcm9tVG9Gb3JEdXJhdGlvbiIsImZyb21YIiwiZnJvbVkiLCJ0b1giLCJ0b1kiLCJtb2JpbGVUYXBXaXRoTnVtYmVyT2ZUYXBzIiwibnVtYmVyT2ZUYXBzIiwibnVtYmVyT2ZUb3VjaGVzIiwibW9iaWxlU2VsZWN0UGlja2VyV2hlZWxWYWx1ZSIsImlzU3RyaW5nIiwib3JkZXIiLCJ0b0xvd2VyQ2FzZSIsIm9mZnNldCIsIm1vYmlsZVJvdGF0ZUVsZW1lbnQiLCJyb3RhdGlvbiIsImdldENvb3JkaW5hdGVzIiwiZ2VzdHVyZSIsImNvb3JkaW5hdGVzIiwiYXJlT2Zmc2V0cyIsIm9wdGlvblgiLCJvcHRpb25zIiwib3B0aW9uWSIsInJlY3QiLCJnZXRFbGVtZW50UmVjdCIsInBvcyIsInNpemUiLCJ3Iiwid2lkdGgiLCJoIiwiaGVpZ2h0Iiwib2Zmc2V0WCIsIm9mZnNldFkiLCJhcHBseU1vdmVUb09mZnNldCIsImZpcnN0Q29vcmRpbmF0ZXMiLCJzZWNvbmRDb29yZGluYXRlcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsNEJBQTRCLEdBQUcsQ0FBQyxJQUFELEVBQU8sTUFBUCxFQUFlLE1BQWYsRUFBdUIsT0FBdkIsQ0FBckM7QUFFQSxNQUFNQyxPQUFPLEdBQUcsRUFBaEI7QUFBQSxNQUFvQkMsVUFBVSxHQUFHLEVBQWpDO0FBQUEsTUFBcUNDLFFBQVEsR0FBRyxFQUFoRDs7Ozs7QUFFQSxTQUFTQyxXQUFULENBQXNCQyxJQUFJLEdBQUcsRUFBN0IsRUFBaUM7QUFDL0IsTUFBSUEsSUFBSSxDQUFDQyxPQUFULEVBQWtCO0FBQ2hCQyxvQkFBSUMsSUFBSixDQUFVLCtFQUFWO0FBQ0Q7O0FBQ0QsUUFBTUMsRUFBRSxHQUFHSixJQUFJLENBQUNLLFNBQUwsSUFBa0JMLElBQUksQ0FBQ0MsT0FBbEM7QUFDQSxTQUFPRyxFQUFFLEdBQUdFLG9CQUFLQyxhQUFMLENBQW1CSCxFQUFuQixDQUFILEdBQTRCLElBQXJDO0FBQ0Q7O0FBRUQsZUFBZUksd0JBQWYsQ0FBeUNDLE1BQXpDLEVBQWlEVCxJQUFJLEdBQUcsRUFBeEQsRUFBNEQ7QUFDMUQsU0FBT0QsV0FBVyxDQUFDQyxJQUFELENBQVgsSUFDRk0sb0JBQUtDLGFBQUwsQ0FBbUIsTUFBTUUsTUFBTSxDQUFDQywyQkFBUCxDQUFvQyxZQUFwQyxFQUFrRCw0QkFBbEQsRUFBK0UsS0FBL0UsQ0FBekIsQ0FETDtBQUVEOztBQUVEWixRQUFRLENBQUNhLE1BQVQsR0FBa0IsZUFBZUEsTUFBZixDQUF1QlAsRUFBdkIsRUFBMkJRLE9BQU8sR0FBRyxDQUFyQyxFQUF3Q0MsT0FBTyxHQUFHLENBQWxELEVBQXFEO0FBQ3JFVCxFQUFBQSxFQUFF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Q0MsTUFBUCxDQUFjNUUsVUFBZCxFQUEwQkQsT0FBMUIsRUFBbUNFLFFBQW5DO2VBRWVELFUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5cbmNvbnN0IFNVUFBPUlRFRF9HRVNUVVJFX0RJUkVDVElPTlMgPSBbJ3VwJywgJ2Rvd24nLCAnbGVmdCcsICdyaWdodCddO1xuXG5jb25zdCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fSwgY29tbWFuZHMgPSB7fTtcblxuZnVuY3Rpb24gdG9FbGVtZW50SWQgKG9wdHMgPSB7fSkge1xuICBpZiAob3B0cy5lbGVtZW50KSB7XG4gICAgbG9nLmluZm8oYFRoZSAnZWxlbWVudCcgYXJndW1lbnQgbmFtZSBpcyBkZXByZWNhdGVkLiBDb25zaWRlciB1c2luZyAnZWxlbWVudElkJyBpbnN0ZWFkYCk7XG4gIH1cbiAgY29uc3QgZWwgPSBvcHRzLmVsZW1lbnRJZCB8fCBvcHRzLmVsZW1lbnQ7XG4gIHJldHVybiBlbCA/IHV0aWwudW53cmFwRWxlbWVudChlbCkgOiBudWxsO1xufVxuXG5hc3luYyBmdW5jdGlvbiB0b0VsZW1lbnRPckFwcGxpY2F0aW9uSWQgKGRyaXZlciwgb3B0cyA9IHt9KSB7XG4gIHJldHVybiB0b0VsZW1lbnRJZChvcHRzKVxuICAgIHx8IHV0aWwudW53cmFwRWxlbWVudChhd2FpdCBkcml2ZXIuZmluZE5hdGl2ZUVsZW1lbnRPckVsZW1lbnRzKGBjbGFzcyBuYW1lYCwgYFhDVUlFbGVtZW50VHlwZUFwcGxpY2F0aW9uYCwgZmFsc2UpKTtcbn1cblxuY29tbWFuZHMubW92ZVRvID0gYXN5bmMgZnVuY3Rpb24gbW92ZVRvIChlbCwgeG9mZnNldCA9IDAsIHlvZmZzZXQgPSAwKSB7XG4gIGVsID0gdXRpbC51bndyYXBFbGVtZW50KGVsKTtcblxuICBpZiAodGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIGxldCB7eCwgeX0gPSBhd2FpdCB0aGlzLmdldExvY2F0aW9uKGVsKTtcbiAgICBsZXQgY29vcmRzID0ge1xuICAgICAgeDogeCArIHhvZmZzZXQsXG4gICAgICB5OiB5ICsgeW9mZnNldFxuICAgIH07XG4gICAgdGhpcy5jdXJXZWJDb29yZHMgPSBjb29yZHM7XG4gICAgbGV0IGF0b21zRWxlbWVudCA9IHRoaXMuZ2V0QXRvbXNFbGVtZW50KGVsKTtcbiAgICBsZXQgcmVsQ29vcmRzID0ge3g6IHhvZmZzZXQsIHk6IHlvZmZzZXR9O1xuICAgIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ21vdmVfbW91c2UnLCBbYXRvbXNFbGVtZW50LCByZWxDb29yZHNdKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoXy5pc05pbChlbCkpIHtcbiAgICAgIGlmICghdGhpcy5jdXJDb29yZHMpIHtcbiAgICAgICAgdGhyb3cgbmV3IGVycm9ycy5Vbmtub3duRXhjZXB0aW9uKFxuICAgICAgICAgICdDdXJyZW50IGN1cnNvciBwb3NpdGlvbiB1bmtub3duLCBwbGVhc2UgdXNlIG1vdmVUbyB3aXRoIGFuIGVsZW1lbnQgdGhlIGZpcnN0IHRpbWUuJyk7XG4gICAgICB9XG4gICAgICB0aGlzLmN1ckNvb3JkcyA9IHtcbiAgICAgICAgeDogdGhpcy5jdXJDb29yZHMueCArIHhvZmZzZXQsXG4gICAgICAgIHk6IHRoaXMuY3VyQ29vcmRzLnkgKyB5b2Zmc2V0XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgZWxQb3MgPSBhd2FpdCB0aGlzLmdldExvY2F0aW9uKGVsKTtcbiAgICAgIHRoaXMuY3VyQ29vcmRzID0ge1xuICAgICAgICB4OiBlbFBvcy54ICsgeG9mZnNldCxcbiAgICAgICAgeTogZWxQb3MueSArIHlvZmZzZXRcbiAgICAgIH07XG4gICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIgKHBhcmFtTmFtZSwgcGFyYW1WYWx1ZSwgbWV0aG9kTmFtZSkge1xuICBpZiAoXy5pc1VuZGVmaW5lZChwYXJhbVZhbHVlKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYFwiJHtwYXJhbU5hbWV9XCIgcGFyYW1ldGVyIGlzIG1hbmRhdG9yeSBmb3IgXCIke21ldGhvZE5hbWV9XCIgY2FsbGApO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHBhcnNlRmxvYXQocGFyYW1WYWx1ZSk7XG4gIGlmIChpc05hTihyZXN1bHQpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgXCIke3BhcmFtTmFtZX1cIiBwYXJhbWV0ZXIgc2hvdWxkIGJlIGEgdmFsaWQgbnVtYmVyLiBcIiR7cGFyYW1WYWx1ZX1cIiBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gcmVxdWlyZUludFBhcmFtZXRlciAocGFyYW1OYW1lLCBwYXJhbVZhbHVlLCBtZXRob2ROYW1lKSB7XG4gIGlmIChfLmlzVW5kZWZpbmVkKHBhcmFtVmFsdWUpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgXCIke3BhcmFtTmFtZX1cIiBwYXJhbWV0ZXIgaXMgbWFuZGF0b3J5IGZvciBcIiR7bWV0aG9kTmFtZX1cIiBjYWxsYCk7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0gcGFyc2VJbnQocGFyYW1WYWx1ZSwgMTApO1xuICBpZiAoaXNOYU4ocmVzdWx0KSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYFwiJHtwYXJhbU5hbWV9XCIgcGFyYW1ldGVyIHNob3VsZCBiZSBhIHZhbGlkIGludGVnZXIuIFwiJHtwYXJhbVZhbHVlfVwiIGlzIGdpdmVuIGluc3RlYWRgKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5jb21tYW5kcy5tb2JpbGVTaGFrZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVNoYWtlICgpIHtcbiAgaWYgKCF0aGlzLmlzU2ltdWxhdG9yKCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLlVua25vd25FcnJvcignU2hha2UgaXMgbm90IHN1cHBvcnRlZCBvbiByZWFsIGRldmljZXMnKTtcbiAgfVxuICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLnNoYWtlKCk7XG59O1xuXG5jb21tYW5kcy5jbGljayA9IGFzeW5jIGZ1bmN0aW9uIGNsaWNrIChlbCkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICAvLyB0aGVyZSBhcmUgbXVsdGlwbGUgY29tbWFuZHMgdGhhdCBtYXAgaGVyZSwgc28gbWFudWFsbHkgcHJveHlcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5uYXRpdmVDbGljayhlbCk7XG4gIH1cbiAgZWwgPSB1dGlsLnVud3JhcEVsZW1lbnQoZWwpO1xuICBpZiAoKGF3YWl0IHRoaXMuc2V0dGluZ3MuZ2V0U2V0dGluZ3MoKSkubmF0aXZlV2ViVGFwIHx8IChhd2FpdCB0aGlzLnNldHRpbmdzLmdldFNldHRpbmdzKCkpLm5hdGl2ZVdlYlRhcFN0cmljdCkge1xuICAgIC8vIGF0b21zLWJhc2VkIGNsaWNrcyBkb24ndCBhbHdheXMgd29yayBpbiBzYWZhcmkgN1xuICAgIGxvZy5kZWJ1ZygnVXNpbmcgbmF0aXZlIHdlYiB0YXAnKTtcbiAgICBhd2FpdCB0aGlzLm5hdGl2ZVdlYlRhcChlbCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYXRvbXNFbGVtZW50ID0gdGhpcy5nZXRBdG9tc0VsZW1lbnQoZWwpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdjbGljaycsIFthdG9tc0VsZW1lbnRdKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gZ2VzdHVyZXNDaGFpblRvU3RyaW5nIChnZXN0dXJlcywga2V5c1RvSW5jbHVkZSA9IFsnb3B0aW9ucyddKSB7XG4gIHJldHVybiBnZXN0dXJlcy5tYXAoKGl0ZW0pID0+IHtcbiAgICBsZXQgb3RoZXJLZXlzID0gXy5kaWZmZXJlbmNlKF8ua2V5cyhpdGVtKSwgWydhY3Rpb24nXSk7XG4gICAgb3RoZXJLZXlzID0gXy5pc0FycmF5KGtleXNUb0luY2x1ZGUpID8gXy5pbnRlcnNlY3Rpb24ob3RoZXJLZXlzLCBrZXlzVG9JbmNsdWRlKSA6IG90aGVyS2V5cztcbiAgICBpZiAob3RoZXJLZXlzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGAke2l0ZW0uYWN0aW9ufWAgK1xuICAgICAgICBgKCR7Xy5tYXAob3RoZXJLZXlzLCAoeCkgPT4geCArICc9JyArIChfLmlzUGxhaW5PYmplY3QoaXRlbVt4XSkgPyBKU09OLnN0cmluZ2lmeShpdGVtW3hdKSA6IGl0ZW1beF0pKS5qb2luKCcsICcpfSlgO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbS5hY3Rpb247XG4gIH0pLmpvaW4oJy0nKTtcbn1cblxuY29tbWFuZHMucGVyZm9ybUFjdGlvbnMgPSBhc3luYyBmdW5jdGlvbiBwZXJmb3JtQWN0aW9ucyAoYWN0aW9ucykge1xuICBsb2cuZGVidWcoYFJlY2VpdmVkIHRoZSBmb2xsb3dpbmcgVzNDIGFjdGlvbnM6ICR7SlNPTi5zdHJpbmdpZnkoYWN0aW9ucywgbnVsbCwgJyAgJyl9YCk7XG4gIC8vIFRoaXMgaXMgbWFuZGF0b3J5LCBzaW5jZSBXREEgb25seSBzdXBwb3J0cyBUT1VDSCBwb2ludGVyIHR5cGVcbiAgLy8gYW5kIFNlbGVuaXVtIEFQSSB1c2VzIE1PVVNFIGFzIHRoZSBkZWZhdWx0IG9uZVxuICBjb25zdCBwcmVwcm9jZXNzZWRBY3Rpb25zID0gYWN0aW9uc1xuICAgIC5tYXAoKGFjdGlvbikgPT4gT2JqZWN0LmFzc2lnbih7fSwgYWN0aW9uLCBhY3Rpb24udHlwZSA9PT0gJ3BvaW50ZXInID8ge1xuICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICBwb2ludGVyVHlwZTogJ3RvdWNoJ1xuICAgICAgfVxuICAgIH0gOiB7fSkpXG4gICAgLm1hcCgoYWN0aW9uKSA9PiB7XG4gICAgICBjb25zdCBtb2RpZmllZEFjdGlvbiA9IF8uY2xvbmUoYWN0aW9uKSB8fCB7fTtcbiAgICAgIC8vIFNlbGVuaXVtIEFQSSB1bmV4cGVjdGVkbHkgaW5zZXJ0cyB6ZXJvIHBhdXNlcywgd2hpY2ggYXJlIG5vdCBzdXBwb3J0ZWQgYnkgV0RBXG4gICAgICBtb2RpZmllZEFjdGlvbi5hY3Rpb25zID0gKGFjdGlvbi5hY3Rpb25zIHx8IFtdKVxuICAgICAgICAuZmlsdGVyKChpbm5lckFjdGlvbikgPT4gIShpbm5lckFjdGlvbi50eXBlID09PSAncGF1c2UnICYmIGlubmVyQWN0aW9uLmR1cmF0aW9uID09PSAwKSk7XG4gICAgICByZXR1cm4gbW9kaWZpZWRBY3Rpb247XG4gICAgfSk7XG4gIGxvZy5kZWJ1ZyhgUHJlcHJvY2Vzc2VkIGFjdGlvbnM6ICR7SlNPTi5zdHJpbmdpZnkocHJlcHJvY2Vzc2VkQWN0aW9ucywgbnVsbCwgJyAgJyl9YCk7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL2FjdGlvbnMnLCAnUE9TVCcsIHthY3Rpb25zOiBwcmVwcm9jZXNzZWRBY3Rpb25zfSk7XG59O1xuXG5jb21tYW5kcy5yZWxlYXNlQWN0aW9ucyA9IGZ1bmN0aW9uIHJlbGVhc2VBY3Rpb25zICgpIHtcbiAgbG9nLndhcm4oJ09uIHRoaXMgcGxhdGZvcm0sIHJlbGVhc2VBY3Rpb25zIGlzIGEgbm8tb3AnKTtcbn07XG5cbmNvbW1hbmRzLnBlcmZvcm1Ub3VjaCA9IGFzeW5jIGZ1bmN0aW9uIHBlcmZvcm1Ub3VjaCAoZ2VzdHVyZXMpIHtcbiAgbG9nLmRlYnVnKGBSZWNlaXZlZCB0aGUgZm9sbG93aW5nIHRvdWNoIGFjdGlvbjogJHtnZXN0dXJlc0NoYWluVG9TdHJpbmcoZ2VzdHVyZXMpfWApO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS90b3VjaC9wZXJmb3JtJywgJ1BPU1QnLCB7YWN0aW9uczogZ2VzdHVyZXN9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgbG9nLmVycm9yQW5kVGhyb3coJ1RoZSBUb3VjaCBBUEkgaXMgYWltZWQgZm9yIHVzYWdlIGluIE5BVElWRSBjb250ZXh0LiAnICtcbiAgICAgICdDb25zaWRlciB1c2luZyBcImV4ZWN1dGVcIiBBUEkgd2l0aCBjdXN0b20gZXZlbnRzIHRyaWdnZXIgc2NyaXB0ICcgK1xuICAgICAgYHRvIGVtdWxhdGUgdG91Y2ggZXZlbnRzIGJlaW5nIGluIFdFQlZJRVcgY29udGV4dC4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICB9XG59O1xuXG5jb21tYW5kcy5wZXJmb3JtTXVsdGlBY3Rpb24gPSBhc3luYyBmdW5jdGlvbiBwZXJmb3JtTXVsdGlBY3Rpb24gKGFjdGlvbnMpIHtcbiAgbG9nLmRlYnVnKGBSZWNlaXZlZCB0aGUgZm9sbG93aW5nIG11bHRpIHRvdWNoIGFjdGlvbjpgKTtcbiAgZm9yIChsZXQgaSBpbiBhY3Rpb25zKSB7XG4gICAgbG9nLmRlYnVnKGAgICAgJHtwYXJzZUludChpLCAxMCkgKyAxfTogJHtfLm1hcChhY3Rpb25zW2ldLCAnYWN0aW9uJykuam9pbignLScpfWApO1xuICB9XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL3RvdWNoL211bHRpL3BlcmZvcm0nLCAnUE9TVCcsIHthY3Rpb25zfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIGxvZy5lcnJvckFuZFRocm93KCdUaGUgTXVsdGlUb3VjaCBBUEkgaXMgYWltZWQgZm9yIHVzYWdlIGluIE5BVElWRSBjb250ZXh0LiAnICtcbiAgICAgICdDb25zaWRlciB1c2luZyBcImV4ZWN1dGVcIiBBUEkgd2l0aCBjdXN0b20gZXZlbnRzIHRyaWdnZXIgc2NyaXB0ICcgK1xuICAgICAgYHRvIGVtdWxhdGUgbXVsdGl0b3VjaCBldmVudHMgYmVpbmcgaW4gV0VCVklFVyBjb250ZXh0LiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbmNvbW1hbmRzLm5hdGl2ZUNsaWNrID0gYXN5bmMgZnVuY3Rpb24gbmF0aXZlQ2xpY2sgKGVsKSB7XG4gIGVsID0gdXRpbC51bndyYXBFbGVtZW50KGVsKTtcbiAgbGV0IGVuZHBvaW50ID0gYC9lbGVtZW50LyR7ZWx9L2NsaWNrYDtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGVuZHBvaW50LCAnUE9TVCcsIHt9KTtcbn07XG5cbi8qXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL1dlYkRyaXZlckFnZW50L2Jsb2IvbWFzdGVyL1dlYkRyaXZlckFnZW50TGliL0NvbW1hbmRzL0ZCRWxlbWVudENvbW1hbmRzLm1cbiAqIHRvIGdldCB0aGUgaW5mbyBhYm91dCBhdmFpbGFibGUgV0RBIGdlc3R1cmVzIEFQSVxuICpcbiAqIFNlZSBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vcmVmZXJlbmNlL3hjdGVzdC94Y3VpZWxlbWVudCBhbmRcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9yZWZlcmVuY2UveGN0ZXN0L3hjdWljb29yZGluYXRlIHRvIGdldCB0aGUgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2ZcbiAqIGFsbCBYQ1Rlc3QgZ2VzdHVyZXNcbiovXG5cbmhlbHBlcnMubW9iaWxlU2Nyb2xsID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU2Nyb2xsIChvcHRzID0ge30pIHtcbiAgLy8gV0RBIHN1cHBvcnRzIGZvdXIgc2Nyb2xsaW5nIHN0cmF0ZWdpZXM6IHByZWRpY2F0aW9uIGJhc2VkIG9uIG5hbWUsIGRpcmVjdGlvbixcbiAgLy8gcHJlZGljYXRlU3RyaW5nLCBhbmQgdG9WaXNpYmxlLCBpbiB0aGF0IG9yZGVyXG4gIGNvbnN0IHtcbiAgICBuYW1lLFxuICAgIGRpcmVjdGlvbixcbiAgICBwcmVkaWNhdGVTdHJpbmcsXG4gICAgdG9WaXNpYmxlLFxuICAgIGRpc3RhbmNlLFxuICB9ID0gb3B0cztcbiAgY29uc3QgcGFyYW1zID0ge307XG4gIGlmIChuYW1lKSB7XG4gICAgcGFyYW1zLm5hbWUgPSBuYW1lO1xuICB9IGVsc2UgaWYgKGRpcmVjdGlvbikge1xuICAgIGlmICghU1VQUE9SVEVEX0dFU1RVUkVfRElSRUNUSU9OUy5pbmNsdWRlcyhfLnRvTG93ZXIoZGlyZWN0aW9uKSkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYCdkaXJlY3Rpb24nIG11c3QgYmUgb25lIG9mOiAke1NVUFBPUlRFRF9HRVNUVVJFX0RJUkVDVElPTlN9YCk7XG4gICAgfVxuICAgIHBhcmFtcy5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XG4gIH0gZWxzZSBpZiAocHJlZGljYXRlU3RyaW5nKSB7XG4gICAgcGFyYW1zLnByZWRpY2F0ZVN0cmluZyA9IHByZWRpY2F0ZVN0cmluZztcbiAgfSBlbHNlIGlmICh0b1Zpc2libGUpIHtcbiAgICBwYXJhbXMudG9WaXNpYmxlID0gdG9WaXNpYmxlO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAnTW9iaWxlIHNjcm9sbCBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHN0cmF0ZWdpZXM6IG5hbWUsIGRpcmVjdGlvbiwgcHJlZGljYXRlU3RyaW5nLCBhbmQgdG9WaXNpYmxlLiAnICtcbiAgICAgICdTcGVjaWZ5IG9uZSBvZiB0aGVzZScpO1xuICB9XG4gIC8vIHdlIGNhbiBhbHNvIG9wdGlvbmFsbHkgcGFzcyBhIGRpc3RhbmNlIHdoaWNoIGFwcGVhcnMgdG8gYmUgYSByYXRpbyBvZlxuICAvLyBzY3JlZW4gaGVpZ2h0LCBzbyAxLjAgbWVhbnMgYSBmdWxsIHNjcmVlbidzIHdvcnRoIG9mIHNjcm9sbGluZ1xuICBpZiAoIV8uaXNOaWwoZGlzdGFuY2UpKSB7XG4gICAgcGFyYW1zLmRpc3RhbmNlID0gZGlzdGFuY2U7XG4gIH1cbiAgY29uc3QgZWxlbWVudElkID0gYXdhaXQgdG9FbGVtZW50T3JBcHBsaWNhdGlvbklkKHRoaXMsIG9wdHMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC93ZGEvZWxlbWVudC8ke2VsZW1lbnRJZH0vc2Nyb2xsYCwgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuaGVscGVycy5tb2JpbGVTd2lwZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVN3aXBlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGRpcmVjdGlvbixcbiAgICB2ZWxvY2l0eSxcbiAgfSA9IG9wdHM7XG4gIGlmICghU1VQUE9SVEVEX0dFU1RVUkVfRElSRUNUSU9OUy5pbmNsdWRlcyhfLnRvTG93ZXIoZGlyZWN0aW9uKSkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGAnZGlyZWN0aW9uJyBtdXN0IGJlIG9uZSBvZjogJHtTVVBQT1JURURfR0VTVFVSRV9ESVJFQ1RJT05TfWApO1xuICB9XG4gIGNvbnN0IHBhcmFtcyA9IHtkaXJlY3Rpb259O1xuICBpZiAoIV8uaXNOaWwodmVsb2NpdHkpKSB7XG4gICAgcGFyYW1zLnZlbG9jaXR5ID0gdmVsb2NpdHk7XG4gIH1cbiAgY29uc3QgZWxlbWVudElkID0gYXdhaXQgdG9FbGVtZW50T3JBcHBsaWNhdGlvbklkKHRoaXMsIG9wdHMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC93ZGEvZWxlbWVudC8ke2VsZW1lbnRJZH0vc3dpcGVgLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG5oZWxwZXJzLm1vYmlsZVBpbmNoID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlUGluY2ggKG9wdHMgPSB7fSkge1xuICBjb25zdCBwYXJhbXMgPSB7XG4gICAgc2NhbGU6IHJlcXVpcmVGbG9hdFBhcmFtZXRlcignc2NhbGUnLCBvcHRzLnNjYWxlLCAncGluY2gnKSxcbiAgICB2ZWxvY2l0eTogcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCd2ZWxvY2l0eScsIG9wdHMudmVsb2NpdHksICdwaW5jaCcpXG4gIH07XG4gIGNvbnN0IGVsZW1lbnRJZCA9IGF3YWl0IHRvRWxlbWVudE9yQXBwbGljYXRpb25JZCh0aGlzLCBvcHRzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvd2RhL2VsZW1lbnQvJHtlbGVtZW50SWR9L3BpbmNoYCwgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuaGVscGVycy5tb2JpbGVEb3VibGVUYXAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVEb3VibGVUYXAgKG9wdHMgPSB7fSkge1xuICBjb25zdCBlbGVtZW50SWQgPSB0b0VsZW1lbnRJZChvcHRzKTtcbiAgaWYgKGVsZW1lbnRJZCkge1xuICAgIC8vIERvdWJsZSB0YXAgZWxlbWVudFxuICAgIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL3dkYS9lbGVtZW50LyR7ZWxlbWVudElkfS9kb3VibGVUYXBgLCAnUE9TVCcpO1xuICB9XG4gIC8vIERvdWJsZSB0YXAgY29vcmRpbmF0ZXNcbiAgY29uc3QgcGFyYW1zID0ge1xuICAgIHg6IHJlcXVpcmVGbG9hdFBhcmFtZXRlcigneCcsIG9wdHMueCwgJ2RvdWJsZVRhcCcpLFxuICAgIHk6IHJlcXVpcmVGbG9hdFBhcmFtZXRlcigneScsIG9wdHMueSwgJ2RvdWJsZVRhcCcpXG4gIH07XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9kb3VibGVUYXAnLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG5oZWxwZXJzLm1vYmlsZVR3b0ZpbmdlclRhcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVR3b0ZpbmdlclRhcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IGVsZW1lbnRJZCA9IGF3YWl0IHRvRWxlbWVudE9yQXBwbGljYXRpb25JZCh0aGlzLCBvcHRzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvd2RhL2VsZW1lbnQvJHtlbGVtZW50SWR9L3R3b0ZpbmdlclRhcGAsICdQT1NUJyk7XG59O1xuXG5oZWxwZXJzLm1vYmlsZVRvdWNoQW5kSG9sZCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVRvdWNoQW5kSG9sZCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHBhcmFtcyA9IHtcbiAgICBkdXJhdGlvbjogcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCdkdXJhdGlvbicsIG9wdHMuZHVyYXRpb24sICd0b3VjaEFuZEhvbGQnKVxuICB9O1xuICBjb25zdCBlbGVtZW50SWQgPSB0b0VsZW1lbnRJZChvcHRzKTtcbiAgaWYgKGVsZW1lbnRJZCkge1xuICAgIC8vIExvbmcgdGFwIGVsZW1lbnRcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC93ZGEvZWxlbWVudC8ke2VsZW1lbnRJZH0vdG91Y2hBbmRIb2xkYCwgJ1BPU1QnLCBwYXJhbXMpO1xuICB9XG4gIC8vIExvbmcgdGFwIGNvb3JkaW5hdGVzXG4gIHBhcmFtcy54ID0gcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCd4Jywgb3B0cy54LCAndG91Y2hBbmRIb2xkJyk7XG4gIHBhcmFtcy55ID0gcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCd5Jywgb3B0cy55LCAndG91Y2hBbmRIb2xkJyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS90b3VjaEFuZEhvbGQnLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG5oZWxwZXJzLm1vYmlsZVRhcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVRhcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHBhcmFtcyA9IHtcbiAgICB4OiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3gnLCBvcHRzLngsICd0YXAnKSxcbiAgICB5OiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3knLCBvcHRzLnksICd0YXAnKVxuICB9O1xuICBjb25zdCBlbGVtZW50SWQgPSB0b0VsZW1lbnRJZChvcHRzKSB8fCAnMCc7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL3dkYS90YXAvJHtlbGVtZW50SWR9YCwgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuaGVscGVycy5tb2JpbGVEcmFnRnJvbVRvRm9yRHVyYXRpb24gPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVEcmFnRnJvbVRvRm9yRHVyYXRpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCBwYXJhbXMgPSB7XG4gICAgZHVyYXRpb246IHJlcXVpcmVGbG9hdFBhcmFtZXRlcignZHVyYXRpb24nLCBvcHRzLmR1cmF0aW9uLCAnZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uJyksXG4gICAgZnJvbVg6IHJlcXVpcmVGbG9hdFBhcmFtZXRlcignZnJvbVgnLCBvcHRzLmZyb21YLCAnZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uJyksXG4gICAgZnJvbVk6IHJlcXVpcmVGbG9hdFBhcmFtZXRlcignZnJvbVknLCBvcHRzLmZyb21ZLCAnZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uJyksXG4gICAgdG9YOiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3RvWCcsIG9wdHMudG9YLCAnZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uJyksXG4gICAgdG9ZOiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3RvWScsIG9wdHMudG9ZLCAnZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uJylcbiAgfTtcbiAgY29uc3QgZWxlbWVudElkID0gdG9FbGVtZW50SWQob3B0cyk7XG4gIHJldHVybiBlbGVtZW50SWRcbiAgICAvLyBEcmFnIGVsZW1lbnRcbiAgICA/IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvd2RhL2VsZW1lbnQvJHtlbGVtZW50SWR9L2RyYWdmcm9tdG9mb3JkdXJhdGlvbmAsICdQT1NUJywgcGFyYW1zKVxuICAgIC8vIERyYWcgY29vcmRpbmF0ZXNcbiAgICA6IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL2RyYWdmcm9tdG9mb3JkdXJhdGlvbicsICdQT1NUJywgcGFyYW1zKTtcbn07XG5cbmhlbHBlcnMubW9iaWxlVGFwV2l0aE51bWJlck9mVGFwcyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVRhcFdpdGhOdW1iZXJPZlRhcHMgKG9wdHMgPSB7fSkge1xuICBjb25zdCBlbGVtZW50SWQgPSB0b0VsZW1lbnRJZChvcHRzKTtcbiAgaWYgKCFlbGVtZW50SWQpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKCdFbGVtZW50IGlkIGlzIGV4cGVjdGVkIHRvIGJlIHNldCBmb3IgdGFwV2l0aE51bWJlck9mVGFwcyBtZXRob2QnKTtcbiAgfVxuICBjb25zdCBwYXJhbXMgPSB7XG4gICAgbnVtYmVyT2ZUYXBzOiByZXF1aXJlSW50UGFyYW1ldGVyKCdudW1iZXJPZlRhcHMnLCBvcHRzLm51bWJlck9mVGFwcywgJ3RhcFdpdGhOdW1iZXJPZlRhcHMnKSxcbiAgICBudW1iZXJPZlRvdWNoZXM6IHJlcXVpcmVJbnRQYXJhbWV0ZXIoJ251bWJlck9mVG91Y2hlcycsIG9wdHMubnVtYmVyT2ZUb3VjaGVzLCAndGFwV2l0aE51bWJlck9mVGFwcycpLFxuICB9O1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC93ZGEvZWxlbWVudC8ke2VsZW1lbnRJZH0vdGFwV2l0aE51bWJlck9mVGFwc2AsICdQT1NUJywgcGFyYW1zKTtcbn07XG5cbmhlbHBlcnMubW9iaWxlU2VsZWN0UGlja2VyV2hlZWxWYWx1ZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVNlbGVjdFBpY2tlcldoZWVsVmFsdWUgKG9wdHMgPSB7fSkge1xuICBjb25zdCBlbGVtZW50SWQgPSB0b0VsZW1lbnRJZChvcHRzKTtcbiAgaWYgKCFlbGVtZW50SWQpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKCdFbGVtZW50IGlkIGlzIGV4cGVjdGVkIHRvIGJlIHNldCBmb3Igc2VsZWN0UGlja2VyV2hlZWxWYWx1ZSBtZXRob2QnKTtcbiAgfVxuICBpZiAoIV8uaXNTdHJpbmcob3B0cy5vcmRlcikgfHwgIVsnbmV4dCcsICdwcmV2aW91cyddLmluY2x1ZGVzKG9wdHMub3JkZXIudG9Mb3dlckNhc2UoKSkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBUaGUgbWFuZGF0b3J5ICdvcmRlcicgcGFyYW1ldGVyIGlzIGV4cGVjdGVkIHRvIGJlIGVxdWFsIGVpdGhlciB0byAnbmV4dCcgb3IgJ3ByZXZpb3VzJy4gYCArXG4gICAgICBgJyR7b3B0cy5vcmRlcn0nIGlzIGdpdmVuIGluc3RlYWRgKTtcbiAgfVxuICBjb25zdCBwYXJhbXMgPSB7b3JkZXI6IG9wdHMub3JkZXJ9O1xuICBpZiAob3B0cy5vZmZzZXQpIHtcbiAgICBwYXJhbXMub2Zmc2V0ID0gcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCdvZmZzZXQnLCBvcHRzLm9mZnNldCwgJ3NlbGVjdFBpY2tlcldoZWVsVmFsdWUnKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC93ZGEvcGlja2Vyd2hlZWwvJHtlbGVtZW50SWR9L3NlbGVjdGAsICdQT1NUJywgcGFyYW1zKTtcbn07XG5cbmhlbHBlcnMubW9iaWxlUm90YXRlRWxlbWVudCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVJvdGF0ZUVsZW1lbnQgKG9wdHMgPSB7fSkge1xuICBjb25zdCBlbGVtZW50SWQgPSB0b0VsZW1lbnRJZChvcHRzKTtcbiAgaWYgKCFlbGVtZW50SWQpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKCdFbGVtZW50IGlkIGlzIGV4cGVjdGVkIHRvIGJlIHNldCBmb3Igcm90YXRlRWxlbWVudCBtZXRob2QnKTtcbiAgfVxuICBjb25zdCBwYXJhbXMgPSB7XG4gICAgcm90YXRpb246IHJlcXVpcmVGbG9hdFBhcmFtZXRlcigncm90YXRpb24nLCBvcHRzLnJvdGF0aW9uLCAncm90YXRlRWxlbWVudCcpLFxuICAgIHZlbG9jaXR5OiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3ZlbG9jaXR5Jywgb3B0cy52ZWxvY2l0eSwgJ3JvdGF0ZUVsZW1lbnQnKSxcbiAgfTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvd2RhL2VsZW1lbnQvJHtlbGVtZW50SWR9L3JvdGF0ZWAsICdQT1NUJywgcGFyYW1zKTtcbn07XG5cbmhlbHBlcnMuZ2V0Q29vcmRpbmF0ZXMgPSBhc3luYyBmdW5jdGlvbiBnZXRDb29yZGluYXRlcyAoZ2VzdHVyZSkge1xuICAvLyBkZWZhdWx0c1xuICBsZXQgY29vcmRpbmF0ZXMgPSB7eDogMCwgeTogMCwgYXJlT2Zmc2V0czogZmFsc2V9O1xuXG4gIGxldCBvcHRpb25YID0gbnVsbDtcbiAgaWYgKGdlc3R1cmUub3B0aW9ucy54KSB7XG4gICAgb3B0aW9uWCA9IHJlcXVpcmVGbG9hdFBhcmFtZXRlcigneCcsIGdlc3R1cmUub3B0aW9ucy54LCAnZ2V0Q29vcmRpbmF0ZXMnKTtcbiAgfVxuICBsZXQgb3B0aW9uWSA9IG51bGw7XG4gIGlmIChnZXN0dXJlLm9wdGlvbnMueSkge1xuICAgIG9wdGlvblkgPSByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3knLCBnZXN0dXJlLm9wdGlvbnMueSwgJ2dldENvb3JkaW5hdGVzJyk7XG4gIH1cblxuICAvLyBmaWd1cmUgb3V0IHRoZSBlbGVtZW50IGNvb3JkaW5hdGVzLlxuICBjb25zdCBlbGVtZW50SWQgPSB0b0VsZW1lbnRJZChnZXN0dXJlLm9wdGlvbnMpO1xuICBpZiAoZWxlbWVudElkKSB7XG4gICAgbGV0IHJlY3QgPSBhd2FpdCB0aGlzLmdldEVsZW1lbnRSZWN0KGVsZW1lbnRJZCk7XG4gICAgbGV0IHBvcyA9IHt4OiByZWN0LngsIHk6IHJlY3QueX07XG4gICAgbGV0IHNpemUgPSB7dzogcmVjdC53aWR0aCwgaDogcmVjdC5oZWlnaHR9O1xuXG4gICAgLy8gZGVmYXVsdHNcbiAgICBsZXQgb2Zmc2V0WCA9IDA7XG4gICAgbGV0IG9mZnNldFkgPSAwO1xuXG4gICAgLy8gZ2V0IHRoZSByZWFsIG9mZnNldHNcbiAgICBpZiAob3B0aW9uWCB8fCBvcHRpb25ZKSB7XG4gICAgICBvZmZzZXRYID0gKG9wdGlvblggfHwgMCk7XG4gICAgICBvZmZzZXRZID0gKG9wdGlvblkgfHwgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9mZnNldFggPSAoc2l6ZS53IC8gMik7XG4gICAgICBvZmZzZXRZID0gKHNpemUuaCAvIDIpO1xuICAgIH1cblxuICAgIC8vIGFwcGx5IHRoZSBvZmZzZXRzXG4gICAgY29vcmRpbmF0ZXMueCA9IHBvcy54ICsgb2Zmc2V0WDtcbiAgICBjb29yZGluYXRlcy55ID0gcG9zLnkgKyBvZmZzZXRZO1xuICB9IGVsc2Uge1xuICAgIC8vIG1vdmVUbyBjb29yZGluYXRlcyBhcmUgcGFzc2VkIGluIGFzIG9mZnNldHNcbiAgICBjb29yZGluYXRlcy5hcmVPZmZzZXRzID0gKGdlc3R1cmUuYWN0aW9uID09PSAnbW92ZVRvJyk7XG4gICAgY29vcmRpbmF0ZXMueCA9IChvcHRpb25YIHx8IDApO1xuICAgIGNvb3JkaW5hdGVzLnkgPSAob3B0aW9uWSB8fCAwKTtcbiAgfVxuICByZXR1cm4gY29vcmRpbmF0ZXM7XG59O1xuXG5oZWxwZXJzLmFwcGx5TW92ZVRvT2Zmc2V0ID0gZnVuY3Rpb24gYXBwbHlNb3ZlVG9PZmZzZXQgKGZpcnN0Q29vcmRpbmF0ZXMsIHNlY29uZENvb3JkaW5hdGVzKSB7XG4gIGlmIChzZWNvbmRDb29yZGluYXRlcy5hcmVPZmZzZXRzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IGZpcnN0Q29vcmRpbmF0ZXMueCArIHNlY29uZENvb3JkaW5hdGVzLngsXG4gICAgICB5OiBmaXJzdENvb3JkaW5hdGVzLnkgKyBzZWNvbmRDb29yZGluYXRlcy55LFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHNlY29uZENvb3JkaW5hdGVzO1xuICB9XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGhlbHBlcnMsIGNvbW1hbmRzKTtcbmV4cG9ydCB7IGV4dGVuc2lvbnMsIGhlbHBlcnMsIGNvbW1hbmRzLCBnZXN0dXJlc0NoYWluVG9TdHJpbmcgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9nZXN0dXJlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
453
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9nZXN0dXJlLmpzIl0sIm5hbWVzIjpbIlNVUFBPUlRFRF9HRVNUVVJFX0RJUkVDVElPTlMiLCJoZWxwZXJzIiwiZXh0ZW5zaW9ucyIsImNvbW1hbmRzIiwidG9FbGVtZW50SWQiLCJvcHRzIiwiZWxlbWVudCIsImxvZyIsImluZm8iLCJlbCIsImVsZW1lbnRJZCIsInV0aWwiLCJ1bndyYXBFbGVtZW50IiwidG9FbGVtZW50T3JBcHBsaWNhdGlvbklkIiwiZHJpdmVyIiwiZmluZE5hdGl2ZUVsZW1lbnRPckVsZW1lbnRzIiwibW92ZVRvIiwieG9mZnNldCIsInlvZmZzZXQiLCJpc1dlYkNvbnRleHQiLCJ4IiwieSIsImdldExvY2F0aW9uIiwiY29vcmRzIiwiY3VyV2ViQ29vcmRzIiwiYXRvbXNFbGVtZW50IiwiZ2V0QXRvbXNFbGVtZW50IiwicmVsQ29vcmRzIiwiZXhlY3V0ZUF0b20iLCJfIiwiaXNOaWwiLCJjdXJDb29yZHMiLCJlcnJvcnMiLCJVbmtub3duRXhjZXB0aW9uIiwiZWxQb3MiLCJyZXF1aXJlRmxvYXRQYXJhbWV0ZXIiLCJwYXJhbU5hbWUiLCJwYXJhbVZhbHVlIiwibWV0aG9kTmFtZSIsImlzVW5kZWZpbmVkIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJyZXN1bHQiLCJwYXJzZUZsb2F0IiwiaXNOYU4iLCJyZXF1aXJlSW50UGFyYW1ldGVyIiwicGFyc2VJbnQiLCJtb2JpbGVTaGFrZSIsImlzU2ltdWxhdG9yIiwiVW5rbm93bkVycm9yIiwiZGV2aWNlIiwic2hha2UiLCJjbGljayIsIm5hdGl2ZUNsaWNrIiwic2V0dGluZ3MiLCJnZXRTZXR0aW5ncyIsIm5hdGl2ZVdlYlRhcCIsIm5hdGl2ZVdlYlRhcFN0cmljdCIsImRlYnVnIiwiZ2VzdHVyZXNDaGFpblRvU3RyaW5nIiwiZ2VzdHVyZXMiLCJrZXlzVG9JbmNsdWRlIiwibWFwIiwiaXRlbSIsIm90aGVyS2V5cyIsImRpZmZlcmVuY2UiLCJrZXlzIiwiaXNBcnJheSIsImludGVyc2VjdGlvbiIsImxlbmd0aCIsImFjdGlvbiIsImlzUGxhaW5PYmplY3QiLCJKU09OIiwic3RyaW5naWZ5Iiwiam9pbiIsInBlcmZvcm1BY3Rpb25zIiwiYWN0aW9ucyIsInByZXByb2Nlc3NlZEFjdGlvbnMiLCJPYmplY3QiLCJhc3NpZ24iLCJ0eXBlIiwicGFyYW1ldGVycyIsInBvaW50ZXJUeXBlIiwibW9kaWZpZWRBY3Rpb24iLCJjbG9uZSIsImZpbHRlciIsImlubmVyQWN0aW9uIiwiZHVyYXRpb24iLCJwcm94eUNvbW1hbmQiLCJyZWxlYXNlQWN0aW9ucyIsIndhcm4iLCJwZXJmb3JtVG91Y2giLCJlIiwiZXJyb3JBbmRUaHJvdyIsIm1lc3NhZ2UiLCJwZXJmb3JtTXVsdGlBY3Rpb24iLCJpIiwiZW5kcG9pbnQiLCJtb2JpbGVTY3JvbGwiLCJuYW1lIiwiZGlyZWN0aW9uIiwicHJlZGljYXRlU3RyaW5nIiwidG9WaXNpYmxlIiwiZGlzdGFuY2UiLCJwYXJhbXMiLCJpbmNsdWRlcyIsInRvTG93ZXIiLCJtb2JpbGVTd2lwZSIsInZlbG9jaXR5IiwibW9iaWxlUGluY2giLCJzY2FsZSIsIm1vYmlsZURvdWJsZVRhcCIsIm1vYmlsZVR3b0ZpbmdlclRhcCIsIm1vYmlsZVRvdWNoQW5kSG9sZCIsIm1vYmlsZVRhcCIsIm1vYmlsZURyYWdGcm9tVG9Gb3JEdXJhdGlvbiIsImZyb21YIiwiZnJvbVkiLCJ0b1giLCJ0b1kiLCJtb2JpbGVUYXBXaXRoTnVtYmVyT2ZUYXBzIiwibnVtYmVyT2ZUYXBzIiwibnVtYmVyT2ZUb3VjaGVzIiwibW9iaWxlU2VsZWN0UGlja2VyV2hlZWxWYWx1ZSIsImlzU3RyaW5nIiwib3JkZXIiLCJ0b0xvd2VyQ2FzZSIsIm9mZnNldCIsIm1vYmlsZVJvdGF0ZUVsZW1lbnQiLCJyb3RhdGlvbiIsImdldENvb3JkaW5hdGVzIiwiZ2VzdHVyZSIsImNvb3JkaW5hdGVzIiwiYXJlT2Zmc2V0cyIsIm9wdGlvblgiLCJvcHRpb25zIiwib3B0aW9uWSIsInJlY3QiLCJnZXRFbGVtZW50UmVjdCIsInBvcyIsInNpemUiLCJ3Iiwid2lkdGgiLCJoIiwiaGVpZ2h0Iiwib2Zmc2V0WCIsIm9mZnNldFkiLCJhcHBseU1vdmVUb09mZnNldCIsImZpcnN0Q29vcmRpbmF0ZXMiLCJzZWNvbmRDb29yZGluYXRlcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLDRCQUE0QixHQUFHLENBQUMsSUFBRCxFQUFPLE1BQVAsRUFBZSxNQUFmLEVBQXVCLE9BQXZCLENBQXJDO0FBRUEsTUFBTUMsT0FBTyxHQUFHLEVBQWhCO0FBQUEsTUFBb0JDLFVBQVUsR0FBRyxFQUFqQztBQUFBLE1BQXFDQyxRQUFRLEdBQUcsRUFBaEQ7Ozs7O0FBRUEsU0FBU0MsV0FBVCxDQUFzQkMsSUFBSSxHQUFHLEVBQTdCLEVBQWlDO0FBQy9CLE1BQUlBLElBQUksQ0FBQ0MsT0FBVCxFQUFrQjtBQUNoQkMsb0JBQUlDLElBQUosQ0FBVSwrRUFBVjtBQUNEOztBQUNELFFBQU1DLEVBQUUsR0FBR0osSUFBSSxDQUFDSyxTQUFMLElBQWtCTCxJQUFJLENBQUNDLE9BQWxDO0FBQ0EsU0FBT0csRUFBRSxHQUFHRSxvQkFBS0MsYUFBTCxDQUFtQkgsRUFBbkIsQ0FBSCxHQUE0QixJQUFyQztBQUNEOztBQUVELGVBQWVJLHdCQUFmLENBQXlDQyxNQUF6QyxFQUFpRFQsSUFBSSxHQUFHLEVBQXhELEVBQTREO0FBQzFELFNBQU9ELFdBQVcsQ0FBQ0MsSUFBRCxDQUFYLElBQ0ZNLG9CQUFLQyxhQUFMLENBQW1CLE1BQU1FLE1BQU0sQ0FBQ0MsMkJBQVAsQ0FBb0MsWUFBcEMsRUFBa0QsNEJBQWxELEVBQStFLEtBQS9FLENBQXpCLENBREw7QUFFRDs7QUFFRFosUUFBUSxDQUFDYSxNQUFULEdBQWtCLGVBQWVBLE1BQWYsQ0FBdUJQLEVBQXZCLEVBQTJCUSxPQUFPLEdBQUcsQ0FBckMsRUFBd0NDLE9BQU8sR0FBRyxDQUFsRCxFQUFxRDtBQUNyRVQsRUFBQUEsRUFB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QUNDLE1BQVAsQ0FBYzVFLFVBQWQsRUFBMEJELE9BQTFCLEVBQW1DRSxRQUFuQztlQUVlRCxVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtLWJhc2UtZHJpdmVyJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuXG5jb25zdCBTVVBQT1JURURfR0VTVFVSRV9ESVJFQ1RJT05TID0gWyd1cCcsICdkb3duJywgJ2xlZnQnLCAncmlnaHQnXTtcblxuY29uc3QgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge30sIGNvbW1hbmRzID0ge307XG5cbmZ1bmN0aW9uIHRvRWxlbWVudElkIChvcHRzID0ge30pIHtcbiAgaWYgKG9wdHMuZWxlbWVudCkge1xuICAgIGxvZy5pbmZvKGBUaGUgJ2VsZW1lbnQnIGFyZ3VtZW50IG5hbWUgaXMgZGVwcmVjYXRlZC4gQ29uc2lkZXIgdXNpbmcgJ2VsZW1lbnRJZCcgaW5zdGVhZGApO1xuICB9XG4gIGNvbnN0IGVsID0gb3B0cy5lbGVtZW50SWQgfHwgb3B0cy5lbGVtZW50O1xuICByZXR1cm4gZWwgPyB1dGlsLnVud3JhcEVsZW1lbnQoZWwpIDogbnVsbDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdG9FbGVtZW50T3JBcHBsaWNhdGlvbklkIChkcml2ZXIsIG9wdHMgPSB7fSkge1xuICByZXR1cm4gdG9FbGVtZW50SWQob3B0cylcbiAgICB8fCB1dGlsLnVud3JhcEVsZW1lbnQoYXdhaXQgZHJpdmVyLmZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cyhgY2xhc3MgbmFtZWAsIGBYQ1VJRWxlbWVudFR5cGVBcHBsaWNhdGlvbmAsIGZhbHNlKSk7XG59XG5cbmNvbW1hbmRzLm1vdmVUbyA9IGFzeW5jIGZ1bmN0aW9uIG1vdmVUbyAoZWwsIHhvZmZzZXQgPSAwLCB5b2Zmc2V0ID0gMCkge1xuICBlbCA9IHV0aWwudW53cmFwRWxlbWVudChlbCk7XG5cbiAgaWYgKHRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICBsZXQge3gsIHl9ID0gYXdhaXQgdGhpcy5nZXRMb2NhdGlvbihlbCk7XG4gICAgbGV0IGNvb3JkcyA9IHtcbiAgICAgIHg6IHggKyB4b2Zmc2V0LFxuICAgICAgeTogeSArIHlvZmZzZXRcbiAgICB9O1xuICAgIHRoaXMuY3VyV2ViQ29vcmRzID0gY29vcmRzO1xuICAgIGxldCBhdG9tc0VsZW1lbnQgPSB0aGlzLmdldEF0b21zRWxlbWVudChlbCk7XG4gICAgbGV0IHJlbENvb3JkcyA9IHt4OiB4b2Zmc2V0LCB5OiB5b2Zmc2V0fTtcbiAgICBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdtb3ZlX21vdXNlJywgW2F0b21zRWxlbWVudCwgcmVsQ29vcmRzXSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKF8uaXNOaWwoZWwpKSB7XG4gICAgICBpZiAoIXRoaXMuY3VyQ29vcmRzKSB7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkV4Y2VwdGlvbihcbiAgICAgICAgICAnQ3VycmVudCBjdXJzb3IgcG9zaXRpb24gdW5rbm93biwgcGxlYXNlIHVzZSBtb3ZlVG8gd2l0aCBhbiBlbGVtZW50IHRoZSBmaXJzdCB0aW1lLicpO1xuICAgICAgfVxuICAgICAgdGhpcy5jdXJDb29yZHMgPSB7XG4gICAgICAgIHg6IHRoaXMuY3VyQ29vcmRzLnggKyB4b2Zmc2V0LFxuICAgICAgICB5OiB0aGlzLmN1ckNvb3Jkcy55ICsgeW9mZnNldFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGVsUG9zID0gYXdhaXQgdGhpcy5nZXRMb2NhdGlvbihlbCk7XG4gICAgICB0aGlzLmN1ckNvb3JkcyA9IHtcbiAgICAgICAgeDogZWxQb3MueCArIHhvZmZzZXQsXG4gICAgICAgIHk6IGVsUG9zLnkgKyB5b2Zmc2V0XG4gICAgICB9O1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gcmVxdWlyZUZsb2F0UGFyYW1ldGVyIChwYXJhbU5hbWUsIHBhcmFtVmFsdWUsIG1ldGhvZE5hbWUpIHtcbiAgaWYgKF8uaXNVbmRlZmluZWQocGFyYW1WYWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBcIiR7cGFyYW1OYW1lfVwiIHBhcmFtZXRlciBpcyBtYW5kYXRvcnkgZm9yIFwiJHttZXRob2ROYW1lfVwiIGNhbGxgKTtcbiAgfVxuICBjb25zdCByZXN1bHQgPSBwYXJzZUZsb2F0KHBhcmFtVmFsdWUpO1xuICBpZiAoaXNOYU4ocmVzdWx0KSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYFwiJHtwYXJhbU5hbWV9XCIgcGFyYW1ldGVyIHNob3VsZCBiZSBhIHZhbGlkIG51bWJlci4gXCIke3BhcmFtVmFsdWV9XCIgaXMgZ2l2ZW4gaW5zdGVhZGApO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHJlcXVpcmVJbnRQYXJhbWV0ZXIgKHBhcmFtTmFtZSwgcGFyYW1WYWx1ZSwgbWV0aG9kTmFtZSkge1xuICBpZiAoXy5pc1VuZGVmaW5lZChwYXJhbVZhbHVlKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYFwiJHtwYXJhbU5hbWV9XCIgcGFyYW1ldGVyIGlzIG1hbmRhdG9yeSBmb3IgXCIke21ldGhvZE5hbWV9XCIgY2FsbGApO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHBhcnNlSW50KHBhcmFtVmFsdWUsIDEwKTtcbiAgaWYgKGlzTmFOKHJlc3VsdCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBcIiR7cGFyYW1OYW1lfVwiIHBhcmFtZXRlciBzaG91bGQgYmUgYSB2YWxpZCBpbnRlZ2VyLiBcIiR7cGFyYW1WYWx1ZX1cIiBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuY29tbWFuZHMubW9iaWxlU2hha2UgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTaGFrZSAoKSB7XG4gIGlmICghdGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Vbmtub3duRXJyb3IoJ1NoYWtlIGlzIG5vdCBzdXBwb3J0ZWQgb24gcmVhbCBkZXZpY2VzJyk7XG4gIH1cbiAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5zaGFrZSgpO1xufTtcblxuY29tbWFuZHMuY2xpY2sgPSBhc3luYyBmdW5jdGlvbiBjbGljayAoZWwpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgLy8gdGhlcmUgYXJlIG11bHRpcGxlIGNvbW1hbmRzIHRoYXQgbWFwIGhlcmUsIHNvIG1hbnVhbGx5IHByb3h5XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMubmF0aXZlQ2xpY2soZWwpO1xuICB9XG4gIGVsID0gdXRpbC51bndyYXBFbGVtZW50KGVsKTtcbiAgaWYgKChhd2FpdCB0aGlzLnNldHRpbmdzLmdldFNldHRpbmdzKCkpLm5hdGl2ZVdlYlRhcCB8fCAoYXdhaXQgdGhpcy5zZXR0aW5ncy5nZXRTZXR0aW5ncygpKS5uYXRpdmVXZWJUYXBTdHJpY3QpIHtcbiAgICAvLyBhdG9tcy1iYXNlZCBjbGlja3MgZG9uJ3QgYWx3YXlzIHdvcmsgaW4gc2FmYXJpIDdcbiAgICBsb2cuZGVidWcoJ1VzaW5nIG5hdGl2ZSB3ZWIgdGFwJyk7XG4gICAgYXdhaXQgdGhpcy5uYXRpdmVXZWJUYXAoZWwpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGF0b21zRWxlbWVudCA9IHRoaXMuZ2V0QXRvbXNFbGVtZW50KGVsKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnY2xpY2snLCBbYXRvbXNFbGVtZW50XSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGdlc3R1cmVzQ2hhaW5Ub1N0cmluZyAoZ2VzdHVyZXMsIGtleXNUb0luY2x1ZGUgPSBbJ29wdGlvbnMnXSkge1xuICByZXR1cm4gZ2VzdHVyZXMubWFwKChpdGVtKSA9PiB7XG4gICAgbGV0IG90aGVyS2V5cyA9IF8uZGlmZmVyZW5jZShfLmtleXMoaXRlbSksIFsnYWN0aW9uJ10pO1xuICAgIG90aGVyS2V5cyA9IF8uaXNBcnJheShrZXlzVG9JbmNsdWRlKSA/IF8uaW50ZXJzZWN0aW9uKG90aGVyS2V5cywga2V5c1RvSW5jbHVkZSkgOiBvdGhlcktleXM7XG4gICAgaWYgKG90aGVyS2V5cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBgJHtpdGVtLmFjdGlvbn1gICtcbiAgICAgICAgYCgke18ubWFwKG90aGVyS2V5cywgKHgpID0+IHggKyAnPScgKyAoXy5pc1BsYWluT2JqZWN0KGl0ZW1beF0pID8gSlNPTi5zdHJpbmdpZnkoaXRlbVt4XSkgOiBpdGVtW3hdKSkuam9pbignLCAnKX0pYDtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW0uYWN0aW9uO1xuICB9KS5qb2luKCctJyk7XG59XG5cbmNvbW1hbmRzLnBlcmZvcm1BY3Rpb25zID0gYXN5bmMgZnVuY3Rpb24gcGVyZm9ybUFjdGlvbnMgKGFjdGlvbnMpIHtcbiAgbG9nLmRlYnVnKGBSZWNlaXZlZCB0aGUgZm9sbG93aW5nIFczQyBhY3Rpb25zOiAke0pTT04uc3RyaW5naWZ5KGFjdGlvbnMsIG51bGwsICcgICcpfWApO1xuICAvLyBUaGlzIGlzIG1hbmRhdG9yeSwgc2luY2UgV0RBIG9ubHkgc3VwcG9ydHMgVE9VQ0ggcG9pbnRlciB0eXBlXG4gIC8vIGFuZCBTZWxlbml1bSBBUEkgdXNlcyBNT1VTRSBhcyB0aGUgZGVmYXVsdCBvbmVcbiAgY29uc3QgcHJlcHJvY2Vzc2VkQWN0aW9ucyA9IGFjdGlvbnNcbiAgICAubWFwKChhY3Rpb24pID0+IE9iamVjdC5hc3NpZ24oe30sIGFjdGlvbiwgYWN0aW9uLnR5cGUgPT09ICdwb2ludGVyJyA/IHtcbiAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgcG9pbnRlclR5cGU6ICd0b3VjaCdcbiAgICAgIH1cbiAgICB9IDoge30pKVxuICAgIC5tYXAoKGFjdGlvbikgPT4ge1xuICAgICAgY29uc3QgbW9kaWZpZWRBY3Rpb24gPSBfLmNsb25lKGFjdGlvbikgfHwge307XG4gICAgICAvLyBTZWxlbml1bSBBUEkgdW5leHBlY3RlZGx5IGluc2VydHMgemVybyBwYXVzZXMsIHdoaWNoIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IFdEQVxuICAgICAgbW9kaWZpZWRBY3Rpb24uYWN0aW9ucyA9IChhY3Rpb24uYWN0aW9ucyB8fCBbXSlcbiAgICAgICAgLmZpbHRlcigoaW5uZXJBY3Rpb24pID0+ICEoaW5uZXJBY3Rpb24udHlwZSA9PT0gJ3BhdXNlJyAmJiBpbm5lckFjdGlvbi5kdXJhdGlvbiA9PT0gMCkpO1xuICAgICAgcmV0dXJuIG1vZGlmaWVkQWN0aW9uO1xuICAgIH0pO1xuICBsb2cuZGVidWcoYFByZXByb2Nlc3NlZCBhY3Rpb25zOiAke0pTT04uc3RyaW5naWZ5KHByZXByb2Nlc3NlZEFjdGlvbnMsIG51bGwsICcgICcpfWApO1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy9hY3Rpb25zJywgJ1BPU1QnLCB7YWN0aW9uczogcHJlcHJvY2Vzc2VkQWN0aW9uc30pO1xufTtcblxuY29tbWFuZHMucmVsZWFzZUFjdGlvbnMgPSBmdW5jdGlvbiByZWxlYXNlQWN0aW9ucyAoKSB7XG4gIGxvZy53YXJuKCdPbiB0aGlzIHBsYXRmb3JtLCByZWxlYXNlQWN0aW9ucyBpcyBhIG5vLW9wJyk7XG59O1xuXG5jb21tYW5kcy5wZXJmb3JtVG91Y2ggPSBhc3luYyBmdW5jdGlvbiBwZXJmb3JtVG91Y2ggKGdlc3R1cmVzKSB7XG4gIGxvZy5kZWJ1ZyhgUmVjZWl2ZWQgdGhlIGZvbGxvd2luZyB0b3VjaCBhY3Rpb246ICR7Z2VzdHVyZXNDaGFpblRvU3RyaW5nKGdlc3R1cmVzKX1gKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvdG91Y2gvcGVyZm9ybScsICdQT1NUJywge2FjdGlvbnM6IGdlc3R1cmVzfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIGxvZy5lcnJvckFuZFRocm93KCdUaGUgVG91Y2ggQVBJIGlzIGFpbWVkIGZvciB1c2FnZSBpbiBOQVRJVkUgY29udGV4dC4gJyArXG4gICAgICAnQ29uc2lkZXIgdXNpbmcgXCJleGVjdXRlXCIgQVBJIHdpdGggY3VzdG9tIGV2ZW50cyB0cmlnZ2VyIHNjcmlwdCAnICtcbiAgICAgIGB0byBlbXVsYXRlIHRvdWNoIGV2ZW50cyBiZWluZyBpbiBXRUJWSUVXIGNvbnRleHQuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuY29tbWFuZHMucGVyZm9ybU11bHRpQWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gcGVyZm9ybU11bHRpQWN0aW9uIChhY3Rpb25zKSB7XG4gIGxvZy5kZWJ1ZyhgUmVjZWl2ZWQgdGhlIGZvbGxvd2luZyBtdWx0aSB0b3VjaCBhY3Rpb246YCk7XG4gIGZvciAobGV0IGkgaW4gYWN0aW9ucykge1xuICAgIGxvZy5kZWJ1ZyhgICAgICR7cGFyc2VJbnQoaSwgMTApICsgMX06ICR7Xy5tYXAoYWN0aW9uc1tpXSwgJ2FjdGlvbicpLmpvaW4oJy0nKX1gKTtcbiAgfVxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS90b3VjaC9tdWx0aS9wZXJmb3JtJywgJ1BPU1QnLCB7YWN0aW9uc30pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICBsb2cuZXJyb3JBbmRUaHJvdygnVGhlIE11bHRpVG91Y2ggQVBJIGlzIGFpbWVkIGZvciB1c2FnZSBpbiBOQVRJVkUgY29udGV4dC4gJyArXG4gICAgICAnQ29uc2lkZXIgdXNpbmcgXCJleGVjdXRlXCIgQVBJIHdpdGggY3VzdG9tIGV2ZW50cyB0cmlnZ2VyIHNjcmlwdCAnICtcbiAgICAgIGB0byBlbXVsYXRlIG11bHRpdG91Y2ggZXZlbnRzIGJlaW5nIGluIFdFQlZJRVcgY29udGV4dC4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICB9XG59O1xuXG5jb21tYW5kcy5uYXRpdmVDbGljayA9IGFzeW5jIGZ1bmN0aW9uIG5hdGl2ZUNsaWNrIChlbCkge1xuICBlbCA9IHV0aWwudW53cmFwRWxlbWVudChlbCk7XG4gIGxldCBlbmRwb2ludCA9IGAvZWxlbWVudC8ke2VsfS9jbGlja2A7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChlbmRwb2ludCwgJ1BPU1QnLCB7fSk7XG59O1xuXG4vKlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9XZWJEcml2ZXJBZ2VudC9ibG9iL21hc3Rlci9XZWJEcml2ZXJBZ2VudExpYi9Db21tYW5kcy9GQkVsZW1lbnRDb21tYW5kcy5tXG4gKiB0byBnZXQgdGhlIGluZm8gYWJvdXQgYXZhaWxhYmxlIFdEQSBnZXN0dXJlcyBBUElcbiAqXG4gKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL3JlZmVyZW5jZS94Y3Rlc3QveGN1aWVsZW1lbnQgYW5kXG4gKiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vcmVmZXJlbmNlL3hjdGVzdC94Y3VpY29vcmRpbmF0ZSB0byBnZXQgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mXG4gKiBhbGwgWENUZXN0IGdlc3R1cmVzXG4qL1xuXG5oZWxwZXJzLm1vYmlsZVNjcm9sbCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVNjcm9sbCAob3B0cyA9IHt9KSB7XG4gIC8vIFdEQSBzdXBwb3J0cyBmb3VyIHNjcm9sbGluZyBzdHJhdGVnaWVzOiBwcmVkaWNhdGlvbiBiYXNlZCBvbiBuYW1lLCBkaXJlY3Rpb24sXG4gIC8vIHByZWRpY2F0ZVN0cmluZywgYW5kIHRvVmlzaWJsZSwgaW4gdGhhdCBvcmRlclxuICBjb25zdCB7XG4gICAgbmFtZSxcbiAgICBkaXJlY3Rpb24sXG4gICAgcHJlZGljYXRlU3RyaW5nLFxuICAgIHRvVmlzaWJsZSxcbiAgICBkaXN0YW5jZSxcbiAgfSA9IG9wdHM7XG4gIGNvbnN0IHBhcmFtcyA9IHt9O1xuICBpZiAobmFtZSkge1xuICAgIHBhcmFtcy5uYW1lID0gbmFtZTtcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24pIHtcbiAgICBpZiAoIVNVUFBPUlRFRF9HRVNUVVJFX0RJUkVDVElPTlMuaW5jbHVkZXMoXy50b0xvd2VyKGRpcmVjdGlvbikpKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGAnZGlyZWN0aW9uJyBtdXN0IGJlIG9uZSBvZjogJHtTVVBQT1JURURfR0VTVFVSRV9ESVJFQ1RJT05TfWApO1xuICAgIH1cbiAgICBwYXJhbXMuZGlyZWN0aW9uID0gZGlyZWN0aW9uO1xuICB9IGVsc2UgaWYgKHByZWRpY2F0ZVN0cmluZykge1xuICAgIHBhcmFtcy5wcmVkaWNhdGVTdHJpbmcgPSBwcmVkaWNhdGVTdHJpbmc7XG4gIH0gZWxzZSBpZiAodG9WaXNpYmxlKSB7XG4gICAgcGFyYW1zLnRvVmlzaWJsZSA9IHRvVmlzaWJsZTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgJ01vYmlsZSBzY3JvbGwgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBzdHJhdGVnaWVzOiBuYW1lLCBkaXJlY3Rpb24sIHByZWRpY2F0ZVN0cmluZywgYW5kIHRvVmlzaWJsZS4gJyArXG4gICAgICAnU3BlY2lmeSBvbmUgb2YgdGhlc2UnKTtcbiAgfVxuICAvLyB3ZSBjYW4gYWxzbyBvcHRpb25hbGx5IHBhc3MgYSBkaXN0YW5jZSB3aGljaCBhcHBlYXJzIHRvIGJlIGEgcmF0aW8gb2ZcbiAgLy8gc2NyZWVuIGhlaWdodCwgc28gMS4wIG1lYW5zIGEgZnVsbCBzY3JlZW4ncyB3b3J0aCBvZiBzY3JvbGxpbmdcbiAgaWYgKCFfLmlzTmlsKGRpc3RhbmNlKSkge1xuICAgIHBhcmFtcy5kaXN0YW5jZSA9IGRpc3RhbmNlO1xuICB9XG4gIGNvbnN0IGVsZW1lbnRJZCA9IGF3YWl0IHRvRWxlbWVudE9yQXBwbGljYXRpb25JZCh0aGlzLCBvcHRzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvd2RhL2VsZW1lbnQvJHtlbGVtZW50SWR9L3Njcm9sbGAsICdQT1NUJywgcGFyYW1zKTtcbn07XG5cbmhlbHBlcnMubW9iaWxlU3dpcGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTd2lwZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBkaXJlY3Rpb24sXG4gICAgdmVsb2NpdHksXG4gIH0gPSBvcHRzO1xuICBpZiAoIVNVUFBPUlRFRF9HRVNUVVJFX0RJUkVDVElPTlMuaW5jbHVkZXMoXy50b0xvd2VyKGRpcmVjdGlvbikpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgJ2RpcmVjdGlvbicgbXVzdCBiZSBvbmUgb2Y6ICR7U1VQUE9SVEVEX0dFU1RVUkVfRElSRUNUSU9OU31gKTtcbiAgfVxuICBjb25zdCBwYXJhbXMgPSB7ZGlyZWN0aW9ufTtcbiAgaWYgKCFfLmlzTmlsKHZlbG9jaXR5KSkge1xuICAgIHBhcmFtcy52ZWxvY2l0eSA9IHZlbG9jaXR5O1xuICB9XG4gIGNvbnN0IGVsZW1lbnRJZCA9IGF3YWl0IHRvRWxlbWVudE9yQXBwbGljYXRpb25JZCh0aGlzLCBvcHRzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvd2RhL2VsZW1lbnQvJHtlbGVtZW50SWR9L3N3aXBlYCwgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuaGVscGVycy5tb2JpbGVQaW5jaCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVBpbmNoIChvcHRzID0ge30pIHtcbiAgY29uc3QgcGFyYW1zID0ge1xuICAgIHNjYWxlOiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3NjYWxlJywgb3B0cy5zY2FsZSwgJ3BpbmNoJyksXG4gICAgdmVsb2NpdHk6IHJlcXVpcmVGbG9hdFBhcmFtZXRlcigndmVsb2NpdHknLCBvcHRzLnZlbG9jaXR5LCAncGluY2gnKVxuICB9O1xuICBjb25zdCBlbGVtZW50SWQgPSBhd2FpdCB0b0VsZW1lbnRPckFwcGxpY2F0aW9uSWQodGhpcywgb3B0cyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL3dkYS9lbGVtZW50LyR7ZWxlbWVudElkfS9waW5jaGAsICdQT1NUJywgcGFyYW1zKTtcbn07XG5cbmhlbHBlcnMubW9iaWxlRG91YmxlVGFwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlRG91YmxlVGFwIChvcHRzID0ge30pIHtcbiAgY29uc3QgZWxlbWVudElkID0gdG9FbGVtZW50SWQob3B0cyk7XG4gIGlmIChlbGVtZW50SWQpIHtcbiAgICAvLyBEb3VibGUgdGFwIGVsZW1lbnRcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC93ZGEvZWxlbWVudC8ke2VsZW1lbnRJZH0vZG91YmxlVGFwYCwgJ1BPU1QnKTtcbiAgfVxuICAvLyBEb3VibGUgdGFwIGNvb3JkaW5hdGVzXG4gIGNvbnN0IHBhcmFtcyA9IHtcbiAgICB4OiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3gnLCBvcHRzLngsICdkb3VibGVUYXAnKSxcbiAgICB5OiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3knLCBvcHRzLnksICdkb3VibGVUYXAnKVxuICB9O1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvZG91YmxlVGFwJywgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuaGVscGVycy5tb2JpbGVUd29GaW5nZXJUYXAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVUd29GaW5nZXJUYXAgKG9wdHMgPSB7fSkge1xuICBjb25zdCBlbGVtZW50SWQgPSBhd2FpdCB0b0VsZW1lbnRPckFwcGxpY2F0aW9uSWQodGhpcywgb3B0cyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL3dkYS9lbGVtZW50LyR7ZWxlbWVudElkfS90d29GaW5nZXJUYXBgLCAnUE9TVCcpO1xufTtcblxuaGVscGVycy5tb2JpbGVUb3VjaEFuZEhvbGQgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVUb3VjaEFuZEhvbGQgKG9wdHMgPSB7fSkge1xuICBjb25zdCBwYXJhbXMgPSB7XG4gICAgZHVyYXRpb246IHJlcXVpcmVGbG9hdFBhcmFtZXRlcignZHVyYXRpb24nLCBvcHRzLmR1cmF0aW9uLCAndG91Y2hBbmRIb2xkJylcbiAgfTtcbiAgY29uc3QgZWxlbWVudElkID0gdG9FbGVtZW50SWQob3B0cyk7XG4gIGlmIChlbGVtZW50SWQpIHtcbiAgICAvLyBMb25nIHRhcCBlbGVtZW50XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvd2RhL2VsZW1lbnQvJHtlbGVtZW50SWR9L3RvdWNoQW5kSG9sZGAsICdQT1NUJywgcGFyYW1zKTtcbiAgfVxuICAvLyBMb25nIHRhcCBjb29yZGluYXRlc1xuICBwYXJhbXMueCA9IHJlcXVpcmVGbG9hdFBhcmFtZXRlcigneCcsIG9wdHMueCwgJ3RvdWNoQW5kSG9sZCcpO1xuICBwYXJhbXMueSA9IHJlcXVpcmVGbG9hdFBhcmFtZXRlcigneScsIG9wdHMueSwgJ3RvdWNoQW5kSG9sZCcpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvdG91Y2hBbmRIb2xkJywgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuaGVscGVycy5tb2JpbGVUYXAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVUYXAgKG9wdHMgPSB7fSkge1xuICBjb25zdCBwYXJhbXMgPSB7XG4gICAgeDogcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCd4Jywgb3B0cy54LCAndGFwJyksXG4gICAgeTogcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCd5Jywgb3B0cy55LCAndGFwJylcbiAgfTtcbiAgY29uc3QgZWxlbWVudElkID0gdG9FbGVtZW50SWQob3B0cykgfHwgJzAnO1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC93ZGEvdGFwLyR7ZWxlbWVudElkfWAsICdQT1NUJywgcGFyYW1zKTtcbn07XG5cbmhlbHBlcnMubW9iaWxlRHJhZ0Zyb21Ub0ZvckR1cmF0aW9uID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlRHJhZ0Zyb21Ub0ZvckR1cmF0aW9uIChvcHRzID0ge30pIHtcbiAgY29uc3QgcGFyYW1zID0ge1xuICAgIGR1cmF0aW9uOiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ2R1cmF0aW9uJywgb3B0cy5kdXJhdGlvbiwgJ2RyYWdGcm9tVG9Gb3JEdXJhdGlvbicpLFxuICAgIGZyb21YOiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ2Zyb21YJywgb3B0cy5mcm9tWCwgJ2RyYWdGcm9tVG9Gb3JEdXJhdGlvbicpLFxuICAgIGZyb21ZOiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ2Zyb21ZJywgb3B0cy5mcm9tWSwgJ2RyYWdGcm9tVG9Gb3JEdXJhdGlvbicpLFxuICAgIHRvWDogcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCd0b1gnLCBvcHRzLnRvWCwgJ2RyYWdGcm9tVG9Gb3JEdXJhdGlvbicpLFxuICAgIHRvWTogcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCd0b1knLCBvcHRzLnRvWSwgJ2RyYWdGcm9tVG9Gb3JEdXJhdGlvbicpXG4gIH07XG4gIGNvbnN0IGVsZW1lbnRJZCA9IHRvRWxlbWVudElkKG9wdHMpO1xuICByZXR1cm4gZWxlbWVudElkXG4gICAgLy8gRHJhZyBlbGVtZW50XG4gICAgPyBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL3dkYS9lbGVtZW50LyR7ZWxlbWVudElkfS9kcmFnZnJvbXRvZm9yZHVyYXRpb25gLCAnUE9TVCcsIHBhcmFtcylcbiAgICAvLyBEcmFnIGNvb3JkaW5hdGVzXG4gICAgOiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9kcmFnZnJvbXRvZm9yZHVyYXRpb24nLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG5oZWxwZXJzLm1vYmlsZVRhcFdpdGhOdW1iZXJPZlRhcHMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVUYXBXaXRoTnVtYmVyT2ZUYXBzIChvcHRzID0ge30pIHtcbiAgY29uc3QgZWxlbWVudElkID0gdG9FbGVtZW50SWQob3B0cyk7XG4gIGlmICghZWxlbWVudElkKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcignRWxlbWVudCBpZCBpcyBleHBlY3RlZCB0byBiZSBzZXQgZm9yIHRhcFdpdGhOdW1iZXJPZlRhcHMgbWV0aG9kJyk7XG4gIH1cbiAgY29uc3QgcGFyYW1zID0ge1xuICAgIG51bWJlck9mVGFwczogcmVxdWlyZUludFBhcmFtZXRlcignbnVtYmVyT2ZUYXBzJywgb3B0cy5udW1iZXJPZlRhcHMsICd0YXBXaXRoTnVtYmVyT2ZUYXBzJyksXG4gICAgbnVtYmVyT2ZUb3VjaGVzOiByZXF1aXJlSW50UGFyYW1ldGVyKCdudW1iZXJPZlRvdWNoZXMnLCBvcHRzLm51bWJlck9mVG91Y2hlcywgJ3RhcFdpdGhOdW1iZXJPZlRhcHMnKSxcbiAgfTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvd2RhL2VsZW1lbnQvJHtlbGVtZW50SWR9L3RhcFdpdGhOdW1iZXJPZlRhcHNgLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG5oZWxwZXJzLm1vYmlsZVNlbGVjdFBpY2tlcldoZWVsVmFsdWUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTZWxlY3RQaWNrZXJXaGVlbFZhbHVlIChvcHRzID0ge30pIHtcbiAgY29uc3QgZWxlbWVudElkID0gdG9FbGVtZW50SWQob3B0cyk7XG4gIGlmICghZWxlbWVudElkKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcignRWxlbWVudCBpZCBpcyBleHBlY3RlZCB0byBiZSBzZXQgZm9yIHNlbGVjdFBpY2tlcldoZWVsVmFsdWUgbWV0aG9kJyk7XG4gIH1cbiAgaWYgKCFfLmlzU3RyaW5nKG9wdHMub3JkZXIpIHx8ICFbJ25leHQnLCAncHJldmlvdXMnXS5pbmNsdWRlcyhvcHRzLm9yZGVyLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgVGhlIG1hbmRhdG9yeSAnb3JkZXInIHBhcmFtZXRlciBpcyBleHBlY3RlZCB0byBiZSBlcXVhbCBlaXRoZXIgdG8gJ25leHQnIG9yICdwcmV2aW91cycuIGAgK1xuICAgICAgYCcke29wdHMub3JkZXJ9JyBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gIH1cbiAgY29uc3QgcGFyYW1zID0ge29yZGVyOiBvcHRzLm9yZGVyfTtcbiAgaWYgKG9wdHMub2Zmc2V0KSB7XG4gICAgcGFyYW1zLm9mZnNldCA9IHJlcXVpcmVGbG9hdFBhcmFtZXRlcignb2Zmc2V0Jywgb3B0cy5vZmZzZXQsICdzZWxlY3RQaWNrZXJXaGVlbFZhbHVlJyk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvd2RhL3BpY2tlcndoZWVsLyR7ZWxlbWVudElkfS9zZWxlY3RgLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG5oZWxwZXJzLm1vYmlsZVJvdGF0ZUVsZW1lbnQgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVSb3RhdGVFbGVtZW50IChvcHRzID0ge30pIHtcbiAgY29uc3QgZWxlbWVudElkID0gdG9FbGVtZW50SWQob3B0cyk7XG4gIGlmICghZWxlbWVudElkKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcignRWxlbWVudCBpZCBpcyBleHBlY3RlZCB0byBiZSBzZXQgZm9yIHJvdGF0ZUVsZW1lbnQgbWV0aG9kJyk7XG4gIH1cbiAgY29uc3QgcGFyYW1zID0ge1xuICAgIHJvdGF0aW9uOiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3JvdGF0aW9uJywgb3B0cy5yb3RhdGlvbiwgJ3JvdGF0ZUVsZW1lbnQnKSxcbiAgICB2ZWxvY2l0eTogcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCd2ZWxvY2l0eScsIG9wdHMudmVsb2NpdHksICdyb3RhdGVFbGVtZW50JyksXG4gIH07XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL3dkYS9lbGVtZW50LyR7ZWxlbWVudElkfS9yb3RhdGVgLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG5oZWxwZXJzLmdldENvb3JkaW5hdGVzID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q29vcmRpbmF0ZXMgKGdlc3R1cmUpIHtcbiAgLy8gZGVmYXVsdHNcbiAgbGV0IGNvb3JkaW5hdGVzID0ge3g6IDAsIHk6IDAsIGFyZU9mZnNldHM6IGZhbHNlfTtcblxuICBsZXQgb3B0aW9uWCA9IG51bGw7XG4gIGlmIChnZXN0dXJlLm9wdGlvbnMueCkge1xuICAgIG9wdGlvblggPSByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3gnLCBnZXN0dXJlLm9wdGlvbnMueCwgJ2dldENvb3JkaW5hdGVzJyk7XG4gIH1cbiAgbGV0IG9wdGlvblkgPSBudWxsO1xuICBpZiAoZ2VzdHVyZS5vcHRpb25zLnkpIHtcbiAgICBvcHRpb25ZID0gcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCd5JywgZ2VzdHVyZS5vcHRpb25zLnksICdnZXRDb29yZGluYXRlcycpO1xuICB9XG5cbiAgLy8gZmlndXJlIG91dCB0aGUgZWxlbWVudCBjb29yZGluYXRlcy5cbiAgY29uc3QgZWxlbWVudElkID0gdG9FbGVtZW50SWQoZ2VzdHVyZS5vcHRpb25zKTtcbiAgaWYgKGVsZW1lbnRJZCkge1xuICAgIGxldCByZWN0ID0gYXdhaXQgdGhpcy5nZXRFbGVtZW50UmVjdChlbGVtZW50SWQpO1xuICAgIGxldCBwb3MgPSB7eDogcmVjdC54LCB5OiByZWN0Lnl9O1xuICAgIGxldCBzaXplID0ge3c6IHJlY3Qud2lkdGgsIGg6IHJlY3QuaGVpZ2h0fTtcblxuICAgIC8vIGRlZmF1bHRzXG4gICAgbGV0IG9mZnNldFggPSAwO1xuICAgIGxldCBvZmZzZXRZID0gMDtcblxuICAgIC8vIGdldCB0aGUgcmVhbCBvZmZzZXRzXG4gICAgaWYgKG9wdGlvblggfHwgb3B0aW9uWSkge1xuICAgICAgb2Zmc2V0WCA9IChvcHRpb25YIHx8IDApO1xuICAgICAgb2Zmc2V0WSA9IChvcHRpb25ZIHx8IDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBvZmZzZXRYID0gKHNpemUudyAvIDIpO1xuICAgICAgb2Zmc2V0WSA9IChzaXplLmggLyAyKTtcbiAgICB9XG5cbiAgICAvLyBhcHBseSB0aGUgb2Zmc2V0c1xuICAgIGNvb3JkaW5hdGVzLnggPSBwb3MueCArIG9mZnNldFg7XG4gICAgY29vcmRpbmF0ZXMueSA9IHBvcy55ICsgb2Zmc2V0WTtcbiAgfSBlbHNlIHtcbiAgICAvLyBtb3ZlVG8gY29vcmRpbmF0ZXMgYXJlIHBhc3NlZCBpbiBhcyBvZmZzZXRzXG4gICAgY29vcmRpbmF0ZXMuYXJlT2Zmc2V0cyA9IChnZXN0dXJlLmFjdGlvbiA9PT0gJ21vdmVUbycpO1xuICAgIGNvb3JkaW5hdGVzLnggPSAob3B0aW9uWCB8fCAwKTtcbiAgICBjb29yZGluYXRlcy55ID0gKG9wdGlvblkgfHwgMCk7XG4gIH1cbiAgcmV0dXJuIGNvb3JkaW5hdGVzO1xufTtcblxuaGVscGVycy5hcHBseU1vdmVUb09mZnNldCA9IGZ1bmN0aW9uIGFwcGx5TW92ZVRvT2Zmc2V0IChmaXJzdENvb3JkaW5hdGVzLCBzZWNvbmRDb29yZGluYXRlcykge1xuICBpZiAoc2Vjb25kQ29vcmRpbmF0ZXMuYXJlT2Zmc2V0cykge1xuICAgIHJldHVybiB7XG4gICAgICB4OiBmaXJzdENvb3JkaW5hdGVzLnggKyBzZWNvbmRDb29yZGluYXRlcy54LFxuICAgICAgeTogZmlyc3RDb29yZGluYXRlcy55ICsgc2Vjb25kQ29vcmRpbmF0ZXMueSxcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzZWNvbmRDb29yZGluYXRlcztcbiAgfVxufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBoZWxwZXJzLCBjb21tYW5kcyk7XG5leHBvcnQgeyBleHRlbnNpb25zLCBoZWxwZXJzLCBjb21tYW5kcywgZ2VzdHVyZXNDaGFpblRvU3RyaW5nIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sImZpbGUiOiJsaWIvY29tbWFuZHMvZ2VzdHVyZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = exports.helpers = exports.commands = void 0;
6
+ exports.helpers = exports.default = exports.commands = void 0;
7
7
 
8
8
  require("source-map-support/register");
9
9
 
@@ -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
 
@@ -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
 
@@ -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 = void 0;
8
+ exports.helpers = exports.default = void 0;
9
9
 
10
10
  require("source-map-support/register");
11
11
 
@@ -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
 
@@ -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
 
@@ -244,24 +244,38 @@ helpers._deleteCookie = async function _deleteCookie(cookieName) {
244
244
  await this.executeAtom('execute_script', [script, []]);
245
245
  };
246
246
 
247
- helpers.cacheWebElements = function cacheWebElements(rawElements) {
248
- if (!(_lodash.default.isArray(rawElements) || _lodash.default.isPlainObject(rawElements))) {
249
- throw new _appiumBaseDriver.errors.UnknownError(`Web element identifiers cannot be parsed from ` + JSON.stringify(rawElements));
247
+ helpers.cacheWebElement = function cacheWebElement(el) {
248
+ if (!_lodash.default.isPlainObject(el)) {
249
+ return el;
250
250
  }
251
251
 
252
- const cacheElement = el => {
253
- const elId = _appiumSupport.util.unwrapElement(el);
252
+ const elId = _appiumSupport.util.unwrapElement(el);
254
253
 
255
- if (!isValidElementIdentifier(elId)) {
256
- throw new _appiumBaseDriver.errors.UnknownError(`The web element identifier ${JSON.stringify(elId)} cannot be parsed`);
257
- }
254
+ if (!isValidElementIdentifier(elId)) {
255
+ return el;
256
+ }
258
257
 
259
- const cacheId = _lodash.default.includes(elId, ':') ? elId : _appiumSupport.util.uuidV4();
260
- this.webElementsCache.set(cacheId, elId);
261
- return _appiumSupport.util.wrapElement(cacheId);
262
- };
258
+ const cacheId = _lodash.default.includes(elId, ':') ? elId : _appiumSupport.util.uuidV4();
259
+ this.webElementsCache.set(cacheId, elId);
260
+ return _appiumSupport.util.wrapElement(cacheId);
261
+ };
262
+
263
+ helpers.cacheWebElements = function cacheWebElements(response) {
264
+ const toCached = v => _lodash.default.isArray(v) || _lodash.default.isPlainObject(v) ? this.cacheWebElements(v) : v;
265
+
266
+ if (_lodash.default.isArray(response)) {
267
+ return response.map(toCached);
268
+ } else if (_lodash.default.isPlainObject(response)) {
269
+ const result = { ...response,
270
+ ...this.cacheWebElement(response)
271
+ };
272
+ return _lodash.default.toPairs(result).reduce((acc, [key, value]) => {
273
+ acc[key] = toCached(value);
274
+ return acc;
275
+ }, {});
276
+ }
263
277
 
264
- return _lodash.default.isArray(rawElements) ? rawElements.map(cacheElement) : cacheElement(rawElements);
278
+ return response;
265
279
  };
266
280
 
267
281
  extensions.findWebElementOrElements = async function findWebElementOrElements(strategy, selector, many, ctx) {
@@ -287,7 +301,7 @@ extensions.findWebElementOrElements = async function findWebElementOrElements(st
287
301
  return this.cacheWebElements(element);
288
302
  }
289
303
 
290
- if (!element || _lodash.default.size(element) === 0) {
304
+ if (_lodash.default.isEmpty(element)) {
291
305
  throw new _appiumBaseDriver.errors.NoSuchElementError();
292
306
  }
293
307
 
@@ -709,4 +723,4 @@ var _default = commands;
709
723
  exports.default = _default;require('source-map-support').install();
710
724
 
711
725
 
712
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy93ZWIuanMiXSwibmFtZXMiOlsiSVBIT05FX1RPUF9CQVJfSEVJR0hUIiwiSVBIT05FX1NDUk9MTEVEX1RPUF9CQVJfSEVJR0hUIiwiSVBIT05FX1hfU0NST0xMRURfT0ZGU0VUIiwiSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPUyIsIklQSE9ORV9YX05PVENIX09GRlNFVF9JT1NfMTMiLCJJUEhPTkVfTEFORFNDQVBFX1RPUF9CQVJfSEVJR0hUIiwiSVBIT05FX0JPVFRPTV9CQVJfT0ZGU0VUIiwiVEFCX0JBUl9PRkZTRVQiLCJJUEhPTkVfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUIiwiSVBBRF9XRUJfQ09PUkRfU01BUlRfQVBQX0JBTk5FUl9PRkZTRVQiLCJOT1RDSEVEX0RFVklDRV9TSVpFUyIsInciLCJoIiwiVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVIiLCJ1dGlsIiwiQVRPTV9XQUlUX1RJTUVPVVRfTVMiLCJBVE9NX0lOSVRJQUxfV0FJVF9NUyIsIk9OX09CU1RSVUNUSU5HX0FMRVJUX0VWRU5UIiwiVklTSUJMRSIsIklOVklTSUJMRSIsIkRFVEVDVCIsIlZJU0lCSUxJVElFUyIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJpc1ZhbGlkRWxlbWVudElkZW50aWZpZXIiLCJpZCIsIl8iLCJpc1N0cmluZyIsImlzTnVtYmVyIiwiaXNFbXB0eSIsImlzTmFOIiwic2V0RnJhbWUiLCJmcmFtZSIsImlzV2ViQ29udGV4dCIsImVycm9ycyIsIk5vdEltcGxlbWVudGVkRXJyb3IiLCJpc051bGwiLCJjdXJXZWJGcmFtZXMiLCJsb2ciLCJkZWJ1ZyIsImhhc0VsZW1lbnRJZCIsImF0b21zRWxlbWVudCIsImdldEF0b21zRWxlbWVudCIsInZhbHVlIiwiZXhlY3V0ZUF0b20iLCJXSU5ET1ciLCJ1bnNoaWZ0IiwiYXRvbSIsImlzVW5kZWZpbmVkIiwiTm9TdWNoRnJhbWVFcnJvciIsImdldENzc1Byb3BlcnR5IiwicHJvcGVydHlOYW1lIiwiZWwiLCJzdWJtaXQiLCJyZWZyZXNoIiwiZ2V0VXJsIiwicmVtb3RlIiwiZXhlY3V0ZSIsInRpdGxlIiwiZ2V0Q29va2llcyIsInNjcmlwdCIsImpzQ29va2llcyIsImNvb2tpZXMiLCJuYW1lIiwidG9QYWlycyIsImNvb2tpZVV0aWxzIiwiY3JlYXRlSldQQ29va2llIiwidW5kZWZpbmVkIiwicHVzaCIsImVyciIsImVycm9yIiwiVW5rbm93bkVycm9yIiwic2V0Q29va2llIiwiY29va2llIiwiY2xvbmUiLCJwYXRoIiwianNDb29raWUiLCJjcmVhdGVKU0Nvb2tpZSIsImV4cGlyZXMiLCJleHBpcnkiLCJEYXRlIiwidG9VVENTdHJpbmciLCJkb21haW4iLCJodHRwT25seSIsInNlY3VyZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJkZWxldGVDb29raWUiLCJjb29raWVOYW1lIiwiaW5kZXhPZiIsIm1hcCIsIl9kZWxldGVDb29raWUiLCJkZWxldGVDb29raWVzIiwibGVuZ3RoIiwid2ViQ29va2llIiwiZXhwaXJlQ29va2llIiwiY2FjaGVXZWJFbGVtZW50cyIsInJhd0VsZW1lbnRzIiwiaXNBcnJheSIsImlzUGxhaW5PYmplY3QiLCJjYWNoZUVsZW1lbnQiLCJlbElkIiwidW53cmFwRWxlbWVudCIsImNhY2hlSWQiLCJpbmNsdWRlcyIsInV1aWRWNCIsIndlYkVsZW1lbnRzQ2FjaGUiLCJzZXQiLCJ3cmFwRWxlbWVudCIsImZpbmRXZWJFbGVtZW50T3JFbGVtZW50cyIsInN0cmF0ZWd5Iiwic2VsZWN0b3IiLCJtYW55IiwiY3R4IiwiY29udGV4dEVsZW1lbnQiLCJpc05pbCIsImVsZW1lbnQiLCJkb0ZpbmQiLCJpbXBsaWNpdFdhaXRGb3JDb25kaXRpb24iLCJtZXNzYWdlIiwiaXNGdW5jdGlvbiIsIm1hdGNoIiwic2l6ZSIsIk5vU3VjaEVsZW1lbnRFcnJvciIsImNsaWNrV2ViQ29vcmRzIiwiY29vcmRzIiwidHJhbnNsYXRlV2ViQ29vcmRzIiwiY3VyV2ViQ29vcmRzIiwiY2xpY2tDb29yZHMiLCJhcmdzIiwiYWx3YXlzRGVmYXVsdEZyYW1lIiwiZnJhbWVzIiwicHJvbWlzZSIsIndhaXRGb3JBdG9tIiwiZXhlY3V0ZUF0b21Bc3luYyIsInJlc3BvbnNlVXJsIiwiQiIsInJlc29sdmUiLCJyZWplY3QiLCJhc3luY1Byb21pc2UiLCJlbE9ySWQiLCJoYXMiLCJTdGFsZUVsZW1lbnRSZWZlcmVuY2VFcnJvciIsIkVMRU1FTlQiLCJnZXQiLCJjb252ZXJ0RWxlbWVudHNGb3JBdG9tcyIsImFyZyIsImdldEVsZW1lbnRJZCIsImhhc1ZhbHVlIiwiZ2V0U2FmYXJpSXNJcGhvbmUiLCJtZW1vaXplIiwidXNlckFnZW50IiwidG9Mb3dlckNhc2UiLCJ3YXJuIiwiZ2V0U2FmYXJpRGV2aWNlU2l6ZSIsIndpZHRoIiwiaGVpZ2h0Iiwibm9ybUhlaWdodCIsIm5vcm1XaWR0aCIsImdldFNhZmFyaUlzTm90Y2hlZCIsImRldmljZSIsImdldEV4dHJhVHJhbnNsYXRlV2ViQ29vcmRzT2Zmc2V0Iiwid3ZQb3MiLCJyZWFsRGltcyIsInRvcE9mZnNldCIsImJvdHRvbU9mZnNldCIsIm5hdGl2ZVdlYlRhcFRhYkJhclZpc2liaWxpdHkiLCJuYXRpdmVXZWJUYXBTbWFydEFwcEJhbm5lclZpc2liaWxpdHkiLCJzZXR0aW5ncyIsImdldFNldHRpbmdzIiwidGFiQmFyVmlzaWJpbGl0eSIsImxvd2VyQ2FzZSIsImJhbm5lclZpc2liaWxpdHkiLCJpc0lwaG9uZSIsImlzTm90Y2hlZCIsIm9yaWVudGF0aW9uIiwibm90Y2hPZmZzZXQiLCJjb21wYXJlVmVyc2lvbnMiLCJvcHRzIiwicGxhdGZvcm1WZXJzaW9uIiwiaXNTY3JvbGxlZCIsImNvbnRleHRzQW5kVmlld3MiLCJnZXRDb250ZXh0c0FuZFZpZXdzIiwidGFicyIsImZpbHRlciIsInN0YXJ0c1dpdGgiLCJnZXRFeHRyYU5hdGl2ZVdlYlRhcE9mZnNldCIsInkiLCJvZmZzZXQiLCJiYW5uZXJzIiwiZmluZE5hdGl2ZUVsZW1lbnRPckVsZW1lbnRzIiwidGFwV2ViRWxlbWVudE5hdGl2ZWx5IiwiZHJpdmVyIiwidGV4dCIsImVscyIsInJlY3QiLCJwcm94eUNvbW1hbmQiLCJlbDIiLCJyZWN0MiIsIngiLCJNYXRoIiwicm91bmQiLCJuYXRpdmVXZWJUYXAiLCJuYXRpdmVXZWJUYXBTdHJpY3QiLCJQcm9taXNlIiwiYWxsIiwiY29vcmRpbmF0ZXMiLCJwZXJmb3JtVG91Y2giLCJhY3Rpb24iLCJvcHRpb25zIiwid2VidmlldyIsImlnbiIsIkVycm9yIiwiY21kIiwid3ZEaW1zIiwiaW1wbGljaXRXYWl0TXMiLCJzZXRJbXBsaWNpdFdhaXQiLCJ4UmF0aW8iLCJ5UmF0aW8iLCJuZXdDb29yZHMiLCJjaGVja0ZvckFsZXJ0IiwiZ2V0QWxlcnRUZXh0IiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsInN0YXJ0IiwidGltZWRBdG9tUHJvbWlzZSIsInRpbWVvdXQiLCJoYW5kbGVQcm9taXNlRXJyb3IiLCJwIiwib3JpZ2luYWxFcnJvciIsIkFnZ3JlZ2F0ZUVycm9yIiwiVGltZW91dEVycm9yIiwiZ2V0RHVyYXRpb24iLCJhc01pbGxpU2Vjb25kcyIsInRvRml4ZWQiLCJhbnkiLCJkZWxheSIsImlzRnVsZmlsbGVkIiwiX3dhaXRpbmdBdG9tcyIsImNvdW50IiwiYWxlcnROb3RpZmllciIsIkV2ZW50RW1pdHRlciIsImFsZXJ0TW9uaXRvciIsIm9uQWxlcnRDYWxsYmFjayIsImlzUmVzb2x2ZWQiLCJlbWl0IiwiVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yIiwib25jZSIsInRoZW4iLCJjYXRjaCIsInJlbW92ZUxpc3RlbmVyIiwibW9iaWxlV2ViTmF2IiwibmF2VHlwZSIsImFsbG93TmF2aWdhdGlvbldpdGhvdXRSZWxvYWQiLCJPYmplY3QiLCJhc3NpZ24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEscUJBQXFCLEdBQUcsRUFB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RWVELFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZXRyeUludGVydmFsIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgdXRpbCwgdGltaW5nIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IGVycm9ycywgaXNFcnJvclR5cGUgfSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuaW1wb3J0IGNvb2tpZVV0aWxzIGZyb20gJy4uL2Nvb2tpZXMnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcblxuY29uc3QgSVBIT05FX1RPUF9CQVJfSEVJR0hUID0gNzE7XG5jb25zdCBJUEhPTkVfU0NST0xMRURfVE9QX0JBUl9IRUlHSFQgPSA0MTtcbmNvbnN0IElQSE9ORV9YX1NDUk9MTEVEX09GRlNFVCA9IDU1O1xuY29uc3QgSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPUyA9IDI0O1xuY29uc3QgSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPU18xMyA9IDIwO1xuXG5jb25zdCBJUEhPTkVfTEFORFNDQVBFX1RPUF9CQVJfSEVJR0hUID0gNTE7XG5jb25zdCBJUEhPTkVfQk9UVE9NX0JBUl9PRkZTRVQgPSA0OTtcbmNvbnN0IFRBQl9CQVJfT0ZGU0VUID0gMzM7XG5jb25zdCBJUEhPTkVfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUID0gODQ7XG5jb25zdCBJUEFEX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVCA9IDk1O1xuXG5jb25zdCBOT1RDSEVEX0RFVklDRV9TSVpFUyA9IFtcbiAge3c6IDExMjUsIGg6IDI0MzZ9LCAvLyAxMSBQcm8sIFgsIFhzXG4gIHt3OiA4MjgsIGg6IDE3OTJ9LCAvLyAxMSwgWHJcbiAge3c6IDEyNDIsIGg6IDI2ODh9LCAvLyAxMSBQcm8gTWF4LCBYcyBNYXhcbl07XG5cbmNvbnN0IHsgVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVIgfSA9IHV0aWw7XG5cbmNvbnN0IEFUT01fV0FJVF9USU1FT1VUX01TID0gMiAqIDYwMDAwO1xuY29uc3QgQVRPTV9JTklUSUFMX1dBSVRfTVMgPSAxMDAwO1xuXG5jb25zdCBPTl9PQlNUUlVDVElOR19BTEVSVF9FVkVOVCA9ICdhbGVydCc7XG5cbmNvbnN0IFZJU0lCTEUgPSAndmlzaWJsZSc7XG5jb25zdCBJTlZJU0lCTEUgPSAnaW52aXNpYmxlJztcbmNvbnN0IERFVEVDVCA9ICdkZXRlY3QnO1xuY29uc3QgVklTSUJJTElUSUVTID0gW1ZJU0lCTEUsIElOVklTSUJMRSwgREVURUNUXTtcblxuY29uc3QgY29tbWFuZHMgPSB7fSwgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50SWRlbnRpZmllciAoaWQpIHtcbiAgaWYgKCFfLmlzU3RyaW5nKGlkKSAmJiAhXy5pc051bWJlcihpZCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKF8uaXNTdHJpbmcoaWQpICYmIF8uaXNFbXB0eShpZCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKF8uaXNOdW1iZXIoaWQpICYmIGlzTmFOKGlkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuY29tbWFuZHMuc2V0RnJhbWUgPSBhc3luYyBmdW5jdGlvbiBzZXRGcmFtZSAoZnJhbWUpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBpZiAoXy5pc051bGwoZnJhbWUpKSB7XG4gICAgdGhpcy5jdXJXZWJGcmFtZXMgPSBbXTtcbiAgICBsb2cuZGVidWcoJ0xlYXZpbmcgd2ViIGZyYW1lIGFuZCBnb2luZyBiYWNrIHRvIGRlZmF1bHQgY29udGVudCcpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChoZWxwZXJzLmhhc0VsZW1lbnRJZChmcmFtZSkpIHtcbiAgICBjb25zdCBhdG9tc0VsZW1lbnQgPSB0aGlzLmdldEF0b21zRWxlbWVudChmcmFtZSk7XG4gICAgY29uc3QgdmFsdWUgPSBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdnZXRfZnJhbWVfd2luZG93JywgW2F0b21zRWxlbWVudF0pO1xuICAgIGxvZy5kZWJ1ZyhgRW50ZXJpbmcgbmV3IHdlYiBmcmFtZTogJyR7dmFsdWUuV0lORE9XfSdgKTtcbiAgICB0aGlzLmN1cldlYkZyYW1lcy51bnNoaWZ0KHZhbHVlLldJTkRPVyk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYXRvbSA9IF8uaXNOdW1iZXIoZnJhbWUpID8gJ2ZyYW1lX2J5X2luZGV4JyA6ICdmcmFtZV9ieV9pZF9vcl9uYW1lJztcbiAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oYXRvbSwgW2ZyYW1lXSk7XG4gICAgaWYgKF8uaXNOdWxsKHZhbHVlKSB8fCBfLmlzVW5kZWZpbmVkKHZhbHVlLldJTkRPVykpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuTm9TdWNoRnJhbWVFcnJvcigpO1xuICAgIH1cbiAgICBsb2cuZGVidWcoYEVudGVyaW5nIG5ldyB3ZWIgZnJhbWU6ICcke3ZhbHVlLldJTkRPV30nYCk7XG4gICAgdGhpcy5jdXJXZWJGcmFtZXMudW5zaGlmdCh2YWx1ZS5XSU5ET1cpO1xuICB9XG59O1xuXG5jb21tYW5kcy5nZXRDc3NQcm9wZXJ0eSA9IGFzeW5jIGZ1bmN0aW9uIGdldENzc1Byb3BlcnR5IChwcm9wZXJ0eU5hbWUsIGVsKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgY29uc3QgYXRvbXNFbGVtZW50ID0gdGhpcy5nZXRBdG9tc0VsZW1lbnQoZWwpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZ2V0X3ZhbHVlX29mX2Nzc19wcm9wZXJ0eScsIFthdG9tc0VsZW1lbnQsIHByb3BlcnR5TmFtZV0pO1xufTtcblxuY29tbWFuZHMuc3VibWl0ID0gYXN5bmMgZnVuY3Rpb24gc3VibWl0IChlbCkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGNvbnN0IGF0b21zRWxlbWVudCA9IHRoaXMuZ2V0QXRvbXNFbGVtZW50KGVsKTtcbiAgYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnc3VibWl0JywgW2F0b21zRWxlbWVudF0pO1xufTtcblxuY29tbWFuZHMucmVmcmVzaCA9IGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2ggKCkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ3JlZnJlc2gnLCBbXSk7XG59O1xuXG5jb21tYW5kcy5nZXRVcmwgPSBhc3luYyBmdW5jdGlvbiBnZXRVcmwgKCkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCB0aGlzLnJlbW90ZS5leGVjdXRlKCd3aW5kb3cubG9jYXRpb24uaHJlZicpO1xufTtcblxuY29tbWFuZHMudGl0bGUgPSBhc3luYyBmdW5jdGlvbiB0aXRsZSAoKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ3RpdGxlJywgW10sIHRydWUpO1xufTtcblxuY29tbWFuZHMuZ2V0Q29va2llcyA9IGFzeW5jIGZ1bmN0aW9uIGdldENvb2tpZXMgKCkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGxvZy5kZWJ1ZygnUmV0cmlldmluZyBhbGwgY29va2llcycpO1xuXG4gIGxldCBzY3JpcHQgPSAncmV0dXJuIGRvY3VtZW50LmNvb2tpZSc7XG4gIGxldCBqc0Nvb2tpZXMgPSBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdleGVjdXRlX3NjcmlwdCcsIFtzY3JpcHQsIFtdXSk7XG5cbiAgbGV0IGNvb2tpZXMgPSBbXTtcbiAgdHJ5IHtcbiAgICBmb3IgKGxldCBbbmFtZSwgdmFsdWVdIG9mIF8udG9QYWlycyhjb29raWVVdGlscy5jcmVhdGVKV1BDb29raWUodW5kZWZpbmVkLCBqc0Nvb2tpZXMpKSkge1xuICAgICAgY29va2llcy5wdXNoKHtuYW1lLCB2YWx1ZX0pO1xuICAgIH1cbiAgICByZXR1cm4gY29va2llcztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmVycm9yKGVycik7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Vbmtub3duRXJyb3IoYEVycm9yIHBhcnNpbmcgY29va2llcyBmcm9tIHJlc3VsdDogJyR7anNDb29raWVzfSdgKTtcbiAgfVxufTtcblxuY29tbWFuZHMuc2V0Q29va2llID0gYXN5bmMgZnVuY3Rpb24gc2V0Q29va2llIChjb29raWUpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBjb29raWUgPSBfLmNsb25lKGNvb2tpZSk7XG5cbiAgLy8gaWYgYHBhdGhgIGZpZWxkIGlzIG5vdCBzcGVjaWZpZWQsIFNhZmFyaSB3aWxsIG5vdCB1cGRhdGUgY29va2llcyBhcyBleHBlY3RlZDsgZWcgaXNzdWUgIzE3MDhcbiAgaWYgKCFjb29raWUucGF0aCkge1xuICAgIGNvb2tpZS5wYXRoID0gJy8nO1xuICB9XG5cbiAgY29uc3QganNDb29raWUgPSBjb29raWVVdGlscy5jcmVhdGVKU0Nvb2tpZShjb29raWUubmFtZSwgY29va2llLnZhbHVlLCB7XG4gICAgZXhwaXJlczogXy5pc051bWJlcihjb29raWUuZXhwaXJ5KSA/IChuZXcgRGF0ZShjb29raWUuZXhwaXJ5ICogMTAwMCkpLnRvVVRDU3RyaW5nKCkgOlxuICAgICAgY29va2llLmV4cGlyeSxcbiAgICBwYXRoOiBjb29raWUucGF0aCxcbiAgICBkb21haW46IGNvb2tpZS5kb21haW4sXG4gICAgaHR0cE9ubHk6IGNvb2tpZS5odHRwT25seSxcbiAgICBzZWN1cmU6IGNvb2tpZS5zZWN1cmVcbiAgfSk7XG4gIGxldCBzY3JpcHQgPSBgZG9jdW1lbnQuY29va2llID0gJHtKU09OLnN0cmluZ2lmeShqc0Nvb2tpZSl9YDtcbiAgYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZXhlY3V0ZV9zY3JpcHQnLCBbc2NyaXB0LCBbXV0pO1xufTtcblxuY29tbWFuZHMuZGVsZXRlQ29va2llID0gYXN5bmMgZnVuY3Rpb24gZGVsZXRlQ29va2llIChjb29raWVOYW1lKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgLy8gY2hlY2sgY29va2llIGV4aXN0ZW5jZVxuICBsZXQgY29va2llcyA9IGF3YWl0IHRoaXMuZ2V0Q29va2llcygpO1xuICBpZiAoXy5pbmRleE9mKF8ubWFwKGNvb2tpZXMsICduYW1lJyksIGNvb2tpZU5hbWUpID09PSAtMSkge1xuICAgIGxvZy5kZWJ1ZyhgQ29va2llICcke2Nvb2tpZU5hbWV9JyBub3QgZm91bmQuIElnbm9yaW5nLmApO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuX2RlbGV0ZUNvb2tpZShjb29raWVOYW1lKTtcbn07XG5cbmNvbW1hbmRzLmRlbGV0ZUNvb2tpZXMgPSBhc3luYyBmdW5jdGlvbiBkZWxldGVDb29raWVzICgpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBsZXQgY29va2llcyA9IGF3YWl0IHRoaXMuZ2V0Q29va2llcygpO1xuICBpZiAoY29va2llcy5sZW5ndGgpIHtcbiAgICBmb3IgKGxldCBjb29raWUgb2YgY29va2llcykge1xuICAgICAgYXdhaXQgdGhpcy5fZGVsZXRlQ29va2llKGNvb2tpZS5uYW1lKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5oZWxwZXJzLl9kZWxldGVDb29raWUgPSBhc3luYyBmdW5jdGlvbiBfZGVsZXRlQ29va2llIChjb29raWVOYW1lKSB7XG4gIGxvZy5kZWJ1ZyhgRGVsZXRpbmcgY29va2llICcke2Nvb2tpZU5hbWV9J2ApO1xuICBsZXQgd2ViQ29va2llID0gY29va2llVXRpbHMuZXhwaXJlQ29va2llKGNvb2tpZU5hbWUsIHtwYXRoOiAnLyd9KTtcbiAgbGV0IHNjcmlwdCA9IGBkb2N1bWVudC5jb29raWUgPSAke0pTT04uc3RyaW5naWZ5KHdlYkNvb2tpZSl9YDtcbiAgYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZXhlY3V0ZV9zY3JpcHQnLCBbc2NyaXB0LCBbXV0pO1xufTtcblxuaGVscGVycy5jYWNoZVdlYkVsZW1lbnRzID0gZnVuY3Rpb24gY2FjaGVXZWJFbGVtZW50cyAocmF3RWxlbWVudHMpIHtcbiAgaWYgKCEoXy5pc0FycmF5KHJhd0VsZW1lbnRzKSB8fCBfLmlzUGxhaW5PYmplY3QocmF3RWxlbWVudHMpKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkVycm9yKGBXZWIgZWxlbWVudCBpZGVudGlmaWVycyBjYW5ub3QgYmUgcGFyc2VkIGZyb20gYCArXG4gICAgICBKU09OLnN0cmluZ2lmeShyYXdFbGVtZW50cykpO1xuICB9XG5cbiAgY29uc3QgY2FjaGVFbGVtZW50ID0gKGVsKSA9PiB7XG4gICAgY29uc3QgZWxJZCA9IHV0aWwudW53cmFwRWxlbWVudChlbCk7XG4gICAgaWYgKCFpc1ZhbGlkRWxlbWVudElkZW50aWZpZXIoZWxJZCkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkVycm9yKGBUaGUgd2ViIGVsZW1lbnQgaWRlbnRpZmllciAke0pTT04uc3RyaW5naWZ5KGVsSWQpfSBjYW5ub3QgYmUgcGFyc2VkYCk7XG4gICAgfVxuICAgIC8vIEluIG5ld2VyIGRlYnVnZ2VyIHJlbGVhc2VzIGVsZW1lbnQgaWRlbnRpZmllcnMgbG9vayBsaWtlIGA6d2RjOjE2MjgxNTE2NDkzMjVgXG4gICAgLy8gV2UgYXNzdW1lIGl0IGlzIHNhZmUgdG8gdXNlIHRoZXNlIHRvIGlkZW50aWZ5IGNhY2hlZCBlbGVtZW50c1xuICAgIGNvbnN0IGNhY2hlSWQgPSBfLmluY2x1ZGVzKGVsSWQsICc6JykgPyBlbElkIDogdXRpbC51dWlkVjQoKTtcbiAgICB0aGlzLndlYkVsZW1lbnRzQ2FjaGUuc2V0KGNhY2hlSWQsIGVsSWQpO1xuICAgIHJldHVybiB1dGlsLndyYXBFbGVtZW50KGNhY2hlSWQpO1xuICB9O1xuXG4gIHJldHVybiBfLmlzQXJyYXkocmF3RWxlbWVudHMpID8gcmF3RWxlbWVudHMubWFwKGNhY2hlRWxlbWVudCkgOiBjYWNoZUVsZW1lbnQocmF3RWxlbWVudHMpO1xufTtcblxuZXh0ZW5zaW9ucy5maW5kV2ViRWxlbWVudE9yRWxlbWVudHMgPSBhc3luYyBmdW5jdGlvbiBmaW5kV2ViRWxlbWVudE9yRWxlbWVudHMgKHN0cmF0ZWd5LCBzZWxlY3RvciwgbWFueSwgY3R4KSB7XG4gIGNvbnN0IGNvbnRleHRFbGVtZW50ID0gXy5pc05pbChjdHgpID8gbnVsbCA6IHRoaXMuZ2V0QXRvbXNFbGVtZW50KGN0eCk7XG4gIGxldCBlbGVtZW50O1xuICBsZXQgZG9GaW5kID0gYXN5bmMgKCkgPT4ge1xuICAgIGVsZW1lbnQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKGBmaW5kX2VsZW1lbnQke21hbnkgPyAncycgOiAnJ31gLCBbc3RyYXRlZ3ksIHNlbGVjdG9yLCBjb250ZXh0RWxlbWVudF0pO1xuICAgIHJldHVybiAhXy5pc051bGwoZWxlbWVudCk7XG4gIH07XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5pbXBsaWNpdFdhaXRGb3JDb25kaXRpb24oZG9GaW5kKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyci5tZXNzYWdlICYmIF8uaXNGdW5jdGlvbihlcnIubWVzc2FnZS5tYXRjaCkgJiYgZXJyLm1lc3NhZ2UubWF0Y2goL0NvbmRpdGlvbiB1bm1ldC8pKSB7XG4gICAgICAvLyBjb25kaXRpb24gd2FzIG5vdCBtZXQgc2V0dGluZyByZXMgdG8gZW1wdHkgYXJyYXlcbiAgICAgIGVsZW1lbnQgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVXZWJFbGVtZW50cyhlbGVtZW50KTtcbiAgfVxuICBpZiAoIWVsZW1lbnQgfHwgXy5zaXplKGVsZW1lbnQpID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob1N1Y2hFbGVtZW50RXJyb3IoKTtcbiAgfVxuICByZXR1cm4gdGhpcy5jYWNoZVdlYkVsZW1lbnRzKGVsZW1lbnQpO1xufTtcblxuZXh0ZW5zaW9ucy5jbGlja1dlYkNvb3JkcyA9IGFzeW5jIGZ1bmN0aW9uIGNsaWNrV2ViQ29vcmRzICgpIHtcbiAgbGV0IGNvb3JkcyA9IGF3YWl0IHRoaXMudHJhbnNsYXRlV2ViQ29vcmRzKHRoaXMuY3VyV2ViQ29vcmRzKTtcbiAgYXdhaXQgdGhpcy5jbGlja0Nvb3Jkcyhjb29yZHMpO1xufTtcblxuaGVscGVycy5leGVjdXRlQXRvbSA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVBdG9tIChhdG9tLCBhcmdzLCBhbHdheXNEZWZhdWx0RnJhbWUgPSBmYWxzZSkge1xuICBsZXQgZnJhbWVzID0gYWx3YXlzRGVmYXVsdEZyYW1lID09PSB0cnVlID8gW10gOiB0aGlzLmN1cldlYkZyYW1lcztcbiAgbGV0IHByb21pc2UgPSB0aGlzLnJlbW90ZS5leGVjdXRlQXRvbShhdG9tLCBhcmdzLCBmcmFtZXMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy53YWl0Rm9yQXRvbShwcm9taXNlKTtcbn07XG5cbmhlbHBlcnMuZXhlY3V0ZUF0b21Bc3luYyA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVBdG9tQXN5bmMgKGF0b20sIGFyZ3MsIHJlc3BvbnNlVXJsKSB7XG4gIC8vIHNhdmUgdGhlIHJlc29sdmUgYW5kIHJlamVjdCBtZXRob2RzIG9mIHRoZSBwcm9taXNlIHRvIGJlIHdhaXRlZCBmb3JcbiAgbGV0IHByb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdGhpcy5hc3luY1Byb21pc2UgPSB7cmVzb2x2ZSwgcmVqZWN0fTtcbiAgfSk7XG4gIGF3YWl0IHRoaXMucmVtb3RlLmV4ZWN1dGVBdG9tQXN5bmMoYXRvbSwgYXJncywgdGhpcy5jdXJXZWJGcmFtZXMsIHJlc3BvbnNlVXJsKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2FpdEZvckF0b20ocHJvbWlzZSk7XG59O1xuXG5oZWxwZXJzLmdldEF0b21zRWxlbWVudCA9IGZ1bmN0aW9uIGdldEF0b21zRWxlbWVudCAoZWxPcklkKSB7XG4gIGNvbnN0IGVsSWQgPSB1dGlsLnVud3JhcEVsZW1lbnQoZWxPcklkKTtcbiAgaWYgKCF0aGlzLndlYkVsZW1lbnRzQ2FjaGUuaGFzKGVsSWQpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5TdGFsZUVsZW1lbnRSZWZlcmVuY2VFcnJvcigpO1xuICB9XG4gIHJldHVybiB7RUxFTUVOVDogdGhpcy53ZWJFbGVtZW50c0NhY2hlLmdldChlbElkKX07XG59O1xuXG5oZWxwZXJzLmNvbnZlcnRFbGVtZW50c0ZvckF0b21zID0gZnVuY3Rpb24gY29udmVydEVsZW1lbnRzRm9yQXRvbXMgKGFyZ3MgPSBbXSkge1xuICByZXR1cm4gYXJncy5tYXAoKGFyZykgPT4ge1xuICAgIGlmIChoZWxwZXJzLmhhc0VsZW1lbnRJZChhcmcpKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRBdG9tc0VsZW1lbnQoYXJnKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoIWlzRXJyb3JUeXBlKGVyciwgZXJyb3JzLlN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yKSkge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFyZztcbiAgICB9XG4gICAgcmV0dXJuIF8uaXNBcnJheShhcmcpID8gdGhpcy5jb252ZXJ0RWxlbWVudHNGb3JBdG9tcyhhcmcpIDogYXJnO1xuICB9KTtcbn07XG5cbmhlbHBlcnMuZ2V0RWxlbWVudElkID0gZnVuY3Rpb24gZ2V0RWxlbWVudElkIChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LkVMRU1FTlQgfHwgZWxlbWVudFtXM0NfV0VCX0VMRU1FTlRfSURFTlRJRklFUl07XG59O1xuXG5oZWxwZXJzLmhhc0VsZW1lbnRJZCA9IGZ1bmN0aW9uIGhhc0VsZW1lbnRJZCAoZWxlbWVudCkge1xuICByZXR1cm4gdXRpbC5oYXNWYWx1ZShlbGVtZW50KSAmJiAodXRpbC5oYXNWYWx1ZShlbGVtZW50LkVMRU1FTlQpIHx8IHV0aWwuaGFzVmFsdWUoZWxlbWVudFtXM0NfV0VCX0VMRU1FTlRfSURFTlRJRklFUl0pKTtcbn07XG5cbmV4dGVuc2lvbnMuZ2V0U2FmYXJpSXNJcGhvbmUgPSBfLm1lbW9pemUoYXN5bmMgZnVuY3Rpb24gZ2V0U2FmYXJpSXNJcGhvbmUgKCkge1xuICB0cnkge1xuICAgIGNvbnN0IHVzZXJBZ2VudCA9IGF3YWl0IHRoaXMuZXhlY3V0ZSgncmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQnKTtcbiAgICByZXR1cm4gdXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2lwaG9uZScpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cud2FybihgVW5hYmxlIHRvIGZpbmQgZGV2aWNlIHR5cGUgZnJvbSB1c2VyYWdlbnQuIEFzc3VtaW5nIGlQaG9uZWApO1xuICAgIGxvZy5kZWJ1ZyhgRXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59KTtcblxuZXh0ZW5zaW9ucy5nZXRTYWZhcmlEZXZpY2VTaXplID0gXy5tZW1vaXplKGFzeW5jIGZ1bmN0aW9uIGdldFNhZmFyaURldmljZVNpemUgKCkge1xuICBjb25zdCBzY3JpcHQgPSAncmV0dXJuIHtoZWlnaHQ6IHdpbmRvdy5zY3JlZW4uYXZhaWxIZWlnaHQgKiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbywgd2lkdGg6IHdpbmRvdy5zY3JlZW4uYXZhaWxXaWR0aCAqIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfTsnO1xuICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSBhd2FpdCB0aGlzLmV4ZWN1dGUoc2NyaXB0KTtcbiAgY29uc3QgW25vcm1IZWlnaHQsIG5vcm1XaWR0aF0gPSBoZWlnaHQgPiB3aWR0aCA/IFtoZWlnaHQsIHdpZHRoXSA6IFt3aWR0aCwgaGVpZ2h0XTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogbm9ybVdpZHRoLFxuICAgIGhlaWdodDogbm9ybUhlaWdodCxcbiAgfTtcbn0pO1xuXG5leHRlbnNpb25zLmdldFNhZmFyaUlzTm90Y2hlZCA9IF8ubWVtb2l6ZShhc3luYyBmdW5jdGlvbiBnZXRTYWZhcmlJc05vdGNoZWQgKCkge1xuICB0cnkge1xuICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IGF3YWl0IHRoaXMuZ2V0U2FmYXJpRGV2aWNlU2l6ZSgpO1xuICAgIGZvciAoY29uc3QgZGV2aWNlIG9mIE5PVENIRURfREVWSUNFX1NJWkVTKSB7XG4gICAgICBpZiAoZGV2aWNlLncgPT09IHdpZHRoICYmIGRldmljZS5oID09PSBoZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cud2FybihgVW5hYmxlIHRvIGZpbmQgZGV2aWNlIHR5cGUgZnJvbSBkaW1lbnNpb25zLiBBc3N1bWluZyB0aGUgZGV2aWNlIGlzIG5vdCBub3RjaGVkYCk7XG4gICAgbG9nLmRlYnVnKGBFcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59KTtcblxuZXh0ZW5zaW9ucy5nZXRFeHRyYVRyYW5zbGF0ZVdlYkNvb3Jkc09mZnNldCA9IGFzeW5jIGZ1bmN0aW9uIGdldEV4dHJhVHJhbnNsYXRlV2ViQ29vcmRzT2Zmc2V0ICh3dlBvcywgcmVhbERpbXMpIHtcbiAgbGV0IHRvcE9mZnNldCA9IDA7XG4gIGxldCBib3R0b21PZmZzZXQgPSAwO1xuXG4gIC8vIE5vIG5lZWQgdG8gY2hlY2sgd2hldGhlciB0aGUgU21hcnQgQXBwIEJhbm5lciBvciBUYWIgQmFyIGlzIHZpc2libGUgb3Igbm90XG4gIC8vIGlmIGFscmVhZHkgZGVmaW5lZCBieSBuYXRpdmVXZWJUYXBUYWJCYXJWaXNpYmlsaXR5IG9yIG5hdGl2ZVdlYlRhcFNtYXJ0QXBwQmFubmVyVmlzaWJpbGl0eSBpbiBzZXR0aW5ncy5cbiAgY29uc3Qge1xuICAgIG5hdGl2ZVdlYlRhcFRhYkJhclZpc2liaWxpdHksXG4gICAgbmF0aXZlV2ViVGFwU21hcnRBcHBCYW5uZXJWaXNpYmlsaXR5XG4gIH0gPSBhd2FpdCB0aGlzLnNldHRpbmdzLmdldFNldHRpbmdzKCk7XG4gIGxldCB0YWJCYXJWaXNpYmlsaXR5ID0gXy5sb3dlckNhc2UobmF0aXZlV2ViVGFwVGFiQmFyVmlzaWJpbGl0eSk7XG4gIGxldCBiYW5uZXJWaXNpYmlsaXR5ID0gXy5sb3dlckNhc2UobmF0aXZlV2ViVGFwU21hcnRBcHBCYW5uZXJWaXNpYmlsaXR5KTtcbiAgaWYgKCFWSVNJQklMSVRJRVMuaW5jbHVkZXModGFiQmFyVmlzaWJpbGl0eSkpIHtcbiAgICB0YWJCYXJWaXNpYmlsaXR5ID0gREVURUNUO1xuICB9XG4gIGlmICghVklTSUJJTElUSUVTLmluY2x1ZGVzKGJhbm5lclZpc2liaWxpdHkpKSB7XG4gICAgYmFubmVyVmlzaWJpbGl0eSA9IERFVEVDVDtcbiAgfVxuXG4gIGNvbnN0IGlzSXBob25lID0gYXdhaXQgdGhpcy5nZXRTYWZhcmlJc0lwaG9uZSgpO1xuICBjb25zdCBpc05vdGNoZWQgPSBpc0lwaG9uZSAmJiBhd2FpdCB0aGlzLmdldFNhZmFyaUlzTm90Y2hlZCgpO1xuXG4gIGNvbnN0IG9yaWVudGF0aW9uID0gcmVhbERpbXMuaCA+IHJlYWxEaW1zLncgPyAnUE9SVFJBSVQnIDogJ0xBTkRTQ0FQRSc7XG5cbiAgY29uc3Qgbm90Y2hPZmZzZXQgPSBpc05vdGNoZWRcbiAgICA/IHV0aWwuY29tcGFyZVZlcnNpb25zKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sICc9JywgJzEzLjAnKVxuICAgICAgPyBJUEhPTkVfWF9OT1RDSF9PRkZTRVRfSU9TXzEzXG4gICAgICA6IElQSE9ORV9YX05PVENIX09GRlNFVF9JT1NcbiAgICA6IDA7XG5cbiAgY29uc3QgaXNTY3JvbGxlZCA9IGF3YWl0IHRoaXMuZXhlY3V0ZSgncmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgPiAwJyk7XG4gIGlmIChpc1Njcm9sbGVkKSB7XG4gICAgdG9wT2Zmc2V0ID0gSVBIT05FX1NDUk9MTEVEX1RPUF9CQVJfSEVJR0hUICsgbm90Y2hPZmZzZXQ7XG5cbiAgICBpZiAoaXNOb3RjaGVkKSB7XG4gICAgICB0b3BPZmZzZXQgLT0gSVBIT05FX1hfU0NST0xMRURfT0ZGU0VUO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBpUGhvbmUgaXMgbGFuZHNjYXBlIHRoZW4gdGhlcmUgaXMgbm8gdG9wIGJhclxuICAgIGlmIChvcmllbnRhdGlvbiA9PT0gJ0xBTkRTQ0FQRScgJiYgaXNJcGhvbmUpIHtcbiAgICAgIHRvcE9mZnNldCA9IDA7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRvcE9mZnNldCA9IElQSE9ORV9UT1BfQkFSX0hFSUdIVCArIG5vdGNoT2Zmc2V0O1xuXG4gICAgaWYgKGlzSXBob25lKSB7XG4gICAgICBpZiAob3JpZW50YXRpb24gPT09ICdQT1JUUkFJVCcpIHtcbiAgICAgICAgLy8gVGhlIGJvdHRvbSBiYXIgaXMgb25seSB2aXNpYmxlIHdoZW4gcG9ydHJhaXRcbiAgICAgICAgYm90dG9tT2Zmc2V0ID0gSVBIT05FX0JPVFRPTV9CQVJfT0ZGU0VUO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9wT2Zmc2V0ID0gSVBIT05FX0xBTkRTQ0FQRV9UT1BfQkFSX0hFSUdIVDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3JpZW50YXRpb24gPT09ICdMQU5EU0NBUEUnIHx8ICFpc0lwaG9uZSkge1xuICAgICAgaWYgKHRhYkJhclZpc2liaWxpdHkgPT09IFZJU0lCTEUpIHtcbiAgICAgICAgdG9wT2Zmc2V0ICs9IFRBQl9CQVJfT0ZGU0VUO1xuICAgICAgfSBlbHNlIGlmICh0YWJCYXJWaXNpYmlsaXR5ID09PSBERVRFQ1QpIHtcbiAgICAgICAgLy8gVGFicyBvbmx5IGFwcGVhciBpZiB0aGUgZGV2aWNlIGlzIGxhbmRzY2FwZSBvciBpZiBpdCdzIGFuIGlQYWQgc28gd2Ugb25seSBjaGVjayB2aXNpYmlsaXR5IGluIHRoaXMgY2FzZVxuICAgICAgICAvLyBBc3N1bWUgdGhhdCBlYWNoIHRhYiBiYXIgaXMgYSBXZWJWaWV3XG4gICAgICAgIGNvbnN0IGNvbnRleHRzQW5kVmlld3MgPSBhd2FpdCB0aGlzLmdldENvbnRleHRzQW5kVmlld3MoKTtcbiAgICAgICAgY29uc3QgdGFicyA9IGNvbnRleHRzQW5kVmlld3MuZmlsdGVyKChjdHgpID0+IGN0eC5pZC5zdGFydHNXaXRoKCdXRUJWSUVXXycpKTtcblxuICAgICAgICBpZiAodGFicy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgbG9nLmRlYnVnKGBGb3VuZCAke3RhYnMubGVuZ3RofSB0YWJzLiBBc3N1bWluZyB0aGUgdGFiIGJhciBpcyB2aXNpYmxlYCk7XG4gICAgICAgICAgdG9wT2Zmc2V0ICs9IFRBQl9CQVJfT0ZGU0VUO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdG9wT2Zmc2V0ICs9IGF3YWl0IHRoaXMuZ2V0RXh0cmFOYXRpdmVXZWJUYXBPZmZzZXQoaXNJcGhvbmUsIGJhbm5lclZpc2liaWxpdHkpO1xuXG4gIHd2UG9zLnkgKz0gdG9wT2Zmc2V0O1xuICByZWFsRGltcy5oIC09ICh0b3BPZmZzZXQgKyBib3R0b21PZmZzZXQpO1xufTtcblxuZXh0ZW5zaW9ucy5nZXRFeHRyYU5hdGl2ZVdlYlRhcE9mZnNldCA9IGFzeW5jIGZ1bmN0aW9uIGdldEV4dHJhTmF0aXZlV2ViVGFwT2Zmc2V0IChpc0lwaG9uZSwgYmFubmVyVmlzaWJpbGl0eSkge1xuICBsZXQgb2Zmc2V0ID0gMDtcblxuICBpZiAoYmFubmVyVmlzaWJpbGl0eSA9PT0gVklTSUJMRSkge1xuICAgIG9mZnNldCArPSBpc0lwaG9uZSA/XG4gICAgICBJUEhPTkVfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUIDpcbiAgICAgIElQQURfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUO1xuICB9IGVsc2UgaWYgKGJhbm5lclZpc2liaWxpdHkgPT09IERFVEVDVCkge1xuICAgIC8vIHRyeSB0byBzZWUgaWYgdGhlcmUgaXMgYW4gU21hcnQgQXBwIEJhbm5lclxuICAgIGNvbnN0IGJhbm5lcnMgPSBhd2FpdCB0aGlzLmZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cygnYWNjZXNzaWJpbGl0eSBpZCcsICdDbG9zZSBhcHAgZG93bmxvYWQgb2ZmZXInLCB0cnVlKTtcbiAgICBpZiAoYmFubmVycy5sZW5ndGggPiAwKSB7XG4gICAgICBvZmZzZXQgKz0gaXNJcGhvbmUgP1xuICAgICAgICBJUEhPTkVfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUIDpcbiAgICAgICAgSVBBRF9XRUJfQ09PUkRfU01BUlRfQVBQX0JBTk5FUl9PRkZTRVQ7XG4gICAgfVxuICB9XG5cbiAgbG9nLmRlYnVnKGBBZGRpdGlvbmFsIG5hdGl2ZSB3ZWIgdGFwIG9mZnNldCBjb21wdXRlZDogJHtvZmZzZXR9YCk7XG4gIHJldHVybiBvZmZzZXQ7XG59O1xuXG5hc3luYyBmdW5jdGlvbiB0YXBXZWJFbGVtZW50TmF0aXZlbHkgKGRyaXZlciwgYXRvbXNFbGVtZW50KSB7XG4gIC8vIHRyeSB0byBnZXQgdGhlIHRleHQgb2YgdGhlIGVsZW1lbnQsIHdoaWNoIHdpbGwgYmUgYWNjZXNzaWJsZSBpbiB0aGVcbiAgLy8gbmF0aXZlIGNvbnRleHRcbiAgdHJ5IHtcbiAgICBsZXQgdGV4dCA9IGF3YWl0IGRyaXZlci5leGVjdXRlQXRvbSgnZ2V0X3RleHQnLCBbYXRvbXNFbGVtZW50XSk7XG4gICAgaWYgKCF0ZXh0KSB7XG4gICAgICB0ZXh0ID0gYXdhaXQgZHJpdmVyLmV4ZWN1dGVBdG9tKCdnZXRfYXR0cmlidXRlX3ZhbHVlJywgW2F0b21zRWxlbWVudCwgJ3ZhbHVlJ10pO1xuICAgIH1cblxuICAgIGlmICh0ZXh0KSB7XG4gICAgICBjb25zdCBlbHMgPSBhd2FpdCBkcml2ZXIuZmluZE5hdGl2ZUVsZW1lbnRPckVsZW1lbnRzKCdhY2Nlc3NpYmlsaXR5IGlkJywgdGV4dCwgdHJ1ZSk7XG4gICAgICBpZiAoZWxzLmxlbmd0aCA9PT0gMSB8fCBlbHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGNvbnN0IGVsID0gZWxzWzBdO1xuICAgICAgICAvLyB1c2UgdGFwIGJlY2F1c2Ugb24gaU9TIDExLjIgYW5kIGJlbG93IGBuYXRpdmVDbGlja2AgY3Jhc2hlcyBXREFcbiAgICAgICAgY29uc3QgcmVjdCA9IGF3YWl0IGRyaXZlci5wcm94eUNvbW1hbmQoYC9lbGVtZW50LyR7dXRpbC51bndyYXBFbGVtZW50KGVsKX0vcmVjdGAsICdHRVQnKTtcbiAgICAgICAgaWYgKGVscy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICBjb25zdCBlbDIgPSBlbHNbMV07XG4gICAgICAgICAgY29uc3QgcmVjdDIgPSBhd2FpdCBkcml2ZXIucHJveHlDb21tYW5kKGAvZWxlbWVudC8ke3V0aWwudW53cmFwRWxlbWVudChlbDIpfS9yZWN0YCwgJ0dFVCcpO1xuXG4gICAgICAgICAgaWYgKChyZWN0LnggIT09IHJlY3QyLnggfHwgcmVjdC55ICE9PSByZWN0Mi55KSB8fFxuICAgICAgICAgIChyZWN0LndpZHRoICE9PSByZWN0Mi53aWR0aCB8fCByZWN0LmhlaWdodCAhPT0gcmVjdDIuaGVpZ2h0KSkge1xuICAgICAgICAgICAgLy8gVGhlc2UgMiBuYXRpdmUgZWxlbWVudHMgYXJlIG5vdCByZWZlcnJpbmcgdG8gdGhlIHNhbWUgd2ViIGVsZW1lbnRcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgICAgIHg6IE1hdGgucm91bmQocmVjdC54ICsgcmVjdC53aWR0aCAvIDIpLFxuICAgICAgICAgIHk6IE1hdGgucm91bmQocmVjdC55ICsgcmVjdC5oZWlnaHQgLyAyKSxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgZHJpdmVyLmNsaWNrQ29vcmRzKGNvb3Jkcyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gYW55IGZhaWx1cmUgc2hvdWxkIGZhbGwgdGhyb3VnaCBhbmQgdHJpZ2dlciB0aGUgbW9yZSBlbGFib3JhdGVcbiAgICAvLyBtZXRob2Qgb2YgY2xpY2tpbmdcbiAgICBsb2cud2FybihgRXJyb3IgYXR0ZW1wdGluZyB0byBjbGljazogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4dGVuc2lvbnMubmF0aXZlV2ViVGFwID0gYXN5bmMgZnVuY3Rpb24gbmF0aXZlV2ViVGFwIChlbCkge1xuICBjb25zdCBhdG9tc0VsZW1lbnQgPSB0aGlzLmdldEF0b21zRWxlbWVudChlbCk7XG5cbiAgLy8gaWYgc3RyaWN0IG5hdGl2ZSB0YXAsIGRvIG5vdCB0cnkgdG8gZG8gaXQgd2l0aCBXREEgZGlyZWN0bHlcbiAgaWYgKCEoYXdhaXQgdGhpcy5zZXR0aW5ncy5nZXRTZXR0aW5ncygpKS5uYXRpdmVXZWJUYXBTdHJpY3QgJiYgYXdhaXQgdGFwV2ViRWxlbWVudE5hdGl2ZWx5KHRoaXMsIGF0b21zRWxlbWVudCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbG9nLndhcm4oJ1VuYWJsZSB0byBkbyBzaW1wbGUgbmF0aXZlIHdlYiB0YXAuIEF0dGVtcHRpbmcgdG8gY29udmVydCBjb29yZGluYXRlcycpO1xuXG4gIC8vIGBnZXRfdG9wX2xlZnRfY29vcmRpbmF0ZXNgIHJldHVybnMgdGhlIHdyb25nIHZhbHVlIHNvbWV0aW1lcyxcbiAgLy8gdW5sZXNzIHdlIHByZS1jYWxsIGJvdGggb2YgdGhlc2UgZnVuY3Rpb25zIGJlZm9yZSB0aGUgYWN0dWFsIGNhbGxzXG4gIGF3YWl0IEIuUHJvbWlzZS5hbGwoW1xuICAgIHRoaXMuZXhlY3V0ZUF0b20oJ2dldF9zaXplJywgW2F0b21zRWxlbWVudF0pLFxuICAgIHRoaXMuZXhlY3V0ZUF0b20oJ2dldF90b3BfbGVmdF9jb29yZGluYXRlcycsIFthdG9tc0VsZW1lbnRdKSxcbiAgXSk7XG5cbiAgY29uc3QgW3NpemUsIGNvb3JkaW5hdGVzXSA9IGF3YWl0IEIuUHJvbWlzZS5hbGwoW1xuICAgIHRoaXMuZXhlY3V0ZUF0b20oJ2dldF9zaXplJywgW2F0b21zRWxlbWVudF0pLFxuICAgIHRoaXMuZXhlY3V0ZUF0b20oJ2dldF90b3BfbGVmdF9jb29yZGluYXRlcycsIFthdG9tc0VsZW1lbnRdKSxcbiAgXSk7XG4gIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IHNpemU7XG4gIGxldCB7eCwgeX0gPSBjb29yZGluYXRlcztcbiAgeCArPSB3aWR0aCAvIDI7XG4gIHkgKz0gaGVpZ2h0IC8gMjtcblxuICB0aGlzLmN1cldlYkNvb3JkcyA9IHt4LCB5fTtcbiAgYXdhaXQgdGhpcy5jbGlja1dlYkNvb3JkcygpO1xufTtcblxuZXh0ZW5zaW9ucy5jbGlja0Nvb3JkcyA9IGFzeW5jIGZ1bmN0aW9uIGNsaWNrQ29vcmRzIChjb29yZHMpIHtcbiAgYXdhaXQgdGhpcy5wZXJmb3JtVG91Y2goW1xuICAgIHtcbiAgICAgIGFjdGlvbjogJ3RhcCcsXG4gICAgICBvcHRpb25zOiBjb29yZHMsXG4gICAgfSxcbiAgXSk7XG59O1xuXG5leHRlbnNpb25zLnRyYW5zbGF0ZVdlYkNvb3JkcyA9IGFzeW5jIGZ1bmN0aW9uIHRyYW5zbGF0ZVdlYkNvb3JkcyAoY29vcmRzKSB7XG4gIGxvZy5kZWJ1ZyhgVHJhbnNsYXRpbmcgY29vcmRpbmF0ZXMgKCR7SlNPTi5zdHJpbmdpZnkoY29vcmRzKX0pIHRvIHdlYiBjb29yZGluYXRlc2ApO1xuXG4gIC8vIGFic29sdXRpemUgd2ViIGNvb3Jkc1xuICBsZXQgd2VidmlldztcbiAgdHJ5IHtcbiAgICB3ZWJ2aWV3ID0gYXdhaXQgcmV0cnlJbnRlcnZhbCg1LCAxMDAsIGFzeW5jICgpID0+IGF3YWl0IHRoaXMuZmluZE5hdGl2ZUVsZW1lbnRPckVsZW1lbnRzKCdjbGFzcyBuYW1lJywgJ1hDVUlFbGVtZW50VHlwZVdlYlZpZXcnLCBmYWxzZSkpO1xuICB9IGNhdGNoIChpZ24pIHt9XG5cbiAgaWYgKCF3ZWJ2aWV3KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBXZWJWaWV3IGZvdW5kLiBVbmFibGUgdG8gdHJhbnNsYXRlIHdlYiBjb29yZGluYXRlcyBmb3IgbmF0aXZlIHdlYiB0YXAuYCk7XG4gIH1cblxuICB3ZWJ2aWV3ID0gdXRpbC51bndyYXBFbGVtZW50KHdlYnZpZXcpO1xuXG4gIGNvbnN0IHJlY3QgPSBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL2VsZW1lbnQvJHt3ZWJ2aWV3fS9yZWN0YCwgJ0dFVCcpO1xuICBjb25zdCB3dlBvcyA9IHt4OiByZWN0LngsIHk6IHJlY3QueX07XG4gIGNvbnN0IHJlYWxEaW1zID0ge3c6IHJlY3Qud2lkdGgsIGg6IHJlY3QuaGVpZ2h0fTtcblxuICBjb25zdCBjbWQgPSAnKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHt3OiB3aW5kb3cuaW5uZXJXaWR0aCwgaDogd2luZG93LmlubmVySGVpZ2h0fTsgfSkoKSc7XG4gIGNvbnN0IHd2RGltcyA9IGF3YWl0IHRoaXMucmVtb3RlLmV4ZWN1dGUoY21kKTtcblxuICAvLyBrZWVwIHRyYWNrIG9mIGltcGxpY2l0IHdhaXQsIGFuZCBzZXQgbG9jYWxseSB0byAwXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy8xNDk4OFxuICBjb25zdCBpbXBsaWNpdFdhaXRNcyA9IHRoaXMuaW1wbGljaXRXYWl0TXM7XG4gIGF3YWl0IHRoaXMuc2V0SW1wbGljaXRXYWl0KDApO1xuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuZ2V0RXh0cmFUcmFuc2xhdGVXZWJDb29yZHNPZmZzZXQod3ZQb3MsIHJlYWxEaW1zKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCB0aGlzLnNldEltcGxpY2l0V2FpdChpbXBsaWNpdFdhaXRNcyk7XG4gIH1cblxuICBpZiAod3ZEaW1zICYmIHJlYWxEaW1zICYmIHd2UG9zKSB7XG4gICAgbGV0IHhSYXRpbyA9IHJlYWxEaW1zLncgLyB3dkRpbXMudztcbiAgICBsZXQgeVJhdGlvID0gcmVhbERpbXMuaCAvIHd2RGltcy5oO1xuICAgIGxldCBuZXdDb29yZHMgPSB7XG4gICAgICB4OiB3dlBvcy54ICsgTWF0aC5yb3VuZCh4UmF0aW8gKiBjb29yZHMueCksXG4gICAgICB5OiB3dlBvcy55ICsgTWF0aC5yb3VuZCh5UmF0aW8gKiBjb29yZHMueSksXG4gICAgfTtcblxuICAgIC8vIGFkZGl0aW9uYWwgbG9nZ2luZyBmb3IgY29vcmRpbmF0ZXMsIHNpbmNlIGl0IGlzIHNvbWV0aW1lcyBicm9rZW5cbiAgICAvLyAgIHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9pc3N1ZXMvOTE1OVxuICAgIGxvZy5kZWJ1ZyhgQ29udmVydGVkIGNvb3JkaW5hdGVzOiAke0pTT04uc3RyaW5naWZ5KG5ld0Nvb3Jkcyl9YCk7XG4gICAgbG9nLmRlYnVnKGAgICAgcmVjdDogJHtKU09OLnN0cmluZ2lmeShyZWN0KX1gKTtcbiAgICBsb2cuZGVidWcoYCAgICB3dlBvczogJHtKU09OLnN0cmluZ2lmeSh3dlBvcyl9YCk7XG4gICAgbG9nLmRlYnVnKGAgICAgcmVhbERpbXM6ICR7SlNPTi5zdHJpbmdpZnkocmVhbERpbXMpfWApO1xuICAgIGxvZy5kZWJ1ZyhgICAgIHd2RGltczogJHtKU09OLnN0cmluZ2lmeSh3dkRpbXMpfWApO1xuICAgIGxvZy5kZWJ1ZyhgICAgIHhSYXRpbzogJHtKU09OLnN0cmluZ2lmeSh4UmF0aW8pfWApO1xuICAgIGxvZy5kZWJ1ZyhgICAgIHlSYXRpbzogJHtKU09OLnN0cmluZ2lmeSh5UmF0aW8pfWApO1xuXG4gICAgbG9nLmRlYnVnKGBDb252ZXJ0ZWQgd2ViIGNvb3JkcyAke0pTT04uc3RyaW5naWZ5KGNvb3Jkcyl9IGAgK1xuICAgICAgICAgICAgICBgaW50byByZWFsIGNvb3JkcyAke0pTT04uc3RyaW5naWZ5KG5ld0Nvb3Jkcyl9YCk7XG4gICAgcmV0dXJuIG5ld0Nvb3JkcztcbiAgfVxufTtcblxuZXh0ZW5zaW9ucy5jaGVja0ZvckFsZXJ0ID0gYXN5bmMgZnVuY3Rpb24gY2hlY2tGb3JBbGVydCAoKSB7XG4gIHJldHVybiBfLmlzU3RyaW5nKGF3YWl0IHRoaXMuZ2V0QWxlcnRUZXh0KCkpO1xufTtcblxuZXh0ZW5zaW9ucy53YWl0Rm9yQXRvbSA9IGFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JBdG9tIChwcm9taXNlKSB7XG4gIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG5cbiAgLy8gbmVlZCB0byBjaGVjayBmb3IgYWxlcnQgd2hpbGUgdGhlIGF0b20gaXMgYmVpbmcgZXhlY3V0ZWQuXG4gIC8vIHNvIG5vdGlmeSBvdXJzZWx2ZXMgd2hlbiBpdCBoYXBwZW5zXG4gIGNvbnN0IHRpbWVkQXRvbVByb21pc2UgPSBCLnJlc29sdmUocHJvbWlzZSkudGltZW91dChBVE9NX1dBSVRfVElNRU9VVF9NUyk7XG4gIGNvbnN0IGhhbmRsZVByb21pc2VFcnJvciA9IGFzeW5jIChwKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBwO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc3Qgb3JpZ2luYWxFcnJvciA9IChlcnIgaW5zdGFuY2VvZiBCLkFnZ3JlZ2F0ZUVycm9yKSA/IGVyclswXSA6IGVycjtcbiAgICAgIGxvZy5kZWJ1ZyhgRXJyb3IgcmVjZWl2ZWQgd2hpbGUgZXhlY3V0aW5nIGF0b206ICR7b3JpZ2luYWxFcnJvci5tZXNzYWdlfWApO1xuICAgICAgaWYgKG9yaWdpbmFsRXJyb3IgaW5zdGFuY2VvZiBCLlRpbWVvdXRFcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERpZCBub3QgZ2V0IGFueSByZXNwb25zZSBmb3IgYXRvbSBleGVjdXRpb24gYWZ0ZXIgYCArXG4gICAgICAgICAgYCR7dGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcy50b0ZpeGVkKDApfW1zYCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBvcmlnaW5hbEVycm9yO1xuICAgIH1cbiAgfTtcbiAgLy8gaWYgdGhlIGF0b20gcHJvbWlzZSBpcyBmdWxmaWxsZWQgd2l0aGluIEFUT01fSU5JVElBTF9XQUlUX01TXG4gIC8vIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgYW4gYWxlcnQgcHJlc2VuY2VcbiAgYXdhaXQgaGFuZGxlUHJvbWlzZUVycm9yKEIuYW55KFtCLmRlbGF5KEFUT01fSU5JVElBTF9XQUlUX01TKSwgdGltZWRBdG9tUHJvbWlzZV0pKTtcbiAgaWYgKHRpbWVkQXRvbVByb21pc2UuaXNGdWxmaWxsZWQoKSkge1xuICAgIHJldHVybiBhd2FpdCB0aW1lZEF0b21Qcm9taXNlO1xuICB9XG5cbiAgLy8gLi4ub3RoZXJ3aXNlIG1ha2Ugc3VyZSB0aGVyZSBpcyBubyB1bmV4cGVjdGVkIGFsZXJ0IGNvdmVyaW5nIHRoZSBlbGVtZW50XG4gIGlmICghXy5pc1BsYWluT2JqZWN0KHRoaXMuX3dhaXRpbmdBdG9tcykpIHtcbiAgICB0aGlzLl93YWl0aW5nQXRvbXMgPSB7XG4gICAgICBjb3VudDogMCxcbiAgICAgIGFsZXJ0Tm90aWZpZXI6IG5ldyBFdmVudEVtaXR0ZXIoKSxcbiAgICAgIGFsZXJ0TW9uaXRvcjogQi5yZXNvbHZlKCksXG4gICAgfTtcbiAgfVxuICB0aGlzLl93YWl0aW5nQXRvbXMuY291bnQrKztcblxuICBsZXQgb25BbGVydENhbGxiYWNrO1xuICB0cnkge1xuICAgIC8vIG9ubHkgcmVzdGFydCB0aGUgbW9uaXRvciBpZiBpdCBpcyBub3QgcnVubmluZyBhbHJlYWR5XG4gICAgaWYgKHRoaXMuX3dhaXRpbmdBdG9tcy5hbGVydE1vbml0b3IuaXNSZXNvbHZlZCgpKSB7XG4gICAgICB0aGlzLl93YWl0aW5nQXRvbXMuYWxlcnRNb25pdG9yID0gQi5yZXNvbHZlKChhc3luYyAoKSA9PiB7XG4gICAgICAgIHdoaWxlICh0aGlzLl93YWl0aW5nQXRvbXMuY291bnQgPiAwKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChhd2FpdCB0aGlzLmNoZWNrRm9yQWxlcnQoKSkge1xuICAgICAgICAgICAgICB0aGlzLl93YWl0aW5nQXRvbXMuYWxlcnROb3RpZmllci5lbWl0KE9OX09CU1RSVUNUSU5HX0FMRVJUX0VWRU5UKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgICAgICAgYXdhaXQgQi5kZWxheShBVE9NX0lOSVRJQUxfV0FJVF9NUyAvIDIpO1xuICAgICAgICB9XG4gICAgICB9KSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgb25BbGVydENhbGxiYWNrID0gKCkgPT4gcmVqZWN0KG5ldyBlcnJvcnMuVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yKCkpO1xuICAgICAgdGhpcy5fd2FpdGluZ0F0b21zLmFsZXJ0Tm90aWZpZXIub25jZShPTl9PQlNUUlVDVElOR19BTEVSVF9FVkVOVCwgb25BbGVydENhbGxiYWNrKTtcbiAgICAgIGhhbmRsZVByb21pc2VFcnJvcih0aW1lZEF0b21Qcm9taXNlKVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvbWlzZS9wcmVmZXItYXdhaXQtdG8tdGhlblxuICAgICAgICAudGhlbihyZXNvbHZlKVxuICAgICAgICAuY2F0Y2gocmVqZWN0KTtcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAob25BbGVydENhbGxiYWNrKSB7XG4gICAgICB0aGlzLl93YWl0aW5nQXRvbXMuYWxlcnROb3RpZmllci5yZW1vdmVMaXN0ZW5lcihPTl9PQlNUUlVDVElOR19BTEVSVF9FVkVOVCwgb25BbGVydENhbGxiYWNrKTtcbiAgICB9XG4gICAgdGhpcy5fd2FpdGluZ0F0b21zLmNvdW50LS07XG4gIH1cbn07XG5cbmV4dGVuc2lvbnMubW9iaWxlV2ViTmF2ID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlV2ViTmF2IChuYXZUeXBlKSB7XG4gIHRoaXMucmVtb3RlLmFsbG93TmF2aWdhdGlvbldpdGhvdXRSZWxvYWQgPSB0cnVlO1xuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ2V4ZWN1dGVfc2NyaXB0JywgW2BoaXN0b3J5LiR7bmF2VHlwZX0oKTtgLCBudWxsXSk7XG4gIH0gZmluYWxseSB7XG4gICAgdGhpcy5yZW1vdGUuYWxsb3dOYXZpZ2F0aW9uV2l0aG91dFJlbG9hZCA9IGZhbHNlO1xuICB9XG59O1xuXG5PYmplY3QuYXNzaWduKGNvbW1hbmRzLCBleHRlbnNpb25zLCBoZWxwZXJzKTtcblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy93ZWIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
726
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy93ZWIuanMiXSwibmFtZXMiOlsiSVBIT05FX1RPUF9CQVJfSEVJR0hUIiwiSVBIT05FX1NDUk9MTEVEX1RPUF9CQVJfSEVJR0hUIiwiSVBIT05FX1hfU0NST0xMRURfT0ZGU0VUIiwiSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPUyIsIklQSE9ORV9YX05PVENIX09GRlNFVF9JT1NfMTMiLCJJUEhPTkVfTEFORFNDQVBFX1RPUF9CQVJfSEVJR0hUIiwiSVBIT05FX0JPVFRPTV9CQVJfT0ZGU0VUIiwiVEFCX0JBUl9PRkZTRVQiLCJJUEhPTkVfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUIiwiSVBBRF9XRUJfQ09PUkRfU01BUlRfQVBQX0JBTk5FUl9PRkZTRVQiLCJOT1RDSEVEX0RFVklDRV9TSVpFUyIsInciLCJoIiwiVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVIiLCJ1dGlsIiwiQVRPTV9XQUlUX1RJTUVPVVRfTVMiLCJBVE9NX0lOSVRJQUxfV0FJVF9NUyIsIk9OX09CU1RSVUNUSU5HX0FMRVJUX0VWRU5UIiwiVklTSUJMRSIsIklOVklTSUJMRSIsIkRFVEVDVCIsIlZJU0lCSUxJVElFUyIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJpc1ZhbGlkRWxlbWVudElkZW50aWZpZXIiLCJpZCIsIl8iLCJpc1N0cmluZyIsImlzTnVtYmVyIiwiaXNFbXB0eSIsImlzTmFOIiwic2V0RnJhbWUiLCJmcmFtZSIsImlzV2ViQ29udGV4dCIsImVycm9ycyIsIk5vdEltcGxlbWVudGVkRXJyb3IiLCJpc051bGwiLCJjdXJXZWJGcmFtZXMiLCJsb2ciLCJkZWJ1ZyIsImhhc0VsZW1lbnRJZCIsImF0b21zRWxlbWVudCIsImdldEF0b21zRWxlbWVudCIsInZhbHVlIiwiZXhlY3V0ZUF0b20iLCJXSU5ET1ciLCJ1bnNoaWZ0IiwiYXRvbSIsImlzVW5kZWZpbmVkIiwiTm9TdWNoRnJhbWVFcnJvciIsImdldENzc1Byb3BlcnR5IiwicHJvcGVydHlOYW1lIiwiZWwiLCJzdWJtaXQiLCJyZWZyZXNoIiwiZ2V0VXJsIiwicmVtb3RlIiwiZXhlY3V0ZSIsInRpdGxlIiwiZ2V0Q29va2llcyIsInNjcmlwdCIsImpzQ29va2llcyIsImNvb2tpZXMiLCJuYW1lIiwidG9QYWlycyIsImNvb2tpZVV0aWxzIiwiY3JlYXRlSldQQ29va2llIiwidW5kZWZpbmVkIiwicHVzaCIsImVyciIsImVycm9yIiwiVW5rbm93bkVycm9yIiwic2V0Q29va2llIiwiY29va2llIiwiY2xvbmUiLCJwYXRoIiwianNDb29raWUiLCJjcmVhdGVKU0Nvb2tpZSIsImV4cGlyZXMiLCJleHBpcnkiLCJEYXRlIiwidG9VVENTdHJpbmciLCJkb21haW4iLCJodHRwT25seSIsInNlY3VyZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJkZWxldGVDb29raWUiLCJjb29raWVOYW1lIiwiaW5kZXhPZiIsIm1hcCIsIl9kZWxldGVDb29raWUiLCJkZWxldGVDb29raWVzIiwibGVuZ3RoIiwid2ViQ29va2llIiwiZXhwaXJlQ29va2llIiwiY2FjaGVXZWJFbGVtZW50IiwiaXNQbGFpbk9iamVjdCIsImVsSWQiLCJ1bndyYXBFbGVtZW50IiwiY2FjaGVJZCIsImluY2x1ZGVzIiwidXVpZFY0Iiwid2ViRWxlbWVudHNDYWNoZSIsInNldCIsIndyYXBFbGVtZW50IiwiY2FjaGVXZWJFbGVtZW50cyIsInJlc3BvbnNlIiwidG9DYWNoZWQiLCJ2IiwiaXNBcnJheSIsInJlc3VsdCIsInJlZHVjZSIsImFjYyIsImtleSIsImZpbmRXZWJFbGVtZW50T3JFbGVtZW50cyIsInN0cmF0ZWd5Iiwic2VsZWN0b3IiLCJtYW55IiwiY3R4IiwiY29udGV4dEVsZW1lbnQiLCJpc05pbCIsImVsZW1lbnQiLCJkb0ZpbmQiLCJpbXBsaWNpdFdhaXRGb3JDb25kaXRpb24iLCJtZXNzYWdlIiwiaXNGdW5jdGlvbiIsIm1hdGNoIiwiTm9TdWNoRWxlbWVudEVycm9yIiwiY2xpY2tXZWJDb29yZHMiLCJjb29yZHMiLCJ0cmFuc2xhdGVXZWJDb29yZHMiLCJjdXJXZWJDb29yZHMiLCJjbGlja0Nvb3JkcyIsImFyZ3MiLCJhbHdheXNEZWZhdWx0RnJhbWUiLCJmcmFtZXMiLCJwcm9taXNlIiwid2FpdEZvckF0b20iLCJleGVjdXRlQXRvbUFzeW5jIiwicmVzcG9uc2VVcmwiLCJCIiwicmVzb2x2ZSIsInJlamVjdCIsImFzeW5jUHJvbWlzZSIsImVsT3JJZCIsImhhcyIsIlN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yIiwiRUxFTUVOVCIsImdldCIsImNvbnZlcnRFbGVtZW50c0ZvckF0b21zIiwiYXJnIiwiZ2V0RWxlbWVudElkIiwiaGFzVmFsdWUiLCJnZXRTYWZhcmlJc0lwaG9uZSIsIm1lbW9pemUiLCJ1c2VyQWdlbnQiLCJ0b0xvd2VyQ2FzZSIsIndhcm4iLCJnZXRTYWZhcmlEZXZpY2VTaXplIiwid2lkdGgiLCJoZWlnaHQiLCJub3JtSGVpZ2h0Iiwibm9ybVdpZHRoIiwiZ2V0U2FmYXJpSXNOb3RjaGVkIiwiZGV2aWNlIiwiZ2V0RXh0cmFUcmFuc2xhdGVXZWJDb29yZHNPZmZzZXQiLCJ3dlBvcyIsInJlYWxEaW1zIiwidG9wT2Zmc2V0IiwiYm90dG9tT2Zmc2V0IiwibmF0aXZlV2ViVGFwVGFiQmFyVmlzaWJpbGl0eSIsIm5hdGl2ZVdlYlRhcFNtYXJ0QXBwQmFubmVyVmlzaWJpbGl0eSIsInNldHRpbmdzIiwiZ2V0U2V0dGluZ3MiLCJ0YWJCYXJWaXNpYmlsaXR5IiwibG93ZXJDYXNlIiwiYmFubmVyVmlzaWJpbGl0eSIsImlzSXBob25lIiwiaXNOb3RjaGVkIiwib3JpZW50YXRpb24iLCJub3RjaE9mZnNldCIsImNvbXBhcmVWZXJzaW9ucyIsIm9wdHMiLCJwbGF0Zm9ybVZlcnNpb24iLCJpc1Njcm9sbGVkIiwiY29udGV4dHNBbmRWaWV3cyIsImdldENvbnRleHRzQW5kVmlld3MiLCJ0YWJzIiwiZmlsdGVyIiwic3RhcnRzV2l0aCIsImdldEV4dHJhTmF0aXZlV2ViVGFwT2Zmc2V0IiwieSIsIm9mZnNldCIsImJhbm5lcnMiLCJmaW5kTmF0aXZlRWxlbWVudE9yRWxlbWVudHMiLCJ0YXBXZWJFbGVtZW50TmF0aXZlbHkiLCJkcml2ZXIiLCJ0ZXh0IiwiZWxzIiwicmVjdCIsInByb3h5Q29tbWFuZCIsImVsMiIsInJlY3QyIiwieCIsIk1hdGgiLCJyb3VuZCIsIm5hdGl2ZVdlYlRhcCIsIm5hdGl2ZVdlYlRhcFN0cmljdCIsIlByb21pc2UiLCJhbGwiLCJzaXplIiwiY29vcmRpbmF0ZXMiLCJwZXJmb3JtVG91Y2giLCJhY3Rpb24iLCJvcHRpb25zIiwid2VidmlldyIsImlnbiIsIkVycm9yIiwiY21kIiwid3ZEaW1zIiwiaW1wbGljaXRXYWl0TXMiLCJzZXRJbXBsaWNpdFdhaXQiLCJ4UmF0aW8iLCJ5UmF0aW8iLCJuZXdDb29yZHMiLCJjaGVja0ZvckFsZXJ0IiwiZ2V0QWxlcnRUZXh0IiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsInN0YXJ0IiwidGltZWRBdG9tUHJvbWlzZSIsInRpbWVvdXQiLCJoYW5kbGVQcm9taXNlRXJyb3IiLCJwIiwib3JpZ2luYWxFcnJvciIsIkFnZ3JlZ2F0ZUVycm9yIiwiVGltZW91dEVycm9yIiwiZ2V0RHVyYXRpb24iLCJhc01pbGxpU2Vjb25kcyIsInRvRml4ZWQiLCJhbnkiLCJkZWxheSIsImlzRnVsZmlsbGVkIiwiX3dhaXRpbmdBdG9tcyIsImNvdW50IiwiYWxlcnROb3RpZmllciIsIkV2ZW50RW1pdHRlciIsImFsZXJ0TW9uaXRvciIsIm9uQWxlcnRDYWxsYmFjayIsImlzUmVzb2x2ZWQiLCJlbWl0IiwiVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yIiwib25jZSIsInRoZW4iLCJjYXRjaCIsInJlbW92ZUxpc3RlbmVyIiwibW9iaWxlV2ViTmF2IiwibmF2VHlwZSIsImFsbG93TmF2aWdhdGlvbldpdGhvdXRSZWxvYWQiLCJPYmplY3QiLCJhc3NpZ24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7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LFNBQUtMLGFBQUwsQ0FBbUJDLEtBQW5CO0FBQ0Q7QUFDRixDQWxFRDs7QUFvRUEvTixVQUFVLENBQUMyTyxZQUFYLEdBQTBCLGVBQWVBLFlBQWYsQ0FBNkJDLE9BQTdCLEVBQXNDO0FBQzlELE9BQUszTSxNQUFMLENBQVk0TSw0QkFBWixHQUEyQyxJQUEzQzs7QUFDQSxNQUFJO0FBQ0YsVUFBTSxLQUFLeE4sV0FBTCxDQUFpQixnQkFBakIsRUFBbUMsQ0FBRSxXQUFVdU4sT0FBUSxLQUFwQixFQUEwQixJQUExQixDQUFuQyxDQUFOO0FBQ0QsR0FGRCxTQUVVO0FBQ1IsU0FBSzNNLE1BQUwsQ0FBWTRNLDRCQUFaLEdBQTJDLEtBQTNDO0FBQ0Q7QUFDRixDQVBEOztBQVNBQyxNQUFNLENBQUNDLE1BQVAsQ0FBY2pQLFFBQWQsRUFBd0JFLFVBQXhCLEVBQW9DRCxPQUFwQztlQUVlRCxRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IHV0aWwsIHRpbWluZyB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyBlcnJvcnMsIGlzRXJyb3JUeXBlIH0gZnJvbSAnYXBwaXVtLWJhc2UtZHJpdmVyJztcbmltcG9ydCBjb29raWVVdGlscyBmcm9tICcuLi9jb29raWVzJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XG5cbmNvbnN0IElQSE9ORV9UT1BfQkFSX0hFSUdIVCA9IDcxO1xuY29uc3QgSVBIT05FX1NDUk9MTEVEX1RPUF9CQVJfSEVJR0hUID0gNDE7XG5jb25zdCBJUEhPTkVfWF9TQ1JPTExFRF9PRkZTRVQgPSA1NTtcbmNvbnN0IElQSE9ORV9YX05PVENIX09GRlNFVF9JT1MgPSAyNDtcbmNvbnN0IElQSE9ORV9YX05PVENIX09GRlNFVF9JT1NfMTMgPSAyMDtcblxuY29uc3QgSVBIT05FX0xBTkRTQ0FQRV9UT1BfQkFSX0hFSUdIVCA9IDUxO1xuY29uc3QgSVBIT05FX0JPVFRPTV9CQVJfT0ZGU0VUID0gNDk7XG5jb25zdCBUQUJfQkFSX09GRlNFVCA9IDMzO1xuY29uc3QgSVBIT05FX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVCA9IDg0O1xuY29uc3QgSVBBRF9XRUJfQ09PUkRfU01BUlRfQVBQX0JBTk5FUl9PRkZTRVQgPSA5NTtcblxuY29uc3QgTk9UQ0hFRF9ERVZJQ0VfU0laRVMgPSBbXG4gIHt3OiAxMTI1LCBoOiAyNDM2fSwgLy8gMTEgUHJvLCBYLCBYc1xuICB7dzogODI4LCBoOiAxNzkyfSwgLy8gMTEsIFhyXG4gIHt3OiAxMjQyLCBoOiAyNjg4fSwgLy8gMTEgUHJvIE1heCwgWHMgTWF4XG5dO1xuXG5jb25zdCB7IFczQ19XRUJfRUxFTUVOVF9JREVOVElGSUVSIH0gPSB1dGlsO1xuXG5jb25zdCBBVE9NX1dBSVRfVElNRU9VVF9NUyA9IDIgKiA2MDAwMDtcbmNvbnN0IEFUT01fSU5JVElBTF9XQUlUX01TID0gMTAwMDtcblxuY29uc3QgT05fT0JTVFJVQ1RJTkdfQUxFUlRfRVZFTlQgPSAnYWxlcnQnO1xuXG5jb25zdCBWSVNJQkxFID0gJ3Zpc2libGUnO1xuY29uc3QgSU5WSVNJQkxFID0gJ2ludmlzaWJsZSc7XG5jb25zdCBERVRFQ1QgPSAnZGV0ZWN0JztcbmNvbnN0IFZJU0lCSUxJVElFUyA9IFtWSVNJQkxFLCBJTlZJU0lCTEUsIERFVEVDVF07XG5cbmNvbnN0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudElkZW50aWZpZXIgKGlkKSB7XG4gIGlmICghXy5pc1N0cmluZyhpZCkgJiYgIV8uaXNOdW1iZXIoaWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChfLmlzU3RyaW5nKGlkKSAmJiBfLmlzRW1wdHkoaWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChfLmlzTnVtYmVyKGlkKSAmJiBpc05hTihpZCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmNvbW1hbmRzLnNldEZyYW1lID0gYXN5bmMgZnVuY3Rpb24gc2V0RnJhbWUgKGZyYW1lKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgaWYgKF8uaXNOdWxsKGZyYW1lKSkge1xuICAgIHRoaXMuY3VyV2ViRnJhbWVzID0gW107XG4gICAgbG9nLmRlYnVnKCdMZWF2aW5nIHdlYiBmcmFtZSBhbmQgZ29pbmcgYmFjayB0byBkZWZhdWx0IGNvbnRlbnQnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaGVscGVycy5oYXNFbGVtZW50SWQoZnJhbWUpKSB7XG4gICAgY29uc3QgYXRvbXNFbGVtZW50ID0gdGhpcy5nZXRBdG9tc0VsZW1lbnQoZnJhbWUpO1xuICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZ2V0X2ZyYW1lX3dpbmRvdycsIFthdG9tc0VsZW1lbnRdKTtcbiAgICBsb2cuZGVidWcoYEVudGVyaW5nIG5ldyB3ZWIgZnJhbWU6ICcke3ZhbHVlLldJTkRPV30nYCk7XG4gICAgdGhpcy5jdXJXZWJGcmFtZXMudW5zaGlmdCh2YWx1ZS5XSU5ET1cpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGF0b20gPSBfLmlzTnVtYmVyKGZyYW1lKSA/ICdmcmFtZV9ieV9pbmRleCcgOiAnZnJhbWVfYnlfaWRfb3JfbmFtZSc7XG4gICAgY29uc3QgdmFsdWUgPSBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKGF0b20sIFtmcmFtZV0pO1xuICAgIGlmIChfLmlzTnVsbCh2YWx1ZSkgfHwgXy5pc1VuZGVmaW5lZCh2YWx1ZS5XSU5ET1cpKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLk5vU3VjaEZyYW1lRXJyb3IoKTtcbiAgICB9XG4gICAgbG9nLmRlYnVnKGBFbnRlcmluZyBuZXcgd2ViIGZyYW1lOiAnJHt2YWx1ZS5XSU5ET1d9J2ApO1xuICAgIHRoaXMuY3VyV2ViRnJhbWVzLnVuc2hpZnQodmFsdWUuV0lORE9XKTtcbiAgfVxufTtcblxuY29tbWFuZHMuZ2V0Q3NzUHJvcGVydHkgPSBhc3luYyBmdW5jdGlvbiBnZXRDc3NQcm9wZXJ0eSAocHJvcGVydHlOYW1lLCBlbCkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGNvbnN0IGF0b21zRWxlbWVudCA9IHRoaXMuZ2V0QXRvbXNFbGVtZW50KGVsKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ2dldF92YWx1ZV9vZl9jc3NfcHJvcGVydHknLCBbYXRvbXNFbGVtZW50LCBwcm9wZXJ0eU5hbWVdKTtcbn07XG5cbmNvbW1hbmRzLnN1Ym1pdCA9IGFzeW5jIGZ1bmN0aW9uIHN1Ym1pdCAoZWwpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBjb25zdCBhdG9tc0VsZW1lbnQgPSB0aGlzLmdldEF0b21zRWxlbWVudChlbCk7XG4gIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ3N1Ym1pdCcsIFthdG9tc0VsZW1lbnRdKTtcbn07XG5cbmNvbW1hbmRzLnJlZnJlc2ggPSBhc3luYyBmdW5jdGlvbiByZWZyZXNoICgpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdyZWZyZXNoJywgW10pO1xufTtcblxuY29tbWFuZHMuZ2V0VXJsID0gYXN5bmMgZnVuY3Rpb24gZ2V0VXJsICgpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgdGhpcy5yZW1vdGUuZXhlY3V0ZSgnd2luZG93LmxvY2F0aW9uLmhyZWYnKTtcbn07XG5cbmNvbW1hbmRzLnRpdGxlID0gYXN5bmMgZnVuY3Rpb24gdGl0bGUgKCkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCd0aXRsZScsIFtdLCB0cnVlKTtcbn07XG5cbmNvbW1hbmRzLmdldENvb2tpZXMgPSBhc3luYyBmdW5jdGlvbiBnZXRDb29raWVzICgpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBsb2cuZGVidWcoJ1JldHJpZXZpbmcgYWxsIGNvb2tpZXMnKTtcblxuICBsZXQgc2NyaXB0ID0gJ3JldHVybiBkb2N1bWVudC5jb29raWUnO1xuICBsZXQganNDb29raWVzID0gYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZXhlY3V0ZV9zY3JpcHQnLCBbc2NyaXB0LCBbXV0pO1xuXG4gIGxldCBjb29raWVzID0gW107XG4gIHRyeSB7XG4gICAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiBfLnRvUGFpcnMoY29va2llVXRpbHMuY3JlYXRlSldQQ29va2llKHVuZGVmaW5lZCwganNDb29raWVzKSkpIHtcbiAgICAgIGNvb2tpZXMucHVzaCh7bmFtZSwgdmFsdWV9KTtcbiAgICB9XG4gICAgcmV0dXJuIGNvb2tpZXM7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5lcnJvcihlcnIpO1xuICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkVycm9yKGBFcnJvciBwYXJzaW5nIGNvb2tpZXMgZnJvbSByZXN1bHQ6ICcke2pzQ29va2llc30nYCk7XG4gIH1cbn07XG5cbmNvbW1hbmRzLnNldENvb2tpZSA9IGFzeW5jIGZ1bmN0aW9uIHNldENvb2tpZSAoY29va2llKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgY29va2llID0gXy5jbG9uZShjb29raWUpO1xuXG4gIC8vIGlmIGBwYXRoYCBmaWVsZCBpcyBub3Qgc3BlY2lmaWVkLCBTYWZhcmkgd2lsbCBub3QgdXBkYXRlIGNvb2tpZXMgYXMgZXhwZWN0ZWQ7IGVnIGlzc3VlICMxNzA4XG4gIGlmICghY29va2llLnBhdGgpIHtcbiAgICBjb29raWUucGF0aCA9ICcvJztcbiAgfVxuXG4gIGNvbnN0IGpzQ29va2llID0gY29va2llVXRpbHMuY3JlYXRlSlNDb29raWUoY29va2llLm5hbWUsIGNvb2tpZS52YWx1ZSwge1xuICAgIGV4cGlyZXM6IF8uaXNOdW1iZXIoY29va2llLmV4cGlyeSkgPyAobmV3IERhdGUoY29va2llLmV4cGlyeSAqIDEwMDApKS50b1VUQ1N0cmluZygpIDpcbiAgICAgIGNvb2tpZS5leHBpcnksXG4gICAgcGF0aDogY29va2llLnBhdGgsXG4gICAgZG9tYWluOiBjb29raWUuZG9tYWluLFxuICAgIGh0dHBPbmx5OiBjb29raWUuaHR0cE9ubHksXG4gICAgc2VjdXJlOiBjb29raWUuc2VjdXJlXG4gIH0pO1xuICBsZXQgc2NyaXB0ID0gYGRvY3VtZW50LmNvb2tpZSA9ICR7SlNPTi5zdHJpbmdpZnkoanNDb29raWUpfWA7XG4gIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ2V4ZWN1dGVfc2NyaXB0JywgW3NjcmlwdCwgW11dKTtcbn07XG5cbmNvbW1hbmRzLmRlbGV0ZUNvb2tpZSA9IGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUNvb2tpZSAoY29va2llTmFtZSkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIC8vIGNoZWNrIGNvb2tpZSBleGlzdGVuY2VcbiAgbGV0IGNvb2tpZXMgPSBhd2FpdCB0aGlzLmdldENvb2tpZXMoKTtcbiAgaWYgKF8uaW5kZXhPZihfLm1hcChjb29raWVzLCAnbmFtZScpLCBjb29raWVOYW1lKSA9PT0gLTEpIHtcbiAgICBsb2cuZGVidWcoYENvb2tpZSAnJHtjb29raWVOYW1lfScgbm90IGZvdW5kLiBJZ25vcmluZy5gKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCB0aGlzLl9kZWxldGVDb29raWUoY29va2llTmFtZSk7XG59O1xuXG5jb21tYW5kcy5kZWxldGVDb29raWVzID0gYXN5bmMgZnVuY3Rpb24gZGVsZXRlQ29va2llcyAoKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgbGV0IGNvb2tpZXMgPSBhd2FpdCB0aGlzLmdldENvb2tpZXMoKTtcbiAgaWYgKGNvb2tpZXMubGVuZ3RoKSB7XG4gICAgZm9yIChsZXQgY29va2llIG9mIGNvb2tpZXMpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2RlbGV0ZUNvb2tpZShjb29raWUubmFtZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufTtcblxuaGVscGVycy5fZGVsZXRlQ29va2llID0gYXN5bmMgZnVuY3Rpb24gX2RlbGV0ZUNvb2tpZSAoY29va2llTmFtZSkge1xuICBsb2cuZGVidWcoYERlbGV0aW5nIGNvb2tpZSAnJHtjb29raWVOYW1lfSdgKTtcbiAgbGV0IHdlYkNvb2tpZSA9IGNvb2tpZVV0aWxzLmV4cGlyZUNvb2tpZShjb29raWVOYW1lLCB7cGF0aDogJy8nfSk7XG4gIGxldCBzY3JpcHQgPSBgZG9jdW1lbnQuY29va2llID0gJHtKU09OLnN0cmluZ2lmeSh3ZWJDb29raWUpfWA7XG4gIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ2V4ZWN1dGVfc2NyaXB0JywgW3NjcmlwdCwgW11dKTtcbn07XG5cbmhlbHBlcnMuY2FjaGVXZWJFbGVtZW50ID0gZnVuY3Rpb24gY2FjaGVXZWJFbGVtZW50IChlbCkge1xuICBpZiAoIV8uaXNQbGFpbk9iamVjdChlbCkpIHtcbiAgICByZXR1cm4gZWw7XG4gIH1cbiAgY29uc3QgZWxJZCA9IHV0aWwudW53cmFwRWxlbWVudChlbCk7XG4gIGlmICghaXNWYWxpZEVsZW1lbnRJZGVudGlmaWVyKGVsSWQpKSB7XG4gICAgcmV0dXJuIGVsO1xuICB9XG4gIC8vIEluIG5ld2VyIGRlYnVnZ2VyIHJlbGVhc2VzIGVsZW1lbnQgaWRlbnRpZmllcnMgbG9vayBsaWtlIGA6d2RjOjE2MjgxNTE2NDkzMjVgXG4gIC8vIFdlIGFzc3VtZSBpdCBpcyBzYWZlIHRvIHVzZSB0aGVzZSB0byBpZGVudGlmeSBjYWNoZWQgZWxlbWVudHNcbiAgY29uc3QgY2FjaGVJZCA9IF8uaW5jbHVkZXMoZWxJZCwgJzonKSA/IGVsSWQgOiB1dGlsLnV1aWRWNCgpO1xuICB0aGlzLndlYkVsZW1lbnRzQ2FjaGUuc2V0KGNhY2hlSWQsIGVsSWQpO1xuICByZXR1cm4gdXRpbC53cmFwRWxlbWVudChjYWNoZUlkKTtcbn07XG5cbmhlbHBlcnMuY2FjaGVXZWJFbGVtZW50cyA9IGZ1bmN0aW9uIGNhY2hlV2ViRWxlbWVudHMgKHJlc3BvbnNlKSB7XG4gIGNvbnN0IHRvQ2FjaGVkID0gKHYpID0+IF8uaXNBcnJheSh2KSB8fCBfLmlzUGxhaW5PYmplY3QodilcbiAgICA/IHRoaXMuY2FjaGVXZWJFbGVtZW50cyh2KVxuICAgIDogdjtcblxuICBpZiAoXy5pc0FycmF5KHJlc3BvbnNlKSkge1xuICAgIHJldHVybiByZXNwb25zZS5tYXAodG9DYWNoZWQpO1xuICB9IGVsc2UgaWYgKF8uaXNQbGFpbk9iamVjdChyZXNwb25zZSkpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7Li4ucmVzcG9uc2UsIC4uLih0aGlzLmNhY2hlV2ViRWxlbWVudChyZXNwb25zZSkpfTtcbiAgICByZXR1cm4gXy50b1BhaXJzKHJlc3VsdCkucmVkdWNlKFxuICAgICAgKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIGFjY1trZXldID0gdG9DYWNoZWQodmFsdWUpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge31cbiAgICApO1xuICB9XG4gIHJldHVybiByZXNwb25zZTtcbn07XG5cbmV4dGVuc2lvbnMuZmluZFdlYkVsZW1lbnRPckVsZW1lbnRzID0gYXN5bmMgZnVuY3Rpb24gZmluZFdlYkVsZW1lbnRPckVsZW1lbnRzIChzdHJhdGVneSwgc2VsZWN0b3IsIG1hbnksIGN0eCkge1xuICBjb25zdCBjb250ZXh0RWxlbWVudCA9IF8uaXNOaWwoY3R4KSA/IG51bGwgOiB0aGlzLmdldEF0b21zRWxlbWVudChjdHgpO1xuICBsZXQgZWxlbWVudDtcbiAgbGV0IGRvRmluZCA9IGFzeW5jICgpID0+IHtcbiAgICBlbGVtZW50ID0gYXdhaXQgdGhpcy5leGVjdXRlQXRvbShgZmluZF9lbGVtZW50JHttYW55ID8gJ3MnIDogJyd9YCwgW3N0cmF0ZWd5LCBzZWxlY3RvciwgY29udGV4dEVsZW1lbnRdKTtcbiAgICByZXR1cm4gIV8uaXNOdWxsKGVsZW1lbnQpO1xuICB9O1xuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuaW1wbGljaXRXYWl0Rm9yQ29uZGl0aW9uKGRvRmluZCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIubWVzc2FnZSAmJiBfLmlzRnVuY3Rpb24oZXJyLm1lc3NhZ2UubWF0Y2gpICYmIGVyci5tZXNzYWdlLm1hdGNoKC9Db25kaXRpb24gdW5tZXQvKSkge1xuICAgICAgLy8gY29uZGl0aW9uIHdhcyBub3QgbWV0IHNldHRpbmcgcmVzIHRvIGVtcHR5IGFycmF5XG4gICAgICBlbGVtZW50ID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBpZiAobWFueSkge1xuICAgIHJldHVybiB0aGlzLmNhY2hlV2ViRWxlbWVudHMoZWxlbWVudCk7XG4gIH1cbiAgaWYgKF8uaXNFbXB0eShlbGVtZW50KSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm9TdWNoRWxlbWVudEVycm9yKCk7XG4gIH1cbiAgcmV0dXJuIHRoaXMuY2FjaGVXZWJFbGVtZW50cyhlbGVtZW50KTtcbn07XG5cbmV4dGVuc2lvbnMuY2xpY2tXZWJDb29yZHMgPSBhc3luYyBmdW5jdGlvbiBjbGlja1dlYkNvb3JkcyAoKSB7XG4gIGxldCBjb29yZHMgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZVdlYkNvb3Jkcyh0aGlzLmN1cldlYkNvb3Jkcyk7XG4gIGF3YWl0IHRoaXMuY2xpY2tDb29yZHMoY29vcmRzKTtcbn07XG5cbmhlbHBlcnMuZXhlY3V0ZUF0b20gPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlQXRvbSAoYXRvbSwgYXJncywgYWx3YXlzRGVmYXVsdEZyYW1lID0gZmFsc2UpIHtcbiAgbGV0IGZyYW1lcyA9IGFsd2F5c0RlZmF1bHRGcmFtZSA9PT0gdHJ1ZSA/IFtdIDogdGhpcy5jdXJXZWJGcmFtZXM7XG4gIGxldCBwcm9taXNlID0gdGhpcy5yZW1vdGUuZXhlY3V0ZUF0b20oYXRvbSwgYXJncywgZnJhbWVzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2FpdEZvckF0b20ocHJvbWlzZSk7XG59O1xuXG5oZWxwZXJzLmV4ZWN1dGVBdG9tQXN5bmMgPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlQXRvbUFzeW5jIChhdG9tLCBhcmdzLCByZXNwb25zZVVybCkge1xuICAvLyBzYXZlIHRoZSByZXNvbHZlIGFuZCByZWplY3QgbWV0aG9kcyBvZiB0aGUgcHJvbWlzZSB0byBiZSB3YWl0ZWQgZm9yXG4gIGxldCBwcm9taXNlID0gbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHRoaXMuYXN5bmNQcm9taXNlID0ge3Jlc29sdmUsIHJlamVjdH07XG4gIH0pO1xuICBhd2FpdCB0aGlzLnJlbW90ZS5leGVjdXRlQXRvbUFzeW5jKGF0b20sIGFyZ3MsIHRoaXMuY3VyV2ViRnJhbWVzLCByZXNwb25zZVVybCk7XG4gIHJldHVybiBhd2FpdCB0aGlzLndhaXRGb3JBdG9tKHByb21pc2UpO1xufTtcblxuaGVscGVycy5nZXRBdG9tc0VsZW1lbnQgPSBmdW5jdGlvbiBnZXRBdG9tc0VsZW1lbnQgKGVsT3JJZCkge1xuICBjb25zdCBlbElkID0gdXRpbC51bndyYXBFbGVtZW50KGVsT3JJZCk7XG4gIGlmICghdGhpcy53ZWJFbGVtZW50c0NhY2hlLmhhcyhlbElkKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IoKTtcbiAgfVxuICByZXR1cm4ge0VMRU1FTlQ6IHRoaXMud2ViRWxlbWVudHNDYWNoZS5nZXQoZWxJZCl9O1xufTtcblxuaGVscGVycy5jb252ZXJ0RWxlbWVudHNGb3JBdG9tcyA9IGZ1bmN0aW9uIGNvbnZlcnRFbGVtZW50c0ZvckF0b21zIChhcmdzID0gW10pIHtcbiAgcmV0dXJuIGFyZ3MubWFwKChhcmcpID0+IHtcbiAgICBpZiAoaGVscGVycy5oYXNFbGVtZW50SWQoYXJnKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXRvbXNFbGVtZW50KGFyZyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKCFpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5TdGFsZUVsZW1lbnRSZWZlcmVuY2VFcnJvcikpIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhcmc7XG4gICAgfVxuICAgIHJldHVybiBfLmlzQXJyYXkoYXJnKSA/IHRoaXMuY29udmVydEVsZW1lbnRzRm9yQXRvbXMoYXJnKSA6IGFyZztcbiAgfSk7XG59O1xuXG5oZWxwZXJzLmdldEVsZW1lbnRJZCA9IGZ1bmN0aW9uIGdldEVsZW1lbnRJZCAoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC5FTEVNRU5UIHx8IGVsZW1lbnRbVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVJdO1xufTtcblxuaGVscGVycy5oYXNFbGVtZW50SWQgPSBmdW5jdGlvbiBoYXNFbGVtZW50SWQgKGVsZW1lbnQpIHtcbiAgcmV0dXJuIHV0aWwuaGFzVmFsdWUoZWxlbWVudCkgJiYgKHV0aWwuaGFzVmFsdWUoZWxlbWVudC5FTEVNRU5UKSB8fCB1dGlsLmhhc1ZhbHVlKGVsZW1lbnRbVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVJdKSk7XG59O1xuXG5leHRlbnNpb25zLmdldFNhZmFyaUlzSXBob25lID0gXy5tZW1vaXplKGFzeW5jIGZ1bmN0aW9uIGdldFNhZmFyaUlzSXBob25lICgpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCB1c2VyQWdlbnQgPSBhd2FpdCB0aGlzLmV4ZWN1dGUoJ3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Jyk7XG4gICAgcmV0dXJuIHVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdpcGhvbmUnKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLndhcm4oYFVuYWJsZSB0byBmaW5kIGRldmljZSB0eXBlIGZyb20gdXNlcmFnZW50LiBBc3N1bWluZyBpUGhvbmVgKTtcbiAgICBsb2cuZGVidWcoYEVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG4gIHJldHVybiB0cnVlO1xufSk7XG5cbmV4dGVuc2lvbnMuZ2V0U2FmYXJpRGV2aWNlU2l6ZSA9IF8ubWVtb2l6ZShhc3luYyBmdW5jdGlvbiBnZXRTYWZhcmlEZXZpY2VTaXplICgpIHtcbiAgY29uc3Qgc2NyaXB0ID0gJ3JldHVybiB7aGVpZ2h0OiB3aW5kb3cuc2NyZWVuLmF2YWlsSGVpZ2h0ICogd2luZG93LmRldmljZVBpeGVsUmF0aW8sIHdpZHRoOiB3aW5kb3cuc2NyZWVuLmF2YWlsV2lkdGggKiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb307JztcbiAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gYXdhaXQgdGhpcy5leGVjdXRlKHNjcmlwdCk7XG4gIGNvbnN0IFtub3JtSGVpZ2h0LCBub3JtV2lkdGhdID0gaGVpZ2h0ID4gd2lkdGggPyBbaGVpZ2h0LCB3aWR0aF0gOiBbd2lkdGgsIGhlaWdodF07XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IG5vcm1XaWR0aCxcbiAgICBoZWlnaHQ6IG5vcm1IZWlnaHQsXG4gIH07XG59KTtcblxuZXh0ZW5zaW9ucy5nZXRTYWZhcmlJc05vdGNoZWQgPSBfLm1lbW9pemUoYXN5bmMgZnVuY3Rpb24gZ2V0U2FmYXJpSXNOb3RjaGVkICgpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSBhd2FpdCB0aGlzLmdldFNhZmFyaURldmljZVNpemUoKTtcbiAgICBmb3IgKGNvbnN0IGRldmljZSBvZiBOT1RDSEVEX0RFVklDRV9TSVpFUykge1xuICAgICAgaWYgKGRldmljZS53ID09PSB3aWR0aCAmJiBkZXZpY2UuaCA9PT0gaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLndhcm4oYFVuYWJsZSB0byBmaW5kIGRldmljZSB0eXBlIGZyb20gZGltZW5zaW9ucy4gQXNzdW1pbmcgdGhlIGRldmljZSBpcyBub3Qgbm90Y2hlZGApO1xuICAgIGxvZy5kZWJ1ZyhgRXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufSk7XG5cbmV4dGVuc2lvbnMuZ2V0RXh0cmFUcmFuc2xhdGVXZWJDb29yZHNPZmZzZXQgPSBhc3luYyBmdW5jdGlvbiBnZXRFeHRyYVRyYW5zbGF0ZVdlYkNvb3Jkc09mZnNldCAod3ZQb3MsIHJlYWxEaW1zKSB7XG4gIGxldCB0b3BPZmZzZXQgPSAwO1xuICBsZXQgYm90dG9tT2Zmc2V0ID0gMDtcblxuICAvLyBObyBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgdGhlIFNtYXJ0IEFwcCBCYW5uZXIgb3IgVGFiIEJhciBpcyB2aXNpYmxlIG9yIG5vdFxuICAvLyBpZiBhbHJlYWR5IGRlZmluZWQgYnkgbmF0aXZlV2ViVGFwVGFiQmFyVmlzaWJpbGl0eSBvciBuYXRpdmVXZWJUYXBTbWFydEFwcEJhbm5lclZpc2liaWxpdHkgaW4gc2V0dGluZ3MuXG4gIGNvbnN0IHtcbiAgICBuYXRpdmVXZWJUYXBUYWJCYXJWaXNpYmlsaXR5LFxuICAgIG5hdGl2ZVdlYlRhcFNtYXJ0QXBwQmFubmVyVmlzaWJpbGl0eVxuICB9ID0gYXdhaXQgdGhpcy5zZXR0aW5ncy5nZXRTZXR0aW5ncygpO1xuICBsZXQgdGFiQmFyVmlzaWJpbGl0eSA9IF8ubG93ZXJDYXNlKG5hdGl2ZVdlYlRhcFRhYkJhclZpc2liaWxpdHkpO1xuICBsZXQgYmFubmVyVmlzaWJpbGl0eSA9IF8ubG93ZXJDYXNlKG5hdGl2ZVdlYlRhcFNtYXJ0QXBwQmFubmVyVmlzaWJpbGl0eSk7XG4gIGlmICghVklTSUJJTElUSUVTLmluY2x1ZGVzKHRhYkJhclZpc2liaWxpdHkpKSB7XG4gICAgdGFiQmFyVmlzaWJpbGl0eSA9IERFVEVDVDtcbiAgfVxuICBpZiAoIVZJU0lCSUxJVElFUy5pbmNsdWRlcyhiYW5uZXJWaXNpYmlsaXR5KSkge1xuICAgIGJhbm5lclZpc2liaWxpdHkgPSBERVRFQ1Q7XG4gIH1cblxuICBjb25zdCBpc0lwaG9uZSA9IGF3YWl0IHRoaXMuZ2V0U2FmYXJpSXNJcGhvbmUoKTtcbiAgY29uc3QgaXNOb3RjaGVkID0gaXNJcGhvbmUgJiYgYXdhaXQgdGhpcy5nZXRTYWZhcmlJc05vdGNoZWQoKTtcblxuICBjb25zdCBvcmllbnRhdGlvbiA9IHJlYWxEaW1zLmggPiByZWFsRGltcy53ID8gJ1BPUlRSQUlUJyA6ICdMQU5EU0NBUEUnO1xuXG4gIGNvbnN0IG5vdGNoT2Zmc2V0ID0gaXNOb3RjaGVkXG4gICAgPyB1dGlsLmNvbXBhcmVWZXJzaW9ucyh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCAnPScsICcxMy4wJylcbiAgICAgID8gSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPU18xM1xuICAgICAgOiBJUEhPTkVfWF9OT1RDSF9PRkZTRVRfSU9TXG4gICAgOiAwO1xuXG4gIGNvbnN0IGlzU2Nyb2xsZWQgPSBhd2FpdCB0aGlzLmV4ZWN1dGUoJ3JldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wID4gMCcpO1xuICBpZiAoaXNTY3JvbGxlZCkge1xuICAgIHRvcE9mZnNldCA9IElQSE9ORV9TQ1JPTExFRF9UT1BfQkFSX0hFSUdIVCArIG5vdGNoT2Zmc2V0O1xuXG4gICAgaWYgKGlzTm90Y2hlZCkge1xuICAgICAgdG9wT2Zmc2V0IC09IElQSE9ORV9YX1NDUk9MTEVEX09GRlNFVDtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgaVBob25lIGlzIGxhbmRzY2FwZSB0aGVuIHRoZXJlIGlzIG5vIHRvcCBiYXJcbiAgICBpZiAob3JpZW50YXRpb24gPT09ICdMQU5EU0NBUEUnICYmIGlzSXBob25lKSB7XG4gICAgICB0b3BPZmZzZXQgPSAwO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0b3BPZmZzZXQgPSBJUEhPTkVfVE9QX0JBUl9IRUlHSFQgKyBub3RjaE9mZnNldDtcblxuICAgIGlmIChpc0lwaG9uZSkge1xuICAgICAgaWYgKG9yaWVudGF0aW9uID09PSAnUE9SVFJBSVQnKSB7XG4gICAgICAgIC8vIFRoZSBib3R0b20gYmFyIGlzIG9ubHkgdmlzaWJsZSB3aGVuIHBvcnRyYWl0XG4gICAgICAgIGJvdHRvbU9mZnNldCA9IElQSE9ORV9CT1RUT01fQkFSX09GRlNFVDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRvcE9mZnNldCA9IElQSE9ORV9MQU5EU0NBUEVfVE9QX0JBUl9IRUlHSFQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9yaWVudGF0aW9uID09PSAnTEFORFNDQVBFJyB8fCAhaXNJcGhvbmUpIHtcbiAgICAgIGlmICh0YWJCYXJWaXNpYmlsaXR5ID09PSBWSVNJQkxFKSB7XG4gICAgICAgIHRvcE9mZnNldCArPSBUQUJfQkFSX09GRlNFVDtcbiAgICAgIH0gZWxzZSBpZiAodGFiQmFyVmlzaWJpbGl0eSA9PT0gREVURUNUKSB7XG4gICAgICAgIC8vIFRhYnMgb25seSBhcHBlYXIgaWYgdGhlIGRldmljZSBpcyBsYW5kc2NhcGUgb3IgaWYgaXQncyBhbiBpUGFkIHNvIHdlIG9ubHkgY2hlY2sgdmlzaWJpbGl0eSBpbiB0aGlzIGNhc2VcbiAgICAgICAgLy8gQXNzdW1lIHRoYXQgZWFjaCB0YWIgYmFyIGlzIGEgV2ViVmlld1xuICAgICAgICBjb25zdCBjb250ZXh0c0FuZFZpZXdzID0gYXdhaXQgdGhpcy5nZXRDb250ZXh0c0FuZFZpZXdzKCk7XG4gICAgICAgIGNvbnN0IHRhYnMgPSBjb250ZXh0c0FuZFZpZXdzLmZpbHRlcigoY3R4KSA9PiBjdHguaWQuc3RhcnRzV2l0aCgnV0VCVklFV18nKSk7XG5cbiAgICAgICAgaWYgKHRhYnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhgRm91bmQgJHt0YWJzLmxlbmd0aH0gdGFicy4gQXNzdW1pbmcgdGhlIHRhYiBiYXIgaXMgdmlzaWJsZWApO1xuICAgICAgICAgIHRvcE9mZnNldCArPSBUQUJfQkFSX09GRlNFVDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRvcE9mZnNldCArPSBhd2FpdCB0aGlzLmdldEV4dHJhTmF0aXZlV2ViVGFwT2Zmc2V0KGlzSXBob25lLCBiYW5uZXJWaXNpYmlsaXR5KTtcblxuICB3dlBvcy55ICs9IHRvcE9mZnNldDtcbiAgcmVhbERpbXMuaCAtPSAodG9wT2Zmc2V0ICsgYm90dG9tT2Zmc2V0KTtcbn07XG5cbmV4dGVuc2lvbnMuZ2V0RXh0cmFOYXRpdmVXZWJUYXBPZmZzZXQgPSBhc3luYyBmdW5jdGlvbiBnZXRFeHRyYU5hdGl2ZVdlYlRhcE9mZnNldCAoaXNJcGhvbmUsIGJhbm5lclZpc2liaWxpdHkpIHtcbiAgbGV0IG9mZnNldCA9IDA7XG5cbiAgaWYgKGJhbm5lclZpc2liaWxpdHkgPT09IFZJU0lCTEUpIHtcbiAgICBvZmZzZXQgKz0gaXNJcGhvbmUgP1xuICAgICAgSVBIT05FX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVCA6XG4gICAgICBJUEFEX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVDtcbiAgfSBlbHNlIGlmIChiYW5uZXJWaXNpYmlsaXR5ID09PSBERVRFQ1QpIHtcbiAgICAvLyB0cnkgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIFNtYXJ0IEFwcCBCYW5uZXJcbiAgICBjb25zdCBiYW5uZXJzID0gYXdhaXQgdGhpcy5maW5kTmF0aXZlRWxlbWVudE9yRWxlbWVudHMoJ2FjY2Vzc2liaWxpdHkgaWQnLCAnQ2xvc2UgYXBwIGRvd25sb2FkIG9mZmVyJywgdHJ1ZSk7XG4gICAgaWYgKGJhbm5lcnMubGVuZ3RoID4gMCkge1xuICAgICAgb2Zmc2V0ICs9IGlzSXBob25lID9cbiAgICAgICAgSVBIT05FX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVCA6XG4gICAgICAgIElQQURfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUO1xuICAgIH1cbiAgfVxuXG4gIGxvZy5kZWJ1ZyhgQWRkaXRpb25hbCBuYXRpdmUgd2ViIHRhcCBvZmZzZXQgY29tcHV0ZWQ6ICR7b2Zmc2V0fWApO1xuICByZXR1cm4gb2Zmc2V0O1xufTtcblxuYXN5bmMgZnVuY3Rpb24gdGFwV2ViRWxlbWVudE5hdGl2ZWx5IChkcml2ZXIsIGF0b21zRWxlbWVudCkge1xuICAvLyB0cnkgdG8gZ2V0IHRoZSB0ZXh0IG9mIHRoZSBlbGVtZW50LCB3aGljaCB3aWxsIGJlIGFjY2Vzc2libGUgaW4gdGhlXG4gIC8vIG5hdGl2ZSBjb250ZXh0XG4gIHRyeSB7XG4gICAgbGV0IHRleHQgPSBhd2FpdCBkcml2ZXIuZXhlY3V0ZUF0b20oJ2dldF90ZXh0JywgW2F0b21zRWxlbWVudF0pO1xuICAgIGlmICghdGV4dCkge1xuICAgICAgdGV4dCA9IGF3YWl0IGRyaXZlci5leGVjdXRlQXRvbSgnZ2V0X2F0dHJpYnV0ZV92YWx1ZScsIFthdG9tc0VsZW1lbnQsICd2YWx1ZSddKTtcbiAgICB9XG5cbiAgICBpZiAodGV4dCkge1xuICAgICAgY29uc3QgZWxzID0gYXdhaXQgZHJpdmVyLmZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cygnYWNjZXNzaWJpbGl0eSBpZCcsIHRleHQsIHRydWUpO1xuICAgICAgaWYgKGVscy5sZW5ndGggPT09IDEgfHwgZWxzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICBjb25zdCBlbCA9IGVsc1swXTtcbiAgICAgICAgLy8gdXNlIHRhcCBiZWNhdXNlIG9uIGlPUyAxMS4yIGFuZCBiZWxvdyBgbmF0aXZlQ2xpY2tgIGNyYXNoZXMgV0RBXG4gICAgICAgIGNvbnN0IHJlY3QgPSBhd2FpdCBkcml2ZXIucHJveHlDb21tYW5kKGAvZWxlbWVudC8ke3V0aWwudW53cmFwRWxlbWVudChlbCl9L3JlY3RgLCAnR0VUJyk7XG4gICAgICAgIGlmIChlbHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgY29uc3QgZWwyID0gZWxzWzFdO1xuICAgICAgICAgIGNvbnN0IHJlY3QyID0gYXdhaXQgZHJpdmVyLnByb3h5Q29tbWFuZChgL2VsZW1lbnQvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWwyKX0vcmVjdGAsICdHRVQnKTtcblxuICAgICAgICAgIGlmICgocmVjdC54ICE9PSByZWN0Mi54IHx8IHJlY3QueSAhPT0gcmVjdDIueSkgfHxcbiAgICAgICAgICAocmVjdC53aWR0aCAhPT0gcmVjdDIud2lkdGggfHwgcmVjdC5oZWlnaHQgIT09IHJlY3QyLmhlaWdodCkpIHtcbiAgICAgICAgICAgIC8vIFRoZXNlIDIgbmF0aXZlIGVsZW1lbnRzIGFyZSBub3QgcmVmZXJyaW5nIHRvIHRoZSBzYW1lIHdlYiBlbGVtZW50XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvb3JkcyA9IHtcbiAgICAgICAgICB4OiBNYXRoLnJvdW5kKHJlY3QueCArIHJlY3Qud2lkdGggLyAyKSxcbiAgICAgICAgICB5OiBNYXRoLnJvdW5kKHJlY3QueSArIHJlY3QuaGVpZ2h0IC8gMiksXG4gICAgICAgIH07XG4gICAgICAgIGF3YWl0IGRyaXZlci5jbGlja0Nvb3Jkcyhjb29yZHMpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIGFueSBmYWlsdXJlIHNob3VsZCBmYWxsIHRocm91Z2ggYW5kIHRyaWdnZXIgdGhlIG1vcmUgZWxhYm9yYXRlXG4gICAgLy8gbWV0aG9kIG9mIGNsaWNraW5nXG4gICAgbG9nLndhcm4oYEVycm9yIGF0dGVtcHRpbmcgdG8gY2xpY2s6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHRlbnNpb25zLm5hdGl2ZVdlYlRhcCA9IGFzeW5jIGZ1bmN0aW9uIG5hdGl2ZVdlYlRhcCAoZWwpIHtcbiAgY29uc3QgYXRvbXNFbGVtZW50ID0gdGhpcy5nZXRBdG9tc0VsZW1lbnQoZWwpO1xuXG4gIC8vIGlmIHN0cmljdCBuYXRpdmUgdGFwLCBkbyBub3QgdHJ5IHRvIGRvIGl0IHdpdGggV0RBIGRpcmVjdGx5XG4gIGlmICghKGF3YWl0IHRoaXMuc2V0dGluZ3MuZ2V0U2V0dGluZ3MoKSkubmF0aXZlV2ViVGFwU3RyaWN0ICYmIGF3YWl0IHRhcFdlYkVsZW1lbnROYXRpdmVseSh0aGlzLCBhdG9tc0VsZW1lbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxvZy53YXJuKCdVbmFibGUgdG8gZG8gc2ltcGxlIG5hdGl2ZSB3ZWIgdGFwLiBBdHRlbXB0aW5nIHRvIGNvbnZlcnQgY29vcmRpbmF0ZXMnKTtcblxuICAvLyBgZ2V0X3RvcF9sZWZ0X2Nvb3JkaW5hdGVzYCByZXR1cm5zIHRoZSB3cm9uZyB2YWx1ZSBzb21ldGltZXMsXG4gIC8vIHVubGVzcyB3ZSBwcmUtY2FsbCBib3RoIG9mIHRoZXNlIGZ1bmN0aW9ucyBiZWZvcmUgdGhlIGFjdHVhbCBjYWxsc1xuICBhd2FpdCBCLlByb21pc2UuYWxsKFtcbiAgICB0aGlzLmV4ZWN1dGVBdG9tKCdnZXRfc2l6ZScsIFthdG9tc0VsZW1lbnRdKSxcbiAgICB0aGlzLmV4ZWN1dGVBdG9tKCdnZXRfdG9wX2xlZnRfY29vcmRpbmF0ZXMnLCBbYXRvbXNFbGVtZW50XSksXG4gIF0pO1xuXG4gIGNvbnN0IFtzaXplLCBjb29yZGluYXRlc10gPSBhd2FpdCBCLlByb21pc2UuYWxsKFtcbiAgICB0aGlzLmV4ZWN1dGVBdG9tKCdnZXRfc2l6ZScsIFthdG9tc0VsZW1lbnRdKSxcbiAgICB0aGlzLmV4ZWN1dGVBdG9tKCdnZXRfdG9wX2xlZnRfY29vcmRpbmF0ZXMnLCBbYXRvbXNFbGVtZW50XSksXG4gIF0pO1xuICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSBzaXplO1xuICBsZXQge3gsIHl9ID0gY29vcmRpbmF0ZXM7XG4gIHggKz0gd2lkdGggLyAyO1xuICB5ICs9IGhlaWdodCAvIDI7XG5cbiAgdGhpcy5jdXJXZWJDb29yZHMgPSB7eCwgeX07XG4gIGF3YWl0IHRoaXMuY2xpY2tXZWJDb29yZHMoKTtcbn07XG5cbmV4dGVuc2lvbnMuY2xpY2tDb29yZHMgPSBhc3luYyBmdW5jdGlvbiBjbGlja0Nvb3JkcyAoY29vcmRzKSB7XG4gIGF3YWl0IHRoaXMucGVyZm9ybVRvdWNoKFtcbiAgICB7XG4gICAgICBhY3Rpb246ICd0YXAnLFxuICAgICAgb3B0aW9uczogY29vcmRzLFxuICAgIH0sXG4gIF0pO1xufTtcblxuZXh0ZW5zaW9ucy50cmFuc2xhdGVXZWJDb29yZHMgPSBhc3luYyBmdW5jdGlvbiB0cmFuc2xhdGVXZWJDb29yZHMgKGNvb3Jkcykge1xuICBsb2cuZGVidWcoYFRyYW5zbGF0aW5nIGNvb3JkaW5hdGVzICgke0pTT04uc3RyaW5naWZ5KGNvb3Jkcyl9KSB0byB3ZWIgY29vcmRpbmF0ZXNgKTtcblxuICAvLyBhYnNvbHV0aXplIHdlYiBjb29yZHNcbiAgbGV0IHdlYnZpZXc7XG4gIHRyeSB7XG4gICAgd2VidmlldyA9IGF3YWl0IHJldHJ5SW50ZXJ2YWwoNSwgMTAwLCBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLmZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cygnY2xhc3MgbmFtZScsICdYQ1VJRWxlbWVudFR5cGVXZWJWaWV3JywgZmFsc2UpKTtcbiAgfSBjYXRjaCAoaWduKSB7fVxuXG4gIGlmICghd2Vidmlldykge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gV2ViVmlldyBmb3VuZC4gVW5hYmxlIHRvIHRyYW5zbGF0ZSB3ZWIgY29vcmRpbmF0ZXMgZm9yIG5hdGl2ZSB3ZWIgdGFwLmApO1xuICB9XG5cbiAgd2VidmlldyA9IHV0aWwudW53cmFwRWxlbWVudCh3ZWJ2aWV3KTtcblxuICBjb25zdCByZWN0ID0gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC9lbGVtZW50LyR7d2Vidmlld30vcmVjdGAsICdHRVQnKTtcbiAgY29uc3Qgd3ZQb3MgPSB7eDogcmVjdC54LCB5OiByZWN0Lnl9O1xuICBjb25zdCByZWFsRGltcyA9IHt3OiByZWN0LndpZHRoLCBoOiByZWN0LmhlaWdodH07XG5cbiAgY29uc3QgY21kID0gJyhmdW5jdGlvbiAoKSB7IHJldHVybiB7dzogd2luZG93LmlubmVyV2lkdGgsIGg6IHdpbmRvdy5pbm5lckhlaWdodH07IH0pKCknO1xuICBjb25zdCB3dkRpbXMgPSBhd2FpdCB0aGlzLnJlbW90ZS5leGVjdXRlKGNtZCk7XG5cbiAgLy8ga2VlcCB0cmFjayBvZiBpbXBsaWNpdCB3YWl0LCBhbmQgc2V0IGxvY2FsbHkgdG8gMFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9pc3N1ZXMvMTQ5ODhcbiAgY29uc3QgaW1wbGljaXRXYWl0TXMgPSB0aGlzLmltcGxpY2l0V2FpdE1zO1xuICBhd2FpdCB0aGlzLnNldEltcGxpY2l0V2FpdCgwKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLmdldEV4dHJhVHJhbnNsYXRlV2ViQ29vcmRzT2Zmc2V0KHd2UG9zLCByZWFsRGltcyk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgdGhpcy5zZXRJbXBsaWNpdFdhaXQoaW1wbGljaXRXYWl0TXMpO1xuICB9XG5cbiAgaWYgKHd2RGltcyAmJiByZWFsRGltcyAmJiB3dlBvcykge1xuICAgIGxldCB4UmF0aW8gPSByZWFsRGltcy53IC8gd3ZEaW1zLnc7XG4gICAgbGV0IHlSYXRpbyA9IHJlYWxEaW1zLmggLyB3dkRpbXMuaDtcbiAgICBsZXQgbmV3Q29vcmRzID0ge1xuICAgICAgeDogd3ZQb3MueCArIE1hdGgucm91bmQoeFJhdGlvICogY29vcmRzLngpLFxuICAgICAgeTogd3ZQb3MueSArIE1hdGgucm91bmQoeVJhdGlvICogY29vcmRzLnkpLFxuICAgIH07XG5cbiAgICAvLyBhZGRpdGlvbmFsIGxvZ2dpbmcgZm9yIGNvb3JkaW5hdGVzLCBzaW5jZSBpdCBpcyBzb21ldGltZXMgYnJva2VuXG4gICAgLy8gICBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzkxNTlcbiAgICBsb2cuZGVidWcoYENvbnZlcnRlZCBjb29yZGluYXRlczogJHtKU09OLnN0cmluZ2lmeShuZXdDb29yZHMpfWApO1xuICAgIGxvZy5kZWJ1ZyhgICAgIHJlY3Q6ICR7SlNPTi5zdHJpbmdpZnkocmVjdCl9YCk7XG4gICAgbG9nLmRlYnVnKGAgICAgd3ZQb3M6ICR7SlNPTi5zdHJpbmdpZnkod3ZQb3MpfWApO1xuICAgIGxvZy5kZWJ1ZyhgICAgIHJlYWxEaW1zOiAke0pTT04uc3RyaW5naWZ5KHJlYWxEaW1zKX1gKTtcbiAgICBsb2cuZGVidWcoYCAgICB3dkRpbXM6ICR7SlNPTi5zdHJpbmdpZnkod3ZEaW1zKX1gKTtcbiAgICBsb2cuZGVidWcoYCAgICB4UmF0aW86ICR7SlNPTi5zdHJpbmdpZnkoeFJhdGlvKX1gKTtcbiAgICBsb2cuZGVidWcoYCAgICB5UmF0aW86ICR7SlNPTi5zdHJpbmdpZnkoeVJhdGlvKX1gKTtcblxuICAgIGxvZy5kZWJ1ZyhgQ29udmVydGVkIHdlYiBjb29yZHMgJHtKU09OLnN0cmluZ2lmeShjb29yZHMpfSBgICtcbiAgICAgICAgICAgICAgYGludG8gcmVhbCBjb29yZHMgJHtKU09OLnN0cmluZ2lmeShuZXdDb29yZHMpfWApO1xuICAgIHJldHVybiBuZXdDb29yZHM7XG4gIH1cbn07XG5cbmV4dGVuc2lvbnMuY2hlY2tGb3JBbGVydCA9IGFzeW5jIGZ1bmN0aW9uIGNoZWNrRm9yQWxlcnQgKCkge1xuICByZXR1cm4gXy5pc1N0cmluZyhhd2FpdCB0aGlzLmdldEFsZXJ0VGV4dCgpKTtcbn07XG5cbmV4dGVuc2lvbnMud2FpdEZvckF0b20gPSBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yQXRvbSAocHJvbWlzZSkge1xuICBjb25zdCB0aW1lciA9IG5ldyB0aW1pbmcuVGltZXIoKS5zdGFydCgpO1xuXG4gIC8vIG5lZWQgdG8gY2hlY2sgZm9yIGFsZXJ0IHdoaWxlIHRoZSBhdG9tIGlzIGJlaW5nIGV4ZWN1dGVkLlxuICAvLyBzbyBub3RpZnkgb3Vyc2VsdmVzIHdoZW4gaXQgaGFwcGVuc1xuICBjb25zdCB0aW1lZEF0b21Qcm9taXNlID0gQi5yZXNvbHZlKHByb21pc2UpLnRpbWVvdXQoQVRPTV9XQUlUX1RJTUVPVVRfTVMpO1xuICBjb25zdCBoYW5kbGVQcm9taXNlRXJyb3IgPSBhc3luYyAocCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgcDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsRXJyb3IgPSAoZXJyIGluc3RhbmNlb2YgQi5BZ2dyZWdhdGVFcnJvcikgPyBlcnJbMF0gOiBlcnI7XG4gICAgICBsb2cuZGVidWcoYEVycm9yIHJlY2VpdmVkIHdoaWxlIGV4ZWN1dGluZyBhdG9tOiAke29yaWdpbmFsRXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIGlmIChvcmlnaW5hbEVycm9yIGluc3RhbmNlb2YgQi5UaW1lb3V0RXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaWQgbm90IGdldCBhbnkgcmVzcG9uc2UgZm9yIGF0b20gZXhlY3V0aW9uIGFmdGVyIGAgK1xuICAgICAgICAgIGAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgICAgfVxuICAgICAgdGhyb3cgb3JpZ2luYWxFcnJvcjtcbiAgICB9XG4gIH07XG4gIC8vIGlmIHRoZSBhdG9tIHByb21pc2UgaXMgZnVsZmlsbGVkIHdpdGhpbiBBVE9NX0lOSVRJQUxfV0FJVF9NU1xuICAvLyB0aGVuIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIGFuIGFsZXJ0IHByZXNlbmNlXG4gIGF3YWl0IGhhbmRsZVByb21pc2VFcnJvcihCLmFueShbQi5kZWxheShBVE9NX0lOSVRJQUxfV0FJVF9NUyksIHRpbWVkQXRvbVByb21pc2VdKSk7XG4gIGlmICh0aW1lZEF0b21Qcm9taXNlLmlzRnVsZmlsbGVkKCkpIHtcbiAgICByZXR1cm4gYXdhaXQgdGltZWRBdG9tUHJvbWlzZTtcbiAgfVxuXG4gIC8vIC4uLm90aGVyd2lzZSBtYWtlIHN1cmUgdGhlcmUgaXMgbm8gdW5leHBlY3RlZCBhbGVydCBjb3ZlcmluZyB0aGUgZWxlbWVudFxuICBpZiAoIV8uaXNQbGFpbk9iamVjdCh0aGlzLl93YWl0aW5nQXRvbXMpKSB7XG4gICAgdGhpcy5fd2FpdGluZ0F0b21zID0ge1xuICAgICAgY291bnQ6IDAsXG4gICAgICBhbGVydE5vdGlmaWVyOiBuZXcgRXZlbnRFbWl0dGVyKCksXG4gICAgICBhbGVydE1vbml0b3I6IEIucmVzb2x2ZSgpLFxuICAgIH07XG4gIH1cbiAgdGhpcy5fd2FpdGluZ0F0b21zLmNvdW50Kys7XG5cbiAgbGV0IG9uQWxlcnRDYWxsYmFjaztcbiAgdHJ5IHtcbiAgICAvLyBvbmx5IHJlc3RhcnQgdGhlIG1vbml0b3IgaWYgaXQgaXMgbm90IHJ1bm5pbmcgYWxyZWFkeVxuICAgIGlmICh0aGlzLl93YWl0aW5nQXRvbXMuYWxlcnRNb25pdG9yLmlzUmVzb2x2ZWQoKSkge1xuICAgICAgdGhpcy5fd2FpdGluZ0F0b21zLmFsZXJ0TW9uaXRvciA9IEIucmVzb2x2ZSgoYXN5bmMgKCkgPT4ge1xuICAgICAgICB3aGlsZSAodGhpcy5fd2FpdGluZ0F0b21zLmNvdW50ID4gMCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoYXdhaXQgdGhpcy5jaGVja0ZvckFsZXJ0KCkpIHtcbiAgICAgICAgICAgICAgdGhpcy5fd2FpdGluZ0F0b21zLmFsZXJ0Tm90aWZpZXIuZW1pdChPTl9PQlNUUlVDVElOR19BTEVSVF9FVkVOVCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoaWduKSB7fVxuICAgICAgICAgIGF3YWl0IEIuZGVsYXkoQVRPTV9JTklUSUFMX1dBSVRfTVMgLyAyKTtcbiAgICAgICAgfVxuICAgICAgfSkoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIG9uQWxlcnRDYWxsYmFjayA9ICgpID0+IHJlamVjdChuZXcgZXJyb3JzLlVuZXhwZWN0ZWRBbGVydE9wZW5FcnJvcigpKTtcbiAgICAgIHRoaXMuX3dhaXRpbmdBdG9tcy5hbGVydE5vdGlmaWVyLm9uY2UoT05fT0JTVFJVQ1RJTkdfQUxFUlRfRVZFTlQsIG9uQWxlcnRDYWxsYmFjayk7XG4gICAgICBoYW5kbGVQcm9taXNlRXJyb3IodGltZWRBdG9tUHJvbWlzZSlcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLXRoZW5cbiAgICAgICAgLnRoZW4ocmVzb2x2ZSlcbiAgICAgICAgLmNhdGNoKHJlamVjdCk7XG4gICAgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKG9uQWxlcnRDYWxsYmFjaykge1xuICAgICAgdGhpcy5fd2FpdGluZ0F0b21zLmFsZXJ0Tm90aWZpZXIucmVtb3ZlTGlzdGVuZXIoT05fT0JTVFJVQ1RJTkdfQUxFUlRfRVZFTlQsIG9uQWxlcnRDYWxsYmFjayk7XG4gICAgfVxuICAgIHRoaXMuX3dhaXRpbmdBdG9tcy5jb3VudC0tO1xuICB9XG59O1xuXG5leHRlbnNpb25zLm1vYmlsZVdlYk5hdiA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVdlYk5hdiAobmF2VHlwZSkge1xuICB0aGlzLnJlbW90ZS5hbGxvd05hdmlnYXRpb25XaXRob3V0UmVsb2FkID0gdHJ1ZTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdleGVjdXRlX3NjcmlwdCcsIFtgaGlzdG9yeS4ke25hdlR5cGV9KCk7YCwgbnVsbF0pO1xuICB9IGZpbmFsbHkge1xuICAgIHRoaXMucmVtb3RlLmFsbG93TmF2aWdhdGlvbldpdGhvdXRSZWxvYWQgPSBmYWxzZTtcbiAgfVxufTtcblxuT2JqZWN0LmFzc2lnbihjb21tYW5kcywgZXh0ZW5zaW9ucywgaGVscGVycyk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sImZpbGUiOiJsaWIvY29tbWFuZHMvd2ViLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
@@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports.assertIDB = assertIDB;
9
- exports.parseXCTestStdout = parseXCTestStdout;
10
9
  exports.default = exports.commands = void 0;
10
+ exports.parseXCTestStdout = parseXCTestStdout;
11
11
 
12
12
  require("source-map-support/register");
13
13
 
@@ -7,9 +7,9 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.createJSCookie = createJSCookie;
9
9
  exports.createJWPCookie = createJWPCookie;
10
- exports.getValue = getValue;
11
- exports.expireCookie = expireCookie;
12
10
  exports.default = void 0;
11
+ exports.expireCookie = expireCookie;
12
+ exports.getValue = getValue;
13
13
 
14
14
  require("source-map-support/register");
15
15
 
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = exports.PLATFORM_NAME_TVOS = exports.PLATFORM_NAME_IOS = exports.desiredCapConstraints = void 0;
6
+ exports.desiredCapConstraints = exports.default = exports.PLATFORM_NAME_TVOS = exports.PLATFORM_NAME_IOS = void 0;
7
7
 
8
8
  require("source-map-support/register");
9
9
 
@@ -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.MAX_LOG_ENTRIES_COUNT = exports.RotatingLog = void 0;
8
+ exports.default = exports.RotatingLog = exports.MAX_LOG_ENTRIES_COUNT = void 0;
9
9
 
10
10
  require("source-map-support/register");
11
11
 
@@ -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.XCUITestDriver = exports.default = void 0;
8
+ exports.default = exports.XCUITestDriver = void 0;
9
9
 
10
10
  require("source-map-support/register");
11
11
 
@@ -7,9 +7,9 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.getConnectedDevices = getConnectedDevices;
9
9
  exports.getOSVersion = getOSVersion;
10
- exports.runRealDeviceReset = runRealDeviceReset;
11
- exports.installToRealDevice = installToRealDevice;
12
10
  exports.getRealDeviceObj = getRealDeviceObj;
11
+ exports.installToRealDevice = installToRealDevice;
12
+ exports.runRealDeviceReset = runRealDeviceReset;
13
13
 
14
14
  require("source-map-support/register");
15
15
 
@@ -7,13 +7,13 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.createSim = createSim;
9
9
  exports.getExistingSim = getExistingSim;
10
- exports.runSimulatorReset = runSimulatorReset;
11
10
  exports.installToSimulator = installToSimulator;
12
- exports.shutdownSimulator = shutdownSimulator;
13
- exports.shutdownOtherSimulators = shutdownOtherSimulators;
11
+ exports.runSimulatorReset = runSimulatorReset;
14
12
  exports.setLocale = setLocale;
15
- exports.setPreferences = setPreferences;
16
13
  exports.setLocaleAndPreferences = setLocaleAndPreferences;
14
+ exports.setPreferences = setPreferences;
15
+ exports.shutdownOtherSimulators = shutdownOtherSimulators;
16
+ exports.shutdownSimulator = shutdownSimulator;
17
17
 
18
18
  require("source-map-support/register");
19
19
 
@@ -5,23 +5,23 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
+ exports.DEFAULT_TIMEOUT_KEY = void 0;
9
+ exports.checkAppPresent = checkAppPresent;
10
+ exports.clearLogs = clearLogs;
11
+ exports.clearSystemFiles = clearSystemFiles;
8
12
  exports.detectUdid = detectUdid;
9
- exports.getAndCheckXcodeVersion = getAndCheckXcodeVersion;
13
+ exports.encodeBase64OrUpload = encodeBase64OrUpload;
10
14
  exports.getAndCheckIosSdkVersion = getAndCheckIosSdkVersion;
11
- exports.checkAppPresent = checkAppPresent;
15
+ exports.getAndCheckXcodeVersion = getAndCheckXcodeVersion;
12
16
  exports.getDriverInfo = getDriverInfo;
13
- exports.clearSystemFiles = clearSystemFiles;
14
- exports.translateDeviceName = translateDeviceName;
15
- exports.normalizeCommandTimeouts = normalizeCommandTimeouts;
16
- exports.markSystemFilesForCleanup = markSystemFilesForCleanup;
17
- exports.printUser = printUser;
18
17
  exports.getPIDsListeningOnPort = getPIDsListeningOnPort;
19
- exports.encodeBase64OrUpload = encodeBase64OrUpload;
20
- exports.removeAllSessionWebSocketHandlers = removeAllSessionWebSocketHandlers;
21
18
  exports.isLocalHost = isLocalHost;
19
+ exports.markSystemFilesForCleanup = markSystemFilesForCleanup;
20
+ exports.normalizeCommandTimeouts = normalizeCommandTimeouts;
22
21
  exports.normalizePlatformVersion = normalizePlatformVersion;
23
- exports.clearLogs = clearLogs;
24
- exports.DEFAULT_TIMEOUT_KEY = void 0;
22
+ exports.printUser = printUser;
23
+ exports.removeAllSessionWebSocketHandlers = removeAllSessionWebSocketHandlers;
24
+ exports.translateDeviceName = translateDeviceName;
25
25
 
26
26
  require("source-map-support/register");
27
27
 
@@ -32,7 +32,8 @@ extensions.execute = async function execute (script, args) {
32
32
  return await this.executeMobile(script, _.isArray(args) ? args[0] : args);
33
33
  } else if (this.isWebContext()) {
34
34
  args = this.convertElementsForAtoms(args);
35
- return await this.executeAtom('execute_script', [script, args]);
35
+ const result = await this.executeAtom('execute_script', [script, args]);
36
+ return this.cacheWebElements(result);
36
37
  } else {
37
38
  throw new errors.NotImplementedError();
38
39
  }
@@ -203,25 +203,38 @@ helpers._deleteCookie = async function _deleteCookie (cookieName) {
203
203
  await this.executeAtom('execute_script', [script, []]);
204
204
  };
205
205
 
206
- helpers.cacheWebElements = function cacheWebElements (rawElements) {
207
- if (!(_.isArray(rawElements) || _.isPlainObject(rawElements))) {
208
- throw new errors.UnknownError(`Web element identifiers cannot be parsed from ` +
209
- JSON.stringify(rawElements));
210
- }
211
-
212
- const cacheElement = (el) => {
213
- const elId = util.unwrapElement(el);
214
- if (!isValidElementIdentifier(elId)) {
215
- throw new errors.UnknownError(`The web element identifier ${JSON.stringify(elId)} cannot be parsed`);
216
- }
217
- // In newer debugger releases element identifiers look like `:wdc:1628151649325`
218
- // We assume it is safe to use these to identify cached elements
219
- const cacheId = _.includes(elId, ':') ? elId : util.uuidV4();
220
- this.webElementsCache.set(cacheId, elId);
221
- return util.wrapElement(cacheId);
222
- };
206
+ helpers.cacheWebElement = function cacheWebElement (el) {
207
+ if (!_.isPlainObject(el)) {
208
+ return el;
209
+ }
210
+ const elId = util.unwrapElement(el);
211
+ if (!isValidElementIdentifier(elId)) {
212
+ return el;
213
+ }
214
+ // In newer debugger releases element identifiers look like `:wdc:1628151649325`
215
+ // We assume it is safe to use these to identify cached elements
216
+ const cacheId = _.includes(elId, ':') ? elId : util.uuidV4();
217
+ this.webElementsCache.set(cacheId, elId);
218
+ return util.wrapElement(cacheId);
219
+ };
223
220
 
224
- return _.isArray(rawElements) ? rawElements.map(cacheElement) : cacheElement(rawElements);
221
+ helpers.cacheWebElements = function cacheWebElements (response) {
222
+ const toCached = (v) => _.isArray(v) || _.isPlainObject(v)
223
+ ? this.cacheWebElements(v)
224
+ : v;
225
+
226
+ if (_.isArray(response)) {
227
+ return response.map(toCached);
228
+ } else if (_.isPlainObject(response)) {
229
+ const result = {...response, ...(this.cacheWebElement(response))};
230
+ return _.toPairs(result).reduce(
231
+ (acc, [key, value]) => {
232
+ acc[key] = toCached(value);
233
+ return acc;
234
+ }, {}
235
+ );
236
+ }
237
+ return response;
225
238
  };
226
239
 
227
240
  extensions.findWebElementOrElements = async function findWebElementOrElements (strategy, selector, many, ctx) {
@@ -245,7 +258,7 @@ extensions.findWebElementOrElements = async function findWebElementOrElements (s
245
258
  if (many) {
246
259
  return this.cacheWebElements(element);
247
260
  }
248
- if (!element || _.size(element) === 0) {
261
+ if (_.isEmpty(element)) {
249
262
  throw new errors.NoSuchElementError();
250
263
  }
251
264
  return this.cacheWebElements(element);
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "xcuitest",
9
9
  "xctest"
10
10
  ],
11
- "version": "3.56.1",
11
+ "version": "3.56.2",
12
12
  "author": "appium",
13
13
  "license": "Apache-2.0",
14
14
  "repository": {
@@ -118,7 +118,7 @@
118
118
  "pngjs": "^6.0.0",
119
119
  "pre-commit": "^1.1.3",
120
120
  "semantic-release": "^17.1.2",
121
- "sinon": "^11.0.0",
121
+ "sinon": "^12.0.0",
122
122
  "wd": "^1.5.0"
123
123
  }
124
124
  }