appium-xcuitest-driver 3.56.2 → 3.58.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/lib/commands/app-management.js +3 -3
- package/build/lib/commands/context.js +1 -5
- package/build/lib/commands/source.js +12 -10
- package/build/lib/driver.js +7 -14
- package/lib/commands/app-management.js +5 -2
- package/lib/commands/context.js +0 -4
- package/lib/commands/source.js +12 -7
- package/lib/driver.js +5 -12
- package/package.json +29 -3
- package/build/lib/arg-constraints.js +0 -21
- package/lib/arg-constraints.js +0 -8
|
@@ -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
|
|
@@ -389,10 +389,6 @@ extensions.connectToRemoteDebugger = async function connectToRemoteDebugger() {
|
|
|
389
389
|
};
|
|
390
390
|
|
|
391
391
|
extensions.listWebFrames = async function listWebFrames(useUrl = true) {
|
|
392
|
-
if (!this.opts.bundleId) {
|
|
393
|
-
_logger.default.errorAndThrow('Cannot enter web frame without a bundle ID');
|
|
394
|
-
}
|
|
395
|
-
|
|
396
392
|
useUrl = useUrl && !this.isRealDevice() && !!this.getCurrentUrl();
|
|
397
393
|
|
|
398
394
|
_logger.default.debug(`Selecting by url: ${useUrl} ${useUrl ? `(expected url: '${this.getCurrentUrl()}')` : ''}`);
|
|
@@ -676,4 +672,4 @@ var _default = commands;
|
|
|
676
672
|
exports.default = _default;require('source-map-support').install();
|
|
677
673
|
|
|
678
674
|
|
|
679
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9jb250ZXh0LmpzIl0sIm5hbWVzIjpbIk5BVElWRV9XSU4iLCJXRUJWSUVXX1dJTiIsIldFQlZJRVdfQkFTRSIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJnZXRDdXJyZW50Q29udGV4dCIsImN1ckNvbnRleHQiLCJnZXRDb250ZXh0c0FuZFZpZXdzIiwidXNlVXJsIiwibG9nIiwiZGVidWciLCJ3ZWJ2aWV3cyIsImxpc3RXZWJGcmFtZXMiLCJjdHhzIiwiaWQiLCJ2aWV3IiwiY29udGV4dHMiLCJwdXNoIiwidG9TdHJpbmciLCJ1c2VOZXdTYWZhcmkiLCJwYXJzZUZsb2F0IiwiaW9zU2RrVmVyc2lvbiIsIm9wdHMiLCJwbGF0Zm9ybVZlcnNpb24iLCJpc1JlYWxEZXZpY2UiLCJzYWZhcmkiLCJ0eXBlQW5kTmF2VG9VcmwiLCJhZGRyZXNzIiwic2V0Q3VycmVudFVybCIsImNhcHMiLCJzYWZhcmlJbml0aWFsVXJsIiwicG9ydCIsInRyaWVzIiwiTUFYX1RSSUVTIiwibmF2aWdhdGUiLCJvbGRJbXBXYWl0IiwiaW1wbGljaXRXYWl0TXMiLCJlbCIsImZpbmRFbGVtZW50IiwibmF0aXZlVGFwIiwiRUxFTUVOVCIsImVyciIsIl8iLCJpbmNsdWRlcyIsIm1lc3NhZ2UiLCJuZXdQYWdlQnV0dG9uIiwic2V0VmFsdWVJbW1lZGlhdGUiLCJnZXRDdXJyZW50VXJsIiwiZXJyb3IiLCJuYXZUb1ZpZXdXaXRoVGl0bGUiLCJ1bmRlZmluZWQiLCJSZWdFeHAiLCJyZW1vdGUiLCJwYWdlVW5sb2FkIiwibmF2VG9WaWV3VGhyb3VnaEZhdm9yaXRlcyIsIm1zZyIsInRpdGxlUmVnZXgiLCJ1cmxSZWdFeHAiLCJzdGFydCIsIkRhdGUiLCJub3ciLCJzcGluVGltZSIsInNwaW5IYW5kbGVzIiwicmVzIiwiZ2V0TGF0ZXN0V2Vidmlld0NvbnRleHRGb3JUaXRsZSIsIkVycm9yIiwic3RhY2siLCJsYXRlc3RXaW5kb3ciLCJzZXRDb250ZXh0IiwiY2FuY2VsUGFnZUxvYWQiLCJ3YXJuIiwiQiIsImRlbGF5IiwiZWxlbWVudCIsImZpbmRVSUVsZW1lbnRPckVsZW1lbnRzIiwic3RvcFJlbW90ZSIsImNsb3NlV2luZG93QmVmb3JlRGlzY29ubmVjdGluZyIsImVycm9yQW5kVGhyb3ciLCJjbG9zZVdpbmRvdyIsImRpc2Nvbm5lY3QiLCJjdXJXZWJGcmFtZXMiLCJjdXJXZWJDb29yZHMiLCJ1cmwiLCJfY3VycmVudFVybCIsImNsb3NlQWxlcnRCZWZvcmVUZXN0IiwibmF2VG9Jbml0aWFsV2VidmlldyIsInJlZ0V4cCIsImN1cnJlbnRVcmwiLCJmaWx0ZXIiLCJjdHgiLCJ0aXRsZSIsInRlc3QiLCJpc1dlYkNvbnRleHQiLCJpc1dlYnZpZXciLCJnZXROZXdSZW1vdGVEZWJ1Z2dlciIsInNvY2tldFBhdGgiLCJkZXZpY2UiLCJnZXRXZWJJbnNwZWN0b3JTb2NrZXQiLCJidW5kbGVJZCIsImFkZGl0aW9uYWxCdW5kbGVJZHMiLCJhZGRpdGlvbmFsV2Vidmlld0J1bmRsZUlkcyIsImlzU2FmYXJpIiwiaW5jbHVkZVNhZmFyaSIsImluY2x1ZGVTYWZhcmlJbldlYnZpZXdzIiwicGFnZUxvYWRNcyIsInJlbW90ZURlYnVnUHJveHkiLCJnYXJiYWdlQ29sbGVjdE9uRXhlY3V0ZSIsInV0aWwiLCJoYXNWYWx1ZSIsInNhZmFyaUdhcmJhZ2VDb2xsZWN0IiwidWRpZCIsImxvZ0FsbENvbW11bmljYXRpb24iLCJzYWZhcmlMb2dBbGxDb21tdW5pY2F0aW9uIiwibG9nQWxsQ29tbXVuaWNhdGlvbkhleER1bXAiLCJzYWZhcmlMb2dBbGxDb21tdW5pY2F0aW9uSGV4RHVtcCIsInNvY2tldENodW5rU2l6ZSIsInNhZmFyaVNvY2tldENodW5rU2l6ZSIsIndlYkluc3BlY3Rvck1heEZyYW1lTGVuZ3RoIiwic2FmYXJpV2ViSW5zcGVjdG9yTWF4RnJhbWVMZW5ndGgiLCJuYW1lIiwiY2FsbGJhY2siLCJza2lwUmVhZHlDaGVjayIsImFscmVhZHlJbkNvbnRleHQiLCJkZXNpcmVkIiwiY3VycmVudCIsImlzTmF0aXZlQ29udGV4dCIsImNvbnRleHQiLCJyZXBsYWNlIiwiaXNVbmRlZmluZWQiLCJnZXRDb250ZXh0cyIsImNvbnRleHRJZCIsImVycm9ycyIsIk5vU3VjaENvbnRleHRFcnJvciIsIm9sZENvbnRleHQiLCJjdXJXaW5kb3dIYW5kbGUiLCJhcHBJZEtleSIsInBhZ2VJZEtleSIsIm1hcCIsInNwbGl0IiwicGFyc2VJbnQiLCJzZWxlY3RpbmdOZXdQYWdlIiwic2VsZWN0UGFnZSIsImVuYWJsZVBlcmZvcm1hbmNlTG9nZ2luZyIsImxvZ3MiLCJwZXJmb3JtYW5jZSIsIklPU1BlcmZvcm1hbmNlTG9nIiwic3RhcnRDYXB0dXJlIiwic2FmYXJpQ29uc29sZSIsInN0YXJ0Q29uc29sZSIsImFkZExvZ0xpbmUiLCJiaW5kIiwic2FmYXJpTmV0d29yayIsInN0YXJ0TmV0d29yayIsImNvbm5lY3RUb1JlbW90ZURlYnVnZ2VyIiwib24iLCJSZW1vdGVEZWJ1Z2dlciIsIkVWRU5UX1BBR0VfQ0hBTkdFIiwib25QYWdlQ2hhbmdlIiwiRVZFTlRfRlJBTUVTX0RFVEFDSEVEIiwiaXNFbXB0eSIsInBsdXJhbGl6ZSIsImxlbmd0aCIsImpvaW4iLCJjb25uZWN0Iiwid2Vidmlld0Nvbm5lY3RUaW1lb3V0IiwicGFnZUFycmF5IiwiZ2V0V2Vidmlld1BhZ2VzIiwic2VsZWN0QXBwIiwid2Vidmlld0Nvbm5lY3RSZXRyaWVzIiwiaWdub3JlQWJvdXRCbGFua1VybCIsInNldENvbm5lY3Rpb25LZXkiLCJhbGVydEVycm9yTXNnIiwibWFwRm4iLCJmdWxsQ29udGV4dExpc3QiLCJtb2JpbGVHZXRDb250ZXh0cyIsIndhaXRGb3JXZWJ2aWV3TXMiLCJpc051bWJlciIsImlzTmFOIiwiY3VyT3B0IiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsImdldER1cmF0aW9uIiwiYXNNaWxsaVNlY29uZHMiLCJ0b0ZpeGVkIiwic2V0V2luZG93Iiwibm9vcCIsIk5vU3VjaFdpbmRvd0Vycm9yIiwiZ2V0V2luZG93SGFuZGxlIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsImdldFdpbmRvd0hhbmRsZXMiLCJwYWdlQ2hhbmdlTm90aWZpY2F0aW9uIiwiSlNPTiIsInN0cmluZ2lmeSIsImlzQ29ubmVjdGVkIiwibmV3SWRzIiwibmV3UGFnZXMiLCJrZXlJZCIsImlzVXJsSWdub3JlZCIsInNhZmFyaUlnbm9yZVdlYkhvc3RuYW1lcyIsImlnbm9yZWRIb3N0cyIsImIiLCJ0cmltIiwiaWdub3JlZEhvc3QiLCJob3N0bmFtZSIsIlVSTCIsImlnbiIsInBhZ2UiLCJpc0tleSIsImluZm8iLCJjdXJBcHBJZEtleSIsImN1clBhZ2VJZEtleSIsIm5ld1BhZ2UiLCJsYXN0IiwibmVlZHNQYWdlTG9hZCIsImNvbnRleHRBcnJheSIsImlzRXF1YWwiLCJmaW5kIiwicGFnZUxvYWQiLCJjdXJyZW50UGFnZUlkIiwicCIsImNhdGNoIiwid2luZG93SGFuZGxlQ2FjaGUiLCJPYmplY3QiLCJhc3NpZ24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsVUFBVSxHQUFHLFlBQW5CO0FBQ0EsTUFBTUMsV0FBVyxHQUFHLFNBQXBCO0FBQ0EsTUFBTUMsWUFBWSxHQUFJLEdBQUVELFdBQVksR0FBcEM7QUFFQSxNQUFNRSxRQUFRLEdBQUcsRUFBakI7QUFBQSxNQUFxQkMsT0FBTyxHQUFHLEVBQS9CO0FBQUEsTUFBbUNDLFVBQVUsR0FBRyxFQUFoRDs7QUFHQUYsUUFBUSxDQUFDRyxpQkFBVCxHQUE2QixlQUFlQSxpQkFBZixHQUFvQztBQUMvRCxNQUFJLEtBQUtDLFVBQUwsSUFBbUIsS0FBS0EsVUFBTCxLQUFvQlAsVUFBM0MsRUFBdUQ7QUFDckQsV0FBUSxHQUFFRSxZQUFhLEdBQUUsS0FBS0ssVUFBVyxFQUF6QztBQUNEOztBQUNELFNBQU9QLFVBQVA7QUFDRCxDQUxEOztBQU9BSyxVQUFVLENBQUNHLG1C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RUFDR1MsS0FESCxDQUNVcEwsR0FBRCxJQUFTO0FBQ2RoQyxzQkFBSTZELElBQUosQ0FBVSwwQkFBeUI3QixHQUFHLENBQUNHLE9BQVEsRUFBL0M7O0FBQ0EsV0FBS3RDLFVBQUwsR0FBa0IrSCxVQUFsQjtBQUNELEtBSkg7QUFLQSxTQUFLTyxnQkFBTCxHQUF3QixLQUF4QjtBQUNEOztBQUNELE9BQUtrRixpQkFBTCxHQUF5QnpELFNBQXpCO0FBQ0QsQ0E3SUQ7O0FBZ0pBMEQsTUFBTSxDQUFDQyxNQUFQLENBQWM5TixRQUFkLEVBQXdCRSxVQUF4QixFQUFvQ0QsT0FBcEM7ZUFDZUQsUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZVJlbW90ZURlYnVnZ2VyLCBSZW1vdGVEZWJ1Z2dlciB9IGZyb20gJ2FwcGl1bS1yZW1vdGUtZGVidWdnZXInO1xuaW1wb3J0IHsgZXJyb3JzLCBpc0Vycm9yVHlwZSB9IGZyb20gJ2FwcGl1bS1iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyB1dGlsLCB0aW1pbmcgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgSU9TUGVyZm9ybWFuY2VMb2cgZnJvbSAnLi4vZGV2aWNlLWxvZy9pb3MtcGVyZm9ybWFuY2UtbG9nJztcbmltcG9ydCB7IHJldHJ5SW50ZXJ2YWwgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG5jb25zdCBOQVRJVkVfV0lOID0gJ05BVElWRV9BUFAnO1xuY29uc3QgV0VCVklFV19XSU4gPSAnV0VCVklFVyc7XG5jb25zdCBXRUJWSUVXX0JBU0UgPSBgJHtXRUJWSUVXX1dJTn1fYDtcblxuY29uc3QgY29tbWFuZHMgPSB7fSwgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cblxuY29tbWFuZHMuZ2V0Q3VycmVudENvbnRleHQgPSBhc3luYyBmdW5jdGlvbiBnZXRDdXJyZW50Q29udGV4dCAoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICBpZiAodGhpcy5jdXJDb250ZXh0ICYmIHRoaXMuY3VyQ29udGV4dCAhPT0gTkFUSVZFX1dJTikge1xuICAgIHJldHVybiBgJHtXRUJWSUVXX0JBU0V9JHt0aGlzLmN1ckNvbnRleHR9YDtcbiAgfVxuICByZXR1cm4gTkFUSVZFX1dJTjtcbn07XG5cbmV4dGVuc2lvbnMuZ2V0Q29udGV4dHNBbmRWaWV3cyA9IGFzeW5jIGZ1bmN0aW9uIGdldENvbnRleHRzQW5kVmlld3MgKHVzZVVybCA9IHRydWUpIHtcbiAgbG9nLmRlYnVnKCdSZXRyaWV2aW5nIGNvbnRleHRzIGFuZCB2aWV3cycpO1xuICBsZXQgd2Vidmlld3MgPSBhd2FpdCB0aGlzLmxpc3RXZWJGcmFtZXModXNlVXJsKTtcblxuICBsZXQgY3R4cyA9IFt7aWQ6IE5BVElWRV9XSU4sIHZpZXc6IHt9fV07XG4gIHRoaXMuY29udGV4dHMgPSBbTkFUSVZFX1dJTl07XG4gIGZvciAobGV0IHZpZXcgb2Ygd2Vidmlld3MpIHtcbiAgICBjdHhzLnB1c2goe2lkOiBgJHtXRUJWSUVXX0JBU0V9JHt2aWV3LmlkfWAsIHZpZXd9KTtcbiAgICB0aGlzLmNvbnRleHRzLnB1c2godmlldy5pZC50b1N0cmluZygpKTtcbiAgfVxuICByZXR1cm4gY3R4cztcbn07XG5cbi8vIFJpZ2h0IG5vdyB3ZSBkb24ndCBuZWNlc3NhcmlseSB3YWl0IGZvciB3ZWJ2aWV3XG4vLyBhbmQgZnJhbWUgdG8gbG9hZCwgd2hpY2ggbGVhZHMgdG8gcmFjZSBjb25kaXRpb25zIGFuZCBmbGFraW5lc3MsXG4vLyBsZXQncyBzZWUgaWYgd2UgY2FuIHRyYW5zaXRpb24gdG8gc29tZXRoaW5nIGJldHRlclxuZXh0ZW5zaW9ucy51c2VOZXdTYWZhcmkgPSBmdW5jdGlvbiB1c2VOZXdTYWZhcmkgKCkge1xuICByZXR1cm4gcGFyc2VGbG9hdCh0aGlzLmlvc1Nka1ZlcnNpb24pID49IDguMSAmJlxuICAgIHBhcnNlRmxvYXQodGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbikgPj0gOC4xICYmXG4gICAgIXRoaXMuaXNSZWFsRGV2aWNlKCkgJiZcbiAgICB0aGlzLm9wdHMuc2FmYXJpO1xufTtcblxuZXh0ZW5zaW9ucy50eXBlQW5kTmF2VG9VcmwgPSBhc3luYyBmdW5jdGlvbiB0eXBlQW5kTmF2VG9VcmwgKCkge1xuICBsZXQgYWRkcmVzcyA9IHRoaXMub3B0cy5hZGRyZXNzID8gdGhpcy5vcHRzLmFkZHJlc3MgOiAnMTI3LjAuMC4xJztcbiAgdGhpcy5zZXRDdXJyZW50VXJsKHRoaXMuY2Fwcy5zYWZhcmlJbml0aWFsVXJsIHx8IGBodHRwOi8vJHthZGRyZXNzfToke3RoaXMub3B0cy5wb3J0fS93ZWxjb21lYCk7XG5cbiAgbGV0IHRyaWVzID0gMDtcbiAgY29uc3QgTUFYX1RSSUVTID0gMjtcbiAgbGV0IG5hdmlnYXRlID0gYXN5bmMgKCkgPT4ge1xuICAgIGxldCBvbGRJbXBXYWl0ID0gdGhpcy5pbXBsaWNpdFdhaXRNcztcbiAgICB0aGlzLmltcGxpY2l0V2FpdE1zID0gNzAwMDtcblxuICAgIC8vIGZpbmQgdGhlIHVybCBiYXIsIGFuZCB0YXAgb24gaXQuIHJldHJ5IHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCB0cnlcbiAgICAvLyB0b28gc29vbiB3aGlsZSB0aGUgdmlldyBpcyBzdGlsbCBsb2FkaW5nXG4gICAgbGV0IGVsID0gYXdhaXQgcmV0cnlJbnRlcnZhbCgzLCAxMDAwLCBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLmZpbmRFbGVtZW50KCdhY2Nlc3NpYmlsaXR5IGlkJywgJ1VSTCcpKTtcbiAgICB0aGlzLmltcGxpY2l0V2FpdE1zID0gb2xkSW1wV2FpdDtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLm5hdGl2ZVRhcChlbC5FTEVNRU5UKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChfLmluY2x1ZGVzKGVyci5tZXNzYWdlLCAnY291bGQgbm90IGJlIHRhcHBlZCcpKSB7XG4gICAgICAgIGlmICh0cmllcysrID49IE1BWF9UUklFUykgdGhyb3cgZXJyOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGN1cmx5XG5cbiAgICAgICAgLy8gZ2VuZXJhbGx5IHRoaXMgbWVhbnMgdGhhdCBTYWZhcmkgaXMgaW4gcGFnZSB2aWV3aW5nIG1vZGVcbiAgICAgICAgLy8gc28gdHJ5IHRvIG9wZW4gYSBuZXcgcGFnZSBhbmQgdGhlbiByZWRvIHRoZSBuYXZpZ2F0aW9uXG4gICAgICAgIGxldCBuZXdQYWdlQnV0dG9uID0gYXdhaXQgdGhpcy5maW5kRWxlbWVudCgneHBhdGgnLCBcIi8vWENVSUVsZW1lbnRUeXBlQnV0dG9uW2NvbnRhaW5zKEBuYW1lLCdOZXcgcGFnZScpXVwiKTtcbiAgICAgICAgYXdhaXQgdGhpcy5uYXRpdmVUYXAobmV3UGFnZUJ1dHRvbi5FTEVNRU5UKTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IG5hdmlnYXRlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZ2V0IHRoZSBsYXN0IGFkZHJlc3MgZWxlbWVudCBhbmQgc2V0IHRoZSB1cmxcbiAgICB0cnkge1xuICAgICAgbGV0IGVsID0gYXdhaXQgdGhpcy5maW5kRWxlbWVudCgnY2xhc3MgbmFtZScsICdYQ1VJRWxlbWVudFR5cGVUZXh0RmllbGQnKTtcbiAgICAgIGF3YWl0IHRoaXMuc2V0VmFsdWVJbW1lZGlhdGUodGhpcy5nZXRDdXJyZW50VXJsKCksIGVsKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIHRoaXMgaXMgZmxha2V5IG9uIGNlcnRhaW4gc3lzdGVtcyBzbyB3ZSByZXRyeSB1bnRpbCB3ZSBnZXQgc29tZXRoaW5nXG4gICAgICAvLyBpb3Mgc2ltczogc2FmYXJpIG9wZW5zIGJ1dCB0aGUgdGV4dCBmaWVsZCBjYW4ndCBiZSBmb3VuZFxuICAgICAgaWYgKHRyaWVzKysgPj0gTUFYX1RSSUVTKSB0aHJvdyBlcnI7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcbiAgICAgIHJldHVybiBhd2FpdCBuYXZpZ2F0ZSgpO1xuICAgIH1cblxuICAgIC8vIG1ha2UgaXQgaGFwcGVuXG4gICAgdHJ5IHtcbiAgICAgIGVsID0gYXdhaXQgdGhpcy5maW5kRWxlbWVudCgnYWNjZXNzaWJpbGl0eSBpZCcsICdHbycpO1xuICAgICAgYXdhaXQgdGhpcy5uYXRpdmVUYXAoZWwuRUxFTUVOVCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoXy5pbmNsdWRlcyhlcnIubWVzc2FnZSwgJ2NvdWxkIG5vdCBiZSB0YXBwZWQnKSkge1xuICAgICAgICBsb2cuZXJyb3IoJ1VuYWJsZSB0byBzdWJtaXQgVVJMIGJlY2F1c2UgXFwnR29cXCcgYnV0dG9uIGNvdWxkIG5vdCBiZSB0YXBwZWQuICcgK1xuICAgICAgICAgICdQbGVhc2UgbWFrZSBzdXJlIHlvdXIga2V5Ym9hcmQgaXMgdG9nZ2xlZCBvbi4nKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5uYXZUb1ZpZXdXaXRoVGl0bGUodW5kZWZpbmVkLCBuZXcgUmVnRXhwKHRoaXMuZ2V0Q3VycmVudFVybCgpLCAnaScpKTtcblxuICAgIC8vIHdhaXQgZm9yIHBhZ2UgdG8gZmluaXNoIGxvYWRpbmcuXG4gICAgYXdhaXQgdGhpcy5yZW1vdGUucGFnZVVubG9hZCgpO1xuICB9O1xuICBhd2FpdCBuYXZpZ2F0ZSgpO1xufTtcblxuZXh0ZW5zaW9ucy5uYXZUb1ZpZXdUaHJvdWdoRmF2b3JpdGVzID0gYXN5bmMgZnVuY3Rpb24gbmF2VG9WaWV3VGhyb3VnaEZhdm9yaXRlcyAoKSB7XG4gIGxvZy5kZWJ1ZygnV2UgYXJlIG9uIGlPUzcrIHNpbXVsYXRvcjogY2xpY2tpbmcgYXBwbGUgYnV0dG9uIHRvIGdldCBpbnRvIGEgd2VidmlldycpO1xuICBsZXQgb2xkSW1wV2FpdCA9IHRoaXMuaW1wbGljaXRXYWl0TXM7XG4gIHRoaXMuaW1wbGljaXRXYWl0TXMgPSA3MDAwOyAvLyB3YWl0IDdzIGZvciBhcHBsZSBidXR0b24gdG8gZXhpc3RcblxuICBsZXQgZWw7XG4gIHRyeSB7XG4gICAgZWwgPSBhd2FpdCB0aGlzLmZpbmRFbGVtZW50KCd4cGF0aCcsICcvL1hDVUlFbGVtZW50VHlwZVNjcm9sbFZpZXdbMV0vWENVSUVsZW1lbnRUeXBlQnV0dG9uWzFdJyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxldCBtc2cgPSAnQ291bGQgbm90IGZpbmQgYnV0dG9uIHRvIGNsaWNrIHRvIGdldCBpbnRvIHdlYnZpZXcuICcgK1xuICAgICAgICAgICAgICAnUHJvY2VlZGluZyBvbiB0aGUgYXNzdW1wdGlvbiB3ZSBoYXZlIGEgd29ya2luZyBvbmUuJztcbiAgICBsb2cuZXJyb3IobXNnKTtcbiAgICB0aGlzLmltcGxpY2l0V2FpdE1zID0gb2xkSW1wV2FpdDtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5uYXZUb1ZpZXdXaXRoVGl0bGUoLy4qL2kpO1xuICB9XG4gIHRoaXMuaW1wbGljaXRXYWl0TXMgPSBvbGRJbXBXYWl0O1xuICB0cnkge1xuICAgIGF3YWl0IHRoaXMubmF0aXZlVGFwKGVsLkVMRU1FTlQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsZXQgbXNnID0gJ0NvdWxkIG5vdCBjbGljayBidXR0b24gdG8gZ2V0IGludG8gd2Vidmlldy4gJyArXG4gICAgICAgICAgICAgICdQcm9jZWVkaW5nIG9uIHRoZSBhc3N1bXB0aW9uIHdlIGhhdmUgYSB3b3JraW5nIG9uZS4nO1xuICAgIGxvZy5lcnJvcihtc2cpO1xuICB9XG4gIGF3YWl0IHRoaXMubmF2VG9WaWV3V2l0aFRpdGxlKC9hcHBsZS9pKTtcbn07XG5cbmV4dGVuc2lvbnMubmF2VG9WaWV3V2l0aFRpdGxlID0gYXN5bmMgZnVuY3Rpb24gbmF2VG9WaWV3V2l0aFRpdGxlICh0aXRsZVJlZ2V4LCB1cmxSZWdFeHApIHtcbiAgbG9nLmRlYnVnKCdOYXZpZ2F0aW5nIHRvIG1vc3QgcmVjZW50bHkgb3BlbmVkIHdlYnZpZXcnKTtcbiAgbGV0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgbGV0IHNwaW5UaW1lID0gNTAwO1xuICBsZXQgc3BpbkhhbmRsZXMgPSBhc3luYyAoKSA9PiB7XG4gICAgbGV0IHJlcztcbiAgICB0cnkge1xuICAgICAgcmVzID0gYXdhaXQgdGhpcy5nZXRMYXRlc3RXZWJ2aWV3Q29udGV4dEZvclRpdGxlKHRpdGxlUmVnZXggfHwgdXJsUmVnRXhwKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICghZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ0NvdWxkIG5vdCBjb25uZWN0IHRvIGEgdmFsaWQgYXBwIGFmdGVyJykpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoYENvdWxkIG5vdCBuYXZpZ2F0ZSB0byB3ZWJ2aWV3ISBFcnI6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIGVycm9yLnN0YWNrICs9IGBcXG5DYXVzZWQgYnk6ICR7ZXJyLnN0YWNrfWA7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgICAgbG9nLmRlYnVnKCdDb3VsZCBub3QgbmF2aWdhdGUgdG8gd2Vidmlldy4gUmV0cnlpbmcgaWYgcG9zc2libGUuJyk7XG4gICAgfVxuICAgIGlmIChyZXMpIHtcbiAgICAgIGxldCBsYXRlc3RXaW5kb3cgPSByZXM7XG4gICAgICBsb2cuZGVidWcoYFBpY2tpbmcgd2VidmlldyAnJHtsYXRlc3RXaW5kb3d9J2ApO1xuICAgICAgYXdhaXQgdGhpcy5zZXRDb250ZXh0KGxhdGVzdFdpbmRvdyk7XG4gICAgICBhd2FpdCB0aGlzLnJlbW90ZS5jYW5jZWxQYWdlTG9hZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIG5vIHdlYnZpZXcgd2FzIGZvdW5kXG4gICAgaWYgKChEYXRlLm5vdygpIC0gc3RhcnQpID49IDkwMDAwKSB7XG4gICAgICAvLyB0b28gc2xvdywgZ2V0IG91dFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgbmF2aWdhdGUgdG8gd2VidmlldzsgdGhlcmUgYXJlIG5vbmUhJyk7XG4gICAgfVxuXG4gICAgbG9nLndhcm4oJ0NvdWxkIG5vdCBmaW5kIGFueSB3ZWJ2aWV3cyB5ZXQsIHJlZnJlc2hpbmcvcmV0cnlpbmcnKTtcbiAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSB8fCAhdGhpcy5vcHRzLnNhZmFyaSkge1xuICAgICAgLy8gb24gYSByZWFsIGRldmljZSwgd2hlbiBub3QgdXNpbmcgU2FmYXJpLCB3ZSBqdXN0IHdhbnQgdG8gdHJ5IGFnYWluXG4gICAgICBhd2FpdCBCLmRlbGF5KHNwaW5UaW1lKTtcbiAgICAgIHJldHVybiBhd2FpdCBzcGluSGFuZGxlcygpO1xuICAgIH1cblxuICAgIC8vIGZpbmQgdGhlIHJlbG9hZCBidXR0b24gYW5kIHRhcCBpdCwgaWYgcG9zc2libGVcbiAgICBsZXQgZWxlbWVudDtcbiAgICB0cnkge1xuICAgICAgbG9nLmRlYnVnKCdGaW5kaW5nIGFuZCB0YXBwaW5nIHJlbG9hZCBidXR0b24nKTtcbiAgICAgIGVsZW1lbnQgPSBhd2FpdCB0aGlzLmZpbmRVSUVsZW1lbnRPckVsZW1lbnRzKCdhY2Nlc3NpYmlsaXR5IGlkJywgJ1JlbG9hZEJ1dHRvbicsICcnLCBmYWxzZSk7XG4gICAgICBhd2FpdCB0aGlzLm5hdGl2ZVRhcChlbGVtZW50LkVMRU1FTlQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLndhcm4oYEVycm9yIGZpbmRpbmcgYW5kIHRhcHBpbmcgcmVsb2FkIGJ1dHRvbjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIGxvZy53YXJuKCdSZXRyeWluZy4nKTtcbiAgICAgIGF3YWl0IEIuZGVsYXkoc3BpblRpbWUpO1xuICAgIH1cblxuICAgIC8vIHRyeSBpdCBhbGwgYWdhaW5cbiAgICByZXR1cm4gYXdhaXQgc3BpbkhhbmRsZXMoKTtcbiAgfTtcbiAgYXdhaXQgc3BpbkhhbmRsZXMoKTtcbn07XG5cbmhlbHBlcnMuc3RvcFJlbW90ZSA9IGFzeW5jIGZ1bmN0aW9uIHN0b3BSZW1vdGUgKGNsb3NlV2luZG93QmVmb3JlRGlzY29ubmVjdGluZyA9IGZhbHNlKSB7XG4gIGlmICghdGhpcy5yZW1vdGUpIHtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdygnVHJpZWQgdG8gbGVhdmUgYSB3ZWIgZnJhbWUgYnV0IHdlcmUgbm90IGluIG9uZScpO1xuICB9XG5cbiAgaWYgKGNsb3NlV2luZG93QmVmb3JlRGlzY29ubmVjdGluZykge1xuICAgIGF3YWl0IHRoaXMuY2xvc2VXaW5kb3coKTtcbiAgfVxuICBhd2FpdCB0aGlzLnJlbW90ZS5kaXNjb25uZWN0KCk7XG4gIHRoaXMuY3VyQ29udGV4dCA9IG51bGw7XG4gIHRoaXMuY3VyV2ViRnJhbWVzID0gW107XG4gIHRoaXMuY3VyV2ViQ29vcmRzID0gbnVsbDtcbiAgdGhpcy5yZW1vdGUgPSBudWxsO1xufTtcblxuaGVscGVycy5zZXRDdXJyZW50VXJsID0gZnVuY3Rpb24gc2V0Q3VycmVudFVybCAodXJsKSB7XG4gIHRoaXMuX2N1cnJlbnRVcmwgPSB1cmw7XG59O1xuXG5oZWxwZXJzLmdldEN1cnJlbnRVcmwgPSBmdW5jdGlvbiBnZXRDdXJyZW50VXJsICgpIHtcbiAgcmV0dXJuIHRoaXMuX2N1cnJlbnRVcmw7XG59O1xuXG5leHRlbnNpb25zLmNsb3NlQWxlcnRCZWZvcmVUZXN0ID0gYXN5bmMgZnVuY3Rpb24gY2xvc2VBbGVydEJlZm9yZVRlc3QgKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgcmV0dXJuIHRydWU7XG59O1xuXG5leHRlbnNpb25zLm5hdlRvSW5pdGlhbFdlYnZpZXcgPSBhc3luYyBmdW5jdGlvbiBuYXZUb0luaXRpYWxXZWJ2aWV3ICgpIHtcbiAgaWYgKHRoaXMudXNlTmV3U2FmYXJpKCkpIHtcbiAgICBhd2FpdCB0aGlzLnR5cGVBbmROYXZUb1VybCgpO1xuICB9IGVsc2UgaWYgKCF0aGlzLmlzUmVhbERldmljZSgpICYmIHRoaXMub3B0cy5zYWZhcmkpIHtcbiAgICBhd2FpdCB0aGlzLm5hdlRvVmlld1Rocm91Z2hGYXZvcml0ZXMoKTtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCB0aGlzLm5hdlRvVmlld1dpdGhUaXRsZSgvLiovKTtcbiAgfVxufTtcblxuZXh0ZW5zaW9ucy5nZXRMYXRlc3RXZWJ2aWV3Q29udGV4dEZvclRpdGxlID0gYXN5bmMgZnVuY3Rpb24gZ2V0TGF0ZXN0V2Vidmlld0NvbnRleHRGb3JUaXRsZSAocmVnRXhwKSB7XG4gIGNvbnN0IGN1cnJlbnRVcmwgPSB0aGlzLmdldEN1cnJlbnRVcmwoKTtcblxuICBjb25zdCBjb250ZXh0cyA9IF8uZmlsdGVyKGF3YWl0IHRoaXMuZ2V0Q29udGV4dHNBbmRWaWV3cygpLCAndmlldycpO1xuXG4gIGlmIChjdXJyZW50VXJsKSB7XG4gICAgLy8gZmlyc3QgdHJ5IHRvIG1hdGNoIGJ5IGN1cnJlbnQgdXJsXG4gICAgZm9yIChjb25zdCBjdHggb2YgY29udGV4dHMpIHtcbiAgICAgIGlmICgoY3R4LnZpZXcudXJsIHx8ICcnKSA9PT0gdGhpcy5nZXRDdXJyZW50VXJsKCkpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBpZiBub3QsIHRyeSB0byBtYXRjaCBieSByZWd1bGFyIGV4cHJlc3Npb25cbiAgZm9yIChjb25zdCBjdHggb2YgY29udGV4dHMpIHtcbiAgICBpZiAoKGN0eC52aWV3LnRpdGxlICYmIHJlZ0V4cC50ZXN0KGN0eC52aWV3LnRpdGxlKSkgfHwgKGN0eC52aWV3LnVybCAmJiByZWdFeHAudGVzdChjdHgudmlldy51cmwpKSkge1xuICAgICAgcmV0dXJuIGN0eC5pZDtcbiAgICB9XG4gIH1cbn07XG5cbmV4dGVuc2lvbnMuaXNXZWJDb250ZXh0ID0gZnVuY3Rpb24gaXNXZWJDb250ZXh0ICgpIHtcbiAgcmV0dXJuICEhdGhpcy5jdXJDb250ZXh0ICYmIHRoaXMuY3VyQ29udGV4dCAhPT0gTkFUSVZFX1dJTjtcbn07XG5cbmV4dGVuc2lvbnMuaXNXZWJ2aWV3ID0gZnVuY3Rpb24gaXNXZWJ2aWV3ICgpIHtcbiAgcmV0dXJuIHRoaXMuaXNXZWJDb250ZXh0KCk7XG59O1xuXG5leHRlbnNpb25zLmdldE5ld1JlbW90ZURlYnVnZ2VyID0gYXN5bmMgZnVuY3Rpb24gZ2V0TmV3UmVtb3RlRGVidWdnZXIgKCkge1xuICBsZXQgc29ja2V0UGF0aDtcbiAgaWYgKCF0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgc29ja2V0UGF0aCA9IGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuZ2V0V2ViSW5zcGVjdG9yU29ja2V0KCk7XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZVJlbW90ZURlYnVnZ2VyKHtcbiAgICBidW5kbGVJZDogdGhpcy5vcHRzLmJ1bmRsZUlkLFxuICAgIGFkZGl0aW9uYWxCdW5kbGVJZHM6IHRoaXMub3B0cy5hZGRpdGlvbmFsV2Vidmlld0J1bmRsZUlkcyxcbiAgICBpc1NhZmFyaTogdGhpcy5pc1NhZmFyaSgpLFxuICAgIGluY2x1ZGVTYWZhcmk6IHRoaXMub3B0cy5pbmNsdWRlU2FmYXJpSW5XZWJ2aWV3cyxcbiAgICB1c2VOZXdTYWZhcmk6IHRoaXMudXNlTmV3U2FmYXJpKCksXG4gICAgcGFnZUxvYWRNczogdGhpcy5wYWdlTG9hZE1zLFxuICAgIHBsYXRmb3JtVmVyc2lvbjogdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbixcbiAgICBzb2NrZXRQYXRoLFxuICAgIHJlbW90ZURlYnVnUHJveHk6IHRoaXMub3B0cy5yZW1vdGVEZWJ1Z1Byb3h5LFxuICAgIGdhcmJhZ2VDb2xsZWN0T25FeGVjdXRlOiB1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy5zYWZhcmlHYXJiYWdlQ29sbGVjdClcbiAgICAgID8gISF0aGlzLm9wdHMuc2FmYXJpR2FyYmFnZUNvbGxlY3RcbiAgICAgIDogZmFsc2UsXG4gICAgdWRpZDogdGhpcy5vcHRzLnVkaWQsXG4gICAgbG9nQWxsQ29tbXVuaWNhdGlvbjogdGhpcy5vcHRzLnNhZmFyaUxvZ0FsbENvbW11bmljYXRpb24sXG4gICAgbG9nQWxsQ29tbXVuaWNhdGlvbkhleER1bXA6IHRoaXMub3B0cy5zYWZhcmlMb2dBbGxDb21tdW5pY2F0aW9uSGV4RHVtcCxcbiAgICBzb2NrZXRDaHVua1NpemU6IHRoaXMub3B0cy5zYWZhcmlTb2NrZXRDaHVua1NpemUsXG4gICAgd2ViSW5zcGVjdG9yTWF4RnJhbWVMZW5ndGg6IHRoaXMub3B0cy5zYWZhcmlXZWJJbnNwZWN0b3JNYXhGcmFtZUxlbmd0aFxuICB9LCB0aGlzLmlzUmVhbERldmljZSgpKTtcbn07XG5cbi8qKlxuICogU2V0IGNvbnRleHRcbiAqXG4gKiBAcGFyYW0gez9zdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiBjb250ZXh0IHRvIHNldC4gSXQgY291bGQgYmUgJ251bGwnIGFzIE5BVElWRV9XSU4uXG4gKiBAcGFyYW0ge2NhbGxiYWNrfSBjYWxsYmFjayBUaGUgY2FsbGJhY2suIChJdCBpcyBub3QgY2FsbGVkIGluIHRoaXMgbWV0aG9kKVxuICogQHBhcmFtIHtib29sZWFufSBza2lwUmVhZHlDaGVjayAtIFdoZXRoZXIgaXQgd2FpdHMgZm9yIHRoZSBuZXcgY29udGV4dCBpcyByZWFkeVxuICovXG5jb21tYW5kcy5zZXRDb250ZXh0ID0gYXN5bmMgZnVuY3Rpb24gc2V0Q29udGV4dCAobmFtZSwgY2FsbGJhY2ssIHNraXBSZWFkeUNoZWNrKSB7XG4gIGZ1bmN0aW9uIGFscmVhZHlJbkNvbnRleHQgKGRlc2lyZWQsIGN1cnJlbnQpIHtcbiAgICByZXR1cm4gKGRlc2lyZWQgPT09IGN1cnJlbnQgfHxcbiAgICAgIChkZXNpcmVkID09PSBudWxsICYmIGN1cnJlbnQgPT09IE5BVElWRV9XSU4pIHx8XG4gICAgICAoZGVzaXJlZCA9PT0gTkFUSVZFX1dJTiAmJiBjdXJyZW50ID09PSBudWxsKSk7XG4gIH1cbiAgZnVuY3Rpb24gaXNOYXRpdmVDb250ZXh0IChjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQgPT09IE5BVElWRV9XSU4gfHwgY29udGV4dCA9PT0gbnVsbDtcbiAgfVxuXG4gIC8vIGFsbG93IHRoZSBmdWxsIGNvbnRleHQgbGlzdCB0byBiZSBwYXNzZWQgaW5cbiAgaWYgKG5hbWUgJiYgbmFtZS5pZCkge1xuICAgIG5hbWUgPSBuYW1lLmlkO1xuICB9XG5cbiAgbG9nLmRlYnVnKGBBdHRlbXB0aW5nIHRvIHNldCBjb250ZXh0IHRvICcke25hbWUgfHwgTkFUSVZFX1dJTn0nIGZyb20gJyR7dGhpcy5jdXJDb250ZXh0ID8gdGhpcy5jdXJDb250ZXh0IDogTkFUSVZFX1dJTn0nYCk7XG5cbiAgaWYgKGFscmVhZHlJbkNvbnRleHQobmFtZSwgdGhpcy5jdXJDb250ZXh0KSB8fCBhbHJlYWR5SW5Db250ZXh0KF8ucmVwbGFjZShuYW1lLCBXRUJWSUVXX0JBU0UsICcnKSwgdGhpcy5jdXJDb250ZXh0KSkge1xuICAgIC8vIGFscmVhZHkgaW4gdGhlIG5hbWVkIGNvbnRleHQsIG5vIG5lZWQgdG8gZG8gYW55dGhpbmdcbiAgICBsb2cuZGVidWcoYEFscmVhZHkgaW4gJyR7bmFtZSB8fCBOQVRJVkVfV0lOfScgY29udGV4dC4gRG9pbmcgbm90aGluZy5gKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGlzTmF0aXZlQ29udGV4dChuYW1lKSkge1xuICAgIC8vIHN3aXRjaGluZyBpbnRvIHRoZSBuYXRpdmUgY29udGV4dFxuICAgIHRoaXMuY3VyQ29udGV4dCA9IG51bGw7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gc3dpdGNoaW5nIGludG8gYSB3ZWJ2aWV3IGNvbnRleHRcblxuICAvLyBpZiBjb250ZXh0cyBoYXZlIG5vdCBhbHJlYWR5IGJlZW4gcmV0cmlldmVkLCBnZXQgdGhlbVxuICBpZiAoXy5pc1VuZGVmaW5lZCh0aGlzLmNvbnRleHRzKSkge1xuICAgIGF3YWl0IHRoaXMuZ2V0Q29udGV4dHMoKTtcbiAgfVxuXG4gIGxldCBjb250ZXh0SWQgPSBfLnJlcGxhY2UobmFtZSwgV0VCVklFV19CQVNFLCAnJyk7XG4gIGlmIChjb250ZXh0SWQgPT09ICcnKSB7XG4gICAgLy8gYWxsb3cgdXNlciB0byBwYXNzIGluIFwiV0VCVklFV1wiIHdpdGhvdXQgYW4gaW5kZXhcbiAgICAvLyB0aGUgc2Vjb25kIGNvbnRleHQgd2lsbCBiZSB0aGUgZmlyc3Qgd2VidmlldyBhc1xuICAgIC8vIHRoZSBmaXJzdCBpcyBhbHdheXMgTkFUSVZFX0FQUFxuICAgIGNvbnRleHRJZCA9IHRoaXMuY29udGV4dHNbMV07XG4gIH1cbiAgaWYgKCFfLmluY2x1ZGVzKHRoaXMuY29udGV4dHMsIGNvbnRleHRJZCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vU3VjaENvbnRleHRFcnJvcigpO1xuICB9XG5cbiAgY29uc3Qgb2xkQ29udGV4dCA9IHRoaXMuY3VyQ29udGV4dDtcbiAgdGhpcy5jdXJDb250ZXh0ID0gdGhpcy5jdXJXaW5kb3dIYW5kbGUgPSBjb250ZXh0SWQ7XG5cbiAgLy8gYGNvbnRleHRJZGAgd2lsbCBiZSBpbiB0aGUgZm9ybSBvZiBgYXBwSWQucGFnZUlkYCBpbiB0aGlzIGNhc2VcbiAgY29uc3QgW2FwcElkS2V5LCBwYWdlSWRLZXldID0gXy5tYXAoY29udGV4dElkLnNwbGl0KCcuJyksIChpZCkgPT4gcGFyc2VJbnQoaWQsIDEwKSk7XG4gIHRyeSB7XG4gICAgdGhpcy5zZWxlY3RpbmdOZXdQYWdlID0gdHJ1ZTtcbiAgICBhd2FpdCB0aGlzLnJlbW90ZS5zZWxlY3RQYWdlKGFwcElkS2V5LCBwYWdlSWRLZXksIHNraXBSZWFkeUNoZWNrKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5jdXJDb250ZXh0ID0gdGhpcy5jdXJXaW5kb3dIYW5kbGUgPSBvbGRDb250ZXh0O1xuICAgIHRocm93IGVycjtcbiAgfSBmaW5hbGx5IHtcbiAgICB0aGlzLnNlbGVjdGluZ05ld1BhZ2UgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIGF0dGVtcHQgdG8gc3RhcnQgcGVyZm9ybWFuY2UgbG9nZ2luZywgaWYgcmVxdWVzdGVkXG4gIGlmICh0aGlzLm9wdHMuZW5hYmxlUGVyZm9ybWFuY2VMb2dnaW5nICYmIHRoaXMucmVtb3RlKSB7XG4gICAgbG9nLmRlYnVnKGBTdGFydGluZyBwZXJmb3JtYW5jZSBsb2cgb24gJyR7dGhpcy5jdXJDb250ZXh0fSdgKTtcbiAgICB0aGlzLmxvZ3MucGVyZm9ybWFuY2UgPSBuZXcgSU9TUGVyZm9ybWFuY2VMb2codGhpcy5yZW1vdGUpO1xuICAgIGF3YWl0IHRoaXMubG9ncy5wZXJmb3JtYW5jZS5zdGFydENhcHR1cmUoKTtcbiAgfVxuXG4gIC8vIHN0YXJ0IHNhZmFyaSBsb2dnaW5nIGlmIHRoZSBsb2dzIGhhbmRsZXJzIGFyZSBhY3RpdmVcbiAgaWYgKG5hbWUgJiYgbmFtZSAhPT0gTkFUSVZFX1dJTiAmJiB0aGlzLmxvZ3MpIHtcbiAgICBpZiAodGhpcy5sb2dzLnNhZmFyaUNvbnNvbGUpIHtcbiAgICAgIGF3YWl0IHRoaXMucmVtb3RlLnN0YXJ0Q29uc29sZSh0aGlzLmxvZ3Muc2FmYXJpQ29uc29sZS5hZGRMb2dMaW5lLmJpbmQodGhpcy5sb2dzLnNhZmFyaUNvbnNvbGUpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubG9ncy5zYWZhcmlOZXR3b3JrKSB7XG4gICAgICBhd2FpdCB0aGlzLnJlbW90ZS5zdGFydE5ldHdvcmsodGhpcy5sb2dzLnNhZmFyaU5ldHdvcmsuYWRkTG9nTGluZS5iaW5kKHRoaXMubG9ncy5zYWZhcmlOZXR3b3JrKSk7XG4gICAgfVxuICB9XG59O1xuXG5leHRlbnNpb25zLmNvbm5lY3RUb1JlbW90ZURlYnVnZ2VyID0gYXN5bmMgZnVuY3Rpb24gY29ubmVjdFRvUmVtb3RlRGVidWdnZXIgKCkge1xuICB0aGlzLnJlbW90ZSA9IGF3YWl0IHRoaXMuZ2V0TmV3UmVtb3RlRGVidWdnZXIoKTtcblxuICB0aGlzLnJlbW90ZS5vbihSZW1vdGVEZWJ1Z2dlci5FVkVOVF9QQUdFX0NIQU5HRSwgdGhpcy5vblBhZ2VDaGFuZ2UuYmluZCh0aGlzKSk7XG4gIHRoaXMucmVtb3RlLm9uKFJlbW90ZURlYnVnZ2VyLkVWRU5UX0ZSQU1FU19ERVRBQ0hFRCwgKCkgPT4ge1xuICAgIGlmICghXy5pc0VtcHR5KHRoaXMuY3VyV2ViRnJhbWVzKSkge1xuICAgICAgbG9nLmRlYnVnKGBDbGVhcmluZyAke3V0aWwucGx1cmFsaXplKCdmcmFtZScsIHRoaXMuY3VyV2ViRnJhbWVzLmxlbmd0aCwgdHJ1ZSl9OiAke3RoaXMuY3VyV2ViRnJhbWVzLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICAgIHRoaXMuY3VyV2ViRnJhbWVzID0gW107XG4gIH0pO1xuXG4gIGF3YWl0IHRoaXMucmVtb3RlLmNvbm5lY3QodGhpcy5vcHRzLndlYnZpZXdDb25uZWN0VGltZW91dCk7XG59O1xuXG5leHRlbnNpb25zLmxpc3RXZWJGcmFtZXMgPSBhc3luYyBmdW5jdGlvbiBsaXN0V2ViRnJhbWVzICh1c2VVcmwgPSB0cnVlKSB7XG4gIGlmICghdGhpcy5vcHRzLmJ1bmRsZUlkKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coJ0Nhbm5vdCBlbnRlciB3ZWIgZnJhbWUgd2l0aG91dCBhIGJ1bmRsZSBJRCcpO1xuICB9XG5cbiAgdXNlVXJsID0gdXNlVXJsICYmICF0aGlzLmlzUmVhbERldmljZSgpICYmICEhdGhpcy5nZXRDdXJyZW50VXJsKCk7XG4gIGxvZy5kZWJ1ZyhgU2VsZWN0aW5nIGJ5IHVybDogJHt1c2VVcmx9ICR7dXNlVXJsID8gYChleHBlY3RlZCB1cmw6ICcke3RoaXMuZ2V0Q3VycmVudFVybCgpfScpYCA6ICcnfWApO1xuXG4gIGNvbnN0IGN1cnJlbnRVcmwgPSB1c2VVcmwgPyB0aGlzLmdldEN1cnJlbnRVcmwoKSA6IHVuZGVmaW5lZDtcbiAgbGV0IHBhZ2VBcnJheSA9IFtdO1xuICBjb25zdCBnZXRXZWJ2aWV3UGFnZXMgPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlbW90ZS5zZWxlY3RBcHAoY3VycmVudFVybCwgdGhpcy5vcHRzLndlYnZpZXdDb25uZWN0UmV0cmllcywgdGhpcy5vcHRzLmlnbm9yZUFib3V0QmxhbmtVcmwpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLmRlYnVnKGBObyBhdmFpbGFibGUgd2ViIHBhZ2VzOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfTtcblxuICBpZiAodGhpcy5yZW1vdGUgJiYgdGhpcy5yZW1vdGUuYXBwSWRLZXkpIHtcbiAgICAvLyBhbHJlYWR5IGNvbm5lY3RlZFxuICAgIHBhZ2VBcnJheSA9IGF3YWl0IGdldFdlYnZpZXdQYWdlcygpO1xuICB9IGVsc2Uge1xuICAgIGlmICghdGhpcy5yZW1vdGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY29ubmVjdFRvUmVtb3RlRGVidWdnZXIoKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5yZW1vdGUuc2V0Q29ubmVjdGlvbktleSgpO1xuXG4gICAgcGFnZUFycmF5ID0gYXdhaXQgZ2V0V2Vidmlld1BhZ2VzKCk7XG5cbiAgICBjb25zdCBhbGVydEVycm9yTXNnID0gJ0Nsb3NlIGFsZXJ0IGZhaWxlZC4gUmV0cnkuJztcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcmV0cnlJbnRlcnZhbCg2LCAxMDAwLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmICghYXdhaXQgdGhpcy5jbG9zZUFsZXJ0QmVmb3JlVGVzdCgpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGFsZXJ0RXJyb3JNc2cpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIGlmIHRoZSBsb29wIHRvIGNsb3NlIGFsZXJ0cyBmYWlsZWQgdG8gZGlzbWlzcywgaWdub3JlLFxuICAgICAgLy8gb3RoZXJ3aXNlIGxvZyBhbmQgdGhyb3cgdGhlIGVycm9yXG4gICAgICBpZiAoZXJyLm1lc3NhZ2UgIT09IGFsZXJ0RXJyb3JNc2cpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocGFnZUFycmF5Lmxlbmd0aCA9PT0gMCkge1xuICAgIC8vIHdlIGhhdmUgbm8gd2ViIGZyYW1lcywgYnV0IGNvbnRpbnVlIGFueXdheVxuICAgIGxvZy5kZWJ1ZygnTm8gd2ViIGZyYW1lcyBmb3VuZC4nKTtcbiAgfVxuICByZXR1cm4gcGFnZUFycmF5O1xufTtcblxuY29tbWFuZHMuZ2V0Q29udGV4dHMgPSBhc3luYyBmdW5jdGlvbiBnZXRDb250ZXh0cyAoKSB7XG4gIGxvZy5kZWJ1ZygnR2V0dGluZyBsaXN0IG9mIGF2YWlsYWJsZSBjb250ZXh0cycpO1xuICBjb25zdCBjb250ZXh0cyA9IGF3YWl0IHRoaXMuZ2V0Q29udGV4dHNBbmRWaWV3cyhmYWxzZSk7XG5cbiAgY29uc3QgbWFwRm4gPSB0aGlzLm9wdHMuZnVsbENvbnRleHRMaXN0XG4gICAgPyBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGNvbnRleHQuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgdGl0bGU6IGNvbnRleHQudmlldy50aXRsZSxcbiAgICAgICAgdXJsOiBjb250ZXh0LnZpZXcudXJsLFxuICAgICAgICBidW5kbGVJZDogY29udGV4dC52aWV3LmJ1bmRsZUlkLFxuICAgICAgfTtcbiAgICB9XG4gICAgOiAoY29udGV4dCkgPT4gY29udGV4dC5pZC50b1N0cmluZygpO1xuICByZXR1cm4gY29udGV4dHMubWFwKG1hcEZuKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ29udGV4dFxuICpcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZCAtIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBjb250ZXh0LiBUaGUgbmF0aXZlIGNvbnRleHRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlICdOQVRJVkVfQVBQJyBhbmQgdGhlIHdlYnZpZXdzIHdpbGwgYmVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAnV0VCVklFV194eHgnXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHRpdGxlIC0gVGhlIHRpdGxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgd2VidmlldyBjb250ZW50XG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHVybCAtIFRoZSB1cmwgYXNzb2NpYXRlZCB3aXRoIHRoZSB3ZWJ2aWV3IGNvbnRlbnRcbiAqL1xuXG4vKipcbiAqIEdldCB0aGUgY29udGV4dHMgYXZhaWxhYmxlLCB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSB1cmwgYW5kIHRpdGxlIG9mIGVhY2hcbiAqIHdlYnZpZXdcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIE9wdGlvbnMgc2V0LCB3aGljaCBjYW4gaW5jbHVkZSBgd2FpdEZvcldlYnZpZXdNc2AgdG9cbiAqICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSB0aGUgcGVyaW9kIHRvIHBvbGwgZm9yIGF2YWlsYWJsZSB3ZWJ2aWV3c1xuICogQHJldHVybnMge0FycmF5fSBMaXN0IG9mIENvbnRleHQgb2JqZWN0c1xuICovXG5leHRlbnNpb25zLm1vYmlsZUdldENvbnRleHRzID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlR2V0Q29udGV4dHMgKG9wdHMgPSB7fSkge1xuICBsZXQge1xuICAgIHdhaXRGb3JXZWJ2aWV3TXMgPSAwLFxuICB9ID0gb3B0cztcblxuICAvLyBtYWtlIHN1cmUgaXQgaXMgYSBudW1iZXIsIHNvIHRoZSBkdXJhdGlvbiBjaGVjayB3b3JrcyBwcm9wZXJseVxuICBpZiAoIV8uaXNOdW1iZXIod2FpdEZvcldlYnZpZXdNcykpIHtcbiAgICB3YWl0Rm9yV2Vidmlld01zID0gcGFyc2VJbnQod2FpdEZvcldlYnZpZXdNcywgMTApO1xuICAgIGlmIChpc05hTih3YWl0Rm9yV2Vidmlld01zKSkge1xuICAgICAgd2FpdEZvcldlYnZpZXdNcyA9IDA7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgY3VyT3B0ID0gdGhpcy5vcHRzLmZ1bGxDb250ZXh0TGlzdDtcbiAgdGhpcy5vcHRzLmZ1bGxDb250ZXh0TGlzdCA9IHRydWU7XG5cbiAgY29uc3QgdGltZXIgPSBuZXcgdGltaW5nLlRpbWVyKCkuc3RhcnQoKTtcbiAgdHJ5IHtcbiAgICBsZXQgY29udGV4dHM7XG4gICAgZG8ge1xuICAgICAgY29udGV4dHMgPSBhd2FpdCB0aGlzLmdldENvbnRleHRzKCk7XG5cbiAgICAgIGlmIChjb250ZXh0cy5sZW5ndGggPj0gMikge1xuICAgICAgICBsb2cuZGVidWcoYEZvdW5kIHdlYnZpZXcgY29udGV4dCBhZnRlciAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgICAgICByZXR1cm4gY29udGV4dHM7XG4gICAgICB9XG4gICAgICBsb2cuZGVidWcoYE5vIHdlYnZpZXdzIGZvdW5kIGluICR7dGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcy50b0ZpeGVkKDApfW1zYCk7XG4gICAgfSB3aGlsZSAodGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcyA8IHdhaXRGb3JXZWJ2aWV3TXMpO1xuICAgIHJldHVybiBjb250ZXh0cztcbiAgfSBmaW5hbGx5IHtcbiAgICAvLyByZXNldCB0aGUgb3B0aW9uIHNvIHRoZXJlIGFyZSBubyBzaWRlIGVmZmVjdHNcbiAgICB0aGlzLm9wdHMuZnVsbENvbnRleHRMaXN0ID0gY3VyT3B0O1xuICB9XG59O1xuXG5jb21tYW5kcy5zZXRXaW5kb3cgPSBhc3luYyBmdW5jdGlvbiBzZXRXaW5kb3cgKG5hbWUsIHNraXBSZWFkeUNoZWNrKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5zZXRDb250ZXh0KG5hbWUsIF8ubm9vcCwgc2tpcFJlYWR5Q2hlY2spO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyB0cmFuc2xhdGUgdGhlIGVycm9yIGluIHRlcm1zIG9mIHdpbmRvd3NcbiAgICB0aHJvdyBpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5Ob1N1Y2hDb250ZXh0RXJyb3IpXG4gICAgICA/IG5ldyBlcnJvcnMuTm9TdWNoV2luZG93RXJyb3IoKVxuICAgICAgOiBlcnI7XG4gIH1cbn07XG5cbmNvbW1hbmRzLmdldFdpbmRvd0hhbmRsZSA9IGFzeW5jIGZ1bmN0aW9uIGdldFdpbmRvd0hhbmRsZSAoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuICBsb2cuZGVidWcoYEdldHRpbmcgY3VycmVudCB3aW5kb3cgaGFuZGxlYCk7XG4gIHJldHVybiB0aGlzLmN1ckNvbnRleHQ7XG59O1xuXG5jb21tYW5kcy5nZXRXaW5kb3dIYW5kbGVzID0gYXN5bmMgZnVuY3Rpb24gZ2V0V2luZG93SGFuZGxlcyAoKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG4gIGxvZy5kZWJ1ZygnR2V0dGluZyBsaXN0IG9mIGF2YWlsYWJsZSB3aW5kb3cgaGFuZGxlcycpO1xuICBjb25zdCBjb250ZXh0cyA9IGF3YWl0IHRoaXMuZ2V0Q29udGV4dHNBbmRWaWV3cyhmYWxzZSk7XG4gIHJldHVybiBjb250ZXh0c1xuICAgIC8vIGdldCByaWQgb2YgdGhlIG5hdGl2ZSBhcHAgY29udGV4dFxuICAgIC5maWx0ZXIoKGNvbnRleHQpID0+IGNvbnRleHQuaWQgIT09IE5BVElWRV9XSU4pXG4gICAgLy8gZ2V0IHRoZSBgYXBwLmlkYCBmb3JtYXQgZXhwZWN0ZWRcbiAgICAubWFwKChjb250ZXh0KSA9PiBjb250ZXh0LnZpZXcuaWQudG9TdHJpbmcoKSk7XG59O1xuXG5leHRlbnNpb25zLm9uUGFnZUNoYW5nZSA9IGFzeW5jIGZ1bmN0aW9uIG9uUGFnZUNoYW5nZSAocGFnZUNoYW5nZU5vdGlmaWNhdGlvbikge1xuICBsb2cuZGVidWcoYFJlbW90ZSBkZWJ1Z2dlciBub3RpZmllZCB1cyBvZiBhIG5ldyBwYWdlIGxpc3Rpbmc6ICR7SlNPTi5zdHJpbmdpZnkocGFnZUNoYW5nZU5vdGlmaWNhdGlvbil9YCk7XG4gIGlmICh0aGlzLnNlbGVjdGluZ05ld1BhZ2UpIHtcbiAgICBsb2cuZGVidWcoJ1dlIGFyZSBpbiB0aGUgbWlkZGxlIG9mIHNlbGVjdGluZyBhIHBhZ2UsIGlnbm9yaW5nJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICghdGhpcy5yZW1vdGUgfHwgIXRoaXMucmVtb3RlLmlzQ29ubmVjdGVkKSB7XG4gICAgbG9nLmRlYnVnKCdXZSBoYXZlIG5vdCB5ZXQgY29ubmVjdGVkLCBpZ25vcmluZycpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHthcHBJZEtleSwgcGFnZUFycmF5fSA9IHBhZ2VDaGFuZ2VOb3RpZmljYXRpb247XG5cbiAgbGV0IG5ld0lkcyA9IFtdO1xuICBsZXQgbmV3UGFnZXMgPSBbXTtcbiAgbGV0IGtleUlkID0gbnVsbDtcblxuICAvLyBDaGVja3MgaWYgYSBVUkwgaXMgYmxhY2tsaXN0ZWQgaW4gdGhlICdzYWZhcmlJZ25vcmVXZWJIb3N0bmFtZXMnIGNhcGFiaWxpdHlcbiAgZnVuY3Rpb24gaXNVcmxJZ25vcmVkICh1cmwsIHNhZmFyaUlnbm9yZVdlYkhvc3RuYW1lcykge1xuICAgIGNvbnN0IGlnbm9yZWRIb3N0cyA9IChzYWZhcmlJZ25vcmVXZWJIb3N0bmFtZXMgfHwgJycpXG4gICAgICAuc3BsaXQoJywnKVxuICAgICAgLm1hcCgoYikgPT4gYi50cmltKCkpXG4gICAgICAuZmlsdGVyKChiKSA9PiAhXy5pc0VtcHR5KGIpKTtcbiAgICBmb3IgKGNvbnN0IGlnbm9yZWRIb3N0IG9mIGlnbm9yZWRIb3N0cykge1xuICAgICAgaWYgKGlnbm9yZWRIb3N0ID09PSAnYWJvdXQ6YmxhbmsnICYmIHVybCA9PT0gJ2Fib3V0OmJsYW5rJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgaG9zdG5hbWUgPSBuZXcgVVJMKHVybCkuaG9zdG5hbWU7XG4gICAgICAgICAgaWYgKGhvc3RuYW1lID09PSBpZ25vcmVkSG9zdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgICAgICAvLyBkbyBub3RoaW5nIGlmIGludmFsaWQgVVJMXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yIChjb25zdCBwYWdlIG9mIHBhZ2VBcnJheSkge1xuICAgIGNvbnN0IGlkID0gcGFnZS5pZC50b1N0cmluZygpO1xuICAgIG5ld0lkcy5wdXNoKGlkKTtcbiAgICBpZiAocGFnZS5pc0tleSkge1xuICAgICAga2V5SWQgPSBpZDtcbiAgICB9XG4gICAgY29uc3QgY29udGV4dElkID0gYCR7YXBwSWRLZXl9LiR7aWR9YDtcblxuICAgIC8vIGFkZCBpZiB0aGlzIGlzIGEgbmV3IHBhZ2VcbiAgICBpZiAoIV8uaW5jbHVkZXModGhpcy5jb250ZXh0cywgY29udGV4dElkKSkge1xuICAgICAgaWYgKGlzVXJsSWdub3JlZChwYWdlLnVybCwgdGhpcy5vcHRzLnNhZmFyaUlnbm9yZVdlYkhvc3RuYW1lcykpIHtcbiAgICAgICAgbG9nLmluZm8oYE5vdCB0cmFja2luZyAnJHtwYWdlLnVybH0nIHBhZ2UgYmVjYXVzZSBpdCBpcyBibGFja2xpc3RlZC4gYCArXG4gICAgICAgICAgYCdzYWZhcmlJZ25vcmVXZWJIb3N0bmFtZXMnPSR7dGhpcy5vcHRzLnNhZmFyaUlnbm9yZVdlYkhvc3RuYW1lc31gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1BhZ2VzLnB1c2goaWQpO1xuICAgICAgICB0aGlzLmNvbnRleHRzLnB1c2goY29udGV4dElkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIWtleUlkKSB7XG4gICAgLy8gaWYgdGhlcmUgaXMgbm8ga2V5IGlkLCBwdWxsIHRoZSBmaXJzdCBpZCBmcm9tIHRoZSBwYWdlIGFycmF5IGFuZCB1c2UgdGhhdFxuICAgIC8vIGFzIGEgc3RhbmQgaW5cbiAgICBsb2cuZGVidWcoJ05vIGtleSBpZCBmb3VuZC4gQ2hvb3NpbmcgZmlyc3QgaWQgZnJvbSBwYWdlIGFycmF5Jyk7XG4gICAga2V5SWQgPSBuZXdJZHNbMF0gfHwgbnVsbDtcbiAgfVxuXG4gIGlmICghdXRpbC5oYXNWYWx1ZSh0aGlzLmN1ckNvbnRleHQpKSB7XG4gICAgbG9nLmRlYnVnKCdXZSBkbyBub3QgYXBwZWFyIHRvIGhhdmUgd2luZG93IHNldCB5ZXQsIGlnbm9yaW5nJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgW2N1ckFwcElkS2V5LCBjdXJQYWdlSWRLZXldID0gdGhpcy5jdXJDb250ZXh0LnNwbGl0KCcuJyk7XG5cbiAgaWYgKGN1ckFwcElkS2V5ICE9PSBhcHBJZEtleSkge1xuICAgIGxvZy5kZWJ1ZygnUGFnZSBjaGFuZ2Ugbm90IHJlZmVycmluZyB0byBjdXJyZW50bHkgc2VsZWN0ZWQgYXBwLCBpZ25vcmluZy4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgbmV3UGFnZSA9IG51bGw7XG4gIGlmIChuZXdQYWdlcy5sZW5ndGgpIHtcbiAgICBuZXdQYWdlID0gXy5sYXN0KG5ld1BhZ2VzKTtcbiAgICBsb2cuZGVidWcoYFdlIGhhdmUgbmV3IHBhZ2VzLCBzZWxlY3RpbmcgcGFnZSAnJHtuZXdQYWdlfSdgKTtcbiAgfSBlbHNlIGlmICghXy5pbmNsdWRlcyhuZXdJZHMsIGN1clBhZ2VJZEtleSkpIHtcbiAgICBsb2cuZGVidWcoJ05ldyBwYWdlIGxpc3RpbmcgZnJvbSByZW1vdGUgZGVidWdnZXIgZG9lcyBub3QgY29udGFpbiAnICtcbiAgICAgICAgICAgICAgICAgJ2N1cnJlbnQgd2luZG93OyBhc3N1bWluZyBpdCBpcyBjbG9zZWQnKTtcbiAgICBpZiAoIXV0aWwuaGFzVmFsdWUoa2V5SWQpKSB7XG4gICAgICBsb2cuZXJyb3IoJ0RvIG5vdCBoYXZlIG91ciBjdXJyZW50IHdpbmRvdyBhbnltb3JlLCBhbmQgdGhlcmUgJyArXG4gICAgICAgICAgICAgICAgICAgJ2FyZSBub3QgYW55IG1vcmUgdG8gbG9hZCEgRG9pbmcgbm90aGluZy4uLicpO1xuICAgICAgdGhpcy5zZXRDdXJyZW50VXJsKHVuZGVmaW5lZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbG9nLmRlYnVnKGBEZWJ1Z2dlciBhbHJlYWR5IHNlbGVjdGVkIHBhZ2UgJyR7a2V5SWR9JywgYCArXG4gICAgICAgICAgICAgICAgIGBjb25maXJtaW5nIHRoYXQgY2hvaWNlLmApO1xuICAgIHRoaXMuY3VyQ29udGV4dCA9IGAke2FwcElkS2V5fS4ke2tleUlkfWA7XG4gICAgbmV3UGFnZSA9IGtleUlkO1xuICB9IGVsc2Uge1xuICAgIC8vIGF0IHRoaXMgcG9pbnQsIHRoZXJlIGFyZSBubyBuZXcgcGFnZXMsIGFuZCB0aGUgY3VycmVudCBwYWdlIHN0aWxsIGV4aXN0c1xuICAgIGxvZy5kZWJ1ZygnQ2hlY2tpbmcgaWYgcGFnZSBuZWVkcyB0byBsb2FkJyk7XG4gICAgLy8gSWYgYSB3aW5kb3cgbmF2aWdhdGVzIHRvIGFuIGFuY2hvciBpdCBkb2Vzbid0IGFsd2F5cyBmaXJlIGEgcGFnZVxuICAgIC8vIGNhbGxiYWNrIGV2ZW50LiBMZXQncyBjaGVjayBpZiB3ZSB3b3VuZCB1cCBpbiBzdWNoIGEgc2l0dWF0aW9uLlxuICAgIGNvbnN0IG5lZWRzUGFnZUxvYWQgPSAoKCkgPT4ge1xuICAgICAgLy8gbmVlZCB0byBtYXAgdGhlIHBhZ2UgaWRzIHRvIGNvbnRleHQgaWRzXG4gICAgICBjb25zdCBjb250ZXh0QXJyYXkgPSBfLm1hcChwYWdlQXJyYXksIChwYWdlKSA9PiBgJHthcHBJZEtleX0uJHtwYWdlLmlkfWApO1xuICAgICAgLy8gY2hlY2sgaWYgdGhlIGN1cnJlbnQgY29udGV4dCBleGlzdHMgaW4gYm90aCBvdXIgcmVjb3JkZWQgY29udGV4dHMsXG4gICAgICAvLyBhbmQgdGhlIHBhZ2UgYXJyYXlcbiAgICAgIHJldHVybiAhXy5pc0VxdWFsKF8uZmluZCh0aGlzLmNvbnRleHRzLCB0aGlzLmN1ckNvbnRleHQpLCBfLmZpbmQoY29udGV4dEFycmF5LCB0aGlzLmN1ckNvbnRleHQpKTtcbiAgICB9KSgpO1xuXG4gICAgaWYgKG5lZWRzUGFnZUxvYWQpIHtcbiAgICAgIGxvZy5kZWJ1ZygnUGFnZSBsb2FkIG5lZWRlZC4gTG9hZGluZy4uLicpO1xuICAgICAgYXdhaXQgdGhpcy5yZW1vdGUucGFnZUxvYWQoKTtcbiAgICB9XG5cbiAgICBsb2cuZGVidWcoJ05ldyBwYWdlIGxpc3RpbmcgaXMgc2FtZSBhcyBvbGQsIGRvaW5nIG5vdGhpbmcnKTtcbiAgfVxuXG4gIC8vIG1ha2Ugc3VyZSB0aGF0IHRoZSBwYWdlIGxpc3RpbmcgaXNuJ3QgaW5kaWNhdGluZyBhIHJlZGlyZWN0XG4gIGlmICh1dGlsLmhhc1ZhbHVlKHRoaXMuY3VyQ29udGV4dCkpIHtcbiAgICBsZXQgY3VycmVudFBhZ2VJZCA9IHBhcnNlSW50KF8ubGFzdCh0aGlzLmN1ckNvbnRleHQuc3BsaXQoJy4nKSksIDEwKTtcbiAgICBsZXQgcGFnZSA9IF8uZmluZChwYWdlQXJyYXksIChwKSA9PiBwYXJzZUludChwLmlkLCAxMCkgPT09IGN1cnJlbnRQYWdlSWQpO1xuICAgIGlmIChwYWdlICYmIHBhZ2UudXJsICE9PSB0aGlzLmdldEN1cnJlbnRVcmwoKSkge1xuICAgICAgbG9nLmRlYnVnKGBSZWRpcmVjdGVkIGZyb20gJyR7dGhpcy5nZXRDdXJyZW50VXJsKCl9JyB0byAnJHtwYWdlLnVybH0nYCk7XG4gICAgICB0aGlzLnNldEN1cnJlbnRVcmwocGFnZS51cmwpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh1dGlsLmhhc1ZhbHVlKG5ld1BhZ2UpKSB7XG4gICAgdGhpcy5zZWxlY3RpbmdOZXdQYWdlID0gdHJ1ZTtcbiAgICBjb25zdCBvbGRDb250ZXh0ID0gdGhpcy5jdXJDb250ZXh0O1xuICAgIHRoaXMuY3VyQ29udGV4dCA9IGAke2FwcElkS2V5fS4ke25ld1BhZ2V9YDtcbiAgICAvLyBkbyBub3Qgd2FpdCwgYXMgdGhpcyBjYW4gdGFrZSBhIGxvbmcgdGltZSwgYW5kIHRoZSByZXNwb25zZSBpcyBub3QgbmVjZXNzYXJ5XG4gICAgdGhpcy5yZW1vdGUuc2VsZWN0UGFnZShhcHBJZEtleSwgcGFyc2VJbnQobmV3UGFnZSwgMTApKVxuICAgICAgLmNhdGNoKChlcnIpID0+IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBwcm9taXNlL3ByZWZlci1hd2FpdC10by1jYWxsYmFja3NcbiAgICAgICAgbG9nLndhcm4oYEZhaWxlZCB0byBzZWxlY3QgcGFnZTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgdGhpcy5jdXJDb250ZXh0ID0gb2xkQ29udGV4dDtcbiAgICAgIH0pO1xuICAgIHRoaXMuc2VsZWN0aW5nTmV3UGFnZSA9IGZhbHNlO1xuICB9XG4gIHRoaXMud2luZG93SGFuZGxlQ2FjaGUgPSBwYWdlQXJyYXk7XG59O1xuXG5cbk9iamVjdC5hc3NpZ24oY29tbWFuZHMsIGV4dGVuc2lvbnMsIGhlbHBlcnMpO1xuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9jb250ZXh0LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
|
675
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9jb250ZXh0LmpzIl0sIm5hbWVzIjpbIk5BVElWRV9XSU4iLCJXRUJWSUVXX1dJTiIsIldFQlZJRVdfQkFTRSIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJnZXRDdXJyZW50Q29udGV4dCIsImN1ckNvbnRleHQiLCJnZXRDb250ZXh0c0FuZFZpZXdzIiwidXNlVXJsIiwibG9nIiwiZGVidWciLCJ3ZWJ2aWV3cyIsImxpc3RXZWJGcmFtZXMiLCJjdHhzIiwiaWQiLCJ2aWV3IiwiY29udGV4dHMiLCJwdXNoIiwidG9TdHJpbmciLCJ1c2VOZXdTYWZhcmkiLCJwYXJzZUZsb2F0IiwiaW9zU2RrVmVyc2lvbiIsIm9wdHMiLCJwbGF0Zm9ybVZlcnNpb24iLCJpc1JlYWxEZXZpY2UiLCJzYWZhcmkiLCJ0eXBlQW5kTmF2VG9VcmwiLCJhZGRyZXNzIiwic2V0Q3VycmVudFVybCIsImNhcHMiLCJzYWZhcmlJbml0aWFsVXJsIiwicG9ydCIsInRyaWVzIiwiTUFYX1RSSUVTIiwibmF2aWdhdGUiLCJvbGRJbXBXYWl0IiwiaW1wbGljaXRXYWl0TXMiLCJlbCIsImZpbmRFbGVtZW50IiwibmF0aXZlVGFwIiwiRUxFTUVOVCIsImVyciIsIl8iLCJpbmNsdWRlcyIsIm1lc3NhZ2UiLCJuZXdQYWdlQnV0dG9uIiwic2V0VmFsdWVJbW1lZGlhdGUiLCJnZXRDdXJyZW50VXJsIiwiZXJyb3IiLCJuYXZUb1ZpZXdXaXRoVGl0bGUiLCJ1bmRlZmluZWQiLCJSZWdFeHAiLCJyZW1vdGUiLCJwYWdlVW5sb2FkIiwibmF2VG9WaWV3VGhyb3VnaEZhdm9yaXRlcyIsIm1zZyIsInRpdGxlUmVnZXgiLCJ1cmxSZWdFeHAiLCJzdGFydCIsIkRhdGUiLCJub3ciLCJzcGluVGltZSIsInNwaW5IYW5kbGVzIiwicmVzIiwiZ2V0TGF0ZXN0V2Vidmlld0NvbnRleHRGb3JUaXRsZSIsIkVycm9yIiwic3RhY2siLCJsYXRlc3RXaW5kb3ciLCJzZXRDb250ZXh0IiwiY2FuY2VsUGFnZUxvYWQiLCJ3YXJuIiwiQiIsImRlbGF5IiwiZWxlbWVudCIsImZpbmRVSUVsZW1lbnRPckVsZW1lbnRzIiwic3RvcFJlbW90ZSIsImNsb3NlV2luZG93QmVmb3JlRGlzY29ubmVjdGluZyIsImVycm9yQW5kVGhyb3ciLCJjbG9zZVdpbmRvdyIsImRpc2Nvbm5lY3QiLCJjdXJXZWJGcmFtZXMiLCJjdXJXZWJDb29yZHMiLCJ1cmwiLCJfY3VycmVudFVybCIsImNsb3NlQWxlcnRCZWZvcmVUZXN0IiwibmF2VG9Jbml0aWFsV2VidmlldyIsInJlZ0V4cCIsImN1cnJlbnRVcmwiLCJmaWx0ZXIiLCJjdHgiLCJ0aXRsZSIsInRlc3QiLCJpc1dlYkNvbnRleHQiLCJpc1dlYnZpZXciLCJnZXROZXdSZW1vdGVEZWJ1Z2dlciIsInNvY2tldFBhdGgiLCJkZXZpY2UiLCJnZXRXZWJJbnNwZWN0b3JTb2NrZXQiLCJidW5kbGVJZCIsImFkZGl0aW9uYWxCdW5kbGVJZHMiLCJhZGRpdGlvbmFsV2Vidmlld0J1bmRsZUlkcyIsImlzU2FmYXJpIiwiaW5jbHVkZVNhZmFyaSIsImluY2x1ZGVTYWZhcmlJbldlYnZpZXdzIiwicGFnZUxvYWRNcyIsInJlbW90ZURlYnVnUHJveHkiLCJnYXJiYWdlQ29sbGVjdE9uRXhlY3V0ZSIsInV0aWwiLCJoYXNWYWx1ZSIsInNhZmFyaUdhcmJhZ2VDb2xsZWN0IiwidWRpZCIsImxvZ0FsbENvbW11bmljYXRpb24iLCJzYWZhcmlMb2dBbGxDb21tdW5pY2F0aW9uIiwibG9nQWxsQ29tbXVuaWNhdGlvbkhleER1bXAiLCJzYWZhcmlMb2dBbGxDb21tdW5pY2F0aW9uSGV4RHVtcCIsInNvY2tldENodW5rU2l6ZSIsInNhZmFyaVNvY2tldENodW5rU2l6ZSIsIndlYkluc3BlY3Rvck1heEZyYW1lTGVuZ3RoIiwic2FmYXJpV2ViSW5zcGVjdG9yTWF4RnJhbWVMZW5ndGgiLCJuYW1lIiwiY2FsbGJhY2siLCJza2lwUmVhZHlDaGVjayIsImFscmVhZHlJbkNvbnRleHQiLCJkZXNpcmVkIiwiY3VycmVudCIsImlzTmF0aXZlQ29udGV4dCIsImNvbnRleHQiLCJyZXBsYWNlIiwiaXNVbmRlZmluZWQiLCJnZXRDb250ZXh0cyIsImNvbnRleHRJZCIsImVycm9ycyIsIk5vU3VjaENvbnRleHRFcnJvciIsIm9sZENvbnRleHQiLCJjdXJXaW5kb3dIYW5kbGUiLCJhcHBJZEtleSIsInBhZ2VJZEtleSIsIm1hcCIsInNwbGl0IiwicGFyc2VJbnQiLCJzZWxlY3RpbmdOZXdQYWdlIiwic2VsZWN0UGFnZSIsImVuYWJsZVBlcmZvcm1hbmNlTG9nZ2luZyIsImxvZ3MiLCJwZXJmb3JtYW5jZSIsIklPU1BlcmZvcm1hbmNlTG9nIiwic3RhcnRDYXB0dXJlIiwic2FmYXJpQ29uc29sZSIsInN0YXJ0Q29uc29sZSIsImFkZExvZ0xpbmUiLCJiaW5kIiwic2FmYXJpTmV0d29yayIsInN0YXJ0TmV0d29yayIsImNvbm5lY3RUb1JlbW90ZURlYnVnZ2VyIiwib24iLCJSZW1vdGVEZWJ1Z2dlciIsIkVWRU5UX1BBR0VfQ0hBTkdFIiwib25QYWdlQ2hhbmdlIiwiRVZFTlRfRlJBTUVTX0RFVEFDSEVEIiwiaXNFbXB0eSIsInBsdXJhbGl6ZSIsImxlbmd0aCIsImpvaW4iLCJjb25uZWN0Iiwid2Vidmlld0Nvbm5lY3RUaW1lb3V0IiwicGFnZUFycmF5IiwiZ2V0V2Vidmlld1BhZ2VzIiwic2VsZWN0QXBwIiwid2Vidmlld0Nvbm5lY3RSZXRyaWVzIiwiaWdub3JlQWJvdXRCbGFua1VybCIsInNldENvbm5lY3Rpb25LZXkiLCJhbGVydEVycm9yTXNnIiwibWFwRm4iLCJmdWxsQ29udGV4dExpc3QiLCJtb2JpbGVHZXRDb250ZXh0cyIsIndhaXRGb3JXZWJ2aWV3TXMiLCJpc051bWJlciIsImlzTmFOIiwiY3VyT3B0IiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsImdldER1cmF0aW9uIiwiYXNNaWxsaVNlY29uZHMiLCJ0b0ZpeGVkIiwic2V0V2luZG93Iiwibm9vcCIsIk5vU3VjaFdpbmRvd0Vycm9yIiwiZ2V0V2luZG93SGFuZGxlIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsImdldFdpbmRvd0hhbmRsZXMiLCJwYWdlQ2hhbmdlTm90aWZpY2F0aW9uIiwiSlNPTiIsInN0cmluZ2lmeSIsImlzQ29ubmVjdGVkIiwibmV3SWRzIiwibmV3UGFnZXMiLCJrZXlJZCIsImlzVXJsSWdub3JlZCIsInNhZmFyaUlnbm9yZVdlYkhvc3RuYW1lcyIsImlnbm9yZWRIb3N0cyIsImIiLCJ0cmltIiwiaWdub3JlZEhvc3QiLCJob3N0bmFtZSIsIlVSTCIsImlnbiIsInBhZ2UiLCJpc0tleSIsImluZm8iLCJjdXJBcHBJZEtleSIsImN1clBhZ2VJZEtleSIsIm5ld1BhZ2UiLCJsYXN0IiwibmVlZHNQYWdlTG9hZCIsImNvbnRleHRBcnJheSIsImlzRXF1YWwiLCJmaW5kIiwicGFnZUxvYWQiLCJjdXJyZW50UGFnZUlkIiwicCIsImNhdGNoIiwid2luZG93SGFuZGxlQ2FjaGUiLCJPYmplY3QiLCJhc3NpZ24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsVUFBVSxHQUFHLFlBQW5CO0FBQ0EsTUFBTUMsV0FBVyxHQUFHLFNBQXBCO0FBQ0EsTUFBTUMsWUFBWSxHQUFJLEdBQUVELFdBQVksR0FBcEM7QUFFQSxNQUFNRSxRQUFRLEdBQUcsRUFBakI7QUFBQSxNQUFxQkMsT0FBTyxHQUFHLEVBQS9CO0FBQUEsTUFBbUNDLFVBQVUsR0FBRyxFQUFoRDs7QUFHQUYsUUFBUSxDQUFDRyxpQkFBVCxHQUE2QixlQUFlQSxpQkFBZixHQUFvQztBQUMvRCxNQUFJLEtBQUtDLFVBQUwsSUFBbUIsS0FBS0EsVUFBTCxLQUFvQlAsVUFBM0MsRUFBdUQ7QUFDckQsV0FBUSxHQUFFRSxZQUFhLEdBQUUsS0FBS0ssVUFBVyxFQUF6QztBQUNEOztBQUNELFNBQU9QLFVBQVA7QUFDRCxDQUxEOztBQU9BSyxVQUFVLENBQUNHLG1C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QUFDQSxXQUFLdEMsVUFBTCxHQUFrQitILFVBQWxCO0FBQ0QsS0FKSDtBQUtBLFNBQUtPLGdCQUFMLEdBQXdCLEtBQXhCO0FBQ0Q7O0FBQ0QsT0FBS2tGLGlCQUFMLEdBQXlCekQsU0FBekI7QUFDRCxDQTdJRDs7QUFnSkEwRCxNQUFNLENBQUNDLE1BQVAsQ0FBYzlOLFFBQWQsRUFBd0JFLFVBQXhCLEVBQW9DRCxPQUFwQztlQUNlRCxRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlUmVtb3RlRGVidWdnZXIsIFJlbW90ZURlYnVnZ2VyIH0gZnJvbSAnYXBwaXVtLXJlbW90ZS1kZWJ1Z2dlcic7XG5pbXBvcnQgeyBlcnJvcnMsIGlzRXJyb3JUeXBlIH0gZnJvbSAnYXBwaXVtLWJhc2UtZHJpdmVyJztcbmltcG9ydCB7IHV0aWwsIHRpbWluZyB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBJT1NQZXJmb3JtYW5jZUxvZyBmcm9tICcuLi9kZXZpY2UtbG9nL2lvcy1wZXJmb3JtYW5jZS1sb2cnO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmNvbnN0IE5BVElWRV9XSU4gPSAnTkFUSVZFX0FQUCc7XG5jb25zdCBXRUJWSUVXX1dJTiA9ICdXRUJWSUVXJztcbmNvbnN0IFdFQlZJRVdfQkFTRSA9IGAke1dFQlZJRVdfV0lOfV9gO1xuXG5jb25zdCBjb21tYW5kcyA9IHt9LCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuXG5jb21tYW5kcy5nZXRDdXJyZW50Q29udGV4dCA9IGFzeW5jIGZ1bmN0aW9uIGdldEN1cnJlbnRDb250ZXh0ICgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gIGlmICh0aGlzLmN1ckNvbnRleHQgJiYgdGhpcy5jdXJDb250ZXh0ICE9PSBOQVRJVkVfV0lOKSB7XG4gICAgcmV0dXJuIGAke1dFQlZJRVdfQkFTRX0ke3RoaXMuY3VyQ29udGV4dH1gO1xuICB9XG4gIHJldHVybiBOQVRJVkVfV0lOO1xufTtcblxuZXh0ZW5zaW9ucy5nZXRDb250ZXh0c0FuZFZpZXdzID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q29udGV4dHNBbmRWaWV3cyAodXNlVXJsID0gdHJ1ZSkge1xuICBsb2cuZGVidWcoJ1JldHJpZXZpbmcgY29udGV4dHMgYW5kIHZpZXdzJyk7XG4gIGxldCB3ZWJ2aWV3cyA9IGF3YWl0IHRoaXMubGlzdFdlYkZyYW1lcyh1c2VVcmwpO1xuXG4gIGxldCBjdHhzID0gW3tpZDogTkFUSVZFX1dJTiwgdmlldzoge319XTtcbiAgdGhpcy5jb250ZXh0cyA9IFtOQVRJVkVfV0lOXTtcbiAgZm9yIChsZXQgdmlldyBvZiB3ZWJ2aWV3cykge1xuICAgIGN0eHMucHVzaCh7aWQ6IGAke1dFQlZJRVdfQkFTRX0ke3ZpZXcuaWR9YCwgdmlld30pO1xuICAgIHRoaXMuY29udGV4dHMucHVzaCh2aWV3LmlkLnRvU3RyaW5nKCkpO1xuICB9XG4gIHJldHVybiBjdHhzO1xufTtcblxuLy8gUmlnaHQgbm93IHdlIGRvbid0IG5lY2Vzc2FyaWx5IHdhaXQgZm9yIHdlYnZpZXdcbi8vIGFuZCBmcmFtZSB0byBsb2FkLCB3aGljaCBsZWFkcyB0byByYWNlIGNvbmRpdGlvbnMgYW5kIGZsYWtpbmVzcyxcbi8vIGxldCdzIHNlZSBpZiB3ZSBjYW4gdHJhbnNpdGlvbiB0byBzb21ldGhpbmcgYmV0dGVyXG5leHRlbnNpb25zLnVzZU5ld1NhZmFyaSA9IGZ1bmN0aW9uIHVzZU5ld1NhZmFyaSAoKSB7XG4gIHJldHVybiBwYXJzZUZsb2F0KHRoaXMuaW9zU2RrVmVyc2lvbikgPj0gOC4xICYmXG4gICAgcGFyc2VGbG9hdCh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uKSA+PSA4LjEgJiZcbiAgICAhdGhpcy5pc1JlYWxEZXZpY2UoKSAmJlxuICAgIHRoaXMub3B0cy5zYWZhcmk7XG59O1xuXG5leHRlbnNpb25zLnR5cGVBbmROYXZUb1VybCA9IGFzeW5jIGZ1bmN0aW9uIHR5cGVBbmROYXZUb1VybCAoKSB7XG4gIGxldCBhZGRyZXNzID0gdGhpcy5vcHRzLmFkZHJlc3MgPyB0aGlzLm9wdHMuYWRkcmVzcyA6ICcxMjcuMC4wLjEnO1xuICB0aGlzLnNldEN1cnJlbnRVcmwodGhpcy5jYXBzLnNhZmFyaUluaXRpYWxVcmwgfHwgYGh0dHA6Ly8ke2FkZHJlc3N9OiR7dGhpcy5vcHRzLnBvcnR9L3dlbGNvbWVgKTtcblxuICBsZXQgdHJpZXMgPSAwO1xuICBjb25zdCBNQVhfVFJJRVMgPSAyO1xuICBsZXQgbmF2aWdhdGUgPSBhc3luYyAoKSA9PiB7XG4gICAgbGV0IG9sZEltcFdhaXQgPSB0aGlzLmltcGxpY2l0V2FpdE1zO1xuICAgIHRoaXMuaW1wbGljaXRXYWl0TXMgPSA3MDAwO1xuXG4gICAgLy8gZmluZCB0aGUgdXJsIGJhciwgYW5kIHRhcCBvbiBpdC4gcmV0cnkgdG8gbWFrZSBzdXJlIHdlIGRvbid0IHRyeVxuICAgIC8vIHRvbyBzb29uIHdoaWxlIHRoZSB2aWV3IGlzIHN0aWxsIGxvYWRpbmdcbiAgICBsZXQgZWwgPSBhd2FpdCByZXRyeUludGVydmFsKDMsIDEwMDAsIGFzeW5jICgpID0+IGF3YWl0IHRoaXMuZmluZEVsZW1lbnQoJ2FjY2Vzc2liaWxpdHkgaWQnLCAnVVJMJykpO1xuICAgIHRoaXMuaW1wbGljaXRXYWl0TXMgPSBvbGRJbXBXYWl0O1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMubmF0aXZlVGFwKGVsLkVMRU1FTlQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKF8uaW5jbHVkZXMoZXJyLm1lc3NhZ2UsICdjb3VsZCBub3QgYmUgdGFwcGVkJykpIHtcbiAgICAgICAgaWYgKHRyaWVzKysgPj0gTUFYX1RSSUVTKSB0aHJvdyBlcnI7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcblxuICAgICAgICAvLyBnZW5lcmFsbHkgdGhpcyBtZWFucyB0aGF0IFNhZmFyaSBpcyBpbiBwYWdlIHZpZXdpbmcgbW9kZVxuICAgICAgICAvLyBzbyB0cnkgdG8gb3BlbiBhIG5ldyBwYWdlIGFuZCB0aGVuIHJlZG8gdGhlIG5hdmlnYXRpb25cbiAgICAgICAgbGV0IG5ld1BhZ2VCdXR0b24gPSBhd2FpdCB0aGlzLmZpbmRFbGVtZW50KCd4cGF0aCcsIFwiLy9YQ1VJRWxlbWVudFR5cGVCdXR0b25bY29udGFpbnMoQG5hbWUsJ05ldyBwYWdlJyldXCIpO1xuICAgICAgICBhd2FpdCB0aGlzLm5hdGl2ZVRhcChuZXdQYWdlQnV0dG9uLkVMRU1FTlQpO1xuICAgICAgICByZXR1cm4gYXdhaXQgbmF2aWdhdGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBnZXQgdGhlIGxhc3QgYWRkcmVzcyBlbGVtZW50IGFuZCBzZXQgdGhlIHVybFxuICAgIHRyeSB7XG4gICAgICBsZXQgZWwgPSBhd2FpdCB0aGlzLmZpbmRFbGVtZW50KCdjbGFzcyBuYW1lJywgJ1hDVUlFbGVtZW50VHlwZVRleHRGaWVsZCcpO1xuICAgICAgYXdhaXQgdGhpcy5zZXRWYWx1ZUltbWVkaWF0ZSh0aGlzLmdldEN1cnJlbnRVcmwoKSwgZWwpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gdGhpcyBpcyBmbGFrZXkgb24gY2VydGFpbiBzeXN0ZW1zIHNvIHdlIHJldHJ5IHVudGlsIHdlIGdldCBzb21ldGhpbmdcbiAgICAgIC8vIGlvcyBzaW1zOiBzYWZhcmkgb3BlbnMgYnV0IHRoZSB0ZXh0IGZpZWxkIGNhbid0IGJlIGZvdW5kXG4gICAgICBpZiAodHJpZXMrKyA+PSBNQVhfVFJJRVMpIHRocm93IGVycjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjdXJseVxuICAgICAgcmV0dXJuIGF3YWl0IG5hdmlnYXRlKCk7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBpdCBoYXBwZW5cbiAgICB0cnkge1xuICAgICAgZWwgPSBhd2FpdCB0aGlzLmZpbmRFbGVtZW50KCdhY2Nlc3NpYmlsaXR5IGlkJywgJ0dvJyk7XG4gICAgICBhd2FpdCB0aGlzLm5hdGl2ZVRhcChlbC5FTEVNRU5UKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChfLmluY2x1ZGVzKGVyci5tZXNzYWdlLCAnY291bGQgbm90IGJlIHRhcHBlZCcpKSB7XG4gICAgICAgIGxvZy5lcnJvcignVW5hYmxlIHRvIHN1Ym1pdCBVUkwgYmVjYXVzZSBcXCdHb1xcJyBidXR0b24gY291bGQgbm90IGJlIHRhcHBlZC4gJyArXG4gICAgICAgICAgJ1BsZWFzZSBtYWtlIHN1cmUgeW91ciBrZXlib2FyZCBpcyB0b2dnbGVkIG9uLicpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLm5hdlRvVmlld1dpdGhUaXRsZSh1bmRlZmluZWQsIG5ldyBSZWdFeHAodGhpcy5nZXRDdXJyZW50VXJsKCksICdpJykpO1xuXG4gICAgLy8gd2FpdCBmb3IgcGFnZSB0byBmaW5pc2ggbG9hZGluZy5cbiAgICBhd2FpdCB0aGlzLnJlbW90ZS5wYWdlVW5sb2FkKCk7XG4gIH07XG4gIGF3YWl0IG5hdmlnYXRlKCk7XG59O1xuXG5leHRlbnNpb25zLm5hdlRvVmlld1Rocm91Z2hGYXZvcml0ZXMgPSBhc3luYyBmdW5jdGlvbiBuYXZUb1ZpZXdUaHJvdWdoRmF2b3JpdGVzICgpIHtcbiAgbG9nLmRlYnVnKCdXZSBhcmUgb24gaU9TNysgc2ltdWxhdG9yOiBjbGlja2luZyBhcHBsZSBidXR0b24gdG8gZ2V0IGludG8gYSB3ZWJ2aWV3Jyk7XG4gIGxldCBvbGRJbXBXYWl0ID0gdGhpcy5pbXBsaWNpdFdhaXRNcztcbiAgdGhpcy5pbXBsaWNpdFdhaXRNcyA9IDcwMDA7IC8vIHdhaXQgN3MgZm9yIGFwcGxlIGJ1dHRvbiB0byBleGlzdFxuXG4gIGxldCBlbDtcbiAgdHJ5IHtcbiAgICBlbCA9IGF3YWl0IHRoaXMuZmluZEVsZW1lbnQoJ3hwYXRoJywgJy8vWENVSUVsZW1lbnRUeXBlU2Nyb2xsVmlld1sxXS9YQ1VJRWxlbWVudFR5cGVCdXR0b25bMV0nKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbGV0IG1zZyA9ICdDb3VsZCBub3QgZmluZCBidXR0b24gdG8gY2xpY2sgdG8gZ2V0IGludG8gd2Vidmlldy4gJyArXG4gICAgICAgICAgICAgICdQcm9jZWVkaW5nIG9uIHRoZSBhc3N1bXB0aW9uIHdlIGhhdmUgYSB3b3JraW5nIG9uZS4nO1xuICAgIGxvZy5lcnJvcihtc2cpO1xuICAgIHRoaXMuaW1wbGljaXRXYWl0TXMgPSBvbGRJbXBXYWl0O1xuICAgIHJldHVybiBhd2FpdCB0aGlzLm5hdlRvVmlld1dpdGhUaXRsZSgvLiovaSk7XG4gIH1cbiAgdGhpcy5pbXBsaWNpdFdhaXRNcyA9IG9sZEltcFdhaXQ7XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5uYXRpdmVUYXAoZWwuRUxFTUVOVCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxldCBtc2cgPSAnQ291bGQgbm90IGNsaWNrIGJ1dHRvbiB0byBnZXQgaW50byB3ZWJ2aWV3LiAnICtcbiAgICAgICAgICAgICAgJ1Byb2NlZWRpbmcgb24gdGhlIGFzc3VtcHRpb24gd2UgaGF2ZSBhIHdvcmtpbmcgb25lLic7XG4gICAgbG9nLmVycm9yKG1zZyk7XG4gIH1cbiAgYXdhaXQgdGhpcy5uYXZUb1ZpZXdXaXRoVGl0bGUoL2FwcGxlL2kpO1xufTtcblxuZXh0ZW5zaW9ucy5uYXZUb1ZpZXdXaXRoVGl0bGUgPSBhc3luYyBmdW5jdGlvbiBuYXZUb1ZpZXdXaXRoVGl0bGUgKHRpdGxlUmVnZXgsIHVybFJlZ0V4cCkge1xuICBsb2cuZGVidWcoJ05hdmlnYXRpbmcgdG8gbW9zdCByZWNlbnRseSBvcGVuZWQgd2VidmlldycpO1xuICBsZXQgc3RhcnQgPSBEYXRlLm5vdygpO1xuICBsZXQgc3BpblRpbWUgPSA1MDA7XG4gIGxldCBzcGluSGFuZGxlcyA9IGFzeW5jICgpID0+IHtcbiAgICBsZXQgcmVzO1xuICAgIHRyeSB7XG4gICAgICByZXMgPSBhd2FpdCB0aGlzLmdldExhdGVzdFdlYnZpZXdDb250ZXh0Rm9yVGl0bGUodGl0bGVSZWdleCB8fCB1cmxSZWdFeHApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKCFlcnIubWVzc2FnZS5pbmNsdWRlcygnQ291bGQgbm90IGNvbm5lY3QgdG8gYSB2YWxpZCBhcHAgYWZ0ZXInKSkge1xuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgQ291bGQgbm90IG5hdmlnYXRlIHRvIHdlYnZpZXchIEVycjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgZXJyb3Iuc3RhY2sgKz0gYFxcbkNhdXNlZCBieTogJHtlcnIuc3RhY2t9YDtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBsb2cuZGVidWcoJ0NvdWxkIG5vdCBuYXZpZ2F0ZSB0byB3ZWJ2aWV3LiBSZXRyeWluZyBpZiBwb3NzaWJsZS4nKTtcbiAgICB9XG4gICAgaWYgKHJlcykge1xuICAgICAgbGV0IGxhdGVzdFdpbmRvdyA9IHJlcztcbiAgICAgIGxvZy5kZWJ1ZyhgUGlja2luZyB3ZWJ2aWV3ICcke2xhdGVzdFdpbmRvd30nYCk7XG4gICAgICBhd2FpdCB0aGlzLnNldENvbnRleHQobGF0ZXN0V2luZG93KTtcbiAgICAgIGF3YWl0IHRoaXMucmVtb3RlLmNhbmNlbFBhZ2VMb2FkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gbm8gd2VidmlldyB3YXMgZm91bmRcbiAgICBpZiAoKERhdGUubm93KCkgLSBzdGFydCkgPj0gOTAwMDApIHtcbiAgICAgIC8vIHRvbyBzbG93LCBnZXQgb3V0XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBuYXZpZ2F0ZSB0byB3ZWJ2aWV3OyB0aGVyZSBhcmUgbm9uZSEnKTtcbiAgICB9XG5cbiAgICBsb2cud2FybignQ291bGQgbm90IGZpbmQgYW55IHdlYnZpZXdzIHlldCwgcmVmcmVzaGluZy9yZXRyeWluZycpO1xuICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpIHx8ICF0aGlzLm9wdHMuc2FmYXJpKSB7XG4gICAgICAvLyBvbiBhIHJlYWwgZGV2aWNlLCB3aGVuIG5vdCB1c2luZyBTYWZhcmksIHdlIGp1c3Qgd2FudCB0byB0cnkgYWdhaW5cbiAgICAgIGF3YWl0IEIuZGVsYXkoc3BpblRpbWUpO1xuICAgICAgcmV0dXJuIGF3YWl0IHNwaW5IYW5kbGVzKCk7XG4gICAgfVxuXG4gICAgLy8gZmluZCB0aGUgcmVsb2FkIGJ1dHRvbiBhbmQgdGFwIGl0LCBpZiBwb3NzaWJsZVxuICAgIGxldCBlbGVtZW50O1xuICAgIHRyeSB7XG4gICAgICBsb2cuZGVidWcoJ0ZpbmRpbmcgYW5kIHRhcHBpbmcgcmVsb2FkIGJ1dHRvbicpO1xuICAgICAgZWxlbWVudCA9IGF3YWl0IHRoaXMuZmluZFVJRWxlbWVudE9yRWxlbWVudHMoJ2FjY2Vzc2liaWxpdHkgaWQnLCAnUmVsb2FkQnV0dG9uJywgJycsIGZhbHNlKTtcbiAgICAgIGF3YWl0IHRoaXMubmF0aXZlVGFwKGVsZW1lbnQuRUxFTUVOVCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cud2FybihgRXJyb3IgZmluZGluZyBhbmQgdGFwcGluZyByZWxvYWQgYnV0dG9uOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgbG9nLndhcm4oJ1JldHJ5aW5nLicpO1xuICAgICAgYXdhaXQgQi5kZWxheShzcGluVGltZSk7XG4gICAgfVxuXG4gICAgLy8gdHJ5IGl0IGFsbCBhZ2FpblxuICAgIHJldHVybiBhd2FpdCBzcGluSGFuZGxlcygpO1xuICB9O1xuICBhd2FpdCBzcGluSGFuZGxlcygpO1xufTtcblxuaGVscGVycy5zdG9wUmVtb3RlID0gYXN5bmMgZnVuY3Rpb24gc3RvcFJlbW90ZSAoY2xvc2VXaW5kb3dCZWZvcmVEaXNjb25uZWN0aW5nID0gZmFsc2UpIHtcbiAgaWYgKCF0aGlzLnJlbW90ZSkge1xuICAgIGxvZy5lcnJvckFuZFRocm93KCdUcmllZCB0byBsZWF2ZSBhIHdlYiBmcmFtZSBidXQgd2VyZSBub3QgaW4gb25lJyk7XG4gIH1cblxuICBpZiAoY2xvc2VXaW5kb3dCZWZvcmVEaXNjb25uZWN0aW5nKSB7XG4gICAgYXdhaXQgdGhpcy5jbG9zZVdpbmRvdygpO1xuICB9XG4gIGF3YWl0IHRoaXMucmVtb3RlLmRpc2Nvbm5lY3QoKTtcbiAgdGhpcy5jdXJDb250ZXh0ID0gbnVsbDtcbiAgdGhpcy5jdXJXZWJGcmFtZXMgPSBbXTtcbiAgdGhpcy5jdXJXZWJDb29yZHMgPSBudWxsO1xuICB0aGlzLnJlbW90ZSA9IG51bGw7XG59O1xuXG5oZWxwZXJzLnNldEN1cnJlbnRVcmwgPSBmdW5jdGlvbiBzZXRDdXJyZW50VXJsICh1cmwpIHtcbiAgdGhpcy5fY3VycmVudFVybCA9IHVybDtcbn07XG5cbmhlbHBlcnMuZ2V0Q3VycmVudFVybCA9IGZ1bmN0aW9uIGdldEN1cnJlbnRVcmwgKCkge1xuICByZXR1cm4gdGhpcy5fY3VycmVudFVybDtcbn07XG5cbmV4dGVuc2lvbnMuY2xvc2VBbGVydEJlZm9yZVRlc3QgPSBhc3luYyBmdW5jdGlvbiBjbG9zZUFsZXJ0QmVmb3JlVGVzdCAoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4dGVuc2lvbnMubmF2VG9Jbml0aWFsV2VidmlldyA9IGFzeW5jIGZ1bmN0aW9uIG5hdlRvSW5pdGlhbFdlYnZpZXcgKCkge1xuICBpZiAodGhpcy51c2VOZXdTYWZhcmkoKSkge1xuICAgIGF3YWl0IHRoaXMudHlwZUFuZE5hdlRvVXJsKCk7XG4gIH0gZWxzZSBpZiAoIXRoaXMuaXNSZWFsRGV2aWNlKCkgJiYgdGhpcy5vcHRzLnNhZmFyaSkge1xuICAgIGF3YWl0IHRoaXMubmF2VG9WaWV3VGhyb3VnaEZhdm9yaXRlcygpO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IHRoaXMubmF2VG9WaWV3V2l0aFRpdGxlKC8uKi8pO1xuICB9XG59O1xuXG5leHRlbnNpb25zLmdldExhdGVzdFdlYnZpZXdDb250ZXh0Rm9yVGl0bGUgPSBhc3luYyBmdW5jdGlvbiBnZXRMYXRlc3RXZWJ2aWV3Q29udGV4dEZvclRpdGxlIChyZWdFeHApIHtcbiAgY29uc3QgY3VycmVudFVybCA9IHRoaXMuZ2V0Q3VycmVudFVybCgpO1xuXG4gIGNvbnN0IGNvbnRleHRzID0gXy5maWx0ZXIoYXdhaXQgdGhpcy5nZXRDb250ZXh0c0FuZFZpZXdzKCksICd2aWV3Jyk7XG5cbiAgaWYgKGN1cnJlbnRVcmwpIHtcbiAgICAvLyBmaXJzdCB0cnkgdG8gbWF0Y2ggYnkgY3VycmVudCB1cmxcbiAgICBmb3IgKGNvbnN0IGN0eCBvZiBjb250ZXh0cykge1xuICAgICAgaWYgKChjdHgudmlldy51cmwgfHwgJycpID09PSB0aGlzLmdldEN1cnJlbnRVcmwoKSkge1xuICAgICAgICByZXR1cm4gY3R4LmlkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGlmIG5vdCwgdHJ5IHRvIG1hdGNoIGJ5IHJlZ3VsYXIgZXhwcmVzc2lvblxuICBmb3IgKGNvbnN0IGN0eCBvZiBjb250ZXh0cykge1xuICAgIGlmICgoY3R4LnZpZXcudGl0bGUgJiYgcmVnRXhwLnRlc3QoY3R4LnZpZXcudGl0bGUpKSB8fCAoY3R4LnZpZXcudXJsICYmIHJlZ0V4cC50ZXN0KGN0eC52aWV3LnVybCkpKSB7XG4gICAgICByZXR1cm4gY3R4LmlkO1xuICAgIH1cbiAgfVxufTtcblxuZXh0ZW5zaW9ucy5pc1dlYkNvbnRleHQgPSBmdW5jdGlvbiBpc1dlYkNvbnRleHQgKCkge1xuICByZXR1cm4gISF0aGlzLmN1ckNvbnRleHQgJiYgdGhpcy5jdXJDb250ZXh0ICE9PSBOQVRJVkVfV0lOO1xufTtcblxuZXh0ZW5zaW9ucy5pc1dlYnZpZXcgPSBmdW5jdGlvbiBpc1dlYnZpZXcgKCkge1xuICByZXR1cm4gdGhpcy5pc1dlYkNvbnRleHQoKTtcbn07XG5cbmV4dGVuc2lvbnMuZ2V0TmV3UmVtb3RlRGVidWdnZXIgPSBhc3luYyBmdW5jdGlvbiBnZXROZXdSZW1vdGVEZWJ1Z2dlciAoKSB7XG4gIGxldCBzb2NrZXRQYXRoO1xuICBpZiAoIXRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICBzb2NrZXRQYXRoID0gYXdhaXQgdGhpcy5vcHRzLmRldmljZS5nZXRXZWJJbnNwZWN0b3JTb2NrZXQoKTtcbiAgfVxuICByZXR1cm4gY3JlYXRlUmVtb3RlRGVidWdnZXIoe1xuICAgIGJ1bmRsZUlkOiB0aGlzLm9wdHMuYnVuZGxlSWQsXG4gICAgYWRkaXRpb25hbEJ1bmRsZUlkczogdGhpcy5vcHRzLmFkZGl0aW9uYWxXZWJ2aWV3QnVuZGxlSWRzLFxuICAgIGlzU2FmYXJpOiB0aGlzLmlzU2FmYXJpKCksXG4gICAgaW5jbHVkZVNhZmFyaTogdGhpcy5vcHRzLmluY2x1ZGVTYWZhcmlJbldlYnZpZXdzLFxuICAgIHVzZU5ld1NhZmFyaTogdGhpcy51c2VOZXdTYWZhcmkoKSxcbiAgICBwYWdlTG9hZE1zOiB0aGlzLnBhZ2VMb2FkTXMsXG4gICAgcGxhdGZvcm1WZXJzaW9uOiB0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLFxuICAgIHNvY2tldFBhdGgsXG4gICAgcmVtb3RlRGVidWdQcm94eTogdGhpcy5vcHRzLnJlbW90ZURlYnVnUHJveHksXG4gICAgZ2FyYmFnZUNvbGxlY3RPbkV4ZWN1dGU6IHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLnNhZmFyaUdhcmJhZ2VDb2xsZWN0KVxuICAgICAgPyAhIXRoaXMub3B0cy5zYWZhcmlHYXJiYWdlQ29sbGVjdFxuICAgICAgOiBmYWxzZSxcbiAgICB1ZGlkOiB0aGlzLm9wdHMudWRpZCxcbiAgICBsb2dBbGxDb21tdW5pY2F0aW9uOiB0aGlzLm9wdHMuc2FmYXJpTG9nQWxsQ29tbXVuaWNhdGlvbixcbiAgICBsb2dBbGxDb21tdW5pY2F0aW9uSGV4RHVtcDogdGhpcy5vcHRzLnNhZmFyaUxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wLFxuICAgIHNvY2tldENodW5rU2l6ZTogdGhpcy5vcHRzLnNhZmFyaVNvY2tldENodW5rU2l6ZSxcbiAgICB3ZWJJbnNwZWN0b3JNYXhGcmFtZUxlbmd0aDogdGhpcy5vcHRzLnNhZmFyaVdlYkluc3BlY3Rvck1heEZyYW1lTGVuZ3RoXG4gIH0sIHRoaXMuaXNSZWFsRGV2aWNlKCkpO1xufTtcblxuLyoqXG4gKiBTZXQgY29udGV4dFxuICpcbiAqIEBwYXJhbSB7P3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIGNvbnRleHQgdG8gc2V0LiBJdCBjb3VsZCBiZSAnbnVsbCcgYXMgTkFUSVZFX1dJTi5cbiAqIEBwYXJhbSB7Y2FsbGJhY2t9IGNhbGxiYWNrIFRoZSBjYWxsYmFjay4gKEl0IGlzIG5vdCBjYWxsZWQgaW4gdGhpcyBtZXRob2QpXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHNraXBSZWFkeUNoZWNrIC0gV2hldGhlciBpdCB3YWl0cyBmb3IgdGhlIG5ldyBjb250ZXh0IGlzIHJlYWR5XG4gKi9cbmNvbW1hbmRzLnNldENvbnRleHQgPSBhc3luYyBmdW5jdGlvbiBzZXRDb250ZXh0IChuYW1lLCBjYWxsYmFjaywgc2tpcFJlYWR5Q2hlY2spIHtcbiAgZnVuY3Rpb24gYWxyZWFkeUluQ29udGV4dCAoZGVzaXJlZCwgY3VycmVudCkge1xuICAgIHJldHVybiAoZGVzaXJlZCA9PT0gY3VycmVudCB8fFxuICAgICAgKGRlc2lyZWQgPT09IG51bGwgJiYgY3VycmVudCA9PT0gTkFUSVZFX1dJTikgfHxcbiAgICAgIChkZXNpcmVkID09PSBOQVRJVkVfV0lOICYmIGN1cnJlbnQgPT09IG51bGwpKTtcbiAgfVxuICBmdW5jdGlvbiBpc05hdGl2ZUNvbnRleHQgKGNvbnRleHQpIHtcbiAgICByZXR1cm4gY29udGV4dCA9PT0gTkFUSVZFX1dJTiB8fCBjb250ZXh0ID09PSBudWxsO1xuICB9XG5cbiAgLy8gYWxsb3cgdGhlIGZ1bGwgY29udGV4dCBsaXN0IHRvIGJlIHBhc3NlZCBpblxuICBpZiAobmFtZSAmJiBuYW1lLmlkKSB7XG4gICAgbmFtZSA9IG5hbWUuaWQ7XG4gIH1cblxuICBsb2cuZGVidWcoYEF0dGVtcHRpbmcgdG8gc2V0IGNvbnRleHQgdG8gJyR7bmFtZSB8fCBOQVRJVkVfV0lOfScgZnJvbSAnJHt0aGlzLmN1ckNvbnRleHQgPyB0aGlzLmN1ckNvbnRleHQgOiBOQVRJVkVfV0lOfSdgKTtcblxuICBpZiAoYWxyZWFkeUluQ29udGV4dChuYW1lLCB0aGlzLmN1ckNvbnRleHQpIHx8IGFscmVhZHlJbkNvbnRleHQoXy5yZXBsYWNlKG5hbWUsIFdFQlZJRVdfQkFTRSwgJycpLCB0aGlzLmN1ckNvbnRleHQpKSB7XG4gICAgLy8gYWxyZWFkeSBpbiB0aGUgbmFtZWQgY29udGV4dCwgbm8gbmVlZCB0byBkbyBhbnl0aGluZ1xuICAgIGxvZy5kZWJ1ZyhgQWxyZWFkeSBpbiAnJHtuYW1lIHx8IE5BVElWRV9XSU59JyBjb250ZXh0LiBEb2luZyBub3RoaW5nLmApO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoaXNOYXRpdmVDb250ZXh0KG5hbWUpKSB7XG4gICAgLy8gc3dpdGNoaW5nIGludG8gdGhlIG5hdGl2ZSBjb250ZXh0XG4gICAgdGhpcy5jdXJDb250ZXh0ID0gbnVsbDtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBzd2l0Y2hpbmcgaW50byBhIHdlYnZpZXcgY29udGV4dFxuXG4gIC8vIGlmIGNvbnRleHRzIGhhdmUgbm90IGFscmVhZHkgYmVlbiByZXRyaWV2ZWQsIGdldCB0aGVtXG4gIGlmIChfLmlzVW5kZWZpbmVkKHRoaXMuY29udGV4dHMpKSB7XG4gICAgYXdhaXQgdGhpcy5nZXRDb250ZXh0cygpO1xuICB9XG5cbiAgbGV0IGNvbnRleHRJZCA9IF8ucmVwbGFjZShuYW1lLCBXRUJWSUVXX0JBU0UsICcnKTtcbiAgaWYgKGNvbnRleHRJZCA9PT0gJycpIHtcbiAgICAvLyBhbGxvdyB1c2VyIHRvIHBhc3MgaW4gXCJXRUJWSUVXXCIgd2l0aG91dCBhbiBpbmRleFxuICAgIC8vIHRoZSBzZWNvbmQgY29udGV4dCB3aWxsIGJlIHRoZSBmaXJzdCB3ZWJ2aWV3IGFzXG4gICAgLy8gdGhlIGZpcnN0IGlzIGFsd2F5cyBOQVRJVkVfQVBQXG4gICAgY29udGV4dElkID0gdGhpcy5jb250ZXh0c1sxXTtcbiAgfVxuICBpZiAoIV8uaW5jbHVkZXModGhpcy5jb250ZXh0cywgY29udGV4dElkKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm9TdWNoQ29udGV4dEVycm9yKCk7XG4gIH1cblxuICBjb25zdCBvbGRDb250ZXh0ID0gdGhpcy5jdXJDb250ZXh0O1xuICB0aGlzLmN1ckNvbnRleHQgPSB0aGlzLmN1cldpbmRvd0hhbmRsZSA9IGNvbnRleHRJZDtcblxuICAvLyBgY29udGV4dElkYCB3aWxsIGJlIGluIHRoZSBmb3JtIG9mIGBhcHBJZC5wYWdlSWRgIGluIHRoaXMgY2FzZVxuICBjb25zdCBbYXBwSWRLZXksIHBhZ2VJZEtleV0gPSBfLm1hcChjb250ZXh0SWQuc3BsaXQoJy4nKSwgKGlkKSA9PiBwYXJzZUludChpZCwgMTApKTtcbiAgdHJ5IHtcbiAgICB0aGlzLnNlbGVjdGluZ05ld1BhZ2UgPSB0cnVlO1xuICAgIGF3YWl0IHRoaXMucmVtb3RlLnNlbGVjdFBhZ2UoYXBwSWRLZXksIHBhZ2VJZEtleSwgc2tpcFJlYWR5Q2hlY2spO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLmN1ckNvbnRleHQgPSB0aGlzLmN1cldpbmRvd0hhbmRsZSA9IG9sZENvbnRleHQ7XG4gICAgdGhyb3cgZXJyO1xuICB9IGZpbmFsbHkge1xuICAgIHRoaXMuc2VsZWN0aW5nTmV3UGFnZSA9IGZhbHNlO1xuICB9XG5cbiAgLy8gYXR0ZW1wdCB0byBzdGFydCBwZXJmb3JtYW5jZSBsb2dnaW5nLCBpZiByZXF1ZXN0ZWRcbiAgaWYgKHRoaXMub3B0cy5lbmFibGVQZXJmb3JtYW5jZUxvZ2dpbmcgJiYgdGhpcy5yZW1vdGUpIHtcbiAgICBsb2cuZGVidWcoYFN0YXJ0aW5nIHBlcmZvcm1hbmNlIGxvZyBvbiAnJHt0aGlzLmN1ckNvbnRleHR9J2ApO1xuICAgIHRoaXMubG9ncy5wZXJmb3JtYW5jZSA9IG5ldyBJT1NQZXJmb3JtYW5jZUxvZyh0aGlzLnJlbW90ZSk7XG4gICAgYXdhaXQgdGhpcy5sb2dzLnBlcmZvcm1hbmNlLnN0YXJ0Q2FwdHVyZSgpO1xuICB9XG5cbiAgLy8gc3RhcnQgc2FmYXJpIGxvZ2dpbmcgaWYgdGhlIGxvZ3MgaGFuZGxlcnMgYXJlIGFjdGl2ZVxuICBpZiAobmFtZSAmJiBuYW1lICE9PSBOQVRJVkVfV0lOICYmIHRoaXMubG9ncykge1xuICAgIGlmICh0aGlzLmxvZ3Muc2FmYXJpQ29uc29sZSkge1xuICAgICAgYXdhaXQgdGhpcy5yZW1vdGUuc3RhcnRDb25zb2xlKHRoaXMubG9ncy5zYWZhcmlDb25zb2xlLmFkZExvZ0xpbmUuYmluZCh0aGlzLmxvZ3Muc2FmYXJpQ29uc29sZSkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5sb2dzLnNhZmFyaU5ldHdvcmspIHtcbiAgICAgIGF3YWl0IHRoaXMucmVtb3RlLnN0YXJ0TmV0d29yayh0aGlzLmxvZ3Muc2FmYXJpTmV0d29yay5hZGRMb2dMaW5lLmJpbmQodGhpcy5sb2dzLnNhZmFyaU5ldHdvcmspKTtcbiAgICB9XG4gIH1cbn07XG5cbmV4dGVuc2lvbnMuY29ubmVjdFRvUmVtb3RlRGVidWdnZXIgPSBhc3luYyBmdW5jdGlvbiBjb25uZWN0VG9SZW1vdGVEZWJ1Z2dlciAoKSB7XG4gIHRoaXMucmVtb3RlID0gYXdhaXQgdGhpcy5nZXROZXdSZW1vdGVEZWJ1Z2dlcigpO1xuXG4gIHRoaXMucmVtb3RlLm9uKFJlbW90ZURlYnVnZ2VyLkVWRU5UX1BBR0VfQ0hBTkdFLCB0aGlzLm9uUGFnZUNoYW5nZS5iaW5kKHRoaXMpKTtcbiAgdGhpcy5yZW1vdGUub24oUmVtb3RlRGVidWdnZXIuRVZFTlRfRlJBTUVTX0RFVEFDSEVELCAoKSA9PiB7XG4gICAgaWYgKCFfLmlzRW1wdHkodGhpcy5jdXJXZWJGcmFtZXMpKSB7XG4gICAgICBsb2cuZGVidWcoYENsZWFyaW5nICR7dXRpbC5wbHVyYWxpemUoJ2ZyYW1lJywgdGhpcy5jdXJXZWJGcmFtZXMubGVuZ3RoLCB0cnVlKX06ICR7dGhpcy5jdXJXZWJGcmFtZXMuam9pbignLCAnKX1gKTtcbiAgICB9XG4gICAgdGhpcy5jdXJXZWJGcmFtZXMgPSBbXTtcbiAgfSk7XG5cbiAgYXdhaXQgdGhpcy5yZW1vdGUuY29ubmVjdCh0aGlzLm9wdHMud2Vidmlld0Nvbm5lY3RUaW1lb3V0KTtcbn07XG5cbmV4dGVuc2lvbnMubGlzdFdlYkZyYW1lcyA9IGFzeW5jIGZ1bmN0aW9uIGxpc3RXZWJGcmFtZXMgKHVzZVVybCA9IHRydWUpIHtcbiAgdXNlVXJsID0gdXNlVXJsICYmICF0aGlzLmlzUmVhbERldmljZSgpICYmICEhdGhpcy5nZXRDdXJyZW50VXJsKCk7XG4gIGxvZy5kZWJ1ZyhgU2VsZWN0aW5nIGJ5IHVybDogJHt1c2VVcmx9ICR7dXNlVXJsID8gYChleHBlY3RlZCB1cmw6ICcke3RoaXMuZ2V0Q3VycmVudFVybCgpfScpYCA6ICcnfWApO1xuXG4gIGNvbnN0IGN1cnJlbnRVcmwgPSB1c2VVcmwgPyB0aGlzLmdldEN1cnJlbnRVcmwoKSA6IHVuZGVmaW5lZDtcbiAgbGV0IHBhZ2VBcnJheSA9IFtdO1xuICBjb25zdCBnZXRXZWJ2aWV3UGFnZXMgPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlbW90ZS5zZWxlY3RBcHAoY3VycmVudFVybCwgdGhpcy5vcHRzLndlYnZpZXdDb25uZWN0UmV0cmllcywgdGhpcy5vcHRzLmlnbm9yZUFib3V0QmxhbmtVcmwpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLmRlYnVnKGBObyBhdmFpbGFibGUgd2ViIHBhZ2VzOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfTtcblxuICBpZiAodGhpcy5yZW1vdGUgJiYgdGhpcy5yZW1vdGUuYXBwSWRLZXkpIHtcbiAgICAvLyBhbHJlYWR5IGNvbm5lY3RlZFxuICAgIHBhZ2VBcnJheSA9IGF3YWl0IGdldFdlYnZpZXdQYWdlcygpO1xuICB9IGVsc2Uge1xuICAgIGlmICghdGhpcy5yZW1vdGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY29ubmVjdFRvUmVtb3RlRGVidWdnZXIoKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5yZW1vdGUuc2V0Q29ubmVjdGlvbktleSgpO1xuXG4gICAgcGFnZUFycmF5ID0gYXdhaXQgZ2V0V2Vidmlld1BhZ2VzKCk7XG5cbiAgICBjb25zdCBhbGVydEVycm9yTXNnID0gJ0Nsb3NlIGFsZXJ0IGZhaWxlZC4gUmV0cnkuJztcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcmV0cnlJbnRlcnZhbCg2LCAxMDAwLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmICghYXdhaXQgdGhpcy5jbG9zZUFsZXJ0QmVmb3JlVGVzdCgpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGFsZXJ0RXJyb3JNc2cpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIGlmIHRoZSBsb29wIHRvIGNsb3NlIGFsZXJ0cyBmYWlsZWQgdG8gZGlzbWlzcywgaWdub3JlLFxuICAgICAgLy8gb3RoZXJ3aXNlIGxvZyBhbmQgdGhyb3cgdGhlIGVycm9yXG4gICAgICBpZiAoZXJyLm1lc3NhZ2UgIT09IGFsZXJ0RXJyb3JNc2cpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocGFnZUFycmF5Lmxlbmd0aCA9PT0gMCkge1xuICAgIC8vIHdlIGhhdmUgbm8gd2ViIGZyYW1lcywgYnV0IGNvbnRpbnVlIGFueXdheVxuICAgIGxvZy5kZWJ1ZygnTm8gd2ViIGZyYW1lcyBmb3VuZC4nKTtcbiAgfVxuICByZXR1cm4gcGFnZUFycmF5O1xufTtcblxuY29tbWFuZHMuZ2V0Q29udGV4dHMgPSBhc3luYyBmdW5jdGlvbiBnZXRDb250ZXh0cyAoKSB7XG4gIGxvZy5kZWJ1ZygnR2V0dGluZyBsaXN0IG9mIGF2YWlsYWJsZSBjb250ZXh0cycpO1xuICBjb25zdCBjb250ZXh0cyA9IGF3YWl0IHRoaXMuZ2V0Q29udGV4dHNBbmRWaWV3cyhmYWxzZSk7XG5cbiAgY29uc3QgbWFwRm4gPSB0aGlzLm9wdHMuZnVsbENvbnRleHRMaXN0XG4gICAgPyBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGNvbnRleHQuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgdGl0bGU6IGNvbnRleHQudmlldy50aXRsZSxcbiAgICAgICAgdXJsOiBjb250ZXh0LnZpZXcudXJsLFxuICAgICAgICBidW5kbGVJZDogY29udGV4dC52aWV3LmJ1bmRsZUlkLFxuICAgICAgfTtcbiAgICB9XG4gICAgOiAoY29udGV4dCkgPT4gY29udGV4dC5pZC50b1N0cmluZygpO1xuICByZXR1cm4gY29udGV4dHMubWFwKG1hcEZuKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ29udGV4dFxuICpcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZCAtIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBjb250ZXh0LiBUaGUgbmF0aXZlIGNvbnRleHRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlICdOQVRJVkVfQVBQJyBhbmQgdGhlIHdlYnZpZXdzIHdpbGwgYmVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAnV0VCVklFV194eHgnXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHRpdGxlIC0gVGhlIHRpdGxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgd2VidmlldyBjb250ZW50XG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHVybCAtIFRoZSB1cmwgYXNzb2NpYXRlZCB3aXRoIHRoZSB3ZWJ2aWV3IGNvbnRlbnRcbiAqL1xuXG4vKipcbiAqIEdldCB0aGUgY29udGV4dHMgYXZhaWxhYmxlLCB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSB1cmwgYW5kIHRpdGxlIG9mIGVhY2hcbiAqIHdlYnZpZXdcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIE9wdGlvbnMgc2V0LCB3aGljaCBjYW4gaW5jbHVkZSBgd2FpdEZvcldlYnZpZXdNc2AgdG9cbiAqICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSB0aGUgcGVyaW9kIHRvIHBvbGwgZm9yIGF2YWlsYWJsZSB3ZWJ2aWV3c1xuICogQHJldHVybnMge0FycmF5fSBMaXN0IG9mIENvbnRleHQgb2JqZWN0c1xuICovXG5leHRlbnNpb25zLm1vYmlsZUdldENvbnRleHRzID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlR2V0Q29udGV4dHMgKG9wdHMgPSB7fSkge1xuICBsZXQge1xuICAgIHdhaXRGb3JXZWJ2aWV3TXMgPSAwLFxuICB9ID0gb3B0cztcblxuICAvLyBtYWtlIHN1cmUgaXQgaXMgYSBudW1iZXIsIHNvIHRoZSBkdXJhdGlvbiBjaGVjayB3b3JrcyBwcm9wZXJseVxuICBpZiAoIV8uaXNOdW1iZXIod2FpdEZvcldlYnZpZXdNcykpIHtcbiAgICB3YWl0Rm9yV2Vidmlld01zID0gcGFyc2VJbnQod2FpdEZvcldlYnZpZXdNcywgMTApO1xuICAgIGlmIChpc05hTih3YWl0Rm9yV2Vidmlld01zKSkge1xuICAgICAgd2FpdEZvcldlYnZpZXdNcyA9IDA7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgY3VyT3B0ID0gdGhpcy5vcHRzLmZ1bGxDb250ZXh0TGlzdDtcbiAgdGhpcy5vcHRzLmZ1bGxDb250ZXh0TGlzdCA9IHRydWU7XG5cbiAgY29uc3QgdGltZXIgPSBuZXcgdGltaW5nLlRpbWVyKCkuc3RhcnQoKTtcbiAgdHJ5IHtcbiAgICBsZXQgY29udGV4dHM7XG4gICAgZG8ge1xuICAgICAgY29udGV4dHMgPSBhd2FpdCB0aGlzLmdldENvbnRleHRzKCk7XG5cbiAgICAgIGlmIChjb250ZXh0cy5sZW5ndGggPj0gMikge1xuICAgICAgICBsb2cuZGVidWcoYEZvdW5kIHdlYnZpZXcgY29udGV4dCBhZnRlciAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgICAgICByZXR1cm4gY29udGV4dHM7XG4gICAgICB9XG4gICAgICBsb2cuZGVidWcoYE5vIHdlYnZpZXdzIGZvdW5kIGluICR7dGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcy50b0ZpeGVkKDApfW1zYCk7XG4gICAgfSB3aGlsZSAodGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcyA8IHdhaXRGb3JXZWJ2aWV3TXMpO1xuICAgIHJldHVybiBjb250ZXh0cztcbiAgfSBmaW5hbGx5IHtcbiAgICAvLyByZXNldCB0aGUgb3B0aW9uIHNvIHRoZXJlIGFyZSBubyBzaWRlIGVmZmVjdHNcbiAgICB0aGlzLm9wdHMuZnVsbENvbnRleHRMaXN0ID0gY3VyT3B0O1xuICB9XG59O1xuXG5jb21tYW5kcy5zZXRXaW5kb3cgPSBhc3luYyBmdW5jdGlvbiBzZXRXaW5kb3cgKG5hbWUsIHNraXBSZWFkeUNoZWNrKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5zZXRDb250ZXh0KG5hbWUsIF8ubm9vcCwgc2tpcFJlYWR5Q2hlY2spO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyB0cmFuc2xhdGUgdGhlIGVycm9yIGluIHRlcm1zIG9mIHdpbmRvd3NcbiAgICB0aHJvdyBpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5Ob1N1Y2hDb250ZXh0RXJyb3IpXG4gICAgICA/IG5ldyBlcnJvcnMuTm9TdWNoV2luZG93RXJyb3IoKVxuICAgICAgOiBlcnI7XG4gIH1cbn07XG5cbmNvbW1hbmRzLmdldFdpbmRvd0hhbmRsZSA9IGFzeW5jIGZ1bmN0aW9uIGdldFdpbmRvd0hhbmRsZSAoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuICBsb2cuZGVidWcoYEdldHRpbmcgY3VycmVudCB3aW5kb3cgaGFuZGxlYCk7XG4gIHJldHVybiB0aGlzLmN1ckNvbnRleHQ7XG59O1xuXG5jb21tYW5kcy5nZXRXaW5kb3dIYW5kbGVzID0gYXN5bmMgZnVuY3Rpb24gZ2V0V2luZG93SGFuZGxlcyAoKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG4gIGxvZy5kZWJ1ZygnR2V0dGluZyBsaXN0IG9mIGF2YWlsYWJsZSB3aW5kb3cgaGFuZGxlcycpO1xuICBjb25zdCBjb250ZXh0cyA9IGF3YWl0IHRoaXMuZ2V0Q29udGV4dHNBbmRWaWV3cyhmYWxzZSk7XG4gIHJldHVybiBjb250ZXh0c1xuICAgIC8vIGdldCByaWQgb2YgdGhlIG5hdGl2ZSBhcHAgY29udGV4dFxuICAgIC5maWx0ZXIoKGNvbnRleHQpID0+IGNvbnRleHQuaWQgIT09IE5BVElWRV9XSU4pXG4gICAgLy8gZ2V0IHRoZSBgYXBwLmlkYCBmb3JtYXQgZXhwZWN0ZWRcbiAgICAubWFwKChjb250ZXh0KSA9PiBjb250ZXh0LnZpZXcuaWQudG9TdHJpbmcoKSk7XG59O1xuXG5leHRlbnNpb25zLm9uUGFnZUNoYW5nZSA9IGFzeW5jIGZ1bmN0aW9uIG9uUGFnZUNoYW5nZSAocGFnZUNoYW5nZU5vdGlmaWNhdGlvbikge1xuICBsb2cuZGVidWcoYFJlbW90ZSBkZWJ1Z2dlciBub3RpZmllZCB1cyBvZiBhIG5ldyBwYWdlIGxpc3Rpbmc6ICR7SlNPTi5zdHJpbmdpZnkocGFnZUNoYW5nZU5vdGlmaWNhdGlvbil9YCk7XG4gIGlmICh0aGlzLnNlbGVjdGluZ05ld1BhZ2UpIHtcbiAgICBsb2cuZGVidWcoJ1dlIGFyZSBpbiB0aGUgbWlkZGxlIG9mIHNlbGVjdGluZyBhIHBhZ2UsIGlnbm9yaW5nJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICghdGhpcy5yZW1vdGUgfHwgIXRoaXMucmVtb3RlLmlzQ29ubmVjdGVkKSB7XG4gICAgbG9nLmRlYnVnKCdXZSBoYXZlIG5vdCB5ZXQgY29ubmVjdGVkLCBpZ25vcmluZycpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHthcHBJZEtleSwgcGFnZUFycmF5fSA9IHBhZ2VDaGFuZ2VOb3RpZmljYXRpb247XG5cbiAgbGV0IG5ld0lkcyA9IFtdO1xuICBsZXQgbmV3UGFnZXMgPSBbXTtcbiAgbGV0IGtleUlkID0gbnVsbDtcblxuICAvLyBDaGVja3MgaWYgYSBVUkwgaXMgYmxhY2tsaXN0ZWQgaW4gdGhlICdzYWZhcmlJZ25vcmVXZWJIb3N0bmFtZXMnIGNhcGFiaWxpdHlcbiAgZnVuY3Rpb24gaXNVcmxJZ25vcmVkICh1cmwsIHNhZmFyaUlnbm9yZVdlYkhvc3RuYW1lcykge1xuICAgIGNvbnN0IGlnbm9yZWRIb3N0cyA9IChzYWZhcmlJZ25vcmVXZWJIb3N0bmFtZXMgfHwgJycpXG4gICAgICAuc3BsaXQoJywnKVxuICAgICAgLm1hcCgoYikgPT4gYi50cmltKCkpXG4gICAgICAuZmlsdGVyKChiKSA9PiAhXy5pc0VtcHR5KGIpKTtcbiAgICBmb3IgKGNvbnN0IGlnbm9yZWRIb3N0IG9mIGlnbm9yZWRIb3N0cykge1xuICAgICAgaWYgKGlnbm9yZWRIb3N0ID09PSAnYWJvdXQ6YmxhbmsnICYmIHVybCA9PT0gJ2Fib3V0OmJsYW5rJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgaG9zdG5hbWUgPSBuZXcgVVJMKHVybCkuaG9zdG5hbWU7XG4gICAgICAgICAgaWYgKGhvc3RuYW1lID09PSBpZ25vcmVkSG9zdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgICAgICAvLyBkbyBub3RoaW5nIGlmIGludmFsaWQgVVJMXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yIChjb25zdCBwYWdlIG9mIHBhZ2VBcnJheSkge1xuICAgIGNvbnN0IGlkID0gcGFnZS5pZC50b1N0cmluZygpO1xuICAgIG5ld0lkcy5wdXNoKGlkKTtcbiAgICBpZiAocGFnZS5pc0tleSkge1xuICAgICAga2V5SWQgPSBpZDtcbiAgICB9XG4gICAgY29uc3QgY29udGV4dElkID0gYCR7YXBwSWRLZXl9LiR7aWR9YDtcblxuICAgIC8vIGFkZCBpZiB0aGlzIGlzIGEgbmV3IHBhZ2VcbiAgICBpZiAoIV8uaW5jbHVkZXModGhpcy5jb250ZXh0cywgY29udGV4dElkKSkge1xuICAgICAgaWYgKGlzVXJsSWdub3JlZChwYWdlLnVybCwgdGhpcy5vcHRzLnNhZmFyaUlnbm9yZVdlYkhvc3RuYW1lcykpIHtcbiAgICAgICAgbG9nLmluZm8oYE5vdCB0cmFja2luZyAnJHtwYWdlLnVybH0nIHBhZ2UgYmVjYXVzZSBpdCBpcyBibGFja2xpc3RlZC4gYCArXG4gICAgICAgICAgYCdzYWZhcmlJZ25vcmVXZWJIb3N0bmFtZXMnPSR7dGhpcy5vcHRzLnNhZmFyaUlnbm9yZVdlYkhvc3RuYW1lc31gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1BhZ2VzLnB1c2goaWQpO1xuICAgICAgICB0aGlzLmNvbnRleHRzLnB1c2goY29udGV4dElkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIWtleUlkKSB7XG4gICAgLy8gaWYgdGhlcmUgaXMgbm8ga2V5IGlkLCBwdWxsIHRoZSBmaXJzdCBpZCBmcm9tIHRoZSBwYWdlIGFycmF5IGFuZCB1c2UgdGhhdFxuICAgIC8vIGFzIGEgc3RhbmQgaW5cbiAgICBsb2cuZGVidWcoJ05vIGtleSBpZCBmb3VuZC4gQ2hvb3NpbmcgZmlyc3QgaWQgZnJvbSBwYWdlIGFycmF5Jyk7XG4gICAga2V5SWQgPSBuZXdJZHNbMF0gfHwgbnVsbDtcbiAgfVxuXG4gIGlmICghdXRpbC5oYXNWYWx1ZSh0aGlzLmN1ckNvbnRleHQpKSB7XG4gICAgbG9nLmRlYnVnKCdXZSBkbyBub3QgYXBwZWFyIHRvIGhhdmUgd2luZG93IHNldCB5ZXQsIGlnbm9yaW5nJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgW2N1ckFwcElkS2V5LCBjdXJQYWdlSWRLZXldID0gdGhpcy5jdXJDb250ZXh0LnNwbGl0KCcuJyk7XG5cbiAgaWYgKGN1ckFwcElkS2V5ICE9PSBhcHBJZEtleSkge1xuICAgIGxvZy5kZWJ1ZygnUGFnZSBjaGFuZ2Ugbm90IHJlZmVycmluZyB0byBjdXJyZW50bHkgc2VsZWN0ZWQgYXBwLCBpZ25vcmluZy4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgbmV3UGFnZSA9IG51bGw7XG4gIGlmIChuZXdQYWdlcy5sZW5ndGgpIHtcbiAgICBuZXdQYWdlID0gXy5sYXN0KG5ld1BhZ2VzKTtcbiAgICBsb2cuZGVidWcoYFdlIGhhdmUgbmV3IHBhZ2VzLCBzZWxlY3RpbmcgcGFnZSAnJHtuZXdQYWdlfSdgKTtcbiAgfSBlbHNlIGlmICghXy5pbmNsdWRlcyhuZXdJZHMsIGN1clBhZ2VJZEtleSkpIHtcbiAgICBsb2cuZGVidWcoJ05ldyBwYWdlIGxpc3RpbmcgZnJvbSByZW1vdGUgZGVidWdnZXIgZG9lcyBub3QgY29udGFpbiAnICtcbiAgICAgICAgICAgICAgICAgJ2N1cnJlbnQgd2luZG93OyBhc3N1bWluZyBpdCBpcyBjbG9zZWQnKTtcbiAgICBpZiAoIXV0aWwuaGFzVmFsdWUoa2V5SWQpKSB7XG4gICAgICBsb2cuZXJyb3IoJ0RvIG5vdCBoYXZlIG91ciBjdXJyZW50IHdpbmRvdyBhbnltb3JlLCBhbmQgdGhlcmUgJyArXG4gICAgICAgICAgICAgICAgICAgJ2FyZSBub3QgYW55IG1vcmUgdG8gbG9hZCEgRG9pbmcgbm90aGluZy4uLicpO1xuICAgICAgdGhpcy5zZXRDdXJyZW50VXJsKHVuZGVmaW5lZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbG9nLmRlYnVnKGBEZWJ1Z2dlciBhbHJlYWR5IHNlbGVjdGVkIHBhZ2UgJyR7a2V5SWR9JywgYCArXG4gICAgICAgICAgICAgICAgIGBjb25maXJtaW5nIHRoYXQgY2hvaWNlLmApO1xuICAgIHRoaXMuY3VyQ29udGV4dCA9IGAke2FwcElkS2V5fS4ke2tleUlkfWA7XG4gICAgbmV3UGFnZSA9IGtleUlkO1xuICB9IGVsc2Uge1xuICAgIC8vIGF0IHRoaXMgcG9pbnQsIHRoZXJlIGFyZSBubyBuZXcgcGFnZXMsIGFuZCB0aGUgY3VycmVudCBwYWdlIHN0aWxsIGV4aXN0c1xuICAgIGxvZy5kZWJ1ZygnQ2hlY2tpbmcgaWYgcGFnZSBuZWVkcyB0byBsb2FkJyk7XG4gICAgLy8gSWYgYSB3aW5kb3cgbmF2aWdhdGVzIHRvIGFuIGFuY2hvciBpdCBkb2Vzbid0IGFsd2F5cyBmaXJlIGEgcGFnZVxuICAgIC8vIGNhbGxiYWNrIGV2ZW50LiBMZXQncyBjaGVjayBpZiB3ZSB3b3VuZCB1cCBpbiBzdWNoIGEgc2l0dWF0aW9uLlxuICAgIGNvbnN0IG5lZWRzUGFnZUxvYWQgPSAoKCkgPT4ge1xuICAgICAgLy8gbmVlZCB0byBtYXAgdGhlIHBhZ2UgaWRzIHRvIGNvbnRleHQgaWRzXG4gICAgICBjb25zdCBjb250ZXh0QXJyYXkgPSBfLm1hcChwYWdlQXJyYXksIChwYWdlKSA9PiBgJHthcHBJZEtleX0uJHtwYWdlLmlkfWApO1xuICAgICAgLy8gY2hlY2sgaWYgdGhlIGN1cnJlbnQgY29udGV4dCBleGlzdHMgaW4gYm90aCBvdXIgcmVjb3JkZWQgY29udGV4dHMsXG4gICAgICAvLyBhbmQgdGhlIHBhZ2UgYXJyYXlcbiAgICAgIHJldHVybiAhXy5pc0VxdWFsKF8uZmluZCh0aGlzLmNvbnRleHRzLCB0aGlzLmN1ckNvbnRleHQpLCBfLmZpbmQoY29udGV4dEFycmF5LCB0aGlzLmN1ckNvbnRleHQpKTtcbiAgICB9KSgpO1xuXG4gICAgaWYgKG5lZWRzUGFnZUxvYWQpIHtcbiAgICAgIGxvZy5kZWJ1ZygnUGFnZSBsb2FkIG5lZWRlZC4gTG9hZGluZy4uLicpO1xuICAgICAgYXdhaXQgdGhpcy5yZW1vdGUucGFnZUxvYWQoKTtcbiAgICB9XG5cbiAgICBsb2cuZGVidWcoJ05ldyBwYWdlIGxpc3RpbmcgaXMgc2FtZSBhcyBvbGQsIGRvaW5nIG5vdGhpbmcnKTtcbiAgfVxuXG4gIC8vIG1ha2Ugc3VyZSB0aGF0IHRoZSBwYWdlIGxpc3RpbmcgaXNuJ3QgaW5kaWNhdGluZyBhIHJlZGlyZWN0XG4gIGlmICh1dGlsLmhhc1ZhbHVlKHRoaXMuY3VyQ29udGV4dCkpIHtcbiAgICBsZXQgY3VycmVudFBhZ2VJZCA9IHBhcnNlSW50KF8ubGFzdCh0aGlzLmN1ckNvbnRleHQuc3BsaXQoJy4nKSksIDEwKTtcbiAgICBsZXQgcGFnZSA9IF8uZmluZChwYWdlQXJyYXksIChwKSA9PiBwYXJzZUludChwLmlkLCAxMCkgPT09IGN1cnJlbnRQYWdlSWQpO1xuICAgIGlmIChwYWdlICYmIHBhZ2UudXJsICE9PSB0aGlzLmdldEN1cnJlbnRVcmwoKSkge1xuICAgICAgbG9nLmRlYnVnKGBSZWRpcmVjdGVkIGZyb20gJyR7dGhpcy5nZXRDdXJyZW50VXJsKCl9JyB0byAnJHtwYWdlLnVybH0nYCk7XG4gICAgICB0aGlzLnNldEN1cnJlbnRVcmwocGFnZS51cmwpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh1dGlsLmhhc1ZhbHVlKG5ld1BhZ2UpKSB7XG4gICAgdGhpcy5zZWxlY3RpbmdOZXdQYWdlID0gdHJ1ZTtcbiAgICBjb25zdCBvbGRDb250ZXh0ID0gdGhpcy5jdXJDb250ZXh0O1xuICAgIHRoaXMuY3VyQ29udGV4dCA9IGAke2FwcElkS2V5fS4ke25ld1BhZ2V9YDtcbiAgICAvLyBkbyBub3Qgd2FpdCwgYXMgdGhpcyBjYW4gdGFrZSBhIGxvbmcgdGltZSwgYW5kIHRoZSByZXNwb25zZSBpcyBub3QgbmVjZXNzYXJ5XG4gICAgdGhpcy5yZW1vdGUuc2VsZWN0UGFnZShhcHBJZEtleSwgcGFyc2VJbnQobmV3UGFnZSwgMTApKVxuICAgICAgLmNhdGNoKChlcnIpID0+IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBwcm9taXNlL3ByZWZlci1hd2FpdC10by1jYWxsYmFja3NcbiAgICAgICAgbG9nLndhcm4oYEZhaWxlZCB0byBzZWxlY3QgcGFnZTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgdGhpcy5jdXJDb250ZXh0ID0gb2xkQ29udGV4dDtcbiAgICAgIH0pO1xuICAgIHRoaXMuc2VsZWN0aW5nTmV3UGFnZSA9IGZhbHNlO1xuICB9XG4gIHRoaXMud2luZG93SGFuZGxlQ2FjaGUgPSBwYWdlQXJyYXk7XG59O1xuXG5cbk9iamVjdC5hc3NpZ24oY29tbWFuZHMsIGV4dGVuc2lvbnMsIGhlbHBlcnMpO1xuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9jb250ZXh0LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
|
@@ -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
|
|
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(
|
|
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=
|