@aws-cdk/aws-gamelift-alpha 2.256.1-alpha.0 → 2.258.0-alpha.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.
package/lib/content.js CHANGED
@@ -1,17 +1,50 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.AssetContent = exports.S3Content = exports.Content = void 0;
4
37
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
- const iam = require("aws-cdk-lib/aws-iam");
6
- const s3 = require("aws-cdk-lib/aws-s3");
7
- const s3_assets = require("aws-cdk-lib/aws-s3-assets");
8
- const cdk = require("aws-cdk-lib/core");
38
+ const iam = __importStar(require("aws-cdk-lib/aws-iam"));
39
+ const s3 = __importStar(require("aws-cdk-lib/aws-s3"));
40
+ const s3_assets = __importStar(require("aws-cdk-lib/aws-s3-assets"));
41
+ const cdk = __importStar(require("aws-cdk-lib/core"));
9
42
  /**
10
43
  * Before deploying your GameLift-enabled multiplayer game servers for hosting with the GameLift service, you need to upload your game server files.
11
44
  * The class helps you on preparing and uploading custom game server build files or Realtime Servers server script files.
12
45
  */
13
46
  class Content {
14
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-gamelift-alpha.Content", version: "2.256.1-alpha.0" };
47
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-gamelift-alpha.Content", version: "2.258.0-alpha.0" };
15
48
  /**
16
49
  * Game content as an S3 object.
17
50
  * @param bucket The S3 bucket
@@ -38,7 +71,7 @@ class S3Content extends Content {
38
71
  bucket;
39
72
  key;
40
73
  objectVersion;
41
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-gamelift-alpha.S3Content", version: "2.256.1-alpha.0" };
74
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-gamelift-alpha.S3Content", version: "2.258.0-alpha.0" };
42
75
  constructor(bucket, key, objectVersion) {
43
76
  super();
44
77
  this.bucket = bucket;
@@ -71,7 +104,7 @@ exports.S3Content = S3Content;
71
104
  class AssetContent extends Content {
72
105
  path;
73
106
  options;
74
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-gamelift-alpha.AssetContent", version: "2.256.1-alpha.0" };
107
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-gamelift-alpha.AssetContent", version: "2.258.0-alpha.0" };
75
108
  asset;
76
109
  /**
77
110
  * @param path The path to the asset file or directory.
@@ -112,4 +145,4 @@ class AssetContent extends Content {
112
145
  }
113
146
  }
114
147
  exports.AssetContent = AssetContent;
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbnRlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDJDQUEyQztBQUMzQyx5Q0FBeUM7QUFDekMsdURBQXVEO0FBQ3ZELHdDQUF3QztBQUd4Qzs7O0dBR0c7QUFDSCxNQUFzQixPQUFPOztJQUMzQjs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBa0IsRUFBRSxHQUFXLEVBQUUsYUFBc0I7UUFDOUUsT0FBTyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0tBQ2xEO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBWSxFQUFFLE9BQWdDO1FBQ3BFLE9BQU8sSUFBSSxZQUFZLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQ3hDOztBQWxCSCwwQkF3QkM7QUFZRDs7R0FFRztBQUNILE1BQWEsU0FBVSxTQUFRLE9BQU87SUFDUDtJQUE0QjtJQUFxQjs7SUFBOUUsWUFBNkIsTUFBa0IsRUFBVSxHQUFXLEVBQVUsYUFBc0I7UUFDbEcsS0FBSyxFQUFFLENBQUM7UUFEbUIsV0FBTSxHQUFOLE1BQU0sQ0FBWTtRQUFVLFFBQUcsR0FBSCxHQUFHLENBQVE7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBUztRQUVsRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQztRQUNyRSxDQUFDO0tBQ0Y7SUFFTSxJQUFJLENBQUMsTUFBaUIsRUFBRSxJQUFlO1FBQzVDLCtDQUErQztRQUMvQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDO1lBQ2hELE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUs7WUFDeEIsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hELE9BQU8sRUFBRSxDQUFDLGNBQWMsRUFBRSxxQkFBcUIsQ0FBQztTQUNqRCxDQUFDLENBQUMsQ0FBQztRQUVKLE9BQU87WUFDTCxVQUFVLEVBQUU7Z0JBQ1YsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVTtnQkFDbEMsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHO2dCQUNuQixhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7YUFDbEM7U0FDRixDQUFDO0tBQ0g7O0FBdkJILDhCQXdCQztBQUVEOztHQUVHO0FBQ0gsTUFBYSxZQUFhLFNBQVEsT0FBTztJQU1YO0lBQStCOztJQUxuRCxLQUFLLENBQW1CO0lBRWhDOztPQUVHO0lBQ0gsWUFBNEIsSUFBWSxFQUFtQixVQUFrQyxFQUFHO1FBQzlGLEtBQUssRUFBRSxDQUFDO1FBRGtCLFNBQUksR0FBSixJQUFJLENBQVE7UUFBbUIsWUFBTyxHQUFQLE9BQU8sQ0FBOEI7S0FFL0Y7SUFFTSxJQUFJLENBQUMsS0FBZ0IsRUFBRSxJQUFlO1FBQzNDLHdGQUF3RjtRQUN4RixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUU7Z0JBQ2pELElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDZixHQUFHLElBQUksQ0FBQyxPQUFPO2FBQ2hCLENBQUMsQ0FBQztRQUNMLENBQUM7YUFBTSxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzVELE1BQU0sSUFBSSxLQUFLLENBQUMsbURBQW1ELEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLEtBQUs7Z0JBQ3hHLGdEQUFnRCxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUV2RiwrQ0FBK0M7UUFDL0MsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQztZQUNoRCxNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLO1lBQ3hCLFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN6RCxPQUFPLEVBQUUsQ0FBQyxjQUFjLEVBQUUscUJBQXFCLENBQUM7U0FDakQsQ0FBQyxDQUFDLENBQUM7UUFFSixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUM3RSxDQUFDO1FBRUQsT0FBTztZQUNMLFVBQVUsRUFBRTtnQkFDVixVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZO2dCQUNuQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXO2FBQ2xDO1NBQ0YsQ0FBQztLQUNIOztBQXhDSCxvQ0F5Q0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBzMyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0ICogYXMgczNfYXNzZXRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMy1hc3NldHMnO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuLyoqXG4gKiBCZWZvcmUgZGVwbG95aW5nIHlvdXIgR2FtZUxpZnQtZW5hYmxlZCBtdWx0aXBsYXllciBnYW1lIHNlcnZlcnMgZm9yIGhvc3Rpbmcgd2l0aCB0aGUgR2FtZUxpZnQgc2VydmljZSwgeW91IG5lZWQgdG8gdXBsb2FkIHlvdXIgZ2FtZSBzZXJ2ZXIgZmlsZXMuXG4gKiBUaGUgY2xhc3MgaGVscHMgeW91IG9uIHByZXBhcmluZyBhbmQgdXBsb2FkaW5nIGN1c3RvbSBnYW1lIHNlcnZlciBidWlsZCBmaWxlcyBvciBSZWFsdGltZSBTZXJ2ZXJzIHNlcnZlciBzY3JpcHQgZmlsZXMuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb250ZW50IHtcbiAgLyoqXG4gICAqIEdhbWUgY29udGVudCBhcyBhbiBTMyBvYmplY3QuXG4gICAqIEBwYXJhbSBidWNrZXQgVGhlIFMzIGJ1Y2tldFxuICAgKiBAcGFyYW0ga2V5IFRoZSBvYmplY3Qga2V5XG4gICAqIEBwYXJhbSBvYmplY3RWZXJzaW9uIE9wdGlvbmFsIFMzIG9iIGplY3QgdmVyc2lvblxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQnVja2V0KGJ1Y2tldDogczMuSUJ1Y2tldCwga2V5OiBzdHJpbmcsIG9iamVjdFZlcnNpb24/OiBzdHJpbmcpOiBTM0NvbnRlbnQge1xuICAgIHJldHVybiBuZXcgUzNDb250ZW50KGJ1Y2tldCwga2V5LCBvYmplY3RWZXJzaW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgZ2FtZSBjb250ZW50IGZyb20gYSBsb2NhbCBkaXNrIHBhdGguXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoIEVpdGhlciBhIGRpcmVjdG9yeSB3aXRoIHRoZSBnYW1lIGNvbnRlbnQgYnVuZGxlIG9yIGEgLnppcCBmaWxlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Bc3NldChwYXRoOiBzdHJpbmcsIG9wdGlvbnM/OiBzM19hc3NldHMuQXNzZXRPcHRpb25zKTogQXNzZXRDb250ZW50IHtcbiAgICByZXR1cm4gbmV3IEFzc2V0Q29udGVudChwYXRoLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgQnVpbGQgaXMgaW5pdGlhbGl6ZWQgdG8gYWxsb3cgdGhpcyBvYmplY3QgdG8gYmluZFxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IGJpbmQoc2NvcGU6IENvbnN0cnVjdCwgcm9sZTogaWFtLklSb2xlKTogQ29udGVudENvbmZpZztcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgYmluZGluZyBgQ29udGVudGAgaW50byBhIGBCdWlsZGAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudENvbmZpZyB7XG4gIC8qKlxuICAgKiBUaGUgbG9jYXRpb24gb2YgdGhlIGNvbnRlbnQgaW4gUzMuXG4gICAqL1xuICByZWFkb25seSBzM0xvY2F0aW9uOiBzMy5Mb2NhdGlvbjtcbn1cblxuLyoqXG4gKiBHYW1lIGNvbnRlbnQgZnJvbSBhbiBTMyBhcmNoaXZlLlxuICovXG5leHBvcnQgY2xhc3MgUzNDb250ZW50IGV4dGVuZHMgQ29udGVudCB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYnVja2V0OiBzMy5JQnVja2V0LCBwcml2YXRlIGtleTogc3RyaW5nLCBwcml2YXRlIG9iamVjdFZlcnNpb24/OiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuICAgIGlmICghYnVja2V0LmJ1Y2tldE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYnVja2V0TmFtZSBpcyB1bmRlZmluZWQgZm9yIHRoZSBwcm92aWRlZCBidWNrZXQnKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYmluZChfc2NvcGU6IENvbnN0cnVjdCwgcm9sZTogaWFtLklSb2xlKTogQ29udGVudENvbmZpZyB7XG4gICAgLy8gQWRkaW5nIHBlcm1pc3Npb24gdG8gYWNjZXNzIHNwZWNpZmljIGNvbnRlbnRcbiAgICByb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIHJlc291cmNlczogW3RoaXMuYnVja2V0LmFybkZvck9iamVjdHModGhpcy5rZXkpXSxcbiAgICAgIGFjdGlvbnM6IFsnczM6R2V0T2JqZWN0JywgJ3MzOkdldE9iamVjdFZlcnNpb24nXSxcbiAgICB9KSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgczNMb2NhdGlvbjoge1xuICAgICAgICBidWNrZXROYW1lOiB0aGlzLmJ1Y2tldC5idWNrZXROYW1lLFxuICAgICAgICBvYmplY3RLZXk6IHRoaXMua2V5LFxuICAgICAgICBvYmplY3RWZXJzaW9uOiB0aGlzLm9iamVjdFZlcnNpb24sXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBHYW1lIGNvbnRlbnQgZnJvbSBhIGxvY2FsIGRpcmVjdG9yeS5cbiAqL1xuZXhwb3J0IGNsYXNzIEFzc2V0Q29udGVudCBleHRlbmRzIENvbnRlbnQge1xuICBwcml2YXRlIGFzc2V0PzogczNfYXNzZXRzLkFzc2V0O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCB0byB0aGUgYXNzZXQgZmlsZSBvciBkaXJlY3RvcnkuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgcGF0aDogc3RyaW5nLCBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IHMzX2Fzc2V0cy5Bc3NldE9wdGlvbnMgPSB7IH0pIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIGJpbmQoc2NvcGU6IENvbnN0cnVjdCwgcm9sZTogaWFtLklSb2xlKTogQ29udGVudENvbmZpZyB7XG4gICAgLy8gSWYgdGhlIHNhbWUgQXNzZXRDb250ZW50IGlzIHVzZWQgbXVsdGlwbGUgdGltZXMsIHJldGFpbiBvbmx5IHRoZSBmaXJzdCBpbnN0YW50aWF0aW9uLlxuICAgIGlmICghdGhpcy5hc3NldCkge1xuICAgICAgdGhpcy5hc3NldCA9IG5ldyBzM19hc3NldHMuQXNzZXQoc2NvcGUsICdDb250ZW50Jywge1xuICAgICAgICBwYXRoOiB0aGlzLnBhdGgsXG4gICAgICAgIC4uLnRoaXMub3B0aW9ucyxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoY2RrLlN0YWNrLm9mKHRoaXMuYXNzZXQpICE9PSBjZGsuU3RhY2sub2Yoc2NvcGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEFzc2V0IGlzIGFscmVhZHkgYXNzb2NpYXRlZCB3aXRoIGFub3RoZXIgc3RhY2sgJyR7Y2RrLlN0YWNrLm9mKHRoaXMuYXNzZXQpLnN0YWNrTmFtZX0nLiBgICtcbiAgICAgICAgJ0NyZWF0ZSBhIG5ldyBDb250ZW50IGluc3RhbmNlIGZvciBldmVyeSBzdGFjay4nKTtcbiAgICB9XG4gICAgY29uc3QgYnVja2V0ID0gczMuQnVja2V0LmZyb21CdWNrZXROYW1lKHNjb3BlLCAnQXNzZXRCdWNrZXQnLCB0aGlzLmFzc2V0LnMzQnVja2V0TmFtZSk7XG5cbiAgICAvLyBBZGRpbmcgcGVybWlzc2lvbiB0byBhY2Nlc3Mgc3BlY2lmaWMgY29udGVudFxuICAgIHJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgcmVzb3VyY2VzOiBbYnVja2V0LmFybkZvck9iamVjdHModGhpcy5hc3NldC5zM09iamVjdEtleSldLFxuICAgICAgYWN0aW9uczogWydzMzpHZXRPYmplY3QnLCAnczM6R2V0T2JqZWN0VmVyc2lvbiddLFxuICAgIH0pKTtcblxuICAgIGlmICghdGhpcy5hc3NldC5pc1ppcEFyY2hpdmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQXNzZXQgbXVzdCBiZSBhIC56aXAgZmlsZSBvciBhIGRpcmVjdG9yeSAoJHt0aGlzLnBhdGh9KWApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzM0xvY2F0aW9uOiB7XG4gICAgICAgIGJ1Y2tldE5hbWU6IHRoaXMuYXNzZXQuczNCdWNrZXROYW1lLFxuICAgICAgICBvYmplY3RLZXk6IHRoaXMuYXNzZXQuczNPYmplY3RLZXksXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbnRlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHlEQUEyQztBQUMzQyx1REFBeUM7QUFDekMscUVBQXVEO0FBQ3ZELHNEQUF3QztBQUd4Qzs7O0dBR0c7QUFDSCxNQUFzQixPQUFPOztJQUMzQjs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBa0IsRUFBRSxHQUFXLEVBQUUsYUFBc0I7UUFDOUUsT0FBTyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0tBQ2xEO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBWSxFQUFFLE9BQWdDO1FBQ3BFLE9BQU8sSUFBSSxZQUFZLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQ3hDOztBQWxCSCwwQkF3QkM7QUFZRDs7R0FFRztBQUNILE1BQWEsU0FBVSxTQUFRLE9BQU87SUFDUDtJQUE0QjtJQUFxQjs7SUFBOUUsWUFBNkIsTUFBa0IsRUFBVSxHQUFXLEVBQVUsYUFBc0I7UUFDbEcsS0FBSyxFQUFFLENBQUM7UUFEbUIsV0FBTSxHQUFOLE1BQU0sQ0FBWTtRQUFVLFFBQUcsR0FBSCxHQUFHLENBQVE7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBUztRQUVsRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQztRQUNyRSxDQUFDO0tBQ0Y7SUFFTSxJQUFJLENBQUMsTUFBaUIsRUFBRSxJQUFlO1FBQzVDLCtDQUErQztRQUMvQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDO1lBQ2hELE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUs7WUFDeEIsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hELE9BQU8sRUFBRSxDQUFDLGNBQWMsRUFBRSxxQkFBcUIsQ0FBQztTQUNqRCxDQUFDLENBQUMsQ0FBQztRQUVKLE9BQU87WUFDTCxVQUFVLEVBQUU7Z0JBQ1YsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVTtnQkFDbEMsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHO2dCQUNuQixhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7YUFDbEM7U0FDRixDQUFDO0tBQ0g7O0FBdkJILDhCQXdCQztBQUVEOztHQUVHO0FBQ0gsTUFBYSxZQUFhLFNBQVEsT0FBTztJQU1YO0lBQStCOztJQUxuRCxLQUFLLENBQW1CO0lBRWhDOztPQUVHO0lBQ0gsWUFBNEIsSUFBWSxFQUFtQixVQUFrQyxFQUFHO1FBQzlGLEtBQUssRUFBRSxDQUFDO1FBRGtCLFNBQUksR0FBSixJQUFJLENBQVE7UUFBbUIsWUFBTyxHQUFQLE9BQU8sQ0FBOEI7S0FFL0Y7SUFFTSxJQUFJLENBQUMsS0FBZ0IsRUFBRSxJQUFlO1FBQzNDLHdGQUF3RjtRQUN4RixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUU7Z0JBQ2pELElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDZixHQUFHLElBQUksQ0FBQyxPQUFPO2FBQ2hCLENBQUMsQ0FBQztRQUNMLENBQUM7YUFBTSxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzVELE1BQU0sSUFBSSxLQUFLLENBQUMsbURBQW1ELEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLEtBQUs7Z0JBQ3hHLGdEQUFnRCxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUV2RiwrQ0FBK0M7UUFDL0MsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQztZQUNoRCxNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLO1lBQ3hCLFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN6RCxPQUFPLEVBQUUsQ0FBQyxjQUFjLEVBQUUscUJBQXFCLENBQUM7U0FDakQsQ0FBQyxDQUFDLENBQUM7UUFFSixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUM3RSxDQUFDO1FBRUQsT0FBTztZQUNMLFVBQVUsRUFBRTtnQkFDVixVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZO2dCQUNuQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXO2FBQ2xDO1NBQ0YsQ0FBQztLQUNIOztBQXhDSCxvQ0F5Q0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBzMyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0ICogYXMgczNfYXNzZXRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMy1hc3NldHMnO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuLyoqXG4gKiBCZWZvcmUgZGVwbG95aW5nIHlvdXIgR2FtZUxpZnQtZW5hYmxlZCBtdWx0aXBsYXllciBnYW1lIHNlcnZlcnMgZm9yIGhvc3Rpbmcgd2l0aCB0aGUgR2FtZUxpZnQgc2VydmljZSwgeW91IG5lZWQgdG8gdXBsb2FkIHlvdXIgZ2FtZSBzZXJ2ZXIgZmlsZXMuXG4gKiBUaGUgY2xhc3MgaGVscHMgeW91IG9uIHByZXBhcmluZyBhbmQgdXBsb2FkaW5nIGN1c3RvbSBnYW1lIHNlcnZlciBidWlsZCBmaWxlcyBvciBSZWFsdGltZSBTZXJ2ZXJzIHNlcnZlciBzY3JpcHQgZmlsZXMuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb250ZW50IHtcbiAgLyoqXG4gICAqIEdhbWUgY29udGVudCBhcyBhbiBTMyBvYmplY3QuXG4gICAqIEBwYXJhbSBidWNrZXQgVGhlIFMzIGJ1Y2tldFxuICAgKiBAcGFyYW0ga2V5IFRoZSBvYmplY3Qga2V5XG4gICAqIEBwYXJhbSBvYmplY3RWZXJzaW9uIE9wdGlvbmFsIFMzIG9iIGplY3QgdmVyc2lvblxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQnVja2V0KGJ1Y2tldDogczMuSUJ1Y2tldCwga2V5OiBzdHJpbmcsIG9iamVjdFZlcnNpb24/OiBzdHJpbmcpOiBTM0NvbnRlbnQge1xuICAgIHJldHVybiBuZXcgUzNDb250ZW50KGJ1Y2tldCwga2V5LCBvYmplY3RWZXJzaW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgZ2FtZSBjb250ZW50IGZyb20gYSBsb2NhbCBkaXNrIHBhdGguXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoIEVpdGhlciBhIGRpcmVjdG9yeSB3aXRoIHRoZSBnYW1lIGNvbnRlbnQgYnVuZGxlIG9yIGEgLnppcCBmaWxlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Bc3NldChwYXRoOiBzdHJpbmcsIG9wdGlvbnM/OiBzM19hc3NldHMuQXNzZXRPcHRpb25zKTogQXNzZXRDb250ZW50IHtcbiAgICByZXR1cm4gbmV3IEFzc2V0Q29udGVudChwYXRoLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgQnVpbGQgaXMgaW5pdGlhbGl6ZWQgdG8gYWxsb3cgdGhpcyBvYmplY3QgdG8gYmluZFxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IGJpbmQoc2NvcGU6IENvbnN0cnVjdCwgcm9sZTogaWFtLklSb2xlKTogQ29udGVudENvbmZpZztcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgYmluZGluZyBgQ29udGVudGAgaW50byBhIGBCdWlsZGAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudENvbmZpZyB7XG4gIC8qKlxuICAgKiBUaGUgbG9jYXRpb24gb2YgdGhlIGNvbnRlbnQgaW4gUzMuXG4gICAqL1xuICByZWFkb25seSBzM0xvY2F0aW9uOiBzMy5Mb2NhdGlvbjtcbn1cblxuLyoqXG4gKiBHYW1lIGNvbnRlbnQgZnJvbSBhbiBTMyBhcmNoaXZlLlxuICovXG5leHBvcnQgY2xhc3MgUzNDb250ZW50IGV4dGVuZHMgQ29udGVudCB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYnVja2V0OiBzMy5JQnVja2V0LCBwcml2YXRlIGtleTogc3RyaW5nLCBwcml2YXRlIG9iamVjdFZlcnNpb24/OiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuICAgIGlmICghYnVja2V0LmJ1Y2tldE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYnVja2V0TmFtZSBpcyB1bmRlZmluZWQgZm9yIHRoZSBwcm92aWRlZCBidWNrZXQnKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYmluZChfc2NvcGU6IENvbnN0cnVjdCwgcm9sZTogaWFtLklSb2xlKTogQ29udGVudENvbmZpZyB7XG4gICAgLy8gQWRkaW5nIHBlcm1pc3Npb24gdG8gYWNjZXNzIHNwZWNpZmljIGNvbnRlbnRcbiAgICByb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIHJlc291cmNlczogW3RoaXMuYnVja2V0LmFybkZvck9iamVjdHModGhpcy5rZXkpXSxcbiAgICAgIGFjdGlvbnM6IFsnczM6R2V0T2JqZWN0JywgJ3MzOkdldE9iamVjdFZlcnNpb24nXSxcbiAgICB9KSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgczNMb2NhdGlvbjoge1xuICAgICAgICBidWNrZXROYW1lOiB0aGlzLmJ1Y2tldC5idWNrZXROYW1lLFxuICAgICAgICBvYmplY3RLZXk6IHRoaXMua2V5LFxuICAgICAgICBvYmplY3RWZXJzaW9uOiB0aGlzLm9iamVjdFZlcnNpb24sXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBHYW1lIGNvbnRlbnQgZnJvbSBhIGxvY2FsIGRpcmVjdG9yeS5cbiAqL1xuZXhwb3J0IGNsYXNzIEFzc2V0Q29udGVudCBleHRlbmRzIENvbnRlbnQge1xuICBwcml2YXRlIGFzc2V0PzogczNfYXNzZXRzLkFzc2V0O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCB0byB0aGUgYXNzZXQgZmlsZSBvciBkaXJlY3RvcnkuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgcGF0aDogc3RyaW5nLCBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IHMzX2Fzc2V0cy5Bc3NldE9wdGlvbnMgPSB7IH0pIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIGJpbmQoc2NvcGU6IENvbnN0cnVjdCwgcm9sZTogaWFtLklSb2xlKTogQ29udGVudENvbmZpZyB7XG4gICAgLy8gSWYgdGhlIHNhbWUgQXNzZXRDb250ZW50IGlzIHVzZWQgbXVsdGlwbGUgdGltZXMsIHJldGFpbiBvbmx5IHRoZSBmaXJzdCBpbnN0YW50aWF0aW9uLlxuICAgIGlmICghdGhpcy5hc3NldCkge1xuICAgICAgdGhpcy5hc3NldCA9IG5ldyBzM19hc3NldHMuQXNzZXQoc2NvcGUsICdDb250ZW50Jywge1xuICAgICAgICBwYXRoOiB0aGlzLnBhdGgsXG4gICAgICAgIC4uLnRoaXMub3B0aW9ucyxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoY2RrLlN0YWNrLm9mKHRoaXMuYXNzZXQpICE9PSBjZGsuU3RhY2sub2Yoc2NvcGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEFzc2V0IGlzIGFscmVhZHkgYXNzb2NpYXRlZCB3aXRoIGFub3RoZXIgc3RhY2sgJyR7Y2RrLlN0YWNrLm9mKHRoaXMuYXNzZXQpLnN0YWNrTmFtZX0nLiBgICtcbiAgICAgICAgJ0NyZWF0ZSBhIG5ldyBDb250ZW50IGluc3RhbmNlIGZvciBldmVyeSBzdGFjay4nKTtcbiAgICB9XG4gICAgY29uc3QgYnVja2V0ID0gczMuQnVja2V0LmZyb21CdWNrZXROYW1lKHNjb3BlLCAnQXNzZXRCdWNrZXQnLCB0aGlzLmFzc2V0LnMzQnVja2V0TmFtZSk7XG5cbiAgICAvLyBBZGRpbmcgcGVybWlzc2lvbiB0byBhY2Nlc3Mgc3BlY2lmaWMgY29udGVudFxuICAgIHJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgcmVzb3VyY2VzOiBbYnVja2V0LmFybkZvck9iamVjdHModGhpcy5hc3NldC5zM09iamVjdEtleSldLFxuICAgICAgYWN0aW9uczogWydzMzpHZXRPYmplY3QnLCAnczM6R2V0T2JqZWN0VmVyc2lvbiddLFxuICAgIH0pKTtcblxuICAgIGlmICghdGhpcy5hc3NldC5pc1ppcEFyY2hpdmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQXNzZXQgbXVzdCBiZSBhIC56aXAgZmlsZSBvciBhIGRpcmVjdG9yeSAoJHt0aGlzLnBhdGh9KWApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzM0xvY2F0aW9uOiB7XG4gICAgICAgIGJ1Y2tldE5hbWU6IHRoaXMuYXNzZXQuczNCdWNrZXROYW1lLFxuICAgICAgICBvYmplY3RLZXk6IHRoaXMuYXNzZXQuczNPYmplY3RLZXksXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
package/lib/fleet-base.js CHANGED
@@ -1,18 +1,51 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.FleetBase = void 0;
4
37
  const jsiiDeprecationWarnings = require("../.warnings.jsii.js");
5
38
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
- const cloudwatch = require("aws-cdk-lib/aws-cloudwatch");
39
+ const cloudwatch = __importStar(require("aws-cdk-lib/aws-cloudwatch"));
7
40
  const gamelift_canned_metrics_generated_1 = require("aws-cdk-lib/aws-gamelift/lib/gamelift-canned-metrics.generated");
8
- const iam = require("aws-cdk-lib/aws-iam");
9
- const cdk = require("aws-cdk-lib/core");
41
+ const iam = __importStar(require("aws-cdk-lib/aws-iam"));
42
+ const cdk = __importStar(require("aws-cdk-lib/core"));
10
43
  const alias_1 = require("./alias");
11
44
  /**
12
45
  * Base class for new and imported GameLift fleet.
13
46
  */
14
47
  class FleetBase extends cdk.Resource {
15
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-gamelift-alpha.FleetBase", version: "2.256.1-alpha.0" };
48
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-gamelift-alpha.FleetBase", version: "2.258.0-alpha.0" };
16
49
  /**
17
50
  * Import an existing fleet from its attributes.
18
51
  */
@@ -270,4 +303,4 @@ class FleetBase extends cdk.Resource {
270
303
  }
271
304
  }
272
305
  exports.FleetBase = FleetBase;
273
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxlZXQtYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImZsZWV0LWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx5REFBeUQ7QUFHekQsc0hBQWlHO0FBQ2pHLDJDQUEyQztBQUMzQyx3Q0FBd0M7QUFHeEMsbUNBQWdDO0FBOFloQzs7R0FFRztBQUNILE1BQXNCLFNBQVUsU0FBUSxHQUFHLENBQUMsUUFBUTs7SUFDbEQ7O09BRUc7SUFDSCxNQUFNLENBQUMsbUJBQW1CLENBQUMsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBc0I7Ozs7Ozs7Ozs7UUFDN0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnRUFBZ0UsQ0FBQyxDQUFDO1FBQ3BGLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTztZQUMzQixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVMsRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUMsWUFBWSxDQUFDO1FBRWhHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQzNFLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUMvRCxPQUFPLEVBQUUsVUFBVTtZQUNuQixRQUFRLEVBQUUsT0FBTztZQUNqQixZQUFZLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDM0IsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsbUJBQW1CO1NBQzdD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Q0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbkUsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUNELE9BQU87WUFDTCxtQ0FBbUMsRUFBRSxLQUFLLENBQUMsb0JBQW9CLENBQUMsNEJBQTRCLEVBQUUsU0FBUyxFQUFFO1lBQ3pHLG1DQUFtQyxFQUFFLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxtQ0FBbUM7WUFDbkcsZUFBZSxFQUFFLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDO1NBQ3BGLENBQUM7UUFFRixTQUFTLGtCQUFrQixDQUFDLGFBQTRCO1lBQ3RELE9BQU87Z0JBQ0wsVUFBVSxFQUFFLGFBQWEsQ0FBQyxVQUFVO2dCQUNwQyxVQUFVLEVBQUUsYUFBYSxDQUFDLFVBQVU7Z0JBQ3BDLG9CQUFvQixFQUFFLGFBQWEsQ0FBQyxvQkFBb0IsSUFBSSxDQUFDO2FBQzlELENBQUM7UUFDSixDQUFDO0tBQ0Y7SUFFUyw0QkFBNEIsQ0FBQyxLQUFnQjtRQUNyRCxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxZQUFZLENBQUMsK0NBQStDLEVBQUU7WUFDdEYsMEpBQTBKO1lBQzFKLDRFQUE0RTtZQUM1RSxrRkFBa0Y7U0FDbkYsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUNmOztBQXRQSCw4QkF1UEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjbG91ZHdhdGNoIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJztcbmltcG9ydCB0eXBlICogYXMgZWMyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHR5cGUgeyBDZm5GbGVldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1nYW1lbGlmdCc7XG5pbXBvcnQgeyBHYW1lTGlmdE1ldHJpY3MgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZ2FtZWxpZnQvbGliL2dhbWVsaWZ0LWNhbm5lZC1tZXRyaWNzLmdlbmVyYXRlZCc7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHR5cGUgeyBBbGlhc09wdGlvbnMgfSBmcm9tICcuL2FsaWFzJztcbmltcG9ydCB7IEFsaWFzIH0gZnJvbSAnLi9hbGlhcyc7XG5pbXBvcnQgdHlwZSB7IElHYW1lU2Vzc2lvblF1ZXVlRGVzdGluYXRpb24gfSBmcm9tICcuL2dhbWUtc2Vzc2lvbi1xdWV1ZSc7XG5cbi8qKlxuICogQ3VycmVudCByZXNvdXJjZSBjYXBhY2l0eSBzZXR0aW5ncyBpbiBhIHNwZWNpZmllZCBmbGVldCBvciBsb2NhdGlvbi5cbiAqIFRoZSBsb2NhdGlvbiB2YWx1ZSBtaWdodCByZWZlciB0byBhIGZsZWV0J3MgcmVtb3RlIGxvY2F0aW9uIG9yIGl0cyBob21lIFJlZ2lvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2NhdGlvbkNhcGFjaXR5IHtcbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgQW1hem9uIEVDMiBpbnN0YW5jZXMgeW91IHdhbnQgdG8gbWFpbnRhaW4gaW4gdGhlIHNwZWNpZmllZCBmbGVldCBsb2NhdGlvbi5cbiAgICogVGhpcyB2YWx1ZSBtdXN0IGZhbGwgYmV0d2VlbiB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBzaXplIGxpbWl0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgcmVhZG9ubHkgZGVzaXJlZENhcGFjaXR5PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgaW5zdGFuY2VzIHRoYXQgYXJlIGFsbG93ZWQgaW4gdGhlIHNwZWNpZmllZCBmbGVldCBsb2NhdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgcmVhZG9ubHkgbWF4U2l6ZT86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG1pbmltdW0gbnVtYmVyIG9mIGluc3RhbmNlcyB0aGF0IGFyZSBhbGxvd2VkIGluIHRoZSBzcGVjaWZpZWQgZmxlZXQgbG9jYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHJlYWRvbmx5IG1pblNpemU/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQSByZW1vdGUgbG9jYXRpb24gd2hlcmUgYSBtdWx0aS1sb2NhdGlvbiBmbGVldCBjYW4gZGVwbG95IEVDMiBpbnN0YW5jZXMgZm9yIGdhbWUgaG9zdGluZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2NhdGlvbiB7XG4gIC8qKlxuICAgKiBBbiBBV1MgUmVnaW9uIGNvZGVcbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDdXJyZW50IHJlc291cmNlIGNhcGFjaXR5IHNldHRpbmdzIGluIGEgc3BlY2lmaWVkIGZsZWV0IG9yIGxvY2F0aW9uLlxuICAgKiBUaGUgbG9jYXRpb24gdmFsdWUgbWlnaHQgcmVmZXIgdG8gYSBmbGVldCdzIHJlbW90ZSBsb2NhdGlvbiBvciBpdHMgaG9tZSBSZWdpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gY2FwYWNpdHkgc2V0dGluZ3Mgb24gdGhlIHNwZWNpZmllZCBsb2NhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgY2FwYWNpdHk/OiBMb2NhdGlvbkNhcGFjaXR5O1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gb2YgYSBmbGVldCBzZXJ2ZXIgcHJvY2Vzc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZlclByb2Nlc3Mge1xuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBzZXJ2ZXIgcHJvY2Vzc2VzIHVzaW5nIHRoaXMgY29uZmlndXJhdGlvbiB0aGF0IHJ1biBjb25jdXJyZW50bHkgb24gZWFjaCBpbnN0YW5jZS5cbiAgICogTWluaW11bSBpcyBgMWBcbiAgICpcbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgcmVhZG9ubHkgY29uY3VycmVudEV4ZWN1dGlvbnM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBsb2NhdGlvbiBvZiBhIGdhbWUgYnVpbGQgZXhlY3V0YWJsZSBvciB0aGUgUmVhbHRpbWUgc2NyaXB0IGZpbGUgdGhhdCBjb250YWlucyB0aGUgSW5pdCgpIGZ1bmN0aW9uLiBHYW1lIGJ1aWxkcyBhbmQgUmVhbHRpbWUgc2NyaXB0cyBhcmUgaW5zdGFsbGVkIG9uIGluc3RhbmNlcyBhdCB0aGUgcm9vdDpcbiAgICogLSBXaW5kb3dzIChjdXN0b20gZ2FtZSBidWlsZHMgb25seSk6IGBDOlxcZ2FtZWAuIEV4YW1wbGU6IGBDOlxcZ2FtZVxcTXlHYW1lXFxzZXJ2ZXIuZXhlYFxuICAgKiAtIExpbnV4OiBgL2xvY2FsL2dhbWVgLiBFeGFtcGxlczogYC9sb2NhbC9nYW1lL015R2FtZS9zZXJ2ZXIuZXhlYCBvciBgL2xvY2FsL2dhbWUvTXlSZWFsdGltZVNjcmlwdC5qc2BcbiAgICovXG4gIHJlYWRvbmx5IGxhdW5jaFBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogQW4gb3B0aW9uYWwgbGlzdCBvZiBwYXJhbWV0ZXJzIHRvIHBhc3MgdG8gdGhlIHNlcnZlciBleGVjdXRhYmxlIG9yIFJlYWx0aW1lIHNjcmlwdCBvbiBsYXVuY2guXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gcGFyYW1ldGVyc1xuICAgKi9cbiAgcmVhZG9ubHkgcGFyYW1ldGVycz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIGNvbGxlY3Rpb24gb2Ygc2VydmVyIHByb2Nlc3MgY29uZmlndXJhdGlvbnMgdGhhdCBkZXNjcmliZSB0aGUgc2V0IG9mIHByb2Nlc3NlcyB0byBydW4gb24gZWFjaCBpbnN0YW5jZSBpbiBhIGZsZWV0LlxuICogU2VydmVyIHByb2Nlc3NlcyBydW4gZWl0aGVyIGFuIGV4ZWN1dGFibGUgaW4gYSBjdXN0b20gZ2FtZSBidWlsZCBvciBhIFJlYWx0aW1lIFNlcnZlcnMgc2NyaXB0LlxuICogR2FtZUxpZnQgbGF1bmNoZXMgdGhlIGNvbmZpZ3VyZWQgcHJvY2Vzc2VzLCBtYW5hZ2VzIHRoZWlyIGxpZmUgY3ljbGUsIGFuZCByZXBsYWNlcyB0aGVtIGFzIG5lZWRlZC5cbiAqIEVhY2ggaW5zdGFuY2UgY2hlY2tzIHJlZ3VsYXJseSBmb3IgYW4gdXBkYXRlZCBydW50aW1lIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogQSBHYW1lTGlmdCBpbnN0YW5jZSBpcyBsaW1pdGVkIHRvIDUwIHByb2Nlc3NlcyBydW5uaW5nIGNvbmN1cnJlbnRseS5cbiAqIFRvIGNhbGN1bGF0ZSB0aGUgdG90YWwgbnVtYmVyIG9mIHByb2Nlc3NlcyBpbiBhIHJ1bnRpbWUgY29uZmlndXJhdGlvbiwgYWRkIHRoZSB2YWx1ZXMgb2YgdGhlIGBDb25jdXJyZW50RXhlY3V0aW9uc2AgcGFyYW1ldGVyIGZvciBlYWNoIGBTZXJ2ZXJQcm9jZXNzYC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nYW1lbGlmdC9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZmxlZXRzLW11bHRpcHJvY2Vzcy5odG1sXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVudGltZUNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogVGhlIG1heGltdW0gYW1vdW50IG9mIHRpbWUgYWxsb3dlZCB0byBsYXVuY2ggYSBuZXcgZ2FtZSBzZXNzaW9uIGFuZCBoYXZlIGl0IHJlcG9ydCByZWFkeSB0byBob3N0IHBsYXllcnMuXG4gICAqIER1cmluZyB0aGlzIHRpbWUsIHRoZSBnYW1lIHNlc3Npb24gaXMgaW4gc3RhdHVzIGBBQ1RJVkFUSU5HYC5cbiAgICpcbiAgICogSWYgdGhlIGdhbWUgc2Vzc2lvbiBkb2VzIG5vdCBiZWNvbWUgYWN0aXZlIGJlZm9yZSB0aGUgdGltZW91dCwgaXQgaXMgZW5kZWQgYW5kIHRoZSBnYW1lIHNlc3Npb24gc3RhdHVzIGlzIGNoYW5nZWQgdG8gYFRFUk1JTkFURURgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBEdXJhdGlvbi5zZWNvbmRzKDMwMClcbiAgICovXG4gIHJlYWRvbmx5IGdhbWVTZXNzaW9uQWN0aXZhdGlvblRpbWVvdXQ/OiBjZGsuRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgZ2FtZSBzZXNzaW9ucyBpbiBzdGF0dXMgYEFDVElWQVRJTkdgIHRvIGFsbG93IG9uIGFuIGluc3RhbmNlLlxuICAgKlxuICAgKiBUaGlzIHNldHRpbmcgbGltaXRzIHRoZSBpbnN0YW5jZSByZXNvdXJjZXMgdGhhdCBjYW4gYmUgdXNlZCBmb3IgbmV3IGdhbWUgYWN0aXZhdGlvbnMgYXQgYW55IG9uZSB0aW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGxpbWl0XG4gICAqL1xuICByZWFkb25seSBtYXhDb25jdXJyZW50R2FtZVNlc3Npb25BY3RpdmF0aW9ucz86IG51bWJlcjtcblxuICAvKipcbiAgICogQSBjb2xsZWN0aW9uIG9mIHNlcnZlciBwcm9jZXNzIGNvbmZpZ3VyYXRpb25zIHRoYXQgaWRlbnRpZnkgd2hhdCBzZXJ2ZXIgcHJvY2Vzc2VzIHRvIHJ1biBvbiBlYWNoIGluc3RhbmNlIGluIGEgZmxlZXQuXG4gICAqL1xuICByZWFkb25seSBzZXJ2ZXJQcm9jZXNzZXM6IFNlcnZlclByb2Nlc3NbXTtcbn1cblxuLyoqXG4gKiBBIHBvbGljeSB0aGF0IGxpbWl0cyB0aGUgbnVtYmVyIG9mIGdhbWUgc2Vzc2lvbnMgYSBwbGF5ZXIgY2FuIGNyZWF0ZSBvbiB0aGUgc2FtZSBmbGVldC5cbiAqIFRoaXMgb3B0aW9uYWwgcG9saWN5IGdpdmVzIGdhbWUgb3duZXJzIGNvbnRyb2wgb3ZlciBob3cgcGxheWVycyBjYW4gY29uc3VtZSBhdmFpbGFibGUgZ2FtZSBzZXJ2ZXIgcmVzb3VyY2VzLlxuICogQSByZXNvdXJjZSBjcmVhdGlvbiBwb2xpY3kgbWFrZXMgdGhlIGZvbGxvd2luZyBzdGF0ZW1lbnQ6IFwiQW4gaW5kaXZpZHVhbCBwbGF5ZXIgY2FuIGNyZWF0ZSBhIG1heGltdW0gbnVtYmVyIG9mIG5ldyBnYW1lIHNlc3Npb25zIHdpdGhpbiBhIHNwZWNpZmllZCB0aW1lIHBlcmlvZFwiLlxuICpcbiAqIFRoZSBwb2xpY3kgaXMgZXZhbHVhdGVkIHdoZW4gYSBwbGF5ZXIgdHJpZXMgdG8gY3JlYXRlIGEgbmV3IGdhbWUgc2Vzc2lvbi5cbiAqIEZvciBleGFtcGxlLCBhc3N1bWUgeW91IGhhdmUgYSBwb2xpY3kgb2YgMTAgbmV3IGdhbWUgc2Vzc2lvbnMgYW5kIGEgdGltZSBwZXJpb2Qgb2YgNjAgbWludXRlcy5cbiAqIE9uIHJlY2VpdmluZyBhIGBDcmVhdGVHYW1lU2Vzc2lvbmAgcmVxdWVzdCwgQW1hem9uIEdhbWVMaWZ0IGNoZWNrcyB0aGF0IHRoZSBwbGF5ZXIgKGlkZW50aWZpZWQgYnkgQ3JlYXRvcklkKSBoYXMgY3JlYXRlZCBmZXdlciB0aGFuIDEwIGdhbWUgc2Vzc2lvbnMgaW4gdGhlIHBhc3QgNjAgbWludXRlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZUNyZWF0aW9uTGltaXRQb2xpY3kge1xuICAvKipcbiAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGdhbWUgc2Vzc2lvbnMgdGhhdCBhbiBpbmRpdmlkdWFsIGNhbiBjcmVhdGUgZHVyaW5nIHRoZSBwb2xpY3kgcGVyaW9kLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgZ2FtZSBzZXNzaW9ucyB0aGF0IGFuIGluZGl2aWR1YWwgY2FuIGNyZWF0ZSBkdXJpbmcgdGhlIHBvbGljeSBwZXJpb2RcbiAgICovXG4gIHJlYWRvbmx5IG5ld0dhbWVTZXNzaW9uc1BlckNyZWF0b3I/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lIHNwYW4gdXNlZCBpbiBldmFsdWF0aW5nIHRoZSByZXNvdXJjZSBjcmVhdGlvbiBsaW1pdCBwb2xpY3kuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gcG9saWN5IHBlcmlvZFxuICAgKi9cbiAgcmVhZG9ubHkgcG9saWN5UGVyaW9kPzogY2RrLkR1cmF0aW9uO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBHYW1lbGlmdCBmbGVldFxuICovXG5leHBvcnQgaW50ZXJmYWNlIElGbGVldCBleHRlbmRzIGNkay5JUmVzb3VyY2UsIGlhbS5JR3JhbnRhYmxlLCBJR2FtZVNlc3Npb25RdWV1ZURlc3RpbmF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBJZGVudGlmaWVyIG9mIHRoZSBmbGVldC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgZmxlZXRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBmbGVldC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgZmxlZXRBcm46IHN0cmluZztcblxuICAvKipcbiAgICogR3JhbnQgdGhlIGBncmFudGVlYCBpZGVudGl0eSBwZXJtaXNzaW9ucyB0byBwZXJmb3JtIGBhY3Rpb25zYC5cbiAgICovXG4gIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IGlhbS5HcmFudDtcblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBnaXZlbiBuYW1lZCBtZXRyaWMgZm9yIHRoaXMgZmxlZXQuXG4gICAqL1xuICBtZXRyaWMobWV0cmljTmFtZTogc3RyaW5nLCBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljO1xuXG4gIC8qKlxuICAgKiBJbnN0YW5jZXMgd2l0aCBgQUNUSVZFYCBzdGF0dXMsIHdoaWNoIG1lYW5zIHRoZXkgYXJlIHJ1bm5pbmcgYWN0aXZlIHNlcnZlciBwcm9jZXNzZXMuXG4gICAqIFRoZSBjb3VudCBpbmNsdWRlcyBpZGxlIGluc3RhbmNlcyBhbmQgdGhvc2UgdGhhdCBhcmUgaG9zdGluZyBvbmUgb3IgbW9yZSBnYW1lIHNlc3Npb25zLlxuICAgKiBUaGlzIG1ldHJpYyBtZWFzdXJlcyBjdXJyZW50IHRvdGFsIGluc3RhbmNlIGNhcGFjaXR5LlxuICAgKlxuICAgKiBUaGlzIG1ldHJpYyBjYW4gYmUgdXNlZCB3aXRoIGF1dG9tYXRpYyBzY2FsaW5nLlxuICAgKi9cbiAgbWV0cmljQWN0aXZlSW5zdGFuY2VzKHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWM7XG5cbiAgLyoqXG4gICAqIFBlcmNlbnRhZ2Ugb2YgYWxsIGFjdGl2ZSBpbnN0YW5jZXMgdGhhdCBhcmUgaWRsZSAoY2FsY3VsYXRlZCBhcyBJZGxlSW5zdGFuY2VzIC8gQWN0aXZlSW5zdGFuY2VzKS5cbiAgICogVGhpcyBtZXRyaWMgY2FuIGJlIHVzZWQgZm9yIGF1dG9tYXRpYyBzY2FsaW5nLlxuICAgKi9cbiAgbWV0cmljUGVyY2VudElkbGVJbnN0YW5jZXMocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYztcblxuICAvKipcbiAgICogVGFyZ2V0IG51bWJlciBvZiBhY3RpdmUgaW5zdGFuY2VzIHRoYXQgR2FtZUxpZnQgaXMgd29ya2luZyB0byBtYWludGFpbiBpbiB0aGUgZmxlZXQuXG4gICAqIFdpdGggYXV0b21hdGljIHNjYWxpbmcsIHRoaXMgdmFsdWUgaXMgZGV0ZXJtaW5lZCBiYXNlZCBvbiB0aGUgc2NhbGluZyBwb2xpY2llcyBjdXJyZW50bHkgaW4gZm9yY2UuXG4gICAqIFdpdGhvdXQgYXV0b21hdGljIHNjYWxpbmcsIHRoaXMgdmFsdWUgaXMgc2V0IG1hbnVhbGx5LlxuICAgKiBUaGlzIG1ldHJpYyBpcyBub3QgYXZhaWxhYmxlIHdoZW4gdmlld2luZyBkYXRhIGZvciBmbGVldCBtZXRyaWMgZ3JvdXBzLlxuICAgKi9cbiAgbWV0cmljRGVzaXJlZEluc3RhbmNlcyhwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljO1xuXG4gIC8qKlxuICAgKiBBY3RpdmUgaW5zdGFuY2VzIHRoYXQgYXJlIGN1cnJlbnRseSBob3N0aW5nIHplcm8gKDApIGdhbWUgc2Vzc2lvbnMuXG4gICAqIFRoaXMgbWV0cmljIG1lYXN1cmVzIGNhcGFjaXR5IHRoYXQgaXMgYXZhaWxhYmxlIGJ1dCB1bnVzZWQuXG4gICAqIFRoaXMgbWV0cmljIGNhbiBiZSB1c2VkIHdpdGggYXV0b21hdGljIHNjYWxpbmcuXG4gICAqL1xuICBtZXRyaWNJZGxlSW5zdGFuY2VzKHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWM7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiBzcG90IGluc3RhbmNlcyB0aGF0IGhhdmUgYmVlbiBpbnRlcnJ1cHRlZC5cbiAgICovXG4gIG1ldHJpY0luc3RhbmNlSW50ZXJydXB0aW9ucyhwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljO1xuXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiBpbnN0YW5jZXMgdGhhdCBhcmUgYWxsb3dlZCBmb3IgdGhlIGZsZWV0LlxuICAgKiBBIGZsZWV0J3MgaW5zdGFuY2UgbWF4aW11bSBkZXRlcm1pbmVzIHRoZSBjYXBhY2l0eSBjZWlsaW5nIGR1cmluZyBtYW51YWwgb3IgYXV0b21hdGljIHNjYWxpbmcgdXAuXG4gICAqIFRoaXMgbWV0cmljIGlzIG5vdCBhdmFpbGFibGUgd2hlbiB2aWV3aW5nIGRhdGEgZm9yIGZsZWV0IG1ldHJpYyBncm91cHMuXG4gICAqL1xuICBtZXRyaWNNYXhJbnN0YW5jZXMocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYztcblxuICAvKipcbiAgICogTWluaW11bSBudW1iZXIgb2YgaW5zdGFuY2VzIGFsbG93ZWQgZm9yIHRoZSBmbGVldC5cbiAgICogQSBmbGVldCdzIGluc3RhbmNlIG1pbmltdW0gZGV0ZXJtaW5lcyB0aGUgY2FwYWNpdHkgZmxvb3IgZHVyaW5nIG1hbnVhbCBvciBhdXRvbWF0aWMgc2NhbGluZyBkb3duLlxuICAgKiBUaGlzIG1ldHJpYyBpcyBub3QgYXZhaWxhYmxlIHdoZW4gdmlld2luZyBkYXRhIGZvciBmbGVldCBtZXRyaWMgZ3JvdXBzLlxuICAgKi9cbiAgbWV0cmljTWluSW5zdGFuY2VzKHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWM7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYSBuZXcgR2FtZWxpZnQgZmxlZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbGVldFByb3BzIHtcbiAgLyoqXG4gICAqIEEgZGVzY3JpcHRpdmUgbGFiZWwgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggYSBmbGVldC4gRmxlZXQgbmFtZXMgZG8gbm90IG5lZWQgdG8gYmUgdW5pcXVlLlxuICAgKi9cbiAgcmVhZG9ubHkgZmxlZXROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIGZsZWV0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGRlc2NyaXB0aW9uIGlzIHByb3ZpZGVkXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gdXNlIE9uLURlbWFuZCBvciBTcG90IGluc3RhbmNlcyBmb3IgdGhpcyBmbGVldC5cbiAgICogQnkgZGVmYXVsdCwgZmxlZXQgdXNlIG9uIGRlbWFuZCBjYXBhY2l0eS5cbiAgICpcbiAgICogVGhpcyBwcm9wZXJ0eSBjYW5ub3QgYmUgY2hhbmdlZCBhZnRlciB0aGUgZmxlZXQgaXMgY3JlYXRlZC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2FtZWxpZnQvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2dhbWVsaWZ0LWVjMi1pbnN0YW5jZXMuaHRtbCNnYW1lbGlmdC1lYzItaW5zdGFuY2VzLXNwb3RcbiAgICpcbiAgICogQGRlZmF1bHQgLSBHYW1lbGlmdCBmbGVldCB1c2Ugb24gZGVtYW5kIGNhcGFjaXR5XG4gICAqL1xuICByZWFkb25seSB1c2VTcG90PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUHJvbXB0cyBHYW1lTGlmdCB0byBnZW5lcmF0ZSBhIFRMUy9TU0wgY2VydGlmaWNhdGUgZm9yIHRoZSBmbGVldC5cbiAgICogR2FtZUxpZnQgdXNlcyB0aGUgY2VydGlmaWNhdGVzIHRvIGVuY3J5cHQgdHJhZmZpYyBiZXR3ZWVuIGdhbWUgY2xpZW50cyBhbmQgdGhlIGdhbWUgc2VydmVycyBydW5uaW5nIG9uIEdhbWVMaWZ0LlxuICAgKlxuICAgKiBZb3UgY2FuJ3QgY2hhbmdlIHRoaXMgcHJvcGVydHkgYWZ0ZXIgeW91IGNyZWF0ZSB0aGUgZmxlZXQuXG4gICAqXG4gICAqIEFkZGl0aW9ubmFsIGluZm86XG4gICAqIEFXUyBDZXJ0aWZpY2F0ZSBNYW5hZ2VyIChBQ00pIGNlcnRpZmljYXRlcyBleHBpcmUgYWZ0ZXIgMTMgbW9udGhzLlxuICAgKiBDZXJ0aWZpY2F0ZSBleHBpcmF0aW9uIGNhbiBjYXVzZSBmbGVldHMgdG8gZmFpbCwgcHJldmVudGluZyBwbGF5ZXJzIGZyb20gY29ubmVjdGluZyB0byBpbnN0YW5jZXMgaW4gdGhlIGZsZWV0LlxuICAgKiBXZSByZWNvbW1lbmQgeW91IHJlcGxhY2UgZmxlZXRzIGJlZm9yZSAxMyBtb250aHMsIGNvbnNpZGVyIHVzaW5nIGZsZWV0IGFsaWFzZXMgZm9yIGEgc21vb3RoIHRyYW5zaXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVExTL1NTTCBjZXJ0aWZpY2F0ZSBhcmUgZ2VuZXJhdGVkIGZvciB0aGUgZmxlZXRcbiAgICovXG4gIHJlYWRvbmx5IHVzZUNlcnRpZmljYXRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIElBTSByb2xlIGFzc3VtZWQgYnkgR2FtZUxpZnQgZmxlZXQgaW5zdGFuY2VzIHRvIGFjY2VzcyBBV1MgcmVzc291cmNlcy5cbiAgICogV2l0aCBhIHJvbGUgc2V0LCBhbnkgYXBwbGljYXRpb24gdGhhdCBydW5zIG9uIGFuIGluc3RhbmNlIGluIHRoaXMgZmxlZXQgY2FuIGFzc3VtZSB0aGUgcm9sZSwgaW5jbHVkaW5nIGluc3RhbGwgc2NyaXB0cywgc2VydmVyIHByb2Nlc3NlcywgYW5kIGRhZW1vbnMgKGJhY2tncm91bmQgcHJvY2Vzc2VzKS5cbiAgICogSWYgcHJvdmlkaW5nIGEgY3VzdG9tIHJvbGUsIGl0IG5lZWRzIHRvIHRydXN0IHRoZSBHYW1lTGlmdCBzZXJ2aWNlIHByaW5jaXBhbCAoZ2FtZWxpZnQuYW1hem9uYXdzLmNvbSkuXG4gICAqIE5vIHBlcm1pc3Npb24gaXMgcmVxdWlyZWQgYnkgZGVmYXVsdC5cbiAgICpcbiAgICogVGhpcyBwcm9wZXJ0eSBjYW5ub3QgYmUgY2hhbmdlZCBhZnRlciB0aGUgZmxlZXQgaXMgY3JlYXRlZC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2FtZWxpZnQvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2dhbWVsaWZ0LXNkay1zZXJ2ZXItcmVzb3VyY2VzLmh0bWxcbiAgICpcbiAgICogQGRlZmF1bHQgLSBhIHJvbGUgd2lsbCBiZSBjcmVhdGVkIHdpdGggZGVmYXVsdCB0cnVzdCB0byBHYW1lbGlmdCBzZXJ2aWNlIHByaW5jaXBhbC5cbiAgICovXG4gIHJlYWRvbmx5IHJvbGU/OiBpYW0uSVJvbGU7XG5cbiAgLyoqXG4gICAqIEEgVlBDIHBlZXJpbmcgY29ubmVjdGlvbiBiZXR3ZWVuIHlvdXIgR2FtZUxpZnQtaG9zdGVkIGdhbWUgc2VydmVycyBhbmQgeW91ciBvdGhlciBub24tR2FtZUxpZnQgcmVzb3VyY2VzLlxuICAgKiBVc2UgQW1hem9uIFZpcnR1YWwgUHJpdmF0ZSBDbG91ZCAoVlBDKSBwZWVyaW5nIGNvbm5lY3Rpb25zIHRvIGVuYWJsZSB5b3VyIGdhbWUgc2VydmVycyB0byBjb21tdW5pY2F0ZSBkaXJlY3RseSBhbmQgcHJpdmF0ZWx5IHdpdGggeW91ciBvdGhlciBBV1MgcmVzb3VyY2VzLCBzdWNoIGFzIGEgd2ViIHNlcnZpY2Ugb3IgYSByZXBvc2l0b3J5LlxuICAgKiBZb3UgY2FuIGVzdGFibGlzaCBWUEMgcGVlcmluZyB3aXRoIGFueSByZXNvdXJjZXMgdGhhdCBydW4gb24gQVdTIGFuZCBhcmUgbWFuYWdlZCBieSBhbiBBV1MgYWNjb3VudCB0aGF0IHlvdSBoYXZlIGFjY2VzcyB0by5cbiAgICogVGhlIFZQQyBtdXN0IGJlIGluIHRoZSBzYW1lIFJlZ2lvbiBhcyB5b3VyIGZsZWV0LlxuICAgKlxuICAgKiBXYXJuaW5nOlxuICAgKiBCZSBzdXJlIHRvIGNyZWF0ZSBhIFZQQyBQZWVyaW5nIGF1dGhvcml6YXRpb24gdGhyb3VnaCBHYW1lbGlmdCBTZXJ2aWNlIEFQSS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2FtZWxpZnQvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3ZwYy1wZWVyaW5nLmh0bWxcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyB2cGMgcGVlcmluZ1xuICAgKi9cbiAgcmVhZG9ubHkgcGVlclZwYz86IGVjMi5JVnBjO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiBhbiBBV1MgQ2xvdWRXYXRjaCBtZXRyaWMgZ3JvdXAgdG8gYWRkIHRoaXMgZmxlZXQgdG8uXG4gICAqIEEgbWV0cmljIGdyb3VwIGlzIHVzZWQgdG8gYWdncmVnYXRlIHRoZSBtZXRyaWNzIGZvciBtdWx0aXBsZSBmbGVldHMuXG4gICAqIFlvdSBjYW4gc3BlY2lmeSBhbiBleGlzdGluZyBtZXRyaWMgZ3JvdXAgbmFtZSBvciBzZXQgYSBuZXcgbmFtZSB0byBjcmVhdGUgYSBuZXcgbWV0cmljIGdyb3VwLlxuICAgKiBBIGZsZWV0IGNhbiBiZSBpbmNsdWRlZCBpbiBvbmx5IG9uZSBtZXRyaWMgZ3JvdXAgYXQgYSB0aW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEZsZWV0IG1ldHJpY3MgYXJlIGFnZ3JlZ2F0ZWQgd2l0aCBvdGhlciBmbGVldHMgaW4gdGhlIGRlZmF1bHQgbWV0cmljIGdyb3VwXG4gICAqL1xuICByZWFkb25seSBtZXRyaWNHcm91cD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEdhbWVMaWZ0LXN1cHBvcnRlZCBBbWF6b24gRUMyIGluc3RhbmNlIHR5cGUgdG8gdXNlIGZvciBhbGwgZmxlZXQgaW5zdGFuY2VzLlxuICAgKiBJbnN0YW5jZSB0eXBlIGRldGVybWluZXMgdGhlIGNvbXB1dGluZyByZXNvdXJjZXMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gaG9zdCB5b3VyIGdhbWUgc2VydmVycywgaW5jbHVkaW5nIENQVSwgbWVtb3J5LCBzdG9yYWdlLCBhbmQgbmV0d29ya2luZyBjYXBhY2l0eS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2F3cy5hbWF6b24uY29tL2VjMi9pbnN0YW5jZS10eXBlcy8gZm9yIGRldGFpbGVkIGRlc2NyaXB0aW9ucyBvZiBBbWF6b24gRUMyIGluc3RhbmNlIHR5cGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFuY2VUeXBlOiBlYzIuSW5zdGFuY2VUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIEVDMiBpbnN0YW5jZXMgdGhhdCB5b3Ugd2FudCB0aGlzIGZsZWV0IHRvIGhvc3QuXG4gICAqIFdoZW4gY3JlYXRpbmcgYSBuZXcgZmxlZXQsIEdhbWVMaWZ0IGF1dG9tYXRpY2FsbHkgc2V0cyB0aGlzIHZhbHVlIHRvIFwiMVwiIGFuZCBpbml0aWF0ZXMgYSBzaW5nbGUgaW5zdGFuY2UuXG4gICAqIE9uY2UgdGhlIGZsZWV0IGlzIGFjdGl2ZSwgdXBkYXRlIHRoaXMgdmFsdWUgdG8gdHJpZ2dlciBHYW1lTGlmdCB0byBhZGQgb3IgcmVtb3ZlIGluc3RhbmNlcyBmcm9tIHRoZSBmbGVldC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IGNhcGFjaXR5IGlzIDBcbiAgICovXG4gIHJlYWRvbmx5IGRlc2lyZWRDYXBhY2l0eT86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG1pbmltdW0gbnVtYmVyIG9mIGluc3RhbmNlcyB0aGF0IGFyZSBhbGxvd2VkIGluIHRoZSBzcGVjaWZpZWQgZmxlZXQgbG9jYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHJlYWRvbmx5IG1pblNpemU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0YW5jZXMgdGhhdCBhcmUgYWxsb3dlZCBpbiB0aGUgc3BlY2lmaWVkIGZsZWV0IGxvY2F0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICByZWFkb25seSBtYXhTaXplPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhdHVzIG9mIHRlcm1pbmF0aW9uIHByb3RlY3Rpb24gZm9yIGFjdGl2ZSBnYW1lIHNlc3Npb25zIG9uIHRoZSBmbGVldC5cbiAgICogQnkgZGVmYXVsdCwgbmV3IGdhbWUgc2Vzc2lvbnMgYXJlIHByb3RlY3RlZCBhbmQgY2Fubm90IGJlIHRlcm1pbmF0ZWQgZHVyaW5nIGEgc2NhbGUtZG93biBldmVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZSAtIEdhbWUgc2Vzc2lvbnMgaW4gYEFDVElWRWAgc3RhdHVzIGNhbm5vdCBiZSB0ZXJtaW5hdGVkIGR1cmluZyBhIHNjYWxlLWRvd24gZXZlbnQuXG4gICAqL1xuICByZWFkb25seSBwcm90ZWN0TmV3R2FtZVNlc3Npb24/IDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQSBjb2xsZWN0aW9uIG9mIHNlcnZlciBwcm9jZXNzIGNvbmZpZ3VyYXRpb25zIHRoYXQgZGVzY3JpYmUgdGhlIHNldCBvZiBwcm9jZXNzZXMgdG8gcnVuIG9uIGVhY2ggaW5zdGFuY2UgaW4gYSBmbGVldC5cbiAgICogU2VydmVyIHByb2Nlc3NlcyBydW4gZWl0aGVyIGFuIGV4ZWN1dGFibGUgaW4gYSBjdXN0b20gZ2FtZSBidWlsZCBvciBhIFJlYWx0aW1lIFNlcnZlcnMgc2NyaXB0LlxuICAgKiBHYW1lTGlmdCBsYXVuY2hlcyB0aGUgY29uZmlndXJlZCBwcm9jZXNzZXMsIG1hbmFnZXMgdGhlaXIgbGlmZSBjeWNsZSwgYW5kIHJlcGxhY2VzIHRoZW0gYXMgbmVlZGVkLlxuICAgKiBFYWNoIGluc3RhbmNlIGNoZWNrcyByZWd1bGFybHkgZm9yIGFuIHVwZGF0ZWQgcnVudGltZSBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBBIEdhbWVMaWZ0IGluc3RhbmNlIGlzIGxpbWl0ZWQgdG8gNTAgcHJvY2Vzc2VzIHJ1bm5pbmcgY29uY3VycmVudGx5LlxuICAgKiBUbyBjYWxjdWxhdGUgdGhlIHRvdGFsIG51bWJlciBvZiBwcm9jZXNzZXMgaW4gYSBydW50aW1lIGNvbmZpZ3VyYXRpb24sIGFkZCB0aGUgdmFsdWVzIG9mIHRoZSBDb25jdXJyZW50RXhlY3V0aW9ucyBwYXJhbWV0ZXIgZm9yIGVhY2ggU2VydmVyUHJvY2Vzcy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2FtZWxpZnQvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2ZsZWV0cy1tdWx0aXByb2Nlc3MuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgcnVudGltZUNvbmZpZ3VyYXRpb246IFJ1bnRpbWVDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBBIHNldCBvZiByZW1vdGUgbG9jYXRpb25zIHRvIGRlcGxveSBhZGRpdGlvbmFsIGluc3RhbmNlcyB0byBhbmQgbWFuYWdlIGFzIHBhcnQgb2YgdGhlIGZsZWV0LlxuICAgKiBUaGlzIHBhcmFtZXRlciBjYW4gb25seSBiZSB1c2VkIHdoZW4gY3JlYXRpbmcgZmxlZXRzIGluIEFXUyBSZWdpb25zIHRoYXQgc3VwcG9ydCBtdWx0aXBsZSBsb2NhdGlvbnMuXG4gICAqIFlvdSBjYW4gYWRkIGFueSBHYW1lTGlmdC1zdXBwb3J0ZWQgQVdTIFJlZ2lvbiBhcyBhIHJlbW90ZSBsb2NhdGlvbiwgaW4gdGhlIGZvcm0gb2YgYW4gQVdTIFJlZ2lvbiBjb2RlIHN1Y2ggYXMgYHVzLXdlc3QtMmAuXG4gICAqIFRvIGNyZWF0ZSBhIGZsZWV0IHdpdGggaW5zdGFuY2VzIGluIHRoZSBob21lIHJlZ2lvbiBvbmx5LCBvbWl0IHRoaXMgcGFyYW1ldGVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIENyZWF0ZSBhIGZsZWV0IHdpdGggaW5zdGFuY2VzIGluIHRoZSBob21lIHJlZ2lvbiBvbmx5XG4gICAqL1xuICByZWFkb25seSBsb2NhdGlvbnM/OiBMb2NhdGlvbltdO1xuXG4gIC8qKlxuICAgKiBBIHBvbGljeSB0aGF0IGxpbWl0cyB0aGUgbnVtYmVyIG9mIGdhbWUgc2Vzc2lvbnMgdGhhdCBhbiBpbmRpdmlkdWFsIHBsYXllciBjYW4gY3JlYXRlIG9uIGluc3RhbmNlcyBpbiB0aGlzIGZsZWV0IHdpdGhpbiBhIHNwZWNpZmllZCBzcGFuIG9mIHRpbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gcmVzb3VyY2UgY3JlYXRpb24gbGltaXQgcG9saWN5XG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZUNyZWF0aW9uTGltaXRQb2xpY3k/OiBSZXNvdXJjZUNyZWF0aW9uTGltaXRQb2xpY3k7XG59XG5cbi8qKlxuICogQSBmdWxsIHNwZWNpZmljYXRpb24gb2YgYSBmbGVldCB0aGF0IGNhbiBiZSB1c2VkIHRvIGltcG9ydCBpdCBmbHVlbnRseSBpbnRvIHRoZSBDREsgYXBwbGljYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxlZXRBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGZsZWV0XG4gICAqXG4gICAqIEF0IGxlYXN0IG9uZSBvZiBgZmxlZXRBcm5gIGFuZCBgZmxlZXRJZGAgbXVzdCBiZSBwcm92aWRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZXJpdmVkIGZyb20gYGZsZWV0SWRgLlxuICAgKi9cbiAgcmVhZG9ubHkgZmxlZXRBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBmbGVldFxuICAgKlxuICAgKiBBdCBsZWFzdCBvbmUgb2YgYGZsZWV0SWRgIGFuZCBgZmxlZXRBcm5gICBtdXN0IGJlIHByb3ZpZGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRlcml2ZWQgZnJvbSBgZmxlZXRBcm5gLlxuICAgKi9cbiAgcmVhZG9ubHkgZmxlZXRJZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElBTSByb2xlIGFzc3VtZWQgYnkgR2FtZUxpZnQgZmxlZXQgaW5zdGFuY2VzIHRvIGFjY2VzcyBBV1MgcmVzc291cmNlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgaW1wb3J0ZWQgZmxlZXQgY2Fubm90IGJlIGdyYW50ZWQgYWNjZXNzIHRvIG90aGVyIHJlc291cmNlcyBhcyBhbiBgaWFtLklHcmFudGFibGVgLlxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZT86IGlhbS5JUm9sZTtcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBuZXcgYW5kIGltcG9ydGVkIEdhbWVMaWZ0IGZsZWV0LlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRmxlZXRCYXNlIGV4dGVuZHMgY2RrLlJlc291cmNlIGltcGxlbWVudHMgSUZsZWV0IHtcbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBmbGVldCBmcm9tIGl0cyBhdHRyaWJ1dGVzLlxuICAgKi9cbiAgc3RhdGljIGZyb21GbGVldEF0dHJpYnV0ZXMoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgYXR0cnM6IEZsZWV0QXR0cmlidXRlcyk6IElGbGVldCB7XG4gICAgaWYgKCFhdHRycy5mbGVldElkICYmICFhdHRycy5mbGVldEFybikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFaXRoZXIgZmxlZXRJZCBvciBmbGVldEFybiBtdXN0IGJlIHByb3ZpZGVkIGluIEZsZWV0QXR0cmlidXRlcycpO1xuICAgIH1cbiAgICBjb25zdCBmbGVldElkID0gYXR0cnMuZmxlZXRJZCA/P1xuICAgICAgY2RrLlN0YWNrLm9mKHNjb3BlKS5zcGxpdEFybihhdHRycy5mbGVldEFybiEsIGNkay5Bcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSkucmVzb3VyY2VOYW1lO1xuXG4gICAgaWYgKCFmbGVldElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGZsZWV0IGlkZW50aWZpZXIgZm91bmQgaW4gQVJOOiAnJHthdHRycy5mbGVldEFybn0nYCk7XG4gICAgfVxuXG4gICAgY29uc3QgZmxlZXRBcm4gPSBhdHRycy5mbGVldEFybiA/PyBjZGsuU3RhY2sub2Yoc2NvcGUpLmZvcm1hdEFybih7XG4gICAgICBzZXJ2aWNlOiAnZ2FtZWxpZnQnLFxuICAgICAgcmVzb3VyY2U6ICdmbGVldCcsXG4gICAgICByZXNvdXJjZU5hbWU6IGF0dHJzLmZsZWV0SWQsXG4gICAgICBhcm5Gb3JtYXQ6IGNkay5Bcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSxcbiAgICB9KTtcbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBGbGVldEJhc2Uge1xuICAgICAgcHVibGljIHJlYWRvbmx5IGZsZWV0SWQgPSBmbGVldElkITtcbiAgICAgIHB1YmxpYyByZWFkb25seSBmbGVldEFybiA9IGZsZWV0QXJuO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGdyYW50UHJpbmNpcGFsID0gYXR0cnMucm9sZSA/PyBuZXcgaWFtLlVua25vd25QcmluY2lwYWwoeyByZXNvdXJjZTogdGhpcyB9KTtcbiAgICAgIHB1YmxpYyByZWFkb25seSByb2xlID0gYXR0cnMucm9sZTtcblxuICAgICAgY29uc3RydWN0b3IoczogQ29uc3RydWN0LCBpOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIocywgaSwge1xuICAgICAgICAgIGVudmlyb25tZW50RnJvbUFybjogZmxlZXRBcm4sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBJZGVudGlmaWVyIG9mIHRoZSBmbGVldC5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBmbGVldElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGZsZWV0LlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGZsZWV0QXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwcmluY2lwYWwgdGhpcyBHYW1lTGlmdCBmbGVldCBpcyB1c2luZy5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBncmFudFByaW5jaXBhbDogaWFtLklQcmluY2lwYWw7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2NhdGlvbnM6IExvY2F0aW9uW10gPSBbXTtcblxuICAvKipcbiAgICogRGVmaW5lcyBhbiBhbGlhcyBmb3IgdGhpcyBmbGVldC5cbiAgICpcbiAgICogYGBgdHNcbiAgICogZGVjbGFyZSBjb25zdCBmbGVldDogZ2FtZWxpZnQuRmxlZXRCYXNlO1xuICAgKlxuICAgKiBmbGVldC5hZGRBbGlhcygnTGl2ZScpO1xuICAgKlxuICAgKiAvLyBJcyBlcXVpdmFsZW50IHRvXG4gICAqXG4gICAqIG5ldyBnYW1lbGlmdC5BbGlhcyh0aGlzLCAnQWxpYXNMaXZlJywge1xuICAgKiAgIGFsaWFzTmFtZTogJ0xpdmUnLFxuICAgKiAgIGZsZWV0OiBmbGVldCxcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gYWxpYXNOYW1lIFRoZSBuYW1lIG9mIHRoZSBhbGlhc1xuICAgKiBAcGFyYW0gb3B0aW9ucyBBbGlhcyBvcHRpb25zXG4gICAqL1xuICBwdWJsaWMgYWRkQWxpYXMoYWxpYXNOYW1lOiBzdHJpbmcsIG9wdGlvbnM6IEFsaWFzT3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBBbGlhcyh0aGlzLCBgQWxpYXMke2FsaWFzTmFtZX1gLCB7XG4gICAgICBhbGlhc05hbWUsXG4gICAgICBmbGVldDogdGhpcyxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqL1xuICBwdWJsaWMgZ3JhbnQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUsIC4uLmFjdGlvbnM6IHN0cmluZ1tdKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gaWFtLkdyYW50LmFkZFRvUHJpbmNpcGFsKHtcbiAgICAgIHJlc291cmNlQXJuczogW3RoaXMuZmxlZXRBcm5dLFxuICAgICAgZ3JhbnRlZTogZ3JhbnRlZSxcbiAgICAgIGFjdGlvbnM6IGFjdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljKG1ldHJpY05hbWU6IHN0cmluZywgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgICBuYW1lc3BhY2U6ICdBV1MvR2FtZUxpZnQnLFxuICAgICAgbWV0cmljTmFtZTogbWV0cmljTmFtZSxcbiAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgRmxlZXRJZDogdGhpcy5mbGVldElkLFxuICAgICAgfSxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pLmF0dGFjaFRvKHRoaXMpO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY0FjdGl2ZUluc3RhbmNlcyhwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5jYW5uZWRNZXRyaWMoR2FtZUxpZnRNZXRyaWNzLmFjdGl2ZUluc3RhbmNlc0F2ZXJhZ2UsIHByb3BzKTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWNQZXJjZW50SWRsZUluc3RhbmNlcyhwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5jYW5uZWRNZXRyaWMoR2FtZUxpZnRNZXRyaWNzLnBlcmNlbnRJZGxlSW5zdGFuY2VzQXZlcmFnZSwgcHJvcHMpO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY0Rlc2lyZWRJbnN0YW5jZXMocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMuY2FubmVkTWV0cmljKEdhbWVMaWZ0TWV0cmljcy5kZXNpcmVkSW5zdGFuY2VzQXZlcmFnZSwgcHJvcHMpO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY0lkbGVJbnN0YW5jZXMocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMuY2FubmVkTWV0cmljKEdhbWVMaWZ0TWV0cmljcy5pZGxlSW5zdGFuY2VzQXZlcmFnZSwgcHJvcHMpO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY0luc3RhbmNlSW50ZXJydXB0aW9ucyhwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5jYW5uZWRNZXRyaWMoR2FtZUxpZnRNZXRyaWNzLmluc3RhbmNlSW50ZXJydXB0aW9uc1N1bSwgcHJvcHMpO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY01heEluc3RhbmNlcyhwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5jYW5uZWRNZXRyaWMoR2FtZUxpZnRNZXRyaWNzLm1heEluc3RhbmNlc0F2ZXJhZ2UsIHByb3BzKTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWNNaW5JbnN0YW5jZXMocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMuY2FubmVkTWV0cmljKEdhbWVMaWZ0TWV0cmljcy5taW5JbnN0YW5jZXNBdmVyYWdlLCBwcm9wcyk7XG4gIH1cblxuICBwcml2YXRlIGNhbm5lZE1ldHJpYyhmbjogKGRpbXM6IHsgRmxlZXRJZDogc3RyaW5nIH0pID0+IGNsb3Vkd2F0Y2guTWV0cmljUHJvcHMsIHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgLi4uZm4oeyBGbGVldElkOiB0aGlzLmZsZWV0SWQgfSksXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KS5hdHRhY2hUbyh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQVJOIHRvIHB1dCBpbnRvIHRoZSBkZXN0aW5hdGlvbiBmaWVsZCBvZiBhIGdhbWUgc2Vzc2lvbiBxdWV1ZVxuICAgKi9cbiAgcHVibGljIGdldCByZXNvdXJjZUFybkZvckRlc3RpbmF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmZsZWV0QXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSByZW1vdGUgbG9jYXRpb25zIHRvIGRlcGxveSBhZGRpdGlvbmFsIGluc3RhbmNlcyB0byBhbmQgbWFuYWdlIGFzIHBhcnQgb2YgdGhlIGZsZWV0LlxuICAgKlxuICAgKiBAcGFyYW0gcmVnaW9uIFRoZSBBV1MgcmVnaW9uIHRvIGFkZFxuICAgKi9cbiAgcHVibGljIGFkZExvY2F0aW9uKHJlZ2lvbjogc3RyaW5nLCBkZXNpcmVkQ2FwYWNpdHk/OiBudW1iZXIsIG1pblNpemU/OiBudW1iZXIsIG1heFNpemU/OiBudW1iZXIpIHtcbiAgICB0aGlzLmFkZEludGVybmFsTG9jYXRpb24oe1xuICAgICAgcmVnaW9uOiByZWdpb24sXG4gICAgICBjYXBhY2l0eToge1xuICAgICAgICBkZXNpcmVkQ2FwYWNpdHk6IGRlc2lyZWRDYXBhY2l0eSxcbiAgICAgICAgbWluU2l6ZTogbWluU2l6ZSxcbiAgICAgICAgbWF4U2l6ZTogbWF4U2l6ZSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHJlbW90ZSBsb2NhdGlvbnMgdG8gZGVwbG95IGFkZGl0aW9uYWwgaW5zdGFuY2VzIHRvIGFuZCBtYW5hZ2UgYXMgcGFydCBvZiB0aGUgZmxlZXQuXG4gICAqXG4gICAqIEBwYXJhbSBsb2NhdGlvbiBUaGUgbG9jYXRpb24gdG8gYWRkXG4gICAqL1xuICBwdWJsaWMgYWRkSW50ZXJuYWxMb2NhdGlvbihsb2NhdGlvbjogTG9jYXRpb24pIHtcbiAgICBpZiAodGhpcy5sb2NhdGlvbnMubGVuZ3RoID09IDEwMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBtb3JlIHRoYW4gMTAwIGxvY2F0aW9ucyBhcmUgYWxsb3dlZCBwZXIgZmxlZXQnKTtcbiAgICB9XG5cbiAgICB0aGlzLmxvY2F0aW9ucy5wdXNoKGxvY2F0aW9uKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZVJlc291cmNlQ3JlYXRpb25MaW1pdFBvbGljeShwcm9wczogRmxlZXRQcm9wcyk6IENmbkZsZWV0LlJlc291cmNlQ3JlYXRpb25MaW1pdFBvbGljeVByb3BlcnR5IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXByb3BzLnJlc291cmNlQ3JlYXRpb25MaW1pdFBvbGljeSB8fFxuICAgICAgICAoIXByb3BzLnJlc291cmNlQ3JlYXRpb25MaW1pdFBvbGljeS5uZXdHYW1lU2Vzc2lvbnNQZXJDcmVhdG9yXG4gICAgICAgICAgICAmJiAhcHJvcHMucmVzb3VyY2VDcmVhdGlvbkxpbWl0UG9saWN5LnBvbGljeVBlcmlvZCkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5ld0dhbWVTZXNzaW9uc1BlckNyZWF0b3I6IHByb3BzLnJlc291cmNlQ3JlYXRpb25MaW1pdFBvbGljeS5uZXdHYW1lU2Vzc2lvbnNQZXJDcmVhdG9yLFxuICAgICAgcG9saWN5UGVyaW9kSW5NaW51dGVzOiBwcm9wcy5yZXNvdXJjZUNyZWF0aW9uTGltaXRQb2xpY3kucG9saWN5UGVyaW9kPy50b01pbnV0ZXMoKSxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlTG9jYXRpb25zKCk6IENmbkZsZWV0LkxvY2F0aW9uQ29uZmlndXJhdGlvblByb3BlcnR5W10gfMKgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMubG9jYXRpb25zIHx8IHRoaXMubG9jYXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIHJldHVybiB0aGlzLmxvY2F0aW9ucy5tYXAocGFyc2VMb2NhdGlvbik7XG5cbiAgICBmdW5jdGlvbiBwYXJzZUxvY2F0aW9uKGxvY2F0aW9uOiBMb2NhdGlvbik6IENmbkZsZWV0LkxvY2F0aW9uQ29uZmlndXJhdGlvblByb3BlcnR5IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxvY2F0aW9uOiBsb2NhdGlvbi5yZWdpb24sXG4gICAgICAgIGxvY2F0aW9uQ2FwYWNpdHk6IHNlbGYucGFyc2VMb2NhdGlvbkNhcGFjaXR5KGxvY2F0aW9uLmNhcGFjaXR5KSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlTG9jYXRpb25DYXBhY2l0eShjYXBhY2l0eT86IExvY2F0aW9uQ2FwYWNpdHkpOiBDZm5GbGVldC5Mb2NhdGlvbkNhcGFjaXR5UHJvcGVydHkgfMKgdW5kZWZpbmVkIHtcbiAgICBpZiAoIWNhcGFjaXR5IHx8XG4gICAgICAgICghY2FwYWNpdHkuZGVzaXJlZENhcGFjaXR5XG4gICAgICAgICAgICAmJiAhY2FwYWNpdHkubWluU2l6ZVxuICAgICAgICAgICAgJiYgIWNhcGFjaXR5Lm1heFNpemUpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBkZXNpcmVkRWMySW5zdGFuY2VzOiBjYXBhY2l0eS5kZXNpcmVkQ2FwYWNpdHkgPz8gMCxcbiAgICAgIG1pblNpemU6IGNhcGFjaXR5Lm1pblNpemUgPz8gMCxcbiAgICAgIG1heFNpemU6IGNhcGFjaXR5Lm1heFNpemUgPz8gMSxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlUnVudGltZUNvbmZpZ3VyYXRpb24ocHJvcHM6IEZsZWV0UHJvcHMpOiBDZm5GbGVldC5SdW50aW1lQ29uZmlndXJhdGlvblByb3BlcnR5IHzCoHVuZGVmaW5lZCB7XG4gICAgaWYgKCFwcm9wcy5ydW50aW1lQ29uZmlndXJhdGlvbiB8fFxuICAgICAgICAoIXByb3BzLnJ1bnRpbWVDb25maWd1cmF0aW9uLmdhbWVTZXNzaW9uQWN0aXZhdGlvblRpbWVvdXRcbiAgICAgICAgICAgICYmICFwcm9wcy5ydW50aW1lQ29uZmlndXJhdGlvbi5tYXhDb25jdXJyZW50R2FtZVNlc3Npb25BY3RpdmF0aW9uc1xuICAgICAgICAgICAgJiYgcHJvcHMucnVudGltZUNvbmZpZ3VyYXRpb24uc2VydmVyUHJvY2Vzc2VzLmxlbmd0aCA9PSAwKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGdhbWVTZXNzaW9uQWN0aXZhdGlvblRpbWVvdXRTZWNvbmRzOiBwcm9wcy5ydW50aW1lQ29uZmlndXJhdGlvbi5nYW1lU2Vzc2lvbkFjdGl2YXRpb25UaW1lb3V0Py50b1NlY29uZHMoKSxcbiAgICAgIG1heENvbmN1cnJlbnRHYW1lU2Vzc2lvbkFjdGl2YXRpb25zOiBwcm9wcy5ydW50aW1lQ29uZmlndXJhdGlvbi5tYXhDb25jdXJyZW50R2FtZVNlc3Npb25BY3RpdmF0aW9ucyxcbiAgICAgIHNlcnZlclByb2Nlc3NlczogcHJvcHMucnVudGltZUNvbmZpZ3VyYXRpb24uc2VydmVyUHJvY2Vzc2VzLm1hcChwYXJzZVNlcnZlclByb2Nlc3MpLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBwYXJzZVNlcnZlclByb2Nlc3Moc2VydmVyUHJvY2VzczogU2VydmVyUHJvY2Vzcyk6IENmbkZsZWV0LlNlcnZlclByb2Nlc3NQcm9wZXJ0eSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXJhbWV0ZXJzOiBzZXJ2ZXJQcm9jZXNzLnBhcmFtZXRlcnMsXG4gICAgICAgIGxhdW5jaFBhdGg6IHNlcnZlclByb2Nlc3MubGF1bmNoUGF0aCxcbiAgICAgICAgY29uY3VycmVudEV4ZWN1dGlvbnM6IHNlcnZlclByb2Nlc3MuY29uY3VycmVudEV4ZWN1dGlvbnMgPz8gMSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHdhcm5WcGNQZWVyaW5nQXV0aG9yaXphdGlvbnMoc2NvcGU6IENvbnN0cnVjdCk6IHZvaWQge1xuICAgIGNkay5Bbm5vdGF0aW9ucy5vZihzY29wZSkuYWRkV2FybmluZ1YyKCdAYXdzLWNkay9hd3MtZ2FtZWxpZnQ6ZmxlZXRBdXRvcml6ZVZwY1BlZXJpbmcnLCBbXG4gICAgICAnVG8gYXV0aG9yaXplIHRoZSBWUEMgcGVlcmluZywgY2FsbCB0aGUgR2FtZUxpZnQgc2VydmljZSBBUEkgQ3JlYXRlVnBjUGVlcmluZ0F1dGhvcml6YXRpb24oKSBvciB1c2UgdGhlIEFXUyBDTEkgY29tbWFuZCBjcmVhdGUtdnBjLXBlZXJpbmctYXV0aG9yaXphdGlvbi4nLFxuICAgICAgJ01ha2UgdGhpcyBjYWxsIHVzaW5nIHRoZSBhY2NvdW50IHRoYXQgbWFuYWdlcyB5b3VyIG5vbi1HYW1lTGlmdCByZXNvdXJjZXMuJyxcbiAgICAgICdTZWU6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nYW1lbGlmdC9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdnBjLXBlZXJpbmcuaHRtbCcsXG4gICAgXS5qb2luKCdcXG4nKSk7XG4gIH1cbn1cbiJdfQ==
306
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxlZXQtYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImZsZWV0LWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1RUFBeUQ7QUFHekQsc0hBQWlHO0FBQ2pHLHlEQUEyQztBQUMzQyxzREFBd0M7QUFHeEMsbUNBQWdDO0FBOFloQzs7R0FFRztBQUNILE1BQXNCLFNBQVUsU0FBUSxHQUFHLENBQUMsUUFBUTs7SUFDbEQ7O09BRUc7SUFDSCxNQUFNLENBQUMsbUJBQW1CLENBQUMsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBc0I7Ozs7Ozs7Ozs7UUFDN0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnRUFBZ0UsQ0FBQyxDQUFDO1FBQ3BGLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTztZQUMzQixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVMsRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUMsWUFBWSxDQUFDO1FBRWhHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQzNFLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUMvRCxPQUFPLEVBQUUsVUFBVTtZQUNuQixRQUFRLEVBQUUsT0FBTztZQUNqQixZQUFZLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDM0IsU0FBUyxFQUFF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QyxvQkFBb0IsQ0FBQyxtQ0FBbUM7bUJBQy9ELEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbkUsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUNELE9BQU87WUFDTCxtQ0FBbUMsRUFBRSxLQUFLLENBQUMsb0JBQW9CLENBQUMsNEJBQTRCLEVBQUUsU0FBUyxFQUFFO1lBQ3pHLG1DQUFtQyxFQUFFLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxtQ0FBbUM7WUFDbkcsZUFBZSxFQUFFLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDO1NBQ3BGLENBQUM7UUFFRixTQUFTLGtCQUFrQixDQUFDLGFBQTRCO1lBQ3RELE9BQU87Z0JBQ0wsVUFBVSxFQUFFLGFBQWEsQ0FBQyxVQUFVO2dCQUNwQyxVQUFVLEVBQUUsYUFBYSxDQUFDLFVBQVU7Z0JBQ3BDLG9CQUFvQixFQUFFLGFBQWEsQ0FBQyxvQkFBb0IsSUFBSSxDQUFDO2FBQzlELENBQUM7UUFDSixDQUFDO0tBQ0Y7SUFFUyw0QkFBNEIsQ0FBQyxLQUFnQjtRQUNyRCxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxZQUFZLENBQUMsK0NBQStDLEVBQUU7WUFDdEYsMEpBQTBKO1lBQzFKLDRFQUE0RTtZQUM1RSxrRkFBa0Y7U0FDbkYsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUNmOztBQXRQSCw4QkF1UEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjbG91ZHdhdGNoIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJztcbmltcG9ydCB0eXBlICogYXMgZWMyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHR5cGUgeyBDZm5GbGVldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1nYW1lbGlmdCc7XG5pbXBvcnQgeyBHYW1lTGlmdE1ldHJpY3MgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZ2FtZWxpZnQvbGliL2dhbWVsaWZ0LWNhbm5lZC1tZXRyaWNzLmdlbmVyYXRlZCc7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHR5cGUgeyBBbGlhc09wdGlvbnMgfSBmcm9tICcuL2FsaWFzJztcbmltcG9ydCB7IEFsaWFzIH0gZnJvbSAnLi9hbGlhcyc7XG5pbXBvcnQgdHlwZSB7IElHYW1lU2Vzc2lvblF1ZXVlRGVzdGluYXRpb24gfSBmcm9tICcuL2dhbWUtc2Vzc2lvbi1xdWV1ZSc7XG5cbi8qKlxuICogQ3VycmVudCByZXNvdXJjZSBjYXBhY2l0eSBzZXR0aW5ncyBpbiBhIHNwZWNpZmllZCBmbGVldCBvciBsb2NhdGlvbi5cbiAqIFRoZSBsb2NhdGlvbiB2YWx1ZSBtaWdodCByZWZlciB0byBhIGZsZWV0J3MgcmVtb3RlIGxvY2F0aW9uIG9yIGl0cyBob21lIFJlZ2lvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2NhdGlvbkNhcGFjaXR5IHtcbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgQW1hem9uIEVDMiBpbnN0YW5jZXMgeW91IHdhbnQgdG8gbWFpbnRhaW4gaW4gdGhlIHNwZWNpZmllZCBmbGVldCBsb2NhdGlvbi5cbiAgICogVGhpcyB2YWx1ZSBtdXN0IGZhbGwgYmV0d2VlbiB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBzaXplIGxpbWl0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgcmVhZG9ubHkgZGVzaXJlZENhcGFjaXR5PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgaW5zdGFuY2VzIHRoYXQgYXJlIGFsbG93ZWQgaW4gdGhlIHNwZWNpZmllZCBmbGVldCBsb2NhdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgcmVhZG9ubHkgbWF4U2l6ZT86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG1pbmltdW0gbnVtYmVyIG9mIGluc3RhbmNlcyB0aGF0IGFyZSBhbGxvd2VkIGluIHRoZSBzcGVjaWZpZWQgZmxlZXQgbG9jYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHJlYWRvbmx5IG1pblNpemU/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQSByZW1vdGUgbG9jYXRpb24gd2hlcmUgYSBtdWx0aS1sb2NhdGlvbiBmbGVldCBjYW4gZGVwbG95IEVDMiBpbnN0YW5jZXMgZm9yIGdhbWUgaG9zdGluZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2NhdGlvbiB7XG4gIC8qKlxuICAgKiBBbiBBV1MgUmVnaW9uIGNvZGVcbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDdXJyZW50IHJlc291cmNlIGNhcGFjaXR5IHNldHRpbmdzIGluIGEgc3BlY2lmaWVkIGZsZWV0IG9yIGxvY2F0aW9uLlxuICAgKiBUaGUgbG9jYXRpb24gdmFsdWUgbWlnaHQgcmVmZXIgdG8gYSBmbGVldCdzIHJlbW90ZSBsb2NhdGlvbiBvciBpdHMgaG9tZSBSZWdpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gY2FwYWNpdHkgc2V0dGluZ3Mgb24gdGhlIHNwZWNpZmllZCBsb2NhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgY2FwYWNpdHk/OiBMb2NhdGlvbkNhcGFjaXR5O1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gb2YgYSBmbGVldCBzZXJ2ZXIgcHJvY2Vzc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZlclByb2Nlc3Mge1xuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBzZXJ2ZXIgcHJvY2Vzc2VzIHVzaW5nIHRoaXMgY29uZmlndXJhdGlvbiB0aGF0IHJ1biBjb25jdXJyZW50bHkgb24gZWFjaCBpbnN0YW5jZS5cbiAgICogTWluaW11bSBpcyBgMWBcbiAgICpcbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgcmVhZG9ubHkgY29uY3VycmVudEV4ZWN1dGlvbnM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBsb2NhdGlvbiBvZiBhIGdhbWUgYnVpbGQgZXhlY3V0YWJsZSBvciB0aGUgUmVhbHRpbWUgc2NyaXB0IGZpbGUgdGhhdCBjb250YWlucyB0aGUgSW5pdCgpIGZ1bmN0aW9uLiBHYW1lIGJ1aWxkcyBhbmQgUmVhbHRpbWUgc2NyaXB0cyBhcmUgaW5zdGFsbGVkIG9uIGluc3RhbmNlcyBhdCB0aGUgcm9vdDpcbiAgICogLSBXaW5kb3dzIChjdXN0b20gZ2FtZSBidWlsZHMgb25seSk6IGBDOlxcZ2FtZWAuIEV4YW1wbGU6IGBDOlxcZ2FtZVxcTXlHYW1lXFxzZXJ2ZXIuZXhlYFxuICAgKiAtIExpbnV4OiBgL2xvY2FsL2dhbWVgLiBFeGFtcGxlczogYC9sb2NhbC9nYW1lL015R2FtZS9zZXJ2ZXIuZXhlYCBvciBgL2xvY2FsL2dhbWUvTXlSZWFsdGltZVNjcmlwdC5qc2BcbiAgICovXG4gIHJlYWRvbmx5IGxhdW5jaFBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogQW4gb3B0aW9uYWwgbGlzdCBvZiBwYXJhbWV0ZXJzIHRvIHBhc3MgdG8gdGhlIHNlcnZlciBleGVjdXRhYmxlIG9yIFJlYWx0aW1lIHNjcmlwdCBvbiBsYXVuY2guXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gcGFyYW1ldGVyc1xuICAgKi9cbiAgcmVhZG9ubHkgcGFyYW1ldGVycz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIGNvbGxlY3Rpb24gb2Ygc2VydmVyIHByb2Nlc3MgY29uZmlndXJhdGlvbnMgdGhhdCBkZXNjcmliZSB0aGUgc2V0IG9mIHByb2Nlc3NlcyB0byBydW4gb24gZWFjaCBpbnN0YW5jZSBpbiBhIGZsZWV0LlxuICogU2VydmVyIHByb2Nlc3NlcyBydW4gZWl0aGVyIGFuIGV4ZWN1dGFibGUgaW4gYSBjdXN0b20gZ2FtZSBidWlsZCBvciBhIFJlYWx0aW1lIFNlcnZlcnMgc2NyaXB0LlxuICogR2FtZUxpZnQgbGF1bmNoZXMgdGhlIGNvbmZpZ3VyZWQgcHJvY2Vzc2VzLCBtYW5hZ2VzIHRoZWlyIGxpZmUgY3ljbGUsIGFuZCByZXBsYWNlcyB0aGVtIGFzIG5lZWRlZC5cbiAqIEVhY2ggaW5zdGFuY2UgY2hlY2tzIHJlZ3VsYXJseSBmb3IgYW4gdXBkYXRlZCBydW50aW1lIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogQSBHYW1lTGlmdCBpbnN0YW5jZSBpcyBsaW1pdGVkIHRvIDUwIHByb2Nlc3NlcyBydW5uaW5nIGNvbmN1cnJlbnRseS5cbiAqIFRvIGNhbGN1bGF0ZSB0aGUgdG90YWwgbnVtYmVyIG9mIHByb2Nlc3NlcyBpbiBhIHJ1bnRpbWUgY29uZmlndXJhdGlvbiwgYWRkIHRoZSB2YWx1ZXMgb2YgdGhlIGBDb25jdXJyZW50RXhlY3V0aW9uc2AgcGFyYW1ldGVyIGZvciBlYWNoIGBTZXJ2ZXJQcm9jZXNzYC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nYW1lbGlmdC9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZmxlZXRzLW11bHRpcHJvY2Vzcy5odG1sXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVudGltZUNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogVGhlIG1heGltdW0gYW1vdW50IG9mIHRpbWUgYWxsb3dlZCB0byBsYXVuY2ggYSBuZXcgZ2FtZSBzZXNzaW9uIGFuZCBoYXZlIGl0IHJlcG9ydCByZWFkeSB0byBob3N0IHBsYXllcnMuXG4gICAqIER1cmluZyB0aGlzIHRpbWUsIHRoZSBnYW1lIHNlc3Npb24gaXMgaW4gc3RhdHVzIGBBQ1RJVkFUSU5HYC5cbiAgICpcbiAgICogSWYgdGhlIGdhbWUgc2Vzc2lvbiBkb2VzIG5vdCBiZWNvbWUgYWN0aXZlIGJlZm9yZSB0aGUgdGltZW91dCwgaXQgaXMgZW5kZWQgYW5kIHRoZSBnYW1lIHNlc3Npb24gc3RhdHVzIGlzIGNoYW5nZWQgdG8gYFRFUk1JTkFURURgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBEdXJhdGlvbi5zZWNvbmRzKDMwMClcbiAgICovXG4gIHJlYWRvbmx5IGdhbWVTZXNzaW9uQWN0aXZhdGlvblRpbWVvdXQ/OiBjZGsuRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgZ2FtZSBzZXNzaW9ucyBpbiBzdGF0dXMgYEFDVElWQVRJTkdgIHRvIGFsbG93IG9uIGFuIGluc3RhbmNlLlxuICAgKlxuICAgKiBUaGlzIHNldHRpbmcgbGltaXRzIHRoZSBpbnN0YW5jZSByZXNvdXJjZXMgdGhhdCBjYW4gYmUgdXNlZCBmb3IgbmV3IGdhbWUgYWN0aXZhdGlvbnMgYXQgYW55IG9uZSB0aW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGxpbWl0XG4gICAqL1xuICByZWFkb25seSBtYXhDb25jdXJyZW50R2FtZVNlc3Npb25BY3RpdmF0aW9ucz86IG51bWJlcjtcblxuICAvKipcbiAgICogQSBjb2xsZWN0aW9uIG9mIHNlcnZlciBwcm9jZXNzIGNvbmZpZ3VyYXRpb25zIHRoYXQgaWRlbnRpZnkgd2hhdCBzZXJ2ZXIgcHJvY2Vzc2VzIHRvIHJ1biBvbiBlYWNoIGluc3RhbmNlIGluIGEgZmxlZXQuXG4gICAqL1xuICByZWFkb25seSBzZXJ2ZXJQcm9jZXNzZXM6IFNlcnZlclByb2Nlc3NbXTtcbn1cblxuLyoqXG4gKiBBIHBvbGljeSB0aGF0IGxpbWl0cyB0aGUgbnVtYmVyIG9mIGdhbWUgc2Vzc2lvbnMgYSBwbGF5ZXIgY2FuIGNyZWF0ZSBvbiB0aGUgc2FtZSBmbGVldC5cbiAqIFRoaXMgb3B0aW9uYWwgcG9saWN5IGdpdmVzIGdhbWUgb3duZXJzIGNvbnRyb2wgb3ZlciBob3cgcGxheWVycyBjYW4gY29uc3VtZSBhdmFpbGFibGUgZ2FtZSBzZXJ2ZXIgcmVzb3VyY2VzLlxuICogQSByZXNvdXJjZSBjcmVhdGlvbiBwb2xpY3kgbWFrZXMgdGhlIGZvbGxvd2luZyBzdGF0ZW1lbnQ6IFwiQW4gaW5kaXZpZHVhbCBwbGF5ZXIgY2FuIGNyZWF0ZSBhIG1heGltdW0gbnVtYmVyIG9mIG5ldyBnYW1lIHNlc3Npb25zIHdpdGhpbiBhIHNwZWNpZmllZCB0aW1lIHBlcmlvZFwiLlxuICpcbiAqIFRoZSBwb2xpY3kgaXMgZXZhbHVhdGVkIHdoZW4gYSBwbGF5ZXIgdHJpZXMgdG8gY3JlYXRlIGEgbmV3IGdhbWUgc2Vzc2lvbi5cbiAqIEZvciBleGFtcGxlLCBhc3N1bWUgeW91IGhhdmUgYSBwb2xpY3kgb2YgMTAgbmV3IGdhbWUgc2Vzc2lvbnMgYW5kIGEgdGltZSBwZXJpb2Qgb2YgNjAgbWludXRlcy5cbiAqIE9uIHJlY2VpdmluZyBhIGBDcmVhdGVHYW1lU2Vzc2lvbmAgcmVxdWVzdCwgQW1hem9uIEdhbWVMaWZ0IGNoZWNrcyB0aGF0IHRoZSBwbGF5ZXIgKGlkZW50aWZpZWQgYnkgQ3JlYXRvcklkKSBoYXMgY3JlYXRlZCBmZXdlciB0aGFuIDEwIGdhbWUgc2Vzc2lvbnMgaW4gdGhlIHBhc3QgNjAgbWludXRlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZUNyZWF0aW9uTGltaXRQb2xpY3kge1xuICAvKipcbiAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGdhbWUgc2Vzc2lvbnMgdGhhdCBhbiBpbmRpdmlkdWFsIGNhbiBjcmVhdGUgZHVyaW5nIHRoZSBwb2xpY3kgcGVyaW9kLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgZ2FtZSBzZXNzaW9ucyB0aGF0IGFuIGluZGl2aWR1YWwgY2FuIGNyZWF0ZSBkdXJpbmcgdGhlIHBvbGljeSBwZXJpb2RcbiAgICovXG4gIHJlYWRvbmx5IG5ld0dhbWVTZXNzaW9uc1BlckNyZWF0b3I/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lIHNwYW4gdXNlZCBpbiBldmFsdWF0aW5nIHRoZSByZXNvdXJjZSBjcmVhdGlvbiBsaW1pdCBwb2xpY3kuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gcG9saWN5IHBlcmlvZFxuICAgKi9cbiAgcmVhZG9ubHkgcG9saWN5UGVyaW9kPzogY2RrLkR1cmF0aW9uO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBHYW1lbGlmdCBmbGVldFxuICovXG5leHBvcnQgaW50ZXJmYWNlIElGbGVldCBleHRlbmRzIGNkay5JUmVzb3VyY2UsIGlhbS5JR3JhbnRhYmxlLCBJR2FtZVNlc3Npb25RdWV1ZURlc3RpbmF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBJZGVudGlmaWVyIG9mIHRoZSBmbGVldC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgZmxlZXRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBmbGVldC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgZmxlZXRBcm46IHN0cmluZztcblxuICAvKipcbiAgICogR3JhbnQgdGhlIGBncmFudGVlYCBpZGVudGl0eSBwZXJtaXNzaW9ucyB0byBwZXJmb3JtIGBhY3Rpb25zYC5cbiAgICovXG4gIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IGlhbS5HcmFudDtcblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBnaXZlbiBuYW1lZCBtZXRyaWMgZm9yIHRoaXMgZmxlZXQuXG4gICAqL1xuICBtZXRyaWMobWV0cmljTmFtZTogc3RyaW5nLCBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljO1xuXG4gIC8qKlxuICAgKiBJbnN0YW5jZXMgd2l0aCBgQUNUSVZFYCBzdGF0dXMsIHdoaWNoIG1lYW5zIHRoZXkgYXJlIHJ1bm5pbmcgYWN0aXZlIHNlcnZlciBwcm9jZXNzZXMuXG4gICAqIFRoZSBjb3VudCBpbmNsdWRlcyBpZGxlIGluc3RhbmNlcyBhbmQgdGhvc2UgdGhhdCBhcmUgaG9zdGluZyBvbmUgb3IgbW9yZSBnYW1lIHNlc3Npb25zLlxuICAgKiBUaGlzIG1ldHJpYyBtZWFzdXJlcyBjdXJyZW50IHRvdGFsIGluc3RhbmNlIGNhcGFjaXR5LlxuICAgKlxuICAgKiBUaGlzIG1ldHJpYyBjYW4gYmUgdXNlZCB3aXRoIGF1dG9tYXRpYyBzY2FsaW5nLlxuICAgKi9cbiAgbWV0cmljQWN0aXZlSW5zdGFuY2VzKHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWM7XG5cbiAgLyoqXG4gICAqIFBlcmNlbnRhZ2Ugb2YgYWxsIGFjdGl2ZSBpbnN0YW5jZXMgdGhhdCBhcmUgaWRsZSAoY2FsY3VsYXRlZCBhcyBJZGxlSW5zdGFuY2VzIC8gQWN0aXZlSW5zdGFuY2VzKS5cbiAgICogVGhpcyBtZXRyaWMgY2FuIGJlIHVzZWQgZm9yIGF1dG9tYXRpYyBzY2FsaW5nLlxuICAgKi9cbiAgbWV0cmljUGVyY2VudElkbGVJbnN0YW5jZXMocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYztcblxuICAvKipcbiAgICogVGFyZ2V0IG51bWJlciBvZiBhY3RpdmUgaW5zdGFuY2VzIHRoYXQgR2FtZUxpZnQgaXMgd29ya2luZyB0byBtYWludGFpbiBpbiB0aGUgZmxlZXQuXG4gICAqIFdpdGggYXV0b21hdGljIHNjYWxpbmcsIHRoaXMgdmFsdWUgaXMgZGV0ZXJtaW5lZCBiYXNlZCBvbiB0aGUgc2NhbGluZyBwb2xpY2llcyBjdXJyZW50bHkgaW4gZm9yY2UuXG4gICAqIFdpdGhvdXQgYXV0b21hdGljIHNjYWxpbmcsIHRoaXMgdmFsdWUgaXMgc2V0IG1hbnVhbGx5LlxuICAgKiBUaGlzIG1ldHJpYyBpcyBub3QgYXZhaWxhYmxlIHdoZW4gdmlld2luZyBkYXRhIGZvciBmbGVldCBtZXRyaWMgZ3JvdXBzLlxuICAgKi9cbiAgbWV0cmljRGVzaXJlZEluc3RhbmNlcyhwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljO1xuXG4gIC8qKlxuICAgKiBBY3RpdmUgaW5zdGFuY2VzIHRoYXQgYXJlIGN1cnJlbnRseSBob3N0aW5nIHplcm8gKDApIGdhbWUgc2Vzc2lvbnMuXG4gICAqIFRoaXMgbWV0cmljIG1lYXN1cmVzIGNhcGFjaXR5IHRoYXQgaXMgYXZhaWxhYmxlIGJ1dCB1bnVzZWQuXG4gICAqIFRoaXMgbWV0cmljIGNhbiBiZSB1c2VkIHdpdGggYXV0b21hdGljIHNjYWxpbmcuXG4gICAqL1xuICBtZXRyaWNJZGxlSW5zdGFuY2VzKHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWM7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiBzcG90IGluc3RhbmNlcyB0aGF0IGhhdmUgYmVlbiBpbnRlcnJ1cHRlZC5cbiAgICovXG4gIG1ldHJpY0luc3RhbmNlSW50ZXJydXB0aW9ucyhwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljO1xuXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiBpbnN0YW5jZXMgdGhhdCBhcmUgYWxsb3dlZCBmb3IgdGhlIGZsZWV0LlxuICAgKiBBIGZsZWV0J3MgaW5zdGFuY2UgbWF4aW11bSBkZXRlcm1pbmVzIHRoZSBjYXBhY2l0eSBjZWlsaW5nIGR1cmluZyBtYW51YWwgb3IgYXV0b21hdGljIHNjYWxpbmcgdXAuXG4gICAqIFRoaXMgbWV0cmljIGlzIG5vdCBhdmFpbGFibGUgd2hlbiB2aWV3aW5nIGRhdGEgZm9yIGZsZWV0IG1ldHJpYyBncm91cHMuXG4gICAqL1xuICBtZXRyaWNNYXhJbnN0YW5jZXMocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYztcblxuICAvKipcbiAgICogTWluaW11bSBudW1iZXIgb2YgaW5zdGFuY2VzIGFsbG93ZWQgZm9yIHRoZSBmbGVldC5cbiAgICogQSBmbGVldCdzIGluc3RhbmNlIG1pbmltdW0gZGV0ZXJtaW5lcyB0aGUgY2FwYWNpdHkgZmxvb3IgZHVyaW5nIG1hbnVhbCBvciBhdXRvbWF0aWMgc2NhbGluZyBkb3duLlxuICAgKiBUaGlzIG1ldHJpYyBpcyBub3QgYXZhaWxhYmxlIHdoZW4gdmlld2luZyBkYXRhIGZvciBmbGVldCBtZXRyaWMgZ3JvdXBzLlxuICAgKi9cbiAgbWV0cmljTWluSW5zdGFuY2VzKHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWM7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYSBuZXcgR2FtZWxpZnQgZmxlZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbGVldFByb3BzIHtcbiAgLyoqXG4gICAqIEEgZGVzY3JpcHRpdmUgbGFiZWwgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggYSBmbGVldC4gRmxlZXQgbmFtZXMgZG8gbm90IG5lZWQgdG8gYmUgdW5pcXVlLlxuICAgKi9cbiAgcmVhZG9ubHkgZmxlZXROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIGZsZWV0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGRlc2NyaXB0aW9uIGlzIHByb3ZpZGVkXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gdXNlIE9uLURlbWFuZCBvciBTcG90IGluc3RhbmNlcyBmb3IgdGhpcyBmbGVldC5cbiAgICogQnkgZGVmYXVsdCwgZmxlZXQgdXNlIG9uIGRlbWFuZCBjYXBhY2l0eS5cbiAgICpcbiAgICogVGhpcyBwcm9wZXJ0eSBjYW5ub3QgYmUgY2hhbmdlZCBhZnRlciB0aGUgZmxlZXQgaXMgY3JlYXRlZC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2FtZWxpZnQvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2dhbWVsaWZ0LWVjMi1pbnN0YW5jZXMuaHRtbCNnYW1lbGlmdC1lYzItaW5zdGFuY2VzLXNwb3RcbiAgICpcbiAgICogQGRlZmF1bHQgLSBHYW1lbGlmdCBmbGVldCB1c2Ugb24gZGVtYW5kIGNhcGFjaXR5XG4gICAqL1xuICByZWFkb25seSB1c2VTcG90PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUHJvbXB0cyBHYW1lTGlmdCB0byBnZW5lcmF0ZSBhIFRMUy9TU0wgY2VydGlmaWNhdGUgZm9yIHRoZSBmbGVldC5cbiAgICogR2FtZUxpZnQgdXNlcyB0aGUgY2VydGlmaWNhdGVzIHRvIGVuY3J5cHQgdHJhZmZpYyBiZXR3ZWVuIGdhbWUgY2xpZW50cyBhbmQgdGhlIGdhbWUgc2VydmVycyBydW5uaW5nIG9uIEdhbWVMaWZ0LlxuICAgKlxuICAgKiBZb3UgY2FuJ3QgY2hhbmdlIHRoaXMgcHJvcGVydHkgYWZ0ZXIgeW91IGNyZWF0ZSB0aGUgZmxlZXQuXG4gICAqXG4gICAqIEFkZGl0aW9ubmFsIGluZm86XG4gICAqIEFXUyBDZXJ0aWZpY2F0ZSBNYW5hZ2VyIChBQ00pIGNlcnRpZmljYXRlcyBleHBpcmUgYWZ0ZXIgMTMgbW9udGhzLlxuICAgKiBDZXJ0aWZpY2F0ZSBleHBpcmF0aW9uIGNhbiBjYXVzZSBmbGVldHMgdG8gZmFpbCwgcHJldmVudGluZyBwbGF5ZXJzIGZyb20gY29ubmVjdGluZyB0byBpbnN0YW5jZXMgaW4gdGhlIGZsZWV0LlxuICAgKiBXZSByZWNvbW1lbmQgeW91IHJlcGxhY2UgZmxlZXRzIGJlZm9yZSAxMyBtb250aHMsIGNvbnNpZGVyIHVzaW5nIGZsZWV0IGFsaWFzZXMgZm9yIGEgc21vb3RoIHRyYW5zaXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVExTL1NTTCBjZXJ0aWZpY2F0ZSBhcmUgZ2VuZXJhdGVkIGZvciB0aGUgZmxlZXRcbiAgICovXG4gIHJlYWRvbmx5IHVzZUNlcnRpZmljYXRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIElBTSByb2xlIGFzc3VtZWQgYnkgR2FtZUxpZnQgZmxlZXQgaW5zdGFuY2VzIHRvIGFjY2VzcyBBV1MgcmVzc291cmNlcy5cbiAgICogV2l0aCBhIHJvbGUgc2V0LCBhbnkgYXBwbGljYXRpb24gdGhhdCBydW5zIG9uIGFuIGluc3RhbmNlIGluIHRoaXMgZmxlZXQgY2FuIGFzc3VtZSB0aGUgcm9sZSwgaW5jbHVkaW5nIGluc3RhbGwgc2NyaXB0cywgc2VydmVyIHByb2Nlc3NlcywgYW5kIGRhZW1vbnMgKGJhY2tncm91bmQgcHJvY2Vzc2VzKS5cbiAgICogSWYgcHJvdmlkaW5nIGEgY3VzdG9tIHJvbGUsIGl0IG5lZWRzIHRvIHRydXN0IHRoZSBHYW1lTGlmdCBzZXJ2aWNlIHByaW5jaXBhbCAoZ2FtZWxpZnQuYW1hem9uYXdzLmNvbSkuXG4gICAqIE5vIHBlcm1pc3Npb24gaXMgcmVxdWlyZWQgYnkgZGVmYXVsdC5cbiAgICpcbiAgICogVGhpcyBwcm9wZXJ0eSBjYW5ub3QgYmUgY2hhbmdlZCBhZnRlciB0aGUgZmxlZXQgaXMgY3JlYXRlZC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2FtZWxpZnQvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2dhbWVsaWZ0LXNkay1zZXJ2ZXItcmVzb3VyY2VzLmh0bWxcbiAgICpcbiAgICogQGRlZmF1bHQgLSBhIHJvbGUgd2lsbCBiZSBjcmVhdGVkIHdpdGggZGVmYXVsdCB0cnVzdCB0byBHYW1lbGlmdCBzZXJ2aWNlIHByaW5jaXBhbC5cbiAgICovXG4gIHJlYWRvbmx5IHJvbGU/OiBpYW0uSVJvbGU7XG5cbiAgLyoqXG4gICAqIEEgVlBDIHBlZXJpbmcgY29ubmVjdGlvbiBiZXR3ZWVuIHlvdXIgR2FtZUxpZnQtaG9zdGVkIGdhbWUgc2VydmVycyBhbmQgeW91ciBvdGhlciBub24tR2FtZUxpZnQgcmVzb3VyY2VzLlxuICAgKiBVc2UgQW1hem9uIFZpcnR1YWwgUHJpdmF0ZSBDbG91ZCAoVlBDKSBwZWVyaW5nIGNvbm5lY3Rpb25zIHRvIGVuYWJsZSB5b3VyIGdhbWUgc2VydmVycyB0byBjb21tdW5pY2F0ZSBkaXJlY3RseSBhbmQgcHJpdmF0ZWx5IHdpdGggeW91ciBvdGhlciBBV1MgcmVzb3VyY2VzLCBzdWNoIGFzIGEgd2ViIHNlcnZpY2Ugb3IgYSByZXBvc2l0b3J5LlxuICAgKiBZb3UgY2FuIGVzdGFibGlzaCBWUEMgcGVlcmluZyB3aXRoIGFueSByZXNvdXJjZXMgdGhhdCBydW4gb24gQVdTIGFuZCBhcmUgbWFuYWdlZCBieSBhbiBBV1MgYWNjb3VudCB0aGF0IHlvdSBoYXZlIGFjY2VzcyB0by5cbiAgICogVGhlIFZQQyBtdXN0IGJlIGluIHRoZSBzYW1lIFJlZ2lvbiBhcyB5b3VyIGZsZWV0LlxuICAgKlxuICAgKiBXYXJuaW5nOlxuICAgKiBCZSBzdXJlIHRvIGNyZWF0ZSBhIFZQQyBQZWVyaW5nIGF1dGhvcml6YXRpb24gdGhyb3VnaCBHYW1lbGlmdCBTZXJ2aWNlIEFQSS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2FtZWxpZnQvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3ZwYy1wZWVyaW5nLmh0bWxcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyB2cGMgcGVlcmluZ1xuICAgKi9cbiAgcmVhZG9ubHkgcGVlclZwYz86IGVjMi5JVnBjO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiBhbiBBV1MgQ2xvdWRXYXRjaCBtZXRyaWMgZ3JvdXAgdG8gYWRkIHRoaXMgZmxlZXQgdG8uXG4gICAqIEEgbWV0cmljIGdyb3VwIGlzIHVzZWQgdG8gYWdncmVnYXRlIHRoZSBtZXRyaWNzIGZvciBtdWx0aXBsZSBmbGVldHMuXG4gICAqIFlvdSBjYW4gc3BlY2lmeSBhbiBleGlzdGluZyBtZXRyaWMgZ3JvdXAgbmFtZSBvciBzZXQgYSBuZXcgbmFtZSB0byBjcmVhdGUgYSBuZXcgbWV0cmljIGdyb3VwLlxuICAgKiBBIGZsZWV0IGNhbiBiZSBpbmNsdWRlZCBpbiBvbmx5IG9uZSBtZXRyaWMgZ3JvdXAgYXQgYSB0aW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEZsZWV0IG1ldHJpY3MgYXJlIGFnZ3JlZ2F0ZWQgd2l0aCBvdGhlciBmbGVldHMgaW4gdGhlIGRlZmF1bHQgbWV0cmljIGdyb3VwXG4gICAqL1xuICByZWFkb25seSBtZXRyaWNHcm91cD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEdhbWVMaWZ0LXN1cHBvcnRlZCBBbWF6b24gRUMyIGluc3RhbmNlIHR5cGUgdG8gdXNlIGZvciBhbGwgZmxlZXQgaW5zdGFuY2VzLlxuICAgKiBJbnN0YW5jZSB0eXBlIGRldGVybWluZXMgdGhlIGNvbXB1dGluZyByZXNvdXJjZXMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gaG9zdCB5b3VyIGdhbWUgc2VydmVycywgaW5jbHVkaW5nIENQVSwgbWVtb3J5LCBzdG9yYWdlLCBhbmQgbmV0d29ya2luZyBjYXBhY2l0eS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2F3cy5hbWF6b24uY29tL2VjMi9pbnN0YW5jZS10eXBlcy8gZm9yIGRldGFpbGVkIGRlc2NyaXB0aW9ucyBvZiBBbWF6b24gRUMyIGluc3RhbmNlIHR5cGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFuY2VUeXBlOiBlYzIuSW5zdGFuY2VUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIEVDMiBpbnN0YW5jZXMgdGhhdCB5b3Ugd2FudCB0aGlzIGZsZWV0IHRvIGhvc3QuXG4gICAqIFdoZW4gY3JlYXRpbmcgYSBuZXcgZmxlZXQsIEdhbWVMaWZ0IGF1dG9tYXRpY2FsbHkgc2V0cyB0aGlzIHZhbHVlIHRvIFwiMVwiIGFuZCBpbml0aWF0ZXMgYSBzaW5nbGUgaW5zdGFuY2UuXG4gICAqIE9uY2UgdGhlIGZsZWV0IGlzIGFjdGl2ZSwgdXBkYXRlIHRoaXMgdmFsdWUgdG8gdHJpZ2dlciBHYW1lTGlmdCB0byBhZGQgb3IgcmVtb3ZlIGluc3RhbmNlcyBmcm9tIHRoZSBmbGVldC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IGNhcGFjaXR5IGlzIDBcbiAgICovXG4gIHJlYWRvbmx5IGRlc2lyZWRDYXBhY2l0eT86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG1pbmltdW0gbnVtYmVyIG9mIGluc3RhbmNlcyB0aGF0IGFyZSBhbGxvd2VkIGluIHRoZSBzcGVjaWZpZWQgZmxlZXQgbG9jYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHJlYWRvbmx5IG1pblNpemU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0YW5jZXMgdGhhdCBhcmUgYWxsb3dlZCBpbiB0aGUgc3BlY2lmaWVkIGZsZWV0IGxvY2F0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICByZWFkb25seSBtYXhTaXplPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhdHVzIG9mIHRlcm1pbmF0aW9uIHByb3RlY3Rpb24gZm9yIGFjdGl2ZSBnYW1lIHNlc3Npb25zIG9uIHRoZSBmbGVldC5cbiAgICogQnkgZGVmYXVsdCwgbmV3IGdhbWUgc2Vzc2lvbnMgYXJlIHByb3RlY3RlZCBhbmQgY2Fubm90IGJlIHRlcm1pbmF0ZWQgZHVyaW5nIGEgc2NhbGUtZG93biBldmVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZSAtIEdhbWUgc2Vzc2lvbnMgaW4gYEFDVElWRWAgc3RhdHVzIGNhbm5vdCBiZSB0ZXJtaW5hdGVkIGR1cmluZyBhIHNjYWxlLWRvd24gZXZlbnQuXG4gICAqL1xuICByZWFkb25seSBwcm90ZWN0TmV3R2FtZVNlc3Npb24/IDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQSBjb2xsZWN0aW9uIG9mIHNlcnZlciBwcm9jZXNzIGNvbmZpZ3VyYXRpb25zIHRoYXQgZGVzY3JpYmUgdGhlIHNldCBvZiBwcm9jZXNzZXMgdG8gcnVuIG9uIGVhY2ggaW5zdGFuY2UgaW4gYSBmbGVldC5cbiAgICogU2VydmVyIHByb2Nlc3NlcyBydW4gZWl0aGVyIGFuIGV4ZWN1dGFibGUgaW4gYSBjdXN0b20gZ2FtZSBidWlsZCBvciBhIFJlYWx0aW1lIFNlcnZlcnMgc2NyaXB0LlxuICAgKiBHYW1lTGlmdCBsYXVuY2hlcyB0aGUgY29uZmlndXJlZCBwcm9jZXNzZXMsIG1hbmFnZXMgdGhlaXIgbGlmZSBjeWNsZSwgYW5kIHJlcGxhY2VzIHRoZW0gYXMgbmVlZGVkLlxuICAgKiBFYWNoIGluc3RhbmNlIGNoZWNrcyByZWd1bGFybHkgZm9yIGFuIHVwZGF0ZWQgcnVudGltZSBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBBIEdhbWVMaWZ0IGluc3RhbmNlIGlzIGxpbWl0ZWQgdG8gNTAgcHJvY2Vzc2VzIHJ1bm5pbmcgY29uY3VycmVudGx5LlxuICAgKiBUbyBjYWxjdWxhdGUgdGhlIHRvdGFsIG51bWJlciBvZiBwcm9jZXNzZXMgaW4gYSBydW50aW1lIGNvbmZpZ3VyYXRpb24sIGFkZCB0aGUgdmFsdWVzIG9mIHRoZSBDb25jdXJyZW50RXhlY3V0aW9ucyBwYXJhbWV0ZXIgZm9yIGVhY2ggU2VydmVyUHJvY2Vzcy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2FtZWxpZnQvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2ZsZWV0cy1tdWx0aXByb2Nlc3MuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgcnVudGltZUNvbmZpZ3VyYXRpb246IFJ1bnRpbWVDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBBIHNldCBvZiByZW1vdGUgbG9jYXRpb25zIHRvIGRlcGxveSBhZGRpdGlvbmFsIGluc3RhbmNlcyB0byBhbmQgbWFuYWdlIGFzIHBhcnQgb2YgdGhlIGZsZWV0LlxuICAgKiBUaGlzIHBhcmFtZXRlciBjYW4gb25seSBiZSB1c2VkIHdoZW4gY3JlYXRpbmcgZmxlZXRzIGluIEFXUyBSZWdpb25zIHRoYXQgc3VwcG9ydCBtdWx0aXBsZSBsb2NhdGlvbnMuXG4gICAqIFlvdSBjYW4gYWRkIGFueSBHYW1lTGlmdC1zdXBwb3J0ZWQgQVdTIFJlZ2lvbiBhcyBhIHJlbW90ZSBsb2NhdGlvbiwgaW4gdGhlIGZvcm0gb2YgYW4gQVdTIFJlZ2lvbiBjb2RlIHN1Y2ggYXMgYHVzLXdlc3QtMmAuXG4gICAqIFRvIGNyZWF0ZSBhIGZsZWV0IHdpdGggaW5zdGFuY2VzIGluIHRoZSBob21lIHJlZ2lvbiBvbmx5LCBvbWl0IHRoaXMgcGFyYW1ldGVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIENyZWF0ZSBhIGZsZWV0IHdpdGggaW5zdGFuY2VzIGluIHRoZSBob21lIHJlZ2lvbiBvbmx5XG4gICAqL1xuICByZWFkb25seSBsb2NhdGlvbnM/OiBMb2NhdGlvbltdO1xuXG4gIC8qKlxuICAgKiBBIHBvbGljeSB0aGF0IGxpbWl0cyB0aGUgbnVtYmVyIG9mIGdhbWUgc2Vzc2lvbnMgdGhhdCBhbiBpbmRpdmlkdWFsIHBsYXllciBjYW4gY3JlYXRlIG9uIGluc3RhbmNlcyBpbiB0aGlzIGZsZWV0IHdpdGhpbiBhIHNwZWNpZmllZCBzcGFuIG9mIHRpbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gcmVzb3VyY2UgY3JlYXRpb24gbGltaXQgcG9saWN5XG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZUNyZWF0aW9uTGltaXRQb2xpY3k/OiBSZXNvdXJjZUNyZWF0aW9uTGltaXRQb2xpY3k7XG59XG5cbi8qKlxuICogQSBmdWxsIHNwZWNpZmljYXRpb24gb2YgYSBmbGVldCB0aGF0IGNhbiBiZSB1c2VkIHRvIGltcG9ydCBpdCBmbHVlbnRseSBpbnRvIHRoZSBDREsgYXBwbGljYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxlZXRBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGZsZWV0XG4gICAqXG4gICAqIEF0IGxlYXN0IG9uZSBvZiBgZmxlZXRBcm5gIGFuZCBgZmxlZXRJZGAgbXVzdCBiZSBwcm92aWRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZXJpdmVkIGZyb20gYGZsZWV0SWRgLlxuICAgKi9cbiAgcmVhZG9ubHkgZmxlZXRBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBmbGVldFxuICAgKlxuICAgKiBBdCBsZWFzdCBvbmUgb2YgYGZsZWV0SWRgIGFuZCBgZmxlZXRBcm5gICBtdXN0IGJlIHByb3ZpZGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRlcml2ZWQgZnJvbSBgZmxlZXRBcm5gLlxuICAgKi9cbiAgcmVhZG9ubHkgZmxlZXRJZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElBTSByb2xlIGFzc3VtZWQgYnkgR2FtZUxpZnQgZmxlZXQgaW5zdGFuY2VzIHRvIGFjY2VzcyBBV1MgcmVzc291cmNlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgaW1wb3J0ZWQgZmxlZXQgY2Fubm90IGJlIGdyYW50ZWQgYWNjZXNzIHRvIG90aGVyIHJlc291cmNlcyBhcyBhbiBgaWFtLklHcmFudGFibGVgLlxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZT86IGlhbS5JUm9sZTtcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBuZXcgYW5kIGltcG9ydGVkIEdhbWVMaWZ0IGZsZWV0LlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRmxlZXRCYXNlIGV4dGVuZHMgY2RrLlJlc291cmNlIGltcGxlbWVudHMgSUZsZWV0IHtcbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBmbGVldCBmcm9tIGl0cyBhdHRyaWJ1dGVzLlxuICAgKi9cbiAgc3RhdGljIGZyb21GbGVldEF0dHJpYnV0ZXMoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgYXR0cnM6IEZsZWV0QXR0cmlidXRlcyk6IElGbGVldCB7XG4gICAgaWYgKCFhdHRycy5mbGVldElkICYmICFhdHRycy5mbGVldEFybikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFaXRoZXIgZmxlZXRJZCBvciBmbGVldEFybiBtdXN0IGJlIHByb3ZpZGVkIGluIEZsZWV0QXR0cmlidXRlcycpO1xuICAgIH1cbiAgICBjb25zdCBmbGVldElkID0gYXR0cnMuZmxlZXRJZCA/P1xuICAgICAgY2RrLlN0YWNrLm9mKHNjb3BlKS5zcGxpdEFybihhdHRycy5mbGVldEFybiEsIGNkay5Bcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSkucmVzb3VyY2VOYW1lO1xuXG4gICAgaWYgKCFmbGVldElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGZsZWV0IGlkZW50aWZpZXIgZm91bmQgaW4gQVJOOiAnJHthdHRycy5mbGVldEFybn0nYCk7XG4gICAgfVxuXG4gICAgY29uc3QgZmxlZXRBcm4gPSBhdHRycy5mbGVldEFybiA/PyBjZGsuU3RhY2sub2Yoc2NvcGUpLmZvcm1hdEFybih7XG4gICAgICBzZXJ2aWNlOiAnZ2FtZWxpZnQnLFxuICAgICAgcmVzb3VyY2U6ICdmbGVldCcsXG4gICAgICByZXNvdXJjZU5hbWU6IGF0dHJzLmZsZWV0SWQsXG4gICAgICBhcm5Gb3JtYXQ6IGNkay5Bcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSxcbiAgICB9KTtcbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBGbGVldEJhc2Uge1xuICAgICAgcHVibGljIHJlYWRvbmx5IGZsZWV0SWQgPSBmbGVldElkITtcbiAgICAgIHB1YmxpYyByZWFkb25seSBmbGVldEFybiA9IGZsZWV0QXJuO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGdyYW50UHJpbmNpcGFsID0gYXR0cnMucm9sZSA/PyBuZXcgaWFtLlVua25vd25QcmluY2lwYWwoeyByZXNvdXJjZTogdGhpcyB9KTtcbiAgICAgIHB1YmxpYyByZWFkb25seSByb2xlID0gYXR0cnMucm9sZTtcblxuICAgICAgY29uc3RydWN0b3IoczogQ29uc3RydWN0LCBpOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIocywgaSwge1xuICAgICAgICAgIGVudmlyb25tZW50RnJvbUFybjogZmxlZXRBcm4sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBJZGVudGlmaWVyIG9mIHRoZSBmbGVldC5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBmbGVldElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGZsZWV0LlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGZsZWV0QXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwcmluY2lwYWwgdGhpcyBHYW1lTGlmdCBmbGVldCBpcyB1c2luZy5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBncmFudFByaW5jaXBhbDogaWFtLklQcmluY2lwYWw7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2NhdGlvbnM6IExvY2F0aW9uW10gPSBbXTtcblxuICAvKipcbiAgICogRGVmaW5lcyBhbiBhbGlhcyBmb3IgdGhpcyBmbGVldC5cbiAgICpcbiAgICogYGBgdHNcbiAgICogZGVjbGFyZSBjb25zdCBmbGVldDogZ2FtZWxpZnQuRmxlZXRCYXNlO1xuICAgKlxuICAgKiBmbGVldC5hZGRBbGlhcygnTGl2ZScpO1xuICAgKlxuICAgKiAvLyBJcyBlcXVpdmFsZW50IHRvXG4gICAqXG4gICAqIG5ldyBnYW1lbGlmdC5BbGlhcyh0aGlzLCAnQWxpYXNMaXZlJywge1xuICAgKiAgIGFsaWFzTmFtZTogJ0xpdmUnLFxuICAgKiAgIGZsZWV0OiBmbGVldCxcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gYWxpYXNOYW1lIFRoZSBuYW1lIG9mIHRoZSBhbGlhc1xuICAgKiBAcGFyYW0gb3B0aW9ucyBBbGlhcyBvcHRpb25zXG4gICAqL1xuICBwdWJsaWMgYWRkQWxpYXMoYWxpYXNOYW1lOiBzdHJpbmcsIG9wdGlvbnM6IEFsaWFzT3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBBbGlhcyh0aGlzLCBgQWxpYXMke2FsaWFzTmFtZX1gLCB7XG4gICAgICBhbGlhc05hbWUsXG4gICAgICBmbGVldDogdGhpcyxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqL1xuICBwdWJsaWMgZ3JhbnQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUsIC4uLmFjdGlvbnM6IHN0cmluZ1tdKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gaWFtLkdyYW50LmFkZFRvUHJpbmNpcGFsKHtcbiAgICAgIHJlc291cmNlQXJuczogW3RoaXMuZmxlZXRBcm5dLFxuICAgICAgZ3JhbnRlZTogZ3JhbnRlZSxcbiAgICAgIGFjdGlvbnM6IGFjdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljKG1ldHJpY05hbWU6IHN0cmluZywgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgICBuYW1lc3BhY2U6ICdBV1MvR2FtZUxpZnQnLFxuICAgICAgbWV0cmljTmFtZTogbWV0cmljTmFtZSxcbiAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgRmxlZXRJZDogdGhpcy5mbGVldElkLFxuICAgICAgfSxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pLmF0dGFjaFRvKHRoaXMpO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY0FjdGl2ZUluc3RhbmNlcyhwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5jYW5uZWRNZXRyaWMoR2FtZUxpZnRNZXRyaWNzLmFjdGl2ZUluc3RhbmNlc0F2ZXJhZ2UsIHByb3BzKTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWNQZXJjZW50SWRsZUluc3RhbmNlcyhwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5jYW5uZWRNZXRyaWMoR2FtZUxpZnRNZXRyaWNzLnBlcmNlbnRJZGxlSW5zdGFuY2VzQXZlcmFnZSwgcHJvcHMpO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY0Rlc2lyZWRJbnN0YW5jZXMocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMuY2FubmVkTWV0cmljKEdhbWVMaWZ0TWV0cmljcy5kZXNpcmVkSW5zdGFuY2VzQXZlcmFnZSwgcHJvcHMpO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY0lkbGVJbnN0YW5jZXMocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMuY2FubmVkTWV0cmljKEdhbWVMaWZ0TWV0cmljcy5pZGxlSW5zdGFuY2VzQXZlcmFnZSwgcHJvcHMpO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY0luc3RhbmNlSW50ZXJydXB0aW9ucyhwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5jYW5uZWRNZXRyaWMoR2FtZUxpZnRNZXRyaWNzLmluc3RhbmNlSW50ZXJydXB0aW9uc1N1bSwgcHJvcHMpO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY01heEluc3RhbmNlcyhwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5jYW5uZWRNZXRyaWMoR2FtZUxpZnRNZXRyaWNzLm1heEluc3RhbmNlc0F2ZXJhZ2UsIHByb3BzKTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWNNaW5JbnN0YW5jZXMocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMuY2FubmVkTWV0cmljKEdhbWVMaWZ0TWV0cmljcy5taW5JbnN0YW5jZXNBdmVyYWdlLCBwcm9wcyk7XG4gIH1cblxuICBwcml2YXRlIGNhbm5lZE1ldHJpYyhmbjogKGRpbXM6IHsgRmxlZXRJZDogc3RyaW5nIH0pID0+IGNsb3Vkd2F0Y2guTWV0cmljUHJvcHMsIHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgLi4uZm4oeyBGbGVldElkOiB0aGlzLmZsZWV0SWQgfSksXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KS5hdHRhY2hUbyh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQVJOIHRvIHB1dCBpbnRvIHRoZSBkZXN0aW5hdGlvbiBmaWVsZCBvZiBhIGdhbWUgc2Vzc2lvbiBxdWV1ZVxuICAgKi9cbiAgcHVibGljIGdldCByZXNvdXJjZUFybkZvckRlc3RpbmF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmZsZWV0QXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSByZW1vdGUgbG9jYXRpb25zIHRvIGRlcGxveSBhZGRpdGlvbmFsIGluc3RhbmNlcyB0byBhbmQgbWFuYWdlIGFzIHBhcnQgb2YgdGhlIGZsZWV0LlxuICAgKlxuICAgKiBAcGFyYW0gcmVnaW9uIFRoZSBBV1MgcmVnaW9uIHRvIGFkZFxuICAgKi9cbiAgcHVibGljIGFkZExvY2F0aW9uKHJlZ2lvbjogc3RyaW5nLCBkZXNpcmVkQ2FwYWNpdHk/OiBudW1iZXIsIG1pblNpemU/OiBudW1iZXIsIG1heFNpemU/OiBudW1iZXIpIHtcbiAgICB0aGlzLmFkZEludGVybmFsTG9jYXRpb24oe1xuICAgICAgcmVnaW9uOiByZWdpb24sXG4gICAgICBjYXBhY2l0eToge1xuICAgICAgICBkZXNpcmVkQ2FwYWNpdHk6IGRlc2lyZWRDYXBhY2l0eSxcbiAgICAgICAgbWluU2l6ZTogbWluU2l6ZSxcbiAgICAgICAgbWF4U2l6ZTogbWF4U2l6ZSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHJlbW90ZSBsb2NhdGlvbnMgdG8gZGVwbG95IGFkZGl0aW9uYWwgaW5zdGFuY2VzIHRvIGFuZCBtYW5hZ2UgYXMgcGFydCBvZiB0aGUgZmxlZXQuXG4gICAqXG4gICAqIEBwYXJhbSBsb2NhdGlvbiBUaGUgbG9jYXRpb24gdG8gYWRkXG4gICAqL1xuICBwdWJsaWMgYWRkSW50ZXJuYWxMb2NhdGlvbihsb2NhdGlvbjogTG9jYXRpb24pIHtcbiAgICBpZiAodGhpcy5sb2NhdGlvbnMubGVuZ3RoID09IDEwMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBtb3JlIHRoYW4gMTAwIGxvY2F0aW9ucyBhcmUgYWxsb3dlZCBwZXIgZmxlZXQnKTtcbiAgICB9XG5cbiAgICB0aGlzLmxvY2F0aW9ucy5wdXNoKGxvY2F0aW9uKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZVJlc291cmNlQ3JlYXRpb25MaW1pdFBvbGljeShwcm9wczogRmxlZXRQcm9wcyk6IENmbkZsZWV0LlJlc291cmNlQ3JlYXRpb25MaW1pdFBvbGljeVByb3BlcnR5IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXByb3BzLnJlc291cmNlQ3JlYXRpb25MaW1pdFBvbGljeSB8fFxuICAgICAgICAoIXByb3BzLnJlc291cmNlQ3JlYXRpb25MaW1pdFBvbGljeS5uZXdHYW1lU2Vzc2lvbnNQZXJDcmVhdG9yXG4gICAgICAgICAgICAmJiAhcHJvcHMucmVzb3VyY2VDcmVhdGlvbkxpbWl0UG9saWN5LnBvbGljeVBlcmlvZCkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5ld0dhbWVTZXNzaW9uc1BlckNyZWF0b3I6IHByb3BzLnJlc291cmNlQ3JlYXRpb25MaW1pdFBvbGljeS5uZXdHYW1lU2Vzc2lvbnNQZXJDcmVhdG9yLFxuICAgICAgcG9saWN5UGVyaW9kSW5NaW51dGVzOiBwcm9wcy5yZXNvdXJjZUNyZWF0aW9uTGltaXRQb2xpY3kucG9saWN5UGVyaW9kPy50b01pbnV0ZXMoKSxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlTG9jYXRpb25zKCk6IENmbkZsZWV0LkxvY2F0aW9uQ29uZmlndXJhdGlvblByb3BlcnR5W10gfMKgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMubG9jYXRpb25zIHx8IHRoaXMubG9jYXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIHJldHVybiB0aGlzLmxvY2F0aW9ucy5tYXAocGFyc2VMb2NhdGlvbik7XG5cbiAgICBmdW5jdGlvbiBwYXJzZUxvY2F0aW9uKGxvY2F0aW9uOiBMb2NhdGlvbik6IENmbkZsZWV0LkxvY2F0aW9uQ29uZmlndXJhdGlvblByb3BlcnR5IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxvY2F0aW9uOiBsb2NhdGlvbi5yZWdpb24sXG4gICAgICAgIGxvY2F0aW9uQ2FwYWNpdHk6IHNlbGYucGFyc2VMb2NhdGlvbkNhcGFjaXR5KGxvY2F0aW9uLmNhcGFjaXR5KSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlTG9jYXRpb25DYXBhY2l0eShjYXBhY2l0eT86IExvY2F0aW9uQ2FwYWNpdHkpOiBDZm5GbGVldC5Mb2NhdGlvbkNhcGFjaXR5UHJvcGVydHkgfMKgdW5kZWZpbmVkIHtcbiAgICBpZiAoIWNhcGFjaXR5IHx8XG4gICAgICAgICghY2FwYWNpdHkuZGVzaXJlZENhcGFjaXR5XG4gICAgICAgICAgICAmJiAhY2FwYWNpdHkubWluU2l6ZVxuICAgICAgICAgICAgJiYgIWNhcGFjaXR5Lm1heFNpemUpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBkZXNpcmVkRWMySW5zdGFuY2VzOiBjYXBhY2l0eS5kZXNpcmVkQ2FwYWNpdHkgPz8gMCxcbiAgICAgIG1pblNpemU6IGNhcGFjaXR5Lm1pblNpemUgPz8gMCxcbiAgICAgIG1heFNpemU6IGNhcGFjaXR5Lm1heFNpemUgPz8gMSxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlUnVudGltZUNvbmZpZ3VyYXRpb24ocHJvcHM6IEZsZWV0UHJvcHMpOiBDZm5GbGVldC5SdW50aW1lQ29uZmlndXJhdGlvblByb3BlcnR5IHzCoHVuZGVmaW5lZCB7XG4gICAgaWYgKCFwcm9wcy5ydW50aW1lQ29uZmlndXJhdGlvbiB8fFxuICAgICAgICAoIXByb3BzLnJ1bnRpbWVDb25maWd1cmF0aW9uLmdhbWVTZXNzaW9uQWN0aXZhdGlvblRpbWVvdXRcbiAgICAgICAgICAgICYmICFwcm9wcy5ydW50aW1lQ29uZmlndXJhdGlvbi5tYXhDb25jdXJyZW50R2FtZVNlc3Npb25BY3RpdmF0aW9uc1xuICAgICAgICAgICAgJiYgcHJvcHMucnVudGltZUNvbmZpZ3VyYXRpb24uc2VydmVyUHJvY2Vzc2VzLmxlbmd0aCA9PSAwKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGdhbWVTZXNzaW9uQWN0aXZhdGlvblRpbWVvdXRTZWNvbmRzOiBwcm9wcy5ydW50aW1lQ29uZmlndXJhdGlvbi5nYW1lU2Vzc2lvbkFjdGl2YXRpb25UaW1lb3V0Py50b1NlY29uZHMoKSxcbiAgICAgIG1heENvbmN1cnJlbnRHYW1lU2Vzc2lvbkFjdGl2YXRpb25zOiBwcm9wcy5ydW50aW1lQ29uZmlndXJhdGlvbi5tYXhDb25jdXJyZW50R2FtZVNlc3Npb25BY3RpdmF0aW9ucyxcbiAgICAgIHNlcnZlclByb2Nlc3NlczogcHJvcHMucnVudGltZUNvbmZpZ3VyYXRpb24uc2VydmVyUHJvY2Vzc2VzLm1hcChwYXJzZVNlcnZlclByb2Nlc3MpLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBwYXJzZVNlcnZlclByb2Nlc3Moc2VydmVyUHJvY2VzczogU2VydmVyUHJvY2Vzcyk6IENmbkZsZWV0LlNlcnZlclByb2Nlc3NQcm9wZXJ0eSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXJhbWV0ZXJzOiBzZXJ2ZXJQcm9jZXNzLnBhcmFtZXRlcnMsXG4gICAgICAgIGxhdW5jaFBhdGg6IHNlcnZlclByb2Nlc3MubGF1bmNoUGF0aCxcbiAgICAgICAgY29uY3VycmVudEV4ZWN1dGlvbnM6IHNlcnZlclByb2Nlc3MuY29uY3VycmVudEV4ZWN1dGlvbnMgPz8gMSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHdhcm5WcGNQZWVyaW5nQXV0aG9yaXphdGlvbnMoc2NvcGU6IENvbnN0cnVjdCk6IHZvaWQge1xuICAgIGNkay5Bbm5vdGF0aW9ucy5vZihzY29wZSkuYWRkV2FybmluZ1YyKCdAYXdzLWNkay9hd3MtZ2FtZWxpZnQ6ZmxlZXRBdXRvcml6ZVZwY1BlZXJpbmcnLCBbXG4gICAgICAnVG8gYXV0aG9yaXplIHRoZSBWUEMgcGVlcmluZywgY2FsbCB0aGUgR2FtZUxpZnQgc2VydmljZSBBUEkgQ3JlYXRlVnBjUGVlcmluZ0F1dGhvcml6YXRpb24oKSBvciB1c2UgdGhlIEFXUyBDTEkgY29tbWFuZCBjcmVhdGUtdnBjLXBlZXJpbmctYXV0aG9yaXphdGlvbi4nLFxuICAgICAgJ01ha2UgdGhpcyBjYWxsIHVzaW5nIHRoZSBhY2NvdW50IHRoYXQgbWFuYWdlcyB5b3VyIG5vbi1HYW1lTGlmdCByZXNvdXJjZXMuJyxcbiAgICAgICdTZWU6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nYW1lbGlmdC9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdnBjLXBlZXJpbmcuaHRtbCcsXG4gICAgXS5qb2luKCdcXG4nKSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,4 +1,20 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
2
18
  var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
3
19
  var useValue = arguments.length > 2;
4
20
  for (var i = 0; i < initializers.length; i++) {
@@ -33,15 +49,32 @@ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn,
33
49
  if (target) Object.defineProperty(target, contextIn.name, descriptor);
34
50
  done = true;
35
51
  };
52
+ var __importStar = (this && this.__importStar) || (function () {
53
+ var ownKeys = function(o) {
54
+ ownKeys = Object.getOwnPropertyNames || function (o) {
55
+ var ar = [];
56
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
57
+ return ar;
58
+ };
59
+ return ownKeys(o);
60
+ };
61
+ return function (mod) {
62
+ if (mod && mod.__esModule) return mod;
63
+ var result = {};
64
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
65
+ __setModuleDefault(result, mod);
66
+ return result;
67
+ };
68
+ })();
36
69
  Object.defineProperty(exports, "__esModule", { value: true });
37
70
  exports.GameServerGroup = exports.GameServerGroupBase = exports.BalancingStrategy = exports.DeleteOption = void 0;
38
71
  const jsiiDeprecationWarnings = require("../.warnings.jsii.js");
39
72
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
40
- const cloudwatch = require("aws-cdk-lib/aws-cloudwatch");
41
- const ec2 = require("aws-cdk-lib/aws-ec2");
73
+ const cloudwatch = __importStar(require("aws-cdk-lib/aws-cloudwatch"));
74
+ const ec2 = __importStar(require("aws-cdk-lib/aws-ec2"));
42
75
  const aws_gamelift_1 = require("aws-cdk-lib/aws-gamelift");
43
- const iam = require("aws-cdk-lib/aws-iam");
44
- const cdk = require("aws-cdk-lib/core");
76
+ const iam = __importStar(require("aws-cdk-lib/aws-iam"));
77
+ const cdk = __importStar(require("aws-cdk-lib/core"));
45
78
  const helpers_internal_1 = require("aws-cdk-lib/core/lib/helpers-internal");
46
79
  const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource");
47
80
  const prop_injectable_1 = require("aws-cdk-lib/core/lib/prop-injectable");
@@ -91,7 +124,7 @@ var BalancingStrategy;
91
124
  * Base class for new and imported GameLift FleetIQ game server group.
92
125
  */
93
126
  class GameServerGroupBase extends cdk.Resource {
94
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-gamelift-alpha.GameServerGroupBase", version: "2.256.1-alpha.0" };
127
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-gamelift-alpha.GameServerGroupBase", version: "2.258.0-alpha.0" };
95
128
  /**
96
129
  * [disable-awslint:no-grants]
97
130
  */
@@ -159,7 +192,7 @@ let GameServerGroup = (() => {
159
192
  GameServerGroup = _classThis = _classDescriptor.value;
160
193
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
161
194
  }
162
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-gamelift-alpha.GameServerGroup", version: "2.256.1-alpha.0" };
195
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-gamelift-alpha.GameServerGroup", version: "2.258.0-alpha.0" };
163
196
  /** Uniquely identifies this class. */
164
197
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-gamelift-alpha.GameServerGroup';
165
198
  /**
@@ -360,4 +393,4 @@ let GameServerGroup = (() => {
360
393
  return GameServerGroup = _classThis;
361
394
  })();
362
395
  exports.GameServerGroup = GameServerGroup;
363
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FtZS1zZXJ2ZXItZ3JvdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJnYW1lLXNlcnZlci1ncm91cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx5REFBeUQ7QUFDekQsMkNBQTJDO0FBQzNDLDJEQUE4RDtBQUM5RCwyQ0FBMkM7QUFDM0Msd0NBQXdDO0FBQ3hDLDRFQUF1RTtBQUN2RSw4RUFBOEU7QUFDOUUsMEVBQTBFO0FBZ0QxRTs7O0dBR0c7QUFDSCxJQUFZLFlBZVg7QUFmRCxXQUFZLFlBQVk7SUFDdEI7O09BRUc7SUFDSCwyQ0FBMkIsQ0FBQTtJQUUzQjs7T0FFRztJQUNILDZDQUE2QixDQUFBO0lBRTdCOztPQUVHO0lBQ0gsaUNBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQWZXLFlBQVksNEJBQVosWUFBWSxRQWV2QjtBQUVEOztHQUVHO0FBQ0gsSUFBWSxpQkFvQlg7QUFwQkQsV0FBWSxpQkFBaUI7SUFDM0I7Ozs7T0FJRztJQUNILDRDQUF1QixDQUFBO0lBRXZCOzs7O09BSUc7SUFDSCxzREFBaUMsQ0FBQTtJQUVqQzs7O09BR0c7SUFDSCxzREFBaUMsQ0FBQTtBQUNuQyxDQUFDLEVBcEJXLGlCQUFpQixpQ0FBakIsaUJBQWlCLFFBb0I1QjtBQXNDRDs7R0FFRztBQUNILE1BQXNCLG1CQUFvQixTQUFRLEdBQUcsQ0FBQyxRQUFROztJQXFCNUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsT0FBdUIsRUFBRSxHQUFHLE9BQWlCO1FBQ3hELE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUM7WUFDOUIsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1lBQ3ZDLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLE9BQU8sRUFBRSxPQUFPO1NBQ2pCLENBQUMsQ0FBQztLQUNKO0lBRU0sTUFBTSxDQUFDLFVBQWtCLEVBQUUsS0FBZ0M7UUFDaEUsT0FB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Y2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgKiBhcyBlYzIgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgeyBDZm5HYW1lU2VydmVyR3JvdXAgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZ2FtZWxpZnQnO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliL2NvcmUnO1xuaW1wb3J0IHsgbWVtb2l6ZWRHZXR0ZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9oZWxwZXJzLWludGVybmFsJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvbWV0YWRhdGEtcmVzb3VyY2UnO1xuaW1wb3J0IHsgcHJvcGVydHlJbmplY3RhYmxlIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvcHJvcC1pbmplY3RhYmxlJztcbmltcG9ydCB0eXBlIHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgaW50ZWxsaWdlbnQgYXV0b21hdGljIHNjYWxpbmcgdGhhdCB1c2VzIHRhcmdldCB0cmFja2luZy5cbiAqIEFmdGVyIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAgaXMgY3JlYXRlZCwgYWxsIHVwZGF0ZXMgdG8gQXV0byBTY2FsaW5nIHBvbGljaWVzLCBpbmNsdWRpbmcgY2hhbmdpbmcgdGhpcyBwb2xpY3kgYW5kIGFkZGluZyBvciByZW1vdmluZyBvdGhlciBwb2xpY2llcywgaXMgZG9uZSBkaXJlY3RseSBvbiB0aGUgQXV0byBTY2FsaW5nIGdyb3VwLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9TY2FsaW5nUG9saWN5IHtcbiAgLyoqXG4gICAqIExlbmd0aCBvZiB0aW1lLCBpdCB0YWtlcyBmb3IgYSBuZXcgaW5zdGFuY2UgdG8gc3RhcnQgbmV3IGdhbWUgc2VydmVyIHByb2Nlc3NlcyBhbmQgcmVnaXN0ZXIgd2l0aCBHYW1lTGlmdCBGbGVldElRLlxuICAgKiBTcGVjaWZ5aW5nIGEgd2FybS11cCB0aW1lIGNhbiBiZSB1c2VmdWwsIHBhcnRpY3VsYXJseSB3aXRoIGdhbWUgc2VydmVycyB0aGF0IHRha2UgYSBsb25nIHRpbWUgdG8gc3RhcnQgdXAsIGJlY2F1c2UgaXQgYXZvaWRzIHByZW1hdHVyZWx5IHN0YXJ0aW5nIG5ldyBpbnN0YW5jZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IG5vIGluc3RhbmNlIHdhcm11cCBkdXJhdGlvbiBzZXR0bGVkXG4gICAqL1xuICByZWFkb25seSBlc3RpbWF0ZWRJbnN0YW5jZVdhcm11cD86IGNkay5EdXJhdGlvbjtcblxuICAvKipcbiAgICogU2V0dGluZ3MgZm9yIGEgdGFyZ2V0LWJhc2VkIHNjYWxpbmcgcG9saWN5IGFwcGxpZWQgdG8gQXV0byBTY2FsaW5nIGdyb3VwLlxuICAgKiBUaGVzZSBzZXR0aW5ncyBhcmUgdXNlZCB0byBjcmVhdGUgYSB0YXJnZXQtYmFzZWQgcG9saWN5IHRoYXQgdHJhY2tzIHRoZSBHYW1lTGlmdCBGbGVldElRIG1ldHJpYyBgUGVyY2VudFV0aWxpemVkR2FtZVNlcnZlcnNgIGFuZCBzcGVjaWZpZXMgYSB0YXJnZXQgdmFsdWUgZm9yIHRoZSBtZXRyaWMuXG4gICAqXG4gICAqIEFzIHBsYXllciB1c2FnZSBjaGFuZ2VzLCB0aGUgcG9saWN5IHRyaWdnZXJzIHRvIGFkanVzdCB0aGUgZ2FtZSBzZXJ2ZXIgZ3JvdXAgY2FwYWNpdHkgc28gdGhhdCB0aGUgbWV0cmljIHJldHVybnMgdG8gdGhlIHRhcmdldCB2YWx1ZS5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldFRyYWNraW5nQ29uZmlndXJhdGlvbjogbnVtYmVyO1xuXG59XG4vKipcbiAqIEFuIGFsbG93ZWQgaW5zdGFuY2UgdHlwZSBmb3IgYSBnYW1lIHNlcnZlciBncm91cC5cbiAqIEFsbCBnYW1lIHNlcnZlciBncm91cHMgbXVzdCBoYXZlIGF0IGxlYXN0IHR3byBpbnN0YW5jZSB0eXBlcyBkZWZpbmVkIGZvciBpdC5cbiAqIEdhbWVMaWZ0IEZsZWV0SVEgcGVyaW9kaWNhbGx5IGV2YWx1YXRlcyBlYWNoIGRlZmluZWQgaW5zdGFuY2UgdHlwZSBmb3IgdmlhYmlsaXR5LlxuICogSXQgdGhlbiB1cGRhdGVzIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAgd2l0aCB0aGUgbGlzdCBvZiB2aWFibGUgaW5zdGFuY2UgdHlwZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdGFuY2VEZWZpbml0aW9uIHtcbiAgLyoqXG4gICAqIEFuIEFtYXpvbiBFQzIgaW5zdGFuY2UgdHlwZSBkZXNpZ25hdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbmNlVHlwZTogZWMyLkluc3RhbmNlVHlwZTtcblxuICAvKipcbiAgICogSW5zdGFuY2Ugd2VpZ2h0aW5nIHRoYXQgaW5kaWNhdGVzIGhvdyBtdWNoIHRoaXMgaW5zdGFuY2UgdHlwZSBjb250cmlidXRlcyB0byB0aGUgdG90YWwgY2FwYWNpdHkgb2YgYSBnYW1lIHNlcnZlciBncm91cC5cbiAgICogSW5zdGFuY2Ugd2VpZ2h0cyBhcmUgdXNlZCBieSBHYW1lTGlmdCBGbGVldElRIHRvIGNhbGN1bGF0ZSB0aGUgaW5zdGFuY2UgdHlwZSdzIGNvc3QgcGVyIHVuaXQgaG91ciBhbmQgYmV0dGVyIGlkZW50aWZ5IHRoZSBtb3N0IGNvc3QtZWZmZWN0aXZlIG9wdGlvbnMuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvYXNnLWluc3RhbmNlLXdlaWdodGluZy5odG1sXG4gICAqXG4gICAqIEBkZWZhdWx0IGRlZmF1bHQgdmFsdWUgaXMgMVxuICAgKi9cbiAgcmVhZG9ubHkgd2VpZ2h0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSB0eXBlIG9mIGRlbGV0ZSB0byBwZXJmb3JtLlxuICogVG8gZGVsZXRlIGEgZ2FtZSBzZXJ2ZXIgZ3JvdXAsIHNwZWNpZnkgdGhlIERlbGV0ZU9wdGlvbi5cbiAqL1xuZXhwb3J0IGVudW0gRGVsZXRlT3B0aW9uIHtcbiAgLyoqXG4gICAqIFRlcm1pbmF0ZXMgdGhlIGdhbWUgc2VydmVyIGdyb3VwIGFuZCBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBncm91cCBvbmx5IHdoZW4gaXQgaGFzIG5vIGdhbWUgc2VydmVycyB0aGF0IGFyZSBpbiBVVElMSVpFRCBzdGF0dXMuXG4gICAqL1xuICBTQUZFX0RFTEVURSA9ICdTQUZFX0RFTEVURScsXG5cbiAgLyoqXG4gICAqIFRlcm1pbmF0ZXMgdGhlIGdhbWUgc2VydmVyIGdyb3VwLCBpbmNsdWRpbmcgYWxsIGFjdGl2ZSBnYW1lIHNlcnZlcnMgcmVnYXJkbGVzcyBvZiB0aGVpciB1dGlsaXphdGlvbiBzdGF0dXMsIGFuZCB0aGUgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgZ3JvdXAuXG4gICAqL1xuICBGT1JDRV9ERUxFVEUgPSAnRk9SQ0VfREVMRVRFJyxcblxuICAvKipcbiAgICogRG9lcyBhIHNhZmUgZGVsZXRlIG9mIHRoZSBnYW1lIHNlcnZlciBncm91cCBidXQgcmV0YWlucyB0aGUgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgZ3JvdXAgYXMgaXMuXG4gICAqL1xuICBSRVRBSU4gPSAnUkVUQUlOJyxcbn1cblxuLyoqXG4gKiBJbmRpY2F0ZXMgaG93IEdhbWVMaWZ0IEZsZWV0SVEgYmFsYW5jZXMgdGhlIHVzZSBvZiBTcG90IEluc3RhbmNlcyBhbmQgT24tRGVtYW5kIEluc3RhbmNlcyBpbiB0aGUgZ2FtZSBzZXJ2ZXIgZ3JvdXAuXG4gKi9cbmV4cG9ydCBlbnVtIEJhbGFuY2luZ1N0cmF0ZWd5IHtcbiAgLyoqXG4gICAqIE9ubHkgU3BvdCBJbnN0YW5jZXMgYXJlIHVzZWQgaW4gdGhlIGdhbWUgc2VydmVyIGdyb3VwLlxuICAgKiBJZiBTcG90IEluc3RhbmNlcyBhcmUgdW5hdmFpbGFibGUgb3Igbm90IHZpYWJsZSBmb3IgZ2FtZSBob3N0aW5nLCB0aGUgZ2FtZSBzZXJ2ZXIgZ3JvdXAgcHJvdmlkZXMgbm8gaG9zdGluZyBjYXBhY2l0eSB1bnRpbCBTcG90IEluc3RhbmNlcyBjYW4gYWdhaW4gYmUgdXNlZC5cbiAgICogVW50aWwgdGhlbiwgbm8gbmV3IGluc3RhbmNlcyBhcmUgc3RhcnRlZCwgYW5kIHRoZSBleGlzdGluZyBub252aWFibGUgU3BvdCBJbnN0YW5jZXMgYXJlIHRlcm1pbmF0ZWQgKGFmdGVyIGN1cnJlbnQgZ2FtZXBsYXkgZW5kcykgYW5kIGFyZSBub3QgcmVwbGFjZWQuXG4gICAqL1xuICBTUE9UX09OTFkgPSAnU1BPVF9PTkxZJyxcblxuICAvKipcbiAgICogU3BvdCBJbnN0YW5jZXMgYXJlIHVzZWQgd2hlbmV2ZXIgYXZhaWxhYmxlIGluIHRoZSBnYW1lIHNlcnZlciBncm91cC5cbiAgICogSWYgU3BvdCBJbnN0YW5jZXMgYXJlIHVuYXZhaWxhYmxlLCB0aGUgZ2FtZSBzZXJ2ZXIgZ3JvdXAgY29udGludWVzIHRvIHByb3ZpZGUgaG9zdGluZyBjYXBhY2l0eSBieSBmYWxsaW5nIGJhY2sgdG8gT24tRGVtYW5kIEluc3RhbmNlcy5cbiAgICogRXhpc3Rpbmcgbm9udmlhYmxlIFNwb3QgSW5zdGFuY2VzIGFyZSB0ZXJtaW5hdGVkIChhZnRlciBjdXJyZW50IGdhbWVwbGF5IGVuZHMpIGFuZCBhcmUgcmVwbGFjZWQgd2l0aCBuZXcgT24tRGVtYW5kIEluc3RhbmNlcy5cbiAgICovXG4gIFNQT1RfUFJFRkVSUkVEID0gJ1NQT1RfUFJFRkVSUkVEJyxcblxuICAvKipcbiAgICogT25seSBPbi1EZW1hbmQgSW5zdGFuY2VzIGFyZSB1c2VkIGluIHRoZSBnYW1lIHNlcnZlciBncm91cC5cbiAgICogTm8gU3BvdCBJbnN0YW5jZXMgYXJlIHVzZWQsIGV2ZW4gd2hlbiBhdmFpbGFibGUsIHdoaWxlIHRoaXMgYmFsYW5jaW5nIHN0cmF0ZWd5IGlzIGluIGZvcmNlLlxuICAgKi9cbiAgT05fREVNQU5EX09OTFkgPSAnT05fREVNQU5EX09OTFknLFxufVxuXG4vKipcbiAqIFJlcHJlc2VudCBhIEdhbWVMaWZ0IEZsZWV0SVEgZ2FtZSBzZXJ2ZXIgZ3JvdXAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUdhbWVTZXJ2ZXJHcm91cCBleHRlbmRzIGNkay5JUmVzb3VyY2UsIGlhbS5JR3JhbnRhYmxlIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGdhbWUgc2VydmVyIGdyb3VwLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBnYW1lU2VydmVyR3JvdXBBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgZ2VuZXJhdGVkIEF1dG9TY2FsaW5nIGdyb3VwXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGF1dG9TY2FsaW5nR3JvdXBBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGdhbWUgc2VydmVyIGdyb3VwXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGdhbWVTZXJ2ZXJHcm91cE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogR3JhbnQgdGhlIGBncmFudGVlYCBpZGVudGl0eSBwZXJtaXNzaW9ucyB0byBwZXJmb3JtIGBhY3Rpb25zYC5cbiAgICovXG4gIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IGlhbS5HcmFudDtcblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBnaXZlbiBuYW1lZCBtZXRyaWMgZm9yIHRoaXMgZmxlZXQuXG4gICAqL1xuICBtZXRyaWMobWV0cmljTmFtZTogc3RyaW5nLCBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljO1xufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIG5ldyBhbmQgaW1wb3J0ZWQgR2FtZUxpZnQgRmxlZXRJUSBnYW1lIHNlcnZlciBncm91cC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEdhbWVTZXJ2ZXJHcm91cEJhc2UgZXh0ZW5kcyBjZGsuUmVzb3VyY2UgaW1wbGVtZW50cyBJR2FtZVNlcnZlckdyb3VwIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGdhbWUgc2VydmVyIGdyb3VwLlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGdhbWVTZXJ2ZXJHcm91cEFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBnZW5lcmF0ZWQgQXV0b1NjYWxpbmcgZ3JvdXBcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBhdXRvU2NhbGluZ0dyb3VwQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBnYW1lIHNlcnZlciBncm91cC5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBnYW1lU2VydmVyR3JvdXBOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwcmluY2lwYWwgdGhpcyBHYW1lTGlmdCBnYW1lIHNlcnZlciBncm91cCBpcyB1c2luZy5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBncmFudFByaW5jaXBhbDogaWFtLklQcmluY2lwYWw7XG5cbiAgLyoqXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKi9cbiAgcHVibGljIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICByZXNvdXJjZUFybnM6IFt0aGlzLmdhbWVTZXJ2ZXJHcm91cEFybl0sXG4gICAgICBncmFudGVlOiBncmFudGVlLFxuICAgICAgYWN0aW9uczogYWN0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWMobWV0cmljTmFtZTogc3RyaW5nLCBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAgIG5hbWVzcGFjZTogJ0FXUy9HYW1lTGlmdCcsXG4gICAgICBtZXRyaWNOYW1lOiBtZXRyaWNOYW1lLFxuICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICBHYW1lU2VydmVyR3JvdXBBcm46IHRoaXMuZ2FtZVNlcnZlckdyb3VwQXJuLFxuICAgICAgfSxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pLmF0dGFjaFRvKHRoaXMpO1xuICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIEdhbWVTZXJ2ZXJHcm91cCBjb250ZW50IGRlZmluZWQgb3V0c2lkZSBvZiB0aGlzIHN0YWNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdhbWVTZXJ2ZXJHcm91cEF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGdhbWUgc2VydmVyIGdyb3VwXG4gICAqXG4gICAqIEF0IGxlYXN0IG9uZSBvZiBgZ2FtZVNlcnZlckdyb3VwQXJuYCBhbmQgYGdhbWVTZXJ2ZXJHcm91cE5hbWVgIG11c3QgYmUgcHJvdmlkZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGRlcml2ZWQgZnJvbSBgZ2FtZVNlcnZlckdyb3VwQXJuYC5cbiAgICovXG4gIHJlYWRvbmx5IGdhbWVTZXJ2ZXJHcm91cE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGdhbWUgc2VydmVyIGdyb3VwXG4gICAqXG4gICAqIEF0IGxlYXN0IG9uZSBvZiBgZ2FtZVNlcnZlckdyb3VwQXJuYCBhbmQgYGdhbWVTZXJ2ZXJHcm91cE5hbWVgIG11c3QgYmUgcHJvdmlkZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGRlcml2ZWQgZnJvbSBgZ2FtZVNlcnZlckdyb3VwTmFtZWAuXG4gICAqL1xuICByZWFkb25seSBnYW1lU2VydmVyR3JvdXBBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGdlbmVyYXRlZCBBdXRvU2NhbGluZyBncm91cFxuICAgKlxuICAgKiBAZGVmYXVsdCB0aGUgaW1wb3J0ZWQgZ2FtZSBzZXJ2ZXIgZ3JvdXAgZG9lcyBub3QgaGF2ZSBhdXRvc2NhbGluZyBncm91cCBpbmZvcm1hdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYXV0b1NjYWxpbmdHcm91cEFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUFNIHJvbGUgdGhhdCBhbGxvd3MgQW1hem9uIEdhbWVMaWZ0IHRvIGFjY2VzcyB5b3VyIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIGdyb3Vwcy5cbiAgICpcbiAgICogQGRlZmF1bHQgdGhlIGltcG9ydGVkIGdhbWUgc2VydmVyIGdyb3VwIGNhbm5vdCBiZSBncmFudGVkIGFjY2VzcyB0byBvdGhlciByZXNvdXJjZXMgYXMgYW4gYGlhbS5JR3JhbnRhYmxlYC5cbiAgICovXG4gIHJlYWRvbmx5IHJvbGU/OiBpYW0uSVJvbGU7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYSBuZXcgR2FtZWxpZnQgRmxlZXRJUSBHYW1lIHNlcnZlciBncm91cFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdhbWVTZXJ2ZXJHcm91cFByb3BzIHtcbiAgLyoqXG4gICAqIEEgZGV2ZWxvcGVyLWRlZmluZWQgaWRlbnRpZmllciBmb3IgdGhlIGdhbWUgc2VydmVyIGdyb3VwLlxuICAgKiBUaGUgbmFtZSBpcyB1bmlxdWUgZm9yIGVhY2ggUmVnaW9uIGluIGVhY2ggQVdTIGFjY291bnQuXG4gICAqL1xuICByZWFkb25seSBnYW1lU2VydmVyR3JvdXBOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJQU0gcm9sZSB0aGF0IGFsbG93cyBBbWF6b24gR2FtZUxpZnQgdG8gYWNjZXNzIHlvdXIgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgZ3JvdXBzLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nYW1lbGlmdC9sYXRlc3QvZmxlZXRpcWd1aWRlL2dzZy1pYW0tcGVybWlzc2lvbnMtcm9sZXMuaHRtbFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGEgcm9sZSB3aWxsIGJlIGNyZWF0ZWQgd2l0aCBkZWZhdWx0IHRydXN0IHRvIEdhbWVsaWZ0IGFuZCBBdXRvc2NhbGluZyBzZXJ2aWNlIHByaW5jaXBhbCB3aXRoIGEgZGVmYXVsdCBwb2xpY3kgYEdhbWVMaWZ0R2FtZVNlcnZlckdyb3VwUG9saWN5YCBhdHRhY2hlZC5cbiAgICovXG4gIHJlYWRvbmx5IHJvbGU/OiBpYW0uSVJvbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIG51bWJlciBvZiBpbnN0YW5jZXMgYWxsb3dlZCBpbiB0aGUgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgZ3JvdXAuXG4gICAqIER1cmluZyBhdXRvbWF0aWMgc2NhbGluZyBldmVudHMsIEdhbWVMaWZ0IEZsZWV0SVEgYW5kIEFtYXpvbiBFQzIgZG8gbm90IHNjYWxlIGRvd24gdGhlIGdyb3VwIGJlbG93IHRoaXMgbWluaW11bS5cbiAgICpcbiAgICogSW4gcHJvZHVjdGlvbiwgdGhpcyB2YWx1ZSBzaG91bGQgYmUgc2V0IHRvIGF0IGxlYXN0IDEuXG4gICAqXG4gICAqIEFmdGVyIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAgaXMgY3JlYXRlZCwgdXBkYXRlIHRoaXMgdmFsdWUgZGlyZWN0bHkgaW4gdGhlIEF1dG8gU2NhbGluZyBncm91cCB1c2luZyB0aGUgQVdTIGNvbnNvbGUgb3IgQVBJcy5cbiAgICpcbiAgICogQGRlZmF1bHQgdGhlIGRlZmF1bHQgaXMgMFxuICAgKi9cbiAgcmVhZG9ubHkgbWluU2l6ZT86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGluc3RhbmNlcyBhbGxvd2VkIGluIHRoZSBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBncm91cC4gRHVyaW5nIGF1dG9tYXRpYyBzY2FsaW5nIGV2ZW50cywgR2FtZUxpZnQgRmxlZXRJUSBhbmQgRUMyIGRvIG5vdCBzY2FsZSB1cCB0aGUgZ3JvdXAgYWJvdmUgdGhpcyBtYXhpbXVtLlxuICAgKlxuICAgKiBBZnRlciB0aGUgQXV0byBTY2FsaW5nIGdyb3VwIGlzIGNyZWF0ZWQsIHVwZGF0ZSB0aGlzIHZhbHVlIGRpcmVjdGx5IGluIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAgdXNpbmcgdGhlIEFXUyBjb25zb2xlIG9yIEFQSXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRoZSBkZWZhdWx0IGlzIDFcbiAgICovXG4gIHJlYWRvbmx5IG1heFNpemU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBWUEMgbmV0d29yayB0byBwbGFjZSB0aGUgZ2FtZSBzZXJ2ZXIgZ3JvdXAgaW4uXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIGFsbCBHYW1lTGlmdCBGbGVldElRLXN1cHBvcnRlZCBBdmFpbGFiaWxpdHkgWm9uZXMgYXJlIHVzZWQuXG4gICAqXG4gICAqIFlvdSBjYW4gdXNlIHRoaXMgcGFyYW1ldGVyIHRvIHNwZWNpZnkgVlBDcyB0aGF0IHlvdSd2ZSBzZXQgdXAuXG4gICAqXG4gICAqIFRoaXMgcHJvcGVydHkgY2Fubm90IGJlIHVwZGF0ZWQgYWZ0ZXIgdGhlIGdhbWUgc2VydmVyIGdyb3VwIGlzIGNyZWF0ZWQsXG4gICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBBdXRvIFNjYWxpbmcgZ3JvdXAgd2lsbCBhbHdheXMgdXNlIHRoZSBwcm9wZXJ0eSB2YWx1ZSB0aGF0IGlzIHNldCB3aXRoIHRoaXMgcmVxdWVzdCxcbiAgICogZXZlbiBpZiB0aGUgQXV0byBTY2FsaW5nIGdyb3VwIGlzIHVwZGF0ZWQgZGlyZWN0bHkuXG4gICAqL1xuICByZWFkb25seSB2cGM6IGVjMi5JVnBjO1xuXG4gIC8qKlxuICAgKiBHYW1lIHNlcnZlciBncm91cCBzdWJuZXQgc2VsZWN0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IGFsbCBHYW1lTGlmdCBGbGVldElRLXN1cHBvcnRlZCBBdmFpbGFiaWxpdHkgWm9uZXMgYXJlIHVzZWQuXG4gICAqL1xuICByZWFkb25seSB2cGNTdWJuZXRzPzogZWMyLlN1Ym5ldFNlbGVjdGlvbjtcblxuICAvKipcbiAgICogVGhlIHNldCBvZiBBbWF6b24gRUMyIGluc3RhbmNlIHR5cGVzIHRoYXQgR2FtZUxpZnQgRmxlZXRJUSBjYW4gdXNlIHdoZW4gYmFsYW5jaW5nIGFuZCBhdXRvbWF0aWNhbGx5IHNjYWxpbmcgaW5zdGFuY2VzIGluIHRoZSBjb3JyZXNwb25kaW5nIEF1dG8gU2NhbGluZyBncm91cC5cbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbmNlRGVmaW5pdGlvbnM6IEluc3RhbmNlRGVmaW5pdGlvbltdO1xuXG4gIC8qKlxuICAgKiBUaGUgQW1hem9uIEVDMiBsYXVuY2ggdGVtcGxhdGUgdGhhdCBjb250YWlucyBjb25maWd1cmF0aW9uIHNldHRpbmdzIGFuZCBnYW1lIHNlcnZlciBjb2RlIHRvIGJlIGRlcGxveWVkIHRvIGFsbCBpbnN0YW5jZXMgaW4gdGhlIGdhbWUgc2VydmVyIGdyb3VwLlxuICAgKiBBZnRlciB0aGUgQXV0byBTY2FsaW5nIGdyb3VwIGlzIGNyZWF0ZWQsIHVwZGF0ZSB0aGlzIHZhbHVlIGRpcmVjdGx5IGluIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAgdXNpbmcgdGhlIEFXUyBjb25zb2xlIG9yIEFQSXMuXG4gICAqXG4gICAqIE5PVEU6XG4gICAqIElmIHlvdSBzcGVjaWZ5IG5ldHdvcmsgaW50ZXJmYWNlcyBpbiB5b3VyIGxhdW5jaCB0ZW1wbGF0ZSwgeW91IG11c3QgZXhwbGljaXRseSBzZXQgdGhlIHByb3BlcnR5IEFzc29jaWF0ZVB1YmxpY0lwQWRkcmVzcyB0byBgdHJ1ZWAuXG4gICAqIElmIG5vIG5ldHdvcmsgaW50ZXJmYWNlIGlzIHNwZWNpZmllZCBpbiB0aGUgbGF1bmNoIHRlbXBsYXRlLCBHYW1lTGlmdCBGbGVldElRIHVzZXMgeW91ciBhY2NvdW50J3MgZGVmYXVsdCBWUEMuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvY3JlYXRlLWxhdW5jaC10ZW1wbGF0ZS5odG1sXG4gICAqL1xuICByZWFkb25seSBsYXVuY2hUZW1wbGF0ZTogZWMyLklMYXVuY2hUZW1wbGF0ZTtcblxuICAvKipcbiAgICogQSBmbGFnIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgaW5zdGFuY2VzIGluIHRoZSBnYW1lIHNlcnZlciBncm91cCBhcmUgcHJvdGVjdGVkIGZyb20gZWFybHkgdGVybWluYXRpb24uXG4gICAqIFVucHJvdGVjdGVkIGluc3RhbmNlcyB0aGF0IGhhdmUgYWN0aXZlIGdhbWUgc2VydmVycyBydW5uaW5nIG1pZ2h0IGJlIHRlcm1pbmF0ZWQgZHVyaW5nIGEgc2NhbGUtZG93biBldmVudCwgY2F1c2luZyBwbGF5ZXJzIHRvIGJlIGRyb3BwZWQgZnJvbSB0aGUgZ2FtZS5cbiAgICogUHJvdGVjdGVkIGluc3RhbmNlcyBjYW5ub3QgYmUgdGVybWluYXRlZCB3aGlsZSB0aGVyZSBhcmUgYWN0aXZlIGdhbWUgc2VydmVycyBydW5uaW5nIGV4Y2VwdCBpbiB0aGUgZXZlbnQgb2YgYSBmb3JjZWQgZ2FtZSBzZXJ2ZXIgZ3JvdXAgZGVsZXRpb24uXG4gICAqXG4gICAqIEFuIGV4Y2VwdGlvbiB0byB0aGlzIGlzIHdpdGggU3BvdCBJbnN0YW5jZXMsIHdoaWNoIGNhbiBiZSB0ZXJtaW5hdGVkIGJ5IEFXUyByZWdhcmRsZXNzIG9mIHByb3RlY3Rpb24gc3RhdHVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBnYW1lIHNlcnZlcnMgcnVubmluZyBtaWdodCBiZSB0ZXJtaW5hdGVkIGR1cmluZyBhIHNjYWxlLWRvd24gZXZlbnRcbiAgICovXG4gIHJlYWRvbmx5IHByb3RlY3RHYW1lU2VydmVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBzZXR0aW5ncyB0byBkZWZpbmUgYSBzY2FsaW5nIHBvbGljeSBmb3IgdGhlIEF1dG8gU2NhbGluZyBncm91cCB0aGF0IGlzIG9wdGltaXplZCBmb3IgZ2FtZSBob3N0aW5nLlxuICAgKiBUaGUgc2NhbGluZyBwb2xpY3kgdXNlcyB0aGUgbWV0cmljIGBQZXJjZW50VXRpbGl6ZWRHYW1lU2VydmVyc2AgdG8gbWFpbnRhaW4gYSBidWZmZXIgb2YgaWRsZSBnYW1lIHNlcnZlcnMgdGhhdCBjYW4gaW1tZWRpYXRlbHkgYWNjb21tb2RhdGUgbmV3IGdhbWVzIGFuZCBwbGF5ZXJzLlxuICAgKlxuICAgKiBBZnRlciB0aGUgQXV0byBTY2FsaW5nIGdyb3VwIGlzIGNyZWF0ZWQsIHVwZGF0ZSB0aGlzIHZhbHVlIGRpcmVjdGx5IGluIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAgdXNpbmcgdGhlIEFXUyBjb25zb2xlIG9yIEFQSXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IG5vIGF1dG9zY2FsaW5nIHBvbGljeSBzZXR0bGVkXG4gICAqL1xuICByZWFkb25seSBhdXRvU2NhbGluZ1BvbGljeT86IEF1dG9TY2FsaW5nUG9saWN5O1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBkZWxldGUgdG8gcGVyZm9ybS4gVG8gZGVsZXRlIGEgZ2FtZSBzZXJ2ZXIgZ3JvdXAsIHNwZWNpZnkgdGhlIERlbGV0ZU9wdGlvblxuICAgKlxuICAgKiBAZGVmYXVsdCBTQUZFX0RFTEVURVxuICAgKi9cbiAgcmVhZG9ubHkgZGVsZXRlT3B0aW9uPzogRGVsZXRlT3B0aW9uO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaG93IEdhbWVMaWZ0IEZsZWV0SVEgYmFsYW5jZXMgdGhlIHVzZSBvZiBTcG90IEluc3RhbmNlcyBhbmQgT24tRGVtYW5kIEluc3RhbmNlcyBpbiB0aGUgZ2FtZSBzZXJ2ZXIgZ3JvdXAuXG4gICAqXG4gICAqIEBkZWZhdWx0IFNQT1RfUFJFRkVSUkVEXG4gICAqL1xuICByZWFkb25seSBiYWxhbmNpbmdTdHJhdGVneT86IEJhbGFuY2luZ1N0cmF0ZWd5O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBHYW1lTGlmdCBGbGVldElRIGdhbWUgc2VydmVyIGdyb3VwIGZvciBtYW5hZ2luZyBnYW1lIGhvc3Rpbmcgb24gYSBjb2xsZWN0aW9uIG9mIEFtYXpvbiBFQzIgaW5zdGFuY2VzIGZvciBnYW1lIGhvc3RpbmcuXG4gKiBUaGlzIG9wZXJhdGlvbiBjcmVhdGVzIHRoZSBnYW1lIHNlcnZlciBncm91cCwgY3JlYXRlcyBhbiBBdXRvIFNjYWxpbmcgZ3JvdXAgaW4geW91ciBBV1MgYWNjb3VudCwgYW5kIGVzdGFibGlzaGVzIGEgbGluayBiZXR3ZWVuIHRoZSB0d28gZ3JvdXBzLlxuICogWW91IGNhbiB2aWV3IHRoZSBzdGF0dXMgb2YgeW91ciBnYW1lIHNlcnZlciBncm91cHMgaW4gdGhlIEdhbWVMaWZ0IGNvbnNvbGUuXG4gKiBHYW1lIHNlcnZlciBncm91cCBtZXRyaWNzIGFuZCBldmVudHMgYXJlIGVtaXR0ZWQgdG8gQW1hem9uIENsb3VkV2F0Y2guXG4gKiBCZWZvcmUgY3JlYXRpbmcgYSBuZXcgZ2FtZSBzZXJ2ZXIgZ3JvdXAsIHlvdSBtdXN0IGhhdmUgdGhlIGZvbGxvd2luZzpcbiAqICAtIEFuIEFtYXpvbiBFQzIgbGF1bmNoIHRlbXBsYXRlIHRoYXQgc3BlY2lmaWVzIGhvdyB0byBsYXVuY2ggQW1hem9uIEVDMiBpbnN0YW5jZXMgd2l0aCB5b3VyIGdhbWUgc2VydmVyIGJ1aWxkLlxuICogIC0gQW4gSUFNIHJvbGUgdGhhdCBleHRlbmRzIGxpbWl0ZWQgYWNjZXNzIHRvIHlvdXIgQVdTIGFjY291bnQgdG8gYWxsb3cgR2FtZUxpZnQgRmxlZXRJUSB0byBjcmVhdGUgYW5kIGludGVyYWN0IHdpdGggdGhlIEF1dG8gU2NhbGluZyBncm91cC5cbiAqXG4gKiBUbyBjcmVhdGUgYSBuZXcgZ2FtZSBzZXJ2ZXIgZ3JvdXAsIHNwZWNpZnkgYSB1bmlxdWUgZ3JvdXAgbmFtZSwgSUFNIHJvbGUgYW5kIEFtYXpvbiBFQzIgbGF1bmNoIHRlbXBsYXRlLCBhbmQgcHJvdmlkZSBhIGxpc3Qgb2YgaW5zdGFuY2UgdHlwZXMgdGhhdCBjYW4gYmUgdXNlZCBpbiB0aGUgZ3JvdXAuXG4gKiBZb3UgbXVzdCBhbHNvIHNldCBpbml0aWFsIG1heGltdW0gYW5kIG1pbmltdW0gbGltaXRzIG9uIHRoZSBncm91cCdzIGluc3RhbmNlIGNvdW50LlxuICogWW91IGNhbiBvcHRpb25hbGx5IHNldCBhbiBBdXRvIFNjYWxpbmcgcG9saWN5IHdpdGggdGFyZ2V0IHRyYWNraW5nIGJhc2VkIG9uIGEgR2FtZUxpZnQgRmxlZXRJUSBtZXRyaWMuXG4gKlxuICogT25jZSB0aGUgZ2FtZSBzZXJ2ZXIgZ3JvdXAgYW5kIGNvcnJlc3BvbmRpbmcgQXV0byBTY2FsaW5nIGdyb3VwIGFyZSBjcmVhdGVkLCB5b3UgaGF2ZSBmdWxsIGFjY2VzcyB0byBjaGFuZ2UgdGhlIEF1dG8gU2NhbGluZyBncm91cCdzIGNvbmZpZ3VyYXRpb24gYXMgbmVlZGVkLlxuICogU2V2ZXJhbCBwcm9wZXJ0aWVzIHRoYXQgYXJlIHNldCB3aGVuIGNyZWF0aW5nIGEgZ2FtZSBzZXJ2ZXIgZ3JvdXAsIGluY2x1ZGluZyBtYXhpbXVtL21pbmltdW0gc2l6ZSBhbmQgYXV0by1zY2FsaW5nIHBvbGljeSBzZXR0aW5ncywgbXVzdCBiZSB1cGRhdGVkIGRpcmVjdGx5IGluIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAuXG4gKiBLZWVwIGluIG1pbmQgdGhhdCBzb21lIEF1dG8gU2NhbGluZyBncm91cCBwcm9wZXJ0aWVzIGFyZSBwZXJpb2RpY2FsbHkgdXBkYXRlZCBieSBHYW1lTGlmdCBGbGVldElRIGFzIHBhcnQgb2YgaXRzIGJhbGFuY2luZyBhY3Rpdml0aWVzIHRvIG9wdGltaXplIGZvciBhdmFpbGFiaWxpdHkgYW5kIGNvc3QuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2FtZWxpZnQvbGF0ZXN0L2ZsZWV0aXFndWlkZS9nc2ctaW50cm8uaHRtbFxuICpcbiAqIEByZXNvdXJjZSBBV1M6OkdhbWVMaWZ0OjpHYW1lU2VydmVyR3JvdXBcbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIEdhbWVTZXJ2ZXJHcm91cCBleHRlbmRzIEdhbWVTZXJ2ZXJHcm91cEJhc2Uge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1nYW1lbGlmdC1hbHBoYS5HYW1lU2VydmVyR3JvdXAnO1xuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgZ2FtZSBzZXJ2ZXIgZ3JvdXAgZnJvbSBpdHMgYXR0cmlidXRlcy5cbiAgICovXG4gIHN0YXRpYyBmcm9tR2FtZVNlcnZlckdyb3VwQXR0cmlidXRlcyhzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBhdHRyczogR2FtZVNlcnZlckdyb3VwQXR0cmlidXRlcyk6IElHYW1lU2VydmVyR3JvdXAge1xuICAgIGlmICghYXR0cnMuZ2FtZVNlcnZlckdyb3VwQXJuICYmICFhdHRycy5nYW1lU2VydmVyR3JvdXBOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VpdGhlciBnYW1lU2VydmVyR3JvdXBOYW1lIG9yIGdhbWVTZXJ2ZXJHcm91cEFybiBtdXN0IGJlIHByb3ZpZGVkIGluIEdhbWVTZXJ2ZXJHcm91cEF0dHJpYnV0ZXMnKTtcbiAgICB9XG4gICAgY29uc3QgZ2FtZVNlcnZlckdyb3VwTmFtZSA9IGF0dHJzLmdhbWVTZXJ2ZXJHcm91cE5hbWUgPz9cbiAgICAgIGNkay5TdGFjay5vZihzY29wZSkuc3BsaXRBcm4oYXR0cnMuZ2FtZVNlcnZlckdyb3VwQXJuISwgY2RrLkFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FKS5yZXNvdXJjZU5hbWU7XG5cbiAgICBpZiAoIWdhbWVTZXJ2ZXJHcm91cE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gZ2FtZSBzZXJ2ZXIgZ3JvdXAgbmFtZSBmb3VuZCBpbiBBUk46ICcke2F0dHJzLmdhbWVTZXJ2ZXJHcm91cEFybn0nYCk7XG4gICAgfVxuXG4gICAgY29uc3QgZ2FtZVNlcnZlckdyb3VwQXJuID0gYXR0cnMuZ2FtZVNlcnZlckdyb3VwQXJuID8/IGNkay5TdGFjay5vZihzY29wZSkuZm9ybWF0QXJuKHtcbiAgICAgIHNlcnZpY2U6ICdnYW1lbGlmdCcsXG4gICAgICByZXNvdXJjZTogJ2dhbWVzZXJ2ZXJncm91cCcsXG4gICAgICByZXNvdXJjZU5hbWU6IGF0dHJzLmdhbWVTZXJ2ZXJHcm91cE5hbWUsXG4gICAgICBhcm5Gb3JtYXQ6IGNkay5Bcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSxcbiAgICB9KTtcblxuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIEdhbWVTZXJ2ZXJHcm91cEJhc2Uge1xuICAgICAgcHVibGljIHJlYWRvbmx5IGdhbWVTZXJ2ZXJHcm91cE5hbWUgPSBnYW1lU2VydmVyR3JvdXBOYW1lITtcbiAgICAgIHB1YmxpYyByZWFkb25seSBnYW1lU2VydmVyR3JvdXBBcm4gPSBnYW1lU2VydmVyR3JvdXBBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgYXV0b1NjYWxpbmdHcm91cEFybiA9IGF0dHJzLmF1dG9TY2FsaW5nR3JvdXBBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZ3JhbnRQcmluY2lwYWwgPSBhdHRycy5yb2xlID8/IG5ldyBpYW0uVW5rbm93blByaW5jaXBhbCh7IHJlc291cmNlOiB0aGlzIH0pO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHJvbGUgPSBhdHRycy5yb2xlO1xuXG4gICAgICBjb25zdHJ1Y3RvcihzOiBDb25zdHJ1Y3QsIGk6IHN0cmluZykge1xuICAgICAgICBzdXBlcihzLCBpLCB7XG4gICAgICAgICAgZW52aXJvbm1lbnRGcm9tQXJuOiBnYW1lU2VydmVyR3JvdXBBcm4sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBJQU0gcm9sZSB0aGF0IGFsbG93cyBBbWF6b24gR2FtZUxpZnQgdG8gYWNjZXNzIHlvdXIgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgZ3JvdXBzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJvbGU6IGlhbS5JUm9sZTtcblxuICAvKipcbiAgICogVGhlIHByaW5jaXBhbCB0aGlzIEdhbWVMaWZ0IGdhbWUgc2VydmVyIGdyb3VwIGlzIHVzaW5nLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGdyYW50UHJpbmNpcGFsOiBpYW0uSVByaW5jaXBhbDtcblxuICAvKipcbiAgICogVGhlIFZQQyBuZXR3b3JrIHRvIHBsYWNlIHRoZSBnYW1lIHNlcnZlciBncm91cCBpbi5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2cGM6IGVjMi5JVnBjO1xuXG4gIC8qKlxuICAgKiBUaGUgZ2FtZSBzZXJ2ZXIgZ3JvdXAncyBzdWJuZXRzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZwY1N1Ym5ldHM/OiBlYzIuU3VibmV0U2VsZWN0aW9uO1xuXG4gIHByaXZhdGUgcmVzb3VyY2U6IENmbkdhbWVTZXJ2ZXJHcm91cDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogR2FtZVNlcnZlckdyb3VwUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHMuZ2FtZVNlcnZlckdyb3VwTmFtZSxcbiAgICB9KTtcbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIGlmICghY2RrLlRva2VuLmlzVW5yZXNvbHZlZChwcm9wcy5nYW1lU2VydmVyR3JvdXBOYW1lKSkge1xuICAgICAgaWYgKHByb3BzLmdhbWVTZXJ2ZXJHcm91cE5hbWUubGVuZ3RoID4gMTI4KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgR2FtZVNlcnZlckdyb3VwIG5hbWUgY2FuIG5vdCBiZSBsb25nZXIgdGhhbiAxMjggY2hhcmFjdGVycyBidXQgaGFzICR7cHJvcHMuZ2FtZVNlcnZlckdyb3VwTmFtZS5sZW5ndGh9IGNoYXJhY3RlcnMuYCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghL15bYS16QS1aMC05LVxcLl0rJC8udGVzdChwcm9wcy5nYW1lU2VydmVyR3JvdXBOYW1lKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEdhbWUgc2VydmVyIGdyb3VwIG5hbWUgJHtwcm9wcy5nYW1lU2VydmVyR3JvdXBOYW1lfSBjYW4gY29udGFpbiBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbnMsIGJhY2sgc2xhc2ggb3IgZG90IHdpdGggbm8gc3BhY2VzLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudnBjID0gcHJvcHMudnBjO1xuICAgIHRoaXMudnBjU3VibmV0cyA9IHByb3BzLnZwY1N1Ym5ldHMgPz8geyBzdWJuZXRUeXBlOiBlYzIuU3VibmV0VHlwZS5QVUJMSUMgfTtcbiAgICBjb25zdCB7IHN1Ym5ldElkcyB9ID0gcHJvcHMudnBjLnNlbGVjdFN1Ym5ldHModGhpcy52cGNTdWJuZXRzKTtcblxuICAgIGlmIChwcm9wcy5taW5TaXplICYmIHByb3BzLm1pblNpemUgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBtaW5pbXVtIG51bWJlciBvZiBpbnN0YW5jZXMgYWxsb3dlZCBpbiB0aGUgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgZ3JvdXAgY2Fubm90IGJlIGxvd2VyIHRoYW4gMCwgZ2l2ZW4gJHtwcm9wcy5taW5TaXplfWApO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5tYXhTaXplICYmIHByb3BzLm1heFNpemUgPCAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0YW5jZXMgYWxsb3dlZCBpbiB0aGUgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgZ3JvdXAgY2Fubm90IGJlIGxvd2VyIHRoYW4gMSwgZ2l2ZW4gJHtwcm9wcy5tYXhTaXplfWApO1xuICAgIH1cblxuICAgIGlmIChzdWJuZXRJZHMubGVuZ3RoID4gMjApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gbW9yZSB0aGFuIDIwIHN1Ym5ldHMgYXJlIGFsbG93ZWQgcGVyIGdhbWUgc2VydmVyIGdyb3VwLCBnaXZlbiAke3N1Ym5ldElkcy5sZW5ndGh9YCk7XG4gICAgfVxuXG4gICAgLy8gQWRkIGFsbCBpbnN0YW5jZSBkZWZpbml0aW9uc1xuICAgIGlmIChwcm9wcy5pbnN0YW5jZURlZmluaXRpb25zLmxlbmd0aCA+IDIwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIG1vcmUgdGhhbiAyMCBpbnN0YW5jZSBkZWZpbml0aW9ucyBhcmUgYWxsb3dlZCBwZXIgZ2FtZSBzZXJ2ZXIgZ3JvdXAsIGdpdmVuICR7cHJvcHMuaW5zdGFuY2VEZWZpbml0aW9ucy5sZW5ndGh9YCk7XG4gICAgfVxuXG4gICAgdGhpcy5yb2xlID0gcHJvcHMucm9sZSA/PyBuZXcgaWFtLlJvbGUodGhpcywgJ1NlcnZpY2VSb2xlJywge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLkNvbXBvc2l0ZVByaW5jaXBhbChcbiAgICAgICAgbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdnYW1lbGlmdC5hbWF6b25hd3MuY29tJyksXG4gICAgICAgIG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnYXV0b3NjYWxpbmcuYW1hem9uYXdzLmNvbScpKSxcbiAgICAgIG1hbmFnZWRQb2xpY2llczogW1xuICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ0dhbWVMaWZ0R2FtZVNlcnZlckdyb3VwUG9saWN5JyksXG4gICAgICBdLFxuICAgIH0pO1xuICAgIHRoaXMuZ3JhbnRQcmluY2lwYWwgPSB0aGlzLnJvbGU7XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IENmbkdhbWVTZXJ2ZXJHcm91cCh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBnYW1lU2VydmVyR3JvdXBOYW1lOiB0aGlzLnBoeXNpY2FsTmFtZSxcbiAgICAgIGF1dG9TY2FsaW5nUG9saWN5OiB0aGlzLnBhcnNlQXV0b1NjYWxpbmdQb2xpY3kocHJvcHMpLFxuICAgICAgZGVsZXRlT3B0aW9uOiBwcm9wcy5kZWxldGVPcHRpb24sXG4gICAgICBiYWxhbmNpbmdTdHJhdGVneTogcHJvcHMuYmFsYW5jaW5nU3RyYXRlZ3ksXG4gICAgICBnYW1lU2VydmVyUHJvdGVjdGlvblBvbGljeTogcHJvcHMucHJvdGVjdEdhbWVTZXJ2ZXIgPyAnRlVMTF9QUk9URUNUSU9OJyA6ICdOT19QUk9URUNUSU9OJyxcbiAgICAgIGluc3RhbmNlRGVmaW5pdGlvbnM6IHRoaXMucGFyc2VJbnN0YW5jZURlZmluaXRpb25zKHByb3BzKSxcbiAgICAgIGxhdW5jaFRlbXBsYXRlOiB0aGlzLnBhcnNlTGF1bmNoVGVtcGxhdGUocHJvcHMpLFxuICAgICAgbWluU2l6ZTogcHJvcHMubWluU2l6ZSxcbiAgICAgIG1heFNpemU6IHByb3BzLm1heFNpemUsXG4gICAgICByb2xlQXJuOiB0aGlzLnJvbGUucm9sZUFybixcbiAgICAgIHZwY1N1Ym5ldHM6IHN1Ym5ldElkcyxcbiAgICB9KTtcbiAgfVxuXG4gIEBtZW1vaXplZEdldHRlclxuICBwdWJsaWMgZ2V0IGdhbWVTZXJ2ZXJHcm91cE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZU5hbWVBdHRyaWJ1dGUodGhpcy5yZXNvdXJjZS5yZWYpO1xuICB9XG5cbiAgQG1lbW9pemVkR2V0dGVyXG4gIHB1YmxpYyBnZXQgZ2FtZVNlcnZlckdyb3VwQXJuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2VBcm5BdHRyaWJ1dGUodGhpcy5yZXNvdXJjZS5hdHRyR2FtZVNlcnZlckdyb3VwQXJuLCB7XG4gICAgICBzZXJ2aWNlOiAnZ2FtZWxpZnQnLFxuICAgICAgcmVzb3VyY2U6ICdnYW1lc2VydmVyZ3JvdXAnLFxuICAgICAgcmVzb3VyY2VOYW1lOiB0aGlzLnBoeXNpY2FsTmFtZSxcbiAgICAgIGFybkZvcm1hdDogY2RrLkFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FLFxuICAgIH0pO1xuICB9XG5cbiAgQG1lbW9pemVkR2V0dGVyXG4gIHB1YmxpYyBnZXQgYXV0b1NjYWxpbmdHcm91cEFybigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlQXJuQXR0cmlidXRlKHRoaXMucmVzb3VyY2UuYXR0ckF1dG9TY2FsaW5nR3JvdXBBcm4sIHtcbiAgICAgIHNlcnZpY2U6ICdhdXRvc2NhbGluZycsXG4gICAgICByZXNvdXJjZTogJ2F1dG9TY2FsaW5nR3JvdXAnLFxuICAgICAgcmVzb3VyY2VOYW1lOiB0aGlzLnBoeXNpY2FsTmFtZSxcbiAgICAgIGFybkZvcm1hdDogY2RrLkFybkZvcm1hdC5DT0xPTl9SRVNPVVJDRV9OQU1FLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlTGF1bmNoVGVtcGxhdGUocHJvcHM6IEdhbWVTZXJ2ZXJHcm91cFByb3BzKTogQ2ZuR2FtZVNlcnZlckdyb3VwLkxhdW5jaFRlbXBsYXRlUHJvcGVydHkge1xuICAgIHJldHVybiB7XG4gICAgICBsYXVuY2hUZW1wbGF0ZUlkOiBwcm9wcy5sYXVuY2hUZW1wbGF0ZS5sYXVuY2hUZW1wbGF0ZUlkLFxuICAgICAgbGF1bmNoVGVtcGxhdGVOYW1lOiBwcm9wcy5sYXVuY2hUZW1wbGF0ZS5sYXVuY2hUZW1wbGF0ZU5hbWUsXG4gICAgICB2ZXJzaW9uOiBwcm9wcy5sYXVuY2hUZW1wbGF0ZS52ZXJzaW9uTnVtYmVyLFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VBdXRvU2NhbGluZ1BvbGljeShwcm9wczogR2FtZVNlcnZlckdyb3VwUHJvcHMpOiBDZm5HYW1lU2VydmVyR3JvdXAuQXV0b1NjYWxpbmdQb2xpY3lQcm9wZXJ0eSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFwcm9wcy5hdXRvU2NhbGluZ1BvbGljeSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZXN0aW1hdGVkSW5zdGFuY2VXYXJtdXA6IHByb3BzLmF1dG9TY2FsaW5nUG9saWN5LmVzdGltYXRlZEluc3RhbmNlV2FybXVwPy50b1NlY29uZHMoKSxcbiAgICAgIHRhcmdldFRyYWNraW5nQ29uZmlndXJhdGlvbjoge1xuICAgICAgICB0YXJnZXRWYWx1ZTogcHJvcHMuYXV0b1NjYWxpbmdQb2xpY3kudGFyZ2V0VHJhY2tpbmdDb25maWd1cmF0aW9uLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlSW5zdGFuY2VEZWZpbml0aW9ucyhwcm9wczogR2FtZVNlcnZlckdyb3VwUHJvcHMpOiBDZm5HYW1lU2VydmVyR3JvdXAuSW5zdGFuY2VEZWZpbml0aW9uUHJvcGVydHlbXSB7XG4gICAgcmV0dXJuIHByb3BzLmluc3RhbmNlRGVmaW5pdGlvbnMubWFwKHBhcnNlSW5zdGFuY2VEZWZpbml0aW9uKTtcblxuICAgIGZ1bmN0aW9uIHBhcnNlSW5zdGFuY2VEZWZpbml0aW9uKGluc3RhbmNlRGVmaW5pdGlvbjogSW5zdGFuY2VEZWZpbml0aW9uKTogQ2ZuR2FtZVNlcnZlckdyb3VwLkluc3RhbmNlRGVmaW5pdGlvblByb3BlcnR5IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGluc3RhbmNlVHlwZTogaW5zdGFuY2VEZWZpbml0aW9uLmluc3RhbmNlVHlwZS50b1N0cmluZygpLFxuICAgICAgICB3ZWlnaHRlZENhcGFjaXR5OiBpbnN0YW5jZURlZmluaXRpb24ud2VpZ2h0Py50b1N0cmluZygpLFxuICAgICAgfTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
396
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FtZS1zZXJ2ZXItZ3JvdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJnYW1lLXNlcnZlci1ncm91cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1RUFBeUQ7QUFDekQseURBQTJDO0FBQzNDLDJEQUE4RDtBQUM5RCx5REFBMkM7QUFDM0Msc0RBQXdDO0FBQ3hDLDRFQUF1RTtBQUN2RSw4RUFBOEU7QUFDOUUsMEVBQTBFO0FBZ0QxRTs7O0dBR0c7QUFDSCxJQUFZLFlBZVg7QUFmRCxXQUFZLFlBQVk7SUFDdEI7O09BRUc7SUFDSCwyQ0FBMkIsQ0FBQTtJQUUzQjs7T0FFRztJQUNILDZDQUE2QixDQUFBO0lBRTdCOztPQUVHO0lBQ0gsaUNBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQWZXLFlBQVksNEJBQVosWUFBWSxRQWV2QjtBQUVEOztHQUVHO0FBQ0gsSUFBWSxpQkFvQlg7QUFwQkQsV0FBWSxpQkFBaUI7SUFDM0I7Ozs7T0FJRztJQUNILDRDQUF1QixDQUFBO0lBRXZCOzs7O09BSUc7SUFDSCxzREFBaUMsQ0FBQTtJQUVqQzs7O09BR0c7SUFDSCxzREFBaUMsQ0FBQTtBQUNuQyxDQUFDLEVBcEJXLGlCQUFpQixpQ0FBakIsaUJBQWlCLFFBb0I1QjtBQXNDRDs7R0FFRztBQUNILE1BQXNCLG1CQUFvQixTQUFRLEdBQUcsQ0FBQyxRQUFROztJQXFCNUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsT0FBdUIsRUFBRSxHQUFHLE9BQWlCO1FBQ3hELE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUM7WUFDOUIsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1lBQ3ZDLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLE9BQU8sRUFBRSxPQUFPO1NBQ2pCLENBQUMsQ0FBQztLQUNKO0lBRU0sTUFB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aW1wb3J0ICogYXMgY2xvdWR3YXRjaCBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgKiBhcyBlYzIgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgeyBDZm5HYW1lU2VydmVyR3JvdXAgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZ2FtZWxpZnQnO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliL2NvcmUnO1xuaW1wb3J0IHsgbWVtb2l6ZWRHZXR0ZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9oZWxwZXJzLWludGVybmFsJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvbWV0YWRhdGEtcmVzb3VyY2UnO1xuaW1wb3J0IHsgcHJvcGVydHlJbmplY3RhYmxlIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvcHJvcC1pbmplY3RhYmxlJztcbmltcG9ydCB0eXBlIHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgaW50ZWxsaWdlbnQgYXV0b21hdGljIHNjYWxpbmcgdGhhdCB1c2VzIHRhcmdldCB0cmFja2luZy5cbiAqIEFmdGVyIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAgaXMgY3JlYXRlZCwgYWxsIHVwZGF0ZXMgdG8gQXV0byBTY2FsaW5nIHBvbGljaWVzLCBpbmNsdWRpbmcgY2hhbmdpbmcgdGhpcyBwb2xpY3kgYW5kIGFkZGluZyBvciByZW1vdmluZyBvdGhlciBwb2xpY2llcywgaXMgZG9uZSBkaXJlY3RseSBvbiB0aGUgQXV0byBTY2FsaW5nIGdyb3VwLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9TY2FsaW5nUG9saWN5IHtcbiAgLyoqXG4gICAqIExlbmd0aCBvZiB0aW1lLCBpdCB0YWtlcyBmb3IgYSBuZXcgaW5zdGFuY2UgdG8gc3RhcnQgbmV3IGdhbWUgc2VydmVyIHByb2Nlc3NlcyBhbmQgcmVnaXN0ZXIgd2l0aCBHYW1lTGlmdCBGbGVldElRLlxuICAgKiBTcGVjaWZ5aW5nIGEgd2FybS11cCB0aW1lIGNhbiBiZSB1c2VmdWwsIHBhcnRpY3VsYXJseSB3aXRoIGdhbWUgc2VydmVycyB0aGF0IHRha2UgYSBsb25nIHRpbWUgdG8gc3RhcnQgdXAsIGJlY2F1c2UgaXQgYXZvaWRzIHByZW1hdHVyZWx5IHN0YXJ0aW5nIG5ldyBpbnN0YW5jZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IG5vIGluc3RhbmNlIHdhcm11cCBkdXJhdGlvbiBzZXR0bGVkXG4gICAqL1xuICByZWFkb25seSBlc3RpbWF0ZWRJbnN0YW5jZVdhcm11cD86IGNkay5EdXJhdGlvbjtcblxuICAvKipcbiAgICogU2V0dGluZ3MgZm9yIGEgdGFyZ2V0LWJhc2VkIHNjYWxpbmcgcG9saWN5IGFwcGxpZWQgdG8gQXV0byBTY2FsaW5nIGdyb3VwLlxuICAgKiBUaGVzZSBzZXR0aW5ncyBhcmUgdXNlZCB0byBjcmVhdGUgYSB0YXJnZXQtYmFzZWQgcG9saWN5IHRoYXQgdHJhY2tzIHRoZSBHYW1lTGlmdCBGbGVldElRIG1ldHJpYyBgUGVyY2VudFV0aWxpemVkR2FtZVNlcnZlcnNgIGFuZCBzcGVjaWZpZXMgYSB0YXJnZXQgdmFsdWUgZm9yIHRoZSBtZXRyaWMuXG4gICAqXG4gICAqIEFzIHBsYXllciB1c2FnZSBjaGFuZ2VzLCB0aGUgcG9saWN5IHRyaWdnZXJzIHRvIGFkanVzdCB0aGUgZ2FtZSBzZXJ2ZXIgZ3JvdXAgY2FwYWNpdHkgc28gdGhhdCB0aGUgbWV0cmljIHJldHVybnMgdG8gdGhlIHRhcmdldCB2YWx1ZS5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldFRyYWNraW5nQ29uZmlndXJhdGlvbjogbnVtYmVyO1xuXG59XG4vKipcbiAqIEFuIGFsbG93ZWQgaW5zdGFuY2UgdHlwZSBmb3IgYSBnYW1lIHNlcnZlciBncm91cC5cbiAqIEFsbCBnYW1lIHNlcnZlciBncm91cHMgbXVzdCBoYXZlIGF0IGxlYXN0IHR3byBpbnN0YW5jZSB0eXBlcyBkZWZpbmVkIGZvciBpdC5cbiAqIEdhbWVMaWZ0IEZsZWV0SVEgcGVyaW9kaWNhbGx5IGV2YWx1YXRlcyBlYWNoIGRlZmluZWQgaW5zdGFuY2UgdHlwZSBmb3IgdmlhYmlsaXR5LlxuICogSXQgdGhlbiB1cGRhdGVzIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAgd2l0aCB0aGUgbGlzdCBvZiB2aWFibGUgaW5zdGFuY2UgdHlwZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdGFuY2VEZWZpbml0aW9uIHtcbiAgLyoqXG4gICAqIEFuIEFtYXpvbiBFQzIgaW5zdGFuY2UgdHlwZSBkZXNpZ25hdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbmNlVHlwZTogZWMyLkluc3RhbmNlVHlwZTtcblxuICAvKipcbiAgICogSW5zdGFuY2Ugd2VpZ2h0aW5nIHRoYXQgaW5kaWNhdGVzIGhvdyBtdWNoIHRoaXMgaW5zdGFuY2UgdHlwZSBjb250cmlidXRlcyB0byB0aGUgdG90YWwgY2FwYWNpdHkgb2YgYSBnYW1lIHNlcnZlciBncm91cC5cbiAgICogSW5zdGFuY2Ugd2VpZ2h0cyBhcmUgdXNlZCBieSBHYW1lTGlmdCBGbGVldElRIHRvIGNhbGN1bGF0ZSB0aGUgaW5zdGFuY2UgdHlwZSdzIGNvc3QgcGVyIHVuaXQgaG91ciBhbmQgYmV0dGVyIGlkZW50aWZ5IHRoZSBtb3N0IGNvc3QtZWZmZWN0aXZlIG9wdGlvbnMuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvYXNnLWluc3RhbmNlLXdlaWdodGluZy5odG1sXG4gICAqXG4gICAqIEBkZWZhdWx0IGRlZmF1bHQgdmFsdWUgaXMgMVxuICAgKi9cbiAgcmVhZG9ubHkgd2VpZ2h0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSB0eXBlIG9mIGRlbGV0ZSB0byBwZXJmb3JtLlxuICogVG8gZGVsZXRlIGEgZ2FtZSBzZXJ2ZXIgZ3JvdXAsIHNwZWNpZnkgdGhlIERlbGV0ZU9wdGlvbi5cbiAqL1xuZXhwb3J0IGVudW0gRGVsZXRlT3B0aW9uIHtcbiAgLyoqXG4gICAqIFRlcm1pbmF0ZXMgdGhlIGdhbWUgc2VydmVyIGdyb3VwIGFuZCBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBncm91cCBvbmx5IHdoZW4gaXQgaGFzIG5vIGdhbWUgc2VydmVycyB0aGF0IGFyZSBpbiBVVElMSVpFRCBzdGF0dXMuXG4gICAqL1xuICBTQUZFX0RFTEVURSA9ICdTQUZFX0RFTEVURScsXG5cbiAgLyoqXG4gICAqIFRlcm1pbmF0ZXMgdGhlIGdhbWUgc2VydmVyIGdyb3VwLCBpbmNsdWRpbmcgYWxsIGFjdGl2ZSBnYW1lIHNlcnZlcnMgcmVnYXJkbGVzcyBvZiB0aGVpciB1dGlsaXphdGlvbiBzdGF0dXMsIGFuZCB0aGUgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgZ3JvdXAuXG4gICAqL1xuICBGT1JDRV9ERUxFVEUgPSAnRk9SQ0VfREVMRVRFJyxcblxuICAvKipcbiAgICogRG9lcyBhIHNhZmUgZGVsZXRlIG9mIHRoZSBnYW1lIHNlcnZlciBncm91cCBidXQgcmV0YWlucyB0aGUgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgZ3JvdXAgYXMgaXMuXG4gICAqL1xuICBSRVRBSU4gPSAnUkVUQUlOJyxcbn1cblxuLyoqXG4gKiBJbmRpY2F0ZXMgaG93IEdhbWVMaWZ0IEZsZWV0SVEgYmFsYW5jZXMgdGhlIHVzZSBvZiBTcG90IEluc3RhbmNlcyBhbmQgT24tRGVtYW5kIEluc3RhbmNlcyBpbiB0aGUgZ2FtZSBzZXJ2ZXIgZ3JvdXAuXG4gKi9cbmV4cG9ydCBlbnVtIEJhbGFuY2luZ1N0cmF0ZWd5IHtcbiAgLyoqXG4gICAqIE9ubHkgU3BvdCBJbnN0YW5jZXMgYXJlIHVzZWQgaW4gdGhlIGdhbWUgc2VydmVyIGdyb3VwLlxuICAgKiBJZiBTcG90IEluc3RhbmNlcyBhcmUgdW5hdmFpbGFibGUgb3Igbm90IHZpYWJsZSBmb3IgZ2FtZSBob3N0aW5nLCB0aGUgZ2FtZSBzZXJ2ZXIgZ3JvdXAgcHJvdmlkZXMgbm8gaG9zdGluZyBjYXBhY2l0eSB1bnRpbCBTcG90IEluc3RhbmNlcyBjYW4gYWdhaW4gYmUgdXNlZC5cbiAgICogVW50aWwgdGhlbiwgbm8gbmV3IGluc3RhbmNlcyBhcmUgc3RhcnRlZCwgYW5kIHRoZSBleGlzdGluZyBub252aWFibGUgU3BvdCBJbnN0YW5jZXMgYXJlIHRlcm1pbmF0ZWQgKGFmdGVyIGN1cnJlbnQgZ2FtZXBsYXkgZW5kcykgYW5kIGFyZSBub3QgcmVwbGFjZWQuXG4gICAqL1xuICBTUE9UX09OTFkgPSAnU1BPVF9PTkxZJyxcblxuICAvKipcbiAgICogU3BvdCBJbnN0YW5jZXMgYXJlIHVzZWQgd2hlbmV2ZXIgYXZhaWxhYmxlIGluIHRoZSBnYW1lIHNlcnZlciBncm91cC5cbiAgICogSWYgU3BvdCBJbnN0YW5jZXMgYXJlIHVuYXZhaWxhYmxlLCB0aGUgZ2FtZSBzZXJ2ZXIgZ3JvdXAgY29udGludWVzIHRvIHByb3ZpZGUgaG9zdGluZyBjYXBhY2l0eSBieSBmYWxsaW5nIGJhY2sgdG8gT24tRGVtYW5kIEluc3RhbmNlcy5cbiAgICogRXhpc3Rpbmcgbm9udmlhYmxlIFNwb3QgSW5zdGFuY2VzIGFyZSB0ZXJtaW5hdGVkIChhZnRlciBjdXJyZW50IGdhbWVwbGF5IGVuZHMpIGFuZCBhcmUgcmVwbGFjZWQgd2l0aCBuZXcgT24tRGVtYW5kIEluc3RhbmNlcy5cbiAgICovXG4gIFNQT1RfUFJFRkVSUkVEID0gJ1NQT1RfUFJFRkVSUkVEJyxcblxuICAvKipcbiAgICogT25seSBPbi1EZW1hbmQgSW5zdGFuY2VzIGFyZSB1c2VkIGluIHRoZSBnYW1lIHNlcnZlciBncm91cC5cbiAgICogTm8gU3BvdCBJbnN0YW5jZXMgYXJlIHVzZWQsIGV2ZW4gd2hlbiBhdmFpbGFibGUsIHdoaWxlIHRoaXMgYmFsYW5jaW5nIHN0cmF0ZWd5IGlzIGluIGZvcmNlLlxuICAgKi9cbiAgT05fREVNQU5EX09OTFkgPSAnT05fREVNQU5EX09OTFknLFxufVxuXG4vKipcbiAqIFJlcHJlc2VudCBhIEdhbWVMaWZ0IEZsZWV0SVEgZ2FtZSBzZXJ2ZXIgZ3JvdXAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUdhbWVTZXJ2ZXJHcm91cCBleHRlbmRzIGNkay5JUmVzb3VyY2UsIGlhbS5JR3JhbnRhYmxlIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGdhbWUgc2VydmVyIGdyb3VwLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBnYW1lU2VydmVyR3JvdXBBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgZ2VuZXJhdGVkIEF1dG9TY2FsaW5nIGdyb3VwXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGF1dG9TY2FsaW5nR3JvdXBBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGdhbWUgc2VydmVyIGdyb3VwXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGdhbWVTZXJ2ZXJHcm91cE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogR3JhbnQgdGhlIGBncmFudGVlYCBpZGVudGl0eSBwZXJtaXNzaW9ucyB0byBwZXJmb3JtIGBhY3Rpb25zYC5cbiAgICovXG4gIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IGlhbS5HcmFudDtcblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBnaXZlbiBuYW1lZCBtZXRyaWMgZm9yIHRoaXMgZmxlZXQuXG4gICAqL1xuICBtZXRyaWMobWV0cmljTmFtZTogc3RyaW5nLCBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljO1xufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIG5ldyBhbmQgaW1wb3J0ZWQgR2FtZUxpZnQgRmxlZXRJUSBnYW1lIHNlcnZlciBncm91cC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEdhbWVTZXJ2ZXJHcm91cEJhc2UgZXh0ZW5kcyBjZGsuUmVzb3VyY2UgaW1wbGVtZW50cyBJR2FtZVNlcnZlckdyb3VwIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGdhbWUgc2VydmVyIGdyb3VwLlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGdhbWVTZXJ2ZXJHcm91cEFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBnZW5lcmF0ZWQgQXV0b1NjYWxpbmcgZ3JvdXBcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBhdXRvU2NhbGluZ0dyb3VwQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBnYW1lIHNlcnZlciBncm91cC5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBnYW1lU2VydmVyR3JvdXBOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwcmluY2lwYWwgdGhpcyBHYW1lTGlmdCBnYW1lIHNlcnZlciBncm91cCBpcyB1c2luZy5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBncmFudFByaW5jaXBhbDogaWFtLklQcmluY2lwYWw7XG5cbiAgLyoqXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKi9cbiAgcHVibGljIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICByZXNvdXJjZUFybnM6IFt0aGlzLmdhbWVTZXJ2ZXJHcm91cEFybl0sXG4gICAgICBncmFudGVlOiBncmFudGVlLFxuICAgICAgYWN0aW9uczogYWN0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWMobWV0cmljTmFtZTogc3RyaW5nLCBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAgIG5hbWVzcGFjZTogJ0FXUy9HYW1lTGlmdCcsXG4gICAgICBtZXRyaWNOYW1lOiBtZXRyaWNOYW1lLFxuICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICBHYW1lU2VydmVyR3JvdXBBcm46IHRoaXMuZ2FtZVNlcnZlckdyb3VwQXJuLFxuICAgICAgfSxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pLmF0dGFjaFRvKHRoaXMpO1xuICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIEdhbWVTZXJ2ZXJHcm91cCBjb250ZW50IGRlZmluZWQgb3V0c2lkZSBvZiB0aGlzIHN0YWNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdhbWVTZXJ2ZXJHcm91cEF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGdhbWUgc2VydmVyIGdyb3VwXG4gICAqXG4gICAqIEF0IGxlYXN0IG9uZSBvZiBgZ2FtZVNlcnZlckdyb3VwQXJuYCBhbmQgYGdhbWVTZXJ2ZXJHcm91cE5hbWVgIG11c3QgYmUgcHJvdmlkZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGRlcml2ZWQgZnJvbSBgZ2FtZVNlcnZlckdyb3VwQXJuYC5cbiAgICovXG4gIHJlYWRvbmx5IGdhbWVTZXJ2ZXJHcm91cE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGdhbWUgc2VydmVyIGdyb3VwXG4gICAqXG4gICAqIEF0IGxlYXN0IG9uZSBvZiBgZ2FtZVNlcnZlckdyb3VwQXJuYCBhbmQgYGdhbWVTZXJ2ZXJHcm91cE5hbWVgIG11c3QgYmUgcHJvdmlkZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGRlcml2ZWQgZnJvbSBgZ2FtZVNlcnZlckdyb3VwTmFtZWAuXG4gICAqL1xuICByZWFkb25seSBnYW1lU2VydmVyR3JvdXBBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGdlbmVyYXRlZCBBdXRvU2NhbGluZyBncm91cFxuICAgKlxuICAgKiBAZGVmYXVsdCB0aGUgaW1wb3J0ZWQgZ2FtZSBzZXJ2ZXIgZ3JvdXAgZG9lcyBub3QgaGF2ZSBhdXRvc2NhbGluZyBncm91cCBpbmZvcm1hdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYXV0b1NjYWxpbmdHcm91cEFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUFNIHJvbGUgdGhhdCBhbGxvd3MgQW1hem9uIEdhbWVMaWZ0IHRvIGFjY2VzcyB5b3VyIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIGdyb3Vwcy5cbiAgICpcbiAgICogQGRlZmF1bHQgdGhlIGltcG9ydGVkIGdhbWUgc2VydmVyIGdyb3VwIGNhbm5vdCBiZSBncmFudGVkIGFjY2VzcyB0byBvdGhlciByZXNvdXJjZXMgYXMgYW4gYGlhbS5JR3JhbnRhYmxlYC5cbiAgICovXG4gIHJlYWRvbmx5IHJvbGU/OiBpYW0uSVJvbGU7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYSBuZXcgR2FtZWxpZnQgRmxlZXRJUSBHYW1lIHNlcnZlciBncm91cFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdhbWVTZXJ2ZXJHcm91cFByb3BzIHtcbiAgLyoqXG4gICAqIEEgZGV2ZWxvcGVyLWRlZmluZWQgaWRlbnRpZmllciBmb3IgdGhlIGdhbWUgc2VydmVyIGdyb3VwLlxuICAgKiBUaGUgbmFtZSBpcyB1bmlxdWUgZm9yIGVhY2ggUmVnaW9uIGluIGVhY2ggQVdTIGFjY291bnQuXG4gICAqL1xuICByZWFkb25seSBnYW1lU2VydmVyR3JvdXBOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJQU0gcm9sZSB0aGF0IGFsbG93cyBBbWF6b24gR2FtZUxpZnQgdG8gYWNjZXNzIHlvdXIgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgZ3JvdXBzLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nYW1lbGlmdC9sYXRlc3QvZmxlZXRpcWd1aWRlL2dzZy1pYW0tcGVybWlzc2lvbnMtcm9sZXMuaHRtbFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGEgcm9sZSB3aWxsIGJlIGNyZWF0ZWQgd2l0aCBkZWZhdWx0IHRydXN0IHRvIEdhbWVsaWZ0IGFuZCBBdXRvc2NhbGluZyBzZXJ2aWNlIHByaW5jaXBhbCB3aXRoIGEgZGVmYXVsdCBwb2xpY3kgYEdhbWVMaWZ0R2FtZVNlcnZlckdyb3VwUG9saWN5YCBhdHRhY2hlZC5cbiAgICovXG4gIHJlYWRvbmx5IHJvbGU/OiBpYW0uSVJvbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIG51bWJlciBvZiBpbnN0YW5jZXMgYWxsb3dlZCBpbiB0aGUgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgZ3JvdXAuXG4gICAqIER1cmluZyBhdXRvbWF0aWMgc2NhbGluZyBldmVudHMsIEdhbWVMaWZ0IEZsZWV0SVEgYW5kIEFtYXpvbiBFQzIgZG8gbm90IHNjYWxlIGRvd24gdGhlIGdyb3VwIGJlbG93IHRoaXMgbWluaW11bS5cbiAgICpcbiAgICogSW4gcHJvZHVjdGlvbiwgdGhpcyB2YWx1ZSBzaG91bGQgYmUgc2V0IHRvIGF0IGxlYXN0IDEuXG4gICAqXG4gICAqIEFmdGVyIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAgaXMgY3JlYXRlZCwgdXBkYXRlIHRoaXMgdmFsdWUgZGlyZWN0bHkgaW4gdGhlIEF1dG8gU2NhbGluZyBncm91cCB1c2luZyB0aGUgQVdTIGNvbnNvbGUgb3IgQVBJcy5cbiAgICpcbiAgICogQGRlZmF1bHQgdGhlIGRlZmF1bHQgaXMgMFxuICAgKi9cbiAgcmVhZG9ubHkgbWluU2l6ZT86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGluc3RhbmNlcyBhbGxvd2VkIGluIHRoZSBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBncm91cC4gRHVyaW5nIGF1dG9tYXRpYyBzY2FsaW5nIGV2ZW50cywgR2FtZUxpZnQgRmxlZXRJUSBhbmQgRUMyIGRvIG5vdCBzY2FsZSB1cCB0aGUgZ3JvdXAgYWJvdmUgdGhpcyBtYXhpbXVtLlxuICAgKlxuICAgKiBBZnRlciB0aGUgQXV0byBTY2FsaW5nIGdyb3VwIGlzIGNyZWF0ZWQsIHVwZGF0ZSB0aGlzIHZhbHVlIGRpcmVjdGx5IGluIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAgdXNpbmcgdGhlIEFXUyBjb25zb2xlIG9yIEFQSXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRoZSBkZWZhdWx0IGlzIDFcbiAgICovXG4gIHJlYWRvbmx5IG1heFNpemU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBWUEMgbmV0d29yayB0byBwbGFjZSB0aGUgZ2FtZSBzZXJ2ZXIgZ3JvdXAgaW4uXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIGFsbCBHYW1lTGlmdCBGbGVldElRLXN1cHBvcnRlZCBBdmFpbGFiaWxpdHkgWm9uZXMgYXJlIHVzZWQuXG4gICAqXG4gICAqIFlvdSBjYW4gdXNlIHRoaXMgcGFyYW1ldGVyIHRvIHNwZWNpZnkgVlBDcyB0aGF0IHlvdSd2ZSBzZXQgdXAuXG4gICAqXG4gICAqIFRoaXMgcHJvcGVydHkgY2Fubm90IGJlIHVwZGF0ZWQgYWZ0ZXIgdGhlIGdhbWUgc2VydmVyIGdyb3VwIGlzIGNyZWF0ZWQsXG4gICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBBdXRvIFNjYWxpbmcgZ3JvdXAgd2lsbCBhbHdheXMgdXNlIHRoZSBwcm9wZXJ0eSB2YWx1ZSB0aGF0IGlzIHNldCB3aXRoIHRoaXMgcmVxdWVzdCxcbiAgICogZXZlbiBpZiB0aGUgQXV0byBTY2FsaW5nIGdyb3VwIGlzIHVwZGF0ZWQgZGlyZWN0bHkuXG4gICAqL1xuICByZWFkb25seSB2cGM6IGVjMi5JVnBjO1xuXG4gIC8qKlxuICAgKiBHYW1lIHNlcnZlciBncm91cCBzdWJuZXQgc2VsZWN0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IGFsbCBHYW1lTGlmdCBGbGVldElRLXN1cHBvcnRlZCBBdmFpbGFiaWxpdHkgWm9uZXMgYXJlIHVzZWQuXG4gICAqL1xuICByZWFkb25seSB2cGNTdWJuZXRzPzogZWMyLlN1Ym5ldFNlbGVjdGlvbjtcblxuICAvKipcbiAgICogVGhlIHNldCBvZiBBbWF6b24gRUMyIGluc3RhbmNlIHR5cGVzIHRoYXQgR2FtZUxpZnQgRmxlZXRJUSBjYW4gdXNlIHdoZW4gYmFsYW5jaW5nIGFuZCBhdXRvbWF0aWNhbGx5IHNjYWxpbmcgaW5zdGFuY2VzIGluIHRoZSBjb3JyZXNwb25kaW5nIEF1dG8gU2NhbGluZyBncm91cC5cbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbmNlRGVmaW5pdGlvbnM6IEluc3RhbmNlRGVmaW5pdGlvbltdO1xuXG4gIC8qKlxuICAgKiBUaGUgQW1hem9uIEVDMiBsYXVuY2ggdGVtcGxhdGUgdGhhdCBjb250YWlucyBjb25maWd1cmF0aW9uIHNldHRpbmdzIGFuZCBnYW1lIHNlcnZlciBjb2RlIHRvIGJlIGRlcGxveWVkIHRvIGFsbCBpbnN0YW5jZXMgaW4gdGhlIGdhbWUgc2VydmVyIGdyb3VwLlxuICAgKiBBZnRlciB0aGUgQXV0byBTY2FsaW5nIGdyb3VwIGlzIGNyZWF0ZWQsIHVwZGF0ZSB0aGlzIHZhbHVlIGRpcmVjdGx5IGluIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAgdXNpbmcgdGhlIEFXUyBjb25zb2xlIG9yIEFQSXMuXG4gICAqXG4gICAqIE5PVEU6XG4gICAqIElmIHlvdSBzcGVjaWZ5IG5ldHdvcmsgaW50ZXJmYWNlcyBpbiB5b3VyIGxhdW5jaCB0ZW1wbGF0ZSwgeW91IG11c3QgZXhwbGljaXRseSBzZXQgdGhlIHByb3BlcnR5IEFzc29jaWF0ZVB1YmxpY0lwQWRkcmVzcyB0byBgdHJ1ZWAuXG4gICAqIElmIG5vIG5ldHdvcmsgaW50ZXJmYWNlIGlzIHNwZWNpZmllZCBpbiB0aGUgbGF1bmNoIHRlbXBsYXRlLCBHYW1lTGlmdCBGbGVldElRIHVzZXMgeW91ciBhY2NvdW50J3MgZGVmYXVsdCBWUEMuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvY3JlYXRlLWxhdW5jaC10ZW1wbGF0ZS5odG1sXG4gICAqL1xuICByZWFkb25seSBsYXVuY2hUZW1wbGF0ZTogZWMyLklMYXVuY2hUZW1wbGF0ZTtcblxuICAvKipcbiAgICogQSBmbGFnIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgaW5zdGFuY2VzIGluIHRoZSBnYW1lIHNlcnZlciBncm91cCBhcmUgcHJvdGVjdGVkIGZyb20gZWFybHkgdGVybWluYXRpb24uXG4gICAqIFVucHJvdGVjdGVkIGluc3RhbmNlcyB0aGF0IGhhdmUgYWN0aXZlIGdhbWUgc2VydmVycyBydW5uaW5nIG1pZ2h0IGJlIHRlcm1pbmF0ZWQgZHVyaW5nIGEgc2NhbGUtZG93biBldmVudCwgY2F1c2luZyBwbGF5ZXJzIHRvIGJlIGRyb3BwZWQgZnJvbSB0aGUgZ2FtZS5cbiAgICogUHJvdGVjdGVkIGluc3RhbmNlcyBjYW5ub3QgYmUgdGVybWluYXRlZCB3aGlsZSB0aGVyZSBhcmUgYWN0aXZlIGdhbWUgc2VydmVycyBydW5uaW5nIGV4Y2VwdCBpbiB0aGUgZXZlbnQgb2YgYSBmb3JjZWQgZ2FtZSBzZXJ2ZXIgZ3JvdXAgZGVsZXRpb24uXG4gICAqXG4gICAqIEFuIGV4Y2VwdGlvbiB0byB0aGlzIGlzIHdpdGggU3BvdCBJbnN0YW5jZXMsIHdoaWNoIGNhbiBiZSB0ZXJtaW5hdGVkIGJ5IEFXUyByZWdhcmRsZXNzIG9mIHByb3RlY3Rpb24gc3RhdHVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBnYW1lIHNlcnZlcnMgcnVubmluZyBtaWdodCBiZSB0ZXJtaW5hdGVkIGR1cmluZyBhIHNjYWxlLWRvd24gZXZlbnRcbiAgICovXG4gIHJlYWRvbmx5IHByb3RlY3RHYW1lU2VydmVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBzZXR0aW5ncyB0byBkZWZpbmUgYSBzY2FsaW5nIHBvbGljeSBmb3IgdGhlIEF1dG8gU2NhbGluZyBncm91cCB0aGF0IGlzIG9wdGltaXplZCBmb3IgZ2FtZSBob3N0aW5nLlxuICAgKiBUaGUgc2NhbGluZyBwb2xpY3kgdXNlcyB0aGUgbWV0cmljIGBQZXJjZW50VXRpbGl6ZWRHYW1lU2VydmVyc2AgdG8gbWFpbnRhaW4gYSBidWZmZXIgb2YgaWRsZSBnYW1lIHNlcnZlcnMgdGhhdCBjYW4gaW1tZWRpYXRlbHkgYWNjb21tb2RhdGUgbmV3IGdhbWVzIGFuZCBwbGF5ZXJzLlxuICAgKlxuICAgKiBBZnRlciB0aGUgQXV0byBTY2FsaW5nIGdyb3VwIGlzIGNyZWF0ZWQsIHVwZGF0ZSB0aGlzIHZhbHVlIGRpcmVjdGx5IGluIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAgdXNpbmcgdGhlIEFXUyBjb25zb2xlIG9yIEFQSXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IG5vIGF1dG9zY2FsaW5nIHBvbGljeSBzZXR0bGVkXG4gICAqL1xuICByZWFkb25seSBhdXRvU2NhbGluZ1BvbGljeT86IEF1dG9TY2FsaW5nUG9saWN5O1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBkZWxldGUgdG8gcGVyZm9ybS4gVG8gZGVsZXRlIGEgZ2FtZSBzZXJ2ZXIgZ3JvdXAsIHNwZWNpZnkgdGhlIERlbGV0ZU9wdGlvblxuICAgKlxuICAgKiBAZGVmYXVsdCBTQUZFX0RFTEVURVxuICAgKi9cbiAgcmVhZG9ubHkgZGVsZXRlT3B0aW9uPzogRGVsZXRlT3B0aW9uO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaG93IEdhbWVMaWZ0IEZsZWV0SVEgYmFsYW5jZXMgdGhlIHVzZSBvZiBTcG90IEluc3RhbmNlcyBhbmQgT24tRGVtYW5kIEluc3RhbmNlcyBpbiB0aGUgZ2FtZSBzZXJ2ZXIgZ3JvdXAuXG4gICAqXG4gICAqIEBkZWZhdWx0IFNQT1RfUFJFRkVSUkVEXG4gICAqL1xuICByZWFkb25seSBiYWxhbmNpbmdTdHJhdGVneT86IEJhbGFuY2luZ1N0cmF0ZWd5O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBHYW1lTGlmdCBGbGVldElRIGdhbWUgc2VydmVyIGdyb3VwIGZvciBtYW5hZ2luZyBnYW1lIGhvc3Rpbmcgb24gYSBjb2xsZWN0aW9uIG9mIEFtYXpvbiBFQzIgaW5zdGFuY2VzIGZvciBnYW1lIGhvc3RpbmcuXG4gKiBUaGlzIG9wZXJhdGlvbiBjcmVhdGVzIHRoZSBnYW1lIHNlcnZlciBncm91cCwgY3JlYXRlcyBhbiBBdXRvIFNjYWxpbmcgZ3JvdXAgaW4geW91ciBBV1MgYWNjb3VudCwgYW5kIGVzdGFibGlzaGVzIGEgbGluayBiZXR3ZWVuIHRoZSB0d28gZ3JvdXBzLlxuICogWW91IGNhbiB2aWV3IHRoZSBzdGF0dXMgb2YgeW91ciBnYW1lIHNlcnZlciBncm91cHMgaW4gdGhlIEdhbWVMaWZ0IGNvbnNvbGUuXG4gKiBHYW1lIHNlcnZlciBncm91cCBtZXRyaWNzIGFuZCBldmVudHMgYXJlIGVtaXR0ZWQgdG8gQW1hem9uIENsb3VkV2F0Y2guXG4gKiBCZWZvcmUgY3JlYXRpbmcgYSBuZXcgZ2FtZSBzZXJ2ZXIgZ3JvdXAsIHlvdSBtdXN0IGhhdmUgdGhlIGZvbGxvd2luZzpcbiAqICAtIEFuIEFtYXpvbiBFQzIgbGF1bmNoIHRlbXBsYXRlIHRoYXQgc3BlY2lmaWVzIGhvdyB0byBsYXVuY2ggQW1hem9uIEVDMiBpbnN0YW5jZXMgd2l0aCB5b3VyIGdhbWUgc2VydmVyIGJ1aWxkLlxuICogIC0gQW4gSUFNIHJvbGUgdGhhdCBleHRlbmRzIGxpbWl0ZWQgYWNjZXNzIHRvIHlvdXIgQVdTIGFjY291bnQgdG8gYWxsb3cgR2FtZUxpZnQgRmxlZXRJUSB0byBjcmVhdGUgYW5kIGludGVyYWN0IHdpdGggdGhlIEF1dG8gU2NhbGluZyBncm91cC5cbiAqXG4gKiBUbyBjcmVhdGUgYSBuZXcgZ2FtZSBzZXJ2ZXIgZ3JvdXAsIHNwZWNpZnkgYSB1bmlxdWUgZ3JvdXAgbmFtZSwgSUFNIHJvbGUgYW5kIEFtYXpvbiBFQzIgbGF1bmNoIHRlbXBsYXRlLCBhbmQgcHJvdmlkZSBhIGxpc3Qgb2YgaW5zdGFuY2UgdHlwZXMgdGhhdCBjYW4gYmUgdXNlZCBpbiB0aGUgZ3JvdXAuXG4gKiBZb3UgbXVzdCBhbHNvIHNldCBpbml0aWFsIG1heGltdW0gYW5kIG1pbmltdW0gbGltaXRzIG9uIHRoZSBncm91cCdzIGluc3RhbmNlIGNvdW50LlxuICogWW91IGNhbiBvcHRpb25hbGx5IHNldCBhbiBBdXRvIFNjYWxpbmcgcG9saWN5IHdpdGggdGFyZ2V0IHRyYWNraW5nIGJhc2VkIG9uIGEgR2FtZUxpZnQgRmxlZXRJUSBtZXRyaWMuXG4gKlxuICogT25jZSB0aGUgZ2FtZSBzZXJ2ZXIgZ3JvdXAgYW5kIGNvcnJlc3BvbmRpbmcgQXV0byBTY2FsaW5nIGdyb3VwIGFyZSBjcmVhdGVkLCB5b3UgaGF2ZSBmdWxsIGFjY2VzcyB0byBjaGFuZ2UgdGhlIEF1dG8gU2NhbGluZyBncm91cCdzIGNvbmZpZ3VyYXRpb24gYXMgbmVlZGVkLlxuICogU2V2ZXJhbCBwcm9wZXJ0aWVzIHRoYXQgYXJlIHNldCB3aGVuIGNyZWF0aW5nIGEgZ2FtZSBzZXJ2ZXIgZ3JvdXAsIGluY2x1ZGluZyBtYXhpbXVtL21pbmltdW0gc2l6ZSBhbmQgYXV0by1zY2FsaW5nIHBvbGljeSBzZXR0aW5ncywgbXVzdCBiZSB1cGRhdGVkIGRpcmVjdGx5IGluIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAuXG4gKiBLZWVwIGluIG1pbmQgdGhhdCBzb21lIEF1dG8gU2NhbGluZyBncm91cCBwcm9wZXJ0aWVzIGFyZSBwZXJpb2RpY2FsbHkgdXBkYXRlZCBieSBHYW1lTGlmdCBGbGVldElRIGFzIHBhcnQgb2YgaXRzIGJhbGFuY2luZyBhY3Rpdml0aWVzIHRvIG9wdGltaXplIGZvciBhdmFpbGFiaWxpdHkgYW5kIGNvc3QuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2FtZWxpZnQvbGF0ZXN0L2ZsZWV0aXFndWlkZS9nc2ctaW50cm8uaHRtbFxuICpcbiAqIEByZXNvdXJjZSBBV1M6OkdhbWVMaWZ0OjpHYW1lU2VydmVyR3JvdXBcbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIEdhbWVTZXJ2ZXJHcm91cCBleHRlbmRzIEdhbWVTZXJ2ZXJHcm91cEJhc2Uge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1nYW1lbGlmdC1hbHBoYS5HYW1lU2VydmVyR3JvdXAnO1xuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgZ2FtZSBzZXJ2ZXIgZ3JvdXAgZnJvbSBpdHMgYXR0cmlidXRlcy5cbiAgICovXG4gIHN0YXRpYyBmcm9tR2FtZVNlcnZlckdyb3VwQXR0cmlidXRlcyhzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBhdHRyczogR2FtZVNlcnZlckdyb3VwQXR0cmlidXRlcyk6IElHYW1lU2VydmVyR3JvdXAge1xuICAgIGlmICghYXR0cnMuZ2FtZVNlcnZlckdyb3VwQXJuICYmICFhdHRycy5nYW1lU2VydmVyR3JvdXBOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VpdGhlciBnYW1lU2VydmVyR3JvdXBOYW1lIG9yIGdhbWVTZXJ2ZXJHcm91cEFybiBtdXN0IGJlIHByb3ZpZGVkIGluIEdhbWVTZXJ2ZXJHcm91cEF0dHJpYnV0ZXMnKTtcbiAgICB9XG4gICAgY29uc3QgZ2FtZVNlcnZlckdyb3VwTmFtZSA9IGF0dHJzLmdhbWVTZXJ2ZXJHcm91cE5hbWUgPz9cbiAgICAgIGNkay5TdGFjay5vZihzY29wZSkuc3BsaXRBcm4oYXR0cnMuZ2FtZVNlcnZlckdyb3VwQXJuISwgY2RrLkFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FKS5yZXNvdXJjZU5hbWU7XG5cbiAgICBpZiAoIWdhbWVTZXJ2ZXJHcm91cE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gZ2FtZSBzZXJ2ZXIgZ3JvdXAgbmFtZSBmb3VuZCBpbiBBUk46ICcke2F0dHJzLmdhbWVTZXJ2ZXJHcm91cEFybn0nYCk7XG4gICAgfVxuXG4gICAgY29uc3QgZ2FtZVNlcnZlckdyb3VwQXJuID0gYXR0cnMuZ2FtZVNlcnZlckdyb3VwQXJuID8/IGNkay5TdGFjay5vZihzY29wZSkuZm9ybWF0QXJuKHtcbiAgICAgIHNlcnZpY2U6ICdnYW1lbGlmdCcsXG4gICAgICByZXNvdXJjZTogJ2dhbWVzZXJ2ZXJncm91cCcsXG4gICAgICByZXNvdXJjZU5hbWU6IGF0dHJzLmdhbWVTZXJ2ZXJHcm91cE5hbWUsXG4gICAgICBhcm5Gb3JtYXQ6IGNkay5Bcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSxcbiAgICB9KTtcblxuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIEdhbWVTZXJ2ZXJHcm91cEJhc2Uge1xuICAgICAgcHVibGljIHJlYWRvbmx5IGdhbWVTZXJ2ZXJHcm91cE5hbWUgPSBnYW1lU2VydmVyR3JvdXBOYW1lITtcbiAgICAgIHB1YmxpYyByZWFkb25seSBnYW1lU2VydmVyR3JvdXBBcm4gPSBnYW1lU2VydmVyR3JvdXBBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgYXV0b1NjYWxpbmdHcm91cEFybiA9IGF0dHJzLmF1dG9TY2FsaW5nR3JvdXBBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZ3JhbnRQcmluY2lwYWwgPSBhdHRycy5yb2xlID8/IG5ldyBpYW0uVW5rbm93blByaW5jaXBhbCh7IHJlc291cmNlOiB0aGlzIH0pO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHJvbGUgPSBhdHRycy5yb2xlO1xuXG4gICAgICBjb25zdHJ1Y3RvcihzOiBDb25zdHJ1Y3QsIGk6IHN0cmluZykge1xuICAgICAgICBzdXBlcihzLCBpLCB7XG4gICAgICAgICAgZW52aXJvbm1lbnRGcm9tQXJuOiBnYW1lU2VydmVyR3JvdXBBcm4sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBJQU0gcm9sZSB0aGF0IGFsbG93cyBBbWF6b24gR2FtZUxpZnQgdG8gYWNjZXNzIHlvdXIgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgZ3JvdXBzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJvbGU6IGlhbS5JUm9sZTtcblxuICAvKipcbiAgICogVGhlIHByaW5jaXBhbCB0aGlzIEdhbWVMaWZ0IGdhbWUgc2VydmVyIGdyb3VwIGlzIHVzaW5nLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGdyYW50UHJpbmNpcGFsOiBpYW0uSVByaW5jaXBhbDtcblxuICAvKipcbiAgICogVGhlIFZQQyBuZXR3b3JrIHRvIHBsYWNlIHRoZSBnYW1lIHNlcnZlciBncm91cCBpbi5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2cGM6IGVjMi5JVnBjO1xuXG4gIC8qKlxuICAgKiBUaGUgZ2FtZSBzZXJ2ZXIgZ3JvdXAncyBzdWJuZXRzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZwY1N1Ym5ldHM/OiBlYzIuU3VibmV0U2VsZWN0aW9uO1xuXG4gIHByaXZhdGUgcmVzb3VyY2U6IENmbkdhbWVTZXJ2ZXJHcm91cDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogR2FtZVNlcnZlckdyb3VwUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHMuZ2FtZVNlcnZlckdyb3VwTmFtZSxcbiAgICB9KTtcbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIGlmICghY2RrLlRva2VuLmlzVW5yZXNvbHZlZChwcm9wcy5nYW1lU2VydmVyR3JvdXBOYW1lKSkge1xuICAgICAgaWYgKHByb3BzLmdhbWVTZXJ2ZXJHcm91cE5hbWUubGVuZ3RoID4gMTI4KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgR2FtZVNlcnZlckdyb3VwIG5hbWUgY2FuIG5vdCBiZSBsb25nZXIgdGhhbiAxMjggY2hhcmFjdGVycyBidXQgaGFzICR7cHJvcHMuZ2FtZVNlcnZlckdyb3VwTmFtZS5sZW5ndGh9IGNoYXJhY3RlcnMuYCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghL15bYS16QS1aMC05LVxcLl0rJC8udGVzdChwcm9wcy5nYW1lU2VydmVyR3JvdXBOYW1lKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEdhbWUgc2VydmVyIGdyb3VwIG5hbWUgJHtwcm9wcy5nYW1lU2VydmVyR3JvdXBOYW1lfSBjYW4gY29udGFpbiBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbnMsIGJhY2sgc2xhc2ggb3IgZG90IHdpdGggbm8gc3BhY2VzLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudnBjID0gcHJvcHMudnBjO1xuICAgIHRoaXMudnBjU3VibmV0cyA9IHByb3BzLnZwY1N1Ym5ldHMgPz8geyBzdWJuZXRUeXBlOiBlYzIuU3VibmV0VHlwZS5QVUJMSUMgfTtcbiAgICBjb25zdCB7IHN1Ym5ldElkcyB9ID0gcHJvcHMudnBjLnNlbGVjdFN1Ym5ldHModGhpcy52cGNTdWJuZXRzKTtcblxuICAgIGlmIChwcm9wcy5taW5TaXplICYmIHByb3BzLm1pblNpemUgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBtaW5pbXVtIG51bWJlciBvZiBpbnN0YW5jZXMgYWxsb3dlZCBpbiB0aGUgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgZ3JvdXAgY2Fubm90IGJlIGxvd2VyIHRoYW4gMCwgZ2l2ZW4gJHtwcm9wcy5taW5TaXplfWApO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5tYXhTaXplICYmIHByb3BzLm1heFNpemUgPCAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0YW5jZXMgYWxsb3dlZCBpbiB0aGUgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgZ3JvdXAgY2Fubm90IGJlIGxvd2VyIHRoYW4gMSwgZ2l2ZW4gJHtwcm9wcy5tYXhTaXplfWApO1xuICAgIH1cblxuICAgIGlmIChzdWJuZXRJZHMubGVuZ3RoID4gMjApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gbW9yZSB0aGFuIDIwIHN1Ym5ldHMgYXJlIGFsbG93ZWQgcGVyIGdhbWUgc2VydmVyIGdyb3VwLCBnaXZlbiAke3N1Ym5ldElkcy5sZW5ndGh9YCk7XG4gICAgfVxuXG4gICAgLy8gQWRkIGFsbCBpbnN0YW5jZSBkZWZpbml0aW9uc1xuICAgIGlmIChwcm9wcy5pbnN0YW5jZURlZmluaXRpb25zLmxlbmd0aCA+IDIwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIG1vcmUgdGhhbiAyMCBpbnN0YW5jZSBkZWZpbml0aW9ucyBhcmUgYWxsb3dlZCBwZXIgZ2FtZSBzZXJ2ZXIgZ3JvdXAsIGdpdmVuICR7cHJvcHMuaW5zdGFuY2VEZWZpbml0aW9ucy5sZW5ndGh9YCk7XG4gICAgfVxuXG4gICAgdGhpcy5yb2xlID0gcHJvcHMucm9sZSA/PyBuZXcgaWFtLlJvbGUodGhpcywgJ1NlcnZpY2VSb2xlJywge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLkNvbXBvc2l0ZVByaW5jaXBhbChcbiAgICAgICAgbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdnYW1lbGlmdC5hbWF6b25hd3MuY29tJyksXG4gICAgICAgIG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnYXV0b3NjYWxpbmcuYW1hem9uYXdzLmNvbScpKSxcbiAgICAgIG1hbmFnZWRQb2xpY2llczogW1xuICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ0dhbWVMaWZ0R2FtZVNlcnZlckdyb3VwUG9saWN5JyksXG4gICAgICBdLFxuICAgIH0pO1xuICAgIHRoaXMuZ3JhbnRQcmluY2lwYWwgPSB0aGlzLnJvbGU7XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IENmbkdhbWVTZXJ2ZXJHcm91cCh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBnYW1lU2VydmVyR3JvdXBOYW1lOiB0aGlzLnBoeXNpY2FsTmFtZSxcbiAgICAgIGF1dG9TY2FsaW5nUG9saWN5OiB0aGlzLnBhcnNlQXV0b1NjYWxpbmdQb2xpY3kocHJvcHMpLFxuICAgICAgZGVsZXRlT3B0aW9uOiBwcm9wcy5kZWxldGVPcHRpb24sXG4gICAgICBiYWxhbmNpbmdTdHJhdGVneTogcHJvcHMuYmFsYW5jaW5nU3RyYXRlZ3ksXG4gICAgICBnYW1lU2VydmVyUHJvdGVjdGlvblBvbGljeTogcHJvcHMucHJvdGVjdEdhbWVTZXJ2ZXIgPyAnRlVMTF9QUk9URUNUSU9OJyA6ICdOT19QUk9URUNUSU9OJyxcbiAgICAgIGluc3RhbmNlRGVmaW5pdGlvbnM6IHRoaXMucGFyc2VJbnN0YW5jZURlZmluaXRpb25zKHByb3BzKSxcbiAgICAgIGxhdW5jaFRlbXBsYXRlOiB0aGlzLnBhcnNlTGF1bmNoVGVtcGxhdGUocHJvcHMpLFxuICAgICAgbWluU2l6ZTogcHJvcHMubWluU2l6ZSxcbiAgICAgIG1heFNpemU6IHByb3BzLm1heFNpemUsXG4gICAgICByb2xlQXJuOiB0aGlzLnJvbGUucm9sZUFybixcbiAgICAgIHZwY1N1Ym5ldHM6IHN1Ym5ldElkcyxcbiAgICB9KTtcbiAgfVxuXG4gIEBtZW1vaXplZEdldHRlclxuICBwdWJsaWMgZ2V0IGdhbWVTZXJ2ZXJHcm91cE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZU5hbWVBdHRyaWJ1dGUodGhpcy5yZXNvdXJjZS5yZWYpO1xuICB9XG5cbiAgQG1lbW9pemVkR2V0dGVyXG4gIHB1YmxpYyBnZXQgZ2FtZVNlcnZlckdyb3VwQXJuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2VBcm5BdHRyaWJ1dGUodGhpcy5yZXNvdXJjZS5hdHRyR2FtZVNlcnZlckdyb3VwQXJuLCB7XG4gICAgICBzZXJ2aWNlOiAnZ2FtZWxpZnQnLFxuICAgICAgcmVzb3VyY2U6ICdnYW1lc2VydmVyZ3JvdXAnLFxuICAgICAgcmVzb3VyY2VOYW1lOiB0aGlzLnBoeXNpY2FsTmFtZSxcbiAgICAgIGFybkZvcm1hdDogY2RrLkFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FLFxuICAgIH0pO1xuICB9XG5cbiAgQG1lbW9pemVkR2V0dGVyXG4gIHB1YmxpYyBnZXQgYXV0b1NjYWxpbmdHcm91cEFybigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlQXJuQXR0cmlidXRlKHRoaXMucmVzb3VyY2UuYXR0ckF1dG9TY2FsaW5nR3JvdXBBcm4sIHtcbiAgICAgIHNlcnZpY2U6ICdhdXRvc2NhbGluZycsXG4gICAgICByZXNvdXJjZTogJ2F1dG9TY2FsaW5nR3JvdXAnLFxuICAgICAgcmVzb3VyY2VOYW1lOiB0aGlzLnBoeXNpY2FsTmFtZSxcbiAgICAgIGFybkZvcm1hdDogY2RrLkFybkZvcm1hdC5DT0xPTl9SRVNPVVJDRV9OQU1FLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlTGF1bmNoVGVtcGxhdGUocHJvcHM6IEdhbWVTZXJ2ZXJHcm91cFByb3BzKTogQ2ZuR2FtZVNlcnZlckdyb3VwLkxhdW5jaFRlbXBsYXRlUHJvcGVydHkge1xuICAgIHJldHVybiB7XG4gICAgICBsYXVuY2hUZW1wbGF0ZUlkOiBwcm9wcy5sYXVuY2hUZW1wbGF0ZS5sYXVuY2hUZW1wbGF0ZUlkLFxuICAgICAgbGF1bmNoVGVtcGxhdGVOYW1lOiBwcm9wcy5sYXVuY2hUZW1wbGF0ZS5sYXVuY2hUZW1wbGF0ZU5hbWUsXG4gICAgICB2ZXJzaW9uOiBwcm9wcy5sYXVuY2hUZW1wbGF0ZS52ZXJzaW9uTnVtYmVyLFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VBdXRvU2NhbGluZ1BvbGljeShwcm9wczogR2FtZVNlcnZlckdyb3VwUHJvcHMpOiBDZm5HYW1lU2VydmVyR3JvdXAuQXV0b1NjYWxpbmdQb2xpY3lQcm9wZXJ0eSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFwcm9wcy5hdXRvU2NhbGluZ1BvbGljeSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZXN0aW1hdGVkSW5zdGFuY2VXYXJtdXA6IHByb3BzLmF1dG9TY2FsaW5nUG9saWN5LmVzdGltYXRlZEluc3RhbmNlV2FybXVwPy50b1NlY29uZHMoKSxcbiAgICAgIHRhcmdldFRyYWNraW5nQ29uZmlndXJhdGlvbjoge1xuICAgICAgICB0YXJnZXRWYWx1ZTogcHJvcHMuYXV0b1NjYWxpbmdQb2xpY3kudGFyZ2V0VHJhY2tpbmdDb25maWd1cmF0aW9uLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlSW5zdGFuY2VEZWZpbml0aW9ucyhwcm9wczogR2FtZVNlcnZlckdyb3VwUHJvcHMpOiBDZm5HYW1lU2VydmVyR3JvdXAuSW5zdGFuY2VEZWZpbml0aW9uUHJvcGVydHlbXSB7XG4gICAgcmV0dXJuIHByb3BzLmluc3RhbmNlRGVmaW5pdGlvbnMubWFwKHBhcnNlSW5zdGFuY2VEZWZpbml0aW9uKTtcblxuICAgIGZ1bmN0aW9uIHBhcnNlSW5zdGFuY2VEZWZpbml0aW9uKGluc3RhbmNlRGVmaW5pdGlvbjogSW5zdGFuY2VEZWZpbml0aW9uKTogQ2ZuR2FtZVNlcnZlckdyb3VwLkluc3RhbmNlRGVmaW5pdGlvblByb3BlcnR5IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGluc3RhbmNlVHlwZTogaW5zdGFuY2VEZWZpbml0aW9uLmluc3RhbmNlVHlwZS50b1N0cmluZygpLFxuICAgICAgICB3ZWlnaHRlZENhcGFjaXR5OiBpbnN0YW5jZURlZmluaXRpb24ud2VpZ2h0Py50b1N0cmluZygpLFxuICAgICAgfTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==