truemark-cdk-lib 1.23.1 → 1.24.0

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,2 @@
1
1
  export * from './network-parameters';
2
+ export * from './standard-network';
@@ -15,4 +15,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./network-parameters"), exports);
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzLXZwYy9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVEQUFxQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbmV0d29yay1wYXJhbWV0ZXJzJztcbiJdfQ==
18
+ __exportStar(require("./standard-network"), exports);
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzLXZwYy9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVEQUFxQztBQUNyQyxxREFBbUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL25ldHdvcmstcGFyYW1ldGVycyc7XG5leHBvcnQgKiBmcm9tICcuL3N0YW5kYXJkLW5ldHdvcmsnO1xuIl19
@@ -1,6 +1,6 @@
1
1
  import { StringListParameter, StringParameter } from 'aws-cdk-lib/aws-ssm';
2
2
  import type { Construct } from 'constructs';
3
- import { ExtendedConstruct, type ExtendedConstructProps } from '../../aws-cdk/index';
3
+ import { ExtendedConstruct, type ExtendedConstructProps } from '../../aws-cdk';
4
4
  /**
5
5
  * Properties for NetworkParameters.
6
6
  */
@@ -2,13 +2,13 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.NetworkParameters = void 0;
4
4
  const aws_ssm_1 = require("aws-cdk-lib/aws-ssm");
5
- const index_1 = require("../../aws-cdk/index");
5
+ const aws_cdk_1 = require("../../aws-cdk");
6
6
  const truemark_1 = require("../../truemark");
7
7
  /**
8
8
  * Stores and retrieves network infrastructure identifiers using
9
9
  * AWS Systems Manager Parameter Store.
10
10
  */
