@appium/base-driver 8.4.2 → 8.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../../../lib/basedriver/commands/log.js"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,+BAHW,QAAQ,GACN,OAAO,CA2CnB;2BAIY,OAAO,eAAe,EAAE,WAAW;qBACnC,OAAO,eAAe,EAAE,MAAM;uBAC9B,OAAO,QAAQ,EAAE,QAAQ;sBACzB,OAAO,WAAW,EAAE,cAAc,CAAC,OAAO,eAAe,EAAE,eAAe,GAAG,OAAO,eAAe,EAAE,aAAa,GAAG,OAAO,eAAe,EAAE,YAAY,GAAG,YAAY,CAAC;yBAKzK,OAAO,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../../../lib/basedriver/commands/log.js"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,+BAHW,QAAQ,GACN,OAAO,CAsCnB;2BAIY,OAAO,eAAe,EAAE,WAAW;qBACnC,OAAO,eAAe,EAAE,MAAM;uBAC9B,OAAO,QAAQ,EAAE,QAAQ;sBACzB,OAAO,WAAW,EAAE,cAAc,CAAC,OAAO,eAAe,EAAE,eAAe,GAAG,OAAO,eAAe,EAAE,aAAa,GAAG,OAAO,eAAe,EAAE,YAAY,GAAG,YAAY,CAAC;yBAKzK,OAAO,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC"}
@@ -13,7 +13,12 @@ var _lodash = _interopRequireDefault(require("lodash"));
13
13
 
14
14
  function LogMixin(Base) {
15
15
  class LogCommands extends Base {
16
- supportedLogTypes;
16
+ constructor(...args) {
17
+ var _this$supportedLogTyp;
18
+
19
+ super(...args);
20
+ this.supportedLogTypes = (_this$supportedLogTyp = this.supportedLogTypes) !== null && _this$supportedLogTyp !== void 0 ? _this$supportedLogTyp : {};
21
+ }
17
22
 
18
23
  async getLogTypes() {
19
24
  this.log.debug('Retrieving supported log types');
@@ -24,10 +29,7 @@ function LogMixin(Base) {
24
29
  this.log.debug(`Retrieving '${logType}' logs`);
25
30
 
26
31
  if (!(await this.getLogTypes()).includes(logType)) {
27
- const logsTypesWithDescriptions = _lodash.default.reduce(this.supportedLogTypes, (acc, value, key) => {
28
- acc[key] = value.description;
29
- return acc;
30
- }, {});
32
+ const logsTypesWithDescriptions = _lodash.default.mapValues(this.supportedLogTypes, 'description');
31
33
 
32
34
  throw new Error(`Unsupported log type '${logType}'. ` + `Supported types: ${JSON.stringify(logsTypesWithDescriptions)}`);
33
35
  }
@@ -39,4 +41,4 @@ function LogMixin(Base) {
39
41
 
40
42
  return LogCommands;
41
43
  }
42
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9iYXNlZHJpdmVyL2NvbW1hbmRzL2xvZy5qcyJdLCJuYW1lcyI6WyJMb2dNaXhpbiIsIkJhc2UiLCJMb2dDb21tYW5kcyIsInN1cHBvcnRlZExvZ1R5cGVzIiwiZ2V0TG9nVHlwZXMiLCJsb2ciLCJkZWJ1ZyIsIl8iLCJrZXlzIiwiZ2V0TG9nIiwibG9nVHlwZSIsImluY2x1ZGVzIiwibG9nc1R5cGVzV2l0aERlc2NyaXB0aW9ucyIsInJlZHVjZSIsImFjYyIsInZhbHVlIiwia2V5IiwiZGVzY3JpcHRpb24iLCJFcnJvciIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXR0ZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBR0E7O0FBT08sU0FBU0EsUUFBVCxDQUFtQkMsSUFBbkIsRUFBeUI7QUFJOUIsUUFBTUMsV0FBTixTQUEwQkQsSUFBMUIsQ0FBK0I7QUFLN0JFLElBQUFBLGlCQUFpQjs7QUFFQSxVQUFYQyxXQUFXLEdBQUk7QUFDbkIsV0FBS0MsR0FBTCxDQUFTQyxLQUFULENBQWUsZ0NBQWY7QUFDQSxhQUFPQyxnQkFBRUMsSUFBRixDQUFPLEtBQUtMLGlCQUFaLENBQVA7QUFDRDs7QUFLVyxVQUFOTSxNQUFNLENBQUVDLE9BQUYsRUFBVztBQUNyQixXQUFLTCxHQUFMLENBQVNDLEtBQVQsQ0FBZ0IsZUFBY0ksT0FBUSxRQUF0Qzs7QUFFQSxVQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUtOLFdBQUwsRUFBUCxFQUEyQk8sUUFBM0IsQ0FBb0NELE9BQXBDLENBQUwsRUFBbUQ7QUFDakQsY0FBTUUseUJBQXlCLEdBQUdMLGdCQUFFTSxNQUFGLENBQ2hDLEtBQUtWLGlCQUQyQixFQUVoQyxDQUFDVyxHQUFELEVBQU1DLEtBQU4sRUFBYUMsR0FBYixLQUFxQjtBQUNuQkYsVUFBQUEsR0FBRyxDQUFDRSxHQUFELENBQUgsR0FBV0QsS0FBSyxDQUFDRSxXQUFqQjtBQUNBLGlCQUFPSCxHQUFQO0FBQ0QsU0FMK0IsRUFNaEMsRUFOZ0MsQ0FBbEM7O0FBUUEsY0FBTSxJQUFJSSxLQUFKLENBQ0gseUJBQXdCUixPQUFRLEtBQWpDLEdBQ0csb0JBQW1CUyxJQUFJLENBQUNDLFNBQUwsQ0FBZVIseUJBQWYsQ0FBMEMsRUFGNUQsQ0FBTjtBQUlEOztBQUVELGFBQU8sTUFBTSxLQUFLVCxpQkFBTCxDQUF1Qk8sT0FBdkIsRUFBZ0NXLE1BQWhDLENBQXVDLElBQXZDLENBQWI7QUFDRDs7QUFsQzRCOztBQW9DL0IsU0FBT25CLFdBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHJlcXVpcmUtYXdhaXQgKi9cbi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG4vKipcbiAqXG4gKiBAcGFyYW0ge0ZpbmRCYXNlfSBCYXNlXG4gKiBAcmV0dXJucyB7TG9nQmFzZX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIExvZ01peGluIChCYXNlKSB7XG4gIC8qKlxuICAgKiBAaW1wbGVtZW50cyB7SUxvZ0NvbW1hbmRzfVxuICAgKi9cbiAgY2xhc3MgTG9nQ29tbWFuZHMgZXh0ZW5kcyBCYXNlIHtcbiAgICAvKipcbiAgICAgKiBYWFg6IGR1YmlvdXNcbiAgICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZyxMb2dUeXBlPERyaXZlcj4+fVxuICAgICAqL1xuICAgIHN1cHBvcnRlZExvZ1R5cGVzO1xuXG4gICAgYXN5bmMgZ2V0TG9nVHlwZXMgKCkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ1JldHJpZXZpbmcgc3VwcG9ydGVkIGxvZyB0eXBlcycpO1xuICAgICAgcmV0dXJuIF8ua2V5cyh0aGlzLnN1cHBvcnRlZExvZ1R5cGVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAdGhpcyB7RHJpdmVyfVxuICAgICAqL1xuICAgIGFzeW5jIGdldExvZyAobG9nVHlwZSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYFJldHJpZXZpbmcgJyR7bG9nVHlwZX0nIGxvZ3NgKTtcblxuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5nZXRMb2dUeXBlcygpKS5pbmNsdWRlcyhsb2dUeXBlKSkge1xuICAgICAgICBjb25zdCBsb2dzVHlwZXNXaXRoRGVzY3JpcHRpb25zID0gXy5yZWR1Y2UoXG4gICAgICAgICAgdGhpcy5zdXBwb3J0ZWRMb2dUeXBlcyxcbiAgICAgICAgICAoYWNjLCB2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IHZhbHVlLmRlc2NyaXB0aW9uO1xuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICB9LFxuICAgICAgICAgIHt9LFxuICAgICAgICApO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFVuc3VwcG9ydGVkIGxvZyB0eXBlICcke2xvZ1R5cGV9Jy4gYCArXG4gICAgICAgICAgICBgU3VwcG9ydGVkIHR5cGVzOiAke0pTT04uc3RyaW5naWZ5KGxvZ3NUeXBlc1dpdGhEZXNjcmlwdGlvbnMpfWAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnN1cHBvcnRlZExvZ1R5cGVzW2xvZ1R5cGVdLmdldHRlcih0aGlzKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIExvZ0NvbW1hbmRzO1xufVxuXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkxvZ0NvbW1hbmRzfSBJTG9nQ29tbWFuZHNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Ecml2ZXJ9IERyaXZlclxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9maW5kJykuRmluZEJhc2V9IEZpbmRCYXNlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9kcml2ZXInKS5CYXNlRHJpdmVyQmFzZTxpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5UaW1lb3V0Q29tbWFuZHMgJiBpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5FdmVudENvbW1hbmRzICYgaW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRmluZENvbW1hbmRzICYgSUxvZ0NvbW1hbmRzPn0gTG9nQmFzZVxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Mb2dUeXBlPFQ+fSBMb2dUeXBlXG4gKi9cbiJdfQ==
44
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9iYXNlZHJpdmVyL2NvbW1hbmRzL2xvZy5qcyJdLCJuYW1lcyI6WyJMb2dNaXhpbiIsIkJhc2UiLCJMb2dDb21tYW5kcyIsImNvbnN0cnVjdG9yIiwiYXJncyIsInN1cHBvcnRlZExvZ1R5cGVzIiwiZ2V0TG9nVHlwZXMiLCJsb2ciLCJkZWJ1ZyIsIl8iLCJrZXlzIiwiZ2V0TG9nIiwibG9nVHlwZSIsImluY2x1ZGVzIiwibG9nc1R5cGVzV2l0aERlc2NyaXB0aW9ucyIsIm1hcFZhbHVlcyIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldHRlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFHQTs7QUFPTyxTQUFTQSxRQUFULENBQW1CQyxJQUFuQixFQUF5QjtBQUk5QixRQUFNQyxXQUFOLFNBQTBCRCxJQUExQixDQUErQjtBQUU3QkUsSUFBQUEsV0FBVyxDQUFFLEdBQUdDLElBQUwsRUFBVztBQUFBOztBQUNwQixZQUFNLEdBQUdBLElBQVQ7QUFFQSxXQUFLQyxpQkFBTCw0QkFBeUIsS0FBS0EsaUJBQTlCLHlFQUFtRCxFQUFuRDtBQUNEOztBQUVnQixVQUFYQyxXQUFXLEdBQUk7QUFDbkIsV0FBS0MsR0FBTCxDQUFTQyxLQUFULENBQWUsZ0NBQWY7QUFDQSxhQUFPQyxnQkFBRUMsSUFBRixDQUFPLEtBQUtMLGlCQUFaLENBQVA7QUFDRDs7QUFNVyxVQUFOTSxNQUFNLENBQUVDLE9BQUYsRUFBVztBQUNyQixXQUFLTCxHQUFMLENBQVNDLEtBQVQsQ0FBZ0IsZUFBY0ksT0FBUSxRQUF0Qzs7QUFFQSxVQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUtOLFdBQUwsRUFBUCxFQUEyQk8sUUFBM0IsQ0FBb0NELE9BQXBDLENBQUwsRUFBbUQ7QUFDakQsY0FBTUUseUJBQXlCLEdBQUdMLGdCQUFFTSxTQUFGLENBQVksS0FBS1YsaUJBQWpCLEVBQW9DLGFBQXBDLENBQWxDOztBQUNBLGNBQU0sSUFBSVcsS0FBSixDQUNILHlCQUF3QkosT0FBUSxLQUFqQyxHQUNHLG9CQUFtQkssSUFBSSxDQUFDQyxTQUFMLENBQWVKLHlCQUFmLENBQTBDLEVBRjVELENBQU47QUFJRDs7QUFFRCxhQUFPLE1BQU0sS0FBS1QsaUJBQUwsQ0FBdUJPLE9BQXZCLEVBQWdDTyxNQUFoQyxDQUF1QyxJQUF2QyxDQUFiO0FBQ0Q7O0FBN0I0Qjs7QUErQi9CLFNBQU9qQixXQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSByZXF1aXJlLWF3YWl0ICovXG4vLyBAdHMtY2hlY2tcblxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuLyoqXG4gKlxuICogQHBhcmFtIHtGaW5kQmFzZX0gQmFzZVxuICogQHJldHVybnMge0xvZ0Jhc2V9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBMb2dNaXhpbiAoQmFzZSkge1xuICAvKipcbiAgICogQGltcGxlbWVudHMge0lMb2dDb21tYW5kc31cbiAgICovXG4gIGNsYXNzIExvZ0NvbW1hbmRzIGV4dGVuZHMgQmFzZSB7XG5cbiAgICBjb25zdHJ1Y3RvciAoLi4uYXJncykge1xuICAgICAgc3VwZXIoLi4uYXJncyk7XG4gICAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIExvZ1R5cGU8RHJpdmVyPj59ICovXG4gICAgICB0aGlzLnN1cHBvcnRlZExvZ1R5cGVzID0gdGhpcy5zdXBwb3J0ZWRMb2dUeXBlcyA/PyB7fTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRMb2dUeXBlcyAoKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnUmV0cmlldmluZyBzdXBwb3J0ZWQgbG9nIHR5cGVzJyk7XG4gICAgICByZXR1cm4gXy5rZXlzKHRoaXMuc3VwcG9ydGVkTG9nVHlwZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEB0aGlzIHtEcml2ZXJ9XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxvZ1R5cGVcbiAgICAgKi9cbiAgICBhc3luYyBnZXRMb2cgKGxvZ1R5cGUpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBSZXRyaWV2aW5nICcke2xvZ1R5cGV9JyBsb2dzYCk7XG5cbiAgICAgIGlmICghKGF3YWl0IHRoaXMuZ2V0TG9nVHlwZXMoKSkuaW5jbHVkZXMobG9nVHlwZSkpIHtcbiAgICAgICAgY29uc3QgbG9nc1R5cGVzV2l0aERlc2NyaXB0aW9ucyA9IF8ubWFwVmFsdWVzKHRoaXMuc3VwcG9ydGVkTG9nVHlwZXMsICdkZXNjcmlwdGlvbicpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFVuc3VwcG9ydGVkIGxvZyB0eXBlICcke2xvZ1R5cGV9Jy4gYCArXG4gICAgICAgICAgICBgU3VwcG9ydGVkIHR5cGVzOiAke0pTT04uc3RyaW5naWZ5KGxvZ3NUeXBlc1dpdGhEZXNjcmlwdGlvbnMpfWAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnN1cHBvcnRlZExvZ1R5cGVzW2xvZ1R5cGVdLmdldHRlcih0aGlzKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIExvZ0NvbW1hbmRzO1xufVxuXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkxvZ0NvbW1hbmRzfSBJTG9nQ29tbWFuZHNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Ecml2ZXJ9IERyaXZlclxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9maW5kJykuRmluZEJhc2V9IEZpbmRCYXNlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9kcml2ZXInKS5CYXNlRHJpdmVyQmFzZTxpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5UaW1lb3V0Q29tbWFuZHMgJiBpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5FdmVudENvbW1hbmRzICYgaW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRmluZENvbW1hbmRzICYgSUxvZ0NvbW1hbmRzPn0gTG9nQmFzZVxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Mb2dUeXBlPFQ+fSBMb2dUeXBlXG4gKi9cbiJdfQ==
@@ -2,7 +2,7 @@ export type Capabilities = import('@appium/types').Capabilities;
2
2
  export type W3CCapabilities = import('@appium/types').W3CCapabilities;
3
3
  export type Driver = import('@appium/types').Driver;
4
4
  export type Core = import('@appium/types').Core;
5
- export type DriverOpts = import('@appium/types').DriverOpts;
5
+ export type DriverOpts = import('@appium/types').ServerArgs;
6
6
  export type EventHistory = import('@appium/types').EventHistory;
7
7
  export type AppiumLogger = import('@appium/types').AppiumLogger;
8
8
  /**
@@ -14,7 +14,7 @@ export class DriverCore implements Core {
14
14
  * know which version of basedriver it inherited from
15
15
  */
16
16
  static baseVersion: any;
17
- constructor(opts?: import("@appium/types").DriverOpts, shouldValidateCaps?: boolean);
17
+ constructor(opts?: import("@appium/types").ServerArgs, shouldValidateCaps?: boolean);
18
18
  /**
19
19
  * @type {string?}
20
20
  */
@@ -22,7 +22,7 @@ export class DriverCore implements Core {
22
22
  /**
23
23
  * @type {DriverOpts & Capabilities}
24
24
  */
25
- opts: import("@appium/types").DriverOpts & Partial<import("@wdio/types/build/Capabilities").Capabilities & import("@wdio/types/build/Capabilities").AppiumCapabilities & {
25
+ opts: import("@appium/types").ServerArgs & Partial<import("@wdio/types/build/Capabilities").Capabilities & import("@wdio/types/build/Capabilities").AppiumCapabilities & {
26
26
  [x: string]: any;
27
27
  }>;
28
28
  /**
@@ -280,4 +280,4 @@ class DriverCore {
280
280
  }
281
281
 
282
282
  exports.DriverCore = DriverCore;
283
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9iYXNlZHJpdmVyL2NvcmUuanMiXSwibmFtZXMiOlsidmVyc2lvbiIsIkJBU0VEUklWRVJfVkVSIiwiZnMiLCJyZWFkUGFja2FnZUpzb25Gcm9tIiwiX19kaXJuYW1lIiwiTkVXX0NPTU1BTkRfVElNRU9VVF9NUyIsIk9OX1VORVhQRUNURURfU0hVVERPV05fRVZFTlQiLCJEcml2ZXJDb3JlIiwiYmFzZVZlcnNpb24iLCJzZXNzaW9uSWQiLCJvcHRzIiwiaW5pdGlhbE9wdHMiLCJjYXBzIiwib3JpZ2luYWxDYXBzIiwiaGVscGVycyIsImJhc2VQYXRoIiwiREVGQVVMVF9CQVNFX1BBVEgiLCJyZWxheGVkU2VjdXJpdHlFbmFibGVkIiwiYWxsb3dJbnNlY3VyZSIsImRlbnlJbnNlY3VyZSIsIm5ld0NvbW1hbmRUaW1lb3V0TXMiLCJpbXBsaWNpdFdhaXRNcyIsImxvY2F0b3JTdHJhdGVnaWVzIiwid2ViTG9jYXRvclN0cmF0ZWdpZXMiLCJtYW5hZ2VkRHJpdmVycyIsIm5vQ29tbWFuZFRpbWVyIiwiX2V2ZW50SGlzdG9yeSIsImNvbW1hbmRzIiwiX2NvbnN0cmFpbnRzIiwiXyIsImNsb25lRGVlcCIsImRlc2lyZWRDYXBhYmlsaXR5Q29uc3RyYWludHMiLCJldmVudEVtaXR0ZXIiLCJFdmVudEVtaXR0ZXIiLCJfbG9nIiwic2h1dGRvd25VbmV4cGVjdGVkbHkiLCJzaG91bGRWYWxpZGF0ZUNhcHMiLCJjb21tYW5kc1F1ZXVlR3VhcmQiLCJBc3luY0xvY2siLCJzZXR0aW5ncyIsIkRldmljZVNldHRpbmdzIiwiY29uc3RydWN0b3IiLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJnZW5lcmF0ZURyaXZlckxvZ1ByZWZpeCIsInRtcERpciIsInByb2Nlc3MiLCJlbnYiLCJBUFBJVU1fVE1QX0RJUiIsIm9zIiwidG1wZGlyIiwibG9nIiwib25VbmV4cGVjdGVkU2h1dGRvd24iLCJoYW5kbGVyIiwib24iLCJkcml2ZXJEYXRhIiwiaXNDb21tYW5kc1F1ZXVlRW5hYmxlZCIsImV2ZW50SGlzdG9yeSIsImxvZ0V2ZW50IiwiZXZlbnROYW1lIiwiRXJyb3IiLCJ0cyIsIkRhdGUiLCJub3ciLCJsb2dUaW1lIiwidG9UaW1lU3RyaW5nIiwicHVzaCIsImRlYnVnIiwiZ2V0U3RhdHVzIiwiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwiY29uc3RyYWludHMiLCJPYmplY3QiLCJhc3NpZ24iLCJ2YWx1ZSIsInRvUGFpcnMiLCJwcmVzZW5jZSIsImFsbG93RW1wdHkiLCJzZXNzaW9uRXhpc3RzIiwiZHJpdmVyRm9yU2Vzc2lvbiIsImxvZ0V4dHJhQ2FwcyIsImV4dHJhQ2FwcyIsImRpZmZlcmVuY2UiLCJrZXlzIiwibGVuZ3RoIiwid2FybiIsImNhcCIsInZhbGlkYXRlRGVzaXJlZENhcHMiLCJlIiwiZXJyb3JBbmRUaHJvdyIsImVycm9ycyIsIlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IiLCJtZXNzYWdlIiwiaXNNanNvbndwUHJvdG9jb2wiLCJwcm90b2NvbCIsIlBST1RPQ09MUyIsIk1KU09OV1AiLCJpc1czQ1Byb3RvY29sIiwiVzNDIiwic2V0UHJvdG9jb2xNSlNPTldQIiwic2V0UHJvdG9jb2xXM0MiLCJpc0ZlYXR1cmVFbmFibGVkIiwibmFtZSIsImluY2x1ZGVzIiwiZW5zdXJlRmVhdHVyZUVuYWJsZWQiLCJ2YWxpZGF0ZUxvY2F0b3JTdHJhdGVneSIsInN0cmF0ZWd5Iiwid2ViQ29udGV4dCIsInZhbGlkU3RyYXRlZ2llcyIsImpvaW4iLCJjb25jYXQiLCJJbnZhbGlkU2VsZWN0b3JFcnJvciIsInByb3h5QWN0aXZlIiwiZ2V0UHJveHlBdm9pZExpc3QiLCJjYW5Qcm94eSIsInByb3h5Um91dGVJc0F2b2lkZWQiLCJtZXRob2QiLCJ1cmwiLCJib2R5IiwiYXZvaWRTY2hlbWEiLCJpc0FycmF5IiwiYXZvaWRNZXRob2QiLCJhdm9pZFBhdGhSZWdleCIsImlzUmVnRXhwIiwibm9ybWFsaXplZFVybCIsInJlcGxhY2UiLCJSZWdFeHAiLCJlc2NhcGVSZWdFeHAiLCJ0ZXN0IiwiYWRkTWFuYWdlZERyaXZlciIsImRyaXZlciIsImdldE1hbmFnZWREcml2ZXJzIiwiY2xlYXJOZXdDb21tYW5kVGltZW91dCIsImNsZWFyVGltZW91dCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFJQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQSxNQUFNO0FBQUNBLEVBQUFBLE9BQU8sRUFBRUM7QUFBVixJQUE0QkMsWUFBR0MsbUJBQUgsQ0FBdUJDLFNBQXZCLENBQWxDOztBQUVBLE1BQU1DLHNCQUFzQixHQUFHLEtBQUssSUFBcEM7QUFFQSxNQUFNQyw0QkFBNEIsR0FBRyxzQkFBckM7O0FBSUEsTUFBTUMsVUFBTixDQUFpQjtBQU1HLFNBQVhDLFdBQVcsR0FBR1AsY0FBSDtBQUtsQlEsRUFBQUEsU0FBUyxHQUFHLElBQUg7QUFLVEMsRUFBQUEsSUFBSTtBQUtKQyxFQUFBQSxXQUFXO0FBS1hDLEVBQUFBLElBQUk7QUFLSkMsRUFBQUEsWUFBWTtBQUVaQyxFQUFBQSxPQUFPLEdBQUdBLGdCQUFIO0FBVVBDLEVBQUFBLFFBQVEsR0FBR0MsNEJBQUg7QUFFUkMsRUFBQUEsc0JBQXNCLEdBQUcsS0FBSDtBQUd0QkMsRUFBQUEsYUFBYSxHQUFHLEVBQUg7QUFHYkMsRUFBQUEsWUFBWSxHQUFHLEVBQUg7QUFFWkMsRUFBQUEsbUJBQW1CLEdBQUdmLHNCQUFIO0FBRW5CZ0IsRUFBQUEsY0FBYyxHQUFHLENBQUg7QUFHZEMsRUFBQUEsaUJBQWlCLEdBQUcsRUFBSDtBQUdqQkMsRUFBQUEsb0JBQW9CLEdBQUcsRUFBSDtBQUdwQkMsRUFBQUEsY0FBYyxHQUFHLEVBQUg7QUFHZEMsRUFBQUEsY0FBYyxHQUFHLElBQUg7QUFHZEMsRUFBQUEsYUFBYSxHQUFHO0FBQUNDLElBQUFBLFFBQVEsRUFBRTtBQUFYLEdBQUg7QUFFYkMsRUFBQUEsWUFBWSxHQUFHQyxnQkFBRUMsU0FBRixDQUFZQyx5Q0FBWixDQUFIO0FB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Q0FBVyxDQUFDLEtBQUQsRUFBUSxNQUFSLEVBQWdCLFFBQWhCLENBQVgsRUFBc0NrQixXQUF0QyxDQUFMLEVBQXlEO0FBQ3ZELGNBQU0sSUFBSTVELEtBQUosQ0FBVyx3Q0FBdUM0RCxXQUFZLEdBQTlELENBQU47QUFDRDs7QUFDRCxVQUFJLENBQUMzRixnQkFBRTZGLFFBQUYsQ0FBV0QsY0FBWCxDQUFMLEVBQWlDO0FBQy9CLGNBQU0sSUFBSTdELEtBQUosQ0FBVSxtREFBVixDQUFOO0FBQ0Q7O0FBQ0QsVUFBSStELGFBQWEsR0FBR1AsR0FBRyxDQUFDUSxPQUFKLENBQ2xCLElBQUlDLE1BQUosQ0FBWSxJQUFHaEcsZ0JBQUVpRyxZQUFGLENBQWUsS0FBSy9HLFFBQXBCLENBQThCLEVBQTdDLENBRGtCLEVBRWxCLEVBRmtCLENBQXBCOztBQUlBLFVBQUl5RyxXQUFXLEtBQUtMLE1BQWhCLElBQTBCTSxjQUFjLENBQUNNLElBQWYsQ0FBb0JKLGFBQXBCLENBQTlCLEVBQWtFO0FBQ2hFLGVBQU8sSUFBUDtBQUNEO0FBQ0Y7O0FBQ0QsV0FBTyxLQUFQO0FBQ0Q7O0FBTURLLEVBQUFBLGdCQUFnQixDQUFFQyxNQUFGLEVBQVU7QUFDeEIsU0FBS3pHLGNBQUwsQ0FBb0IwQyxJQUFwQixDQUF5QitELE1BQXpCO0FBQ0Q7O0FBRURDLEVBQUFBLGlCQUFpQixHQUFJO0FBQ25CLFdBQU8sS0FBSzFHLGNBQVo7QUFDRDs7QUFFMkIsUUFBdEIyRyxzQkFBc0IsR0FBSTtBQUM5QixRQUFJLEtBQUsxRyxjQUFULEVBQXlCO0FBQ3ZCMkcsTUFBQUEsWUFBWSxDQUFDLEtBQUszRyxjQUFOLENBQVo7QUFDQSxXQUFLQSxjQUFMLEdBQXNCLElBQXRCO0FBQ0Q7QUFDRjs7QUExY2MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZXF1aXJlLWF3YWl0ICovXG5cbmltcG9ydCB7IGZzLCBsb2dnZXIsIG5vZGUgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IEFzeW5jTG9jayBmcm9tICdhc3luYy1sb2NrJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCB7IERFRkFVTFRfQkFTRV9QQVRILCBQUk9UT0NPTFMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnLi4vcHJvdG9jb2wnO1xuaW1wb3J0IHsgdmFsaWRhdGVDYXBzIH0gZnJvbSAnLi9jYXBhYmlsaXRpZXMnO1xuaW1wb3J0IHsgZGVzaXJlZENhcGFiaWxpdHlDb25zdHJhaW50cyB9IGZyb20gJy4vZGVzaXJlZC1jYXBzJztcbmltcG9ydCBEZXZpY2VTZXR0aW5ncyBmcm9tICcuL2RldmljZS1zZXR0aW5ncyc7XG5pbXBvcnQgaGVscGVycyBmcm9tICcuL2hlbHBlcnMnO1xuXG4vLyBmb3IgY29tcGF0IHdpdGggcnVubmluZyB0ZXN0cyB0cmFuc3BpbGVkIGFuZCBpbi1wbGFjZVxuY29uc3Qge3ZlcnNpb246IEJBU0VEUklWRVJfVkVSfSA9IGZzLnJlYWRQYWNrYWdlSnNvbkZyb20oX19kaXJuYW1lKTtcblxuY29uc3QgTkVXX0NPTU1BTkRfVElNRU9VVF9NUyA9IDYwICogMTAwMDtcblxuY29uc3QgT05fVU5FWFBFQ1RFRF9TSFVURE9XTl9FVkVOVCA9ICdvblVuZXhwZWN0ZWRTaHV0ZG93bic7XG4vKipcbiAqIEBpbXBsZW1lbnRzIHtDb3JlfVxuICovXG5jbGFzcyBEcml2ZXJDb3JlIHtcblxuICAvKipcbiAgICogTWFrZSB0aGUgYmFzZWRyaXZlciB2ZXJzaW9uIGF2YWlsYWJsZSBzbyBmb3IgYW55IGRyaXZlciB3aGljaCBpbmhlcml0cyBmcm9tIHRoaXMgcGFja2FnZSwgd2VcbiAgICoga25vdyB3aGljaCB2ZXJzaW9uIG9mIGJhc2Vkcml2ZXIgaXQgaW5oZXJpdGVkIGZyb21cbiAgICovXG4gIHN0YXRpYyBiYXNlVmVyc2lvbiA9IEJBU0VEUklWRVJfVkVSO1xuXG4gIC8qKlxuICAqIEB0eXBlIHtzdHJpbmc/fVxuICAqL1xuICBzZXNzaW9uSWQgPSBudWxsO1xuXG4gIC8qKlxuICAqIEB0eXBlIHtEcml2ZXJPcHRzICYgQ2FwYWJpbGl0aWVzfVxuICAqL1xuICBvcHRzO1xuXG4gIC8qKlxuICAqIEB0eXBlIHtEcml2ZXJPcHRzfVxuICAqL1xuICBpbml0aWFsT3B0cztcblxuICAvKipcbiAgKiBAdHlwZSB7Q2FwYWJpbGl0aWVzfVxuICAqL1xuICBjYXBzO1xuXG4gIC8qKlxuICAqIEB0eXBlIHtXM0NDYXBhYmlsaXRpZXN9XG4gICovXG4gIG9yaWdpbmFsQ2FwcztcblxuICBoZWxwZXJzID0gaGVscGVycztcblxuICAvKipcbiAgKiBiYXNlUGF0aCBpcyB1c2VkIGZvciBzZXZlcmFsIHB1cnBvc2VzLCBmb3IgZXhhbXBsZSBpbiBzZXR0aW5nIHVwXG4gICogcHJveHlpbmcgdG8gb3RoZXIgZHJpdmVycywgc2luY2Ugd2UgbmVlZCB0byBrbm93IHdoYXQgdGhlIGJhc2UgcGF0aFxuICAqIG9mIGFueSBpbmNvbWluZyByZXF1ZXN0IG1pZ2h0IGxvb2sgbGlrZS4gV2Ugc2V0IGl0IHRvIHRoZSBkZWZhdWx0XG4gICogaW5pdGlhbGx5IGJ1dCBpdCBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIGFueSBhY3R1YWwgcHJvZ3JhbVxuICAqIGV4ZWN1dGlvbiBieSB0aGUgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uLCB3aGljaCBpcyBuZWNlc3NhcmlseSBydW4gYXNcbiAgKiB0aGUgZW50cnlwb2ludCBmb3IgYW55IEFwcGl1bSBzZXJ2ZXJcbiAgKi9cbiAgYmFzZVBhdGggPSBERUZBVUxUX0JBU0VfUEFUSDtcblxuICByZWxheGVkU2VjdXJpdHlFbmFibGVkID0gZmFsc2U7XG5cbiAgLyoqIEB0eXBlIHtzdHJpbmdbXX0gKi9cbiAgYWxsb3dJbnNlY3VyZSA9IFtdO1xuXG4gIC8qKiBAdHlwZSB7c3RyaW5nW119ICovXG4gIGRlbnlJbnNlY3VyZSA9IFtdO1xuXG4gIG5ld0NvbW1hbmRUaW1lb3V0TXMgPSBORVdfQ09NTUFORF9USU1FT1VUX01TO1xuXG4gIGltcGxpY2l0V2FpdE1zID0gMDtcblxuICAvKiogQHR5cGUge3N0cmluZ1tdfSAqL1xuICBsb2NhdG9yU3RyYXRlZ2llcyA9IFtdO1xuXG4gIC8qKiBAdHlwZSB7c3RyaW5nW119ICovXG4gIHdlYkxvY2F0b3JTdHJhdGVnaWVzID0gW107XG5cbiAgLyoqIEB0eXBlIHtEcml2ZXJbXX0gKi9cbiAgbWFuYWdlZERyaXZlcnMgPSBbXTtcblxuICAvKiogQHR5cGUge05vZGVKUy5UaW1lb3V0P30gKi9cbiAgbm9Db21tYW5kVGltZXIgPSBudWxsO1xuXG4gIC8qKiBAdHlwZSB7RXZlbnRIaXN0b3J5fSAqL1xuICBfZXZlbnRIaXN0b3J5ID0ge2NvbW1hbmRzOiBbXX07XG5cbiAgX2NvbnN0cmFpbnRzID0gXy5jbG9uZURlZXAoZGVzaXJlZENhcGFiaWxpdHlDb25zdHJhaW50cyk7XG5cbiAgLy8gdXNlZCB0byBoYW5kbGUgZHJpdmVyIGV2ZW50c1xuICAvKiogQHR5cGUge05vZGVKUy5FdmVudEVtaXR0ZXJ9ICovXG4gIGV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgKiBAdHlwZSB7QXBwaXVtTG9nZ2VyfVxuICAqL1xuICBfbG9nO1xuXG4gIC8qKlxuICAqIEBwcm90ZWN0ZWRcbiAgKi9cbiAgc2h1dGRvd25VbmV4cGVjdGVkbHkgPSBmYWxzZTtcblxuICAvKipcbiAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgKiBAcHJvdGVjdGVkXG4gICovXG4gIHNob3VsZFZhbGlkYXRlQ2FwcztcblxuICAvKipcbiAgKiBAcHJvdGVjdGVkXG4gICovXG4gIGNvbW1hbmRzUXVldWVHdWFyZCA9IG5ldyBBc3luY0xvY2soKTtcblxuICAvKipcbiAgKiBzZXR0aW5ncyBzaG91bGQgYmUgaW5zdGFudGlhdGVkIGJ5IGRyaXZlcnMgd2hpY2ggZXh0ZW5kIEJhc2VEcml2ZXIsIGJ1dFxuICAqIHdlIHNldCBpdCB0byBhbiBlbXB0eSBEZXZpY2VTZXR0aW5ncyBpbnN0YW5jZSBoZXJlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZVxuICAqIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGFwcGxpZWQgZXZlbiBpZiBhbiBleHRlbmRpbmcgZHJpdmVyIGRvZXNuJ3QgdXRpbGl6ZVxuICAqIHRoZSBzZXR0aW5ncyBmdW5jdGlvbmFsaXR5IGl0c2VsZlxuICAqL1xuICBzZXR0aW5ncyA9IG5ldyBEZXZpY2VTZXR0aW5ncygpO1xuXG4gIGNvbnN0cnVjdG9yIChcbiAgICBvcHRzID0gLyoqIEB0eXBlIHtEcml2ZXJPcHRzfSAqLyAoe30pLFxuICAgIHNob3VsZFZhbGlkYXRlQ2FwcyA9IHRydWUsXG4gICkge1xuICAgIHRoaXMuX2xvZyA9IGxvZ2dlci5nZXRMb2dnZXIoaGVscGVycy5nZW5lcmF0ZURyaXZlckxvZ1ByZWZpeCh0aGlzKSk7XG5cbiAgICAvLyBzZXR1cCBzdGF0ZVxuICAgIHRoaXMub3B0cyA9IG9wdHM7XG5cbiAgICAvLyB1c2UgYSBjdXN0b20gdG1wIGRpciB0byBhdm9pZCBsb3NpbmcgZGF0YSBhbmQgYXBwIHdoZW4gY29tcHV0ZXIgaXNcbiAgICAvLyByZXN0YXJ0ZWRcbiAgICB0aGlzLm9wdHMudG1wRGlyID1cbiAgICAgIHRoaXMub3B0cy50bXBEaXIgfHwgcHJvY2Vzcy5lbnYuQVBQSVVNX1RNUF9ESVIgfHwgb3MudG1wZGlyKCk7XG5cbiAgICAvLyBiYXNlLWRyaXZlciBpbnRlcm5hbHNcbiAgICB0aGlzLnNob3VsZFZhbGlkYXRlQ2FwcyA9IHNob3VsZFZhbGlkYXRlQ2FwcztcblxuICAgIC8vIGtlZXBpbmcgdHJhY2sgb2YgaW5pdGlhbCBvcHRzXG4gICAgdGhpcy5pbml0aWFsT3B0cyA9IF8uY2xvbmVEZWVwKHRoaXMub3B0cyk7XG5cbiAgICB0aGlzLnNlc3Npb25JZCA9IG51bGw7XG4gIH1cblxuICBnZXQgbG9nICgpIHtcbiAgICByZXR1cm4gdGhpcy5fbG9nO1xuICB9XG5cbiAgLyoqXG4gICogU2V0IGEgY2FsbGJhY2sgaGFuZGxlciBpZiBuZWVkZWQgdG8gZXhlY3V0ZSBhIGN1c3RvbSBwaWVjZSBvZiBjb2RlXG4gICogd2hlbiB0aGUgZHJpdmVyIGlzIHNodXQgZG93biB1bmV4cGVjdGVkbHkuIE11bHRpcGxlIGNhbGxzIHRvIHRoaXMgbWV0aG9kXG4gICogd2lsbCBjYXVzZSB0aGUgaGFuZGxlciB0byBiZSBleGVjdXRlZCBtdXRpcGxlIHRpbWVzXG4gICpcbiAgKiBAcGFyYW0geyguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZH0gaGFuZGxlciBUaGUgY29kZSB0byBiZSBleGVjdXRlZCBvbiB1bmV4cGVjdGVkIHNodXRkb3duLlxuICAqIFRoZSBmdW5jdGlvbiBtYXkgYWNjZXB0IG9uZSBhcmd1bWVudCwgd2hpY2ggaXMgdGhlIGFjdHVhbCBlcnJvciBpbnN0YW5jZSwgd2hpY2hcbiAgKiBjYXVzZWQgdGhlIGRyaXZlciB0byBzaHV0IGRvd24uXG4gICovXG4gIG9uVW5leHBlY3RlZFNodXRkb3duIChoYW5kbGVyKSB7XG4gICAgdGhpcy5ldmVudEVtaXR0ZXIub24oT05fVU5FWFBFQ1RFRF9TSFVURE9XTl9FVkVOVCwgaGFuZGxlcik7XG4gIH1cblxuICAvKipcbiAgKiBUaGlzIHByb3BlcnR5IGlzIHVzZWQgYnkgQXBwaXVtRHJpdmVyIHRvIHN0b3JlIHRoZSBkYXRhIG9mIHRoZVxuICAqIHNwZWNpZmljIGRyaXZlciBzZXNzaW9ucy4gVGhpcyBkYXRhIGNhbiBiZSBsYXRlciB1c2VkIHRvIGFkanVzdFxuICAqIHByb3BlcnRpZXMgZm9yIGRyaXZlciBpbnN0YW5jZXMgcnVubmluZyBpbiBwYXJhbGxlbC5cbiAgKiBPdmVycmlkZSBpdCBpbiBpbmhlcml0ZWQgZHJpdmVyIGNsYXNzZXMgaWYgbmVjZXNzYXJ5LlxuICAqXG4gICogQHJldHVybiB7UmVjb3JkPHN0cmluZyx1bmtub3duPn0gRHJpdmVyIHByb3BlcnRpZXMgbWFwcGluZ1xuICAqL1xuICBnZXQgZHJpdmVyRGF0YSAoKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqXG4gICogVGhpcyBwcm9wZXJ0eSBjb250cm9scyB0aGUgd2F5IHsjZXhlY3V0ZUNvbW1hbmR9IG1ldGhvZFxuICAqIGhhbmRsZXMgbmV3IGRyaXZlciBjb21tYW5kcyByZWNlaXZlZCBmcm9tIHRoZSBjbGllbnQuXG4gICogT3ZlcnJpZGUgaXQgZm9yIGluaGVyaXRlZCBjbGFzc2VzIG9ubHkgaW4gc3BlY2lhbCBjYXNlcy5cbiAgKlxuICAqIEByZXR1cm4ge2Jvb2xlYW59IElmIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyB0cnVlIChkZWZhdWx0KSB0aGVuIGFsbCB0aGUgY29tbWFuZHNcbiAgKiAgIHJlY2VpdmVkIGJ5IHRoZSBwYXJ0aWN1bGFyIGRyaXZlciBpbnN0YW5jZSBhcmUgZ29pbmcgdG8gYmUgcHV0IGludG8gdGhlIHF1ZXVlLFxuICAqICAgc28gZWFjaCBmb2xsb3dpbmcgY29tbWFuZCB3aWxsIG5vdCBiZSBleGVjdXRlZCB1bnRpbCB0aGUgcHJldmlvdXMgY29tbWFuZFxuICAqICAgZXhlY3V0aW9uIGlzIGNvbXBsZXRlZC4gRmFsc2UgdmFsdWUgZGlzYWJsZXMgdGhhdCBxdWV1ZSwgc28gZWFjaCBkcml2ZXIgY29tbWFuZFxuICAqICAgaXMgZXhlY3V0ZWQgaW5kZXBlbmRlbnRseSBhbmQgZG9lcyBub3Qgd2FpdCBmb3IgYW55dGhpbmcuXG4gICovXG4gIGdldCBpc0NvbW1hbmRzUXVldWVFbmFibGVkICgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qXG4gICogbWFrZSBldmVudEhpc3RvcnkgYSBwcm9wZXJ0eSBhbmQgcmV0dXJuIGEgY2xvbmVkIG9iamVjdCBzbyBhIGNvbnN1bWVyIGNhbid0XG4gICogaW5hZHZlcnRlbnRseSBjaGFuZ2UgZGF0YSBvdXRzaWRlIG9mIGxvZ0V2ZW50XG4gICovXG4gIGdldCBldmVudEhpc3RvcnkgKCkge1xuICAgIHJldHVybiBfLmNsb25lRGVlcCh0aGlzLl9ldmVudEhpc3RvcnkpO1xuICB9XG5cbiAgLyoqXG4gICogQVBJIG1ldGhvZCBmb3IgZHJpdmVyIGRldmVsb3BlcnMgdG8gbG9nIHRpbWluZ3MgZm9yIGltcG9ydGFudCBldmVudHNcbiAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXG4gICovXG4gIGxvZ0V2ZW50IChldmVudE5hbWUpIHtcbiAgICBpZiAoZXZlbnROYW1lID09PSAnY29tbWFuZHMnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBsb2cgY29tbWFuZHMgZGlyZWN0bHknKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBldmVudE5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZXZlbnROYW1lICR7ZXZlbnROYW1lfWApO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX2V2ZW50SGlzdG9yeVtldmVudE5hbWVdKSB7XG4gICAgICB0aGlzLl9ldmVudEhpc3RvcnlbZXZlbnROYW1lXSA9IFtdO1xuICAgIH1cbiAgICBjb25zdCB0cyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgbG9nVGltZSA9IG5ldyBEYXRlKHRzKS50b1RpbWVTdHJpbmcoKTtcbiAgICB0aGlzLl9ldmVudEhpc3RvcnlbZXZlbnROYW1lXS5wdXNoKHRzKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgRXZlbnQgJyR7ZXZlbnROYW1lfScgbG9nZ2VkIGF0ICR7dHN9ICgke2xvZ1RpbWV9KWApO1xuICB9XG5cbiAgLyoqXG4gICogT3ZlcnJpZGRlbiBpbiBhcHBpdW0gZHJpdmVyLCBidXQgaGVyZSBzbyB0aGF0IGluZGl2aWR1YWwgZHJpdmVycyBjYW4gYmVcbiAgKiB0ZXN0ZWQgd2l0aCBjbGllbnRzIHRoYXQgcG9sbFxuICAqL1xuICBhc3luYyBnZXRTdGF0dXMgKCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8vIHdlIG9ubHkgd2FudCBzdWJjbGFzc2VzIHRvIGV2ZXIgZXh0ZW5kIHRoZSBjb250cmFpbnRzXG4gIHNldCBkZXNpcmVkQ2FwQ29uc3RyYWludHMgKGNvbnN0cmFpbnRzKSB7XG4gICAgdGhpcy5fY29uc3RyYWludHMgPSBPYmplY3QuYXNzaWduKHRoaXMuX2NvbnN0cmFpbnRzLCBjb25zdHJhaW50cyk7XG4gICAgLy8gJ3ByZXNlbmNlJyBtZWFucyBkaWZmZXJlbnQgdGhpbmdzIGluIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgdmFsaWRhdG9yLFxuICAgIC8vIHdoZW4gd2Ugc2F5ICd0cnVlJyB3ZSBtZWFuIHRoYXQgaXQgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGJlIGVtcHR5XG4gICAgZm9yIChjb25zdCBbLCB2YWx1ZV0gb2YgXy50b1BhaXJzKHRoaXMuX2NvbnN0cmFpbnRzKSkge1xuICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLnByZXNlbmNlID09PSB0cnVlKSB7XG4gICAgICAgIHZhbHVlLnByZXNlbmNlID0ge1xuICAgICAgICAgIGFsbG93RW1wdHk6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBkZXNpcmVkQ2FwQ29uc3RyYWludHMgKCkge1xuICAgIHJldHVybiB0aGlzLl9jb25zdHJhaW50cztcbiAgfVxuXG4gIC8qKlxuICAqIG1ldGhvZCByZXF1aXJlZCBieSBNSlNPTldQIGluIG9yZGVyIHRvIGRldGVybWluZSB3aGV0aGVyIGl0IHNob3VsZFxuICAqIHJlc3BvbmQgd2l0aCBhbiBpbnZhbGlkIHNlc3Npb24gcmVzcG9uc2VcbiAgKiBAcGFyYW0ge3N0cmluZ30gW3Nlc3Npb25JZF1cbiAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgKi9cbiAgc2Vzc2lvbkV4aXN0cyAoc2Vzc2lvbklkKSB7XG4gICAgaWYgKCFzZXNzaW9uSWQpIHJldHVybiBmYWxzZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjdXJseVxuICAgIHJldHVybiBzZXNzaW9uSWQgPT09IHRoaXMuc2Vzc2lvbklkO1xuICB9XG5cbiAgLyoqXG4gICogbWV0aG9kIHJlcXVpcmVkIGJ5IE1KU09OV1AgaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIGlmIHRoZSBjb21tYW5kIHNob3VsZFxuICAqIGJlIHByb3hpZWQgZGlyZWN0bHkgdG8gdGhlIGRyaXZlclxuICAqIEBwYXJhbSB7c3RyaW5nfSBzZXNzaW9uSWRcbiAgKiBAcmV0dXJucyB7dGhpcyB8IGltcG9ydCgnQGFwcGl1bS90eXBlcycpLkRyaXZlcn1cbiAgKi9cbiAgZHJpdmVyRm9yU2Vzc2lvbiAoc2Vzc2lvbklkKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgKlxuICAqIEBwYXJhbSB7Q2FwYWJpbGl0aWVzfSBjYXBzXG4gICovXG4gIGxvZ0V4dHJhQ2FwcyAoY2Fwcykge1xuICAgIGxldCBleHRyYUNhcHMgPSBfLmRpZmZlcmVuY2UoXy5rZXlzKGNhcHMpLCBfLmtleXModGhpcy5fY29uc3RyYWludHMpKTtcbiAgICBpZiAoZXh0cmFDYXBzLmxlbmd0aCkge1xuICAgICAgdGhpcy5sb2cud2FybihcbiAgICAgICAgYFRoZSBmb2xsb3dpbmcgY2FwYWJpbGl0aWVzIHdlcmUgcHJvdmlkZWQsIGJ1dCBhcmUgbm90IGAgK1xuICAgICAgICAgIGByZWNvZ25pemVkIGJ5IEFwcGl1bTpgLFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgY2FwIG9mIGV4dHJhQ2Fwcykge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGAgICR7Y2FwfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAqXG4gICogQHBhcmFtIHtDYXBhYmlsaXRpZXN9IGNhcHNcbiAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgKi9cbiAgdmFsaWRhdGVEZXNpcmVkQ2FwcyAoY2Fwcykge1xuICAgIGlmICghdGhpcy5zaG91bGRWYWxpZGF0ZUNhcHMpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICB2YWxpZGF0ZUNhcHMoY2FwcywgdGhpcy5fY29uc3RyYWludHMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coXG4gICAgICAgIG5ldyBlcnJvcnMuU2Vzc2lvbk5vdENyZWF0ZWRFcnJvcihcbiAgICAgICAgICBgVGhlIGRlc2lyZWRDYXBhYmlsaXRpZXMgb2JqZWN0IHdhcyBub3QgdmFsaWQgZm9yIHRoZSBgICtcbiAgICAgICAgICAgIGBmb2xsb3dpbmcgcmVhc29uKHMpOiAke2UubWVzc2FnZX1gLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmxvZ0V4dHJhQ2FwcyhjYXBzKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaXNNanNvbndwUHJvdG9jb2wgKCkge1xuICAgIHJldHVybiB0aGlzLnByb3RvY29sID09PSBQUk9UT0NPTFMuTUpTT05XUDtcbiAgfVxuXG4gIGlzVzNDUHJvdG9jb2wgKCkge1xuICAgIHJldHVybiB0aGlzLnByb3RvY29sID09PSBQUk9UT0NPTFMuVzNDO1xuICB9XG5cbiAgc2V0UHJvdG9jb2xNSlNPTldQICgpIHtcbiAgICB0aGlzLnByb3RvY29sID0gUFJPVE9DT0xTLk1KU09OV1A7XG4gIH1cblxuICBzZXRQcm90b2NvbFczQyAoKSB7XG4gICAgdGhpcy5wcm90b2NvbCA9IFBST1RPQ09MUy5XM0M7XG4gIH1cblxuICAvKipcbiAgKiBDaGVjayB3aGV0aGVyIGEgZ2l2ZW4gZmVhdHVyZSBpcyBlbmFibGVkIHZpYSBpdHMgbmFtZVxuICAqXG4gICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBuYW1lIG9mIGZlYXR1cmUvY29tbWFuZFxuICAqXG4gICogQHJldHVybnMge0Jvb2xlYW59XG4gICovXG4gIGlzRmVhdHVyZUVuYWJsZWQgKG5hbWUpIHtcbiAgICAvLyBpZiB3ZSBoYXZlIGV4cGxpY2l0bHkgZGVuaWVkIHRoaXMgZmVhdHVyZSwgcmV0dXJuIGZhbHNlIGltbWVkaWF0ZWx5XG4gICAgaWYgKHRoaXMuZGVueUluc2VjdXJlICYmIF8uaW5jbHVkZXModGhpcy5kZW55SW5zZWN1cmUsIG5hbWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gaWYgd2Ugc3BlY2lmaWNhbGx5IGhhdmUgYWxsb3dlZCB0aGUgZmVhdHVyZSwgcmV0dXJuIHRydWVcbiAgICBpZiAodGhpcy5hbGxvd0luc2VjdXJlICYmIF8uaW5jbHVkZXModGhpcy5hbGxvd0luc2VjdXJlLCBuYW1lKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gb3RoZXJ3aXNlLCBpZiB3ZSd2ZSBnbG9iYWxseSBhbGxvd2VkIGluc2VjdXJlIGZlYXR1cmVzIGFuZCBub3QgZGVuaWVkXG4gICAgLy8gdGhpcyBvbmUsIHJldHVybiB0cnVlXG4gICAgaWYgKHRoaXMucmVsYXhlZFNlY3VyaXR5RW5hYmxlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgaGF2ZW4ndCBhbGxvd2VkIGFueXRoaW5nIGluc2VjdXJlLCB0aGVuIHJlamVjdFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAqIEFzc2VydCB0aGF0IGEgZ2l2ZW4gZmVhdHVyZSBpcyBlbmFibGVkIGFuZCB0aHJvdyBhIGhlbHBmdWwgZXJyb3IgaWYgaXQnc1xuICAqIG5vdFxuICAqXG4gICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBuYW1lIG9mIGZlYXR1cmUvY29tbWFuZFxuICAqL1xuICBlbnN1cmVGZWF0dXJlRW5hYmxlZCAobmFtZSkge1xuICAgIGlmICghdGhpcy5pc0ZlYXR1cmVFbmFibGVkKG5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBQb3RlbnRpYWxseSBpbnNlY3VyZSBmZWF0dXJlICcke25hbWV9JyBoYXMgbm90IGJlZW4gYCArXG4gICAgICAgICAgYGVuYWJsZWQuIElmIHlvdSB3YW50IHRvIGVuYWJsZSB0aGlzIGZlYXR1cmUgYW5kIGFjY2VwdCBgICtcbiAgICAgICAgICBgdGhlIHNlY3VyaXR5IHJhbWlmaWNhdGlvbnMsIHBsZWFzZSBkbyBzbyBieSBmb2xsb3dpbmcgYCArXG4gICAgICAgICAgYHRoZSBkb2N1bWVudGVkIGluc3RydWN0aW9ucyBhdCBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtYCArXG4gICAgICAgICAgYC9hcHBpdW0vYmxvYi9tYXN0ZXIvZG9jcy9lbi93cml0aW5nLXJ1bm5pbmctYXBwaXVtL3NlY3VyaXR5Lm1kYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICpcbiAgKiBAcGFyYW0ge3N0cmluZ30gc3RyYXRlZ3lcbiAgKiBAcGFyYW0ge2Jvb2xlYW59IFt3ZWJDb250ZXh0XVxuICAqL1xuICB2YWxpZGF0ZUxvY2F0b3JTdHJhdGVneSAoc3RyYXRlZ3ksIHdlYkNvbnRleHQgPSBmYWxzZSkge1xuICAgIGxldCB2YWxpZFN0cmF0ZWdpZXMgPSB0aGlzLmxvY2F0b3JTdHJhdGVnaWVzO1xuICAgIHRoaXMubG9nLmRlYnVnKFxuICAgICAgYFZhbGlkIGxvY2F0b3Igc3RyYXRlZ2llcyBmb3IgdGhpcyByZXF1ZXN0OiAke3ZhbGlkU3RyYXRlZ2llcy5qb2luKFxuICAgICAgICAnLCAnLFxuICAgICAgKX1gLFxuICAgICk7XG5cbiAgICBpZiAod2ViQ29udGV4dCkge1xuICAgICAgdmFsaWRTdHJhdGVnaWVzID0gdmFsaWRTdHJhdGVnaWVzLmNvbmNhdCh0aGlzLndlYkxvY2F0b3JTdHJhdGVnaWVzKTtcbiAgICB9XG5cbiAgICBpZiAoIV8uaW5jbHVkZXModmFsaWRTdHJhdGVnaWVzLCBzdHJhdGVneSkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZFNlbGVjdG9yRXJyb3IoXG4gICAgICAgIGBMb2NhdG9yIFN0cmF0ZWd5ICcke3N0cmF0ZWd5fScgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBzZXNzaW9uYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICpcbiAgKiBAcGFyYW0ge3N0cmluZ30gW3Nlc3Npb25JZF1cbiAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgKi9cbiAgcHJveHlBY3RpdmUgKHNlc3Npb25JZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAqXG4gICogQHBhcmFtIHtzdHJpbmd9IHNlc3Npb25JZFxuICAqIEByZXR1cm5zIHtbc3RyaW5nLCBSZWdFeHBdW119XG4gICovXG4gIGdldFByb3h5QXZvaWRMaXN0IChzZXNzaW9uSWQpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvKipcbiAgKlxuICAqIEBwYXJhbSB7c3RyaW5nfSBbc2Vzc2lvbklkXVxuICAqIEByZXR1cm5zIHtib29sZWFufVxuICAqL1xuICBjYW5Qcm94eSAoc2Vzc2lvbklkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICogV2hldGhlciBhIGdpdmVuIGNvbW1hbmQgcm91dGUgKGV4cHJlc3NlZCBhcyBtZXRob2QgYW5kIHVybCkgc2hvdWxkIG5vdCBiZVxuICAqIHByb3hpZWQgYWNjb3JkaW5nIHRvIHRoaXMgZHJpdmVyXG4gICpcbiAgKiBAcGFyYW0ge3N0cmluZ30gc2Vzc2lvbklkIC0gdGhlIGN1cnJlbnQgc2Vzc2lvbklkIChpbiBjYXNlIHRoZSBkcml2ZXIgcnVuc1xuICAqIG11bHRpcGxlIHNlc3Npb24gaWRzIGFuZCByZXF1aXJlcyBpdCkuIFRoaXMgaXMgbm90IHVzZWQgaW4gdGhpcyBtZXRob2QgYnV0XG4gICogc2hvdWxkIGJlIG1hZGUgYXZhaWxhYmxlIHRvIG92ZXJyaWRkZW4gbWV0aG9kcy5cbiAgKiBAcGFyYW0ge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkhUVFBNZXRob2R9IG1ldGhvZCAtIEhUVFAgbWV0aG9kIG9mIHRoZSByb3V0ZVxuICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgLSB1cmwgb2YgdGhlIHJvdXRlXG4gICogQHBhcmFtIHthbnl9IFtib2R5XSAtIHdlYmRyaXZlciByZXF1ZXN0IGJvZHlcbiAgKlxuICAqIEByZXR1cm5zIHtib29sZWFufSAtIHdoZXRoZXIgdGhlIHJvdXRlIHNob3VsZCBiZSBhdm9pZGVkXG4gICovXG4gIHByb3h5Um91dGVJc0F2b2lkZWQgKHNlc3Npb25JZCwgbWV0aG9kLCB1cmwsIGJvZHkpIHtcbiAgICBmb3IgKGxldCBhdm9pZFNjaGVtYSBvZiB0aGlzLmdldFByb3h5QXZvaWRMaXN0KHNlc3Npb25JZCkpIHtcbiAgICAgIGlmICghXy5pc0FycmF5KGF2b2lkU2NoZW1hKSB8fCBhdm9pZFNjaGVtYS5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm94eSBhdm9pZGFuY2UgbXVzdCBiZSBhIGxpc3Qgb2YgcGFpcnMnKTtcbiAgICAgIH1cbiAgICAgIGxldCBbYXZvaWRNZXRob2QsIGF2b2lkUGF0aFJlZ2V4XSA9IGF2b2lkU2NoZW1hO1xuICAgICAgaWYgKCFfLmluY2x1ZGVzKFsnR0VUJywgJ1BPU1QnLCAnREVMRVRFJ10sIGF2b2lkTWV0aG9kKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBwcm94eSBhdm9pZGFuY2UgbWV0aG9kICcke2F2b2lkTWV0aG9kfSdgKTtcbiAgICAgIH1cbiAgICAgIGlmICghXy5pc1JlZ0V4cChhdm9pZFBhdGhSZWdleCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm94eSBhdm9pZGFuY2UgcGF0aCBtdXN0IGJlIGEgcmVndWxhciBleHByZXNzaW9uJyk7XG4gICAgICB9XG4gICAgICBsZXQgbm9ybWFsaXplZFVybCA9IHVybC5yZXBsYWNlKFxuICAgICAgICBuZXcgUmVnRXhwKGBeJHtfLmVzY2FwZVJlZ0V4cCh0aGlzLmJhc2VQYXRoKX1gKSxcbiAgICAgICAgJycsXG4gICAgICApO1xuICAgICAgaWYgKGF2b2lkTWV0aG9kID09PSBtZXRob2QgJiYgYXZvaWRQYXRoUmVnZXgudGVzdChub3JtYWxpemVkVXJsKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICpcbiAgKiBAcGFyYW0ge0RyaXZlcn0gZHJpdmVyXG4gICovXG4gIGFkZE1hbmFnZWREcml2ZXIgKGRyaXZlcikge1xuICAgIHRoaXMubWFuYWdlZERyaXZlcnMucHVzaChkcml2ZXIpO1xuICB9XG5cbiAgZ2V0TWFuYWdlZERyaXZlcnMgKCkge1xuICAgIHJldHVybiB0aGlzLm1hbmFnZWREcml2ZXJzO1xuICB9XG5cbiAgYXN5bmMgY2xlYXJOZXdDb21tYW5kVGltZW91dCAoKSB7XG4gICAgaWYgKHRoaXMubm9Db21tYW5kVGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLm5vQ29tbWFuZFRpbWVyKTtcbiAgICAgIHRoaXMubm9Db21tYW5kVGltZXIgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQge0RyaXZlckNvcmV9O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5DYXBhYmlsaXRpZXN9IENhcGFiaWxpdGllc1xuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlczQ0NhcGFiaWxpdGllc30gVzNDQ2FwYWJpbGl0aWVzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRHJpdmVyfSBEcml2ZXJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Db3JlfSBDb3JlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRHJpdmVyT3B0c30gRHJpdmVyT3B0c1xuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkV2ZW50SGlzdG9yeX0gRXZlbnRIaXN0b3J5XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQXBwaXVtTG9nZ2VyfSBBcHBpdW1Mb2dnZXJcbiAqL1xuIl19
283
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9iYXNlZHJpdmVyL2NvcmUuanMiXSwibmFtZXMiOlsidmVyc2lvbiIsIkJBU0VEUklWRVJfVkVSIiwiZnMiLCJyZWFkUGFja2FnZUpzb25Gcm9tIiwiX19kaXJuYW1lIiwiTkVXX0NPTU1BTkRfVElNRU9VVF9NUyIsIk9OX1VORVhQRUNURURfU0hVVERPV05fRVZFTlQiLCJEcml2ZXJDb3JlIiwiYmFzZVZlcnNpb24iLCJzZXNzaW9uSWQiLCJvcHRzIiwiaW5pdGlhbE9wdHMiLCJjYXBzIiwib3JpZ2luYWxDYXBzIiwiaGVscGVycyIsImJhc2VQYXRoIiwiREVGQVVMVF9CQVNFX1BBVEgiLCJyZWxheGVkU2VjdXJpdHlFbmFibGVkIiwiYWxsb3dJbnNlY3VyZSIsImRlbnlJbnNlY3VyZSIsIm5ld0NvbW1hbmRUaW1lb3V0TXMiLCJpbXBsaWNpdFdhaXRNcyIsImxvY2F0b3JTdHJhdGVnaWVzIiwid2ViTG9jYXRvclN0cmF0ZWdpZXMiLCJtYW5hZ2VkRHJpdmVycyIsIm5vQ29tbWFuZFRpbWVyIiwiX2V2ZW50SGlzdG9yeSIsImNvbW1hbmRzIiwiX2NvbnN0cmFpbnRzIiwiXyIsImNsb25lRGVlcCIsImRlc2lyZWRDYXBhYmlsaXR5Q29uc3RyYWludHMiLCJldmVudEVtaXR0ZXIiLCJFdmVudEVtaXR0ZXIiLCJfbG9nIiwic2h1dGRvd25VbmV4cGVjdGVkbHkiLCJzaG91bGRWYWxpZGF0ZUNhcHMiLCJjb21tYW5kc1F1ZXVlR3VhcmQiLCJBc3luY0xvY2siLCJzZXR0aW5ncyIsIkRldmljZVNldHRpbmdzIiwiY29uc3RydWN0b3IiLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJnZW5lcmF0ZURyaXZlckxvZ1ByZWZpeCIsInRtcERpciIsInByb2Nlc3MiLCJlbnYiLCJBUFBJVU1fVE1QX0RJUiIsIm9zIiwidG1wZGlyIiwibG9nIiwib25VbmV4cGVjdGVkU2h1dGRvd24iLCJoYW5kbGVyIiwib24iLCJkcml2ZXJEYXRhIiwiaXNDb21tYW5kc1F1ZXVlRW5hYmxlZCIsImV2ZW50SGlzdG9yeSIsImxvZ0V2ZW50IiwiZXZlbnROYW1lIiwiRXJyb3IiLCJ0cyIsIkRhdGUiLCJub3ciLCJsb2dUaW1lIiwidG9UaW1lU3RyaW5nIiwicHVzaCIsImRlYnVnIiwiZ2V0U3RhdHVzIiwiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwiY29uc3RyYWludHMiLCJPYmplY3QiLCJhc3NpZ24iLCJ2YWx1ZSIsInRvUGFpcnMiLCJwcmVzZW5jZSIsImFsbG93RW1wdHkiLCJzZXNzaW9uRXhpc3RzIiwiZHJpdmVyRm9yU2Vzc2lvbiIsImxvZ0V4dHJhQ2FwcyIsImV4dHJhQ2FwcyIsImRpZmZlcmVuY2UiLCJrZXlzIiwibGVuZ3RoIiwid2FybiIsImNhcCIsInZhbGlkYXRlRGVzaXJlZENhcHMiLCJlIiwiZXJyb3JBbmRUaHJvdyIsImVycm9ycyIsIlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IiLCJtZXNzYWdlIiwiaXNNanNvbndwUHJvdG9jb2wiLCJwcm90b2NvbCIsIlBST1RPQ09MUyIsIk1KU09OV1AiLCJpc1czQ1Byb3RvY29sIiwiVzNDIiwic2V0UHJvdG9jb2xNSlNPTldQIiwic2V0UHJvdG9jb2xXM0MiLCJpc0ZlYXR1cmVFbmFibGVkIiwibmFtZSIsImluY2x1ZGVzIiwiZW5zdXJlRmVhdHVyZUVuYWJsZWQiLCJ2YWxpZGF0ZUxvY2F0b3JTdHJhdGVneSIsInN0cmF0ZWd5Iiwid2ViQ29udGV4dCIsInZhbGlkU3RyYXRlZ2llcyIsImpvaW4iLCJjb25jYXQiLCJJbnZhbGlkU2VsZWN0b3JFcnJvciIsInByb3h5QWN0aXZlIiwiZ2V0UHJveHlBdm9pZExpc3QiLCJjYW5Qcm94eSIsInByb3h5Um91dGVJc0F2b2lkZWQiLCJtZXRob2QiLCJ1cmwiLCJib2R5IiwiYXZvaWRTY2hlbWEiLCJpc0FycmF5IiwiYXZvaWRNZXRob2QiLCJhdm9pZFBhdGhSZWdleCIsImlzUmVnRXhwIiwibm9ybWFsaXplZFVybCIsInJlcGxhY2UiLCJSZWdFeHAiLCJlc2NhcGVSZWdFeHAiLCJ0ZXN0IiwiYWRkTWFuYWdlZERyaXZlciIsImRyaXZlciIsImdldE1hbmFnZWREcml2ZXJzIiwiY2xlYXJOZXdDb21tYW5kVGltZW91dCIsImNsZWFyVGltZW91dCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFJQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQSxNQUFNO0FBQUNBLEVBQUFBLE9BQU8sRUFBRUM7QUFBVixJQUE0QkMsWUFBR0MsbUJBQUgsQ0FBdUJDLFNBQXZCLENBQWxDOztBQUVBLE1BQU1DLHNCQUFzQixHQUFHLEtBQUssSUFBcEM7QUFFQSxNQUFNQyw0QkFBNEIsR0FBRyxzQkFBckM7O0FBSUEsTUFBTUMsVUFBTixDQUFpQjtBQU1HLFNBQVhDLFdBQVcsR0FBR1AsY0FBSDtBQUtsQlEsRUFBQUEsU0FBUyxHQUFHLElBQUg7QUFLVEMsRUFBQUEsSUFBSTtBQUtKQyxFQUFBQSxXQUFXO0FBS1hDLEVBQUFBLElBQUk7QUFLSkMsRUFBQUEsWUFBWTtBQUVaQyxFQUFBQSxPQUFPLEdBQUdBLGdCQUFIO0FBVVBDLEVBQUFBLFFBQVEsR0FBR0MsNEJBQUg7QUFFUkMsRUFBQUEsc0JBQXNCLEdBQUcsS0FBSDtBQUd0QkMsRUFBQUEsYUFBYSxHQUFHLEVBQUg7QUFHYkMsRUFBQUEsWUFBWSxHQUFHLEVBQUg7QUFFWkMsRUFBQUEsbUJBQW1CLEdBQUdmLHNCQUFIO0FBRW5CZ0IsRUFBQUEsY0FBYyxHQUFHLENBQUg7QUFHZEMsRUFBQUEsaUJBQWlCLEdBQUcsRUFBSDtBQUdqQkMsRUFBQUEsb0JBQW9CLEdBQUcsRUFBSDtBQUdwQkMsRUFBQUEsY0FBYyxHQUFHLEVBQUg7QUFHZEMsRUFBQUEsY0FBYyxHQUFHLElBQUg7QUFHZEMsRUFBQUEsYUFBYSxHQUFHO0FBQUNDLElBQUFBLFFBQVEsRUFBRTtBQUFYLEdBQUg7QUFFYkMsRUFBQUEsWUFBWSxHQUFHQyxnQkFBRUMsU0FBRixDQUFZQyx5Q0FBWixDQUFIO0FB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Q0FBVyxDQUFDLEtBQUQsRUFBUSxNQUFSLEVBQWdCLFFBQWhCLENBQVgsRUFBc0NrQixXQUF0QyxDQUFMLEVBQXlEO0FBQ3ZELGNBQU0sSUFBSTVELEtBQUosQ0FBVyx3Q0FBdUM0RCxXQUFZLEdBQTlELENBQU47QUFDRDs7QUFDRCxVQUFJLENBQUMzRixnQkFBRTZGLFFBQUYsQ0FBV0QsY0FBWCxDQUFMLEVBQWlDO0FBQy9CLGNBQU0sSUFBSTdELEtBQUosQ0FBVSxtREFBVixDQUFOO0FBQ0Q7O0FBQ0QsVUFBSStELGFBQWEsR0FBR1AsR0FBRyxDQUFDUSxPQUFKLENBQ2xCLElBQUlDLE1BQUosQ0FBWSxJQUFHaEcsZ0JBQUVpRyxZQUFGLENBQWUsS0FBSy9HLFFBQXBCLENBQThCLEVBQTdDLENBRGtCLEVBRWxCLEVBRmtCLENBQXBCOztBQUlBLFVBQUl5RyxXQUFXLEtBQUtMLE1BQWhCLElBQTBCTSxjQUFjLENBQUNNLElBQWYsQ0FBb0JKLGFBQXBCLENBQTlCLEVBQWtFO0FBQ2hFLGVBQU8sSUFBUDtBQUNEO0FBQ0Y7O0FBQ0QsV0FBTyxLQUFQO0FBQ0Q7O0FBTURLLEVBQUFBLGdCQUFnQixDQUFFQyxNQUFGLEVBQVU7QUFDeEIsU0FBS3pHLGNBQUwsQ0FBb0IwQyxJQUFwQixDQUF5QitELE1BQXpCO0FBQ0Q7O0FBRURDLEVBQUFBLGlCQUFpQixHQUFJO0FBQ25CLFdBQU8sS0FBSzFHLGNBQVo7QUFDRDs7QUFFMkIsUUFBdEIyRyxzQkFBc0IsR0FBSTtBQUM5QixRQUFJLEtBQUsxRyxjQUFULEVBQXlCO0FBQ3ZCMkcsTUFBQUEsWUFBWSxDQUFDLEtBQUszRyxjQUFOLENBQVo7QUFDQSxXQUFLQSxjQUFMLEdBQXNCLElBQXRCO0FBQ0Q7QUFDRjs7QUExY2MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZXF1aXJlLWF3YWl0ICovXG5cbmltcG9ydCB7IGZzLCBsb2dnZXIsIG5vZGUgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IEFzeW5jTG9jayBmcm9tICdhc3luYy1sb2NrJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCB7IERFRkFVTFRfQkFTRV9QQVRILCBQUk9UT0NPTFMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnLi4vcHJvdG9jb2wnO1xuaW1wb3J0IHsgdmFsaWRhdGVDYXBzIH0gZnJvbSAnLi9jYXBhYmlsaXRpZXMnO1xuaW1wb3J0IHsgZGVzaXJlZENhcGFiaWxpdHlDb25zdHJhaW50cyB9IGZyb20gJy4vZGVzaXJlZC1jYXBzJztcbmltcG9ydCBEZXZpY2VTZXR0aW5ncyBmcm9tICcuL2RldmljZS1zZXR0aW5ncyc7XG5pbXBvcnQgaGVscGVycyBmcm9tICcuL2hlbHBlcnMnO1xuXG4vLyBmb3IgY29tcGF0IHdpdGggcnVubmluZyB0ZXN0cyB0cmFuc3BpbGVkIGFuZCBpbi1wbGFjZVxuY29uc3Qge3ZlcnNpb246IEJBU0VEUklWRVJfVkVSfSA9IGZzLnJlYWRQYWNrYWdlSnNvbkZyb20oX19kaXJuYW1lKTtcblxuY29uc3QgTkVXX0NPTU1BTkRfVElNRU9VVF9NUyA9IDYwICogMTAwMDtcblxuY29uc3QgT05fVU5FWFBFQ1RFRF9TSFVURE9XTl9FVkVOVCA9ICdvblVuZXhwZWN0ZWRTaHV0ZG93bic7XG4vKipcbiAqIEBpbXBsZW1lbnRzIHtDb3JlfVxuICovXG5jbGFzcyBEcml2ZXJDb3JlIHtcblxuICAvKipcbiAgICogTWFrZSB0aGUgYmFzZWRyaXZlciB2ZXJzaW9uIGF2YWlsYWJsZSBzbyBmb3IgYW55IGRyaXZlciB3aGljaCBpbmhlcml0cyBmcm9tIHRoaXMgcGFja2FnZSwgd2VcbiAgICoga25vdyB3aGljaCB2ZXJzaW9uIG9mIGJhc2Vkcml2ZXIgaXQgaW5oZXJpdGVkIGZyb21cbiAgICovXG4gIHN0YXRpYyBiYXNlVmVyc2lvbiA9IEJBU0VEUklWRVJfVkVSO1xuXG4gIC8qKlxuICAqIEB0eXBlIHtzdHJpbmc/fVxuICAqL1xuICBzZXNzaW9uSWQgPSBudWxsO1xuXG4gIC8qKlxuICAqIEB0eXBlIHtEcml2ZXJPcHRzICYgQ2FwYWJpbGl0aWVzfVxuICAqL1xuICBvcHRzO1xuXG4gIC8qKlxuICAqIEB0eXBlIHtEcml2ZXJPcHRzfVxuICAqL1xuICBpbml0aWFsT3B0cztcblxuICAvKipcbiAgKiBAdHlwZSB7Q2FwYWJpbGl0aWVzfVxuICAqL1xuICBjYXBzO1xuXG4gIC8qKlxuICAqIEB0eXBlIHtXM0NDYXBhYmlsaXRpZXN9XG4gICovXG4gIG9yaWdpbmFsQ2FwcztcblxuICBoZWxwZXJzID0gaGVscGVycztcblxuICAvKipcbiAgKiBiYXNlUGF0aCBpcyB1c2VkIGZvciBzZXZlcmFsIHB1cnBvc2VzLCBmb3IgZXhhbXBsZSBpbiBzZXR0aW5nIHVwXG4gICogcHJveHlpbmcgdG8gb3RoZXIgZHJpdmVycywgc2luY2Ugd2UgbmVlZCB0byBrbm93IHdoYXQgdGhlIGJhc2UgcGF0aFxuICAqIG9mIGFueSBpbmNvbWluZyByZXF1ZXN0IG1pZ2h0IGxvb2sgbGlrZS4gV2Ugc2V0IGl0IHRvIHRoZSBkZWZhdWx0XG4gICogaW5pdGlhbGx5IGJ1dCBpdCBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIGFueSBhY3R1YWwgcHJvZ3JhbVxuICAqIGV4ZWN1dGlvbiBieSB0aGUgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uLCB3aGljaCBpcyBuZWNlc3NhcmlseSBydW4gYXNcbiAgKiB0aGUgZW50cnlwb2ludCBmb3IgYW55IEFwcGl1bSBzZXJ2ZXJcbiAgKi9cbiAgYmFzZVBhdGggPSBERUZBVUxUX0JBU0VfUEFUSDtcblxuICByZWxheGVkU2VjdXJpdHlFbmFibGVkID0gZmFsc2U7XG5cbiAgLyoqIEB0eXBlIHtzdHJpbmdbXX0gKi9cbiAgYWxsb3dJbnNlY3VyZSA9IFtdO1xuXG4gIC8qKiBAdHlwZSB7c3RyaW5nW119ICovXG4gIGRlbnlJbnNlY3VyZSA9IFtdO1xuXG4gIG5ld0NvbW1hbmRUaW1lb3V0TXMgPSBORVdfQ09NTUFORF9USU1FT1VUX01TO1xuXG4gIGltcGxpY2l0V2FpdE1zID0gMDtcblxuICAvKiogQHR5cGUge3N0cmluZ1tdfSAqL1xuICBsb2NhdG9yU3RyYXRlZ2llcyA9IFtdO1xuXG4gIC8qKiBAdHlwZSB7c3RyaW5nW119ICovXG4gIHdlYkxvY2F0b3JTdHJhdGVnaWVzID0gW107XG5cbiAgLyoqIEB0eXBlIHtEcml2ZXJbXX0gKi9cbiAgbWFuYWdlZERyaXZlcnMgPSBbXTtcblxuICAvKiogQHR5cGUge05vZGVKUy5UaW1lb3V0P30gKi9cbiAgbm9Db21tYW5kVGltZXIgPSBudWxsO1xuXG4gIC8qKiBAdHlwZSB7RXZlbnRIaXN0b3J5fSAqL1xuICBfZXZlbnRIaXN0b3J5ID0ge2NvbW1hbmRzOiBbXX07XG5cbiAgX2NvbnN0cmFpbnRzID0gXy5jbG9uZURlZXAoZGVzaXJlZENhcGFiaWxpdHlDb25zdHJhaW50cyk7XG5cbiAgLy8gdXNlZCB0byBoYW5kbGUgZHJpdmVyIGV2ZW50c1xuICAvKiogQHR5cGUge05vZGVKUy5FdmVudEVtaXR0ZXJ9ICovXG4gIGV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgKiBAdHlwZSB7QXBwaXVtTG9nZ2VyfVxuICAqL1xuICBfbG9nO1xuXG4gIC8qKlxuICAqIEBwcm90ZWN0ZWRcbiAgKi9cbiAgc2h1dGRvd25VbmV4cGVjdGVkbHkgPSBmYWxzZTtcblxuICAvKipcbiAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgKiBAcHJvdGVjdGVkXG4gICovXG4gIHNob3VsZFZhbGlkYXRlQ2FwcztcblxuICAvKipcbiAgKiBAcHJvdGVjdGVkXG4gICovXG4gIGNvbW1hbmRzUXVldWVHdWFyZCA9IG5ldyBBc3luY0xvY2soKTtcblxuICAvKipcbiAgKiBzZXR0aW5ncyBzaG91bGQgYmUgaW5zdGFudGlhdGVkIGJ5IGRyaXZlcnMgd2hpY2ggZXh0ZW5kIEJhc2VEcml2ZXIsIGJ1dFxuICAqIHdlIHNldCBpdCB0byBhbiBlbXB0eSBEZXZpY2VTZXR0aW5ncyBpbnN0YW5jZSBoZXJlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZVxuICAqIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGFwcGxpZWQgZXZlbiBpZiBhbiBleHRlbmRpbmcgZHJpdmVyIGRvZXNuJ3QgdXRpbGl6ZVxuICAqIHRoZSBzZXR0aW5ncyBmdW5jdGlvbmFsaXR5IGl0c2VsZlxuICAqL1xuICBzZXR0aW5ncyA9IG5ldyBEZXZpY2VTZXR0aW5ncygpO1xuXG4gIGNvbnN0cnVjdG9yIChcbiAgICBvcHRzID0gLyoqIEB0eXBlIHtEcml2ZXJPcHRzfSAqLyAoe30pLFxuICAgIHNob3VsZFZhbGlkYXRlQ2FwcyA9IHRydWUsXG4gICkge1xuICAgIHRoaXMuX2xvZyA9IGxvZ2dlci5nZXRMb2dnZXIoaGVscGVycy5nZW5lcmF0ZURyaXZlckxvZ1ByZWZpeCh0aGlzKSk7XG5cbiAgICAvLyBzZXR1cCBzdGF0ZVxuICAgIHRoaXMub3B0cyA9IG9wdHM7XG5cbiAgICAvLyB1c2UgYSBjdXN0b20gdG1wIGRpciB0byBhdm9pZCBsb3NpbmcgZGF0YSBhbmQgYXBwIHdoZW4gY29tcHV0ZXIgaXNcbiAgICAvLyByZXN0YXJ0ZWRcbiAgICB0aGlzLm9wdHMudG1wRGlyID1cbiAgICAgIHRoaXMub3B0cy50bXBEaXIgfHwgcHJvY2Vzcy5lbnYuQVBQSVVNX1RNUF9ESVIgfHwgb3MudG1wZGlyKCk7XG5cbiAgICAvLyBiYXNlLWRyaXZlciBpbnRlcm5hbHNcbiAgICB0aGlzLnNob3VsZFZhbGlkYXRlQ2FwcyA9IHNob3VsZFZhbGlkYXRlQ2FwcztcblxuICAgIC8vIGtlZXBpbmcgdHJhY2sgb2YgaW5pdGlhbCBvcHRzXG4gICAgdGhpcy5pbml0aWFsT3B0cyA9IF8uY2xvbmVEZWVwKHRoaXMub3B0cyk7XG5cbiAgICB0aGlzLnNlc3Npb25JZCA9IG51bGw7XG4gIH1cblxuICBnZXQgbG9nICgpIHtcbiAgICByZXR1cm4gdGhpcy5fbG9nO1xuICB9XG5cbiAgLyoqXG4gICogU2V0IGEgY2FsbGJhY2sgaGFuZGxlciBpZiBuZWVkZWQgdG8gZXhlY3V0ZSBhIGN1c3RvbSBwaWVjZSBvZiBjb2RlXG4gICogd2hlbiB0aGUgZHJpdmVyIGlzIHNodXQgZG93biB1bmV4cGVjdGVkbHkuIE11bHRpcGxlIGNhbGxzIHRvIHRoaXMgbWV0aG9kXG4gICogd2lsbCBjYXVzZSB0aGUgaGFuZGxlciB0byBiZSBleGVjdXRlZCBtdXRpcGxlIHRpbWVzXG4gICpcbiAgKiBAcGFyYW0geyguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZH0gaGFuZGxlciBUaGUgY29kZSB0byBiZSBleGVjdXRlZCBvbiB1bmV4cGVjdGVkIHNodXRkb3duLlxuICAqIFRoZSBmdW5jdGlvbiBtYXkgYWNjZXB0IG9uZSBhcmd1bWVudCwgd2hpY2ggaXMgdGhlIGFjdHVhbCBlcnJvciBpbnN0YW5jZSwgd2hpY2hcbiAgKiBjYXVzZWQgdGhlIGRyaXZlciB0byBzaHV0IGRvd24uXG4gICovXG4gIG9uVW5leHBlY3RlZFNodXRkb3duIChoYW5kbGVyKSB7XG4gICAgdGhpcy5ldmVudEVtaXR0ZXIub24oT05fVU5FWFBFQ1RFRF9TSFVURE9XTl9FVkVOVCwgaGFuZGxlcik7XG4gIH1cblxuICAvKipcbiAgKiBUaGlzIHByb3BlcnR5IGlzIHVzZWQgYnkgQXBwaXVtRHJpdmVyIHRvIHN0b3JlIHRoZSBkYXRhIG9mIHRoZVxuICAqIHNwZWNpZmljIGRyaXZlciBzZXNzaW9ucy4gVGhpcyBkYXRhIGNhbiBiZSBsYXRlciB1c2VkIHRvIGFkanVzdFxuICAqIHByb3BlcnRpZXMgZm9yIGRyaXZlciBpbnN0YW5jZXMgcnVubmluZyBpbiBwYXJhbGxlbC5cbiAgKiBPdmVycmlkZSBpdCBpbiBpbmhlcml0ZWQgZHJpdmVyIGNsYXNzZXMgaWYgbmVjZXNzYXJ5LlxuICAqXG4gICogQHJldHVybiB7UmVjb3JkPHN0cmluZyx1bmtub3duPn0gRHJpdmVyIHByb3BlcnRpZXMgbWFwcGluZ1xuICAqL1xuICBnZXQgZHJpdmVyRGF0YSAoKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqXG4gICogVGhpcyBwcm9wZXJ0eSBjb250cm9scyB0aGUgd2F5IHsjZXhlY3V0ZUNvbW1hbmR9IG1ldGhvZFxuICAqIGhhbmRsZXMgbmV3IGRyaXZlciBjb21tYW5kcyByZWNlaXZlZCBmcm9tIHRoZSBjbGllbnQuXG4gICogT3ZlcnJpZGUgaXQgZm9yIGluaGVyaXRlZCBjbGFzc2VzIG9ubHkgaW4gc3BlY2lhbCBjYXNlcy5cbiAgKlxuICAqIEByZXR1cm4ge2Jvb2xlYW59IElmIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyB0cnVlIChkZWZhdWx0KSB0aGVuIGFsbCB0aGUgY29tbWFuZHNcbiAgKiAgIHJlY2VpdmVkIGJ5IHRoZSBwYXJ0aWN1bGFyIGRyaXZlciBpbnN0YW5jZSBhcmUgZ29pbmcgdG8gYmUgcHV0IGludG8gdGhlIHF1ZXVlLFxuICAqICAgc28gZWFjaCBmb2xsb3dpbmcgY29tbWFuZCB3aWxsIG5vdCBiZSBleGVjdXRlZCB1bnRpbCB0aGUgcHJldmlvdXMgY29tbWFuZFxuICAqICAgZXhlY3V0aW9uIGlzIGNvbXBsZXRlZC4gRmFsc2UgdmFsdWUgZGlzYWJsZXMgdGhhdCBxdWV1ZSwgc28gZWFjaCBkcml2ZXIgY29tbWFuZFxuICAqICAgaXMgZXhlY3V0ZWQgaW5kZXBlbmRlbnRseSBhbmQgZG9lcyBub3Qgd2FpdCBmb3IgYW55dGhpbmcuXG4gICovXG4gIGdldCBpc0NvbW1hbmRzUXVldWVFbmFibGVkICgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qXG4gICogbWFrZSBldmVudEhpc3RvcnkgYSBwcm9wZXJ0eSBhbmQgcmV0dXJuIGEgY2xvbmVkIG9iamVjdCBzbyBhIGNvbnN1bWVyIGNhbid0XG4gICogaW5hZHZlcnRlbnRseSBjaGFuZ2UgZGF0YSBvdXRzaWRlIG9mIGxvZ0V2ZW50XG4gICovXG4gIGdldCBldmVudEhpc3RvcnkgKCkge1xuICAgIHJldHVybiBfLmNsb25lRGVlcCh0aGlzLl9ldmVudEhpc3RvcnkpO1xuICB9XG5cbiAgLyoqXG4gICogQVBJIG1ldGhvZCBmb3IgZHJpdmVyIGRldmVsb3BlcnMgdG8gbG9nIHRpbWluZ3MgZm9yIGltcG9ydGFudCBldmVudHNcbiAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXG4gICovXG4gIGxvZ0V2ZW50IChldmVudE5hbWUpIHtcbiAgICBpZiAoZXZlbnROYW1lID09PSAnY29tbWFuZHMnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBsb2cgY29tbWFuZHMgZGlyZWN0bHknKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBldmVudE5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZXZlbnROYW1lICR7ZXZlbnROYW1lfWApO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX2V2ZW50SGlzdG9yeVtldmVudE5hbWVdKSB7XG4gICAgICB0aGlzLl9ldmVudEhpc3RvcnlbZXZlbnROYW1lXSA9IFtdO1xuICAgIH1cbiAgICBjb25zdCB0cyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgbG9nVGltZSA9IG5ldyBEYXRlKHRzKS50b1RpbWVTdHJpbmcoKTtcbiAgICB0aGlzLl9ldmVudEhpc3RvcnlbZXZlbnROYW1lXS5wdXNoKHRzKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgRXZlbnQgJyR7ZXZlbnROYW1lfScgbG9nZ2VkIGF0ICR7dHN9ICgke2xvZ1RpbWV9KWApO1xuICB9XG5cbiAgLyoqXG4gICogT3ZlcnJpZGRlbiBpbiBhcHBpdW0gZHJpdmVyLCBidXQgaGVyZSBzbyB0aGF0IGluZGl2aWR1YWwgZHJpdmVycyBjYW4gYmVcbiAgKiB0ZXN0ZWQgd2l0aCBjbGllbnRzIHRoYXQgcG9sbFxuICAqL1xuICBhc3luYyBnZXRTdGF0dXMgKCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8vIHdlIG9ubHkgd2FudCBzdWJjbGFzc2VzIHRvIGV2ZXIgZXh0ZW5kIHRoZSBjb250cmFpbnRzXG4gIHNldCBkZXNpcmVkQ2FwQ29uc3RyYWludHMgKGNvbnN0cmFpbnRzKSB7XG4gICAgdGhpcy5fY29uc3RyYWludHMgPSBPYmplY3QuYXNzaWduKHRoaXMuX2NvbnN0cmFpbnRzLCBjb25zdHJhaW50cyk7XG4gICAgLy8gJ3ByZXNlbmNlJyBtZWFucyBkaWZmZXJlbnQgdGhpbmdzIGluIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgdmFsaWRhdG9yLFxuICAgIC8vIHdoZW4gd2Ugc2F5ICd0cnVlJyB3ZSBtZWFuIHRoYXQgaXQgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGJlIGVtcHR5XG4gICAgZm9yIChjb25zdCBbLCB2YWx1ZV0gb2YgXy50b1BhaXJzKHRoaXMuX2NvbnN0cmFpbnRzKSkge1xuICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLnByZXNlbmNlID09PSB0cnVlKSB7XG4gICAgICAgIHZhbHVlLnByZXNlbmNlID0ge1xuICAgICAgICAgIGFsbG93RW1wdHk6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBkZXNpcmVkQ2FwQ29uc3RyYWludHMgKCkge1xuICAgIHJldHVybiB0aGlzLl9jb25zdHJhaW50cztcbiAgfVxuXG4gIC8qKlxuICAqIG1ldGhvZCByZXF1aXJlZCBieSBNSlNPTldQIGluIG9yZGVyIHRvIGRldGVybWluZSB3aGV0aGVyIGl0IHNob3VsZFxuICAqIHJlc3BvbmQgd2l0aCBhbiBpbnZhbGlkIHNlc3Npb24gcmVzcG9uc2VcbiAgKiBAcGFyYW0ge3N0cmluZ30gW3Nlc3Npb25JZF1cbiAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgKi9cbiAgc2Vzc2lvbkV4aXN0cyAoc2Vzc2lvbklkKSB7XG4gICAgaWYgKCFzZXNzaW9uSWQpIHJldHVybiBmYWxzZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjdXJseVxuICAgIHJldHVybiBzZXNzaW9uSWQgPT09IHRoaXMuc2Vzc2lvbklkO1xuICB9XG5cbiAgLyoqXG4gICogbWV0aG9kIHJlcXVpcmVkIGJ5IE1KU09OV1AgaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIGlmIHRoZSBjb21tYW5kIHNob3VsZFxuICAqIGJlIHByb3hpZWQgZGlyZWN0bHkgdG8gdGhlIGRyaXZlclxuICAqIEBwYXJhbSB7c3RyaW5nfSBzZXNzaW9uSWRcbiAgKiBAcmV0dXJucyB7dGhpcyB8IGltcG9ydCgnQGFwcGl1bS90eXBlcycpLkRyaXZlcn1cbiAgKi9cbiAgZHJpdmVyRm9yU2Vzc2lvbiAoc2Vzc2lvbklkKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgKlxuICAqIEBwYXJhbSB7Q2FwYWJpbGl0aWVzfSBjYXBzXG4gICovXG4gIGxvZ0V4dHJhQ2FwcyAoY2Fwcykge1xuICAgIGxldCBleHRyYUNhcHMgPSBfLmRpZmZlcmVuY2UoXy5rZXlzKGNhcHMpLCBfLmtleXModGhpcy5fY29uc3RyYWludHMpKTtcbiAgICBpZiAoZXh0cmFDYXBzLmxlbmd0aCkge1xuICAgICAgdGhpcy5sb2cud2FybihcbiAgICAgICAgYFRoZSBmb2xsb3dpbmcgY2FwYWJpbGl0aWVzIHdlcmUgcHJvdmlkZWQsIGJ1dCBhcmUgbm90IGAgK1xuICAgICAgICAgIGByZWNvZ25pemVkIGJ5IEFwcGl1bTpgLFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgY2FwIG9mIGV4dHJhQ2Fwcykge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGAgICR7Y2FwfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAqXG4gICogQHBhcmFtIHtDYXBhYmlsaXRpZXN9IGNhcHNcbiAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgKi9cbiAgdmFsaWRhdGVEZXNpcmVkQ2FwcyAoY2Fwcykge1xuICAgIGlmICghdGhpcy5zaG91bGRWYWxpZGF0ZUNhcHMpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICB2YWxpZGF0ZUNhcHMoY2FwcywgdGhpcy5fY29uc3RyYWludHMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coXG4gICAgICAgIG5ldyBlcnJvcnMuU2Vzc2lvbk5vdENyZWF0ZWRFcnJvcihcbiAgICAgICAgICBgVGhlIGRlc2lyZWRDYXBhYmlsaXRpZXMgb2JqZWN0IHdhcyBub3QgdmFsaWQgZm9yIHRoZSBgICtcbiAgICAgICAgICAgIGBmb2xsb3dpbmcgcmVhc29uKHMpOiAke2UubWVzc2FnZX1gLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmxvZ0V4dHJhQ2FwcyhjYXBzKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaXNNanNvbndwUHJvdG9jb2wgKCkge1xuICAgIHJldHVybiB0aGlzLnByb3RvY29sID09PSBQUk9UT0NPTFMuTUpTT05XUDtcbiAgfVxuXG4gIGlzVzNDUHJvdG9jb2wgKCkge1xuICAgIHJldHVybiB0aGlzLnByb3RvY29sID09PSBQUk9UT0NPTFMuVzNDO1xuICB9XG5cbiAgc2V0UHJvdG9jb2xNSlNPTldQICgpIHtcbiAgICB0aGlzLnByb3RvY29sID0gUFJPVE9DT0xTLk1KU09OV1A7XG4gIH1cblxuICBzZXRQcm90b2NvbFczQyAoKSB7XG4gICAgdGhpcy5wcm90b2NvbCA9IFBST1RPQ09MUy5XM0M7XG4gIH1cblxuICAvKipcbiAgKiBDaGVjayB3aGV0aGVyIGEgZ2l2ZW4gZmVhdHVyZSBpcyBlbmFibGVkIHZpYSBpdHMgbmFtZVxuICAqXG4gICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBuYW1lIG9mIGZlYXR1cmUvY29tbWFuZFxuICAqXG4gICogQHJldHVybnMge0Jvb2xlYW59XG4gICovXG4gIGlzRmVhdHVyZUVuYWJsZWQgKG5hbWUpIHtcbiAgICAvLyBpZiB3ZSBoYXZlIGV4cGxpY2l0bHkgZGVuaWVkIHRoaXMgZmVhdHVyZSwgcmV0dXJuIGZhbHNlIGltbWVkaWF0ZWx5XG4gICAgaWYgKHRoaXMuZGVueUluc2VjdXJlICYmIF8uaW5jbHVkZXModGhpcy5kZW55SW5zZWN1cmUsIG5hbWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gaWYgd2Ugc3BlY2lmaWNhbGx5IGhhdmUgYWxsb3dlZCB0aGUgZmVhdHVyZSwgcmV0dXJuIHRydWVcbiAgICBpZiAodGhpcy5hbGxvd0luc2VjdXJlICYmIF8uaW5jbHVkZXModGhpcy5hbGxvd0luc2VjdXJlLCBuYW1lKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gb3RoZXJ3aXNlLCBpZiB3ZSd2ZSBnbG9iYWxseSBhbGxvd2VkIGluc2VjdXJlIGZlYXR1cmVzIGFuZCBub3QgZGVuaWVkXG4gICAgLy8gdGhpcyBvbmUsIHJldHVybiB0cnVlXG4gICAgaWYgKHRoaXMucmVsYXhlZFNlY3VyaXR5RW5hYmxlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgaGF2ZW4ndCBhbGxvd2VkIGFueXRoaW5nIGluc2VjdXJlLCB0aGVuIHJlamVjdFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAqIEFzc2VydCB0aGF0IGEgZ2l2ZW4gZmVhdHVyZSBpcyBlbmFibGVkIGFuZCB0aHJvdyBhIGhlbHBmdWwgZXJyb3IgaWYgaXQnc1xuICAqIG5vdFxuICAqXG4gICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBuYW1lIG9mIGZlYXR1cmUvY29tbWFuZFxuICAqL1xuICBlbnN1cmVGZWF0dXJlRW5hYmxlZCAobmFtZSkge1xuICAgIGlmICghdGhpcy5pc0ZlYXR1cmVFbmFibGVkKG5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBQb3RlbnRpYWxseSBpbnNlY3VyZSBmZWF0dXJlICcke25hbWV9JyBoYXMgbm90IGJlZW4gYCArXG4gICAgICAgICAgYGVuYWJsZWQuIElmIHlvdSB3YW50IHRvIGVuYWJsZSB0aGlzIGZlYXR1cmUgYW5kIGFjY2VwdCBgICtcbiAgICAgICAgICBgdGhlIHNlY3VyaXR5IHJhbWlmaWNhdGlvbnMsIHBsZWFzZSBkbyBzbyBieSBmb2xsb3dpbmcgYCArXG4gICAgICAgICAgYHRoZSBkb2N1bWVudGVkIGluc3RydWN0aW9ucyBhdCBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtYCArXG4gICAgICAgICAgYC9hcHBpdW0vYmxvYi9tYXN0ZXIvZG9jcy9lbi93cml0aW5nLXJ1bm5pbmctYXBwaXVtL3NlY3VyaXR5Lm1kYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICpcbiAgKiBAcGFyYW0ge3N0cmluZ30gc3RyYXRlZ3lcbiAgKiBAcGFyYW0ge2Jvb2xlYW59IFt3ZWJDb250ZXh0XVxuICAqL1xuICB2YWxpZGF0ZUxvY2F0b3JTdHJhdGVneSAoc3RyYXRlZ3ksIHdlYkNvbnRleHQgPSBmYWxzZSkge1xuICAgIGxldCB2YWxpZFN0cmF0ZWdpZXMgPSB0aGlzLmxvY2F0b3JTdHJhdGVnaWVzO1xuICAgIHRoaXMubG9nLmRlYnVnKFxuICAgICAgYFZhbGlkIGxvY2F0b3Igc3RyYXRlZ2llcyBmb3IgdGhpcyByZXF1ZXN0OiAke3ZhbGlkU3RyYXRlZ2llcy5qb2luKFxuICAgICAgICAnLCAnLFxuICAgICAgKX1gLFxuICAgICk7XG5cbiAgICBpZiAod2ViQ29udGV4dCkge1xuICAgICAgdmFsaWRTdHJhdGVnaWVzID0gdmFsaWRTdHJhdGVnaWVzLmNvbmNhdCh0aGlzLndlYkxvY2F0b3JTdHJhdGVnaWVzKTtcbiAgICB9XG5cbiAgICBpZiAoIV8uaW5jbHVkZXModmFsaWRTdHJhdGVnaWVzLCBzdHJhdGVneSkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZFNlbGVjdG9yRXJyb3IoXG4gICAgICAgIGBMb2NhdG9yIFN0cmF0ZWd5ICcke3N0cmF0ZWd5fScgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBzZXNzaW9uYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICpcbiAgKiBAcGFyYW0ge3N0cmluZ30gW3Nlc3Npb25JZF1cbiAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgKi9cbiAgcHJveHlBY3RpdmUgKHNlc3Npb25JZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAqXG4gICogQHBhcmFtIHtzdHJpbmd9IHNlc3Npb25JZFxuICAqIEByZXR1cm5zIHtbc3RyaW5nLCBSZWdFeHBdW119XG4gICovXG4gIGdldFByb3h5QXZvaWRMaXN0IChzZXNzaW9uSWQpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvKipcbiAgKlxuICAqIEBwYXJhbSB7c3RyaW5nfSBbc2Vzc2lvbklkXVxuICAqIEByZXR1cm5zIHtib29sZWFufVxuICAqL1xuICBjYW5Qcm94eSAoc2Vzc2lvbklkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICogV2hldGhlciBhIGdpdmVuIGNvbW1hbmQgcm91dGUgKGV4cHJlc3NlZCBhcyBtZXRob2QgYW5kIHVybCkgc2hvdWxkIG5vdCBiZVxuICAqIHByb3hpZWQgYWNjb3JkaW5nIHRvIHRoaXMgZHJpdmVyXG4gICpcbiAgKiBAcGFyYW0ge3N0cmluZ30gc2Vzc2lvbklkIC0gdGhlIGN1cnJlbnQgc2Vzc2lvbklkIChpbiBjYXNlIHRoZSBkcml2ZXIgcnVuc1xuICAqIG11bHRpcGxlIHNlc3Npb24gaWRzIGFuZCByZXF1aXJlcyBpdCkuIFRoaXMgaXMgbm90IHVzZWQgaW4gdGhpcyBtZXRob2QgYnV0XG4gICogc2hvdWxkIGJlIG1hZGUgYXZhaWxhYmxlIHRvIG92ZXJyaWRkZW4gbWV0aG9kcy5cbiAgKiBAcGFyYW0ge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkhUVFBNZXRob2R9IG1ldGhvZCAtIEhUVFAgbWV0aG9kIG9mIHRoZSByb3V0ZVxuICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgLSB1cmwgb2YgdGhlIHJvdXRlXG4gICogQHBhcmFtIHthbnl9IFtib2R5XSAtIHdlYmRyaXZlciByZXF1ZXN0IGJvZHlcbiAgKlxuICAqIEByZXR1cm5zIHtib29sZWFufSAtIHdoZXRoZXIgdGhlIHJvdXRlIHNob3VsZCBiZSBhdm9pZGVkXG4gICovXG4gIHByb3h5Um91dGVJc0F2b2lkZWQgKHNlc3Npb25JZCwgbWV0aG9kLCB1cmwsIGJvZHkpIHtcbiAgICBmb3IgKGxldCBhdm9pZFNjaGVtYSBvZiB0aGlzLmdldFByb3h5QXZvaWRMaXN0KHNlc3Npb25JZCkpIHtcbiAgICAgIGlmICghXy5pc0FycmF5KGF2b2lkU2NoZW1hKSB8fCBhdm9pZFNjaGVtYS5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm94eSBhdm9pZGFuY2UgbXVzdCBiZSBhIGxpc3Qgb2YgcGFpcnMnKTtcbiAgICAgIH1cbiAgICAgIGxldCBbYXZvaWRNZXRob2QsIGF2b2lkUGF0aFJlZ2V4XSA9IGF2b2lkU2NoZW1hO1xuICAgICAgaWYgKCFfLmluY2x1ZGVzKFsnR0VUJywgJ1BPU1QnLCAnREVMRVRFJ10sIGF2b2lkTWV0aG9kKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBwcm94eSBhdm9pZGFuY2UgbWV0aG9kICcke2F2b2lkTWV0aG9kfSdgKTtcbiAgICAgIH1cbiAgICAgIGlmICghXy5pc1JlZ0V4cChhdm9pZFBhdGhSZWdleCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm94eSBhdm9pZGFuY2UgcGF0aCBtdXN0IGJlIGEgcmVndWxhciBleHByZXNzaW9uJyk7XG4gICAgICB9XG4gICAgICBsZXQgbm9ybWFsaXplZFVybCA9IHVybC5yZXBsYWNlKFxuICAgICAgICBuZXcgUmVnRXhwKGBeJHtfLmVzY2FwZVJlZ0V4cCh0aGlzLmJhc2VQYXRoKX1gKSxcbiAgICAgICAgJycsXG4gICAgICApO1xuICAgICAgaWYgKGF2b2lkTWV0aG9kID09PSBtZXRob2QgJiYgYXZvaWRQYXRoUmVnZXgudGVzdChub3JtYWxpemVkVXJsKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICpcbiAgKiBAcGFyYW0ge0RyaXZlcn0gZHJpdmVyXG4gICovXG4gIGFkZE1hbmFnZWREcml2ZXIgKGRyaXZlcikge1xuICAgIHRoaXMubWFuYWdlZERyaXZlcnMucHVzaChkcml2ZXIpO1xuICB9XG5cbiAgZ2V0TWFuYWdlZERyaXZlcnMgKCkge1xuICAgIHJldHVybiB0aGlzLm1hbmFnZWREcml2ZXJzO1xuICB9XG5cbiAgYXN5bmMgY2xlYXJOZXdDb21tYW5kVGltZW91dCAoKSB7XG4gICAgaWYgKHRoaXMubm9Db21tYW5kVGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLm5vQ29tbWFuZFRpbWVyKTtcbiAgICAgIHRoaXMubm9Db21tYW5kVGltZXIgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQge0RyaXZlckNvcmV9O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5DYXBhYmlsaXRpZXN9IENhcGFiaWxpdGllc1xuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlczQ0NhcGFiaWxpdGllc30gVzNDQ2FwYWJpbGl0aWVzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRHJpdmVyfSBEcml2ZXJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Db3JlfSBDb3JlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuU2VydmVyQXJnc30gRHJpdmVyT3B0c1xuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkV2ZW50SGlzdG9yeX0gRXZlbnRIaXN0b3J5XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQXBwaXVtTG9nZ2VyfSBBcHBpdW1Mb2dnZXJcbiAqL1xuIl19
@@ -1,3 +1,7 @@
1
+ /**
2
+ * Maximum size (in bytes) of a given driver's settings object (which is internal to {@linkcode DriverSettings}).
3
+ */
4
+ export const MAX_SETTINGS_SIZE: number;
1
5
  export default DeviceSettings;
2
6
  export type IDeviceSettings<T> = import('@appium/types').DeviceSettings<T>;
3
7
  /**
@@ -6,8 +10,7 @@ export type IDeviceSettings<T> = import('@appium/types').DeviceSettings<T>;
6
10
  */
7
11
  export class DeviceSettings<T extends Record<string, unknown>> implements IDeviceSettings<T> {
8
12
  /**
9
- * `onSettingsUpdate` is _required_ if settings will ever be updated; otherwise
10
- * an error will occur at runtime.
13
+ * Creates a _shallow copy_ of the `defaultSettings` parameter!
11
14
  * @param {T} [defaultSettings]
12
15
  * @param {import('@appium/types').SettingsUpdateListener<T>} [onSettingsUpdate]
13
16
  */
@@ -19,9 +22,9 @@ export class DeviceSettings<T extends Record<string, unknown>> implements IDevic
19
22
  protected _settings: T;
20
23
  /**
21
24
  * @protected
22
- * @type {import('@appium/types').SettingsUpdateListener<T>|undefined}
25
+ * @type {import('@appium/types').SettingsUpdateListener<T>}
23
26
  */
24
- protected _onSettingsUpdate: import('@appium/types').SettingsUpdateListener<T> | undefined;
27
+ protected _onSettingsUpdate: import('@appium/types').SettingsUpdateListener<T>;
25
28
  /**
26
29
  * calls updateSettings from implementing driver every time a setting is changed.
27
30
  * @param {T} newSettings
@@ -1 +1 @@
1
- {"version":3,"file":"device-settings.d.ts","sourceRoot":"","sources":["../../../lib/basedriver/device-settings.js"],"names":[],"mappings":";iCAmFa,OAAO,eAAe,EAAE,cAAc,CAAC,CAAC,CAAC;AA1EtD;;;GAGG;AACH,0FAFgC,CAAC;IAgB/B;;;;;OAKG;IACH,+HAGC;IArBD;;;OAGG;IACH,qBAFU,CAAC,CAED;IAEV;;;OAGG;IACH,6BAFU,OAAO,eAAe,EAAE,sBAAsB,CAAC,CAAC,CAAC,GAAC,SAAS,CAEnD;IAalB;;;OAGG;IACH,oBAFW,CAAC,iBA+BX;IAED,iBAEC;CACF"}
1
+ {"version":3,"file":"device-settings.d.ts","sourceRoot":"","sources":["../../../lib/basedriver/device-settings.js"],"names":[],"mappings":"AAOA;;GAEG;AACH,uCAAkD;;iCAoErC,OAAO,eAAe,EAAE,cAAc,CAAC,CAAC,CAAC;AAlEtD;;;GAGG;AACH,0FAFgC,CAAC;IAgB/B;;;;OAIG;IACH,+HAGC;IApBD;;;OAGG;IACH,qBAFU,CAAC,CAED;IAEV;;;OAGG;IACH,6BAFU,OAAO,eAAe,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAEzC;IAYlB;;;OAGG;IACH,oBAFW,CAAC,iBAwBX;IAED,iBAEC;CACF"}
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.default = exports.DeviceSettings = void 0;
8
+ exports.default = exports.MAX_SETTINGS_SIZE = exports.DeviceSettings = void 0;
9
9
 
10
10
  require("source-map-support/register");
11
11
 
@@ -18,6 +18,7 @@ var _support = require("@appium/support");
18
18
  var _errors = require("../protocol/errors");
19
19
 
20
20
  const MAX_SETTINGS_SIZE = 20 * 1024 * 1024;
21
+ exports.MAX_SETTINGS_SIZE = MAX_SETTINGS_SIZE;
21
22
 
22
23
  class DeviceSettings {
23
24
  _settings;
@@ -26,7 +27,7 @@ class DeviceSettings {
26
27
  constructor(defaultSettings, onSettingsUpdate) {
27
28
  this._settings = { ...(defaultSettings !== null && defaultSettings !== void 0 ? defaultSettings : {})
28
29
  };
29
- this._onSettingsUpdate = onSettingsUpdate;
30
+ this._onSettingsUpdate = onSettingsUpdate !== null && onSettingsUpdate !== void 0 ? onSettingsUpdate : async () => {};
30
31
  }
31
32
 
32
33
  async update(newSettings) {
@@ -40,12 +41,6 @@ class DeviceSettings {
40
41
  throw new _errors.errors.InvalidArgumentError(`New settings cannot be applied, because the overall ` + `object size exceeds the allowed limit of ${_support.util.toReadableSizeString(MAX_SETTINGS_SIZE)}`);
41
42
  }
42
43
 
43
- if (!_lodash.default.isFunction(this._onSettingsUpdate)) {
44
- _logger.default.errorAndThrow(`Unable to update settings; ` + `onSettingsUpdate method not found on '${this.constructor.name}'`);
45
-
46
- return;
47
- }
48
-
49
44
  const props = _lodash.default.keys(newSettings);
50
45
 
51
46
  for (const prop of props) {
@@ -71,4 +66,4 @@ class DeviceSettings {
71
66
  exports.DeviceSettings = DeviceSettings;
72
67
  var _default = DeviceSettings;
73
68
  exports.default = _default;
74
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9iYXNlZHJpdmVyL2RldmljZS1zZXR0aW5ncy5qcyJdLCJuYW1lcyI6WyJNQVhfU0VUVElOR1NfU0laRSIsIkRldmljZVNldHRpbmdzIiwiX3NldHRpbmdzIiwiX29uU2V0dGluZ3NVcGRhdGUiLCJjb25zdHJ1Y3RvciIsImRlZmF1bHRTZXR0aW5ncyIsIm9uU2V0dGluZ3NVcGRhdGUiLCJ1cGRhdGUiLCJuZXdTZXR0aW5ncyIsIl8iLCJpc1BsYWluT2JqZWN0IiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJKU09OIiwic3RyaW5naWZ5Iiwibm9kZSIsImdldE9iamVjdFNpemUiLCJ1dGlsIiwidG9SZWFkYWJsZVNpemVTdHJpbmciLCJpc0Z1bmN0aW9uIiwibG9nIiwiZXJyb3JBbmRUaHJvdyIsIm5hbWUiLCJwcm9wcyIsImtleXMiLCJwcm9wIiwiaXNVbmRlZmluZWQiLCJkZWJ1ZyIsImdldFNldHRpbmdzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLGlCQUFpQixHQUFHLEtBQUssSUFBTCxHQUFZLElBQXRDOztBQU1BLE1BQU1DLGNBQU4sQ0FBcUI7QUFNbkJDLEVBQUFBLFNBQVM7QUFNVEMsRUFBQUEsaUJBQWlCOztBQVFqQkMsRUFBQUEsV0FBVyxDQUFFQyxlQUFGLEVBQW1CQyxnQkFBbkIsRUFBcUM7QUFDOUMsU0FBS0osU0FBTCxHQUFrQyxFQUFDLElBQUlHLGVBQUosYUFBSUEsZUFBSixjQUFJQSxlQUFKLEdBQXVCLEVBQXZCO0FBQUQsS0FBbEM7QUFDQSxTQUFLRixpQkFBTCxHQUF5QkcsZ0JBQXpCO0FBQ0Q7O0FBTVcsUUFBTkMsTUFBTSxDQUFFQyxXQUFGLEVBQWU7QUFDekIsUUFBSSxDQUFDQyxnQkFBRUMsYUFBRixDQUFnQkYsV0FBaEIsQ0FBTCxFQUFtQztBQUNqQyxZQUFNLElBQUlHLGVBQU9DLG9CQUFYLENBQWlDLHdEQUFELEdBQ25DLEdBQUVDLElBQUksQ0FBQ0MsU0FBTCxDQUFlTixXQUFmLENBQTRCLFVBRDNCLENBQU47QUFFRDs7QUFFRCxRQUFJTyxjQUFLQyxhQUFMLENBQW1CLEVBQUMsR0FBRyxLQUFLZCxTQUFUO0FBQW9CLFNBQUdNO0FBQXZCLEtBQW5CLEtBQTJEUixpQkFBL0QsRUFBa0Y7QUFDaEYsWUFBTSxJQUFJVyxlQUFPQyxvQkFBWCxDQUFpQyxzREFBRCxHQUNuQyw0Q0FBMkNLLGNBQUtDLG9CQUFMLENBQTBCbEIsaUJBQTFCLENBQTZDLEVBRHJGLENBQU47QUFFRDs7QUFFRCxRQUFJLENBQUNTLGdCQUFFVSxVQUFGLENBQWEsS0FBS2hCLGlCQUFsQixDQUFMLEVBQTJDO0FBQ3pDaUIsc0JBQUlDLGFBQUosQ0FBbUIsNkJBQUQsR0FDakIseUNBQXdDLEtBQUtqQixXQUFMLENBQWlCa0IsSUFBSyxHQUQvRDs7QUFFQTtBQUNEOztBQUVELFVBQU1DLEtBQUssR0FBdUNkLGdCQUFFZSxJQUFGLENBQU9oQixXQUFQLENBQWxEOztBQUNBLFNBQUssTUFBTWlCLElBQVgsSUFBbUJGLEtBQW5CLEVBQTBCO0FBQ3hCLFVBQUksQ0FBQ2QsZ0JBQUVpQixXQUFGLENBQWMsS0FBS3hCLFNBQUwsQ0FBZXVCLElBQWYsQ0FBZCxDQUFMLEVBQTBDO0FBQ3hDLFlBQUksS0FBS3ZCLFNBQUwsQ0FBZXVCLElBQWYsTUFBeUJqQixXQUFXLENBQUNpQixJQUFELENBQXhDLEVBQWdEO0FBQzlDTCwwQkFBSU8sS0FBSixDQUFXLGlCQUFnQkYsSUFBSyxzREFBaEM7O0FBQ0E7QUFDRDtBQUNGOztBQUVELFlBQU0sS0FBS3RCLGlCQUFMLENBQXVCc0IsSUFBdkIsRUFBNkJqQixXQUFXLENBQUNpQixJQUFELENBQXhDLEVBQWdELEtBQUt2QixTQUFMLENBQWV1QixJQUFmLENBQWhELENBQU47QUFDQSxXQUFLdkIsU0FBTCxDQUFldUIsSUFBZixJQUF1QmpCLFdBQVcsQ0FBQ2lCLElBQUQsQ0FBbEM7QUFDRDtBQUNGOztBQUVERyxFQUFBQSxXQUFXLEdBQUk7QUFDYixXQUFPLEtBQUsxQixTQUFaO0FBQ0Q7O0FBOURrQjs7O2VBaUVORCxjIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IG5vZGUsIHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnLi4vcHJvdG9jb2wvZXJyb3JzJztcblxuY29uc3QgTUFYX1NFVFRJTkdTX1NJWkUgPSAyMCAqIDEwMjQgKiAxMDI0OyAvLyAyMCBNQlxuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7UmVjb3JkPHN0cmluZyx1bmtub3duPn0gVFxuICogQGltcGxlbWVudHMge0lEZXZpY2VTZXR0aW5nczxUPn1cbiAqL1xuY2xhc3MgRGV2aWNlU2V0dGluZ3Mge1xuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEB0eXBlIHtUfVxuICAgKi9cbiAgX3NldHRpbmdzO1xuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEB0eXBlIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5TZXR0aW5nc1VwZGF0ZUxpc3RlbmVyPFQ+fHVuZGVmaW5lZH1cbiAgICovXG4gIF9vblNldHRpbmdzVXBkYXRlO1xuXG4gIC8qKlxuICAgKiBgb25TZXR0aW5nc1VwZGF0ZWAgaXMgX3JlcXVpcmVkXyBpZiBzZXR0aW5ncyB3aWxsIGV2ZXIgYmUgdXBkYXRlZDsgb3RoZXJ3aXNlXG4gICAqIGFuIGVycm9yIHdpbGwgb2NjdXIgYXQgcnVudGltZS5cbiAgICogQHBhcmFtIHtUfSBbZGVmYXVsdFNldHRpbmdzXVxuICAgKiBAcGFyYW0ge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlNldHRpbmdzVXBkYXRlTGlzdGVuZXI8VD59IFtvblNldHRpbmdzVXBkYXRlXVxuICAgKi9cbiAgY29uc3RydWN0b3IgKGRlZmF1bHRTZXR0aW5ncywgb25TZXR0aW5nc1VwZGF0ZSkge1xuICAgIHRoaXMuX3NldHRpbmdzID0gLyoqIEB0eXBlIHtUfSAqLyh7Li4uKGRlZmF1bHRTZXR0aW5ncyA/PyB7fSl9KTtcbiAgICB0aGlzLl9vblNldHRpbmdzVXBkYXRlID0gb25TZXR0aW5nc1VwZGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjYWxscyB1cGRhdGVTZXR0aW5ncyBmcm9tIGltcGxlbWVudGluZyBkcml2ZXIgZXZlcnkgdGltZSBhIHNldHRpbmcgaXMgY2hhbmdlZC5cbiAgICogQHBhcmFtIHtUfSBuZXdTZXR0aW5nc1xuICAgKi9cbiAgYXN5bmMgdXBkYXRlIChuZXdTZXR0aW5ncykge1xuICAgIGlmICghXy5pc1BsYWluT2JqZWN0KG5ld1NldHRpbmdzKSkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgU2V0dGluZ3MgdXBkYXRlIHNob3VsZCBiZSBjYWxsZWQgd2l0aCB2YWxpZCBKU09OLiBHb3QgYCArXG4gICAgICAgIGAke0pTT04uc3RyaW5naWZ5KG5ld1NldHRpbmdzKX0gaW5zdGVhZGApO1xuICAgIH1cblxuICAgIGlmIChub2RlLmdldE9iamVjdFNpemUoey4uLnRoaXMuX3NldHRpbmdzLCAuLi5uZXdTZXR0aW5nc30pID49IE1BWF9TRVRUSU5HU19TSVpFKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBOZXcgc2V0dGluZ3MgY2Fubm90IGJlIGFwcGxpZWQsIGJlY2F1c2UgdGhlIG92ZXJhbGwgYCArXG4gICAgICAgIGBvYmplY3Qgc2l6ZSBleGNlZWRzIHRoZSBhbGxvd2VkIGxpbWl0IG9mICR7dXRpbC50b1JlYWRhYmxlU2l6ZVN0cmluZyhNQVhfU0VUVElOR1NfU0laRSl9YCk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzRnVuY3Rpb24odGhpcy5fb25TZXR0aW5nc1VwZGF0ZSkpIHtcbiAgICAgIGxvZy5lcnJvckFuZFRocm93KGBVbmFibGUgdG8gdXBkYXRlIHNldHRpbmdzOyBgICtcbiAgICAgIGBvblNldHRpbmdzVXBkYXRlIG1ldGhvZCBub3QgZm91bmQgb24gJyR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSdgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9wcyA9IC8qKiBAdHlwZSB7KGtleW9mIFQgJiBzdHJpbmcpW119ICovKF8ua2V5cyhuZXdTZXR0aW5ncykpO1xuICAgIGZvciAoY29uc3QgcHJvcCBvZiBwcm9wcykge1xuICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHRoaXMuX3NldHRpbmdzW3Byb3BdKSkge1xuICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3NbcHJvcF0gPT09IG5ld1NldHRpbmdzW3Byb3BdKSB7XG4gICAgICAgICAgbG9nLmRlYnVnKGBUaGUgdmFsdWUgb2YgJyR7cHJvcH0nIHNldHRpbmcgZGlkIG5vdCBjaGFuZ2UuIFNraXBwaW5nIHRoZSB1cGRhdGUgZm9yIGl0YCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIHVwZGF0ZSBzZXR0aW5nIG9ubHkgd2hlbiB0aGVyZSBpcyB1cGRhdGVTZXR0aW5ncyBkZWZpbmVkLlxuICAgICAgYXdhaXQgdGhpcy5fb25TZXR0aW5nc1VwZGF0ZShwcm9wLCBuZXdTZXR0aW5nc1twcm9wXSwgdGhpcy5fc2V0dGluZ3NbcHJvcF0pO1xuICAgICAgdGhpcy5fc2V0dGluZ3NbcHJvcF0gPSBuZXdTZXR0aW5nc1twcm9wXTtcbiAgICB9XG4gIH1cblxuICBnZXRTZXR0aW5ncyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NldHRpbmdzO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERldmljZVNldHRpbmdzO1xuZXhwb3J0IHsgRGV2aWNlU2V0dGluZ3MgfTtcblxuLyoqXG4gKiBAdGVtcGxhdGUgVFxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkRldmljZVNldHRpbmdzPFQ+fSBJRGV2aWNlU2V0dGluZ3NcbiAqL1xuIl19
69
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9iYXNlZHJpdmVyL2RldmljZS1zZXR0aW5ncy5qcyJdLCJuYW1lcyI6WyJNQVhfU0VUVElOR1NfU0laRSIsIkRldmljZVNldHRpbmdzIiwiX3NldHRpbmdzIiwiX29uU2V0dGluZ3NVcGRhdGUiLCJjb25zdHJ1Y3RvciIsImRlZmF1bHRTZXR0aW5ncyIsIm9uU2V0dGluZ3NVcGRhdGUiLCJ1cGRhdGUiLCJuZXdTZXR0aW5ncyIsIl8iLCJpc1BsYWluT2JqZWN0IiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJKU09OIiwic3RyaW5naWZ5Iiwibm9kZSIsImdldE9iamVjdFNpemUiLCJ1dGlsIiwidG9SZWFkYWJsZVNpemVTdHJpbmciLCJwcm9wcyIsImtleXMiLCJwcm9wIiwiaXNVbmRlZmluZWQiLCJsb2ciLCJkZWJ1ZyIsImdldFNldHRpbmdzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUtPLE1BQU1BLGlCQUFpQixHQUFHLEtBQUssSUFBTCxHQUFZLElBQXRDOzs7QUFNUCxNQUFNQyxjQUFOLENBQXFCO0FBTW5CQyxFQUFBQSxTQUFTO0FBTVRDLEVBQUFBLGlCQUFpQjs7QUFPakJDLEVBQUFBLFdBQVcsQ0FBRUMsZUFBRixFQUFtQkMsZ0JBQW5CLEVBQXFDO0FBQzlDLFNBQUtKLFNBQUwsR0FBa0MsRUFBQyxJQUFJRyxlQUFKLGFBQUlBLGVBQUosY0FBSUEsZUFBSixHQUF1QixFQUF2QjtBQUFELEtBQWxDO0FBQ0EsU0FBS0YsaUJBQUwsR0FBeUJHLGdCQUF6QixhQUF5QkEsZ0JBQXpCLGNBQXlCQSxnQkFBekIsR0FBOEMsWUFBWSxDQUFFLENBQTVEO0FBQ0Q7O0FBTVcsUUFBTkMsTUFBTSxDQUFFQyxXQUFGLEVBQWU7QUFDekIsUUFBSSxDQUFDQyxnQkFBRUMsYUFBRixDQUFnQkYsV0FBaEIsQ0FBTCxFQUFtQztBQUNqQyxZQUFNLElBQUlHLGVBQU9DLG9CQUFYLENBQWlDLHdEQUFELEdBQ25DLEdBQUVDLElBQUksQ0FBQ0MsU0FBTCxDQUFlTixXQUFmLENBQTRCLFVBRDNCLENBQU47QUFFRDs7QUFFRCxRQUFJTyxjQUFLQyxhQUFMLENBQW1CLEVBQUMsR0FBRyxLQUFLZCxTQUFUO0FBQW9CLFNBQUdNO0FBQXZCLEtBQW5CLEtBQTJEUixpQkFBL0QsRUFBa0Y7QUFDaEYsWUFBTSxJQUFJVyxlQUFPQyxvQkFBWCxDQUFpQyxzREFBRCxHQUNuQyw0Q0FBMkNLLGNBQUtDLG9CQUFMLENBQTBCbEIsaUJBQTFCLENBQTZDLEVBRHJGLENBQU47QUFFRDs7QUFFRCxVQUFNbUIsS0FBSyxHQUF1Q1YsZ0JBQUVXLElBQUYsQ0FBT1osV0FBUCxDQUFsRDs7QUFDQSxTQUFLLE1BQU1hLElBQVgsSUFBbUJGLEtBQW5CLEVBQTBCO0FBQ3hCLFVBQUksQ0FBQ1YsZ0JBQUVhLFdBQUYsQ0FBYyxLQUFLcEIsU0FBTCxDQUFlbUIsSUFBZixDQUFkLENBQUwsRUFBMEM7QUFDeEMsWUFBSSxLQUFLbkIsU0FBTCxDQUFlbUIsSUFBZixNQUF5QmIsV0FBVyxDQUFDYSxJQUFELENBQXhDLEVBQWdEO0FBQzlDRSwwQkFBSUMsS0FBSixDQUFXLGlCQUFnQkgsSUFBSyxzREFBaEM7O0FBQ0E7QUFDRDtBQUNGOztBQUNELFlBQU0sS0FBS2xCLGlCQUFMLENBQXVCa0IsSUFBdkIsRUFBNkJiLFdBQVcsQ0FBQ2EsSUFBRCxDQUF4QyxFQUFnRCxLQUFLbkIsU0FBTCxDQUFlbUIsSUFBZixDQUFoRCxDQUFOO0FBQ0EsV0FBS25CLFNBQUwsQ0FBZW1CLElBQWYsSUFBdUJiLFdBQVcsQ0FBQ2EsSUFBRCxDQUFsQztBQUNEO0FBQ0Y7O0FBRURJLEVBQUFBLFdBQVcsR0FBSTtBQUNiLFdBQU8sS0FBS3ZCLFNBQVo7QUFDRDs7QUF0RGtCOzs7ZUF5RE5ELGMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgbm9kZSwgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICcuLi9wcm90b2NvbC9lcnJvcnMnO1xuXG4vKipcbiAqIE1heGltdW0gc2l6ZSAoaW4gYnl0ZXMpIG9mIGEgZ2l2ZW4gZHJpdmVyJ3Mgc2V0dGluZ3Mgb2JqZWN0ICh3aGljaCBpcyBpbnRlcm5hbCB0byB7QGxpbmtjb2RlIERyaXZlclNldHRpbmdzfSkuXG4gKi9cbmV4cG9ydCBjb25zdCBNQVhfU0VUVElOR1NfU0laRSA9IDIwICogMTAyNCAqIDEwMjQ7IC8vIDIwIE1CXG5cbi8qKlxuICogQHRlbXBsYXRlIHtSZWNvcmQ8c3RyaW5nLHVua25vd24+fSBUXG4gKiBAaW1wbGVtZW50cyB7SURldmljZVNldHRpbmdzPFQ+fVxuICovXG5jbGFzcyBEZXZpY2VTZXR0aW5ncyB7XG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQHR5cGUge1R9XG4gICAqL1xuICBfc2V0dGluZ3M7XG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQHR5cGUge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlNldHRpbmdzVXBkYXRlTGlzdGVuZXI8VD59XG4gICAqL1xuICBfb25TZXR0aW5nc1VwZGF0ZTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIF9zaGFsbG93IGNvcHlfIG9mIHRoZSBgZGVmYXVsdFNldHRpbmdzYCBwYXJhbWV0ZXIhXG4gICAqIEBwYXJhbSB7VH0gW2RlZmF1bHRTZXR0aW5nc11cbiAgICogQHBhcmFtIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5TZXR0aW5nc1VwZGF0ZUxpc3RlbmVyPFQ+fSBbb25TZXR0aW5nc1VwZGF0ZV1cbiAgICovXG4gIGNvbnN0cnVjdG9yIChkZWZhdWx0U2V0dGluZ3MsIG9uU2V0dGluZ3NVcGRhdGUpIHtcbiAgICB0aGlzLl9zZXR0aW5ncyA9IC8qKiBAdHlwZSB7VH0gKi8oey4uLihkZWZhdWx0U2V0dGluZ3MgPz8ge30pfSk7XG4gICAgdGhpcy5fb25TZXR0aW5nc1VwZGF0ZSA9IG9uU2V0dGluZ3NVcGRhdGUgPz8gKGFzeW5jICgpID0+IHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjYWxscyB1cGRhdGVTZXR0aW5ncyBmcm9tIGltcGxlbWVudGluZyBkcml2ZXIgZXZlcnkgdGltZSBhIHNldHRpbmcgaXMgY2hhbmdlZC5cbiAgICogQHBhcmFtIHtUfSBuZXdTZXR0aW5nc1xuICAgKi9cbiAgYXN5bmMgdXBkYXRlIChuZXdTZXR0aW5ncykge1xuICAgIGlmICghXy5pc1BsYWluT2JqZWN0KG5ld1NldHRpbmdzKSkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgU2V0dGluZ3MgdXBkYXRlIHNob3VsZCBiZSBjYWxsZWQgd2l0aCB2YWxpZCBKU09OLiBHb3QgYCArXG4gICAgICAgIGAke0pTT04uc3RyaW5naWZ5KG5ld1NldHRpbmdzKX0gaW5zdGVhZGApO1xuICAgIH1cblxuICAgIGlmIChub2RlLmdldE9iamVjdFNpemUoey4uLnRoaXMuX3NldHRpbmdzLCAuLi5uZXdTZXR0aW5nc30pID49IE1BWF9TRVRUSU5HU19TSVpFKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBOZXcgc2V0dGluZ3MgY2Fubm90IGJlIGFwcGxpZWQsIGJlY2F1c2UgdGhlIG92ZXJhbGwgYCArXG4gICAgICAgIGBvYmplY3Qgc2l6ZSBleGNlZWRzIHRoZSBhbGxvd2VkIGxpbWl0IG9mICR7dXRpbC50b1JlYWRhYmxlU2l6ZVN0cmluZyhNQVhfU0VUVElOR1NfU0laRSl9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvcHMgPSAvKiogQHR5cGUgeyhrZXlvZiBUICYgc3RyaW5nKVtdfSAqLyhfLmtleXMobmV3U2V0dGluZ3MpKTtcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcHMpIHtcbiAgICAgIGlmICghXy5pc1VuZGVmaW5lZCh0aGlzLl9zZXR0aW5nc1twcm9wXSkpIHtcbiAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzW3Byb3BdID09PSBuZXdTZXR0aW5nc1twcm9wXSkge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhgVGhlIHZhbHVlIG9mICcke3Byb3B9JyBzZXR0aW5nIGRpZCBub3QgY2hhbmdlLiBTa2lwcGluZyB0aGUgdXBkYXRlIGZvciBpdGApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLl9vblNldHRpbmdzVXBkYXRlKHByb3AsIG5ld1NldHRpbmdzW3Byb3BdLCB0aGlzLl9zZXR0aW5nc1twcm9wXSk7XG4gICAgICB0aGlzLl9zZXR0aW5nc1twcm9wXSA9IG5ld1NldHRpbmdzW3Byb3BdO1xuICAgIH1cbiAgfVxuXG4gIGdldFNldHRpbmdzICgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2V0dGluZ3M7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGV2aWNlU2V0dGluZ3M7XG5leHBvcnQgeyBEZXZpY2VTZXR0aW5ncyB9O1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRGV2aWNlU2V0dGluZ3M8VD59IElEZXZpY2VTZXR0aW5nc1xuICovXG4iXX0=
@@ -247,7 +247,7 @@ async function configureApp(app, options = {}) {
247
247
 
248
248
  _logger.default.info(`The application at '${cachedPath}' does not exist anymore ` + `or its integrity has been damaged. Deleting it from the internal cache`);
249
249
 
250
- APPLICATIONS_CACHE.del(app);
250
+ APPLICATIONS_CACHE.delete(app);
251
251
  }
252
252
 
253
253
  let fileName = null;
@@ -348,7 +348,7 @@ async function configureApp(app, options = {}) {
348
348
 
349
349
  _logger.default.info(`The application at '${fullPath}' does not exist anymore ` + `or its integrity has been damaged. Deleting it from the cache`);
350
350
 
351
- APPLICATIONS_CACHE.del(app);
351
+ APPLICATIONS_CACHE.delete(app);
352
352
  }
353
353
 
354
354
  const tmpRoot = await _support.tempDir.openDir();
@@ -545,4 +545,4 @@ var _default = {
545
545
  generateDriverLogPrefix
546
546
  };
547
547
  exports.default = _default;
548
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9iYXNlZHJpdmVyL2hlbHBlcnMuanMiXSwibmFtZXMiOlsiSVBBX0VYVCIsIlpJUF9FWFRTIiwiWklQX01JTUVfVFlQRVMiLCJDQUNIRURfQVBQU19NQVhfQUdFIiwiTUFYX0NBQ0hFRF9BUFBTIiwiQVBQTElDQVRJT05TX0NBQ0hFIiwiTFJVIiwibWF4IiwidHRsIiwidXBkYXRlQWdlT25HZXQiLCJkaXNwb3NlIiwiYXBwIiwiZnVsbFBhdGgiLCJsb2dnZXIiLCJpbmZvIiwiZnMiLCJyaW1yYWYiLCJub0Rpc3Bvc2VPblNldCIsIkFQUExJQ0FUSU9OU19DQUNIRV9HVUFSRCIsIkFzeW5jTG9jayIsIlNBTklUSVpFX1JFUExBQ0VNRU5UIiwiREVGQVVMVF9CQVNFTkFNRSIsIkFQUF9ET1dOTE9BRF9USU1FT1VUX01TIiwicHJvY2VzcyIsIm9uIiwic2l6ZSIsImFwcFBhdGhzIiwidmFsdWVzIiwibWFwIiwiZGVidWciLCJsZW5ndGgiLCJ1dGlsIiwicGx1cmFsaXplIiwiYXBwUGF0aCIsInJpbXJhZlN5bmMiLCJlIiwid2FybiIsIm1lc3NhZ2UiLCJyZXRyaWV2ZUhlYWRlcnMiLCJsaW5rIiwidXJsIiwibWV0aG9kIiwidGltZW91dCIsImhlYWRlcnMiLCJnZXRDYWNoZWRBcHBsaWNhdGlvblBhdGgiLCJjdXJyZW50QXBwUHJvcHMiLCJjYWNoZWRBcHBJbmZvIiwicmVmcmVzaCIsIl8iLCJpc1BsYWluT2JqZWN0IiwibGFzdE1vZGlmaWVkIiwiY3VycmVudE1vZGlmaWVkIiwiaW1tdXRhYmxlIiwiY3VycmVudEltbXV0YWJsZSIsIm1heEFnZSIsImN1cnJlbnRNYXhBZ2UiLCJ0aW1lc3RhbXAiLCJnZXRUaW1lIiwibXNMZWZ0IiwiRGF0ZSIsIm5vdyIsInBhdGgiLCJiYXNlbmFtZSIsInZlcmlmeUFwcEV4dGVuc2lvbiIsInN1cHBvcnRlZEFwcEV4dGVuc2lvbnMiLCJ0b0xvd2VyIiwiaW5jbHVkZXMiLCJleHRuYW1lIiwiRXJyb3IiLCJjYWxjdWxhdGVGb2xkZXJJbnRlZ3JpdHkiLCJmb2xkZXJQYXRoIiwiZ2xvYiIsImN3ZCIsInN0cmljdCIsIm5vc29ydCIsImNhbGN1bGF0ZUZpbGVJbnRlZ3JpdHkiLCJmaWxlUGF0aCIsImhhc2giLCJpc0FwcEludGVncml0eU9rIiwiY3VycmVudFBhdGgiLCJleHBlY3RlZEludGVncml0eSIsImV4aXN0cyIsInN0YXQiLCJpc0RpcmVjdG9yeSIsImZvbGRlciIsImZpbGUiLCJjb25maWd1cmVBcHAiLCJvcHRpb25zIiwiaXNTdHJpbmciLCJvblBvc3RQcm9jZXNzIiwiaXNBcnJheSIsInN1cHBvcnRlZEV4dGVuc2lvbnMiLCJpc0VtcHR5IiwibmV3QXBwIiwic2hvdWxkVW56aXBBcHAiLCJwYWNrYWdlSGFzaCIsInJlbW90ZUFwcFByb3BzIiwicHJvdG9jb2wiLCJwYXRobmFtZSIsInBhcnNlIiwiaXNVcmwiLCJnZXQiLCJhY3F1aXJlIiwidGVzdCIsIm1heEFnZU1hdGNoIiwiZXhlYyIsInBhcnNlSW50IiwiY2FjaGVkUGF0aCIsImludGVncml0eSIsImRlbCIsImZpbGVOYW1lIiwic2FuaXRpemVOYW1lIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicmVwbGFjZW1lbnQiLCJjdCIsInNvbWUiLCJtaW1lVHlwZSIsIlJlZ0V4cCIsImVzY2FwZVJlZ0V4cCIsIm1hdGNoIiwicmVzdWx0aW5nTmFtZSIsInN1YnN0cmluZyIsInJlc3VsdGluZ0V4dCIsImZpcnN0IiwidGFyZ2V0UGF0aCIsInRlbXBEaXIiLCJwcmVmaXgiLCJzdWZmaXgiLCJkb3dubG9hZEFwcCIsImVycm9yTWVzc2FnZSIsImlzUGFja2FnZUFGaWxlIiwiaXNGaWxlIiwiaXNGdW5jdGlvbiIsImFyY2hpdmVQYXRoIiwidG1wUm9vdCIsIm9wZW5EaXIiLCJ1bnppcEFwcCIsImlzQWJzb2x1dGUiLCJyZXNvbHZlIiwic3RvcmVBcHBJbkNhY2hlIiwiYXBwUGF0aFRvQ2FjaGUiLCJjYWNoZWRGdWxsUGF0aCIsInNldCIsInJlc3VsdCIsImNsb25lIiwiQm9vbGVhbiIsImhyZWYiLCJuZXQiLCJkb3dubG9hZEZpbGUiLCJlcnIiLCJ6aXBQYXRoIiwiZHN0Um9vdCIsInppcCIsImFzc2VydFZhbGlkWmlwIiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsInN0YXJ0IiwidXNlU3lzdGVtVW56aXBFbnYiLCJlbnYiLCJBUFBJVU1fUFJFRkVSX1NZU1RFTV9VTlpJUCIsInVzZVN5c3RlbVVuemlwIiwiZXh0cmFjdGlvbk9wdHMiLCJmaWxlTmFtZXNFbmNvZGluZyIsImV4dHJhY3RBbGxUbyIsImdsb2JQYXR0ZXJuIiwiZXh0IiwicmVwbGFjZSIsImpvaW4iLCJzb3J0ZWRCdW5kbGVJdGVtcyIsInNvcnQiLCJhIiwiYiIsInNwbGl0Iiwic2VwIiwiZXJyb3JBbmRUaHJvdyIsIk1hdGgiLCJyb3VuZCIsImdldER1cmF0aW9uIiwiYXNNaWxsaVNlY29uZHMiLCJtYXRjaGVkQnVuZGxlIiwiZHN0UGF0aCIsIm12IiwibWtkaXJwIiwiaXNQYWNrYWdlT3JCdW5kbGUiLCJkdXBsaWNhdGVLZXlzIiwiaW5wdXQiLCJmaXJzdEtleSIsInNlY29uZEtleSIsIml0ZW0iLCJyZXN1bHRPYmoiLCJrZXkiLCJ2YWx1ZSIsInRvUGFpcnMiLCJyZWN1cnNpdmVseUNhbGxlZFZhbHVlIiwicGFyc2VDYXBzQXJyYXkiLCJjYXAiLCJwYXJzZWRDYXBzIiwiSlNPTiIsImlnbiIsImdlbmVyYXRlRHJpdmVyTG9nUHJlZml4Iiwib2JqIiwic2Vzc2lvbklkIiwiaW5zdGFuY2VOYW1lIiwiY29uc3RydWN0b3IiLCJuYW1lIiwibm9kZSIsImdldE9iamVjdElkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsT0FBTyxHQUFHLE1BQWhCO0FBQ0EsTUFBTUMsUUFBUSxHQUFHLENBQUMsTUFBRCxFQUFTRCxPQUFULENBQWpCO0FBQ0EsTUFBTUUsY0FBYyxHQUFHLENBQ3JCLGlCQURxQixFQUVyQiw4QkFGcUIsRUFHckIsaUJBSHFCLENBQXZCO0FBS0EsTUFBTUMsbUJBQW1CLEdBQUcsT0FBTyxFQUFQLEdBQVksRUFBWixHQUFpQixFQUE3QztBQUNBLE1BQU1DLGVBQWUsR0FBRyxJQUF4QjtBQUNBLE1BQU1DLGtCQUFrQixHQUFHLElBQUlDLGlCQUFKLENBQVE7QUFDakNDLEVBQUFBLEdBQUcsRUFBRUgsZUFENEI7QUFFakNJLEVBQUFBLEdBQUcsRUFBRUwsbUJBRjRCO0FBR2pDTSxFQUFBQSxjQUFjLEVBQUUsSUFIaUI7QUFJakNDLEVBQUFBLE9BQU8sRUFBRSxDQUFDQyxHQUFELEVBQU07QUFBQ0MsSUFBQUE7QUFBRCxHQUFOLEtBQXFCO0FBQzVCQyxvQkFBT0MsSUFBUCxDQUFhLG9CQUFtQkgsR0FBSSxnQkFBZUMsUUFBUyxRQUFoRCxHQUNULGlCQUFnQlQsbUJBQW9CLElBRHZDOztBQUVBLFFBQUlTLFFBQUosRUFBYztBQUNaRyxrQkFBR0MsTUFBSCxDQUFVSixRQUFWO0FBQ0Q7QUFDRixHQVZnQztBQVdqQ0ssRUFBQUEsY0FBYyxFQUFFO0FBWGlCLENBQVIsQ0FBM0I7QUFhQSxNQUFNQyx3QkFBd0IsR0FBRyxJQUFJQyxrQkFBSixFQUFqQztBQUNBLE1BQU1DLG9CQUFvQixHQUFHLEdBQTdCO0FBQ0EsTUFBTUMsZ0JBQWdCLEdBQUcsWUFBekI7QUFDQSxNQUFNQyx1QkFBdUIsR0FBRyxNQUFNLElBQXRDO0FBRUFDLE9BQU8sQ0FBQ0MsRUFBUixDQUFXLE1BQVgsRUFBbUIsTUFBTTtBQUN2QixNQUFJbkIsa0JBQWtCLENBQUNvQixJQUFuQixLQUE0QixDQUFoQyxFQUFtQztBQUNqQztBQUNEOztBQUVELFFBQU1DLFFBQVEsR0FBRyxDQUFDLEdBQUdyQixrQkFBa0IsQ0FBQ3NCLE1BQW5CLEVBQUosRUFDZEMsR0FEYyxDQUNWLENBQUM7QUFBQ2hCLElBQUFBO0FBQUQsR0FBRCxLQUFnQkEsUUFETixDQUFqQjs7QUFFQUMsa0JBQU9nQixLQUFQLENBQWMseUJBQXdCSCxRQUFRLENBQUNJLE1BQU8sVUFBekMsR0FDWEMsY0FBS0MsU0FBTCxDQUFlLGFBQWYsRUFBOEJOLFFBQVEsQ0FBQ0ksTUFBdkMsQ0FERjs7QUFFQSxPQUFLLE1BQU1HLE9BQVgsSUFBc0JQLFFBQXRCLEVBQWdDO0FBQzlCLFFBQUk7QUFFRlgsa0JBQUdtQixVQUFILENBQWNELE9BQWQ7QUFDRCxLQUhELENBR0UsT0FBT0UsQ0FBUCxFQUFVO0FBQ1Z0QixzQkFBT3VCLElBQVAsQ0FBWUQsQ0FBQyxDQUFDRSxPQUFkO0FBQ0Q7QUFDRjtBQUNGLENBakJEOztBQW9CQSxlQUFlQyxlQUFmLENBQWdDQyxJQUFoQyxFQUFzQztBQUNwQyxNQUFJO0FBQ0YsV0FBTyxDQUFDLE1BQU0sb0JBQU07QUFDbEJDLE1BQUFBLEdBQUcsRUFBRUQsSUFEYTtBQUVsQkUsTUFBQUEsTUFBTSxFQUFFLE1BRlU7QUFHbEJDLE1BQUFBLE9BQU8sRUFBRTtBQUhTLEtBQU4sQ0FBUCxFQUlIQyxPQUpKO0FBS0QsR0FORCxDQU1FLE9BQU9SLENBQVAsRUFBVTtBQUNWdEIsb0JBQU9DLElBQVAsQ0FBYSxnQ0FBK0J5QixJQUFLLHNCQUFxQkosQ0FBQyxDQUFDRSxPQUFRLEVBQWhGO0FBQ0Q7O0FBQ0QsU0FBTyxFQUFQO0FBQ0Q7O0FBRUQsU0FBU08sd0JBQVQsQ0FBbUNMLElBQW5DLEVBQXlDTSxlQUFlLEdBQUcsRUFBM0QsRUFBK0RDLGFBQWEsR0FBRyxFQUEvRSxFQUFtRjtBQUNqRixRQUFNQyxPQUFPLEdBQUcsTUFBTTtBQUNwQmxDLG9CQUFPZ0IsS0FBUCxDQUFjLGtFQUFpRVUsSUFBSyxFQUFwRjs7QUFDQSxXQUFPLElBQVA7QUFDRCxHQUhEOztBQUtBLE1BQUksQ0FBQ1MsZ0JBQUVDLGFBQUYsQ0FBZ0JILGFBQWhCLENBQUQsSUFBbUMsQ0FBQ0UsZ0JBQUVDLGFBQUYsQ0FBZ0JKLGVBQWhCLENBQXhDLEVBQTBFO0FBRXhFLFdBQU9FLE9BQU8sRUFBZDtBQUNEOztBQUVELFFBQU07QUFDSkcsSUFBQUEsWUFBWSxFQUFFQyxlQURWO0FBRUpDLElBQUFBLFNBQVMsRUFBRUMsZ0JBRlA7QUFJSkMsSUFBQUEsTUFBTSxFQUFFQztBQUpKLE1BS0ZWLGVBTEo7QUFNQSxRQUFNO0FBRUpLLElBQUFBLFlBRkk7QUFJSkUsSUFBQUEsU0FKSTtBQU1KSSxJQUFBQSxTQU5JO0FBT0o1QyxJQUFBQTtBQVBJLE1BUUZrQyxhQVJKOztBQVNBLE1BQUlJLFlBQVksSUFBSUMsZUFBcEIsRUFBcUM7QUFDbkMsUUFBSUEsZUFBZSxDQUFDTSxPQUFoQixNQUE2QlAsWUFBWSxDQUFDTyxPQUFiLEVBQWpDLEVBQXlEO0FBQ3ZENUMsc0JBQU9nQixLQUFQLENBQWMsc0JBQXFCVSxJQUFLLGdDQUErQlcsWUFBYSxFQUFwRjs7QUFDQSxhQUFPdEMsUUFBUDtBQUNEOztBQUNEQyxvQkFBT2dCLEtBQVAsQ0FBYyxzQkFBcUJVLElBQUssNEJBQTJCVyxZQUFhLEVBQWhGOztBQUNBLFdBQU9ILE9BQU8sRUFBZDtBQUNEOztBQUNELE1BQUlLLFNBQVMsSUFBSUMsZ0JBQWpCLEVBQW1DO0FBQ2pDeEMsb0JBQU9nQixLQUFQLENBQWMsc0JBQXFCVSxJQUFLLGVBQXhDOztBQUNBLFdBQU8zQixRQUFQO0FBQ0Q7O0FBQ0QsTUFBSTJDLGFBQWEsSUFBSUMsU0FBckIsRUFBZ0M7QUFDOUIsVUFBTUUsTUFBTSxHQUFHRixTQUFTLEdBQUdELGFBQWEsR0FBRyxJQUE1QixHQUFtQ0ksSUFBSSxDQUFDQyxHQUFMLEVBQWxEOztBQUNBLFFBQUlGLE1BQU0sR0FBRyxDQUFiLEVBQWdCO0FBQ2Q3QyxzQkFBT2dCLEtBQVAsQ0FBYywyQkFBMEJnQyxjQUFLQyxRQUFMLENBQWNsRCxRQUFkLENBQXdCLG9CQUFtQjhDLE1BQU0sR0FBRyxJQUFLLEdBQWpHOztBQUNBLGFBQU85QyxRQUFQO0FBQ0Q7O0FBQ0RDLG9CQUFPZ0IsS0FBUCxDQUFjLDJCQUEwQmdDLGNBQUtDLFFBQUwsQ0FBY2xELFFBQWQsQ0FBd0IsZUFBaEU7QUFDRDs7QUFDRCxTQUFPbUMsT0FBTyxFQUFkO0FBQ0Q7O0FBRUQsU0FBU2dCLGtCQUFULENBQTZCcEQsR0FBN0IsRUFBa0NxRCxzQkFBbEMsRUFBMEQ7QUFDeEQsTUFBSUEsc0JBQXNCLENBQUNwQyxHQUF2QixDQUEyQm9CLGdCQUFFaUIsT0FBN0IsRUFBc0NDLFFBQXRDLENBQStDbEIsZ0JBQUVpQixPQUFGLENBQVVKLGNBQUtNLE9BQUwsQ0FBYXhELEdBQWIsQ0FBVixDQUEvQyxDQUFKLEVBQWtGO0FBQ2hGLFdBQU9BLEdBQVA7QUFDRDs7QUFDRCxRQUFNLElBQUl5RCxLQUFKLENBQVcsaUJBQWdCekQsR0FBSSxpQkFBckIsR0FDYixHQUFFb0IsY0FBS0MsU0FBTCxDQUFlLFdBQWYsRUFBNEJnQyxzQkFBc0IsQ0FBQ2xDLE1BQW5ELEVBQTJELEtBQTNELENBQWtFLElBRHZELEdBRWRrQyxzQkFGSSxDQUFOO0FBR0Q7O0FBRUQsZUFBZUssd0JBQWYsQ0FBeUNDLFVBQXpDLEVBQXFEO0FBQ25ELFNBQU8sQ0FBQyxNQUFNdkQsWUFBR3dELElBQUgsQ0FBUSxNQUFSLEVBQWdCO0FBQUNDLElBQUFBLEdBQUcsRUFBRUYsVUFBTjtBQUFrQkcsSUFBQUEsTUFBTSxFQUFFLEtBQTFCO0FBQWlDQyxJQUFBQSxNQUFNLEVBQUU7QUFBekMsR0FBaEIsQ0FBUCxFQUF3RTVDLE1BQS9FO0FBQ0Q7O0FBRUQsZUFBZTZDLHNCQUFmLENBQXVDQyxRQUF2QyxFQUFpRDtBQUMvQyxTQUFPLE1BQU03RCxZQUFHOEQsSUFBSCxDQUFRRCxRQUFSLENBQWI7QUFDRDs7QUFFRCxlQUFlRSxnQkFBZixDQUFpQ0MsV0FBakMsRUFBOENDLGlCQUFpQixHQUFHLEVBQWxFLEVBQXNFO0FBQ3BFLE1BQUksRUFBQyxNQUFNakUsWUFBR2tFLE1BQUgsQ0FBVUYsV0FBVixDQUFQLENBQUosRUFBbUM7QUFDakMsV0FBTyxLQUFQO0FBQ0Q7O0FBU0QsU0FBTyxDQUFDLE1BQU1oRSxZQUFHbUUsSUFBSCxDQUFRSCxXQUFSLENBQVAsRUFBNkJJLFdBQTdCLEtBQ0gsT0FBTWQsd0JBQXdCLENBQUNVLFdBQUQsQ0FBOUIsTUFBK0NDLGlCQUEvQyxhQUErQ0EsaUJBQS9DLHVCQUErQ0EsaUJBQWlCLENBQUVJLE1BQWxFLENBREcsR0FFSCxPQUFNVCxzQkFBc0IsQ0FBQ0ksV0FBRCxDQUE1QixPQUE4Q0MsaUJBQTlDLGFBQThDQSxpQkFBOUMsdUJBQThDQSxpQkFBaUIsQ0FBRUssSUFBakUsQ0FGSjtBQUdEOztBQW9ERCxlQUFlQyxZQUFmLENBQTZCM0UsR0FBN0IsRUFBa0M0RSxPQUFPLEdBQUcsRUFBNUMsRUFBZ0Q7QUFDOUMsTUFBSSxDQUFDdkMsZ0JBQUV3QyxRQUFGLENBQVc3RSxHQUFYLENBQUwsRUFBc0I7QUFFcEI7QUFDRDs7QUFFRCxNQUFJcUQsc0JBQUo7QUFDQSxRQUFNO0FBQ0p5QixJQUFBQTtBQURJLE1BRUZ6QyxnQkFBRUMsYUFBRixDQUFnQnNDLE9BQWhCLElBQTJCQSxPQUEzQixHQUFxQyxFQUZ6Qzs7QUFHQSxNQUFJdkMsZ0JBQUV3QyxRQUFGLENBQVdELE9BQVgsQ0FBSixFQUF5QjtBQUN2QnZCLElBQUFBLHNCQUFzQixHQUFHLENBQUN1QixPQUFELENBQXpCO0FBQ0QsR0FGRCxNQUVPLElBQUl2QyxnQkFBRTBDLE9BQUYsQ0FBVUgsT0FBVixDQUFKLEVBQXdCO0FBQzdCdkIsSUFBQUEsc0JBQXNCLEdBQUd1QixPQUF6QjtBQUNELEdBRk0sTUFFQSxJQUFJdkMsZ0JBQUVDLGFBQUYsQ0FBZ0JzQyxPQUFoQixDQUFKLEVBQThCO0FBQ25DdkIsSUFBQUEsc0JBQXNCLEdBQUd1QixPQUFPLENBQUNJLG1CQUFqQztBQUNEOztBQUNELE1BQUkzQyxnQkFBRTRDLE9BQUYsQ0FBVTVCLHNCQUFWLENBQUosRUFBdUM7QUFDckMsVUFBTSxJQUFJSSxLQUFKLENBQVcsdURBQVgsQ0FBTjtBQUNEOztBQUVELE1BQUl5QixNQUFNLEdBQUdsRixHQUFiO0FBQ0EsTUFBSW1GLGNBQWMsR0FBRyxLQUFyQjtBQUNBLE1BQUlDLFdBQVcsR0FBRyxJQUFsQjtBQUNBLE1BQUlwRCxPQUFPLEdBQUcsSUFBZDtBQUNBLFFBQU1xRCxjQUFjLEdBQUc7QUFDckI5QyxJQUFBQSxZQUFZLEVBQUUsSUFETztBQUVyQkUsSUFBQUEsU0FBUyxFQUFFLEtBRlU7QUFHckJFLElBQUFBLE1BQU0sRUFBRTtBQUhhLEdBQXZCOztBQUtBLFFBQU07QUFBQzJDLElBQUFBLFFBQUQ7QUFBV0MsSUFBQUE7QUFBWCxNQUF1QjFELGFBQUkyRCxLQUFKLENBQVVOLE1BQVYsQ0FBN0I7O0FBQ0EsUUFBTU8sS0FBSyxHQUFHLENBQUMsT0FBRCxFQUFVLFFBQVYsRUFBb0JsQyxRQUFwQixDQUE2QitCLFFBQTdCLENBQWQ7QUFFQSxRQUFNbkQsYUFBYSxHQUFHekMsa0JBQWtCLENBQUNnRyxHQUFuQixDQUF1QjFGLEdBQXZCLENBQXRCO0FBRUEsU0FBTyxNQUFNTyx3QkFBd0IsQ0FBQ29GLE9BQXpCLENBQWlDM0YsR0FBakMsRUFBc0MsWUFBWTtBQUM3RCxRQUFJeUYsS0FBSixFQUFXO0FBRVR2RixzQkFBT0MsSUFBUCxDQUFhLDJCQUEwQitFLE1BQU8sR0FBOUM7O0FBQ0FsRCxNQUFBQSxPQUFPLEdBQUcsTUFBTUwsZUFBZSxDQUFDdUQsTUFBRCxDQUEvQjs7QUFDQSxVQUFJLENBQUM3QyxnQkFBRTRDLE9BQUYsQ0FBVWpELE9BQVYsQ0FBTCxFQUF5QjtBQUN2QixZQUFJQSxPQUFPLENBQUMsZUFBRCxDQUFYLEVBQThCO0FBQzVCcUQsVUFBQUEsY0FBYyxDQUFDOUMsWUFBZixHQUE4QixJQUFJUyxJQUFKLENBQVNoQixPQUFPLENBQUMsZUFBRCxDQUFoQixDQUE5QjtBQUNEOztBQUNEOUIsd0JBQU9nQixLQUFQLENBQWMsa0JBQWlCYyxPQUFPLENBQUMsZUFBRCxDQUFrQixFQUF4RDs7QUFDQSxZQUFJQSxPQUFPLENBQUMsZUFBRCxDQUFYLEVBQThCO0FBQzVCcUQsVUFBQUEsY0FBYyxDQUFDNUMsU0FBZixHQUEyQixpQkFBaUJtRCxJQUFqQixDQUFzQjVELE9BQU8sQ0FBQyxlQUFELENBQTdCLENBQTNCO0FBQ0EsZ0JBQU02RCxXQUFXLEdBQUcscUJBQXFCQyxJQUFyQixDQUEwQjlELE9BQU8sQ0FBQyxlQUFELENBQWpDLENBQXBCOztBQUNBLGNBQUk2RCxXQUFKLEVBQWlCO0FBQ2ZSLFlBQUFBLGNBQWMsQ0FBQzFDLE1BQWYsR0FBd0JvRCxRQUFRLENBQUNGLFdBQVcsQ0FBQyxDQUFELENBQVosRUFBaUIsRUFBakIsQ0FBaEM7QUFDRDtBQUNGOztBQUNEM0Ysd0JBQU9nQixLQUFQLENBQWMsa0JBQWlCYyxPQUFPLENBQUMsZUFBRCxDQUFrQixFQUF4RDtBQUNEOztBQUNELFlBQU1nRSxVQUFVLEdBQUcvRCx3QkFBd0IsQ0FBQ2pDLEdBQUQsRUFBTXFGLGNBQU4sRUFBc0JsRCxhQUF0QixDQUEzQzs7QUFDQSxVQUFJNkQsVUFBSixFQUFnQjtBQUNkLFlBQUksTUFBTTdCLGdCQUFnQixDQUFDNkIsVUFBRCxFQUFhN0QsYUFBYixhQUFhQSxhQUFiLHVCQUFhQSxhQUFhLENBQUU4RCxTQUE1QixDQUExQixFQUFrRTtBQUNoRS9GLDBCQUFPQyxJQUFQLENBQWEsaURBQWdENkYsVUFBVyxHQUF4RTs7QUFDQSxpQkFBTzVDLGtCQUFrQixDQUFDNEMsVUFBRCxFQUFhM0Msc0JBQWIsQ0FBekI7QUFDRDs7QUFDRG5ELHdCQUFPQyxJQUFQLENBQWEsdUJBQXNCNkYsVUFBVywyQkFBbEMsR0FDVCx3RUFESDs7QUFFQXRHLFFBQUFBLGtCQUFrQixDQUFDd0csR0FBbkIsQ0FBdUJsRyxHQUF2QjtBQUNEOztBQUVELFVBQUltRyxRQUFRLEdBQUcsSUFBZjs7QUFDQSxZQUFNaEQsUUFBUSxHQUFHL0MsWUFBR2dHLFlBQUgsQ0FBZ0JsRCxjQUFLQyxRQUFMLENBQWNrRCxrQkFBa0IsQ0FBQ2QsUUFBRCxDQUFoQyxDQUFoQixFQUE2RDtBQUM1RWUsUUFBQUEsV0FBVyxFQUFFN0Y7QUFEK0QsT0FBN0QsQ0FBakI7O0FBR0EsWUFBTStDLE9BQU8sR0FBR04sY0FBS00sT0FBTCxDQUFhTCxRQUFiLENBQWhCOztBQUdBLFVBQUk3RCxRQUFRLENBQUNpRSxRQUFULENBQWtCQyxPQUFsQixDQUFKLEVBQWdDO0FBQzlCMkMsUUFBQUEsUUFBUSxHQUFHaEQsUUFBWDtBQUNBZ0MsUUFBQUEsY0FBYyxHQUFHLElBQWpCO0FBQ0Q7O0FBQ0QsVUFBSW5ELE9BQU8sQ0FBQyxjQUFELENBQVgsRUFBNkI7QUFDM0IsY0FBTXVFLEVBQUUsR0FBR3ZFLE9BQU8sQ0FBQyxjQUFELENBQWxCOztBQUNBOUIsd0JBQU9nQixLQUFQLENBQWMsaUJBQWdCcUYsRUFBRyxFQUFqQzs7QUFFQSxZQUFJaEgsY0FBYyxDQUFDaUgsSUFBZixDQUFxQkMsUUFBRCxJQUFjLElBQUlDLE1BQUosQ0FBWSxNQUFLckUsZ0JBQUVzRSxZQUFGLENBQWVGLFFBQWYsQ0FBeUIsS0FBMUMsRUFBZ0RiLElBQWhELENBQXFEVyxFQUFyRCxDQUFsQyxDQUFKLEVBQWlHO0FBQy9GLGNBQUksQ0FBQ0osUUFBTCxFQUFlO0FBQ2JBLFlBQUFBLFFBQVEsR0FBSSxHQUFFekYsZ0JBQWlCLE1BQS9CO0FBQ0Q7O0FBQ0R5RSxVQUFBQSxjQUFjLEdBQUcsSUFBakI7QUFDRDtBQUNGOztBQUNELFVBQUluRCxPQUFPLENBQUMscUJBQUQsQ0FBUCxJQUFrQyxlQUFlNEQsSUFBZixDQUFvQjVELE9BQU8sQ0FBQyxxQkFBRCxDQUEzQixDQUF0QyxFQUEyRjtBQUN6RjlCLHdCQUFPZ0IsS0FBUCxDQUFjLHdCQUF1QmMsT0FBTyxDQUFDLHFCQUFELENBQXdCLEVBQXBFOztBQUNBLGNBQU00RSxLQUFLLEdBQUcscUJBQXFCZCxJQUFyQixDQUEwQjlELE9BQU8sQ0FBQyxxQkFBRCxDQUFqQyxDQUFkOztBQUNBLFlBQUk0RSxLQUFKLEVBQVc7QUFDVFQsVUFBQUEsUUFBUSxHQUFHL0YsWUFBR2dHLFlBQUgsQ0FBZ0JRLEtBQUssQ0FBQyxDQUFELENBQXJCLEVBQTBCO0FBQ25DTixZQUFBQSxXQUFXLEVBQUU3RjtBQURzQixXQUExQixDQUFYO0FBR0EwRSxVQUFBQSxjQUFjLEdBQUdBLGNBQWMsSUFBSTdGLFFBQVEsQ0FBQ2lFLFFBQVQsQ0FBa0JMLGNBQUtNLE9BQUwsQ0FBYTJDLFFBQWIsQ0FBbEIsQ0FBbkM7QUFDRDtBQUNGOztBQUNELFVBQUksQ0FBQ0EsUUFBTCxFQUFlO0FBRWIsY0FBTVUsYUFBYSxHQUFHMUQsUUFBUSxHQUMxQkEsUUFBUSxDQUFDMkQsU0FBVCxDQUFtQixDQUFuQixFQUFzQjNELFFBQVEsQ0FBQ2hDLE1BQVQsR0FBa0JxQyxPQUFPLENBQUNyQyxNQUFoRCxDQUQwQixHQUUxQlQsZ0JBRko7QUFHQSxZQUFJcUcsWUFBWSxHQUFHdkQsT0FBbkI7O0FBQ0EsWUFBSSxDQUFDSCxzQkFBc0IsQ0FBQ0UsUUFBdkIsQ0FBZ0N3RCxZQUFoQyxDQUFMLEVBQW9EO0FBQ2xEN0csMEJBQU9DLElBQVAsQ0FBYSwrQkFBOEI0RyxZQUFhLHNCQUE1QyxHQUNULGtCQUFpQjFFLGdCQUFFMkUsS0FBRixDQUFRM0Qsc0JBQVIsQ0FBZ0MsR0FEcEQ7O0FBRUEwRCxVQUFBQSxZQUFZLEdBQUcxRSxnQkFBRTJFLEtBQUYsQ0FBUTNELHNCQUFSLENBQWY7QUFDRDs7QUFDRDhDLFFBQUFBLFFBQVEsR0FBSSxHQUFFVSxhQUFjLEdBQUVFLFlBQWEsRUFBM0M7QUFDRDs7QUFDRCxZQUFNRSxVQUFVLEdBQUcsTUFBTUMsaUJBQVFoRSxJQUFSLENBQWE7QUFDcENpRSxRQUFBQSxNQUFNLEVBQUVoQixRQUQ0QjtBQUVwQ2lCLFFBQUFBLE1BQU0sRUFBRTtBQUY0QixPQUFiLENBQXpCO0FBSUFsQyxNQUFBQSxNQUFNLEdBQUcsTUFBTW1DLFdBQVcsQ0FBQ25DLE1BQUQsRUFBUytCLFVBQVQsQ0FBMUI7QUFDRCxLQS9FRCxNQStFTyxJQUFJLE1BQU03RyxZQUFHa0UsTUFBSCxDQUFVWSxNQUFWLENBQVYsRUFBNkI7QUFFbENoRixzQkFBT0MsSUFBUCxDQUFhLG9CQUFtQitFLE1BQU8sR0FBdkM7O0FBQ0FDLE1BQUFBLGNBQWMsR0FBRzdGLFFBQVEsQ0FBQ2lFLFFBQVQsQ0FBa0JMLGNBQUtNLE9BQUwsQ0FBYTBCLE1BQWIsQ0FBbEIsQ0FBakI7QUFDRCxLQUpNLE1BSUE7QUFDTCxVQUFJb0MsWUFBWSxHQUFJLHVCQUFzQnBDLE1BQU8sdUNBQWpEOztBQUVBLFVBQUk3QyxnQkFBRXdDLFFBQUYsQ0FBV1MsUUFBWCxLQUF3QkEsUUFBUSxDQUFDbkUsTUFBVCxHQUFrQixDQUE5QyxFQUFpRDtBQUMvQ21HLFFBQUFBLFlBQVksR0FBSSxpQkFBZ0JoQyxRQUFTLGNBQWFKLE1BQU8sc0JBQTlDLEdBQ1osK0NBREg7QUFFRDs7QUFDRCxZQUFNLElBQUl6QixLQUFKLENBQVU2RCxZQUFWLENBQU47QUFDRDs7QUFFRCxVQUFNQyxjQUFjLEdBQUcsQ0FBQyxNQUFNbkgsWUFBR21FLElBQUgsQ0FBUVcsTUFBUixDQUFQLEVBQXdCc0MsTUFBeEIsRUFBdkI7O0FBQ0EsUUFBSUQsY0FBSixFQUFvQjtBQUNsQm5DLE1BQUFBLFdBQVcsR0FBRyxNQUFNcEIsc0JBQXNCLENBQUNrQixNQUFELENBQTFDO0FBQ0Q7O0FBRUQsUUFBSXFDLGNBQWMsSUFBSXBDLGNBQWxCLElBQW9DLENBQUM5QyxnQkFBRW9GLFVBQUYsQ0FBYTNDLGFBQWIsQ0FBekMsRUFBc0U7QUFDcEUsWUFBTTRDLFdBQVcsR0FBR3hDLE1BQXBCOztBQUNBLFVBQUlFLFdBQVcsTUFBS2pELGFBQUwsYUFBS0EsYUFBTCx1QkFBS0EsYUFBYSxDQUFFaUQsV0FBcEIsQ0FBZixFQUFnRDtBQUM5QyxjQUFNO0FBQUNuRixVQUFBQTtBQUFELFlBQWFrQyxhQUFuQjs7QUFDQSxZQUFJLE1BQU1nQyxnQkFBZ0IsQ0FBQ2xFLFFBQUQsRUFBV2tDLGFBQVgsYUFBV0EsYUFBWCx1QkFBV0EsYUFBYSxDQUFFOEQsU0FBMUIsQ0FBMUIsRUFBZ0U7QUFDOUQsY0FBSXlCLFdBQVcsS0FBSzFILEdBQXBCLEVBQXlCO0FBQ3ZCLGtCQUFNSSxZQUFHQyxNQUFILENBQVVxSCxXQUFWLENBQU47QUFDRDs7QUFDRHhILDBCQUFPQyxJQUFQLENBQWEsZ0RBQStDRixRQUFTLEdBQXJFOztBQUNBLGlCQUFPbUQsa0JBQWtCLENBQUNuRCxRQUFELEVBQVdvRCxzQkFBWCxDQUF6QjtBQUNEOztBQUNEbkQsd0JBQU9DLElBQVAsQ0FBYSx1QkFBc0JGLFFBQVMsMkJBQWhDLEdBQ1QsK0RBREg7O0FBRUFQLFFBQUFBLGtCQUFrQixDQUFDd0csR0FBbkIsQ0FBdUJsRyxHQUF2QjtBQUNEOztBQUNELFlBQU0ySCxPQUFPLEdBQUcsTUFBTVQsaUJBQVFVLE9BQVIsRUFBdEI7O0FBQ0EsVUFBSTtBQUNGMUMsUUFBQUEsTUFBTSxHQUFHLE1BQU0yQyxRQUFRLENBQUNILFdBQUQsRUFBY0MsT0FBZCxFQUF1QnRFLHNCQUF2QixDQUF2QjtBQUNELE9BRkQsU0FFVTtBQUNSLFlBQUk2QixNQUFNLEtBQUt3QyxXQUFYLElBQTBCQSxXQUFXLEtBQUsxSCxHQUE5QyxFQUFtRDtBQUNqRCxnQkFBTUksWUFBR0MsTUFBSCxDQUFVcUgsV0FBVixDQUFOO0FBQ0Q7QUFDRjs7QUFDRHhILHNCQUFPQyxJQUFQLENBQWEsMEJBQXlCK0UsTUFBTyxHQUE3QztBQUNELEtBeEJELE1Bd0JPLElBQUksQ0FBQ2hDLGNBQUs0RSxVQUFMLENBQWdCNUMsTUFBaEIsQ0FBTCxFQUE4QjtBQUNuQ0EsTUFBQUEsTUFBTSxHQUFHaEMsY0FBSzZFLE9BQUwsQ0FBYW5ILE9BQU8sQ0FBQ2lELEdBQVIsRUFBYixFQUE0QnFCLE1BQTVCLENBQVQ7O0FBQ0FoRixzQkFBT3VCLElBQVAsQ0FBYSxpQ0FBZ0N6QixHQUFJLG9CQUFyQyxHQUNULDhCQUE2QmtGLE1BQU8sdURBRHZDOztBQUVBbEYsTUFBQUEsR0FBRyxHQUFHa0YsTUFBTjtBQUNEOztBQUVELFVBQU04QyxlQUFlLEdBQUcsTUFBT0MsY0FBUCxJQUEwQjtBQUNoRCxZQUFNQyxjQUFjLEdBQUcvRixhQUFILGFBQUdBLGFBQUgsdUJBQUdBLGFBQWEsQ0FBRWxDLFFBQXRDOztBQUNBLFVBQUlpSSxjQUFjLElBQUlBLGNBQWMsS0FBS0QsY0FBekMsRUFBeUQ7QUFDdkQsY0FBTTdILFlBQUdDLE1BQUgsQ0FBVTZILGNBQVYsQ0FBTjtBQUNEOztBQUNELFlBQU1qQyxTQUFTLEdBQUcsRUFBbEI7O0FBQ0EsVUFBSSxDQUFDLE1BQU03RixZQUFHbUUsSUFBSCxDQUFRMEQsY0FBUixDQUFQLEVBQWdDekQsV0FBaEMsRUFBSixFQUFtRDtBQUNqRHlCLFFBQUFBLFNBQVMsQ0FBQ3hCLE1BQVYsR0FBbUIsTUFBTWYsd0JBQXdCLENBQUN1RSxjQUFELENBQWpEO0FBQ0QsT0FGRCxNQUVPO0FBQ0xoQyxRQUFBQSxTQUFTLENBQUN2QixJQUFWLEdBQWlCLE1BQU1WLHNCQUFzQixDQUFDaUUsY0FBRCxDQUE3QztBQUNEOztBQUNEdkksTUFBQUEsa0JBQWtCLENBQUN5SSxHQUFuQixDQUF1Qm5JLEdBQXZCLEVBQTRCLEVBQzFCLEdBQUdxRixjQUR1QjtBQUUxQnhDLFFBQUFBLFNBQVMsRUFBRUcsSUFBSSxDQUFDQyxHQUFMLEVBRmU7QUFHMUJtQyxRQUFBQSxXQUgwQjtBQUkxQmEsUUFBQUEsU0FKMEI7QUFLMUJoRyxRQUFBQSxRQUFRLEVBQUVnSTtBQUxnQixPQUE1QjtBQU9BLGFBQU9BLGNBQVA7QUFDRCxLQW5CRDs7QUFxQkEsUUFBSTVGLGdCQUFFb0YsVUFBRixDQUFhM0MsYUFBYixDQUFKLEVBQWlDO0FBQy9CLFlBQU1zRCxNQUFNLEdBQUcsTUFBTXRELGFBQWEsQ0FBQztBQUNqQzNDLFFBQUFBLGFBQWEsRUFBRUUsZ0JBQUVnRyxLQUFGLENBQVFsRyxhQUFSLENBRGtCO0FBRWpDc0QsUUFBQUEsS0FGaUM7QUFHakN6RCxRQUFBQSxPQUFPLEVBQUVLLGdCQUFFZ0csS0FBRixDQUFRckcsT0FBUixDQUh3QjtBQUlqQ1YsUUFBQUEsT0FBTyxFQUFFNEQ7QUFKd0IsT0FBRCxDQUFsQztBQU1BLGFBQVEsRUFBQ2tELE1BQUQsYUFBQ0EsTUFBRCxlQUFDQSxNQUFNLENBQUU5RyxPQUFULEtBQW9CdEIsR0FBRyxNQUFLb0ksTUFBTCxhQUFLQSxNQUFMLHVCQUFLQSxNQUFNLENBQUU5RyxPQUFiLENBQXZCLElBQStDLEVBQUMsTUFBTWxCLFlBQUdrRSxNQUFILENBQVU4RCxNQUFWLGFBQVVBLE1BQVYsdUJBQVVBLE1BQU0sQ0FBRTlHLE9BQWxCLENBQVAsQ0FBaEQsR0FDSDRELE1BREcsR0FFSCxNQUFNOEMsZUFBZSxDQUFDSSxNQUFNLENBQUM5RyxPQUFSLENBRnpCO0FBR0Q7O0FBRUQ4QixJQUFBQSxrQkFBa0IsQ0FBQzhCLE1BQUQsRUFBUzdCLHNCQUFULENBQWxCO0FBQ0EsV0FBUXJELEdBQUcsS0FBS2tGLE1BQVIsS0FBbUJFLFdBQVcsSUFBSS9DLGdCQUFFckIsTUFBRixDQUFTcUUsY0FBVCxFQUF5Qm1CLElBQXpCLENBQThCOEIsT0FBOUIsQ0FBbEMsQ0FBRCxHQUNILE1BQU1OLGVBQWUsQ0FBQzlDLE1BQUQsQ0FEbEIsR0FFSEEsTUFGSjtBQUdELEdBdktZLENBQWI7QUF3S0Q7O0FBRUQsZUFBZW1DLFdBQWYsQ0FBNEJySCxHQUE1QixFQUFpQ2lILFVBQWpDLEVBQTZDO0FBQzNDLFFBQU07QUFBQ3NCLElBQUFBO0FBQUQsTUFBUzFHLGFBQUkyRCxLQUFKLENBQVV4RixHQUFWLENBQWY7O0FBQ0EsTUFBSTtBQUNGLFVBQU13SSxhQUFJQyxZQUFKLENBQWlCRixJQUFqQixFQUF1QnRCLFVBQXZCLEVBQW1DO0FBQ3ZDbEYsTUFBQUEsT0FBTyxFQUFFcEI7QUFEOEIsS0FBbkMsQ0FBTjtBQUdELEdBSkQsQ0FJRSxPQUFPK0gsR0FBUCxFQUFZO0FBQ1osVUFBTSxJQUFJakYsS0FBSixDQUFXLCtCQUE4QmlGLEdBQUcsQ0FBQ2hILE9BQVEsRUFBckQsQ0FBTjtBQUNEOztBQUNELFNBQU91RixVQUFQO0FBQ0Q7O0FBZUQsZUFBZVksUUFBZixDQUF5QmMsT0FBekIsRUFBa0NDLE9BQWxDLEVBQTJDdkYsc0JBQTNDLEVBQW1FO0FBQ2pFLFFBQU13RixhQUFJQyxjQUFKLENBQW1CSCxPQUFuQixDQUFOOztBQUVBLE1BQUksQ0FBQ3RHLGdCQUFFMEMsT0FBRixDQUFVMUIsc0JBQVYsQ0FBTCxFQUF3QztBQUN0Q0EsSUFBQUEsc0JBQXNCLEdBQUcsQ0FBQ0Esc0JBQUQsQ0FBekI7QUFDRDs7QUFFRCxRQUFNc0UsT0FBTyxHQUFHLE1BQU1ULGlCQUFRVSxPQUFSLEVBQXRCOztBQUNBLE1BQUk7QUFDRjFILG9CQUFPZ0IsS0FBUCxDQUFjLGNBQWF5SCxPQUFRLEdBQW5DOztBQUNBLFVBQU1JLEtBQUssR0FBRyxJQUFJQyxnQkFBT0MsS0FBWCxHQUFtQkMsS0FBbkIsRUFBZDtBQUNBLFVBQU1DLGlCQUFpQixHQUFHdkksT0FBTyxDQUFDd0ksR0FBUixDQUFZQywwQkFBdEM7QUFDQSxVQUFNQyxjQUFjLEdBQUdqSCxnQkFBRTRDLE9BQUYsQ0FBVWtFLGlCQUFWLEtBQ2xCLENBQUMsQ0FBQyxHQUFELEVBQU0sT0FBTixFQUFlNUYsUUFBZixDQUF3QmxCLGdCQUFFaUIsT0FBRixDQUFVNkYsaUJBQVYsQ0FBeEIsQ0FETjtBQVFBLFVBQU1JLGNBQWMsR0FBRztBQUFDRCxNQUFBQTtBQUFELEtBQXZCOztBQUVBLFFBQUlwRyxjQUFLTSxPQUFMLENBQWFtRixPQUFiLE1BQTBCdEosT0FBOUIsRUFBdUM7QUFDckNhLHNCQUFPZ0IsS0FBUCxDQUFjLDZEQUE0RGdDLGNBQUtDLFFBQUwsQ0FBY3dGLE9BQWQsQ0FBdUIsR0FBakc7O0FBQ0FZLE1BQUFBLGNBQWMsQ0FBQ0MsaUJBQWYsR0FBbUMsTUFBbkM7QUFDRDs7QUFDRCxVQUFNWCxhQUFJWSxZQUFKLENBQWlCZCxPQUFqQixFQUEwQmhCLE9BQTFCLEVBQW1DNEIsY0FBbkMsQ0FBTjtBQUNBLFVBQU1HLFdBQVcsR0FBSSxVQUFTckcsc0JBQXNCLENBQUNwQyxHQUF2QixDQUE0QjBJLEdBQUQsSUFBU0EsR0FBRyxDQUFDQyxPQUFKLENBQVksS0FBWixFQUFtQixFQUFuQixDQUFwQyxFQUE0REMsSUFBNUQsQ0FBaUUsR0FBakUsQ0FBc0UsR0FBcEc7QUFDQSxVQUFNQyxpQkFBaUIsR0FBRyxDQUFDLE1BQU0xSixZQUFHd0QsSUFBSCxDQUFROEYsV0FBUixFQUFxQjtBQUNwRDdGLE1BQUFBLEdBQUcsRUFBRThELE9BRCtDO0FBRXBEN0QsTUFBQUEsTUFBTSxFQUFFO0FBRjRDLEtBQXJCLENBQVAsRUFJdEJpRyxJQUpzQixDQUlqQixDQUFDQyxDQUFELEVBQUlDLENBQUosS0FBVUQsQ0FBQyxDQUFDRSxLQUFGLENBQVFoSCxjQUFLaUgsR0FBYixFQUFrQmhKLE1BQWxCLEdBQTJCOEksQ0FBQyxDQUFDQyxLQUFGLENBQVFoSCxjQUFLaUgsR0FBYixFQUFrQmhKLE1BSnRDLENBQTFCOztBQUtBLFFBQUlrQixnQkFBRTRDLE9BQUYsQ0FBVTZFLGlCQUFWLENBQUosRUFBa0M7QUFDaEM1SixzQkFBT2tLLGFBQVAsQ0FBc0IsK0NBQThDL0csc0JBQXVCLElBQXRFLEdBQ25CakMsY0FBS0MsU0FBTCxDQUFlLFFBQWYsRUFBeUJnQyxzQkFBc0IsQ0FBQ2xDLE1BQWhELEVBQXdELEtBQXhELENBRG1CLEdBRWxCLHNFQUZrQixHQUdsQixJQUFHa0Msc0JBQXVCLEtBQUlqQyxjQUFLQyxTQUFMLENBQWUsV0FBZixFQUE0QmdDLHNCQUFzQixDQUFDbEMsTUFBbkQsRUFBMkQsS0FBM0QsQ0FBa0UsRUFIbkc7QUFJRDs7QUFDRGpCLG9CQUFPZ0IsS0FBUCxDQUFjLGFBQVlFLGNBQUtDLFNBQUwsQ0FBZSxhQUFmLEVBQThCeUksaUJBQWlCLENBQUMzSSxNQUFoRCxFQUF3RCxJQUF4RCxDQUE4RCxHQUEzRSxHQUNWLFNBQVF3SCxPQUFRLFFBQU8wQixJQUFJLENBQUNDLEtBQUwsQ0FBV3ZCLEtBQUssQ0FBQ3dCLFdBQU4sR0FBb0JDLGNBQS9CLENBQStDLE9BQU1WLGlCQUFrQixFQURqRzs7QUFFQSxVQUFNVyxhQUFhLEdBQUdwSSxnQkFBRTJFLEtBQUYsQ0FBUThDLGlCQUFSLENBQXRCOztBQUNBNUosb0JBQU9DLElBQVAsQ0FBYSxhQUFZc0ssYUFBYyx5QkFBdkM7O0FBQ0EsVUFBTUMsT0FBTyxHQUFHeEgsY0FBSzZFLE9BQUwsQ0FBYWEsT0FBYixFQUFzQjFGLGNBQUtDLFFBQUwsQ0FBY3NILGFBQWQsQ0FBdEIsQ0FBaEI7O0FBQ0EsVUFBTXJLLFlBQUd1SyxFQUFILENBQU16SCxjQUFLNkUsT0FBTCxDQUFhSixPQUFiLEVBQXNCOEMsYUFBdEIsQ0FBTixFQUE0Q0MsT0FBNUMsRUFBcUQ7QUFBQ0UsTUFBQUEsTUFBTSxFQUFFO0FBQVQsS0FBckQsQ0FBTjtBQUNBLFdBQU9GLE9BQVA7QUFDRCxHQXRDRCxTQXNDVTtBQUNSLFVBQU10SyxZQUFHQyxNQUFILENBQVVzSCxPQUFWLENBQU47QUFDRDtBQUNGOztBQUVELFNBQVNrRCxpQkFBVCxDQUE0QjdLLEdBQTVCLEVBQWlDO0FBQy9CLFNBQVEsdUNBQUQsQ0FBMEM0RixJQUExQyxDQUErQzVGLEdBQS9DLENBQVA7QUFDRDs7QUFZRCxTQUFTOEssYUFBVCxDQUF3QkMsS0FBeEIsRUFBK0JDLFFBQS9CLEVBQXlDQyxTQUF6QyxFQUFvRDtBQUVsRCxNQUFJNUksZ0JBQUUwQyxPQUFGLENBQVVnRyxLQUFWLENBQUosRUFBc0I7QUFDcEIsV0FBT0EsS0FBSyxDQUFDOUosR0FBTixDQUFXaUssSUFBRCxJQUFVSixhQUFhLENBQUNJLElBQUQsRUFBT0YsUUFBUCxFQUFpQkMsU0FBakIsQ0FBakMsQ0FBUDtBQUNEOztBQUdELE1BQUk1SSxnQkFBRUMsYUFBRixDQUFnQnlJLEtBQWhCLENBQUosRUFBNEI7QUFDMUIsVUFBTUksU0FBUyxHQUFHLEVBQWxCOztBQUNBLFNBQUssSUFBSSxDQUFDQyxHQUFELEVBQU1DLEtBQU4sQ0FBVCxJQUF5QmhKLGdCQUFFaUosT0FBRixDQUFVUCxLQUFWLENBQXpCLEVBQTJDO0FBQ3pDLFlBQU1RLHNCQUFzQixHQUFHVCxhQUFhLENBQUNPLEtBQUQsRUFBUUwsUUFBUixFQUFrQkMsU0FBbEIsQ0FBNUM7O0FBQ0EsVUFBSUcsR0FBRyxLQUFLSixRQUFaLEVBQXNCO0FBQ3BCRyxRQUFBQSxTQUFTLENBQUNGLFNBQUQsQ0FBVCxHQUF1Qk0sc0JBQXZCO0FBQ0QsT0FGRCxNQUVPLElBQUlILEdBQUcsS0FBS0gsU0FBWixFQUF1QjtBQUM1QkUsUUFBQUEsU0FBUyxDQUFDSCxRQUFELENBQVQsR0FBc0JPLHNCQUF0QjtBQUNEOztBQUNESixNQUFBQSxTQUFTLENBQUNDLEdBQUQsQ0FBVCxHQUFpQkcsc0JBQWpCO0FBQ0Q7O0FBQ0QsV0FBT0osU0FBUDtBQUNEOztBQUdELFNBQU9KLEtBQVA7QUFDRDs7QUFRRCxTQUFTUyxjQUFULENBQXlCQyxHQUF6QixFQUE4QjtBQUM1QixNQUFJcEosZ0JBQUUwQyxPQUFGLENBQVUwRyxHQUFWLENBQUosRUFBb0I7QUFDbEIsV0FBT0EsR0FBUDtBQUNEOztBQUVELE1BQUlDLFVBQUo7O0FBQ0EsTUFBSTtBQUNGQSxJQUFBQSxVQUFVLEdBQUdDLElBQUksQ0FBQ25HLEtBQUwsQ0FBV2lHLEdBQVgsQ0FBYjs7QUFDQSxRQUFJcEosZ0JBQUUwQyxPQUFGLENBQVUyRyxVQUFWLENBQUosRUFBMkI7QUFDekIsYUFBT0EsVUFBUDtBQUNEO0FBQ0YsR0FMRCxDQUtFLE9BQU9FLEdBQVAsRUFBWTtBQUNaMUwsb0JBQU91QixJQUFQLENBQWEsMENBQWI7QUFDRDs7QUFDRCxNQUFJWSxnQkFBRXdDLFFBQUYsQ0FBVzRHLEdBQVgsQ0FBSixFQUFxQjtBQUNuQixXQUFPLENBQUNBLEdBQUQsQ0FBUDtBQUNEOztBQUNELFFBQU0sSUFBSWhJLEtBQUosQ0FBVyxpREFBZ0RnSSxHQUFJLEVBQS9ELENBQU47QUFDRDs7QUFTRCxTQUFTSSx1QkFBVCxDQUFrQ0MsR0FBbEMsRUFBdUNDLFNBQVMsR0FBRyxJQUFuRCxFQUF5RDtBQUN2RCxRQUFNQyxZQUFZLEdBQUksR0FBRUYsR0FBRyxDQUFDRyxXQUFKLENBQWdCQyxJQUFLLElBQUdDLGNBQUtDLFdBQUwsQ0FBaUJOLEdBQWpCLEVBQXNCaEYsU0FBdEIsQ0FBZ0MsQ0FBaEMsRUFBbUMsQ0FBbkMsQ0FBc0MsRUFBdEY7QUFDQSxTQUFPaUYsU0FBUyxHQUFJLEdBQUVDLFlBQWEsS0FBSUQsU0FBUyxDQUFDakYsU0FBVixDQUFvQixDQUFwQixFQUF1QixDQUF2QixDQUEwQixHQUFqRCxHQUFzRGtGLFlBQXRFO0FBQ0Q7O2VBR2M7QUFDYnJILEVBQUFBLFlBRGE7QUFDQ2tHLEVBQUFBLGlCQUREO0FBQ29CQyxFQUFBQSxhQURwQjtBQUNtQ1UsRUFBQUEsY0FEbkM7QUFDbURLLEVBQUFBO0FBRG5ELEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IHRlbXBEaXIsIGZzLCB1dGlsLCB6aXAsIG5ldCwgdGltaW5nLCBub2RlIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBMUlUgZnJvbSAnbHJ1LWNhY2hlJztcbmltcG9ydCBBc3luY0xvY2sgZnJvbSAnYXN5bmMtbG9jayc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuXG5jb25zdCBJUEFfRVhUID0gJy5pcGEnO1xuY29uc3QgWklQX0VYVFMgPSBbJy56aXAnLCBJUEFfRVhUXTtcbmNvbnN0IFpJUF9NSU1FX1RZUEVTID0gW1xuICAnYXBwbGljYXRpb24vemlwJyxcbiAgJ2FwcGxpY2F0aW9uL3gtemlwLWNvbXByZXNzZWQnLFxuICAnbXVsdGlwYXJ0L3gtemlwJyxcbl07XG5jb25zdCBDQUNIRURfQVBQU19NQVhfQUdFID0gMTAwMCAqIDYwICogNjAgKiAyNDsgLy8gbXNcbmNvbnN0IE1BWF9DQUNIRURfQVBQUyA9IDEwMjQ7XG5jb25zdCBBUFBMSUNBVElPTlNfQ0FDSEUgPSBuZXcgTFJVKHtcbiAgbWF4OiBNQVhfQ0FDSEVEX0FQUFMsXG4gIHR0bDogQ0FDSEVEX0FQUFNfTUFYX0FHRSwgLy8gZXhwaXJlIGFmdGVyIDI0IGhvdXJzXG4gIHVwZGF0ZUFnZU9uR2V0OiB0cnVlLFxuICBkaXNwb3NlOiAoYXBwLCB7ZnVsbFBhdGh9KSA9PiB7XG4gICAgbG9nZ2VyLmluZm8oYFRoZSBhcHBsaWNhdGlvbiAnJHthcHB9JyBjYWNoZWQgYXQgJyR7ZnVsbFBhdGh9JyBoYXMgYCArXG4gICAgICBgZXhwaXJlZCBhZnRlciAke0NBQ0hFRF9BUFBTX01BWF9BR0V9bXNgKTtcbiAgICBpZiAoZnVsbFBhdGgpIHtcbiAgICAgIGZzLnJpbXJhZihmdWxsUGF0aCk7XG4gICAgfVxuICB9LFxuICBub0Rpc3Bvc2VPblNldDogdHJ1ZSxcbn0pO1xuY29uc3QgQVBQTElDQVRJT05TX0NBQ0hFX0dVQVJEID0gbmV3IEFzeW5jTG9jaygpO1xuY29uc3QgU0FOSVRJWkVfUkVQTEFDRU1FTlQgPSAnLSc7XG5jb25zdCBERUZBVUxUX0JBU0VOQU1FID0gJ2FwcGl1bS1hcHAnO1xuY29uc3QgQVBQX0RPV05MT0FEX1RJTUVPVVRfTVMgPSAxMjAgKiAxMDAwO1xuXG5wcm9jZXNzLm9uKCdleGl0JywgKCkgPT4ge1xuICBpZiAoQVBQTElDQVRJT05TX0NBQ0hFLnNpemUgPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBhcHBQYXRocyA9IFsuLi5BUFBMSUNBVElPTlNfQ0FDSEUudmFsdWVzKCldXG4gICAgLm1hcCgoe2Z1bGxQYXRofSkgPT4gZnVsbFBhdGgpO1xuICBsb2dnZXIuZGVidWcoYFBlcmZvcm1pbmcgY2xlYW51cCBvZiAke2FwcFBhdGhzLmxlbmd0aH0gY2FjaGVkIGAgK1xuICAgIHV0aWwucGx1cmFsaXplKCdhcHBsaWNhdGlvbicsIGFwcFBhdGhzLmxlbmd0aCkpO1xuICBmb3IgKGNvbnN0IGFwcFBhdGggb2YgYXBwUGF0aHMpIHtcbiAgICB0cnkge1xuICAgICAgLy8gQXN5bmNocm9ub3VzIGNhbGxzIGFyZSBub3Qgc3VwcG9ydGVkIGluIG9uRXhpdCBoYW5kbGVyXG4gICAgICBmcy5yaW1yYWZTeW5jKGFwcFBhdGgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci53YXJuKGUubWVzc2FnZSk7XG4gICAgfVxuICB9XG59KTtcblxuXG5hc3luYyBmdW5jdGlvbiByZXRyaWV2ZUhlYWRlcnMgKGxpbmspIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gKGF3YWl0IGF4aW9zKHtcbiAgICAgIHVybDogbGluayxcbiAgICAgIG1ldGhvZDogJ0hFQUQnLFxuICAgICAgdGltZW91dDogNTAwMCxcbiAgICB9KSkuaGVhZGVycztcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci5pbmZvKGBDYW5ub3Qgc2VuZCBIRUFEIHJlcXVlc3QgdG8gJyR7bGlua30nLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gIH1cbiAgcmV0dXJuIHt9O1xufVxuXG5mdW5jdGlvbiBnZXRDYWNoZWRBcHBsaWNhdGlvblBhdGggKGxpbmssIGN1cnJlbnRBcHBQcm9wcyA9IHt9LCBjYWNoZWRBcHBJbmZvID0ge30pIHtcbiAgY29uc3QgcmVmcmVzaCA9ICgpID0+IHtcbiAgICBsb2dnZXIuZGVidWcoYEEgZnJlc2ggY29weSBvZiB0aGUgYXBwbGljYXRpb24gaXMgZ29pbmcgdG8gYmUgZG93bmxvYWRlZCBmcm9tICR7bGlua31gKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICBpZiAoIV8uaXNQbGFpbk9iamVjdChjYWNoZWRBcHBJbmZvKSB8fCAhXy5pc1BsYWluT2JqZWN0KGN1cnJlbnRBcHBQcm9wcykpIHtcbiAgICAvLyBpZiBhbiBpbnZhbGlkIGFyZyBpcyBwYXNzZWQgdGhlbiBhc3N1bWUgY2FjaGUgbWlzc1xuICAgIHJldHVybiByZWZyZXNoKCk7XG4gIH1cblxuICBjb25zdCB7XG4gICAgbGFzdE1vZGlmaWVkOiBjdXJyZW50TW9kaWZpZWQsXG4gICAgaW1tdXRhYmxlOiBjdXJyZW50SW1tdXRhYmxlLFxuICAgIC8vIG1heEFnZSBpcyBpbiBzZWNvbmRzXG4gICAgbWF4QWdlOiBjdXJyZW50TWF4QWdlLFxuICB9ID0gY3VycmVudEFwcFByb3BzO1xuICBjb25zdCB7XG4gICAgLy8gRGF0ZSBpbnN0YW5jZVxuICAgIGxhc3RNb2RpZmllZCxcbiAgICAvLyBib29sZWFuXG4gICAgaW1tdXRhYmxlLFxuICAgIC8vIFVuaXggdGltZSBpbiBtaWxsaXNlY29uZHNcbiAgICB0aW1lc3RhbXAsXG4gICAgZnVsbFBhdGgsXG4gIH0gPSBjYWNoZWRBcHBJbmZvO1xuICBpZiAobGFzdE1vZGlmaWVkICYmIGN1cnJlbnRNb2RpZmllZCkge1xuICAgIGlmIChjdXJyZW50TW9kaWZpZWQuZ2V0VGltZSgpIDw9IGxhc3RNb2RpZmllZC5nZXRUaW1lKCkpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgVGhlIGFwcGxpY2F0aW9uIGF0ICR7bGlua30gaGFzIG5vdCBiZWVuIG1vZGlmaWVkIHNpbmNlICR7bGFzdE1vZGlmaWVkfWApO1xuICAgICAgcmV0dXJuIGZ1bGxQYXRoO1xuICAgIH1cbiAgICBsb2dnZXIuZGVidWcoYFRoZSBhcHBsaWNhdGlvbiBhdCAke2xpbmt9IGhhcyBiZWVuIG1vZGlmaWVkIHNpbmNlICR7bGFzdE1vZGlmaWVkfWApO1xuICAgIHJldHVybiByZWZyZXNoKCk7XG4gIH1cbiAgaWYgKGltbXV0YWJsZSAmJiBjdXJyZW50SW1tdXRhYmxlKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBUaGUgYXBwbGljYXRpb24gYXQgJHtsaW5rfSBpcyBpbW11dGFibGVgKTtcbiAgICByZXR1cm4gZnVsbFBhdGg7XG4gIH1cbiAgaWYgKGN1cnJlbnRNYXhBZ2UgJiYgdGltZXN0YW1wKSB7XG4gICAgY29uc3QgbXNMZWZ0ID0gdGltZXN0YW1wICsgY3VycmVudE1heEFnZSAqIDEwMDAgLSBEYXRlLm5vdygpO1xuICAgIGlmIChtc0xlZnQgPiAwKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYFRoZSBjYWNoZWQgYXBwbGljYXRpb24gJyR7cGF0aC5iYXNlbmFtZShmdWxsUGF0aCl9JyB3aWxsIGV4cGlyZSBpbiAke21zTGVmdCAvIDEwMDB9c2ApO1xuICAgICAgcmV0dXJuIGZ1bGxQYXRoO1xuICAgIH1cbiAgICBsb2dnZXIuZGVidWcoYFRoZSBjYWNoZWQgYXBwbGljYXRpb24gJyR7cGF0aC5iYXNlbmFtZShmdWxsUGF0aCl9JyBoYXMgZXhwaXJlZGApO1xuICB9XG4gIHJldHVybiByZWZyZXNoKCk7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeUFwcEV4dGVuc2lvbiAoYXBwLCBzdXBwb3J0ZWRBcHBFeHRlbnNpb25zKSB7XG4gIGlmIChzdXBwb3J0ZWRBcHBFeHRlbnNpb25zLm1hcChfLnRvTG93ZXIpLmluY2x1ZGVzKF8udG9Mb3dlcihwYXRoLmV4dG5hbWUoYXBwKSkpKSB7XG4gICAgcmV0dXJuIGFwcDtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYE5ldyBhcHAgcGF0aCAnJHthcHB9JyBkaWQgbm90IGhhdmUgYCArXG4gICAgYCR7dXRpbC5wbHVyYWxpemUoJ2V4dGVuc2lvbicsIHN1cHBvcnRlZEFwcEV4dGVuc2lvbnMubGVuZ3RoLCBmYWxzZSl9OiBgICtcbiAgICBzdXBwb3J0ZWRBcHBFeHRlbnNpb25zKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2FsY3VsYXRlRm9sZGVySW50ZWdyaXR5IChmb2xkZXJQYXRoKSB7XG4gIHJldHVybiAoYXdhaXQgZnMuZ2xvYignKiovKicsIHtjd2Q6IGZvbGRlclBhdGgsIHN0cmljdDogZmFsc2UsIG5vc29ydDogdHJ1ZX0pKS5sZW5ndGg7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNhbGN1bGF0ZUZpbGVJbnRlZ3JpdHkgKGZpbGVQYXRoKSB7XG4gIHJldHVybiBhd2FpdCBmcy5oYXNoKGZpbGVQYXRoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNBcHBJbnRlZ3JpdHlPayAoY3VycmVudFBhdGgsIGV4cGVjdGVkSW50ZWdyaXR5ID0ge30pIHtcbiAgaWYgKCFhd2FpdCBmcy5leGlzdHMoY3VycmVudFBhdGgpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRm9sZGVyIGludGVncml0eSBjaGVjayBpcyBzaW1wbGU6XG4gIC8vIFZlcmlmeSB0aGUgcHJldmlvdXMgYW1vdW50IG9mIGZpbGVzIGlzIG5vdCBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgb25lLlxuICAvLyBXZSBkb24ndCB3YW50IHRvIHVzZSBlcXVhbGl0eSBjb21wYXJpc29uIGJlY2F1c2Ugb2YgYW4gYXNzdW1wdGlvbiB0aGF0IHRoZSBPUyBtaWdodFxuICAvLyBjcmVhdGUgc29tZSB1bndhbnRlZCBzZXJ2aWNlIGZpbGVzL2NhY2hlZCBpbnNpZGUgb2YgdGhhdCBmb2xkZXIgb3IgaXRzIHN1YmZvbGRlcnMuXG4gIC8vIE9mYywgdmFsaWRhdGluZyB0aGUgaGFzaCBzdW0gb2YgZWFjaCBmaWxlIChvciBhdCBsZWFzdCBvZiBmaWxlIHBhdGgpIHdvdWxkIGJlIG11Y2hcbiAgLy8gbW9yZSBwcmVjaXNlLCBidXQgd2UgZG9uJ3QgbmVlZCB0byBiZSB2ZXJ5IHByZWNpc2UgaGVyZSBhbmQgYWxzbyBkb24ndCB3YW50IHRvXG4gIC8vIG92ZXJ1c2UgUkFNIGFuZCBoYXZlIGEgcGVyZm9ybWFuY2UgZHJvcC5cbiAgcmV0dXJuIChhd2FpdCBmcy5zdGF0KGN1cnJlbnRQYXRoKSkuaXNEaXJlY3RvcnkoKVxuICAgID8gYXdhaXQgY2FsY3VsYXRlRm9sZGVySW50ZWdyaXR5KGN1cnJlbnRQYXRoKSA+PSBleHBlY3RlZEludGVncml0eT8uZm9sZGVyXG4gICAgOiBhd2FpdCBjYWxjdWxhdGVGaWxlSW50ZWdyaXR5KGN1cnJlbnRQYXRoKSA9PT0gZXhwZWN0ZWRJbnRlZ3JpdHk/LmZpbGU7XG59XG5cbi8qKlxuICogQHR5cGVkZWYgUG9zdFByb2Nlc3NPcHRpb25zXG4gKiBAcHJvcGVydHkgez9PYmplY3R9IGNhY2hlZEFwcEluZm8gVGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcmV2aW91c2x5IGNhY2hlZCBhcHAgaW5zdGFuY2UgKGlmIGV4aXN0cyk6XG4gKiAgICAtIHBhY2thZ2VIYXNoOiBTSEExIGhhc2ggb2YgdGhlIHBhY2thZ2UgaWYgaXQgaXMgYSBmaWxlIGFuZCBub3QgYSBmb2xkZXJcbiAqICAgIC0gbGFzdE1vZGlmaWVkOiBPcHRpb25hbCBEYXRlIGluc3RhbmNlLCB0aGUgdmFsdWUgb2YgZmlsZSdzIGBMYXN0LU1vZGlmaWVkYCBoZWFkZXJcbiAqICAgIC0gaW1tdXRhYmxlOiBPcHRpb25hbCBib29sZWFuIHZhbHVlLiBDb250YWlucyB0cnVlIGlmIHRoZSBmaWxlIGhhcyBhbiBgaW1tdXRhYmxlYCBtYXJrXG4gKiAgICAgICAgICAgICAgICAgaW4gYENhY2hlLWNvbnRyb2xgIGhlYWRlclxuICogICAgLSBtYXhBZ2U6IE9wdGlvbmFsIGludGVnZXIgcmVwcmVzZW50YXRpb24gb2YgYG1heEFnZWAgcGFyYW1ldGVyIGluIGBDYWNoZS1jb250cm9sYCBoZWFkZXJcbiAqICAgIC0gdGltZXN0YW1wOiBUaGUgdGltZXN0YW1wIHRoaXMgaXRlbSBoYXMgYmVlbiBhZGRlZCB0byB0aGUgY2FjaGUgKG1lYXN1cmVkIGluIFVuaXggZXBvY2hcbiAqICAgICAgICAgICAgICAgICBtaWxsaXNlY29uZHMpXG4gKiAgICAtIGludGVncml0eTogQW4gb2JqZWN0IGNvbnRhaW5pbmcgZWl0aGVyIGBmaWxlYCBwcm9wZXJ0eSB3aXRoIFNIQTEgaGFzaCBvZiB0aGUgZmlsZVxuICogICAgICAgICAgICAgICAgIG9yIGBmb2xkZXJgIHByb3BlcnR5IHdpdGggdG90YWwgYW1vdW50IG9mIGNhY2hlZCBmaWxlcyBhbmQgc3ViZm9sZGVyc1xuICogICAgLSBmdWxsUGF0aDogdGhlIGZ1bGwgcGF0aCB0byB0aGUgY2FjaGVkIGFwcFxuICogQHByb3BlcnR5IHtib29sZWFufSBpc1VybCBXaGV0aGVyIHRoZSBhcHAgaGFzIGJlZW4gZG93bmxvYWRlZCBmcm9tIGEgcmVtb3RlIFVSTFxuICogQHByb3BlcnR5IHs/T2JqZWN0fSBoZWFkZXJzIE9wdGlvbmFsIGhlYWRlcnMgb2JqZWN0LiBPbmx5IHByZXNlbnQgaWYgYGlzVXJsYCBpcyB0cnVlIGFuZCBpZiB0aGUgc2VydmVyXG4gKiByZXNwb25kcyB0byBIRUFEIHJlcXVlc3RzLiBBbGwgaGVhZGVyIG5hbWVzIGFyZSBub3JtYWxpemVkIHRvIGxvd2VyY2FzZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcHBQYXRoIEEgc3RyaW5nIGNvbnRhaW5pbmcgZnVsbCBwYXRoIHRvIHRoZSBwcmVwcm9jZXNzZWQgYXBwbGljYXRpb24gcGFja2FnZSAoZWl0aGVyXG4gKiBkb3dubG9hZGVkIG9yIGEgbG9jYWwgb25lKVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgUG9zdFByb2Nlc3NSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcHBQYXRoIFRoZSBmdWxsIHBhc3QgdG8gdGhlIHBvc3QtcHJvY2Vzc2VkIGFwcGxpY2F0aW9uIHBhY2thZ2Ugb24gdGhlXG4gKiBsb2NhbCBmaWxlIHN5c3RlbSAobWlnaHQgYmUgYSBmaWxlIG9yIGEgZm9sZGVyIHBhdGgpXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBDb25maWd1cmVBcHBPcHRpb25zXG4gKiBAcHJvcGVydHkgeyhvYmo6IFBvc3RQcm9jZXNzT3B0aW9ucykgPT4gKFByb21pc2U8UG9zdFByb2Nlc3NSZXN1bHR8dW5kZWZpbmVkPnxQb3N0UHJvY2Vzc1Jlc3VsdHx1bmRlZmluZWQpfSBvblBvc3RQcm9jZXNzXG4gKiBPcHRpb25hbCBmdW5jdGlvbiwgd2hpY2ggc2hvdWxkIGJlIGFwcGxpZWRcbiAqIHRvIHRoZSBhcHBsaWNhdGlvbiBhZnRlciBpdCBpcyBkb3dubG9hZGVkL3ByZXByb2Nlc3NlZC4gVGhpcyBmdW5jdGlvbiBtYXkgYmUgYXN5bmNcbiAqIGFuZCBpcyBleHBlY3RlZCB0byBhY2NlcHQgc2luZ2xlIG9iamVjdCBwYXJhbWV0ZXIuXG4gKiBUaGUgZnVuY3Rpb24gaXMgZXhwZWN0ZWQgdG8gZWl0aGVyIHJldHVybiBhIGZhbHN5IHZhbHVlLCB3aGljaCBtZWFucyB0aGUgYXBwIG11c3Qgbm90IGJlXG4gKiBjYWNoZWQgYW5kIGEgZnJlc2ggY29weSBvZiBpdCBpcyBkb3dubG9hZGVkIGVhY2ggdGltZS4gSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdFxuICogY29udGFpbmluZyBgYXBwUGF0aGAgcHJvcGVydHkgdGhlbiB0aGUgaW50ZWdyaXR5IG9mIGl0IHdpbGwgYmUgdmVyaWZpZWQgYW5kIHN0b3JlZCBpbnRvXG4gKiB0aGUgY2FjaGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBzdXBwb3J0ZWRFeHRlbnNpb25zIExpc3Qgb2Ygc3VwcG9ydGVkIGFwcGxpY2F0aW9uIGV4dGVuc2lvbnMgKFxuICogaW5jbHVkaW5nIHN0YXJ0aW5nIGRvdHMpLiBUaGlzIHByb3BlcnR5IGlzIG1hbmRhdG9yeSBhbmQgbXVzdCBub3QgYmUgZW1wdHkuXG4gKi9cblxuLyoqXG4gKiBQcmVwYXJlcyBhbiBhcHAgdG8gYmUgdXNlZCBpbiBhbiBhdXRvbWF0ZWQgdGVzdC4gVGhlIGFwcCBnZXRzIGNhY2hlZCBhdXRvbWF0aWNhbGx5XG4gKiBpZiBpdCBpcyBhbiBhcmNoaXZlIG9yIGlmIGl0IGlzIGRvd25sb2FkZWQgZnJvbSBhbiBVUkwuXG4gKiBJZiB0aGUgZG93bmxvYWRlZCBhcHAgaGFzIGAuemlwYCBleHRlbnNpb24sIHRoaXMgbWV0aG9kIHdpbGwgdW56aXAgaXQuXG4gKiBUaGUgdW56aXAgZG9lcyBub3Qgd29yayB3aGVuIGBvblBvc3RQcm9jZXNzYCBpcyBwcm92aWRlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwIEVpdGhlciBhIGZ1bGwgcGF0aCB0byB0aGUgYXBwIG9yIGEgcmVtb3RlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW118Q29uZmlndXJlQXBwT3B0aW9uc30gb3B0aW9uc1xuICogQHJldHVybnMgVGhlIGZ1bGwgcGF0aCB0byB0aGUgcmVzdWx0aW5nIGFwcGxpY2F0aW9uIGJ1bmRsZVxuICovXG5hc3luYyBmdW5jdGlvbiBjb25maWd1cmVBcHAgKGFwcCwgb3B0aW9ucyA9IHt9KSB7XG4gIGlmICghXy5pc1N0cmluZyhhcHApKSB7XG4gICAgLy8gaW1tZWRpYXRlbHkgc2hvcnRjaXJjdWl0IGlmIG5vdCBnaXZlbiBhbiBhcHBcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucztcbiAgY29uc3Qge1xuICAgIG9uUG9zdFByb2Nlc3MsXG4gIH0gPSBfLmlzUGxhaW5PYmplY3Qob3B0aW9ucykgPyBvcHRpb25zIDoge307XG4gIGlmIChfLmlzU3RyaW5nKG9wdGlvbnMpKSB7XG4gICAgc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucyA9IFtvcHRpb25zXTtcbiAgfSBlbHNlIGlmIChfLmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICBzdXBwb3J0ZWRBcHBFeHRlbnNpb25zID0gb3B0aW9ucztcbiAgfSBlbHNlIGlmIChfLmlzUGxhaW5PYmplY3Qob3B0aW9ucykpIHtcbiAgICBzdXBwb3J0ZWRBcHBFeHRlbnNpb25zID0gb3B0aW9ucy5zdXBwb3J0ZWRFeHRlbnNpb25zO1xuICB9XG4gIGlmIChfLmlzRW1wdHkoc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE9uZSBvciBtb3JlIHN1cHBvcnRlZCBhcHAgZXh0ZW5zaW9ucyBtdXN0IGJlIHByb3ZpZGVkYCk7XG4gIH1cblxuICBsZXQgbmV3QXBwID0gYXBwO1xuICBsZXQgc2hvdWxkVW56aXBBcHAgPSBmYWxzZTtcbiAgbGV0IHBhY2thZ2VIYXNoID0gbnVsbDtcbiAgbGV0IGhlYWRlcnMgPSBudWxsO1xuICBjb25zdCByZW1vdGVBcHBQcm9wcyA9IHtcbiAgICBsYXN0TW9kaWZpZWQ6IG51bGwsXG4gICAgaW1tdXRhYmxlOiBmYWxzZSxcbiAgICBtYXhBZ2U6IG51bGwsXG4gIH07XG4gIGNvbnN0IHtwcm90b2NvbCwgcGF0aG5hbWV9ID0gdXJsLnBhcnNlKG5ld0FwcCk7XG4gIGNvbnN0IGlzVXJsID0gWydodHRwOicsICdodHRwczonXS5pbmNsdWRlcyhwcm90b2NvbCk7XG5cbiAgY29uc3QgY2FjaGVkQXBwSW5mbyA9IEFQUExJQ0FUSU9OU19DQUNIRS5nZXQoYXBwKTtcblxuICByZXR1cm4gYXdhaXQgQVBQTElDQVRJT05TX0NBQ0hFX0dVQVJELmFjcXVpcmUoYXBwLCBhc3luYyAoKSA9PiB7XG4gICAgaWYgKGlzVXJsKSB7XG4gICAgICAvLyBVc2UgdGhlIGFwcCBmcm9tIHJlbW90ZSBVUkxcbiAgICAgIGxvZ2dlci5pbmZvKGBVc2luZyBkb3dubG9hZGFibGUgYXBwICcke25ld0FwcH0nYCk7XG4gICAgICBoZWFkZXJzID0gYXdhaXQgcmV0cmlldmVIZWFkZXJzKG5ld0FwcCk7XG4gICAgICBpZiAoIV8uaXNFbXB0eShoZWFkZXJzKSkge1xuICAgICAgICBpZiAoaGVhZGVyc1snbGFzdC1tb2RpZmllZCddKSB7XG4gICAgICAgICAgcmVtb3RlQXBwUHJvcHMubGFzdE1vZGlmaWVkID0gbmV3IERhdGUoaGVhZGVyc1snbGFzdC1tb2RpZmllZCddKTtcbiAgICAgICAgfVxuICAgICAgICBsb2dnZXIuZGVidWcoYExhc3QtTW9kaWZpZWQ6ICR7aGVhZGVyc1snbGFzdC1tb2RpZmllZCddfWApO1xuICAgICAgICBpZiAoaGVhZGVyc1snY2FjaGUtY29udHJvbCddKSB7XG4gICAgICAgICAgcmVtb3RlQXBwUHJvcHMuaW1tdXRhYmxlID0gL1xcYmltbXV0YWJsZVxcYi9pLnRlc3QoaGVhZGVyc1snY2FjaGUtY29udHJvbCddKTtcbiAgICAgICAgICBjb25zdCBtYXhBZ2VNYXRjaCA9IC9cXGJtYXgtYWdlPShcXGQrKVxcYi9pLmV4ZWMoaGVhZGVyc1snY2FjaGUtY29udHJvbCddKTtcbiAgICAgICAgICBpZiAobWF4QWdlTWF0Y2gpIHtcbiAgICAgICAgICAgIHJlbW90ZUFwcFByb3BzLm1heEFnZSA9IHBhcnNlSW50KG1heEFnZU1hdGNoWzFdLCAxMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgQ2FjaGUtQ29udHJvbDogJHtoZWFkZXJzWydjYWNoZS1jb250cm9sJ119YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBjYWNoZWRQYXRoID0gZ2V0Q2FjaGVkQXBwbGljYXRpb25QYXRoKGFwcCwgcmVtb3RlQXBwUHJvcHMsIGNhY2hlZEFwcEluZm8pO1xuICAgICAgaWYgKGNhY2hlZFBhdGgpIHtcbiAgICAgICAgaWYgKGF3YWl0IGlzQXBwSW50ZWdyaXR5T2soY2FjaGVkUGF0aCwgY2FjaGVkQXBwSW5mbz8uaW50ZWdyaXR5KSkge1xuICAgICAgICAgIGxvZ2dlci5pbmZvKGBSZXVzaW5nIHByZXZpb3VzbHkgZG93bmxvYWRlZCBhcHBsaWNhdGlvbiBhdCAnJHtjYWNoZWRQYXRofSdgKTtcbiAgICAgICAgICByZXR1cm4gdmVyaWZ5QXBwRXh0ZW5zaW9uKGNhY2hlZFBhdGgsIHN1cHBvcnRlZEFwcEV4dGVuc2lvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGxvZ2dlci5pbmZvKGBUaGUgYXBwbGljYXRpb24gYXQgJyR7Y2FjaGVkUGF0aH0nIGRvZXMgbm90IGV4aXN0IGFueW1vcmUgYCArXG4gICAgICAgICAgYG9yIGl0cyBpbnRlZ3JpdHkgaGFzIGJlZW4gZGFtYWdlZC4gRGVsZXRpbmcgaXQgZnJvbSB0aGUgaW50ZXJuYWwgY2FjaGVgKTtcbiAgICAgICAgQVBQTElDQVRJT05TX0NBQ0hFLmRlbChhcHApO1xuICAgICAgfVxuXG4gICAgICBsZXQgZmlsZU5hbWUgPSBudWxsO1xuICAgICAgY29uc3QgYmFzZW5hbWUgPSBmcy5zYW5pdGl6ZU5hbWUocGF0aC5iYXNlbmFtZShkZWNvZGVVUklDb21wb25lbnQocGF0aG5hbWUpKSwge1xuICAgICAgICByZXBsYWNlbWVudDogU0FOSVRJWkVfUkVQTEFDRU1FTlRcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZXh0bmFtZSA9IHBhdGguZXh0bmFtZShiYXNlbmFtZSk7XG4gICAgICAvLyB0byBkZXRlcm1pbmUgaWYgd2UgbmVlZCB0byB1bnppcCB0aGUgYXBwLCB3ZSBoYXZlIGEgbnVtYmVyIG9mIHBsYWNlc1xuICAgICAgLy8gdG8gbG9vazogY29udGVudCB0eXBlLCBjb250ZW50IGRpc3Bvc2l0aW9uLCBvciB0aGUgZmlsZSBleHRlbnNpb25cbiAgICAgIGlmIChaSVBfRVhUUy5pbmNsdWRlcyhleHRuYW1lKSkge1xuICAgICAgICBmaWxlTmFtZSA9IGJhc2VuYW1lO1xuICAgICAgICBzaG91bGRVbnppcEFwcCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoaGVhZGVyc1snY29udGVudC10eXBlJ10pIHtcbiAgICAgICAgY29uc3QgY3QgPSBoZWFkZXJzWydjb250ZW50LXR5cGUnXTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBDb250ZW50LVR5cGU6ICR7Y3R9YCk7XG4gICAgICAgIC8vIHRoZSBmaWxldHlwZSBtYXkgbm90IGJlIG9idmlvdXMgZm9yIGNlcnRhaW4gdXJscywgc28gY2hlY2sgdGhlIG1pbWUgdHlwZSB0b29cbiAgICAgICAgaWYgKFpJUF9NSU1FX1RZUEVTLnNvbWUoKG1pbWVUeXBlKSA9PiBuZXcgUmVnRXhwKGBcXFxcYiR7Xy5lc2NhcGVSZWdFeHAobWltZVR5cGUpfVxcXFxiYCkudGVzdChjdCkpKSB7XG4gICAgICAgICAgaWYgKCFmaWxlTmFtZSkge1xuICAgICAgICAgICAgZmlsZU5hbWUgPSBgJHtERUZBVUxUX0JBU0VOQU1FfS56aXBgO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzaG91bGRVbnppcEFwcCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChoZWFkZXJzWydjb250ZW50LWRpc3Bvc2l0aW9uJ10gJiYgL15hdHRhY2htZW50L2kudGVzdChoZWFkZXJzWydjb250ZW50LWRpc3Bvc2l0aW9uJ10pKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgQ29udGVudC1EaXNwb3NpdGlvbjogJHtoZWFkZXJzWydjb250ZW50LWRpc3Bvc2l0aW9uJ119YCk7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gL2ZpbGVuYW1lPVwiKFteXCJdKykvaS5leGVjKGhlYWRlcnNbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIGZpbGVOYW1lID0gZnMuc2FuaXRpemVOYW1lKG1hdGNoWzFdLCB7XG4gICAgICAgICAgICByZXBsYWNlbWVudDogU0FOSVRJWkVfUkVQTEFDRU1FTlRcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBzaG91bGRVbnppcEFwcCA9IHNob3VsZFVuemlwQXBwIHx8IFpJUF9FWFRTLmluY2x1ZGVzKHBhdGguZXh0bmFtZShmaWxlTmFtZSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWZpbGVOYW1lKSB7XG4gICAgICAgIC8vIGFzc2lnbiB0aGUgZGVmYXVsdCBmaWxlIG5hbWUgYW5kIHRoZSBleHRlbnNpb24gaWYgbm9uZSBoYXMgYmVlbiBkZXRlY3RlZFxuICAgICAgICBjb25zdCByZXN1bHRpbmdOYW1lID0gYmFzZW5hbWVcbiAgICAgICAgICA/IGJhc2VuYW1lLnN1YnN0cmluZygwLCBiYXNlbmFtZS5sZW5ndGggLSBleHRuYW1lLmxlbmd0aClcbiAgICAgICAgICA6IERFRkFVTFRfQkFTRU5BTUU7XG4gICAgICAgIGxldCByZXN1bHRpbmdFeHQgPSBleHRuYW1lO1xuICAgICAgICBpZiAoIXN1cHBvcnRlZEFwcEV4dGVuc2lvbnMuaW5jbHVkZXMocmVzdWx0aW5nRXh0KSkge1xuICAgICAgICAgIGxvZ2dlci5pbmZvKGBUaGUgY3VycmVudCBmaWxlIGV4dGVuc2lvbiAnJHtyZXN1bHRpbmdFeHR9JyBpcyBub3Qgc3VwcG9ydGVkLiBgICtcbiAgICAgICAgICAgIGBEZWZhdWx0aW5nIHRvICcke18uZmlyc3Qoc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucyl9J2ApO1xuICAgICAgICAgIHJlc3VsdGluZ0V4dCA9IF8uZmlyc3Qoc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZmlsZU5hbWUgPSBgJHtyZXN1bHRpbmdOYW1lfSR7cmVzdWx0aW5nRXh0fWA7XG4gICAgICB9XG4gICAgICBjb25zdCB0YXJnZXRQYXRoID0gYXdhaXQgdGVtcERpci5wYXRoKHtcbiAgICAgICAgcHJlZml4OiBmaWxlTmFtZSxcbiAgICAgICAgc3VmZml4OiAnJyxcbiAgICAgIH0pO1xuICAgICAgbmV3QXBwID0gYXdhaXQgZG93bmxvYWRBcHAobmV3QXBwLCB0YXJnZXRQYXRoKTtcbiAgICB9IGVsc2UgaWYgKGF3YWl0IGZzLmV4aXN0cyhuZXdBcHApKSB7XG4gICAgICAvLyBVc2UgdGhlIGxvY2FsIGFwcFxuICAgICAgbG9nZ2VyLmluZm8oYFVzaW5nIGxvY2FsIGFwcCAnJHtuZXdBcHB9J2ApO1xuICAgICAgc2hvdWxkVW56aXBBcHAgPSBaSVBfRVhUUy5pbmNsdWRlcyhwYXRoLmV4dG5hbWUobmV3QXBwKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBgVGhlIGFwcGxpY2F0aW9uIGF0ICcke25ld0FwcH0nIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhY2Nlc3NpYmxlYDtcbiAgICAgIC8vIHByb3RvY29sIHZhbHVlIGZvciAnQzpcXFxcdGVtcCcgaXMgJ2M6Jywgc28gd2UgY2hlY2sgdGhlIGxlbmd0aCBhcyB3ZWxsXG4gICAgICBpZiAoXy5pc1N0cmluZyhwcm90b2NvbCkgJiYgcHJvdG9jb2wubGVuZ3RoID4gMikge1xuICAgICAgICBlcnJvck1lc3NhZ2UgPSBgVGhlIHByb3RvY29sICcke3Byb3RvY29sfScgdXNlZCBpbiAnJHtuZXdBcHB9JyBpcyBub3Qgc3VwcG9ydGVkLiBgICtcbiAgICAgICAgICBgT25seSBodHRwOiBhbmQgaHR0cHM6IHByb3RvY29scyBhcmUgc3VwcG9ydGVkYDtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGNvbnN0IGlzUGFja2FnZUFGaWxlID0gKGF3YWl0IGZzLnN0YXQobmV3QXBwKSkuaXNGaWxlKCk7XG4gICAgaWYgKGlzUGFja2FnZUFGaWxlKSB7XG4gICAgICBwYWNrYWdlSGFzaCA9IGF3YWl0IGNhbGN1bGF0ZUZpbGVJbnRlZ3JpdHkobmV3QXBwKTtcbiAgICB9XG5cbiAgICBpZiAoaXNQYWNrYWdlQUZpbGUgJiYgc2hvdWxkVW56aXBBcHAgJiYgIV8uaXNGdW5jdGlvbihvblBvc3RQcm9jZXNzKSkge1xuICAgICAgY29uc3QgYXJjaGl2ZVBhdGggPSBuZXdBcHA7XG4gICAgICBpZiAocGFja2FnZUhhc2ggPT09IGNhY2hlZEFwcEluZm8/LnBhY2thZ2VIYXNoKSB7XG4gICAgICAgIGNvbnN0IHtmdWxsUGF0aH0gPSBjYWNoZWRBcHBJbmZvO1xuICAgICAgICBpZiAoYXdhaXQgaXNBcHBJbnRlZ3JpdHlPayhmdWxsUGF0aCwgY2FjaGVkQXBwSW5mbz8uaW50ZWdyaXR5KSkge1xuICAgICAgICAgIGlmIChhcmNoaXZlUGF0aCAhPT0gYXBwKSB7XG4gICAgICAgICAgICBhd2FpdCBmcy5yaW1yYWYoYXJjaGl2ZVBhdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsb2dnZXIuaW5mbyhgV2lsbCByZXVzZSBwcmV2aW91c2x5IGNhY2hlZCBhcHBsaWNhdGlvbiBhdCAnJHtmdWxsUGF0aH0nYCk7XG4gICAgICAgICAgcmV0dXJuIHZlcmlmeUFwcEV4dGVuc2lvbihmdWxsUGF0aCwgc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgbG9nZ2VyLmluZm8oYFRoZSBhcHBsaWNhdGlvbiBhdCAnJHtmdWxsUGF0aH0nIGRvZXMgbm90IGV4aXN0IGFueW1vcmUgYCArXG4gICAgICAgICAgYG9yIGl0cyBpbnRlZ3JpdHkgaGFzIGJlZW4gZGFtYWdlZC4gRGVsZXRpbmcgaXQgZnJvbSB0aGUgY2FjaGVgKTtcbiAgICAgICAgQVBQTElDQVRJT05TX0NBQ0hFLmRlbChhcHApO1xuICAgICAgfVxuICAgICAgY29uc3QgdG1wUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3QXBwID0gYXdhaXQgdW56aXBBcHAoYXJjaGl2ZVBhdGgsIHRtcFJvb3QsIHN1cHBvcnRlZEFwcEV4dGVuc2lvbnMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKG5ld0FwcCAhPT0gYXJjaGl2ZVBhdGggJiYgYXJjaGl2ZVBhdGggIT09IGFwcCkge1xuICAgICAgICAgIGF3YWl0IGZzLnJpbXJhZihhcmNoaXZlUGF0aCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxvZ2dlci5pbmZvKGBVbnppcHBlZCBsb2NhbCBhcHAgdG8gJyR7bmV3QXBwfSdgKTtcbiAgICB9IGVsc2UgaWYgKCFwYXRoLmlzQWJzb2x1dGUobmV3QXBwKSkge1xuICAgICAgbmV3QXBwID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIG5ld0FwcCk7XG4gICAgICBsb2dnZXIud2FybihgVGhlIGN1cnJlbnQgYXBwbGljYXRpb24gcGF0aCAnJHthcHB9JyBpcyBub3QgYWJzb2x1dGUgYCArXG4gICAgICAgIGBhbmQgaGFzIGJlZW4gcmV3cml0dGVuIHRvICcke25ld0FwcH0nLiBDb25zaWRlciB1c2luZyBhYnNvbHV0ZSBwYXRocyByYXRoZXIgdGhhbiByZWxhdGl2ZWApO1xuICAgICAgYXBwID0gbmV3QXBwO1xuICAgIH1cblxuICAgIGNvbnN0IHN0b3JlQXBwSW5DYWNoZSA9IGFzeW5jIChhcHBQYXRoVG9DYWNoZSkgPT4ge1xuICAgICAgY29uc3QgY2FjaGVkRnVsbFBhdGggPSBjYWNoZWRBcHBJbmZvPy5mdWxsUGF0aDtcbiAgICAgIGlmIChjYWNoZWRGdWxsUGF0aCAmJiBjYWNoZWRGdWxsUGF0aCAhPT0gYXBwUGF0aFRvQ2FjaGUpIHtcbiAgICAgICAgYXdhaXQgZnMucmltcmFmKGNhY2hlZEZ1bGxQYXRoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGludGVncml0eSA9IHt9O1xuICAgICAgaWYgKChhd2FpdCBmcy5zdGF0KGFwcFBhdGhUb0NhY2hlKSkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICBpbnRlZ3JpdHkuZm9sZGVyID0gYXdhaXQgY2FsY3VsYXRlRm9sZGVySW50ZWdyaXR5KGFwcFBhdGhUb0NhY2hlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGludGVncml0eS5maWxlID0gYXdhaXQgY2FsY3VsYXRlRmlsZUludGVncml0eShhcHBQYXRoVG9DYWNoZSk7XG4gICAgICB9XG4gICAgICBBUFBMSUNBVElPTlNfQ0FDSEUuc2V0KGFwcCwge1xuICAgICAgICAuLi5yZW1vdGVBcHBQcm9wcyxcbiAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICBwYWNrYWdlSGFzaCxcbiAgICAgICAgaW50ZWdyaXR5LFxuICAgICAgICBmdWxsUGF0aDogYXBwUGF0aFRvQ2FjaGUsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhcHBQYXRoVG9DYWNoZTtcbiAgICB9O1xuXG4gICAgaWYgKF8uaXNGdW5jdGlvbihvblBvc3RQcm9jZXNzKSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb25Qb3N0UHJvY2Vzcyh7XG4gICAgICAgIGNhY2hlZEFwcEluZm86IF8uY2xvbmUoY2FjaGVkQXBwSW5mbyksXG4gICAgICAgIGlzVXJsLFxuICAgICAgICBoZWFkZXJzOiBfLmNsb25lKGhlYWRlcnMpLFxuICAgICAgICBhcHBQYXRoOiBuZXdBcHAsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiAoIXJlc3VsdD8uYXBwUGF0aCB8fCBhcHAgPT09IHJlc3VsdD8uYXBwUGF0aCB8fCAhYXdhaXQgZnMuZXhpc3RzKHJlc3VsdD8uYXBwUGF0aCkpXG4gICAgICAgID8gbmV3QXBwXG4gICAgICAgIDogYXdhaXQgc3RvcmVBcHBJbkNhY2hlKHJlc3VsdC5hcHBQYXRoKTtcbiAgICB9XG5cbiAgICB2ZXJpZnlBcHBFeHRlbnNpb24obmV3QXBwLCBzdXBwb3J0ZWRBcHBFeHRlbnNpb25zKTtcbiAgICByZXR1cm4gKGFwcCAhPT0gbmV3QXBwICYmIChwYWNrYWdlSGFzaCB8fCBfLnZhbHVlcyhyZW1vdGVBcHBQcm9wcykuc29tZShCb29sZWFuKSkpXG4gICAgICA/IGF3YWl0IHN0b3JlQXBwSW5DYWNoZShuZXdBcHApXG4gICAgICA6IG5ld0FwcDtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkQXBwIChhcHAsIHRhcmdldFBhdGgpIHtcbiAgY29uc3Qge2hyZWZ9ID0gdXJsLnBhcnNlKGFwcCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgbmV0LmRvd25sb2FkRmlsZShocmVmLCB0YXJnZXRQYXRoLCB7XG4gICAgICB0aW1lb3V0OiBBUFBfRE9XTkxPQURfVElNRU9VVF9NUyxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZG93bmxvYWQgdGhlIGFwcDogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuICByZXR1cm4gdGFyZ2V0UGF0aDtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgYnVuZGxlIGZyb20gYW4gYXJjaGl2ZSBpbnRvIHRoZSBnaXZlbiBmb2xkZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gemlwUGF0aCBGdWxsIHBhdGggdG8gdGhlIGFyY2hpdmUgY29udGFpbmluZyB0aGUgYnVuZGxlXG4gKiBAcGFyYW0ge3N0cmluZ30gZHN0Um9vdCBGdWxsIHBhdGggdG8gdGhlIGZvbGRlciB3aGVyZSB0aGUgZXh0cmFjdGVkIGJ1bmRsZVxuICogc2hvdWxkIGJlIHBsYWNlZFxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fHN0cmluZ30gc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucyBUaGUgbGlzdCBvZiBleHRlbnNpb25zXG4gKiB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uIGJ1bmRsZSBzdXBwb3J0cywgZm9yIGV4YW1wbGUgWycuYXBrJywgJy5hcGtzJ10gZm9yXG4gKiBBbmRyb2lkIHBhY2thZ2VzXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBGdWxsIHBhdGggdG8gdGhlIGJ1bmRsZSBpbiB0aGUgZGVzdGluYXRpb24gZm9sZGVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGdpdmVuIGFyY2hpdmUgaXMgaW52YWxpZCBvciBubyBhcHBsaWNhdGlvbiBidW5kbGVzXG4gKiBoYXZlIGJlZW4gZm91bmQgaW5zaWRlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHVuemlwQXBwICh6aXBQYXRoLCBkc3RSb290LCBzdXBwb3J0ZWRBcHBFeHRlbnNpb25zKSB7XG4gIGF3YWl0IHppcC5hc3NlcnRWYWxpZFppcCh6aXBQYXRoKTtcblxuICBpZiAoIV8uaXNBcnJheShzdXBwb3J0ZWRBcHBFeHRlbnNpb25zKSkge1xuICAgIHN1cHBvcnRlZEFwcEV4dGVuc2lvbnMgPSBbc3VwcG9ydGVkQXBwRXh0ZW5zaW9uc107XG4gIH1cblxuICBjb25zdCB0bXBSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gIHRyeSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBVbnppcHBpbmcgJyR7emlwUGF0aH0nYCk7XG4gICAgY29uc3QgdGltZXIgPSBuZXcgdGltaW5nLlRpbWVyKCkuc3RhcnQoKTtcbiAgICBjb25zdCB1c2VTeXN0ZW1VbnppcEVudiA9IHByb2Nlc3MuZW52LkFQUElVTV9QUkVGRVJfU1lTVEVNX1VOWklQO1xuICAgIGNvbnN0IHVzZVN5c3RlbVVuemlwID0gXy5pc0VtcHR5KHVzZVN5c3RlbVVuemlwRW52KVxuICAgICAgfHwgIVsnMCcsICdmYWxzZSddLmluY2x1ZGVzKF8udG9Mb3dlcih1c2VTeXN0ZW1VbnppcEVudikpO1xuICAgIC8qKlxuICAgICAqIEF0dGVtcHQgdG8gdXNlIHVzZSB0aGUgc3lzdGVtIGB1bnppcGAgKGUuZy4sIGAvdXNyL2Jpbi91bnppcGApIGR1ZVxuICAgICAqIHRvIHRoZSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBpdCBwcm92aWRlcyBvdmVyIHRoZSBuYXRpdmVcbiAgICAgKiBKUyBcInVuemlwXCIgaW1wbGVtZW50YXRpb24uXG4gICAgICogQHR5cGUge2ltcG9ydCgnQGFwcGl1bS9zdXBwb3J0L2xpYi96aXAnKS5FeHRyYWN0QWxsT3B0aW9uc31cbiAgICAgKi9cbiAgICBjb25zdCBleHRyYWN0aW9uT3B0cyA9IHt1c2VTeXN0ZW1VbnppcH07XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzE0MTAwXG4gICAgaWYgKHBhdGguZXh0bmFtZSh6aXBQYXRoKSA9PT0gSVBBX0VYVCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBFbmZvcmNpbmcgVVRGLTggZW5jb2Rpbmcgb24gdGhlIGV4dHJhY3RlZCBmaWxlIG5hbWVzIGZvciAnJHtwYXRoLmJhc2VuYW1lKHppcFBhdGgpfSdgKTtcbiAgICAgIGV4dHJhY3Rpb25PcHRzLmZpbGVOYW1lc0VuY29kaW5nID0gJ3V0ZjgnO1xuICAgIH1cbiAgICBhd2FpdCB6aXAuZXh0cmFjdEFsbFRvKHppcFBhdGgsIHRtcFJvb3QsIGV4dHJhY3Rpb25PcHRzKTtcbiAgICBjb25zdCBnbG9iUGF0dGVybiA9IGAqKi8qLisoJHtzdXBwb3J0ZWRBcHBFeHRlbnNpb25zLm1hcCgoZXh0KSA9PiBleHQucmVwbGFjZSgvXlxcLi8sICcnKSkuam9pbignfCcpfSlgO1xuICAgIGNvbnN0IHNvcnRlZEJ1bmRsZUl0ZW1zID0gKGF3YWl0IGZzLmdsb2IoZ2xvYlBhdHRlcm4sIHtcbiAgICAgIGN3ZDogdG1wUm9vdCxcbiAgICAgIHN0cmljdDogZmFsc2UsXG4gICAgLy8gR2V0IHRoZSB0b3AgbGV2ZWwgbWF0Y2hcbiAgICB9KSkuc29ydCgoYSwgYikgPT4gYS5zcGxpdChwYXRoLnNlcCkubGVuZ3RoIC0gYi5zcGxpdChwYXRoLnNlcCkubGVuZ3RoKTtcbiAgICBpZiAoXy5pc0VtcHR5KHNvcnRlZEJ1bmRsZUl0ZW1zKSkge1xuICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYEFwcCB1bnppcHBlZCBPSywgYnV0IHdlIGNvdWxkIG5vdCBmaW5kIGFueSAnJHtzdXBwb3J0ZWRBcHBFeHRlbnNpb25zfScgYCArXG4gICAgICAgIHV0aWwucGx1cmFsaXplKCdidW5kbGUnLCBzdXBwb3J0ZWRBcHBFeHRlbnNpb25zLmxlbmd0aCwgZmFsc2UpICtcbiAgICAgICAgYCBpbiBpdC4gTWFrZSBzdXJlIHlvdXIgYXJjaGl2ZSBjb250YWlucyBhdCBsZWFzdCBvbmUgcGFja2FnZSBoYXZpbmcgYCArXG4gICAgICAgIGAnJHtzdXBwb3J0ZWRBcHBFeHRlbnNpb25zfScgJHt1dGlsLnBsdXJhbGl6ZSgnZXh0ZW5zaW9uJywgc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucy5sZW5ndGgsIGZhbHNlKX1gKTtcbiAgICB9XG4gICAgbG9nZ2VyLmRlYnVnKGBFeHRyYWN0ZWQgJHt1dGlsLnBsdXJhbGl6ZSgnYnVuZGxlIGl0ZW0nLCBzb3J0ZWRCdW5kbGVJdGVtcy5sZW5ndGgsIHRydWUpfSBgICtcbiAgICAgIGBmcm9tICcke3ppcFBhdGh9JyBpbiAke01hdGgucm91bmQodGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcyl9bXM6ICR7c29ydGVkQnVuZGxlSXRlbXN9YCk7XG4gICAgY29uc3QgbWF0Y2hlZEJ1bmRsZSA9IF8uZmlyc3Qoc29ydGVkQnVuZGxlSXRlbXMpO1xuICAgIGxvZ2dlci5pbmZvKGBBc3N1bWluZyAnJHttYXRjaGVkQnVuZGxlfScgaXMgdGhlIGNvcnJlY3QgYnVuZGxlYCk7XG4gICAgY29uc3QgZHN0UGF0aCA9IHBhdGgucmVzb2x2ZShkc3RSb290LCBwYXRoLmJhc2VuYW1lKG1hdGNoZWRCdW5kbGUpKTtcbiAgICBhd2FpdCBmcy5tdihwYXRoLnJlc29sdmUodG1wUm9vdCwgbWF0Y2hlZEJ1bmRsZSksIGRzdFBhdGgsIHtta2RpcnA6IHRydWV9KTtcbiAgICByZXR1cm4gZHN0UGF0aDtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcy5yaW1yYWYodG1wUm9vdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNQYWNrYWdlT3JCdW5kbGUgKGFwcCkge1xuICByZXR1cm4gKC9eKFthLXpBLVowLTlcXC1fXStcXC5bYS16QS1aMC05XFwtX10rKSskLykudGVzdChhcHApO1xufVxuXG4vKipcbiAqIEZpbmRzIGFsbCBpbnN0YW5jZXMgJ2ZpcnN0S2V5JyBhbmQgY3JlYXRlIGEgZHVwbGljYXRlIHdpdGggdGhlIGtleSAnc2Vjb25kS2V5JyxcbiAqIERvIHRoZSBzYW1lIHRoaW5nIGluIHJldmVyc2UuIElmIHdlIGZpbmQgJ3NlY29uZEtleScsIGNyZWF0ZSBhIGR1cGxpY2F0ZSB3aXRoIHRoZSBrZXkgJ2ZpcnN0S2V5Jy5cbiAqXG4gKiBUaGlzIHdpbGwgY2F1c2Uga2V5cyB0byBiZSBvdmVyd3JpdHRlbiBpZiB0aGUgb2JqZWN0IGNvbnRhaW5zICdmaXJzdEtleScgYW5kICdzZWNvbmRLZXknLlxuXG4gKiBAcGFyYW0geyp9IGlucHV0IEFueSB0eXBlIG9mIGlucHV0XG4gKiBAcGFyYW0ge1N0cmluZ30gZmlyc3RLZXkgVGhlIGZpcnN0IGtleSB0byBkdXBsaWNhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWNvbmRLZXkgVGhlIHNlY29uZCBrZXkgdG8gZHVwbGljYXRlXG4gKi9cbmZ1bmN0aW9uIGR1cGxpY2F0ZUtleXMgKGlucHV0LCBmaXJzdEtleSwgc2Vjb25kS2V5KSB7XG4gIC8vIElmIGFycmF5IHByb3ZpZGVkLCByZWN1cnNpdmVseSBjYWxsIG9uIGFsbCBlbGVtZW50c1xuICBpZiAoXy5pc0FycmF5KGlucHV0KSkge1xuICAgIHJldHVybiBpbnB1dC5tYXAoKGl0ZW0pID0+IGR1cGxpY2F0ZUtleXMoaXRlbSwgZmlyc3RLZXksIHNlY29uZEtleSkpO1xuICB9XG5cbiAgLy8gSWYgb2JqZWN0LCBjcmVhdGUgZHVwbGljYXRlcyBmb3Iga2V5cyBhbmQgdGhlbiByZWN1cnNpdmVseSBjYWxsIG9uIHZhbHVlc1xuICBpZiAoXy5pc1BsYWluT2JqZWN0KGlucHV0KSkge1xuICAgIGNvbnN0IHJlc3VsdE9iaiA9IHt9O1xuICAgIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBfLnRvUGFpcnMoaW5wdXQpKSB7XG4gICAgICBjb25zdCByZWN1cnNpdmVseUNhbGxlZFZhbHVlID0gZHVwbGljYXRlS2V5cyh2YWx1ZSwgZmlyc3RLZXksIHNlY29uZEtleSk7XG4gICAgICBpZiAoa2V5ID09PSBmaXJzdEtleSkge1xuICAgICAgICByZXN1bHRPYmpbc2Vjb25kS2V5XSA9IHJlY3Vyc2l2ZWx5Q2FsbGVkVmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKGtleSA9PT0gc2Vjb25kS2V5KSB7XG4gICAgICAgIHJlc3VsdE9ialtmaXJzdEtleV0gPSByZWN1cnNpdmVseUNhbGxlZFZhbHVlO1xuICAgICAgfVxuICAgICAgcmVzdWx0T2JqW2tleV0gPSByZWN1cnNpdmVseUNhbGxlZFZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0T2JqO1xuICB9XG5cbiAgLy8gQmFzZSBjYXNlLiBSZXR1cm4gcHJpbWl0aXZlcyB3aXRob3V0IGRvaW5nIGFueXRoaW5nLlxuICByZXR1cm4gaW5wdXQ7XG59XG5cbi8qKlxuICogVGFrZXMgYSBkZXNpcmVkIGNhcGFiaWxpdHkgYW5kIHRyaWVzIHRvIEpTT04ucGFyc2UgaXQgYXMgYW4gYXJyYXksXG4gKiBhbmQgZWl0aGVyIHJldHVybnMgdGhlIHBhcnNlZCBhcnJheSBvciBhIHNpbmdsZXRvbiBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xBcnJheTxTdHJpbmc+fSBjYXAgQSBkZXNpcmVkIGNhcGFiaWxpdHlcbiAqL1xuZnVuY3Rpb24gcGFyc2VDYXBzQXJyYXkgKGNhcCkge1xuICBpZiAoXy5pc0FycmF5KGNhcCkpIHtcbiAgICByZXR1cm4gY2FwO1xuICB9XG5cbiAgbGV0IHBhcnNlZENhcHM7XG4gIHRyeSB7XG4gICAgcGFyc2VkQ2FwcyA9IEpTT04ucGFyc2UoY2FwKTtcbiAgICBpZiAoXy5pc0FycmF5KHBhcnNlZENhcHMpKSB7XG4gICAgICByZXR1cm4gcGFyc2VkQ2FwcztcbiAgICB9XG4gIH0gY2F0Y2ggKGlnbikge1xuICAgIGxvZ2dlci53YXJuKGBGYWlsZWQgdG8gcGFyc2UgY2FwYWJpbGl0eSBhcyBKU09OIGFycmF5YCk7XG4gIH1cbiAgaWYgKF8uaXNTdHJpbmcoY2FwKSkge1xuICAgIHJldHVybiBbY2FwXTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYG11c3QgcHJvdmlkZSBhIHN0cmluZyBvciBKU09OIEFycmF5OyByZWNlaXZlZCAke2NhcH1gKTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHN0cmluZyB0aGF0IHVuaXF1ZWx5IGRlc2NyaWJlcyBkcml2ZXIgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0ge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkNvcmV9IG9iaiBkcml2ZXIgaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nP30gc2Vzc2lvbklkIHNlc3Npb24gaWRlbnRpZmllciAoaWYgZXhpc3RzKVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVEcml2ZXJMb2dQcmVmaXggKG9iaiwgc2Vzc2lvbklkID0gbnVsbCkge1xuICBjb25zdCBpbnN0YW5jZU5hbWUgPSBgJHtvYmouY29uc3RydWN0b3IubmFtZX1AJHtub2RlLmdldE9iamVjdElkKG9iaikuc3Vic3RyaW5nKDAsIDQpfWA7XG4gIHJldHVybiBzZXNzaW9uSWQgPyBgJHtpbnN0YW5jZU5hbWV9ICgke3Nlc3Npb25JZC5zdWJzdHJpbmcoMCwgOCl9KWAgOiBpbnN0YW5jZU5hbWU7XG59XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRHJpdmVySGVscGVyc30gKi9cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29uZmlndXJlQXBwLCBpc1BhY2thZ2VPckJ1bmRsZSwgZHVwbGljYXRlS2V5cywgcGFyc2VDYXBzQXJyYXksIGdlbmVyYXRlRHJpdmVyTG9nUHJlZml4XG59O1xuZXhwb3J0IHtcbiAgY29uZmlndXJlQXBwLCBpc1BhY2thZ2VPckJ1bmRsZSwgZHVwbGljYXRlS2V5cywgcGFyc2VDYXBzQXJyYXksIGdlbmVyYXRlRHJpdmVyTG9nUHJlZml4XG59O1xuIl19
548
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9iYXNlZHJpdmVyL2hlbHBlcnMuanMiXSwibmFtZXMiOlsiSVBBX0VYVCIsIlpJUF9FWFRTIiwiWklQX01JTUVfVFlQRVMiLCJDQUNIRURfQVBQU19NQVhfQUdFIiwiTUFYX0NBQ0hFRF9BUFBTIiwiQVBQTElDQVRJT05TX0NBQ0hFIiwiTFJVIiwibWF4IiwidHRsIiwidXBkYXRlQWdlT25HZXQiLCJkaXNwb3NlIiwiYXBwIiwiZnVsbFBhdGgiLCJsb2dnZXIiLCJpbmZvIiwiZnMiLCJyaW1yYWYiLCJub0Rpc3Bvc2VPblNldCIsIkFQUExJQ0FUSU9OU19DQUNIRV9HVUFSRCIsIkFzeW5jTG9jayIsIlNBTklUSVpFX1JFUExBQ0VNRU5UIiwiREVGQVVMVF9CQVNFTkFNRSIsIkFQUF9ET1dOTE9BRF9USU1FT1VUX01TIiwicHJvY2VzcyIsIm9uIiwic2l6ZSIsImFwcFBhdGhzIiwidmFsdWVzIiwibWFwIiwiZGVidWciLCJsZW5ndGgiLCJ1dGlsIiwicGx1cmFsaXplIiwiYXBwUGF0aCIsInJpbXJhZlN5bmMiLCJlIiwid2FybiIsIm1lc3NhZ2UiLCJyZXRyaWV2ZUhlYWRlcnMiLCJsaW5rIiwidXJsIiwibWV0aG9kIiwidGltZW91dCIsImhlYWRlcnMiLCJnZXRDYWNoZWRBcHBsaWNhdGlvblBhdGgiLCJjdXJyZW50QXBwUHJvcHMiLCJjYWNoZWRBcHBJbmZvIiwicmVmcmVzaCIsIl8iLCJpc1BsYWluT2JqZWN0IiwibGFzdE1vZGlmaWVkIiwiY3VycmVudE1vZGlmaWVkIiwiaW1tdXRhYmxlIiwiY3VycmVudEltbXV0YWJsZSIsIm1heEFnZSIsImN1cnJlbnRNYXhBZ2UiLCJ0aW1lc3RhbXAiLCJnZXRUaW1lIiwibXNMZWZ0IiwiRGF0ZSIsIm5vdyIsInBhdGgiLCJiYXNlbmFtZSIsInZlcmlmeUFwcEV4dGVuc2lvbiIsInN1cHBvcnRlZEFwcEV4dGVuc2lvbnMiLCJ0b0xvd2VyIiwiaW5jbHVkZXMiLCJleHRuYW1lIiwiRXJyb3IiLCJjYWxjdWxhdGVGb2xkZXJJbnRlZ3JpdHkiLCJmb2xkZXJQYXRoIiwiZ2xvYiIsImN3ZCIsInN0cmljdCIsIm5vc29ydCIsImNhbGN1bGF0ZUZpbGVJbnRlZ3JpdHkiLCJmaWxlUGF0aCIsImhhc2giLCJpc0FwcEludGVncml0eU9rIiwiY3VycmVudFBhdGgiLCJleHBlY3RlZEludGVncml0eSIsImV4aXN0cyIsInN0YXQiLCJpc0RpcmVjdG9yeSIsImZvbGRlciIsImZpbGUiLCJjb25maWd1cmVBcHAiLCJvcHRpb25zIiwiaXNTdHJpbmciLCJvblBvc3RQcm9jZXNzIiwiaXNBcnJheSIsInN1cHBvcnRlZEV4dGVuc2lvbnMiLCJpc0VtcHR5IiwibmV3QXBwIiwic2hvdWxkVW56aXBBcHAiLCJwYWNrYWdlSGFzaCIsInJlbW90ZUFwcFByb3BzIiwicHJvdG9jb2wiLCJwYXRobmFtZSIsInBhcnNlIiwiaXNVcmwiLCJnZXQiLCJhY3F1aXJlIiwidGVzdCIsIm1heEFnZU1hdGNoIiwiZXhlYyIsInBhcnNlSW50IiwiY2FjaGVkUGF0aCIsImludGVncml0eSIsImRlbGV0ZSIsImZpbGVOYW1lIiwic2FuaXRpemVOYW1lIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicmVwbGFjZW1lbnQiLCJjdCIsInNvbWUiLCJtaW1lVHlwZSIsIlJlZ0V4cCIsImVzY2FwZVJlZ0V4cCIsIm1hdGNoIiwicmVzdWx0aW5nTmFtZSIsInN1YnN0cmluZyIsInJlc3VsdGluZ0V4dCIsImZpcnN0IiwidGFyZ2V0UGF0aCIsInRlbXBEaXIiLCJwcmVmaXgiLCJzdWZmaXgiLCJkb3dubG9hZEFwcCIsImVycm9yTWVzc2FnZSIsImlzUGFja2FnZUFGaWxlIiwiaXNGaWxlIiwiaXNGdW5jdGlvbiIsImFyY2hpdmVQYXRoIiwidG1wUm9vdCIsIm9wZW5EaXIiLCJ1bnppcEFwcCIsImlzQWJzb2x1dGUiLCJyZXNvbHZlIiwic3RvcmVBcHBJbkNhY2hlIiwiYXBwUGF0aFRvQ2FjaGUiLCJjYWNoZWRGdWxsUGF0aCIsInNldCIsInJlc3VsdCIsImNsb25lIiwiQm9vbGVhbiIsImhyZWYiLCJuZXQiLCJkb3dubG9hZEZpbGUiLCJlcnIiLCJ6aXBQYXRoIiwiZHN0Um9vdCIsInppcCIsImFzc2VydFZhbGlkWmlwIiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsInN0YXJ0IiwidXNlU3lzdGVtVW56aXBFbnYiLCJlbnYiLCJBUFBJVU1fUFJFRkVSX1NZU1RFTV9VTlpJUCIsInVzZVN5c3RlbVVuemlwIiwiZXh0cmFjdGlvbk9wdHMiLCJmaWxlTmFtZXNFbmNvZGluZyIsImV4dHJhY3RBbGxUbyIsImdsb2JQYXR0ZXJuIiwiZXh0IiwicmVwbGFjZSIsImpvaW4iLCJzb3J0ZWRCdW5kbGVJdGVtcyIsInNvcnQiLCJhIiwiYiIsInNwbGl0Iiwic2VwIiwiZXJyb3JBbmRUaHJvdyIsIk1hdGgiLCJyb3VuZCIsImdldER1cmF0aW9uIiwiYXNNaWxsaVNlY29uZHMiLCJtYXRjaGVkQnVuZGxlIiwiZHN0UGF0aCIsIm12IiwibWtkaXJwIiwiaXNQYWNrYWdlT3JCdW5kbGUiLCJkdXBsaWNhdGVLZXlzIiwiaW5wdXQiLCJmaXJzdEtleSIsInNlY29uZEtleSIsIml0ZW0iLCJyZXN1bHRPYmoiLCJrZXkiLCJ2YWx1ZSIsInRvUGFpcnMiLCJyZWN1cnNpdmVseUNhbGxlZFZhbHVlIiwicGFyc2VDYXBzQXJyYXkiLCJjYXAiLCJwYXJzZWRDYXBzIiwiSlNPTiIsImlnbiIsImdlbmVyYXRlRHJpdmVyTG9nUHJlZml4Iiwib2JqIiwic2Vzc2lvbklkIiwiaW5zdGFuY2VOYW1lIiwiY29uc3RydWN0b3IiLCJuYW1lIiwibm9kZSIsImdldE9iamVjdElkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsT0FBTyxHQUFHLE1BQWhCO0FBQ0EsTUFBTUMsUUFBUSxHQUFHLENBQUMsTUFBRCxFQUFTRCxPQUFULENBQWpCO0FBQ0EsTUFBTUUsY0FBYyxHQUFH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YnJILEVBQUFBLFlBRGE7QUFDQ2tHLEVBQUFBLGlCQUREO0FBQ29CQyxFQUFBQSxhQURwQjtBQUNtQ1UsRUFBQUEsY0FEbkM7QUFDbURLLEVBQUFBO0FBRG5ELEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IHRlbXBEaXIsIGZzLCB1dGlsLCB6aXAsIG5ldCwgdGltaW5nLCBub2RlIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBMUlUgZnJvbSAnbHJ1LWNhY2hlJztcbmltcG9ydCBBc3luY0xvY2sgZnJvbSAnYXN5bmMtbG9jayc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuXG5jb25zdCBJUEFfRVhUID0gJy5pcGEnO1xuY29uc3QgWklQX0VYVFMgPSBbJy56aXAnLCBJUEFfRVhUXTtcbmNvbnN0IFpJUF9NSU1FX1RZUEVTID0gW1xuICAnYXBwbGljYXRpb24vemlwJyxcbiAgJ2FwcGxpY2F0aW9uL3gtemlwLWNvbXByZXNzZWQnLFxuICAnbXVsdGlwYXJ0L3gtemlwJyxcbl07XG5jb25zdCBDQUNIRURfQVBQU19NQVhfQUdFID0gMTAwMCAqIDYwICogNjAgKiAyNDsgLy8gbXNcbmNvbnN0IE1BWF9DQUNIRURfQVBQUyA9IDEwMjQ7XG5jb25zdCBBUFBMSUNBVElPTlNfQ0FDSEUgPSBuZXcgTFJVKHtcbiAgbWF4OiBNQVhfQ0FDSEVEX0FQUFMsXG4gIHR0bDogQ0FDSEVEX0FQUFNfTUFYX0FHRSwgLy8gZXhwaXJlIGFmdGVyIDI0IGhvdXJzXG4gIHVwZGF0ZUFnZU9uR2V0OiB0cnVlLFxuICBkaXNwb3NlOiAoYXBwLCB7ZnVsbFBhdGh9KSA9PiB7XG4gICAgbG9nZ2VyLmluZm8oYFRoZSBhcHBsaWNhdGlvbiAnJHthcHB9JyBjYWNoZWQgYXQgJyR7ZnVsbFBhdGh9JyBoYXMgYCArXG4gICAgICBgZXhwaXJlZCBhZnRlciAke0NBQ0hFRF9BUFBTX01BWF9BR0V9bXNgKTtcbiAgICBpZiAoZnVsbFBhdGgpIHtcbiAgICAgIGZzLnJpbXJhZihmdWxsUGF0aCk7XG4gICAgfVxuICB9LFxuICBub0Rpc3Bvc2VPblNldDogdHJ1ZSxcbn0pO1xuY29uc3QgQVBQTElDQVRJT05TX0NBQ0hFX0dVQVJEID0gbmV3IEFzeW5jTG9jaygpO1xuY29uc3QgU0FOSVRJWkVfUkVQTEFDRU1FTlQgPSAnLSc7XG5jb25zdCBERUZBVUxUX0JBU0VOQU1FID0gJ2FwcGl1bS1hcHAnO1xuY29uc3QgQVBQX0RPV05MT0FEX1RJTUVPVVRfTVMgPSAxMjAgKiAxMDAwO1xuXG5wcm9jZXNzLm9uKCdleGl0JywgKCkgPT4ge1xuICBpZiAoQVBQTElDQVRJT05TX0NBQ0hFLnNpemUgPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBhcHBQYXRocyA9IFsuLi5BUFBMSUNBVElPTlNfQ0FDSEUudmFsdWVzKCldXG4gICAgLm1hcCgoe2Z1bGxQYXRofSkgPT4gZnVsbFBhdGgpO1xuICBsb2dnZXIuZGVidWcoYFBlcmZvcm1pbmcgY2xlYW51cCBvZiAke2FwcFBhdGhzLmxlbmd0aH0gY2FjaGVkIGAgK1xuICAgIHV0aWwucGx1cmFsaXplKCdhcHBsaWNhdGlvbicsIGFwcFBhdGhzLmxlbmd0aCkpO1xuICBmb3IgKGNvbnN0IGFwcFBhdGggb2YgYXBwUGF0aHMpIHtcbiAgICB0cnkge1xuICAgICAgLy8gQXN5bmNocm9ub3VzIGNhbGxzIGFyZSBub3Qgc3VwcG9ydGVkIGluIG9uRXhpdCBoYW5kbGVyXG4gICAgICBmcy5yaW1yYWZTeW5jKGFwcFBhdGgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci53YXJuKGUubWVzc2FnZSk7XG4gICAgfVxuICB9XG59KTtcblxuXG5hc3luYyBmdW5jdGlvbiByZXRyaWV2ZUhlYWRlcnMgKGxpbmspIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gKGF3YWl0IGF4aW9zKHtcbiAgICAgIHVybDogbGluayxcbiAgICAgIG1ldGhvZDogJ0hFQUQnLFxuICAgICAgdGltZW91dDogNTAwMCxcbiAgICB9KSkuaGVhZGVycztcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci5pbmZvKGBDYW5ub3Qgc2VuZCBIRUFEIHJlcXVlc3QgdG8gJyR7bGlua30nLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gIH1cbiAgcmV0dXJuIHt9O1xufVxuXG5mdW5jdGlvbiBnZXRDYWNoZWRBcHBsaWNhdGlvblBhdGggKGxpbmssIGN1cnJlbnRBcHBQcm9wcyA9IHt9LCBjYWNoZWRBcHBJbmZvID0ge30pIHtcbiAgY29uc3QgcmVmcmVzaCA9ICgpID0+IHtcbiAgICBsb2dnZXIuZGVidWcoYEEgZnJlc2ggY29weSBvZiB0aGUgYXBwbGljYXRpb24gaXMgZ29pbmcgdG8gYmUgZG93bmxvYWRlZCBmcm9tICR7bGlua31gKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICBpZiAoIV8uaXNQbGFpbk9iamVjdChjYWNoZWRBcHBJbmZvKSB8fCAhXy5pc1BsYWluT2JqZWN0KGN1cnJlbnRBcHBQcm9wcykpIHtcbiAgICAvLyBpZiBhbiBpbnZhbGlkIGFyZyBpcyBwYXNzZWQgdGhlbiBhc3N1bWUgY2FjaGUgbWlzc1xuICAgIHJldHVybiByZWZyZXNoKCk7XG4gIH1cblxuICBjb25zdCB7XG4gICAgbGFzdE1vZGlmaWVkOiBjdXJyZW50TW9kaWZpZWQsXG4gICAgaW1tdXRhYmxlOiBjdXJyZW50SW1tdXRhYmxlLFxuICAgIC8vIG1heEFnZSBpcyBpbiBzZWNvbmRzXG4gICAgbWF4QWdlOiBjdXJyZW50TWF4QWdlLFxuICB9ID0gY3VycmVudEFwcFByb3BzO1xuICBjb25zdCB7XG4gICAgLy8gRGF0ZSBpbnN0YW5jZVxuICAgIGxhc3RNb2RpZmllZCxcbiAgICAvLyBib29sZWFuXG4gICAgaW1tdXRhYmxlLFxuICAgIC8vIFVuaXggdGltZSBpbiBtaWxsaXNlY29uZHNcbiAgICB0aW1lc3RhbXAsXG4gICAgZnVsbFBhdGgsXG4gIH0gPSBjYWNoZWRBcHBJbmZvO1xuICBpZiAobGFzdE1vZGlmaWVkICYmIGN1cnJlbnRNb2RpZmllZCkge1xuICAgIGlmIChjdXJyZW50TW9kaWZpZWQuZ2V0VGltZSgpIDw9IGxhc3RNb2RpZmllZC5nZXRUaW1lKCkpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgVGhlIGFwcGxpY2F0aW9uIGF0ICR7bGlua30gaGFzIG5vdCBiZWVuIG1vZGlmaWVkIHNpbmNlICR7bGFzdE1vZGlmaWVkfWApO1xuICAgICAgcmV0dXJuIGZ1bGxQYXRoO1xuICAgIH1cbiAgICBsb2dnZXIuZGVidWcoYFRoZSBhcHBsaWNhdGlvbiBhdCAke2xpbmt9IGhhcyBiZWVuIG1vZGlmaWVkIHNpbmNlICR7bGFzdE1vZGlmaWVkfWApO1xuICAgIHJldHVybiByZWZyZXNoKCk7XG4gIH1cbiAgaWYgKGltbXV0YWJsZSAmJiBjdXJyZW50SW1tdXRhYmxlKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBUaGUgYXBwbGljYXRpb24gYXQgJHtsaW5rfSBpcyBpbW11dGFibGVgKTtcbiAgICByZXR1cm4gZnVsbFBhdGg7XG4gIH1cbiAgaWYgKGN1cnJlbnRNYXhBZ2UgJiYgdGltZXN0YW1wKSB7XG4gICAgY29uc3QgbXNMZWZ0ID0gdGltZXN0YW1wICsgY3VycmVudE1heEFnZSAqIDEwMDAgLSBEYXRlLm5vdygpO1xuICAgIGlmIChtc0xlZnQgPiAwKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYFRoZSBjYWNoZWQgYXBwbGljYXRpb24gJyR7cGF0aC5iYXNlbmFtZShmdWxsUGF0aCl9JyB3aWxsIGV4cGlyZSBpbiAke21zTGVmdCAvIDEwMDB9c2ApO1xuICAgICAgcmV0dXJuIGZ1bGxQYXRoO1xuICAgIH1cbiAgICBsb2dnZXIuZGVidWcoYFRoZSBjYWNoZWQgYXBwbGljYXRpb24gJyR7cGF0aC5iYXNlbmFtZShmdWxsUGF0aCl9JyBoYXMgZXhwaXJlZGApO1xuICB9XG4gIHJldHVybiByZWZyZXNoKCk7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeUFwcEV4dGVuc2lvbiAoYXBwLCBzdXBwb3J0ZWRBcHBFeHRlbnNpb25zKSB7XG4gIGlmIChzdXBwb3J0ZWRBcHBFeHRlbnNpb25zLm1hcChfLnRvTG93ZXIpLmluY2x1ZGVzKF8udG9Mb3dlcihwYXRoLmV4dG5hbWUoYXBwKSkpKSB7XG4gICAgcmV0dXJuIGFwcDtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYE5ldyBhcHAgcGF0aCAnJHthcHB9JyBkaWQgbm90IGhhdmUgYCArXG4gICAgYCR7dXRpbC5wbHVyYWxpemUoJ2V4dGVuc2lvbicsIHN1cHBvcnRlZEFwcEV4dGVuc2lvbnMubGVuZ3RoLCBmYWxzZSl9OiBgICtcbiAgICBzdXBwb3J0ZWRBcHBFeHRlbnNpb25zKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2FsY3VsYXRlRm9sZGVySW50ZWdyaXR5IChmb2xkZXJQYXRoKSB7XG4gIHJldHVybiAoYXdhaXQgZnMuZ2xvYignKiovKicsIHtjd2Q6IGZvbGRlclBhdGgsIHN0cmljdDogZmFsc2UsIG5vc29ydDogdHJ1ZX0pKS5sZW5ndGg7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNhbGN1bGF0ZUZpbGVJbnRlZ3JpdHkgKGZpbGVQYXRoKSB7XG4gIHJldHVybiBhd2FpdCBmcy5oYXNoKGZpbGVQYXRoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNBcHBJbnRlZ3JpdHlPayAoY3VycmVudFBhdGgsIGV4cGVjdGVkSW50ZWdyaXR5ID0ge30pIHtcbiAgaWYgKCFhd2FpdCBmcy5leGlzdHMoY3VycmVudFBhdGgpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRm9sZGVyIGludGVncml0eSBjaGVjayBpcyBzaW1wbGU6XG4gIC8vIFZlcmlmeSB0aGUgcHJldmlvdXMgYW1vdW50IG9mIGZpbGVzIGlzIG5vdCBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgb25lLlxuICAvLyBXZSBkb24ndCB3YW50IHRvIHVzZSBlcXVhbGl0eSBjb21wYXJpc29uIGJlY2F1c2Ugb2YgYW4gYXNzdW1wdGlvbiB0aGF0IHRoZSBPUyBtaWdodFxuICAvLyBjcmVhdGUgc29tZSB1bndhbnRlZCBzZXJ2aWNlIGZpbGVzL2NhY2hlZCBpbnNpZGUgb2YgdGhhdCBmb2xkZXIgb3IgaXRzIHN1YmZvbGRlcnMuXG4gIC8vIE9mYywgdmFsaWRhdGluZyB0aGUgaGFzaCBzdW0gb2YgZWFjaCBmaWxlIChvciBhdCBsZWFzdCBvZiBmaWxlIHBhdGgpIHdvdWxkIGJlIG11Y2hcbiAgLy8gbW9yZSBwcmVjaXNlLCBidXQgd2UgZG9uJ3QgbmVlZCB0byBiZSB2ZXJ5IHByZWNpc2UgaGVyZSBhbmQgYWxzbyBkb24ndCB3YW50IHRvXG4gIC8vIG92ZXJ1c2UgUkFNIGFuZCBoYXZlIGEgcGVyZm9ybWFuY2UgZHJvcC5cbiAgcmV0dXJuIChhd2FpdCBmcy5zdGF0KGN1cnJlbnRQYXRoKSkuaXNEaXJlY3RvcnkoKVxuICAgID8gYXdhaXQgY2FsY3VsYXRlRm9sZGVySW50ZWdyaXR5KGN1cnJlbnRQYXRoKSA+PSBleHBlY3RlZEludGVncml0eT8uZm9sZGVyXG4gICAgOiBhd2FpdCBjYWxjdWxhdGVGaWxlSW50ZWdyaXR5KGN1cnJlbnRQYXRoKSA9PT0gZXhwZWN0ZWRJbnRlZ3JpdHk/LmZpbGU7XG59XG5cbi8qKlxuICogQHR5cGVkZWYgUG9zdFByb2Nlc3NPcHRpb25zXG4gKiBAcHJvcGVydHkgez9PYmplY3R9IGNhY2hlZEFwcEluZm8gVGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcmV2aW91c2x5IGNhY2hlZCBhcHAgaW5zdGFuY2UgKGlmIGV4aXN0cyk6XG4gKiAgICAtIHBhY2thZ2VIYXNoOiBTSEExIGhhc2ggb2YgdGhlIHBhY2thZ2UgaWYgaXQgaXMgYSBmaWxlIGFuZCBub3QgYSBmb2xkZXJcbiAqICAgIC0gbGFzdE1vZGlmaWVkOiBPcHRpb25hbCBEYXRlIGluc3RhbmNlLCB0aGUgdmFsdWUgb2YgZmlsZSdzIGBMYXN0LU1vZGlmaWVkYCBoZWFkZXJcbiAqICAgIC0gaW1tdXRhYmxlOiBPcHRpb25hbCBib29sZWFuIHZhbHVlLiBDb250YWlucyB0cnVlIGlmIHRoZSBmaWxlIGhhcyBhbiBgaW1tdXRhYmxlYCBtYXJrXG4gKiAgICAgICAgICAgICAgICAgaW4gYENhY2hlLWNvbnRyb2xgIGhlYWRlclxuICogICAgLSBtYXhBZ2U6IE9wdGlvbmFsIGludGVnZXIgcmVwcmVzZW50YXRpb24gb2YgYG1heEFnZWAgcGFyYW1ldGVyIGluIGBDYWNoZS1jb250cm9sYCBoZWFkZXJcbiAqICAgIC0gdGltZXN0YW1wOiBUaGUgdGltZXN0YW1wIHRoaXMgaXRlbSBoYXMgYmVlbiBhZGRlZCB0byB0aGUgY2FjaGUgKG1lYXN1cmVkIGluIFVuaXggZXBvY2hcbiAqICAgICAgICAgICAgICAgICBtaWxsaXNlY29uZHMpXG4gKiAgICAtIGludGVncml0eTogQW4gb2JqZWN0IGNvbnRhaW5pbmcgZWl0aGVyIGBmaWxlYCBwcm9wZXJ0eSB3aXRoIFNIQTEgaGFzaCBvZiB0aGUgZmlsZVxuICogICAgICAgICAgICAgICAgIG9yIGBmb2xkZXJgIHByb3BlcnR5IHdpdGggdG90YWwgYW1vdW50IG9mIGNhY2hlZCBmaWxlcyBhbmQgc3ViZm9sZGVyc1xuICogICAgLSBmdWxsUGF0aDogdGhlIGZ1bGwgcGF0aCB0byB0aGUgY2FjaGVkIGFwcFxuICogQHByb3BlcnR5IHtib29sZWFufSBpc1VybCBXaGV0aGVyIHRoZSBhcHAgaGFzIGJlZW4gZG93bmxvYWRlZCBmcm9tIGEgcmVtb3RlIFVSTFxuICogQHByb3BlcnR5IHs/T2JqZWN0fSBoZWFkZXJzIE9wdGlvbmFsIGhlYWRlcnMgb2JqZWN0LiBPbmx5IHByZXNlbnQgaWYgYGlzVXJsYCBpcyB0cnVlIGFuZCBpZiB0aGUgc2VydmVyXG4gKiByZXNwb25kcyB0byBIRUFEIHJlcXVlc3RzLiBBbGwgaGVhZGVyIG5hbWVzIGFyZSBub3JtYWxpemVkIHRvIGxvd2VyY2FzZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcHBQYXRoIEEgc3RyaW5nIGNvbnRhaW5pbmcgZnVsbCBwYXRoIHRvIHRoZSBwcmVwcm9jZXNzZWQgYXBwbGljYXRpb24gcGFja2FnZSAoZWl0aGVyXG4gKiBkb3dubG9hZGVkIG9yIGEgbG9jYWwgb25lKVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgUG9zdFByb2Nlc3NSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcHBQYXRoIFRoZSBmdWxsIHBhc3QgdG8gdGhlIHBvc3QtcHJvY2Vzc2VkIGFwcGxpY2F0aW9uIHBhY2thZ2Ugb24gdGhlXG4gKiBsb2NhbCBmaWxlIHN5c3RlbSAobWlnaHQgYmUgYSBmaWxlIG9yIGEgZm9sZGVyIHBhdGgpXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBDb25maWd1cmVBcHBPcHRpb25zXG4gKiBAcHJvcGVydHkgeyhvYmo6IFBvc3RQcm9jZXNzT3B0aW9ucykgPT4gKFByb21pc2U8UG9zdFByb2Nlc3NSZXN1bHR8dW5kZWZpbmVkPnxQb3N0UHJvY2Vzc1Jlc3VsdHx1bmRlZmluZWQpfSBvblBvc3RQcm9jZXNzXG4gKiBPcHRpb25hbCBmdW5jdGlvbiwgd2hpY2ggc2hvdWxkIGJlIGFwcGxpZWRcbiAqIHRvIHRoZSBhcHBsaWNhdGlvbiBhZnRlciBpdCBpcyBkb3dubG9hZGVkL3ByZXByb2Nlc3NlZC4gVGhpcyBmdW5jdGlvbiBtYXkgYmUgYXN5bmNcbiAqIGFuZCBpcyBleHBlY3RlZCB0byBhY2NlcHQgc2luZ2xlIG9iamVjdCBwYXJhbWV0ZXIuXG4gKiBUaGUgZnVuY3Rpb24gaXMgZXhwZWN0ZWQgdG8gZWl0aGVyIHJldHVybiBhIGZhbHN5IHZhbHVlLCB3aGljaCBtZWFucyB0aGUgYXBwIG11c3Qgbm90IGJlXG4gKiBjYWNoZWQgYW5kIGEgZnJlc2ggY29weSBvZiBpdCBpcyBkb3dubG9hZGVkIGVhY2ggdGltZS4gSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdFxuICogY29udGFpbmluZyBgYXBwUGF0aGAgcHJvcGVydHkgdGhlbiB0aGUgaW50ZWdyaXR5IG9mIGl0IHdpbGwgYmUgdmVyaWZpZWQgYW5kIHN0b3JlZCBpbnRvXG4gKiB0aGUgY2FjaGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBzdXBwb3J0ZWRFeHRlbnNpb25zIExpc3Qgb2Ygc3VwcG9ydGVkIGFwcGxpY2F0aW9uIGV4dGVuc2lvbnMgKFxuICogaW5jbHVkaW5nIHN0YXJ0aW5nIGRvdHMpLiBUaGlzIHByb3BlcnR5IGlzIG1hbmRhdG9yeSBhbmQgbXVzdCBub3QgYmUgZW1wdHkuXG4gKi9cblxuLyoqXG4gKiBQcmVwYXJlcyBhbiBhcHAgdG8gYmUgdXNlZCBpbiBhbiBhdXRvbWF0ZWQgdGVzdC4gVGhlIGFwcCBnZXRzIGNhY2hlZCBhdXRvbWF0aWNhbGx5XG4gKiBpZiBpdCBpcyBhbiBhcmNoaXZlIG9yIGlmIGl0IGlzIGRvd25sb2FkZWQgZnJvbSBhbiBVUkwuXG4gKiBJZiB0aGUgZG93bmxvYWRlZCBhcHAgaGFzIGAuemlwYCBleHRlbnNpb24sIHRoaXMgbWV0aG9kIHdpbGwgdW56aXAgaXQuXG4gKiBUaGUgdW56aXAgZG9lcyBub3Qgd29yayB3aGVuIGBvblBvc3RQcm9jZXNzYCBpcyBwcm92aWRlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwIEVpdGhlciBhIGZ1bGwgcGF0aCB0byB0aGUgYXBwIG9yIGEgcmVtb3RlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW118Q29uZmlndXJlQXBwT3B0aW9uc30gb3B0aW9uc1xuICogQHJldHVybnMgVGhlIGZ1bGwgcGF0aCB0byB0aGUgcmVzdWx0aW5nIGFwcGxpY2F0aW9uIGJ1bmRsZVxuICovXG5hc3luYyBmdW5jdGlvbiBjb25maWd1cmVBcHAgKGFwcCwgb3B0aW9ucyA9IHt9KSB7XG4gIGlmICghXy5pc1N0cmluZyhhcHApKSB7XG4gICAgLy8gaW1tZWRpYXRlbHkgc2hvcnRjaXJjdWl0IGlmIG5vdCBnaXZlbiBhbiBhcHBcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucztcbiAgY29uc3Qge1xuICAgIG9uUG9zdFByb2Nlc3MsXG4gIH0gPSBfLmlzUGxhaW5PYmplY3Qob3B0aW9ucykgPyBvcHRpb25zIDoge307XG4gIGlmIChfLmlzU3RyaW5nKG9wdGlvbnMpKSB7XG4gICAgc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucyA9IFtvcHRpb25zXTtcbiAgfSBlbHNlIGlmIChfLmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICBzdXBwb3J0ZWRBcHBFeHRlbnNpb25zID0gb3B0aW9ucztcbiAgfSBlbHNlIGlmIChfLmlzUGxhaW5PYmplY3Qob3B0aW9ucykpIHtcbiAgICBzdXBwb3J0ZWRBcHBFeHRlbnNpb25zID0gb3B0aW9ucy5zdXBwb3J0ZWRFeHRlbnNpb25zO1xuICB9XG4gIGlmIChfLmlzRW1wdHkoc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE9uZSBvciBtb3JlIHN1cHBvcnRlZCBhcHAgZXh0ZW5zaW9ucyBtdXN0IGJlIHByb3ZpZGVkYCk7XG4gIH1cblxuICBsZXQgbmV3QXBwID0gYXBwO1xuICBsZXQgc2hvdWxkVW56aXBBcHAgPSBmYWxzZTtcbiAgbGV0IHBhY2thZ2VIYXNoID0gbnVsbDtcbiAgbGV0IGhlYWRlcnMgPSBudWxsO1xuICBjb25zdCByZW1vdGVBcHBQcm9wcyA9IHtcbiAgICBsYXN0TW9kaWZpZWQ6IG51bGwsXG4gICAgaW1tdXRhYmxlOiBmYWxzZSxcbiAgICBtYXhBZ2U6IG51bGwsXG4gIH07XG4gIGNvbnN0IHtwcm90b2NvbCwgcGF0aG5hbWV9ID0gdXJsLnBhcnNlKG5ld0FwcCk7XG4gIGNvbnN0IGlzVXJsID0gWydodHRwOicsICdodHRwczonXS5pbmNsdWRlcyhwcm90b2NvbCk7XG5cbiAgY29uc3QgY2FjaGVkQXBwSW5mbyA9IEFQUExJQ0FUSU9OU19DQUNIRS5nZXQoYXBwKTtcblxuICByZXR1cm4gYXdhaXQgQVBQTElDQVRJT05TX0NBQ0hFX0dVQVJELmFjcXVpcmUoYXBwLCBhc3luYyAoKSA9PiB7XG4gICAgaWYgKGlzVXJsKSB7XG4gICAgICAvLyBVc2UgdGhlIGFwcCBmcm9tIHJlbW90ZSBVUkxcbiAgICAgIGxvZ2dlci5pbmZvKGBVc2luZyBkb3dubG9hZGFibGUgYXBwICcke25ld0FwcH0nYCk7XG4gICAgICBoZWFkZXJzID0gYXdhaXQgcmV0cmlldmVIZWFkZXJzKG5ld0FwcCk7XG4gICAgICBpZiAoIV8uaXNFbXB0eShoZWFkZXJzKSkge1xuICAgICAgICBpZiAoaGVhZGVyc1snbGFzdC1tb2RpZmllZCddKSB7XG4gICAgICAgICAgcmVtb3RlQXBwUHJvcHMubGFzdE1vZGlmaWVkID0gbmV3IERhdGUoaGVhZGVyc1snbGFzdC1tb2RpZmllZCddKTtcbiAgICAgICAgfVxuICAgICAgICBsb2dnZXIuZGVidWcoYExhc3QtTW9kaWZpZWQ6ICR7aGVhZGVyc1snbGFzdC1tb2RpZmllZCddfWApO1xuICAgICAgICBpZiAoaGVhZGVyc1snY2FjaGUtY29udHJvbCddKSB7XG4gICAgICAgICAgcmVtb3RlQXBwUHJvcHMuaW1tdXRhYmxlID0gL1xcYmltbXV0YWJsZVxcYi9pLnRlc3QoaGVhZGVyc1snY2FjaGUtY29udHJvbCddKTtcbiAgICAgICAgICBjb25zdCBtYXhBZ2VNYXRjaCA9IC9cXGJtYXgtYWdlPShcXGQrKVxcYi9pLmV4ZWMoaGVhZGVyc1snY2FjaGUtY29udHJvbCddKTtcbiAgICAgICAgICBpZiAobWF4QWdlTWF0Y2gpIHtcbiAgICAgICAgICAgIHJlbW90ZUFwcFByb3BzLm1heEFnZSA9IHBhcnNlSW50KG1heEFnZU1hdGNoWzFdLCAxMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgQ2FjaGUtQ29udHJvbDogJHtoZWFkZXJzWydjYWNoZS1jb250cm9sJ119YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBjYWNoZWRQYXRoID0gZ2V0Q2FjaGVkQXBwbGljYXRpb25QYXRoKGFwcCwgcmVtb3RlQXBwUHJvcHMsIGNhY2hlZEFwcEluZm8pO1xuICAgICAgaWYgKGNhY2hlZFBhdGgpIHtcbiAgICAgICAgaWYgKGF3YWl0IGlzQXBwSW50ZWdyaXR5T2soY2FjaGVkUGF0aCwgY2FjaGVkQXBwSW5mbz8uaW50ZWdyaXR5KSkge1xuICAgICAgICAgIGxvZ2dlci5pbmZvKGBSZXVzaW5nIHByZXZpb3VzbHkgZG93bmxvYWRlZCBhcHBsaWNhdGlvbiBhdCAnJHtjYWNoZWRQYXRofSdgKTtcbiAgICAgICAgICByZXR1cm4gdmVyaWZ5QXBwRXh0ZW5zaW9uKGNhY2hlZFBhdGgsIHN1cHBvcnRlZEFwcEV4dGVuc2lvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGxvZ2dlci5pbmZvKGBUaGUgYXBwbGljYXRpb24gYXQgJyR7Y2FjaGVkUGF0aH0nIGRvZXMgbm90IGV4aXN0IGFueW1vcmUgYCArXG4gICAgICAgICAgYG9yIGl0cyBpbnRlZ3JpdHkgaGFzIGJlZW4gZGFtYWdlZC4gRGVsZXRpbmcgaXQgZnJvbSB0aGUgaW50ZXJuYWwgY2FjaGVgKTtcbiAgICAgICAgQVBQTElDQVRJT05TX0NBQ0hFLmRlbGV0ZShhcHApO1xuICAgICAgfVxuXG4gICAgICBsZXQgZmlsZU5hbWUgPSBudWxsO1xuICAgICAgY29uc3QgYmFzZW5hbWUgPSBmcy5zYW5pdGl6ZU5hbWUocGF0aC5iYXNlbmFtZShkZWNvZGVVUklDb21wb25lbnQocGF0aG5hbWUpKSwge1xuICAgICAgICByZXBsYWNlbWVudDogU0FOSVRJWkVfUkVQTEFDRU1FTlRcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZXh0bmFtZSA9IHBhdGguZXh0bmFtZShiYXNlbmFtZSk7XG4gICAgICAvLyB0byBkZXRlcm1pbmUgaWYgd2UgbmVlZCB0byB1bnppcCB0aGUgYXBwLCB3ZSBoYXZlIGEgbnVtYmVyIG9mIHBsYWNlc1xuICAgICAgLy8gdG8gbG9vazogY29udGVudCB0eXBlLCBjb250ZW50IGRpc3Bvc2l0aW9uLCBvciB0aGUgZmlsZSBleHRlbnNpb25cbiAgICAgIGlmIChaSVBfRVhUUy5pbmNsdWRlcyhleHRuYW1lKSkge1xuICAgICAgICBmaWxlTmFtZSA9IGJhc2VuYW1lO1xuICAgICAgICBzaG91bGRVbnppcEFwcCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoaGVhZGVyc1snY29udGVudC10eXBlJ10pIHtcbiAgICAgICAgY29uc3QgY3QgPSBoZWFkZXJzWydjb250ZW50LXR5cGUnXTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBDb250ZW50LVR5cGU6ICR7Y3R9YCk7XG4gICAgICAgIC8vIHRoZSBmaWxldHlwZSBtYXkgbm90IGJlIG9idmlvdXMgZm9yIGNlcnRhaW4gdXJscywgc28gY2hlY2sgdGhlIG1pbWUgdHlwZSB0b29cbiAgICAgICAgaWYgKFpJUF9NSU1FX1RZUEVTLnNvbWUoKG1pbWVUeXBlKSA9PiBuZXcgUmVnRXhwKGBcXFxcYiR7Xy5lc2NhcGVSZWdFeHAobWltZVR5cGUpfVxcXFxiYCkudGVzdChjdCkpKSB7XG4gICAgICAgICAgaWYgKCFmaWxlTmFtZSkge1xuICAgICAgICAgICAgZmlsZU5hbWUgPSBgJHtERUZBVUxUX0JBU0VOQU1FfS56aXBgO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzaG91bGRVbnppcEFwcCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChoZWFkZXJzWydjb250ZW50LWRpc3Bvc2l0aW9uJ10gJiYgL15hdHRhY2htZW50L2kudGVzdChoZWFkZXJzWydjb250ZW50LWRpc3Bvc2l0aW9uJ10pKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgQ29udGVudC1EaXNwb3NpdGlvbjogJHtoZWFkZXJzWydjb250ZW50LWRpc3Bvc2l0aW9uJ119YCk7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gL2ZpbGVuYW1lPVwiKFteXCJdKykvaS5leGVjKGhlYWRlcnNbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIGZpbGVOYW1lID0gZnMuc2FuaXRpemVOYW1lKG1hdGNoWzFdLCB7XG4gICAgICAgICAgICByZXBsYWNlbWVudDogU0FOSVRJWkVfUkVQTEFDRU1FTlRcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBzaG91bGRVbnppcEFwcCA9IHNob3VsZFVuemlwQXBwIHx8IFpJUF9FWFRTLmluY2x1ZGVzKHBhdGguZXh0bmFtZShmaWxlTmFtZSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWZpbGVOYW1lKSB7XG4gICAgICAgIC8vIGFzc2lnbiB0aGUgZGVmYXVsdCBmaWxlIG5hbWUgYW5kIHRoZSBleHRlbnNpb24gaWYgbm9uZSBoYXMgYmVlbiBkZXRlY3RlZFxuICAgICAgICBjb25zdCByZXN1bHRpbmdOYW1lID0gYmFzZW5hbWVcbiAgICAgICAgICA/IGJhc2VuYW1lLnN1YnN0cmluZygwLCBiYXNlbmFtZS5sZW5ndGggLSBleHRuYW1lLmxlbmd0aClcbiAgICAgICAgICA6IERFRkFVTFRfQkFTRU5BTUU7XG4gICAgICAgIGxldCByZXN1bHRpbmdFeHQgPSBleHRuYW1lO1xuICAgICAgICBpZiAoIXN1cHBvcnRlZEFwcEV4dGVuc2lvbnMuaW5jbHVkZXMocmVzdWx0aW5nRXh0KSkge1xuICAgICAgICAgIGxvZ2dlci5pbmZvKGBUaGUgY3VycmVudCBmaWxlIGV4dGVuc2lvbiAnJHtyZXN1bHRpbmdFeHR9JyBpcyBub3Qgc3VwcG9ydGVkLiBgICtcbiAgICAgICAgICAgIGBEZWZhdWx0aW5nIHRvICcke18uZmlyc3Qoc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucyl9J2ApO1xuICAgICAgICAgIHJlc3VsdGluZ0V4dCA9IF8uZmlyc3Qoc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZmlsZU5hbWUgPSBgJHtyZXN1bHRpbmdOYW1lfSR7cmVzdWx0aW5nRXh0fWA7XG4gICAgICB9XG4gICAgICBjb25zdCB0YXJnZXRQYXRoID0gYXdhaXQgdGVtcERpci5wYXRoKHtcbiAgICAgICAgcHJlZml4OiBmaWxlTmFtZSxcbiAgICAgICAgc3VmZml4OiAnJyxcbiAgICAgIH0pO1xuICAgICAgbmV3QXBwID0gYXdhaXQgZG93bmxvYWRBcHAobmV3QXBwLCB0YXJnZXRQYXRoKTtcbiAgICB9IGVsc2UgaWYgKGF3YWl0IGZzLmV4aXN0cyhuZXdBcHApKSB7XG4gICAgICAvLyBVc2UgdGhlIGxvY2FsIGFwcFxuICAgICAgbG9nZ2VyLmluZm8oYFVzaW5nIGxvY2FsIGFwcCAnJHtuZXdBcHB9J2ApO1xuICAgICAgc2hvdWxkVW56aXBBcHAgPSBaSVBfRVhUUy5pbmNsdWRlcyhwYXRoLmV4dG5hbWUobmV3QXBwKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBgVGhlIGFwcGxpY2F0aW9uIGF0ICcke25ld0FwcH0nIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhY2Nlc3NpYmxlYDtcbiAgICAgIC8vIHByb3RvY29sIHZhbHVlIGZvciAnQzpcXFxcdGVtcCcgaXMgJ2M6Jywgc28gd2UgY2hlY2sgdGhlIGxlbmd0aCBhcyB3ZWxsXG4gICAgICBpZiAoXy5pc1N0cmluZyhwcm90b2NvbCkgJiYgcHJvdG9jb2wubGVuZ3RoID4gMikge1xuICAgICAgICBlcnJvck1lc3NhZ2UgPSBgVGhlIHByb3RvY29sICcke3Byb3RvY29sfScgdXNlZCBpbiAnJHtuZXdBcHB9JyBpcyBub3Qgc3VwcG9ydGVkLiBgICtcbiAgICAgICAgICBgT25seSBodHRwOiBhbmQgaHR0cHM6IHByb3RvY29scyBhcmUgc3VwcG9ydGVkYDtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGNvbnN0IGlzUGFja2FnZUFGaWxlID0gKGF3YWl0IGZzLnN0YXQobmV3QXBwKSkuaXNGaWxlKCk7XG4gICAgaWYgKGlzUGFja2FnZUFGaWxlKSB7XG4gICAgICBwYWNrYWdlSGFzaCA9IGF3YWl0IGNhbGN1bGF0ZUZpbGVJbnRlZ3JpdHkobmV3QXBwKTtcbiAgICB9XG5cbiAgICBpZiAoaXNQYWNrYWdlQUZpbGUgJiYgc2hvdWxkVW56aXBBcHAgJiYgIV8uaXNGdW5jdGlvbihvblBvc3RQcm9jZXNzKSkge1xuICAgICAgY29uc3QgYXJjaGl2ZVBhdGggPSBuZXdBcHA7XG4gICAgICBpZiAocGFja2FnZUhhc2ggPT09IGNhY2hlZEFwcEluZm8/LnBhY2thZ2VIYXNoKSB7XG4gICAgICAgIGNvbnN0IHtmdWxsUGF0aH0gPSBjYWNoZWRBcHBJbmZvO1xuICAgICAgICBpZiAoYXdhaXQgaXNBcHBJbnRlZ3JpdHlPayhmdWxsUGF0aCwgY2FjaGVkQXBwSW5mbz8uaW50ZWdyaXR5KSkge1xuICAgICAgICAgIGlmIChhcmNoaXZlUGF0aCAhPT0gYXBwKSB7XG4gICAgICAgICAgICBhd2FpdCBmcy5yaW1yYWYoYXJjaGl2ZVBhdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsb2dnZXIuaW5mbyhgV2lsbCByZXVzZSBwcmV2aW91c2x5IGNhY2hlZCBhcHBsaWNhdGlvbiBhdCAnJHtmdWxsUGF0aH0nYCk7XG4gICAgICAgICAgcmV0dXJuIHZlcmlmeUFwcEV4dGVuc2lvbihmdWxsUGF0aCwgc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgbG9nZ2VyLmluZm8oYFRoZSBhcHBsaWNhdGlvbiBhdCAnJHtmdWxsUGF0aH0nIGRvZXMgbm90IGV4aXN0IGFueW1vcmUgYCArXG4gICAgICAgICAgYG9yIGl0cyBpbnRlZ3JpdHkgaGFzIGJlZW4gZGFtYWdlZC4gRGVsZXRpbmcgaXQgZnJvbSB0aGUgY2FjaGVgKTtcbiAgICAgICAgQVBQTElDQVRJT05TX0NBQ0hFLmRlbGV0ZShhcHApO1xuICAgICAgfVxuICAgICAgY29uc3QgdG1wUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3QXBwID0gYXdhaXQgdW56aXBBcHAoYXJjaGl2ZVBhdGgsIHRtcFJvb3QsIHN1cHBvcnRlZEFwcEV4dGVuc2lvbnMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKG5ld0FwcCAhPT0gYXJjaGl2ZVBhdGggJiYgYXJjaGl2ZVBhdGggIT09IGFwcCkge1xuICAgICAgICAgIGF3YWl0IGZzLnJpbXJhZihhcmNoaXZlUGF0aCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxvZ2dlci5pbmZvKGBVbnppcHBlZCBsb2NhbCBhcHAgdG8gJyR7bmV3QXBwfSdgKTtcbiAgICB9IGVsc2UgaWYgKCFwYXRoLmlzQWJzb2x1dGUobmV3QXBwKSkge1xuICAgICAgbmV3QXBwID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIG5ld0FwcCk7XG4gICAgICBsb2dnZXIud2FybihgVGhlIGN1cnJlbnQgYXBwbGljYXRpb24gcGF0aCAnJHthcHB9JyBpcyBub3QgYWJzb2x1dGUgYCArXG4gICAgICAgIGBhbmQgaGFzIGJlZW4gcmV3cml0dGVuIHRvICcke25ld0FwcH0nLiBDb25zaWRlciB1c2luZyBhYnNvbHV0ZSBwYXRocyByYXRoZXIgdGhhbiByZWxhdGl2ZWApO1xuICAgICAgYXBwID0gbmV3QXBwO1xuICAgIH1cblxuICAgIGNvbnN0IHN0b3JlQXBwSW5DYWNoZSA9IGFzeW5jIChhcHBQYXRoVG9DYWNoZSkgPT4ge1xuICAgICAgY29uc3QgY2FjaGVkRnVsbFBhdGggPSBjYWNoZWRBcHBJbmZvPy5mdWxsUGF0aDtcbiAgICAgIGlmIChjYWNoZWRGdWxsUGF0aCAmJiBjYWNoZWRGdWxsUGF0aCAhPT0gYXBwUGF0aFRvQ2FjaGUpIHtcbiAgICAgICAgYXdhaXQgZnMucmltcmFmKGNhY2hlZEZ1bGxQYXRoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGludGVncml0eSA9IHt9O1xuICAgICAgaWYgKChhd2FpdCBmcy5zdGF0KGFwcFBhdGhUb0NhY2hlKSkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICBpbnRlZ3JpdHkuZm9sZGVyID0gYXdhaXQgY2FsY3VsYXRlRm9sZGVySW50ZWdyaXR5KGFwcFBhdGhUb0NhY2hlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGludGVncml0eS5maWxlID0gYXdhaXQgY2FsY3VsYXRlRmlsZUludGVncml0eShhcHBQYXRoVG9DYWNoZSk7XG4gICAgICB9XG4gICAgICBBUFBMSUNBVElPTlNfQ0FDSEUuc2V0KGFwcCwge1xuICAgICAgICAuLi5yZW1vdGVBcHBQcm9wcyxcbiAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICBwYWNrYWdlSGFzaCxcbiAgICAgICAgaW50ZWdyaXR5LFxuICAgICAgICBmdWxsUGF0aDogYXBwUGF0aFRvQ2FjaGUsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhcHBQYXRoVG9DYWNoZTtcbiAgICB9O1xuXG4gICAgaWYgKF8uaXNGdW5jdGlvbihvblBvc3RQcm9jZXNzKSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb25Qb3N0UHJvY2Vzcyh7XG4gICAgICAgIGNhY2hlZEFwcEluZm86IF8uY2xvbmUoY2FjaGVkQXBwSW5mbyksXG4gICAgICAgIGlzVXJsLFxuICAgICAgICBoZWFkZXJzOiBfLmNsb25lKGhlYWRlcnMpLFxuICAgICAgICBhcHBQYXRoOiBuZXdBcHAsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiAoIXJlc3VsdD8uYXBwUGF0aCB8fCBhcHAgPT09IHJlc3VsdD8uYXBwUGF0aCB8fCAhYXdhaXQgZnMuZXhpc3RzKHJlc3VsdD8uYXBwUGF0aCkpXG4gICAgICAgID8gbmV3QXBwXG4gICAgICAgIDogYXdhaXQgc3RvcmVBcHBJbkNhY2hlKHJlc3VsdC5hcHBQYXRoKTtcbiAgICB9XG5cbiAgICB2ZXJpZnlBcHBFeHRlbnNpb24obmV3QXBwLCBzdXBwb3J0ZWRBcHBFeHRlbnNpb25zKTtcbiAgICByZXR1cm4gKGFwcCAhPT0gbmV3QXBwICYmIChwYWNrYWdlSGFzaCB8fCBfLnZhbHVlcyhyZW1vdGVBcHBQcm9wcykuc29tZShCb29sZWFuKSkpXG4gICAgICA/IGF3YWl0IHN0b3JlQXBwSW5DYWNoZShuZXdBcHApXG4gICAgICA6IG5ld0FwcDtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkQXBwIChhcHAsIHRhcmdldFBhdGgpIHtcbiAgY29uc3Qge2hyZWZ9ID0gdXJsLnBhcnNlKGFwcCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgbmV0LmRvd25sb2FkRmlsZShocmVmLCB0YXJnZXRQYXRoLCB7XG4gICAgICB0aW1lb3V0OiBBUFBfRE9XTkxPQURfVElNRU9VVF9NUyxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZG93bmxvYWQgdGhlIGFwcDogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuICByZXR1cm4gdGFyZ2V0UGF0aDtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgYnVuZGxlIGZyb20gYW4gYXJjaGl2ZSBpbnRvIHRoZSBnaXZlbiBmb2xkZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gemlwUGF0aCBGdWxsIHBhdGggdG8gdGhlIGFyY2hpdmUgY29udGFpbmluZyB0aGUgYnVuZGxlXG4gKiBAcGFyYW0ge3N0cmluZ30gZHN0Um9vdCBGdWxsIHBhdGggdG8gdGhlIGZvbGRlciB3aGVyZSB0aGUgZXh0cmFjdGVkIGJ1bmRsZVxuICogc2hvdWxkIGJlIHBsYWNlZFxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fHN0cmluZ30gc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucyBUaGUgbGlzdCBvZiBleHRlbnNpb25zXG4gKiB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uIGJ1bmRsZSBzdXBwb3J0cywgZm9yIGV4YW1wbGUgWycuYXBrJywgJy5hcGtzJ10gZm9yXG4gKiBBbmRyb2lkIHBhY2thZ2VzXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBGdWxsIHBhdGggdG8gdGhlIGJ1bmRsZSBpbiB0aGUgZGVzdGluYXRpb24gZm9sZGVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGdpdmVuIGFyY2hpdmUgaXMgaW52YWxpZCBvciBubyBhcHBsaWNhdGlvbiBidW5kbGVzXG4gKiBoYXZlIGJlZW4gZm91bmQgaW5zaWRlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHVuemlwQXBwICh6aXBQYXRoLCBkc3RSb290LCBzdXBwb3J0ZWRBcHBFeHRlbnNpb25zKSB7XG4gIGF3YWl0IHppcC5hc3NlcnRWYWxpZFppcCh6aXBQYXRoKTtcblxuICBpZiAoIV8uaXNBcnJheShzdXBwb3J0ZWRBcHBFeHRlbnNpb25zKSkge1xuICAgIHN1cHBvcnRlZEFwcEV4dGVuc2lvbnMgPSBbc3VwcG9ydGVkQXBwRXh0ZW5zaW9uc107XG4gIH1cblxuICBjb25zdCB0bXBSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gIHRyeSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBVbnppcHBpbmcgJyR7emlwUGF0aH0nYCk7XG4gICAgY29uc3QgdGltZXIgPSBuZXcgdGltaW5nLlRpbWVyKCkuc3RhcnQoKTtcbiAgICBjb25zdCB1c2VTeXN0ZW1VbnppcEVudiA9IHByb2Nlc3MuZW52LkFQUElVTV9QUkVGRVJfU1lTVEVNX1VOWklQO1xuICAgIGNvbnN0IHVzZVN5c3RlbVVuemlwID0gXy5pc0VtcHR5KHVzZVN5c3RlbVVuemlwRW52KVxuICAgICAgfHwgIVsnMCcsICdmYWxzZSddLmluY2x1ZGVzKF8udG9Mb3dlcih1c2VTeXN0ZW1VbnppcEVudikpO1xuICAgIC8qKlxuICAgICAqIEF0dGVtcHQgdG8gdXNlIHVzZSB0aGUgc3lzdGVtIGB1bnppcGAgKGUuZy4sIGAvdXNyL2Jpbi91bnppcGApIGR1ZVxuICAgICAqIHRvIHRoZSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBpdCBwcm92aWRlcyBvdmVyIHRoZSBuYXRpdmVcbiAgICAgKiBKUyBcInVuemlwXCIgaW1wbGVtZW50YXRpb24uXG4gICAgICogQHR5cGUge2ltcG9ydCgnQGFwcGl1bS9zdXBwb3J0L2xpYi96aXAnKS5FeHRyYWN0QWxsT3B0aW9uc31cbiAgICAgKi9cbiAgICBjb25zdCBleHRyYWN0aW9uT3B0cyA9IHt1c2VTeXN0ZW1VbnppcH07XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzE0MTAwXG4gICAgaWYgKHBhdGguZXh0bmFtZSh6aXBQYXRoKSA9PT0gSVBBX0VYVCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBFbmZvcmNpbmcgVVRGLTggZW5jb2Rpbmcgb24gdGhlIGV4dHJhY3RlZCBmaWxlIG5hbWVzIGZvciAnJHtwYXRoLmJhc2VuYW1lKHppcFBhdGgpfSdgKTtcbiAgICAgIGV4dHJhY3Rpb25PcHRzLmZpbGVOYW1lc0VuY29kaW5nID0gJ3V0ZjgnO1xuICAgIH1cbiAgICBhd2FpdCB6aXAuZXh0cmFjdEFsbFRvKHppcFBhdGgsIHRtcFJvb3QsIGV4dHJhY3Rpb25PcHRzKTtcbiAgICBjb25zdCBnbG9iUGF0dGVybiA9IGAqKi8qLisoJHtzdXBwb3J0ZWRBcHBFeHRlbnNpb25zLm1hcCgoZXh0KSA9PiBleHQucmVwbGFjZSgvXlxcLi8sICcnKSkuam9pbignfCcpfSlgO1xuICAgIGNvbnN0IHNvcnRlZEJ1bmRsZUl0ZW1zID0gKGF3YWl0IGZzLmdsb2IoZ2xvYlBhdHRlcm4sIHtcbiAgICAgIGN3ZDogdG1wUm9vdCxcbiAgICAgIHN0cmljdDogZmFsc2UsXG4gICAgLy8gR2V0IHRoZSB0b3AgbGV2ZWwgbWF0Y2hcbiAgICB9KSkuc29ydCgoYSwgYikgPT4gYS5zcGxpdChwYXRoLnNlcCkubGVuZ3RoIC0gYi5zcGxpdChwYXRoLnNlcCkubGVuZ3RoKTtcbiAgICBpZiAoXy5pc0VtcHR5KHNvcnRlZEJ1bmRsZUl0ZW1zKSkge1xuICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYEFwcCB1bnppcHBlZCBPSywgYnV0IHdlIGNvdWxkIG5vdCBmaW5kIGFueSAnJHtzdXBwb3J0ZWRBcHBFeHRlbnNpb25zfScgYCArXG4gICAgICAgIHV0aWwucGx1cmFsaXplKCdidW5kbGUnLCBzdXBwb3J0ZWRBcHBFeHRlbnNpb25zLmxlbmd0aCwgZmFsc2UpICtcbiAgICAgICAgYCBpbiBpdC4gTWFrZSBzdXJlIHlvdXIgYXJjaGl2ZSBjb250YWlucyBhdCBsZWFzdCBvbmUgcGFja2FnZSBoYXZpbmcgYCArXG4gICAgICAgIGAnJHtzdXBwb3J0ZWRBcHBFeHRlbnNpb25zfScgJHt1dGlsLnBsdXJhbGl6ZSgnZXh0ZW5zaW9uJywgc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucy5sZW5ndGgsIGZhbHNlKX1gKTtcbiAgICB9XG4gICAgbG9nZ2VyLmRlYnVnKGBFeHRyYWN0ZWQgJHt1dGlsLnBsdXJhbGl6ZSgnYnVuZGxlIGl0ZW0nLCBzb3J0ZWRCdW5kbGVJdGVtcy5sZW5ndGgsIHRydWUpfSBgICtcbiAgICAgIGBmcm9tICcke3ppcFBhdGh9JyBpbiAke01hdGgucm91bmQodGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcyl9bXM6ICR7c29ydGVkQnVuZGxlSXRlbXN9YCk7XG4gICAgY29uc3QgbWF0Y2hlZEJ1bmRsZSA9IF8uZmlyc3Qoc29ydGVkQnVuZGxlSXRlbXMpO1xuICAgIGxvZ2dlci5pbmZvKGBBc3N1bWluZyAnJHttYXRjaGVkQnVuZGxlfScgaXMgdGhlIGNvcnJlY3QgYnVuZGxlYCk7XG4gICAgY29uc3QgZHN0UGF0aCA9IHBhdGgucmVzb2x2ZShkc3RSb290LCBwYXRoLmJhc2VuYW1lKG1hdGNoZWRCdW5kbGUpKTtcbiAgICBhd2FpdCBmcy5tdihwYXRoLnJlc29sdmUodG1wUm9vdCwgbWF0Y2hlZEJ1bmRsZSksIGRzdFBhdGgsIHtta2RpcnA6IHRydWV9KTtcbiAgICByZXR1cm4gZHN0UGF0aDtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcy5yaW1yYWYodG1wUm9vdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNQYWNrYWdlT3JCdW5kbGUgKGFwcCkge1xuICByZXR1cm4gKC9eKFthLXpBLVowLTlcXC1fXStcXC5bYS16QS1aMC05XFwtX10rKSskLykudGVzdChhcHApO1xufVxuXG4vKipcbiAqIEZpbmRzIGFsbCBpbnN0YW5jZXMgJ2ZpcnN0S2V5JyBhbmQgY3JlYXRlIGEgZHVwbGljYXRlIHdpdGggdGhlIGtleSAnc2Vjb25kS2V5JyxcbiAqIERvIHRoZSBzYW1lIHRoaW5nIGluIHJldmVyc2UuIElmIHdlIGZpbmQgJ3NlY29uZEtleScsIGNyZWF0ZSBhIGR1cGxpY2F0ZSB3aXRoIHRoZSBrZXkgJ2ZpcnN0S2V5Jy5cbiAqXG4gKiBUaGlzIHdpbGwgY2F1c2Uga2V5cyB0byBiZSBvdmVyd3JpdHRlbiBpZiB0aGUgb2JqZWN0IGNvbnRhaW5zICdmaXJzdEtleScgYW5kICdzZWNvbmRLZXknLlxuXG4gKiBAcGFyYW0geyp9IGlucHV0IEFueSB0eXBlIG9mIGlucHV0XG4gKiBAcGFyYW0ge1N0cmluZ30gZmlyc3RLZXkgVGhlIGZpcnN0IGtleSB0byBkdXBsaWNhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWNvbmRLZXkgVGhlIHNlY29uZCBrZXkgdG8gZHVwbGljYXRlXG4gKi9cbmZ1bmN0aW9uIGR1cGxpY2F0ZUtleXMgKGlucHV0LCBmaXJzdEtleSwgc2Vjb25kS2V5KSB7XG4gIC8vIElmIGFycmF5IHByb3ZpZGVkLCByZWN1cnNpdmVseSBjYWxsIG9uIGFsbCBlbGVtZW50c1xuICBpZiAoXy5pc0FycmF5KGlucHV0KSkge1xuICAgIHJldHVybiBpbnB1dC5tYXAoKGl0ZW0pID0+IGR1cGxpY2F0ZUtleXMoaXRlbSwgZmlyc3RLZXksIHNlY29uZEtleSkpO1xuICB9XG5cbiAgLy8gSWYgb2JqZWN0LCBjcmVhdGUgZHVwbGljYXRlcyBmb3Iga2V5cyBhbmQgdGhlbiByZWN1cnNpdmVseSBjYWxsIG9uIHZhbHVlc1xuICBpZiAoXy5pc1BsYWluT2JqZWN0KGlucHV0KSkge1xuICAgIGNvbnN0IHJlc3VsdE9iaiA9IHt9O1xuICAgIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBfLnRvUGFpcnMoaW5wdXQpKSB7XG4gICAgICBjb25zdCByZWN1cnNpdmVseUNhbGxlZFZhbHVlID0gZHVwbGljYXRlS2V5cyh2YWx1ZSwgZmlyc3RLZXksIHNlY29uZEtleSk7XG4gICAgICBpZiAoa2V5ID09PSBmaXJzdEtleSkge1xuICAgICAgICByZXN1bHRPYmpbc2Vjb25kS2V5XSA9IHJlY3Vyc2l2ZWx5Q2FsbGVkVmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKGtleSA9PT0gc2Vjb25kS2V5KSB7XG4gICAgICAgIHJlc3VsdE9ialtmaXJzdEtleV0gPSByZWN1cnNpdmVseUNhbGxlZFZhbHVlO1xuICAgICAgfVxuICAgICAgcmVzdWx0T2JqW2tleV0gPSByZWN1cnNpdmVseUNhbGxlZFZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0T2JqO1xuICB9XG5cbiAgLy8gQmFzZSBjYXNlLiBSZXR1cm4gcHJpbWl0aXZlcyB3aXRob3V0IGRvaW5nIGFueXRoaW5nLlxuICByZXR1cm4gaW5wdXQ7XG59XG5cbi8qKlxuICogVGFrZXMgYSBkZXNpcmVkIGNhcGFiaWxpdHkgYW5kIHRyaWVzIHRvIEpTT04ucGFyc2UgaXQgYXMgYW4gYXJyYXksXG4gKiBhbmQgZWl0aGVyIHJldHVybnMgdGhlIHBhcnNlZCBhcnJheSBvciBhIHNpbmdsZXRvbiBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xBcnJheTxTdHJpbmc+fSBjYXAgQSBkZXNpcmVkIGNhcGFiaWxpdHlcbiAqL1xuZnVuY3Rpb24gcGFyc2VDYXBzQXJyYXkgKGNhcCkge1xuICBpZiAoXy5pc0FycmF5KGNhcCkpIHtcbiAgICByZXR1cm4gY2FwO1xuICB9XG5cbiAgbGV0IHBhcnNlZENhcHM7XG4gIHRyeSB7XG4gICAgcGFyc2VkQ2FwcyA9IEpTT04ucGFyc2UoY2FwKTtcbiAgICBpZiAoXy5pc0FycmF5KHBhcnNlZENhcHMpKSB7XG4gICAgICByZXR1cm4gcGFyc2VkQ2FwcztcbiAgICB9XG4gIH0gY2F0Y2ggKGlnbikge1xuICAgIGxvZ2dlci53YXJuKGBGYWlsZWQgdG8gcGFyc2UgY2FwYWJpbGl0eSBhcyBKU09OIGFycmF5YCk7XG4gIH1cbiAgaWYgKF8uaXNTdHJpbmcoY2FwKSkge1xuICAgIHJldHVybiBbY2FwXTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYG11c3QgcHJvdmlkZSBhIHN0cmluZyBvciBKU09OIEFycmF5OyByZWNlaXZlZCAke2NhcH1gKTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHN0cmluZyB0aGF0IHVuaXF1ZWx5IGRlc2NyaWJlcyBkcml2ZXIgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0ge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkNvcmV9IG9iaiBkcml2ZXIgaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nP30gc2Vzc2lvbklkIHNlc3Npb24gaWRlbnRpZmllciAoaWYgZXhpc3RzKVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVEcml2ZXJMb2dQcmVmaXggKG9iaiwgc2Vzc2lvbklkID0gbnVsbCkge1xuICBjb25zdCBpbnN0YW5jZU5hbWUgPSBgJHtvYmouY29uc3RydWN0b3IubmFtZX1AJHtub2RlLmdldE9iamVjdElkKG9iaikuc3Vic3RyaW5nKDAsIDQpfWA7XG4gIHJldHVybiBzZXNzaW9uSWQgPyBgJHtpbnN0YW5jZU5hbWV9ICgke3Nlc3Npb25JZC5zdWJzdHJpbmcoMCwgOCl9KWAgOiBpbnN0YW5jZU5hbWU7XG59XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRHJpdmVySGVscGVyc30gKi9cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29uZmlndXJlQXBwLCBpc1BhY2thZ2VPckJ1bmRsZSwgZHVwbGljYXRlS2V5cywgcGFyc2VDYXBzQXJyYXksIGdlbmVyYXRlRHJpdmVyTG9nUHJlZml4XG59O1xuZXhwb3J0IHtcbiAgY29uZmlndXJlQXBwLCBpc1BhY2thZ2VPckJ1bmRsZSwgZHVwbGljYXRlS2V5cywgcGFyc2VDYXBzQXJyYXksIGdlbmVyYXRlRHJpdmVyTG9nUHJlZml4XG59O1xuIl19