appium-xcuitest-driver 3.56.3 → 3.58.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.
@@ -107,8 +107,8 @@ commands.mobileQueryAppState = async function mobileQueryAppState(opts = {}) {
107
107
  return await this.proxyCommand('/wda/apps/state', 'POST', requireOptions(opts, ['bundleId']));
108
108
  };
109
109
 
110
- commands.installApp = async function installApp(appPath) {
111
- await this.mobileInstallApp({
110
+ commands.installApp = async function installApp(appPath, opts = {}) {
111
+ await this.mobileInstallApp({ ...(_lodash.default.isPlainObject(opts) ? opts : {}),
112
112
  app: appPath
113
113
  });
114
114
  };
@@ -160,4 +160,4 @@ var _default = commands;
160
160
  exports.default = _default;require('source-map-support').install();
161
161
 
162
162
 
163
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9hcHAtbWFuYWdlbWVudC5qcyJdLCJuYW1lcyI6WyJjb21tYW5kcyIsInJlcXVpcmVPcHRpb25zIiwib3B0cyIsInJlcUtleXMiLCJrZXkiLCJfIiwiaXNTdHJpbmciLCJpc0VtcHR5IiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJtb2JpbGVJbnN0YWxsQXBwIiwiYXBwIiwidGltZW91dE1zIiwic3RyYXRlZ3kiLCJzcmNBcHBQYXRoIiwiaGVscGVycyIsImNvbmZpZ3VyZUFwcCIsImxvZyIsImluZm8iLCJpc1JlYWxEZXZpY2UiLCJkZXZpY2UiLCJ1ZGlkIiwiZnMiLCJleGlzdHMiLCJlcnJvckFuZFRocm93IiwiaW5zdGFsbEFwcCIsImFwcFB1c2hUaW1lb3V0IiwiYXBwSW5zdGFsbFN0cmF0ZWd5IiwibW9iaWxlSXNBcHBJbnN0YWxsZWQiLCJidW5kbGVJZCIsImluc3RhbGxlZCIsImlzQXBwSW5zdGFsbGVkIiwibW9iaWxlUmVtb3ZlQXBwIiwicmVtb3ZlQXBwIiwiZXJyIiwid2FybiIsIm1lc3NhZ2UiLCJtb2JpbGVMYXVuY2hBcHAiLCJsYXVuY2hPcHRpb25zIiwiYXJndW1lbnRzIiwiaXNBcnJheSIsImVudmlyb25tZW50IiwicHJveHlDb21tYW5kIiwibW9iaWxlVGVybWluYXRlQXBwIiwibW9iaWxlQWN0aXZhdGVBcHAiLCJtb2JpbGVRdWVyeUFwcFN0YXRlIiwiYXBwUGF0aCIsImFjdGl2YXRlQXBwIiwiT2JqZWN0IiwiYXNzaWduIiwidGVybWluYXRlQXBwIiwicXVlcnlBcHBTdGF0ZSIsIm1vYmlsZUxpc3RBcHBzIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsImFwcGxpY2F0aW9uVHlwZSIsInNlcnZpY2UiLCJzZXJ2aWNlcyIsInN0YXJ0SW5zdGFsbGF0aW9uUHJveHlTZXJ2aWNlIiwibGlzdEFwcGxpY2F0aW9ucyIsImNsb3NlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNB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R0FBd0IsZUFBZUEsWUFBZixDQUE2QnJCLFFBQTdCLEVBQXVDO0FBQzdELFNBQU8sTUFBTSxLQUFLYyxrQkFBTCxDQUF3QjtBQUFDZCxJQUFBQTtBQUFELEdBQXhCLENBQWI7QUFDRCxDQUZEOztBQUlBN0IsUUFBUSxDQUFDbUQsYUFBVCxHQUF5QixlQUFlQSxhQUFmLENBQThCdEIsUUFBOUIsRUFBd0M7QUFDL0QsU0FBTyxNQUFNLEtBQUtnQixtQkFBTCxDQUF5QjtBQUFDaEIsSUFBQUE7QUFBRCxHQUF6QixDQUFiO0FBQ0QsQ0FGRDs7QUFnQkE3QixRQUFRLENBQUNvRCxjQUFULEdBQTBCLGVBQWVBLGNBQWYsQ0FBK0JsRCxJQUFJLEdBQUcsRUFBdEMsRUFBMEM7QUFDbEUsTUFBSSxDQUFDLEtBQUtpQixZQUFMLEVBQUwsRUFBMEI7QUFDeEIsVUFBTSxJQUFJWCx5QkFBTzZDLG1CQUFYLENBQWdDLGtEQUFoQyxDQUFOO0FBQ0Q7O0FBRUQsUUFBTTtBQUNKQyxJQUFBQSxlQUFlLEdBQUc7QUFEZCxNQUVGcEQsSUFGSjtBQUdBLFFBQU1xRCxPQUFPLEdBQUcsTUFBTUMsMEJBQVNDLDZCQUFULENBQXVDLEtBQUt2RCxJQUFMLENBQVVrQixNQUFWLENBQWlCQyxJQUF4RCxDQUF0Qjs7QUFDQSxNQUFJO0FBQ0YsV0FBTyxNQUFNa0MsT0FBTyxDQUFDRyxnQkFBUixDQUF5QjtBQUFDSixNQUFBQTtBQUFELEtBQXpCLENBQWI7QUFDRCxHQUZELFNBRVU7QUFDUkMsSUFBQUEsT0FBTyxDQUFDSSxLQUFSO0FBQ0Q7QUFDRixDQWREOztlQWdCZTNELFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZnMgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgc2VydmljZXMgfSBmcm9tICdhcHBpdW0taW9zLWRldmljZSc7XG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5cbmZ1bmN0aW9uIHJlcXVpcmVPcHRpb25zIChvcHRzID0ge30sIHJlcUtleXMgPSBbXSkge1xuICBmb3IgKGNvbnN0IGtleSBvZiByZXFLZXlzKSB7XG4gICAgaWYgKCFfLmlzU3RyaW5nKG9wdHNba2V5XSkgfHwgXy5pc0VtcHR5KG9wdHNba2V5XSkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgIGAnJHtrZXl9JyBpcyBleHBlY3RlZCB0byBiZSBhIHZhbGlkIHN0cmluZy4gJyR7b3B0c1trZXldfScgaXMgZ2l2ZW4gaW5zdGVhZGBcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvcHRzO1xufVxuXG5jb21tYW5kcy5tb2JpbGVJbnN0YWxsQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlSW5zdGFsbEFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHsgYXBwLCB0aW1lb3V0TXMsIHN0cmF0ZWd5IH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2FwcCddKTtcbiAgY29uc3Qgc3JjQXBwUGF0aCA9IGF3YWl0IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCAnLmFwcCcpO1xuICBsb2cuaW5mbyhgSW5zdGFsbGluZyAnJHtzcmNBcHBQYXRofScgdG8gdGhlICR7dGhpcy5pc1JlYWxEZXZpY2UoKSA/ICdyZWFsIGRldmljZScgOiAnU2ltdWxhdG9yJ30gYCArXG4gICAgYHdpdGggVURJRCAnJHt0aGlzLm9wdHMuZGV2aWNlLnVkaWR9J2ApO1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhzcmNBcHBQYXRoKSkge1xuICAgIGxvZy5lcnJvckFuZFRocm93KGBUaGUgYXBwbGljYXRpb24gYXQgJyR7c3JjQXBwUGF0aH0nIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhY2Nlc3NpYmxlYCk7XG4gIH1cbiAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5pbnN0YWxsQXBwKFxuICAgIHNyY0FwcFBhdGgsIHRpbWVvdXRNcyA/PyB0aGlzLm9wdHMuYXBwUHVzaFRpbWVvdXQsIHN0cmF0ZWd5ID8/IHRoaXMub3B0cy5hcHBJbnN0YWxsU3RyYXRlZ3lcbiAgKTtcbiAgbG9nLmluZm8oYEluc3RhbGxhdGlvbiBvZiAnJHtzcmNBcHBQYXRofScgc3VjY2VlZGVkYCk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVJc0FwcEluc3RhbGxlZCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUlzQXBwSW5zdGFsbGVkIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2J1bmRsZUlkfSA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSk7XG4gIGNvbnN0IGluc3RhbGxlZCA9IGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuaXNBcHBJbnN0YWxsZWQoYnVuZGxlSWQpO1xuICBsb2cuaW5mbyhgQXBwICcke2J1bmRsZUlkfScgaXMke2luc3RhbGxlZCA/ICcnIDogJyBub3QnfSBpbnN0YWxsZWRgKTtcbiAgcmV0dXJuIGluc3RhbGxlZDtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZVJlbW92ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVJlbW92ZUFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtidW5kbGVJZH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pO1xuICBsb2cuaW5mbyhgVW5pbnN0YWxsaW5nIHRoZSBhcHBsaWNhdGlvbiB3aXRoIGJ1bmRsZSBpZGVudGlmaWVyICcke2J1bmRsZUlkfScgYCArXG4gICAgYGZyb20gdGhlICR7dGhpcy5pc1JlYWxEZXZpY2UoKSA/ICdyZWFsIGRldmljZScgOiAnU2ltdWxhdG9yJ30gd2l0aCBVRElEICcke3RoaXMub3B0cy5kZXZpY2UudWRpZH0nYCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5yZW1vdmVBcHAoYnVuZGxlSWQpO1xuICAgIGxvZy5pbmZvKGBSZW1vdmFsIG9mICcke2J1bmRsZUlkfScgc3VjY2VlZGVkYCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy53YXJuKGBDYW5ub3QgcmVtb3ZlICcke2J1bmRsZUlkfScuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuY29tbWFuZHMubW9iaWxlTGF1bmNoQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTGF1bmNoQXBwIChvcHRzID0ge30pIHtcbiAgY29uc3QgbGF1bmNoT3B0aW9ucyA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSk7XG4gIGlmIChvcHRzLmFyZ3VtZW50cykge1xuICAgIGxhdW5jaE9wdGlvbnMuYXJndW1lbnRzID0gXy5pc0FycmF5KG9wdHMuYXJndW1lbnRzKSA/IG9wdHMuYXJndW1lbnRzIDogW29wdHMuYXJndW1lbnRzXTtcbiAgfVxuICBpZiAob3B0cy5lbnZpcm9ubWVudCkge1xuICAgIGxhdW5jaE9wdGlvbnMuZW52aXJvbm1lbnQgPSBvcHRzLmVudmlyb25tZW50O1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9hcHBzL2xhdW5jaCcsICdQT1NUJywgbGF1bmNoT3B0aW9ucyk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVUZXJtaW5hdGVBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVUZXJtaW5hdGVBcHAgKG9wdHMgPSB7fSkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvYXBwcy90ZXJtaW5hdGUnLCAnUE9TVCcsIHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSkpO1xufTtcblxuY29tbWFuZHMubW9iaWxlQWN0aXZhdGVBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVBY3RpdmF0ZUFwcCAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9hcHBzL2FjdGl2YXRlJywgJ1BPU1QnLCByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY3VycmVudCBhcHBsaWNhdGlvbiBzdGF0ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gT3B0aW9ucyBzZXQsIHdoaWNoIG11c3QgY29udGFpbiBgYnVuZGxlSWRgIHByb3BlcnR5XG4gKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgYWN0dWFsIGFwcGxpY2F0aW9uIHN0YXRlIGNvZGUuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWlhcHBsaWNhdGlvbnN0YXRlP2xhbmd1YWdlPW9iamNcbiAqIHRvIGdldCB0aGUgbGlzdCBvZiBwb3NzaWJsZSB2YWx1ZXMuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVF1ZXJ5QXBwU3RhdGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVRdWVyeUFwcFN0YXRlIChvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL2FwcHMvc3RhdGUnLCAnUE9TVCcsIHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSkpO1xufTtcblxuY29tbWFuZHMuaW5zdGFsbEFwcCA9IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxBcHAgKGFwcFBhdGgpIHtcbiAgYXdhaXQgdGhpcy5tb2JpbGVJbnN0YWxsQXBwKHthcHA6IGFwcFBhdGh9KTtcbn07XG5cbmNvbW1hbmRzLmFjdGl2YXRlQXBwID0gYXN5bmMgZnVuY3Rpb24gYWN0aXZhdGVBcHAgKGJ1bmRsZUlkLCBvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMubW9iaWxlTGF1bmNoQXBwKE9iamVjdC5hc3NpZ24oe30sIG9wdHMsIHtidW5kbGVJZH0pKTtcbn07XG5cbmNvbW1hbmRzLmlzQXBwSW5zdGFsbGVkID0gYXN5bmMgZnVuY3Rpb24gaXNBcHBJbnN0YWxsZWQgKGJ1bmRsZUlkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLm1vYmlsZUlzQXBwSW5zdGFsbGVkKHtidW5kbGVJZH0pO1xufTtcblxuY29tbWFuZHMudGVybWluYXRlQXBwID0gYXN5bmMgZnVuY3Rpb24gdGVybWluYXRlQXBwIChidW5kbGVJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5tb2JpbGVUZXJtaW5hdGVBcHAoe2J1bmRsZUlkfSk7XG59O1xuXG5jb21tYW5kcy5xdWVyeUFwcFN0YXRlID0gYXN5bmMgZnVuY3Rpb24gcXVlcnlBcHBTdGF0ZSAoYnVuZGxlSWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMubW9iaWxlUXVlcnlBcHBTdGF0ZSh7YnVuZGxlSWR9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTGlzdEFwcHNPcHRpb25zXG4gKiBAcHJvcGVydHkgeydTeXN0ZW0nfCdVc2VyJ30gYXBwbGljYXRpb25UeXBlIFtVc2VyXSBUaGUgdHlwZSBvZiBhcHBsaWNhdGlvbnMgdG8gbGlzdFxuICovXG5cbi8qKlxuICogTGlzdCBhcHBsaWNhdGlvbnMgaW5zdGFsbGVkIG9uIHRoZSByZWFsIGRldmljZSB1bmRlciB0ZXN0XG4gKlxuICogQHBhcmFtIHtMaXN0QXBwc09wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtBcnJheTxPYmplY3Q+fSBBIGxpc3Qgb2YgYXBwcywgd2hlcmUgZWFjaCBpdGVtIGlzIGEgbWFwIHdoZXJlIGtleXMgYXJlXG4gKiBidW5kbGUgaWRlbnRpZmllcnMgYW5kIHZhbHVlcyBhcmUgbWFwcyBvZiBwbGF0Zm9ybS1zcGVjaWZpYyBhcHAgcHJvcGVydGllcy5cbiAqL1xuY29tbWFuZHMubW9iaWxlTGlzdEFwcHMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVMaXN0QXBwcyAob3B0cyA9IHt9KSB7XG4gIGlmICghdGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcihgVGhpcyBleHRlbnNpb24gaXMgb25seSBzdXBwb3J0ZWQgb24gcmVhbCBkZXZpY2VzYCk7XG4gIH1cblxuICBjb25zdCB7XG4gICAgYXBwbGljYXRpb25UeXBlID0gJ1VzZXInLFxuICB9ID0gb3B0cztcbiAgY29uc3Qgc2VydmljZSA9IGF3YWl0IHNlcnZpY2VzLnN0YXJ0SW5zdGFsbGF0aW9uUHJveHlTZXJ2aWNlKHRoaXMub3B0cy5kZXZpY2UudWRpZCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHNlcnZpY2UubGlzdEFwcGxpY2F0aW9ucyh7YXBwbGljYXRpb25UeXBlfSk7XG4gIH0gZmluYWxseSB7XG4gICAgc2VydmljZS5jbG9zZSgpO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJmaWxlIjoibGliL2NvbW1hbmRzL2FwcC1tYW5hZ2VtZW50LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
163
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9hcHAtbWFuYWdlbWVudC5qcyJdLCJuYW1lcyI6WyJjb21tYW5kcyIsInJlcXVpcmVPcHRpb25zIiwib3B0cyIsInJlcUtleXMiLCJrZXkiLCJfIiwiaXNTdHJpbmciLCJpc0VtcHR5IiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJtb2JpbGVJbnN0YWxsQXBwIiwiYXBwIiwidGltZW91dE1zIiwic3RyYXRlZ3kiLCJzcmNBcHBQYXRoIiwiaGVscGVycyIsImNvbmZpZ3VyZUFwcCIsImxvZyIsImluZm8iLCJpc1JlYWxEZXZpY2UiLCJkZXZpY2UiLCJ1ZGlkIiwiZnMiLCJleGlzdHMiLCJlcnJvckFuZFRocm93IiwiaW5zdGFsbEFwcCIsImFwcFB1c2hUaW1lb3V0IiwiYXBwSW5zdGFsbFN0cmF0ZWd5IiwibW9iaWxlSXNBcHBJbnN0YWxsZWQiLCJidW5kbGVJZCIsImluc3RhbGxlZCIsImlzQXBwSW5zdGFsbGVkIiwibW9iaWxlUmVtb3ZlQXBwIiwicmVtb3ZlQXBwIiwiZXJyIiwid2FybiIsIm1lc3NhZ2UiLCJtb2JpbGVMYXVuY2hBcHAiLCJsYXVuY2hPcHRpb25zIiwiYXJndW1lbnRzIiwiaXNBcnJheSIsImVudmlyb25tZW50IiwicHJveHlDb21tYW5kIiwibW9iaWxlVGVybWluYXRlQXBwIiwibW9iaWxlQWN0aXZhdGVBcHAiLCJtb2JpbGVRdWVyeUFwcFN0YXRlIiwiYXBwUGF0aCIsImlzUGxhaW5PYmplY3QiLCJhY3RpdmF0ZUFwcCIsIk9iamVjdCIsImFzc2lnbiIsInRlcm1pbmF0ZUFwcCIsInF1ZXJ5QXBwU3RhdGUiLCJtb2JpbGVMaXN0QXBwcyIsIk5vdEltcGxlbWVudGVkRXJyb3IiLCJhcHBsaWNhdGlvblR5cGUiLCJzZXJ2aWNlIiwic2VydmljZXMiLCJzdGFydEluc3RhbGxhdGlvblByb3h5U2VydmljZSIsImxpc3RBcHBsaWNhdGlvbnMiLCJjbG9zZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7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RixRQUEvQixFQUF5QztBQUNqRSxTQUFPLE1BQU0sS0FBS0Qsb0JBQUwsQ0FBMEI7QUFBQ0MsSUFBQUE7QUFBRCxHQUExQixDQUFiO0FBQ0QsQ0FGRDs7QUFJQTdCLFFBQVEsQ0FBQ21ELFlBQVQsR0FBd0IsZUFBZUEsWUFBZixDQUE2QnRCLFFBQTdCLEVBQXVDO0FBQzdELFNBQU8sTUFBTSxLQUFLYyxrQkFBTCxDQUF3QjtBQUFDZCxJQUFBQTtBQUFELEdBQXhCLENBQWI7QUFDRCxDQUZEOztBQUlBN0IsUUFBUSxDQUFDb0QsYUFBVCxHQUF5QixlQUFlQSxhQUFmLENBQThCdkIsUUFBOUIsRUFBd0M7QUFDL0QsU0FBTyxNQUFNLEtBQUtnQixtQkFBTCxDQUF5QjtBQUFDaEIsSUFBQUE7QUFBRCxHQUF6QixDQUFiO0FBQ0QsQ0FGRDs7QUFnQkE3QixRQUFRLENBQUNxRCxjQUFULEdBQTBCLGVBQWVBLGNBQWYsQ0FBK0JuRCxJQUFJLEdBQUcsRUFBdEMsRUFBMEM7QUFDbEUsTUFBSSxDQUFDLEtBQUtpQixZQUFMLEVBQUwsRUFBMEI7QUFDeEIsVUFBTSxJQUFJWCx5QkFBTzhDLG1CQUFYLENBQWdDLGtEQUFoQyxDQUFOO0FBQ0Q7O0FBRUQsUUFBTTtBQUNKQyxJQUFBQSxlQUFlLEdBQUc7QUFEZCxNQUVGckQsSUFGSjtBQUdBLFFBQU1zRCxPQUFPLEdBQUcsTUFBTUMsMEJBQVNDLDZCQUFULENBQXVDLEtBQUt4RCxJQUFMLENBQVVrQixNQUFWLENBQWlCQyxJQUF4RCxDQUF0Qjs7QUFDQSxNQUFJO0FBQ0YsV0FBTyxNQUFNbUMsT0FBTyxDQUFDRyxnQkFBUixDQUF5QjtBQUFDSixNQUFBQTtBQUFELEtBQXpCLENBQWI7QUFDRCxHQUZELFNBRVU7QUFDUkMsSUFBQUEsT0FBTyxDQUFDSSxLQUFSO0FBQ0Q7QUFDRixDQWREOztlQWdCZTVELFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZnMgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgc2VydmljZXMgfSBmcm9tICdhcHBpdW0taW9zLWRldmljZSc7XG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5cbmZ1bmN0aW9uIHJlcXVpcmVPcHRpb25zIChvcHRzID0ge30sIHJlcUtleXMgPSBbXSkge1xuICBmb3IgKGNvbnN0IGtleSBvZiByZXFLZXlzKSB7XG4gICAgaWYgKCFfLmlzU3RyaW5nKG9wdHNba2V5XSkgfHwgXy5pc0VtcHR5KG9wdHNba2V5XSkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgIGAnJHtrZXl9JyBpcyBleHBlY3RlZCB0byBiZSBhIHZhbGlkIHN0cmluZy4gJyR7b3B0c1trZXldfScgaXMgZ2l2ZW4gaW5zdGVhZGBcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvcHRzO1xufVxuXG5jb21tYW5kcy5tb2JpbGVJbnN0YWxsQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlSW5zdGFsbEFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHsgYXBwLCB0aW1lb3V0TXMsIHN0cmF0ZWd5IH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2FwcCddKTtcbiAgY29uc3Qgc3JjQXBwUGF0aCA9IGF3YWl0IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCAnLmFwcCcpO1xuICBsb2cuaW5mbyhgSW5zdGFsbGluZyAnJHtzcmNBcHBQYXRofScgdG8gdGhlICR7dGhpcy5pc1JlYWxEZXZpY2UoKSA/ICdyZWFsIGRldmljZScgOiAnU2ltdWxhdG9yJ30gYCArXG4gICAgYHdpdGggVURJRCAnJHt0aGlzLm9wdHMuZGV2aWNlLnVkaWR9J2ApO1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhzcmNBcHBQYXRoKSkge1xuICAgIGxvZy5lcnJvckFuZFRocm93KGBUaGUgYXBwbGljYXRpb24gYXQgJyR7c3JjQXBwUGF0aH0nIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhY2Nlc3NpYmxlYCk7XG4gIH1cbiAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5pbnN0YWxsQXBwKFxuICAgIHNyY0FwcFBhdGgsIHRpbWVvdXRNcyA/PyB0aGlzLm9wdHMuYXBwUHVzaFRpbWVvdXQsIHN0cmF0ZWd5ID8/IHRoaXMub3B0cy5hcHBJbnN0YWxsU3RyYXRlZ3lcbiAgKTtcbiAgbG9nLmluZm8oYEluc3RhbGxhdGlvbiBvZiAnJHtzcmNBcHBQYXRofScgc3VjY2VlZGVkYCk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVJc0FwcEluc3RhbGxlZCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUlzQXBwSW5zdGFsbGVkIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2J1bmRsZUlkfSA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSk7XG4gIGNvbnN0IGluc3RhbGxlZCA9IGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuaXNBcHBJbnN0YWxsZWQoYnVuZGxlSWQpO1xuICBsb2cuaW5mbyhgQXBwICcke2J1bmRsZUlkfScgaXMke2luc3RhbGxlZCA/ICcnIDogJyBub3QnfSBpbnN0YWxsZWRgKTtcbiAgcmV0dXJuIGluc3RhbGxlZDtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZVJlbW92ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVJlbW92ZUFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtidW5kbGVJZH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pO1xuICBsb2cuaW5mbyhgVW5pbnN0YWxsaW5nIHRoZSBhcHBsaWNhdGlvbiB3aXRoIGJ1bmRsZSBpZGVudGlmaWVyICcke2J1bmRsZUlkfScgYCArXG4gICAgYGZyb20gdGhlICR7dGhpcy5pc1JlYWxEZXZpY2UoKSA/ICdyZWFsIGRldmljZScgOiAnU2ltdWxhdG9yJ30gd2l0aCBVRElEICcke3RoaXMub3B0cy5kZXZpY2UudWRpZH0nYCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5yZW1vdmVBcHAoYnVuZGxlSWQpO1xuICAgIGxvZy5pbmZvKGBSZW1vdmFsIG9mICcke2J1bmRsZUlkfScgc3VjY2VlZGVkYCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy53YXJuKGBDYW5ub3QgcmVtb3ZlICcke2J1bmRsZUlkfScuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuY29tbWFuZHMubW9iaWxlTGF1bmNoQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTGF1bmNoQXBwIChvcHRzID0ge30pIHtcbiAgY29uc3QgbGF1bmNoT3B0aW9ucyA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSk7XG4gIGlmIChvcHRzLmFyZ3VtZW50cykge1xuICAgIGxhdW5jaE9wdGlvbnMuYXJndW1lbnRzID0gXy5pc0FycmF5KG9wdHMuYXJndW1lbnRzKSA/IG9wdHMuYXJndW1lbnRzIDogW29wdHMuYXJndW1lbnRzXTtcbiAgfVxuICBpZiAob3B0cy5lbnZpcm9ubWVudCkge1xuICAgIGxhdW5jaE9wdGlvbnMuZW52aXJvbm1lbnQgPSBvcHRzLmVudmlyb25tZW50O1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9hcHBzL2xhdW5jaCcsICdQT1NUJywgbGF1bmNoT3B0aW9ucyk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVUZXJtaW5hdGVBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVUZXJtaW5hdGVBcHAgKG9wdHMgPSB7fSkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvYXBwcy90ZXJtaW5hdGUnLCAnUE9TVCcsIHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSkpO1xufTtcblxuY29tbWFuZHMubW9iaWxlQWN0aXZhdGVBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVBY3RpdmF0ZUFwcCAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9hcHBzL2FjdGl2YXRlJywgJ1BPU1QnLCByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY3VycmVudCBhcHBsaWNhdGlvbiBzdGF0ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gT3B0aW9ucyBzZXQsIHdoaWNoIG11c3QgY29udGFpbiBgYnVuZGxlSWRgIHByb3BlcnR5XG4gKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgYWN0dWFsIGFwcGxpY2F0aW9uIHN0YXRlIGNvZGUuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWlhcHBsaWNhdGlvbnN0YXRlP2xhbmd1YWdlPW9iamNcbiAqIHRvIGdldCB0aGUgbGlzdCBvZiBwb3NzaWJsZSB2YWx1ZXMuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVF1ZXJ5QXBwU3RhdGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVRdWVyeUFwcFN0YXRlIChvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL2FwcHMvc3RhdGUnLCAnUE9TVCcsIHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSkpO1xufTtcblxuY29tbWFuZHMuaW5zdGFsbEFwcCA9IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxBcHAgKGFwcFBhdGgsIG9wdHMgPSB7fSkge1xuICBhd2FpdCB0aGlzLm1vYmlsZUluc3RhbGxBcHAoe1xuICAgIC4uLihfLmlzUGxhaW5PYmplY3Qob3B0cykgPyBvcHRzIDoge30pLFxuICAgIGFwcDogYXBwUGF0aCxcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5hY3RpdmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIGFjdGl2YXRlQXBwIChidW5kbGVJZCwgb3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLm1vYmlsZUxhdW5jaEFwcChPYmplY3QuYXNzaWduKHt9LCBvcHRzLCB7YnVuZGxlSWR9KSk7XG59O1xuXG5jb21tYW5kcy5pc0FwcEluc3RhbGxlZCA9IGFzeW5jIGZ1bmN0aW9uIGlzQXBwSW5zdGFsbGVkIChidW5kbGVJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5tb2JpbGVJc0FwcEluc3RhbGxlZCh7YnVuZGxlSWR9KTtcbn07XG5cbmNvbW1hbmRzLnRlcm1pbmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIHRlcm1pbmF0ZUFwcCAoYnVuZGxlSWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMubW9iaWxlVGVybWluYXRlQXBwKHtidW5kbGVJZH0pO1xufTtcblxuY29tbWFuZHMucXVlcnlBcHBTdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIHF1ZXJ5QXBwU3RhdGUgKGJ1bmRsZUlkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLm1vYmlsZVF1ZXJ5QXBwU3RhdGUoe2J1bmRsZUlkfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IExpc3RBcHBzT3B0aW9uc1xuICogQHByb3BlcnR5IHsnU3lzdGVtJ3wnVXNlcid9IGFwcGxpY2F0aW9uVHlwZSBbVXNlcl0gVGhlIHR5cGUgb2YgYXBwbGljYXRpb25zIHRvIGxpc3RcbiAqL1xuXG4vKipcbiAqIExpc3QgYXBwbGljYXRpb25zIGluc3RhbGxlZCBvbiB0aGUgcmVhbCBkZXZpY2UgdW5kZXIgdGVzdFxuICpcbiAqIEBwYXJhbSB7TGlzdEFwcHNPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7QXJyYXk8T2JqZWN0Pn0gQSBsaXN0IG9mIGFwcHMsIHdoZXJlIGVhY2ggaXRlbSBpcyBhIG1hcCB3aGVyZSBrZXlzIGFyZVxuICogYnVuZGxlIGlkZW50aWZpZXJzIGFuZCB2YWx1ZXMgYXJlIG1hcHMgb2YgcGxhdGZvcm0tc3BlY2lmaWMgYXBwIHByb3BlcnRpZXMuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUxpc3RBcHBzID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTGlzdEFwcHMgKG9wdHMgPSB7fSkge1xuICBpZiAoIXRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoYFRoaXMgZXh0ZW5zaW9uIGlzIG9ubHkgc3VwcG9ydGVkIG9uIHJlYWwgZGV2aWNlc2ApO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGFwcGxpY2F0aW9uVHlwZSA9ICdVc2VyJyxcbiAgfSA9IG9wdHM7XG4gIGNvbnN0IHNlcnZpY2UgPSBhd2FpdCBzZXJ2aWNlcy5zdGFydEluc3RhbGxhdGlvblByb3h5U2VydmljZSh0aGlzLm9wdHMuZGV2aWNlLnVkaWQpO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBzZXJ2aWNlLmxpc3RBcHBsaWNhdGlvbnMoe2FwcGxpY2F0aW9uVHlwZX0pO1xuICB9IGZpbmFsbHkge1xuICAgIHNlcnZpY2UuY2xvc2UoKTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9hcHAtbWFuYWdlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
@@ -9,8 +9,6 @@ exports.helpers = exports.default = exports.commands = void 0;
9
9
 
10
10
  require("source-map-support/register");
11
11
 
12
- var _lodash = _interopRequireDefault(require("lodash"));
13
-
14
12
  var _xmldom = _interopRequireDefault(require("@xmldom/xmldom"));
15
13
 
16
14
  var _js2xmlparser = _interopRequireDefault(require("js2xmlparser2"));
@@ -20,7 +18,9 @@ let commands = {},
20
18
  extensions = {};
21
19
  exports.helpers = helpers;
22
20
  exports.commands = commands;
23
- const APPIUM_SRC_XML = '<?xml version="1.0" encoding="UTF-8"?><AppiumAUT/>';
21
+ const APPIUM_AUT_TAG = 'AppiumAUT';
22
+ const APPIUM_SRC_XML = `<?xml version="1.0" encoding="UTF-8"?><${APPIUM_AUT_TAG}/>`;
23
+ const APPIUM_TAG_PATTERN = new RegExp(`</?${APPIUM_AUT_TAG}/?>`);
24
24
 
25
25
  commands.getPageSource = async function getPageSource() {
26
26
  if (this.isWebContext()) {
@@ -39,7 +39,12 @@ commands.getPageSource = async function getPageSource() {
39
39
  };
40
40
 
41
41
  helpers.getNativePageSource = async function getNativePageSource() {
42
- const srcTree = await this.proxyCommand('/source', 'GET');
42
+ const srcTree = await this.proxyCommand(`/source?scope=${APPIUM_AUT_TAG}`, 'GET');
43
+
44
+ if (APPIUM_TAG_PATTERN.test(srcTree)) {
45
+ return srcTree;
46
+ }
47
+
43
48
  const parser = new _xmldom.default.DOMParser();
44
49
  const tree = parser.parseFromString(srcTree);
45
50
  const doc = parser.parseFromString(APPIUM_SRC_XML);
@@ -48,12 +53,9 @@ helpers.getNativePageSource = async function getNativePageSource() {
48
53
  };
49
54
 
50
55
  helpers.mobileGetSource = async function mobileGetSource(opts = {}) {
51
- if (!_lodash.default.isString(opts.format)) {
52
- return await this.getNativePageSource();
53
- }
54
-
55
56
  const paramsMap = {
56
- format: opts.format
57
+ format: opts.format || 'xml',
58
+ scope: APPIUM_AUT_TAG
57
59
  };
58
60
 
59
61
  if (opts.excludedAttributes) {
@@ -126,4 +128,4 @@ var _default = extensions;
126
128
  exports.default = _default;require('source-map-support').install();
127
129
 
128
130
 
129
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9zb3VyY2UuanMiXSwibmFtZXMiOlsiY29tbWFuZHMiLCJoZWxwZXJzIiwiZXh0ZW5zaW9ucyIsIkFQUElVTV9TUkNfWE1MIiwiZ2V0UGFnZVNvdXJjZSIsImlzV2ViQ29udGV4dCIsInNjcmlwdCIsImV4ZWN1dGVBdG9tIiwic2V0dGluZ3MiLCJnZXRTZXR0aW5ncyIsInVzZUpTT05Tb3VyY2UiLCJzcmNUcmVlIiwibW9iaWxlR2V0U291cmNlIiwiZm9ybWF0IiwiZ2V0U291cmNlWG1sIiwiZ2V0VHJlZUZvclhNTCIsImdldE5hdGl2ZVBhZ2VTb3VyY2UiLCJwcm94eUNvbW1hbmQiLCJwYXJzZXIiLCJ4bWxkb20iLCJET01QYXJzZXIiLCJ0cmVlIiwicGFyc2VGcm9tU3RyaW5nIiwiZG9jIiwiZG9jdW1lbnRFbGVtZW50IiwiYXBwZW5kQ2hpbGQiLCJYTUxTZXJpYWxpemVyIiwic2VyaWFsaXplVG9TdHJpbmciLCJvcHRzIiwiXyIsImlzU3RyaW5nIiwicGFyYW1zTWFwIiwiZXhjbHVkZWRBdHRyaWJ1dGVzIiwiZXhjbHVkZWRfYXR0cmlidXRlcyIsInF1ZXJ5IiwiT2JqZWN0IiwiZW50cmllcyIsIm1hcCIsImsiLCJ2IiwiZW5jb2RlVVJJQ29tcG9uZW50Iiwiam9pbiIsImdldFRyZWUiLCJlbGVtZW50IiwiZWxlbWVudEluZGV4IiwicGFyZW50UGF0aCIsImN1clBhdGgiLCJyZWN0Iiwic3VidHJlZSIsInR5cGUiLCJlbmFibGVkIiwicGFyc2VJbnQiLCJpc0VuYWJsZWQiLCJ2aXNpYmxlIiwiaXNWaXNpYmxlIiwieCIsInkiLCJ3aWR0aCIsImhlaWdodCIsIm5hbWUiLCJsYWJlbCIsInZhbHVlIiwiaSIsImNoaWxkcmVuIiwibGVuZ3RoIiwicHVzaCIsImpzb25Tb3VyY2UiLCJ3cmFwQXJyYXkiLCJlbGVtZW50TmFtZSIsImRlY2xhcmF0aW9uIiwiaW5jbHVkZSIsInByZXR0eVByaW50aW5nIiwiaW5kZW50U3RyaW5nIiwiYXNz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RUFBcURGLENBQUMsRUFBdEQsRUFBMEQ7QUFDeERkLE1BQUFBLE9BQU8sQ0FBQyxHQUFELENBQVAsQ0FBYWlCLElBQWIsQ0FBa0J2QixPQUFPLENBQUNDLE9BQU8sQ0FBQ29CLFFBQVIsQ0FBaUJELENBQWpCLENBQUQsRUFBc0JBLENBQXRCLEVBQXlCaEIsT0FBekIsQ0FBekI7QUFDRDs7QUFDRCxXQUFPO0FBQ0wsT0FBRSxrQkFBaUJILE9BQU8sQ0FBQ00sSUFBSyxFQUFoQyxHQUFvQ0Q7QUFEL0IsS0FBUDtBQUdEOztBQUNELE1BQUkzQixJQUFJLEdBQUdxQixPQUFPLENBQUMvQixPQUFELEVBQVUsQ0FBVixFQUFhLEVBQWIsQ0FBbEI7QUFDQSxTQUFPVSxJQUFQO0FBQ0Q7O0FBRUQsU0FBU1AsWUFBVCxDQUF1Qm9ELFVBQXZCLEVBQW1DO0FBQ2pDLFNBQU8sMkJBQU8sV0FBUCxFQUFvQkEsVUFBcEIsRUFBZ0M7QUFDckNDLElBQUFBLFNBQVMsRUFBRTtBQUFDakIsTUFBQUEsT0FBTyxFQUFFLEtBQVY7QUFBaUJrQixNQUFBQSxXQUFXLEVBQUU7QUFBOUIsS0FEMEI7QUFFckNDLElBQUFBLFdBQVcsRUFBRTtBQUFDQyxNQUFBQSxPQUFPLEVBQUU7QUFBVixLQUZ3QjtBQUdyQ0MsSUFBQUEsY0FBYyxFQUFFO0FBQUNDLE1BQUFBLFlBQVksRUFBRTtBQUFmO0FBSHFCLEdBQWhDLENBQVA7QUFLRDs7QUFHRHJDLE1BQU0sQ0FBQ3NDLE1BQVAsQ0FBY3ZFLFVBQWQsRUFBMEJGLFFBQTFCLEVBQW9DQyxPQUFwQztlQUVlQyxVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB4bWxkb20gZnJvbSAnQHhtbGRvbS94bWxkb20nO1xuaW1wb3J0IGpzMnhtbCBmcm9tICdqczJ4bWxwYXJzZXIyJztcblxuXG5sZXQgY29tbWFuZHMgPSB7fSwgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cbmNvbnN0IEFQUElVTV9TUkNfWE1MID0gJzw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/PjxBcHBpdW1BVVQvPic7XG5cblxuY29tbWFuZHMuZ2V0UGFnZVNvdXJjZSA9IGFzeW5jIGZ1bmN0aW9uIGdldFBhZ2VTb3VyY2UgKCkge1xuICBpZiAodGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIGNvbnN0IHNjcmlwdCA9ICdyZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm91dGVySFRNTCc7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ2V4ZWN1dGVfc2NyaXB0JywgW3NjcmlwdCwgW11dKTtcbiAgfVxuXG4gIGlmICgoYXdhaXQgdGhpcy5zZXR0aW5ncy5nZXRTZXR0aW5ncygpKS51c2VKU09OU291cmNlKSB7XG4gICAgY29uc3Qgc3JjVHJlZSA9IGF3YWl0IHRoaXMubW9iaWxlR2V0U291cmNlKHtmb3JtYXQ6ICdqc29uJ30pO1xuICAgIHJldHVybiBnZXRTb3VyY2VYbWwoZ2V0VHJlZUZvclhNTChzcmNUcmVlKSk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0TmF0aXZlUGFnZVNvdXJjZSgpO1xufTtcblxuaGVscGVycy5nZXROYXRpdmVQYWdlU291cmNlID0gYXN5bmMgZnVuY3Rpb24gZ2V0TmF0aXZlUGFnZVNvdXJjZSAoKSB7XG4gIGNvbnN0IHNyY1RyZWUgPSBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3NvdXJjZScsICdHRVQnKTtcbiAgY29uc3QgcGFyc2VyID0gbmV3IHhtbGRvbS5ET01QYXJzZXIoKTtcbiAgY29uc3QgdHJlZSA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoc3JjVHJlZSk7XG4gIGNvbnN0IGRvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoQVBQSVVNX1NSQ19YTUwpO1xuICBkb2MuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKHRyZWUuZG9jdW1lbnRFbGVtZW50KTtcbiAgcmV0dXJuIG5ldyB4bWxkb20uWE1MU2VyaWFsaXplcigpLnNlcmlhbGl6ZVRvU3RyaW5nKGRvYyk7XG59O1xuXG5oZWxwZXJzLm1vYmlsZUdldFNvdXJjZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUdldFNvdXJjZSAob3B0cyA9IHt9KSB7XG4gIGlmICghXy5pc1N0cmluZyhvcHRzLmZvcm1hdCkpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXROYXRpdmVQYWdlU291cmNlKCk7XG4gIH1cbiAgY29uc3QgcGFyYW1zTWFwID0ge1xuICAgIGZvcm1hdDogb3B0cy5mb3JtYXQsXG4gIH07XG4gIGlmIChvcHRzLmV4Y2x1ZGVkQXR0cmlidXRlcykge1xuICAgIHBhcmFtc01hcC5leGNsdWRlZF9hdHRyaWJ1dGVzID0gb3B0cy5leGNsdWRlZEF0dHJpYnV0ZXM7XG4gIH1cbiAgY29uc3QgcXVlcnkgPSBPYmplY3QuZW50cmllcyhwYXJhbXNNYXApXG4gICAgLm1hcCgoW2ssIHZdKSA9PiBgJHtlbmNvZGVVUklDb21wb25lbnQoayl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHYpfWApXG4gICAgLmpvaW4oJyYnKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvc291cmNlPyR7cXVlcnl9YCwgJ0dFVCcpO1xufTtcblxuLyogV2lsbCBnZXQgSlNPTiBvZiB0aGUgZm9ybTpcbiAqICAgeyBpc0VuYWJsZWQ6ICcxJyxcbiAqICAgICBpc1Zpc2libGU6ICcxJyxcbiAqICAgICBmcmFtZTogJ3t7MCwgMH0sIHszNzUsIDY2N319JyxcbiAqICAgICBjaGlsZHJlbjpcbiAqICAgICAgWyB7IGlzRW5hYmxlZDogJzEnLFxuICogICAgICAgICAgaXNWaXNpYmxlOiAnMScsXG4gKiAgICAgICAgICBmcmFtZTogJ3t7MCwgMH0sIHszNzUsIDY2N319JyxcbiAqICAgICAgICAgIGNoaWxkcmVuOiBbXSxcbiAqICAgICAgICAgIHJlY3Q6IHsgeDogMCwgeTogMCwgd2lkdGg6IDM3NSwgaGVpZ2h0OiA2NjcgfSxcbiAqICAgICAgICAgIHZhbHVlOiBudWxsLFxuICogICAgICAgICAgbGFiZWw6IG51bGwsXG4gKiAgICAgICAgICB0eXBlOiAnT3RoZXInLFxuICogICAgICAgICAgbmFtZTogbnVsbCxcbiAqICAgICAgICAgIHJhd0lkZW50aWZpZXI6IG51bGwgfSxcbiAqICAgICByZWN0OiB7IG9yaWdpbjogeyB4OiAwLCB5OiAwIH0sIHNpemU6IHsgd2lkdGg6IDM3NSwgaGVpZ2h0OiA2NjcgfSB9LFxuICogICAgIHZhbHVlOiBudWxsLFxuICogICAgIGxhYmVsOiAnVUlDYXRhbG9nJyxcbiAqICAgICB0eXBlOiAnQXBwbGljYXRpb24nLFxuICogICAgIG5hbWU6ICdVSUNhdGFsb2cnLFxuICogICAgIHJhd0lkZW50aWZpZXI6IG51bGwgfVxuICovXG5mdW5jdGlvbiBnZXRUcmVlRm9yWE1MIChzcmNUcmVlKSB7XG4gIGZ1bmN0aW9uIGdldFRyZWUgKGVsZW1lbnQsIGVsZW1lbnRJbmRleCwgcGFyZW50UGF0aCkge1xuICAgIGxldCBjdXJQYXRoID0gYCR7cGFyZW50UGF0aH0vJHtlbGVtZW50SW5kZXh9YDtcbiAgICBsZXQgcmVjdCA9IGVsZW1lbnQucmVjdCB8fCB7fTtcbiAgICBsZXQgc3VidHJlZSA9IHtcbiAgICAgICdAJzoge1xuICAgICAgICB0eXBlOiBgWENVSUVsZW1lbnRUeXBlJHtlbGVtZW50LnR5cGV9YCxcbiAgICAgICAgZW5hYmxlZDogcGFyc2VJbnQoZWxlbWVudC5pc0VuYWJsZWQsIDEwKSA9PT0gMSxcbiAgICAgICAgdmlzaWJsZTogcGFyc2VJbnQoZWxlbWVudC5pc1Zpc2libGUsIDEwKSA9PT0gMSxcbiAgICAgICAgeDogcmVjdC54LFxuICAgICAgICB5OiByZWN0LnksXG4gICAgICAgIHdpZHRoOiByZWN0LndpZHRoLFxuICAgICAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0LFxuICAgICAgfSxcbiAgICAgICc+JzogW11cbiAgICB9O1xuICAgIGlmIChlbGVtZW50Lm5hbWUgIT09IG51bGwpIHtcbiAgICAgIHN1YnRyZWVbJ0AnXS5uYW1lID0gZWxlbWVudC5uYW1lO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudC5sYWJlbCAhPT0gbnVsbCkge1xuICAgICAgc3VidHJlZVsnQCddLmxhYmVsID0gZWxlbWVudC5sYWJlbDtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnQudmFsdWUgIT09IG51bGwpIHtcbiAgICAgIHN1YnRyZWVbJ0AnXS52YWx1ZSA9IGVsZW1lbnQudmFsdWU7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgKGVsZW1lbnQuY2hpbGRyZW4gfHwgW10pLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzdWJ0cmVlWyc+J10ucHVzaChnZXRUcmVlKGVsZW1lbnQuY2hpbGRyZW5baV0sIGksIGN1clBhdGgpKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIFtgWENVSUVsZW1lbnRUeXBlJHtlbGVtZW50LnR5cGV9YF06IHN1YnRyZWVcbiAgICB9O1xuICB9XG4gIGxldCB0cmVlID0gZ2V0VHJlZShzcmNUcmVlLCAwLCAnJyk7XG4gIHJldHVybiB0cmVlO1xufVxuXG5mdW5jdGlvbiBnZXRTb3VyY2VYbWwgKGpzb25Tb3VyY2UpIHtcbiAgcmV0dXJuIGpzMnhtbCgnQXBwaXVtQVVUJywganNvblNvdXJjZSwge1xuICAgIHdyYXBBcnJheToge2VuYWJsZWQ6IGZhbHNlLCBlbGVtZW50TmFtZTogJ2VsZW1lbnQnfSxcbiAgICBkZWNsYXJhdGlvbjoge2luY2x1ZGU6IHRydWV9LFxuICAgIHByZXR0eVByaW50aW5nOiB7aW5kZW50U3RyaW5nOiAnICAnfVxuICB9KTtcbn1cblxuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzLCBoZWxwZXJzKTtcbmV4cG9ydCB7IGNvbW1hbmRzLCBoZWxwZXJzIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sImZpbGUiOiJsaWIvY29tbWFuZHMvc291cmNlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
131
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9zb3VyY2UuanMiXSwibmFtZXMiOlsiY29tbWFuZHMiLCJoZWxwZXJzIiwiZXh0ZW5zaW9ucyIsIkFQUElVTV9BVVRfVEFHIiwiQVBQSVVNX1NSQ19YTUwiLCJBUFBJVU1fVEFHX1BBVFRFUk4iLCJSZWdFeHAiLCJnZXRQYWdlU291cmNlIiwiaXNXZWJDb250ZXh0Iiwic2NyaXB0IiwiZXhlY3V0ZUF0b20iLCJzZXR0aW5ncyIsImdldFNldHRpbmdzIiwidXNlSlNPTlNvdXJjZSIsInNyY1RyZWUiLCJtb2JpbGVHZXRTb3VyY2UiLCJmb3JtYXQiLCJnZXRTb3VyY2VYbWwiLCJnZXRUcmVlRm9yWE1MIiwiZ2V0TmF0aXZlUGFnZVNvdXJjZSIsInByb3h5Q29tbWFuZCIsInRlc3QiLCJwYXJzZXIiLCJ4bWxkb20iLCJET01QYXJzZXIiLCJ0cmVlIiwicGFyc2VGcm9tU3RyaW5nIiwiZG9jIiwiZG9jdW1lbnRFbGVtZW50IiwiYXBwZW5kQ2hpbGQiLCJYTUxTZXJpYWxpemVyIiwic2VyaWFsaXplVG9TdHJpbmciLCJvcHRzIiwicGFyYW1zTWFwIiwic2NvcGUiLCJleGNsdWRlZEF0dHJpYnV0ZXMiLCJleGNsdWRlZF9hdHRyaWJ1dGVzIiwicXVlcnkiLCJPYmplY3QiLCJlbnRyaWVzIiwibWFwIiwiayIsInYiLCJlbmNvZGVVUklDb21wb25lbnQiLCJqb2luIiwiZ2V0VHJlZSIsImVsZW1lbnQiLCJlbGVtZW50SW5kZXgiLCJwYXJlbnRQYXRoIiwiY3VyUGF0aCIsInJlY3QiLCJzdWJ0cmVlIiwidHlwZSIsImVuYWJsZWQiLCJwYXJzZUludCIsImlzRW5hYmxlZCIsInZpc2libGUiLCJpc1Zpc2libGUiLCJ4IiwieSIsIndpZHRoIiwiaGVpZ2h0IiwibmFtZSIsImxhYmVsIiwidmFsdWUiLCJpIiwiY2hpbGRyZW4iLCJsZW5ndGgiLCJwdXNoIiwianNvblNvdXJjZSIsIndyYXBBcnJheSIsImVsZW1lbnROYW1lIiwiZGVjbGFyYXRpb24i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bSBmcm9tICdAeG1sZG9tL3htbGRvbSc7XG5pbXBvcnQganMyeG1sIGZyb20gJ2pzMnhtbHBhcnNlcjInO1xuXG5cbmxldCBjb21tYW5kcyA9IHt9LCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuY29uc3QgQVBQSVVNX0FVVF9UQUcgPSAnQXBwaXVtQVVUJztcbmNvbnN0IEFQUElVTV9TUkNfWE1MID0gYDw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/Pjwke0FQUElVTV9BVVRfVEFHfS8+YDtcbmNvbnN0IEFQUElVTV9UQUdfUEFUVEVSTiA9IG5ldyBSZWdFeHAoYDwvPyR7QVBQSVVNX0FVVF9UQUd9Lz8+YCk7XG5cblxuY29tbWFuZHMuZ2V0UGFnZVNvdXJjZSA9IGFzeW5jIGZ1bmN0aW9uIGdldFBhZ2VTb3VyY2UgKCkge1xuICBpZiAodGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIGNvbnN0IHNjcmlwdCA9ICdyZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm91dGVySFRNTCc7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ2V4ZWN1dGVfc2NyaXB0JywgW3NjcmlwdCwgW11dKTtcbiAgfVxuXG4gIGlmICgoYXdhaXQgdGhpcy5zZXR0aW5ncy5nZXRTZXR0aW5ncygpKS51c2VKU09OU291cmNlKSB7XG4gICAgY29uc3Qgc3JjVHJlZSA9IGF3YWl0IHRoaXMubW9iaWxlR2V0U291cmNlKHtmb3JtYXQ6ICdqc29uJ30pO1xuICAgIHJldHVybiBnZXRTb3VyY2VYbWwoZ2V0VHJlZUZvclhNTChzcmNUcmVlKSk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0TmF0aXZlUGFnZVNvdXJjZSgpO1xufTtcblxuaGVscGVycy5nZXROYXRpdmVQYWdlU291cmNlID0gYXN5bmMgZnVuY3Rpb24gZ2V0TmF0aXZlUGFnZVNvdXJjZSAoKSB7XG4gIGNvbnN0IHNyY1RyZWUgPSBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL3NvdXJjZT9zY29wZT0ke0FQUElVTV9BVVRfVEFHfWAsICdHRVQnKTtcbiAgaWYgKEFQUElVTV9UQUdfUEFUVEVSTi50ZXN0KHNyY1RyZWUpKSB7XG4gICAgcmV0dXJuIHNyY1RyZWU7XG4gIH1cbiAgLy8gVGhpcyBtaWdodCBvbmx5IGhhcHBlbiBpZiB0aGUgZHJpdmVyIGlzIHVzaW5nIGFuIG9sZGVyL2NhY2hlZCBXREFcbiAgLy8gYnVpbGQgKGUuZy4gYmVsb3cgMy4xNi4wKVxuICAvLyBUT0RPOiByZW1vdmUgdGhpcyBibG9jayBhZnRlciBhIHdoaWxlXG4gIGNvbnN0IHBhcnNlciA9IG5ldyB4bWxkb20uRE9NUGFyc2VyKCk7XG4gIGNvbnN0IHRyZWUgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHNyY1RyZWUpO1xuICBjb25zdCBkb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKEFQUElVTV9TUkNfWE1MKTtcbiAgZG9jLmRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0cmVlLmRvY3VtZW50RWxlbWVudCk7XG4gIHJldHVybiBuZXcgeG1sZG9tLlhNTFNlcmlhbGl6ZXIoKS5zZXJpYWxpemVUb1N0cmluZyhkb2MpO1xufTtcblxuaGVscGVycy5tb2JpbGVHZXRTb3VyY2UgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVHZXRTb3VyY2UgKG9wdHMgPSB7fSkge1xuICBjb25zdCBwYXJhbXNNYXAgPSB7XG4gICAgZm9ybWF0OiBvcHRzLmZvcm1hdCB8fCAneG1sJyxcbiAgICBzY29wZTogQVBQSVVNX0FVVF9UQUcsXG4gIH07XG4gIGlmIChvcHRzLmV4Y2x1ZGVkQXR0cmlidXRlcykge1xuICAgIHBhcmFtc01hcC5leGNsdWRlZF9hdHRyaWJ1dGVzID0gb3B0cy5leGNsdWRlZEF0dHJpYnV0ZXM7XG4gIH1cbiAgY29uc3QgcXVlcnkgPSBPYmplY3QuZW50cmllcyhwYXJhbXNNYXApXG4gICAgLm1hcCgoW2ssIHZdKSA9PiBgJHtlbmNvZGVVUklDb21wb25lbnQoayl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHYpfWApXG4gICAgLmpvaW4oJyYnKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvc291cmNlPyR7cXVlcnl9YCwgJ0dFVCcpO1xufTtcblxuLyogV2lsbCBnZXQgSlNPTiBvZiB0aGUgZm9ybTpcbiAqICAgeyBpc0VuYWJsZWQ6ICcxJyxcbiAqICAgICBpc1Zpc2libGU6ICcxJyxcbiAqICAgICBmcmFtZTogJ3t7MCwgMH0sIHszNzUsIDY2N319JyxcbiAqICAgICBjaGlsZHJlbjpcbiAqICAgICAgWyB7IGlzRW5hYmxlZDogJzEnLFxuICogICAgICAgICAgaXNWaXNpYmxlOiAnMScsXG4gKiAgICAgICAgICBmcmFtZTogJ3t7MCwgMH0sIHszNzUsIDY2N319JyxcbiAqICAgICAgICAgIGNoaWxkcmVuOiBbXSxcbiAqICAgICAgICAgIHJlY3Q6IHsgeDogMCwgeTogMCwgd2lkdGg6IDM3NSwgaGVpZ2h0OiA2NjcgfSxcbiAqICAgICAgICAgIHZhbHVlOiBudWxsLFxuICogICAgICAgICAgbGFiZWw6IG51bGwsXG4gKiAgICAgICAgICB0eXBlOiAnT3RoZXInLFxuICogICAgICAgICAgbmFtZTogbnVsbCxcbiAqICAgICAgICAgIHJhd0lkZW50aWZpZXI6IG51bGwgfSxcbiAqICAgICByZWN0OiB7IG9yaWdpbjogeyB4OiAwLCB5OiAwIH0sIHNpemU6IHsgd2lkdGg6IDM3NSwgaGVpZ2h0OiA2NjcgfSB9LFxuICogICAgIHZhbHVlOiBudWxsLFxuICogICAgIGxhYmVsOiAnVUlDYXRhbG9nJyxcbiAqICAgICB0eXBlOiAnQXBwbGljYXRpb24nLFxuICogICAgIG5hbWU6ICdVSUNhdGFsb2cnLFxuICogICAgIHJhd0lkZW50aWZpZXI6IG51bGwgfVxuICovXG5mdW5jdGlvbiBnZXRUcmVlRm9yWE1MIChzcmNUcmVlKSB7XG4gIGZ1bmN0aW9uIGdldFRyZWUgKGVsZW1lbnQsIGVsZW1lbnRJbmRleCwgcGFyZW50UGF0aCkge1xuICAgIGxldCBjdXJQYXRoID0gYCR7cGFyZW50UGF0aH0vJHtlbGVtZW50SW5kZXh9YDtcbiAgICBsZXQgcmVjdCA9IGVsZW1lbnQucmVjdCB8fCB7fTtcbiAgICBsZXQgc3VidHJlZSA9IHtcbiAgICAgICdAJzoge1xuICAgICAgICB0eXBlOiBgWENVSUVsZW1lbnRUeXBlJHtlbGVtZW50LnR5cGV9YCxcbiAgICAgICAgZW5hYmxlZDogcGFyc2VJbnQoZWxlbWVudC5pc0VuYWJsZWQsIDEwKSA9PT0gMSxcbiAgICAgICAgdmlzaWJsZTogcGFyc2VJbnQoZWxlbWVudC5pc1Zpc2libGUsIDEwKSA9PT0gMSxcbiAgICAgICAgeDogcmVjdC54LFxuICAgICAgICB5OiByZWN0LnksXG4gICAgICAgIHdpZHRoOiByZWN0LndpZHRoLFxuICAgICAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0LFxuICAgICAgfSxcbiAgICAgICc+JzogW11cbiAgICB9O1xuICAgIGlmIChlbGVtZW50Lm5hbWUgIT09IG51bGwpIHtcbiAgICAgIHN1YnRyZWVbJ0AnXS5uYW1lID0gZWxlbWVudC5uYW1lO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudC5sYWJlbCAhPT0gbnVsbCkge1xuICAgICAgc3VidHJlZVsnQCddLmxhYmVsID0gZWxlbWVudC5sYWJlbDtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnQudmFsdWUgIT09IG51bGwpIHtcbiAgICAgIHN1YnRyZWVbJ0AnXS52YWx1ZSA9IGVsZW1lbnQudmFsdWU7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgKGVsZW1lbnQuY2hpbGRyZW4gfHwgW10pLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzdWJ0cmVlWyc+J10ucHVzaChnZXRUcmVlKGVsZW1lbnQuY2hpbGRyZW5baV0sIGksIGN1clBhdGgpKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIFtgWENVSUVsZW1lbnRUeXBlJHtlbGVtZW50LnR5cGV9YF06IHN1YnRyZWVcbiAgICB9O1xuICB9XG4gIGxldCB0cmVlID0gZ2V0VHJlZShzcmNUcmVlLCAwLCAnJyk7XG4gIHJldHVybiB0cmVlO1xufVxuXG5mdW5jdGlvbiBnZXRTb3VyY2VYbWwgKGpzb25Tb3VyY2UpIHtcbiAgcmV0dXJuIGpzMnhtbCgnQXBwaXVtQVVUJywganNvblNvdXJjZSwge1xuICAgIHdyYXBBcnJheToge2VuYWJsZWQ6IGZhbHNlLCBlbGVtZW50TmFtZTogJ2VsZW1lbnQnfSxcbiAgICBkZWNsYXJhdGlvbjoge2luY2x1ZGU6IHRydWV9LFxuICAgIHByZXR0eVByaW50aW5nOiB7aW5kZW50U3RyaW5nOiAnICAnfVxuICB9KTtcbn1cblxuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzLCBoZWxwZXJzKTtcbmV4cG9ydCB7IGNvbW1hbmRzLCBoZWxwZXJzIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sImZpbGUiOiJsaWIvY29tbWFuZHMvc291cmNlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
@@ -51,8 +51,6 @@ var _appiumIdb = _interopRequireDefault(require("appium-idb"));
51
51
 
52
52
  var _deviceConnectionsFactory = _interopRequireDefault(require("./device-connections-factory"));
53
53
 
54
- var _argConstraints = require("./arg-constraints");
55
-
56
54
  const SHUTDOWN_OTHER_FEAT_NAME = 'shutdown_other_sims';
57
55
  const CUSTOMIZE_RESULT_BUNDPE_PATH = 'customize_result_bundle_path';
58
56
  const defaultServerCaps = {
@@ -103,10 +101,6 @@ class XCUITestDriver extends _appiumBaseDriver.BaseDriver {
103
101
  }
104
102
  }
105
103
 
106
- static get argsConstraints() {
107
- return _argConstraints.ARGS_CONSTRAINTS;
108
- }
109
-
110
104
  async onSettingsUpdate(key, value) {
111
105
  if (key !== 'nativeWebTap' && key !== 'nativeWebTapStrict') {
112
106
  return await this.proxyCommand('/appium/settings', 'POST', {
@@ -168,15 +162,14 @@ class XCUITestDriver extends _appiumBaseDriver.BaseDriver {
168
162
  mergeCliArgsToOpts() {
169
163
  let didMerge = false;
170
164
 
171
- for (const arg of Object.keys(_argConstraints.ARGS_CONSTRAINTS)) {
172
- if (_lodash.default.has(this.cliArgs, arg)) {
173
- _logger.default.info(`Using ${arg} value of '${this.cliArgs[arg]}' from CLI`);
165
+ for (const [key, value] of Object.entries((_this$cliArgs = this.cliArgs) !== null && _this$cliArgs !== void 0 ? _this$cliArgs : {})) {
166
+ var _this$cliArgs;
174
167
 
175
- if (_lodash.default.has(this.opts, arg)) {
176
- _logger.default.info(`(This overwrites value of '${this.opts[arg]}' sent in via caps)`);
177
- }
168
+ if (_lodash.default.has(this.opts, key)) {
169
+ this.opts[key] = value;
170
+
171
+ _logger.default.info(`CLI arg '${key}' with value '${value}' overwrites value '${this.opts[key]}' sent in via caps)`);
178
172
 
179
- this.opts[arg] = this.cliArgs[arg];
180
173
  didMerge = true;
181
174
  }
182
175
  }
@@ -1332,4 +1325,4 @@ var _default = XCUITestDriver;
1332
1325
  exports.default = _default;require('source-map-support').install();
1333
1326
 
1334
1327
 
1335
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXIuanMiXSwibmFtZXMiOlsiU0hVVERPV05fT1RIRVJfRkVBVF9OQU1FIiwiQ1VTVE9NSVpFX1JFU1VMVF9CVU5EUEVfUEFUSCIsImRlZmF1bHRTZXJ2ZXJDYXBzIiwid2ViU3RvcmFnZUVuYWJsZWQiLCJsb2NhdGlvbkNvbnRleHRFbmFibGVkIiwiYnJvd3Nlck5hbWUiLCJwbGF0Zm9ybSIsImphdmFzY3JpcHRFbmFibGVkIiwiZGF0YWJhc2VFbmFibGVkIiwidGFrZXNTY3JlZW5zaG90IiwibmV0d29ya0Nvbm5lY3Rpb25FbmFibGVkIiwiU0FGQVJJX0JVTkRMRV9JRCIsIldEQV9TSU1fU1RBUlRVUF9SRVRSSUVTIiwiV0RBX1JFQUxfREVWX1NUQVJUVVBfUkVUUklFUyIsIldEQV9SRUFMX0RFVl9UVVRPUklBTF9VUkwiLCJXREFfU1RBUlRVUF9SRVRSWV9JTlRFUlZBTCIsIkRFRkFVTFRfU0VUVElOR1MiLCJuYXRpdmVXZWJUYXAiLCJuYXRpdmVXZWJUYXBTdHJpY3QiLCJ1c2VKU09OU291cmNlIiwic2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcyIsImVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXMiLCJtanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5IiwibWpwZWdTZXJ2ZXJGcmFtZXJhdGUiLCJzY3JlZW5zaG90UXVhbGl0eSIsIm1qcGVnU2NhbGluZ0ZhY3RvciIsInJlZHVjZU1vdGlvbiIsIlNIQVJFRF9SRVNPVVJDRVNfR1VBUkQiLCJBc3luY0xvY2siLCJXRUJfRUxFTUVOVFNfQ0FDSEVfU0laRSIsIk5PX1BST1hZX05BVElWRV9MSVNUIiwiTk9fUFJPWFlfV0VCX0xJU1QiLCJjb25jYXQiLCJNRU1PSVpFRF9GVU5DVElPTlMiLCJYQ1VJVGVzdERyaXZlciIsIkJhc2VEcml2ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJzaG91bGRWYWxpZGF0ZUNhcHMiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJsb2NhdG9yU3RyYXRlZ2llcyIsIndlYkxvY2F0b3JTdHJhdGVnaWVzIiwicmVzZXRJb3MiLCJzZXR0aW5ncyIsIkRldmljZVNldHRpbmdzIiwib25TZXR0aW5nc1VwZGF0ZSIsImJpbmQiLCJsb2dzIiwiZm4iLCJfIiwibWVtb2l6ZSIsImFyZ3NDb25zdHJhaW50cyIsIkFSR1NfQ09OU1RSQUlOVFMiLCJrZXkiLCJ2YWx1ZSIsInByb3h5Q29tbWFuZCIsIndkYSIsImRldmljZSIsImp3cFByb3h5QWN0aXZlIiwicHJveHlSZXFSZXMiLCJqd3BQcm94eUF2b2lkIiwic2FmYXJpIiwiY2FjaGVkV2RhU3RhdHVzIiwiY3VyV2ViRnJhbWVzIiwiX2N1cnJlbnRVcmwiLCJjdXJDb250ZXh0IiwieGNvZGVWZXJzaW9uIiwiY29udGV4dHMiLCJpbXBsaWNpdFdhaXRNcyIsImFzeW5jbGliV2FpdE1zIiwicGFnZUxvYWRNcyIsImxhbmRzY2FwZVdlYkNvb3Jkc09mZnNldCIsInJlbW90ZSIsIndlYkVsZW1lbnRzQ2FjaGUiLCJMUlUiLCJtYXgiLCJkcml2ZXJEYXRhIiwiZ2V0U3RhdHVzIiwiZHJpdmVySW5mbyIsInN0YXR1cyIsImJ1aWxkIiwidmVyc2lvbiIsIm1lcmdlQ2xpQXJnc1RvT3B0cyIsImRpZE1lcmdlIiwiYXJnIiwiT2JqZWN0Iiwia2V5cyIsImhhcyIsImNsaUFyZ3MiLCJsb2ciLCJpbmZvIiwiY3JlYXRlU2Vzc2lvbiIsImFyZ3MiLCJsaWZlY3ljbGVEYXRhIiwic2Vzc2lvbklkIiwiY2FwcyIsInZhbGlkYXRlRGVzaXJlZENhcHMiLCJzdGFydCIsImFzc2lnbiIsInVkaWQiLCJ1cGRhdGVTZXR0aW5ncyIsIndkYVNldHRpbmdzIiwibWpwZWdTY3JlZW5zaG90VXJsIiwibWpwZWdTdHJlYW0iLCJtanBlZyIsIk1KcGVnU3RyZWFtIiwiZSIsImVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsImRlbGV0ZVNlc3Npb24iLCJub1Jlc2V0IiwiZnVsbFJlc2V0IiwiaW9zU2RrVmVyc2lvbiIsInJlYWxEZXZpY2UiLCJkZXRlcm1pbmVEZXZpY2UiLCJzaW11bGF0b3JEZXZpY2VzU2V0UGF0aCIsImRldmljZXNTZXRQYXRoIiwicGxhdGZvcm1WZXJzaW9uIiwiZ2V0UGxhdGZvcm1WZXJzaW9uIiwibm9ybWFsaXplZFZlcnNpb24iLCJ1dGlsIiwiY29tcGFyZVZlcnNpb25zIiwiRXJyb3IiLCJpc0VtcHR5Iiwid2ViRHJpdmVyQWdlbnRVcmwiLCJsb2dFdmVudCIsInRvTG93ZXIiLCJhcHAiLCJ1bmRlZmluZWQiLCJwcm9jZXNzQXJndW1lbnRzIiwiYnVuZGxlSWQiLCJzYWZhcmlJbml0aWFsVXJsIiwiaXNSZWFsRGV2aWNlIiwiYWRkcmVzcyIsInBvcnQiLCJjb25maWd1cmVBcHAiLCJydW5SZXNldCIsIldlYkRyaXZlckFnZW50IiwicmV0cmlldmVEZXJpdmVkRGF0YVBhdGgiLCJjYXRjaCIsImRlYnVnIiwibWVtb2l6ZWRMb2dJbmZvIiwibG9nSW5mbyIsInN0YXJ0TG9nQ2FwdHVyZSIsInNraXBMb2dDYXB0dXJlIiwicmVzdWx0IiwiaXNMb2dDYXB0dXJlU3RhcnRlZCIsImlzU2ltdWxhdG9yIiwic2h1dGRvd25PdGhlclNpbXVsYXRvcnMiLCJlbnN1cmVGZWF0dXJlRW5hYmxlZCIsImlzU2FmYXJpIiwic2FmYXJpR2xvYmFsUHJlZmVyZW5jZXMiLCJ1cGRhdGVTYWZhcmlHbG9iYWxTZXR0aW5ncyIsImxvY2FsQ29uZmlnIiwic2ltIiwiY3VzdG9tU1NMQ2VydCIsImNlcnRIZWFkIiwidHJ1bmNhdGUiLCJsZW5ndGgiLCJzdGFydFNpbSIsImxhdW5jaFdpdGhJREIiLCJpZGIiLCJJREIiLCJjb25uZWN0IiwibWVzc2FnZSIsImluc3RhbGxBVVQiLCJpc0FwcEluc3RhbGxlZCIsImVycm9yQW5kVGhyb3ciLCJwZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zTWFwcGluZyIsInRvUGFpcnMiLCJwYXJzZSIsInNldFBlcm1pc3Npb25zIiwid2FybiIsImNhbGVuZGFyQWNjZXNzQXV0aG9yaXplZCIsImVuYWJsZUNhbGVuZGFyQWNjZXNzIiwiZGlzYWJsZUNhbGVuZGFyQWNjZXNzIiwic3RhcnRXZGEiLCJzZXRSZWR1Y2VNb3Rpb24iLCJzZXRJbml0aWFsT3JpZW50YXRpb24iLCJvcmllbnRhdGlvbiIsIm9wZW5VcmwiLCJhdXRvV2VidmlldyIsIm5hdlRvSW5pdGlhbFdlYnZpZXciLCJzZXRVcmwiLCJoYXNWYWx1ZSIsImNsZWFudXBPYnNvbGV0ZVByb2Nlc3NlcyIsInVzZVBvcnRGb3J3YXJkaW5nIiwid2RhQmFzZVVybCIsIkRFVklDRV9DT05ORUNUSU9OU19GQUNUT1JZIiwicmVxdWVzdENvbm5lY3Rpb24iLCJ1cmwiLCJkZXZpY2VQb3J0Iiwid2RhUmVtb3RlUG9ydCIsInN5bmNocm9uaXphdGlvbktleSIsIm5hbWUiLCJ1c2VYY3Rlc3RydW5GaWxlIiwiaXNTb3VyY2VGcmVzaCIsImRlcml2ZWREYXRhUGF0aCIsInBhdGgiLCJub3JtYWxpemUiLCJpc0J1c3kiLCJib290c3RyYXBQYXRoIiwiYWNxdWlyZSIsInVzZU5ld1dEQSIsInF1aXRBbmRVbmluc3RhbGwiLCJzZXR1cENhY2hpbmciLCJtc2ciLCJyZXN1bHRCdW5kbGVQYXRoIiwic3RhcnR1cFJldHJpZXMiLCJ3ZGFTdGFydHVwUmV0cmllcyIsInN0YXJ0dXBSZXRyeUludGVydmFsIiwid2RhU3RhcnR1cFJldHJ5SW50ZXJ2YWwiLCJyZXRyeUNvdW50IiwicmV0cmllcyIsIm1ham9yIiwibGF1bmNoIiwiZXJyIiwiZXJyb3JNc2ciLCJvcmlnaW5hbFN0YWNrdHJhY2UiLCJzdGFydFdkYVNlc3Npb24iLCJzdGFjayIsImNsZWFyU3lzdGVtRmlsZXMiLCJmdWxseVN0YXJ0ZWQiLCJzZXJ2ZXIiLCJyZWNvcmRlciIsImNvbXBhY3QiLCJfcmVjZW50U2NyZWVuUmVjb3JkZXIiLCJfYXVkaW9SZWNvcmRlciIsImludGVycnVwdCIsImNsZWFudXAiLCJfcGVyZlJlY29yZGVycyIsIkIiLCJhbGwiLCJtYXAiLCJ4Iiwic3RvcCIsInN0b3BSZW1vdGUiLCJyZXNldE9uU2Vzc2lvblN0YXJ0T25seSIsImVuZm9yY2VTaW11bGF0b3JTaHV0ZG93biIsImNyZWF0ZVNpbSIsImRlbGV0ZSIsInNob3VsZFJlc2V0TG9jYXRpb25TZXJ2aXZjZSIsInJlc2V0TG9jYXRpb25TZXJ2aWNlIiwibW9iaWxlUmVzZXRMb2NhdGlvblNlcnZpY2UiLCJpZ25vcmUiLCJzeXNsb2ciLCJzdG9wQ2FwdHVyZSIsImp3cHJveHkiLCJxdWl0IiwicmVsZWFzZUNvbm5lY3Rpb24iLCJleGVjdXRlQ29tbWFuZCIsImNtZCIsInJlY2VpdmVBc3luY1Jlc3BvbnNlIiwiYXBwSXNQYWNrYWdlT3JCdW5kbGUiLCJ0ZXN0IiwiaGVscGVycyIsImRldmljZU5hbWUiLCJzZXR1cFZlcnNpb25DYXBzIiwidG9Mb3dlckNhc2UiLCJkZXZpY2VQbGF0Zm9ybSIsImRldmljZXMiLCJqb2luIiwiaW5jbHVkZXMiLCJpZ24iLCJlbmZvcmNlRnJlc2hTaW11bGF0b3JDcmVhdGlvbiIsInJ1bk9wdHMiLCJzY2FsZUZhY3RvciIsImNvbm5lY3RIYXJkd2FyZUtleWJvYXJkIiwicGFzdGVib2FyZEF1dG9tYXRpY1N5bmMiLCJzaW11bGF0b3JQYXN0ZWJvYXJkQXV0b21hdGljU3luYyIsImlzSGVhZGxlc3MiLCJ0cmFjZVBvaW50ZXIiLCJzaW11bGF0b3JUcmFjZVBvaW50ZXIiLCJkZXZpY2VQcmVmZXJlbmNlcyIsIlNpbXVsYXRvcldpbmRvd0NlbnRlciIsImlzSW50ZWdlciIsInNpbXVsYXRvclN0YXJ0dXBUaW1lb3V0Iiwic3RhcnR1cFRpbWVvdXQiLCJpc1N0cmluZyIsInRvVXBwZXJDYXNlIiwiU2ltdWxhdG9yV2luZG93T3JpZW50YXRpb24iLCJTaW11bGF0b3JXaW5kb3dSb3RhdGlvbkFuZ2xlIiwicnVuIiwicGxhdGZvcm1OYW1lIiwiaXNUdk9TIiwiUExBVEZPUk1fTkFNRV9UVk9TIiwiUExBVEZPUk1fTkFNRV9JT1MiLCJsYXVuY2hBcHAiLCJBUFBfTEFVTkNIX1RJTUVPVVQiLCJzaW1jdGwiLCJjaGVja1N0YXR1cyIsInJlc3BvbnNlIiwiY3VycmVudEFwcCIsImJ1bmRsZUlEIiwicGFyc2VJbnQiLCJpc0FycmF5IiwiZW52IiwiaXNQbGFpbk9iamVjdCIsImxhbmd1YWdlIiwicHVzaCIsImxvY2FsZSIsImlzTmlsIiwic2hvdWxkVGVybWluYXRlQXBwIiwiZm9yY2VBcHBMYXVuY2giLCJ3ZGFDYXBzIiwiYXV0b0xhdW5jaCIsImFyZ3VtZW50cyIsImVudmlyb25tZW50IiwiZXZlbnRsb29wSWRsZURlbGF5U2VjIiwid2RhRXZlbnRsb29wSWRsZURlbGF5Iiwic2hvdWxkV2FpdEZvclF1aWVzY2VuY2UiLCJ3YWl0Rm9yUXVpZXNjZW5jZSIsInNob3VsZFVzZVRlc3RNYW5hZ2VyRm9yVmlzaWJpbGl0eURldGVjdGlvbiIsInNpbXBsZUlzVmlzaWJsZUNoZWNrIiwibWF4VHlwaW5nRnJlcXVlbmN5Iiwic2hvdWxkVXNlU2luZ2xldG9uVGVzdE1hbmFnZXIiLCJ3YWl0Rm9ySWRsZVRpbWVvdXQiLCJlbGVtZW50UmVzcG9uc2VGaWVsZHMiLCJkaXNhYmxlQXV0b21hdGljU2NyZWVuc2hvdHMiLCJ1c2VOYXRpdmVDYWNoaW5nU3RyYXRlZ3kiLCJmb3JjZVNpbXVsYXRvclNvZnR3YXJlS2V5Ym9hcmRQcmVzZW5jZSIsImF1dG9BY2NlcHRBbGVydHMiLCJkZWZhdWx0QWxlcnRBY3Rpb24iLCJhdXRvRGlzbWlzc0FsZXJ0cyIsImNhcGFiaWxpdGllcyIsImZpcnN0TWF0Y2giLCJhbHdheXNNYXRjaCIsInByb3h5QWN0aXZlIiwiZ2V0UHJveHlBdm9pZExpc3QiLCJpc1dlYnZpZXciLCJjYW5Qcm94eSIsImlzV2ViQ29udGV4dCIsInZhbGlkYXRlTG9jYXRvclN0cmF0ZWd5Iiwic3RyYXRlZ3kiLCJjb2VyY2VWZXJzaW9uIiwidmVyaWZ5UHJvY2Vzc0FyZ3VtZW50Iiwia2V5Y2hhaW5QYXRoIiwia2V5Y2hhaW5QYXNzd29yZCIsImNvbW1hbmRUaW1lb3V0cyIsInByb3RvY29sIiwiaG9zdCIsInBlcm1zIiwiYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMiLCJwYXJzZUNhcHNBcnJheSIsInRpbWVvdXQiLCJhcHBQdXNoVGltZW91dCIsImFwcEluc3RhbGxTdHJhdGVneSIsIm5ld1NpbXVsYXRvciIsIm90aGVyQXBwcyIsImluc3RhbGxPdGhlckFwcHMiLCJpb3NJbnN0YWxsUGF1c2UiLCJwYXVzZSIsImRlbGF5IiwiYXBwc0xpc3QiLCJhcHBQYXRocyIsIm90aGVyQXBwIiwiaXNFbmFibGVkIiwiaXNCb29sZWFuIiwiY3VyT3JpZW50YXRpb24iLCJfZ2V0Q29tbWFuZFRpbWVvdXQiLCJjbWROYW1lIiwiREVGQVVMVF9USU1FT1VUX0tFWSIsImdldFNlc3Npb24iLCJkcml2ZXJTZXNzaW9uIiwic2hvdWxkR2V0RGV2aWNlQ2FwcyIsImluY2x1ZGVEZXZpY2VDYXBzVG9TZXNzaW9uSW5mbyIsImRldmljZUNhcHMiLCJzdGF0dXNCYXJTaXplIiwic2NhbGUiLCJnZXRTY3JlZW5JbmZvIiwicGl4ZWxSYXRpbyIsInN0YXRCYXJIZWlnaHQiLCJoZWlnaHQiLCJ2aWV3cG9ydFJlY3QiLCJnZXRWaWV3cG9ydFJlY3QiLCJyZXNldCIsImNsb25lRGVlcCIsInNodXRkb3duSGFuZGxlciIsInJlc2V0T25VbmV4cGVjdGVkU2h1dGRvd24iLCJwcm90b3R5cGUiLCJjb21tYW5kcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFJQTs7QUFDQTs7QUFJQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFRQTs7QUFJQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQSxNQUFNQSx3QkFBd0IsR0FBRyxxQkFBakM7QUFDQSxNQUFNQyw0QkFBNEIsR0FBRyw4QkFBckM7QUFFQSxNQUFNQyxpQkFBaUIsR0FBRztBQUN4QkMsRUFBQUEsaUJBQWlCLEVBQUUsS0FESztBQUV4QkMsRUFBQUEsc0JBQXNCLEVBQUUsS0FGQTtBQUd4QkMsRUFBQUEsV0FBVyxF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K0RBQVQ7O0FBQ0EsV0FBT0wsTUFBTSxDQUFDYSxNQUFQLENBQWM7QUFBQ0MsTUFBQUEsSUFBSSxFQUFFLEtBQUs5RCxJQUFMLENBQVU4RDtBQUFqQixLQUFkLEVBQXNDMFEsYUFBdEMsRUFDTCxLQUFLM0QsT0FBTCxDQUFhb0IsWUFEUixFQUNzQixLQUFLMEMsVUFBTCxJQUFtQixFQUR6QyxDQUFQO0FBRUQ7O0FBRVUsUUFBTFMsS0FBSyxHQUFJO0FBQ2IsUUFBSSxLQUFLcFYsSUFBTCxDQUFVMEUsT0FBZCxFQUF1QjtBQUVyQixVQUFJMUUsSUFBSSxHQUFHWSxnQkFBRXlVLFNBQUYsQ0FBWSxLQUFLclYsSUFBakIsQ0FBWDs7QUFDQUEsTUFBQUEsSUFBSSxDQUFDMEUsT0FBTCxHQUFlLEtBQWY7QUFDQTFFLE1BQUFBLElBQUksQ0FBQzJFLFNBQUwsR0FBaUIsS0FBakI7QUFDQSxZQUFNMlEsZUFBZSxHQUFHLEtBQUtDLHlCQUE3Qjs7QUFDQSxXQUFLQSx5QkFBTCxHQUFpQyxNQUFNLENBQUUsQ0FBekM7O0FBQ0EsVUFBSTtBQUNGLGNBQU0sS0FBS25QLFFBQUwsQ0FBY3BHLElBQWQsQ0FBTjtBQUNELE9BRkQsU0FFVTtBQUNSLGFBQUt1Vix5QkFBTCxHQUFpQ0QsZUFBakM7QUFDRDtBQUNGOztBQUNELFVBQU0sTUFBTUYsS0FBTixFQUFOO0FBQ0Q7O0FBdnFDcUM7OztBQTBxQ3hDcFMsTUFBTSxDQUFDYSxNQUFQLENBQWNoRSxjQUFjLENBQUMyVixTQUE3QixFQUF3Q0MsY0FBeEM7ZUFFZTVWLGMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlRHJpdmVyLCBEZXZpY2VTZXR0aW5ncyB9IGZyb20gJ2FwcGl1bS1iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyB1dGlsLCBtanBlZyB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgeyBXZWJEcml2ZXJBZ2VudCB9IGZyb20gJ2FwcGl1bS13ZWJkcml2ZXJhZ2VudCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBMUlUgZnJvbSAnbHJ1LWNhY2hlJztcbmltcG9ydCB7XG4gIGNyZWF0ZVNpbSwgZ2V0RXhpc3RpbmdTaW0sIHJ1blNpbXVsYXRvclJlc2V0LCBpbnN0YWxsVG9TaW11bGF0b3IsXG4gIHNodXRkb3duT3RoZXJTaW11bGF0b3JzLCBzaHV0ZG93blNpbXVsYXRvciwgc2V0TG9jYWxlQW5kUHJlZmVyZW5jZXNcbn0gZnJvbSAnLi9zaW11bGF0b3ItbWFuYWdlbWVudCc7XG5pbXBvcnQgeyBnZXRTaW11bGF0b3IgfSBmcm9tICdhcHBpdW0taW9zLXNpbXVsYXRvcic7XG5pbXBvcnQge1xuICBkb2VzU3VwcG9ydEtleWNoYWluQXBpLCBpbnN0YWxsQ2VydGlmaWNhdGUsIGluc3RhbGxDZXJ0aWZpY2F0ZUxlZ2FjeSxcbiAgaGFzQ2VydGlmaWNhdGVMZWdhY3ksXG59IGZyb20gJy4vY2VydC11dGlscyc7XG5pbXBvcnQgeyByZXRyeUludGVydmFsLCByZXRyeSB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IHZlcmlmeUFwcGxpY2F0aW9uUGxhdGZvcm0sIGV4dHJhY3RCdW5kbGVJZCB9IGZyb20gJy4vYXBwLXV0aWxzJztcbmltcG9ydCB7IGRlc2lyZWRDYXBDb25zdHJhaW50cywgUExBVEZPUk1fTkFNRV9JT1MsIFBMQVRGT1JNX05BTUVfVFZPUyB9IGZyb20gJy4vZGVzaXJlZC1jYXBzJztcbmltcG9ydCBjb21tYW5kcyBmcm9tICcuL2NvbW1hbmRzL2luZGV4JztcbmltcG9ydCB7XG4gIGRldGVjdFVkaWQsIGdldEFuZENoZWNrWGNvZGVWZXJzaW9uLCBnZXRBbmRDaGVja0lvc1Nka1ZlcnNpb24sXG4gIGNoZWNrQXBwUHJlc2VudCwgZ2V0RHJpdmVySW5mbyxcbiAgY2xlYXJTeXN0ZW1GaWxlcywgdHJhbnNsYXRlRGV2aWNlTmFtZSwgbm9ybWFsaXplQ29tbWFuZFRpbWVvdXRzLFxuICBERUZBVUxUX1RJTUVPVVRfS0VZLCBtYXJrU3lzdGVtRmlsZXNGb3JDbGVhbnVwLFxuICBwcmludFVzZXIsIHJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyxcbiAgbm9ybWFsaXplUGxhdGZvcm1WZXJzaW9uLCBpc0xvY2FsSG9zdFxufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7XG4gIGdldENvbm5lY3RlZERldmljZXMsIHJ1blJlYWxEZXZpY2VSZXNldCwgaW5zdGFsbFRvUmVhbERldmljZSxcbiAgZ2V0UmVhbERldmljZU9ialxufSBmcm9tICcuL3JlYWwtZGV2aWNlLW1hbmFnZW1lbnQnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IEFzeW5jTG9jayBmcm9tICdhc3luYy1sb2NrJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IElEQiBmcm9tICdhcHBpdW0taWRiJztcbmltcG9ydCBERVZJQ0VfQ09OTkVDVElPTlNfRkFDVE9SWSBmcm9tICcuL2RldmljZS1jb25uZWN0aW9ucy1mYWN0b3J5JztcbmltcG9ydCB7IEFSR1NfQ09OU1RSQUlOVFMgfSBmcm9tICcuL2FyZy1jb25zdHJhaW50cyc7XG5cblxuY29uc3QgU0hVVERPV05fT1RIRVJfRkVBVF9OQU1FID0gJ3NodXRkb3duX290aGVyX3NpbXMnO1xuY29uc3QgQ1VTVE9NSVpFX1JFU1VMVF9CVU5EUEVfUEFUSCA9ICdjdXN0b21pemVfcmVzdWx0X2J1bmRsZV9wYXRoJztcblxuY29uc3QgZGVmYXVsdFNlcnZlckNhcHMgPSB7XG4gIHdlYlN0b3JhZ2VFbmFibGVkOiBmYWxzZSxcbiAgbG9jYXRpb25Db250ZXh0RW5hYmxlZDogZmFsc2UsXG4gIGJyb3dzZXJOYW1lOiAnJyxcbiAgcGxhdGZvcm06ICdNQUMnLFxuICBqYXZhc2NyaXB0RW5hYmxlZDogdHJ1ZSxcbiAgZGF0YWJhc2VFbmFibGVkOiBmYWxzZSxcbiAgdGFrZXNTY3JlZW5zaG90OiB0cnVlLFxuICBuZXR3b3JrQ29ubmVjdGlvbkVuYWJsZWQ6IGZhbHNlLFxufTtcbmNvbnN0IFNBRkFSSV9CVU5ETEVfSUQgPSAnY29tLmFwcGxlLm1vYmlsZXNhZmFyaSc7XG5jb25zdCBXREFfU0lNX1NUQVJUVVBfUkVUUklFUyA9IDI7XG5jb25zdCBXREFfUkVBTF9ERVZfU1RBUlRVUF9SRVRSSUVTID0gMTtcbmNvbnN0IFdEQV9SRUFMX0RFVl9UVVRPUklBTF9VUkwgPSAnaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0teGN1aXRlc3QtZHJpdmVyL2Jsb2IvbWFzdGVyL2RvY3MvcmVhbC1kZXZpY2UtY29uZmlnLm1kJztcbmNvbnN0IFdEQV9TVEFSVFVQX1JFVFJZX0lOVEVSVkFMID0gMTAwMDA7XG5jb25zdCBERUZBVUxUX1NFVFRJTkdTID0ge1xuICBuYXRpdmVXZWJUYXA6IGZhbHNlLFxuICBuYXRpdmVXZWJUYXBTdHJpY3Q6IGZhbHNlLFxuICB1c2VKU09OU291cmNlOiBmYWxzZSxcbiAgc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlczogdHJ1ZSxcbiAgZWxlbWVudFJlc3BvbnNlQXR0cmlidXRlczogJ3R5cGUsbGFiZWwnLFxuICAvLyBSZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vV2ViRHJpdmVyQWdlbnQvYmxvYi9tYXN0ZXIvV2ViRHJpdmVyQWdlbnRMaWIvVXRpbGl0aWVzL0ZCQ29uZmlndXJhdGlvbi5tIGZvciBmb2xsb3dpbmcgc2V0dGluZ3MnIHZhbHVlc1xuICBtanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5OiAyNSxcbiAgbWpwZWdTZXJ2ZXJGcmFtZXJhdGU6IDEwLFxuICBzY3JlZW5zaG90UXVhbGl0eTogMSxcbiAgbWpwZWdTY2FsaW5nRmFjdG9yOiAxMDAsXG4gIC8vIHNldCBgcmVkdWNlTW90aW9uYCB0byBgbnVsbGAgc28gdGhhdCBpdCB3aWxsIGJlIHZlcmlmaWVkIGJ1dCBzdGlsbCBzZXQgZWl0aGVyIHRydWUvZmFsc2VcbiAgcmVkdWNlTW90aW9uOiBudWxsLFxufTtcbi8vIFRoaXMgbG9jayBhc3N1cmVzLCB0aGF0IGVhY2ggZHJpdmVyIHNlc3Npb24gZG9lcyBub3Rcbi8vIGFmZmVjdCBzaGFyZWQgcmVzb3VyY2VzIG9mIHRoZSBvdGhlciBwYXJhbGxlbCBzZXNzaW9uc1xuY29uc3QgU0hBUkVEX1JFU09VUkNFU19HVUFSRCA9IG5ldyBBc3luY0xvY2soKTtcbmNvbnN0IFdFQl9FTEVNRU5UU19DQUNIRV9TSVpFID0gNTAwO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11c2VsZXNzLWVzY2FwZSAqL1xuY29uc3QgTk9fUFJPWFlfTkFUSVZFX0xJU1QgPSBbXG4gIFsnREVMRVRFJywgL3dpbmRvdy9dLFxuICBbJ0dFVCcsIC9eXFwvc2Vzc2lvblxcL1teXFwvXSskL10sXG4gIFsnR0VUJywgL2FsZXJ0X3RleHQvXSxcbiAgWydHRVQnLCAvYWxlcnRcXC9bXlxcL10rL10sXG4gIFsnR0VUJywgL2FwcGl1bS9dLFxuICBbJ0dFVCcsIC9hdHRyaWJ1dGUvXSxcbiAgWydHRVQnLCAvY29udGV4dC9dLFxuICBbJ0dFVCcsIC9sb2NhdGlvbi9dLFxuICBbJ0dFVCcsIC9sb2cvXSxcbiAgWydHRVQnLCAvc2NyZWVuc2hvdC9dLFxuICBbJ0dFVCcsIC9zaXplL10sXG4gIFsnR0VUJywgL3NvdXJjZS9dLFxuICBbJ0dFVCcsIC90aW1lb3V0cyQvXSxcbiAgWydHRVQnLCAvdXJsL10sXG4gIFsnR0VUJywgL3dpbmRvdy9dLFxuICBbJ1BPU1QnLCAvYWNjZXB0X2FsZXJ0L10sXG4gIFsnUE9TVCcsIC9hY3Rpb25zJC9dLFxuICBbJ1BPU1QnLCAvYWxlcnRfdGV4dC9dLFxuICBbJ1BPU1QnLCAvYWxlcnRcXC9bXlxcL10rL10sXG4gIFsnUE9TVCcsIC9hcHBpdW0vXSxcbiAgWydQT1NUJywgL2FwcGl1bVxcL2RldmljZVxcL2lzX2xvY2tlZC9dLFxuICBbJ1BPU1QnLCAvYXBwaXVtXFwvZGV2aWNlXFwvbG9jay9dLFxuICBbJ1BPU1QnLCAvYXBwaXVtXFwvZGV2aWNlXFwvdW5sb2NrL10sXG4gIFsnUE9TVCcsIC9iYWNrL10sXG4gIFsnUE9TVCcsIC9jbGVhci9dLFxuICBbJ1BPU1QnLCAvY29udGV4dC9dLFxuICBbJ1BPU1QnLCAvZGlzbWlzc19hbGVydC9dLFxuICBbJ1BPU1QnLCAvZWxlbWVudFxcL2FjdGl2ZS9dLCAvLyBNSlNPTldQIGdldCBhY3RpdmUgZWxlbWVudCBzaG91bGQgcHJveHlcbiAgWydQT1NUJywgL2VsZW1lbnQkL10sXG4gIFsnUE9TVCcsIC9lbGVtZW50cyQvXSxcbiAgWydQT1NUJywgL2V4ZWN1dGUvXSxcbiAgWydQT1NUJywgL2tleXMvXSxcbiAgWydQT1NUJywgL2xvZy9dLFxuICBbJ1BPU1QnLCAvbW92ZXRvL10sXG4gIFsnUE9TVCcsIC9yZWNlaXZlX2FzeW5jX3Jlc3BvbnNlL10sIC8vIGFsd2F5cywgaW4gY2FzZSBjb250ZXh0IHN3aXRjaGVzIHdoaWxlIHdhaXRpbmdcbiAgWydQT1NUJywgL3Nlc3Npb25cXC9bXlxcL10rXFwvbG9jYXRpb24vXSwgLy8gZ2VvIGxvY2F0aW9uLCBidXQgbm90IGVsZW1lbnQgbG9jYXRpb25cbiAgWydQT1NUJywgL3NoYWtlL10sXG4gIFsnUE9TVCcsIC90aW1lb3V0cy9dLFxuICBbJ1BPU1QnLCAvdG91Y2gvXSxcbiAgWydQT1NUJywgL3VybC9dLFxuICBbJ1BPU1QnLCAvdmFsdWUvXSxcbiAgWydQT1NUJywgL3dpbmRvdy9dLFxuICBbJ0RFTEVURScsIC9jb29raWUvXSxcbiAgWydHRVQnLCAvY29va2llL10sXG4gIFsnUE9TVCcsIC9jb29raWUvXSxcbl07XG5jb25zdCBOT19QUk9YWV9XRUJfTElTVCA9IFtcbiAgWydHRVQnLCAvYXR0cmlidXRlL10sXG4gIFsnR0VUJywgL2VsZW1lbnQvXSxcbiAgWydHRVQnLCAvdGV4dC9dLFxuICBbJ0dFVCcsIC90aXRsZS9dLFxuICBbJ1BPU1QnLCAvY2xlYXIvXSxcbiAgWydQT1NUJywgL2NsaWNrL10sXG4gIFsnUE9TVCcsIC9lbGVtZW50L10sXG4gIFsnUE9TVCcsIC9mb3J3YXJkL10sXG4gIFsnUE9TVCcsIC9mcmFtZS9dLFxuICBbJ1BPU1QnLCAva2V5cy9dLFxuICBbJ1BPU1QnLCAvcmVmcmVzaC9dLFxuXS5jb25jYXQoTk9fUFJPWFlfTkFUSVZFX0xJU1QpO1xuLyogZXNsaW50LWVuYWJsZSBuby11c2VsZXNzLWVzY2FwZSAqL1xuXG5jb25zdCBNRU1PSVpFRF9GVU5DVElPTlMgPSBbXG4gICdnZXRTdGF0dXNCYXJIZWlnaHQnLFxuICAnZ2V0RGV2aWNlUGl4ZWxSYXRpbycsXG4gICdnZXRTY3JlZW5JbmZvJyxcbl07XG5cbmNsYXNzIFhDVUlUZXN0RHJpdmVyIGV4dGVuZHMgQmFzZURyaXZlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30sIHNob3VsZFZhbGlkYXRlQ2FwcyA9IHRydWUpIHtcbiAgICBzdXBlcihvcHRzLCBzaG91bGRWYWxpZGF0ZUNhcHMpO1xuXG4gICAgdGhpcy5kZXNpcmVkQ2FwQ29uc3RyYWludHMgPSBkZXNpcmVkQ2FwQ29uc3RyYWludHM7XG5cbiAgICB0aGlzLmxvY2F0b3JTdHJhdGVnaWVzID0gW1xuICAgICAgJ3hwYXRoJyxcbiAgICAgICdpZCcsXG4gICAgICAnbmFtZScsXG4gICAgICAnY2xhc3MgbmFtZScsXG4gICAgICAnLWlvcyBwcmVkaWNhdGUgc3RyaW5nJyxcbiAgICAgICctaW9zIGNsYXNzIGNoYWluJyxcbiAgICAgICdhY2Nlc3NpYmlsaXR5IGlkJyxcbiAgICAgICdjc3Mgc2VsZWN0b3InLFxuICAgIF07XG4gICAgdGhpcy53ZWJMb2NhdG9yU3RyYXRlZ2llcyA9IFtcbiAgICAgICdsaW5rIHRleHQnLFxuICAgICAgJ2NzcyBzZWxlY3RvcicsXG4gICAgICAndGFnIG5hbWUnLFxuICAgICAgJ2xpbmsgdGV4dCcsXG4gICAgICAncGFydGlhbCBsaW5rIHRleHQnLFxuICAgIF07XG4gICAgdGhpcy5yZXNldElvcygpO1xuICAgIHRoaXMuc2V0dGluZ3MgPSBuZXcgRGV2aWNlU2V0dGluZ3MoREVGQVVMVF9TRVRUSU5HUywgdGhpcy5vblNldHRpbmdzVXBkYXRlLmJpbmQodGhpcykpO1xuICAgIHRoaXMubG9ncyA9IHt9O1xuXG4gICAgLy8gbWVtb2l6ZSBmdW5jdGlvbnMgaGVyZSwgc28gdGhhdCB0aGV5IGFyZSBkb25lIG9uIGEgcGVyLWluc3RhbmNlIGJhc2lzXG4gICAgZm9yIChjb25zdCBmbiBvZiBNRU1PSVpFRF9GVU5DVElPTlMpIHtcbiAgICAgIHRoaXNbZm5dID0gXy5tZW1vaXplKHRoaXNbZm5dKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0IGFyZ3NDb25zdHJhaW50cyAoKSB7XG4gICAgcmV0dXJuIEFSR1NfQ09OU1RSQUlOVFM7XG4gIH1cblxuICBhc3luYyBvblNldHRpbmdzVXBkYXRlIChrZXksIHZhbHVlKSB7XG4gICAgaWYgKGtleSAhPT0gJ25hdGl2ZVdlYlRhcCcgJiYga2V5ICE9PSAnbmF0aXZlV2ViVGFwU3RyaWN0Jykge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvYXBwaXVtL3NldHRpbmdzJywgJ1BPU1QnLCB7XG4gICAgICAgIHNldHRpbmdzOiB7W2tleV06IHZhbHVlfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMub3B0c1trZXldID0gISF2YWx1ZTtcbiAgfVxuXG4gIHJlc2V0SW9zICgpIHtcbiAgICB0aGlzLm9wdHMgPSB0aGlzLm9wdHMgfHwge307XG4gICAgdGhpcy53ZGEgPSBudWxsO1xuICAgIHRoaXMub3B0cy5kZXZpY2UgPSBudWxsO1xuICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLnByb3h5UmVxUmVzID0gbnVsbDtcbiAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBbXTtcbiAgICB0aGlzLnNhZmFyaSA9IGZhbHNlO1xuICAgIHRoaXMuY2FjaGVkV2RhU3RhdHVzID0gbnVsbDtcblxuICAgIHRoaXMuY3VyV2ViRnJhbWVzID0gW107XG4gICAgdGhpcy5fY3VycmVudFVybCA9IG51bGw7XG4gICAgdGhpcy5jdXJDb250ZXh0ID0gbnVsbDtcbiAgICB0aGlzLnhjb2RlVmVyc2lvbiA9IHt9O1xuICAgIHRoaXMuY29udGV4dHMgPSBbXTtcbiAgICB0aGlzLmltcGxpY2l0V2FpdE1zID0gMDtcbiAgICB0aGlzLmFzeW5jbGliV2FpdE1zID0gMDtcbiAgICB0aGlzLnBhZ2VMb2FkTXMgPSA2MDAwO1xuICAgIHRoaXMubGFuZHNjYXBlV2ViQ29vcmRzT2Zmc2V0ID0gMDtcbiAgICB0aGlzLnJlbW90ZSA9IG51bGw7XG5cbiAgICB0aGlzLndlYkVsZW1lbnRzQ2FjaGUgPSBuZXcgTFJVKHtcbiAgICAgIG1heDogV0VCX0VMRU1FTlRTX0NBQ0hFX1NJWkUsXG4gICAgfSk7XG4gIH1cblxuICBnZXQgZHJpdmVyRGF0YSAoKSB7XG4gICAgLy8gVE9ETyBmaWxsIG91dCByZXNvdXJjZSBpbmZvIGhlcmVcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBhc3luYyBnZXRTdGF0dXMgKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5kcml2ZXJJbmZvID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5kcml2ZXJJbmZvID0gYXdhaXQgZ2V0RHJpdmVySW5mbygpO1xuICAgIH1cbiAgICBsZXQgc3RhdHVzID0ge2J1aWxkOiB7dmVyc2lvbjogdGhpcy5kcml2ZXJJbmZvLnZlcnNpb259fTtcbiAgICBpZiAodGhpcy5jYWNoZWRXZGFTdGF0dXMpIHtcbiAgICAgIHN0YXR1cy53ZGEgPSB0aGlzLmNhY2hlZFdkYVN0YXR1cztcbiAgICB9XG4gICAgcmV0dXJuIHN0YXR1cztcbiAgfVxuXG4gIG1lcmdlQ2xpQXJnc1RvT3B0cyAoKSB7XG4gICAgbGV0IGRpZE1lcmdlID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBhcmcgb2YgT2JqZWN0LmtleXMoQVJHU19DT05TVFJBSU5UUykpIHtcbiAgICAgIGlmIChfLmhhcyh0aGlzLmNsaUFyZ3MsIGFyZykpIHtcbiAgICAgICAgbG9nLmluZm8oYFVzaW5nICR7YXJnfSB2YWx1ZSBvZiAnJHt0aGlzLmNsaUFyZ3NbYXJnXX0nIGZyb20gQ0xJYCk7XG4gICAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsIGFyZykpIHtcbiAgICAgICAgICBsb2cuaW5mbyhgKFRoaXMgb3ZlcndyaXRlcyB2YWx1ZSBvZiAnJHt0aGlzLm9wdHNbYXJnXX0nIHNlbnQgaW4gdmlhIGNhcHMpYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcHRzW2FyZ10gPSB0aGlzLmNsaUFyZ3NbYXJnXTtcbiAgICAgICAgZGlkTWVyZ2UgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGlkTWVyZ2U7XG4gIH1cblxuICBhc3luYyBjcmVhdGVTZXNzaW9uICguLi5hcmdzKSB7XG4gICAgdGhpcy5saWZlY3ljbGVEYXRhID0ge307IC8vIHRoaXMgaXMgdXNlZCBmb3Iga2VlcGluZyB0cmFjayBvZiB0aGUgc3RhdGUgd2Ugc3RhcnQgc28gd2hlbiB3ZSBkZWxldGUgdGhlIHNlc3Npb24gd2UgY2FuIHB1dCB0aGluZ3MgYmFja1xuICAgIHRyeSB7XG4gICAgICBsZXQgW3Nlc3Npb25JZCwgY2Fwc10gPSBhd2FpdCBzdXBlci5jcmVhdGVTZXNzaW9uKC4uLmFyZ3MpO1xuICAgICAgdGhpcy5vcHRzLnNlc3Npb25JZCA9IHNlc3Npb25JZDtcblxuICAgICAgLy8gbWVyZ2UgY2xpIGFyZ3MgdG8gb3B0cywgYW5kIGlmIHdlIGRpZCBtZXJnZSBhbnksIHJldmFsaWRhdGUgb3B0cyB0byBlbnN1cmUgdGhlIGZpbmFsIHNldFxuICAgICAgLy8gaXMgYWxzbyBjb25zaXN0ZW50XG4gICAgICBpZiAodGhpcy5tZXJnZUNsaUFyZ3NUb09wdHMoKSkge1xuICAgICAgICB0aGlzLnZhbGlkYXRlRGVzaXJlZENhcHMoey4uLmNhcHMsIC4uLnRoaXMuY2xpQXJnc30pO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0KCk7XG5cbiAgICAgIC8vIG1lcmdlIHNlcnZlciBjYXBhYmlsaXRpZXMgKyBkZXNpcmVkIGNhcGFiaWxpdGllc1xuICAgICAgY2FwcyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRTZXJ2ZXJDYXBzLCBjYXBzKTtcbiAgICAgIC8vIHVwZGF0ZSB0aGUgdWRpZCB3aXRoIHdoYXQgaXMgYWN0dWFsbHkgdXNlZFxuICAgICAgY2Fwcy51ZGlkID0gdGhpcy5vcHRzLnVkaWQ7XG4gICAgICAvLyBlbnN1cmUgd2UgdHJhY2sgbmF0aXZlV2ViVGFwIGNhcGFiaWxpdHkgYXMgYSBzZXR0aW5nIGFzIHdlbGxcbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICduYXRpdmVXZWJUYXAnKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVNldHRpbmdzKHtuYXRpdmVXZWJUYXA6IHRoaXMub3B0cy5uYXRpdmVXZWJUYXB9KTtcbiAgICAgIH1cbiAgICAgIC8vIGVuc3VyZSB3ZSB0cmFjayBuYXRpdmVXZWJUYXBTdHJpY3QgY2FwYWJpbGl0eSBhcyBhIHNldHRpbmcgYXMgd2VsbFxuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ25hdGl2ZVdlYlRhcFN0cmljdCcpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlU2V0dGluZ3Moe25hdGl2ZVdlYlRhcFN0cmljdDogdGhpcy5vcHRzLm5hdGl2ZVdlYlRhcFN0cmljdH0pO1xuICAgICAgfVxuICAgICAgLy8gZW5zdXJlIHdlIHRyYWNrIHVzZUpTT05Tb3VyY2UgY2FwYWJpbGl0eSBhcyBhIHNldHRpbmcgYXMgd2VsbFxuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ3VzZUpTT05Tb3VyY2UnKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVNldHRpbmdzKHt1c2VKU09OU291cmNlOiB0aGlzLm9wdHMudXNlSlNPTlNvdXJjZX0pO1xuICAgICAgfVxuXG4gICAgICBsZXQgd2RhU2V0dGluZ3MgPSB7XG4gICAgICAgIGVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXM6IERFRkFVTFRfU0VUVElOR1MuZWxlbWVudFJlc3BvbnNlQXR0cmlidXRlcyxcbiAgICAgICAgc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlczogREVGQVVMVF9TRVRUSU5HUy5zaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzLFxuICAgICAgfTtcbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICdlbGVtZW50UmVzcG9uc2VBdHRyaWJ1dGVzJykpIHtcbiAgICAgICAgd2RhU2V0dGluZ3MuZWxlbWVudFJlc3BvbnNlQXR0cmlidXRlcyA9IHRoaXMub3B0cy5lbGVtZW50UmVzcG9uc2VBdHRyaWJ1dGVzO1xuICAgICAgfVxuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ3Nob3VsZFVzZUNvbXBhY3RSZXNwb25zZXMnKSkge1xuICAgICAgICB3ZGFTZXR0aW5ncy5zaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzID0gdGhpcy5vcHRzLnNob3VsZFVzZUNvbXBhY3RSZXNwb25zZXM7XG4gICAgICB9XG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnbWpwZWdTZXJ2ZXJTY3JlZW5zaG90UXVhbGl0eScpKSB7XG4gICAgICAgIHdkYVNldHRpbmdzLm1qcGVnU2VydmVyU2NyZWVuc2hvdFF1YWxpdHkgPSB0aGlzLm9wdHMubWpwZWdTZXJ2ZXJTY3JlZW5zaG90UXVhbGl0eTtcbiAgICAgIH1cbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICdtanBlZ1NlcnZlckZyYW1lcmF0ZScpKSB7XG4gICAgICAgIHdkYVNldHRpbmdzLm1qcGVnU2VydmVyRnJhbWVyYXRlID0gdGhpcy5vcHRzLm1qcGVnU2VydmVyRnJhbWVyYXRlO1xuICAgICAgfVxuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ3NjcmVlbnNob3RRdWFsaXR5JykpIHtcbiAgICAgICAgbG9nLmluZm8oYFNldHRpbmcgdGhlIHF1YWxpdHkgb2YgcGhvbmUgc2NyZWVuc2hvdDogJyR7dGhpcy5vcHRzLnNjcmVlbnNob3RRdWFsaXR5fSdgKTtcbiAgICAgICAgd2RhU2V0dGluZ3Muc2NyZWVuc2hvdFF1YWxpdHkgPSB0aGlzLm9wdHMuc2NyZWVuc2hvdFF1YWxpdHk7XG4gICAgICB9XG4gICAgICAvLyBlbnN1cmUgV0RBIGdldHMgb3VyIGRlZmF1bHRzIGluc3RlYWQgb2Ygd2hhdGV2ZXIgaXRzIG93biBtaWdodCBiZVxuICAgICAgYXdhaXQgdGhpcy51cGRhdGVTZXR0aW5ncyh3ZGFTZXR0aW5ncyk7XG5cbiAgICAgIC8vIHR1cm4gb24gbWpwZWcgc3RyZWFtIHJlYWRpbmcgaWYgcmVxdWVzdGVkXG4gICAgICBpZiAodGhpcy5vcHRzLm1qcGVnU2NyZWVuc2hvdFVybCkge1xuICAgICAgICBsb2cuaW5mbyhgU3RhcnRpbmcgTUpQRUcgc3RyZWFtIHJlYWRpbmcgVVJMOiAnJHt0aGlzLm9wdHMubWpwZWdTY3JlZW5zaG90VXJsfSdgKTtcbiAgICAgICAgdGhpcy5tanBlZ1N0cmVhbSA9IG5ldyBtanBlZy5NSnBlZ1N0cmVhbSh0aGlzLm9wdHMubWpwZWdTY3JlZW5zaG90VXJsKTtcbiAgICAgICAgYXdhaXQgdGhpcy5tanBlZ1N0cmVhbS5zdGFydCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtzZXNzaW9uSWQsIGNhcHNdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy5lcnJvcihKU09OLnN0cmluZ2lmeShlKSk7XG4gICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnQgKCkge1xuICAgIHRoaXMub3B0cy5ub1Jlc2V0ID0gISF0aGlzLm9wdHMubm9SZXNldDtcbiAgICB0aGlzLm9wdHMuZnVsbFJlc2V0ID0gISF0aGlzLm9wdHMuZnVsbFJlc2V0O1xuXG4gICAgYXdhaXQgcHJpbnRVc2VyKCk7XG5cbiAgICB0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbiA9IG51bGw7IC8vIEZvciBXREEgYW5kIHhjb2RlYnVpbGRcbiAgICBjb25zdCB7ZGV2aWNlLCB1ZGlkLCByZWFsRGV2aWNlfSA9IGF3YWl0IHRoaXMuZGV0ZXJtaW5lRGV2aWNlKCk7XG4gICAgbG9nLmluZm8oYERldGVybWluaW5nIGRldmljZSB0byBydW4gdGVzdHMgb246IHVkaWQ6ICcke3VkaWR9JywgcmVhbCBkZXZpY2U6ICR7cmVhbERldmljZX1gKTtcbiAgICB0aGlzLm9wdHMuZGV2aWNlID0gZGV2aWNlO1xuICAgIHRoaXMub3B0cy51ZGlkID0gdWRpZDtcbiAgICB0aGlzLm9wdHMucmVhbERldmljZSA9IHJlYWxEZXZpY2U7XG5cbiAgICBpZiAodGhpcy5vcHRzLnNpbXVsYXRvckRldmljZXNTZXRQYXRoKSB7XG4gICAgICBpZiAocmVhbERldmljZSkge1xuICAgICAgICBsb2cuaW5mbyhgVGhlICdzaW11bGF0b3JEZXZpY2VzU2V0UGF0aCcgY2FwYWJpbGl0eSBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgU2ltdWxhdG9yIGRldmljZXNgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy5pbmZvKGBTZXR0aW5nIHNpbXVsYXRvciBkZXZpY2VzIHNldCBwYXRoIHRvICcke3RoaXMub3B0cy5zaW11bGF0b3JEZXZpY2VzU2V0UGF0aH0nYCk7XG4gICAgICAgIHRoaXMub3B0cy5kZXZpY2UuZGV2aWNlc1NldFBhdGggPSB0aGlzLm9wdHMuc2ltdWxhdG9yRGV2aWNlc1NldFBhdGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYXQgdGhpcyBwb2ludCBpZiB0aGVyZSBpcyBubyBwbGF0Zm9ybVZlcnNpb24sIGdldCBpdCBmcm9tIHRoZSBkZXZpY2VcbiAgICBpZiAoIXRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gJiYgdGhpcy5vcHRzLmRldmljZSkge1xuICAgICAgdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiA9IGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuZ2V0UGxhdGZvcm1WZXJzaW9uKCk7XG4gICAgICBsb2cuaW5mbyhgTm8gcGxhdGZvcm1WZXJzaW9uIHNwZWNpZmllZC4gVXNpbmcgZGV2aWNlIHZlcnNpb246ICcke3RoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb259J2ApO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRWZXJzaW9uID0gbm9ybWFsaXplUGxhdGZvcm1WZXJzaW9uKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24pO1xuICAgIGlmICh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uICE9PSBub3JtYWxpemVkVmVyc2lvbikge1xuICAgICAgbG9nLmluZm8oYE5vcm1hbGl6ZWQgcGxhdGZvcm1WZXJzaW9uIGNhcGFiaWxpdHkgdmFsdWUgJyR7dGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbn0nIHRvICcke25vcm1hbGl6ZWRWZXJzaW9ufSdgKTtcbiAgICAgIHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gPSBub3JtYWxpemVkVmVyc2lvbjtcbiAgICB9XG4gICAgaWYgKHV0aWwuY29tcGFyZVZlcnNpb25zKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sICc8JywgJzkuMycpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBsYXRmb3JtIHZlcnNpb24gbXVzdCBiZSA5LjMgb3IgYWJvdmUuICcke3RoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb259JyBpcyBub3Qgc3VwcG9ydGVkLmApO1xuICAgIH1cblxuICAgIGlmIChfLmlzRW1wdHkodGhpcy54Y29kZVZlcnNpb24pICYmICghdGhpcy5vcHRzLndlYkRyaXZlckFnZW50VXJsIHx8ICF0aGlzLm9wdHMucmVhbERldmljZSkpIHtcbiAgICAgIC8vIG5vIGB3ZWJEcml2ZXJBZ2VudFVybGAsIG9yIG9uIGEgc2ltdWxhdG9yLCBzbyB3ZSBuZWVkIGFuIFhjb2RlIHZlcnNpb25cbiAgICAgIHRoaXMueGNvZGVWZXJzaW9uID0gYXdhaXQgZ2V0QW5kQ2hlY2tYY29kZVZlcnNpb24oKTtcbiAgICB9XG4gICAgdGhpcy5sb2dFdmVudCgneGNvZGVEZXRhaWxzUmV0cmlldmVkJyk7XG5cbiAgICBpZiAoXy50b0xvd2VyKHRoaXMub3B0cy5icm93c2VyTmFtZSkgPT09ICdzYWZhcmknKSB7XG4gICAgICBsb2cuaW5mbygnU2FmYXJpIHRlc3QgcmVxdWVzdGVkJyk7XG4gICAgICB0aGlzLnNhZmFyaSA9IHRydWU7XG4gICAgICB0aGlzLm9wdHMuYXBwID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5vcHRzLnByb2Nlc3NBcmd1bWVudHMgPSB0aGlzLm9wdHMucHJvY2Vzc0FyZ3VtZW50cyB8fCB7fTtcbiAgICAgIHRoaXMub3B0cy5idW5kbGVJZCA9IFNBRkFSSV9CVU5ETEVfSUQ7XG4gICAgICB0aGlzLl9jdXJyZW50VXJsID0gdGhpcy5vcHRzLnNhZmFyaUluaXRpYWxVcmwgfHwgKFxuICAgICAgICB0aGlzLmlzUmVhbERldmljZSgpXG4gICAgICAgICAgPyAnaHR0cDovL2FwcGl1bS5pbydcbiAgICAgICAgICA6IGBodHRwOi8vJHt0aGlzLm9wdHMuYWRkcmVzc306JHt0aGlzLm9wdHMucG9ydH0vd2VsY29tZWBcbiAgICAgICk7XG4gICAgICBpZiAodXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJzwnLCAnMTIuMicpKSB7XG4gICAgICAgIC8vIHRoaXMgb3B0aW9uIGRvZXMgbm90IHdvcmsgb24gMTIuMiBhbmQgYWJvdmVcbiAgICAgICAgdGhpcy5vcHRzLnByb2Nlc3NBcmd1bWVudHMuYXJncyA9IFsnLXUnLCB0aGlzLl9jdXJyZW50VXJsXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0cy5hcHAgfHwgdGhpcy5vcHRzLmJ1bmRsZUlkKSB7XG4gICAgICBhd2FpdCB0aGlzLmNvbmZpZ3VyZUFwcCgpO1xuICAgIH1cbiAgICB0aGlzLmxvZ0V2ZW50KCdhcHBDb25maWd1cmVkJyk7XG5cbiAgICAvLyBmYWlsIHZlcnkgZWFybHkgaWYgdGhlIGFwcCBkb2Vzbid0IGFjdHVhbGx5IGV4aXN0XG4gICAgLy8gb3IgaWYgYnVuZGxlIGlkIGRvZXNuJ3QgcG9pbnQgdG8gYW4gaW5zdGFsbGVkIGFwcFxuICAgIGlmICh0aGlzLm9wdHMuYXBwKSB7XG4gICAgICBhd2FpdCBjaGVja0FwcFByZXNlbnQodGhpcy5vcHRzLmFwcCk7XG5cbiAgICAgIGlmICghdGhpcy5vcHRzLmJ1bmRsZUlkKSB7XG4gICAgICAgIHRoaXMub3B0cy5idW5kbGVJZCA9IGF3YWl0IGV4dHJhY3RCdW5kbGVJZCh0aGlzLm9wdHMuYXBwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnJ1blJlc2V0KCk7XG5cbiAgICB0aGlzLndkYSA9IG5ldyBXZWJEcml2ZXJBZ2VudCh0aGlzLnhjb2RlVmVyc2lvbiwgdGhpcy5vcHRzKTtcbiAgICAvLyBEZXJpdmVkIGRhdGEgcGF0aCByZXRyaWV2YWwgaXMgYW4gZXhwZW5zaXZlIG9wZXJhdGlvblxuICAgIC8vIFdlIGNvdWxkIHN0YXJ0IHRoYXQgbm93IGluIGJhY2tncm91bmQgYW5kIGdldCB0aGUgY2FjaGVkIHJlc3VsdFxuICAgIC8vIHdoZW5ldmVyIGl0IGlzIG5lZWRlZFxuICAgIHRoaXMud2RhLnJldHJpZXZlRGVyaXZlZERhdGFQYXRoKCkuY2F0Y2goKGUpID0+IGxvZy5kZWJ1ZyhlKSk7XG5cbiAgICBjb25zdCBtZW1vaXplZExvZ0luZm8gPSBfLm1lbW9pemUoZnVuY3Rpb24gbG9nSW5mbyAoKSB7XG4gICAgICBsb2cuaW5mbyhcIidza2lwTG9nQ2FwdHVyZScgaXMgc2V0LiBTa2lwcGluZyBzdGFydGluZyBsb2dzIHN1Y2ggYXMgY3Jhc2gsIHN5c3RlbSwgc2FmYXJpIGNvbnNvbGUgYW5kIHNhZmFyaSBuZXR3b3JrLlwiKTtcbiAgICB9KTtcbiAgICBjb25zdCBzdGFydExvZ0NhcHR1cmUgPSBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5vcHRzLnNraXBMb2dDYXB0dXJlKSB7XG4gICAgICAgIG1lbW9pemVkTG9nSW5mbygpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc3RhcnRMb2dDYXB0dXJlKCk7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHRoaXMubG9nRXZlbnQoJ2xvZ0NhcHR1cmVTdGFydGVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgY29uc3QgaXNMb2dDYXB0dXJlU3RhcnRlZCA9IGF3YWl0IHN0YXJ0TG9nQ2FwdHVyZSgpO1xuXG4gICAgbG9nLmluZm8oYFNldHRpbmcgdXAgJHt0aGlzLmlzUmVhbERldmljZSgpID8gJ3JlYWwgZGV2aWNlJyA6ICdzaW11bGF0b3InfWApO1xuXG4gICAgaWYgKHRoaXMuaXNTaW11bGF0b3IoKSkge1xuICAgICAgaWYgKHRoaXMub3B0cy5zaHV0ZG93bk90aGVyU2ltdWxhdG9ycykge1xuICAgICAgICB0aGlzLmVuc3VyZUZlYXR1cmVFbmFibGVkKFNIVVRET1dOX09USEVSX0ZFQVRfTkFNRSk7XG4gICAgICAgIGF3YWl0IHNodXRkb3duT3RoZXJTaW11bGF0b3JzKHRoaXMub3B0cy5kZXZpY2UpO1xuICAgICAgfVxuXG4gICAgICAvLyB0aGlzIHNob3VsZCBiZSBkb25lIGJlZm9yZSB0aGUgc2ltdWxhdG9yIGlzIHN0YXJ0ZWRcbiAgICAgIC8vIGlmIGl0IGlzIGFscmVhZHkgcnVubmluZywgdGhpcyBjYXAgd29uJ3Qgd29yaywgd2hpY2ggaXMgZG9jdW1lbnRlZFxuICAgICAgaWYgKHRoaXMuaXNTYWZhcmkoKSAmJiB0aGlzLm9wdHMuc2FmYXJpR2xvYmFsUHJlZmVyZW5jZXMpIHtcbiAgICAgICAgaWYgKGF3YWl0IHRoaXMub3B0cy5kZXZpY2UudXBkYXRlU2FmYXJpR2xvYmFsU2V0dGluZ3ModGhpcy5vcHRzLnNhZmFyaUdsb2JhbFByZWZlcmVuY2VzKSkge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhgU2FmYXJpIGdsb2JhbCBwcmVmZXJlbmNlcyB1cGRhdGVkYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2NhbENvbmZpZyA9IGF3YWl0IHNldExvY2FsZUFuZFByZWZlcmVuY2VzKHRoaXMub3B0cy5kZXZpY2UsIHRoaXMub3B0cywgdGhpcy5pc1NhZmFyaSgpLCBhc3luYyAoc2ltKSA9PiB7XG4gICAgICAgIGF3YWl0IHNodXRkb3duU2ltdWxhdG9yKHNpbSk7XG5cbiAgICAgICAgLy8gd2UgZG9uJ3Qga25vdyBpZiB0aGVyZSBuZWVkcyB0byBiZSBjaGFuZ2VzIGEgcHJpb3JpLCBzbyBjaGFuZ2UgZmlyc3QuXG4gICAgICAgIC8vIHNvbWV0aW1lcyB0aGUgc2h1dGRvd24gcHJvY2VzcyBjaGFuZ2VzIHRoZSBzZXR0aW5ncywgc28gcmVzZXQgdGhlbSxcbiAgICAgICAgLy8ga25vd2luZyB0aGF0IHRoZSBzaW0gaXMgYWxyZWFkeSBzaHV0XG4gICAgICAgIGF3YWl0IHNldExvY2FsZUFuZFByZWZlcmVuY2VzKHNpbSwgdGhpcy5vcHRzLCB0aGlzLmlzU2FmYXJpKCkpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLm9wdHMuY3VzdG9tU1NMQ2VydCAmJiAhKGF3YWl0IGRvZXNTdXBwb3J0S2V5Y2hhaW5BcGkodGhpcy5vcHRzLmRldmljZSkpKSB7XG4gICAgICAgIGNvbnN0IGNlcnRIZWFkID0gXy50cnVuY2F0ZSh0aGlzLm9wdHMuY3VzdG9tU1NMQ2VydCwge2xlbmd0aDogMjB9KTtcbiAgICAgICAgbG9nLmluZm8oYEluc3RhbGxpbmcgdGhlIGN1c3RvbSBTU0wgY2VydGlmaWNhdGUgJyR7Y2VydEhlYWR9J2ApO1xuICAgICAgICBpZiAoYXdhaXQgaGFzQ2VydGlmaWNhdGVMZWdhY3kodGhpcy5vcHRzLmRldmljZSwgdGhpcy5vcHRzLmN1c3RvbVNTTENlcnQpKSB7XG4gICAgICAgICAgbG9nLmluZm8oYFNTTCBjZXJ0aWZpY2F0ZSAnJHtjZXJ0SGVhZH0nIGFscmVhZHkgaW5zdGFsbGVkYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nLmluZm8oYE1ha2luZyBzdXJlIFNpbXVsYXRvciBpcyBzaHV0IGRvd24sICcgK1xuICAgICAgICAgICAgJ3NvIHRoYXQgU1NMIGNlcnRpZmljYXRlIGluc3RhbGxhdGlvbiB0YWtlcyBlZmZlY3RgKTtcbiAgICAgICAgICBhd2FpdCBzaHV0ZG93blNpbXVsYXRvcih0aGlzLm9wdHMuZGV2aWNlKTtcbiAgICAgICAgICBhd2FpdCBpbnN0YWxsQ2VydGlmaWNhdGVMZWdhY3kodGhpcy5vcHRzLmRldmljZSwgdGhpcy5vcHRzLmN1c3RvbVNTTENlcnQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9nRXZlbnQoJ2N1c3RvbUNlcnRJbnN0YWxsZWQnKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5zdGFydFNpbSgpO1xuXG4gICAgICBpZiAodGhpcy5vcHRzLmN1c3RvbVNTTENlcnQgJiYgYXdhaXQgZG9lc1N1cHBvcnRLZXljaGFpbkFwaSh0aGlzLm9wdHMuZGV2aWNlKSkge1xuICAgICAgICAvLyBTaW11bGF0b3IgbXVzdCBiZSBib290ZWQgaW4gb3JkZXIgdG8gY2FsbCB0aGlzIGhlbHBlclxuICAgICAgICBhd2FpdCBpbnN0YWxsQ2VydGlmaWNhdGUodGhpcy5vcHRzLmRldmljZSwgdGhpcy5vcHRzLmN1c3RvbVNTTENlcnQpO1xuICAgICAgICB0aGlzLmxvZ0V2ZW50KCdjdXN0b21DZXJ0SW5zdGFsbGVkJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdHMubGF1bmNoV2l0aElEQiAmJiB0aGlzLmlzU2ltdWxhdG9yKCkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBpZGIgPSBuZXcgSURCKHt1ZGlkfSk7XG4gICAgICAgICAgYXdhaXQgaWRiLmNvbm5lY3QoKTtcbiAgICAgICAgICB0aGlzLm9wdHMuZGV2aWNlLmlkYiA9IGlkYjtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGxvZy5pbmZvKGBpZGIgd2lsbCBub3QgYmUgdXNlZCBmb3IgU2ltdWxhdG9yIGludGVyYWN0aW9uLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2dFdmVudCgnc2ltU3RhcnRlZCcpO1xuICAgICAgaWYgKCFpc0xvZ0NhcHR1cmVTdGFydGVkKSB7XG4gICAgICAgIC8vIFJldHJ5IGxvZyBjYXB0dXJlIGlmIFNpbXVsYXRvciB3YXMgbm90IHJ1bm5pbmcgYmVmb3JlXG4gICAgICAgIGF3YWl0IHN0YXJ0TG9nQ2FwdHVyZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdHMuYXBwKSB7XG4gICAgICBhd2FpdCB0aGlzLmluc3RhbGxBVVQoKTtcbiAgICAgIHRoaXMubG9nRXZlbnQoJ2FwcEluc3RhbGxlZCcpO1xuICAgIH1cblxuICAgIC8vIGlmIHdlIG9ubHkgaGF2ZSBidW5kbGUgaWRlbnRpZmllciBhbmQgbm8gYXBwLCBmYWlsIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGluc3RhbGxlZFxuICAgIGlmICghdGhpcy5vcHRzLmFwcCAmJiB0aGlzLm9wdHMuYnVuZGxlSWQgJiYgIXRoaXMuc2FmYXJpKSB7XG4gICAgICBpZiAoIWF3YWl0IHRoaXMub3B0cy5kZXZpY2UuaXNBcHBJbnN0YWxsZWQodGhpcy5vcHRzLmJ1bmRsZUlkKSkge1xuICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgQXBwIHdpdGggYnVuZGxlIGlkZW50aWZpZXIgJyR7dGhpcy5vcHRzLmJ1bmRsZUlkfScgdW5rbm93bmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdHMucGVybWlzc2lvbnMpIHtcbiAgICAgIGlmICh0aGlzLmlzU2ltdWxhdG9yKCkpIHtcbiAgICAgICAgbG9nLmRlYnVnKCdTZXR0aW5nIHRoZSByZXF1ZXN0ZWQgcGVybWlzc2lvbnMgYmVmb3JlIFdEQSBpcyBzdGFydGVkJyk7XG4gICAgICAgIGZvciAoY29uc3QgW2J1bmRsZUlkLCBwZXJtaXNzaW9uc01hcHBpbmddIG9mIF8udG9QYWlycyhKU09OLnBhcnNlKHRoaXMub3B0cy5wZXJtaXNzaW9ucykpKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5zZXRQZXJtaXNzaW9ucyhidW5kbGVJZCwgcGVybWlzc2lvbnNNYXBwaW5nKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLndhcm4oJ1NldHRpbmcgcGVybWlzc2lvbnMgaXMgb25seSBzdXBwb3J0ZWQgb24gU2ltdWxhdG9yLiAnICtcbiAgICAgICAgICAnVGhlIFwicGVybWlzc2lvbnNcIiBjYXBhYmlsaXR5IHdpbGwgYmUgaWdub3JlZC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgICBpZiAodGhpcy5vcHRzLmNhbGVuZGFyQWNjZXNzQXV0aG9yaXplZCkge1xuICAgICAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmVuYWJsZUNhbGVuZGFyQWNjZXNzKHRoaXMub3B0cy5idW5kbGVJZCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMub3B0cy5jYWxlbmRhckFjY2Vzc0F1dGhvcml6ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuZGlzYWJsZUNhbGVuZGFyQWNjZXNzKHRoaXMub3B0cy5idW5kbGVJZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zdGFydFdkYSh0aGlzLm9wdHMuc2Vzc2lvbklkLCByZWFsRGV2aWNlKTtcblxuICAgIGF3YWl0IHRoaXMuc2V0UmVkdWNlTW90aW9uKHRoaXMub3B0cy5yZWR1Y2VNb3Rpb24pO1xuXG4gICAgYXdhaXQgdGhpcy5zZXRJbml0aWFsT3JpZW50YXRpb24odGhpcy5vcHRzLm9yaWVudGF0aW9uKTtcbiAgICB0aGlzLmxvZ0V2ZW50KCdvcmllbnRhdGlvblNldCcpO1xuXG4gICAgLy8gcmVhbCBkZXZpY2VzIHdpbGwgYmUgaGFuZGxlZCBsYXRlciwgYWZ0ZXIgdGhlIHdlYiBjb250ZXh0IGhhcyBiZWVuIGluaXRpYWxpemVkXG4gICAgaWYgKHRoaXMuaXNTYWZhcmkoKSAmJiAhdGhpcy5pc1JlYWxEZXZpY2UoKVxuICAgICAgJiYgdXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJz49JywgJzEyLjInKSkge1xuICAgICAgLy8gb24gMTIuMiB0aGUgcGFnZSBpcyBub3Qgb3BlbmVkIGluIFdEQVxuICAgICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5vcGVuVXJsKHRoaXMuX2N1cnJlbnRVcmwpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU2FmYXJpKCkgfHwgdGhpcy5vcHRzLmF1dG9XZWJ2aWV3KSB7XG4gICAgICBsb2cuZGVidWcoJ1dhaXRpbmcgZm9yIGluaXRpYWwgd2VidmlldycpO1xuICAgICAgYXdhaXQgdGhpcy5uYXZUb0luaXRpYWxXZWJ2aWV3KCk7XG4gICAgICB0aGlzLmxvZ0V2ZW50KCdpbml0aWFsV2Vidmlld05hdmlnYXRlZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU2FmYXJpKCkgJiYgdGhpcy5pc1JlYWxEZXZpY2UoKSAmJiB1dGlsLmNvbXBhcmVWZXJzaW9ucyh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCAnPj0nLCAnMTIuMicpKSB7XG4gICAgICAvLyBvbiAxMi4yIHRoZSBwYWdlIGlzIG5vdCBvcGVuZWQgaW4gV0RBXG4gICAgICBhd2FpdCB0aGlzLnNldFVybCh0aGlzLl9jdXJyZW50VXJsKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgV2ViRHJpdmVyQWdlbnRSdW5uZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlc3Npb25JZCAtIFRoZSBpZCBvZiB0aGUgdGFyZ2V0IHNlc3Npb24gdG8gbGF1bmNoIFdEQSB3aXRoLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJlYWxEZXZpY2UgLSBFcXVhbHMgdG8gdHJ1ZSBpZiB0aGUgdGVzdCB0YXJnZXQgZGV2aWNlIGlzIGEgcmVhbCBkZXZpY2UuXG4gICAqL1xuICBhc3luYyBzdGFydFdkYSAoc2Vzc2lvbklkLCByZWFsRGV2aWNlKSB7XG4gICAgLy8gRG9uJ3QgY2xlYW51cCB0aGUgcHJvY2Vzc2VzIGlmIHdlYkRyaXZlckFnZW50VXJsIGlzIHNldFxuICAgIGlmICghdXRpbC5oYXNWYWx1ZSh0aGlzLndkYS53ZWJEcml2ZXJBZ2VudFVybCkpIHtcbiAgICAgIGF3YWl0IHRoaXMud2RhLmNsZWFudXBPYnNvbGV0ZVByb2Nlc3NlcygpO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZVBvcnRGb3J3YXJkaW5nID0gdGhpcy5pc1JlYWxEZXZpY2UoKVxuICAgICAgJiYgIXRoaXMud2RhLndlYkRyaXZlckFnZW50VXJsXG4gICAgICAmJiBpc0xvY2FsSG9zdCh0aGlzLndkYS53ZGFCYXNlVXJsKTtcbiAgICBhd2FpdCBERVZJQ0VfQ09OTkVDVElPTlNfRkFDVE9SWS5yZXF1ZXN0Q29ubmVjdGlvbih0aGlzLm9wdHMudWRpZCwgdGhpcy53ZGEudXJsLnBvcnQsIHtcbiAgICAgIGRldmljZVBvcnQ6IHVzZVBvcnRGb3J3YXJkaW5nID8gdGhpcy53ZGEud2RhUmVtb3RlUG9ydCA6IG51bGwsXG4gICAgICB1c2VQb3J0Rm9yd2FyZGluZyxcbiAgICB9KTtcblxuICAgIC8vIExldCBtdWx0aXBsZSBXREEgYmluYXJpZXMgd2l0aCBkaWZmZXJlbnQgZGVyaXZlZCBkYXRhIGZvbGRlcnMgYmUgYnVpbHQgaW4gcGFyYWxsZWxcbiAgICAvLyBDb25jdXJyZW50IFdEQSBidWlsZHMgZnJvbSB0aGUgc2FtZSBzb3VyY2Ugd2lsbCBjYXVzZSB4Y29kZWJ1aWxkIHN5bmNocm9uaXphdGlvbiBlcnJvcnNcbiAgICBsZXQgc3luY2hyb25pemF0aW9uS2V5ID0gWENVSVRlc3REcml2ZXIubmFtZTtcbiAgICBpZiAodGhpcy5vcHRzLnVzZVhjdGVzdHJ1bkZpbGUgfHwgIShhd2FpdCB0aGlzLndkYS5pc1NvdXJjZUZyZXNoKCkpKSB7XG4gICAgICAvLyBGaXJzdC10aW1lIGNvbXBpbGF0aW9uIGlzIGFuIGV4cGVuc2l2ZSBvcGVyYXRpb24sIHdoaWNoIGlzIGRvbmUgZmFzdGVyIGlmIGV4ZWN1dGVkXG4gICAgICAvLyBzZXF1ZW50aWFsbHkuIFhjb2RlYnVpbGQgc3ByZWFkcyB0aGUgbG9hZCBjYXVzZWQgYnkgdGhlIGNsYW5nIGNvbXBpbGVyIHRvIGFsbCBhdmFpbGFibGUgQ1BVIGNvcmVzXG4gICAgICBjb25zdCBkZXJpdmVkRGF0YVBhdGggPSBhd2FpdCB0aGlzLndkYS5yZXRyaWV2ZURlcml2ZWREYXRhUGF0aCgpO1xuICAgICAgaWYgKGRlcml2ZWREYXRhUGF0aCkge1xuICAgICAgICBzeW5jaHJvbml6YXRpb25LZXkgPSBwYXRoLm5vcm1hbGl6ZShkZXJpdmVkRGF0YVBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgICBsb2cuZGVidWcoYFN0YXJ0aW5nIFdlYkRyaXZlckFnZW50IGluaXRpYWxpemF0aW9uIHdpdGggdGhlIHN5bmNocm9uaXphdGlvbiBrZXkgJyR7c3luY2hyb25pemF0aW9uS2V5fSdgKTtcbiAgICBpZiAoU0hBUkVEX1JFU09VUkNFU19HVUFSRC5pc0J1c3koKSAmJiAhdGhpcy5vcHRzLmRlcml2ZWREYXRhUGF0aCAmJiAhdGhpcy5vcHRzLmJvb3RzdHJhcFBhdGgpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgQ29uc2lkZXIgc2V0dGluZyBhIHVuaXF1ZSAnZGVyaXZlZERhdGFQYXRoJyBjYXBhYmlsaXR5IHZhbHVlIGZvciBlYWNoIHBhcmFsbGVsIGRyaXZlciBpbnN0YW5jZSBgICtcbiAgICAgICAgYHRvIGF2b2lkIGNvbmZsaWN0cyBhbmQgc3BlZWQgdXAgdGhlIGJ1aWxkaW5nIHByb2Nlc3NgKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IFNIQVJFRF9SRVNPVVJDRVNfR1VBUkQuYWNxdWlyZShzeW5jaHJvbml6YXRpb25LZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGlmICh0aGlzLm9wdHMudXNlTmV3V0RBKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgQ2FwYWJpbGl0eSAndXNlTmV3V0RBJyBzZXQgdG8gdHJ1ZSwgc28gdW5pbnN0YWxsaW5nIFdEQSBiZWZvcmUgcHJvY2VlZGluZ2ApO1xuICAgICAgICBhd2FpdCB0aGlzLndkYS5xdWl0QW5kVW5pbnN0YWxsKCk7XG4gICAgICAgIHRoaXMubG9nRXZlbnQoJ3dkYVVuaW5zdGFsbGVkJyk7XG4gICAgICB9IGVsc2UgaWYgKCF1dGlsLmhhc1ZhbHVlKHRoaXMud2RhLndlYkRyaXZlckFnZW50VXJsKSkge1xuICAgICAgICBhd2FpdCB0aGlzLndkYS5zZXR1cENhY2hpbmcoKTtcbiAgICAgIH1cblxuICAgICAgLy8gbG9jYWwgaGVscGVyIGZvciB0aGUgdHdvIHBsYWNlcyB3ZSBuZWVkIHRvIHVuaW5zdGFsbCB3ZGEgYW5kIHJlLXN0YXJ0IGl0XG4gICAgICBjb25zdCBxdWl0QW5kVW5pbnN0YWxsID0gYXN5bmMgKG1zZykgPT4ge1xuICAgICAgICBsb2cuZGVidWcobXNnKTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy53ZWJEcml2ZXJBZ2VudFVybCkge1xuICAgICAgICAgIGxvZy5kZWJ1ZygnTm90IHF1aXR0aW5nL3VuaW5zdGFsbGluZyBXZWJEcml2ZXJBZ2VudCBzaW5jZSB3ZWJEcml2ZXJBZ2VudFVybCBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkJyk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgbG9nLndhcm4oJ1F1aXR0aW5nIGFuZCB1bmluc3RhbGxpbmcgV2ViRHJpdmVyQWdlbnQnKTtcbiAgICAgICAgYXdhaXQgdGhpcy53ZGEucXVpdEFuZFVuaW5zdGFsbCgpO1xuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgfTtcblxuICAgICAgLy8gVXNlZCBpbiB0aGUgZm9sbG93aW5nIFdEQSBidWlsZFxuICAgICAgaWYgKHRoaXMub3B0cy5yZXN1bHRCdW5kbGVQYXRoKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlRmVhdHVyZUVuYWJsZWQoQ1VTVE9NSVpFX1JFU1VMVF9CVU5EUEVfUEFUSCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0YXJ0dXBSZXRyaWVzID0gdGhpcy5vcHRzLndkYVN0YXJ0dXBSZXRyaWVzIHx8ICh0aGlzLmlzUmVhbERldmljZSgpID8gV0RBX1JFQUxfREVWX1NUQVJUVVBfUkVUUklFUyA6IFdEQV9TSU1fU1RBUlRVUF9SRVRSSUVTKTtcbiAgICAgIGNvbnN0IHN0YXJ0dXBSZXRyeUludGVydmFsID0gdGhpcy5vcHRzLndkYVN0YXJ0dXBSZXRyeUludGVydmFsIHx8IFdEQV9TVEFSVFVQX1JFVFJZX0lOVEVSVkFMO1xuICAgICAgbG9nLmRlYnVnKGBUcnlpbmcgdG8gc3RhcnQgV2ViRHJpdmVyQWdlbnQgJHtzdGFydHVwUmV0cmllc30gdGltZXMgd2l0aCAke3N0YXJ0dXBSZXRyeUludGVydmFsfW1zIGludGVydmFsYCk7XG4gICAgICBpZiAoIXV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLndkYVN0YXJ0dXBSZXRyaWVzKSAmJiAhdXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMud2RhU3RhcnR1cFJldHJ5SW50ZXJ2YWwpKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgVGhlc2UgdmFsdWVzIGNhbiBiZSBjdXN0b21pemVkIGJ5IGNoYW5naW5nIHdkYVN0YXJ0dXBSZXRyaWVzL3dkYVN0YXJ0dXBSZXRyeUludGVydmFsIGNhcGFiaWxpdGllc2ApO1xuICAgICAgfVxuICAgICAgbGV0IHJldHJ5Q291bnQgPSAwO1xuICAgICAgYXdhaXQgcmV0cnlJbnRlcnZhbChzdGFydHVwUmV0cmllcywgc3RhcnR1cFJldHJ5SW50ZXJ2YWwsIGFzeW5jICgpID0+IHtcbiAgICAgICAgdGhpcy5sb2dFdmVudCgnd2RhU3RhcnRBdHRlbXB0ZWQnKTtcbiAgICAgICAgaWYgKHJldHJ5Q291bnQgPiAwKSB7XG4gICAgICAgICAgbG9nLmluZm8oYFJldHJ5aW5nIFdEQSBzdGFydHVwICgke3JldHJ5Q291bnQgKyAxfSBvZiAke3N0YXJ0dXBSZXRyaWVzfSlgKTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIG9uIHhjb2RlIDEwIGluc3RhbGxkIHdpbGwgb2Z0ZW4gdHJ5IHRvIGFjY2VzcyB0aGUgYXBwIGZyb20gaXRzIHN0YWdpbmdcbiAgICAgICAgICAvLyBkaXJlY3RvcnkgYmVmb3JlIGZ1bGx5IG1vdmluZyBpdCB0aGVyZSwgYW5kIGZhaWwuIFJldHJ5aW5nIG9uY2VcbiAgICAgICAgICAvLyBpbW1lZGlhdGVseSBoZWxwc1xuICAgICAgICAgIGNvbnN0IHJldHJpZXMgPSB0aGlzLnhjb2RlVmVyc2lvbi5tYWpvciA+PSAxMCA/IDIgOiAxO1xuICAgICAgICAgIHRoaXMuY2FjaGVkV2RhU3RhdHVzID0gYXdhaXQgcmV0cnkocmV0cmllcywgdGhpcy53ZGEubGF1bmNoLmJpbmQodGhpcy53ZGEpLCBzZXNzaW9uSWQsIHJlYWxEZXZpY2UpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aGlzLmxvZ0V2ZW50KCd3ZGFTdGFydEZhaWxlZCcpO1xuICAgICAgICAgIHJldHJ5Q291bnQrKztcbiAgICAgICAgICBsZXQgZXJyb3JNc2cgPSBgVW5hYmxlIHRvIGxhdW5jaCBXZWJEcml2ZXJBZ2VudCBiZWNhdXNlIG9mIHhjb2RlYnVpbGQgZmFpbHVyZTogJHtlcnIubWVzc2FnZX1gO1xuICAgICAgICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgICAgICAgICBlcnJvck1zZyArPSBgLiBNYWtlIHN1cmUgeW91IGZvbGxvdyB0aGUgdHV0b3JpYWwgYXQgJHtXREFfUkVBTF9ERVZfVFVUT1JJQUxfVVJMfS4gYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgVHJ5IHRvIHJlbW92ZSB0aGUgV2ViRHJpdmVyQWdlbnRSdW5uZXIgYXBwbGljYXRpb24gZnJvbSB0aGUgZGV2aWNlIGlmIGl0IGlzIGluc3RhbGxlZCBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBhbmQgcmVib290IHRoZSBkZXZpY2UuYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgcXVpdEFuZFVuaW5zdGFsbChlcnJvck1zZyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy53ZGEucHJveHlSZXFSZXMuYmluZCh0aGlzLndkYSk7XG4gICAgICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xuXG4gICAgICAgIGxldCBvcmlnaW5hbFN0YWNrdHJhY2UgPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwoMTUsIDEwMDAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9nRXZlbnQoJ3dkYVNlc3Npb25BdHRlbXB0ZWQnKTtcbiAgICAgICAgICAgIGxvZy5kZWJ1ZygnU2VuZGluZyBjcmVhdGVTZXNzaW9uIGNvbW1hbmQgdG8gV0RBJyk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB0aGlzLmNhY2hlZFdkYVN0YXR1cyA9IHRoaXMuY2FjaGVkV2RhU3RhdHVzIHx8IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvc3RhdHVzJywgJ0dFVCcpO1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0YXJ0V2RhU2Vzc2lvbih0aGlzLm9wdHMuYnVuZGxlSWQsIHRoaXMub3B0cy5wcm9jZXNzQXJndW1lbnRzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICBvcmlnaW5hbFN0YWNrdHJhY2UgPSBlcnIuc3RhY2s7XG4gICAgICAgICAgICAgIGxvZy5kZWJ1ZyhgRmFpbGVkIHRvIGNyZWF0ZSBXREEgc2Vzc2lvbiAoJHtlcnIubWVzc2FnZX0pLiBSZXRyeWluZy4uLmApO1xuICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5sb2dFdmVudCgnd2RhU2Vzc2lvblN0YXJ0ZWQnKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaWYgKG9yaWdpbmFsU3RhY2t0cmFjZSkge1xuICAgICAgICAgICAgbG9nLmRlYnVnKG9yaWdpbmFsU3RhY2t0cmFjZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBlcnJvck1zZyA9IGBVbmFibGUgdG8gc3RhcnQgV2ViRHJpdmVyQWdlbnQgc2Vzc2lvbiBiZWNhdXNlIG9mIHhjb2RlYnVpbGQgZmFpbHVyZTogJHtlcnIubWVzc2FnZX1gO1xuICAgICAgICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgICAgICAgICBlcnJvck1zZyArPSBgIE1ha2Ugc3VyZSB5b3UgZm9sbG93IHRoZSB0dXRvcmlhbCBhdCAke1dEQV9SRUFMX0RFVl9UVVRPUklBTF9VUkx9LiBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBUcnkgdG8gcmVtb3ZlIHRoZSBXZWJEcml2ZXJBZ2VudFJ1bm5lciBhcHBsaWNhdGlvbiBmcm9tIHRoZSBkZXZpY2UgaWYgaXQgaXMgaW5zdGFsbGVkIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYGFuZCByZWJvb3QgdGhlIGRldmljZS5gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCBxdWl0QW5kVW5pbnN0YWxsKGVycm9yTXNnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wdHMuY2xlYXJTeXN0ZW1GaWxlcyAmJiAhdGhpcy5vcHRzLndlYkRyaXZlckFnZW50VXJsKSB7XG4gICAgICAgICAgYXdhaXQgbWFya1N5c3RlbUZpbGVzRm9yQ2xlYW51cCh0aGlzLndkYSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3ZSBleHBlY3QgY2VydGFpbiBzb2NrZXQgZXJyb3JzIHVudGlsIHRoaXMgcG9pbnQsIGJ1dCBub3dcbiAgICAgICAgLy8gbWFyayB0aGluZ3MgYXMgZnVsbHkgd29ya2luZ1xuICAgICAgICB0aGlzLndkYS5mdWxseVN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmxvZ0V2ZW50KCd3ZGFTdGFydGVkJyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHJ1blJlc2V0IChvcHRzID0gbnVsbCkge1xuICAgIHRoaXMubG9nRXZlbnQoJ3Jlc2V0U3RhcnRlZCcpO1xuICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgICBhd2FpdCBydW5SZWFsRGV2aWNlUmVzZXQodGhpcy5vcHRzLmRldmljZSwgb3B0cyB8fCB0aGlzLm9wdHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBydW5TaW11bGF0b3JSZXNldCh0aGlzLm9wdHMuZGV2aWNlLCBvcHRzIHx8IHRoaXMub3B0cyk7XG4gICAgfVxuICAgIHRoaXMubG9nRXZlbnQoJ3Jlc2V0Q29tcGxldGUnKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVNlc3Npb24gKCkge1xuICAgIGF3YWl0IHJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyh0aGlzLnNlcnZlciwgdGhpcy5zZXNzaW9uSWQpO1xuXG4gICAgZm9yIChjb25zdCByZWNvcmRlciBvZiBfLmNvbXBhY3QoW3RoaXMuX3JlY2VudFNjcmVlblJlY29yZGVyLCB0aGlzLl9hdWRpb1JlY29yZGVyXSkpIHtcbiAgICAgIGF3YWl0IHJlY29yZGVyLmludGVycnVwdCh0cnVlKTtcbiAgICAgIGF3YWl0IHJlY29yZGVyLmNsZWFudXAoKTtcbiAgICB9XG5cbiAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLl9wZXJmUmVjb3JkZXJzKSkge1xuICAgICAgYXdhaXQgQi5hbGwodGhpcy5fcGVyZlJlY29yZGVycy5tYXAoKHgpID0+IHguc3RvcCh0cnVlKSkpO1xuICAgICAgdGhpcy5fcGVyZlJlY29yZGVycyA9IFtdO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuc3RvcCgpO1xuXG4gICAgaWYgKHRoaXMud2RhICYmICF0aGlzLm9wdHMud2ViRHJpdmVyQWdlbnRVcmwpIHtcbiAgICAgIGlmICh0aGlzLm9wdHMuY2xlYXJTeXN0ZW1GaWxlcykge1xuICAgICAgICBsZXQgc3luY2hyb25pemF0aW9uS2V5ID0gWENVSVRlc3REcml2ZXIubmFtZTtcbiAgICAgICAgY29uc3QgZGVyaXZlZERhdGFQYXRoID0gYXdhaXQgdGhpcy53ZGEucmV0cmlldmVEZXJpdmVkRGF0YVBhdGgoKTtcbiAgICAgICAgaWYgKGRlcml2ZWREYXRhUGF0aCkge1xuICAgICAgICAgIHN5bmNocm9uaXphdGlvbktleSA9IHBhdGgubm9ybWFsaXplKGRlcml2ZWREYXRhUGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgU0hBUkVEX1JFU09VUkNFU19HVUFSRC5hY3F1aXJlKHN5bmNocm9uaXphdGlvbktleSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IGNsZWFyU3lzdGVtRmlsZXModGhpcy53ZGEpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy5kZWJ1ZygnTm90IGNsZWFyaW5nIGxvZyBmaWxlcy4gVXNlIGBjbGVhclN5c3RlbUZpbGVzYCBjYXBhYmlsaXR5IHRvIHR1cm4gb24uJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVtb3RlKSB7XG4gICAgICBsb2cuZGVidWcoJ0ZvdW5kIGEgcmVtb3RlIGRlYnVnZ2VyIHNlc3Npb24uIFJlbW92aW5nLi4uJyk7XG4gICAgICBhd2FpdCB0aGlzLnN0b3BSZW1vdGUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRzLnJlc2V0T25TZXNzaW9uU3RhcnRPbmx5ID09PSBmYWxzZSkge1xuICAgICAgYXdhaXQgdGhpcy5ydW5SZXNldChPYmplY3QuYXNzaWduKHt9LCB0aGlzLm9wdHMsIHtcbiAgICAgICAgZW5mb3JjZVNpbXVsYXRvclNodXRkb3duOiB0cnVlLFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU2ltdWxhdG9yKCkgJiYgIXRoaXMub3B0cy5ub1Jlc2V0ICYmICEhdGhpcy5vcHRzLmRldmljZSkge1xuICAgICAgaWYgKHRoaXMubGlmZWN5Y2xlRGF0YS5jcmVhdGVTaW0pIHtcbiAgICAgICAgbG9nLmRlYnVnKGBEZWxldGluZyBzaW11bGF0b3IgY3JlYXRlZCBmb3IgdGhpcyBydW4gKHVkaWQ6ICcke3RoaXMub3B0cy51ZGlkfScpYCk7XG4gICAgICAgIGF3YWl0IHNodXRkb3duU2ltdWxhdG9yKHRoaXMub3B0cy5kZXZpY2UpO1xuICAgICAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmRlbGV0ZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNob3VsZFJlc2V0TG9jYXRpb25TZXJ2aXZjZSA9IHRoaXMuaXNSZWFsRGV2aWNlKCkgJiYgISF0aGlzLm9wdHMucmVzZXRMb2NhdGlvblNlcnZpY2U7XG4gICAgaWYgKHNob3VsZFJlc2V0TG9jYXRpb25TZXJ2aXZjZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5tb2JpbGVSZXNldExvY2F0aW9uU2VydmljZSgpO1xuICAgICAgfSBjYXRjaCAoaWdub3JlKSB7IC8qIElnbm9yZSB0aGlzIGVycm9yIHNpbmNlIG1vYmlsZVJlc2V0TG9jYXRpb25TZXJ2aWNlIGFscmVhZHkgbG9nZ2VkIHRoZSBlcnJvciAqLyB9XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzRW1wdHkodGhpcy5sb2dzKSkge1xuICAgICAgYXdhaXQgdGhpcy5sb2dzLnN5c2xvZy5zdG9wQ2FwdHVyZSgpO1xuICAgICAgdGhpcy5sb2dzID0ge307XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWpwZWdTdHJlYW0pIHtcbiAgICAgIGxvZy5pbmZvKCdDbG9zaW5nIE1KUEVHIHN0cmVhbScpO1xuICAgICAgdGhpcy5tanBlZ1N0cmVhbS5zdG9wKCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNldElvcygpO1xuXG4gICAgYXdhaXQgc3VwZXIuZGVsZXRlU2Vzc2lvbigpO1xuICB9XG5cbiAgYXN5bmMgc3RvcCAoKSB7XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMucHJveHlSZXFSZXMgPSBudWxsO1xuXG5cbiAgICBpZiAodGhpcy53ZGEgJiYgdGhpcy53ZGEuZnVsbHlTdGFydGVkKSB7XG4gICAgICBpZiAodGhpcy53ZGEuandwcm94eSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvc2Vzc2lvbi8ke3RoaXMuc2Vzc2lvbklkfWAsICdERUxFVEUnKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLy8gYW4gZXJyb3IgaGVyZSBzaG91bGQgbm90IHNob3J0LWNpcmN1aXQgdGhlIHJlc3Qgb2YgY2xlYW4gdXBcbiAgICAgICAgICBsb2cuZGVidWcoYFVuYWJsZSB0byBERUxFVEUgc2Vzc2lvbiBvbiBXREE6ICcke2Vyci5tZXNzYWdlfScuIENvbnRpbnVpbmcgc2h1dGRvd24uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy53ZGEud2ViRHJpdmVyQWdlbnRVcmwgJiYgdGhpcy5vcHRzLnVzZU5ld1dEQSkge1xuICAgICAgICBhd2FpdCB0aGlzLndkYS5xdWl0KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgREVWSUNFX0NPTk5FQ1RJT05TX0ZBQ1RPUlkucmVsZWFzZUNvbm5lY3Rpb24odGhpcy5vcHRzLnVkaWQpO1xuICB9XG5cbiAgYXN5bmMgZXhlY3V0ZUNvbW1hbmQgKGNtZCwgLi4uYXJncykge1xuICAgIGxvZy5kZWJ1ZyhgRXhlY3V0aW5nIGNvbW1hbmQgJyR7Y21kfSdgKTtcblxuICAgIGlmIChjbWQgPT09ICdyZWNlaXZlQXN5bmNSZXNwb25zZScpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlY2VpdmVBc3luY1Jlc3BvbnNlKC4uLmFyZ3MpO1xuICAgIH1cbiAgICAvLyBUT0RPOiBvbmNlIHRoaXMgZml4IGdldHMgaW50byBiYXNlIGRyaXZlciByZW1vdmUgZnJvbSBoZXJlXG4gICAgaWYgKGNtZCA9PT0gJ2dldFN0YXR1cycpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldFN0YXR1cygpO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgc3VwZXIuZXhlY3V0ZUNvbW1hbmQoY21kLCAuLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIGNvbmZpZ3VyZUFwcCAoKSB7XG4gICAgZnVuY3Rpb24gYXBwSXNQYWNrYWdlT3JCdW5kbGUgKGFwcCkge1xuICAgICAgcmV0dXJuICgvXihbYS16QS1aMC05XFwtX10rXFwuW2EtekEtWjAtOVxcLV9dKykrJC8pLnRlc3QoYXBwKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgYXBwIG5hbWUgaXMgYSBidW5kbGVJZCBhc3NpZ24gaXQgdG8gdGhlIGJ1bmRsZUlkIHByb3BlcnR5XG4gICAgaWYgKCF0aGlzLm9wdHMuYnVuZGxlSWQgJiYgYXBwSXNQYWNrYWdlT3JCdW5kbGUodGhpcy5vcHRzLmFwcCkpIHtcbiAgICAgIHRoaXMub3B0cy5idW5kbGVJZCA9IHRoaXMub3B0cy5hcHA7XG4gICAgICB0aGlzLm9wdHMuYXBwID0gJyc7XG4gICAgfVxuICAgIC8vIHdlIGhhdmUgYSBidW5kbGUgSUQsIGJ1dCBubyBhcHAsIG9yIGFwcCBpcyBhbHNvIGEgYnVuZGxlXG4gICAgaWYgKCh0aGlzLm9wdHMuYnVuZGxlSWQgJiYgYXBwSXNQYWNrYWdlT3JCdW5kbGUodGhpcy5vcHRzLmJ1bmRsZUlkKSkgJiZcbiAgICAgICAgKHRoaXMub3B0cy5hcHAgPT09ICcnIHx8IGFwcElzUGFja2FnZU9yQnVuZGxlKHRoaXMub3B0cy5hcHApKSkge1xuICAgICAgbG9nLmRlYnVnKCdBcHAgaXMgYW4gaU9TIGJ1bmRsZSwgd2lsbCBhdHRlbXB0IHRvIHJ1biBhcyBwcmUtZXhpc3RpbmcnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBmb3Igc3VwcG9ydGVkIGJ1aWxkLWluIGFwcHNcbiAgICBzd2l0Y2ggKF8udG9Mb3dlcih0aGlzLm9wdHMuYXBwKSkge1xuICAgICAgY2FzZSAnc2V0dGluZ3MnOlxuICAgICAgICB0aGlzLm9wdHMuYnVuZGxlSWQgPSAnY29tLmFwcGxlLlByZWZlcmVuY2VzJztcbiAgICAgICAgdGhpcy5vcHRzLmFwcCA9IG51bGw7XG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgJ2NhbGVuZGFyJzpcbiAgICAgICAgdGhpcy5vcHRzLmJ1bmRsZUlkID0gJ2NvbS5hcHBsZS5tb2JpbGVjYWwnO1xuICAgICAgICB0aGlzLm9wdHMuYXBwID0gbnVsbDtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBkb3dubG9hZCBpZiBuZWNlc3NhcnlcbiAgICAgIHRoaXMub3B0cy5hcHAgPSBhd2FpdCB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKHRoaXMub3B0cy5hcHAsICcuYXBwJyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cuZXJyb3IoZXJyKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQmFkIGFwcDogJHt0aGlzLm9wdHMuYXBwfS4gYCArXG4gICAgICAgIGBBcHAgcGF0aHMgbmVlZCB0byBiZSBhYnNvbHV0ZSBvciBhbiBVUkwgdG8gYSBjb21wcmVzc2VkIGFwcCBmaWxlOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRldGVybWluZURldmljZSAoKSB7XG4gICAgLy8gaW4gdGhlIG9uZSBjYXNlIHdoZXJlIHdlIGNyZWF0ZSBhIHNpbSwgd2Ugd2lsbCBzZXQgdGhpcyBzdGF0ZVxuICAgIHRoaXMubGlmZWN5Y2xlRGF0YS5jcmVhdGVTaW0gPSBmYWxzZTtcblxuICAgIC8vIGlmIHdlIGdldCBnZW5lcmljIG5hbWVzLCB0cmFuc2xhdGUgdGhlbVxuICAgIHRoaXMub3B0cy5kZXZpY2VOYW1lID0gdHJhbnNsYXRlRGV2aWNlTmFtZSh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCB0aGlzLm9wdHMuZGV2aWNlTmFtZSk7XG5cbiAgICBjb25zdCBzZXR1cFZlcnNpb25DYXBzID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdGhpcy5vcHRzLmlvc1Nka1ZlcnNpb24gPSBhd2FpdCBnZXRBbmRDaGVja0lvc1Nka1ZlcnNpb24oKTtcbiAgICAgIGxvZy5pbmZvKGBpT1MgU0RLIFZlcnNpb24gc2V0IHRvICcke3RoaXMub3B0cy5pb3NTZGtWZXJzaW9ufSdgKTtcbiAgICAgIGlmICghdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiAmJiB0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbikge1xuICAgICAgICBsb2cuaW5mbyhgTm8gcGxhdGZvcm1WZXJzaW9uIHNwZWNpZmllZC4gVXNpbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIFhjb2RlIHN1cHBvcnRzOiAnJHt0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbn0nLiBgICtcbiAgICAgICAgICBgVGhpcyBtYXkgY2F1c2UgcHJvYmxlbXMgaWYgYSBzaW11bGF0b3IgZG9lcyBub3QgZXhpc3QgZm9yIHRoaXMgcGxhdGZvcm0gdmVyc2lvbi5gKTtcbiAgICAgICAgdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiA9IG5vcm1hbGl6ZVBsYXRmb3JtVmVyc2lvbih0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmICh0aGlzLm9wdHMudWRpZCkge1xuICAgICAgaWYgKHRoaXMub3B0cy51ZGlkLnRvTG93ZXJDYXNlKCkgPT09ICdhdXRvJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMub3B0cy51ZGlkID0gYXdhaXQgZGV0ZWN0VWRpZCgpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAvLyBUcnlpbmcgdG8gZmluZCBtYXRjaGluZyBVRElEIGZvciBTaW11bGF0b3JcbiAgICAgICAgICBsb2cud2FybihgQ2Fubm90IGRldGVjdCBhbnkgY29ubmVjdGVkIHJlYWwgZGV2aWNlcy4gRmFsbGluZyBiYWNrIHRvIFNpbXVsYXRvci4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgZ2V0RXhpc3RpbmdTaW0odGhpcy5vcHRzKTtcbiAgICAgICAgICBpZiAoIWRldmljZSkge1xuICAgICAgICAgICAgLy8gTm8gbWF0Y2hpbmcgU2ltdWxhdG9yIGlzIGZvdW5kLiBUaHJvdyBhbiBlcnJvclxuICAgICAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYENhbm5vdCBkZXRlY3QgdWRpZCBmb3IgJHt0aGlzLm9wdHMuZGV2aWNlTmFtZX0gU2ltdWxhdG9yIHJ1bm5pbmcgaU9TICR7dGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbn1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBNYXRjaGluZyBTaW11bGF0b3IgZXhpc3RzIGFuZCBpcyBmb3VuZC4gVXNlIGl0XG4gICAgICAgICAgdGhpcy5vcHRzLnVkaWQgPSBkZXZpY2UudWRpZDtcbiAgICAgICAgICBjb25zdCBkZXZpY2VQbGF0Zm9ybSA9IG5vcm1hbGl6ZVBsYXRmb3JtVmVyc2lvbihhd2FpdCBkZXZpY2UuZ2V0UGxhdGZvcm1WZXJzaW9uKCkpO1xuICAgICAgICAgIGlmICh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uICE9PSBkZXZpY2VQbGF0Zm9ybSkge1xuICAgICAgICAgICAgdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiA9IGRldmljZVBsYXRmb3JtO1xuICAgICAgICAgICAgbG9nLmluZm8oYFNldCBwbGF0Zm9ybVZlcnNpb24gdG8gJyR7ZGV2aWNlUGxhdGZvcm19JyB0byBtYXRjaCB0aGUgZGV2aWNlIHdpdGggZ2l2ZW4gVURJRGApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCBzZXR1cFZlcnNpb25DYXBzKCk7XG4gICAgICAgICAgcmV0dXJuIHtkZXZpY2UsIHJlYWxEZXZpY2U6IGZhbHNlLCB1ZGlkOiBkZXZpY2UudWRpZH07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG1ha2Ugc3VyZSBpdCBpcyBhIGNvbm5lY3RlZCBkZXZpY2UuIElmIG5vdCwgdGhlIHVkaWQgcGFzc2VkIGluIGlzIGludmFsaWRcbiAgICAgICAgY29uc3QgZGV2aWNlcyA9IGF3YWl0IGdldENvbm5lY3RlZERldmljZXMoKTtcbiAgICAgICAgbG9nLmRlYnVnKGBBdmFpbGFibGUgZGV2aWNlczogJHtkZXZpY2VzLmpvaW4oJywgJyl9YCk7XG4gICAgICAgIGlmICghZGV2aWNlcy5pbmNsdWRlcyh0aGlzLm9wdHMudWRpZCkpIHtcbiAgICAgICAgICAvLyBjaGVjayBmb3IgYSBwYXJ0aWN1bGFyIHNpbXVsYXRvclxuICAgICAgICAgIGxvZy5kZWJ1ZyhgTm8gcmVhbCBkZXZpY2Ugd2l0aCB1ZGlkICcke3RoaXMub3B0cy51ZGlkfScuIExvb2tpbmcgZm9yIHNpbXVsYXRvcmApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBnZXRTaW11bGF0b3IodGhpcy5vcHRzLnVkaWQsIHtcbiAgICAgICAgICAgICAgZGV2aWNlc1NldFBhdGg6IHRoaXMub3B0cy5zaW11bGF0b3JEZXZpY2VzU2V0UGF0aCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHtkZXZpY2UsIHJlYWxEZXZpY2U6IGZhbHNlLCB1ZGlkOiB0aGlzLm9wdHMudWRpZH07XG4gICAgICAgICAgfSBjYXRjaCAoaWduKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZGV2aWNlIG9yIHNpbXVsYXRvciBVRElEOiAnJHt0aGlzLm9wdHMudWRpZH0nYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGdldFJlYWxEZXZpY2VPYmoodGhpcy5vcHRzLnVkaWQpO1xuICAgICAgcmV0dXJuIHtkZXZpY2UsIHJlYWxEZXZpY2U6IHRydWUsIHVkaWQ6IHRoaXMub3B0cy51ZGlkfTtcbiAgICB9XG5cbiAgICAvLyBOb3cgd2Uga25vdyBmb3Igc3VyZSB0aGUgZGV2aWNlIHdpbGwgYmUgYSBTaW11bGF0b3JcbiAgICBhd2FpdCBzZXR1cFZlcnNpb25DYXBzKCk7XG4gICAgaWYgKHRoaXMub3B0cy5lbmZvcmNlRnJlc2hTaW11bGF0b3JDcmVhdGlvbikge1xuICAgICAgbG9nLmRlYnVnKGBOZXcgc2ltdWxhdG9yIGlzIHJlcXVlc3RlZC4gSWYgdGhpcyBpcyBub3Qgd2FudGVkLCBzZXQgJ2VuZm9yY2VGcmVzaFNpbXVsYXRvckNyZWF0aW9uJyBjYXBhYmlsaXR5IHRvIGZhbHNlYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZpZ3VyZSBvdXQgdGhlIGNvcnJlY3Qgc2ltdWxhdG9yIHRvIHVzZSwgZ2l2ZW4gdGhlIGRlc2lyZWQgY2FwYWJpbGl0aWVzXG4gICAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBnZXRFeGlzdGluZ1NpbSh0aGlzLm9wdHMpO1xuXG4gICAgICAvLyBjaGVjayBmb3IgYW4gZXhpc3Rpbmcgc2ltdWxhdG9yXG4gICAgICBpZiAoZGV2aWNlKSB7XG4gICAgICAgIHJldHVybiB7ZGV2aWNlLCByZWFsRGV2aWNlOiBmYWxzZSwgdWRpZDogZGV2aWNlLnVkaWR9O1xuICAgICAgfVxuXG4gICAgICBsb2cuaW5mbygnU2ltdWxhdG9yIHVkaWQgbm90IHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgLy8gbm8gZGV2aWNlIG9mIHRoaXMgdHlwZSBleGlzdHMsIG9yIHRoZXkgcmVxdWVzdCBuZXcgc2ltLCBzbyBjcmVhdGUgb25lXG4gICAgbG9nLmluZm8oJ1VzaW5nIGRlc2lyZWQgY2FwcyB0byBjcmVhdGUgYSBuZXcgc2ltdWxhdG9yJyk7XG4gICAgY29uc3QgZGV2aWNlID0gYXdhaXQgdGhpcy5jcmVhdGVTaW0oKTtcbiAgICByZXR1cm4ge2RldmljZSwgcmVhbERldmljZTogZmFsc2UsIHVkaWQ6IGRldmljZS51ZGlkfTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0U2ltICgpIHtcbiAgICBjb25zdCBydW5PcHRzID0ge1xuICAgICAgc2NhbGVGYWN0b3I6IHRoaXMub3B0cy5zY2FsZUZhY3RvcixcbiAgICAgIGNvbm5lY3RIYXJkd2FyZUtleWJvYXJkOiAhIXRoaXMub3B0cy5jb25uZWN0SGFyZHdhcmVLZXlib2FyZCxcbiAgICAgIHBhc3RlYm9hcmRBdXRvbWF0aWNTeW5jOiB0aGlzLm9wdHMuc2ltdWxhdG9yUGFzdGVib2FyZEF1dG9tYXRpY1N5bmMgPz8gJ29mZicsXG4gICAgICBpc0hlYWRsZXNzOiAhIXRoaXMub3B0cy5pc0hlYWRsZXNzLFxuICAgICAgdHJhY2VQb2ludGVyOiB0aGlzLm9wdHMuc2ltdWxhdG9yVHJhY2VQb2ludGVyLFxuICAgICAgZGV2aWNlUHJlZmVyZW5jZXM6IHt9LFxuICAgIH07XG5cbiAgICAvLyBhZGQgdGhlIHdpbmRvdyBjZW50ZXIsIGlmIGl0IGlzIHNwZWNpZmllZFxuICAgIGlmICh0aGlzLm9wdHMuU2ltdWxhdG9yV2luZG93Q2VudGVyKSB7XG4gICAgICBydW5PcHRzLmRldmljZVByZWZlcmVuY2VzLlNpbXVsYXRvcldpbmRvd0NlbnRlciA9IHRoaXMub3B0cy5TaW11bGF0b3JXaW5kb3dDZW50ZXI7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNJbnRlZ2VyKHRoaXMub3B0cy5zaW11bGF0b3JTdGFydHVwVGltZW91dCkpIHtcbiAgICAgIHJ1bk9wdHMuc3RhcnR1cFRpbWVvdXQgPSB0aGlzLm9wdHMuc2ltdWxhdG9yU3RhcnR1cFRpbWVvdXQ7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyB0byB3b3JrYXJvdW5kIFhDVGVzdCBidWcgYWJvdXQgY2hhbmdpbmcgU2ltdWxhdG9yXG4gICAgLy8gb3JpZW50YXRpb24gaXMgbm90IHN5bmNocm9uaXplZCB0byB0aGUgYWN0dWFsIHdpbmRvdyBvcmllbnRhdGlvblxuICAgIGNvbnN0IG9yaWVudGF0aW9uID0gXy5pc1N0cmluZyh0aGlzLm9wdHMub3JpZW50YXRpb24pICYmIHRoaXMub3B0cy5vcmllbnRhdGlvbi50b1VwcGVyQ2FzZSgpO1xuICAgIHN3aXRjaCAob3JpZW50YXRpb24pIHtcbiAgICAgIGNhc2UgJ0xBTkRTQ0FQRSc6XG4gICAgICAgIHJ1bk9wdHMuZGV2aWNlUHJlZmVyZW5jZXMuU2ltdWxhdG9yV2luZG93T3JpZW50YXRpb24gPSAnTGFuZHNjYXBlTGVmdCc7XG4gICAgICAgIHJ1bk9wdHMuZGV2aWNlUHJlZmVyZW5jZXMuU2ltdWxhdG9yV2luZG93Um90YXRpb25BbmdsZSA9IDkwO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1BPUlRSQUlUJzpcbiAgICAgICAgcnVuT3B0cy5kZXZpY2VQcmVmZXJlbmNlcy5TaW11bGF0b3JXaW5kb3dPcmllbnRhdGlvbiA9ICdQb3J0cmFpdCc7XG4gICAgICAgIHJ1bk9wdHMuZGV2aWNlUHJlZmVyZW5jZXMuU2ltdWxhdG9yV2luZG93Um90YXRpb25BbmdsZSA9IDA7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2UucnVuKHJ1bk9wdHMpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlU2ltICgpIHtcbiAgICB0aGlzLmxpZmVjeWNsZURhdGEuY3JlYXRlU2ltID0gdHJ1ZTtcblxuICAgIC8vIEdldCBwbGF0Zm9ybSBuYW1lIGZyb20gY29uc3Qgc2luY2UgaXQgbXVzdCBiZSBjYXNlIHNlbnNpdGl2ZSB0byBjcmVhdGUgYSBuZXcgc2ltdWxhdG9yXG4gICAgY29uc3QgcGxhdGZvcm1OYW1lID0gdGhpcy5pc1R2T1MoKSA/IFBMQVRGT1JNX05BTUVfVFZPUyA6IFBMQVRGT1JNX05BTUVfSU9TO1xuXG4gICAgLy8gY3JlYXRlIHNpbSBmb3IgY2Fwc1xuICAgIGNvbnN0IHNpbSA9IGF3YWl0IGNyZWF0ZVNpbSh0aGlzLm9wdHMsIHBsYXRmb3JtTmFtZSk7XG4gICAgbG9nLmluZm8oYENyZWF0ZWQgc2ltdWxhdG9yIHdpdGggdWRpZCAnJHtzaW0udWRpZH0nLmApO1xuXG4gICAgcmV0dXJuIHNpbTtcbiAgfVxuXG4gIGFzeW5jIGxhdW5jaEFwcCAoKSB7XG4gICAgY29uc3QgQVBQX0xBVU5DSF9USU1FT1VUID0gMjAgKiAxMDAwO1xuXG4gICAgdGhpcy5sb2dFdmVudCgnYXBwTGF1bmNoQXR0ZW1wdGVkJyk7XG4gICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5zaW1jdGwubGF1bmNoQXBwKHRoaXMub3B0cy5idW5kbGVJZCk7XG5cbiAgICBsZXQgY2hlY2tTdGF0dXMgPSBhc3luYyAoKSA9PiB7XG4gICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgIGxldCBjdXJyZW50QXBwID0gcmVzcG9uc2UuY3VycmVudEFwcC5idW5kbGVJRDtcbiAgICAgIGlmIChjdXJyZW50QXBwICE9PSB0aGlzLm9wdHMuYnVuZGxlSWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMub3B0cy5idW5kbGVJZH0gbm90IGluIGZvcmVncm91bmQuICR7Y3VycmVudEFwcH0gaXMgaW4gZm9yZWdyb3VuZGApO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBsb2cuaW5mbyhgV2FpdGluZyBmb3IgJyR7dGhpcy5vcHRzLmJ1bmRsZUlkfScgdG8gYmUgaW4gZm9yZWdyb3VuZGApO1xuICAgIGxldCByZXRyaWVzID0gcGFyc2VJbnQoQVBQX0xBVU5DSF9USU1FT1VUIC8gMjAwLCAxMCk7XG4gICAgYXdhaXQgcmV0cnlJbnRlcnZhbChyZXRyaWVzLCAyMDAsIGNoZWNrU3RhdHVzKTtcbiAgICBsb2cuaW5mbyhgJHt0aGlzLm9wdHMuYnVuZGxlSWR9IGlzIGluIGZvcmVncm91bmRgKTtcbiAgICB0aGlzLmxvZ0V2ZW50KCdhcHBMYXVuY2hlZCcpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRXZGFTZXNzaW9uIChidW5kbGVJZCwgcHJvY2Vzc0FyZ3VtZW50cykge1xuICAgIGNvbnN0IGFyZ3MgPSBwcm9jZXNzQXJndW1lbnRzID8gKHByb2Nlc3NBcmd1bWVudHMuYXJncyB8fCBbXSkgOiBbXTtcbiAgICBpZiAoIV8uaXNBcnJheShhcmdzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcm9jZXNzQXJndW1lbnRzLmFyZ3MgY2FwYWJpbGl0eSBpcyBleHBlY3RlZCB0byBiZSBhbiBhcnJheS4gYCArXG4gICAgICAgIGAke0pTT04uc3RyaW5naWZ5KGFyZ3MpfSBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gICAgfVxuICAgIGNvbnN0IGVudiA9IHByb2Nlc3NBcmd1bWVudHMgPyAocHJvY2Vzc0FyZ3VtZW50cy5lbnYgfHwge30pIDoge307XG4gICAgaWYgKCFfLmlzUGxhaW5PYmplY3QoZW52KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcm9jZXNzQXJndW1lbnRzLmVudiBjYXBhYmlsaXR5IGlzIGV4cGVjdGVkIHRvIGJlIGEgZGljdGlvbmFyeS4gYCArXG4gICAgICAgIGAke0pTT04uc3RyaW5naWZ5KGVudil9IGlzIGdpdmVuIGluc3RlYWRgKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMubGFuZ3VhZ2UpKSB7XG4gICAgICBhcmdzLnB1c2goJy1BcHBsZUxhbmd1YWdlcycsIGAoJHt0aGlzLm9wdHMubGFuZ3VhZ2V9KWApO1xuICAgICAgYXJncy5wdXNoKCctTlNMYW5ndWFnZXMnLCBgKCR7dGhpcy5vcHRzLmxhbmd1YWdlfSlgKTtcbiAgICB9XG4gICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLmxvY2FsZSkpIHtcbiAgICAgIGFyZ3MucHVzaCgnLUFwcGxlTG9jYWxlJywgdGhpcy5vcHRzLmxvY2FsZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0cy5ub1Jlc2V0KSB7XG4gICAgICBpZiAoXy5pc05pbCh0aGlzLm9wdHMuc2hvdWxkVGVybWluYXRlQXBwKSkge1xuICAgICAgICB0aGlzLm9wdHMuc2hvdWxkVGVybWluYXRlQXBwID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoXy5pc05pbCh0aGlzLm9wdHMuZm9yY2VBcHBMYXVuY2gpKSB7XG4gICAgICAgIHRoaXMub3B0cy5mb3JjZUFwcExhdW5jaCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHdkYUNhcHMgPSB7XG4gICAgICBidW5kbGVJZDogdGhpcy5vcHRzLmF1dG9MYXVuY2ggPT09IGZhbHNlID8gdW5kZWZpbmVkIDogYnVuZGxlSWQsXG4gICAgICBhcmd1bWVudHM6IGFyZ3MsXG4gICAgICBlbnZpcm9ubWVudDogZW52LFxuICAgICAgZXZlbnRsb29wSWRsZURlbGF5U2VjOiB0aGlzLm9wdHMud2RhRXZlbnRsb29wSWRsZURlbGF5ID8/IDAsXG4gICAgICBzaG91bGRXYWl0Rm9yUXVpZXNjZW5jZTogdGhpcy5vcHRzLndhaXRGb3JRdWllc2NlbmNlID8/IHRydWUsXG4gICAgICBzaG91bGRVc2VUZXN0TWFuYWdlckZvclZpc2liaWxpdHlEZXRlY3Rpb246IHRoaXMub3B0cy5zaW1wbGVJc1Zpc2libGVDaGVjayA/PyBmYWxzZSxcbiAgICAgIG1heFR5cGluZ0ZyZXF1ZW5jeTogdGhpcy5vcHRzLm1heFR5cGluZ0ZyZXF1ZW5jeSA/PyA2MCxcbiAgICAgIHNob3VsZFVzZVNpbmdsZXRvblRlc3RNYW5hZ2VyOiB0aGlzLm9wdHMuc2hvdWxkVXNlU2luZ2xldG9uVGVzdE1hbmFnZXIgPz8gdHJ1ZSxcbiAgICAgIHdhaXRGb3JJZGxlVGltZW91dDogdGhpcy5vcHRzLndhaXRGb3JJZGxlVGltZW91dCxcbiAgICAgIHNob3VsZFVzZUNvbXBhY3RSZXNwb25zZXM6IHRoaXMub3B0cy5zaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzLFxuICAgICAgZWxlbWVudFJlc3BvbnNlRmllbGRzOiB0aGlzLm9wdHMuZWxlbWVudFJlc3BvbnNlRmllbGRzLFxuICAgICAgZGlzYWJsZUF1dG9tYXRpY1NjcmVlbnNob3RzOiB0aGlzLm9wdHMuZGlzYWJsZUF1dG9tYXRpY1NjcmVlbnNob3RzLFxuICAgICAgc2hvdWxkVGVybWluYXRlQXBwOiB0aGlzLm9wdHMuc2hvdWxkVGVybWluYXRlQXBwID8/IHRydWUsXG4gICAgICBmb3JjZUFwcExhdW5jaDogdGhpcy5vcHRzLmZvcmNlQXBwTGF1bmNoID8/IHRydWUsXG4gICAgICB1c2VOYXRpdmVDYWNoaW5nU3RyYXRlZ3k6IHRoaXMub3B0cy51c2VOYXRpdmVDYWNoaW5nU3RyYXRlZ3kgPz8gdHJ1ZSxcbiAgICAgIGZvcmNlU2ltdWxhdG9yU29mdHdhcmVLZXlib2FyZFByZXNlbmNlOiB0aGlzLm9wdHMuZm9yY2VTaW11bGF0b3JTb2Z0d2FyZUtleWJvYXJkUHJlc2VuY2VcbiAgICAgICAgPz8gKHRoaXMub3B0cy5jb25uZWN0SGFyZHdhcmVLZXlib2FyZCA9PT0gdHJ1ZSA/IGZhbHNlIDogdHJ1ZSksXG4gICAgfTtcbiAgICBpZiAodGhpcy5vcHRzLmF1dG9BY2NlcHRBbGVydHMpIHtcbiAgICAgIHdkYUNhcHMuZGVmYXVsdEFsZXJ0QWN0aW9uID0gJ2FjY2VwdCc7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuYXV0b0Rpc21pc3NBbGVydHMpIHtcbiAgICAgIHdkYUNhcHMuZGVmYXVsdEFsZXJ0QWN0aW9uID0gJ2Rpc21pc3MnO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvc2Vzc2lvbicsICdQT1NUJywge1xuICAgICAgY2FwYWJpbGl0aWVzOiB7XG4gICAgICAgIGZpcnN0TWF0Y2g6IFt3ZGFDYXBzXSxcbiAgICAgICAgYWx3YXlzTWF0Y2g6IHt9LFxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gT3ZlcnJpZGUgUHJveHkgbWV0aG9kcyBmcm9tIEJhc2VEcml2ZXJcbiAgcHJveHlBY3RpdmUgKCkge1xuICAgIHJldHVybiB0aGlzLmp3cFByb3h5QWN0aXZlO1xuICB9XG5cbiAgZ2V0UHJveHlBdm9pZExpc3QgKCkge1xuICAgIGlmICh0aGlzLmlzV2VidmlldygpKSB7XG4gICAgICByZXR1cm4gTk9fUFJPWFlfV0VCX0xJU1Q7XG4gICAgfVxuICAgIHJldHVybiBOT19QUk9YWV9OQVRJVkVfTElTVDtcbiAgfVxuXG4gIGNhblByb3h5ICgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlzU2FmYXJpICgpIHtcbiAgICByZXR1cm4gISF0aGlzLnNhZmFyaTtcbiAgfVxuXG4gIGlzUmVhbERldmljZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0cy5yZWFsRGV2aWNlO1xuICB9XG5cbiAgaXNTaW11bGF0b3IgKCkge1xuICAgIHJldHVybiAhdGhpcy5vcHRzLnJlYWxEZXZpY2U7XG4gIH1cblxuICBpc1R2T1MgKCkge1xuICAgIHJldHVybiBfLnRvTG93ZXIodGhpcy5vcHRzLnBsYXRmb3JtTmFtZSkgPT09IF8udG9Mb3dlcihQTEFURk9STV9OQU1FX1RWT1MpO1xuICB9XG5cbiAgaXNXZWJ2aWV3ICgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1NhZmFyaSgpIHx8IHRoaXMuaXNXZWJDb250ZXh0KCk7XG4gIH1cblxuICB2YWxpZGF0ZUxvY2F0b3JTdHJhdGVneSAoc3RyYXRlZ3kpIHtcbiAgICBzdXBlci52YWxpZGF0ZUxvY2F0b3JTdHJhdGVneShzdHJhdGVneSwgdGhpcy5pc1dlYkNvbnRleHQoKSk7XG4gIH1cblxuICB2YWxpZGF0ZURlc2lyZWRDYXBzIChjYXBzKSB7XG4gICAgaWYgKCFzdXBlci52YWxpZGF0ZURlc2lyZWRDYXBzKGNhcHMpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBzdXJlIHRoYXQgdGhlIGNhcGFiaWxpdGllcyBoYXZlIG9uZSBvZiBgYXBwYCBvciBgYnVuZGxlSWRgXG4gICAgaWYgKF8udG9Mb3dlcihjYXBzLmJyb3dzZXJOYW1lKSAhPT0gJ3NhZmFyaScgJiYgIWNhcHMuYXBwICYmICFjYXBzLmJ1bmRsZUlkKSB7XG4gICAgICBsb2cuaW5mbygnVGhlIGRlc2lyZWQgY2FwYWJpbGl0aWVzIGluY2x1ZGUgbmVpdGhlciBhbiBhcHAgbm9yIGEgYnVuZGxlSWQuICcgK1xuICAgICAgICAnV2ViRHJpdmVyQWdlbnQgd2lsbCBiZSBzdGFydGVkIHdpdGhvdXQgdGhlIGRlZmF1bHQgYXBwJyk7XG4gICAgfVxuXG4gICAgaWYgKCF1dGlsLmNvZXJjZVZlcnNpb24oY2Fwcy5wbGF0Zm9ybVZlcnNpb24sIGZhbHNlKSkge1xuICAgICAgbG9nLndhcm4oYCdwbGF0Zm9ybVZlcnNpb24nIGNhcGFiaWxpdHkgKCcke2NhcHMucGxhdGZvcm1WZXJzaW9ufScpIGlzIG5vdCBhIHZhbGlkIHZlcnNpb24gbnVtYmVyLiBgICtcbiAgICAgICAgYENvbnNpZGVyIGZpeGluZyBpdCBvciBiZSByZWFkeSB0byBleHBlcmllbmNlIGFuIGluY29uc2lzdGVudCBkcml2ZXIgYmVoYXZpb3IuYCk7XG4gICAgfVxuXG4gICAgbGV0IHZlcmlmeVByb2Nlc3NBcmd1bWVudCA9IChwcm9jZXNzQXJndW1lbnRzKSA9PiB7XG4gICAgICBjb25zdCB7YXJncywgZW52fSA9IHByb2Nlc3NBcmd1bWVudHM7XG4gICAgICBpZiAoIV8uaXNOaWwoYXJncykgJiYgIV8uaXNBcnJheShhcmdzKSkge1xuICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdygncHJvY2Vzc0FyZ3VtZW50cy5hcmdzIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncycpO1xuICAgICAgfVxuICAgICAgaWYgKCFfLmlzTmlsKGVudikgJiYgIV8uaXNQbGFpbk9iamVjdChlbnYpKSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KCdwcm9jZXNzQXJndW1lbnRzLmVudiBtdXN0IGJlIGFuIG9iamVjdCA8a2V5LHZhbHVlPiBwYWlyIHthOmIsIGM6ZH0nKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gYHByb2Nlc3NBcmd1bWVudHNgIHNob3VsZCBiZSBKU09OIHN0cmluZyBvciBhbiBvYmplY3Qgd2l0aCBhcmd1bWVudHMgYW5kLyBlbnZpcm9ubWVudCBkZXRhaWxzXG4gICAgaWYgKGNhcHMucHJvY2Vzc0FyZ3VtZW50cykge1xuICAgICAgaWYgKF8uaXNTdHJpbmcoY2Fwcy5wcm9jZXNzQXJndW1lbnRzKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIHRyeSB0byBwYXJzZSB0aGUgc3RyaW5nIGFzIEpTT05cbiAgICAgICAgICBjYXBzLnByb2Nlc3NBcmd1bWVudHMgPSBKU09OLnBhcnNlKGNhcHMucHJvY2Vzc0FyZ3VtZW50cyk7XG4gICAgICAgICAgdmVyaWZ5UHJvY2Vzc0FyZ3VtZW50KGNhcHMucHJvY2Vzc0FyZ3VtZW50cyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxvZy5lcnJvckFuZFRocm93KGBwcm9jZXNzQXJndW1lbnRzIG11c3QgYmUgYSBKU09OIGZvcm1hdCBvciBhbiBvYmplY3Qgd2l0aCBmb3JtYXQge2FyZ3MgOiBbXSwgZW52IDoge2E6YiwgYzpkfX0uIGAgK1xuICAgICAgICAgICAgYEJvdGggZW52aXJvbm1lbnQgYW5kIGFyZ3VtZW50IGNhbiBiZSBudWxsLiBFcnJvcjogJHtlcnJ9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXy5pc1BsYWluT2JqZWN0KGNhcHMucHJvY2Vzc0FyZ3VtZW50cykpIHtcbiAgICAgICAgdmVyaWZ5UHJvY2Vzc0FyZ3VtZW50KGNhcHMucHJvY2Vzc0FyZ3VtZW50cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgJ3Byb2Nlc3NBcmd1bWVudHMgbXVzdCBiZSBhbiBvYmplY3QsIG9yIGEgc3RyaW5nIEpTT04gb2JqZWN0IHdpdGggZm9ybWF0IHthcmdzIDogW10sIGVudiA6IHthOmIsIGM6ZH19LiBgICtcbiAgICAgICAgICBgQm90aCBlbnZpcm9ubWVudCBhbmQgYXJndW1lbnQgY2FuIGJlIG51bGwuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gdGhlcmUgaXMgbm8gcG9pbnQgaW4gaGF2aW5nIGBrZXljaGFpblBhdGhgIHdpdGhvdXQgYGtleWNoYWluUGFzc3dvcmRgXG4gICAgaWYgKChjYXBzLmtleWNoYWluUGF0aCAmJiAhY2Fwcy5rZXljaGFpblBhc3N3b3JkKSB8fCAoIWNhcHMua2V5Y2hhaW5QYXRoICYmIGNhcHMua2V5Y2hhaW5QYXNzd29yZCkpIHtcbiAgICAgIGxvZy5lcnJvckFuZFRocm93KGBJZiAna2V5Y2hhaW5QYXRoJyBpcyBzZXQsICdrZXljaGFpblBhc3N3b3JkJyBtdXN0IGFsc28gYmUgc2V0IChhbmQgdmljZSB2ZXJzYSkuYCk7XG4gICAgfVxuXG4gICAgLy8gYHJlc2V0T25TZXNzaW9uU3RhcnRPbmx5YCBzaG91bGQgYmUgc2V0IHRvIHRydWUgYnkgZGVmYXVsdFxuICAgIHRoaXMub3B0cy5yZXNldE9uU2Vzc2lvblN0YXJ0T25seSA9ICF1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy5yZXNldE9uU2Vzc2lvblN0YXJ0T25seSkgfHwgdGhpcy5vcHRzLnJlc2V0T25TZXNzaW9uU3RhcnRPbmx5O1xuICAgIHRoaXMub3B0cy51c2VOZXdXREEgPSB1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy51c2VOZXdXREEpID8gdGhpcy5vcHRzLnVzZU5ld1dEQSA6IGZhbHNlO1xuXG4gICAgaWYgKGNhcHMuY29tbWFuZFRpbWVvdXRzKSB7XG4gICAgICBjYXBzLmNvbW1hbmRUaW1lb3V0cyA9IG5vcm1hbGl6ZUNvbW1hbmRUaW1lb3V0cyhjYXBzLmNvbW1hbmRUaW1lb3V0cyk7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNTdHJpbmcoY2Fwcy53ZWJEcml2ZXJBZ2VudFVybCkpIHtcbiAgICAgIGNvbnN0IHtwcm90b2NvbCwgaG9zdH0gPSB1cmwucGFyc2UoY2Fwcy53ZWJEcml2ZXJBZ2VudFVybCk7XG4gICAgICBpZiAoXy5pc0VtcHR5KHByb3RvY29sKSB8fCBfLmlzRW1wdHkoaG9zdCkpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYCd3ZWJEcml2ZXJBZ2VudFVybCcgY2FwYWJpbGl0eSBpcyBleHBlY3RlZCB0byBjb250YWluIGEgdmFsaWQgV2ViRHJpdmVyQWdlbnQgc2VydmVyIFVSTC4gYCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGAnJHtjYXBzLndlYkRyaXZlckFnZW50VXJsfScgaXMgZ2l2ZW4gaW5zdGVhZGApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjYXBzLmJyb3dzZXJOYW1lKSB7XG4gICAgICBpZiAoY2Fwcy5idW5kbGVJZCkge1xuICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgJ2Jyb3dzZXJOYW1lJyBjYW5ub3QgYmUgc2V0IHRvZ2V0aGVyIHdpdGggJ2J1bmRsZUlkJyBjYXBhYmlsaXR5YCk7XG4gICAgICB9XG4gICAgICAvLyB3YXJuIGlmIHRoZSBjYXBhYmlsaXRpZXMgaGF2ZSBib3RoIGBhcHBgIGFuZCBgYnJvd3NlciwgYWx0aG91Z2ggdGhpc1xuICAgICAgLy8gaXMgY29tbW9uIHdpdGggc2VsZW5pdW0gZ3JpZFxuICAgICAgaWYgKGNhcHMuYXBwKSB7XG4gICAgICAgIGxvZy53YXJuKGBUaGUgY2FwYWJpbGl0aWVzIHNob3VsZCBnZW5lcmFsbHkgbm90IGluY2x1ZGUgYm90aCBhbiAnYXBwJyBhbmQgYSAnYnJvd3Nlck5hbWUnYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNhcHMucGVybWlzc2lvbnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAoY29uc3QgW2J1bmRsZUlkLCBwZXJtc10gb2YgXy50b1BhaXJzKEpTT04ucGFyc2UoY2Fwcy5wZXJtaXNzaW9ucykpKSB7XG4gICAgICAgICAgaWYgKCFfLmlzU3RyaW5nKGJ1bmRsZUlkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtKU09OLnN0cmluZ2lmeShidW5kbGVJZCl9JyBtdXN0IGJlIGEgc3RyaW5nYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghXy5pc1BsYWluT2JqZWN0KHBlcm1zKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtKU09OLnN0cmluZ2lmeShwZXJtcyl9JyBtdXN0IGJlIGEgSlNPTiBvYmplY3RgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYCcke2NhcHMucGVybWlzc2lvbnN9JyBpcyBleHBlY3RlZCB0byBiZSBhIHZhbGlkIG9iamVjdCB3aXRoIGZvcm1hdCBgICtcbiAgICAgICAgICBge1wiPGJ1bmRsZUlkMT5cIjoge1wiPHNlcnZpY2VOYW1lMT5cIjogXCI8c2VydmljZVN0YXR1czE+XCIsIC4uLn0sIC4uLn0uIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2Fwcy5wbGF0Zm9ybVZlcnNpb24gJiYgIXV0aWwuY29lcmNlVmVyc2lvbihjYXBzLnBsYXRmb3JtVmVyc2lvbiwgZmFsc2UpKSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgJ3BsYXRmb3JtVmVyc2lvbicgbXVzdCBiZSBhIHZhbGlkIHZlcnNpb24gbnVtYmVyLiBgICtcbiAgICAgICAgYCcke2NhcHMucGxhdGZvcm1WZXJzaW9ufScgaXMgZ2l2ZW4gaW5zdGVhZC5gKTtcbiAgICB9XG5cbiAgICAvLyBhZGRpdGlvbmFsV2Vidmlld0J1bmRsZUlkcyBpcyBhbiBhcnJheSwgSlNPTiBhcnJheSwgb3Igc3RyaW5nXG4gICAgaWYgKGNhcHMuYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMpIHtcbiAgICAgIGNhcHMuYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMgPSB0aGlzLmhlbHBlcnMucGFyc2VDYXBzQXJyYXkoY2Fwcy5hZGRpdGlvbmFsV2Vidmlld0J1bmRsZUlkcyk7XG4gICAgfVxuXG4gICAgLy8gZmluYWxseSwgcmV0dXJuIHRydWUgc2luY2UgdGhlIHN1cGVyY2xhc3MgY2hlY2sgcGFzc2VkLCBhcyBkaWQgdGhpc1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgaW5zdGFsbEFVVCAoKSB7XG4gICAgaWYgKHRoaXMuaXNTYWZhcmkoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IHZlcmlmeUFwcGxpY2F0aW9uUGxhdGZvcm0odGhpcy5vcHRzLmFwcCwge1xuICAgICAgaXNTaW11bGF0b3I6IHRoaXMuaXNTaW11bGF0b3IoKSxcbiAgICAgIGlzVHZPUzogdGhpcy5pc1R2T1MoKSxcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgICBhd2FpdCBpbnN0YWxsVG9SZWFsRGV2aWNlKHRoaXMub3B0cy5kZXZpY2UsIHRoaXMub3B0cy5hcHAsIHRoaXMub3B0cy5idW5kbGVJZCwge1xuICAgICAgICBub1Jlc2V0OiB0aGlzLm9wdHMubm9SZXNldCxcbiAgICAgICAgdGltZW91dDogdGhpcy5vcHRzLmFwcFB1c2hUaW1lb3V0LFxuICAgICAgICBzdHJhdGVneTogdGhpcy5vcHRzLmFwcEluc3RhbGxTdHJhdGVneSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBpbnN0YWxsVG9TaW11bGF0b3IodGhpcy5vcHRzLmRldmljZSwgdGhpcy5vcHRzLmFwcCwgdGhpcy5vcHRzLmJ1bmRsZUlkLCB7XG4gICAgICAgIG5vUmVzZXQ6IHRoaXMub3B0cy5ub1Jlc2V0LFxuICAgICAgICBuZXdTaW11bGF0b3I6IHRoaXMubGlmZWN5Y2xlRGF0YS5jcmVhdGVTaW0sXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0cy5vdGhlckFwcHMpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5zdGFsbE90aGVyQXBwcyh0aGlzLm9wdHMub3RoZXJBcHBzKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMuaW9zSW5zdGFsbFBhdXNlKSkge1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzY4ODlcbiAgICAgIGxldCBwYXVzZSA9IHBhcnNlSW50KHRoaXMub3B0cy5pb3NJbnN0YWxsUGF1c2UsIDEwKTtcbiAgICAgIGxvZy5kZWJ1ZyhgaW9zSW5zdGFsbFBhdXNlIHNldC4gUGF1c2luZyAke3BhdXNlfSBtcyBiZWZvcmUgY29udGludWluZ2ApO1xuICAgICAgYXdhaXQgQi5kZWxheShwYXVzZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW5zdGFsbE90aGVyQXBwcyAob3RoZXJBcHBzKSB7XG4gICAgaWYgKHRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICAgIGxvZy53YXJuKCdDYXBhYmlsaXR5IG90aGVyQXBwcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgU2ltdWxhdG9ycycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgYXBwc0xpc3Q7XG4gICAgdHJ5IHtcbiAgICAgIGFwcHNMaXN0ID0gdGhpcy5oZWxwZXJzLnBhcnNlQ2Fwc0FycmF5KG90aGVyQXBwcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBwYXJzZSBcIm90aGVyQXBwc1wiIGNhcGFiaWxpdHk6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgICBpZiAoXy5pc0VtcHR5KGFwcHNMaXN0KSkge1xuICAgICAgbG9nLmluZm8oYEdvdCB6ZXJvIGFwcHMgZnJvbSAnb3RoZXJBcHBzJyBjYXBhYmlsaXR5IHZhbHVlLiBEb2luZyBub3RoaW5nYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYXBwUGF0aHMgPSBhd2FpdCBCLmFsbChhcHBzTGlzdC5tYXAoXG4gICAgICAoYXBwKSA9PiB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKGFwcCwgJy5hcHAnKVxuICAgICkpO1xuICAgIGZvciAoY29uc3Qgb3RoZXJBcHAgb2YgYXBwUGF0aHMpIHtcbiAgICAgIGF3YWl0IGluc3RhbGxUb1NpbXVsYXRvcih0aGlzLm9wdHMuZGV2aWNlLCBvdGhlckFwcCwgdW5kZWZpbmVkLCB7XG4gICAgICAgIG5vUmVzZXQ6IHRoaXMub3B0cy5ub1Jlc2V0LFxuICAgICAgICBuZXdTaW11bGF0b3I6IHRoaXMubGlmZWN5Y2xlRGF0YS5jcmVhdGVTaW0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHJlZHVjZU1vdGlvbiBhcyAnaXNFbmFibGVkJyBvbmx5IHdoZW4gdGhlIGNhcGFiaWxpdGllcyBoYXMgJ3JlZHVjZU1vdGlvbidcbiAgICogVGhlIGNhbGwgaXMgaWdub3JlZCBmb3IgcmVhbCBkZXZpY2VzLlxuICAgKiBAcGFyYW0gez9ib29sZWFufSBpc0VuYWJsZWQgV2V0aGVyIGVuYWJsZSByZWR1Y2VNb3Rpb25cbiAgICovXG4gIGFzeW5jIHNldFJlZHVjZU1vdGlvbiAoaXNFbmFibGVkKSB7XG4gICAgaWYgKHRoaXMuaXNSZWFsRGV2aWNlKCkgfHwgIV8uaXNCb29sZWFuKGlzRW5hYmxlZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsb2cuaW5mbyhgU2V0dGluZyByZWR1Y2VNb3Rpb24gdG8gJHtpc0VuYWJsZWR9YCk7XG4gICAgYXdhaXQgdGhpcy51cGRhdGVTZXR0aW5ncyh7cmVkdWNlTW90aW9uOiBpc0VuYWJsZWR9KTtcbiAgfVxuXG4gIGFzeW5jIHNldEluaXRpYWxPcmllbnRhdGlvbiAob3JpZW50YXRpb24pIHtcbiAgICBpZiAoIV8uaXNTdHJpbmcob3JpZW50YXRpb24pKSB7XG4gICAgICBsb2cuaW5mbygnU2tpcHBpbmcgc2V0dGluZyBvZiB0aGUgaW5pdGlhbCBkaXNwbGF5IG9yaWVudGF0aW9uLiAnICtcbiAgICAgICAgJ1NldCB0aGUgXCJvcmllbnRhdGlvblwiIGNhcGFiaWxpdHkgdG8gZWl0aGVyIFwiTEFORFNDQVBFXCIgb3IgXCJQT1JUUkFJVFwiLCBpZiB0aGlzIGlzIGFuIHVuZGVzaXJlZCBiZWhhdmlvci4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgb3JpZW50YXRpb24gPSBvcmllbnRhdGlvbi50b1VwcGVyQ2FzZSgpO1xuICAgIGlmICghXy5pbmNsdWRlcyhbJ0xBTkRTQ0FQRScsICdQT1JUUkFJVCddLCBvcmllbnRhdGlvbikpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgVW5hYmxlIHRvIHNldCBpbml0aWFsIG9yaWVudGF0aW9uIHRvICcke29yaWVudGF0aW9ufSdgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbG9nLmRlYnVnKGBTZXR0aW5nIGluaXRpYWwgb3JpZW50YXRpb24gdG8gJyR7b3JpZW50YXRpb259J2ApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL29yaWVudGF0aW9uJywgJ1BPU1QnLCB7b3JpZW50YXRpb259KTtcbiAgICAgIHRoaXMub3B0cy5jdXJPcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLndhcm4oYFNldHRpbmcgaW5pdGlhbCBvcmllbnRhdGlvbiBmYWlsZWQgd2l0aDogJHtlcnIubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBfZ2V0Q29tbWFuZFRpbWVvdXQgKGNtZE5hbWUpIHtcbiAgICBpZiAodGhpcy5vcHRzLmNvbW1hbmRUaW1lb3V0cykge1xuICAgICAgaWYgKGNtZE5hbWUgJiYgXy5oYXModGhpcy5vcHRzLmNvbW1hbmRUaW1lb3V0cywgY21kTmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0cy5jb21tYW5kVGltZW91dHNbY21kTmFtZV07XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5vcHRzLmNvbW1hbmRUaW1lb3V0c1tERUZBVUxUX1RJTUVPVVRfS0VZXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNlc3Npb24gY2FwYWJpbGl0aWVzIG1lcmdlZCB3aXRoIHdoYXQgV0RBIHJlcG9ydHNcbiAgICogVGhpcyBpcyBhIGxpYnJhcnkgY29tbWFuZCBidXQgbmVlZHMgdG8gY2FsbCAnc3VwZXInIHNvIGNhbid0IGJlIG9uXG4gICAqIGEgaGVscGVyIG9iamVjdFxuICAgKi9cbiAgYXN5bmMgZ2V0U2Vzc2lvbiAoKSB7XG4gICAgLy8gY2FsbCBzdXBlciB0byBnZXQgZXZlbnQgdGltaW5ncywgZXRjLi4uXG4gICAgY29uc3QgZHJpdmVyU2Vzc2lvbiA9IGF3YWl0IHN1cGVyLmdldFNlc3Npb24oKTtcbiAgICBpZiAoIXRoaXMud2RhQ2Fwcykge1xuICAgICAgdGhpcy53ZGFDYXBzID0gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy8nLCAnR0VUJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2hvdWxkR2V0RGV2aWNlQ2FwcyA9IF8uaXNCb29sZWFuKHRoaXMub3B0cy5pbmNsdWRlRGV2aWNlQ2Fwc1RvU2Vzc2lvbkluZm8pXG4gICAgICA/IHRoaXMub3B0cy5pbmNsdWRlRGV2aWNlQ2Fwc1RvU2Vzc2lvbkluZm9cbiAgICAgIDogdHJ1ZTsgLy8gQmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgIGlmIChzaG91bGRHZXREZXZpY2VDYXBzICYmICF0aGlzLmRldmljZUNhcHMpIHtcbiAgICAgIGNvbnN0IHtzdGF0dXNCYXJTaXplLCBzY2FsZX0gPSBhd2FpdCB0aGlzLmdldFNjcmVlbkluZm8oKTtcbiAgICAgIHRoaXMuZGV2aWNlQ2FwcyA9IHtcbiAgICAgICAgcGl4ZWxSYXRpbzogc2NhbGUsXG4gICAgICAgIHN0YXRCYXJIZWlnaHQ6IHN0YXR1c0JhclNpemUuaGVpZ2h0LFxuICAgICAgICB2aWV3cG9ydFJlY3Q6IGF3YWl0IHRoaXMuZ2V0Vmlld3BvcnRSZWN0KCksXG4gICAgICB9O1xuICAgIH1cbiAgICBsb2cuaW5mbygnTWVyZ2luZyBXREEgY2FwcyBvdmVyIEFwcGl1bSBjYXBzIGZvciBzZXNzaW9uIGRldGFpbCByZXNwb25zZScpO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt1ZGlkOiB0aGlzLm9wdHMudWRpZH0sIGRyaXZlclNlc3Npb24sXG4gICAgICB0aGlzLndkYUNhcHMuY2FwYWJpbGl0aWVzLCB0aGlzLmRldmljZUNhcHMgfHwge30pO1xuICB9XG5cbiAgYXN5bmMgcmVzZXQgKCkge1xuICAgIGlmICh0aGlzLm9wdHMubm9SZXNldCkge1xuICAgICAgLy8gVGhpcyBpcyB0byBtYWtlIHN1cmUgcmVzZXQgaGFwcGVucyBldmVuIGlmIG5vUmVzZXQgaXMgc2V0IHRvIHRydWVcbiAgICAgIGxldCBvcHRzID0gXy5jbG9uZURlZXAodGhpcy5vcHRzKTtcbiAgICAgIG9wdHMubm9SZXNldCA9IGZhbHNlO1xuICAgICAgb3B0cy5mdWxsUmVzZXQgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHNodXRkb3duSGFuZGxlciA9IHRoaXMucmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93bjtcbiAgICAgIHRoaXMucmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93biA9ICgpID0+IHt9O1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5SZXNldChvcHRzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMucmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93biA9IHNodXRkb3duSGFuZGxlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgc3VwZXIucmVzZXQoKTtcbiAgfVxufVxuXG5PYmplY3QuYXNzaWduKFhDVUlUZXN0RHJpdmVyLnByb3RvdHlwZSwgY29tbWFuZHMpO1xuXG5leHBvcnQgZGVmYXVsdCBYQ1VJVGVzdERyaXZlcjtcbmV4cG9ydCB7IFhDVUlUZXN0RHJpdmVyIH07XG4iXSwiZmlsZSI6ImxpYi9kcml2ZXIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
1328
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXIuanMiXSwibmFtZXMiOlsiU0hVVERPV05fT1RIRVJfRkVBVF9OQU1FIiwiQ1VTVE9NSVpFX1JFU1VMVF9CVU5EUEVfUEFUSCIsImRlZmF1bHRTZXJ2ZXJDYXBzIiwid2ViU3RvcmFnZUVuYWJsZWQiLCJsb2NhdGlvbkNvbnRleHRFbmFibGVkIiwiYnJvd3Nlck5hbWUiLCJwbGF0Zm9ybSIsImphdmFzY3JpcHRFbmFibGVkIiwiZGF0YWJhc2VFbmFibGVkIiwidGFrZXNTY3JlZW5zaG90IiwibmV0d29ya0Nvbm5lY3Rpb25FbmFibGVkIiwiU0FGQVJJX0JVTkRMRV9JRCIsIldEQV9TSU1fU1RBUlRVUF9SRVRSSUVTIiwiV0RBX1JFQUxfREVWX1NUQVJUVVBfUkVUUklFUyIsIldEQV9SRUFMX0RFVl9UVVRPUklBTF9VUkwiLCJXREFfU1RBUlRVUF9SRVRSWV9JTlRFUlZBTCIsIkRFRkFVTFRfU0VUVElOR1MiLCJuYXRpdmVXZWJUYXAiLCJuYXRpdmVXZWJUYXBTdHJpY3QiLCJ1c2VKU09OU291cmNlIiwic2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcyIsImVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXMiLCJtanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5IiwibWpwZWdTZXJ2ZXJGcmFtZXJhdGUiLCJzY3JlZW5zaG90UXVhbGl0eSIsIm1qcGVnU2NhbGluZ0ZhY3RvciIsInJlZHVjZU1vdGlvbiIsIlNIQVJFRF9SRVNPVVJDRVNfR1VBUkQiLCJBc3luY0xvY2siLCJXRUJfRUxFTUVOVFNfQ0FDSEVfU0laRSIsIk5PX1BST1hZX05BVElWRV9MSVNUIiwiTk9fUFJPWFlfV0VCX0xJU1QiLCJjb25jYXQiLCJNRU1PSVpFRF9GVU5DVElPTlMiLCJYQ1VJVGVzdERyaXZlciIsIkJhc2VEcml2ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJzaG91bGRWYWxpZGF0ZUNhcHMiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJsb2NhdG9yU3RyYXRlZ2llcyIsIndlYkxvY2F0b3JTdHJhdGVnaWVzIiwicmVzZXRJb3MiLCJzZXR0aW5ncyIsIkRldmljZVNldHRpbmdzIiwib25TZXR0aW5nc1VwZGF0ZSIsImJpbmQiLCJsb2dzIiwiZm4iLCJfIiwibWVtb2l6ZSIsImtleSIsInZhbHVlIiwicHJveHlDb21tYW5kIiwid2RhIiwiZGV2aWNlIiwiandwUHJveHlBY3RpdmUiLCJwcm94eVJlcVJlcyIsImp3cFByb3h5QXZvaWQiLCJzYWZhcmkiLCJjYWNoZWRXZGFTdGF0dXMiLCJjdXJXZWJGcmFtZXMiLCJfY3VycmVudFVybCIsImN1ckNvbnRleHQiLCJ4Y29kZVZlcnNpb24iLCJjb250ZXh0cyIsImltcGxpY2l0V2FpdE1zIiwiYXN5bmNsaWJXYWl0TXMiLCJwYWdlTG9hZE1zIiwibGFuZHNjYXBlV2ViQ29vcmRzT2Zmc2V0IiwicmVtb3RlIiwid2ViRWxlbWVudHNDYWNoZSIsIkxSVSIsIm1heCIsImRyaXZlckRhdGEiLCJnZXRTdGF0dXMiLCJkcml2ZXJJbmZvIiwic3RhdHVzIiwiYnVpbGQiLCJ2ZXJzaW9uIiwibWVyZ2VDbGlBcmdzVG9PcHRzIiwiZGlkTWVyZ2UiLCJPYmplY3QiLCJlbnRyaWVzIiwiY2xpQXJncyIsImhhcyIsImxvZyIsImluZm8iLCJjcmVhdGVTZXNzaW9uIiwiYXJncyIsImxpZmVjeWNsZURhdGEiLCJzZXNzaW9uSWQiLCJjYXBzIiwidmFsaWRhdGVEZXNpcmVkQ2FwcyIsInN0YXJ0IiwiYXNzaWduIiwidWRpZCIsInVwZGF0ZVNldHRpbmdzIiwid2RhU2V0dGluZ3MiLCJtanBlZ1NjcmVlbnNob3RVcmwiLCJtanBlZ1N0cmVhbSIsIm1qcGVnIiwiTUpwZWdTdHJlYW0iLCJlIiwiZXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwiZGVsZXRlU2Vzc2lvbiIsIm5vUmVzZXQiLCJmdWxsUmVzZXQiLCJpb3NTZGtWZXJzaW9uIiwicmVhbERldmljZSIsImRldGVybWluZURldmljZSIsInNpbXVsYXRvckRldmljZXNTZXRQYXRoIiwiZGV2aWNlc1NldFBhdGgiLCJwbGF0Zm9ybVZlcnNpb24iLCJnZXRQbGF0Zm9ybVZlcnNpb24iLCJub3JtYWxpemVkVmVyc2lvbiIsInV0aWwiLCJjb21wYXJlVmVyc2lvbnMiLCJFcnJvciIsImlzRW1wdHkiLCJ3ZWJEcml2ZXJBZ2VudFVybCIsImxvZ0V2ZW50IiwidG9Mb3dlciIsImFwcCIsInVuZGVmaW5lZCIsInByb2Nlc3NBcmd1bWVudHMiLCJidW5kbGVJZCIsInNhZmFyaUluaXRpYWxVcmwiLCJpc1JlYWxEZXZpY2UiLCJhZGRyZXNzIiwicG9ydCIsImNvbmZpZ3VyZUFwcCIsInJ1blJlc2V0IiwiV2ViRHJpdmVyQWdlbnQiLCJyZXRyaWV2ZURlcml2ZWREYXRhUGF0aCIsImNhdGNoIiwiZGVidWciLCJtZW1vaXplZExvZ0luZm8iLCJsb2dJbmZvIiwic3RhcnRMb2dDYXB0dXJlIiwic2tpcExvZ0NhcHR1cmUiLCJyZXN1bHQiLCJpc0xvZ0NhcHR1cmVTdGFydGVkIiwiaXNTaW11bGF0b3IiLCJzaHV0ZG93bk90aGVyU2ltdWxhdG9ycyIsImVuc3VyZUZlYXR1cmVFbmFibGVkIiwiaXNTYWZhcmkiLCJzYWZhcmlHbG9iYWxQcmVmZXJlbmNlcyIsInVwZGF0ZVNhZmFyaUdsb2JhbFNldHRpbmdzIiwibG9jYWxDb25maWciLCJzaW0iLCJjdXN0b21TU0xDZXJ0IiwiY2VydEhlYWQiLCJ0cnVuY2F0ZSIsImxlbmd0aCIsInN0YXJ0U2ltIiwibGF1bmNoV2l0aElEQiIsImlkYiIsIklEQiIsImNvbm5lY3QiLCJtZXNzYWdlIiwiaW5zdGFsbEFVVCIsImlzQXBwSW5zdGFsbGVkIiwiZXJyb3JBbmRUaHJvdyIsInBlcm1pc3Npb25zIiwicGVybWlzc2lvbnNNYXBwaW5nIiwidG9QYWlycyIsInBhcnNlIiwic2V0UGVybWlzc2lvbnMiLCJ3YXJuIiwiY2FsZW5kYXJBY2Nlc3NBdXRob3JpemVkIiwiZW5hYmxlQ2FsZW5kYXJBY2Nlc3MiLCJkaXNhYmxlQ2FsZW5kYXJBY2Nlc3MiLCJzdGFydFdkYSIsInNldFJlZHVjZU1vdGlvbiIsInNldEluaXRpYWxPcmllbnRhdGlvbiIsIm9yaWVudGF0aW9uIiwib3BlblVybCIsImF1dG9XZWJ2aWV3IiwibmF2VG9Jbml0aWFsV2VidmlldyIsInNldFVybCIsImhhc1ZhbHVlIiwiY2xlYW51cE9ic29sZXRlUHJvY2Vzc2VzIiwidXNlUG9ydEZvcndhcmRpbmciLCJ3ZGFCYXNlVXJsIiwiREVWSUNFX0NPTk5FQ1RJT05TX0ZBQ1RPUlkiLCJyZXF1ZXN0Q29ubmVjdGlvbiIsInVybCIsImRldmljZVBvcnQiLCJ3ZGFSZW1vdGVQb3J0Iiwic3luY2hyb25pemF0aW9uS2V5IiwibmFtZSIsInVzZVhjdGVzdHJ1bkZpbGUiLCJpc1NvdXJjZUZyZXNoIiwiZGVyaXZlZERhdGFQYXRoIiwicGF0aCIsIm5vcm1hbGl6ZSIsImlzQnVzeSIsImJvb3RzdHJhcFBhdGgiLCJhY3F1aXJlIiwidXNlTmV3V0RBIiwicXVpdEFuZFVuaW5zdGFsbCIsInNldHVwQ2FjaGluZyIsIm1zZyIsInJlc3VsdEJ1bmRsZVBhdGgiLCJzdGFydHVwUmV0cmllcyIsIndkYVN0YXJ0dXBSZXRyaWVzIiwic3RhcnR1cFJldHJ5SW50ZXJ2YWwiLCJ3ZGFTdGFydHVwUmV0cnlJbnRlcnZhbCIsInJldHJ5Q291bnQiLCJyZXRyaWVzIiwibWFqb3IiLCJsYXVuY2giLCJlcnIiLCJlcnJvck1zZyIsIm9yaWdpbmFsU3RhY2t0cmFjZSIsInN0YXJ0V2RhU2Vzc2lvbiIsInN0YWNrIiwiY2xlYXJTeXN0ZW1GaWxlcyIsImZ1bGx5U3RhcnRlZCIsInNlcnZlciIsInJlY29yZGVyIiwiY29tcGFjdCIsIl9yZWNlbnRTY3JlZW5SZWNvcmRlciIsIl9hdWRpb1JlY29yZGVyIiwiaW50ZXJydXB0IiwiY2xlYW51cCIsIl9wZXJmUmVjb3JkZXJzIiwiQiIsImFsbCIsIm1hcCIsIngiLCJzdG9wIiwic3RvcFJlbW90ZSIsInJlc2V0T25TZXNzaW9uU3RhcnRPbmx5IiwiZW5mb3JjZVNpbXVsYXRvclNodXRkb3duIiwiY3JlYXRlU2ltIiwiZGVsZXRlIiwic2hvdWxkUmVzZXRMb2NhdGlvblNlcnZpdmNlIiwicmVzZXRMb2NhdGlvblNlcnZpY2UiLCJtb2JpbGVSZXNldExvY2F0aW9uU2VydmljZSIsImlnbm9yZSIsInN5c2xvZyIsInN0b3BDYXB0dXJlIiwiandwcm94eSIsInF1aXQiLCJyZWxlYXNlQ29ubmVjdGlvbiIsImV4ZWN1dGVDb21tYW5kIiwiY21kIiwicmVjZWl2ZUFzeW5jUmVzcG9uc2UiLCJhcHBJc1BhY2thZ2VPckJ1bmRsZSIsInRlc3QiLCJoZWxwZXJzIiwiZGV2aWNlTmFtZSIsInNldHVwVmVyc2lvbkNhcHMiLCJ0b0xvd2VyQ2FzZSIsImRldmljZVBsYXRmb3JtIiwiZGV2aWNlcyIsImpvaW4iLCJpbmNsdWRlcyIsImlnbiIsImVuZm9yY2VGcmVzaFNpbXVsYXRvckNyZWF0aW9uIiwicnVuT3B0cyIsInNjYWxlRmFjdG9yIiwiY29ubmVjdEhhcmR3YXJlS2V5Ym9hcmQiLCJwYXN0ZWJvYXJkQXV0b21hdGljU3luYyIsInNpbXVsYXRvclBhc3RlYm9hcmRBdXRvbWF0aWNTeW5jIiwiaXNIZWFkbGVzcyIsInRyYWNlUG9pbnRlciIsInNpbXVsYXRvclRyYWNlUG9pbnRlciIsImRldmljZVByZWZlcmVuY2VzIiwiU2ltdWxhdG9yV2luZG93Q2VudGVyIiwiaXNJbnRlZ2VyIiwic2ltdWxhdG9yU3RhcnR1cFRpbWVvdXQiLCJzdGFydHVwVGltZW91dCIsImlzU3RyaW5nIiwidG9VcHBlckNhc2UiLCJTaW11bGF0b3JXaW5kb3dPcmllbnRhdGlvbiIsIlNpbXVsYXRvcldpbmRvd1JvdGF0aW9uQW5nbGUiLCJydW4iLCJwbGF0Zm9ybU5hbWUiLCJpc1R2T1MiLCJQTEFURk9STV9OQU1FX1RWT1MiLCJQTEFURk9STV9OQU1FX0lPUyIsImxhdW5jaEFwcCIsIkFQUF9MQVVOQ0hfVElNRU9VVCIsInNpbWN0bCIsImNoZWNrU3RhdHVzIiwicmVzcG9uc2UiLCJjdXJyZW50QXBwIiwiYnVuZGxlSUQiLCJwYXJzZUludCIsImlzQXJyYXkiLCJlbnYiLCJpc1BsYWluT2JqZWN0IiwibGFuZ3VhZ2UiLCJwdXNoIiwibG9jYWxlIiwiaXNOaWwiLCJzaG91bGRUZXJtaW5hdGVBcHAiLCJmb3JjZUFwcExhdW5jaCIsIndkYUNhcHMiLCJhdXRvTGF1bmNoIiwiYXJndW1lbnRzIiwiZW52aXJvbm1lbnQiLCJldmVudGxvb3BJZGxlRGVsYXlTZWMiLCJ3ZGFFdmVudGxvb3BJZGxlRGVsYXkiLCJzaG91bGRXYWl0Rm9yUXVpZXNjZW5jZSIsIndhaXRGb3JRdWllc2NlbmNlIiwic2hvdWxkVXNlVGVzdE1hbmFnZXJGb3JWaXNpYmlsaXR5RGV0ZWN0aW9uIiwic2ltcGxlSXNWaXNpYmxlQ2hlY2siLCJtYXhUeXBpbmdGcmVxdWVuY3kiLCJzaG91bGRVc2VTaW5nbGV0b25UZXN0TWFuYWdlciIsIndhaXRGb3JJZGxlVGltZW91dCIsImVsZW1lbnRSZXNwb25zZUZpZWxkcyIsImRpc2FibGVBdXRvbWF0aWNTY3JlZW5zaG90cyIsInVzZU5hdGl2ZUNhY2hpbmdTdHJhdGVneSIsImZvcmNlU2ltdWxhdG9yU29mdHdhcmVLZXlib2FyZFByZXNlbmNlIiwiYXV0b0FjY2VwdEFsZXJ0cyIsImRlZmF1bHRBbGVydEFjdGlvbiIsImF1dG9EaXNtaXNzQWxlcnRzIiwiY2FwYWJpbGl0aWVzIiwiZmlyc3RNYXRjaCIsImFsd2F5c01hdGNoIiwicHJveHlBY3RpdmUiLCJnZXRQcm94eUF2b2lkTGlzdCIsImlzV2VidmlldyIsImNhblByb3h5IiwiaXNXZWJDb250ZXh0IiwidmFsaWRhdGVMb2NhdG9yU3RyYXRlZ3kiLCJzdHJhdGVneSIsImNvZXJjZVZlcnNpb24iLCJ2ZXJpZnlQcm9jZXNzQXJndW1lbnQiLCJrZXljaGFpblBhdGgiLCJrZXljaGFpblBhc3N3b3JkIiwiY29tbWFuZFRpbWVvdXRzIiwicHJvdG9jb2wiLCJob3N0IiwicGVybXMiLCJhZGRpdGlvbmFsV2Vidmlld0J1bmRsZUlkcyIsInBhcnNlQ2Fwc0FycmF5IiwidGltZW91dCIsImFwcFB1c2hUaW1lb3V0IiwiYXBwSW5zdGFsbFN0cmF0ZWd5IiwibmV3U2ltdWxhdG9yIiwib3RoZXJBcHBzIiwiaW5zdGFsbE90aGVyQXBwcyIsImlvc0luc3RhbGxQYXVzZSIsInBhdXNlIiwiZGVsYXkiLCJhcHBzTGlzdCIsImFwcFBhdGhzIiwib3RoZXJBcHAiLCJpc0VuYWJsZWQiLCJpc0Jvb2xlYW4iLCJjdXJPcmllbnRhdGlvbiIsIl9nZXRDb21tYW5kVGltZW91dCIsImNtZE5hbWUiLCJERUZBVUxUX1RJTUVPVVRfS0VZIiwiZ2V0U2Vzc2lvbiIsImRyaXZlclNlc3Npb24iLCJzaG91bGRHZXREZXZpY2VDYXBzIiwiaW5jbHVkZURldmljZUNhcHNUb1Nlc3Npb25JbmZvIiwiZGV2aWNlQ2FwcyIsInN0YXR1c0JhclNpemUiLCJzY2FsZSIsImdldFNjcmVlbkluZm8iLCJwaXhlbFJhdGlvIiwic3RhdEJhckhlaWdodCIsImhlaWdodCIsInZpZXdwb3J0UmVjdCIsImdldFZpZXdwb3J0UmVjdCIsInJlc2V0IiwiY2xvbmVEZWVwIiwic2h1dGRvd25IYW5kbGVyIiwicmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93biIsInByb3RvdHlwZSIsImNvbW1hbmRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUlBOztBQUNBOztBQUlBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQVFBOztBQUlBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLHdCQUF3QixHQUFHLHFCQUFqQztBQUNBLE1BQU1DLDRCQUE0QixHQUFHLDhCQUFyQztBQUVBLE1BQU1DLGlCQUFpQixHQUFHO0FBQ3hCQyxFQUFBQSxpQkFBaUIsRUFBRSxLQURLO0FBRXhCQyxFQUFBQSxzQkFBc0IsRUFBRSxLQUZBO0FBR3hCQyxFQUFBQSxXQUFXLEVBQUUsRUFIVztBQUl4QkMsRUFBQUEsUUFBUSxFQUFFLEtBSmM7QUFLeEJDLEVB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SyxHQUFJO0FBQ2IsUUFBSSxLQUFLalYsSUFBTCxDQUFVdUUsT0FBZCxFQUF1QjtBQUVyQixVQUFJdkUsSUFBSSxHQUFHWSxnQkFBRXNVLFNBQUYsQ0FBWSxLQUFLbFYsSUFBakIsQ0FBWDs7QUFDQUEsTUFBQUEsSUFBSSxDQUFDdUUsT0FBTCxHQUFlLEtBQWY7QUFDQXZFLE1BQUFBLElBQUksQ0FBQ3dFLFNBQUwsR0FBaUIsS0FBakI7QUFDQSxZQUFNMlEsZUFBZSxHQUFHLEtBQUtDLHlCQUE3Qjs7QUFDQSxXQUFLQSx5QkFBTCxHQUFpQyxNQUFNLENBQUUsQ0FBekM7O0FBQ0EsVUFBSTtBQUNGLGNBQU0sS0FBS25QLFFBQUwsQ0FBY2pHLElBQWQsQ0FBTjtBQUNELE9BRkQsU0FFVTtBQUNSLGFBQUtvVix5QkFBTCxHQUFpQ0QsZUFBakM7QUFDRDtBQUNGOztBQUNELFVBQU0sTUFBTUYsS0FBTixFQUFOO0FBQ0Q7O0FBanFDcUM7OztBQW9xQ3hDcFMsTUFBTSxDQUFDYSxNQUFQLENBQWM3RCxjQUFjLENBQUN3VixTQUE3QixFQUF3Q0MsY0FBeEM7ZUFFZXpWLGMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlRHJpdmVyLCBEZXZpY2VTZXR0aW5ncyB9IGZyb20gJ2FwcGl1bS1iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyB1dGlsLCBtanBlZyB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgeyBXZWJEcml2ZXJBZ2VudCB9IGZyb20gJ2FwcGl1bS13ZWJkcml2ZXJhZ2VudCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBMUlUgZnJvbSAnbHJ1LWNhY2hlJztcbmltcG9ydCB7XG4gIGNyZWF0ZVNpbSwgZ2V0RXhpc3RpbmdTaW0sIHJ1blNpbXVsYXRvclJlc2V0LCBpbnN0YWxsVG9TaW11bGF0b3IsXG4gIHNodXRkb3duT3RoZXJTaW11bGF0b3JzLCBzaHV0ZG93blNpbXVsYXRvciwgc2V0TG9jYWxlQW5kUHJlZmVyZW5jZXNcbn0gZnJvbSAnLi9zaW11bGF0b3ItbWFuYWdlbWVudCc7XG5pbXBvcnQgeyBnZXRTaW11bGF0b3IgfSBmcm9tICdhcHBpdW0taW9zLXNpbXVsYXRvcic7XG5pbXBvcnQge1xuICBkb2VzU3VwcG9ydEtleWNoYWluQXBpLCBpbnN0YWxsQ2VydGlmaWNhdGUsIGluc3RhbGxDZXJ0aWZpY2F0ZUxlZ2FjeSxcbiAgaGFzQ2VydGlmaWNhdGVMZWdhY3ksXG59IGZyb20gJy4vY2VydC11dGlscyc7XG5pbXBvcnQgeyByZXRyeUludGVydmFsLCByZXRyeSB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IHZlcmlmeUFwcGxpY2F0aW9uUGxhdGZvcm0sIGV4dHJhY3RCdW5kbGVJZCB9IGZyb20gJy4vYXBwLXV0aWxzJztcbmltcG9ydCB7IGRlc2lyZWRDYXBDb25zdHJhaW50cywgUExBVEZPUk1fTkFNRV9JT1MsIFBMQVRGT1JNX05BTUVfVFZPUyB9IGZyb20gJy4vZGVzaXJlZC1jYXBzJztcbmltcG9ydCBjb21tYW5kcyBmcm9tICcuL2NvbW1hbmRzL2luZGV4JztcbmltcG9ydCB7XG4gIGRldGVjdFVkaWQsIGdldEFuZENoZWNrWGNvZGVWZXJzaW9uLCBnZXRBbmRDaGVja0lvc1Nka1ZlcnNpb24sXG4gIGNoZWNrQXBwUHJlc2VudCwgZ2V0RHJpdmVySW5mbyxcbiAgY2xlYXJTeXN0ZW1GaWxlcywgdHJhbnNsYXRlRGV2aWNlTmFtZSwgbm9ybWFsaXplQ29tbWFuZFRpbWVvdXRzLFxuICBERUZBVUxUX1RJTUVPVVRfS0VZLCBtYXJrU3lzdGVtRmlsZXNGb3JDbGVhbnVwLFxuICBwcmludFVzZXIsIHJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyxcbiAgbm9ybWFsaXplUGxhdGZvcm1WZXJzaW9uLCBpc0xvY2FsSG9zdFxufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7XG4gIGdldENvbm5lY3RlZERldmljZXMsIHJ1blJlYWxEZXZpY2VSZXNldCwgaW5zdGFsbFRvUmVhbERldmljZSxcbiAgZ2V0UmVhbERldmljZU9ialxufSBmcm9tICcuL3JlYWwtZGV2aWNlLW1hbmFnZW1lbnQnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IEFzeW5jTG9jayBmcm9tICdhc3luYy1sb2NrJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IElEQiBmcm9tICdhcHBpdW0taWRiJztcbmltcG9ydCBERVZJQ0VfQ09OTkVDVElPTlNfRkFDVE9SWSBmcm9tICcuL2RldmljZS1jb25uZWN0aW9ucy1mYWN0b3J5JztcblxuXG5jb25zdCBTSFVURE9XTl9PVEhFUl9GRUFUX05BTUUgPSAnc2h1dGRvd25fb3RoZXJfc2ltcyc7XG5jb25zdCBDVVNUT01JWkVfUkVTVUxUX0JVTkRQRV9QQVRIID0gJ2N1c3RvbWl6ZV9yZXN1bHRfYnVuZGxlX3BhdGgnO1xuXG5jb25zdCBkZWZhdWx0U2VydmVyQ2FwcyA9IHtcbiAgd2ViU3RvcmFnZUVuYWJsZWQ6IGZhbHNlLFxuICBsb2NhdGlvbkNvbnRleHRFbmFibGVkOiBmYWxzZSxcbiAgYnJvd3Nlck5hbWU6ICcnLFxuICBwbGF0Zm9ybTogJ01BQycsXG4gIGphdmFzY3JpcHRFbmFibGVkOiB0cnVlLFxuICBkYXRhYmFzZUVuYWJsZWQ6IGZhbHNlLFxuICB0YWtlc1NjcmVlbnNob3Q6IHRydWUsXG4gIG5ldHdvcmtDb25uZWN0aW9uRW5hYmxlZDogZmFsc2UsXG59O1xuY29uc3QgU0FGQVJJX0JVTkRMRV9JRCA9ICdjb20uYXBwbGUubW9iaWxlc2FmYXJpJztcbmNvbnN0IFdEQV9TSU1fU1RBUlRVUF9SRVRSSUVTID0gMjtcbmNvbnN0IFdEQV9SRUFMX0RFVl9TVEFSVFVQX1JFVFJJRVMgPSAxO1xuY29uc3QgV0RBX1JFQUxfREVWX1RVVE9SSUFMX1VSTCA9ICdodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS14Y3VpdGVzdC1kcml2ZXIvYmxvYi9tYXN0ZXIvZG9jcy9yZWFsLWRldmljZS1jb25maWcubWQnO1xuY29uc3QgV0RBX1NUQVJUVVBfUkVUUllfSU5URVJWQUwgPSAxMDAwMDtcbmNvbnN0IERFRkFVTFRfU0VUVElOR1MgPSB7XG4gIG5hdGl2ZVdlYlRhcDogZmFsc2UsXG4gIG5hdGl2ZVdlYlRhcFN0cmljdDogZmFsc2UsXG4gIHVzZUpTT05Tb3VyY2U6IGZhbHNlLFxuICBzaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzOiB0cnVlLFxuICBlbGVtZW50UmVzcG9uc2VBdHRyaWJ1dGVzOiAndHlwZSxsYWJlbCcsXG4gIC8vIFJlYWQgaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9XZWJEcml2ZXJBZ2VudC9ibG9iL21hc3Rlci9XZWJEcml2ZXJBZ2VudExpYi9VdGlsaXRpZXMvRkJDb25maWd1cmF0aW9uLm0gZm9yIGZvbGxvd2luZyBzZXR0aW5ncycgdmFsdWVzXG4gIG1qcGVnU2VydmVyU2NyZWVuc2hvdFF1YWxpdHk6IDI1LFxuICBtanBlZ1NlcnZlckZyYW1lcmF0ZTogMTAsXG4gIHNjcmVlbnNob3RRdWFsaXR5OiAxLFxuICBtanBlZ1NjYWxpbmdGYWN0b3I6IDEwMCxcbiAgLy8gc2V0IGByZWR1Y2VNb3Rpb25gIHRvIGBudWxsYCBzbyB0aGF0IGl0IHdpbGwgYmUgdmVyaWZpZWQgYnV0IHN0aWxsIHNldCBlaXRoZXIgdHJ1ZS9mYWxzZVxuICByZWR1Y2VNb3Rpb246IG51bGwsXG59O1xuLy8gVGhpcyBsb2NrIGFzc3VyZXMsIHRoYXQgZWFjaCBkcml2ZXIgc2Vzc2lvbiBkb2VzIG5vdFxuLy8gYWZmZWN0IHNoYXJlZCByZXNvdXJjZXMgb2YgdGhlIG90aGVyIHBhcmFsbGVsIHNlc3Npb25zXG5jb25zdCBTSEFSRURfUkVTT1VSQ0VTX0dVQVJEID0gbmV3IEFzeW5jTG9jaygpO1xuY29uc3QgV0VCX0VMRU1FTlRTX0NBQ0hFX1NJWkUgPSA1MDA7XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVzZWxlc3MtZXNjYXBlICovXG5jb25zdCBOT19QUk9YWV9OQVRJVkVfTElTVCA9IFtcbiAgWydERUxFVEUnLCAvd2luZG93L10sXG4gIFsnR0VUJywgL15cXC9zZXNzaW9uXFwvW15cXC9dKyQvXSxcbiAgWydHRVQnLCAvYWxlcnRfdGV4dC9dLFxuICBbJ0dFVCcsIC9hbGVydFxcL1teXFwvXSsvXSxcbiAgWydHRVQnLCAvYXBwaXVtL10sXG4gIFsnR0VUJywgL2F0dHJpYnV0ZS9dLFxuICBbJ0dFVCcsIC9jb250ZXh0L10sXG4gIFsnR0VUJywgL2xvY2F0aW9uL10sXG4gIFsnR0VUJywgL2xvZy9dLFxuICBbJ0dFVCcsIC9zY3JlZW5zaG90L10sXG4gIFsnR0VUJywgL3NpemUvXSxcbiAgWydHRVQnLCAvc291cmNlL10sXG4gIFsnR0VUJywgL3RpbWVvdXRzJC9dLFxuICBbJ0dFVCcsIC91cmwvXSxcbiAgWydHRVQnLCAvd2luZG93L10sXG4gIFsnUE9TVCcsIC9hY2NlcHRfYWxlcnQvXSxcbiAgWydQT1NUJywgL2FjdGlvbnMkL10sXG4gIFsnUE9TVCcsIC9hbGVydF90ZXh0L10sXG4gIFsnUE9TVCcsIC9hbGVydFxcL1teXFwvXSsvXSxcbiAgWydQT1NUJywgL2FwcGl1bS9dLFxuICBbJ1BPU1QnLCAvYXBwaXVtXFwvZGV2aWNlXFwvaXNfbG9ja2VkL10sXG4gIFsnUE9TVCcsIC9hcHBpdW1cXC9kZXZpY2VcXC9sb2NrL10sXG4gIFsnUE9TVCcsIC9hcHBpdW1cXC9kZXZpY2VcXC91bmxvY2svXSxcbiAgWydQT1NUJywgL2JhY2svXSxcbiAgWydQT1NUJywgL2NsZWFyL10sXG4gIFsnUE9TVCcsIC9jb250ZXh0L10sXG4gIFsnUE9TVCcsIC9kaXNtaXNzX2FsZXJ0L10sXG4gIFsnUE9TVCcsIC9lbGVtZW50XFwvYWN0aXZlL10sIC8vIE1KU09OV1AgZ2V0IGFjdGl2ZSBlbGVtZW50IHNob3VsZCBwcm94eVxuICBbJ1BPU1QnLCAvZWxlbWVudCQvXSxcbiAgWydQT1NUJywgL2VsZW1lbnRzJC9dLFxuICBbJ1BPU1QnLCAvZXhlY3V0ZS9dLFxuICBbJ1BPU1QnLCAva2V5cy9dLFxuICBbJ1BPU1QnLCAvbG9nL10sXG4gIFsnUE9TVCcsIC9tb3ZldG8vXSxcbiAgWydQT1NUJywgL3JlY2VpdmVfYXN5bmNfcmVzcG9uc2UvXSwgLy8gYWx3YXlzLCBpbiBjYXNlIGNvbnRleHQgc3dpdGNoZXMgd2hpbGUgd2FpdGluZ1xuICBbJ1BPU1QnLCAvc2Vzc2lvblxcL1teXFwvXStcXC9sb2NhdGlvbi9dLCAvLyBnZW8gbG9jYXRpb24sIGJ1dCBub3QgZWxlbWVudCBsb2NhdGlvblxuICBbJ1BPU1QnLCAvc2hha2UvXSxcbiAgWydQT1NUJywgL3RpbWVvdXRzL10sXG4gIFsnUE9TVCcsIC90b3VjaC9dLFxuICBbJ1BPU1QnLCAvdXJsL10sXG4gIFsnUE9TVCcsIC92YWx1ZS9dLFxuICBbJ1BPU1QnLCAvd2luZG93L10sXG4gIFsnREVMRVRFJywgL2Nvb2tpZS9dLFxuICBbJ0dFVCcsIC9jb29raWUvXSxcbiAgWydQT1NUJywgL2Nvb2tpZS9dLFxuXTtcbmNvbnN0IE5PX1BST1hZX1dFQl9MSVNUID0gW1xuICBbJ0dFVCcsIC9hdHRyaWJ1dGUvXSxcbiAgWydHRVQnLCAvZWxlbWVudC9dLFxuICBbJ0dFVCcsIC90ZXh0L10sXG4gIFsnR0VUJywgL3RpdGxlL10sXG4gIFsnUE9TVCcsIC9jbGVhci9dLFxuICBbJ1BPU1QnLCAvY2xpY2svXSxcbiAgWydQT1NUJywgL2VsZW1lbnQvXSxcbiAgWydQT1NUJywgL2ZvcndhcmQvXSxcbiAgWydQT1NUJywgL2ZyYW1lL10sXG4gIFsnUE9TVCcsIC9rZXlzL10sXG4gIFsnUE9TVCcsIC9yZWZyZXNoL10sXG5dLmNvbmNhdChOT19QUk9YWV9OQVRJVkVfTElTVCk7XG4vKiBlc2xpbnQtZW5hYmxlIG5vLXVzZWxlc3MtZXNjYXBlICovXG5cbmNvbnN0IE1FTU9JWkVEX0ZVTkNUSU9OUyA9IFtcbiAgJ2dldFN0YXR1c0JhckhlaWdodCcsXG4gICdnZXREZXZpY2VQaXhlbFJhdGlvJyxcbiAgJ2dldFNjcmVlbkluZm8nLFxuXTtcblxuY2xhc3MgWENVSVRlc3REcml2ZXIgZXh0ZW5kcyBCYXNlRHJpdmVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSwgc2hvdWxkVmFsaWRhdGVDYXBzID0gdHJ1ZSkge1xuICAgIHN1cGVyKG9wdHMsIHNob3VsZFZhbGlkYXRlQ2Fwcyk7XG5cbiAgICB0aGlzLmRlc2lyZWRDYXBDb25zdHJhaW50cyA9IGRlc2lyZWRDYXBDb25zdHJhaW50cztcblxuICAgIHRoaXMubG9jYXRvclN0cmF0ZWdpZXMgPSBbXG4gICAgICAneHBhdGgnLFxuICAgICAgJ2lkJyxcbiAgICAgICduYW1lJyxcbiAgICAgICdjbGFzcyBuYW1lJyxcbiAgICAgICctaW9zIHByZWRpY2F0ZSBzdHJpbmcnLFxuICAgICAgJy1pb3MgY2xhc3MgY2hhaW4nLFxuICAgICAgJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgICAgJ2NzcyBzZWxlY3RvcicsXG4gICAgXTtcbiAgICB0aGlzLndlYkxvY2F0b3JTdHJhdGVnaWVzID0gW1xuICAgICAgJ2xpbmsgdGV4dCcsXG4gICAgICAnY3NzIHNlbGVjdG9yJyxcbiAgICAgICd0YWcgbmFtZScsXG4gICAgICAnbGluayB0ZXh0JyxcbiAgICAgICdwYXJ0aWFsIGxpbmsgdGV4dCcsXG4gICAgXTtcbiAgICB0aGlzLnJlc2V0SW9zKCk7XG4gICAgdGhpcy5zZXR0aW5ncyA9IG5ldyBEZXZpY2VTZXR0aW5ncyhERUZBVUxUX1NFVFRJTkdTLCB0aGlzLm9uU2V0dGluZ3NVcGRhdGUuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5sb2dzID0ge307XG5cbiAgICAvLyBtZW1vaXplIGZ1bmN0aW9ucyBoZXJlLCBzbyB0aGF0IHRoZXkgYXJlIGRvbmUgb24gYSBwZXItaW5zdGFuY2UgYmFzaXNcbiAgICBmb3IgKGNvbnN0IGZuIG9mIE1FTU9JWkVEX0ZVTkNUSU9OUykge1xuICAgICAgdGhpc1tmbl0gPSBfLm1lbW9pemUodGhpc1tmbl0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9uU2V0dGluZ3NVcGRhdGUgKGtleSwgdmFsdWUpIHtcbiAgICBpZiAoa2V5ICE9PSAnbmF0aXZlV2ViVGFwJyAmJiBrZXkgIT09ICduYXRpdmVXZWJUYXBTdHJpY3QnKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy9hcHBpdW0vc2V0dGluZ3MnLCAnUE9TVCcsIHtcbiAgICAgICAgc2V0dGluZ3M6IHtba2V5XTogdmFsdWV9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5vcHRzW2tleV0gPSAhIXZhbHVlO1xuICB9XG5cbiAgcmVzZXRJb3MgKCkge1xuICAgIHRoaXMub3B0cyA9IHRoaXMub3B0cyB8fCB7fTtcbiAgICB0aGlzLndkYSA9IG51bGw7XG4gICAgdGhpcy5vcHRzLmRldmljZSA9IG51bGw7XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMucHJveHlSZXFSZXMgPSBudWxsO1xuICAgIHRoaXMuandwUHJveHlBdm9pZCA9IFtdO1xuICAgIHRoaXMuc2FmYXJpID0gZmFsc2U7XG4gICAgdGhpcy5jYWNoZWRXZGFTdGF0dXMgPSBudWxsO1xuXG4gICAgdGhpcy5jdXJXZWJGcmFtZXMgPSBbXTtcbiAgICB0aGlzLl9jdXJyZW50VXJsID0gbnVsbDtcbiAgICB0aGlzLmN1ckNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMueGNvZGVWZXJzaW9uID0ge307XG4gICAgdGhpcy5jb250ZXh0cyA9IFtdO1xuICAgIHRoaXMuaW1wbGljaXRXYWl0TXMgPSAwO1xuICAgIHRoaXMuYXN5bmNsaWJXYWl0TXMgPSAwO1xuICAgIHRoaXMucGFnZUxvYWRNcyA9IDYwMDA7XG4gICAgdGhpcy5sYW5kc2NhcGVXZWJDb29yZHNPZmZzZXQgPSAwO1xuICAgIHRoaXMucmVtb3RlID0gbnVsbDtcblxuICAgIHRoaXMud2ViRWxlbWVudHNDYWNoZSA9IG5ldyBMUlUoe1xuICAgICAgbWF4OiBXRUJfRUxFTUVOVFNfQ0FDSEVfU0laRSxcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBkcml2ZXJEYXRhICgpIHtcbiAgICAvLyBUT0RPIGZpbGwgb3V0IHJlc291cmNlIGluZm8gaGVyZVxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGFzeW5jIGdldFN0YXR1cyAoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLmRyaXZlckluZm8gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLmRyaXZlckluZm8gPSBhd2FpdCBnZXREcml2ZXJJbmZvKCk7XG4gICAgfVxuICAgIGxldCBzdGF0dXMgPSB7YnVpbGQ6IHt2ZXJzaW9uOiB0aGlzLmRyaXZlckluZm8udmVyc2lvbn19O1xuICAgIGlmICh0aGlzLmNhY2hlZFdkYVN0YXR1cykge1xuICAgICAgc3RhdHVzLndkYSA9IHRoaXMuY2FjaGVkV2RhU3RhdHVzO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdHVzO1xuICB9XG5cbiAgbWVyZ2VDbGlBcmdzVG9PcHRzICgpIHtcbiAgICBsZXQgZGlkTWVyZ2UgPSBmYWxzZTtcbiAgICAvLyB0aGlzLmNsaUFyZ3Mgc2hvdWxkIG5ldmVyIGluY2x1ZGUgYW55dGhpbmcgd2UgZG8gbm90IGV4cGVjdC5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmNsaUFyZ3MgPz8ge30pKSB7XG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCBrZXkpKSB7XG4gICAgICAgIHRoaXMub3B0c1trZXldID0gdmFsdWU7XG4gICAgICAgIGxvZy5pbmZvKGBDTEkgYXJnICcke2tleX0nIHdpdGggdmFsdWUgJyR7dmFsdWV9JyBvdmVyd3JpdGVzIHZhbHVlICcke3RoaXMub3B0c1trZXldfScgc2VudCBpbiB2aWEgY2FwcylgKTtcbiAgICAgICAgZGlkTWVyZ2UgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGlkTWVyZ2U7XG4gIH1cblxuICBhc3luYyBjcmVhdGVTZXNzaW9uICguLi5hcmdzKSB7XG4gICAgdGhpcy5saWZlY3ljbGVEYXRhID0ge307IC8vIHRoaXMgaXMgdXNlZCBmb3Iga2VlcGluZyB0cmFjayBvZiB0aGUgc3RhdGUgd2Ugc3RhcnQgc28gd2hlbiB3ZSBkZWxldGUgdGhlIHNlc3Npb24gd2UgY2FuIHB1dCB0aGluZ3MgYmFja1xuICAgIHRyeSB7XG4gICAgICBsZXQgW3Nlc3Npb25JZCwgY2Fwc10gPSBhd2FpdCBzdXBlci5jcmVhdGVTZXNzaW9uKC4uLmFyZ3MpO1xuICAgICAgdGhpcy5vcHRzLnNlc3Npb25JZCA9IHNlc3Npb25JZDtcblxuICAgICAgLy8gbWVyZ2UgY2xpIGFyZ3MgdG8gb3B0cywgYW5kIGlmIHdlIGRpZCBtZXJnZSBhbnksIHJldmFsaWRhdGUgb3B0cyB0byBlbnN1cmUgdGhlIGZpbmFsIHNldFxuICAgICAgLy8gaXMgYWxzbyBjb25zaXN0ZW50XG4gICAgICBpZiAodGhpcy5tZXJnZUNsaUFyZ3NUb09wdHMoKSkge1xuICAgICAgICB0aGlzLnZhbGlkYXRlRGVzaXJlZENhcHMoey4uLmNhcHMsIC4uLnRoaXMuY2xpQXJnc30pO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0KCk7XG5cbiAgICAgIC8vIG1lcmdlIHNlcnZlciBjYXBhYmlsaXRpZXMgKyBkZXNpcmVkIGNhcGFiaWxpdGllc1xuICAgICAgY2FwcyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRTZXJ2ZXJDYXBzLCBjYXBzKTtcbiAgICAgIC8vIHVwZGF0ZSB0aGUgdWRpZCB3aXRoIHdoYXQgaXMgYWN0dWFsbHkgdXNlZFxuICAgICAgY2Fwcy51ZGlkID0gdGhpcy5vcHRzLnVkaWQ7XG4gICAgICAvLyBlbnN1cmUgd2UgdHJhY2sgbmF0aXZlV2ViVGFwIGNhcGFiaWxpdHkgYXMgYSBzZXR0aW5nIGFzIHdlbGxcbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICduYXRpdmVXZWJUYXAnKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVNldHRpbmdzKHtuYXRpdmVXZWJUYXA6IHRoaXMub3B0cy5uYXRpdmVXZWJUYXB9KTtcbiAgICAgIH1cbiAgICAgIC8vIGVuc3VyZSB3ZSB0cmFjayBuYXRpdmVXZWJUYXBTdHJpY3QgY2FwYWJpbGl0eSBhcyBhIHNldHRpbmcgYXMgd2VsbFxuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ25hdGl2ZVdlYlRhcFN0cmljdCcpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlU2V0dGluZ3Moe25hdGl2ZVdlYlRhcFN0cmljdDogdGhpcy5vcHRzLm5hdGl2ZVdlYlRhcFN0cmljdH0pO1xuICAgICAgfVxuICAgICAgLy8gZW5zdXJlIHdlIHRyYWNrIHVzZUpTT05Tb3VyY2UgY2FwYWJpbGl0eSBhcyBhIHNldHRpbmcgYXMgd2VsbFxuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ3VzZUpTT05Tb3VyY2UnKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVNldHRpbmdzKHt1c2VKU09OU291cmNlOiB0aGlzLm9wdHMudXNlSlNPTlNvdXJjZX0pO1xuICAgICAgfVxuXG4gICAgICBsZXQgd2RhU2V0dGluZ3MgPSB7XG4gICAgICAgIGVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXM6IERFRkFVTFRfU0VUVElOR1MuZWxlbWVudFJlc3BvbnNlQXR0cmlidXRlcyxcbiAgICAgICAgc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlczogREVGQVVMVF9TRVRUSU5HUy5zaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzLFxuICAgICAgfTtcbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICdlbGVtZW50UmVzcG9uc2VBdHRyaWJ1dGVzJykpIHtcbiAgICAgICAgd2RhU2V0dGluZ3MuZWxlbWVudFJlc3BvbnNlQXR0cmlidXRlcyA9IHRoaXMub3B0cy5lbGVtZW50UmVzcG9uc2VBdHRyaWJ1dGVzO1xuICAgICAgfVxuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ3Nob3VsZFVzZUNvbXBhY3RSZXNwb25zZXMnKSkge1xuICAgICAgICB3ZGFTZXR0aW5ncy5zaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzID0gdGhpcy5vcHRzLnNob3VsZFVzZUNvbXBhY3RSZXNwb25zZXM7XG4gICAgICB9XG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnbWpwZWdTZXJ2ZXJTY3JlZW5zaG90UXVhbGl0eScpKSB7XG4gICAgICAgIHdkYVNldHRpbmdzLm1qcGVnU2VydmVyU2NyZWVuc2hvdFF1YWxpdHkgPSB0aGlzLm9wdHMubWpwZWdTZXJ2ZXJTY3JlZW5zaG90UXVhbGl0eTtcbiAgICAgIH1cbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICdtanBlZ1NlcnZlckZyYW1lcmF0ZScpKSB7XG4gICAgICAgIHdkYVNldHRpbmdzLm1qcGVnU2VydmVyRnJhbWVyYXRlID0gdGhpcy5vcHRzLm1qcGVnU2VydmVyRnJhbWVyYXRlO1xuICAgICAgfVxuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ3NjcmVlbnNob3RRdWFsaXR5JykpIHtcbiAgICAgICAgbG9nLmluZm8oYFNldHRpbmcgdGhlIHF1YWxpdHkgb2YgcGhvbmUgc2NyZWVuc2hvdDogJyR7dGhpcy5vcHRzLnNjcmVlbnNob3RRdWFsaXR5fSdgKTtcbiAgICAgICAgd2RhU2V0dGluZ3Muc2NyZWVuc2hvdFF1YWxpdHkgPSB0aGlzLm9wdHMuc2NyZWVuc2hvdFF1YWxpdHk7XG4gICAgICB9XG4gICAgICAvLyBlbnN1cmUgV0RBIGdldHMgb3VyIGRlZmF1bHRzIGluc3RlYWQgb2Ygd2hhdGV2ZXIgaXRzIG93biBtaWdodCBiZVxuICAgICAgYXdhaXQgdGhpcy51cGRhdGVTZXR0aW5ncyh3ZGFTZXR0aW5ncyk7XG5cbiAgICAgIC8vIHR1cm4gb24gbWpwZWcgc3RyZWFtIHJlYWRpbmcgaWYgcmVxdWVzdGVkXG4gICAgICBpZiAodGhpcy5vcHRzLm1qcGVnU2NyZWVuc2hvdFVybCkge1xuICAgICAgICBsb2cuaW5mbyhgU3RhcnRpbmcgTUpQRUcgc3RyZWFtIHJlYWRpbmcgVVJMOiAnJHt0aGlzLm9wdHMubWpwZWdTY3JlZW5zaG90VXJsfSdgKTtcbiAgICAgICAgdGhpcy5tanBlZ1N0cmVhbSA9IG5ldyBtanBlZy5NSnBlZ1N0cmVhbSh0aGlzLm9wdHMubWpwZWdTY3JlZW5zaG90VXJsKTtcbiAgICAgICAgYXdhaXQgdGhpcy5tanBlZ1N0cmVhbS5zdGFydCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtzZXNzaW9uSWQsIGNhcHNdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy5lcnJvcihKU09OLnN0cmluZ2lmeShlKSk7XG4gICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnQgKCkge1xuICAgIHRoaXMub3B0cy5ub1Jlc2V0ID0gISF0aGlzLm9wdHMubm9SZXNldDtcbiAgICB0aGlzLm9wdHMuZnVsbFJlc2V0ID0gISF0aGlzLm9wdHMuZnVsbFJlc2V0O1xuXG4gICAgYXdhaXQgcHJpbnRVc2VyKCk7XG5cbiAgICB0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbiA9IG51bGw7IC8vIEZvciBXREEgYW5kIHhjb2RlYnVpbGRcbiAgICBjb25zdCB7ZGV2aWNlLCB1ZGlkLCByZWFsRGV2aWNlfSA9IGF3YWl0IHRoaXMuZGV0ZXJtaW5lRGV2aWNlKCk7XG4gICAgbG9nLmluZm8oYERldGVybWluaW5nIGRldmljZSB0byBydW4gdGVzdHMgb246IHVkaWQ6ICcke3VkaWR9JywgcmVhbCBkZXZpY2U6ICR7cmVhbERldmljZX1gKTtcbiAgICB0aGlzLm9wdHMuZGV2aWNlID0gZGV2aWNlO1xuICAgIHRoaXMub3B0cy51ZGlkID0gdWRpZDtcbiAgICB0aGlzLm9wdHMucmVhbERldmljZSA9IHJlYWxEZXZpY2U7XG5cbiAgICBpZiAodGhpcy5vcHRzLnNpbXVsYXRvckRldmljZXNTZXRQYXRoKSB7XG4gICAgICBpZiAocmVhbERldmljZSkge1xuICAgICAgICBsb2cuaW5mbyhgVGhlICdzaW11bGF0b3JEZXZpY2VzU2V0UGF0aCcgY2FwYWJpbGl0eSBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgU2ltdWxhdG9yIGRldmljZXNgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy5pbmZvKGBTZXR0aW5nIHNpbXVsYXRvciBkZXZpY2VzIHNldCBwYXRoIHRvICcke3RoaXMub3B0cy5zaW11bGF0b3JEZXZpY2VzU2V0UGF0aH0nYCk7XG4gICAgICAgIHRoaXMub3B0cy5kZXZpY2UuZGV2aWNlc1NldFBhdGggPSB0aGlzLm9wdHMuc2ltdWxhdG9yRGV2aWNlc1NldFBhdGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYXQgdGhpcyBwb2ludCBpZiB0aGVyZSBpcyBubyBwbGF0Zm9ybVZlcnNpb24sIGdldCBpdCBmcm9tIHRoZSBkZXZpY2VcbiAgICBpZiAoIXRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gJiYgdGhpcy5vcHRzLmRldmljZSkge1xuICAgICAgdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiA9IGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuZ2V0UGxhdGZvcm1WZXJzaW9uKCk7XG4gICAgICBsb2cuaW5mbyhgTm8gcGxhdGZvcm1WZXJzaW9uIHNwZWNpZmllZC4gVXNpbmcgZGV2aWNlIHZlcnNpb246ICcke3RoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb259J2ApO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRWZXJzaW9uID0gbm9ybWFsaXplUGxhdGZvcm1WZXJzaW9uKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24pO1xuICAgIGlmICh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uICE9PSBub3JtYWxpemVkVmVyc2lvbikge1xuICAgICAgbG9nLmluZm8oYE5vcm1hbGl6ZWQgcGxhdGZvcm1WZXJzaW9uIGNhcGFiaWxpdHkgdmFsdWUgJyR7dGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbn0nIHRvICcke25vcm1hbGl6ZWRWZXJzaW9ufSdgKTtcbiAgICAgIHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gPSBub3JtYWxpemVkVmVyc2lvbjtcbiAgICB9XG4gICAgaWYgKHV0aWwuY29tcGFyZVZlcnNpb25zKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sICc8JywgJzkuMycpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBsYXRmb3JtIHZlcnNpb24gbXVzdCBiZSA5LjMgb3IgYWJvdmUuICcke3RoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb259JyBpcyBub3Qgc3VwcG9ydGVkLmApO1xuICAgIH1cblxuICAgIGlmIChfLmlzRW1wdHkodGhpcy54Y29kZVZlcnNpb24pICYmICghdGhpcy5vcHRzLndlYkRyaXZlckFnZW50VXJsIHx8ICF0aGlzLm9wdHMucmVhbERldmljZSkpIHtcbiAgICAgIC8vIG5vIGB3ZWJEcml2ZXJBZ2VudFVybGAsIG9yIG9uIGEgc2ltdWxhdG9yLCBzbyB3ZSBuZWVkIGFuIFhjb2RlIHZlcnNpb25cbiAgICAgIHRoaXMueGNvZGVWZXJzaW9uID0gYXdhaXQgZ2V0QW5kQ2hlY2tYY29kZVZlcnNpb24oKTtcbiAgICB9XG4gICAgdGhpcy5sb2dFdmVudCgneGNvZGVEZXRhaWxzUmV0cmlldmVkJyk7XG5cbiAgICBpZiAoXy50b0xvd2VyKHRoaXMub3B0cy5icm93c2VyTmFtZSkgPT09ICdzYWZhcmknKSB7XG4gICAgICBsb2cuaW5mbygnU2FmYXJpIHRlc3QgcmVxdWVzdGVkJyk7XG4gICAgICB0aGlzLnNhZmFyaSA9IHRydWU7XG4gICAgICB0aGlzLm9wdHMuYXBwID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5vcHRzLnByb2Nlc3NBcmd1bWVudHMgPSB0aGlzLm9wdHMucHJvY2Vzc0FyZ3VtZW50cyB8fCB7fTtcbiAgICAgIHRoaXMub3B0cy5idW5kbGVJZCA9IFNBRkFSSV9CVU5ETEVfSUQ7XG4gICAgICB0aGlzLl9jdXJyZW50VXJsID0gdGhpcy5vcHRzLnNhZmFyaUluaXRpYWxVcmwgfHwgKFxuICAgICAgICB0aGlzLmlzUmVhbERldmljZSgpXG4gICAgICAgICAgPyAnaHR0cDovL2FwcGl1bS5pbydcbiAgICAgICAgICA6IGBodHRwOi8vJHt0aGlzLm9wdHMuYWRkcmVzc306JHt0aGlzLm9wdHMucG9ydH0vd2VsY29tZWBcbiAgICAgICk7XG4gICAgICBpZiAodXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJzwnLCAnMTIuMicpKSB7XG4gICAgICAgIC8vIHRoaXMgb3B0aW9uIGRvZXMgbm90IHdvcmsgb24gMTIuMiBhbmQgYWJvdmVcbiAgICAgICAgdGhpcy5vcHRzLnByb2Nlc3NBcmd1bWVudHMuYXJncyA9IFsnLXUnLCB0aGlzLl9jdXJyZW50VXJsXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0cy5hcHAgfHwgdGhpcy5vcHRzLmJ1bmRsZUlkKSB7XG4gICAgICBhd2FpdCB0aGlzLmNvbmZpZ3VyZUFwcCgpO1xuICAgIH1cbiAgICB0aGlzLmxvZ0V2ZW50KCdhcHBDb25maWd1cmVkJyk7XG5cbiAgICAvLyBmYWlsIHZlcnkgZWFybHkgaWYgdGhlIGFwcCBkb2Vzbid0IGFjdHVhbGx5IGV4aXN0XG4gICAgLy8gb3IgaWYgYnVuZGxlIGlkIGRvZXNuJ3QgcG9pbnQgdG8gYW4gaW5zdGFsbGVkIGFwcFxuICAgIGlmICh0aGlzLm9wdHMuYXBwKSB7XG4gICAgICBhd2FpdCBjaGVja0FwcFByZXNlbnQodGhpcy5vcHRzLmFwcCk7XG5cbiAgICAgIGlmICghdGhpcy5vcHRzLmJ1bmRsZUlkKSB7XG4gICAgICAgIHRoaXMub3B0cy5idW5kbGVJZCA9IGF3YWl0IGV4dHJhY3RCdW5kbGVJZCh0aGlzLm9wdHMuYXBwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnJ1blJlc2V0KCk7XG5cbiAgICB0aGlzLndkYSA9IG5ldyBXZWJEcml2ZXJBZ2VudCh0aGlzLnhjb2RlVmVyc2lvbiwgdGhpcy5vcHRzKTtcbiAgICAvLyBEZXJpdmVkIGRhdGEgcGF0aCByZXRyaWV2YWwgaXMgYW4gZXhwZW5zaXZlIG9wZXJhdGlvblxuICAgIC8vIFdlIGNvdWxkIHN0YXJ0IHRoYXQgbm93IGluIGJhY2tncm91bmQgYW5kIGdldCB0aGUgY2FjaGVkIHJlc3VsdFxuICAgIC8vIHdoZW5ldmVyIGl0IGlzIG5lZWRlZFxuICAgIHRoaXMud2RhLnJldHJpZXZlRGVyaXZlZERhdGFQYXRoKCkuY2F0Y2goKGUpID0+IGxvZy5kZWJ1ZyhlKSk7XG5cbiAgICBjb25zdCBtZW1vaXplZExvZ0luZm8gPSBfLm1lbW9pemUoZnVuY3Rpb24gbG9nSW5mbyAoKSB7XG4gICAgICBsb2cuaW5mbyhcIidza2lwTG9nQ2FwdHVyZScgaXMgc2V0LiBTa2lwcGluZyBzdGFydGluZyBsb2dzIHN1Y2ggYXMgY3Jhc2gsIHN5c3RlbSwgc2FmYXJpIGNvbnNvbGUgYW5kIHNhZmFyaSBuZXR3b3JrLlwiKTtcbiAgICB9KTtcbiAgICBjb25zdCBzdGFydExvZ0NhcHR1cmUgPSBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5vcHRzLnNraXBMb2dDYXB0dXJlKSB7XG4gICAgICAgIG1lbW9pemVkTG9nSW5mbygpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc3RhcnRMb2dDYXB0dXJlKCk7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHRoaXMubG9nRXZlbnQoJ2xvZ0NhcHR1cmVTdGFydGVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgY29uc3QgaXNMb2dDYXB0dXJlU3RhcnRlZCA9IGF3YWl0IHN0YXJ0TG9nQ2FwdHVyZSgpO1xuXG4gICAgbG9nLmluZm8oYFNldHRpbmcgdXAgJHt0aGlzLmlzUmVhbERldmljZSgpID8gJ3JlYWwgZGV2aWNlJyA6ICdzaW11bGF0b3InfWApO1xuXG4gICAgaWYgKHRoaXMuaXNTaW11bGF0b3IoKSkge1xuICAgICAgaWYgKHRoaXMub3B0cy5zaHV0ZG93bk90aGVyU2ltdWxhdG9ycykge1xuICAgICAgICB0aGlzLmVuc3VyZUZlYXR1cmVFbmFibGVkKFNIVVRET1dOX09USEVSX0ZFQVRfTkFNRSk7XG4gICAgICAgIGF3YWl0IHNodXRkb3duT3RoZXJTaW11bGF0b3JzKHRoaXMub3B0cy5kZXZpY2UpO1xuICAgICAgfVxuXG4gICAgICAvLyB0aGlzIHNob3VsZCBiZSBkb25lIGJlZm9yZSB0aGUgc2ltdWxhdG9yIGlzIHN0YXJ0ZWRcbiAgICAgIC8vIGlmIGl0IGlzIGFscmVhZHkgcnVubmluZywgdGhpcyBjYXAgd29uJ3Qgd29yaywgd2hpY2ggaXMgZG9jdW1lbnRlZFxuICAgICAgaWYgKHRoaXMuaXNTYWZhcmkoKSAmJiB0aGlzLm9wdHMuc2FmYXJpR2xvYmFsUHJlZmVyZW5jZXMpIHtcbiAgICAgICAgaWYgKGF3YWl0IHRoaXMub3B0cy5kZXZpY2UudXBkYXRlU2FmYXJpR2xvYmFsU2V0dGluZ3ModGhpcy5vcHRzLnNhZmFyaUdsb2JhbFByZWZlcmVuY2VzKSkge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhgU2FmYXJpIGdsb2JhbCBwcmVmZXJlbmNlcyB1cGRhdGVkYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2NhbENvbmZpZyA9IGF3YWl0IHNldExvY2FsZUFuZFByZWZlcmVuY2VzKHRoaXMub3B0cy5kZXZpY2UsIHRoaXMub3B0cywgdGhpcy5pc1NhZmFyaSgpLCBhc3luYyAoc2ltKSA9PiB7XG4gICAgICAgIGF3YWl0IHNodXRkb3duU2ltdWxhdG9yKHNpbSk7XG5cbiAgICAgICAgLy8gd2UgZG9uJ3Qga25vdyBpZiB0aGVyZSBuZWVkcyB0byBiZSBjaGFuZ2VzIGEgcHJpb3JpLCBzbyBjaGFuZ2UgZmlyc3QuXG4gICAgICAgIC8vIHNvbWV0aW1lcyB0aGUgc2h1dGRvd24gcHJvY2VzcyBjaGFuZ2VzIHRoZSBzZXR0aW5ncywgc28gcmVzZXQgdGhlbSxcbiAgICAgICAgLy8ga25vd2luZyB0aGF0IHRoZSBzaW0gaXMgYWxyZWFkeSBzaHV0XG4gICAgICAgIGF3YWl0IHNldExvY2FsZUFuZFByZWZlcmVuY2VzKHNpbSwgdGhpcy5vcHRzLCB0aGlzLmlzU2FmYXJpKCkpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLm9wdHMuY3VzdG9tU1NMQ2VydCAmJiAhKGF3YWl0IGRvZXNTdXBwb3J0S2V5Y2hhaW5BcGkodGhpcy5vcHRzLmRldmljZSkpKSB7XG4gICAgICAgIGNvbnN0IGNlcnRIZWFkID0gXy50cnVuY2F0ZSh0aGlzLm9wdHMuY3VzdG9tU1NMQ2VydCwge2xlbmd0aDogMjB9KTtcbiAgICAgICAgbG9nLmluZm8oYEluc3RhbGxpbmcgdGhlIGN1c3RvbSBTU0wgY2VydGlmaWNhdGUgJyR7Y2VydEhlYWR9J2ApO1xuICAgICAgICBpZiAoYXdhaXQgaGFzQ2VydGlmaWNhdGVMZWdhY3kodGhpcy5vcHRzLmRldmljZSwgdGhpcy5vcHRzLmN1c3RvbVNTTENlcnQpKSB7XG4gICAgICAgICAgbG9nLmluZm8oYFNTTCBjZXJ0aWZpY2F0ZSAnJHtjZXJ0SGVhZH0nIGFscmVhZHkgaW5zdGFsbGVkYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nLmluZm8oYE1ha2luZyBzdXJlIFNpbXVsYXRvciBpcyBzaHV0IGRvd24sICcgK1xuICAgICAgICAgICAgJ3NvIHRoYXQgU1NMIGNlcnRpZmljYXRlIGluc3RhbGxhdGlvbiB0YWtlcyBlZmZlY3RgKTtcbiAgICAgICAgICBhd2FpdCBzaHV0ZG93blNpbXVsYXRvcih0aGlzLm9wdHMuZGV2aWNlKTtcbiAgICAgICAgICBhd2FpdCBpbnN0YWxsQ2VydGlmaWNhdGVMZWdhY3kodGhpcy5vcHRzLmRldmljZSwgdGhpcy5vcHRzLmN1c3RvbVNTTENlcnQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9nRXZlbnQoJ2N1c3RvbUNlcnRJbnN0YWxsZWQnKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5zdGFydFNpbSgpO1xuXG4gICAgICBpZiAodGhpcy5vcHRzLmN1c3RvbVNTTENlcnQgJiYgYXdhaXQgZG9lc1N1cHBvcnRLZXljaGFpbkFwaSh0aGlzLm9wdHMuZGV2aWNlKSkge1xuICAgICAgICAvLyBTaW11bGF0b3IgbXVzdCBiZSBib290ZWQgaW4gb3JkZXIgdG8gY2FsbCB0aGlzIGhlbHBlclxuICAgICAgICBhd2FpdCBpbnN0YWxsQ2VydGlmaWNhdGUodGhpcy5vcHRzLmRldmljZSwgdGhpcy5vcHRzLmN1c3RvbVNTTENlcnQpO1xuICAgICAgICB0aGlzLmxvZ0V2ZW50KCdjdXN0b21DZXJ0SW5zdGFsbGVkJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdHMubGF1bmNoV2l0aElEQiAmJiB0aGlzLmlzU2ltdWxhdG9yKCkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBpZGIgPSBuZXcgSURCKHt1ZGlkfSk7XG4gICAgICAgICAgYXdhaXQgaWRiLmNvbm5lY3QoKTtcbiAgICAgICAgICB0aGlzLm9wdHMuZGV2aWNlLmlkYiA9IGlkYjtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGxvZy5pbmZvKGBpZGIgd2lsbCBub3QgYmUgdXNlZCBmb3IgU2ltdWxhdG9yIGludGVyYWN0aW9uLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2dFdmVudCgnc2ltU3RhcnRlZCcpO1xuICAgICAgaWYgKCFpc0xvZ0NhcHR1cmVTdGFydGVkKSB7XG4gICAgICAgIC8vIFJldHJ5IGxvZyBjYXB0dXJlIGlmIFNpbXVsYXRvciB3YXMgbm90IHJ1bm5pbmcgYmVmb3JlXG4gICAgICAgIGF3YWl0IHN0YXJ0TG9nQ2FwdHVyZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdHMuYXBwKSB7XG4gICAgICBhd2FpdCB0aGlzLmluc3RhbGxBVVQoKTtcbiAgICAgIHRoaXMubG9nRXZlbnQoJ2FwcEluc3RhbGxlZCcpO1xuICAgIH1cblxuICAgIC8vIGlmIHdlIG9ubHkgaGF2ZSBidW5kbGUgaWRlbnRpZmllciBhbmQgbm8gYXBwLCBmYWlsIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGluc3RhbGxlZFxuICAgIGlmICghdGhpcy5vcHRzLmFwcCAmJiB0aGlzLm9wdHMuYnVuZGxlSWQgJiYgIXRoaXMuc2FmYXJpKSB7XG4gICAgICBpZiAoIWF3YWl0IHRoaXMub3B0cy5kZXZpY2UuaXNBcHBJbnN0YWxsZWQodGhpcy5vcHRzLmJ1bmRsZUlkKSkge1xuICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgQXBwIHdpdGggYnVuZGxlIGlkZW50aWZpZXIgJyR7dGhpcy5vcHRzLmJ1bmRsZUlkfScgdW5rbm93bmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdHMucGVybWlzc2lvbnMpIHtcbiAgICAgIGlmICh0aGlzLmlzU2ltdWxhdG9yKCkpIHtcbiAgICAgICAgbG9nLmRlYnVnKCdTZXR0aW5nIHRoZSByZXF1ZXN0ZWQgcGVybWlzc2lvbnMgYmVmb3JlIFdEQSBpcyBzdGFydGVkJyk7XG4gICAgICAgIGZvciAoY29uc3QgW2J1bmRsZUlkLCBwZXJtaXNzaW9uc01hcHBpbmddIG9mIF8udG9QYWlycyhKU09OLnBhcnNlKHRoaXMub3B0cy5wZXJtaXNzaW9ucykpKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5zZXRQZXJtaXNzaW9ucyhidW5kbGVJZCwgcGVybWlzc2lvbnNNYXBwaW5nKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLndhcm4oJ1NldHRpbmcgcGVybWlzc2lvbnMgaXMgb25seSBzdXBwb3J0ZWQgb24gU2ltdWxhdG9yLiAnICtcbiAgICAgICAgICAnVGhlIFwicGVybWlzc2lvbnNcIiBjYXBhYmlsaXR5IHdpbGwgYmUgaWdub3JlZC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgICBpZiAodGhpcy5vcHRzLmNhbGVuZGFyQWNjZXNzQXV0aG9yaXplZCkge1xuICAgICAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmVuYWJsZUNhbGVuZGFyQWNjZXNzKHRoaXMub3B0cy5idW5kbGVJZCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMub3B0cy5jYWxlbmRhckFjY2Vzc0F1dGhvcml6ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuZGlzYWJsZUNhbGVuZGFyQWNjZXNzKHRoaXMub3B0cy5idW5kbGVJZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zdGFydFdkYSh0aGlzLm9wdHMuc2Vzc2lvbklkLCByZWFsRGV2aWNlKTtcblxuICAgIGF3YWl0IHRoaXMuc2V0UmVkdWNlTW90aW9uKHRoaXMub3B0cy5yZWR1Y2VNb3Rpb24pO1xuXG4gICAgYXdhaXQgdGhpcy5zZXRJbml0aWFsT3JpZW50YXRpb24odGhpcy5vcHRzLm9yaWVudGF0aW9uKTtcbiAgICB0aGlzLmxvZ0V2ZW50KCdvcmllbnRhdGlvblNldCcpO1xuXG4gICAgLy8gcmVhbCBkZXZpY2VzIHdpbGwgYmUgaGFuZGxlZCBsYXRlciwgYWZ0ZXIgdGhlIHdlYiBjb250ZXh0IGhhcyBiZWVuIGluaXRpYWxpemVkXG4gICAgaWYgKHRoaXMuaXNTYWZhcmkoKSAmJiAhdGhpcy5pc1JlYWxEZXZpY2UoKVxuICAgICAgJiYgdXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJz49JywgJzEyLjInKSkge1xuICAgICAgLy8gb24gMTIuMiB0aGUgcGFnZSBpcyBub3Qgb3BlbmVkIGluIFdEQVxuICAgICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5vcGVuVXJsKHRoaXMuX2N1cnJlbnRVcmwpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU2FmYXJpKCkgfHwgdGhpcy5vcHRzLmF1dG9XZWJ2aWV3KSB7XG4gICAgICBsb2cuZGVidWcoJ1dhaXRpbmcgZm9yIGluaXRpYWwgd2VidmlldycpO1xuICAgICAgYXdhaXQgdGhpcy5uYXZUb0luaXRpYWxXZWJ2aWV3KCk7XG4gICAgICB0aGlzLmxvZ0V2ZW50KCdpbml0aWFsV2Vidmlld05hdmlnYXRlZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU2FmYXJpKCkgJiYgdGhpcy5pc1JlYWxEZXZpY2UoKSAmJiB1dGlsLmNvbXBhcmVWZXJzaW9ucyh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCAnPj0nLCAnMTIuMicpKSB7XG4gICAgICAvLyBvbiAxMi4yIHRoZSBwYWdlIGlzIG5vdCBvcGVuZWQgaW4gV0RBXG4gICAgICBhd2FpdCB0aGlzLnNldFVybCh0aGlzLl9jdXJyZW50VXJsKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgV2ViRHJpdmVyQWdlbnRSdW5uZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlc3Npb25JZCAtIFRoZSBpZCBvZiB0aGUgdGFyZ2V0IHNlc3Npb24gdG8gbGF1bmNoIFdEQSB3aXRoLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJlYWxEZXZpY2UgLSBFcXVhbHMgdG8gdHJ1ZSBpZiB0aGUgdGVzdCB0YXJnZXQgZGV2aWNlIGlzIGEgcmVhbCBkZXZpY2UuXG4gICAqL1xuICBhc3luYyBzdGFydFdkYSAoc2Vzc2lvbklkLCByZWFsRGV2aWNlKSB7XG4gICAgLy8gRG9uJ3QgY2xlYW51cCB0aGUgcHJvY2Vzc2VzIGlmIHdlYkRyaXZlckFnZW50VXJsIGlzIHNldFxuICAgIGlmICghdXRpbC5oYXNWYWx1ZSh0aGlzLndkYS53ZWJEcml2ZXJBZ2VudFVybCkpIHtcbiAgICAgIGF3YWl0IHRoaXMud2RhLmNsZWFudXBPYnNvbGV0ZVByb2Nlc3NlcygpO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZVBvcnRGb3J3YXJkaW5nID0gdGhpcy5pc1JlYWxEZXZpY2UoKVxuICAgICAgJiYgIXRoaXMud2RhLndlYkRyaXZlckFnZW50VXJsXG4gICAgICAmJiBpc0xvY2FsSG9zdCh0aGlzLndkYS53ZGFCYXNlVXJsKTtcbiAgICBhd2FpdCBERVZJQ0VfQ09OTkVDVElPTlNfRkFDVE9SWS5yZXF1ZXN0Q29ubmVjdGlvbih0aGlzLm9wdHMudWRpZCwgdGhpcy53ZGEudXJsLnBvcnQsIHtcbiAgICAgIGRldmljZVBvcnQ6IHVzZVBvcnRGb3J3YXJkaW5nID8gdGhpcy53ZGEud2RhUmVtb3RlUG9ydCA6IG51bGwsXG4gICAgICB1c2VQb3J0Rm9yd2FyZGluZyxcbiAgICB9KTtcblxuICAgIC8vIExldCBtdWx0aXBsZSBXREEgYmluYXJpZXMgd2l0aCBkaWZmZXJlbnQgZGVyaXZlZCBkYXRhIGZvbGRlcnMgYmUgYnVpbHQgaW4gcGFyYWxsZWxcbiAgICAvLyBDb25jdXJyZW50IFdEQSBidWlsZHMgZnJvbSB0aGUgc2FtZSBzb3VyY2Ugd2lsbCBjYXVzZSB4Y29kZWJ1aWxkIHN5bmNocm9uaXphdGlvbiBlcnJvcnNcbiAgICBsZXQgc3luY2hyb25pemF0aW9uS2V5ID0gWENVSVRlc3REcml2ZXIubmFtZTtcbiAgICBpZiAodGhpcy5vcHRzLnVzZVhjdGVzdHJ1bkZpbGUgfHwgIShhd2FpdCB0aGlzLndkYS5pc1NvdXJjZUZyZXNoKCkpKSB7XG4gICAgICAvLyBGaXJzdC10aW1lIGNvbXBpbGF0aW9uIGlzIGFuIGV4cGVuc2l2ZSBvcGVyYXRpb24sIHdoaWNoIGlzIGRvbmUgZmFzdGVyIGlmIGV4ZWN1dGVkXG4gICAgICAvLyBzZXF1ZW50aWFsbHkuIFhjb2RlYnVpbGQgc3ByZWFkcyB0aGUgbG9hZCBjYXVzZWQgYnkgdGhlIGNsYW5nIGNvbXBpbGVyIHRvIGFsbCBhdmFpbGFibGUgQ1BVIGNvcmVzXG4gICAgICBjb25zdCBkZXJpdmVkRGF0YVBhdGggPSBhd2FpdCB0aGlzLndkYS5yZXRyaWV2ZURlcml2ZWREYXRhUGF0aCgpO1xuICAgICAgaWYgKGRlcml2ZWREYXRhUGF0aCkge1xuICAgICAgICBzeW5jaHJvbml6YXRpb25LZXkgPSBwYXRoLm5vcm1hbGl6ZShkZXJpdmVkRGF0YVBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgICBsb2cuZGVidWcoYFN0YXJ0aW5nIFdlYkRyaXZlckFnZW50IGluaXRpYWxpemF0aW9uIHdpdGggdGhlIHN5bmNocm9uaXphdGlvbiBrZXkgJyR7c3luY2hyb25pemF0aW9uS2V5fSdgKTtcbiAgICBpZiAoU0hBUkVEX1JFU09VUkNFU19HVUFSRC5pc0J1c3koKSAmJiAhdGhpcy5vcHRzLmRlcml2ZWREYXRhUGF0aCAmJiAhdGhpcy5vcHRzLmJvb3RzdHJhcFBhdGgpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgQ29uc2lkZXIgc2V0dGluZyBhIHVuaXF1ZSAnZGVyaXZlZERhdGFQYXRoJyBjYXBhYmlsaXR5IHZhbHVlIGZvciBlYWNoIHBhcmFsbGVsIGRyaXZlciBpbnN0YW5jZSBgICtcbiAgICAgICAgYHRvIGF2b2lkIGNvbmZsaWN0cyBhbmQgc3BlZWQgdXAgdGhlIGJ1aWxkaW5nIHByb2Nlc3NgKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IFNIQVJFRF9SRVNPVVJDRVNfR1VBUkQuYWNxdWlyZShzeW5jaHJvbml6YXRpb25LZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGlmICh0aGlzLm9wdHMudXNlTmV3V0RBKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgQ2FwYWJpbGl0eSAndXNlTmV3V0RBJyBzZXQgdG8gdHJ1ZSwgc28gdW5pbnN0YWxsaW5nIFdEQSBiZWZvcmUgcHJvY2VlZGluZ2ApO1xuICAgICAgICBhd2FpdCB0aGlzLndkYS5xdWl0QW5kVW5pbnN0YWxsKCk7XG4gICAgICAgIHRoaXMubG9nRXZlbnQoJ3dkYVVuaW5zdGFsbGVkJyk7XG4gICAgICB9IGVsc2UgaWYgKCF1dGlsLmhhc1ZhbHVlKHRoaXMud2RhLndlYkRyaXZlckFnZW50VXJsKSkge1xuICAgICAgICBhd2FpdCB0aGlzLndkYS5zZXR1cENhY2hpbmcoKTtcbiAgICAgIH1cblxuICAgICAgLy8gbG9jYWwgaGVscGVyIGZvciB0aGUgdHdvIHBsYWNlcyB3ZSBuZWVkIHRvIHVuaW5zdGFsbCB3ZGEgYW5kIHJlLXN0YXJ0IGl0XG4gICAgICBjb25zdCBxdWl0QW5kVW5pbnN0YWxsID0gYXN5bmMgKG1zZykgPT4ge1xuICAgICAgICBsb2cuZGVidWcobXNnKTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy53ZWJEcml2ZXJBZ2VudFVybCkge1xuICAgICAgICAgIGxvZy5kZWJ1ZygnTm90IHF1aXR0aW5nL3VuaW5zdGFsbGluZyBXZWJEcml2ZXJBZ2VudCBzaW5jZSB3ZWJEcml2ZXJBZ2VudFVybCBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkJyk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgbG9nLndhcm4oJ1F1aXR0aW5nIGFuZCB1bmluc3RhbGxpbmcgV2ViRHJpdmVyQWdlbnQnKTtcbiAgICAgICAgYXdhaXQgdGhpcy53ZGEucXVpdEFuZFVuaW5zdGFsbCgpO1xuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgfTtcblxuICAgICAgLy8gVXNlZCBpbiB0aGUgZm9sbG93aW5nIFdEQSBidWlsZFxuICAgICAgaWYgKHRoaXMub3B0cy5yZXN1bHRCdW5kbGVQYXRoKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlRmVhdHVyZUVuYWJsZWQoQ1VTVE9NSVpFX1JFU1VMVF9CVU5EUEVfUEFUSCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0YXJ0dXBSZXRyaWVzID0gdGhpcy5vcHRzLndkYVN0YXJ0dXBSZXRyaWVzIHx8ICh0aGlzLmlzUmVhbERldmljZSgpID8gV0RBX1JFQUxfREVWX1NUQVJUVVBfUkVUUklFUyA6IFdEQV9TSU1fU1RBUlRVUF9SRVRSSUVTKTtcbiAgICAgIGNvbnN0IHN0YXJ0dXBSZXRyeUludGVydmFsID0gdGhpcy5vcHRzLndkYVN0YXJ0dXBSZXRyeUludGVydmFsIHx8IFdEQV9TVEFSVFVQX1JFVFJZX0lOVEVSVkFMO1xuICAgICAgbG9nLmRlYnVnKGBUcnlpbmcgdG8gc3RhcnQgV2ViRHJpdmVyQWdlbnQgJHtzdGFydHVwUmV0cmllc30gdGltZXMgd2l0aCAke3N0YXJ0dXBSZXRyeUludGVydmFsfW1zIGludGVydmFsYCk7XG4gICAgICBpZiAoIXV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLndkYVN0YXJ0dXBSZXRyaWVzKSAmJiAhdXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMud2RhU3RhcnR1cFJldHJ5SW50ZXJ2YWwpKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgVGhlc2UgdmFsdWVzIGNhbiBiZSBjdXN0b21pemVkIGJ5IGNoYW5naW5nIHdkYVN0YXJ0dXBSZXRyaWVzL3dkYVN0YXJ0dXBSZXRyeUludGVydmFsIGNhcGFiaWxpdGllc2ApO1xuICAgICAgfVxuICAgICAgbGV0IHJldHJ5Q291bnQgPSAwO1xuICAgICAgYXdhaXQgcmV0cnlJbnRlcnZhbChzdGFydHVwUmV0cmllcywgc3RhcnR1cFJldHJ5SW50ZXJ2YWwsIGFzeW5jICgpID0+IHtcbiAgICAgICAgdGhpcy5sb2dFdmVudCgnd2RhU3RhcnRBdHRlbXB0ZWQnKTtcbiAgICAgICAgaWYgKHJldHJ5Q291bnQgPiAwKSB7XG4gICAgICAgICAgbG9nLmluZm8oYFJldHJ5aW5nIFdEQSBzdGFydHVwICgke3JldHJ5Q291bnQgKyAxfSBvZiAke3N0YXJ0dXBSZXRyaWVzfSlgKTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIG9uIHhjb2RlIDEwIGluc3RhbGxkIHdpbGwgb2Z0ZW4gdHJ5IHRvIGFjY2VzcyB0aGUgYXBwIGZyb20gaXRzIHN0YWdpbmdcbiAgICAgICAgICAvLyBkaXJlY3RvcnkgYmVmb3JlIGZ1bGx5IG1vdmluZyBpdCB0aGVyZSwgYW5kIGZhaWwuIFJldHJ5aW5nIG9uY2VcbiAgICAgICAgICAvLyBpbW1lZGlhdGVseSBoZWxwc1xuICAgICAgICAgIGNvbnN0IHJldHJpZXMgPSB0aGlzLnhjb2RlVmVyc2lvbi5tYWpvciA+PSAxMCA/IDIgOiAxO1xuICAgICAgICAgIHRoaXMuY2FjaGVkV2RhU3RhdHVzID0gYXdhaXQgcmV0cnkocmV0cmllcywgdGhpcy53ZGEubGF1bmNoLmJpbmQodGhpcy53ZGEpLCBzZXNzaW9uSWQsIHJlYWxEZXZpY2UpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aGlzLmxvZ0V2ZW50KCd3ZGFTdGFydEZhaWxlZCcpO1xuICAgICAgICAgIHJldHJ5Q291bnQrKztcbiAgICAgICAgICBsZXQgZXJyb3JNc2cgPSBgVW5hYmxlIHRvIGxhdW5jaCBXZWJEcml2ZXJBZ2VudCBiZWNhdXNlIG9mIHhjb2RlYnVpbGQgZmFpbHVyZTogJHtlcnIubWVzc2FnZX1gO1xuICAgICAgICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgICAgICAgICBlcnJvck1zZyArPSBgLiBNYWtlIHN1cmUgeW91IGZvbGxvdyB0aGUgdHV0b3JpYWwgYXQgJHtXREFfUkVBTF9ERVZfVFVUT1JJQUxfVVJMfS4gYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgVHJ5IHRvIHJlbW92ZSB0aGUgV2ViRHJpdmVyQWdlbnRSdW5uZXIgYXBwbGljYXRpb24gZnJvbSB0aGUgZGV2aWNlIGlmIGl0IGlzIGluc3RhbGxlZCBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBhbmQgcmVib290IHRoZSBkZXZpY2UuYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgcXVpdEFuZFVuaW5zdGFsbChlcnJvck1zZyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy53ZGEucHJveHlSZXFSZXMuYmluZCh0aGlzLndkYSk7XG4gICAgICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xuXG4gICAgICAgIGxldCBvcmlnaW5hbFN0YWNrdHJhY2UgPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwoMTUsIDEwMDAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9nRXZlbnQoJ3dkYVNlc3Npb25BdHRlbXB0ZWQnKTtcbiAgICAgICAgICAgIGxvZy5kZWJ1ZygnU2VuZGluZyBjcmVhdGVTZXNzaW9uIGNvbW1hbmQgdG8gV0RBJyk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB0aGlzLmNhY2hlZFdkYVN0YXR1cyA9IHRoaXMuY2FjaGVkV2RhU3RhdHVzIHx8IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvc3RhdHVzJywgJ0dFVCcpO1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0YXJ0V2RhU2Vzc2lvbih0aGlzLm9wdHMuYnVuZGxlSWQsIHRoaXMub3B0cy5wcm9jZXNzQXJndW1lbnRzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICBvcmlnaW5hbFN0YWNrdHJhY2UgPSBlcnIuc3RhY2s7XG4gICAgICAgICAgICAgIGxvZy5kZWJ1ZyhgRmFpbGVkIHRvIGNyZWF0ZSBXREEgc2Vzc2lvbiAoJHtlcnIubWVzc2FnZX0pLiBSZXRyeWluZy4uLmApO1xuICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5sb2dFdmVudCgnd2RhU2Vzc2lvblN0YXJ0ZWQnKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaWYgKG9yaWdpbmFsU3RhY2t0cmFjZSkge1xuICAgICAgICAgICAgbG9nLmRlYnVnKG9yaWdpbmFsU3RhY2t0cmFjZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBlcnJvck1zZyA9IGBVbmFibGUgdG8gc3RhcnQgV2ViRHJpdmVyQWdlbnQgc2Vzc2lvbiBiZWNhdXNlIG9mIHhjb2RlYnVpbGQgZmFpbHVyZTogJHtlcnIubWVzc2FnZX1gO1xuICAgICAgICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgICAgICAgICBlcnJvck1zZyArPSBgIE1ha2Ugc3VyZSB5b3UgZm9sbG93IHRoZSB0dXRvcmlhbCBhdCAke1dEQV9SRUFMX0RFVl9UVVRPUklBTF9VUkx9LiBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBUcnkgdG8gcmVtb3ZlIHRoZSBXZWJEcml2ZXJBZ2VudFJ1bm5lciBhcHBsaWNhdGlvbiBmcm9tIHRoZSBkZXZpY2UgaWYgaXQgaXMgaW5zdGFsbGVkIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYGFuZCByZWJvb3QgdGhlIGRldmljZS5gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCBxdWl0QW5kVW5pbnN0YWxsKGVycm9yTXNnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wdHMuY2xlYXJTeXN0ZW1GaWxlcyAmJiAhdGhpcy5vcHRzLndlYkRyaXZlckFnZW50VXJsKSB7XG4gICAgICAgICAgYXdhaXQgbWFya1N5c3RlbUZpbGVzRm9yQ2xlYW51cCh0aGlzLndkYSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3ZSBleHBlY3QgY2VydGFpbiBzb2NrZXQgZXJyb3JzIHVudGlsIHRoaXMgcG9pbnQsIGJ1dCBub3dcbiAgICAgICAgLy8gbWFyayB0aGluZ3MgYXMgZnVsbHkgd29ya2luZ1xuICAgICAgICB0aGlzLndkYS5mdWxseVN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmxvZ0V2ZW50KCd3ZGFTdGFydGVkJyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHJ1blJlc2V0IChvcHRzID0gbnVsbCkge1xuICAgIHRoaXMubG9nRXZlbnQoJ3Jlc2V0U3RhcnRlZCcpO1xuICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgICBhd2FpdCBydW5SZWFsRGV2aWNlUmVzZXQodGhpcy5vcHRzLmRldmljZSwgb3B0cyB8fCB0aGlzLm9wdHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBydW5TaW11bGF0b3JSZXNldCh0aGlzLm9wdHMuZGV2aWNlLCBvcHRzIHx8IHRoaXMub3B0cyk7XG4gICAgfVxuICAgIHRoaXMubG9nRXZlbnQoJ3Jlc2V0Q29tcGxldGUnKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVNlc3Npb24gKCkge1xuICAgIGF3YWl0IHJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyh0aGlzLnNlcnZlciwgdGhpcy5zZXNzaW9uSWQpO1xuXG4gICAgZm9yIChjb25zdCByZWNvcmRlciBvZiBfLmNvbXBhY3QoW3RoaXMuX3JlY2VudFNjcmVlblJlY29yZGVyLCB0aGlzLl9hdWRpb1JlY29yZGVyXSkpIHtcbiAgICAgIGF3YWl0IHJlY29yZGVyLmludGVycnVwdCh0cnVlKTtcbiAgICAgIGF3YWl0IHJlY29yZGVyLmNsZWFudXAoKTtcbiAgICB9XG5cbiAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLl9wZXJmUmVjb3JkZXJzKSkge1xuICAgICAgYXdhaXQgQi5hbGwodGhpcy5fcGVyZlJlY29yZGVycy5tYXAoKHgpID0+IHguc3RvcCh0cnVlKSkpO1xuICAgICAgdGhpcy5fcGVyZlJlY29yZGVycyA9IFtdO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuc3RvcCgpO1xuXG4gICAgaWYgKHRoaXMud2RhICYmICF0aGlzLm9wdHMud2ViRHJpdmVyQWdlbnRVcmwpIHtcbiAgICAgIGlmICh0aGlzLm9wdHMuY2xlYXJTeXN0ZW1GaWxlcykge1xuICAgICAgICBsZXQgc3luY2hyb25pemF0aW9uS2V5ID0gWENVSVRlc3REcml2ZXIubmFtZTtcbiAgICAgICAgY29uc3QgZGVyaXZlZERhdGFQYXRoID0gYXdhaXQgdGhpcy53ZGEucmV0cmlldmVEZXJpdmVkRGF0YVBhdGgoKTtcbiAgICAgICAgaWYgKGRlcml2ZWREYXRhUGF0aCkge1xuICAgICAgICAgIHN5bmNocm9uaXphdGlvbktleSA9IHBhdGgubm9ybWFsaXplKGRlcml2ZWREYXRhUGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgU0hBUkVEX1JFU09VUkNFU19HVUFSRC5hY3F1aXJlKHN5bmNocm9uaXphdGlvbktleSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IGNsZWFyU3lzdGVtRmlsZXModGhpcy53ZGEpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy5kZWJ1ZygnTm90IGNsZWFyaW5nIGxvZyBmaWxlcy4gVXNlIGBjbGVhclN5c3RlbUZpbGVzYCBjYXBhYmlsaXR5IHRvIHR1cm4gb24uJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVtb3RlKSB7XG4gICAgICBsb2cuZGVidWcoJ0ZvdW5kIGEgcmVtb3RlIGRlYnVnZ2VyIHNlc3Npb24uIFJlbW92aW5nLi4uJyk7XG4gICAgICBhd2FpdCB0aGlzLnN0b3BSZW1vdGUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRzLnJlc2V0T25TZXNzaW9uU3RhcnRPbmx5ID09PSBmYWxzZSkge1xuICAgICAgYXdhaXQgdGhpcy5ydW5SZXNldChPYmplY3QuYXNzaWduKHt9LCB0aGlzLm9wdHMsIHtcbiAgICAgICAgZW5mb3JjZVNpbXVsYXRvclNodXRkb3duOiB0cnVlLFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU2ltdWxhdG9yKCkgJiYgIXRoaXMub3B0cy5ub1Jlc2V0ICYmICEhdGhpcy5vcHRzLmRldmljZSkge1xuICAgICAgaWYgKHRoaXMubGlmZWN5Y2xlRGF0YS5jcmVhdGVTaW0pIHtcbiAgICAgICAgbG9nLmRlYnVnKGBEZWxldGluZyBzaW11bGF0b3IgY3JlYXRlZCBmb3IgdGhpcyBydW4gKHVkaWQ6ICcke3RoaXMub3B0cy51ZGlkfScpYCk7XG4gICAgICAgIGF3YWl0IHNodXRkb3duU2ltdWxhdG9yKHRoaXMub3B0cy5kZXZpY2UpO1xuICAgICAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmRlbGV0ZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNob3VsZFJlc2V0TG9jYXRpb25TZXJ2aXZjZSA9IHRoaXMuaXNSZWFsRGV2aWNlKCkgJiYgISF0aGlzLm9wdHMucmVzZXRMb2NhdGlvblNlcnZpY2U7XG4gICAgaWYgKHNob3VsZFJlc2V0TG9jYXRpb25TZXJ2aXZjZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5tb2JpbGVSZXNldExvY2F0aW9uU2VydmljZSgpO1xuICAgICAgfSBjYXRjaCAoaWdub3JlKSB7IC8qIElnbm9yZSB0aGlzIGVycm9yIHNpbmNlIG1vYmlsZVJlc2V0TG9jYXRpb25TZXJ2aWNlIGFscmVhZHkgbG9nZ2VkIHRoZSBlcnJvciAqLyB9XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzRW1wdHkodGhpcy5sb2dzKSkge1xuICAgICAgYXdhaXQgdGhpcy5sb2dzLnN5c2xvZy5zdG9wQ2FwdHVyZSgpO1xuICAgICAgdGhpcy5sb2dzID0ge307XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWpwZWdTdHJlYW0pIHtcbiAgICAgIGxvZy5pbmZvKCdDbG9zaW5nIE1KUEVHIHN0cmVhbScpO1xuICAgICAgdGhpcy5tanBlZ1N0cmVhbS5zdG9wKCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNldElvcygpO1xuXG4gICAgYXdhaXQgc3VwZXIuZGVsZXRlU2Vzc2lvbigpO1xuICB9XG5cbiAgYXN5bmMgc3RvcCAoKSB7XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMucHJveHlSZXFSZXMgPSBudWxsO1xuXG5cbiAgICBpZiAodGhpcy53ZGEgJiYgdGhpcy53ZGEuZnVsbHlTdGFydGVkKSB7XG4gICAgICBpZiAodGhpcy53ZGEuandwcm94eSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvc2Vzc2lvbi8ke3RoaXMuc2Vzc2lvbklkfWAsICdERUxFVEUnKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLy8gYW4gZXJyb3IgaGVyZSBzaG91bGQgbm90IHNob3J0LWNpcmN1aXQgdGhlIHJlc3Qgb2YgY2xlYW4gdXBcbiAgICAgICAgICBsb2cuZGVidWcoYFVuYWJsZSB0byBERUxFVEUgc2Vzc2lvbiBvbiBXREE6ICcke2Vyci5tZXNzYWdlfScuIENvbnRpbnVpbmcgc2h1dGRvd24uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy53ZGEud2ViRHJpdmVyQWdlbnRVcmwgJiYgdGhpcy5vcHRzLnVzZU5ld1dEQSkge1xuICAgICAgICBhd2FpdCB0aGlzLndkYS5xdWl0KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgREVWSUNFX0NPTk5FQ1RJT05TX0ZBQ1RPUlkucmVsZWFzZUNvbm5lY3Rpb24odGhpcy5vcHRzLnVkaWQpO1xuICB9XG5cbiAgYXN5bmMgZXhlY3V0ZUNvbW1hbmQgKGNtZCwgLi4uYXJncykge1xuICAgIGxvZy5kZWJ1ZyhgRXhlY3V0aW5nIGNvbW1hbmQgJyR7Y21kfSdgKTtcblxuICAgIGlmIChjbWQgPT09ICdyZWNlaXZlQXN5bmNSZXNwb25zZScpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlY2VpdmVBc3luY1Jlc3BvbnNlKC4uLmFyZ3MpO1xuICAgIH1cbiAgICAvLyBUT0RPOiBvbmNlIHRoaXMgZml4IGdldHMgaW50byBiYXNlIGRyaXZlciByZW1vdmUgZnJvbSBoZXJlXG4gICAgaWYgKGNtZCA9PT0gJ2dldFN0YXR1cycpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldFN0YXR1cygpO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgc3VwZXIuZXhlY3V0ZUNvbW1hbmQoY21kLCAuLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIGNvbmZpZ3VyZUFwcCAoKSB7XG4gICAgZnVuY3Rpb24gYXBwSXNQYWNrYWdlT3JCdW5kbGUgKGFwcCkge1xuICAgICAgcmV0dXJuICgvXihbYS16QS1aMC05XFwtX10rXFwuW2EtekEtWjAtOVxcLV9dKykrJC8pLnRlc3QoYXBwKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgYXBwIG5hbWUgaXMgYSBidW5kbGVJZCBhc3NpZ24gaXQgdG8gdGhlIGJ1bmRsZUlkIHByb3BlcnR5XG4gICAgaWYgKCF0aGlzLm9wdHMuYnVuZGxlSWQgJiYgYXBwSXNQYWNrYWdlT3JCdW5kbGUodGhpcy5vcHRzLmFwcCkpIHtcbiAgICAgIHRoaXMub3B0cy5idW5kbGVJZCA9IHRoaXMub3B0cy5hcHA7XG4gICAgICB0aGlzLm9wdHMuYXBwID0gJyc7XG4gICAgfVxuICAgIC8vIHdlIGhhdmUgYSBidW5kbGUgSUQsIGJ1dCBubyBhcHAsIG9yIGFwcCBpcyBhbHNvIGEgYnVuZGxlXG4gICAgaWYgKCh0aGlzLm9wdHMuYnVuZGxlSWQgJiYgYXBwSXNQYWNrYWdlT3JCdW5kbGUodGhpcy5vcHRzLmJ1bmRsZUlkKSkgJiZcbiAgICAgICAgKHRoaXMub3B0cy5hcHAgPT09ICcnIHx8IGFwcElzUGFja2FnZU9yQnVuZGxlKHRoaXMub3B0cy5hcHApKSkge1xuICAgICAgbG9nLmRlYnVnKCdBcHAgaXMgYW4gaU9TIGJ1bmRsZSwgd2lsbCBhdHRlbXB0IHRvIHJ1biBhcyBwcmUtZXhpc3RpbmcnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBmb3Igc3VwcG9ydGVkIGJ1aWxkLWluIGFwcHNcbiAgICBzd2l0Y2ggKF8udG9Mb3dlcih0aGlzLm9wdHMuYXBwKSkge1xuICAgICAgY2FzZSAnc2V0dGluZ3MnOlxuICAgICAgICB0aGlzLm9wdHMuYnVuZGxlSWQgPSAnY29tLmFwcGxlLlByZWZlcmVuY2VzJztcbiAgICAgICAgdGhpcy5vcHRzLmFwcCA9IG51bGw7XG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgJ2NhbGVuZGFyJzpcbiAgICAgICAgdGhpcy5vcHRzLmJ1bmRsZUlkID0gJ2NvbS5hcHBsZS5tb2JpbGVjYWwnO1xuICAgICAgICB0aGlzLm9wdHMuYXBwID0gbnVsbDtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBkb3dubG9hZCBpZiBuZWNlc3NhcnlcbiAgICAgIHRoaXMub3B0cy5hcHAgPSBhd2FpdCB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKHRoaXMub3B0cy5hcHAsICcuYXBwJyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cuZXJyb3IoZXJyKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQmFkIGFwcDogJHt0aGlzLm9wdHMuYXBwfS4gYCArXG4gICAgICAgIGBBcHAgcGF0aHMgbmVlZCB0byBiZSBhYnNvbHV0ZSBvciBhbiBVUkwgdG8gYSBjb21wcmVzc2VkIGFwcCBmaWxlOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRldGVybWluZURldmljZSAoKSB7XG4gICAgLy8gaW4gdGhlIG9uZSBjYXNlIHdoZXJlIHdlIGNyZWF0ZSBhIHNpbSwgd2Ugd2lsbCBzZXQgdGhpcyBzdGF0ZVxuICAgIHRoaXMubGlmZWN5Y2xlRGF0YS5jcmVhdGVTaW0gPSBmYWxzZTtcblxuICAgIC8vIGlmIHdlIGdldCBnZW5lcmljIG5hbWVzLCB0cmFuc2xhdGUgdGhlbVxuICAgIHRoaXMub3B0cy5kZXZpY2VOYW1lID0gdHJhbnNsYXRlRGV2aWNlTmFtZSh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCB0aGlzLm9wdHMuZGV2aWNlTmFtZSk7XG5cbiAgICBjb25zdCBzZXR1cFZlcnNpb25DYXBzID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdGhpcy5vcHRzLmlvc1Nka1ZlcnNpb24gPSBhd2FpdCBnZXRBbmRDaGVja0lvc1Nka1ZlcnNpb24oKTtcbiAgICAgIGxvZy5pbmZvKGBpT1MgU0RLIFZlcnNpb24gc2V0IHRvICcke3RoaXMub3B0cy5pb3NTZGtWZXJzaW9ufSdgKTtcbiAgICAgIGlmICghdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiAmJiB0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbikge1xuICAgICAgICBsb2cuaW5mbyhgTm8gcGxhdGZvcm1WZXJzaW9uIHNwZWNpZmllZC4gVXNpbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIFhjb2RlIHN1cHBvcnRzOiAnJHt0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbn0nLiBgICtcbiAgICAgICAgICBgVGhpcyBtYXkgY2F1c2UgcHJvYmxlbXMgaWYgYSBzaW11bGF0b3IgZG9lcyBub3QgZXhpc3QgZm9yIHRoaXMgcGxhdGZvcm0gdmVyc2lvbi5gKTtcbiAgICAgICAgdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiA9IG5vcm1hbGl6ZVBsYXRmb3JtVmVyc2lvbih0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmICh0aGlzLm9wdHMudWRpZCkge1xuICAgICAgaWYgKHRoaXMub3B0cy51ZGlkLnRvTG93ZXJDYXNlKCkgPT09ICdhdXRvJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMub3B0cy51ZGlkID0gYXdhaXQgZGV0ZWN0VWRpZCgpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAvLyBUcnlpbmcgdG8gZmluZCBtYXRjaGluZyBVRElEIGZvciBTaW11bGF0b3JcbiAgICAgICAgICBsb2cud2FybihgQ2Fubm90IGRldGVjdCBhbnkgY29ubmVjdGVkIHJlYWwgZGV2aWNlcy4gRmFsbGluZyBiYWNrIHRvIFNpbXVsYXRvci4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgZ2V0RXhpc3RpbmdTaW0odGhpcy5vcHRzKTtcbiAgICAgICAgICBpZiAoIWRldmljZSkge1xuICAgICAgICAgICAgLy8gTm8gbWF0Y2hpbmcgU2ltdWxhdG9yIGlzIGZvdW5kLiBUaHJvdyBhbiBlcnJvclxuICAgICAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYENhbm5vdCBkZXRlY3QgdWRpZCBmb3IgJHt0aGlzLm9wdHMuZGV2aWNlTmFtZX0gU2ltdWxhdG9yIHJ1bm5pbmcgaU9TICR7dGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbn1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBNYXRjaGluZyBTaW11bGF0b3IgZXhpc3RzIGFuZCBpcyBmb3VuZC4gVXNlIGl0XG4gICAgICAgICAgdGhpcy5vcHRzLnVkaWQgPSBkZXZpY2UudWRpZDtcbiAgICAgICAgICBjb25zdCBkZXZpY2VQbGF0Zm9ybSA9IG5vcm1hbGl6ZVBsYXRmb3JtVmVyc2lvbihhd2FpdCBkZXZpY2UuZ2V0UGxhdGZvcm1WZXJzaW9uKCkpO1xuICAgICAgICAgIGlmICh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uICE9PSBkZXZpY2VQbGF0Zm9ybSkge1xuICAgICAgICAgICAgdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiA9IGRldmljZVBsYXRmb3JtO1xuICAgICAgICAgICAgbG9nLmluZm8oYFNldCBwbGF0Zm9ybVZlcnNpb24gdG8gJyR7ZGV2aWNlUGxhdGZvcm19JyB0byBtYXRjaCB0aGUgZGV2aWNlIHdpdGggZ2l2ZW4gVURJRGApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCBzZXR1cFZlcnNpb25DYXBzKCk7XG4gICAgICAgICAgcmV0dXJuIHtkZXZpY2UsIHJlYWxEZXZpY2U6IGZhbHNlLCB1ZGlkOiBkZXZpY2UudWRpZH07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG1ha2Ugc3VyZSBpdCBpcyBhIGNvbm5lY3RlZCBkZXZpY2UuIElmIG5vdCwgdGhlIHVkaWQgcGFzc2VkIGluIGlzIGludmFsaWRcbiAgICAgICAgY29uc3QgZGV2aWNlcyA9IGF3YWl0IGdldENvbm5lY3RlZERldmljZXMoKTtcbiAgICAgICAgbG9nLmRlYnVnKGBBdmFpbGFibGUgZGV2aWNlczogJHtkZXZpY2VzLmpvaW4oJywgJyl9YCk7XG4gICAgICAgIGlmICghZGV2aWNlcy5pbmNsdWRlcyh0aGlzLm9wdHMudWRpZCkpIHtcbiAgICAgICAgICAvLyBjaGVjayBmb3IgYSBwYXJ0aWN1bGFyIHNpbXVsYXRvclxuICAgICAgICAgIGxvZy5kZWJ1ZyhgTm8gcmVhbCBkZXZpY2Ugd2l0aCB1ZGlkICcke3RoaXMub3B0cy51ZGlkfScuIExvb2tpbmcgZm9yIHNpbXVsYXRvcmApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBnZXRTaW11bGF0b3IodGhpcy5vcHRzLnVkaWQsIHtcbiAgICAgICAgICAgICAgZGV2aWNlc1NldFBhdGg6IHRoaXMub3B0cy5zaW11bGF0b3JEZXZpY2VzU2V0UGF0aCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHtkZXZpY2UsIHJlYWxEZXZpY2U6IGZhbHNlLCB1ZGlkOiB0aGlzLm9wdHMudWRpZH07XG4gICAgICAgICAgfSBjYXRjaCAoaWduKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZGV2aWNlIG9yIHNpbXVsYXRvciBVRElEOiAnJHt0aGlzLm9wdHMudWRpZH0nYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGdldFJlYWxEZXZpY2VPYmoodGhpcy5vcHRzLnVkaWQpO1xuICAgICAgcmV0dXJuIHtkZXZpY2UsIHJlYWxEZXZpY2U6IHRydWUsIHVkaWQ6IHRoaXMub3B0cy51ZGlkfTtcbiAgICB9XG5cbiAgICAvLyBOb3cgd2Uga25vdyBmb3Igc3VyZSB0aGUgZGV2aWNlIHdpbGwgYmUgYSBTaW11bGF0b3JcbiAgICBhd2FpdCBzZXR1cFZlcnNpb25DYXBzKCk7XG4gICAgaWYgKHRoaXMub3B0cy5lbmZvcmNlRnJlc2hTaW11bGF0b3JDcmVhdGlvbikge1xuICAgICAgbG9nLmRlYnVnKGBOZXcgc2ltdWxhdG9yIGlzIHJlcXVlc3RlZC4gSWYgdGhpcyBpcyBub3Qgd2FudGVkLCBzZXQgJ2VuZm9yY2VGcmVzaFNpbXVsYXRvckNyZWF0aW9uJyBjYXBhYmlsaXR5IHRvIGZhbHNlYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZpZ3VyZSBvdXQgdGhlIGNvcnJlY3Qgc2ltdWxhdG9yIHRvIHVzZSwgZ2l2ZW4gdGhlIGRlc2lyZWQgY2FwYWJpbGl0aWVzXG4gICAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBnZXRFeGlzdGluZ1NpbSh0aGlzLm9wdHMpO1xuXG4gICAgICAvLyBjaGVjayBmb3IgYW4gZXhpc3Rpbmcgc2ltdWxhdG9yXG4gICAgICBpZiAoZGV2aWNlKSB7XG4gICAgICAgIHJldHVybiB7ZGV2aWNlLCByZWFsRGV2aWNlOiBmYWxzZSwgdWRpZDogZGV2aWNlLnVkaWR9O1xuICAgICAgfVxuXG4gICAgICBsb2cuaW5mbygnU2ltdWxhdG9yIHVkaWQgbm90IHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgLy8gbm8gZGV2aWNlIG9mIHRoaXMgdHlwZSBleGlzdHMsIG9yIHRoZXkgcmVxdWVzdCBuZXcgc2ltLCBzbyBjcmVhdGUgb25lXG4gICAgbG9nLmluZm8oJ1VzaW5nIGRlc2lyZWQgY2FwcyB0byBjcmVhdGUgYSBuZXcgc2ltdWxhdG9yJyk7XG4gICAgY29uc3QgZGV2aWNlID0gYXdhaXQgdGhpcy5jcmVhdGVTaW0oKTtcbiAgICByZXR1cm4ge2RldmljZSwgcmVhbERldmljZTogZmFsc2UsIHVkaWQ6IGRldmljZS51ZGlkfTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0U2ltICgpIHtcbiAgICBjb25zdCBydW5PcHRzID0ge1xuICAgICAgc2NhbGVGYWN0b3I6IHRoaXMub3B0cy5zY2FsZUZhY3RvcixcbiAgICAgIGNvbm5lY3RIYXJkd2FyZUtleWJvYXJkOiAhIXRoaXMub3B0cy5jb25uZWN0SGFyZHdhcmVLZXlib2FyZCxcbiAgICAgIHBhc3RlYm9hcmRBdXRvbWF0aWNTeW5jOiB0aGlzLm9wdHMuc2ltdWxhdG9yUGFzdGVib2FyZEF1dG9tYXRpY1N5bmMgPz8gJ29mZicsXG4gICAgICBpc0hlYWRsZXNzOiAhIXRoaXMub3B0cy5pc0hlYWRsZXNzLFxuICAgICAgdHJhY2VQb2ludGVyOiB0aGlzLm9wdHMuc2ltdWxhdG9yVHJhY2VQb2ludGVyLFxuICAgICAgZGV2aWNlUHJlZmVyZW5jZXM6IHt9LFxuICAgIH07XG5cbiAgICAvLyBhZGQgdGhlIHdpbmRvdyBjZW50ZXIsIGlmIGl0IGlzIHNwZWNpZmllZFxuICAgIGlmICh0aGlzLm9wdHMuU2ltdWxhdG9yV2luZG93Q2VudGVyKSB7XG4gICAgICBydW5PcHRzLmRldmljZVByZWZlcmVuY2VzLlNpbXVsYXRvcldpbmRvd0NlbnRlciA9IHRoaXMub3B0cy5TaW11bGF0b3JXaW5kb3dDZW50ZXI7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNJbnRlZ2VyKHRoaXMub3B0cy5zaW11bGF0b3JTdGFydHVwVGltZW91dCkpIHtcbiAgICAgIHJ1bk9wdHMuc3RhcnR1cFRpbWVvdXQgPSB0aGlzLm9wdHMuc2ltdWxhdG9yU3RhcnR1cFRpbWVvdXQ7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyB0byB3b3JrYXJvdW5kIFhDVGVzdCBidWcgYWJvdXQgY2hhbmdpbmcgU2ltdWxhdG9yXG4gICAgLy8gb3JpZW50YXRpb24gaXMgbm90IHN5bmNocm9uaXplZCB0byB0aGUgYWN0dWFsIHdpbmRvdyBvcmllbnRhdGlvblxuICAgIGNvbnN0IG9yaWVudGF0aW9uID0gXy5pc1N0cmluZyh0aGlzLm9wdHMub3JpZW50YXRpb24pICYmIHRoaXMub3B0cy5vcmllbnRhdGlvbi50b1VwcGVyQ2FzZSgpO1xuICAgIHN3aXRjaCAob3JpZW50YXRpb24pIHtcbiAgICAgIGNhc2UgJ0xBTkRTQ0FQRSc6XG4gICAgICAgIHJ1bk9wdHMuZGV2aWNlUHJlZmVyZW5jZXMuU2ltdWxhdG9yV2luZG93T3JpZW50YXRpb24gPSAnTGFuZHNjYXBlTGVmdCc7XG4gICAgICAgIHJ1bk9wdHMuZGV2aWNlUHJlZmVyZW5jZXMuU2ltdWxhdG9yV2luZG93Um90YXRpb25BbmdsZSA9IDkwO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1BPUlRSQUlUJzpcbiAgICAgICAgcnVuT3B0cy5kZXZpY2VQcmVmZXJlbmNlcy5TaW11bGF0b3JXaW5kb3dPcmllbnRhdGlvbiA9ICdQb3J0cmFpdCc7XG4gICAgICAgIHJ1bk9wdHMuZGV2aWNlUHJlZmVyZW5jZXMuU2ltdWxhdG9yV2luZG93Um90YXRpb25BbmdsZSA9IDA7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2UucnVuKHJ1bk9wdHMpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlU2ltICgpIHtcbiAgICB0aGlzLmxpZmVjeWNsZURhdGEuY3JlYXRlU2ltID0gdHJ1ZTtcblxuICAgIC8vIEdldCBwbGF0Zm9ybSBuYW1lIGZyb20gY29uc3Qgc2luY2UgaXQgbXVzdCBiZSBjYXNlIHNlbnNpdGl2ZSB0byBjcmVhdGUgYSBuZXcgc2ltdWxhdG9yXG4gICAgY29uc3QgcGxhdGZvcm1OYW1lID0gdGhpcy5pc1R2T1MoKSA/IFBMQVRGT1JNX05BTUVfVFZPUyA6IFBMQVRGT1JNX05BTUVfSU9TO1xuXG4gICAgLy8gY3JlYXRlIHNpbSBmb3IgY2Fwc1xuICAgIGNvbnN0IHNpbSA9IGF3YWl0IGNyZWF0ZVNpbSh0aGlzLm9wdHMsIHBsYXRmb3JtTmFtZSk7XG4gICAgbG9nLmluZm8oYENyZWF0ZWQgc2ltdWxhdG9yIHdpdGggdWRpZCAnJHtzaW0udWRpZH0nLmApO1xuXG4gICAgcmV0dXJuIHNpbTtcbiAgfVxuXG4gIGFzeW5jIGxhdW5jaEFwcCAoKSB7XG4gICAgY29uc3QgQVBQX0xBVU5DSF9USU1FT1VUID0gMjAgKiAxMDAwO1xuXG4gICAgdGhpcy5sb2dFdmVudCgnYXBwTGF1bmNoQXR0ZW1wdGVkJyk7XG4gICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5zaW1jdGwubGF1bmNoQXBwKHRoaXMub3B0cy5idW5kbGVJZCk7XG5cbiAgICBsZXQgY2hlY2tTdGF0dXMgPSBhc3luYyAoKSA9PiB7XG4gICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgIGxldCBjdXJyZW50QXBwID0gcmVzcG9uc2UuY3VycmVudEFwcC5idW5kbGVJRDtcbiAgICAgIGlmIChjdXJyZW50QXBwICE9PSB0aGlzLm9wdHMuYnVuZGxlSWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMub3B0cy5idW5kbGVJZH0gbm90IGluIGZvcmVncm91bmQuICR7Y3VycmVudEFwcH0gaXMgaW4gZm9yZWdyb3VuZGApO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBsb2cuaW5mbyhgV2FpdGluZyBmb3IgJyR7dGhpcy5vcHRzLmJ1bmRsZUlkfScgdG8gYmUgaW4gZm9yZWdyb3VuZGApO1xuICAgIGxldCByZXRyaWVzID0gcGFyc2VJbnQoQVBQX0xBVU5DSF9USU1FT1VUIC8gMjAwLCAxMCk7XG4gICAgYXdhaXQgcmV0cnlJbnRlcnZhbChyZXRyaWVzLCAyMDAsIGNoZWNrU3RhdHVzKTtcbiAgICBsb2cuaW5mbyhgJHt0aGlzLm9wdHMuYnVuZGxlSWR9IGlzIGluIGZvcmVncm91bmRgKTtcbiAgICB0aGlzLmxvZ0V2ZW50KCdhcHBMYXVuY2hlZCcpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRXZGFTZXNzaW9uIChidW5kbGVJZCwgcHJvY2Vzc0FyZ3VtZW50cykge1xuICAgIGNvbnN0IGFyZ3MgPSBwcm9jZXNzQXJndW1lbnRzID8gKHByb2Nlc3NBcmd1bWVudHMuYXJncyB8fCBbXSkgOiBbXTtcbiAgICBpZiAoIV8uaXNBcnJheShhcmdzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcm9jZXNzQXJndW1lbnRzLmFyZ3MgY2FwYWJpbGl0eSBpcyBleHBlY3RlZCB0byBiZSBhbiBhcnJheS4gYCArXG4gICAgICAgIGAke0pTT04uc3RyaW5naWZ5KGFyZ3MpfSBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gICAgfVxuICAgIGNvbnN0IGVudiA9IHByb2Nlc3NBcmd1bWVudHMgPyAocHJvY2Vzc0FyZ3VtZW50cy5lbnYgfHwge30pIDoge307XG4gICAgaWYgKCFfLmlzUGxhaW5PYmplY3QoZW52KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcm9jZXNzQXJndW1lbnRzLmVudiBjYXBhYmlsaXR5IGlzIGV4cGVjdGVkIHRvIGJlIGEgZGljdGlvbmFyeS4gYCArXG4gICAgICAgIGAke0pTT04uc3RyaW5naWZ5KGVudil9IGlzIGdpdmVuIGluc3RlYWRgKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMubGFuZ3VhZ2UpKSB7XG4gICAgICBhcmdzLnB1c2goJy1BcHBsZUxhbmd1YWdlcycsIGAoJHt0aGlzLm9wdHMubGFuZ3VhZ2V9KWApO1xuICAgICAgYXJncy5wdXNoKCctTlNMYW5ndWFnZXMnLCBgKCR7dGhpcy5vcHRzLmxhbmd1YWdlfSlgKTtcbiAgICB9XG4gICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLmxvY2FsZSkpIHtcbiAgICAgIGFyZ3MucHVzaCgnLUFwcGxlTG9jYWxlJywgdGhpcy5vcHRzLmxvY2FsZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0cy5ub1Jlc2V0KSB7XG4gICAgICBpZiAoXy5pc05pbCh0aGlzLm9wdHMuc2hvdWxkVGVybWluYXRlQXBwKSkge1xuICAgICAgICB0aGlzLm9wdHMuc2hvdWxkVGVybWluYXRlQXBwID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoXy5pc05pbCh0aGlzLm9wdHMuZm9yY2VBcHBMYXVuY2gpKSB7XG4gICAgICAgIHRoaXMub3B0cy5mb3JjZUFwcExhdW5jaCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHdkYUNhcHMgPSB7XG4gICAgICBidW5kbGVJZDogdGhpcy5vcHRzLmF1dG9MYXVuY2ggPT09IGZhbHNlID8gdW5kZWZpbmVkIDogYnVuZGxlSWQsXG4gICAgICBhcmd1bWVudHM6IGFyZ3MsXG4gICAgICBlbnZpcm9ubWVudDogZW52LFxuICAgICAgZXZlbnRsb29wSWRsZURlbGF5U2VjOiB0aGlzLm9wdHMud2RhRXZlbnRsb29wSWRsZURlbGF5ID8/IDAsXG4gICAgICBzaG91bGRXYWl0Rm9yUXVpZXNjZW5jZTogdGhpcy5vcHRzLndhaXRGb3JRdWllc2NlbmNlID8/IHRydWUsXG4gICAgICBzaG91bGRVc2VUZXN0TWFuYWdlckZvclZpc2liaWxpdHlEZXRlY3Rpb246IHRoaXMub3B0cy5zaW1wbGVJc1Zpc2libGVDaGVjayA/PyBmYWxzZSxcbiAgICAgIG1heFR5cGluZ0ZyZXF1ZW5jeTogdGhpcy5vcHRzLm1heFR5cGluZ0ZyZXF1ZW5jeSA/PyA2MCxcbiAgICAgIHNob3VsZFVzZVNpbmdsZXRvblRlc3RNYW5hZ2VyOiB0aGlzLm9wdHMuc2hvdWxkVXNlU2luZ2xldG9uVGVzdE1hbmFnZXIgPz8gdHJ1ZSxcbiAgICAgIHdhaXRGb3JJZGxlVGltZW91dDogdGhpcy5vcHRzLndhaXRGb3JJZGxlVGltZW91dCxcbiAgICAgIHNob3VsZFVzZUNvbXBhY3RSZXNwb25zZXM6IHRoaXMub3B0cy5zaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzLFxuICAgICAgZWxlbWVudFJlc3BvbnNlRmllbGRzOiB0aGlzLm9wdHMuZWxlbWVudFJlc3BvbnNlRmllbGRzLFxuICAgICAgZGlzYWJsZUF1dG9tYXRpY1NjcmVlbnNob3RzOiB0aGlzLm9wdHMuZGlzYWJsZUF1dG9tYXRpY1NjcmVlbnNob3RzLFxuICAgICAgc2hvdWxkVGVybWluYXRlQXBwOiB0aGlzLm9wdHMuc2hvdWxkVGVybWluYXRlQXBwID8/IHRydWUsXG4gICAgICBmb3JjZUFwcExhdW5jaDogdGhpcy5vcHRzLmZvcmNlQXBwTGF1bmNoID8/IHRydWUsXG4gICAgICB1c2VOYXRpdmVDYWNoaW5nU3RyYXRlZ3k6IHRoaXMub3B0cy51c2VOYXRpdmVDYWNoaW5nU3RyYXRlZ3kgPz8gdHJ1ZSxcbiAgICAgIGZvcmNlU2ltdWxhdG9yU29mdHdhcmVLZXlib2FyZFByZXNlbmNlOiB0aGlzLm9wdHMuZm9yY2VTaW11bGF0b3JTb2Z0d2FyZUtleWJvYXJkUHJlc2VuY2VcbiAgICAgICAgPz8gKHRoaXMub3B0cy5jb25uZWN0SGFyZHdhcmVLZXlib2FyZCA9PT0gdHJ1ZSA/IGZhbHNlIDogdHJ1ZSksXG4gICAgfTtcbiAgICBpZiAodGhpcy5vcHRzLmF1dG9BY2NlcHRBbGVydHMpIHtcbiAgICAgIHdkYUNhcHMuZGVmYXVsdEFsZXJ0QWN0aW9uID0gJ2FjY2VwdCc7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuYXV0b0Rpc21pc3NBbGVydHMpIHtcbiAgICAgIHdkYUNhcHMuZGVmYXVsdEFsZXJ0QWN0aW9uID0gJ2Rpc21pc3MnO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvc2Vzc2lvbicsICdQT1NUJywge1xuICAgICAgY2FwYWJpbGl0aWVzOiB7XG4gICAgICAgIGZpcnN0TWF0Y2g6IFt3ZGFDYXBzXSxcbiAgICAgICAgYWx3YXlzTWF0Y2g6IHt9LFxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gT3ZlcnJpZGUgUHJveHkgbWV0aG9kcyBmcm9tIEJhc2VEcml2ZXJcbiAgcHJveHlBY3RpdmUgKCkge1xuICAgIHJldHVybiB0aGlzLmp3cFByb3h5QWN0aXZlO1xuICB9XG5cbiAgZ2V0UHJveHlBdm9pZExpc3QgKCkge1xuICAgIGlmICh0aGlzLmlzV2VidmlldygpKSB7XG4gICAgICByZXR1cm4gTk9fUFJPWFlfV0VCX0xJU1Q7XG4gICAgfVxuICAgIHJldHVybiBOT19QUk9YWV9OQVRJVkVfTElTVDtcbiAgfVxuXG4gIGNhblByb3h5ICgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlzU2FmYXJpICgpIHtcbiAgICByZXR1cm4gISF0aGlzLnNhZmFyaTtcbiAgfVxuXG4gIGlzUmVhbERldmljZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0cy5yZWFsRGV2aWNlO1xuICB9XG5cbiAgaXNTaW11bGF0b3IgKCkge1xuICAgIHJldHVybiAhdGhpcy5vcHRzLnJlYWxEZXZpY2U7XG4gIH1cblxuICBpc1R2T1MgKCkge1xuICAgIHJldHVybiBfLnRvTG93ZXIodGhpcy5vcHRzLnBsYXRmb3JtTmFtZSkgPT09IF8udG9Mb3dlcihQTEFURk9STV9OQU1FX1RWT1MpO1xuICB9XG5cbiAgaXNXZWJ2aWV3ICgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1NhZmFyaSgpIHx8IHRoaXMuaXNXZWJDb250ZXh0KCk7XG4gIH1cblxuICB2YWxpZGF0ZUxvY2F0b3JTdHJhdGVneSAoc3RyYXRlZ3kpIHtcbiAgICBzdXBlci52YWxpZGF0ZUxvY2F0b3JTdHJhdGVneShzdHJhdGVneSwgdGhpcy5pc1dlYkNvbnRleHQoKSk7XG4gIH1cblxuICB2YWxpZGF0ZURlc2lyZWRDYXBzIChjYXBzKSB7XG4gICAgaWYgKCFzdXBlci52YWxpZGF0ZURlc2lyZWRDYXBzKGNhcHMpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBzdXJlIHRoYXQgdGhlIGNhcGFiaWxpdGllcyBoYXZlIG9uZSBvZiBgYXBwYCBvciBgYnVuZGxlSWRgXG4gICAgaWYgKF8udG9Mb3dlcihjYXBzLmJyb3dzZXJOYW1lKSAhPT0gJ3NhZmFyaScgJiYgIWNhcHMuYXBwICYmICFjYXBzLmJ1bmRsZUlkKSB7XG4gICAgICBsb2cuaW5mbygnVGhlIGRlc2lyZWQgY2FwYWJpbGl0aWVzIGluY2x1ZGUgbmVpdGhlciBhbiBhcHAgbm9yIGEgYnVuZGxlSWQuICcgK1xuICAgICAgICAnV2ViRHJpdmVyQWdlbnQgd2lsbCBiZSBzdGFydGVkIHdpdGhvdXQgdGhlIGRlZmF1bHQgYXBwJyk7XG4gICAgfVxuXG4gICAgaWYgKCF1dGlsLmNvZXJjZVZlcnNpb24oY2Fwcy5wbGF0Zm9ybVZlcnNpb24sIGZhbHNlKSkge1xuICAgICAgbG9nLndhcm4oYCdwbGF0Zm9ybVZlcnNpb24nIGNhcGFiaWxpdHkgKCcke2NhcHMucGxhdGZvcm1WZXJzaW9ufScpIGlzIG5vdCBhIHZhbGlkIHZlcnNpb24gbnVtYmVyLiBgICtcbiAgICAgICAgYENvbnNpZGVyIGZpeGluZyBpdCBvciBiZSByZWFkeSB0byBleHBlcmllbmNlIGFuIGluY29uc2lzdGVudCBkcml2ZXIgYmVoYXZpb3IuYCk7XG4gICAgfVxuXG4gICAgbGV0IHZlcmlmeVByb2Nlc3NBcmd1bWVudCA9IChwcm9jZXNzQXJndW1lbnRzKSA9PiB7XG4gICAgICBjb25zdCB7YXJncywgZW52fSA9IHByb2Nlc3NBcmd1bWVudHM7XG4gICAgICBpZiAoIV8uaXNOaWwoYXJncykgJiYgIV8uaXNBcnJheShhcmdzKSkge1xuICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdygncHJvY2Vzc0FyZ3VtZW50cy5hcmdzIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncycpO1xuICAgICAgfVxuICAgICAgaWYgKCFfLmlzTmlsKGVudikgJiYgIV8uaXNQbGFpbk9iamVjdChlbnYpKSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KCdwcm9jZXNzQXJndW1lbnRzLmVudiBtdXN0IGJlIGFuIG9iamVjdCA8a2V5LHZhbHVlPiBwYWlyIHthOmIsIGM6ZH0nKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gYHByb2Nlc3NBcmd1bWVudHNgIHNob3VsZCBiZSBKU09OIHN0cmluZyBvciBhbiBvYmplY3Qgd2l0aCBhcmd1bWVudHMgYW5kLyBlbnZpcm9ubWVudCBkZXRhaWxzXG4gICAgaWYgKGNhcHMucHJvY2Vzc0FyZ3VtZW50cykge1xuICAgICAgaWYgKF8uaXNTdHJpbmcoY2Fwcy5wcm9jZXNzQXJndW1lbnRzKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIHRyeSB0byBwYXJzZSB0aGUgc3RyaW5nIGFzIEpTT05cbiAgICAgICAgICBjYXBzLnByb2Nlc3NBcmd1bWVudHMgPSBKU09OLnBhcnNlKGNhcHMucHJvY2Vzc0FyZ3VtZW50cyk7XG4gICAgICAgICAgdmVyaWZ5UHJvY2Vzc0FyZ3VtZW50KGNhcHMucHJvY2Vzc0FyZ3VtZW50cyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxvZy5lcnJvckFuZFRocm93KGBwcm9jZXNzQXJndW1lbnRzIG11c3QgYmUgYSBKU09OIGZvcm1hdCBvciBhbiBvYmplY3Qgd2l0aCBmb3JtYXQge2FyZ3MgOiBbXSwgZW52IDoge2E6YiwgYzpkfX0uIGAgK1xuICAgICAgICAgICAgYEJvdGggZW52aXJvbm1lbnQgYW5kIGFyZ3VtZW50IGNhbiBiZSBudWxsLiBFcnJvcjogJHtlcnJ9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXy5pc1BsYWluT2JqZWN0KGNhcHMucHJvY2Vzc0FyZ3VtZW50cykpIHtcbiAgICAgICAgdmVyaWZ5UHJvY2Vzc0FyZ3VtZW50KGNhcHMucHJvY2Vzc0FyZ3VtZW50cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgJ3Byb2Nlc3NBcmd1bWVudHMgbXVzdCBiZSBhbiBvYmplY3QsIG9yIGEgc3RyaW5nIEpTT04gb2JqZWN0IHdpdGggZm9ybWF0IHthcmdzIDogW10sIGVudiA6IHthOmIsIGM6ZH19LiBgICtcbiAgICAgICAgICBgQm90aCBlbnZpcm9ubWVudCBhbmQgYXJndW1lbnQgY2FuIGJlIG51bGwuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gdGhlcmUgaXMgbm8gcG9pbnQgaW4gaGF2aW5nIGBrZXljaGFpblBhdGhgIHdpdGhvdXQgYGtleWNoYWluUGFzc3dvcmRgXG4gICAgaWYgKChjYXBzLmtleWNoYWluUGF0aCAmJiAhY2Fwcy5rZXljaGFpblBhc3N3b3JkKSB8fCAoIWNhcHMua2V5Y2hhaW5QYXRoICYmIGNhcHMua2V5Y2hhaW5QYXNzd29yZCkpIHtcbiAgICAgIGxvZy5lcnJvckFuZFRocm93KGBJZiAna2V5Y2hhaW5QYXRoJyBpcyBzZXQsICdrZXljaGFpblBhc3N3b3JkJyBtdXN0IGFsc28gYmUgc2V0IChhbmQgdmljZSB2ZXJzYSkuYCk7XG4gICAgfVxuXG4gICAgLy8gYHJlc2V0T25TZXNzaW9uU3RhcnRPbmx5YCBzaG91bGQgYmUgc2V0IHRvIHRydWUgYnkgZGVmYXVsdFxuICAgIHRoaXMub3B0cy5yZXNldE9uU2Vzc2lvblN0YXJ0T25seSA9ICF1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy5yZXNldE9uU2Vzc2lvblN0YXJ0T25seSkgfHwgdGhpcy5vcHRzLnJlc2V0T25TZXNzaW9uU3RhcnRPbmx5O1xuICAgIHRoaXMub3B0cy51c2VOZXdXREEgPSB1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy51c2VOZXdXREEpID8gdGhpcy5vcHRzLnVzZU5ld1dEQSA6IGZhbHNlO1xuXG4gICAgaWYgKGNhcHMuY29tbWFuZFRpbWVvdXRzKSB7XG4gICAgICBjYXBzLmNvbW1hbmRUaW1lb3V0cyA9IG5vcm1hbGl6ZUNvbW1hbmRUaW1lb3V0cyhjYXBzLmNvbW1hbmRUaW1lb3V0cyk7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNTdHJpbmcoY2Fwcy53ZWJEcml2ZXJBZ2VudFVybCkpIHtcbiAgICAgIGNvbnN0IHtwcm90b2NvbCwgaG9zdH0gPSB1cmwucGFyc2UoY2Fwcy53ZWJEcml2ZXJBZ2VudFVybCk7XG4gICAgICBpZiAoXy5pc0VtcHR5KHByb3RvY29sKSB8fCBfLmlzRW1wdHkoaG9zdCkpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYCd3ZWJEcml2ZXJBZ2VudFVybCcgY2FwYWJpbGl0eSBpcyBleHBlY3RlZCB0byBjb250YWluIGEgdmFsaWQgV2ViRHJpdmVyQWdlbnQgc2VydmVyIFVSTC4gYCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGAnJHtjYXBzLndlYkRyaXZlckFnZW50VXJsfScgaXMgZ2l2ZW4gaW5zdGVhZGApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjYXBzLmJyb3dzZXJOYW1lKSB7XG4gICAgICBpZiAoY2Fwcy5idW5kbGVJZCkge1xuICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgJ2Jyb3dzZXJOYW1lJyBjYW5ub3QgYmUgc2V0IHRvZ2V0aGVyIHdpdGggJ2J1bmRsZUlkJyBjYXBhYmlsaXR5YCk7XG4gICAgICB9XG4gICAgICAvLyB3YXJuIGlmIHRoZSBjYXBhYmlsaXRpZXMgaGF2ZSBib3RoIGBhcHBgIGFuZCBgYnJvd3NlciwgYWx0aG91Z2ggdGhpc1xuICAgICAgLy8gaXMgY29tbW9uIHdpdGggc2VsZW5pdW0gZ3JpZFxuICAgICAgaWYgKGNhcHMuYXBwKSB7XG4gICAgICAgIGxvZy53YXJuKGBUaGUgY2FwYWJpbGl0aWVzIHNob3VsZCBnZW5lcmFsbHkgbm90IGluY2x1ZGUgYm90aCBhbiAnYXBwJyBhbmQgYSAnYnJvd3Nlck5hbWUnYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNhcHMucGVybWlzc2lvbnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAoY29uc3QgW2J1bmRsZUlkLCBwZXJtc10gb2YgXy50b1BhaXJzKEpTT04ucGFyc2UoY2Fwcy5wZXJtaXNzaW9ucykpKSB7XG4gICAgICAgICAgaWYgKCFfLmlzU3RyaW5nKGJ1bmRsZUlkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtKU09OLnN0cmluZ2lmeShidW5kbGVJZCl9JyBtdXN0IGJlIGEgc3RyaW5nYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghXy5pc1BsYWluT2JqZWN0KHBlcm1zKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtKU09OLnN0cmluZ2lmeShwZXJtcyl9JyBtdXN0IGJlIGEgSlNPTiBvYmplY3RgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYCcke2NhcHMucGVybWlzc2lvbnN9JyBpcyBleHBlY3RlZCB0byBiZSBhIHZhbGlkIG9iamVjdCB3aXRoIGZvcm1hdCBgICtcbiAgICAgICAgICBge1wiPGJ1bmRsZUlkMT5cIjoge1wiPHNlcnZpY2VOYW1lMT5cIjogXCI8c2VydmljZVN0YXR1czE+XCIsIC4uLn0sIC4uLn0uIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2Fwcy5wbGF0Zm9ybVZlcnNpb24gJiYgIXV0aWwuY29lcmNlVmVyc2lvbihjYXBzLnBsYXRmb3JtVmVyc2lvbiwgZmFsc2UpKSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgJ3BsYXRmb3JtVmVyc2lvbicgbXVzdCBiZSBhIHZhbGlkIHZlcnNpb24gbnVtYmVyLiBgICtcbiAgICAgICAgYCcke2NhcHMucGxhdGZvcm1WZXJzaW9ufScgaXMgZ2l2ZW4gaW5zdGVhZC5gKTtcbiAgICB9XG5cbiAgICAvLyBhZGRpdGlvbmFsV2Vidmlld0J1bmRsZUlkcyBpcyBhbiBhcnJheSwgSlNPTiBhcnJheSwgb3Igc3RyaW5nXG4gICAgaWYgKGNhcHMuYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMpIHtcbiAgICAgIGNhcHMuYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMgPSB0aGlzLmhlbHBlcnMucGFyc2VDYXBzQXJyYXkoY2Fwcy5hZGRpdGlvbmFsV2Vidmlld0J1bmRsZUlkcyk7XG4gICAgfVxuXG4gICAgLy8gZmluYWxseSwgcmV0dXJuIHRydWUgc2luY2UgdGhlIHN1cGVyY2xhc3MgY2hlY2sgcGFzc2VkLCBhcyBkaWQgdGhpc1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgaW5zdGFsbEFVVCAoKSB7XG4gICAgaWYgKHRoaXMuaXNTYWZhcmkoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IHZlcmlmeUFwcGxpY2F0aW9uUGxhdGZvcm0odGhpcy5vcHRzLmFwcCwge1xuICAgICAgaXNTaW11bGF0b3I6IHRoaXMuaXNTaW11bGF0b3IoKSxcbiAgICAgIGlzVHZPUzogdGhpcy5pc1R2T1MoKSxcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgICBhd2FpdCBpbnN0YWxsVG9SZWFsRGV2aWNlKHRoaXMub3B0cy5kZXZpY2UsIHRoaXMub3B0cy5hcHAsIHRoaXMub3B0cy5idW5kbGVJZCwge1xuICAgICAgICBub1Jlc2V0OiB0aGlzLm9wdHMubm9SZXNldCxcbiAgICAgICAgdGltZW91dDogdGhpcy5vcHRzLmFwcFB1c2hUaW1lb3V0LFxuICAgICAgICBzdHJhdGVneTogdGhpcy5vcHRzLmFwcEluc3RhbGxTdHJhdGVneSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBpbnN0YWxsVG9TaW11bGF0b3IodGhpcy5vcHRzLmRldmljZSwgdGhpcy5vcHRzLmFwcCwgdGhpcy5vcHRzLmJ1bmRsZUlkLCB7XG4gICAgICAgIG5vUmVzZXQ6IHRoaXMub3B0cy5ub1Jlc2V0LFxuICAgICAgICBuZXdTaW11bGF0b3I6IHRoaXMubGlmZWN5Y2xlRGF0YS5jcmVhdGVTaW0sXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0cy5vdGhlckFwcHMpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5zdGFsbE90aGVyQXBwcyh0aGlzLm9wdHMub3RoZXJBcHBzKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMuaW9zSW5zdGFsbFBhdXNlKSkge1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzY4ODlcbiAgICAgIGxldCBwYXVzZSA9IHBhcnNlSW50KHRoaXMub3B0cy5pb3NJbnN0YWxsUGF1c2UsIDEwKTtcbiAgICAgIGxvZy5kZWJ1ZyhgaW9zSW5zdGFsbFBhdXNlIHNldC4gUGF1c2luZyAke3BhdXNlfSBtcyBiZWZvcmUgY29udGludWluZ2ApO1xuICAgICAgYXdhaXQgQi5kZWxheShwYXVzZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW5zdGFsbE90aGVyQXBwcyAob3RoZXJBcHBzKSB7XG4gICAgaWYgKHRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICAgIGxvZy53YXJuKCdDYXBhYmlsaXR5IG90aGVyQXBwcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgU2ltdWxhdG9ycycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgYXBwc0xpc3Q7XG4gICAgdHJ5IHtcbiAgICAgIGFwcHNMaXN0ID0gdGhpcy5oZWxwZXJzLnBhcnNlQ2Fwc0FycmF5KG90aGVyQXBwcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBwYXJzZSBcIm90aGVyQXBwc1wiIGNhcGFiaWxpdHk6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgICBpZiAoXy5pc0VtcHR5KGFwcHNMaXN0KSkge1xuICAgICAgbG9nLmluZm8oYEdvdCB6ZXJvIGFwcHMgZnJvbSAnb3RoZXJBcHBzJyBjYXBhYmlsaXR5IHZhbHVlLiBEb2luZyBub3RoaW5nYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYXBwUGF0aHMgPSBhd2FpdCBCLmFsbChhcHBzTGlzdC5tYXAoXG4gICAgICAoYXBwKSA9PiB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKGFwcCwgJy5hcHAnKVxuICAgICkpO1xuICAgIGZvciAoY29uc3Qgb3RoZXJBcHAgb2YgYXBwUGF0aHMpIHtcbiAgICAgIGF3YWl0IGluc3RhbGxUb1NpbXVsYXRvcih0aGlzLm9wdHMuZGV2aWNlLCBvdGhlckFwcCwgdW5kZWZpbmVkLCB7XG4gICAgICAgIG5vUmVzZXQ6IHRoaXMub3B0cy5ub1Jlc2V0LFxuICAgICAgICBuZXdTaW11bGF0b3I6IHRoaXMubGlmZWN5Y2xlRGF0YS5jcmVhdGVTaW0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHJlZHVjZU1vdGlvbiBhcyAnaXNFbmFibGVkJyBvbmx5IHdoZW4gdGhlIGNhcGFiaWxpdGllcyBoYXMgJ3JlZHVjZU1vdGlvbidcbiAgICogVGhlIGNhbGwgaXMgaWdub3JlZCBmb3IgcmVhbCBkZXZpY2VzLlxuICAgKiBAcGFyYW0gez9ib29sZWFufSBpc0VuYWJsZWQgV2V0aGVyIGVuYWJsZSByZWR1Y2VNb3Rpb25cbiAgICovXG4gIGFzeW5jIHNldFJlZHVjZU1vdGlvbiAoaXNFbmFibGVkKSB7XG4gICAgaWYgKHRoaXMuaXNSZWFsRGV2aWNlKCkgfHwgIV8uaXNCb29sZWFuKGlzRW5hYmxlZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsb2cuaW5mbyhgU2V0dGluZyByZWR1Y2VNb3Rpb24gdG8gJHtpc0VuYWJsZWR9YCk7XG4gICAgYXdhaXQgdGhpcy51cGRhdGVTZXR0aW5ncyh7cmVkdWNlTW90aW9uOiBpc0VuYWJsZWR9KTtcbiAgfVxuXG4gIGFzeW5jIHNldEluaXRpYWxPcmllbnRhdGlvbiAob3JpZW50YXRpb24pIHtcbiAgICBpZiAoIV8uaXNTdHJpbmcob3JpZW50YXRpb24pKSB7XG4gICAgICBsb2cuaW5mbygnU2tpcHBpbmcgc2V0dGluZyBvZiB0aGUgaW5pdGlhbCBkaXNwbGF5IG9yaWVudGF0aW9uLiAnICtcbiAgICAgICAgJ1NldCB0aGUgXCJvcmllbnRhdGlvblwiIGNhcGFiaWxpdHkgdG8gZWl0aGVyIFwiTEFORFNDQVBFXCIgb3IgXCJQT1JUUkFJVFwiLCBpZiB0aGlzIGlzIGFuIHVuZGVzaXJlZCBiZWhhdmlvci4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgb3JpZW50YXRpb24gPSBvcmllbnRhdGlvbi50b1VwcGVyQ2FzZSgpO1xuICAgIGlmICghXy5pbmNsdWRlcyhbJ0xBTkRTQ0FQRScsICdQT1JUUkFJVCddLCBvcmllbnRhdGlvbikpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgVW5hYmxlIHRvIHNldCBpbml0aWFsIG9yaWVudGF0aW9uIHRvICcke29yaWVudGF0aW9ufSdgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbG9nLmRlYnVnKGBTZXR0aW5nIGluaXRpYWwgb3JpZW50YXRpb24gdG8gJyR7b3JpZW50YXRpb259J2ApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL29yaWVudGF0aW9uJywgJ1BPU1QnLCB7b3JpZW50YXRpb259KTtcbiAgICAgIHRoaXMub3B0cy5jdXJPcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLndhcm4oYFNldHRpbmcgaW5pdGlhbCBvcmllbnRhdGlvbiBmYWlsZWQgd2l0aDogJHtlcnIubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBfZ2V0Q29tbWFuZFRpbWVvdXQgKGNtZE5hbWUpIHtcbiAgICBpZiAodGhpcy5vcHRzLmNvbW1hbmRUaW1lb3V0cykge1xuICAgICAgaWYgKGNtZE5hbWUgJiYgXy5oYXModGhpcy5vcHRzLmNvbW1hbmRUaW1lb3V0cywgY21kTmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0cy5jb21tYW5kVGltZW91dHNbY21kTmFtZV07XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5vcHRzLmNvbW1hbmRUaW1lb3V0c1tERUZBVUxUX1RJTUVPVVRfS0VZXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNlc3Npb24gY2FwYWJpbGl0aWVzIG1lcmdlZCB3aXRoIHdoYXQgV0RBIHJlcG9ydHNcbiAgICogVGhpcyBpcyBhIGxpYnJhcnkgY29tbWFuZCBidXQgbmVlZHMgdG8gY2FsbCAnc3VwZXInIHNvIGNhbid0IGJlIG9uXG4gICAqIGEgaGVscGVyIG9iamVjdFxuICAgKi9cbiAgYXN5bmMgZ2V0U2Vzc2lvbiAoKSB7XG4gICAgLy8gY2FsbCBzdXBlciB0byBnZXQgZXZlbnQgdGltaW5ncywgZXRjLi4uXG4gICAgY29uc3QgZHJpdmVyU2Vzc2lvbiA9IGF3YWl0IHN1cGVyLmdldFNlc3Npb24oKTtcbiAgICBpZiAoIXRoaXMud2RhQ2Fwcykge1xuICAgICAgdGhpcy53ZGFDYXBzID0gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy8nLCAnR0VUJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2hvdWxkR2V0RGV2aWNlQ2FwcyA9IF8uaXNCb29sZWFuKHRoaXMub3B0cy5pbmNsdWRlRGV2aWNlQ2Fwc1RvU2Vzc2lvbkluZm8pXG4gICAgICA/IHRoaXMub3B0cy5pbmNsdWRlRGV2aWNlQ2Fwc1RvU2Vzc2lvbkluZm9cbiAgICAgIDogdHJ1ZTsgLy8gQmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgIGlmIChzaG91bGRHZXREZXZpY2VDYXBzICYmICF0aGlzLmRldmljZUNhcHMpIHtcbiAgICAgIGNvbnN0IHtzdGF0dXNCYXJTaXplLCBzY2FsZX0gPSBhd2FpdCB0aGlzLmdldFNjcmVlbkluZm8oKTtcbiAgICAgIHRoaXMuZGV2aWNlQ2FwcyA9IHtcbiAgICAgICAgcGl4ZWxSYXRpbzogc2NhbGUsXG4gICAgICAgIHN0YXRCYXJIZWlnaHQ6IHN0YXR1c0JhclNpemUuaGVpZ2h0LFxuICAgICAgICB2aWV3cG9ydFJlY3Q6IGF3YWl0IHRoaXMuZ2V0Vmlld3BvcnRSZWN0KCksXG4gICAgICB9O1xuICAgIH1cbiAgICBsb2cuaW5mbygnTWVyZ2luZyBXREEgY2FwcyBvdmVyIEFwcGl1bSBjYXBzIGZvciBzZXNzaW9uIGRldGFpbCByZXNwb25zZScpO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt1ZGlkOiB0aGlzLm9wdHMudWRpZH0sIGRyaXZlclNlc3Npb24sXG4gICAgICB0aGlzLndkYUNhcHMuY2FwYWJpbGl0aWVzLCB0aGlzLmRldmljZUNhcHMgfHwge30pO1xuICB9XG5cbiAgYXN5bmMgcmVzZXQgKCkge1xuICAgIGlmICh0aGlzLm9wdHMubm9SZXNldCkge1xuICAgICAgLy8gVGhpcyBpcyB0byBtYWtlIHN1cmUgcmVzZXQgaGFwcGVucyBldmVuIGlmIG5vUmVzZXQgaXMgc2V0IHRvIHRydWVcbiAgICAgIGxldCBvcHRzID0gXy5jbG9uZURlZXAodGhpcy5vcHRzKTtcbiAgICAgIG9wdHMubm9SZXNldCA9IGZhbHNlO1xuICAgICAgb3B0cy5mdWxsUmVzZXQgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHNodXRkb3duSGFuZGxlciA9IHRoaXMucmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93bjtcbiAgICAgIHRoaXMucmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93biA9ICgpID0+IHt9O1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5SZXNldChvcHRzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMucmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93biA9IHNodXRkb3duSGFuZGxlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgc3VwZXIucmVzZXQoKTtcbiAgfVxufVxuXG5PYmplY3QuYXNzaWduKFhDVUlUZXN0RHJpdmVyLnByb3RvdHlwZSwgY29tbWFuZHMpO1xuXG5leHBvcnQgZGVmYXVsdCBYQ1VJVGVzdERyaXZlcjtcbmV4cG9ydCB7IFhDVUlUZXN0RHJpdmVyIH07XG4iXSwiZmlsZSI6ImxpYi9kcml2ZXIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
@@ -153,8 +153,8 @@ class IOSDeploy {
153
153
  }
154
154
  }
155
155
 
156
- async installApp(app, timeout) {
157
- await this.install(app, timeout);
156
+ async installApp(...args) {
157
+ return await this.install(...args);
158
158
  }
159
159
 
160
160
  async isAppInstalled(bundleid) {
@@ -201,4 +201,4 @@ var _default = IOSDeploy;
201
201
  exports.default = _default;require('source-map-support').install();
202
202
 
203
203
 
204
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9pb3MtZGVwbG95LmpzIl0sIm5hbWVzIjpbIkFQUExJQ0FUSU9OX0lOU1RBTExFRF9OT1RJRklDQVRJT04iLCJJTlNUQUxMQVRJT05fU1RBR0lOR19ESVIiLCJBUFBMSUNBVElPTl9OT1RJRklDQVRJT05fVElNRU9VVF9NUyIsIklPU19ERVBMT1lfVElNRU9VVF9NUyIsIklPU19ERVBMT1kiLCJBUFBfSU5TVEFMTF9TVFJBVEVHWSIsIk9iamVjdCIsImZyZWV6ZSIsIlNFUklBTCIsIlBBUkFMTEVMIiwiSU9TRGVwbG95IiwiY29uc3RydWN0b3IiLCJ1ZGlkIiwicmVtb3ZlIiwiYnVuZGxlaWQiLCJzZXJ2aWNlIiwic2VydmljZXMiLCJzdGFydEluc3RhbGxhdGlvblByb3h5U2VydmljZSIsInVuaW5zdGFsbEFwcGxpY2F0aW9uIiwiY2xvc2UiLCJyZW1vdmVBcHAiLCJidW5kbGVJZCIsImluc3RhbGwiLCJhcHAiLCJ0aW1lb3V0Iiwic3RyYXRlZ3kiLCJfIiwidmFsdWVzIiwiaW5jbHVkZXMiLCJ0b0xvd2VyIiwiRXJyb3IiLCJsb2ciLCJkZWJ1ZyIsImluc3RhbGxXaXRoSW9zRGVwbG95IiwiZnMiLCJ3aGljaCIsImVyciIsInN0ZGVyciIsInN0ZG91dCIsIm1lc3NhZ2UiLCJ0aW1lciIsInRpbWluZyIsIlRpbWVyIiwic3RhcnQiLCJhZmNTZXJ2aWNlIiwic3RhcnRBZmNTZXJ2aWNlIiwiYnVuZGxlUGF0aE9uUGhvbmUiLCJwYXRoIiwiam9pbiIsInRpbWVvdXRNcyIsImVuYWJsZVBhcmFsbGVsUHVzaCIsImluc3RhbGxPclVwZ3JhZGVBcHBsaWNhdGlvbiIsImlzQXBwSW5zdGFsbGVkIiwid2FybiIsIkIiLCJUaW1lb3V0RXJyb3IiLCJlcnIxIiwiaW5mbyIsImdldER1cmF0aW9uIiwiYXNNaWxsaVNlY29uZHMiLCJ0b0ZpeGVkIiwiaXNVcGdyYWRlIiwibm90aWZpY2F0aW9uU2VydmljZSIsInN0YXJ0Tm90aWZpY2F0aW9uUHJveHlTZXJ2aWNlIiwiaW5zdGFsbGF0aW9uU2VydmljZSIsImFwcEluc3RhbGxlZE5vdGlmaWNhdGlvbiIsInJlc29sdmUiLCJvYnNlcnZlTm90aWZpY2F0aW9uIiwibm90aWZpY2F0aW9uIiwiY2xpZW50T3B0aW9ucyIsIlBhY2thZ2VUeXBlIiwidXBncmFkZUFwcGxpY2F0aW9uIiwiaW5zdGFsbEFwcGxpY2F0aW9uIiwiZSIsImluc3RhbGxBcHAiLCJhcHBsaWNhdGlvbnMiLCJsb29rdXBBcHBsaWNhdGlvbnMiLCJidW5kbGVJZHMiLCJnZXRVc2VySW5zdGFsbGVkQnVuZGxlSWRzQnlCdW5kbGVOYW1lIiwiYnVuZGxlTmFtZSIsImxpc3RBcHBsaWNhdGlvbnMiLCJhcHBsaWNhdGlvblR5cGUiLCJyZWR1Y2UiLCJhY2MiLCJDRkJ1bmRsZU5hbWUiLCJrZXkiLCJwdXNoIiwiZ2V0UGxhdGZvcm1WZXJzaW9uIiwidXRpbGl0aWVzIiwiZ2V0T1NWZXJzaW9uIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLGtDQUFrQyxHQUFHLHdDQUEzQztBQUNBLE1BQU1DLHdCQUF3QixHQUFHLGVBQWpDO0FBQ0EsTUFBTUMsbUNBQW1DLEdBQUcsS0FBSyxJQUFqRDtBQUNBLE1BQU1DLHFCQUFxQixHQUFHLElBQUksRUFBSixHQUFTLElBQXZDO0FBQ0EsTUFBTUMsVUFBVSxHQUFHLFlBQW5CO0FBQ0EsTUFBTUMsb0JBQW9CLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjO0FBQ3pDQyxFQUFBQSxNQUFNLEVBQUUsUUFEaUM7QUFFekNDLEVBQUFBLFFBQVEsRUFBRSxVQUYrQjtBQUd6Q0wsRUFBQUE7QUFIeUMsQ0FBZCxDQUE3Qjs7QUFPQSxNQUFNTSxTQUFOLENBQWdCO0FBRWRDLEVBQUFBLFdBQVcsQ0FBRUMsSUFBRixFQUFRO0FBQ2pCLFNBQUtBLElBQUwsR0FBWUEsSUFBWjtBQUNEOztBQUVXLFFBQU5DLE1BQU0sQ0FB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QUFPLENBQUMsQ0FBQzZELFlBQVksQ0FBQzdELFFBQUQsQ0FBckI7QUFDRCxLQUhELFNBR1U7QUFDUkMsTUFBQUEsT0FBTyxDQUFDSSxLQUFSO0FBQ0Q7QUFDRjs7QUFRMEMsUUFBckMyRCxxQ0FBcUMsQ0FBRUMsVUFBRixFQUFjO0FBQ3ZELFVBQU1oRSxPQUFPLEdBQUcsTUFBTUMsMEJBQVNDLDZCQUFULENBQXVDLEtBQUtMLElBQTVDLENBQXRCOztBQUNBLFFBQUk7QUFDRixZQUFNK0QsWUFBWSxHQUFHLE1BQU01RCxPQUFPLENBQUNpRSxnQkFBUixDQUF5QjtBQUFDQyxRQUFBQSxlQUFlLEVBQUU7QUFBbEIsT0FBekIsQ0FBM0I7QUFDQSxhQUFPdkQsZ0JBQUV3RCxNQUFGLENBQVNQLFlBQVQsRUFBdUIsQ0FBQ1EsR0FBRCxFQUFNO0FBQUNDLFFBQUFBO0FBQUQsT0FBTixFQUFzQkMsR0FBdEIsS0FBOEI7QUFDMUQsWUFBSUQsWUFBWSxLQUFLTCxVQUFyQixFQUFpQztBQUMvQkksVUFBQUEsR0FBRyxDQUFDRyxJQUFKLENBQVNELEdBQVQ7QUFDRDs7QUFDRCxlQUFPRixHQUFQO0FBQ0QsT0FMTSxFQUtKLEVBTEksQ0FBUDtBQU1ELEtBUkQsU0FRVTtBQUNScEUsTUFBQUEsT0FBTyxDQUFDSSxLQUFSO0FBQ0Q7QUFDRjs7QUFFdUIsUUFBbEJvRSxrQkFBa0IsR0FBSTtBQUMxQixXQUFPLE1BQU1DLDJCQUFVQyxZQUFWLENBQXVCLEtBQUs3RSxJQUE1QixDQUFiO0FBQ0Q7O0FBM0phOztlQThKREYsUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZzLCB0aW1pbmcgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IHNlcnZpY2VzLCB1dGlsaXRpZXMgfSBmcm9tICdhcHBpdW0taW9zLWRldmljZSc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCB7IGV4dHJhY3RCdW5kbGVJZCB9IGZyb20gJy4vYXBwLXV0aWxzJztcbmltcG9ydCB7IHB1c2hGb2xkZXIgfSBmcm9tICcuL2lvcy1mcy1oZWxwZXJzJztcblxuY29uc3QgQVBQTElDQVRJT05fSU5TVEFMTEVEX05PVElGSUNBVElPTiA9ICdjb20uYXBwbGUubW9iaWxlLmFwcGxpY2F0aW9uX2luc3RhbGxlZCc7XG5jb25zdCBJTlNUQUxMQVRJT05fU1RBR0lOR19ESVIgPSAnUHVibGljU3RhZ2luZyc7XG5jb25zdCBBUFBMSUNBVElPTl9OT1RJRklDQVRJT05fVElNRU9VVF9NUyA9IDMwICogMTAwMDtcbmNvbnN0IElPU19ERVBMT1lfVElNRU9VVF9NUyA9IDQgKiA2MCAqIDEwMDA7XG5jb25zdCBJT1NfREVQTE9ZID0gJ2lvcy1kZXBsb3knO1xuY29uc3QgQVBQX0lOU1RBTExfU1RSQVRFR1kgPSBPYmplY3QuZnJlZXplKHtcbiAgU0VSSUFMOiAnc2VyaWFsJyxcbiAgUEFSQUxMRUw6ICdwYXJhbGxlbCcsXG4gIElPU19ERVBMT1ksXG59KTtcblxuXG5jbGFzcyBJT1NEZXBsb3kge1xuXG4gIGNvbnN0cnVjdG9yICh1ZGlkKSB7XG4gICAgdGhpcy51ZGlkID0gdWRpZDtcbiAgfVxuXG4gIGFzeW5jIHJlbW92ZSAoYnVuZGxlaWQpIHtcbiAgICBjb25zdCBzZXJ2aWNlID0gYXdhaXQgc2VydmljZXMuc3RhcnRJbnN0YWxsYXRpb25Qcm94eVNlcnZpY2UodGhpcy51ZGlkKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2VydmljZS51bmluc3RhbGxBcHBsaWNhdGlvbihidW5kbGVpZCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNlcnZpY2UuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyByZW1vdmVBcHAgKGJ1bmRsZUlkKSB7XG4gICAgYXdhaXQgdGhpcy5yZW1vdmUoYnVuZGxlSWQpO1xuICB9XG5cbiAgYXN5bmMgaW5zdGFsbCAoYXBwLCB0aW1lb3V0LCBzdHJhdGVneSA9IG51bGwpIHtcbiAgICBpZiAoc3RyYXRlZ3kgJiYgIV8udmFsdWVzKEFQUF9JTlNUQUxMX1NUUkFURUdZKS5pbmNsdWRlcyhfLnRvTG93ZXIoc3RyYXRlZ3kpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcHAgaW5zdGFsbGF0aW9uIHN0cmF0ZWd5ICcke3N0cmF0ZWd5fScgaXMgdW5rbm93bi4gYCArXG4gICAgICAgIGBPbmx5IHRoZSBmb2xsb3dpbmcgc3RyYXRlZ2llcyBhcmUgc3VwcG9ydGVkOiAke18udmFsdWVzKEFQUF9JTlNUQUxMX1NUUkFURUdZKX1gKTtcbiAgICB9XG4gICAgbG9nLmRlYnVnKGBVc2luZyAnJHtzdHJhdGVneSA/PyBBUFBfSU5TVEFMTF9TVFJBVEVHWS5TRVJJQUx9JyBhcHAgZGVwbG95bWVudCBzdHJhdGVneS4gYCArXG4gICAgICBgWW91IGNvdWxkIGNoYW5nZSBpdCBieSBwcm92aWRpbmcgYW5vdGhlciB2YWx1ZSB0byB0aGUgJ2FwcEluc3RhbGxTdHJhdGVneScgY2FwYWJpbGl0eWApO1xuXG4gICAgY29uc3QgaW5zdGFsbFdpdGhJb3NEZXBsb3kgPSBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmcy53aGljaChJT1NfREVQTE9ZKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke0lPU19ERVBMT1l9JyB1dGlsaXR5IGhhcyBub3QgYmVlbiBmb3VuZCBpbiBQQVRILiBJcyBpdCBpbnN0YWxsZWQ/YCk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBleGVjKElPU19ERVBMT1ksIFtcbiAgICAgICAgICAnLS1pZCcsIHRoaXMudWRpZCxcbiAgICAgICAgICAnLS1idW5kbGUnLCBhcHAsXG4gICAgICAgIF0sIHt0aW1lb3V0OiB0aW1lb3V0ID8/IElPU19ERVBMT1lfVElNRU9VVF9NU30pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihlcnIuc3RkZXJyIHx8IGVyci5zdGRvdXQgfHwgZXJyLm1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCB0aW1lciA9IG5ldyB0aW1pbmcuVGltZXIoKS5zdGFydCgpO1xuICAgIGlmIChfLnRvTG93ZXIoc3RyYXRlZ3kpID09PSBBUFBfSU5TVEFMTF9TVFJBVEVHWS5JT1NfREVQTE9ZKSB7XG4gICAgICBhd2FpdCBpbnN0YWxsV2l0aElvc0RlcGxveSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBhZmNTZXJ2aWNlID0gYXdhaXQgc2VydmljZXMuc3RhcnRBZmNTZXJ2aWNlKHRoaXMudWRpZCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBidW5kbGVJZCA9IGF3YWl0IGV4dHJhY3RCdW5kbGVJZChhcHApO1xuICAgICAgICBjb25zdCBidW5kbGVQYXRoT25QaG9uZSA9IHBhdGguam9pbihJTlNUQUxMQVRJT05fU1RBR0lOR19ESVIsIGJ1bmRsZUlkKTtcbiAgICAgICAgYXdhaXQgcHVzaEZvbGRlcihhZmNTZXJ2aWNlLCBhcHAsIGJ1bmRsZVBhdGhPblBob25lLCB7XG4gICAgICAgICAgdGltZW91dE1zOiB0aW1lb3V0LFxuICAgICAgICAgIGVuYWJsZVBhcmFsbGVsUHVzaDogXy50b0xvd2VyKHN0cmF0ZWd5KSA9PT0gQVBQX0lOU1RBTExfU1RSQVRFR1kuUEFSQUxMRUwsXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCB0aGlzLmluc3RhbGxPclVwZ3JhZGVBcHBsaWNhdGlvbihidW5kbGVQYXRoT25QaG9uZSwgYXdhaXQgdGhpcy5pc0FwcEluc3RhbGxlZChidW5kbGVJZCkpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZy53YXJuKGBFcnJvciBpbnN0YWxsaW5nIGFwcCAnJHthcHB9JzogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEIuVGltZW91dEVycm9yKSB7XG4gICAgICAgICAgbG9nLndhcm4oYENvbnNpZGVyIGluY3JlYXNpbmcgdGhlIHZhbHVlIG9mICdhcHBQdXNoVGltZW91dCcgY2FwYWJpbGl0eWApO1xuICAgICAgICB9XG4gICAgICAgIGxvZy53YXJuKGBGYWxsaW5nIGJhY2sgdG8gJyR7SU9TX0RFUExPWX0nIHVzYWdlYCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgaW5zdGFsbFdpdGhJb3NEZXBsb3koKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGluc3RhbGwgJyR7YXBwfSc6XFxuYCArXG4gICAgICAgICAgICBgICAtICR7ZXJyLm1lc3NhZ2V9XFxuYCArXG4gICAgICAgICAgICBgICAtICR7ZXJyMS5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBhZmNTZXJ2aWNlLmNsb3NlKCk7XG4gICAgICB9XG4gICAgfVxuICAgIGxvZy5pbmZvKGBBcHAgaW5zdGFsbGF0aW9uIHN1Y2NlZWRlZCBhZnRlciAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICB9XG5cbiAgYXN5bmMgaW5zdGFsbE9yVXBncmFkZUFwcGxpY2F0aW9uIChidW5kbGVQYXRoT25QaG9uZSwgaXNVcGdyYWRlID0gZmFsc2UpIHtcbiAgICBjb25zdCBub3RpZmljYXRpb25TZXJ2aWNlID0gYXdhaXQgc2VydmljZXMuc3RhcnROb3RpZmljYXRpb25Qcm94eVNlcnZpY2UodGhpcy51ZGlkKTtcbiAgICBjb25zdCBpbnN0YWxsYXRpb25TZXJ2aWNlID0gYXdhaXQgc2VydmljZXMuc3RhcnRJbnN0YWxsYXRpb25Qcm94eVNlcnZpY2UodGhpcy51ZGlkKTtcbiAgICBjb25zdCBhcHBJbnN0YWxsZWROb3RpZmljYXRpb24gPSBuZXcgQigocmVzb2x2ZSkgPT4ge1xuICAgICAgbm90aWZpY2F0aW9uU2VydmljZS5vYnNlcnZlTm90aWZpY2F0aW9uKEFQUExJQ0FUSU9OX0lOU1RBTExFRF9OT1RJRklDQVRJT04sIHtcbiAgICAgICAgbm90aWZpY2F0aW9uOiByZXNvbHZlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBjb25zdCBjbGllbnRPcHRpb25zID0ge1BhY2thZ2VUeXBlOiAnRGV2ZWxvcGVyJ307XG4gICAgdHJ5IHtcbiAgICAgIGlmIChpc1VwZ3JhZGUpIHtcbiAgICAgICAgbG9nLmRlYnVnKGBBbiB1cGdyYWRlIG9mIHRoZSBleGlzdGluZyBhcHBsaWNhdGlvbiBpcyBnb2luZyB0byBiZSBwZXJmb3JtZWRgKTtcbiAgICAgICAgYXdhaXQgaW5zdGFsbGF0aW9uU2VydmljZS51cGdyYWRlQXBwbGljYXRpb24oYnVuZGxlUGF0aE9uUGhvbmUsIGNsaWVudE9wdGlvbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmRlYnVnKGBBIG5ldyBhcHBsaWNhdGlvbiBpbnN0YWxsYXRpb24gaXMgZ29pbmcgdG8gYmUgcGVyZm9ybWVkYCk7XG4gICAgICAgIGF3YWl0IGluc3RhbGxhdGlvblNlcnZpY2UuaW5zdGFsbEFwcGxpY2F0aW9uKGJ1bmRsZVBhdGhPblBob25lLCBjbGllbnRPcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGFwcEluc3RhbGxlZE5vdGlmaWNhdGlvbi50aW1lb3V0KEFQUExJQ0FUSU9OX05PVElGSUNBVElPTl9USU1FT1VUX01TLFxuICAgICAgICAgIGBDb3VsZCBub3QgZ2V0IHRoZSBhcHBsaWNhdGlvbiBpbnN0YWxsZWQgbm90aWZpY2F0aW9uIHdpdGhpbiBgICtcbiAgICAgICAgICBgJHtBUFBMSUNBVElPTl9OT1RJRklDQVRJT05fVElNRU9VVF9NU31tcyBidXQgd2Ugd2lsbCBjb250aW51ZWApO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2cud2FybihgRmFpbGVkIHRvIHJlY2VpdmUgdGhlIG5vdGlmaWNhdGlvbi4gRXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBpbnN0YWxsYXRpb25TZXJ2aWNlLmNsb3NlKCk7XG4gICAgICBub3RpZmljYXRpb25TZXJ2aWNlLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW5zdGFsbEFwcCAoYXBwLCB0aW1lb3V0KSB7XG4gICAgYXdhaXQgdGhpcy5pbnN0YWxsKGFwcCwgdGltZW91dCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFwcGxpY2F0aW9uIG9iamVjdCBpZiB0ZXN0IGFwcCBoYXMgJ2J1bmRsZWlkJy5cbiAgICogVGhlIHRhcmdldCBidW5kbGVpZCBjYW4gYmUgVXNlciBhbmQgU3lzdGVtIGFwcHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBidW5kbGVpZCBUaGUgYnVuZGxlSWQgdG8gZW5zdXJlIGl0IGlzIGluc3RhbGxlZFxuICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIFRydWUgaWYgdGhlIGJ1bmRsZWlkIGV4aXN0cyBpbiB0aGUgcmVzdWx0IG9mICdsaXN0QXBwbGljYXRpb25zJyBsaWtlOlxuICAgKiB7IFwiY29tLmFwcGxlLlByZWZlcmVuY2VzXCI6e1xuICAgKiAgIFwiVUlSZXF1aXJlZERldmljZUNhcGFiaWxpdGllc1wiOltcImFybTY0XCJdLFxuICAgKiAgIFwiVUlSZXF1aXJlc0Z1bGxTY3JlZW5cIjp0cnVlLFxuICAgKiAgIFwiQ0ZCdW5kbGVJbmZvRGljdGlvbmFyeVZlcnNpb25cIjpcIjYuMFwiLFxuICAgKiAgIFwiRW50aXRsZW1lbnRzXCI6XG4gICAqICAgICB7XCJjb20uYXBwbGUuZnJvbnRib2FyZC5kZWxldGUtYXBwbGljYXRpb24tc25hcHNob3RzXCI6dHJ1ZSwuLlxuICAgKi9cbiAgYXN5bmMgaXNBcHBJbnN0YWxsZWQgKGJ1bmRsZWlkKSB7XG4gICAgY29uc3Qgc2VydmljZSA9IGF3YWl0IHNlcnZpY2VzLnN0YXJ0SW5zdGFsbGF0aW9uUHJveHlTZXJ2aWNlKHRoaXMudWRpZCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFwcGxpY2F0aW9ucyA9IGF3YWl0IHNlcnZpY2UubG9va3VwQXBwbGljYXRpb25zKHsgYnVuZGxlSWRzOiBidW5kbGVpZCB9KTtcbiAgICAgIHJldHVybiAhIWFwcGxpY2F0aW9uc1tidW5kbGVpZF07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNlcnZpY2UuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJ1bmRsZU5hbWUgVGhlIG5hbWUgb2YgQ0ZCdW5kbGVOYW1lIGluIEluZm8ucGxpc3RcbiAgICpcbiAgICogQHJldHVybnMge0FycmF5PHN0cmluZz59IEEgbGlzdCBvZiBVc2VyIGxldmVsIGFwcHMnIGJ1bmRsZSBpZHMgd2hpY2ggaGFzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAnQ0ZCdW5kbGVOYW1lJyBhdHRyaWJ1dGUgYXMgJ2J1bmRsZU5hbWUnLlxuICAgKi9cbiAgYXN5bmMgZ2V0VXNlckluc3RhbGxlZEJ1bmRsZUlkc0J5QnVuZGxlTmFtZSAoYnVuZGxlTmFtZSkge1xuICAgIGNvbnN0IHNlcnZpY2UgPSBhd2FpdCBzZXJ2aWNlcy5zdGFydEluc3RhbGxhdGlvblByb3h5U2VydmljZSh0aGlzLnVkaWQpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhcHBsaWNhdGlvbnMgPSBhd2FpdCBzZXJ2aWNlLmxpc3RBcHBsaWNhdGlvbnMoe2FwcGxpY2F0aW9uVHlwZTogJ1VzZXInfSk7XG4gICAgICByZXR1cm4gXy5yZWR1Y2UoYXBwbGljYXRpb25zLCAoYWNjLCB7Q0ZCdW5kbGVOYW1lfSwga2V5KSA9PiB7XG4gICAgICAgIGlmIChDRkJ1bmRsZU5hbWUgPT09IGJ1bmRsZU5hbWUpIHtcbiAgICAgICAgICBhY2MucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCBbXSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNlcnZpY2UuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRQbGF0Zm9ybVZlcnNpb24gKCkge1xuICAgIHJldHVybiBhd2FpdCB1dGlsaXRpZXMuZ2V0T1NWZXJzaW9uKHRoaXMudWRpZCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSU9TRGVwbG95O1xuIl0sImZpbGUiOiJsaWIvaW9zLWRlcGxveS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
204
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9pb3MtZGVwbG95LmpzIl0sIm5hbWVzIjpbIkFQUExJQ0FUSU9OX0lOU1RBTExFRF9OT1RJRklDQVRJT04iLCJJTlNUQUxMQVRJT05fU1RBR0lOR19ESVIiLCJBUFBMSUNBVElPTl9OT1RJRklDQVRJT05fVElNRU9VVF9NUyIsIklPU19ERVBMT1lfVElNRU9VVF9NUyIsIklPU19ERVBMT1kiLCJBUFBfSU5TVEFMTF9TVFJBVEVHWSIsIk9iamVjdCIsImZyZWV6ZSIsIlNFUklBTCIsIlBBUkFMTEVMIiwiSU9TRGVwbG95IiwiY29uc3RydWN0b3IiLCJ1ZGlkIiwicmVtb3ZlIiwiYnVuZGxlaWQiLCJzZXJ2aWNlIiwic2VydmljZXMiLCJzdGFydEluc3RhbGxhdGlvblByb3h5U2VydmljZSIsInVuaW5zdGFsbEFwcGxpY2F0aW9uIiwiY2xvc2UiLCJyZW1vdmVBcHAiLCJidW5kbGVJZCIsImluc3RhbGwiLCJhcHAiLCJ0aW1lb3V0Iiwic3RyYXRlZ3kiLCJfIiwidmFsdWVzIiwiaW5jbHVkZXMiLCJ0b0xvd2VyIiwiRXJyb3IiLCJsb2ciLCJkZWJ1ZyIsImluc3RhbGxXaXRoSW9zRGVwbG95IiwiZnMiLCJ3aGljaCIsImVyciIsInN0ZGVyciIsInN0ZG91dCIsIm1lc3NhZ2UiLCJ0aW1lciIsInRpbWluZyIsIlRpbWVyIiwic3RhcnQiLCJhZmNTZXJ2aWNlIiwic3RhcnRBZmNTZXJ2aWNlIiwiYnVuZGxlUGF0aE9uUGhvbmUiLCJwYXRoIiwiam9pbiIsInRpbWVvdXRNcyIsImVuYWJsZVBhcmFsbGVsUHVzaCIsImluc3RhbGxPclVwZ3JhZGVBcHBsaWNhdGlvbiIsImlzQXBwSW5zdGFsbGVkIiwid2FybiIsIkIiLCJUaW1lb3V0RXJyb3IiLCJlcnIxIiwiaW5mbyIsImdldER1cmF0aW9uIiwiYXNNaWxsaVNlY29uZHMiLCJ0b0ZpeGVkIiwiaXNVcGdyYWRlIiwibm90aWZpY2F0aW9uU2VydmljZSIsInN0YXJ0Tm90aWZpY2F0aW9uUHJveHlTZXJ2aWNlIiwiaW5zdGFsbGF0aW9uU2VydmljZSIsImFwcEluc3RhbGxlZE5vdGlmaWNhdGlvbiIsInJlc29sdmUiLCJvYnNlcnZlTm90aWZpY2F0aW9uIiwibm90aWZpY2F0aW9uIiwiY2xpZW50T3B0aW9ucyIsIlBhY2thZ2VUeXBlIiwidXBncmFkZUFwcGxpY2F0aW9uIiwiaW5zdGFsbEFwcGxpY2F0aW9uIiwiZSIsImluc3RhbGxBcHAiLCJhcmdzIiwiYXBwbGljYXRpb25zIiwibG9va3VwQXBwbGljYXRpb25zIiwiYnVuZGxlSWRzIiwiZ2V0VXNlckluc3RhbGxlZEJ1bmRsZUlkc0J5QnVuZGxlTmFtZSIsImJ1bmRsZU5hbWUiLCJsaXN0QXBwbGljYXRpb25zIiwiYXBwbGljYXRpb25UeXBlIiwicmVkdWNlIiwiYWNjIiwiQ0ZCdW5kbGVOYW1lIiwia2V5IiwicHVzaCIsImdldFBsYXRmb3JtVmVyc2lvbiIsInV0aWxpdGllcyIsImdldE9TVmVyc2lvbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxrQ0FBa0MsR0FBRyx3Q0FBM0M7QUFDQSxNQUFNQyx3QkFBd0IsR0FBRyxlQUFqQztBQUNBLE1BQU1DLG1DQUFtQyxHQUFHLEtBQUssSUFBakQ7QUFDQSxNQUFNQyxxQkFBcUIsR0FBRyxJQUFJLEVBQUosR0FBUyxJQUF2QztBQUNBLE1BQU1DLFVBQVUsR0FBRyxZQUFuQjtBQUNBLE1BQU1DLG9CQUFvQixHQUFHQyxNQUFNLENBQUNDLE1BQVAsQ0FBYztBQUN6Q0MsRUFBQUEsTUFBTSxFQUFFLFFBRGlDO0FBRXpDQyxFQUFBQSxRQUFRLEVBQUUsVUFGK0I7QUFHekNMLEVBQUFBO0FBSHlDLENBQWQsQ0FBN0I7O0FBT0EsTUFBTU0sU0FBTixDQUFnQjtBQUVkQyxFQUFBQSxXQUFXLENBQUVDLElBQUYsRUFBUTtBQUNqQixTQUFLQSxJQUFMLEdBQVlBLElBQVo7QUFDRDs7QUFFVyxRQUFOQyxN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QU8sQ0FBQyxDQUFDOEQsWUFBWSxDQUFDOUQsUUFBRCxDQUFyQjtBQUNELEtBSEQsU0FHVTtBQUNSQyxNQUFBQSxPQUFPLENBQUNJLEtBQVI7QUFDRDtBQUNGOztBQVEwQyxRQUFyQzRELHFDQUFxQyxDQUFFQyxVQUFGLEVBQWM7QUFDdkQsVUFBTWpFLE9BQU8sR0FBRyxNQUFNQywwQkFBU0MsNkJBQVQsQ0FBdUMsS0FBS0wsSUFBNUMsQ0FBdEI7O0FBQ0EsUUFBSTtBQUNGLFlBQU1nRSxZQUFZLEdBQUcsTUFBTTdELE9BQU8sQ0FBQ2tFLGdCQUFSLENBQXlCO0FBQUNDLFFBQUFBLGVBQWUsRUFBRTtBQUFsQixPQUF6QixDQUEzQjtBQUNBLGFBQU94RCxnQkFBRXlELE1BQUYsQ0FBU1AsWUFBVCxFQUF1QixDQUFDUSxHQUFELEVBQU07QUFBQ0MsUUFBQUE7QUFBRCxPQUFOLEVBQXNCQyxHQUF0QixLQUE4QjtBQUMxRCxZQUFJRCxZQUFZLEtBQUtMLFVBQXJCLEVBQWlDO0FBQy9CSSxVQUFBQSxHQUFHLENBQUNHLElBQUosQ0FBU0QsR0FBVDtBQUNEOztBQUNELGVBQU9GLEdBQVA7QUFDRCxPQUxNLEVBS0osRUFMSSxDQUFQO0FBTUQsS0FSRCxTQVFVO0FBQ1JyRSxNQUFBQSxPQUFPLENBQUNJLEtBQVI7QUFDRDtBQUNGOztBQUV1QixRQUFsQnFFLGtCQUFrQixHQUFJO0FBQzFCLFdBQU8sTUFBTUMsMkJBQVVDLFlBQVYsQ0FBdUIsS0FBSzlFLElBQTVCLENBQWI7QUFDRDs7QUEzSmE7O2VBOEpERixTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZnMsIHRpbWluZyB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgc2VydmljZXMsIHV0aWxpdGllcyB9IGZyb20gJ2FwcGl1bS1pb3MtZGV2aWNlJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgZXh0cmFjdEJ1bmRsZUlkIH0gZnJvbSAnLi9hcHAtdXRpbHMnO1xuaW1wb3J0IHsgcHVzaEZvbGRlciB9IGZyb20gJy4vaW9zLWZzLWhlbHBlcnMnO1xuXG5jb25zdCBBUFBMSUNBVElPTl9JTlNUQUxMRURfTk9USUZJQ0FUSU9OID0gJ2NvbS5hcHBsZS5tb2JpbGUuYXBwbGljYXRpb25faW5zdGFsbGVkJztcbmNvbnN0IElOU1RBTExBVElPTl9TVEFHSU5HX0RJUiA9ICdQdWJsaWNTdGFnaW5nJztcbmNvbnN0IEFQUExJQ0FUSU9OX05PVElGSUNBVElPTl9USU1FT1VUX01TID0gMzAgKiAxMDAwO1xuY29uc3QgSU9TX0RFUExPWV9USU1FT1VUX01TID0gNCAqIDYwICogMTAwMDtcbmNvbnN0IElPU19ERVBMT1kgPSAnaW9zLWRlcGxveSc7XG5jb25zdCBBUFBfSU5TVEFMTF9TVFJBVEVHWSA9IE9iamVjdC5mcmVlemUoe1xuICBTRVJJQUw6ICdzZXJpYWwnLFxuICBQQVJBTExFTDogJ3BhcmFsbGVsJyxcbiAgSU9TX0RFUExPWSxcbn0pO1xuXG5cbmNsYXNzIElPU0RlcGxveSB7XG5cbiAgY29uc3RydWN0b3IgKHVkaWQpIHtcbiAgICB0aGlzLnVkaWQgPSB1ZGlkO1xuICB9XG5cbiAgYXN5bmMgcmVtb3ZlIChidW5kbGVpZCkge1xuICAgIGNvbnN0IHNlcnZpY2UgPSBhd2FpdCBzZXJ2aWNlcy5zdGFydEluc3RhbGxhdGlvblByb3h5U2VydmljZSh0aGlzLnVkaWQpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzZXJ2aWNlLnVuaW5zdGFsbEFwcGxpY2F0aW9uKGJ1bmRsZWlkKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2VydmljZS5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlbW92ZUFwcCAoYnVuZGxlSWQpIHtcbiAgICBhd2FpdCB0aGlzLnJlbW92ZShidW5kbGVJZCk7XG4gIH1cblxuICBhc3luYyBpbnN0YWxsIChhcHAsIHRpbWVvdXQsIHN0cmF0ZWd5ID0gbnVsbCkge1xuICAgIGlmIChzdHJhdGVneSAmJiAhXy52YWx1ZXMoQVBQX0lOU1RBTExfU1RSQVRFR1kpLmluY2x1ZGVzKF8udG9Mb3dlcihzdHJhdGVneSkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEFwcCBpbnN0YWxsYXRpb24gc3RyYXRlZ3kgJyR7c3RyYXRlZ3l9JyBpcyB1bmtub3duLiBgICtcbiAgICAgICAgYE9ubHkgdGhlIGZvbGxvd2luZyBzdHJhdGVnaWVzIGFyZSBzdXBwb3J0ZWQ6ICR7Xy52YWx1ZXMoQVBQX0lOU1RBTExfU1RSQVRFR1kpfWApO1xuICAgIH1cbiAgICBsb2cuZGVidWcoYFVzaW5nICcke3N0cmF0ZWd5ID8/IEFQUF9JTlNUQUxMX1NUUkFURUdZLlNFUklBTH0nIGFwcCBkZXBsb3ltZW50IHN0cmF0ZWd5LiBgICtcbiAgICAgIGBZb3UgY291bGQgY2hhbmdlIGl0IGJ5IHByb3ZpZGluZyBhbm90aGVyIHZhbHVlIHRvIHRoZSAnYXBwSW5zdGFsbFN0cmF0ZWd5JyBjYXBhYmlsaXR5YCk7XG5cbiAgICBjb25zdCBpbnN0YWxsV2l0aElvc0RlcGxveSA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGZzLndoaWNoKElPU19ERVBMT1kpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7SU9TX0RFUExPWX0nIHV0aWxpdHkgaGFzIG5vdCBiZWVuIGZvdW5kIGluIFBBVEguIElzIGl0IGluc3RhbGxlZD9gKTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGV4ZWMoSU9TX0RFUExPWSwgW1xuICAgICAgICAgICctLWlkJywgdGhpcy51ZGlkLFxuICAgICAgICAgICctLWJ1bmRsZScsIGFwcCxcbiAgICAgICAgXSwge3RpbWVvdXQ6IHRpbWVvdXQgPz8gSU9TX0RFUExPWV9USU1FT1VUX01TfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVyci5zdGRlcnIgfHwgZXJyLnN0ZG91dCB8fCBlcnIubWVzc2FnZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gICAgaWYgKF8udG9Mb3dlcihzdHJhdGVneSkgPT09IEFQUF9JTlNUQUxMX1NUUkFURUdZLklPU19ERVBMT1kpIHtcbiAgICAgIGF3YWl0IGluc3RhbGxXaXRoSW9zRGVwbG95KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGFmY1NlcnZpY2UgPSBhd2FpdCBzZXJ2aWNlcy5zdGFydEFmY1NlcnZpY2UodGhpcy51ZGlkKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGJ1bmRsZUlkID0gYXdhaXQgZXh0cmFjdEJ1bmRsZUlkKGFwcCk7XG4gICAgICAgIGNvbnN0IGJ1bmRsZVBhdGhPblBob25lID0gcGF0aC5qb2luKElOU1RBTExBVElPTl9TVEFHSU5HX0RJUiwgYnVuZGxlSWQpO1xuICAgICAgICBhd2FpdCBwdXNoRm9sZGVyKGFmY1NlcnZpY2UsIGFwcCwgYnVuZGxlUGF0aE9uUGhvbmUsIHtcbiAgICAgICAgICB0aW1lb3V0TXM6IHRpbWVvdXQsXG4gICAgICAgICAgZW5hYmxlUGFyYWxsZWxQdXNoOiBfLnRvTG93ZXIoc3RyYXRlZ3kpID09PSBBUFBfSU5TVEFMTF9TVFJBVEVHWS5QQVJBTExFTCxcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IHRoaXMuaW5zdGFsbE9yVXBncmFkZUFwcGxpY2F0aW9uKGJ1bmRsZVBhdGhPblBob25lLCBhd2FpdCB0aGlzLmlzQXBwSW5zdGFsbGVkKGJ1bmRsZUlkKSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nLndhcm4oYEVycm9yIGluc3RhbGxpbmcgYXBwICcke2FwcH0nOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgQi5UaW1lb3V0RXJyb3IpIHtcbiAgICAgICAgICBsb2cud2FybihgQ29uc2lkZXIgaW5jcmVhc2luZyB0aGUgdmFsdWUgb2YgJ2FwcFB1c2hUaW1lb3V0JyBjYXBhYmlsaXR5YCk7XG4gICAgICAgIH1cbiAgICAgICAgbG9nLndhcm4oYEZhbGxpbmcgYmFjayB0byAnJHtJT1NfREVQTE9ZfScgdXNhZ2VgKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBpbnN0YWxsV2l0aElvc0RlcGxveSgpO1xuICAgICAgICB9IGNhdGNoIChlcnIxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgaW5zdGFsbCAnJHthcHB9JzpcXG5gICtcbiAgICAgICAgICAgIGAgIC0gJHtlcnIubWVzc2FnZX1cXG5gICtcbiAgICAgICAgICAgIGAgIC0gJHtlcnIxLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGFmY1NlcnZpY2UuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbG9nLmluZm8oYEFwcCBpbnN0YWxsYXRpb24gc3VjY2VlZGVkIGFmdGVyICR7dGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcy50b0ZpeGVkKDApfW1zYCk7XG4gIH1cblxuICBhc3luYyBpbnN0YWxsT3JVcGdyYWRlQXBwbGljYXRpb24gKGJ1bmRsZVBhdGhPblBob25lLCBpc1VwZ3JhZGUgPSBmYWxzZSkge1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvblNlcnZpY2UgPSBhd2FpdCBzZXJ2aWNlcy5zdGFydE5vdGlmaWNhdGlvblByb3h5U2VydmljZSh0aGlzLnVkaWQpO1xuICAgIGNvbnN0IGluc3RhbGxhdGlvblNlcnZpY2UgPSBhd2FpdCBzZXJ2aWNlcy5zdGFydEluc3RhbGxhdGlvblByb3h5U2VydmljZSh0aGlzLnVkaWQpO1xuICAgIGNvbnN0IGFwcEluc3RhbGxlZE5vdGlmaWNhdGlvbiA9IG5ldyBCKChyZXNvbHZlKSA9PiB7XG4gICAgICBub3RpZmljYXRpb25TZXJ2aWNlLm9ic2VydmVOb3RpZmljYXRpb24oQVBQTElDQVRJT05fSU5TVEFMTEVEX05PVElGSUNBVElPTiwge1xuICAgICAgICBub3RpZmljYXRpb246IHJlc29sdmVcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IGNsaWVudE9wdGlvbnMgPSB7UGFja2FnZVR5cGU6ICdEZXZlbG9wZXInfTtcbiAgICB0cnkge1xuICAgICAgaWYgKGlzVXBncmFkZSkge1xuICAgICAgICBsb2cuZGVidWcoYEFuIHVwZ3JhZGUgb2YgdGhlIGV4aXN0aW5nIGFwcGxpY2F0aW9uIGlzIGdvaW5nIHRvIGJlIHBlcmZvcm1lZGApO1xuICAgICAgICBhd2FpdCBpbnN0YWxsYXRpb25TZXJ2aWNlLnVwZ3JhZGVBcHBsaWNhdGlvbihidW5kbGVQYXRoT25QaG9uZSwgY2xpZW50T3B0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cuZGVidWcoYEEgbmV3IGFwcGxpY2F0aW9uIGluc3RhbGxhdGlvbiBpcyBnb2luZyB0byBiZSBwZXJmb3JtZWRgKTtcbiAgICAgICAgYXdhaXQgaW5zdGFsbGF0aW9uU2VydmljZS5pbnN0YWxsQXBwbGljYXRpb24oYnVuZGxlUGF0aE9uUGhvbmUsIGNsaWVudE9wdGlvbnMpO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgYXBwSW5zdGFsbGVkTm90aWZpY2F0aW9uLnRpbWVvdXQoQVBQTElDQVRJT05fTk9USUZJQ0FUSU9OX1RJTUVPVVRfTVMsXG4gICAgICAgICAgYENvdWxkIG5vdCBnZXQgdGhlIGFwcGxpY2F0aW9uIGluc3RhbGxlZCBub3RpZmljYXRpb24gd2l0aGluIGAgK1xuICAgICAgICAgIGAke0FQUExJQ0FUSU9OX05PVElGSUNBVElPTl9USU1FT1VUX01TfW1zIGJ1dCB3ZSB3aWxsIGNvbnRpbnVlYCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZy53YXJuKGBGYWlsZWQgdG8gcmVjZWl2ZSB0aGUgbm90aWZpY2F0aW9uLiBFcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGluc3RhbGxhdGlvblNlcnZpY2UuY2xvc2UoKTtcbiAgICAgIG5vdGlmaWNhdGlvblNlcnZpY2UuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpbnN0YWxsQXBwICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuaW5zdGFsbCguLi5hcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gYXBwbGljYXRpb24gb2JqZWN0IGlmIHRlc3QgYXBwIGhhcyAnYnVuZGxlaWQnLlxuICAgKiBUaGUgdGFyZ2V0IGJ1bmRsZWlkIGNhbiBiZSBVc2VyIGFuZCBTeXN0ZW0gYXBwcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGJ1bmRsZWlkIFRoZSBidW5kbGVJZCB0byBlbnN1cmUgaXQgaXMgaW5zdGFsbGVkXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgVHJ1ZSBpZiB0aGUgYnVuZGxlaWQgZXhpc3RzIGluIHRoZSByZXN1bHQgb2YgJ2xpc3RBcHBsaWNhdGlvbnMnIGxpa2U6XG4gICAqIHsgXCJjb20uYXBwbGUuUHJlZmVyZW5jZXNcIjp7XG4gICAqICAgXCJVSVJlcXVpcmVkRGV2aWNlQ2FwYWJpbGl0aWVzXCI6W1wiYXJtNjRcIl0sXG4gICAqICAgXCJVSVJlcXVpcmVzRnVsbFNjcmVlblwiOnRydWUsXG4gICAqICAgXCJDRkJ1bmRsZUluZm9EaWN0aW9uYXJ5VmVyc2lvblwiOlwiNi4wXCIsXG4gICAqICAgXCJFbnRpdGxlbWVudHNcIjpcbiAgICogICAgIHtcImNvbS5hcHBsZS5mcm9udGJvYXJkLmRlbGV0ZS1hcHBsaWNhdGlvbi1zbmFwc2hvdHNcIjp0cnVlLC4uXG4gICAqL1xuICBhc3luYyBpc0FwcEluc3RhbGxlZCAoYnVuZGxlaWQpIHtcbiAgICBjb25zdCBzZXJ2aWNlID0gYXdhaXQgc2VydmljZXMuc3RhcnRJbnN0YWxsYXRpb25Qcm94eVNlcnZpY2UodGhpcy51ZGlkKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYXBwbGljYXRpb25zID0gYXdhaXQgc2VydmljZS5sb29rdXBBcHBsaWNhdGlvbnMoeyBidW5kbGVJZHM6IGJ1bmRsZWlkIH0pO1xuICAgICAgcmV0dXJuICEhYXBwbGljYXRpb25zW2J1bmRsZWlkXTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2VydmljZS5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYnVuZGxlTmFtZSBUaGUgbmFtZSBvZiBDRkJ1bmRsZU5hbWUgaW4gSW5mby5wbGlzdFxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nPn0gQSBsaXN0IG9mIFVzZXIgbGV2ZWwgYXBwcycgYnVuZGxlIGlkcyB3aGljaCBoYXNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICdDRkJ1bmRsZU5hbWUnIGF0dHJpYnV0ZSBhcyAnYnVuZGxlTmFtZScuXG4gICAqL1xuICBhc3luYyBnZXRVc2VySW5zdGFsbGVkQnVuZGxlSWRzQnlCdW5kbGVOYW1lIChidW5kbGVOYW1lKSB7XG4gICAgY29uc3Qgc2VydmljZSA9IGF3YWl0IHNlcnZpY2VzLnN0YXJ0SW5zdGFsbGF0aW9uUHJveHlTZXJ2aWNlKHRoaXMudWRpZCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFwcGxpY2F0aW9ucyA9IGF3YWl0IHNlcnZpY2UubGlzdEFwcGxpY2F0aW9ucyh7YXBwbGljYXRpb25UeXBlOiAnVXNlcid9KTtcbiAgICAgIHJldHVybiBfLnJlZHVjZShhcHBsaWNhdGlvbnMsIChhY2MsIHtDRkJ1bmRsZU5hbWV9LCBrZXkpID0+IHtcbiAgICAgICAgaWYgKENGQnVuZGxlTmFtZSA9PT0gYnVuZGxlTmFtZSkge1xuICAgICAgICAgIGFjYy5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIFtdKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2VydmljZS5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldFBsYXRmb3JtVmVyc2lvbiAoKSB7XG4gICAgcmV0dXJuIGF3YWl0IHV0aWxpdGllcy5nZXRPU1ZlcnNpb24odGhpcy51ZGlkKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBJT1NEZXBsb3k7XG4iXSwiZmlsZSI6ImxpYi9pb3MtZGVwbG95LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
@@ -83,8 +83,11 @@ commands.mobileQueryAppState = async function mobileQueryAppState (opts = {}) {
83
83
  return await this.proxyCommand('/wda/apps/state', 'POST', requireOptions(opts, ['bundleId']));
84
84
  };
85
85
 
86
- commands.installApp = async function installApp (appPath) {
87
- await this.mobileInstallApp({app: appPath});
86
+ commands.installApp = async function installApp (appPath, opts = {}) {
87
+ await this.mobileInstallApp({
88
+ ...(_.isPlainObject(opts) ? opts : {}),
89
+ app: appPath,
90
+ });
88
91
  };
89
92
 
90
93
  commands.activateApp = async function activateApp (bundleId, opts = {}) {
@@ -1,11 +1,12 @@
1
- import _ from 'lodash';
2
1
  import xmldom from '@xmldom/xmldom';
3
2
  import js2xml from 'js2xmlparser2';
4
3
 
5
4
 
6
5
  let commands = {}, helpers = {}, extensions = {};
7
6
 
8
- const APPIUM_SRC_XML = '<?xml version="1.0" encoding="UTF-8"?><AppiumAUT/>';
7
+ const APPIUM_AUT_TAG = 'AppiumAUT';
8
+ const APPIUM_SRC_XML = `<?xml version="1.0" encoding="UTF-8"?><${APPIUM_AUT_TAG}/>`;
9
+ const APPIUM_TAG_PATTERN = new RegExp(`</?${APPIUM_AUT_TAG}/?>`);
9
10
 
10
11
 
11
12
  commands.getPageSource = async function getPageSource () {
@@ -22,7 +23,13 @@ commands.getPageSource = async function getPageSource () {
22
23
  };
23
24
 
24
25
  helpers.getNativePageSource = async function getNativePageSource () {
25
- const srcTree = await this.proxyCommand('/source', 'GET');
26
+ const srcTree = await this.proxyCommand(`/source?scope=${APPIUM_AUT_TAG}`, 'GET');
27
+ if (APPIUM_TAG_PATTERN.test(srcTree)) {
28
+ return srcTree;
29
+ }
30
+ // This might only happen if the driver is using an older/cached WDA
31
+ // build (e.g. below 3.16.0)
32
+ // TODO: remove this block after a while
26
33
  const parser = new xmldom.DOMParser();
27
34
  const tree = parser.parseFromString(srcTree);
28
35
  const doc = parser.parseFromString(APPIUM_SRC_XML);
@@ -31,11 +38,9 @@ helpers.getNativePageSource = async function getNativePageSource () {
31
38
  };
32
39
 
33
40
  helpers.mobileGetSource = async function mobileGetSource (opts = {}) {
34
- if (!_.isString(opts.format)) {
35
- return await this.getNativePageSource();
36
- }
37
41
  const paramsMap = {
38
- format: opts.format,
42
+ format: opts.format || 'xml',
43
+ scope: APPIUM_AUT_TAG,
39
44
  };
40
45
  if (opts.excludedAttributes) {
41
46
  paramsMap.excluded_attributes = opts.excludedAttributes;
package/lib/driver.js CHANGED
@@ -35,7 +35,6 @@ import AsyncLock from 'async-lock';
35
35
  import path from 'path';
36
36
  import IDB from 'appium-idb';
37
37
  import DEVICE_CONNECTIONS_FACTORY from './device-connections-factory';
38
- import { ARGS_CONSTRAINTS } from './arg-constraints';
39
38
 
40
39
 
41
40
  const SHUTDOWN_OTHER_FEAT_NAME = 'shutdown_other_sims';
@@ -177,10 +176,6 @@ class XCUITestDriver extends BaseDriver {
177
176
  }
178
177
  }
179
178
 
180
- static get argsConstraints () {
181
- return ARGS_CONSTRAINTS;
182
- }
183
-
184
179
  async onSettingsUpdate (key, value) {
185
180
  if (key !== 'nativeWebTap' && key !== 'nativeWebTapStrict') {
186
181
  return await this.proxyCommand('/appium/settings', 'POST', {
@@ -234,13 +229,11 @@ class XCUITestDriver extends BaseDriver {
234
229
 
235
230
  mergeCliArgsToOpts () {
236
231
  let didMerge = false;
237
- for (const arg of Object.keys(ARGS_CONSTRAINTS)) {
238
- if (_.has(this.cliArgs, arg)) {
239
- log.info(`Using ${arg} value of '${this.cliArgs[arg]}' from CLI`);
240
- if (_.has(this.opts, arg)) {
241
- log.info(`(This overwrites value of '${this.opts[arg]}' sent in via caps)`);
242
- }
243
- this.opts[arg] = this.cliArgs[arg];
232
+ // this.cliArgs should never include anything we do not expect.
233
+ for (const [key, value] of Object.entries(this.cliArgs ?? {})) {
234
+ if (_.has(this.opts, key)) {
235
+ this.opts[key] = value;
236
+ log.info(`CLI arg '${key}' with value '${value}' overwrites value '${this.opts[key]}' sent in via caps)`);
244
237
  didMerge = true;
245
238
  }
246
239
  }
package/lib/ios-deploy.js CHANGED
@@ -126,8 +126,8 @@ class IOSDeploy {
126
126
  }
127
127
  }
128
128
 
129
- async installApp (app, timeout) {
130
- await this.install(app, timeout);
129
+ async installApp (...args) {
130
+ return await this.install(...args);
131
131
  }
132
132
 
133
133
  /**
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "xcuitest",
9
9
  "xctest"
10
10
  ],
11
- "version": "3.56.3",
11
+ "version": "3.58.2",
12
12
  "author": "appium",
13
13
  "license": "Apache-2.0",
14
14
  "repository": {
@@ -25,11 +25,37 @@
25
25
  "driverName": "xcuitest",
26
26
  "automationName": "XCUITest",
27
27
  "platformNames": [
28
- "iOS"
28
+ "iOS",
29
+ "tvOS"
29
30
  ],
30
31
  "mainClass": "XCUITestDriver",
31
32
  "scripts": {
32
33
  "build-wda": "./build/lib/build-wda.js"
34
+ },
35
+ "schema": {
36
+ "$schema": "http://json-schema.org/draft-07/schema",
37
+ "type": "object",
38
+ "properties": {
39
+ "webdriveragent-port": {
40
+ "appiumCliDest": "wdaLocalPort",
41
+ "default": 8100,
42
+ "description": "Local port used for communication with WebDriverAgent",
43
+ "maximum": 65535,
44
+ "minimum": 1,
45
+ "type": "integer"
46
+ },
47
+ "webkit-debug-proxy-port": {
48
+ "appiumCliDest": "webkitDebugProxyPort",
49
+ "default": 27753,
50
+ "description": "(Real device only) Port to which `ios-webkit-debug-proxy` is connected",
51
+ "maximum": 65535,
52
+ "minimum": 1,
53
+ "type": "integer"
54
+ }
55
+ },
56
+ "additionalProperties": false,
57
+ "title": "XCUITest Driver Configuration",
58
+ "description": "Appium configuration schema for the XCUITest driver."
33
59
  }
34
60
  },
35
61
  "main": "./build/index.js",
@@ -54,7 +80,7 @@
54
80
  "appium-ios-simulator": "^3.28.0",
55
81
  "appium-remote-debugger": "^8.13.2",
56
82
  "appium-support": "^2.47.1",
57
- "appium-webdriveragent": "^3.13.0",
83
+ "appium-webdriveragent": "^3.16.0",
58
84
  "appium-xcode": "^3.8.0",
59
85
  "async-lock": "^1.0.0",
60
86
  "asyncbox": "^2.3.1",
@@ -1,21 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.ARGS_CONSTRAINTS = void 0;
7
-
8
- require("source-map-support/register");
9
-
10
- const ARGS_CONSTRAINTS = {
11
- webkitDebugProxyPort: {
12
- isNumber: true
13
- },
14
- wdaLocalPort: {
15
- isNumber: true
16
- }
17
- };
18
- exports.ARGS_CONSTRAINTS = ARGS_CONSTRAINTS;require('source-map-support').install();
19
-
20
-
21
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9hcmctY29uc3RyYWludHMuanMiXSwibmFtZXMiOlsiQVJHU19DT05TVFJBSU5UUyIsIndlYmtpdERlYnVnUHJveHlQb3J0IiwiaXNOdW1iZXIiLCJ3ZGFMb2NhbFBvcnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFPLE1BQU1BLGdCQUFnQixHQUFHO0FBQzlCQyxFQUFBQSxvQkFBb0IsRUFBRTtBQUNwQkMsSUFBQUEsUUFBUSxFQUFFO0FBRFUsR0FEUTtBQUk5QkMsRUFBQUEsWUFBWSxFQUFFO0FBQ1pELElBQUFBLFFBQVEsRUFBRTtBQURFO0FBSmdCLENBQXpCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IEFSR1NfQ09OU1RSQUlOVFMgPSB7XG4gIHdlYmtpdERlYnVnUHJveHlQb3J0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgd2RhTG9jYWxQb3J0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbn07XG4iXSwiZmlsZSI6ImxpYi9hcmctY29uc3RyYWludHMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
@@ -1,8 +0,0 @@
1
- export const ARGS_CONSTRAINTS = {
2
- webkitDebugProxyPort: {
3
- isNumber: true
4
- },
5
- wdaLocalPort: {
6
- isNumber: true
7
- },
8
- };