11
- class NetworkParameters extends index_1.ExtendedConstruct {
11
+ class NetworkParameters extends aws_cdk_1.ExtendedConstruct {
12
12
  /**
13
13
  * Creates a new NetworkParameters instance.
14
14
  *
@@ -19,7 +19,7 @@ class NetworkParameters extends index_1.ExtendedConstruct {
19
19
  constructor(scope, id, props) {
20
20
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z;
21
21
  super(scope, id, {
22
- standardTags: index_1.StandardTags.merge(props.standardTags, truemark_1.LibStandardTags),
22
+ standardTags: aws_cdk_1.StandardTags.merge(props.standardTags, truemark_1.LibStandardTags),
23
23
  });
24
24
  const create = (_a = props.create) !== null && _a !== void 0 ? _a : true;
25
25
  const prefix = (_b = props.prefix) !== null && _b !== void 0 ? _b : '/network';
@@ -304,4 +304,4 @@ class NetworkParameters extends index_1.ExtendedConstruct {
304
304
  }
305
305
  }
306
306
  exports.NetworkParameters = NetworkParameters;
307
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay1wYXJhbWV0ZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy12cGMvbGliL25ldHdvcmstcGFyYW1ldGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpREFBeUU7QUFFekUsK0NBSTZCO0FBQzdCLDZDQUErQztBQXNTL0M7OztHQUdHO0FBQ0gsTUFBYSxpQkFBa0IsU0FBUSx5QkFBaUI7SUEyVXREOzs7Ozs7T0FNRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNkI7O1FBQ3JFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsWUFBWSxFQUFFLG9CQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsMEJBQWUsQ0FBQztTQUN0RSxDQUFDLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFBLEtBQUssQ0FBQyxNQUFNLG1DQUFJLElBQUksQ0FBQztRQUNwQyxNQUFNLE1BQU0sR0FBRyxNQUFBLEtBQUssQ0FBQyxNQUFNLG1DQUFJLFVBQVUsQ0FBQztRQUMxQyxNQUFNLElBQUksR0FBRyxHQUFHLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEdBQUcsSUFBSSxNQUFNLENBQUM7UUFDdEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEdBQUcsSUFBSSxNQUFNLENBQUM7UUFDdEMsSUFBSSxDQUFDLDBCQUEwQixHQUFHLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQztRQUMzRCxJQUFJLENBQUMsMkJBQTJCLEdBQUcsR0FBRyxJQUFJLGtCQUFrQixDQUFDO1FBQzdELElBQUksQ0FBQyx5QkFBeUIsR0FBRyxHQUFHLElBQUksZ0JBQWdCLENBQUM7UUFDekQsSUFBSSxDQUFDLDRCQUE0QixHQUFHLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQztRQUMvRCxJQUFJLENBQUMsNEJBQTRCLEdBQUcsR0FBRyxJQUFJLG1CQUFtQixDQUFDO1FBQy9ELElBQUksQ0FBQywrQkFBK0IsR0FBRyxHQUFHLElBQUksc0JBQXNCLENBQUM7UUFDckUsSUFBSSxDQUFDLDJCQUEyQixHQUFHLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQztRQUM3RCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsR0FBRyxJQUFJLGNBQWMsQ0FBQztRQUNyRCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsR0FBRyxJQUFJLGVBQWUsQ0FBQztRQUN2RCxJQUFJLENBQUMsa0NBQWtDLEdBQUcsR0FBRyxJQUFJLDBCQUEwQixDQUFDO1FBQzVFLElBQUksQ0FBQyxtQ0FBbUMsR0FBRyxHQUFHLElBQUksMkJBQTJCLENBQUM7UUFDOUUsSUFBSSxDQUFDLDBCQUEwQixHQUFHLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQztRQUM1RCxJQUFJLENBQUMsMkJBQTJCLEdBQUcsR0FBRyxJQUFJLG1CQUFtQixDQUFDO1FBQzlELElBQUksQ0FBQyxxQ0FBcUMsR0FBRyxHQUFHLElBQUksOEJBQThCLENBQUM7UUFDbkYsSUFBSSxDQUFDLHNDQUFzQyxHQUFHLEdBQUcsSUFBSSwrQkFBK0IsQ0FBQztRQUNyRixJQUFJLENBQUMsOEJBQThCLEdBQUcsR0FBRyxJQUFJLHFCQUFxQixDQUFDO1FBQ25FLElBQUksQ0FBQywrQkFBK0IsR0FBRyxHQUFHLElBQUksc0JBQXNCLENBQUM7UUFDckUsSUFBSSxDQUFDLGtDQUFrQyxHQUFHLEdBQUcsSUFBSSx5QkFBeUIsQ0FBQztRQUMzRSxJQUFJLENBQUMsdUJBQXVCLEdBQUcsR0FBRyxJQUFJLGNBQWMsQ0FBQztRQUNyRCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsR0FBRyxJQUFJLGVBQWUsQ0FBQztRQUV2RCxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2hCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSx5QkFBZSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUU7b0JBQ3JELGFBQWEsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO29CQUNwQyxXQUFXLEVBQUUsS0FBSyxDQUFDLEtBQUs7aUJBQ3pCLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDM0IsQ0FBQztZQUNELElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNkLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSw2QkFBbUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO29CQUN2RCxhQUFhLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtvQkFDcEMsZUFBZSxFQUFFLEtBQUssQ0FBQyxHQUFHO2lCQUMzQixDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDO1lBQ3ZCLENBQUM7WUFDRCxJQUFJLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksNkJBQW1CLENBQ25ELElBQUksRUFDSixlQUFlLEVBQ2Y7b0JBQ0UsYUFBYSxFQUFFLElBQUksQ0FBQywwQkFBMEI7b0JBQzlDLGVBQWUsRUFBRSxLQUFLLENBQUMsZUFBZTtpQkFDdkMsQ0FDRixDQUFDO2dCQUNGLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDO1lBQ2hELENBQUM7WUFDRCxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSw2QkFBbUIsQ0FDcEQsSUFBSSxFQUNKLGdCQUFnQixFQUNoQjtvQkFDRSxhQUFhLEVBQUUsSUFBSSxDQUFDLDJCQUEyQjtvQkFDL0MsZUFBZSxFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7aUJBQ3hDLENBQ0YsQ0FBQztnQkFDRixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDO1lBQ2pELENBQUM7WUFDRCxJQUFJLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksNkJBQW1CLENBQ2xELElBQUksRUFDSixjQUFjLEVBQ2Q7b0JBQ0UsYUFBYSxFQUFFLElBQUksQ0FBQyx5QkFBeUI7b0JBQzdDLGVBQWUsRUFBRSxLQUFLLENBQUMsY0FBYztpQkFDdEMsQ0FDRixDQUFDO2dCQUNGLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQztZQUM3QyxDQUFDO1lBQ0QsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksNkJBQW1CLENBQ3JELElBQUksRUFDSixpQkFBaUIsRUFDakI7b0JBQ0UsYUFBYSxFQUFFLElBQUksQ0FBQyw0QkFBNEI7b0JBQ2hELGVBQWUsRUFBRSxLQUFLLENBQUMsaUJBQWlCO2lCQUN6QyxDQUNGLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztZQUNuRCxDQUFDO1lBQ0QsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksNkJBQW1CLENBQ3JELElBQUksRUFDSixpQkFBaUIsRUFDakI7b0JBQ0UsYUFBYSxFQUFFLElBQUksQ0FBQyw0QkFBNEI7b0JBQ2hELGVBQWUsRUFBRSxLQUFLLENBQUMsaUJBQWlCO2lCQUN6QyxDQUNGLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztZQUNuRCxDQUFDO1lBQ0QsSUFBSSxLQUFLLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksNkJBQW1CLENBQ3hELElBQUksRUFDSixvQkFBb0IsRUFDcEI7b0JBQ0UsYUFBYSxFQUFFLElBQUksQ0FBQywrQkFBK0I7b0JBQ25ELGVBQWUsRUFBRSxLQUFLLENBQUMsb0JBQW9CO2lCQUM1QyxDQUNGLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQztZQUN6RCxDQUFDO1lBQ0QsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksNkJBQW1CLENBQ25ELElBQUksRUFDSixnQkFBZ0IsRUFDaEI7b0JBQ0UsYUFBYSxFQUFFLElBQUksQ0FBQywyQkFBMkI7b0JBQy9DLGVBQWUsRUFBRSxLQUFLLENBQUMsZ0JBQWdCO2lCQUN4QyxDQUNGLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztZQUNqRCxDQUFDO1lBQ0QsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLDZCQUFtQixDQUFDLElBQUksRUFBRSxZQUFZLEVBQUU7b0JBQ3JFLGFBQWEsRUFBRSxJQUFJLENBQUMsdUJBQXVCO29CQUMzQyxlQUFlLEVBQUUsS0FBSyxDQUFDLGFBQWE7aUJBQ3JDLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUM7WUFDM0MsQ0FBQztZQUNELElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSw2QkFBbUIsQ0FDakQsSUFBSSxFQUNKLGFBQWEsRUFDYjtvQkFDRSxhQUFhLEVBQUUsSUFBSSxDQUFDLHdCQUF3QjtvQkFDNUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxjQUFjO2lCQUN0QyxDQUNGLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDO1lBQzdDLENBQUM7WUFDRCxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsOEJBQThCLEdBQUcsSUFBSSw2QkFBbUIsQ0FDM0QsSUFBSSxFQUNKLHVCQUF1QixFQUN2QjtvQkFDRSxhQUFhLEVBQUUsSUFBSSxDQUFDLGtDQUFrQztvQkFDdEQsZUFBZSxFQUFFLEtBQUssQ0FBQyx3QkFBd0I7aUJBQ2hELENBQ0YsQ0FBQztZQUNKLENBQUM7WUFDRCxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsK0JBQStCLEdBQUcsSUFBSSw2QkFBbUIsQ0FDNUQsSUFBSSxFQUNKLHdCQUF3QixFQUN4QjtvQkFDRSxhQUFhLEVBQUUsSUFBSSxDQUFDLG1DQUFtQztvQkFDdkQsZUFBZSxFQUFFLEtBQUssQ0FBQyx5QkFBeUI7aUJBQ2pELENBQ0YsQ0FBQztZQUNKLENBQUM7WUFDRCxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSw2QkFBbUIsQ0FDbkQsSUFBSSxFQUNKLGVBQWUsRUFDZjtvQkFDRSxhQUFhLEVBQUUsSUFBSSxDQUFDLDBCQUEwQjtvQkFDOUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7aUJBQ3hDLENBQ0YsQ0FBQztZQUNKLENBQUM7WUFDRCxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUM1QixJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSw2QkFBbUIsQ0FDcEQsSUFBSSxFQUNKLGdCQUFnQixFQUNoQjtvQkFDRSxhQUFhLEVBQUUsSUFBSSxDQUFDLDJCQUEyQjtvQkFDL0MsZUFBZSxFQUFFLEtBQUssQ0FBQyxpQkFBaUI7aUJBQ3pDLENBQ0YsQ0FBQztZQUNKLENBQUM7WUFDRCxJQUFJLEtBQUssQ0FBQywyQkFBMkIsRUFBRSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsaUNBQWlDLEdBQUcsSUFBSSw2QkFBbUIsQ0FDOUQsSUFBSSxFQUNKLDBCQUEwQixFQUMxQjtvQkFDRSxhQUFhLEVBQUUsSUFBSSxDQUFDLHFDQUFxQztvQkFDekQsZUFBZSxFQUFFLEtBQUssQ0FBQywyQkFBMkI7aUJBQ25ELENBQ0YsQ0FBQztZQUNKLENBQUM7WUFDRCxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO2dCQUN2QyxJQUFJLENBQUMsa0NBQWtDLEdBQUcsSUFBSSw2QkFBbUIsQ0FDL0QsSUFBSSxFQUNKLDJCQUEyQixFQUMzQjtvQkFDRSxhQUFhLEVBQUUsSUFBSSxDQUFDLHNDQUFzQztvQkFDMUQsZUFBZSxFQUFFLEtBQUssQ0FBQyw0QkFBNEI7aUJBQ3BELENBQ0YsQ0FBQztZQUNKLENBQUM7WUFDRCxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUMvQixJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSx5QkFBZSxDQUNuRCxJQUFJLEVBQ0osbUJBQW1CLEVBQ25CO29CQUNFLGFBQWEsRUFBRSxJQUFJLENBQUMsOEJBQThCO29CQUNsRCxXQUFXLEVBQUUsS0FBSyxDQUFDLG9CQUFvQjtpQkFDeEMsQ0FDRixDQUFDO1lBQ0osQ0FBQztZQUNELElBQUksS0FBSyxDQUFDLHFCQUFxQixFQUFFLENBQUM7Z0JBQ2hDLElBQUksQ0FBQywyQkFBMkIsR0FBRyxJQUFJLHlCQUFlLENBQ3BELElBQUksRUFDSixvQkFBb0IsRUFDcEI7b0JBQ0UsYUFBYSxFQUFFLElBQUksQ0FBQywrQkFBK0I7b0JBQ25ELFdBQVcsRUFBRSxLQUFLLENBQUMscUJBQXFCO2lCQUN6QyxDQUNGLENBQUM7WUFDSixDQUFDO1lBQ0QsSUFBSSxLQUFLLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLDhCQUE4QixHQUFHLElBQUkseUJBQWUsQ0FDdkQsSUFBSSxFQUNKLHVCQUF1QixFQUN2QjtvQkFDRSxhQUFhLEVBQUUsSUFBSSxDQUFDLGtDQUFrQztvQkFDdEQsV0FBVyxFQUFFLEtBQUssQ0FBQyx1QkFBdUI7aUJBQzNDLENBQ0YsQ0FBQztZQUNKLENBQUM7WUFDRCxJQUFJLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUkseUJBQWUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFO29CQUNqRSxhQUFhLEVBQUUsSUFBSSxDQUFDLHVCQUF1QjtvQkFDM0MsV0FBVyxFQUFFLEtBQUssQ0FBQyxjQUFjO2lCQUNsQyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBQ0QsSUFBSSxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLHlCQUFlLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtvQkFDbkUsYUFBYSxFQUFFLElBQUksQ0FBQyx3QkFBd0I7b0JBQzVDLFdBQVcsRUFBRSxLQUFLLENBQUMsZUFBZTtpQkFDbkMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLE1BQUEsS0FBSyxDQUFDLFNBQVMsbUNBQUksSUFBSSxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDaEIsSUFBSSxDQUFDLEtBQUssR0FBRyx5QkFBZSxDQUFDLGVBQWUsQ0FDMUMsSUFBSSxFQUNKLElBQUksQ0FBQyxnQkFBZ0IsQ0FDdEIsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxNQUFBLEtBQUssQ0FBQyxTQUFTLG1DQUFJLElBQUksRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2QsSUFBSSxDQUFDLEdBQUcsR0FBRyx5QkFBZSxDQUFDLGVBQWUsQ0FDeEMsSUFBSSxFQUNKLElBQUksQ0FBQyxnQkFBZ0IsQ0FDdEIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDZixDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksTUFBQSxLQUFLLENBQUMsbUJBQW1CLG1DQUFJLElBQUksRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxlQUFlLEdBQUcseUJBQWUsQ0FBQyxlQUFlLENBQ3BELElBQUksRUFDSixJQUFJLENBQUMsMEJBQTBCLENBQ2hDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLE1BQUEsS0FBSyxDQUFDLG9CQUFvQixtQ0FBSSxJQUFJLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyx5QkFBZSxDQUFDLGVBQWUsQ0FDckQsSUFBSSxFQUNKLElBQUksQ0FBQywyQkFBMkIsQ0FDakMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDZixDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksTUFBQSxLQUFLLENBQUMsa0JBQWtCLG1DQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxjQUFjLEdBQUcseUJBQWUsQ0FBQyxlQUFlLENBQ25ELElBQUksRUFDSixJQUFJLENBQUMseUJBQXlCLENBQy9CLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLE1BQUEsS0FBSyxDQUFDLHFCQUFxQixtQ0FBSSxLQUFLLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyx5QkFBZSxDQUFDLGVBQWUsQ0FDdEQsSUFBSSxFQUNKLElBQUksQ0FBQyw0QkFBNEIsQ0FDbEMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDZixDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksTUFBQSxLQUFLLENBQUMscUJBQXFCLG1DQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLHlCQUFlLENBQUMsZUFBZSxDQUN0RCxJQUFJLEVBQ0osSUFBSSxDQUFDLDRCQUE0QixDQUNsQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxNQUFBLEtBQUssQ0FBQyx3QkFBd0IsbUNBQUksS0FBSyxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUMvQixJQUFJLENBQUMsb0JBQW9CLEdBQUcseUJBQWUsQ0FBQyxlQUFlLENBQ3pELElBQUksRUFDSixJQUFJLENBQUMsK0JBQStCLENBQ3JDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLE1BQUEsS0FBSyxDQUFDLG9CQUFvQixtQ0FBSSxLQUFLLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyx5QkFBZSxDQUFDLGVBQWUsQ0FDckQsSUFBSSxFQUNKLElBQUksQ0FBQywyQkFBMkIsQ0FDakMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDZixDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksTUFBQSxLQUFLLENBQUMsZ0JBQWdCLG1DQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxhQUFhLEdBQUcseUJBQWUsQ0FBQyxlQUFlLENBQ2xELElBQUksRUFDSixJQUFJLENBQUMsdUJBQXVCLENBQzdCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLE1BQUEsS0FBSyxDQUFDLGlCQUFpQixtQ0FBSSxLQUFLLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLHlCQUFlLENBQUMsZUFBZSxDQUNuRCxJQUFJLEVBQ0osSUFBSSxDQUFDLHdCQUF3QixDQUM5QixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxNQUFBLEtBQUssQ0FBQywyQkFBMkIsbUNBQUksS0FBSyxFQUFFLENBQUM7WUFDL0MsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsd0JBQXdCLEdBQUcseUJBQWUsQ0FBQyxlQUFlLENBQzdELElBQUksRUFDSixJQUFJLENBQUMsa0NBQWtDLENBQ3hDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLE1BQUEsS0FBSyxDQUFDLDRCQUE0QixtQ0FBSSxLQUFLLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyx5QkFBZSxDQUFDLGVBQWUsQ0FDOUQsSUFBSSxFQUNKLElBQUksQ0FBQyxtQ0FBbUMsQ0FDekMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDZixDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksTUFBQSxLQUFLLENBQUMsbUJBQW1CLG1DQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLHlCQUFlLENBQUMsZUFBZSxDQUNyRCxJQUFJLEVBQ0osSUFBSSxDQUFDLDBCQUEwQixDQUNoQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxNQUFBLEtBQUssQ0FBQyxvQkFBb0IsbUNBQUksS0FBSyxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUM1QixJQUFJLENBQUMsaUJBQWlCLEdBQUcseUJBQWUsQ0FBQyxlQUFlLENBQ3RELElBQUksRUFDSixJQUFJLENBQUMsMkJBQTJCLENBQ2pDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLE1BQUEsS0FBSyxDQUFDLDhCQUE4QixtQ0FBSSxLQUFLLEVBQUUsQ0FBQztZQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7Z0JBQ3RDLElBQUksQ0FBQywyQkFBMkIsR0FBRyx5QkFBZSxDQUFDLGVBQWUsQ0FDaEUsSUFBSSxFQUNKLElBQUksQ0FBQyxxQ0FBcUMsQ0FDM0MsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDZixDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksTUFBQSxLQUFLLENBQUMsK0JBQStCLG1DQUFJLEtBQUssRUFBRSxDQUFDO1lBQ25ELElBQUksQ0FBQyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLDRCQUE0QixHQUFHLHlCQUFlLENBQUMsZUFBZSxDQUNqRSxJQUFJLEVBQ0osSUFBSSxDQUFDLHNDQUFzQyxDQUM1QyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxNQUFBLEtBQUssQ0FBQyx1QkFBdUIsbUNBQUksS0FBSyxFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUMvQixJQUFJLENBQUMsb0JBQW9CLEdBQUcseUJBQWUsQ0FBQyxlQUFlLENBQ3pELElBQUksRUFDSixJQUFJLENBQUMsOEJBQThCLENBQ3BDLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksTUFBQSxLQUFLLENBQUMsd0JBQXdCLG1DQUFJLEtBQUssRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLHlCQUFlLENBQUMsZUFBZSxDQUMxRCxJQUFJLEVBQ0osSUFBSSxDQUFDLCtCQUErQixDQUNyQyxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLE1BQUEsS0FBSyxDQUFDLDJCQUEyQixtQ0FBSSxLQUFLLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7Z0JBQ25DLElBQUksQ0FBQyx3QkFBd0IsR0FBRyx5QkFBZSxDQUFDLGVBQWUsQ0FDN0QsSUFBSSxFQUNKLElBQUksQ0FBQyxrQ0FBa0MsQ0FDeEMsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxNQUFBLEtBQUssQ0FBQyxnQkFBZ0IsbUNBQUksS0FBSyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLGNBQWMsR0FBRyx5QkFBZSxDQUFDLGVBQWUsQ0FDbkQsSUFBSSxFQUNKLElBQUksQ0FBQyx1QkFBdUIsQ0FDN0IsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxNQUFBLEtBQUssQ0FBQyxpQkFBaUIsbUNBQUksS0FBSyxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyx5QkFBZSxDQUFDLGVBQWUsQ0FDcEQsSUFBSSxFQUNKLElBQUksQ0FBQyx3QkFBd0IsQ0FDOUIsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBdHZCRCw4Q0FzdkJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTdHJpbmdMaXN0UGFyYW1ldGVyLCBTdHJpbmdQYXJhbWV0ZXJ9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zc20nO1xuaW1wb3J0IHR5cGUge0NvbnN0cnVjdH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQge1xuICBFeHRlbmRlZENvbnN0cnVjdCxcbiAgdHlwZSBFeHRlbmRlZENvbnN0cnVjdFByb3BzLFxuICBTdGFuZGFyZFRhZ3MsXG59IGZyb20gJy4uLy4uL2F3cy1jZGsvaW5kZXgnO1xuaW1wb3J0IHtMaWJTdGFuZGFyZFRhZ3N9IGZyb20gJy4uLy4uL3RydWVtYXJrJztcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBOZXR3b3JrUGFyYW1ldGVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrUGFyYW1ldGVyc1Byb3BzIGV4dGVuZHMgRXh0ZW5kZWRDb25zdHJ1Y3RQcm9wcyB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBuZXR3b3JrLiBUaGlzIGlzIG5vcm1hbGx5IHRoZSBuYW1lIG9mIHlvdXIgVlBDLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQcmVmaXggZnJvbSB3aGljaCB0byBzdG9yZSBhbmQgcmV0cmlldmUgcGFyYW1ldGVycy4gRGVmYXVsdCBpcyBcIi9uZXR3b3JrXCIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gXCIvbmV0d29ya1wiXG4gICAqL1xuICByZWFkb25seSBwcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNldHRpbmcgdGhpcyB0byBmYWxzZSB3aWxsIGRpc2FibGUgdGhlIGNyZWF0aW9uIG9mIHJlc291cmNlcyBpbiB0aGlzIGNvbnN0cnVjdC4gRGVmYXVsdCBpcyB0cnVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNldHRpbmcgdGhpcyB0byB0cnVlIHdpbGwgc3VwcHJlc3MgdGhlIGNyZWF0aW9uIG9mIGRlZmF1bHQgdGFncyBvbiByZXNvdXJjZXMgY3JlYXRlZCBieSB0aGlzXG4gICAqIGNvbnN0cnVjdC4gRGVmYXVsdCBpcyBmYWxzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc3VwcHJlc3NUYWdnaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVlBDIElEIHRvIHN0b3JlLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEF2YWlsYWJpbGl0eS16b25lIHZhbHVlcyB0byBzdG9yZS5cbiAgICovXG4gIHJlYWRvbmx5IGF6cz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBQdWJsaWMgc3VibmV0IElEcyB0byBzdG9yZS5cbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY1N1Ym5ldElkcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBQcml2YXRlIHN1Ym5ldCBJRHMgdG8gc3RvcmUuXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlU3VibmV0SWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEludHJhIHN1Ym5ldCBJRHMgdG8gc3RvcmUuXG4gICAqL1xuICByZWFkb25seSBpbnRyYVN1Ym5ldElkcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBSZWRzaGlmdCBzdWJuZXQgSURzIHRvIHN0b3JlLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVkc2hpZnRTdWJuZXRJZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogRGF0YWJhc2Ugc3VibmV0IElEcyB0byBzdG9yZS5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGFiYXNlU3VibmV0SWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEVsYXN0aWNhY2hlIHN1Ym5ldCBJRHMgdG8gc3RvcmUuXG4gICAqL1xuICByZWFkb25seSBlbGFzdGljYWNoZVN1Ym5ldElkcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBPdXRwb3N0IHN1Ym5ldCBJRHMgdG8gc3RvcmUuXG4gICAqL1xuICByZWFkb25seSBvdXRwb3N0U3VibmV0SWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFB1YmxpYyBBTEIgQVJOcyB0byBzdG9yZS5cbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY0FsYkFybnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUHJpdmF0ZSBBTEIgQVJOcyB0byBzdG9yZS5cbiAgICovXG4gIHJlYWRvbmx5IHByaXZhdGVBbGJBcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIENlcnRpZmljYXRlIEFSTnMgb24gcHVibGljIEFMQnMgdG8gc3RvcmUuIEluZGV4ZXMgc2hvdWxkIG1hdGNoIHB1YmxpY0FsYkFybnMuXG4gICAqL1xuICByZWFkb25seSBwdWJsaWNBbGJDZXJ0aWZpY2F0ZUFybnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQ2VydGlmaWNhdGUgQVJOcyBvbiBwcml2YXRlIEFMQnMgdG8gc3RvcmUuIEluZGV4ZXMgc2hvdWxkIG1hdGNoIHByaXZhdGVBbGJBcm5zLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZUFsYkNlcnRpZmljYXRlQXJucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBbHRlcm5hdGl2ZSBwdWJsaWMgQUxCIEFSTnMgdG8gc3RvcmUuXG4gICAqL1xuICByZWFkb25seSBhbHRQdWJsaWNBbGJBcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEFsdGVybmF0aXZlIHByaXZhdGUgQUxCIEFSTnMgdG8gc3RvcmUuXG4gICAqL1xuICByZWFkb25seSBhbHRQcml2YXRlQWxiQXJucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBbHRlcm5hdGl2ZSBjZXJ0aWZpY2F0ZSBBUk5zIG9uIHB1YmxpYyBBTEJzIHRvIHN0b3JlLiBJbmRleGVzIHNob3VsZCBtYXRjaCBwdWJsaWNBbGJBcm5zLlxuICAgKi9cbiAgcmVhZG9ubHkgYWx0UHVibGljQWxiQ2VydGlmaWNhdGVBcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEFsdGVybmF0aXZlIGNlcnRpZmljYXRlIEFSTnMgb24gcHJpdmF0ZSBBTEJzIHRvIHN0b3JlLiBJbmRleGVzIHNob3VsZCBtYXRjaCBwcml2YXRlQWxiQXJucy5cbiAgICovXG4gIHJlYWRvbmx5IGFsdFByaXZhdGVBbGJDZXJ0aWZpY2F0ZUFybnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUHVibGljIGNlcnRpZmljYXRlIEFSTiB0byBzdG9yZSBmb3IgdGhpcyBuZXR3b3JrLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljQ2VydGlmaWNhdGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByaXZhdGUgY2VydGlmaWNhdGUgQVJOIHRvIHN0b3JlIGZvciB0aGlzIG5ldHdvcmsuXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlQ2VydGlmaWNhdGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENsb3VkRnJvbnQgY2VydGlmaWNhdGUgQVJOIHRvIHN0b3JlIGZvciB0aGlzIG5ldHdvcmsuXG4gICAqL1xuICByZWFkb25seSBjbG91ZEZvbnRDZXJ0aWZpY2F0ZUFybj86IHN0cmluZztcblxuICAvKipcbiAgICogUHVibGljIHpvbmUgbmFtZSB0byBzdG9yZSBmb3IgdGhpcyBuZXR3b3JrLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljWm9uZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByaXZhdGUgem9uZSBuYW1lIHRvIHN0b3JlIGZvciB0aGlzIG5ldHdvcmsuXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlWm9uZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExvb2t1cCBWUEMgdmFsdWUgaWYgbm90IHByb3ZpZGVkLiBEZWZhdWx0IGlzIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9va3VwVnBjPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTG9va3VwIGF2YWlsYWJpbGl0eSB6b25lcyBpZiBub3QgcHJvdmlkZWQuIERlZmF1bHQgaXMgdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0cnVlXG4gICAqL1xuICByZWFkb25seSBsb29rdXBBenM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb29rdXAgcHVibGljIHN1Ym5ldHMgaWYgbm90IHByb3ZpZGVkLiBEZWZhdWx0IGlzIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9va3VwUHVibGljU3VibmV0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExvb2t1cCBwcml2YXRlIHN1Ym5ldHMgaWYgbm90IHByb3ZpZGVkLiBEZWZhdWx0IGlzIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9va3VwUHJpdmF0ZVN1Ym5ldHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb29rdXAgaW50cmEgc3VibmV0cyBpZiBub3QgcHJvdmlkZWQuIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cEludHJhU3VibmV0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExvb2t1cCByZWRzaGlmdCBzdWJuZXRzIGlmIG5vdCBwcm92aWRlZC4gRGVmYXVsdCBpcyBmYWxzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9va3VwUmVkc2hpZnRTdWJuZXRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTG9va3VwIGRhdGFiYXNlIHN1Ym5ldHMgaWYgbm90IHByb3ZpZGVkLiBEZWZhdWx0IGlzIGZhbHNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBsb29rdXBEYXRhYmFzZVN1Ym5ldHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb29rdXAgZWxhc3RpY2FjaGUgc3VibmV0cyBpZiBub3QgcHJvdmlkZWQuIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cEVsYXN0aWNhY2hlU3VibmV0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExvb2t1cCBvdXRwb3N0IHN1Ym5ldHMgaWYgbm90IHByb3ZpZGVkLiBEZWZhdWx0IGlzIGZhbHNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBsb29rdXBPdXRwb3N0U3VibmV0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExvb2t1cCBwdWJsaWMgQUxCcyBpZiBub3QgcHJvdmlkZWQuIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cFB1YmxpY0FsYnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb29rdXAgcHJpdmF0ZSBBTEJzIGlmIG5vdCBwcm92aWRlZC4gRGVmYXVsdCBpcyBmYWxzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9va3VwUHJpdmF0ZUFsYnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb29rdXAgQUNNIGNlcnRpZmljYXRlcyBvbiBwdWJsaWMgQUxCcyBpZiBwcm92aWRlZC4gRGVmYXVsdCBpcyBmYWxzZS5cbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cFB1YmxpY0FsYkNlcnRpZmljYXRlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExvb2t1cCBBQ00gY2VydGlmaWNhdGVzIG9uIHByaXZhdGUgQUxCcyBpZiBwcm92aWRlZC4gRGVmYXVsdCBpcyBmYWxzZS5cbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cFByaXZhdGVBbGJDZXJ0aWZpY2F0ZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb29rdXAgYWx0ZXJuYXRpdmUgcHVibGljIEFMQnMgaWYgbm90IHByb3ZpZGVkLiBEZWZhdWx0IGlzIGZhbHNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBsb29rdXBBbHRQdWJsaWNBbGJzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTG9va3VwIGFsdGVybmF0aXZlIHByaXZhdGUgQUxCcyBpZiBub3QgcHJvdmlkZWQuIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cEFsdFByaXZhdGVBbGJzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTG9va3VwIGFsdGVybmF0aXZlIEFDTSBjZXJ0aWZpY2F0ZXMgb24gcHVibGljIEFMQnMgaWYgcHJvdmlkZWQuIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cEFsdFB1YmxpY0FsYkNlcnRpZmljYXRlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExvb2t1cCBhbHRlcm5hdGl2ZSBBQ00gY2VydGlmaWNhdGVzIG9uIHByaXZhdGUgQUxCcyBpZiBwcm92aWRlZC4gRGVmYXVsdCBpcyBmYWxzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9va3VwQWx0UHJpdmF0ZUFsYkNlcnRpZmljYXRlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExvb2t1cCBwdWJsaWMgY2VydGlmaWNhdGUuIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cFB1YmxpY0NlcnRpZmljYXRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTG9va3VwIHByaXZhdGUgY2VydGlmaWNhdGUuIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cFByaXZhdGVDZXJ0aWZpY2F0ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExvb2t1cCBDbG91ZEZyb250IGNlcnRpZmljYXRlLiBEZWZhdWx0IGlzIGZhbHNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBsb29rdXBDbG91ZEZyb250Q2VydGlmaWNhdGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb29rdXAgcHVibGljIHpvbmUuIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cFB1YmxpY1pvbmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb29rdXAgcHJpdmF0ZSB6b25lLiBEZWZhdWx0IGlzIGZhbHNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBsb29rdXBQcml2YXRlWm9uZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogU3RvcmVzIGFuZCByZXRyaWV2ZXMgbmV0d29yayBpbmZyYXN0cnVjdHVyZSBpZGVudGlmaWVycyB1c2luZ1xuICogQVdTIFN5c3RlbXMgTWFuYWdlciBQYXJhbWV0ZXIgU3RvcmUuXG4gKi9cbmV4cG9ydCBjbGFzcyBOZXR3b3JrUGFyYW1ldGVycyBleHRlbmRzIEV4dGVuZGVkQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIFZQQyBJRFxuICAgKi9cbiAgcmVhZG9ubHkgdnBjUGFyYW1ldGVyUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIHRoZSBhdmFpbGFiaWxpdHkgem9uZXNcbiAgICovXG4gIHJlYWRvbmx5IGF6c1BhcmFtZXRlclBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byB0aGUgcHVibGljIHN1Ym5ldCBJRHNcbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY1N1Ym5ldHNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIHByaXZhdGUgc3VibmV0IElEc1xuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZVN1Ym5ldHNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIGludHJhIHN1Ym5ldCBJRHNcbiAgICovXG4gIHJlYWRvbmx5IGludHJhU3VibmV0c1BhcmFtZXRlclBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byB0aGUgcmVkc2hpZnQgc3VibmV0IElEc1xuICAgKi9cbiAgcmVhZG9ubHkgcmVkc2hpZnRTdWJuZXRzUGFyYW1ldGVyUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIHRoZSBkYXRhYmFzZSBzdWJuZXQgSURzXG4gICAqL1xuICByZWFkb25seSBkYXRhYmFzZVN1Ym5ldHNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIGVsYXN0aWNhY2hlIHN1Ym5ldCBJRHNcbiAgICovXG4gIHJlYWRvbmx5IGVsYXN0aWNhY2hlU3VibmV0c1BhcmFtZXRlclBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byB0aGUgb3V0cG9zdCBzdWJuZXQgSURzLlxuICAgKi9cbiAgcmVhZG9ubHkgb3V0cG9zdFN1Ym5ldHNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIHB1YmxpYyBBTEIgQVJOcy5cbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY0FsYnNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIHByaXZhdGUgQUxCIEFSTnMuXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlQWxic1BhcmFtZXRlclBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byB0aGUgY2VydGlmaWNhdGUgQVJOcyBvbiB0aGUgcHVibGljIEFMQnMuXG4gICAqL1xuICByZWFkb25seSBwdWJsaWNBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIGNlcnRpZmljYXRlIEFSTnMgb24gdGhlIHByaXZhdGUgQUxCcy5cbiAgICovXG4gIHJlYWRvbmx5IHByaXZhdGVBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIGFsdGVybmF0aXZlIHB1YmxpYyBBTEIgQVJOcy5cbiAgICovXG4gIHJlYWRvbmx5IGFsdFB1YmxpY0FsYnNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIGFsdGVybmF0aXZlIHByaXZhdGUgQUxCIEFSTnMuXG4gICAqL1xuICByZWFkb25seSBhbHRQcml2YXRlQWxic1BhcmFtZXRlclBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byB0aGUgYWx0ZXJuYXRpdmUgY2VydGlmaWNhdGUgQVJOcyBvbiB0aGUgcHVibGljIEFMQnMuXG4gICAqL1xuICByZWFkb25seSBhbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIGFsdGVybmF0aXZlIGNlcnRpZmljYXRlIEFSTnMgb24gdGhlIHByaXZhdGUgQUxCcy5cbiAgICovXG4gIHJlYWRvbmx5IGFsdFByaXZhdGVBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIHB1YmxpYyBjZXJ0aWZpY2F0ZSBBUk4uXG4gICAqL1xuICByZWFkb25seSBwdWJsaWNDZXJ0aWZpY2F0ZVBhcmFtZXRlclBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byB0aGUgcHJpdmF0ZSBjZXJ0aWZpY2F0ZSBBUk4uXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlQ2VydGlmaWNhdGVQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIENsb3VkRnJvbnQgY2VydGl0aWNhdGUgQVJOLlxuICAgKi9cbiAgcmVhZG9ubHkgY2xvdWRGcm9udENlcnRpZmljYXRlUGFyYW1ldGVyUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIHRoZSBwdWJsaWMgem9uZS5cbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY1pvbmVQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIHByaXZhdGUgem9uZS5cbiAgICovXG4gIHJlYWRvbmx5IHByaXZhdGVab25lUGFyYW1ldGVyUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgdnBjSWQgd2FzIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjUGFyYW1ldGVyPzogU3RyaW5nUGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgYXpzIHdlcmUgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBhenNQYXJhbWV0ZXI/OiBTdHJpbmdMaXN0UGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyYXRlZCBpZiBwdWJsaWNTdWJuZXRJZHMgd2VyZSBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY1N1Ym5ldHNQYXJhbWV0ZXI/OiBTdHJpbmdMaXN0UGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgcHJpdmF0ZVN1Ym5ldElkcyB3ZXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZVN1Ym5ldHNQYXJhbWV0ZXI/OiBTdHJpbmdMaXN0UGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgaW50cmFTdWJuZXRJZHMgd2VyZSBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGludHJhU3VibmV0c1BhcmFtZXRlcj86IFN0cmluZ0xpc3RQYXJhbWV0ZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJhbWV0ZXIgY3JlYXRlZCBpZiByZWRzaGlmdFN1Ym5ldElkcyB3ZXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVkc2hpZnRTdWJuZXRzUGFyYW1ldGVyPzogU3RyaW5nTGlzdFBhcmFtZXRlcjtcblxuICAvKipcbiAgICogVGhlIHBhcmFtZXRlciBjcmVhdGVkIGlmIGRhdGFiYXNlU3VibmV0SWRzIHdlcmUgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBkYXRhYmFzZVN1Ym5ldHNQYXJhbWV0ZXI/OiBTdHJpbmdMaXN0UGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgZWxhc3RpY2FjaGVTdWJuZXRJZHMgd2VyZSBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGVsYXN0aWNhY2hlU3VibmV0c1BhcmFtZXRlcj86IFN0cmluZ0xpc3RQYXJhbWV0ZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJhbWV0ZXIgY3JlYXRlZCBpZiBvdXRwb3N0U3VibmV0SWRzIHdlcmUgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBvdXRwb3N0U3VibmV0c1ByYW1ldGVyPzogU3RyaW5nTGlzdFBhcmFtZXRlcjtcblxuICAvKipcbiAgICogVGhlIHBhcmFtZXRlciBjcmVhdGVkIGlmIHB1YmxpY0FsYkFybnMgd2VyZSBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY0FsYnNQYXJhbWV0ZXI/OiBTdHJpbmdMaXN0UGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgcHJpdmF0ZUFsYkFybnMgd2VyZSBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHByaXZhdGVBbGJzUGFyYW1ldGVyPzogU3RyaW5nTGlzdFBhcmFtZXRlcjtcblxuICAvKipcbiAgICogVGhlIHBhcmFtZXRlciBjcmVhdGVkIGlmIHB1YmxpY0FsYkNlcnRpZmljYXRlQXJucyB3ZXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljQWxiQ2VydGlmaWNhdGVzUGFyYW1ldGVyPzogU3RyaW5nTGlzdFBhcmFtZXRlcjtcblxuICAvKipcbiAgICogVGhlIHBhcmFtZXRlciBjcmVhdGVkIGlmIHByaXZhdGVBbGJDZXJ0aWZpY2F0ZUFybnMgd2VyZSBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHByaXZhdGVBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXI/OiBTdHJpbmdMaXN0UGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgYWx0UHVibGljQWxiQXJucyB3ZXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgYWx0UHVibGljQWxic1BhcmFtZXRlcj86IFN0cmluZ0xpc3RQYXJhbWV0ZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJhbWV0ZXIgY3JlYXRlZCBpZiBhbHRQcml2YXRlQWxiQXJucyB3ZXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgYWx0UHJpdmF0ZUFsYnNQYXJhbWV0ZXI/OiBTdHJpbmdMaXN0UGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgYWx0UHVibGljQWxiQ2VydGlmaWNhdGVBcm5zIHdlcmUgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBhbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXI/OiBTdHJpbmdMaXN0UGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgYWx0UHJpdmF0ZUFsYkNlcnRpZmljYXRlQXJucyB3ZXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgYWx0UHJpdmF0ZUFsYkNlcnRpZmljYXRlc1BhcmFtZXRlcj86IFN0cmluZ0xpc3RQYXJhbWV0ZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJhbWV0ZXIgY3JlYXRlZCBpZiBwdWJsaWNDZXJ0aWZpY2F0ZUFybiB3YXMgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBwdWJsaWNDZXJ0aWZpY2F0ZVBhcmFtZXRlcj86IFN0cmluZ1BhcmFtZXRlcjtcblxuICAvKipcbiAgICogVGhlIHBhcmFtZXRlciBjcmVhdGVkIGlmIHByaXZhdGVDZXJ0aWZpY2F0ZUFybiB3YXMgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlQ2VydGlmaWNhdGVQYXJhbWV0ZXI/OiBTdHJpbmdQYXJhbWV0ZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJhbWV0ZXIgY3JlYXRlZCBpZiBjbG91ZEZyb250Q2VydGlmaWNhdGVBcm4gd2FzIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgY2xvdWRGcm9udENlcnRpZmljYXRlUGFyYW1ldGVyPzogU3RyaW5nUGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgcHVibGljWm9uZU5hbWUgd2FzIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljWm9uZVBhcmFtZXRlcj86IFN0cmluZ1BhcmFtZXRlcjtcblxuICAvKipcbiAgICogVGhlIHBhcmFtZXRlciBjcmVhdGVkIGlmIHByaXZhdGVab25lTmFtZSB3YXMgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlWm9uZVBhcmFtZXRlcj86IFN0cmluZ1BhcmFtZXRlcjtcblxuICAvKipcbiAgICogVGhlIHZwY0lkIGlmIHByb3ZpZGVkIG9yIGxvb2t1cHMgYXJlIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSB2cGNJZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGF2YWlsYWJpbGl0eSB6b25lcyBpZiBwcm92aWRlZCBvciBsb29rdXBzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgYXpzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBwdWJsaWMgc3VibmV0IElEcyBpZiBwcm92aWRlZCBvciBsb29rdXBzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljU3VibmV0SWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBwcml2YXRlIHN1Ym5ldCBJRHMgaWYgcHJvdmlkZWQgb3IgbG9va3VwcyBhcmUgZW5hYmxlZC5cbiAgICovXG4gIHJlYWRvbmx5IHByaXZhdGVTdWJuZXRJZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGludHJhIHN1Ym5ldCBJRHMgaWYgcHJvdmlkZWQgb3IgbG9va3VwcyBhcmUgZW5hYmxlZC5cbiAgICovXG4gIHJlYWRvbmx5IGludHJhU3VibmV0SWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSByZWRzaGlmdCBzdWJuZXQgSURzIGlmIHByb3ZpZGVkIG9yIGxvb2t1cHMgYXJlIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSByZWRzaGlmdFN1Ym5ldElkcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgZGF0YWJhc2Ugc3VibmV0IElEcyBpZiBwcm92aWRlZCBvciBsb29rdXBzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWJhc2VTdWJuZXRJZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGVsYXN0aWNhY2hlIHN1Ym5ldCBJRHMgaWYgcHJvdmlkZWQgb3IgbG9va3VwcyBhcmUgZW5hYmxlZC5cbiAgICovXG4gIHJlYWRvbmx5IGVsYXN0aWNhY2hlU3VibmV0SWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBvdXRwb3N0IHN1Ym5ldCBJRHMgaWYgcHJvdmlkZWQgb3IgbG9va3VwcyBhcmUgZW5hYmxlZC5cbiAgICovXG4gIHJlYWRvbmx5IG91dHBvc3RTdWJuZXRJZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHB1YmxpYyBBTEIgQVJOcyBpZiBwcm92aWRlZCBvciBsb29rdXBzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljQWxiQXJucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpdmF0ZSBBTEIgQVJOcyBpZiBwcm92aWRlZCBvciBsb29rdXBzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZUFsYkFybnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGNlcnRpZmljYXRlIEFSTnMgb24gdGhlIHB1YmxpYyBBTEJzIGlmIHByb3ZpZGVkIG9yIGxvb2t1cHMgYXJlIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSBwdWJsaWNBbGJDZXJ0aWZpY2F0ZUFybnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGNlcnRpZmljYXRlIEFSTnMgb24gdGhlIHByaXZhdGUgQUxicyBpZiBwcm92aWRlZCBvciBsb29rdXBzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZUFsYkNlcnRpZmljYXRlQXJucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgYWx0ZXJuYXRpdmUgcHVibGljIEFMQiBBUk5zIGlmIHByb3ZpZGVkIG9yIGxvb2t1cHMgYXJlIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSBhbHRQdWJsaWNBbGJBcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBhbHRlcm5hdGl2ZSBwcml2YXRlIEFMQiBBUk5zIGlmIHByb3ZpZGVkIG9yIGxvb2t1cHMgYXJlIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSBhbHRQcml2YXRlQWxiQXJucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgY2VydGlmaWNhdGUgQVJOcyBvbiB0aGUgYWx0ZXJuYXRpdmUgcHVibGljIEFMQnMgaWYgcHJvdmlkZWQgb3IgbG9va3VwcyBhcmUgZW5hYmxlZC5cbiAgICovXG4gIHJlYWRvbmx5IGFsdFB1YmxpY0FsYkNlcnRpZmljYXRlQXJucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgY2VydGlmaWNhdGUgQVJOcyBvbiB0aGUgYWx0ZXJuYXRpdmUgcHJpdmF0ZSBBTGJzIGlmIHByb3ZpZGVkIG9yIGxvb2t1cHMgYXJlIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSBhbHRQcml2YXRlQWxiQ2VydGlmaWNhdGVBcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBwdWJsaWMgY2VydGlmaWNhdGUgQVJOIGlmIHByb3ZpZGVkIG9yIGxvb2t1cHMgYXJlIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSBwdWJsaWNDZXJ0aWZpY2F0ZUFybj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHByaXZhdGUgY2VydGlmaWNhdGUgQVJOIGlmIHByb3ZpZGVkIG9yIGxvb2t1cHMgYXJlIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlQ2VydGlmaWNhdGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBDbG91ZEZyb250IGNlcnRpZmljYXRlIEFSTiBpZiBwcm92aWRlZCBvciBsb29rdXBzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgY2xvdWRGcm9udENlcnRpZmljYXRlQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcHVibGljIHpvbmUgbmFtZSBpZiBwcm92aWRlZCBvciBsb29rdXBzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljWm9uZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwcml2YXRlIHpvbmUgbmFtZSBpZiBwcm92aWRlZCBvciBsb29rdXBzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZVpvbmVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IE5ldHdvcmtQYXJhbWV0ZXJzIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHBhcmVudCBzY29wZVxuICAgKiBAcGFyYW0gaWQgdGhlIGlkIG9mIHRoZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gcHJvcHMgcHJvcGVydGllcyBmb3IgdGhlIGluc3RhbmNlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTmV0d29ya1BhcmFtZXRlcnNQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgc3RhbmRhcmRUYWdzOiBTdGFuZGFyZFRhZ3MubWVyZ2UocHJvcHMuc3RhbmRhcmRUYWdzLCBMaWJTdGFuZGFyZFRhZ3MpLFxuICAgIH0pO1xuICAgIGNvbnN0IGNyZWF0ZSA9IHByb3BzLmNyZWF0ZSA/PyB0cnVlO1xuICAgIGNvbnN0IHByZWZpeCA9IHByb3BzLnByZWZpeCA/PyAnL25ldHdvcmsnO1xuICAgIGNvbnN0IHBhdGggPSBgJHtwcmVmaXh9LyR7cHJvcHMubmFtZX1gO1xuICAgIHRoaXMudnBjUGFyYW1ldGVyUGF0aCA9IGAke3BhdGh9L3ZwY2A7XG4gICAgdGhpcy5henNQYXJhbWV0ZXJQYXRoID0gYCR7cGF0aH0vYXpzYDtcbiAgICB0aGlzLnB1YmxpY1N1Ym5ldHNQYXJhbWV0ZXJQYXRoID0gYCR7cGF0aH0vcHVibGljX3N1Ym5ldHNgO1xuICAgIHRoaXMucHJpdmF0ZVN1Ym5ldHNQYXJhbWV0ZXJQYXRoID0gYCR7cGF0aH0vcHJpdmF0ZV9zdWJuZXRzYDtcbiAgICB0aGlzLmludHJhU3VibmV0c1BhcmFtZXRlclBhdGggPSBgJHtwYXRofS9pbnRyYV9zdWJuZXRzYDtcbiAgICB0aGlzLnJlZHNoaWZ0U3VibmV0c1BhcmFtZXRlclBhdGggPSBgJHtwYXRofS9yZWRzaGlmdF9zdWJuZXRzYDtcbiAgICB0aGlzLmRhdGFiYXNlU3VibmV0c1BhcmFtZXRlclBhdGggPSBgJHtwYXRofS9kYXRhYmFzZV9zdWJuZXRzYDtcbiAgICB0aGlzLmVsYXN0aWNhY2hlU3VibmV0c1BhcmFtZXRlclBhdGggPSBgJHtwYXRofS9lbGFzdGljYWNoZV9zdWJuZXRzYDtcbiAgICB0aGlzLm91dHBvc3RTdWJuZXRzUGFyYW1ldGVyUGF0aCA9IGAke3BhdGh9L291dHBvc3Rfc3VibmV0c2A7XG4gICAgdGhpcy5wdWJsaWNBbGJzUGFyYW1ldGVyUGF0aCA9IGAke3BhdGh9L3B1YmxpY19hbGJzYDtcbiAgICB0aGlzLnByaXZhdGVBbGJzUGFyYW1ldGVyUGF0aCA9IGAke3BhdGh9L3ByaXZhdGVfYWxic2A7XG4gICAgdGhpcy5wdWJsaWNBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoID0gYCR7cGF0aH0vcHVibGljX2FsYl9jZXJ0aWZpY2F0ZXNgO1xuICAgIHRoaXMucHJpdmF0ZUFsYkNlcnRpZmljYXRlc1BhcmFtZXRlclBhdGggPSBgJHtwYXRofS9wcml2YXRlX2FsYl9jZXJ0aWZpY2F0ZXNgO1xuICAgIHRoaXMuYWx0UHVibGljQWxic1BhcmFtZXRlclBhdGggPSBgJHtwYXRofS9hbHRfcHVibGljX2FsYnNgO1xuICAgIHRoaXMuYWx0UHJpdmF0ZUFsYnNQYXJhbWV0ZXJQYXRoID0gYCR7cGF0aH0vYWx0X3ByaXZhdGVfYWxic2A7XG4gICAgdGhpcy5hbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoID0gYCR7cGF0aH0vYWx0X3B1YmxpY19hbGJfY2VydGlmaWNhdGVzYDtcbiAgICB0aGlzLmFsdFByaXZhdGVBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoID0gYCR7cGF0aH0vYWx0X3ByaXZhdGVfYWxiX2NlcnRpZmljYXRlc2A7XG4gICAgdGhpcy5wdWJsaWNDZXJ0aWZpY2F0ZVBhcmFtZXRlclBhdGggPSBgJHtwYXRofS9wdWJsaWNfY2VydGlmaWNhdGVgO1xuICAgIHRoaXMucHJpdmF0ZUNlcnRpZmljYXRlUGFyYW1ldGVyUGF0aCA9IGAke3BhdGh9L3ByaXZhdGVfY2VydGlmaWNhdGVgO1xuICAgIHRoaXMuY2xvdWRGcm9udENlcnRpZmljYXRlUGFyYW1ldGVyUGF0aCA9IGAke3BhdGh9L2Nsb3VkZnJvbnRfY2VydGlmaWNhdGVgO1xuICAgIHRoaXMucHVibGljWm9uZVBhcmFtZXRlclBhdGggPSBgJHtwYXRofS9wdWJsaWNfem9uZWA7XG4gICAgdGhpcy5wcml2YXRlWm9uZVBhcmFtZXRlclBhdGggPSBgJHtwYXRofS9wcml2YXRlX3pvbmVgO1xuXG4gICAgaWYgKGNyZWF0ZSkge1xuICAgICAgaWYgKHByb3BzLnZwY0lkKSB7XG4gICAgICAgIHRoaXMudnBjUGFyYW1ldGVyID0gbmV3IFN0cmluZ1BhcmFtZXRlcih0aGlzLCAnVnBjSWQnLCB7XG4gICAgICAgICAgcGFyYW1ldGVyTmFtZTogdGhpcy52cGNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICAgIHN0cmluZ1ZhbHVlOiBwcm9wcy52cGNJZCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudnBjSWQgPSBwcm9wcy52cGNJZDtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5henMpIHtcbiAgICAgICAgdGhpcy5henNQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nTGlzdFBhcmFtZXRlcih0aGlzLCAnQVpzJywge1xuICAgICAgICAgIHBhcmFtZXRlck5hbWU6IHRoaXMuYXpzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgICBzdHJpbmdMaXN0VmFsdWU6IHByb3BzLmF6cyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYXpzID0gcHJvcHMuYXpzO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLnB1YmxpY1N1Ym5ldElkcykge1xuICAgICAgICB0aGlzLnB1YmxpY1N1Ym5ldHNQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nTGlzdFBhcmFtZXRlcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdQdWJsaWNTdWJuZXRzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLnB1YmxpY1N1Ym5ldHNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICAgICAgc3RyaW5nTGlzdFZhbHVlOiBwcm9wcy5wdWJsaWNTdWJuZXRJZHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5wdWJsaWNTdWJuZXRJZHMgPSBwcm9wcy5wcml2YXRlU3VibmV0SWRzO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLnByaXZhdGVTdWJuZXRJZHMpIHtcbiAgICAgICAgdGhpcy5wcml2YXRlU3VibmV0c1BhcmFtZXRlciA9IG5ldyBTdHJpbmdMaXN0UGFyYW1ldGVyKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgJ1ByaXZhdGVTdWJuZXRzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLnByaXZhdGVTdWJuZXRzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgICAgIHN0cmluZ0xpc3RWYWx1ZTogcHJvcHMucHJpdmF0ZVN1Ym5ldElkcyxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnByaXZhdGVTdWJuZXRJZHMgPSBwcm9wcy5wcml2YXRlU3VibmV0SWRzO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLmludHJhU3VibmV0SWRzKSB7XG4gICAgICAgIHRoaXMuaW50cmFTdWJuZXRzUGFyYW1ldGVyID0gbmV3IFN0cmluZ0xpc3RQYXJhbWV0ZXIoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICAnSW50cmFTdWJuZXRzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLmludHJhU3VibmV0c1BhcmFtZXRlclBhdGgsXG4gICAgICAgICAgICBzdHJpbmdMaXN0VmFsdWU6IHByb3BzLmludHJhU3VibmV0SWRzLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaW50cmFTdWJuZXRJZHMgPSBwcm9wcy5pbnRyYVN1Ym5ldElkcztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5yZWRzaGlmdFN1Ym5ldElkcykge1xuICAgICAgICB0aGlzLnJlZHNoaWZ0U3VibmV0c1BhcmFtZXRlciA9IG5ldyBTdHJpbmdMaXN0UGFyYW1ldGVyKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgJ1JlZHNoaWZ0U3VibmV0cycsXG4gICAgICAgICAge1xuICAgICAgICAgICAgcGFyYW1ldGVyTmFtZTogdGhpcy5yZWRzaGlmdFN1Ym5ldHNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICAgICAgc3RyaW5nTGlzdFZhbHVlOiBwcm9wcy5yZWRzaGlmdFN1Ym5ldElkcyxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnJlZHNoaWZ0U3VibmV0SWRzID0gcHJvcHMucmVkc2hpZnRTdWJuZXRJZHM7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMuZGF0YWJhc2VTdWJuZXRJZHMpIHtcbiAgICAgICAgdGhpcy5kYXRhYmFzZVN1Ym5ldHNQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nTGlzdFBhcmFtZXRlcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdEYXRhYmFzZVN1Ym5ldHMnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHBhcmFtZXRlck5hbWU6IHRoaXMuZGF0YWJhc2VTdWJuZXRzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgICAgIHN0cmluZ0xpc3RWYWx1ZTogcHJvcHMuZGF0YWJhc2VTdWJuZXRJZHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5kYXRhYmFzZVN1Ym5ldElkcyA9IHByb3BzLmRhdGFiYXNlU3VibmV0SWRzO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLmVsYXN0aWNhY2hlU3VibmV0SWRzKSB7XG4gICAgICAgIHRoaXMuZWxhc3RpY2FjaGVTdWJuZXRzUGFyYW1ldGVyID0gbmV3IFN0cmluZ0xpc3RQYXJhbWV0ZXIoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICAnRWxhc3RpY2FjaGVTdWJuZXRzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLmVsYXN0aWNhY2hlU3VibmV0c1BhcmFtZXRlclBhdGgsXG4gICAgICAgICAgICBzdHJpbmdMaXN0VmFsdWU6IHByb3BzLmVsYXN0aWNhY2hlU3VibmV0SWRzLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZWxhc3RpY2FjaGVTdWJuZXRJZHMgPSBwcm9wcy5lbGFzdGljYWNoZVN1Ym5ldElkcztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5vdXRwb3N0U3VibmV0SWRzKSB7XG4gICAgICAgIHRoaXMub3V0cG9zdFN1Ym5ldHNQcmFtZXRlciA9IG5ldyBTdHJpbmdMaXN0UGFyYW1ldGVyKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgJ091dHBvc3RTdWJuZXRzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLm91dHBvc3RTdWJuZXRzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgICAgIHN0cmluZ0xpc3RWYWx1ZTogcHJvcHMub3V0cG9zdFN1Ym5ldElkcyxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICB0aGlzLm91dHBvc3RTdWJuZXRJZHMgPSBwcm9wcy5vdXRwb3N0U3VibmV0SWRzO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLnB1YmxpY0FsYkFybnMpIHtcbiAgICAgICAgdGhpcy5wdWJsaWNBbGJzUGFyYW1ldGVyID0gbmV3IFN0cmluZ0xpc3RQYXJhbWV0ZXIodGhpcywgJ1B1YmxpY0FsYnMnLCB7XG4gICAgICAgICAgcGFyYW1ldGVyTmFtZTogdGhpcy5wdWJsaWNBbGJzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgICBzdHJpbmdMaXN0VmFsdWU6IHByb3BzLnB1YmxpY0FsYkFybnMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnB1YmxpY0FsYkFybnMgPSBwcm9wcy5wdWJsaWNBbGJBcm5zO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLnByaXZhdGVBbGJBcm5zKSB7XG4gICAgICAgIHRoaXMucHJpdmF0ZUFsYnNQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nTGlzdFBhcmFtZXRlcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdQcml2YXRlQWxicycsXG4gICAgICAgICAge1xuICAgICAgICAgICAgcGFyYW1ldGVyTmFtZTogdGhpcy5wcml2YXRlQWxic1BhcmFtZXRlclBhdGgsXG4gICAgICAgICAgICBzdHJpbmdMaXN0VmFsdWU6IHByb3BzLnByaXZhdGVBbGJBcm5zLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucHJpdmF0ZUFsYkFybnMgPSBwcm9wcy5wcml2YXRlQWxiQXJucztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5wdWJsaWNBbGJDZXJ0aWZpY2F0ZUFybnMpIHtcbiAgICAgICAgdGhpcy5wdWJsaWNBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nTGlzdFBhcmFtZXRlcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdQdWJsaWNBbGJDZXJ0aWZpY2F0ZXMnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHBhcmFtZXRlck5hbWU6IHRoaXMucHVibGljQWxiQ2VydGlmaWNhdGVzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgICAgIHN0cmluZ0xpc3RWYWx1ZTogcHJvcHMucHVibGljQWxiQ2VydGlmaWNhdGVBcm5zLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMucHJpdmF0ZUFsYkNlcnRpZmljYXRlQXJucykge1xuICAgICAgICB0aGlzLnByaXZhdGVBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nTGlzdFBhcmFtZXRlcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdQcml2YXRlQWxiQ2VydGlmaWNhdGVzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLnByaXZhdGVBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICAgICAgc3RyaW5nTGlzdFZhbHVlOiBwcm9wcy5wcml2YXRlQWxiQ2VydGlmaWNhdGVBcm5zLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMuYWx0UHVibGljQWxiQXJucykge1xuICAgICAgICB0aGlzLmFsdFB1YmxpY0FsYnNQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nTGlzdFBhcmFtZXRlcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdBbHRQdWJsaWNBbGJzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLmFsdFB1YmxpY0FsYnNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICAgICAgc3RyaW5nTGlzdFZhbHVlOiBwcm9wcy5hbHRQdWJsaWNBbGJBcm5zLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMuYWx0UHJpdmF0ZUFsYkFybnMpIHtcbiAgICAgICAgdGhpcy5hbHRQcml2YXRlQWxic1BhcmFtZXRlciA9IG5ldyBTdHJpbmdMaXN0UGFyYW1ldGVyKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgJ0FsdFByaXZhdGVBbGJzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLmFsdFByaXZhdGVBbGJzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgICAgIHN0cmluZ0xpc3RWYWx1ZTogcHJvcHMuYWx0UHJpdmF0ZUFsYkFybnMsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5hbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZUFybnMpIHtcbiAgICAgICAgdGhpcy5hbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nTGlzdFBhcmFtZXRlcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdBbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZXMnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHBhcmFtZXRlck5hbWU6IHRoaXMuYWx0UHVibGljQWxiQ2VydGlmaWNhdGVzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgICAgIHN0cmluZ0xpc3RWYWx1ZTogcHJvcHMuYWx0UHVibGljQWxiQ2VydGlmaWNhdGVBcm5zLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMuYWx0UHJpdmF0ZUFsYkNlcnRpZmljYXRlQXJucykge1xuICAgICAgICB0aGlzLmFsdFByaXZhdGVBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nTGlzdFBhcmFtZXRlcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdBbHRQcml2YXRlQWxiQ2VydGlmaWNhdGVzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLmFsdFByaXZhdGVBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICAgICAgc3RyaW5nTGlzdFZhbHVlOiBwcm9wcy5hbHRQcml2YXRlQWxiQ2VydGlmaWNhdGVBcm5zLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMucHVibGljQ2VydGlmaWNhdGVBcm4pIHtcbiAgICAgICAgdGhpcy5wdWJsaWNDZXJ0aWZpY2F0ZVBhcmFtZXRlciA9IG5ldyBTdHJpbmdQYXJhbWV0ZXIoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICAnUHVibGljQ2VydGlmaWNhdGUnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHBhcmFtZXRlck5hbWU6IHRoaXMucHVibGljQ2VydGlmaWNhdGVQYXJhbWV0ZXJQYXRoLFxuICAgICAgICAgICAgc3RyaW5nVmFsdWU6IHByb3BzLnB1YmxpY0NlcnRpZmljYXRlQXJuLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMucHJpdmF0ZUNlcnRpZmljYXRlQXJuKSB7XG4gICAgICAgIHRoaXMucHJpdmF0ZUNlcnRpZmljYXRlUGFyYW1ldGVyID0gbmV3IFN0cmluZ1BhcmFtZXRlcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdQcml2YXRlQ2VydGlmaWNhdGUnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHBhcmFtZXRlck5hbWU6IHRoaXMucHJpdmF0ZUNlcnRpZmljYXRlUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgICAgIHN0cmluZ1ZhbHVlOiBwcm9wcy5wcml2YXRlQ2VydGlmaWNhdGVBcm4sXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5jbG91ZEZvbnRDZXJ0aWZpY2F0ZUFybikge1xuICAgICAgICB0aGlzLmNsb3VkRnJvbnRDZXJ0aWZpY2F0ZVBhcmFtZXRlciA9IG5ldyBTdHJpbmdQYXJhbWV0ZXIoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICAnQ2xvdWRGcm9udENlcnRpZmljYXRlJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLmNsb3VkRnJvbnRDZXJ0aWZpY2F0ZVBhcmFtZXRlclBhdGgsXG4gICAgICAgICAgICBzdHJpbmdWYWx1ZTogcHJvcHMuY2xvdWRGb250Q2VydGlmaWNhdGVBcm4sXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5wdWJsaWNab25lTmFtZSkge1xuICAgICAgICB0aGlzLnB1YmxpY1pvbmVQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nUGFyYW1ldGVyKHRoaXMsICdQdWJsaWNab25lJywge1xuICAgICAgICAgIHBhcmFtZXRlck5hbWU6IHRoaXMucHVibGljWm9uZVBhcmFtZXRlclBhdGgsXG4gICAgICAgICAgc3RyaW5nVmFsdWU6IHByb3BzLnB1YmxpY1pvbmVOYW1lLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5wcml2YXRlWm9uZU5hbWUpIHtcbiAgICAgICAgdGhpcy5wcml2YXRlWm9uZVBhcmFtZXRlciA9IG5ldyBTdHJpbmdQYXJhbWV0ZXIodGhpcywgJ1ByaXZhdGVab25lJywge1xuICAgICAgICAgIHBhcmFtZXRlck5hbWU6IHRoaXMucHJpdmF0ZVpvbmVQYXJhbWV0ZXJQYXRoLFxuICAgICAgICAgIHN0cmluZ1ZhbHVlOiBwcm9wcy5wcml2YXRlWm9uZU5hbWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMubG9va3VwVnBjID8/IHRydWUpIHtcbiAgICAgIGlmICghdGhpcy52cGNJZCkge1xuICAgICAgICB0aGlzLnZwY0lkID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRnJvbUxvb2t1cChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHRoaXMudnBjUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzLmxvb2t1cEF6cyA/PyB0cnVlKSB7XG4gICAgICBpZiAoIXRoaXMuYXpzKSB7XG4gICAgICAgIHRoaXMuYXpzID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRnJvbUxvb2t1cChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHRoaXMuYXpzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgKS5zcGxpdCgnLCcpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMubG9va3VwUHVibGljU3VibmV0cyA/PyB0cnVlKSB7XG4gICAgICBpZiAoIXRoaXMucHVibGljU3VibmV0SWRzKSB7XG4gICAgICAgIHRoaXMucHVibGljU3VibmV0SWRzID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRnJvbUxvb2t1cChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHRoaXMucHVibGljU3VibmV0c1BhcmFtZXRlclBhdGgsXG4gICAgICAgICkuc3BsaXQoJywnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzLmxvb2t1cFByaXZhdGVTdWJuZXRzID8/IHRydWUpIHtcbiAgICAgIGlmICghdGhpcy5wcml2YXRlU3VibmV0SWRzKSB7XG4gICAgICAgIHRoaXMucHJpdmF0ZVN1Ym5ldElkcyA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZyb21Mb29rdXAoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLnByaXZhdGVTdWJuZXRzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgKS5zcGxpdCgnLCcpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMubG9va3VwSW50cmFTdWJuZXRzID8/IGZhbHNlKSB7XG4gICAgICBpZiAoIXRoaXMuaW50cmFTdWJuZXRJZHMpIHtcbiAgICAgICAgdGhpcy5pbnRyYVN1Ym5ldElkcyA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZyb21Mb29rdXAoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLmludHJhU3VibmV0c1BhcmFtZXRlclBhdGgsXG4gICAgICAgICkuc3BsaXQoJywnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzLmxvb2t1cFJlZHNoaWZ0U3VibmV0cyA/PyBmYWxzZSkge1xuICAgICAgaWYgKCF0aGlzLnJlZHNoaWZ0U3VibmV0SWRzKSB7XG4gICAgICAgIHRoaXMucmVkc2hpZnRTdWJuZXRJZHMgPSBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGcm9tTG9va3VwKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy5yZWRzaGlmdFN1Ym5ldHNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICApLnNwbGl0KCcsJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcy5sb29rdXBEYXRhYmFzZVN1Ym5ldHMgPz8gZmFsc2UpIHtcbiAgICAgIGlmICghdGhpcy5kYXRhYmFzZVN1Ym5ldElkcykge1xuICAgICAgICB0aGlzLmRhdGFiYXNlU3VibmV0SWRzID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRnJvbUxvb2t1cChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHRoaXMuZGF0YWJhc2VTdWJuZXRzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgKS5zcGxpdCgnLCcpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMubG9va3VwRWxhc3RpY2FjaGVTdWJuZXRzID8/IGZhbHNlKSB7XG4gICAgICBpZiAoIXRoaXMuZWxhc3RpY2FjaGVTdWJuZXRJZHMpIHtcbiAgICAgICAgdGhpcy5lbGFzdGljYWNoZVN1Ym5ldElkcyA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZyb21Mb29rdXAoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLmVsYXN0aWNhY2hlU3VibmV0c1BhcmFtZXRlclBhdGgsXG4gICAgICAgICkuc3BsaXQoJywnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzLmxvb2t1cE91dHBvc3RTdWJuZXRzID8/IGZhbHNlKSB7XG4gICAgICBpZiAoIXRoaXMub3V0cG9zdFN1Ym5ldElkcykge1xuICAgICAgICB0aGlzLm91dHBvc3RTdWJuZXRJZHMgPSBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGcm9tTG9va3VwKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy5vdXRwb3N0U3VibmV0c1BhcmFtZXRlclBhdGgsXG4gICAgICAgICkuc3BsaXQoJywnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzLmxvb2t1cFB1YmxpY0FsYnMgPz8gZmFsc2UpIHtcbiAgICAgIGlmICghdGhpcy5wdWJsaWNBbGJBcm5zKSB7XG4gICAgICAgIHRoaXMucHVibGljQWxiQXJucyA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZyb21Mb29rdXAoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLnB1YmxpY0FsYnNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICApLnNwbGl0KCcsJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcy5sb29rdXBQcml2YXRlQWxicyA/PyBmYWxzZSkge1xuICAgICAgaWYgKCF0aGlzLnByaXZhdGVBbGJBcm5zKSB7XG4gICAgICAgIHRoaXMucHJpdmF0ZUFsYkFybnMgPSBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGcm9tTG9va3VwKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy5wcml2YXRlQWxic1BhcmFtZXRlclBhdGgsXG4gICAgICAgICkuc3BsaXQoJywnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzLmxvb2t1cFB1YmxpY0FsYkNlcnRpZmljYXRlcyA/PyBmYWxzZSkge1xuICAgICAgaWYgKCF0aGlzLnB1YmxpY0FsYkNlcnRpZmljYXRlQXJucykge1xuICAgICAgICB0aGlzLnB1YmxpY0FsYkNlcnRpZmljYXRlQXJucyA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZyb21Mb29rdXAoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLnB1YmxpY0FsYkNlcnRpZmljYXRlc1BhcmFtZXRlclBhdGgsXG4gICAgICAgICkuc3BsaXQoJywnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzLmxvb2t1cFByaXZhdGVBbGJDZXJ0aWZpY2F0ZXMgPz8gZmFsc2UpIHtcbiAgICAgIGlmICghdGhpcy5wcml2YXRlQWxiQ2VydGlmaWNhdGVBcm5zKSB7XG4gICAgICAgIHRoaXMucHJpdmF0ZUFsYkNlcnRpZmljYXRlQXJucyA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZyb21Mb29rdXAoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLnByaXZhdGVBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICApLnNwbGl0KCcsJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcy5sb29rdXBBbHRQdWJsaWNBbGJzID8/IGZhbHNlKSB7XG4gICAgICBpZiAoIXRoaXMuYWx0UHVibGljQWxiQXJucykge1xuICAgICAgICB0aGlzLmFsdFB1YmxpY0FsYkFybnMgPSBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGcm9tTG9va3VwKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy5hbHRQdWJsaWNBbGJzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgKS5zcGxpdCgnLCcpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMubG9va3VwQWx0UHJpdmF0ZUFsYnMgPz8gZmFsc2UpIHtcbiAgICAgIGlmICghdGhpcy5hbHRQcml2YXRlQWxiQXJucykge1xuICAgICAgICB0aGlzLmFsdFByaXZhdGVBbGJBcm5zID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRnJvbUxvb2t1cChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHRoaXMuYWx0UHJpdmF0ZUFsYnNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICApLnNwbGl0KCcsJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcy5sb29rdXBBbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZXMgPz8gZmFsc2UpIHtcbiAgICAgIGlmICghdGhpcy5hbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZUFybnMpIHtcbiAgICAgICAgdGhpcy5hbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZUFybnMgPSBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGcm9tTG9va3VwKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy5hbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICApLnNwbGl0KCcsJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcy5sb29rdXBBbHRQcml2YXRlQWxiQ2VydGlmaWNhdGVzID8/IGZhbHNlKSB7XG4gICAgICBpZiAoIXRoaXMuYWx0UHJpdmF0ZUFsYkNlcnRpZmljYXRlQXJucykge1xuICAgICAgICB0aGlzLmFsdFByaXZhdGVBbGJDZXJ0aWZpY2F0ZUFybnMgPSBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGcm9tTG9va3VwKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy5hbHRQcml2YXRlQWxiQ2VydGlmaWNhdGVzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgKS5zcGxpdCgnLCcpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMubG9va3VwUHVibGljQ2VydGlmaWNhdGUgPz8gZmFsc2UpIHtcbiAgICAgIGlmICghdGhpcy5wdWJsaWNDZXJ0aWZpY2F0ZUFybikge1xuICAgICAgICB0aGlzLnB1YmxpY0NlcnRpZmljYXRlQXJuID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRnJvbUxvb2t1cChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHRoaXMucHVibGljQ2VydGlmaWNhdGVQYXJhbWV0ZXJQYXRoLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMubG9va3VwUHJpdmF0ZUNlcnRpZmljYXRlID8/IGZhbHNlKSB7XG4gICAgICBpZiAoIXRoaXMucHJpdmF0ZUNlcnRpZmljYXRlQXJuKSB7XG4gICAgICAgIHRoaXMucHJpdmF0ZUNlcnRpZmljYXRlQXJuID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRnJvbUxvb2t1cChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHRoaXMucHJpdmF0ZUNlcnRpZmljYXRlUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzLmxvb2t1cENsb3VkRnJvbnRDZXJ0aWZpY2F0ZSA/PyBmYWxzZSkge1xuICAgICAgaWYgKCF0aGlzLmNsb3VkRnJvbnRDZXJ0aWZpY2F0ZUFybikge1xuICAgICAgICB0aGlzLmNsb3VkRnJvbnRDZXJ0aWZpY2F0ZUFybiA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZyb21Mb29rdXAoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLmNsb3VkRnJvbnRDZXJ0aWZpY2F0ZVBhcmFtZXRlclBhdGgsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcy5sb29rdXBQdWJsaWNab25lID8/IGZhbHNlKSB7XG4gICAgICBpZiAoIXRoaXMucHVibGljWm9uZU5hbWUpIHtcbiAgICAgICAgdGhpcy5wdWJsaWNab25lTmFtZSA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZyb21Mb29rdXAoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLnB1YmxpY1pvbmVQYXJhbWV0ZXJQYXRoLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMubG9va3VwUHJpdmF0ZVpvbmUgPz8gZmFsc2UpIHtcbiAgICAgIGlmICghdGhpcy5wcml2YXRlWm9uZU5hbWUpIHtcbiAgICAgICAgdGhpcy5wcml2YXRlWm9uZU5hbWUgPSBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGcm9tTG9va3VwKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy5wcml2YXRlWm9uZVBhcmFtZXRlclBhdGgsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
307
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay1wYXJhbWV0ZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy12cGMvbGliL25ldHdvcmstcGFyYW1ldGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpREFBeUU7QUFFekUsMkNBSXVCO0FBQ3ZCLDZDQUErQztBQXNTL0M7OztHQUdHO0FBQ0gsTUFBYSxpQkFBa0IsU0FBUSwyQkFBaUI7SUEyVXREOzs7Ozs7T0FNRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNkI7O1FBQ3JFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsWUFBWSxFQUFFLHNCQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsMEJBQWUsQ0FBQztTQUN0RSxDQUFDLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFBLEtBQUssQ0FBQyxNQUFNLG1DQUFJLElBQUksQ0FBQztRQUNwQyxNQUFNLE1BQU0sR0FBRyxNQUFBLEtBQUssQ0FBQyxNQUFNLG1DQUFJLFVBQVUsQ0FBQztRQUMxQyxNQUFNLElBQUksR0FBRyxHQUFHLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEdBQUcsSUFBSSxNQUFNLENBQUM7UUFDdEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEdBQUcsSUFBSSxNQUFNLENBQUM7UUFDdEMsSUFBSSxDQUFDLDBCQUEwQixHQUFHLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQztRQUMzRCxJQUFJLENBQUMsMkJBQTJCLEdBQUcsR0FBRyxJQUFJLGtCQUFrQixDQUFDO1FBQzdELElBQUksQ0FBQyx5QkFBeUIsR0FBRyxHQUFHLElBQUksZ0JBQWdCLENBQUM7UUFDekQsSUFBSSxDQUFDLDRCQUE0QixHQUFHLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQztRQUMvRCxJQUFJLENBQUMsNEJBQTRCLEdBQUcs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QUFJLEVBQ0osSUFBSSxDQUFDLCtCQUErQixDQUNyQyxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLE1BQUEsS0FBSyxDQUFDLDJCQUEyQixtQ0FBSSxLQUFLLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7Z0JBQ25DLElBQUksQ0FBQyx3QkFBd0IsR0FBRyx5QkFBZSxDQUFDLGVBQWUsQ0FDN0QsSUFBSSxFQUNKLElBQUksQ0FBQyxrQ0FBa0MsQ0FDeEMsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxNQUFBLEtBQUssQ0FBQyxnQkFBZ0IsbUNBQUksS0FBSyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLGNBQWMsR0FBRyx5QkFBZSxDQUFDLGVBQWUsQ0FDbkQsSUFBSSxFQUNKLElBQUksQ0FBQyx1QkFBdUIsQ0FDN0IsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxNQUFBLEtBQUssQ0FBQyxpQkFBaUIsbUNBQUksS0FBSyxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyx5QkFBZSxDQUFDLGVBQWUsQ0FDcEQsSUFBSSxFQUNKLElBQUksQ0FBQyx3QkFBd0IsQ0FDOUIsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBdHZCRCw4Q0FzdkJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTdHJpbmdMaXN0UGFyYW1ldGVyLCBTdHJpbmdQYXJhbWV0ZXJ9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zc20nO1xuaW1wb3J0IHR5cGUge0NvbnN0cnVjdH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQge1xuICBFeHRlbmRlZENvbnN0cnVjdCxcbiAgdHlwZSBFeHRlbmRlZENvbnN0cnVjdFByb3BzLFxuICBTdGFuZGFyZFRhZ3MsXG59IGZyb20gJy4uLy4uL2F3cy1jZGsnO1xuaW1wb3J0IHtMaWJTdGFuZGFyZFRhZ3N9IGZyb20gJy4uLy4uL3RydWVtYXJrJztcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBOZXR3b3JrUGFyYW1ldGVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrUGFyYW1ldGVyc1Byb3BzIGV4dGVuZHMgRXh0ZW5kZWRDb25zdHJ1Y3RQcm9wcyB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBuZXR3b3JrLiBUaGlzIGlzIG5vcm1hbGx5IHRoZSBuYW1lIG9mIHlvdXIgVlBDLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQcmVmaXggZnJvbSB3aGljaCB0byBzdG9yZSBhbmQgcmV0cmlldmUgcGFyYW1ldGVycy4gRGVmYXVsdCBpcyBcIi9uZXR3b3JrXCIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gXCIvbmV0d29ya1wiXG4gICAqL1xuICByZWFkb25seSBwcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNldHRpbmcgdGhpcyB0byBmYWxzZSB3aWxsIGRpc2FibGUgdGhlIGNyZWF0aW9uIG9mIHJlc291cmNlcyBpbiB0aGlzIGNvbnN0cnVjdC4gRGVmYXVsdCBpcyB0cnVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNldHRpbmcgdGhpcyB0byB0cnVlIHdpbGwgc3VwcHJlc3MgdGhlIGNyZWF0aW9uIG9mIGRlZmF1bHQgdGFncyBvbiByZXNvdXJjZXMgY3JlYXRlZCBieSB0aGlzXG4gICAqIGNvbnN0cnVjdC4gRGVmYXVsdCBpcyBmYWxzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc3VwcHJlc3NUYWdnaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVlBDIElEIHRvIHN0b3JlLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEF2YWlsYWJpbGl0eS16b25lIHZhbHVlcyB0byBzdG9yZS5cbiAgICovXG4gIHJlYWRvbmx5IGF6cz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBQdWJsaWMgc3VibmV0IElEcyB0byBzdG9yZS5cbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY1N1Ym5ldElkcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBQcml2YXRlIHN1Ym5ldCBJRHMgdG8gc3RvcmUuXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlU3VibmV0SWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEludHJhIHN1Ym5ldCBJRHMgdG8gc3RvcmUuXG4gICAqL1xuICByZWFkb25seSBpbnRyYVN1Ym5ldElkcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBSZWRzaGlmdCBzdWJuZXQgSURzIHRvIHN0b3JlLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVkc2hpZnRTdWJuZXRJZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogRGF0YWJhc2Ugc3VibmV0IElEcyB0byBzdG9yZS5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGFiYXNlU3VibmV0SWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEVsYXN0aWNhY2hlIHN1Ym5ldCBJRHMgdG8gc3RvcmUuXG4gICAqL1xuICByZWFkb25seSBlbGFzdGljYWNoZVN1Ym5ldElkcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBPdXRwb3N0IHN1Ym5ldCBJRHMgdG8gc3RvcmUuXG4gICAqL1xuICByZWFkb25seSBvdXRwb3N0U3VibmV0SWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFB1YmxpYyBBTEIgQVJOcyB0byBzdG9yZS5cbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY0FsYkFybnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUHJpdmF0ZSBBTEIgQVJOcyB0byBzdG9yZS5cbiAgICovXG4gIHJlYWRvbmx5IHByaXZhdGVBbGJBcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIENlcnRpZmljYXRlIEFSTnMgb24gcHVibGljIEFMQnMgdG8gc3RvcmUuIEluZGV4ZXMgc2hvdWxkIG1hdGNoIHB1YmxpY0FsYkFybnMuXG4gICAqL1xuICByZWFkb25seSBwdWJsaWNBbGJDZXJ0aWZpY2F0ZUFybnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQ2VydGlmaWNhdGUgQVJOcyBvbiBwcml2YXRlIEFMQnMgdG8gc3RvcmUuIEluZGV4ZXMgc2hvdWxkIG1hdGNoIHByaXZhdGVBbGJBcm5zLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZUFsYkNlcnRpZmljYXRlQXJucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBbHRlcm5hdGl2ZSBwdWJsaWMgQUxCIEFSTnMgdG8gc3RvcmUuXG4gICAqL1xuICByZWFkb25seSBhbHRQdWJsaWNBbGJBcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEFsdGVybmF0aXZlIHByaXZhdGUgQUxCIEFSTnMgdG8gc3RvcmUuXG4gICAqL1xuICByZWFkb25seSBhbHRQcml2YXRlQWxiQXJucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBbHRlcm5hdGl2ZSBjZXJ0aWZpY2F0ZSBBUk5zIG9uIHB1YmxpYyBBTEJzIHRvIHN0b3JlLiBJbmRleGVzIHNob3VsZCBtYXRjaCBwdWJsaWNBbGJBcm5zLlxuICAgKi9cbiAgcmVhZG9ubHkgYWx0UHVibGljQWxiQ2VydGlmaWNhdGVBcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEFsdGVybmF0aXZlIGNlcnRpZmljYXRlIEFSTnMgb24gcHJpdmF0ZSBBTEJzIHRvIHN0b3JlLiBJbmRleGVzIHNob3VsZCBtYXRjaCBwcml2YXRlQWxiQXJucy5cbiAgICovXG4gIHJlYWRvbmx5IGFsdFByaXZhdGVBbGJDZXJ0aWZpY2F0ZUFybnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUHVibGljIGNlcnRpZmljYXRlIEFSTiB0byBzdG9yZSBmb3IgdGhpcyBuZXR3b3JrLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljQ2VydGlmaWNhdGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByaXZhdGUgY2VydGlmaWNhdGUgQVJOIHRvIHN0b3JlIGZvciB0aGlzIG5ldHdvcmsuXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlQ2VydGlmaWNhdGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENsb3VkRnJvbnQgY2VydGlmaWNhdGUgQVJOIHRvIHN0b3JlIGZvciB0aGlzIG5ldHdvcmsuXG4gICAqL1xuICByZWFkb25seSBjbG91ZEZvbnRDZXJ0aWZpY2F0ZUFybj86IHN0cmluZztcblxuICAvKipcbiAgICogUHVibGljIHpvbmUgbmFtZSB0byBzdG9yZSBmb3IgdGhpcyBuZXR3b3JrLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljWm9uZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByaXZhdGUgem9uZSBuYW1lIHRvIHN0b3JlIGZvciB0aGlzIG5ldHdvcmsuXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlWm9uZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExvb2t1cCBWUEMgdmFsdWUgaWYgbm90IHByb3ZpZGVkLiBEZWZhdWx0IGlzIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9va3VwVnBjPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTG9va3VwIGF2YWlsYWJpbGl0eSB6b25lcyBpZiBub3QgcHJvdmlkZWQuIERlZmF1bHQgaXMgdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0cnVlXG4gICAqL1xuICByZWFkb25seSBsb29rdXBBenM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb29rdXAgcHVibGljIHN1Ym5ldHMgaWYgbm90IHByb3ZpZGVkLiBEZWZhdWx0IGlzIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9va3VwUHVibGljU3VibmV0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExvb2t1cCBwcml2YXRlIHN1Ym5ldHMgaWYgbm90IHByb3ZpZGVkLiBEZWZhdWx0IGlzIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9va3VwUHJpdmF0ZVN1Ym5ldHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb29rdXAgaW50cmEgc3VibmV0cyBpZiBub3QgcHJvdmlkZWQuIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cEludHJhU3VibmV0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExvb2t1cCByZWRzaGlmdCBzdWJuZXRzIGlmIG5vdCBwcm92aWRlZC4gRGVmYXVsdCBpcyBmYWxzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9va3VwUmVkc2hpZnRTdWJuZXRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTG9va3VwIGRhdGFiYXNlIHN1Ym5ldHMgaWYgbm90IHByb3ZpZGVkLiBEZWZhdWx0IGlzIGZhbHNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBsb29rdXBEYXRhYmFzZVN1Ym5ldHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb29rdXAgZWxhc3RpY2FjaGUgc3VibmV0cyBpZiBub3QgcHJvdmlkZWQuIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cEVsYXN0aWNhY2hlU3VibmV0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExvb2t1cCBvdXRwb3N0IHN1Ym5ldHMgaWYgbm90IHByb3ZpZGVkLiBEZWZhdWx0IGlzIGZhbHNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBsb29rdXBPdXRwb3N0U3VibmV0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExvb2t1cCBwdWJsaWMgQUxCcyBpZiBub3QgcHJvdmlkZWQuIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cFB1YmxpY0FsYnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb29rdXAgcHJpdmF0ZSBBTEJzIGlmIG5vdCBwcm92aWRlZC4gRGVmYXVsdCBpcyBmYWxzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9va3VwUHJpdmF0ZUFsYnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb29rdXAgQUNNIGNlcnRpZmljYXRlcyBvbiBwdWJsaWMgQUxCcyBpZiBwcm92aWRlZC4gRGVmYXVsdCBpcyBmYWxzZS5cbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cFB1YmxpY0FsYkNlcnRpZmljYXRlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExvb2t1cCBBQ00gY2VydGlmaWNhdGVzIG9uIHByaXZhdGUgQUxCcyBpZiBwcm92aWRlZC4gRGVmYXVsdCBpcyBmYWxzZS5cbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cFByaXZhdGVBbGJDZXJ0aWZpY2F0ZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb29rdXAgYWx0ZXJuYXRpdmUgcHVibGljIEFMQnMgaWYgbm90IHByb3ZpZGVkLiBEZWZhdWx0IGlzIGZhbHNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBsb29rdXBBbHRQdWJsaWNBbGJzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTG9va3VwIGFsdGVybmF0aXZlIHByaXZhdGUgQUxCcyBpZiBub3QgcHJvdmlkZWQuIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cEFsdFByaXZhdGVBbGJzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTG9va3VwIGFsdGVybmF0aXZlIEFDTSBjZXJ0aWZpY2F0ZXMgb24gcHVibGljIEFMQnMgaWYgcHJvdmlkZWQuIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cEFsdFB1YmxpY0FsYkNlcnRpZmljYXRlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExvb2t1cCBhbHRlcm5hdGl2ZSBBQ00gY2VydGlmaWNhdGVzIG9uIHByaXZhdGUgQUxCcyBpZiBwcm92aWRlZC4gRGVmYXVsdCBpcyBmYWxzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9va3VwQWx0UHJpdmF0ZUFsYkNlcnRpZmljYXRlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExvb2t1cCBwdWJsaWMgY2VydGlmaWNhdGUuIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cFB1YmxpY0NlcnRpZmljYXRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTG9va3VwIHByaXZhdGUgY2VydGlmaWNhdGUuIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cFByaXZhdGVDZXJ0aWZpY2F0ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExvb2t1cCBDbG91ZEZyb250IGNlcnRpZmljYXRlLiBEZWZhdWx0IGlzIGZhbHNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBsb29rdXBDbG91ZEZyb250Q2VydGlmaWNhdGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb29rdXAgcHVibGljIHpvbmUuIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cFB1YmxpY1pvbmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb29rdXAgcHJpdmF0ZSB6b25lLiBEZWZhdWx0IGlzIGZhbHNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBsb29rdXBQcml2YXRlWm9uZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogU3RvcmVzIGFuZCByZXRyaWV2ZXMgbmV0d29yayBpbmZyYXN0cnVjdHVyZSBpZGVudGlmaWVycyB1c2luZ1xuICogQVdTIFN5c3RlbXMgTWFuYWdlciBQYXJhbWV0ZXIgU3RvcmUuXG4gKi9cbmV4cG9ydCBjbGFzcyBOZXR3b3JrUGFyYW1ldGVycyBleHRlbmRzIEV4dGVuZGVkQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIFZQQyBJRFxuICAgKi9cbiAgcmVhZG9ubHkgdnBjUGFyYW1ldGVyUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIHRoZSBhdmFpbGFiaWxpdHkgem9uZXNcbiAgICovXG4gIHJlYWRvbmx5IGF6c1BhcmFtZXRlclBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byB0aGUgcHVibGljIHN1Ym5ldCBJRHNcbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY1N1Ym5ldHNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIHByaXZhdGUgc3VibmV0IElEc1xuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZVN1Ym5ldHNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIGludHJhIHN1Ym5ldCBJRHNcbiAgICovXG4gIHJlYWRvbmx5IGludHJhU3VibmV0c1BhcmFtZXRlclBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byB0aGUgcmVkc2hpZnQgc3VibmV0IElEc1xuICAgKi9cbiAgcmVhZG9ubHkgcmVkc2hpZnRTdWJuZXRzUGFyYW1ldGVyUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIHRoZSBkYXRhYmFzZSBzdWJuZXQgSURzXG4gICAqL1xuICByZWFkb25seSBkYXRhYmFzZVN1Ym5ldHNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIGVsYXN0aWNhY2hlIHN1Ym5ldCBJRHNcbiAgICovXG4gIHJlYWRvbmx5IGVsYXN0aWNhY2hlU3VibmV0c1BhcmFtZXRlclBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byB0aGUgb3V0cG9zdCBzdWJuZXQgSURzLlxuICAgKi9cbiAgcmVhZG9ubHkgb3V0cG9zdFN1Ym5ldHNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIHB1YmxpYyBBTEIgQVJOcy5cbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY0FsYnNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIHByaXZhdGUgQUxCIEFSTnMuXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlQWxic1BhcmFtZXRlclBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byB0aGUgY2VydGlmaWNhdGUgQVJOcyBvbiB0aGUgcHVibGljIEFMQnMuXG4gICAqL1xuICByZWFkb25seSBwdWJsaWNBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIGNlcnRpZmljYXRlIEFSTnMgb24gdGhlIHByaXZhdGUgQUxCcy5cbiAgICovXG4gIHJlYWRvbmx5IHByaXZhdGVBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIGFsdGVybmF0aXZlIHB1YmxpYyBBTEIgQVJOcy5cbiAgICovXG4gIHJlYWRvbmx5IGFsdFB1YmxpY0FsYnNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIGFsdGVybmF0aXZlIHByaXZhdGUgQUxCIEFSTnMuXG4gICAqL1xuICByZWFkb25seSBhbHRQcml2YXRlQWxic1BhcmFtZXRlclBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byB0aGUgYWx0ZXJuYXRpdmUgY2VydGlmaWNhdGUgQVJOcyBvbiB0aGUgcHVibGljIEFMQnMuXG4gICAqL1xuICByZWFkb25seSBhbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIGFsdGVybmF0aXZlIGNlcnRpZmljYXRlIEFSTnMgb24gdGhlIHByaXZhdGUgQUxCcy5cbiAgICovXG4gIHJlYWRvbmx5IGFsdFByaXZhdGVBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIHB1YmxpYyBjZXJ0aWZpY2F0ZSBBUk4uXG4gICAqL1xuICByZWFkb25seSBwdWJsaWNDZXJ0aWZpY2F0ZVBhcmFtZXRlclBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byB0aGUgcHJpdmF0ZSBjZXJ0aWZpY2F0ZSBBUk4uXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlQ2VydGlmaWNhdGVQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIENsb3VkRnJvbnQgY2VydGl0aWNhdGUgQVJOLlxuICAgKi9cbiAgcmVhZG9ubHkgY2xvdWRGcm9udENlcnRpZmljYXRlUGFyYW1ldGVyUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIHRoZSBwdWJsaWMgem9uZS5cbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY1pvbmVQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIHByaXZhdGUgem9uZS5cbiAgICovXG4gIHJlYWRvbmx5IHByaXZhdGVab25lUGFyYW1ldGVyUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgdnBjSWQgd2FzIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjUGFyYW1ldGVyPzogU3RyaW5nUGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgYXpzIHdlcmUgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBhenNQYXJhbWV0ZXI/OiBTdHJpbmdMaXN0UGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyYXRlZCBpZiBwdWJsaWNTdWJuZXRJZHMgd2VyZSBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY1N1Ym5ldHNQYXJhbWV0ZXI/OiBTdHJpbmdMaXN0UGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgcHJpdmF0ZVN1Ym5ldElkcyB3ZXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZVN1Ym5ldHNQYXJhbWV0ZXI/OiBTdHJpbmdMaXN0UGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgaW50cmFTdWJuZXRJZHMgd2VyZSBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGludHJhU3VibmV0c1BhcmFtZXRlcj86IFN0cmluZ0xpc3RQYXJhbWV0ZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJhbWV0ZXIgY3JlYXRlZCBpZiByZWRzaGlmdFN1Ym5ldElkcyB3ZXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVkc2hpZnRTdWJuZXRzUGFyYW1ldGVyPzogU3RyaW5nTGlzdFBhcmFtZXRlcjtcblxuICAvKipcbiAgICogVGhlIHBhcmFtZXRlciBjcmVhdGVkIGlmIGRhdGFiYXNlU3VibmV0SWRzIHdlcmUgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBkYXRhYmFzZVN1Ym5ldHNQYXJhbWV0ZXI/OiBTdHJpbmdMaXN0UGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgZWxhc3RpY2FjaGVTdWJuZXRJZHMgd2VyZSBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGVsYXN0aWNhY2hlU3VibmV0c1BhcmFtZXRlcj86IFN0cmluZ0xpc3RQYXJhbWV0ZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJhbWV0ZXIgY3JlYXRlZCBpZiBvdXRwb3N0U3VibmV0SWRzIHdlcmUgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBvdXRwb3N0U3VibmV0c1ByYW1ldGVyPzogU3RyaW5nTGlzdFBhcmFtZXRlcjtcblxuICAvKipcbiAgICogVGhlIHBhcmFtZXRlciBjcmVhdGVkIGlmIHB1YmxpY0FsYkFybnMgd2VyZSBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY0FsYnNQYXJhbWV0ZXI/OiBTdHJpbmdMaXN0UGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgcHJpdmF0ZUFsYkFybnMgd2VyZSBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHByaXZhdGVBbGJzUGFyYW1ldGVyPzogU3RyaW5nTGlzdFBhcmFtZXRlcjtcblxuICAvKipcbiAgICogVGhlIHBhcmFtZXRlciBjcmVhdGVkIGlmIHB1YmxpY0FsYkNlcnRpZmljYXRlQXJucyB3ZXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljQWxiQ2VydGlmaWNhdGVzUGFyYW1ldGVyPzogU3RyaW5nTGlzdFBhcmFtZXRlcjtcblxuICAvKipcbiAgICogVGhlIHBhcmFtZXRlciBjcmVhdGVkIGlmIHByaXZhdGVBbGJDZXJ0aWZpY2F0ZUFybnMgd2VyZSBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHByaXZhdGVBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXI/OiBTdHJpbmdMaXN0UGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgYWx0UHVibGljQWxiQXJucyB3ZXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgYWx0UHVibGljQWxic1BhcmFtZXRlcj86IFN0cmluZ0xpc3RQYXJhbWV0ZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJhbWV0ZXIgY3JlYXRlZCBpZiBhbHRQcml2YXRlQWxiQXJucyB3ZXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgYWx0UHJpdmF0ZUFsYnNQYXJhbWV0ZXI/OiBTdHJpbmdMaXN0UGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgYWx0UHVibGljQWxiQ2VydGlmaWNhdGVBcm5zIHdlcmUgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBhbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXI/OiBTdHJpbmdMaXN0UGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgYWx0UHJpdmF0ZUFsYkNlcnRpZmljYXRlQXJucyB3ZXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgYWx0UHJpdmF0ZUFsYkNlcnRpZmljYXRlc1BhcmFtZXRlcj86IFN0cmluZ0xpc3RQYXJhbWV0ZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJhbWV0ZXIgY3JlYXRlZCBpZiBwdWJsaWNDZXJ0aWZpY2F0ZUFybiB3YXMgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBwdWJsaWNDZXJ0aWZpY2F0ZVBhcmFtZXRlcj86IFN0cmluZ1BhcmFtZXRlcjtcblxuICAvKipcbiAgICogVGhlIHBhcmFtZXRlciBjcmVhdGVkIGlmIHByaXZhdGVDZXJ0aWZpY2F0ZUFybiB3YXMgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlQ2VydGlmaWNhdGVQYXJhbWV0ZXI/OiBTdHJpbmdQYXJhbWV0ZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJhbWV0ZXIgY3JlYXRlZCBpZiBjbG91ZEZyb250Q2VydGlmaWNhdGVBcm4gd2FzIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgY2xvdWRGcm9udENlcnRpZmljYXRlUGFyYW1ldGVyPzogU3RyaW5nUGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgcHVibGljWm9uZU5hbWUgd2FzIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljWm9uZVBhcmFtZXRlcj86IFN0cmluZ1BhcmFtZXRlcjtcblxuICAvKipcbiAgICogVGhlIHBhcmFtZXRlciBjcmVhdGVkIGlmIHByaXZhdGVab25lTmFtZSB3YXMgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlWm9uZVBhcmFtZXRlcj86IFN0cmluZ1BhcmFtZXRlcjtcblxuICAvKipcbiAgICogVGhlIHZwY0lkIGlmIHByb3ZpZGVkIG9yIGxvb2t1cHMgYXJlIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSB2cGNJZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGF2YWlsYWJpbGl0eSB6b25lcyBpZiBwcm92aWRlZCBvciBsb29rdXBzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgYXpzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBwdWJsaWMgc3VibmV0IElEcyBpZiBwcm92aWRlZCBvciBsb29rdXBzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljU3VibmV0SWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBwcml2YXRlIHN1Ym5ldCBJRHMgaWYgcHJvdmlkZWQgb3IgbG9va3VwcyBhcmUgZW5hYmxlZC5cbiAgICovXG4gIHJlYWRvbmx5IHByaXZhdGVTdWJuZXRJZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGludHJhIHN1Ym5ldCBJRHMgaWYgcHJvdmlkZWQgb3IgbG9va3VwcyBhcmUgZW5hYmxlZC5cbiAgICovXG4gIHJlYWRvbmx5IGludHJhU3VibmV0SWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSByZWRzaGlmdCBzdWJuZXQgSURzIGlmIHByb3ZpZGVkIG9yIGxvb2t1cHMgYXJlIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSByZWRzaGlmdFN1Ym5ldElkcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgZGF0YWJhc2Ugc3VibmV0IElEcyBpZiBwcm92aWRlZCBvciBsb29rdXBzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWJhc2VTdWJuZXRJZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGVsYXN0aWNhY2hlIHN1Ym5ldCBJRHMgaWYgcHJvdmlkZWQgb3IgbG9va3VwcyBhcmUgZW5hYmxlZC5cbiAgICovXG4gIHJlYWRvbmx5IGVsYXN0aWNhY2hlU3VibmV0SWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBvdXRwb3N0IHN1Ym5ldCBJRHMgaWYgcHJvdmlkZWQgb3IgbG9va3VwcyBhcmUgZW5hYmxlZC5cbiAgICovXG4gIHJlYWRvbmx5IG91dHBvc3RTdWJuZXRJZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHB1YmxpYyBBTEIgQVJOcyBpZiBwcm92aWRlZCBvciBsb29rdXBzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljQWxiQXJucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpdmF0ZSBBTEIgQVJOcyBpZiBwcm92aWRlZCBvciBsb29rdXBzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZUFsYkFybnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGNlcnRpZmljYXRlIEFSTnMgb24gdGhlIHB1YmxpYyBBTEJzIGlmIHByb3ZpZGVkIG9yIGxvb2t1cHMgYXJlIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSBwdWJsaWNBbGJDZXJ0aWZpY2F0ZUFybnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGNlcnRpZmljYXRlIEFSTnMgb24gdGhlIHByaXZhdGUgQUxicyBpZiBwcm92aWRlZCBvciBsb29rdXBzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZUFsYkNlcnRpZmljYXRlQXJucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgYWx0ZXJuYXRpdmUgcHVibGljIEFMQiBBUk5zIGlmIHByb3ZpZGVkIG9yIGxvb2t1cHMgYXJlIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSBhbHRQdWJsaWNBbGJBcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBhbHRlcm5hdGl2ZSBwcml2YXRlIEFMQiBBUk5zIGlmIHByb3ZpZGVkIG9yIGxvb2t1cHMgYXJlIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSBhbHRQcml2YXRlQWxiQXJucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgY2VydGlmaWNhdGUgQVJOcyBvbiB0aGUgYWx0ZXJuYXRpdmUgcHVibGljIEFMQnMgaWYgcHJvdmlkZWQgb3IgbG9va3VwcyBhcmUgZW5hYmxlZC5cbiAgICovXG4gIHJlYWRvbmx5IGFsdFB1YmxpY0FsYkNlcnRpZmljYXRlQXJucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgY2VydGlmaWNhdGUgQVJOcyBvbiB0aGUgYWx0ZXJuYXRpdmUgcHJpdmF0ZSBBTGJzIGlmIHByb3ZpZGVkIG9yIGxvb2t1cHMgYXJlIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSBhbHRQcml2YXRlQWxiQ2VydGlmaWNhdGVBcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBwdWJsaWMgY2VydGlmaWNhdGUgQVJOIGlmIHByb3ZpZGVkIG9yIGxvb2t1cHMgYXJlIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSBwdWJsaWNDZXJ0aWZpY2F0ZUFybj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHByaXZhdGUgY2VydGlmaWNhdGUgQVJOIGlmIHByb3ZpZGVkIG9yIGxvb2t1cHMgYXJlIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlQ2VydGlmaWNhdGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBDbG91ZEZyb250IGNlcnRpZmljYXRlIEFSTiBpZiBwcm92aWRlZCBvciBsb29rdXBzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgY2xvdWRGcm9udENlcnRpZmljYXRlQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcHVibGljIHpvbmUgbmFtZSBpZiBwcm92aWRlZCBvciBsb29rdXBzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljWm9uZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwcml2YXRlIHpvbmUgbmFtZSBpZiBwcm92aWRlZCBvciBsb29rdXBzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZVpvbmVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IE5ldHdvcmtQYXJhbWV0ZXJzIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHBhcmVudCBzY29wZVxuICAgKiBAcGFyYW0gaWQgdGhlIGlkIG9mIHRoZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gcHJvcHMgcHJvcGVydGllcyBmb3IgdGhlIGluc3RhbmNlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTmV0d29ya1BhcmFtZXRlcnNQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgc3RhbmRhcmRUYWdzOiBTdGFuZGFyZFRhZ3MubWVyZ2UocHJvcHMuc3RhbmRhcmRUYWdzLCBMaWJTdGFuZGFyZFRhZ3MpLFxuICAgIH0pO1xuICAgIGNvbnN0IGNyZWF0ZSA9IHByb3BzLmNyZWF0ZSA/PyB0cnVlO1xuICAgIGNvbnN0IHByZWZpeCA9IHByb3BzLnByZWZpeCA/PyAnL25ldHdvcmsnO1xuICAgIGNvbnN0IHBhdGggPSBgJHtwcmVmaXh9LyR7cHJvcHMubmFtZX1gO1xuICAgIHRoaXMudnBjUGFyYW1ldGVyUGF0aCA9IGAke3BhdGh9L3ZwY2A7XG4gICAgdGhpcy5henNQYXJhbWV0ZXJQYXRoID0gYCR7cGF0aH0vYXpzYDtcbiAgICB0aGlzLnB1YmxpY1N1Ym5ldHNQYXJhbWV0ZXJQYXRoID0gYCR7cGF0aH0vcHVibGljX3N1Ym5ldHNgO1xuICAgIHRoaXMucHJpdmF0ZVN1Ym5ldHNQYXJhbWV0ZXJQYXRoID0gYCR7cGF0aH0vcHJpdmF0ZV9zdWJuZXRzYDtcbiAgICB0aGlzLmludHJhU3VibmV0c1BhcmFtZXRlclBhdGggPSBgJHtwYXRofS9pbnRyYV9zdWJuZXRzYDtcbiAgICB0aGlzLnJlZHNoaWZ0U3VibmV0c1BhcmFtZXRlclBhdGggPSBgJHtwYXRofS9yZWRzaGlmdF9zdWJuZXRzYDtcbiAgICB0aGlzLmRhdGFiYXNlU3VibmV0c1BhcmFtZXRlclBhdGggPSBgJHtwYXRofS9kYXRhYmFzZV9zdWJuZXRzYDtcbiAgICB0aGlzLmVsYXN0aWNhY2hlU3VibmV0c1BhcmFtZXRlclBhdGggPSBgJHtwYXRofS9lbGFzdGljYWNoZV9zdWJuZXRzYDtcbiAgICB0aGlzLm91dHBvc3RTdWJuZXRzUGFyYW1ldGVyUGF0aCA9IGAke3BhdGh9L291dHBvc3Rfc3VibmV0c2A7XG4gICAgdGhpcy5wdWJsaWNBbGJzUGFyYW1ldGVyUGF0aCA9IGAke3BhdGh9L3B1YmxpY19hbGJzYDtcbiAgICB0aGlzLnByaXZhdGVBbGJzUGFyYW1ldGVyUGF0aCA9IGAke3BhdGh9L3ByaXZhdGVfYWxic2A7XG4gICAgdGhpcy5wdWJsaWNBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoID0gYCR7cGF0aH0vcHVibGljX2FsYl9jZXJ0aWZpY2F0ZXNgO1xuICAgIHRoaXMucHJpdmF0ZUFsYkNlcnRpZmljYXRlc1BhcmFtZXRlclBhdGggPSBgJHtwYXRofS9wcml2YXRlX2FsYl9jZXJ0aWZpY2F0ZXNgO1xuICAgIHRoaXMuYWx0UHVibGljQWxic1BhcmFtZXRlclBhdGggPSBgJHtwYXRofS9hbHRfcHVibGljX2FsYnNgO1xuICAgIHRoaXMuYWx0UHJpdmF0ZUFsYnNQYXJhbWV0ZXJQYXRoID0gYCR7cGF0aH0vYWx0X3ByaXZhdGVfYWxic2A7XG4gICAgdGhpcy5hbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoID0gYCR7cGF0aH0vYWx0X3B1YmxpY19hbGJfY2VydGlmaWNhdGVzYDtcbiAgICB0aGlzLmFsdFByaXZhdGVBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoID0gYCR7cGF0aH0vYWx0X3ByaXZhdGVfYWxiX2NlcnRpZmljYXRlc2A7XG4gICAgdGhpcy5wdWJsaWNDZXJ0aWZpY2F0ZVBhcmFtZXRlclBhdGggPSBgJHtwYXRofS9wdWJsaWNfY2VydGlmaWNhdGVgO1xuICAgIHRoaXMucHJpdmF0ZUNlcnRpZmljYXRlUGFyYW1ldGVyUGF0aCA9IGAke3BhdGh9L3ByaXZhdGVfY2VydGlmaWNhdGVgO1xuICAgIHRoaXMuY2xvdWRGcm9udENlcnRpZmljYXRlUGFyYW1ldGVyUGF0aCA9IGAke3BhdGh9L2Nsb3VkZnJvbnRfY2VydGlmaWNhdGVgO1xuICAgIHRoaXMucHVibGljWm9uZVBhcmFtZXRlclBhdGggPSBgJHtwYXRofS9wdWJsaWNfem9uZWA7XG4gICAgdGhpcy5wcml2YXRlWm9uZVBhcmFtZXRlclBhdGggPSBgJHtwYXRofS9wcml2YXRlX3pvbmVgO1xuXG4gICAgaWYgKGNyZWF0ZSkge1xuICAgICAgaWYgKHByb3BzLnZwY0lkKSB7XG4gICAgICAgIHRoaXMudnBjUGFyYW1ldGVyID0gbmV3IFN0cmluZ1BhcmFtZXRlcih0aGlzLCAnVnBjSWQnLCB7XG4gICAgICAgICAgcGFyYW1ldGVyTmFtZTogdGhpcy52cGNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICAgIHN0cmluZ1ZhbHVlOiBwcm9wcy52cGNJZCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudnBjSWQgPSBwcm9wcy52cGNJZDtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5henMpIHtcbiAgICAgICAgdGhpcy5henNQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nTGlzdFBhcmFtZXRlcih0aGlzLCAnQVpzJywge1xuICAgICAgICAgIHBhcmFtZXRlck5hbWU6IHRoaXMuYXpzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgICBzdHJpbmdMaXN0VmFsdWU6IHByb3BzLmF6cyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYXpzID0gcHJvcHMuYXpzO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLnB1YmxpY1N1Ym5ldElkcykge1xuICAgICAgICB0aGlzLnB1YmxpY1N1Ym5ldHNQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nTGlzdFBhcmFtZXRlcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdQdWJsaWNTdWJuZXRzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLnB1YmxpY1N1Ym5ldHNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICAgICAgc3RyaW5nTGlzdFZhbHVlOiBwcm9wcy5wdWJsaWNTdWJuZXRJZHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5wdWJsaWNTdWJuZXRJZHMgPSBwcm9wcy5wcml2YXRlU3VibmV0SWRzO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLnByaXZhdGVTdWJuZXRJZHMpIHtcbiAgICAgICAgdGhpcy5wcml2YXRlU3VibmV0c1BhcmFtZXRlciA9IG5ldyBTdHJpbmdMaXN0UGFyYW1ldGVyKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgJ1ByaXZhdGVTdWJuZXRzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLnByaXZhdGVTdWJuZXRzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgICAgIHN0cmluZ0xpc3RWYWx1ZTogcHJvcHMucHJpdmF0ZVN1Ym5ldElkcyxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnByaXZhdGVTdWJuZXRJZHMgPSBwcm9wcy5wcml2YXRlU3VibmV0SWRzO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLmludHJhU3VibmV0SWRzKSB7XG4gICAgICAgIHRoaXMuaW50cmFTdWJuZXRzUGFyYW1ldGVyID0gbmV3IFN0cmluZ0xpc3RQYXJhbWV0ZXIoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICAnSW50cmFTdWJuZXRzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLmludHJhU3VibmV0c1BhcmFtZXRlclBhdGgsXG4gICAgICAgICAgICBzdHJpbmdMaXN0VmFsdWU6IHByb3BzLmludHJhU3VibmV0SWRzLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaW50cmFTdWJuZXRJZHMgPSBwcm9wcy5pbnRyYVN1Ym5ldElkcztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5yZWRzaGlmdFN1Ym5ldElkcykge1xuICAgICAgICB0aGlzLnJlZHNoaWZ0U3VibmV0c1BhcmFtZXRlciA9IG5ldyBTdHJpbmdMaXN0UGFyYW1ldGVyKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgJ1JlZHNoaWZ0U3VibmV0cycsXG4gICAgICAgICAge1xuICAgICAgICAgICAgcGFyYW1ldGVyTmFtZTogdGhpcy5yZWRzaGlmdFN1Ym5ldHNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICAgICAgc3RyaW5nTGlzdFZhbHVlOiBwcm9wcy5yZWRzaGlmdFN1Ym5ldElkcyxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnJlZHNoaWZ0U3VibmV0SWRzID0gcHJvcHMucmVkc2hpZnRTdWJuZXRJZHM7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMuZGF0YWJhc2VTdWJuZXRJZHMpIHtcbiAgICAgICAgdGhpcy5kYXRhYmFzZVN1Ym5ldHNQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nTGlzdFBhcmFtZXRlcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdEYXRhYmFzZVN1Ym5ldHMnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHBhcmFtZXRlck5hbWU6IHRoaXMuZGF0YWJhc2VTdWJuZXRzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgICAgIHN0cmluZ0xpc3RWYWx1ZTogcHJvcHMuZGF0YWJhc2VTdWJuZXRJZHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5kYXRhYmFzZVN1Ym5ldElkcyA9IHByb3BzLmRhdGFiYXNlU3VibmV0SWRzO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLmVsYXN0aWNhY2hlU3VibmV0SWRzKSB7XG4gICAgICAgIHRoaXMuZWxhc3RpY2FjaGVTdWJuZXRzUGFyYW1ldGVyID0gbmV3IFN0cmluZ0xpc3RQYXJhbWV0ZXIoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICAnRWxhc3RpY2FjaGVTdWJuZXRzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLmVsYXN0aWNhY2hlU3VibmV0c1BhcmFtZXRlclBhdGgsXG4gICAgICAgICAgICBzdHJpbmdMaXN0VmFsdWU6IHByb3BzLmVsYXN0aWNhY2hlU3VibmV0SWRzLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZWxhc3RpY2FjaGVTdWJuZXRJZHMgPSBwcm9wcy5lbGFzdGljYWNoZVN1Ym5ldElkcztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5vdXRwb3N0U3VibmV0SWRzKSB7XG4gICAgICAgIHRoaXMub3V0cG9zdFN1Ym5ldHNQcmFtZXRlciA9IG5ldyBTdHJpbmdMaXN0UGFyYW1ldGVyKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgJ091dHBvc3RTdWJuZXRzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLm91dHBvc3RTdWJuZXRzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgICAgIHN0cmluZ0xpc3RWYWx1ZTogcHJvcHMub3V0cG9zdFN1Ym5ldElkcyxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICB0aGlzLm91dHBvc3RTdWJuZXRJZHMgPSBwcm9wcy5vdXRwb3N0U3VibmV0SWRzO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLnB1YmxpY0FsYkFybnMpIHtcbiAgICAgICAgdGhpcy5wdWJsaWNBbGJzUGFyYW1ldGVyID0gbmV3IFN0cmluZ0xpc3RQYXJhbWV0ZXIodGhpcywgJ1B1YmxpY0FsYnMnLCB7XG4gICAgICAgICAgcGFyYW1ldGVyTmFtZTogdGhpcy5wdWJsaWNBbGJzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgICBzdHJpbmdMaXN0VmFsdWU6IHByb3BzLnB1YmxpY0FsYkFybnMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnB1YmxpY0FsYkFybnMgPSBwcm9wcy5wdWJsaWNBbGJBcm5zO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLnByaXZhdGVBbGJBcm5zKSB7XG4gICAgICAgIHRoaXMucHJpdmF0ZUFsYnNQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nTGlzdFBhcmFtZXRlcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdQcml2YXRlQWxicycsXG4gICAgICAgICAge1xuICAgICAgICAgICAgcGFyYW1ldGVyTmFtZTogdGhpcy5wcml2YXRlQWxic1BhcmFtZXRlclBhdGgsXG4gICAgICAgICAgICBzdHJpbmdMaXN0VmFsdWU6IHByb3BzLnByaXZhdGVBbGJBcm5zLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucHJpdmF0ZUFsYkFybnMgPSBwcm9wcy5wcml2YXRlQWxiQXJucztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5wdWJsaWNBbGJDZXJ0aWZpY2F0ZUFybnMpIHtcbiAgICAgICAgdGhpcy5wdWJsaWNBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nTGlzdFBhcmFtZXRlcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdQdWJsaWNBbGJDZXJ0aWZpY2F0ZXMnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHBhcmFtZXRlck5hbWU6IHRoaXMucHVibGljQWxiQ2VydGlmaWNhdGVzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgICAgIHN0cmluZ0xpc3RWYWx1ZTogcHJvcHMucHVibGljQWxiQ2VydGlmaWNhdGVBcm5zLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMucHJpdmF0ZUFsYkNlcnRpZmljYXRlQXJucykge1xuICAgICAgICB0aGlzLnByaXZhdGVBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nTGlzdFBhcmFtZXRlcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdQcml2YXRlQWxiQ2VydGlmaWNhdGVzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLnByaXZhdGVBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICAgICAgc3RyaW5nTGlzdFZhbHVlOiBwcm9wcy5wcml2YXRlQWxiQ2VydGlmaWNhdGVBcm5zLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMuYWx0UHVibGljQWxiQXJucykge1xuICAgICAgICB0aGlzLmFsdFB1YmxpY0FsYnNQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nTGlzdFBhcmFtZXRlcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdBbHRQdWJsaWNBbGJzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLmFsdFB1YmxpY0FsYnNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICAgICAgc3RyaW5nTGlzdFZhbHVlOiBwcm9wcy5hbHRQdWJsaWNBbGJBcm5zLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMuYWx0UHJpdmF0ZUFsYkFybnMpIHtcbiAgICAgICAgdGhpcy5hbHRQcml2YXRlQWxic1BhcmFtZXRlciA9IG5ldyBTdHJpbmdMaXN0UGFyYW1ldGVyKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgJ0FsdFByaXZhdGVBbGJzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLmFsdFByaXZhdGVBbGJzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgICAgIHN0cmluZ0xpc3RWYWx1ZTogcHJvcHMuYWx0UHJpdmF0ZUFsYkFybnMsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5hbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZUFybnMpIHtcbiAgICAgICAgdGhpcy5hbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nTGlzdFBhcmFtZXRlcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdBbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZXMnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHBhcmFtZXRlck5hbWU6IHRoaXMuYWx0UHVibGljQWxiQ2VydGlmaWNhdGVzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgICAgIHN0cmluZ0xpc3RWYWx1ZTogcHJvcHMuYWx0UHVibGljQWxiQ2VydGlmaWNhdGVBcm5zLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMuYWx0UHJpdmF0ZUFsYkNlcnRpZmljYXRlQXJucykge1xuICAgICAgICB0aGlzLmFsdFByaXZhdGVBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nTGlzdFBhcmFtZXRlcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdBbHRQcml2YXRlQWxiQ2VydGlmaWNhdGVzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLmFsdFByaXZhdGVBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICAgICAgc3RyaW5nTGlzdFZhbHVlOiBwcm9wcy5hbHRQcml2YXRlQWxiQ2VydGlmaWNhdGVBcm5zLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMucHVibGljQ2VydGlmaWNhdGVBcm4pIHtcbiAgICAgICAgdGhpcy5wdWJsaWNDZXJ0aWZpY2F0ZVBhcmFtZXRlciA9IG5ldyBTdHJpbmdQYXJhbWV0ZXIoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICAnUHVibGljQ2VydGlmaWNhdGUnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHBhcmFtZXRlck5hbWU6IHRoaXMucHVibGljQ2VydGlmaWNhdGVQYXJhbWV0ZXJQYXRoLFxuICAgICAgICAgICAgc3RyaW5nVmFsdWU6IHByb3BzLnB1YmxpY0NlcnRpZmljYXRlQXJuLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMucHJpdmF0ZUNlcnRpZmljYXRlQXJuKSB7XG4gICAgICAgIHRoaXMucHJpdmF0ZUNlcnRpZmljYXRlUGFyYW1ldGVyID0gbmV3IFN0cmluZ1BhcmFtZXRlcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdQcml2YXRlQ2VydGlmaWNhdGUnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHBhcmFtZXRlck5hbWU6IHRoaXMucHJpdmF0ZUNlcnRpZmljYXRlUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgICAgIHN0cmluZ1ZhbHVlOiBwcm9wcy5wcml2YXRlQ2VydGlmaWNhdGVBcm4sXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5jbG91ZEZvbnRDZXJ0aWZpY2F0ZUFybikge1xuICAgICAgICB0aGlzLmNsb3VkRnJvbnRDZXJ0aWZpY2F0ZVBhcmFtZXRlciA9IG5ldyBTdHJpbmdQYXJhbWV0ZXIoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICAnQ2xvdWRGcm9udENlcnRpZmljYXRlJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLmNsb3VkRnJvbnRDZXJ0aWZpY2F0ZVBhcmFtZXRlclBhdGgsXG4gICAgICAgICAgICBzdHJpbmdWYWx1ZTogcHJvcHMuY2xvdWRGb250Q2VydGlmaWNhdGVBcm4sXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5wdWJsaWNab25lTmFtZSkge1xuICAgICAgICB0aGlzLnB1YmxpY1pvbmVQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nUGFyYW1ldGVyKHRoaXMsICdQdWJsaWNab25lJywge1xuICAgICAgICAgIHBhcmFtZXRlck5hbWU6IHRoaXMucHVibGljWm9uZVBhcmFtZXRlclBhdGgsXG4gICAgICAgICAgc3RyaW5nVmFsdWU6IHByb3BzLnB1YmxpY1pvbmVOYW1lLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5wcml2YXRlWm9uZU5hbWUpIHtcbiAgICAgICAgdGhpcy5wcml2YXRlWm9uZVBhcmFtZXRlciA9IG5ldyBTdHJpbmdQYXJhbWV0ZXIodGhpcywgJ1ByaXZhdGVab25lJywge1xuICAgICAgICAgIHBhcmFtZXRlck5hbWU6IHRoaXMucHJpdmF0ZVpvbmVQYXJhbWV0ZXJQYXRoLFxuICAgICAgICAgIHN0cmluZ1ZhbHVlOiBwcm9wcy5wcml2YXRlWm9uZU5hbWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMubG9va3VwVnBjID8/IHRydWUpIHtcbiAgICAgIGlmICghdGhpcy52cGNJZCkge1xuICAgICAgICB0aGlzLnZwY0lkID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRnJvbUxvb2t1cChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHRoaXMudnBjUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzLmxvb2t1cEF6cyA/PyB0cnVlKSB7XG4gICAgICBpZiAoIXRoaXMuYXpzKSB7XG4gICAgICAgIHRoaXMuYXpzID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRnJvbUxvb2t1cChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHRoaXMuYXpzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgKS5zcGxpdCgnLCcpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMubG9va3VwUHVibGljU3VibmV0cyA/PyB0cnVlKSB7XG4gICAgICBpZiAoIXRoaXMucHVibGljU3VibmV0SWRzKSB7XG4gICAgICAgIHRoaXMucHVibGljU3VibmV0SWRzID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRnJvbUxvb2t1cChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHRoaXMucHVibGljU3VibmV0c1BhcmFtZXRlclBhdGgsXG4gICAgICAgICkuc3BsaXQoJywnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzLmxvb2t1cFByaXZhdGVTdWJuZXRzID8/IHRydWUpIHtcbiAgICAgIGlmICghdGhpcy5wcml2YXRlU3VibmV0SWRzKSB7XG4gICAgICAgIHRoaXMucHJpdmF0ZVN1Ym5ldElkcyA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZyb21Mb29rdXAoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLnByaXZhdGVTdWJuZXRzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgKS5zcGxpdCgnLCcpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMubG9va3VwSW50cmFTdWJuZXRzID8/IGZhbHNlKSB7XG4gICAgICBpZiAoIXRoaXMuaW50cmFTdWJuZXRJZHMpIHtcbiAgICAgICAgdGhpcy5pbnRyYVN1Ym5ldElkcyA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZyb21Mb29rdXAoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLmludHJhU3VibmV0c1BhcmFtZXRlclBhdGgsXG4gICAgICAgICkuc3BsaXQoJywnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzLmxvb2t1cFJlZHNoaWZ0U3VibmV0cyA/PyBmYWxzZSkge1xuICAgICAgaWYgKCF0aGlzLnJlZHNoaWZ0U3VibmV0SWRzKSB7XG4gICAgICAgIHRoaXMucmVkc2hpZnRTdWJuZXRJZHMgPSBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGcm9tTG9va3VwKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy5yZWRzaGlmdFN1Ym5ldHNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICApLnNwbGl0KCcsJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcy5sb29rdXBEYXRhYmFzZVN1Ym5ldHMgPz8gZmFsc2UpIHtcbiAgICAgIGlmICghdGhpcy5kYXRhYmFzZVN1Ym5ldElkcykge1xuICAgICAgICB0aGlzLmRhdGFiYXNlU3VibmV0SWRzID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRnJvbUxvb2t1cChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHRoaXMuZGF0YWJhc2VTdWJuZXRzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgKS5zcGxpdCgnLCcpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMubG9va3VwRWxhc3RpY2FjaGVTdWJuZXRzID8/IGZhbHNlKSB7XG4gICAgICBpZiAoIXRoaXMuZWxhc3RpY2FjaGVTdWJuZXRJZHMpIHtcbiAgICAgICAgdGhpcy5lbGFzdGljYWNoZVN1Ym5ldElkcyA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZyb21Mb29rdXAoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLmVsYXN0aWNhY2hlU3VibmV0c1BhcmFtZXRlclBhdGgsXG4gICAgICAgICkuc3BsaXQoJywnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzLmxvb2t1cE91dHBvc3RTdWJuZXRzID8/IGZhbHNlKSB7XG4gICAgICBpZiAoIXRoaXMub3V0cG9zdFN1Ym5ldElkcykge1xuICAgICAgICB0aGlzLm91dHBvc3RTdWJuZXRJZHMgPSBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGcm9tTG9va3VwKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy5vdXRwb3N0U3VibmV0c1BhcmFtZXRlclBhdGgsXG4gICAgICAgICkuc3BsaXQoJywnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzLmxvb2t1cFB1YmxpY0FsYnMgPz8gZmFsc2UpIHtcbiAgICAgIGlmICghdGhpcy5wdWJsaWNBbGJBcm5zKSB7XG4gICAgICAgIHRoaXMucHVibGljQWxiQXJucyA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZyb21Mb29rdXAoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLnB1YmxpY0FsYnNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICApLnNwbGl0KCcsJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcy5sb29rdXBQcml2YXRlQWxicyA/PyBmYWxzZSkge1xuICAgICAgaWYgKCF0aGlzLnByaXZhdGVBbGJBcm5zKSB7XG4gICAgICAgIHRoaXMucHJpdmF0ZUFsYkFybnMgPSBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGcm9tTG9va3VwKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy5wcml2YXRlQWxic1BhcmFtZXRlclBhdGgsXG4gICAgICAgICkuc3BsaXQoJywnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzLmxvb2t1cFB1YmxpY0FsYkNlcnRpZmljYXRlcyA/PyBmYWxzZSkge1xuICAgICAgaWYgKCF0aGlzLnB1YmxpY0FsYkNlcnRpZmljYXRlQXJucykge1xuICAgICAgICB0aGlzLnB1YmxpY0FsYkNlcnRpZmljYXRlQXJucyA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZyb21Mb29rdXAoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLnB1YmxpY0FsYkNlcnRpZmljYXRlc1BhcmFtZXRlclBhdGgsXG4gICAgICAgICkuc3BsaXQoJywnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzLmxvb2t1cFByaXZhdGVBbGJDZXJ0aWZpY2F0ZXMgPz8gZmFsc2UpIHtcbiAgICAgIGlmICghdGhpcy5wcml2YXRlQWxiQ2VydGlmaWNhdGVBcm5zKSB7XG4gICAgICAgIHRoaXMucHJpdmF0ZUFsYkNlcnRpZmljYXRlQXJucyA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZyb21Mb29rdXAoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLnByaXZhdGVBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICApLnNwbGl0KCcsJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcy5sb29rdXBBbHRQdWJsaWNBbGJzID8/IGZhbHNlKSB7XG4gICAgICBpZiAoIXRoaXMuYWx0UHVibGljQWxiQXJucykge1xuICAgICAgICB0aGlzLmFsdFB1YmxpY0FsYkFybnMgPSBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGcm9tTG9va3VwKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy5hbHRQdWJsaWNBbGJzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgKS5zcGxpdCgnLCcpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMubG9va3VwQWx0UHJpdmF0ZUFsYnMgPz8gZmFsc2UpIHtcbiAgICAgIGlmICghdGhpcy5hbHRQcml2YXRlQWxiQXJucykge1xuICAgICAgICB0aGlzLmFsdFByaXZhdGVBbGJBcm5zID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRnJvbUxvb2t1cChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHRoaXMuYWx0UHJpdmF0ZUFsYnNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICApLnNwbGl0KCcsJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcy5sb29rdXBBbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZXMgPz8gZmFsc2UpIHtcbiAgICAgIGlmICghdGhpcy5hbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZUFybnMpIHtcbiAgICAgICAgdGhpcy5hbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZUFybnMgPSBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGcm9tTG9va3VwKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy5hbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICApLnNwbGl0KCcsJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcy5sb29rdXBBbHRQcml2YXRlQWxiQ2VydGlmaWNhdGVzID8/IGZhbHNlKSB7XG4gICAgICBpZiAoIXRoaXMuYWx0UHJpdmF0ZUFsYkNlcnRpZmljYXRlQXJucykge1xuICAgICAgICB0aGlzLmFsdFByaXZhdGVBbGJDZXJ0aWZpY2F0ZUFybnMgPSBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGcm9tTG9va3VwKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy5hbHRQcml2YXRlQWxiQ2VydGlmaWNhdGVzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgKS5zcGxpdCgnLCcpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMubG9va3VwUHVibGljQ2VydGlmaWNhdGUgPz8gZmFsc2UpIHtcbiAgICAgIGlmICghdGhpcy5wdWJsaWNDZXJ0aWZpY2F0ZUFybikge1xuICAgICAgICB0aGlzLnB1YmxpY0NlcnRpZmljYXRlQXJuID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRnJvbUxvb2t1cChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHRoaXMucHVibGljQ2VydGlmaWNhdGVQYXJhbWV0ZXJQYXRoLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMubG9va3VwUHJpdmF0ZUNlcnRpZmljYXRlID8/IGZhbHNlKSB7XG4gICAgICBpZiAoIXRoaXMucHJpdmF0ZUNlcnRpZmljYXRlQXJuKSB7XG4gICAgICAgIHRoaXMucHJpdmF0ZUNlcnRpZmljYXRlQXJuID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRnJvbUxvb2t1cChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHRoaXMucHJpdmF0ZUNlcnRpZmljYXRlUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzLmxvb2t1cENsb3VkRnJvbnRDZXJ0aWZpY2F0ZSA/PyBmYWxzZSkge1xuICAgICAgaWYgKCF0aGlzLmNsb3VkRnJvbnRDZXJ0aWZpY2F0ZUFybikge1xuICAgICAgICB0aGlzLmNsb3VkRnJvbnRDZXJ0aWZpY2F0ZUFybiA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZyb21Mb29rdXAoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLmNsb3VkRnJvbnRDZXJ0aWZpY2F0ZVBhcmFtZXRlclBhdGgsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcy5sb29rdXBQdWJsaWNab25lID8/IGZhbHNlKSB7XG4gICAgICBpZiAoIXRoaXMucHVibGljWm9uZU5hbWUpIHtcbiAgICAgICAgdGhpcy5wdWJsaWNab25lTmFtZSA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZyb21Mb29rdXAoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLnB1YmxpY1pvbmVQYXJhbWV0ZXJQYXRoLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMubG9va3VwUHJpdmF0ZVpvbmUgPz8gZmFsc2UpIHtcbiAgICAgIGlmICghdGhpcy5wcml2YXRlWm9uZU5hbWUpIHtcbiAgICAgICAgdGhpcy5wcml2YXRlWm9uZU5hbWUgPSBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGcm9tTG9va3VwKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy5wcml2YXRlWm9uZVBhcmFtZXRlclBhdGgsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,232 @@
1
+ import * as ec2 from 'aws-cdk-lib/aws-ec2';
2
+ import type { Construct } from 'constructs';
3
+ import { ExtendedConstruct, type ExtendedConstructProps } from '../../aws-cdk';
4
+ import { NetworkParameters } from './network-parameters';
5
+ export type NatType = 'none' | 'single' | 'multi';
6
+ /**
7
+ * Properties for StandardNetwork.
8
+ */
9
+ export interface StandardNetworkProps extends ExtendedConstructProps {
10
+ /**
11
+ * Name for the VPC. Used as the VPC name tag and the SSM parameter path
12
+ * segment (e.g. /network/{name}/vpc).
13
+ */
14
+ readonly name: string;
15
+ /**
16
+ * Full VPC CIDR block. e.g. "10.0.0.0/20".
17
+ * Supported VPC prefix lengths for auto-sizing: /16, /17, /18, /19, /20.
18
+ */
19
+ readonly vpcCidr: string;
20
+ /**
21
+ * Number of availability zones to deploy subnets into. Default is 2.
22
+ *
23
+ * @default 2
24
+ */
25
+ readonly azCount?: number;
26
+ /**
27
+ * NAT gateway configuration. Default is 'none'.
28
+ *
29
+ * @default 'none'
30
+ */
31
+ readonly natType?: NatType;
32
+ /**
33
+ * Whether to create public subnets. Default is true.
34
+ *
35
+ * @default true
36
+ */
37
+ readonly createPublicSubnets?: boolean;
38
+ /**
39
+ * Whether to create private subnets (PRIVATE_WITH_EGRESS). Default is true.
40
+ *
41
+ * @default true
42
+ */
43
+ readonly createPrivateSubnets?: boolean;
44
+ /**
45
+ * Whether to create intra subnets (PRIVATE_ISOLATED, no egress). Default is true.
46
+ *
47
+ * @default true
48
+ */
49
+ readonly createIntraSubnets?: boolean;
50
+ /**
51
+ * Whether to create database subnets (PRIVATE_WITH_EGRESS). Default is true.
52
+ *
53
+ * @default true
54
+ */
55
+ readonly createDatabaseSubnets?: boolean;
56
+ /**
57
+ * Whether to create elasticache subnets (PRIVATE_WITH_EGRESS). Default is true.
58
+ *
59
+ * @default true
60
+ */
61
+ readonly createElasticacheSubnets?: boolean;
62
+ /**
63
+ * Whether to create redshift subnets (PRIVATE_WITH_EGRESS). Default is false.
64
+ *
65
+ * @default false
66
+ */
67
+ readonly createRedshiftSubnets?: boolean;
68
+ /**
69
+ * Apply a uniform CIDR mask to ALL subnet groups, overriding the terraform-style
70
+ * auto-sizing. When set, all groups receive the same mask regardless of type.
71
+ * Per-group overrides below take precedence over this value.
72
+ */
73
+ readonly subnetCidrMask?: number;
74
+ /**
75
+ * CIDR mask override for private subnets only.
76
+ *
77
+ * Equivalent to setting `private_newbits` in terraform-aws-vpc:
78
+ * privateSubnetCidrMask = vpcPrefix + private_newbits
79
+ *
80
+ * Takes precedence over subnetCidrMask and auto-sizing.
81
+ */
82
+ readonly privateSubnetCidrMask?: number;
83
+ /**
84
+ * CIDR mask override for public subnets only.
85
+ *
86
+ * Equivalent to setting `public_newbits` in terraform-aws-vpc:
87
+ * publicSubnetCidrMask = vpcPrefix + public_newbits
88
+ *
89
+ * Takes precedence over subnetCidrMask and auto-sizing.
90
+ */
91
+ readonly publicSubnetCidrMask?: number;
92
+ /**
93
+ * CIDR mask override for intra subnets only.
94
+ *
95
+ * Equivalent to setting `intra_newbits` in terraform-aws-vpc.
96
+ * Takes precedence over subnetCidrMask and auto-sizing.
97
+ */
98
+ readonly intraSubnetCidrMask?: number;
99
+ /**
100
+ * CIDR mask override for database subnets only.
101
+ *
102
+ * Equivalent to setting `database_newbits` in terraform-aws-vpc.
103
+ * Takes precedence over subnetCidrMask and auto-sizing.
104
+ */
105
+ readonly databaseSubnetCidrMask?: number;
106
+ /**
107
+ * CIDR mask override for elasticache subnets only.
108
+ *
109
+ * Equivalent to setting `elasticache_newbits` in terraform-aws-vpc.
110
+ * Takes precedence over subnetCidrMask and auto-sizing.
111
+ */
112
+ readonly elasticacheSubnetCidrMask?: number;
113
+ /**
114
+ * CIDR mask override for redshift subnets only.
115
+ *
116
+ * Equivalent to setting `redshift_newbits` in terraform-aws-vpc.
117
+ * Takes precedence over subnetCidrMask and auto-sizing.
118
+ */
119
+ readonly redshiftSubnetCidrMask?: number;
120
+ /**
121
+ * Whether to create an S3 gateway VPC endpoint. The endpoint is attached to
122
+ * private, database, elasticache, redshift, and intra subnets (whichever are
123
+ * enabled). Default is true.
124
+ *
125
+ * @default true
126
+ */
127
+ readonly createS3Endpoint?: boolean;
128
+ /**
129
+ * Whether to create a DynamoDB gateway VPC endpoint. Attached to the same
130
+ * subnet groups as the S3 endpoint. Default is true.
131
+ *
132
+ * @default true
133
+ */
134
+ readonly createDynamoDbEndpoint?: boolean;
135
+ /**
136
+ * Whether to store VPC and subnet IDs in AWS SSM Parameter Store via the
137
+ * NetworkParameters construct. Default is true.
138
+ *
139
+ * @default true
140
+ */
141
+ readonly storeParameters?: boolean;
142
+ /**
143
+ * SSM parameter prefix used when storeParameters is true. Default is "/network".
144
+ *
145
+ * @default "/network"
146
+ */
147
+ readonly parametersPrefix?: string;
148
+ /**
149
+ * Whether to create CloudFormation stack outputs for VPC and subnet IDs.
150
+ * Default is true.
151
+ *
152
+ * @default true
153
+ */
154
+ readonly createOutputs?: boolean;
155
+ /**
156
+ * Additional tags to apply to public subnets.
157
+ */
158
+ readonly publicSubnetTags?: Record<string, string>;
159
+ /**
160
+ * Additional tags to apply to private subnets.
161
+ */
162
+ readonly privateSubnetTags?: Record<string, string>;
163
+ /**
164
+ * Additional tags to apply to intra subnets.
165
+ */
166
+ readonly intraSubnetTags?: Record<string, string>;
167
+ /**
168
+ * Additional tags to apply to database subnets.
169
+ */
170
+ readonly databaseSubnetTags?: Record<string, string>;
171
+ /**
172
+ * Additional tags to apply to elasticache subnets.
173
+ */
174
+ readonly elasticacheSubnetTags?: Record<string, string>;
175
+ /**
176
+ * Additional tags to apply to redshift subnets.
177
+ */
178
+ readonly redshiftSubnetTags?: Record<string, string>;
179
+ }
180
+ /**
181
+ * Creates a standard multi-tier VPC following TrueMark conventions, with subnet
182
+ * sizing that mirrors the truemark/terraform-aws-vpc Terraform module.
183
+ *
184
+ * **Subnet layout** (each group is replicated across all AZs):
185
+ *
186
+ * | Group | Type | Default sizing (auto, see table below) |
187
+ * |-------------|---------------------|----------------------------------------|
188
+ * | private | PRIVATE_WITH_EGRESS | Larger — sized for workload traffic |
189
+ * | public | PUBLIC | Smaller |
190
+ * | intra | PRIVATE_ISOLATED | Smaller — no egress |
191
+ * | database | PRIVATE_WITH_EGRESS | Smaller |
192
+ * | elasticache | PRIVATE_WITH_EGRESS | Smaller |
193
+ * | redshift | PRIVATE_WITH_EGRESS | Smaller (disabled by default) |
194
+ *
195
+ * **Auto-sizing table** (matches terraform-aws-vpc `private_subnets`/`subnets` locals):
196
+ *
197
+ * | VPC | private | public/intra/database/elasticache/redshift |
198
+ * |--------|---------|---------------------------------------------|
199
+ * | /16 | /19 | /22 |
200
+ * | /17 | /20 | /22 |
201
+ * | /18 | /21 | /23 |
202
+ * | /19 | /22 | /24 |
203
+ * | /20 | /24 | /25 |
204
+ *
205
+ * Override sizing via `subnetCidrMask` (uniform) or per-group props like
206
+ * `privateSubnetCidrMask`, `publicSubnetCidrMask`, etc. — equivalent to the
207
+ * `private_newbits`, `public_newbits`, ... variables in Terraform.
208
+ *
209
+ * > **Note on CIDR placement:** CDK allocates subnet CIDRs sequentially from
210
+ * > the start of the VPC CIDR block. This differs from Terraform's placement,
211
+ * > which uses explicit `netnum` offsets to position subnet groups at specific
212
+ * > addresses within the VPC. The subnet *sizes* match exactly; only the
213
+ * > starting addresses within the VPC differ.
214
+ *
215
+ * Gateway VPC endpoints for S3 and DynamoDB are created by default and attached
216
+ * to private, intra, database, elasticache, and redshift route tables.
217
+ *
218
+ * VPC and subnet IDs are stored in AWS SSM Parameter Store via NetworkParameters
219
+ * and optionally exported as CloudFormation outputs.
220
+ */
221
+ export declare class StandardNetwork extends ExtendedConstruct {
222
+ /**
223
+ * The VPC created by this construct.
224
+ */
225
+ readonly vpc: ec2.Vpc;
226
+ /**
227
+ * The NetworkParameters construct holding SSM paths and created parameters.
228
+ * Undefined when storeParameters is false.
229
+ */
230
+ readonly networkParameters?: NetworkParameters;
231
+ constructor(scope: Construct, id: string, props: StandardNetworkProps);
232
+ }
@@ -0,0 +1,384 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StandardNetwork = void 0;
4
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
5
+ const ec2 = require("aws-cdk-lib/aws-ec2");
6
+ const aws_cdk_1 = require("../../aws-cdk");
7
+ const truemark_1 = require("../../truemark");
8
+ const network_parameters_1 = require("./network-parameters");
9
+ // TODO Need ipv6 support and we need to support ipv6 only
10
+ /**
11
+ * Subnet sizing lookup table keyed by VPC prefix length.
12
+ *
13
+ * Mirrors the `private_subnets` and `subnets` locals in truemark/terraform-aws-vpc:
14
+ *
15
+ * VPC private newbits private mask other newbits other mask
16
+ * /16 3 /19 6 /22
17
+ * /17 3 /20 5 /22
18
+ * /18 3 /21 5 /23
19
+ * /19 3 /22 5 /24
20
+ * /20 4 /24 5 /25
21
+ *
22
+ * "newbits" is the number of bits to extend the VPC prefix.
23
+ * cidrMask = vpcPrefix + newbits.
24
+ */
25
+ const SUBNET_NEWBITS = {
26
+ 16: { privateBits: 3, otherBits: 6 },
27
+ 17: { privateBits: 3, otherBits: 5 },
28
+ 18: { privateBits: 3, otherBits: 5 },
29
+ 19: { privateBits: 3, otherBits: 5 },
30
+ 20: { privateBits: 4, otherBits: 5 },
31
+ };
32
+ /**
33
+ * Determines the CIDR masks for each subnet group.
34
+ *
35
+ * Resolution order (highest wins):
36
+ * 1. Per-group override (e.g. privateSubnetCidrMask)
37
+ * 2. Uniform override (subnetCidrMask)
38
+ * 3. Terraform-table auto-sizing from the VPC prefix
39
+ */
40
+ function resolveSubnetMasks(vpcCidr, props) {
41
+ var _a, _b, _c, _d, _e, _f;
42
+ const vpcPrefix = Number(vpcCidr.split('/')[1]);
43
+ if (!Number.isFinite(vpcPrefix)) {
44
+ throw new Error(`Invalid VPC CIDR: ${vpcCidr}`);
45
+ }
46
+ // --- Auto-sizing from terraform tables ---
47
+ const bits = SUBNET_NEWBITS[vpcPrefix];
48
+ let autoPrivate;
49
+ let autoOther;
50
+ if (bits) {
51
+ autoPrivate = vpcPrefix + bits.privateBits;
52
+ autoOther = vpcPrefix + bits.otherBits;
53
+ }
54
+ else if (props.subnetCidrMask !== undefined) {
55
+ // Fall back to uniform when VPC prefix is outside the table range
56
+ autoPrivate = props.subnetCidrMask;
57
+ autoOther = props.subnetCidrMask;
58
+ }
59
+ else {
60
+ throw new Error(`VPC prefix /${vpcPrefix} is not in the auto-sizing table (supported: /16–/20). ` +
61
+ `Provide subnetCidrMask or per-group overrides.`);
62
+ }
63
+ // Uniform override replaces both private and other defaults
64
+ const uniformMask = props.subnetCidrMask;
65
+ const baseMaskPrivate = uniformMask !== null && uniformMask !== void 0 ? uniformMask : autoPrivate;
66
+ const baseMaskOther = uniformMask !== null && uniformMask !== void 0 ? uniformMask : autoOther;
67
+ return {
68
+ private: (_a = props.privateSubnetCidrMask) !== null && _a !== void 0 ? _a : baseMaskPrivate,
69
+ public: (_b = props.publicSubnetCidrMask) !== null && _b !== void 0 ? _b : baseMaskOther,
70
+ intra: (_c = props.intraSubnetCidrMask) !== null && _c !== void 0 ? _c : baseMaskOther,
71
+ database: (_d = props.databaseSubnetCidrMask) !== null && _d !== void 0 ? _d : baseMaskOther,
72
+ elasticache: (_e = props.elasticacheSubnetCidrMask) !== null && _e !== void 0 ? _e : baseMaskOther,
73
+ redshift: (_f = props.redshiftSubnetCidrMask) !== null && _f !== void 0 ? _f : baseMaskOther,
74
+ };
75
+ }
76
+ /**
77
+ * Validates that the VPC CIDR has enough address space for all enabled subnet
78
+ * groups. Each group consumes azCount × 2^(32-cidrMask) IPs.
79
+ */
80
+ function validateAddressSpace(vpcCidr, azCount, enabledGroups) {
81
+ const vpcPrefix = Number(vpcCidr.split('/')[1]);
82
+ // AWS allows VPC netmasks between /16 and /28.
83
+ if (!Number.isInteger(vpcPrefix) || vpcPrefix < 16 || vpcPrefix > 28) {
84
+ throw new Error(`Invalid VPC CIDR ${vpcCidr}: prefix must be an integer between /16 and /28.`);
85
+ }
86
+ if (!Number.isInteger(azCount) || azCount < 1) {
87
+ throw new Error(`azCount must be a positive integer, got ${azCount}.`);
88
+ }
89
+ // AWS subnet masks must be between /16 and /28, and never larger than the
90
+ // VPC itself.
91
+ for (const g of enabledGroups) {
92
+ if (!Number.isInteger(g.mask) || g.mask < vpcPrefix || g.mask > 28) {
93
+ throw new Error(`Invalid CIDR mask /${g.mask} for ${g.name} subnets: must be an ` +
94
+ `integer between the VPC prefix (/${vpcPrefix}) and /28.`);
95
+ }
96
+ }
97
+ const vpcIps = 2 ** (32 - vpcPrefix);
98
+ let requiredIps = 0;
99
+ const detail = [];
100
+ for (const g of enabledGroups) {
101
+ const subnetIps = 2 ** (32 - g.mask);
102
+ const groupIps = azCount * subnetIps;
103
+ requiredIps += groupIps;
104
+ detail.push(`${g.name}: ${azCount} × /${g.mask} = ${groupIps} IPs`);
105
+ }
106
+ if (requiredIps > vpcIps) {
107
+ throw new Error(`VPC CIDR ${vpcCidr} (${vpcIps} IPs) is too small.\n` +
108
+ `Required: ${requiredIps} IPs across ${enabledGroups.length} subnet groups:\n` +
109
+ detail.map((d) => ` ${d}`).join('\n') +
110
+ '\nIncrease the VPC size, reduce azCount, or disable some subnet groups.');
111
+ }
112
+ }
113
+ function applySubnetTags(subnets, tags) {
114
+ for (const subnet of subnets) {
115
+ for (const [key, value] of Object.entries(tags)) {
116
+ aws_cdk_lib_1.Tags.of(subnet).add(key, value);
117
+ }
118
+ }
119
+ }
120
+ /**
121
+ * Creates a standard multi-tier VPC following TrueMark conventions, with subnet
122
+ * sizing that mirrors the truemark/terraform-aws-vpc Terraform module.
123
+ *
124
+ * **Subnet layout** (each group is replicated across all AZs):
125
+ *
126
+ * | Group | Type | Default sizing (auto, see table below) |
127
+ * |-------------|---------------------|----------------------------------------|
128
+ * | private | PRIVATE_WITH_EGRESS | Larger — sized for workload traffic |
129
+ * | public | PUBLIC | Smaller |
130
+ * | intra | PRIVATE_ISOLATED | Smaller — no egress |
131
+ * | database | PRIVATE_WITH_EGRESS | Smaller |
132
+ * | elasticache | PRIVATE_WITH_EGRESS | Smaller |
133
+ * | redshift | PRIVATE_WITH_EGRESS | Smaller (disabled by default) |
134
+ *
135
+ * **Auto-sizing table** (matches terraform-aws-vpc `private_subnets`/`subnets` locals):
136
+ *
137
+ * | VPC | private | public/intra/database/elasticache/redshift |
138
+ * |--------|---------|---------------------------------------------|
139
+ * | /16 | /19 | /22 |
140
+ * | /17 | /20 | /22 |
141
+ * | /18 | /21 | /23 |
142
+ * | /19 | /22 | /24 |
143
+ * | /20 | /24 | /25 |
144
+ *
145
+ * Override sizing via `subnetCidrMask` (uniform) or per-group props like
146
+ * `privateSubnetCidrMask`, `publicSubnetCidrMask`, etc. — equivalent to the
147
+ * `private_newbits`, `public_newbits`, ... variables in Terraform.
148
+ *
149
+ * > **Note on CIDR placement:** CDK allocates subnet CIDRs sequentially from
150
+ * > the start of the VPC CIDR block. This differs from Terraform's placement,
151
+ * > which uses explicit `netnum` offsets to position subnet groups at specific
152
+ * > addresses within the VPC. The subnet *sizes* match exactly; only the
153
+ * > starting addresses within the VPC differ.
154
+ *
155
+ * Gateway VPC endpoints for S3 and DynamoDB are created by default and attached
156
+ * to private, intra, database, elasticache, and redshift route tables.
157
+ *
158
+ * VPC and subnet IDs are stored in AWS SSM Parameter Store via NetworkParameters
159
+ * and optionally exported as CloudFormation outputs.
160
+ */
161
+ class StandardNetwork extends aws_cdk_1.ExtendedConstruct {
162
+ constructor(scope, id, props) {
163
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
164
+ super(scope, id, {
165
+ standardTags: aws_cdk_1.StandardTags.merge(props.standardTags, truemark_1.LibStandardTags),
166
+ });
167
+ // TODO You change the default here Daren
168
+ const azCount = (_a = props.azCount) !== null && _a !== void 0 ? _a : 2;
169
+ const natType = (_b = props.natType) !== null && _b !== void 0 ? _b : 'none';
170
+ const natGateways = natType === 'multi' ? azCount : natType === 'single' ? 1 : 0;
171
+ // TODO Need to add support for regional NAT
172
+ // TODO Need to add support for poor NAT
173
+ // TODO Need to add support for network firewall
174
+ const createPublic = (_c = props.createPublicSubnets) !== null && _c !== void 0 ? _c : true;
175
+ const createPrivate = (_d = props.createPrivateSubnets) !== null && _d !== void 0 ? _d : true;
176
+ const createIntra = (_e = props.createIntraSubnets) !== null && _e !== void 0 ? _e : true;
177
+ const createDatabase = (_f = props.createDatabaseSubnets) !== null && _f !== void 0 ? _f : true;
178
+ const createElasticache = (_g = props.createElasticacheSubnets) !== null && _g !== void 0 ? _g : true;
179
+ const createRedshift = (_h = props.createRedshiftSubnets) !== null && _h !== void 0 ? _h : false;
180
+ const masks = resolveSubnetMasks(props.vpcCidr, props);
181
+ const enabledGroups = [];
182
+ if (createPublic)
183
+ enabledGroups.push({ mask: masks.public, name: 'public' });
184
+ if (createPrivate)
185
+ enabledGroups.push({ mask: masks.private, name: 'private' });
186
+ if (createIntra)
187
+ enabledGroups.push({ mask: masks.intra, name: 'intra' });
188
+ if (createDatabase)
189
+ enabledGroups.push({ mask: masks.database, name: 'database' });
190
+ if (createElasticache)
191
+ enabledGroups.push({ mask: masks.elasticache, name: 'elasticache' });
192
+ if (createRedshift)
193
+ enabledGroups.push({ mask: masks.redshift, name: 'redshift' });
194
+ validateAddressSpace(props.vpcCidr, azCount, enabledGroups);
195
+ const subnetConfiguration = [];
196
+ if (createPrivate) {
197
+ subnetConfiguration.push({
198
+ name: 'private',
199
+ subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS,
200
+ cidrMask: masks.private,
201
+ });
202
+ }
203
+ if (createPublic) {
204
+ subnetConfiguration.push({
205
+ name: 'public',
206
+ subnetType: ec2.SubnetType.PUBLIC,
207
+ cidrMask: masks.public,
208
+ });
209
+ }
210
+ if (createIntra) {
211
+ subnetConfiguration.push({
212
+ name: 'intra',
213
+ subnetType: ec2.SubnetType.PRIVATE_ISOLATED,
214
+ cidrMask: masks.intra,
215
+ });
216
+ }
217
+ if (createDatabase) {
218
+ subnetConfiguration.push({
219
+ name: 'database',
220
+ subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS,
221
+ cidrMask: masks.database,
222
+ });
223
+ }
224
+ if (createElasticache) {
225
+ subnetConfiguration.push({
226
+ name: 'elasticache',
227
+ subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS,
228
+ cidrMask: masks.elasticache,
229
+ });
230
+ }
231
+ if (createRedshift) {
232
+ subnetConfiguration.push({
233
+ name: 'redshift',
234
+ subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS,
235
+ cidrMask: masks.redshift,
236
+ });
237
+ }
238
+ this.vpc = new ec2.Vpc(this, 'Vpc', {
239
+ vpcName: props.name,
240
+ maxAzs: azCount,
241
+ natGateways,
242
+ ipAddresses: ec2.IpAddresses.cidr(props.vpcCidr),
243
+ subnetConfiguration,
244
+ });
245
+ // Apply per-subnet-group tags
246
+ if (props.publicSubnetTags && createPublic) {
247
+ applySubnetTags(this.vpc.selectSubnets({ subnetGroupName: 'public' }).subnets, props.publicSubnetTags);
248
+ }
249
+ if (props.privateSubnetTags && createPrivate) {
250
+ applySubnetTags(this.vpc.selectSubnets({ subnetGroupName: 'private' }).subnets, props.privateSubnetTags);
251
+ }
252
+ if (props.intraSubnetTags && createIntra) {
253
+ applySubnetTags(this.vpc.selectSubnets({ subnetGroupName: 'intra' }).subnets, props.intraSubnetTags);
254
+ }
255
+ if (props.databaseSubnetTags && createDatabase) {
256
+ applySubnetTags(this.vpc.selectSubnets({ subnetGroupName: 'database' }).subnets, props.databaseSubnetTags);
257
+ }
258
+ if (props.elasticacheSubnetTags && createElasticache) {
259
+ applySubnetTags(this.vpc.selectSubnets({ subnetGroupName: 'elasticache' }).subnets, props.elasticacheSubnetTags);
260
+ }
261
+ if (props.redshiftSubnetTags && createRedshift) {
262
+ applySubnetTags(this.vpc.selectSubnets({ subnetGroupName: 'redshift' }).subnets, props.redshiftSubnetTags);
263
+ }
264
+ // Build the list of subnet groups for gateway endpoint route tables.
265
+ const endpointSubnets = [];
266
+ if (createPrivate)
267
+ endpointSubnets.push({ subnetGroupName: 'private' });
268
+ if (createIntra)
269
+ endpointSubnets.push({ subnetGroupName: 'intra' });
270
+ if (createDatabase)
271
+ endpointSubnets.push({ subnetGroupName: 'database' });
272
+ if (createElasticache)
273
+ endpointSubnets.push({ subnetGroupName: 'elasticache' });
274
+ if (createRedshift)
275
+ endpointSubnets.push({ subnetGroupName: 'redshift' });
276
+ if (((_j = props.createS3Endpoint) !== null && _j !== void 0 ? _j : true) && endpointSubnets.length > 0) {
277
+ this.vpc.addGatewayEndpoint('S3GatewayEndpoint', {
278
+ service: ec2.GatewayVpcEndpointAwsService.S3,
279
+ subnets: endpointSubnets,
280
+ });
281
+ }
282
+ if (((_k = props.createDynamoDbEndpoint) !== null && _k !== void 0 ? _k : true) && endpointSubnets.length > 0) {
283
+ this.vpc.addGatewayEndpoint('DynamoDbGatewayEndpoint', {
284
+ service: ec2.GatewayVpcEndpointAwsService.DYNAMODB,
285
+ subnets: endpointSubnets,
286
+ });
287
+ }
288
+ // CloudFormation outputs
289
+ if ((_l = props.createOutputs) !== null && _l !== void 0 ? _l : true) {
290
+ const stackName = aws_cdk_lib_1.Stack.of(this).stackName;
291
+ new aws_cdk_lib_1.CfnOutput(this, 'VpcId', {
292
+ value: this.vpc.vpcId,
293
+ exportName: `${stackName}:VpcId`,
294
+ });
295
+ if (createPublic) {
296
+ new aws_cdk_lib_1.CfnOutput(this, 'PublicSubnetIds', {
297
+ value: this.vpc
298
+ .selectSubnets({ subnetGroupName: 'public' })
299
+ .subnetIds.join(','),
300
+ exportName: `${stackName}:PublicSubnetIds`,
301
+ });
302
+ }
303
+ if (createPrivate) {
304
+ new aws_cdk_lib_1.CfnOutput(this, 'PrivateSubnetIds', {
305
+ value: this.vpc
306
+ .selectSubnets({ subnetGroupName: 'private' })
307
+ .subnetIds.join(','),
308
+ exportName: `${stackName}:PrivateSubnetIds`,
309
+ });
310
+ }
311
+ if (createIntra) {
312
+ new aws_cdk_lib_1.CfnOutput(this, 'IntraSubnetIds', {
313
+ value: this.vpc
314
+ .selectSubnets({ subnetGroupName: 'intra' })
315
+ .subnetIds.join(','),
316
+ exportName: `${stackName}:IntraSubnetIds`,
317
+ });
318
+ }
319
+ if (createDatabase) {
320
+ new aws_cdk_lib_1.CfnOutput(this, 'DatabaseSubnetIds', {
321
+ value: this.vpc
322
+ .selectSubnets({ subnetGroupName: 'database' })
323
+ .subnetIds.join(','),
324
+ exportName: `${stackName}:DatabaseSubnetIds`,
325
+ });
326
+ }
327
+ if (createElasticache) {
328
+ new aws_cdk_lib_1.CfnOutput(this, 'ElasticacheSubnetIds', {
329
+ value: this.vpc
330
+ .selectSubnets({ subnetGroupName: 'elasticache' })
331
+ .subnetIds.join(','),
332
+ exportName: `${stackName}:ElasticacheSubnetIds`,
333
+ });
334
+ }
335
+ if (createRedshift) {
336
+ new aws_cdk_lib_1.CfnOutput(this, 'RedshiftSubnetIds', {
337
+ value: this.vpc
338
+ .selectSubnets({ subnetGroupName: 'redshift' })
339
+ .subnetIds.join(','),
340
+ exportName: `${stackName}:RedshiftSubnetIds`,
341
+ });
342
+ }
343
+ }
344
+ // SSM Parameter Store via NetworkParameters
345
+ if ((_m = props.storeParameters) !== null && _m !== void 0 ? _m : true) {
346
+ this.networkParameters = new network_parameters_1.NetworkParameters(this, 'NetworkParameters', {
347
+ name: props.name,
348
+ prefix: props.parametersPrefix,
349
+ create: true,
350
+ lookupVpc: false,
351
+ lookupAzs: false,
352
+ lookupPublicSubnets: false,
353
+ lookupPrivateSubnets: false,
354
+ lookupIntraSubnets: false,
355
+ lookupDatabaseSubnets: false,
356
+ lookupElasticacheSubnets: false,
357
+ lookupRedshiftSubnets: false,
358
+ lookupOutpostSubnets: false,
359
+ vpcId: this.vpc.vpcId,
360
+ azs: this.vpc.availabilityZones,
361
+ publicSubnetIds: createPublic
362
+ ? this.vpc.selectSubnets({ subnetGroupName: 'public' }).subnetIds
363
+ : undefined,
364
+ privateSubnetIds: createPrivate
365
+ ? this.vpc.selectSubnets({ subnetGroupName: 'private' }).subnetIds
366
+ : undefined,
367
+ intraSubnetIds: createIntra
368
+ ? this.vpc.selectSubnets({ subnetGroupName: 'intra' }).subnetIds
369
+ : undefined,
370
+ databaseSubnetIds: createDatabase
371
+ ? this.vpc.selectSubnets({ subnetGroupName: 'database' }).subnetIds
372
+ : undefined,
373
+ elasticacheSubnetIds: createElasticache
374
+ ? this.vpc.selectSubnets({ subnetGroupName: 'elasticache' }).subnetIds
375
+ : undefined,
376
+ redshiftSubnetIds: createRedshift
377
+ ? this.vpc.selectSubnets({ subnetGroupName: 'redshift' }).subnetIds
378
+ : undefined,
379
+ });
380
+ }
381
+ }
382
+ }
383
+ exports.StandardNetwork = StandardNetwork;
384
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbmRhcmQtbmV0d29yay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3MtdnBjL2xpYi9zdGFuZGFyZC1uZXR3b3JrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUFtRDtBQUNuRCwyQ0FBMkM7QUFFM0MsMkNBSXVCO0FBQ3ZCLDZDQUErQztBQUMvQyw2REFBdUQ7QUFJdkQsMERBQTBEO0FBRTFEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxjQUFjLEdBQ2xCO0lBQ0UsRUFBRSxFQUFFLEVBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFDO0lBQ2xDLEVBQUUsRUFBRSxFQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBQztJQUNsQyxFQUFFLEVBQUUsRUFBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUM7SUFDbEMsRUFBRSxFQUFFLEVBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFDO0lBQ2xDLEVBQUUsRUFBRSxFQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBQztDQUNuQyxDQUFDO0FBeU5KOzs7Ozs7O0dBT0c7QUFDSCxTQUFTLGtCQUFrQixDQUN6QixPQUFlLEVBQ2YsS0FBMkI7O0lBRTNCLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUNoQyxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCw0Q0FBNEM7SUFDNUMsTUFBTSxJQUFJLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFD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aWInO1xuaW1wb3J0ICogYXMgZWMyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHR5cGUge0NvbnN0cnVjdH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQge1xuICBFeHRlbmRlZENvbnN0cnVjdCxcbiAgdHlwZSBFeHRlbmRlZENvbnN0cnVjdFByb3BzLFxuICBTdGFuZGFyZFRhZ3MsXG59IGZyb20gJy4uLy4uL2F3cy1jZGsnO1xuaW1wb3J0IHtMaWJTdGFuZGFyZFRhZ3N9IGZyb20gJy4uLy4uL3RydWVtYXJrJztcbmltcG9ydCB7TmV0d29ya1BhcmFtZXRlcnN9IGZyb20gJy4vbmV0d29yay1wYXJhbWV0ZXJzJztcblxuZXhwb3J0IHR5cGUgTmF0VHlwZSA9ICdub25lJyB8ICdzaW5nbGUnIHwgJ211bHRpJzsgLy8gVE9ETyBBZGQgIHwgJ3JlZ2lvbmFsJyB8ICdwb29yJztcblxuLy8gVE9ETyBOZWVkIGlwdjYgc3VwcG9ydCBhbmQgd2UgbmVlZCB0byBzdXBwb3J0IGlwdjYgb25seVxuXG4vKipcbiAqIFN1Ym5ldCBzaXppbmcgbG9va3VwIHRhYmxlIGtleWVkIGJ5IFZQQyBwcmVmaXggbGVuZ3RoLlxuICpcbiAqIE1pcnJvcnMgdGhlIGBwcml2YXRlX3N1Ym5ldHNgIGFuZCBgc3VibmV0c2AgbG9jYWxzIGluIHRydWVtYXJrL3RlcnJhZm9ybS1hd3MtdnBjOlxuICpcbiAqICAgVlBDICAgICBwcml2YXRlIG5ld2JpdHMgIHByaXZhdGUgbWFzayAgIG90aGVyIG5ld2JpdHMgICBvdGhlciBtYXNrXG4gKiAgIC8xNiAgICAgICAgICAzICAgICAgICAgICAgICAgLzE5ICAgICAgICAgICAgICA2ICAgICAgICAgICAgICAvMjJcbiAqICAgLzE3ICAgICAgICAgIDMgICAgICAgICAgICAgICAvMjAgICAgICAgICAgICAgIDUgICAgICAgICAgICAgIC8yMlxuICogICAvMTggICAgICAgICAgMyAgICAgICAgICAgICAgIC8yMSAgICAgICAgICAgICAgNSAgICAgICAgICAgICAgLzIzXG4gKiAgIC8xOSAgICAgICAgICAzICAgICAgICAgICAgICAgLzIyICAgICAgICAgICAgICA1ICAgICAgICAgICAgICAvMjRcbiAqICAgLzIwICAgICAgICAgIDQgICAgICAgICAgICAgICAvMjQgICAgICAgICAgICAgIDUgICAgICAgICAgICAgIC8yNVxuICpcbiAqIFwibmV3Yml0c1wiIGlzIHRoZSBudW1iZXIgb2YgYml0cyB0byBleHRlbmQgdGhlIFZQQyBwcmVmaXguXG4gKiBjaWRyTWFzayA9IHZwY1ByZWZpeCArIG5ld2JpdHMuXG4gKi9cbmNvbnN0IFNVQk5FVF9ORVdCSVRTOiBSZWNvcmQ8bnVtYmVyLCB7cHJpdmF0ZUJpdHM6IG51bWJlcjsgb3RoZXJCaXRzOiBudW1iZXJ9PiA9XG4gIHtcbiAgICAxNjoge3ByaXZhdGVCaXRzOiAzLCBvdGhlckJpdHM6IDZ9LFxuICAgIDE3OiB7cHJpdmF0ZUJpdHM6IDMsIG90aGVyQml0czogNX0sXG4gICAgMTg6IHtwcml2YXRlQml0czogMywgb3RoZXJCaXRzOiA1fSxcbiAgICAxOToge3ByaXZhdGVCaXRzOiAzLCBvdGhlckJpdHM6IDV9LFxuICAgIDIwOiB7cHJpdmF0ZUJpdHM6IDQsIG90aGVyQml0czogNX0sXG4gIH07XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgU3RhbmRhcmROZXR3b3JrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YW5kYXJkTmV0d29ya1Byb3BzIGV4dGVuZHMgRXh0ZW5kZWRDb25zdHJ1Y3RQcm9wcyB7XG4gIC8qKlxuICAgKiBOYW1lIGZvciB0aGUgVlBDLiBVc2VkIGFzIHRoZSBWUEMgbmFtZSB0YWcgYW5kIHRoZSBTU00gcGFyYW1ldGVyIHBhdGhcbiAgICogc2VnbWVudCAoZS5nLiAvbmV0d29yay97bmFtZX0vdnBjKS5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogRnVsbCBWUEMgQ0lEUiBibG9jay4gZS5nLiBcIjEwLjAuMC4wLzIwXCIuXG4gICAqIFN1cHBvcnRlZCBWUEMgcHJlZml4IGxlbmd0aHMgZm9yIGF1dG8tc2l6aW5nOiAvMTYsIC8xNywgLzE4LCAvMTksIC8yMC5cbiAgICovXG4gIHJlYWRvbmx5IHZwY0NpZHI6IHN0cmluZztcblxuICAvLyBUT0RPIFN1Z2dlc3QgYm90aCB0aGlzIGFuZCB0aGUgdGVycmFmb3JtIG1vZHVsZSBkZWZhdWx0IHRvIDNcbiAgLyoqXG4gICAqIE51bWJlciBvZiBhdmFpbGFiaWxpdHkgem9uZXMgdG8gZGVwbG95IHN1Ym5ldHMgaW50by4gRGVmYXVsdCBpcyAyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAyXG4gICAqL1xuICByZWFkb25seSBhekNvdW50PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBOQVQgZ2F0ZXdheSBjb25maWd1cmF0aW9uLiBEZWZhdWx0IGlzICdub25lJy5cbiAgICpcbiAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAqL1xuICByZWFkb25seSBuYXRUeXBlPzogTmF0VHlwZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBjcmVhdGUgcHVibGljIHN1Ym5ldHMuIERlZmF1bHQgaXMgdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlUHVibGljU3VibmV0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY3JlYXRlIHByaXZhdGUgc3VibmV0cyAoUFJJVkFURV9XSVRIX0VHUkVTUykuIERlZmF1bHQgaXMgdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlUHJpdmF0ZVN1Ym5ldHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGNyZWF0ZSBpbnRyYSBzdWJuZXRzIChQUklWQVRFX0lTT0xBVEVELCBubyBlZ3Jlc3MpLiBEZWZhdWx0IGlzIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZUludHJhU3VibmV0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY3JlYXRlIGRhdGFiYXNlIHN1Ym5ldHMgKFBSSVZBVEVfV0lUSF9FR1JFU1MpLiBEZWZhdWx0IGlzIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZURhdGFiYXNlU3VibmV0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY3JlYXRlIGVsYXN0aWNhY2hlIHN1Ym5ldHMgKFBSSVZBVEVfV0lUSF9FR1JFU1MpLiBEZWZhdWx0IGlzIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZUVsYXN0aWNhY2hlU3VibmV0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY3JlYXRlIHJlZHNoaWZ0IHN1Ym5ldHMgKFBSSVZBVEVfV0lUSF9FR1JFU1MpLiBEZWZhdWx0IGlzIGZhbHNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlUmVkc2hpZnRTdWJuZXRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQXBwbHkgYSB1bmlmb3JtIENJRFIgbWFzayB0byBBTEwgc3VibmV0IGdyb3Vwcywgb3ZlcnJpZGluZyB0aGUgdGVycmFmb3JtLXN0eWxlXG4gICAqIGF1dG8tc2l6aW5nLiBXaGVuIHNldCwgYWxsIGdyb3VwcyByZWNlaXZlIHRoZSBzYW1lIG1hc2sgcmVnYXJkbGVzcyBvZiB0eXBlLlxuICAgKiBQZXItZ3JvdXAgb3ZlcnJpZGVzIGJlbG93IHRha2UgcHJlY2VkZW5jZSBvdmVyIHRoaXMgdmFsdWUuXG4gICAqL1xuICByZWFkb25seSBzdWJuZXRDaWRyTWFzaz86IG51bWJlcjtcblxuICAvKipcbiAgICogQ0lEUiBtYXNrIG92ZXJyaWRlIGZvciBwcml2YXRlIHN1Ym5ldHMgb25seS5cbiAgICpcbiAgICogRXF1aXZhbGVudCB0byBzZXR0aW5nIGBwcml2YXRlX25ld2JpdHNgIGluIHRlcnJhZm9ybS1hd3MtdnBjOlxuICAgKiAgIHByaXZhdGVTdWJuZXRDaWRyTWFzayA9IHZwY1ByZWZpeCArIHByaXZhdGVfbmV3Yml0c1xuICAgKlxuICAgKiBUYWtlcyBwcmVjZWRlbmNlIG92ZXIgc3VibmV0Q2lkck1hc2sgYW5kIGF1dG8tc2l6aW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZVN1Ym5ldENpZHJNYXNrPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDSURSIG1hc2sgb3ZlcnJpZGUgZm9yIHB1YmxpYyBzdWJuZXRzIG9ubHkuXG4gICAqXG4gICAqIEVxdWl2YWxlbnQgdG8gc2V0dGluZyBgcHVibGljX25ld2JpdHNgIGluIHRlcnJhZm9ybS1hd3MtdnBjOlxuICAgKiAgIHB1YmxpY1N1Ym5ldENpZHJNYXNrID0gdnBjUHJlZml4ICsgcHVibGljX25ld2JpdHNcbiAgICpcbiAgICogVGFrZXMgcHJlY2VkZW5jZSBvdmVyIHN1Ym5ldENpZHJNYXNrIGFuZCBhdXRvLXNpemluZy5cbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY1N1Ym5ldENpZHJNYXNrPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDSURSIG1hc2sgb3ZlcnJpZGUgZm9yIGludHJhIHN1Ym5ldHMgb25seS5cbiAgICpcbiAgICogRXF1aXZhbGVudCB0byBzZXR0aW5nIGBpbnRyYV9uZXdiaXRzYCBpbiB0ZXJyYWZvcm0tYXdzLXZwYy5cbiAgICogVGFrZXMgcHJlY2VkZW5jZSBvdmVyIHN1Ym5ldENpZHJNYXNrIGFuZCBhdXRvLXNpemluZy5cbiAgICovXG4gIHJlYWRvbmx5IGludHJhU3VibmV0Q2lkck1hc2s/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENJRFIgbWFzayBvdmVycmlkZSBmb3IgZGF0YWJhc2Ugc3VibmV0cyBvbmx5LlxuICAgKlxuICAgKiBFcXVpdmFsZW50IHRvIHNldHRpbmcgYGRhdGFiYXNlX25ld2JpdHNgIGluIHRlcnJhZm9ybS1hd3MtdnBjLlxuICAgKiBUYWtlcyBwcmVjZWRlbmNlIG92ZXIgc3VibmV0Q2lkck1hc2sgYW5kIGF1dG8tc2l6aW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWJhc2VTdWJuZXRDaWRyTWFzaz86IG51bWJlcjtcblxuICAvKipcbiAgICogQ0lEUiBtYXNrIG92ZXJyaWRlIGZvciBlbGFzdGljYWNoZSBzdWJuZXRzIG9ubHkuXG4gICAqXG4gICAqIEVxdWl2YWxlbnQgdG8gc2V0dGluZyBgZWxhc3RpY2FjaGVfbmV3Yml0c2AgaW4gdGVycmFmb3JtLWF3cy12cGMuXG4gICAqIFRha2VzIHByZWNlZGVuY2Ugb3ZlciBzdWJuZXRDaWRyTWFzayBhbmQgYXV0by1zaXppbmcuXG4gICAqL1xuICByZWFkb25seSBlbGFzdGljYWNoZVN1Ym5ldENpZHJNYXNrPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDSURSIG1hc2sgb3ZlcnJpZGUgZm9yIHJlZHNoaWZ0IHN1Ym5ldHMgb25seS5cbiAgICpcbiAgICogRXF1aXZhbGVudCB0byBzZXR0aW5nIGByZWRzaGlmdF9uZXdiaXRzYCBpbiB0ZXJyYWZvcm0tYXdzLXZwYy5cbiAgICogVGFrZXMgcHJlY2VkZW5jZSBvdmVyIHN1Ym5ldENpZHJNYXNrIGFuZCBhdXRvLXNpemluZy5cbiAgICovXG4gIHJlYWRvbmx5IHJlZHNoaWZ0U3VibmV0Q2lkck1hc2s/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY3JlYXRlIGFuIFMzIGdhdGV3YXkgVlBDIGVuZHBvaW50LiBUaGUgZW5kcG9pbnQgaXMgYXR0YWNoZWQgdG9cbiAgICogcHJpdmF0ZSwgZGF0YWJhc2UsIGVsYXN0aWNhY2hlLCByZWRzaGlmdCwgYW5kIGludHJhIHN1Ym5ldHMgKHdoaWNoZXZlciBhcmVcbiAgICogZW5hYmxlZCkuIERlZmF1bHQgaXMgdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlUzNFbmRwb2ludD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY3JlYXRlIGEgRHluYW1vREIgZ2F0ZXdheSBWUEMgZW5kcG9pbnQuIEF0dGFjaGVkIHRvIHRoZSBzYW1lXG4gICAqIHN1Ym5ldCBncm91cHMgYXMgdGhlIFMzIGVuZHBvaW50LiBEZWZhdWx0IGlzIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZUR5bmFtb0RiRW5kcG9pbnQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHN0b3JlIFZQQyBhbmQgc3VibmV0IElEcyBpbiBBV1MgU1NNIFBhcmFtZXRlciBTdG9yZSB2aWEgdGhlXG4gICAqIE5ldHdvcmtQYXJhbWV0ZXJzIGNvbnN0cnVjdC4gRGVmYXVsdCBpcyB0cnVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBzdG9yZVBhcmFtZXRlcnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTU00gcGFyYW1ldGVyIHByZWZpeCB1c2VkIHdoZW4gc3RvcmVQYXJhbWV0ZXJzIGlzIHRydWUuIERlZmF1bHQgaXMgXCIvbmV0d29ya1wiLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIi9uZXR3b3JrXCJcbiAgICovXG4gIHJlYWRvbmx5IHBhcmFtZXRlcnNQcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY3JlYXRlIENsb3VkRm9ybWF0aW9uIHN0YWNrIG91dHB1dHMgZm9yIFZQQyBhbmQgc3VibmV0IElEcy5cbiAgICogRGVmYXVsdCBpcyB0cnVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBjcmVhdGVPdXRwdXRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCB0YWdzIHRvIGFwcGx5IHRvIHB1YmxpYyBzdWJuZXRzLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljU3VibmV0VGFncz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgdGFncyB0byBhcHBseSB0byBwcml2YXRlIHN1Ym5ldHMuXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlU3VibmV0VGFncz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgdGFncyB0byBhcHBseSB0byBpbnRyYSBzdWJuZXRzLlxuICAgKi9cbiAgcmVhZG9ubHkgaW50cmFTdWJuZXRUYWdzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCB0YWdzIHRvIGFwcGx5IHRvIGRhdGFiYXNlIHN1Ym5ldHMuXG4gICAqL1xuICByZWFkb25seSBkYXRhYmFzZVN1Ym5ldFRhZ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIHRhZ3MgdG8gYXBwbHkgdG8gZWxhc3RpY2FjaGUgc3VibmV0cy5cbiAgICovXG4gIHJlYWRvbmx5IGVsYXN0aWNhY2hlU3VibmV0VGFncz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgdGFncyB0byBhcHBseSB0byByZWRzaGlmdCBzdWJuZXRzLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVkc2hpZnRTdWJuZXRUYWdzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuLyoqXG4gKiBSZXNvbHZlZCBDSURSIG1hc2sgZm9yIGVhY2ggc3VibmV0IGdyb3VwLlxuICovXG5pbnRlcmZhY2UgUmVzb2x2ZWRTdWJuZXRNYXNrcyB7XG4gIHByaXZhdGU6IG51bWJlcjtcbiAgcHVibGljOiBudW1iZXI7XG4gIGludHJhOiBudW1iZXI7XG4gIGRhdGFiYXNlOiBudW1iZXI7XG4gIGVsYXN0aWNhY2hlOiBudW1iZXI7XG4gIHJlZHNoaWZ0OiBudW1iZXI7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgQ0lEUiBtYXNrcyBmb3IgZWFjaCBzdWJuZXQgZ3JvdXAuXG4gKlxuICogUmVzb2x1dGlvbiBvcmRlciAoaGlnaGVzdCB3aW5zKTpcbiAqICAgMS4gUGVyLWdyb3VwIG92ZXJyaWRlIChlLmcuIHByaXZhdGVTdWJuZXRDaWRyTWFzaylcbiAqICAgMi4gVW5pZm9ybSBvdmVycmlkZSAgKHN1Ym5ldENpZHJNYXNrKVxuICogICAzLiBUZXJyYWZvcm0tdGFibGUgYXV0by1zaXppbmcgZnJvbSB0aGUgVlBDIHByZWZpeFxuICovXG5mdW5jdGlvbiByZXNvbHZlU3VibmV0TWFza3MoXG4gIHZwY0NpZHI6IHN0cmluZyxcbiAgcHJvcHM6IFN0YW5kYXJkTmV0d29ya1Byb3BzLFxuKTogUmVzb2x2ZWRTdWJuZXRNYXNrcyB7XG4gIGNvbnN0IHZwY1ByZWZpeCA9IE51bWJlcih2cGNDaWRyLnNwbGl0KCcvJylbMV0pO1xuXG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHZwY1ByZWZpeCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgVlBDIENJRFI6ICR7dnBjQ2lkcn1gKTtcbiAgfVxuXG4gIC8vIC0tLSBBdXRvLXNpemluZyBmcm9tIHRlcnJhZm9ybSB0YWJsZXMgLS0tXG4gIGNvbnN0IGJpdHMgPSBTVUJORVRfTkVXQklUU1t2cGNQcmVmaXhdO1xuXG4gIGxldCBhdXRvUHJpdmF0ZTogbnVtYmVyO1xuICBsZXQgYXV0b090aGVyOiBudW1iZXI7XG5cbiAgaWYgKGJpdHMpIHtcbiAgICBhdXRvUHJpdmF0ZSA9IHZwY1ByZWZpeCArIGJpdHMucHJpdmF0ZUJpdHM7XG4gICAgYXV0b090aGVyID0gdnBjUHJlZml4ICsgYml0cy5vdGhlckJpdHM7XG4gIH0gZWxzZSBpZiAocHJvcHMuc3VibmV0Q2lkck1hc2sgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIEZhbGwgYmFjayB0byB1bmlmb3JtIHdoZW4gVlBDIHByZWZpeCBpcyBvdXRzaWRlIHRoZSB0YWJsZSByYW5nZVxuICAgIGF1dG9Qcml2YXRlID0gcHJvcHMuc3VibmV0Q2lkck1hc2s7XG4gICAgYXV0b090aGVyID0gcHJvcHMuc3VibmV0Q2lkck1hc2s7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFZQQyBwcmVmaXggLyR7dnBjUHJlZml4fSBpcyBub3QgaW4gdGhlIGF1dG8tc2l6aW5nIHRhYmxlIChzdXBwb3J0ZWQ6IC8xNuKAky8yMCkuIGAgK1xuICAgICAgICBgUHJvdmlkZSBzdWJuZXRDaWRyTWFzayBvciBwZXItZ3JvdXAgb3ZlcnJpZGVzLmAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIFVuaWZvcm0gb3ZlcnJpZGUgcmVwbGFjZXMgYm90aCBwcml2YXRlIGFuZCBvdGhlciBkZWZhdWx0c1xuICBjb25zdCB1bmlmb3JtTWFzayA9IHByb3BzLnN1Ym5ldENpZHJNYXNrO1xuICBjb25zdCBiYXNlTWFza1ByaXZhdGUgPSB1bmlmb3JtTWFzayA/PyBhdXRvUHJpdmF0ZTtcbiAgY29uc3QgYmFzZU1hc2tPdGhlciA9IHVuaWZvcm1NYXNrID8/IGF1dG9PdGhlcjtcblxuICByZXR1cm4ge1xuICAgIHByaXZhdGU6IHByb3BzLnByaXZhdGVTdWJuZXRDaWRyTWFzayA/PyBiYXNlTWFza1ByaXZhdGUsXG4gICAgcHVibGljOiBwcm9wcy5wdWJsaWNTdWJuZXRDaWRyTWFzayA/PyBiYXNlTWFza090aGVyLFxuICAgIGludHJhOiBwcm9wcy5pbnRyYVN1Ym5ldENpZHJNYXNrID8/IGJhc2VNYXNrT3RoZXIsXG4gICAgZGF0YWJhc2U6IHByb3BzLmRhdGFiYXNlU3VibmV0Q2lkck1hc2sgPz8gYmFzZU1hc2tPdGhlcixcbiAgICBlbGFzdGljYWNoZTogcHJvcHMuZWxhc3RpY2FjaGVTdWJuZXRDaWRyTWFzayA/PyBiYXNlTWFza090aGVyLFxuICAgIHJlZHNoaWZ0OiBwcm9wcy5yZWRzaGlmdFN1Ym5ldENpZHJNYXNrID8/IGJhc2VNYXNrT3RoZXIsXG4gIH07XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoYXQgdGhlIFZQQyBDSURSIGhhcyBlbm91Z2ggYWRkcmVzcyBzcGFjZSBmb3IgYWxsIGVuYWJsZWQgc3VibmV0XG4gKiBncm91cHMuIEVhY2ggZ3JvdXAgY29uc3VtZXMgYXpDb3VudCDDlyAyXigzMi1jaWRyTWFzaykgSVBzLlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUFkZHJlc3NTcGFjZShcbiAgdnBjQ2lkcjogc3RyaW5nLFxuICBhekNvdW50OiBudW1iZXIsXG4gIGVuYWJsZWRHcm91cHM6IHttYXNrOiBudW1iZXI7IG5hbWU6IHN0cmluZ31bXSxcbik6IHZvaWQge1xuICBjb25zdCB2cGNQcmVmaXggPSBOdW1iZXIodnBjQ2lkci5zcGxpdCgnLycpWzFdKTtcblxuICAvLyBBV1MgYWxsb3dzIFZQQyBuZXRtYXNrcyBiZXR3ZWVuIC8xNiBhbmQgLzI4LlxuICBpZiAoIU51bWJlci5pc0ludGVnZXIodnBjUHJlZml4KSB8fCB2cGNQcmVmaXggPCAxNiB8fCB2cGNQcmVmaXggPiAyOCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIFZQQyBDSURSICR7dnBjQ2lkcn06IHByZWZpeCBtdXN0IGJlIGFuIGludGVnZXIgYmV0d2VlbiAvMTYgYW5kIC8yOC5gLFxuICAgICk7XG4gIH1cblxuICBpZiAoIU51bWJlci5pc0ludGVnZXIoYXpDb3VudCkgfHwgYXpDb3VudCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGF6Q291bnQgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIsIGdvdCAke2F6Q291bnR9LmApO1xuICB9XG5cbiAgLy8gQVdTIHN1Ym5ldCBtYXNrcyBtdXN0IGJlIGJldHdlZW4gLzE2IGFuZCAvMjgsIGFuZCBuZXZlciBsYXJnZXIgdGhhbiB0aGVcbiAgLy8gVlBDIGl0c2VsZi5cbiAgZm9yIChjb25zdCBnIG9mIGVuYWJsZWRHcm91cHMpIHtcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoZy5tYXNrKSB8fCBnLm1hc2sgPCB2cGNQcmVmaXggfHwgZy5tYXNrID4gMjgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgQ0lEUiBtYXNrIC8ke2cubWFza30gZm9yICR7Zy5uYW1lfSBzdWJuZXRzOiBtdXN0IGJlIGFuIGAgK1xuICAgICAgICAgIGBpbnRlZ2VyIGJldHdlZW4gdGhlIFZQQyBwcmVmaXggKC8ke3ZwY1ByZWZpeH0pIGFuZCAvMjguYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgdnBjSXBzID0gMiAqKiAoMzIgLSB2cGNQcmVmaXgpO1xuICBsZXQgcmVxdWlyZWRJcHMgPSAwO1xuICBjb25zdCBkZXRhaWw6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCBnIG9mIGVuYWJsZWRHcm91cHMpIHtcbiAgICBjb25zdCBzdWJuZXRJcHMgPSAyICoqICgzMiAtIGcubWFzayk7XG4gICAgY29uc3QgZ3JvdXBJcHMgPSBhekNvdW50ICogc3VibmV0SXBzO1xuICAgIHJlcXVpcmVkSXBzICs9IGdyb3VwSXBzO1xuICAgIGRldGFpbC5wdXNoKGAke2cubmFtZX06ICR7YXpDb3VudH0gw5cgLyR7Zy5tYXNrfSA9ICR7Z3JvdXBJcHN9IElQc2ApO1xuICB9XG5cbiAgaWYgKHJlcXVpcmVkSXBzID4gdnBjSXBzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFZQQyBDSURSICR7dnBjQ2lkcn0gKCR7dnBjSXBzfSBJUHMpIGlzIHRvbyBzbWFsbC5cXG5gICtcbiAgICAgICAgYFJlcXVpcmVkOiAke3JlcXVpcmVkSXBzfSBJUHMgYWNyb3NzICR7ZW5hYmxlZEdyb3Vwcy5sZW5ndGh9IHN1Ym5ldCBncm91cHM6XFxuYCArXG4gICAgICAgIGRldGFpbC5tYXAoKGQpID0+IGAgICR7ZH1gKS5qb2luKCdcXG4nKSArXG4gICAgICAgICdcXG5JbmNyZWFzZSB0aGUgVlBDIHNpemUsIHJlZHVjZSBhekNvdW50LCBvciBkaXNhYmxlIHNvbWUgc3VibmV0IGdyb3Vwcy4nLFxuICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlTdWJuZXRUYWdzKFxuICBzdWJuZXRzOiBlYzIuSVN1Ym5ldFtdLFxuICB0YWdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuKTogdm9pZCB7XG4gIGZvciAoY29uc3Qgc3VibmV0IG9mIHN1Ym5ldHMpIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0YWdzKSkge1xuICAgICAgVGFncy5vZihzdWJuZXQpLmFkZChrZXksIHZhbHVlKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RhbmRhcmQgbXVsdGktdGllciBWUEMgZm9sbG93aW5nIFRydWVNYXJrIGNvbnZlbnRpb25zLCB3aXRoIHN1Ym5ldFxuICogc2l6aW5nIHRoYXQgbWlycm9ycyB0aGUgdHJ1ZW1hcmsvdGVycmFmb3JtLWF3cy12cGMgVGVycmFmb3JtIG1vZHVsZS5cbiAqXG4gKiAqKlN1Ym5ldCBsYXlvdXQqKiAoZWFjaCBncm91cCBpcyByZXBsaWNhdGVkIGFjcm9zcyBhbGwgQVpzKTpcbiAqXG4gKiB8IEdyb3VwICAgICAgIHwgVHlwZSAgICAgICAgICAgICAgICB8IERlZmF1bHQgc2l6aW5nIChhdXRvLCBzZWUgdGFibGUgYmVsb3cpIHxcbiAqIHwtLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCBwcml2YXRlICAgICB8IFBSSVZBVEVfV0lUSF9FR1JFU1MgfCBMYXJnZXIg4oCUIHNpemVkIGZvciB3b3JrbG9hZCB0cmFmZmljICAgIHxcbiAqIHwgcHVibGljICAgICAgfCBQVUJMSUMgICAgICAgICAgICAgIHwgU21hbGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCBpbnRyYSAgICAgICB8IFBSSVZBVEVfSVNPTEFURUQgICAgfCBTbWFsbGVyIOKAlCBubyBlZ3Jlc3MgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgZGF0YWJhc2UgICAgfCBQUklWQVRFX1dJVEhfRUdSRVNTIHwgU21hbGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCBlbGFzdGljYWNoZSB8IFBSSVZBVEVfV0lUSF9FR1JFU1MgfCBTbWFsbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IHJlZHNoaWZ0ICAgIHwgUFJJVkFURV9XSVRIX0VHUkVTUyB8IFNtYWxsZXIgKGRpc2FibGVkIGJ5IGRlZmF1bHQpICAgICAgICAgIHxcbiAqXG4gKiAqKkF1dG8tc2l6aW5nIHRhYmxlKiogKG1hdGNoZXMgdGVycmFmb3JtLWF3cy12cGMgYHByaXZhdGVfc3VibmV0c2AvYHN1Ym5ldHNgIGxvY2Fscyk6XG4gKlxuICogfCBWUEMgICAgfCBwcml2YXRlIHwgcHVibGljL2ludHJhL2RhdGFiYXNlL2VsYXN0aWNhY2hlL3JlZHNoaWZ0IHxcbiAqIHwtLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAvMTYgICAgfCAvMTkgICAgIHwgLzIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IC8xNyAgICB8IC8yMCAgICAgfCAvMjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgLzE4ICAgIHwgLzIxICAgICB8IC8yMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAvMTkgICAgfCAvMjIgICAgIHwgLzI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IC8yMCAgICB8IC8yNCAgICAgfCAvMjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqXG4gKiBPdmVycmlkZSBzaXppbmcgdmlhIGBzdWJuZXRDaWRyTWFza2AgKHVuaWZvcm0pIG9yIHBlci1ncm91cCBwcm9wcyBsaWtlXG4gKiBgcHJpdmF0ZVN1Ym5ldENpZHJNYXNrYCwgYHB1YmxpY1N1Ym5ldENpZHJNYXNrYCwgZXRjLiDigJQgZXF1aXZhbGVudCB0byB0aGVcbiAqIGBwcml2YXRlX25ld2JpdHNgLCBgcHVibGljX25ld2JpdHNgLCAuLi4gdmFyaWFibGVzIGluIFRlcnJhZm9ybS5cbiAqXG4gKiA+ICoqTm90ZSBvbiBDSURSIHBsYWNlbWVudDoqKiBDREsgYWxsb2NhdGVzIHN1Ym5ldCBDSURScyBzZXF1ZW50aWFsbHkgZnJvbVxuICogPiB0aGUgc3RhcnQgb2YgdGhlIFZQQyBDSURSIGJsb2NrLiBUaGlzIGRpZmZlcnMgZnJvbSBUZXJyYWZvcm0ncyBwbGFjZW1lbnQsXG4gKiA+IHdoaWNoIHVzZXMgZXhwbGljaXQgYG5ldG51bWAgb2Zmc2V0cyB0byBwb3NpdGlvbiBzdWJuZXQgZ3JvdXBzIGF0IHNwZWNpZmljXG4gKiA+IGFkZHJlc3NlcyB3aXRoaW4gdGhlIFZQQy4gVGhlIHN1Ym5ldCAqc2l6ZXMqIG1hdGNoIGV4YWN0bHk7IG9ubHkgdGhlXG4gKiA+IHN0YXJ0aW5nIGFkZHJlc3NlcyB3aXRoaW4gdGhlIFZQQyBkaWZmZXIuXG4gKlxuICogR2F0ZXdheSBWUEMgZW5kcG9pbnRzIGZvciBTMyBhbmQgRHluYW1vREIgYXJlIGNyZWF0ZWQgYnkgZGVmYXVsdCBhbmQgYXR0YWNoZWRcbiAqIHRvIHByaXZhdGUsIGludHJhLCBkYXRhYmFzZSwgZWxhc3RpY2FjaGUsIGFuZCByZWRzaGlmdCByb3V0ZSB0YWJsZXMuXG4gKlxuICogVlBDIGFuZCBzdWJuZXQgSURzIGFyZSBzdG9yZWQgaW4gQVdTIFNTTSBQYXJhbWV0ZXIgU3RvcmUgdmlhIE5ldHdvcmtQYXJhbWV0ZXJzXG4gKiBhbmQgb3B0aW9uYWxseSBleHBvcnRlZCBhcyBDbG91ZEZvcm1hdGlvbiBvdXRwdXRzLlxuICovXG5leHBvcnQgY2xhc3MgU3RhbmRhcmROZXR3b3JrIGV4dGVuZHMgRXh0ZW5kZWRDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogVGhlIFZQQyBjcmVhdGVkIGJ5IHRoaXMgY29uc3RydWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjOiBlYzIuVnBjO1xuXG4gIC8qKlxuICAgKiBUaGUgTmV0d29ya1BhcmFtZXRlcnMgY29uc3RydWN0IGhvbGRpbmcgU1NNIHBhdGhzIGFuZCBjcmVhdGVkIHBhcmFtZXRlcnMuXG4gICAqIFVuZGVmaW5lZCB3aGVuIHN0b3JlUGFyYW1ldGVycyBpcyBmYWxzZS5cbiAgICovXG4gIHJlYWRvbmx5IG5ldHdvcmtQYXJhbWV0ZXJzPzogTmV0d29ya1BhcmFtZXRlcnM7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFN0YW5kYXJkTmV0d29ya1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBzdGFuZGFyZFRhZ3M6IFN0YW5kYXJkVGFncy5tZXJnZShwcm9wcy5zdGFuZGFyZFRhZ3MsIExpYlN0YW5kYXJkVGFncyksXG4gICAgfSk7XG5cbiAgICAvLyBUT0RPIFlvdSBjaGFuZ2UgdGhlIGRlZmF1bHQgaGVyZSBEYXJlblxuICAgIGNvbnN0IGF6Q291bnQgPSBwcm9wcy5hekNvdW50ID8/IDI7XG4gICAgY29uc3QgbmF0VHlwZSA9IHByb3BzLm5hdFR5cGUgPz8gJ25vbmUnO1xuXG4gICAgY29uc3QgbmF0R2F0ZXdheXMgPVxuICAgICAgbmF0VHlwZSA9PT0gJ211bHRpJyA/IGF6Q291bnQgOiBuYXRUeXBlID09PSAnc2luZ2xlJyA/IDEgOiAwO1xuXG4gICAgLy8gVE9ETyBOZWVkIHRvIGFkZCBzdXBwb3J0IGZvciByZWdpb25hbCBOQVRcbiAgICAvLyBUT0RPIE5lZWQgdG8gYWRkIHN1cHBvcnQgZm9yIHBvb3IgTkFUXG5cbiAgICAvLyBUT0RPIE5lZWQgdG8gYWRkIHN1cHBvcnQgZm9yIG5ldHdvcmsgZmlyZXdhbGxcblxuICAgIGNvbnN0IGNyZWF0ZVB1YmxpYyA9IHByb3BzLmNyZWF0ZVB1YmxpY1N1Ym5ldHMgPz8gdHJ1ZTtcbiAgICBjb25zdCBjcmVhdGVQcml2YXRlID0gcHJvcHMuY3JlYXRlUHJpdmF0ZVN1Ym5ldHMgPz8gdHJ1ZTtcbiAgICBjb25zdCBjcmVhdGVJbnRyYSA9IHByb3BzLmNyZWF0ZUludHJhU3VibmV0cyA/PyB0cnVlO1xuICAgIGNvbnN0IGNyZWF0ZURhdGFiYXNlID0gcHJvcHMuY3JlYXRlRGF0YWJhc2VTdWJuZXRzID8/IHRydWU7XG4gICAgY29uc3QgY3JlYXRlRWxhc3RpY2FjaGUgPSBwcm9wcy5jcmVhdGVFbGFzdGljYWNoZVN1Ym5ldHMgPz8gdHJ1ZTtcbiAgICBjb25zdCBjcmVhdGVSZWRzaGlmdCA9IHByb3BzLmNyZWF0ZVJlZHNoaWZ0U3VibmV0cyA/PyBmYWxzZTtcblxuICAgIGNvbnN0IG1hc2tzID0gcmVzb2x2ZVN1Ym5ldE1hc2tzKHByb3BzLnZwY0NpZHIsIHByb3BzKTtcblxuICAgIGNvbnN0IGVuYWJsZWRHcm91cHM6IHttYXNrOiBudW1iZXI7IG5hbWU6IHN0cmluZ31bXSA9IFtdO1xuICAgIGlmIChjcmVhdGVQdWJsaWMpIGVuYWJsZWRHcm91cHMucHVzaCh7bWFzazogbWFza3MucHVibGljLCBuYW1lOiAncHVibGljJ30pO1xuICAgIGlmIChjcmVhdGVQcml2YXRlKVxuICAgICAgZW5hYmxlZEdyb3Vwcy5wdXNoKHttYXNrOiBtYXNrcy5wcml2YXRlLCBuYW1lOiAncHJpdmF0ZSd9KTtcbiAgICBpZiAoY3JlYXRlSW50cmEpIGVuYWJsZWRHcm91cHMucHVzaCh7bWFzazogbWFza3MuaW50cmEsIG5hbWU6ICdpbnRyYSd9KTtcbiAgICBpZiAoY3JlYXRlRGF0YWJhc2UpXG4gICAgICBlbmFibGVkR3JvdXBzLnB1c2goe21hc2s6IG1hc2tzLmRhdGFiYXNlLCBuYW1lOiAnZGF0YWJhc2UnfSk7XG4gICAgaWYgKGNyZWF0ZUVsYXN0aWNhY2hlKVxuICAgICAgZW5hYmxlZEdyb3Vwcy5wdXNoKHttYXNrOiBtYXNrcy5lbGFzdGljYWNoZSwgbmFtZTogJ2VsYXN0aWNhY2hlJ30pO1xuICAgIGlmIChjcmVhdGVSZWRzaGlmdClcbiAgICAgIGVuYWJsZWRHcm91cHMucHVzaCh7bWFzazogbWFza3MucmVkc2hpZnQsIG5hbWU6ICdyZWRzaGlmdCd9KTtcblxuICAgIHZhbGlkYXRlQWRkcmVzc1NwYWNlKHByb3BzLnZwY0NpZHIsIGF6Q291bnQsIGVuYWJsZWRHcm91cHMpO1xuXG4gICAgY29uc3Qgc3VibmV0Q29uZmlndXJhdGlvbjogZWMyLlN1Ym5ldENvbmZpZ3VyYXRpb25bXSA9IFtdO1xuXG4gICAgaWYgKGNyZWF0ZVByaXZhdGUpIHtcbiAgICAgIHN1Ym5ldENvbmZpZ3VyYXRpb24ucHVzaCh7XG4gICAgICAgIG5hbWU6ICdwcml2YXRlJyxcbiAgICAgICAgc3VibmV0VHlwZTogZWMyLlN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTUyxcbiAgICAgICAgY2lkck1hc2s6IG1hc2tzLnByaXZhdGUsXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGNyZWF0ZVB1YmxpYykge1xuICAgICAgc3VibmV0Q29uZmlndXJhdGlvbi5wdXNoKHtcbiAgICAgICAgbmFtZTogJ3B1YmxpYycsXG4gICAgICAgIHN1Ym5ldFR5cGU6IGVjMi5TdWJuZXRUeXBlLlBVQkxJQyxcbiAgICAgICAgY2lkck1hc2s6IG1hc2tzLnB1YmxpYyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoY3JlYXRlSW50cmEpIHtcbiAgICAgIHN1Ym5ldENvbmZpZ3VyYXRpb24ucHVzaCh7XG4gICAgICAgIG5hbWU6ICdpbnRyYScsXG4gICAgICAgIHN1Ym5ldFR5cGU6IGVjMi5TdWJuZXRUeXBlLlBSSVZBVEVfSVNPTEFURUQsXG4gICAgICAgIGNpZHJNYXNrOiBtYXNrcy5pbnRyYSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoY3JlYXRlRGF0YWJhc2UpIHtcbiAgICAgIHN1Ym5ldENvbmZpZ3VyYXRpb24ucHVzaCh7XG4gICAgICAgIG5hbWU6ICdkYXRhYmFzZScsXG4gICAgICAgIHN1Ym5ldFR5cGU6IGVjMi5TdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1MsXG4gICAgICAgIGNpZHJNYXNrOiBtYXNrcy5kYXRhYmFzZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoY3JlYXRlRWxhc3RpY2FjaGUpIHtcbiAgICAgIHN1Ym5ldENvbmZpZ3VyYXRpb24ucHVzaCh7XG4gICAgICAgIG5hbWU6ICdlbGFzdGljYWNoZScsXG4gICAgICAgIHN1Ym5ldFR5cGU6IGVjMi5TdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1MsXG4gICAgICAgIGNpZHJNYXNrOiBtYXNrcy5lbGFzdGljYWNoZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoY3JlYXRlUmVkc2hpZnQpIHtcbiAgICAgIHN1Ym5ldENvbmZpZ3VyYXRpb24ucHVzaCh7XG4gICAgICAgIG5hbWU6ICdyZWRzaGlmdCcsXG4gICAgICAgIHN1Ym5ldFR5cGU6IGVjMi5TdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1MsXG4gICAgICAgIGNpZHJNYXNrOiBtYXNrcy5yZWRzaGlmdCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMudnBjID0gbmV3IGVjMi5WcGModGhpcywgJ1ZwYycsIHtcbiAgICAgIHZwY05hbWU6IHByb3BzLm5hbWUsXG4gICAgICBtYXhBenM6IGF6Q291bnQsXG4gICAgICBuYXRHYXRld2F5cyxcbiAgICAgIGlwQWRkcmVzc2VzOiBlYzIuSXBBZGRyZXNzZXMuY2lkcihwcm9wcy52cGNDaWRyKSxcbiAgICAgIHN1Ym5ldENvbmZpZ3VyYXRpb24sXG4gICAgfSk7XG5cbiAgICAvLyBBcHBseSBwZXItc3VibmV0LWdyb3VwIHRhZ3NcbiAgICBpZiAocHJvcHMucHVibGljU3VibmV0VGFncyAmJiBjcmVhdGVQdWJsaWMpIHtcbiAgICAgIGFwcGx5U3VibmV0VGFncyhcbiAgICAgICAgdGhpcy52cGMuc2VsZWN0U3VibmV0cyh7c3VibmV0R3JvdXBOYW1lOiAncHVibGljJ30pLnN1Ym5ldHMsXG4gICAgICAgIHByb3BzLnB1YmxpY1N1Ym5ldFRhZ3MsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocHJvcHMucHJpdmF0ZVN1Ym5ldFRhZ3MgJiYgY3JlYXRlUHJpdmF0ZSkge1xuICAgICAgYXBwbHlTdWJuZXRUYWdzKFxuICAgICAgICB0aGlzLnZwYy5zZWxlY3RTdWJuZXRzKHtzdWJuZXRHcm91cE5hbWU6ICdwcml2YXRlJ30pLnN1Ym5ldHMsXG4gICAgICAgIHByb3BzLnByaXZhdGVTdWJuZXRUYWdzLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHByb3BzLmludHJhU3VibmV0VGFncyAmJiBjcmVhdGVJbnRyYSkge1xuICAgICAgYXBwbHlTdWJuZXRUYWdzKFxuICAgICAgICB0aGlzLnZwYy5zZWxlY3RTdWJuZXRzKHtzdWJuZXRHcm91cE5hbWU6ICdpbnRyYSd9KS5zdWJuZXRzLFxuICAgICAgICBwcm9wcy5pbnRyYVN1Ym5ldFRhZ3MsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocHJvcHMuZGF0YWJhc2VTdWJuZXRUYWdzICYmIGNyZWF0ZURhdGFiYXNlKSB7XG4gICAgICBhcHBseVN1Ym5ldFRhZ3MoXG4gICAgICAgIHRoaXMudnBjLnNlbGVjdFN1Ym5ldHMoe3N1Ym5ldEdyb3VwTmFtZTogJ2RhdGFiYXNlJ30pLnN1Ym5ldHMsXG4gICAgICAgIHByb3BzLmRhdGFiYXNlU3VibmV0VGFncyxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChwcm9wcy5lbGFzdGljYWNoZVN1Ym5ldFRhZ3MgJiYgY3JlYXRlRWxhc3RpY2FjaGUpIHtcbiAgICAgIGFwcGx5U3VibmV0VGFncyhcbiAgICAgICAgdGhpcy52cGMuc2VsZWN0U3VibmV0cyh7c3VibmV0R3JvdXBOYW1lOiAnZWxhc3RpY2FjaGUnfSkuc3VibmV0cyxcbiAgICAgICAgcHJvcHMuZWxhc3RpY2FjaGVTdWJuZXRUYWdzLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHByb3BzLnJlZHNoaWZ0U3VibmV0VGFncyAmJiBjcmVhdGVSZWRzaGlmdCkge1xuICAgICAgYXBwbHlTdWJuZXRUYWdzKFxuICAgICAgICB0aGlzLnZwYy5zZWxlY3RTdWJuZXRzKHtzdWJuZXRHcm91cE5hbWU6ICdyZWRzaGlmdCd9KS5zdWJuZXRzLFxuICAgICAgICBwcm9wcy5yZWRzaGlmdFN1Ym5ldFRhZ3MsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEJ1aWxkIHRoZSBsaXN0IG9mIHN1Ym5ldCBncm91cHMgZm9yIGdhdGV3YXkgZW5kcG9pbnQgcm91dGUgdGFibGVzLlxuICAgIGNvbnN0IGVuZHBvaW50U3VibmV0czogZWMyLlN1Ym5ldFNlbGVjdGlvbltdID0gW107XG4gICAgaWYgKGNyZWF0ZVByaXZhdGUpIGVuZHBvaW50U3VibmV0cy5wdXNoKHtzdWJuZXRHcm91cE5hbWU6ICdwcml2YXRlJ30pO1xuICAgIGlmIChjcmVhdGVJbnRyYSkgZW5kcG9pbnRTdWJuZXRzLnB1c2goe3N1Ym5ldEdyb3VwTmFtZTogJ2ludHJhJ30pO1xuICAgIGlmIChjcmVhdGVEYXRhYmFzZSkgZW5kcG9pbnRTdWJuZXRzLnB1c2goe3N1Ym5ldEdyb3VwTmFtZTogJ2RhdGFiYXNlJ30pO1xuICAgIGlmIChjcmVhdGVFbGFzdGljYWNoZSlcbiAgICAgIGVuZHBvaW50U3VibmV0cy5wdXNoKHtzdWJuZXRHcm91cE5hbWU6ICdlbGFzdGljYWNoZSd9KTtcbiAgICBpZiAoY3JlYXRlUmVkc2hpZnQpIGVuZHBvaW50U3VibmV0cy5wdXNoKHtzdWJuZXRHcm91cE5hbWU6ICdyZWRzaGlmdCd9KTtcblxuICAgIGlmICgocHJvcHMuY3JlYXRlUzNFbmRwb2ludCA/PyB0cnVlKSAmJiBlbmRwb2ludFN1Ym5ldHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy52cGMuYWRkR2F0ZXdheUVuZHBvaW50KCdTM0dhdGV3YXlFbmRwb2ludCcsIHtcbiAgICAgICAgc2VydmljZTogZWMyLkdhdGV3YXlWcGNFbmRwb2ludEF3c1NlcnZpY2UuUzMsXG4gICAgICAgIHN1Ym5ldHM6IGVuZHBvaW50U3VibmV0cyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICgocHJvcHMuY3JlYXRlRHluYW1vRGJFbmRwb2ludCA/PyB0cnVlKSAmJiBlbmRwb2ludFN1Ym5ldHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy52cGMuYWRkR2F0ZXdheUVuZHBvaW50KCdEeW5hbW9EYkdhdGV3YXlFbmRwb2ludCcsIHtcbiAgICAgICAgc2VydmljZTogZWMyLkdhdGV3YXlWcGNFbmRwb2ludEF3c1NlcnZpY2UuRFlOQU1PREIsXG4gICAgICAgIHN1Ym5ldHM6IGVuZHBvaW50U3VibmV0cyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIENsb3VkRm9ybWF0aW9uIG91dHB1dHNcbiAgICBpZiAocHJvcHMuY3JlYXRlT3V0cHV0cyA/PyB0cnVlKSB7XG4gICAgICBjb25zdCBzdGFja05hbWUgPSBTdGFjay5vZih0aGlzKS5zdGFja05hbWU7XG5cbiAgICAgIG5ldyBDZm5PdXRwdXQodGhpcywgJ1ZwY0lkJywge1xuICAgICAgICB2YWx1ZTogdGhpcy52cGMudnBjSWQsXG4gICAgICAgIGV4cG9ydE5hbWU6IGAke3N0YWNrTmFtZX06VnBjSWRgLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChjcmVhdGVQdWJsaWMpIHtcbiAgICAgICAgbmV3IENmbk91dHB1dCh0aGlzLCAnUHVibGljU3VibmV0SWRzJywge1xuICAgICAgICAgIHZhbHVlOiB0aGlzLnZwY1xuICAgICAgICAgICAgLnNlbGVjdFN1Ym5ldHMoe3N1Ym5ldEdyb3VwTmFtZTogJ3B1YmxpYyd9KVxuICAgICAgICAgICAgLnN1Ym5ldElkcy5qb2luKCcsJyksXG4gICAgICAgICAgZXhwb3J0TmFtZTogYCR7c3RhY2tOYW1lfTpQdWJsaWNTdWJuZXRJZHNgLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChjcmVhdGVQcml2YXRlKSB7XG4gICAgICAgIG5ldyBDZm5PdXRwdXQodGhpcywgJ1ByaXZhdGVTdWJuZXRJZHMnLCB7XG4gICAgICAgICAgdmFsdWU6IHRoaXMudnBjXG4gICAgICAgICAgICAuc2VsZWN0U3VibmV0cyh7c3VibmV0R3JvdXBOYW1lOiAncHJpdmF0ZSd9KVxuICAgICAgICAgICAgLnN1Ym5ldElkcy5qb2luKCcsJyksXG4gICAgICAgICAgZXhwb3J0TmFtZTogYCR7c3RhY2tOYW1lfTpQcml2YXRlU3VibmV0SWRzYCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoY3JlYXRlSW50cmEpIHtcbiAgICAgICAgbmV3IENmbk91dHB1dCh0aGlzLCAnSW50cmFTdWJuZXRJZHMnLCB7XG4gICAgICAgICAgdmFsdWU6IHRoaXMudnBjXG4gICAgICAgICAgICAuc2VsZWN0U3VibmV0cyh7c3VibmV0R3JvdXBOYW1lOiAnaW50cmEnfSlcbiAgICAgICAgICAgIC5zdWJuZXRJZHMuam9pbignLCcpLFxuICAgICAgICAgIGV4cG9ydE5hbWU6IGAke3N0YWNrTmFtZX06SW50cmFTdWJuZXRJZHNgLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChjcmVhdGVEYXRhYmFzZSkge1xuICAgICAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsICdEYXRhYmFzZVN1Ym5ldElkcycsIHtcbiAgICAgICAgICB2YWx1ZTogdGhpcy52cGNcbiAgICAgICAgICAgIC5zZWxlY3RTdWJuZXRzKHtzdWJuZXRHcm91cE5hbWU6ICdkYXRhYmFzZSd9KVxuICAgICAgICAgICAgLnN1Ym5ldElkcy5qb2luKCcsJyksXG4gICAgICAgICAgZXhwb3J0TmFtZTogYCR7c3RhY2tOYW1lfTpEYXRhYmFzZVN1Ym5ldElkc2AsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGNyZWF0ZUVsYXN0aWNhY2hlKSB7XG4gICAgICAgIG5ldyBDZm5PdXRwdXQodGhpcywgJ0VsYXN0aWNhY2hlU3VibmV0SWRzJywge1xuICAgICAgICAgIHZhbHVlOiB0aGlzLnZwY1xuICAgICAgICAgICAgLnNlbGVjdFN1Ym5ldHMoe3N1Ym5ldEdyb3VwTmFtZTogJ2VsYXN0aWNhY2hlJ30pXG4gICAgICAgICAgICAuc3VibmV0SWRzLmpvaW4oJywnKSxcbiAgICAgICAgICBleHBvcnROYW1lOiBgJHtzdGFja05hbWV9OkVsYXN0aWNhY2hlU3VibmV0SWRzYCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoY3JlYXRlUmVkc2hpZnQpIHtcbiAgICAgICAgbmV3IENmbk91dHB1dCh0aGlzLCAnUmVkc2hpZnRTdWJuZXRJZHMnLCB7XG4gICAgICAgICAgdmFsdWU6IHRoaXMudnBjXG4gICAgICAgICAgICAuc2VsZWN0U3VibmV0cyh7c3VibmV0R3JvdXBOYW1lOiAncmVkc2hpZnQnfSlcbiAgICAgICAgICAgIC5zdWJuZXRJZHMuam9pbignLCcpLFxuICAgICAgICAgIGV4cG9ydE5hbWU6IGAke3N0YWNrTmFtZX06UmVkc2hpZnRTdWJuZXRJZHNgLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTU00gUGFyYW1ldGVyIFN0b3JlIHZpYSBOZXR3b3JrUGFyYW1ldGVyc1xuICAgIGlmIChwcm9wcy5zdG9yZVBhcmFtZXRlcnMgPz8gdHJ1ZSkge1xuICAgICAgdGhpcy5uZXR3b3JrUGFyYW1ldGVycyA9IG5ldyBOZXR3b3JrUGFyYW1ldGVycyhcbiAgICAgICAgdGhpcyxcbiAgICAgICAgJ05ldHdvcmtQYXJhbWV0ZXJzJyxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IHByb3BzLm5hbWUsXG4gICAgICAgICAgcHJlZml4OiBwcm9wcy5wYXJhbWV0ZXJzUHJlZml4LFxuICAgICAgICAgIGNyZWF0ZTogdHJ1ZSxcbiAgICAgICAgICBsb29rdXBWcGM6IGZhbHNlLFxuICAgICAgICAgIGxvb2t1cEF6czogZmFsc2UsXG4gICAgICAgICAgbG9va3VwUHVibGljU3VibmV0czogZmFsc2UsXG4gICAgICAgICAgbG9va3VwUHJpdmF0ZVN1Ym5ldHM6IGZhbHNlLFxuICAgICAgICAgIGxvb2t1cEludHJhU3VibmV0czogZmFsc2UsXG4gICAgICAgICAgbG9va3VwRGF0YWJhc2VTdWJuZXRzOiBmYWxzZSxcbiAgICAgICAgICBsb29rdXBFbGFzdGljYWNoZVN1Ym5ldHM6IGZhbHNlLFxuICAgICAgICAgIGxvb2t1cFJlZHNoaWZ0U3VibmV0czogZmFsc2UsXG4gICAgICAgICAgbG9va3VwT3V0cG9zdFN1Ym5ldHM6IGZhbHNlLFxuICAgICAgICAgIHZwY0lkOiB0aGlzLnZwYy52cGNJZCxcbiAgICAgICAgICBhenM6IHRoaXMudnBjLmF2YWlsYWJpbGl0eVpvbmVzLFxuICAgICAgICAgIHB1YmxpY1N1Ym5ldElkczogY3JlYXRlUHVibGljXG4gICAgICAgICAgICA/IHRoaXMudnBjLnNlbGVjdFN1Ym5ldHMoe3N1Ym5ldEdyb3VwTmFtZTogJ3B1YmxpYyd9KS5zdWJuZXRJZHNcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHByaXZhdGVTdWJuZXRJZHM6IGNyZWF0ZVByaXZhdGVcbiAgICAgICAgICAgID8gdGhpcy52cGMuc2VsZWN0U3VibmV0cyh7c3VibmV0R3JvdXBOYW1lOiAncHJpdmF0ZSd9KS5zdWJuZXRJZHNcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGludHJhU3VibmV0SWRzOiBjcmVhdGVJbnRyYVxuICAgICAgICAgICAgPyB0aGlzLnZwYy5zZWxlY3RTdWJuZXRzKHtzdWJuZXRHcm91cE5hbWU6ICdpbnRyYSd9KS5zdWJuZXRJZHNcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGRhdGFiYXNlU3VibmV0SWRzOiBjcmVhdGVEYXRhYmFzZVxuICAgICAgICAgICAgPyB0aGlzLnZwYy5zZWxlY3RTdWJuZXRzKHtzdWJuZXRHcm91cE5hbWU6ICdkYXRhYmFzZSd9KS5zdWJuZXRJZHNcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGVsYXN0aWNhY2hlU3VibmV0SWRzOiBjcmVhdGVFbGFzdGljYWNoZVxuICAgICAgICAgICAgPyB0aGlzLnZwYy5zZWxlY3RTdWJuZXRzKHtzdWJuZXRHcm91cE5hbWU6ICdlbGFzdGljYWNoZSd9KS5zdWJuZXRJZHNcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHJlZHNoaWZ0U3VibmV0SWRzOiBjcmVhdGVSZWRzaGlmdFxuICAgICAgICAgICAgPyB0aGlzLnZwYy5zZWxlY3RTdWJuZXRzKHtzdWJuZXRHcm91cE5hbWU6ICdyZWRzaGlmdCd9KS5zdWJuZXRJZHNcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "truemark-cdk-lib",
3
3
  "description": "AWS CDK constructs created by TrueMark",
4
- "version": "1.23.1",
4
+ "version": "1.24.0",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
7
7
  "typesVersions": {