@aws-cdk/aws-ec2-alpha 2.176.0-alpha.0 → 2.178.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/route.js CHANGED
@@ -1,4 +1,10 @@
1
1
  "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
2
8
  var _a, _b, _c, _d, _e, _f, _g, _h;
3
9
  Object.defineProperty(exports, "__esModule", { value: true });
4
10
  exports.RouteTable = exports.Route = exports.RouteTargetType = exports.VPCPeeringConnection = exports.NatGateway = exports.VPNGatewayV2 = exports.InternetGateway = exports.EgressOnlyInternetGateway = exports.NatConnectivityType = void 0;
@@ -7,6 +13,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
7
13
  const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
8
14
  const core_1 = require("aws-cdk-lib/core");
9
15
  const util_1 = require("./util");
16
+ const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource");
10
17
  /**
11
18
  * Indicates whether the NAT gateway supports public or private connectivity.
12
19
  * The default is public connectivity.
@@ -43,6 +50,8 @@ class EgressOnlyInternetGateway extends core_1.Resource {
43
50
  }
44
51
  throw error;
45
52
  }
53
+ // Enhanced CDK Analytics Telemetry
54
+ (0, metadata_resource_1.addConstructMetadata)(this, props);
46
55
  if (props.egressOnlyInternetGatewayName) {
47
56
  core_1.Tags.of(this).add(NAME_TAG, props.egressOnlyInternetGatewayName);
48
57
  }
@@ -56,7 +65,7 @@ class EgressOnlyInternetGateway extends core_1.Resource {
56
65
  }
57
66
  exports.EgressOnlyInternetGateway = EgressOnlyInternetGateway;
58
67
  _a = JSII_RTTI_SYMBOL_1;
59
- EgressOnlyInternetGateway[_a] = { fqn: "@aws-cdk/aws-ec2-alpha.EgressOnlyInternetGateway", version: "2.176.0-alpha.0" };
68
+ EgressOnlyInternetGateway[_a] = { fqn: "@aws-cdk/aws-ec2-alpha.EgressOnlyInternetGateway", version: "2.178.0-alpha.0" };
60
69
  /**
61
70
  * Creates an internet gateway
62
71
  * @resource AWS::EC2::InternetGateway
@@ -73,6 +82,8 @@ class InternetGateway extends core_1.Resource {
73
82
  }
74
83
  throw error;
75
84
  }
85
+ // Enhanced CDK Analytics Telemetry
86
+ (0, metadata_resource_1.addConstructMetadata)(this, props);
76
87
  this.routerType = aws_ec2_1.RouterType.GATEWAY;
77
88
  this.resource = new aws_ec2_1.CfnInternetGateway(this, 'IGW', {});
78
89
  this.node.defaultChild = this.resource;
@@ -89,7 +100,7 @@ class InternetGateway extends core_1.Resource {
89
100
  }
90
101
  exports.InternetGateway = InternetGateway;
91
102
  _b = JSII_RTTI_SYMBOL_1;
92
- InternetGateway[_b] = { fqn: "@aws-cdk/aws-ec2-alpha.InternetGateway", version: "2.176.0-alpha.0" };
103
+ InternetGateway[_b] = { fqn: "@aws-cdk/aws-ec2-alpha.InternetGateway", version: "2.178.0-alpha.0" };
93
104
  /**
94
105
  * Creates a virtual private gateway
95
106
  * @resource AWS::EC2::VPNGateway
@@ -108,6 +119,8 @@ class VPNGatewayV2 extends core_1.Resource {
108
119
  }
109
120
  throw error;
110
121
  }
122
+ // Enhanced CDK Analytics Telemetry
123
+ (0, metadata_resource_1.addConstructMetadata)(this, props);
111
124
  this.routerType = aws_ec2_1.RouterType.GATEWAY;
112
125
  this.resource = new aws_ec2_1.CfnVPNGateway(this, 'IGW', {
113
126
  type: props.type,
@@ -142,7 +155,7 @@ class VPNGatewayV2 extends core_1.Resource {
142
155
  }
143
156
  exports.VPNGatewayV2 = VPNGatewayV2;
144
157
  _c = JSII_RTTI_SYMBOL_1;
145
- VPNGatewayV2[_c] = { fqn: "@aws-cdk/aws-ec2-alpha.VPNGatewayV2", version: "2.176.0-alpha.0" };
158
+ VPNGatewayV2[_c] = { fqn: "@aws-cdk/aws-ec2-alpha.VPNGatewayV2", version: "2.178.0-alpha.0" };
146
159
  /**
147
160
  * Creates a network address translation (NAT) gateway
148
161
  * @resource AWS::EC2::NatGateway
@@ -159,6 +172,8 @@ class NatGateway extends core_1.Resource {
159
172
  }
160
173
  throw error;
161
174
  }
175
+ // Enhanced CDK Analytics Telemetry
176
+ (0, metadata_resource_1.addConstructMetadata)(this, props);
162
177
  this.routerType = aws_ec2_1.RouterType.NAT_GATEWAY;
163
178
  this.connectivityType = props.connectivityType || NatConnectivityType.PUBLIC;
164
179
  this.maxDrainDuration = props.maxDrainDuration || core_1.Duration.seconds(350);
@@ -198,7 +213,7 @@ class NatGateway extends core_1.Resource {
198
213
  }
199
214
  exports.NatGateway = NatGateway;
200
215
  _d = JSII_RTTI_SYMBOL_1;
201
- NatGateway[_d] = { fqn: "@aws-cdk/aws-ec2-alpha.NatGateway", version: "2.176.0-alpha.0" };
216
+ NatGateway[_d] = { fqn: "@aws-cdk/aws-ec2-alpha.NatGateway", version: "2.178.0-alpha.0" };
202
217
  /**
203
218
  * Creates a peering connection between two VPCs
204
219
  * @resource AWS::EC2::VPCPeeringConnection
@@ -215,6 +230,8 @@ class VPCPeeringConnection extends core_1.Resource {
215
230
  }
216
231
  throw error;
217
232
  }
233
+ // Enhanced CDK Analytics Telemetry
234
+ (0, metadata_resource_1.addConstructMetadata)(this, props);
218
235
  this.routerType = aws_ec2_1.RouterType.VPC_PEERING_CONNECTION;
219
236
  const isCrossAccount = props.requestorVpc.ownerAccountId !== props.acceptorVpc.ownerAccountId;
220
237
  if (!isCrossAccount && props.peerRoleArn) {
@@ -277,7 +294,7 @@ class VPCPeeringConnection extends core_1.Resource {
277
294
  }
278
295
  exports.VPCPeeringConnection = VPCPeeringConnection;
279
296
  _e = JSII_RTTI_SYMBOL_1;
280
- VPCPeeringConnection[_e] = { fqn: "@aws-cdk/aws-ec2-alpha.VPCPeeringConnection", version: "2.176.0-alpha.0" };
297
+ VPCPeeringConnection[_e] = { fqn: "@aws-cdk/aws-ec2-alpha.VPCPeeringConnection", version: "2.178.0-alpha.0" };
281
298
  /**
282
299
  * The gateway or endpoint targeted by the route.
283
300
  */
@@ -292,18 +309,13 @@ class RouteTargetType {
292
309
  }
293
310
  throw error;
294
311
  }
295
- if ((props.gateway && props.endpoint) || (!props.gateway && !props.endpoint)) {
296
- throw new Error('Exactly one of `gateway` or `endpoint` must be specified.');
297
- }
298
- else {
299
- this.gateway = props.gateway;
300
- this.endpoint = props.endpoint;
301
- }
312
+ this.gateway = props.gateway;
313
+ this.endpoint = props.endpoint;
302
314
  }
303
315
  }
304
316
  exports.RouteTargetType = RouteTargetType;
305
317
  _f = JSII_RTTI_SYMBOL_1;
306
- RouteTargetType[_f] = { fqn: "@aws-cdk/aws-ec2-alpha.RouteTargetType", version: "2.176.0-alpha.0" };
318
+ RouteTargetType[_f] = { fqn: "@aws-cdk/aws-ec2-alpha.RouteTargetType", version: "2.178.0-alpha.0" };
307
319
  /**
308
320
  * Creates a new route with added functionality.
309
321
  * @resource AWS::EC2::Route
@@ -320,12 +332,14 @@ class Route extends core_1.Resource {
320
332
  }
321
333
  throw error;
322
334
  }
335
+ // Enhanced CDK Analytics Telemetry
336
+ (0, metadata_resource_1.addConstructMetadata)(this, props);
323
337
  this.target = props.target;
324
338
  this.routeTable = props.routeTable;
325
339
  this.destination = props.destination;
326
340
  const isDestinationIpv4 = util_1.NetworkUtils.validIp(props.destination);
327
341
  if (!isDestinationIpv4) {
328
- //TODO Validate for IPv6 CIDR range
342
+ // TODO Validate for IPv6 CIDR range
329
343
  this.destinationIpv6Cidr = props.destination;
330
344
  }
331
345
  else {
@@ -334,6 +348,9 @@ class Route extends core_1.Resource {
334
348
  if (this.target.gateway?.routerType === aws_ec2_1.RouterType.EGRESS_ONLY_INTERNET_GATEWAY && isDestinationIpv4) {
335
349
  throw new Error('Egress only internet gateway does not support IPv4 routing');
336
350
  }
351
+ if ((props.target.gateway && props.target.endpoint) || (!props.target.gateway && !props.target.endpoint)) {
352
+ throw new Error('Exactly one of `gateway` or `endpoint` must be specified.');
353
+ }
337
354
  this.targetRouterType = this.target.gateway ? this.target.gateway.routerType : aws_ec2_1.RouterType.VPC_ENDPOINT;
338
355
  // Gateway generates route automatically via its RouteTable, thus we don't need to generate the resource for it
339
356
  if (!(this.target.endpoint instanceof aws_ec2_1.GatewayVpcEndpoint)) {
@@ -346,7 +363,7 @@ class Route extends core_1.Resource {
346
363
  });
347
364
  }
348
365
  this.node.defaultChild = this.resource;
349
- //Create a route only after target gateway or endpoint is created
366
+ // Create a route only after target gateway or endpoint is created
350
367
  if (this.target.gateway) {
351
368
  this.node.addDependency(this.target.gateway);
352
369
  }
@@ -357,7 +374,7 @@ class Route extends core_1.Resource {
357
374
  }
358
375
  exports.Route = Route;
359
376
  _g = JSII_RTTI_SYMBOL_1;
360
- Route[_g] = { fqn: "@aws-cdk/aws-ec2-alpha.Route", version: "2.176.0-alpha.0" };
377
+ Route[_g] = { fqn: "@aws-cdk/aws-ec2-alpha.Route", version: "2.178.0-alpha.0" };
361
378
  /**
362
379
  * Creates a route table for the specified VPC
363
380
  * @resource AWS::EC2::RouteTable
@@ -374,6 +391,8 @@ class RouteTable extends core_1.Resource {
374
391
  }
375
392
  throw error;
376
393
  }
394
+ // Enhanced CDK Analytics Telemetry
395
+ (0, metadata_resource_1.addConstructMetadata)(this, props);
377
396
  this.resource = new aws_ec2_1.CfnRouteTable(this, 'RouteTable', {
378
397
  vpcId: props.vpc.vpcId,
379
398
  });
@@ -410,7 +429,10 @@ class RouteTable extends core_1.Resource {
410
429
  }
411
430
  exports.RouteTable = RouteTable;
412
431
  _h = JSII_RTTI_SYMBOL_1;
413
- RouteTable[_h] = { fqn: "@aws-cdk/aws-ec2-alpha.RouteTable", version: "2.176.0-alpha.0" };
432
+ RouteTable[_h] = { fqn: "@aws-cdk/aws-ec2-alpha.RouteTable", version: "2.178.0-alpha.0" };
433
+ __decorate([
434
+ (0, metadata_resource_1.MethodMetadata)()
435
+ ], RouteTable.prototype, "addRoute", null);
414
436
  function routerTypeToPropName(routerType) {
415
437
  return ({
416
438
  [aws_ec2_1.RouterType.CARRIER_GATEWAY]: 'carrierGatewayId',
@@ -425,4 +447,4 @@ function routerTypeToPropName(routerType) {
425
447
  [aws_ec2_1.RouterType.VPC_ENDPOINT]: 'vpcEndpointId',
426
448
  })[routerType];
427
449
  }
428
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxpREFBa1M7QUFFbFMsMkNBQW9GO0FBRXBGLGlDQUFtRTtBQUduRTs7OztHQUlHO0FBQ0gsSUFBWSxtQkFTWDtBQVRELFdBQVksbUJBQW1CO0lBQzdCOztPQUVHO0lBQ0gsd0NBQWlCLENBQUE7SUFDakI7O09BRUc7SUFDSCwwQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBVFcsbUJBQW1CLG1DQUFuQixtQkFBbUIsUUFTOUI7QUE4TEQ7O0dBRUc7QUFDSCxNQUFNLFFBQVEsR0FBVyxNQUFNLENBQUM7QUFFaEM7OztHQUdHO0FBQ0gsTUFBYSx5QkFBMEIsU0FBUSxlQUFRO0lBZ0JyRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXFDO1FBQzdFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7Ozs7OzsrQ0FqQlIseUJBQXlCOzs7O1FBbUJsQyxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1lBQ3hDLFdBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxvQkFBVSxDQUFDLDRCQUE0QixDQUFDO1FBRTFELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxzQ0FBNEIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQzdELEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUs7U0FDdkIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUV2QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO0tBQzVDOztBQTlCSCw4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b0JBQVUsQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFLDZCQUE2QjtRQUN4RSxDQUFDLG9CQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsV0FBVztRQUNqQyxDQUFDLG9CQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsWUFBWTtRQUNuQyxDQUFDLG9CQUFVLENBQUMsYUFBYSxDQUFDLEVBQUUsZ0JBQWdCO1FBQzVDLENBQUMsb0JBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRSxjQUFjO1FBQ3hDLENBQUMsb0JBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLG9CQUFvQjtRQUNwRCxDQUFDLG9CQUFVLENBQUMsZUFBZSxDQUFDLEVBQUUsa0JBQWtCO1FBQ2hELENBQUMsb0JBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLHdCQUF3QjtRQUM3RCxDQUFDLG9CQUFVLENBQUMsWUFBWSxDQUFDLEVBQUUsZUFBZTtLQUMzQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENmbkVJUCwgQ2ZuRWdyZXNzT25seUludGVybmV0R2F0ZXdheSwgQ2ZuSW50ZXJuZXRHYXRld2F5LCBDZm5OYXRHYXRld2F5LCBDZm5WUENQZWVyaW5nQ29ubmVjdGlvbiwgQ2ZuUm91dGUsIENmblJvdXRlVGFibGUsIENmblZQQ0dhdGV3YXlBdHRhY2htZW50LCBDZm5WUE5HYXRld2F5LCBDZm5WUE5HYXRld2F5Um91dGVQcm9wYWdhdGlvbiwgR2F0ZXdheVZwY0VuZHBvaW50LCBJUm91dGVUYWJsZSwgSVZwY0VuZHBvaW50LCBSb3V0ZXJUeXBlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIElEZXBlbmRhYmxlIH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBBbm5vdGF0aW9ucywgRHVyYXRpb24sIElSZXNvdXJjZSwgUmVzb3VyY2UsIFRhZ3MgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcbmltcG9ydCB7IElWcGNWMiwgVlBOR2F0ZXdheVYyT3B0aW9ucyB9IGZyb20gJy4vdnBjLXYyLWJhc2UnO1xuaW1wb3J0IHsgTmV0d29ya1V0aWxzLCBhbGxSb3V0ZVRhYmxlSWRzLCBDaWRyQmxvY2sgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHsgSVN1Ym5ldFYyIH0gZnJvbSAnLi9zdWJuZXQtdjInO1xuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBOQVQgZ2F0ZXdheSBzdXBwb3J0cyBwdWJsaWMgb3IgcHJpdmF0ZSBjb25uZWN0aXZpdHkuXG4gKiBUaGUgZGVmYXVsdCBpcyBwdWJsaWMgY29ubmVjdGl2aXR5LlxuICogU2VlOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLW5hdGdhdGV3YXkuaHRtbCNjZm4tZWMyLW5hdGdhdGV3YXktY29ubmVjdGl2aXR5dHlwZVxuICovXG5leHBvcnQgZW51bSBOYXRDb25uZWN0aXZpdHlUeXBlIHtcbiAgLyoqXG4gICAqIFNldHMgQ29ubmVjdGl2aXR5IHR5cGUgdG8gUFVCTElDXG4gICAqL1xuICBQVUJMSUMgPSAncHVibGljJyxcbiAgLyoqXG4gICAqIFNldHMgQ29ubmVjdGl2aXR5IHR5cGUgdG8gUFJJVkFURVxuICAgKi9cbiAgUFJJVkFURSA9ICdwcml2YXRlJyxcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgdG8gZGVmaW5lIGEgcm91dGluZyB0YXJnZXQsIHN1Y2ggYXMgYW5cbiAqIGVncmVzcy1vbmx5IGludGVybmV0IGdhdGV3YXkgb3IgVlBDIGVuZHBvaW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElSb3V0ZVRhcmdldCBleHRlbmRzIElEZXBlbmRhYmxlIHtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHJvdXRlciB1c2VkIGluIHRoZSByb3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclR5cGU6IFJvdXRlclR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm91dGUgdGFyZ2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVGFyZ2V0SWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBhbiBlZ3Jlc3Mtb25seSBpbnRlcm5ldCBnYXRld2F5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXlQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIFZQQyBmb3Igd2hpY2ggdG8gY3JlYXRlIHRoZSBlZ3Jlc3Mtb25seSBpbnRlcm5ldCBnYXRld2F5LlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjOiBJVnBjVjI7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBuYW1lIG9mIHRoZSBlZ3Jlc3Mtb25seSBpbnRlcm5ldCBnYXRld2F5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHByb3Zpc2lvbmVkIHdpdGhvdXQgYSByZXNvdXJjZSBuYW1lXG4gICAqL1xuICByZWFkb25seSBlZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5TmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBhbiBpbnRlcm5ldCBnYXRld2F5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVybmV0R2F0ZXdheVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgVlBDIGZvciB3aGljaCB0byBjcmVhdGUgdGhlIGludGVybmV0IGdhdGV3YXkuXG4gICAqL1xuICByZWFkb25seSB2cGM6IElWcGNWMjtcblxuICAvKipcbiAgICogVGhlIHJlc291cmNlIG5hbWUgb2YgdGhlIGludGVybmV0IGdhdGV3YXkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcHJvdmlzaW9uZWQgd2l0aG91dCBhIHJlc291cmNlIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGludGVybmV0R2F0ZXdheU5hbWU/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBhIFZQTiBnYXRld2F5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZQTkdhdGV3YXlWMlByb3BzIGV4dGVuZHMgVlBOR2F0ZXdheVYyT3B0aW9ucyB7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgVlBDIGZvciB3aGljaCB0byBjcmVhdGUgdGhlIFZQTiBnYXRld2F5LlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjOiBJVnBjVjI7XG59XG5cbi8qKlxuICogT3B0aW9ucyB0byBkZWZpbmUgYSBOQVQgZ2F0ZXdheS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOYXRHYXRld2F5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgc3VibmV0IGluIHdoaWNoIHRoZSBOQVQgZ2F0ZXdheSBpcyBsb2NhdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc3VibmV0OiBJU3VibmV0VjI7XG5cbiAgLyoqXG4gICAqIEFsbG9jYXRpb25JRCBvZiBFbGFzdGljIElQIGFkZHJlc3MgdGhhdCdzIGFzc29jaWF0ZWQgd2l0aCB0aGUgTkFUIGdhdGV3YXkuIFRoaXMgcHJvcGVydHkgaXMgcmVxdWlyZWQgZm9yIGEgcHVibGljIE5BVFxuICAgKiBnYXRld2F5IGFuZCBjYW5ub3QgYmUgc3BlY2lmaWVkIHdpdGggYSBwcml2YXRlIE5BVCBnYXRld2F5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGF0dHIuYWxsb2NhdGlvbklEIG9mIGEgbmV3IEVsYXN0aWMgSVAgY3JlYXRlZCBieSBkZWZhdWx0XG4gICAqIC8vVE9ETzogQUREIEwyIGZvciBlbGFzdGljIGlwXG4gICAqL1xuICByZWFkb25seSBhbGxvY2F0aW9uSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBOQVQgZ2F0ZXdheSBzdXBwb3J0cyBwdWJsaWMgb3IgcHJpdmF0ZSBjb25uZWN0aXZpdHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5hdENvbm5lY3Rpdml0eVR5cGUuUHVibGljXG4gICAqL1xuICByZWFkb25seSBjb25uZWN0aXZpdHlUeXBlPzogTmF0Q29ubmVjdGl2aXR5VHlwZTtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gYW1vdW50IG9mIHRpbWUgdG8gd2FpdCBiZWZvcmUgZm9yY2libHkgcmVsZWFzaW5nIHRoZVxuICAgKiBJUCBhZGRyZXNzZXMgaWYgY29ubmVjdGlvbnMgYXJlIHN0aWxsIGluIHByb2dyZXNzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAzNTBzZWNvbmRzXG4gICAqL1xuICByZWFkb25seSBtYXhEcmFpbkR1cmF0aW9uPzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBwcml2YXRlIElQdjQgYWRkcmVzcyB0byBhc3NpZ24gdG8gdGhlIE5BVCBnYXRld2F5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIElmIHlvdSBkb24ndCBwcm92aWRlIGFuIGFkZHJlc3MsIGEgcHJpdmF0ZSBJUHY0IGFkZHJlc3Mgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGFzc2lnbmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZUlwQWRkcmVzcz86IHN0cmluZztcblxuICAvKipcbiAgICogU2Vjb25kYXJ5IEVJUCBhbGxvY2F0aW9uIElEcy5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC91c2VyZ3VpZGUvdnBjLW5hdC1nYXRld2F5Lmh0bWwjbmF0LWdhdGV3YXktY3JlYXRpbmdcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBzZWNvbmRhcnkgYWxsb2NhdGlvbiBJRHMgYXR0YWNoZWQgdG8gTkFUR1dcbiAgICpcbiAgICovXG4gIHJlYWRvbmx5IHNlY29uZGFyeUFsbG9jYXRpb25JZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBzZWNvbmRhcnkgcHJpdmF0ZSBJUHY0IGFkZHJlc3NlcyB5b3VcbiAgICogd2FudCB0byBhc3NpZ24gdG8gdGhlIE5BVCBnYXRld2F5LlxuICAgKlxuICAgKiBgU2Vjb25kYXJ5UHJpdmF0ZUlwQWRkcmVzc0NvdW50YCBhbmQgYFNlY29uZGFyeVByaXZhdGVJcEFkZHJlc3Nlc2AgY2Fubm90IGJlXG4gICAqIHNldCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS92cGMtbmF0LWdhdGV3YXkuaHRtbCNuYXQtZ2F0ZXdheS1jcmVhdGluZ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHNlY29uZGFyeSBhbGxvY2F0aW9uIElEcyBhc3NvY2lhdGVkIHdpdGggTkFUR1dcbiAgICovXG4gIHJlYWRvbmx5IHNlY29uZGFyeVByaXZhdGVJcEFkZHJlc3NDb3VudD86IG51bWJlcjtcblxuICAvKipcbiAgICogU2Vjb25kYXJ5IHByaXZhdGUgSVB2NCBhZGRyZXNzZXMuXG4gICAqXG4gICAqIGBTZWNvbmRhcnlQcml2YXRlSXBBZGRyZXNzQ291bnRgIGFuZCBgU2Vjb25kYXJ5UHJpdmF0ZUlwQWRkcmVzc2VzYCBjYW5ub3QgYmVcbiAgICogc2V0IGF0IHRoZSBzYW1lIHRpbWUuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3ZwYy9sYXRlc3QvdXNlcmd1aWRlL3ZwYy1uYXQtZ2F0ZXdheS5odG1sI25hdC1nYXRld2F5LWNyZWF0aW5nXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gc2Vjb25kYXJ5IHByaXZhdGUgSXBBZGRyZXNzZXMgYXNzb2NpYXRlZCB3aXRoIE5BVEdXXG4gICAqL1xuICByZWFkb25seSBzZWNvbmRhcnlQcml2YXRlSXBBZGRyZXNzZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHJlc291cmNlIG5hbWUgb2YgdGhlIE5BVCBnYXRld2F5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5BVEdXIHByb3Zpc2lvbmVkIHdpdGhvdXQgYW55IG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hdEdhdGV3YXlOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gZGVmaW5lIGEgTkFUIGdhdGV3YXkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmF0R2F0ZXdheVByb3BzIGV4dGVuZHMgTmF0R2F0ZXdheU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBWUEMgaW4gd2hpY2ggdGhlIE5BVCBnYXRld2F5IGlzIGxvY2F0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZWxhc3RpYyBpcCBhc3NvY2lhdGVkLCByZXF1aXJlZCBpbiBjYXNlIG9mIHB1YmxpYyBjb25uZWN0aXZpdHkgaWYgYEFsbG9jYXRpb25JZGAgaXMgbm90IGRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IHZwYz86IElWcGNWMjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIGRlZmluZSBhIFZQQyBwZWVyaW5nIGNvbm5lY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVlBDUGVlcmluZ0Nvbm5lY3Rpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBWUEMgdGhhdCBpcyBhY2NlcHRpbmcgdGhlIHBlZXJpbmcgY29ubmVjdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGFjY2VwdG9yVnBjOiBJVnBjVjI7XG5cbiAgLyoqXG4gICAqIFRoZSByb2xlIGFybiBjcmVhdGVkIGluIHRoZSBhY2NlcHRvciBhY2NvdW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHBlZXJSb2xlQXJuIG5lZWRlZCBpZiBub3QgY3Jvc3MgYWNjb3VudCBjb25uZWN0aW9uXG4gICAqL1xuICByZWFkb25seSBwZWVyUm9sZUFybj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJlc291cmNlIG5hbWUgb2YgdGhlIHBlZXJpbmcgY29ubmVjdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBwZWVyaW5nIGNvbm5lY3Rpb24gcHJvdmlzaW9uZWQgd2l0aG91dCBhbnkgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgdnBjUGVlcmluZ0Nvbm5lY3Rpb25OYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gZGVmaW5lIGEgVlBDIHBlZXJpbmcgY29ubmVjdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWUENQZWVyaW5nQ29ubmVjdGlvblByb3BzIGV4dGVuZHMgVlBDUGVlcmluZ0Nvbm5lY3Rpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBWUEMgdGhhdCBpcyByZXF1ZXN0aW5nIHRoZSBwZWVyaW5nIGNvbm5lY3Rpb24uXG4gICAqL1xuICByZWFkb25seSByZXF1ZXN0b3JWcGM6IElWcGNWMjtcbn1cblxuLyoqXG4gKiBOYW1lIHRhZyBjb25zdGFudFxuICovXG5jb25zdCBOQU1FX1RBRzogc3RyaW5nID0gJ05hbWUnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gZWdyZXNzLW9ubHkgaW50ZXJuZXQgZ2F0ZXdheVxuICogQHJlc291cmNlIEFXUzo6RUMyOjpFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5XG4gKi9cbmV4cG9ydCBjbGFzcyBFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5IGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJUm91dGVUYXJnZXQge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygcm91dGVyIHVzZWQgaW4gdGhlIHJvdXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVHlwZTogUm91dGVyVHlwZTtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSByb3V0ZSB0YXJnZXQuXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJUYXJnZXRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZWdyZXNzLW9ubHkgaW50ZXJuZXQgZ2F0ZXdheSBDRk4gcmVzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2U6IENmbkVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXk7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXlQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBpZiAocHJvcHMuZWdyZXNzT25seUludGVybmV0R2F0ZXdheU5hbWUpIHtcbiAgICAgIFRhZ3Mub2YodGhpcykuYWRkKE5BTUVfVEFHLCBwcm9wcy5lZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5TmFtZSk7XG4gICAgfVxuICAgIHRoaXMucm91dGVyVHlwZSA9IFJvdXRlclR5cGUuRUdSRVNTX09OTFlfSU5URVJORVRfR0FURVdBWTtcblxuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgQ2ZuRWdyZXNzT25seUludGVybmV0R2F0ZXdheSh0aGlzLCAnRUlHVycsIHtcbiAgICAgIHZwY0lkOiBwcm9wcy52cGMudnBjSWQsXG4gICAgfSk7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG5cbiAgICB0aGlzLnJvdXRlclRhcmdldElkID0gdGhpcy5yZXNvdXJjZS5hdHRySWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGludGVybmV0IGdhdGV3YXlcbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6SW50ZXJuZXRHYXRld2F5XG4gKi9cbmV4cG9ydCBjbGFzcyBJbnRlcm5ldEdhdGV3YXkgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElSb3V0ZVRhcmdldCB7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiByb3V0ZXIgdXNlZCBpbiB0aGUgcm91dGUuXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJUeXBlOiBSb3V0ZXJUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhcmdldC5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclRhcmdldElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgVlBDIGZvciB3aGljaCB0byBjcmVhdGUgdGhlIGludGVybmV0IGdhdGV3YXkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdnBjSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGludGVybmV0IGdhdGV3YXkgQ0ZOIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlOiBDZm5JbnRlcm5ldEdhdGV3YXk7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEludGVybmV0R2F0ZXdheVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMucm91dGVyVHlwZSA9IFJvdXRlclR5cGUuR0FURVdBWTtcblxuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgQ2ZuSW50ZXJuZXRHYXRld2F5KHRoaXMsICdJR1cnLCB7fSk7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG5cbiAgICB0aGlzLnJvdXRlclRhcmdldElkID0gdGhpcy5yZXNvdXJjZS5hdHRySW50ZXJuZXRHYXRld2F5SWQ7XG4gICAgdGhpcy52cGNJZCA9IHByb3BzLnZwYy52cGNJZDtcblxuICAgIGlmIChwcm9wcy5pbnRlcm5ldEdhdGV3YXlOYW1lKSB7XG4gICAgICBUYWdzLm9mKHRoaXMpLmFkZChOQU1FX1RBRywgcHJvcHMuaW50ZXJuZXRHYXRld2F5TmFtZSk7XG4gICAgfVxuXG4gICAgbmV3IENmblZQQ0dhdGV3YXlBdHRhY2htZW50KHRoaXMsICdHV0F0dGFjaG1lbnQnLCB7XG4gICAgICB2cGNJZDogdGhpcy52cGNJZCxcbiAgICAgIGludGVybmV0R2F0ZXdheUlkOiB0aGlzLnJvdXRlclRhcmdldElkLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHZpcnR1YWwgcHJpdmF0ZSBnYXRld2F5XG4gKiBAcmVzb3VyY2UgQVdTOjpFQzI6OlZQTkdhdGV3YXlcbiAqL1xuZXhwb3J0IGNsYXNzIFZQTkdhdGV3YXlWMiBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVJvdXRlVGFyZ2V0IHtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHJvdXRlciB1c2VkIGluIHRoZSByb3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclR5cGU6IFJvdXRlclR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm91dGUgdGFyZ2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVGFyZ2V0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBWUEMgZm9yIHdoaWNoIHRvIGNyZWF0ZSB0aGUgVlBOIGdhdGV3YXkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdnBjSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFZQTiBnYXRld2F5IENGTiByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogQ2ZuVlBOR2F0ZXdheTtcblxuICAvKipcbiAgICogVGhlIFZQTiBHYXRld2F5IEF0dGFjaG1lbnRcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2F0dGFjaG1lbnQ6IENmblZQQ0dhdGV3YXlBdHRhY2htZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgVlBOIEdhdGV3YXkgUm91dGUgUHJvcGFnYXRpb25cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX3JvdXRlUHJvcGFnYXRpb246IENmblZQTkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBWUE5HYXRld2F5VjJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgcGh5c2ljYWxOYW1lOiBwcm9wcy52cG5HYXRld2F5TmFtZSxcbiAgICB9KTtcblxuICAgIHRoaXMucm91dGVyVHlwZSA9IFJvdXRlclR5cGUuR0FURVdBWTtcblxuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgQ2ZuVlBOR2F0ZXdheSh0aGlzLCAnSUdXJywge1xuICAgICAgdHlwZTogcHJvcHMudHlwZSxcbiAgICAgIGFtYXpvblNpZGVBc246IHByb3BzLmFtYXpvblNpZGVBc24sXG4gICAgfSk7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG5cbiAgICB0aGlzLnJvdXRlclRhcmdldElkID0gdGhpcy5yZXNvdXJjZS5hdHRyVnBuR2F0ZXdheUlkO1xuXG4gICAgdGhpcy52cGNJZCA9IHByb3BzLnZwYy52cGNJZDtcbiAgICB0aGlzLl9hdHRhY2htZW50ID0gbmV3IENmblZQQ0dhdGV3YXlBdHRhY2htZW50KHRoaXMsICdWUENWUE5HVycsIHtcbiAgICAgIHZwY0lkOiB0aGlzLnZwY0lkLFxuICAgICAgdnBuR2F0ZXdheUlkOiB0aGlzLnJlc291cmNlLmF0dHJWcG5HYXRld2F5SWQsXG4gICAgfSk7XG5cbiAgICBpZiAocHJvcHMudnBuR2F0ZXdheU5hbWUpIHtcbiAgICAgIFRhZ3Mub2YodGhpcykuYWRkKE5BTUVfVEFHLCBwcm9wcy52cG5HYXRld2F5TmFtZSk7XG4gICAgfVxuXG4gICAgLy8gUHJvcGFnYXRlIHJvdXRlcyBvbiByb3V0ZSB0YWJsZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSByaWdodCBzdWJuZXRzXG4gICAgY29uc3QgdnBuUm91dGVQcm9wYWdhdGlvbiA9IHByb3BzLnZwblJvdXRlUHJvcGFnYXRpb24gPz8gW107XG4gICAgY29uc3Qgc3VibmV0cyA9IHZwblJvdXRlUHJvcGFnYXRpb24ubWFwKHMgPT4gcHJvcHMudnBjLnNlbGVjdFN1Ym5ldHMocykuc3VibmV0cykuZmxhdCgpO1xuICAgIGNvbnN0IHJvdXRlVGFibGVJZHMgPSBhbGxSb3V0ZVRhYmxlSWRzKHN1Ym5ldHMpO1xuXG4gICAgaWYgKHJvdXRlVGFibGVJZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBBbm5vdGF0aW9ucy5vZihzY29wZSkuYWRkV2FybmluZ1YyKCdAYXdzLWNkazphd3MtZWMyLWVscGhhOmVuYWJsZVZwbkdhdGV3YXlWMicsIGBObyBzdWJuZXRzIG1hdGNoaW5nIHNlbGVjdGlvbjogJyR7SlNPTi5zdHJpbmdpZnkodnBuUm91dGVQcm9wYWdhdGlvbil9Jy4gU2VsZWN0IG90aGVyIHN1Ym5ldHMgdG8gYWRkIHJvdXRlcyB0by5gKTtcbiAgICB9XG5cbiAgICB0aGlzLl9yb3V0ZVByb3BhZ2F0aW9uID0gbmV3IENmblZQTkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uKHRoaXMsICdSb3V0ZVByb3BhZ2F0aW9uJywge1xuICAgICAgcm91dGVUYWJsZUlkcyxcbiAgICAgIHZwbkdhdGV3YXlJZDogdGhpcy5yb3V0ZXJUYXJnZXRJZCxcbiAgICB9KTtcbiAgICAvLyBUaGUgQVdTOjpFQzI6OlZQTkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uIHJlc291cmNlIGNhbm5vdCB1c2UgdGhlIFZQTiBnYXRld2F5XG4gICAgLy8gdW50aWwgaXQgaGFzIHN1Y2Nlc3NmdWxseSBhdHRhY2hlZCB0byB0aGUgVlBDLlxuICAgIC8vIFNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLXZwbi1nYXRld2F5cm91dGVwcm9wLmh0bWxcbiAgICB0aGlzLl9yb3V0ZVByb3BhZ2F0aW9uLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLl9hdHRhY2htZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXR3b3JrIGFkZHJlc3MgdHJhbnNsYXRpb24gKE5BVCkgZ2F0ZXdheVxuICogQHJlc291cmNlIEFXUzo6RUMyOjpOYXRHYXRld2F5XG4gKi9cbmV4cG9ydCBjbGFzcyBOYXRHYXRld2F5IGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJUm91dGVUYXJnZXQge1xuXG4gIC8qKlxuICAgKiBJZCBvZiB0aGUgTmF0R2F0ZXdheVxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmF0R2F0ZXdheUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHJvdXRlciB1c2VkIGluIHRoZSByb3V0ZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb3V0ZXJUeXBlOiBSb3V0ZXJUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhcmdldC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb3V0ZXJUYXJnZXRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgTkFUIGdhdGV3YXkgc3VwcG9ydHMgcHVibGljIG9yIHByaXZhdGUgY29ubmVjdGl2aXR5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBwdWJsaWNcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb25uZWN0aXZpdHlUeXBlPzogTmF0Q29ubmVjdGl2aXR5VHlwZTtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gYW1vdW50IG9mIHRpbWUgdG8gd2FpdCBiZWZvcmUgZm9yY2libHkgcmVsZWFzaW5nIHRoZVxuICAgKiBJUCBhZGRyZXNzZXMgaWYgY29ubmVjdGlvbnMgYXJlIHN0aWxsIGluIHByb2dyZXNzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnMzUwIHNlY29uZHMnXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbWF4RHJhaW5EdXJhdGlvbj86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgTkFUIGdhdGV3YXkgQ0ZOIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlOiBDZm5OYXRHYXRld2F5O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBOYXRHYXRld2F5UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5yb3V0ZXJUeXBlID0gUm91dGVyVHlwZS5OQVRfR0FURVdBWTtcblxuICAgIHRoaXMuY29ubmVjdGl2aXR5VHlwZSA9IHByb3BzLmNvbm5lY3Rpdml0eVR5cGUgfHwgTmF0Q29ubmVjdGl2aXR5VHlwZS5QVUJMSUM7XG4gICAgdGhpcy5tYXhEcmFpbkR1cmF0aW9uID0gcHJvcHMubWF4RHJhaW5EdXJhdGlvbiB8fCBEdXJhdGlvbi5zZWNvbmRzKDM1MCk7XG5cbiAgICBpZiAodGhpcy5jb25uZWN0aXZpdHlUeXBlID09PSBOYXRDb25uZWN0aXZpdHlUeXBlLlBVQkxJQykge1xuICAgICAgaWYgKCFwcm9wcy52cGMgJiYgIXByb3BzLmFsbG9jYXRpb25JZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VpdGhlciBwcm92aWRlIHZwYyBvciBhbGxvY2F0aW9uSWQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocHJvcHMubmF0R2F0ZXdheU5hbWUpIHtcbiAgICAgIFRhZ3Mub2YodGhpcykuYWRkKE5BTUVfVEFHLCBwcm9wcz8ubmF0R2F0ZXdheU5hbWUpO1xuICAgIH1cblxuICAgIC8vIElmIHVzZXIgZG9lcyBub3QgcHJvdmlkZSBFSVAsIGdlbmVyYXRlIG9uZSBmb3IgdGhlbVxuICAgIHZhciBhSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy5jb25uZWN0aXZpdHlUeXBlID09PSBOYXRDb25uZWN0aXZpdHlUeXBlLlBVQkxJQykge1xuICAgICAgaWYgKCFwcm9wcy5hbGxvY2F0aW9uSWQpIHtcbiAgICAgICAgbGV0IGVpcCA9IG5ldyBDZm5FSVAodGhpcywgJ0VJUCcsIHtcbiAgICAgICAgICBkb21haW46IHByb3BzLnZwYz8udnBjSWQsXG4gICAgICAgIH0pO1xuICAgICAgICBhSWQgPSBlaXAuYXR0ckFsbG9jYXRpb25JZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFJZCA9IHByb3BzLmFsbG9jYXRpb25JZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IENmbk5hdEdhdGV3YXkodGhpcywgJ05BVEdhdGV3YXknLCB7XG4gICAgICBzdWJuZXRJZDogcHJvcHMuc3VibmV0LnN1Ym5ldElkLFxuICAgICAgYWxsb2NhdGlvbklkOiBhSWQsXG4gICAgICBtYXhEcmFpbkR1cmF0aW9uU2Vjb25kczogcHJvcHMubWF4RHJhaW5EdXJhdGlvbj8udG9TZWNvbmRzKCksXG4gICAgICBzZWNvbmRhcnlBbGxvY2F0aW9uSWRzOiBwcm9wcy5zZWNvbmRhcnlBbGxvY2F0aW9uSWRzLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gICAgdGhpcy5uYXRHYXRld2F5SWQgPSB0aGlzLnJlc291cmNlLmF0dHJOYXRHYXRld2F5SWQ7XG5cbiAgICB0aGlzLnJvdXRlclRhcmdldElkID0gdGhpcy5yZXNvdXJjZS5hdHRyTmF0R2F0ZXdheUlkO1xuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLnJlc291cmNlO1xuICAgIHRoaXMubm9kZS5hZGREZXBlbmRlbmN5KHByb3BzLnN1Ym5ldC5pbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkKTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBwZWVyaW5nIGNvbm5lY3Rpb24gYmV0d2VlbiB0d28gVlBDc1xuICogQHJlc291cmNlIEFXUzo6RUMyOjpWUENQZWVyaW5nQ29ubmVjdGlvblxuICovXG5leHBvcnQgY2xhc3MgVlBDUGVlcmluZ0Nvbm5lY3Rpb24gZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElSb3V0ZVRhcmdldCB7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHJvdXRlciB1c2VkIGluIHRoZSByb3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclR5cGU6IFJvdXRlclR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm91dGUgdGFyZ2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVGFyZ2V0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFZQQyBwZWVyaW5nIGNvbm5lY3Rpb24gQ0ZOIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlOiBDZm5WUENQZWVyaW5nQ29ubmVjdGlvbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVlBDUGVlcmluZ0Nvbm5lY3Rpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnJvdXRlclR5cGUgPSBSb3V0ZXJUeXBlLlZQQ19QRUVSSU5HX0NPTk5FQ1RJT047XG5cbiAgICBjb25zdCBpc0Nyb3NzQWNjb3VudCA9IHByb3BzLnJlcXVlc3RvclZwYy5vd25lckFjY291bnRJZCAhPT0gcHJvcHMuYWNjZXB0b3JWcGMub3duZXJBY2NvdW50SWQ7XG5cbiAgICBpZiAoIWlzQ3Jvc3NBY2NvdW50ICYmIHByb3BzLnBlZXJSb2xlQXJuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BlZXJSb2xlQXJuIGlzIG5vdCBuZWVkZWQgZm9yIHNhbWUgYWNjb3VudCBwZWVyaW5nJyk7XG4gICAgfVxuXG4gICAgaWYgKGlzQ3Jvc3NBY2NvdW50ICYmICFwcm9wcy5wZWVyUm9sZUFybikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDcm9zcyBhY2NvdW50IFZQQyBwZWVyaW5nIHJlcXVpcmVzIHBlZXJSb2xlQXJuJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3ZlcmxhcCA9IHRoaXMudmFsaWRhdGVWcGNDaWRyT3ZlcmxhcChwcm9wcy5yZXF1ZXN0b3JWcGMsIHByb3BzLmFjY2VwdG9yVnBjKTtcbiAgICBpZiAob3ZlcmxhcCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDSURSIGJsb2NrIHNob3VsZCBub3Qgb3ZlcmxhcCB3aXRoIGVhY2ggb3RoZXIgZm9yIGVzdGFibGlzaGluZyBhIHBlZXJpbmcgY29ubmVjdGlvbicpO1xuICAgIH1cbiAgICBpZiAocHJvcHMudnBjUGVlcmluZ0Nvbm5lY3Rpb25OYW1lKSB7XG4gICAgICBUYWdzLm9mKHRoaXMpLmFkZChOQU1FX1RBRywgcHJvcHMudnBjUGVlcmluZ0Nvbm5lY3Rpb25OYW1lKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IENmblZQQ1BlZXJpbmdDb25uZWN0aW9uKHRoaXMsICdWUENQZWVyaW5nQ29ubmVjdGlvbicsIHtcbiAgICAgIHZwY0lkOiBwcm9wcy5yZXF1ZXN0b3JWcGMudnBjSWQsXG4gICAgICBwZWVyVnBjSWQ6IHByb3BzLmFjY2VwdG9yVnBjLnZwY0lkLFxuICAgICAgcGVlck93bmVySWQ6IHByb3BzLmFjY2VwdG9yVnBjLm93bmVyQWNjb3VudElkLFxuICAgICAgcGVlclJlZ2lvbjogcHJvcHMuYWNjZXB0b3JWcGMucmVnaW9uLFxuICAgICAgcGVlclJvbGVBcm46IGlzQ3Jvc3NBY2NvdW50ID8gcHJvcHMucGVlclJvbGVBcm4gOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICB0aGlzLnJvdXRlclRhcmdldElkID0gdGhpcy5yZXNvdXJjZS5hdHRySWQ7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGlmIHRoZSBwcm92aWRlZCBJUHY0IENJRFIgYmxvY2sgb3ZlcmxhcHMgd2l0aCBleGlzdGluZyBzdWJuZXQgQ0lEUiBibG9ja3Mgd2l0aGluIHRoZSBnaXZlbiBWUEMuXG4gICAqXG4gICAqIEBwYXJhbSByZXF1ZXN0b3JWcGMgVGhlIFZQQyBvZiB0aGUgcmVxdWVzdG9yLlxuICAgKiBAcGFyYW0gYWNjZXB0b3JWcGMgVGhlIFZQQyBvZiB0aGUgYWNjZXB0b3IuXG4gICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIElQdjQgQ0lEUiBibG9jayBvdmVybGFwcyB3aXRoIGVhY2ggb3RoZXIgZm9yIHR3byBWUENzLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVZwY0NpZHJPdmVybGFwKHJlcXVlc3RvclZwYzogSVZwY1YyLCBhY2NlcHRvclZwYzogSVZwY1YyKTogYm9vbGVhbiB7XG5cbiAgICBjb25zdCByZXF1ZXN0b3JDaWRycyA9IFtyZXF1ZXN0b3JWcGMuaXB2NENpZHJCbG9ja107XG4gICAgY29uc3QgYWNjZXB0b3JDaWRycyA9IFthY2NlcHRvclZwYy5pcHY0Q2lkckJsb2NrXTtcblxuICAgIGlmIChyZXF1ZXN0b3JWcGMuc2Vjb25kYXJ5Q2lkckJsb2NrKSB7XG4gICAgICByZXF1ZXN0b3JDaWRycy5wdXNoKC4uLnJlcXVlc3RvclZwYy5zZWNvbmRhcnlDaWRyQmxvY2tcbiAgICAgICAgLm1hcChibG9jayA9PiBibG9jay5jaWRyQmxvY2spXG4gICAgICAgIC5maWx0ZXIoKGNpZHIpOiBjaWRyIGlzIHN0cmluZyA9PiBjaWRyICE9PSB1bmRlZmluZWQpKTtcbiAgICB9XG5cbiAgICBpZiAoYWNjZXB0b3JWcGMuc2Vjb25kYXJ5Q2lkckJsb2NrKSB7XG4gICAgICBhY2NlcHRvckNpZHJzLnB1c2goLi4uYWNjZXB0b3JWcGMuc2Vjb25kYXJ5Q2lkckJsb2NrXG4gICAgICAgIC5tYXAoYmxvY2sgPT4gYmxvY2suY2lkckJsb2NrKVxuICAgICAgICAuZmlsdGVyKChjaWRyKTogY2lkciBpcyBzdHJpbmcgPT4gY2lkciAhPT0gdW5kZWZpbmVkKSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCByZXF1ZXN0b3JDaWRyIG9mIHJlcXVlc3RvckNpZHJzKSB7XG4gICAgICBjb25zdCByZXF1ZXN0b3JSYW5nZSA9IG5ldyBDaWRyQmxvY2socmVxdWVzdG9yQ2lkcik7XG4gICAgICBjb25zdCByZXF1ZXN0b3JJcFJhbmdlOiBbc3RyaW5nLCBzdHJpbmddID0gW3JlcXVlc3RvclJhbmdlLm1pbklwKCksIHJlcXVlc3RvclJhbmdlLm1heElwKCldO1xuXG4gICAgICBmb3IgKGNvbnN0IGFjY2VwdG9yQ2lkciBvZiBhY2NlcHRvckNpZHJzKSB7XG4gICAgICAgIGNvbnN0IGFjY2VwdG9yUmFuZ2UgPSBuZXcgQ2lkckJsb2NrKGFjY2VwdG9yQ2lkcik7XG4gICAgICAgIGNvbnN0IGFjY2VwdG9ySXBSYW5nZTogW3N0cmluZywgc3RyaW5nXSA9IFthY2NlcHRvclJhbmdlLm1pbklwKCksIGFjY2VwdG9yUmFuZ2UubWF4SXAoKV07XG5cbiAgICAgICAgaWYgKHJlcXVlc3RvclJhbmdlLnJhbmdlc092ZXJsYXAoYWNjZXB0b3JJcFJhbmdlLCByZXF1ZXN0b3JJcFJhbmdlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbn1cblxuLyoqXG4gKiBUaGUgdHlwZSBvZiBlbmRwb2ludCBvciBnYXRld2F5IGJlaW5nIHRhcmdldGVkIGJ5IHRoZSByb3V0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSb3V0ZVRhcmdldFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBnYXRld2F5IHJvdXRlIHRhcmdldC4gVGhpcyBpcyB1c2VkIGZvciB0YXJnZXRzIHN1Y2ggYXNcbiAgICogZWdyZXNzLW9ubHkgaW50ZXJuZXQgZ2F0ZXdheSBvciBWUEMgcGVlcmluZyBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRhcmdldCBpcyBub3Qgc2V0IHRvIGEgZ2F0ZXdheSwgaW4gdGhpcyBjYXNlIGFuIGVuZHBvaW50IGlzIG5lZWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGdhdGV3YXk/OiBJUm91dGVUYXJnZXQ7XG5cbiAgLyoqXG4gICAqIFRoZSBlbmRwb2ludCByb3V0ZSB0YXJnZXQuIFRoaXMgaXMgdXNlZCBmb3IgdGFyZ2V0cyBzdWNoIGFzXG4gICAqIFZQQyBlbmRwb2ludHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGFyZ2V0IGlzIG5vdCBzZXQgdG8gYW4gZW5kcG9pbnQsIGluIHRoaXMgY2FzZSBhIGdhdGV3YXkgaXMgbmVlZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZW5kcG9pbnQ/OiBJVnBjRW5kcG9pbnQ7XG59XG5cbi8qKlxuICogVGhlIGdhdGV3YXkgb3IgZW5kcG9pbnQgdGFyZ2V0ZWQgYnkgdGhlIHJvdXRlLlxuICovXG5leHBvcnQgY2xhc3MgUm91dGVUYXJnZXRUeXBlIHtcbiAgLyoqXG4gICAqIFRoZSBnYXRld2F5IHJvdXRlIHRhcmdldC4gVGhpcyBpcyB1c2VkIGZvciB0YXJnZXRzIHN1Y2ggYXNcbiAgICogZWdyZXNzLW9ubHkgaW50ZXJuZXQgZ2F0ZXdheSBvciBWUEMgcGVlcmluZyBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRhcmdldCBpcyBub3Qgc2V0IHRvIGEgZ2F0ZXdheSwgaW4gdGhpcyBjYXNlIGFuIGVuZHBvaW50IGlzIG5lZWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGdhdGV3YXk/OiBJUm91dGVUYXJnZXQ7XG5cbiAgLyoqXG4gICAqIFRoZSBlbmRwb2ludCByb3V0ZSB0YXJnZXQuIFRoaXMgaXMgdXNlZCBmb3IgdGFyZ2V0cyBzdWNoIGFzXG4gICAqIFZQQyBlbmRwb2ludHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGFyZ2V0IGlzIG5vdCBzZXQgdG8gYW4gZW5kcG9pbnQsIGluIHRoaXMgY2FzZSBhIGdhdGV3YXkgaXMgbmVlZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZW5kcG9pbnQ/OiBJVnBjRW5kcG9pbnQ7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFJvdXRlVGFyZ2V0UHJvcHMpIHtcbiAgICBpZiAoKHByb3BzLmdhdGV3YXkgJiYgcHJvcHMuZW5kcG9pbnQpIHx8ICghcHJvcHMuZ2F0ZXdheSAmJiAhcHJvcHMuZW5kcG9pbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4YWN0bHkgb25lIG9mIGBnYXRld2F5YCBvciBgZW5kcG9pbnRgIG11c3QgYmUgc3BlY2lmaWVkLicpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdhdGV3YXkgPSBwcm9wcy5nYXRld2F5O1xuICAgICAgdGhpcy5lbmRwb2ludCA9IHByb3BzLmVuZHBvaW50O1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEludGVyZmFjZSB0byBkZWZpbmUgYSByb3V0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUm91dGVWMiBleHRlbmRzIElSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhYmxlIGZvciB0aGUgcm91dGUuXG4gICAqIEBhdHRyaWJ1dGUgcm91dGVUYWJsZVxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVUYWJsZTogSVJvdXRlVGFibGU7XG5cbiAgLyoqXG4gICAqIFRoZSBJUHY0IG9yIElQdjYgQ0lEUiBibG9jayB1c2VkIGZvciB0aGUgZGVzdGluYXRpb24gbWF0Y2guXG4gICAqXG4gICAqIFJvdXRpbmcgZGVjaXNpb25zIGFyZSBiYXNlZCBvbiB0aGUgbW9zdCBzcGVjaWZpYyBtYXRjaC5cbiAgICogVE9ETzogTG9vayBmb3Igc3Ryb25nIElQIHR5cGUgaW1wbGVtZW50YXRpb24gaGVyZS5cbiAgICovXG4gIHJlYWRvbmx5IGRlc3RpbmF0aW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBnYXRld2F5IG9yIGVuZHBvaW50IHRhcmdldGVkIGJ5IHRoZSByb3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldDogUm91dGVUYXJnZXRUeXBlO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gZGVmaW5lIGEgcm91dGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhYmxlIGZvciB0aGUgcm91dGUuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGUgcm91dGVUYWJsZVxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVUYWJsZTogSVJvdXRlVGFibGU7XG5cbiAgLyoqXG4gICAqIFRoZSBJUHY0IG9yIElQdjYgQ0lEUiBibG9jayB1c2VkIGZvciB0aGUgZGVzdGluYXRpb24gbWF0Y2guXG4gICAqXG4gICAqIFJvdXRpbmcgZGVjaXNpb25zIGFyZSBiYXNlZCBvbiB0aGUgbW9zdCBzcGVjaWZpYyBtYXRjaC5cbiAgICovXG4gIHJlYWRvbmx5IGRlc3RpbmF0aW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBnYXRld2F5IG9yIGVuZHBvaW50IHRhcmdldGVkIGJ5IHRoZSByb3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldDogUm91dGVUYXJnZXRUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgbmFtZSBvZiB0aGUgcm91dGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcHJvdmlzaW9uZWQgd2l0aG91dCBhIHJvdXRlIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHJvdXRlIHdpdGggYWRkZWQgZnVuY3Rpb25hbGl0eS5cbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6Um91dGVcbiAqL1xuZXhwb3J0IGNsYXNzIFJvdXRlIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJUm91dGVWMiB7XG4gIC8qKlxuICAgKiBUaGUgSVB2NCBvciBJUHY2IENJRFIgYmxvY2sgdXNlZCBmb3IgdGhlIGRlc3RpbmF0aW9uIG1hdGNoLlxuICAgKlxuICAgKiBSb3V0aW5nIGRlY2lzaW9ucyBhcmUgYmFzZWQgb24gdGhlIG1vc3Qgc3BlY2lmaWMgbWF0Y2guXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVzdGluYXRpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGdhdGV3YXkgb3IgZW5kcG9pbnQgdGFyZ2V0ZWQgYnkgdGhlIHJvdXRlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRhcmdldDogUm91dGVUYXJnZXRUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgcm91dGUgdGFibGUgZm9yIHRoZSByb3V0ZS5cbiAgICogQGF0dHJpYnV0ZSByb3V0ZVRhYmxlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcm91dGVUYWJsZTogSVJvdXRlVGFibGU7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHJvdXRlciB0aGUgcm91dGUgaXMgdGFyZ2V0aW5nXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGFyZ2V0Um91dGVyVHlwZTogUm91dGVyVHlwZTtcblxuICAvKipcbiAgICogVGhlIHJvdXRlIENGTiByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZT86IENmblJvdXRlO1xuXG4gIC8qKlxuICAgKiBEZXN0aW5hdGlvbiBjaWRyIGJsb2NrIGZvciBpcHY2XG4gICAqL1xuICBwcml2YXRlIGRlc3RpbmF0aW9uSXB2NkNpZHI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERlc3RpbmF0aW9uIGNpZHIgYmxvY2sgZm9yIGlwdjRcbiAgICovXG4gIHByaXZhdGUgZGVzdGluYXRpb25JcHY0Q2lkcj86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUm91dGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnRhcmdldCA9IHByb3BzLnRhcmdldDtcbiAgICB0aGlzLnJvdXRlVGFibGUgPSBwcm9wcy5yb3V0ZVRhYmxlO1xuICAgIHRoaXMuZGVzdGluYXRpb24gPSBwcm9wcy5kZXN0aW5hdGlvbjtcbiAgICBjb25zdCBpc0Rlc3RpbmF0aW9uSXB2NCA9IE5ldHdvcmtVdGlscy52YWxpZElwKHByb3BzLmRlc3RpbmF0aW9uKTtcbiAgICBpZiAoIWlzRGVzdGluYXRpb25JcHY0KSB7XG4gICAgICAvL1RPRE8gVmFsaWRhdGUgZm9yIElQdjYgQ0lEUiByYW5nZVxuICAgICAgdGhpcy5kZXN0aW5hdGlvbklwdjZDaWRyID0gcHJvcHMuZGVzdGluYXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb25JcHY0Q2lkciA9IHByb3BzLmRlc3RpbmF0aW9uO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRhcmdldC5nYXRld2F5Py5yb3V0ZXJUeXBlID09PSBSb3V0ZXJUeXBlLkVHUkVTU19PTkxZX0lOVEVSTkVUX0dBVEVXQVkgJiYgaXNEZXN0aW5hdGlvbklwdjQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRWdyZXNzIG9ubHkgaW50ZXJuZXQgZ2F0ZXdheSBkb2VzIG5vdCBzdXBwb3J0IElQdjQgcm91dGluZycpO1xuICAgIH1cbiAgICB0aGlzLnRhcmdldFJvdXRlclR5cGUgPSB0aGlzLnRhcmdldC5nYXRld2F5ID8gdGhpcy50YXJnZXQuZ2F0ZXdheS5yb3V0ZXJUeXBlIDogUm91dGVyVHlwZS5WUENfRU5EUE9JTlQ7XG4gICAgLy8gR2F0ZXdheSBnZW5lcmF0ZXMgcm91dGUgYXV0b21hdGljYWxseSB2aWEgaXRzIFJvdXRlVGFibGUsIHRodXMgd2UgZG9uJ3QgbmVlZCB0byBnZW5lcmF0ZSB0aGUgcmVzb3VyY2UgZm9yIGl0XG4gICAgaWYgKCEodGhpcy50YXJnZXQuZW5kcG9pbnQgaW5zdGFuY2VvZiBHYXRld2F5VnBjRW5kcG9pbnQpKSB7XG4gICAgICB0aGlzLnJlc291cmNlID0gbmV3IENmblJvdXRlKHRoaXMsICdSb3V0ZScsIHtcbiAgICAgICAgcm91dGVUYWJsZUlkOiB0aGlzLnJvdXRlVGFibGUucm91dGVUYWJsZUlkLFxuICAgICAgICBkZXN0aW5hdGlvbkNpZHJCbG9jazogdGhpcy5kZXN0aW5hdGlvbklwdjRDaWRyLFxuICAgICAgICBkZXN0aW5hdGlvbklwdjZDaWRyQmxvY2s6IHRoaXMuZGVzdGluYXRpb25JcHY2Q2lkcixcbiAgICAgICAgW3JvdXRlclR5cGVUb1Byb3BOYW1lKHRoaXMudGFyZ2V0Um91dGVyVHlwZSldOiB0aGlzLnRhcmdldC5nYXRld2F5ID8gdGhpcy50YXJnZXQuZ2F0ZXdheS5yb3V0ZXJUYXJnZXRJZCA6XG4gICAgICAgICAgdGhpcy50YXJnZXQuZW5kcG9pbnQgPyB0aGlzLnRhcmdldC5lbmRwb2ludC52cGNFbmRwb2ludElkIDogbnVsbCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLm5vZGUuZGVmYXVsdENoaWxkID0gdGhpcy5yZXNvdXJjZTtcblxuICAgIC8vQ3JlYXRlIGEgcm91dGUgb25seSBhZnRlciB0YXJnZXQgZ2F0ZXdheSBvciBlbmRwb2ludCBpcyBjcmVhdGVkXG4gICAgaWYgKHRoaXMudGFyZ2V0LmdhdGV3YXkpIHtcbiAgICAgIHRoaXMubm9kZS5hZGREZXBlbmRlbmN5KHRoaXMudGFyZ2V0LmdhdGV3YXkpO1xuICAgIH1cbiAgICBpZiAodGhpcy50YXJnZXQuZW5kcG9pbnQpIHtcbiAgICAgIHRoaXMubm9kZS5hZGREZXBlbmRlbmN5KHRoaXMudGFyZ2V0LmVuZHBvaW50KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBhIHJvdXRlIHRhYmxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlVGFibGVQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIFZQQy5cbiAgICovXG4gIHJlYWRvbmx5IHZwYzogSVZwY1YyO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgbmFtZSBvZiB0aGUgcm91dGUgdGFibGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcHJvdmlzaW9uZWQgd2l0aG91dCBhIHJvdXRlIHRhYmxlIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlVGFibGVOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSByb3V0ZSB0YWJsZSBmb3IgdGhlIHNwZWNpZmllZCBWUENcbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6Um91dGVUYWJsZVxuICovXG5leHBvcnQgY2xhc3MgUm91dGVUYWJsZSBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVJvdXRlVGFibGUge1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSByb3V0ZSB0YWJsZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb3V0ZVRhYmxlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJvdXRlIHRhYmxlIENGTiByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogQ2ZuUm91dGVUYWJsZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUm91dGVUYWJsZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgQ2ZuUm91dGVUYWJsZSh0aGlzLCAnUm91dGVUYWJsZScsIHtcbiAgICAgIHZwY0lkOiBwcm9wcy52cGMudnBjSWQsXG4gICAgfSk7XG4gICAgaWYgKHByb3BzLnJvdXRlVGFibGVOYW1lKSB7XG4gICAgICBUYWdzLm9mKHRoaXMpLmFkZChOQU1FX1RBRywgcHJvcHMucm91dGVUYWJsZU5hbWUpO1xuICAgIH1cbiAgICB0aGlzLm5vZGUuZGVmYXVsdENoaWxkID0gdGhpcy5yZXNvdXJjZTtcblxuICAgIHRoaXMucm91dGVUYWJsZUlkID0gdGhpcy5yZXNvdXJjZS5hdHRyUm91dGVUYWJsZUlkO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgY3VzdG9tIHJvdXRlIHRvIHRoZSByb3V0ZSB0YWJsZS5cbiAgICpcbiAgICogQHBhcmFtIGRlc3RpbmF0aW9uIFRoZSBJUHY0IG9yIElQdjYgQ0lEUiBibG9jayB1c2VkIGZvciB0aGUgZGVzdGluYXRpb24gbWF0Y2guXG4gICAqIEBwYXJhbSB0YXJnZXQgVGhlIGdhdGV3YXkgb3IgZW5kcG9pbnQgdGFyZ2V0ZWQgYnkgdGhlIHJvdXRlLlxuICAgKiBAcGFyYW0gcm91dGVOYW1lIFRoZSByZXNvdXJjZSBuYW1lIG9mIHRoZSByb3V0ZS5cbiAgICovXG4gIHB1YmxpYyBhZGRSb3V0ZShpZDogc3RyaW5nLCBkZXN0aW5hdGlvbjogc3RyaW5nLCB0YXJnZXQ6IFJvdXRlVGFyZ2V0VHlwZSwgcm91dGVOYW1lPzogc3RyaW5nKSB7XG4gICAgbmV3IFJvdXRlKHRoaXMsIGlkLCB7XG4gICAgICByb3V0ZVRhYmxlOiB0aGlzLFxuICAgICAgZGVzdGluYXRpb246IGRlc3RpbmF0aW9uLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICByb3V0ZU5hbWU6IHJvdXRlTmFtZSxcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiByb3V0ZXJUeXBlVG9Qcm9wTmFtZShyb3V0ZXJUeXBlOiBSb3V0ZXJUeXBlKSB7XG4gIHJldHVybiAoe1xuICAgIFtSb3V0ZXJUeXBlLkNBUlJJRVJfR0FURVdBWV06ICdjYXJyaWVyR2F0ZXdheUlkJyxcbiAgICBbUm91dGVyVHlwZS5FR1JFU1NfT05MWV9JTlRFUk5FVF9HQVRFV0FZXTogJ2VncmVzc09ubHlJbnRlcm5ldEdhdGV3YXlJZCcsXG4gICAgW1JvdXRlclR5cGUuR0FURVdBWV06ICdnYXRld2F5SWQnLFxuICAgIFtSb3V0ZXJUeXBlLklOU1RBTkNFXTogJ2luc3RhbmNlSWQnLFxuICAgIFtSb3V0ZXJUeXBlLkxPQ0FMX0dBVEVXQVldOiAnbG9jYWxHYXRld2F5SWQnLFxuICAgIFtSb3V0ZXJUeXBlLk5BVF9HQVRFV0FZXTogJ25hdEdhdGV3YXlJZCcsXG4gICAgW1JvdXRlclR5cGUuTkVUV09SS19JTlRFUkZBQ0VdOiAnbmV0d29ya0ludGVyZmFjZUlkJyxcbiAgICBbUm91dGVyVHlwZS5UUkFOU0lUX0dBVEVXQVldOiAndHJhbnNpdEdhdGV3YXlJZCcsXG4gICAgW1JvdXRlclR5cGUuVlBDX1BFRVJJTkdfQ09OTkVDVElPTl06ICd2cGNQZWVyaW5nQ29ubmVjdGlvbklkJyxcbiAgICBbUm91dGVyVHlwZS5WUENfRU5EUE9JTlRdOiAndnBjRW5kcG9pbnRJZCcsXG4gIH0pW3JvdXRlclR5cGVdO1xufVxuIl19
450
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxpREFBa1M7QUFFbFMsMkNBQW9GO0FBRXBGLGlDQUFtRTtBQUVuRSw4RUFBOEY7QUFFOUY7Ozs7R0FJRztBQUNILElBQVksbUJBU1g7QUFURCxXQUFZLG1CQUFtQjtJQUM3Qjs7T0FFRztJQUNILHdDQUFpQixDQUFBO0lBQ2pCOztPQUVHO0lBQ0gsMENBQW1CLENBQUE7QUFDckIsQ0FBQyxFQVRXLG1CQUFtQixtQ0FBbkIsbUJBQW1CLFFBUzlCO0FBOExEOztHQUVHO0FBQ0gsTUFBTSxRQUFRLEdBQVcsTUFBTSxDQUFDO0FBRWhDOzs7R0FHRztBQUNILE1BQWEseUJBQTBCLFNBQVEsZUFBUTtJQWdCckQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFxQztRQUM3RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDOzs7Ozs7K0NBakJSLHlCQUF5Qjs7OztRQWtCbEMsbUNBQW1DO1FBQ25DLElBQUEsd0NBQW9CLEVBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRWxDLElBQUksS0FBSyxDQUFDLDZCQUE2QixFQUFFLENBQUM7WUFDeEMsV0FBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLG9CQUFVLENBQUMsNEJBQTRCLENBQUM7UUFFMUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLHNDQUE0QixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7WUFDN0QsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSztTQUN2QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMs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QVUsQ0FBQyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5FSVAsIENmbkVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXksIENmbkludGVybmV0R2F0ZXdheSwgQ2ZuTmF0R2F0ZXdheSwgQ2ZuVlBDUGVlcmluZ0Nvbm5lY3Rpb24sIENmblJvdXRlLCBDZm5Sb3V0ZVRhYmxlLCBDZm5WUENHYXRld2F5QXR0YWNobWVudCwgQ2ZuVlBOR2F0ZXdheSwgQ2ZuVlBOR2F0ZXdheVJvdXRlUHJvcGFnYXRpb24sIEdhdGV3YXlWcGNFbmRwb2ludCwgSVJvdXRlVGFibGUsIElWcGNFbmRwb2ludCwgUm91dGVyVHlwZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgQ29uc3RydWN0LCBJRGVwZW5kYWJsZSB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQW5ub3RhdGlvbnMsIER1cmF0aW9uLCBJUmVzb3VyY2UsIFJlc291cmNlLCBUYWdzIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZSc7XG5pbXBvcnQgeyBJVnBjVjIsIFZQTkdhdGV3YXlWMk9wdGlvbnMgfSBmcm9tICcuL3ZwYy12Mi1iYXNlJztcbmltcG9ydCB7IE5ldHdvcmtVdGlscywgYWxsUm91dGVUYWJsZUlkcywgQ2lkckJsb2NrIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7IElTdWJuZXRWMiB9IGZyb20gJy4vc3VibmV0LXYyJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhLCBNZXRob2RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcblxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgTkFUIGdhdGV3YXkgc3VwcG9ydHMgcHVibGljIG9yIHByaXZhdGUgY29ubmVjdGl2aXR5LlxuICogVGhlIGRlZmF1bHQgaXMgcHVibGljIGNvbm5lY3Rpdml0eS5cbiAqIFNlZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1uYXRnYXRld2F5Lmh0bWwjY2ZuLWVjMi1uYXRnYXRld2F5LWNvbm5lY3Rpdml0eXR5cGVcbiAqL1xuZXhwb3J0IGVudW0gTmF0Q29ubmVjdGl2aXR5VHlwZSB7XG4gIC8qKlxuICAgKiBTZXRzIENvbm5lY3Rpdml0eSB0eXBlIHRvIFBVQkxJQ1xuICAgKi9cbiAgUFVCTElDID0gJ3B1YmxpYycsXG4gIC8qKlxuICAgKiBTZXRzIENvbm5lY3Rpdml0eSB0eXBlIHRvIFBSSVZBVEVcbiAgICovXG4gIFBSSVZBVEUgPSAncHJpdmF0ZScsXG59XG5cbi8qKlxuICogSW50ZXJmYWNlIHRvIGRlZmluZSBhIHJvdXRpbmcgdGFyZ2V0LCBzdWNoIGFzIGFuXG4gKiBlZ3Jlc3Mtb25seSBpbnRlcm5ldCBnYXRld2F5IG9yIFZQQyBlbmRwb2ludC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUm91dGVUYXJnZXQgZXh0ZW5kcyBJRGVwZW5kYWJsZSB7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiByb3V0ZXIgdXNlZCBpbiB0aGUgcm91dGUuXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJUeXBlOiBSb3V0ZXJUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhcmdldC5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclRhcmdldElkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyB0byBkZWZpbmUgYW4gZWdyZXNzLW9ubHkgaW50ZXJuZXQgZ2F0ZXdheS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5UHJvcHMge1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBWUEMgZm9yIHdoaWNoIHRvIGNyZWF0ZSB0aGUgZWdyZXNzLW9ubHkgaW50ZXJuZXQgZ2F0ZXdheS5cbiAgICovXG4gIHJlYWRvbmx5IHZwYzogSVZwY1YyO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgbmFtZSBvZiB0aGUgZWdyZXNzLW9ubHkgaW50ZXJuZXQgZ2F0ZXdheS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBwcm92aXNpb25lZCB3aXRob3V0IGEgcmVzb3VyY2UgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgZWdyZXNzT25seUludGVybmV0R2F0ZXdheU5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyB0byBkZWZpbmUgYW4gaW50ZXJuZXQgZ2F0ZXdheS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlcm5ldEdhdGV3YXlQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIFZQQyBmb3Igd2hpY2ggdG8gY3JlYXRlIHRoZSBpbnRlcm5ldCBnYXRld2F5LlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjOiBJVnBjVjI7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBuYW1lIG9mIHRoZSBpbnRlcm5ldCBnYXRld2F5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHByb3Zpc2lvbmVkIHdpdGhvdXQgYSByZXNvdXJjZSBuYW1lXG4gICAqL1xuICByZWFkb25seSBpbnRlcm5ldEdhdGV3YXlOYW1lPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogUHJvcGVydGllcyB0byBkZWZpbmUgYSBWUE4gZ2F0ZXdheS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWUE5HYXRld2F5VjJQcm9wcyBleHRlbmRzIFZQTkdhdGV3YXlWMk9wdGlvbnMge1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIFZQQyBmb3Igd2hpY2ggdG8gY3JlYXRlIHRoZSBWUE4gZ2F0ZXdheS5cbiAgICovXG4gIHJlYWRvbmx5IHZwYzogSVZwY1YyO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgdG8gZGVmaW5lIGEgTkFUIGdhdGV3YXkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmF0R2F0ZXdheU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHN1Ym5ldCBpbiB3aGljaCB0aGUgTkFUIGdhdGV3YXkgaXMgbG9jYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHN1Ym5ldDogSVN1Ym5ldFYyO1xuXG4gIC8qKlxuICAgKiBBbGxvY2F0aW9uSUQgb2YgRWxhc3RpYyBJUCBhZGRyZXNzIHRoYXQncyBhc3NvY2lhdGVkIHdpdGggdGhlIE5BVCBnYXRld2F5LiBUaGlzIHByb3BlcnR5IGlzIHJlcXVpcmVkIGZvciBhIHB1YmxpYyBOQVRcbiAgICogZ2F0ZXdheSBhbmQgY2Fubm90IGJlIHNwZWNpZmllZCB3aXRoIGEgcHJpdmF0ZSBOQVQgZ2F0ZXdheS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhdHRyLmFsbG9jYXRpb25JRCBvZiBhIG5ldyBFbGFzdGljIElQIGNyZWF0ZWQgYnkgZGVmYXVsdFxuICAgKiAvL1RPRE86IEFERCBMMiBmb3IgZWxhc3RpYyBpcFxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb2NhdGlvbklkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgTkFUIGdhdGV3YXkgc3VwcG9ydHMgcHVibGljIG9yIHByaXZhdGUgY29ubmVjdGl2aXR5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBOYXRDb25uZWN0aXZpdHlUeXBlLlB1YmxpY1xuICAgKi9cbiAgcmVhZG9ubHkgY29ubmVjdGl2aXR5VHlwZT86IE5hdENvbm5lY3Rpdml0eVR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIGFtb3VudCBvZiB0aW1lIHRvIHdhaXQgYmVmb3JlIGZvcmNpYmx5IHJlbGVhc2luZyB0aGVcbiAgICogSVAgYWRkcmVzc2VzIGlmIGNvbm5lY3Rpb25zIGFyZSBzdGlsbCBpbiBwcm9ncmVzcy5cbiAgICpcbiAgICogQGRlZmF1bHQgMzUwc2Vjb25kc1xuICAgKi9cbiAgcmVhZG9ubHkgbWF4RHJhaW5EdXJhdGlvbj86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpdmF0ZSBJUHY0IGFkZHJlc3MgdG8gYXNzaWduIHRvIHRoZSBOQVQgZ2F0ZXdheS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBJZiB5b3UgZG9uJ3QgcHJvdmlkZSBhbiBhZGRyZXNzLCBhIHByaXZhdGUgSVB2NCBhZGRyZXNzIHdpbGwgYmUgYXV0b21hdGljYWxseSBhc3NpZ25lZC5cbiAgICovXG4gIHJlYWRvbmx5IHByaXZhdGVJcEFkZHJlc3M/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNlY29uZGFyeSBFSVAgYWxsb2NhdGlvbiBJRHMuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3ZwYy9sYXRlc3QvdXNlcmd1aWRlL3ZwYy1uYXQtZ2F0ZXdheS5odG1sI25hdC1nYXRld2F5LWNyZWF0aW5nXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gc2Vjb25kYXJ5IGFsbG9jYXRpb24gSURzIGF0dGFjaGVkIHRvIE5BVEdXXG4gICAqXG4gICAqL1xuICByZWFkb25seSBzZWNvbmRhcnlBbGxvY2F0aW9uSWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2Ygc2Vjb25kYXJ5IHByaXZhdGUgSVB2NCBhZGRyZXNzZXMgeW91XG4gICAqIHdhbnQgdG8gYXNzaWduIHRvIHRoZSBOQVQgZ2F0ZXdheS5cbiAgICpcbiAgICogYFNlY29uZGFyeVByaXZhdGVJcEFkZHJlc3NDb3VudGAgYW5kIGBTZWNvbmRhcnlQcml2YXRlSXBBZGRyZXNzZXNgIGNhbm5vdCBiZVxuICAgKiBzZXQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC91c2VyZ3VpZGUvdnBjLW5hdC1nYXRld2F5Lmh0bWwjbmF0LWdhdGV3YXktY3JlYXRpbmdcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBzZWNvbmRhcnkgYWxsb2NhdGlvbiBJRHMgYXNzb2NpYXRlZCB3aXRoIE5BVEdXXG4gICAqL1xuICByZWFkb25seSBzZWNvbmRhcnlQcml2YXRlSXBBZGRyZXNzQ291bnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNlY29uZGFyeSBwcml2YXRlIElQdjQgYWRkcmVzc2VzLlxuICAgKlxuICAgKiBgU2Vjb25kYXJ5UHJpdmF0ZUlwQWRkcmVzc0NvdW50YCBhbmQgYFNlY29uZGFyeVByaXZhdGVJcEFkZHJlc3Nlc2AgY2Fubm90IGJlXG4gICAqIHNldCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS92cGMtbmF0LWdhdGV3YXkuaHRtbCNuYXQtZ2F0ZXdheS1jcmVhdGluZ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHNlY29uZGFyeSBwcml2YXRlIElwQWRkcmVzc2VzIGFzc29jaWF0ZWQgd2l0aCBOQVRHV1xuICAgKi9cbiAgcmVhZG9ubHkgc2Vjb25kYXJ5UHJpdmF0ZUlwQWRkcmVzc2VzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBuYW1lIG9mIHRoZSBOQVQgZ2F0ZXdheS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBOQVRHVyBwcm92aXNpb25lZCB3aXRob3V0IGFueSBuYW1lXG4gICAqL1xuICByZWFkb25seSBuYXRHYXRld2F5TmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBhIE5BVCBnYXRld2F5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5hdEdhdGV3YXlQcm9wcyBleHRlbmRzIE5hdEdhdGV3YXlPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgVlBDIGluIHdoaWNoIHRoZSBOQVQgZ2F0ZXdheSBpcyBsb2NhdGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGVsYXN0aWMgaXAgYXNzb2NpYXRlZCwgcmVxdWlyZWQgaW4gY2FzZSBvZiBwdWJsaWMgY29ubmVjdGl2aXR5IGlmIGBBbGxvY2F0aW9uSWRgIGlzIG5vdCBkZWZpbmVkXG4gICAqL1xuICByZWFkb25seSB2cGM/OiBJVnBjVjI7XG59XG5cbi8qKlxuICogT3B0aW9ucyB0byBkZWZpbmUgYSBWUEMgcGVlcmluZyBjb25uZWN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZQQ1BlZXJpbmdDb25uZWN0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgVlBDIHRoYXQgaXMgYWNjZXB0aW5nIHRoZSBwZWVyaW5nIGNvbm5lY3Rpb24uXG4gICAqL1xuICByZWFkb25seSBhY2NlcHRvclZwYzogSVZwY1YyO1xuXG4gIC8qKlxuICAgKiBUaGUgcm9sZSBhcm4gY3JlYXRlZCBpbiB0aGUgYWNjZXB0b3IgYWNjb3VudC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBwZWVyUm9sZUFybiBuZWVkZWQgaWYgbm90IGNyb3NzIGFjY291bnQgY29ubmVjdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcGVlclJvbGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBuYW1lIG9mIHRoZSBwZWVyaW5nIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcGVlcmluZyBjb25uZWN0aW9uIHByb3Zpc2lvbmVkIHdpdGhvdXQgYW55IG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHZwY1BlZXJpbmdDb25uZWN0aW9uTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBhIFZQQyBwZWVyaW5nIGNvbm5lY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVlBDUGVlcmluZ0Nvbm5lY3Rpb25Qcm9wcyBleHRlbmRzIFZQQ1BlZXJpbmdDb25uZWN0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgVlBDIHRoYXQgaXMgcmVxdWVzdGluZyB0aGUgcGVlcmluZyBjb25uZWN0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWVzdG9yVnBjOiBJVnBjVjI7XG59XG5cbi8qKlxuICogTmFtZSB0YWcgY29uc3RhbnRcbiAqL1xuY29uc3QgTkFNRV9UQUc6IHN0cmluZyA9ICdOYW1lJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGVncmVzcy1vbmx5IGludGVybmV0IGdhdGV3YXlcbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6RWdyZXNzT25seUludGVybmV0R2F0ZXdheVxuICovXG5leHBvcnQgY2xhc3MgRWdyZXNzT25seUludGVybmV0R2F0ZXdheSBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVJvdXRlVGFyZ2V0IHtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHJvdXRlciB1c2VkIGluIHRoZSByb3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclR5cGU6IFJvdXRlclR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm91dGUgdGFyZ2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVGFyZ2V0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGVncmVzcy1vbmx5IGludGVybmV0IGdhdGV3YXkgQ0ZOIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlOiBDZm5FZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgaWYgKHByb3BzLmVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXlOYW1lKSB7XG4gICAgICBUYWdzLm9mKHRoaXMpLmFkZChOQU1FX1RBRywgcHJvcHMuZWdyZXNzT25seUludGVybmV0R2F0ZXdheU5hbWUpO1xuICAgIH1cbiAgICB0aGlzLnJvdXRlclR5cGUgPSBSb3V0ZXJUeXBlLkVHUkVTU19PTkxZX0lOVEVSTkVUX0dBVEVXQVk7XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IENmbkVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXkodGhpcywgJ0VJR1cnLCB7XG4gICAgICB2cGNJZDogcHJvcHMudnBjLnZwY0lkLFxuICAgIH0pO1xuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLnJlc291cmNlO1xuXG4gICAgdGhpcy5yb3V0ZXJUYXJnZXRJZCA9IHRoaXMucmVzb3VyY2UuYXR0cklkO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBpbnRlcm5ldCBnYXRld2F5XG4gKiBAcmVzb3VyY2UgQVdTOjpFQzI6OkludGVybmV0R2F0ZXdheVxuICovXG5leHBvcnQgY2xhc3MgSW50ZXJuZXRHYXRld2F5IGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJUm91dGVUYXJnZXQge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygcm91dGVyIHVzZWQgaW4gdGhlIHJvdXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVHlwZTogUm91dGVyVHlwZTtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSByb3V0ZSB0YXJnZXQuXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJUYXJnZXRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIFZQQyBmb3Igd2hpY2ggdG8gY3JlYXRlIHRoZSBpbnRlcm5ldCBnYXRld2F5LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZwY0lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnRlcm5ldCBnYXRld2F5IENGTiByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogQ2ZuSW50ZXJuZXRHYXRld2F5O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJbnRlcm5ldEdhdGV3YXlQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICB0aGlzLnJvdXRlclR5cGUgPSBSb3V0ZXJUeXBlLkdBVEVXQVk7XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IENmbkludGVybmV0R2F0ZXdheSh0aGlzLCAnSUdXJywge30pO1xuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLnJlc291cmNlO1xuXG4gICAgdGhpcy5yb3V0ZXJUYXJnZXRJZCA9IHRoaXMucmVzb3VyY2UuYXR0ckludGVybmV0R2F0ZXdheUlkO1xuICAgIHRoaXMudnBjSWQgPSBwcm9wcy52cGMudnBjSWQ7XG5cbiAgICBpZiAocHJvcHMuaW50ZXJuZXRHYXRld2F5TmFtZSkge1xuICAgICAgVGFncy5vZih0aGlzKS5hZGQoTkFNRV9UQUcsIHByb3BzLmludGVybmV0R2F0ZXdheU5hbWUpO1xuICAgIH1cblxuICAgIG5ldyBDZm5WUENHYXRld2F5QXR0YWNobWVudCh0aGlzLCAnR1dBdHRhY2htZW50Jywge1xuICAgICAgdnBjSWQ6IHRoaXMudnBjSWQsXG4gICAgICBpbnRlcm5ldEdhdGV3YXlJZDogdGhpcy5yb3V0ZXJUYXJnZXRJZCxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB2aXJ0dWFsIHByaXZhdGUgZ2F0ZXdheVxuICogQHJlc291cmNlIEFXUzo6RUMyOjpWUE5HYXRld2F5XG4gKi9cbmV4cG9ydCBjbGFzcyBWUE5HYXRld2F5VjIgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElSb3V0ZVRhcmdldCB7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiByb3V0ZXIgdXNlZCBpbiB0aGUgcm91dGUuXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJUeXBlOiBSb3V0ZXJUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhcmdldC5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclRhcmdldElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgVlBDIGZvciB3aGljaCB0byBjcmVhdGUgdGhlIFZQTiBnYXRld2F5LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZwY0lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBWUE4gZ2F0ZXdheSBDRk4gcmVzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2U6IENmblZQTkdhdGV3YXk7XG5cbiAgLyoqXG4gICAqIFRoZSBWUE4gR2F0ZXdheSBBdHRhY2htZW50XG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9hdHRhY2htZW50OiBDZm5WUENHYXRld2F5QXR0YWNobWVudDtcblxuICAvKipcbiAgICogVGhlIFZQTiBHYXRld2F5IFJvdXRlIFByb3BhZ2F0aW9uXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9yb3V0ZVByb3BhZ2F0aW9uOiBDZm5WUE5HYXRld2F5Um91dGVQcm9wYWdhdGlvbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVlBOR2F0ZXdheVYyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHMudnBuR2F0ZXdheU5hbWUsXG4gICAgfSk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICB0aGlzLnJvdXRlclR5cGUgPSBSb3V0ZXJUeXBlLkdBVEVXQVk7XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IENmblZQTkdhdGV3YXkodGhpcywgJ0lHVycsIHtcbiAgICAgIHR5cGU6IHByb3BzLnR5cGUsXG4gICAgICBhbWF6b25TaWRlQXNuOiBwcm9wcy5hbWF6b25TaWRlQXNuLFxuICAgIH0pO1xuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLnJlc291cmNlO1xuXG4gICAgdGhpcy5yb3V0ZXJUYXJnZXRJZCA9IHRoaXMucmVzb3VyY2UuYXR0clZwbkdhdGV3YXlJZDtcblxuICAgIHRoaXMudnBjSWQgPSBwcm9wcy52cGMudnBjSWQ7XG4gICAgdGhpcy5fYXR0YWNobWVudCA9IG5ldyBDZm5WUENHYXRld2F5QXR0YWNobWVudCh0aGlzLCAnVlBDVlBOR1cnLCB7XG4gICAgICB2cGNJZDogdGhpcy52cGNJZCxcbiAgICAgIHZwbkdhdGV3YXlJZDogdGhpcy5yZXNvdXJjZS5hdHRyVnBuR2F0ZXdheUlkLFxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLnZwbkdhdGV3YXlOYW1lKSB7XG4gICAgICBUYWdzLm9mKHRoaXMpLmFkZChOQU1FX1RBRywgcHJvcHMudnBuR2F0ZXdheU5hbWUpO1xuICAgIH1cblxuICAgIC8vIFByb3BhZ2F0ZSByb3V0ZXMgb24gcm91dGUgdGFibGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmlnaHQgc3VibmV0c1xuICAgIGNvbnN0IHZwblJvdXRlUHJvcGFnYXRpb24gPSBwcm9wcy52cG5Sb3V0ZVByb3BhZ2F0aW9uID8/IFtdO1xuICAgIGNvbnN0IHN1Ym5ldHMgPSB2cG5Sb3V0ZVByb3BhZ2F0aW9uLm1hcChzID0+IHByb3BzLnZwYy5zZWxlY3RTdWJuZXRzKHMpLnN1Ym5ldHMpLmZsYXQoKTtcbiAgICBjb25zdCByb3V0ZVRhYmxlSWRzID0gYWxsUm91dGVUYWJsZUlkcyhzdWJuZXRzKTtcblxuICAgIGlmIChyb3V0ZVRhYmxlSWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgQW5ub3RhdGlvbnMub2Yoc2NvcGUpLmFkZFdhcm5pbmdWMignQGF3cy1jZGs6YXdzLWVjMi1lbHBoYTplbmFibGVWcG5HYXRld2F5VjInLCBgTm8gc3VibmV0cyBtYXRjaGluZyBzZWxlY3Rpb246ICcke0pTT04uc3RyaW5naWZ5KHZwblJvdXRlUHJvcGFnYXRpb24pfScuIFNlbGVjdCBvdGhlciBzdWJuZXRzIHRvIGFkZCByb3V0ZXMgdG8uYCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcm91dGVQcm9wYWdhdGlvbiA9IG5ldyBDZm5WUE5HYXRld2F5Um91dGVQcm9wYWdhdGlvbih0aGlzLCAnUm91dGVQcm9wYWdhdGlvbicsIHtcbiAgICAgIHJvdXRlVGFibGVJZHMsXG4gICAgICB2cG5HYXRld2F5SWQ6IHRoaXMucm91dGVyVGFyZ2V0SWQsXG4gICAgfSk7XG4gICAgLy8gVGhlIEFXUzo6RUMyOjpWUE5HYXRld2F5Um91dGVQcm9wYWdhdGlvbiByZXNvdXJjZSBjYW5ub3QgdXNlIHRoZSBWUE4gZ2F0ZXdheVxuICAgIC8vIHVudGlsIGl0IGhhcyBzdWNjZXNzZnVsbHkgYXR0YWNoZWQgdG8gdGhlIFZQQy5cbiAgICAvLyBTZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi12cG4tZ2F0ZXdheXJvdXRlcHJvcC5odG1sXG4gICAgdGhpcy5fcm91dGVQcm9wYWdhdGlvbi5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy5fYXR0YWNobWVudCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV0d29yayBhZGRyZXNzIHRyYW5zbGF0aW9uIChOQVQpIGdhdGV3YXlcbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6TmF0R2F0ZXdheVxuICovXG5leHBvcnQgY2xhc3MgTmF0R2F0ZXdheSBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVJvdXRlVGFyZ2V0IHtcbiAgLyoqXG4gICAqIElkIG9mIHRoZSBOYXRHYXRld2F5XG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuYXRHYXRld2F5SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygcm91dGVyIHVzZWQgaW4gdGhlIHJvdXRlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJvdXRlclR5cGU6IFJvdXRlclR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm91dGUgdGFyZ2V0LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJvdXRlclRhcmdldElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBOQVQgZ2F0ZXdheSBzdXBwb3J0cyBwdWJsaWMgb3IgcHJpdmF0ZSBjb25uZWN0aXZpdHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IHB1YmxpY1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3Rpdml0eVR5cGU/OiBOYXRDb25uZWN0aXZpdHlUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBhbW91bnQgb2YgdGltZSB0byB3YWl0IGJlZm9yZSBmb3JjaWJseSByZWxlYXNpbmcgdGhlXG4gICAqIElQIGFkZHJlc3NlcyBpZiBjb25uZWN0aW9ucyBhcmUgc3RpbGwgaW4gcHJvZ3Jlc3MuXG4gICAqXG4gICAqIEBkZWZhdWx0ICczNTAgc2Vjb25kcydcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtYXhEcmFpbkR1cmF0aW9uPzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBOQVQgZ2F0ZXdheSBDRk4gcmVzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2U6IENmbk5hdEdhdGV3YXk7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE5hdEdhdGV3YXlQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICB0aGlzLnJvdXRlclR5cGUgPSBSb3V0ZXJUeXBlLk5BVF9HQVRFV0FZO1xuXG4gICAgdGhpcy5jb25uZWN0aXZpdHlUeXBlID0gcHJvcHMuY29ubmVjdGl2aXR5VHlwZSB8fCBOYXRDb25uZWN0aXZpdHlUeXBlLlBVQkxJQztcbiAgICB0aGlzLm1heERyYWluRHVyYXRpb24gPSBwcm9wcy5tYXhEcmFpbkR1cmF0aW9uIHx8IER1cmF0aW9uLnNlY29uZHMoMzUwKTtcblxuICAgIGlmICh0aGlzLmNvbm5lY3Rpdml0eVR5cGUgPT09IE5hdENvbm5lY3Rpdml0eVR5cGUuUFVCTElDKSB7XG4gICAgICBpZiAoIXByb3BzLnZwYyAmJiAhcHJvcHMuYWxsb2NhdGlvbklkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRWl0aGVyIHByb3ZpZGUgdnBjIG9yIGFsbG9jYXRpb25JZCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcm9wcy5uYXRHYXRld2F5TmFtZSkge1xuICAgICAgVGFncy5vZih0aGlzKS5hZGQoTkFNRV9UQUcsIHByb3BzPy5uYXRHYXRld2F5TmFtZSk7XG4gICAgfVxuXG4gICAgLy8gSWYgdXNlciBkb2VzIG5vdCBwcm92aWRlIEVJUCwgZ2VuZXJhdGUgb25lIGZvciB0aGVtXG4gICAgdmFyIGFJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLmNvbm5lY3Rpdml0eVR5cGUgPT09IE5hdENvbm5lY3Rpdml0eVR5cGUuUFVCTElDKSB7XG4gICAgICBpZiAoIXByb3BzLmFsbG9jYXRpb25JZCkge1xuICAgICAgICBsZXQgZWlwID0gbmV3IENmbkVJUCh0aGlzLCAnRUlQJywge1xuICAgICAgICAgIGRvbWFpbjogcHJvcHMudnBjPy52cGNJZCxcbiAgICAgICAgfSk7XG4gICAgICAgIGFJZCA9IGVpcC5hdHRyQWxsb2NhdGlvbklkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYUlkID0gcHJvcHMuYWxsb2NhdGlvbklkO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgQ2ZuTmF0R2F0ZXdheSh0aGlzLCAnTkFUR2F0ZXdheScsIHtcbiAgICAgIHN1Ym5ldElkOiBwcm9wcy5zdWJuZXQuc3VibmV0SWQsXG4gICAgICBhbGxvY2F0aW9uSWQ6IGFJZCxcbiAgICAgIG1heERyYWluRHVyYXRpb25TZWNvbmRzOiBwcm9wcy5tYXhEcmFpbkR1cmF0aW9uPy50b1NlY29uZHMoKSxcbiAgICAgIHNlY29uZGFyeUFsbG9jYXRpb25JZHM6IHByb3BzLnNlY29uZGFyeUFsbG9jYXRpb25JZHMsXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgICB0aGlzLm5hdEdhdGV3YXlJZCA9IHRoaXMucmVzb3VyY2UuYXR0ck5hdEdhdGV3YXlJZDtcblxuICAgIHRoaXMucm91dGVyVGFyZ2V0SWQgPSB0aGlzLnJlc291cmNlLmF0dHJOYXRHYXRld2F5SWQ7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG4gICAgdGhpcy5ub2RlLmFkZERlcGVuZGVuY3kocHJvcHMuc3VibmV0LmludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQpO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHBlZXJpbmcgY29ubmVjdGlvbiBiZXR3ZWVuIHR3byBWUENzXG4gKiBAcmVzb3VyY2UgQVdTOjpFQzI6OlZQQ1BlZXJpbmdDb25uZWN0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBWUENQZWVyaW5nQ29ubmVjdGlvbiBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVJvdXRlVGFyZ2V0IHtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHJvdXRlciB1c2VkIGluIHRoZSByb3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclR5cGU6IFJvdXRlclR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm91dGUgdGFyZ2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVGFyZ2V0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFZQQyBwZWVyaW5nIGNvbm5lY3Rpb24gQ0ZOIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlOiBDZm5WUENQZWVyaW5nQ29ubmVjdGlvbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVlBDUGVlcmluZ0Nvbm5lY3Rpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICB0aGlzLnJvdXRlclR5cGUgPSBSb3V0ZXJUeXBlLlZQQ19QRUVSSU5HX0NPTk5FQ1RJT047XG5cbiAgICBjb25zdCBpc0Nyb3NzQWNjb3VudCA9IHByb3BzLnJlcXVlc3RvclZwYy5vd25lckFjY291bnRJZCAhPT0gcHJvcHMuYWNjZXB0b3JWcGMub3duZXJBY2NvdW50SWQ7XG5cbiAgICBpZiAoIWlzQ3Jvc3NBY2NvdW50ICYmIHByb3BzLnBlZXJSb2xlQXJuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BlZXJSb2xlQXJuIGlzIG5vdCBuZWVkZWQgZm9yIHNhbWUgYWNjb3VudCBwZWVyaW5nJyk7XG4gICAgfVxuXG4gICAgaWYgKGlzQ3Jvc3NBY2NvdW50ICYmICFwcm9wcy5wZWVyUm9sZUFybikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDcm9zcyBhY2NvdW50IFZQQyBwZWVyaW5nIHJlcXVpcmVzIHBlZXJSb2xlQXJuJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3ZlcmxhcCA9IHRoaXMudmFsaWRhdGVWcGNDaWRyT3ZlcmxhcChwcm9wcy5yZXF1ZXN0b3JWcGMsIHByb3BzLmFjY2VwdG9yVnBjKTtcbiAgICBpZiAob3ZlcmxhcCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDSURSIGJsb2NrIHNob3VsZCBub3Qgb3ZlcmxhcCB3aXRoIGVhY2ggb3RoZXIgZm9yIGVzdGFibGlzaGluZyBhIHBlZXJpbmcgY29ubmVjdGlvbicpO1xuICAgIH1cbiAgICBpZiAocHJvcHMudnBjUGVlcmluZ0Nvbm5lY3Rpb25OYW1lKSB7XG4gICAgICBUYWdzLm9mKHRoaXMpLmFkZChOQU1FX1RBRywgcHJvcHMudnBjUGVlcmluZ0Nvbm5lY3Rpb25OYW1lKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IENmblZQQ1BlZXJpbmdDb25uZWN0aW9uKHRoaXMsICdWUENQZWVyaW5nQ29ubmVjdGlvbicsIHtcbiAgICAgIHZwY0lkOiBwcm9wcy5yZXF1ZXN0b3JWcGMudnBjSWQsXG4gICAgICBwZWVyVnBjSWQ6IHByb3BzLmFjY2VwdG9yVnBjLnZwY0lkLFxuICAgICAgcGVlck93bmVySWQ6IHByb3BzLmFjY2VwdG9yVnBjLm93bmVyQWNjb3VudElkLFxuICAgICAgcGVlclJlZ2lvbjogcHJvcHMuYWNjZXB0b3JWcGMucmVnaW9uLFxuICAgICAgcGVlclJvbGVBcm46IGlzQ3Jvc3NBY2NvdW50ID8gcHJvcHMucGVlclJvbGVBcm4gOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICB0aGlzLnJvdXRlclRhcmdldElkID0gdGhpcy5yZXNvdXJjZS5hdHRySWQ7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGlmIHRoZSBwcm92aWRlZCBJUHY0IENJRFIgYmxvY2sgb3ZlcmxhcHMgd2l0aCBleGlzdGluZyBzdWJuZXQgQ0lEUiBibG9ja3Mgd2l0aGluIHRoZSBnaXZlbiBWUEMuXG4gICAqXG4gICAqIEBwYXJhbSByZXF1ZXN0b3JWcGMgVGhlIFZQQyBvZiB0aGUgcmVxdWVzdG9yLlxuICAgKiBAcGFyYW0gYWNjZXB0b3JWcGMgVGhlIFZQQyBvZiB0aGUgYWNjZXB0b3IuXG4gICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIElQdjQgQ0lEUiBibG9jayBvdmVybGFwcyB3aXRoIGVhY2ggb3RoZXIgZm9yIHR3byBWUENzLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVZwY0NpZHJPdmVybGFwKHJlcXVlc3RvclZwYzogSVZwY1YyLCBhY2NlcHRvclZwYzogSVZwY1YyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmVxdWVzdG9yQ2lkcnMgPSBbcmVxdWVzdG9yVnBjLmlwdjRDaWRyQmxvY2tdO1xuICAgIGNvbnN0IGFjY2VwdG9yQ2lkcnMgPSBbYWNjZXB0b3JWcGMuaXB2NENpZHJCbG9ja107XG5cbiAgICBpZiAocmVxdWVzdG9yVnBjLnNlY29uZGFyeUNpZHJCbG9jaykge1xuICAgICAgcmVxdWVzdG9yQ2lkcnMucHVzaCguLi5yZXF1ZXN0b3JWcGMuc2Vjb25kYXJ5Q2lkckJsb2NrXG4gICAgICAgIC5tYXAoYmxvY2sgPT4gYmxvY2suY2lkckJsb2NrKVxuICAgICAgICAuZmlsdGVyKChjaWRyKTogY2lkciBpcyBzdHJpbmcgPT4gY2lkciAhPT0gdW5kZWZpbmVkKSk7XG4gICAgfVxuXG4gICAgaWYgKGFjY2VwdG9yVnBjLnNlY29uZGFyeUNpZHJCbG9jaykge1xuICAgICAgYWNjZXB0b3JDaWRycy5wdXNoKC4uLmFjY2VwdG9yVnBjLnNlY29uZGFyeUNpZHJCbG9ja1xuICAgICAgICAubWFwKGJsb2NrID0+IGJsb2NrLmNpZHJCbG9jaylcbiAgICAgICAgLmZpbHRlcigoY2lkcik6IGNpZHIgaXMgc3RyaW5nID0+IGNpZHIgIT09IHVuZGVmaW5lZCkpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcmVxdWVzdG9yQ2lkciBvZiByZXF1ZXN0b3JDaWRycykge1xuICAgICAgY29uc3QgcmVxdWVzdG9yUmFuZ2UgPSBuZXcgQ2lkckJsb2NrKHJlcXVlc3RvckNpZHIpO1xuICAgICAgY29uc3QgcmVxdWVzdG9ySXBSYW5nZTogW3N0cmluZywgc3RyaW5nXSA9IFtyZXF1ZXN0b3JSYW5nZS5taW5JcCgpLCByZXF1ZXN0b3JSYW5nZS5tYXhJcCgpXTtcblxuICAgICAgZm9yIChjb25zdCBhY2NlcHRvckNpZHIgb2YgYWNjZXB0b3JDaWRycykge1xuICAgICAgICBjb25zdCBhY2NlcHRvclJhbmdlID0gbmV3IENpZHJCbG9jayhhY2NlcHRvckNpZHIpO1xuICAgICAgICBjb25zdCBhY2NlcHRvcklwUmFuZ2U6IFtzdHJpbmcsIHN0cmluZ10gPSBbYWNjZXB0b3JSYW5nZS5taW5JcCgpLCBhY2NlcHRvclJhbmdlLm1heElwKCldO1xuXG4gICAgICAgIGlmIChyZXF1ZXN0b3JSYW5nZS5yYW5nZXNPdmVybGFwKGFjY2VwdG9ySXBSYW5nZSwgcmVxdWVzdG9ySXBSYW5nZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSB0eXBlIG9mIGVuZHBvaW50IG9yIGdhdGV3YXkgYmVpbmcgdGFyZ2V0ZWQgYnkgdGhlIHJvdXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlVGFyZ2V0UHJvcHMge1xuICAvKipcbiAgICogVGhlIGdhdGV3YXkgcm91dGUgdGFyZ2V0LiBUaGlzIGlzIHVzZWQgZm9yIHRhcmdldHMgc3VjaCBhc1xuICAgKiBlZ3Jlc3Mtb25seSBpbnRlcm5ldCBnYXRld2F5IG9yIFZQQyBwZWVyaW5nIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGFyZ2V0IGlzIG5vdCBzZXQgdG8gYSBnYXRld2F5LCBpbiB0aGlzIGNhc2UgYW4gZW5kcG9pbnQgaXMgbmVlZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2F0ZXdheT86IElSb3V0ZVRhcmdldDtcblxuICAvKipcbiAgICogVGhlIGVuZHBvaW50IHJvdXRlIHRhcmdldC4gVGhpcyBpcyB1c2VkIGZvciB0YXJnZXRzIHN1Y2ggYXNcbiAgICogVlBDIGVuZHBvaW50cy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0YXJnZXQgaXMgbm90IHNldCB0byBhbiBlbmRwb2ludCwgaW4gdGhpcyBjYXNlIGEgZ2F0ZXdheSBpcyBuZWVkZWQuXG4gICAqL1xuICByZWFkb25seSBlbmRwb2ludD86IElWcGNFbmRwb2ludDtcbn1cblxuLyoqXG4gKiBUaGUgZ2F0ZXdheSBvciBlbmRwb2ludCB0YXJnZXRlZCBieSB0aGUgcm91dGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBSb3V0ZVRhcmdldFR5cGUge1xuICAvKipcbiAgICogVGhlIGdhdGV3YXkgcm91dGUgdGFyZ2V0LiBUaGlzIGlzIHVzZWQgZm9yIHRhcmdldHMgc3VjaCBhc1xuICAgKiBlZ3Jlc3Mtb25seSBpbnRlcm5ldCBnYXRld2F5IG9yIFZQQyBwZWVyaW5nIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGFyZ2V0IGlzIG5vdCBzZXQgdG8gYSBnYXRld2F5LCBpbiB0aGlzIGNhc2UgYW4gZW5kcG9pbnQgaXMgbmVlZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2F0ZXdheT86IElSb3V0ZVRhcmdldDtcblxuICAvKipcbiAgICogVGhlIGVuZHBvaW50IHJvdXRlIHRhcmdldC4gVGhpcyBpcyB1c2VkIGZvciB0YXJnZXRzIHN1Y2ggYXNcbiAgICogVlBDIGVuZHBvaW50cy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0YXJnZXQgaXMgbm90IHNldCB0byBhbiBlbmRwb2ludCwgaW4gdGhpcyBjYXNlIGEgZ2F0ZXdheSBpcyBuZWVkZWQuXG4gICAqL1xuICByZWFkb25seSBlbmRwb2ludD86IElWcGNFbmRwb2ludDtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogUm91dGVUYXJnZXRQcm9wcykge1xuICAgIHRoaXMuZ2F0ZXdheSA9IHByb3BzLmdhdGV3YXk7XG4gICAgdGhpcy5lbmRwb2ludCA9IHByb3BzLmVuZHBvaW50O1xuICB9XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIHRvIGRlZmluZSBhIHJvdXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElSb3V0ZVYyIGV4dGVuZHMgSVJlc291cmNlIHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm91dGUgdGFibGUgZm9yIHRoZSByb3V0ZS5cbiAgICogQGF0dHJpYnV0ZSByb3V0ZVRhYmxlXG4gICAqL1xuICByZWFkb25seSByb3V0ZVRhYmxlOiBJUm91dGVUYWJsZTtcblxuICAvKipcbiAgICogVGhlIElQdjQgb3IgSVB2NiBDSURSIGJsb2NrIHVzZWQgZm9yIHRoZSBkZXN0aW5hdGlvbiBtYXRjaC5cbiAgICpcbiAgICogUm91dGluZyBkZWNpc2lvbnMgYXJlIGJhc2VkIG9uIHRoZSBtb3N0IHNwZWNpZmljIG1hdGNoLlxuICAgKiBUT0RPOiBMb29rIGZvciBzdHJvbmcgSVAgdHlwZSBpbXBsZW1lbnRhdGlvbiBoZXJlLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGdhdGV3YXkgb3IgZW5kcG9pbnQgdGFyZ2V0ZWQgYnkgdGhlIHJvdXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0OiBSb3V0ZVRhcmdldFR5cGU7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyB0byBkZWZpbmUgYSByb3V0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSb3V0ZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm91dGUgdGFibGUgZm9yIHRoZSByb3V0ZS5cbiAgICpcbiAgICogQGF0dHJpYnV0ZSByb3V0ZVRhYmxlXG4gICAqL1xuICByZWFkb25seSByb3V0ZVRhYmxlOiBJUm91dGVUYWJsZTtcblxuICAvKipcbiAgICogVGhlIElQdjQgb3IgSVB2NiBDSURSIGJsb2NrIHVzZWQgZm9yIHRoZSBkZXN0aW5hdGlvbiBtYXRjaC5cbiAgICpcbiAgICogUm91dGluZyBkZWNpc2lvbnMgYXJlIGJhc2VkIG9uIHRoZSBtb3N0IHNwZWNpZmljIG1hdGNoLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGdhdGV3YXkgb3IgZW5kcG9pbnQgdGFyZ2V0ZWQgYnkgdGhlIHJvdXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0OiBSb3V0ZVRhcmdldFR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBuYW1lIG9mIHRoZSByb3V0ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBwcm92aXNpb25lZCB3aXRob3V0IGEgcm91dGUgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgcm91dGUgd2l0aCBhZGRlZCBmdW5jdGlvbmFsaXR5LlxuICogQHJlc291cmNlIEFXUzo6RUMyOjpSb3V0ZVxuICovXG5leHBvcnQgY2xhc3MgUm91dGUgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElSb3V0ZVYyIHtcbiAgLyoqXG4gICAqIFRoZSBJUHY0IG9yIElQdjYgQ0lEUiBibG9jayB1c2VkIGZvciB0aGUgZGVzdGluYXRpb24gbWF0Y2guXG4gICAqXG4gICAqIFJvdXRpbmcgZGVjaXNpb25zIGFyZSBiYXNlZCBvbiB0aGUgbW9zdCBzcGVjaWZpYyBtYXRjaC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkZXN0aW5hdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZ2F0ZXdheSBvciBlbmRwb2ludCB0YXJnZXRlZCBieSB0aGUgcm91dGUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGFyZ2V0OiBSb3V0ZVRhcmdldFR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSByb3V0ZSB0YWJsZSBmb3IgdGhlIHJvdXRlLlxuICAgKiBAYXR0cmlidXRlIHJvdXRlVGFibGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb3V0ZVRhYmxlOiBJUm91dGVUYWJsZTtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygcm91dGVyIHRoZSByb3V0ZSBpcyB0YXJnZXRpbmdcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0YXJnZXRSb3V0ZXJUeXBlOiBSb3V0ZXJUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgcm91dGUgQ0ZOIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlPzogQ2ZuUm91dGU7XG5cbiAgLyoqXG4gICAqIERlc3RpbmF0aW9uIGNpZHIgYmxvY2sgZm9yIGlwdjZcbiAgICovXG4gIHByaXZhdGUgZGVzdGluYXRpb25JcHY2Q2lkcj86IHN0cmluZztcblxuICAvKipcbiAgICogRGVzdGluYXRpb24gY2lkciBibG9jayBmb3IgaXB2NFxuICAgKi9cbiAgcHJpdmF0ZSBkZXN0aW5hdGlvbklwdjRDaWRyPzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSb3V0ZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIHRoaXMudGFyZ2V0ID0gcHJvcHMudGFyZ2V0O1xuICAgIHRoaXMucm91dGVUYWJsZSA9IHByb3BzLnJvdXRlVGFibGU7XG4gICAgdGhpcy5kZXN0aW5hdGlvbiA9IHByb3BzLmRlc3RpbmF0aW9uO1xuICAgIGNvbnN0IGlzRGVzdGluYXRpb25JcHY0ID0gTmV0d29ya1V0aWxzLnZhbGlkSXAocHJvcHMuZGVzdGluYXRpb24pO1xuICAgIGlmICghaXNEZXN0aW5hdGlvbklwdjQpIHtcbiAgICAgIC8vIFRPRE8gVmFsaWRhdGUgZm9yIElQdjYgQ0lEUiByYW5nZVxuICAgICAgdGhpcy5kZXN0aW5hdGlvbklwdjZDaWRyID0gcHJvcHMuZGVzdGluYXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb25JcHY0Q2lkciA9IHByb3BzLmRlc3RpbmF0aW9uO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRhcmdldC5nYXRld2F5Py5yb3V0ZXJUeXBlID09PSBSb3V0ZXJUeXBlLkVHUkVTU19PTkxZX0lOVEVSTkVUX0dBVEVXQVkgJiYgaXNEZXN0aW5hdGlvbklwdjQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRWdyZXNzIG9ubHkgaW50ZXJuZXQgZ2F0ZXdheSBkb2VzIG5vdCBzdXBwb3J0IElQdjQgcm91dGluZycpO1xuICAgIH1cblxuICAgIGlmICgocHJvcHMudGFyZ2V0LmdhdGV3YXkgJiYgcHJvcHMudGFyZ2V0LmVuZHBvaW50KSB8fCAoIXByb3BzLnRhcmdldC5nYXRld2F5ICYmICFwcm9wcy50YXJnZXQuZW5kcG9pbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4YWN0bHkgb25lIG9mIGBnYXRld2F5YCBvciBgZW5kcG9pbnRgIG11c3QgYmUgc3BlY2lmaWVkLicpO1xuICAgIH1cbiAgICB0aGlzLnRhcmdldFJvdXRlclR5cGUgPSB0aGlzLnRhcmdldC5nYXRld2F5ID8gdGhpcy50YXJnZXQuZ2F0ZXdheS5yb3V0ZXJUeXBlIDogUm91dGVyVHlwZS5WUENfRU5EUE9JTlQ7XG4gICAgLy8gR2F0ZXdheSBnZW5lcmF0ZXMgcm91dGUgYXV0b21hdGljYWxseSB2aWEgaXRzIFJvdXRlVGFibGUsIHRodXMgd2UgZG9uJ3QgbmVlZCB0byBnZW5lcmF0ZSB0aGUgcmVzb3VyY2UgZm9yIGl0XG4gICAgaWYgKCEodGhpcy50YXJnZXQuZW5kcG9pbnQgaW5zdGFuY2VvZiBHYXRld2F5VnBjRW5kcG9pbnQpKSB7XG4gICAgICB0aGlzLnJlc291cmNlID0gbmV3IENmblJvdXRlKHRoaXMsICdSb3V0ZScsIHtcbiAgICAgICAgcm91dGVUYWJsZUlkOiB0aGlzLnJvdXRlVGFibGUucm91dGVUYWJsZUlkLFxuICAgICAgICBkZXN0aW5hdGlvbkNpZHJCbG9jazogdGhpcy5kZXN0aW5hdGlvbklwdjRDaWRyLFxuICAgICAgICBkZXN0aW5hdGlvbklwdjZDaWRyQmxvY2s6IHRoaXMuZGVzdGluYXRpb25JcHY2Q2lkcixcbiAgICAgICAgW3JvdXRlclR5cGVUb1Byb3BOYW1lKHRoaXMudGFyZ2V0Um91dGVyVHlwZSldOiB0aGlzLnRhcmdldC5nYXRld2F5ID8gdGhpcy50YXJnZXQuZ2F0ZXdheS5yb3V0ZXJUYXJnZXRJZCA6XG4gICAgICAgICAgdGhpcy50YXJnZXQuZW5kcG9pbnQgPyB0aGlzLnRhcmdldC5lbmRwb2ludC52cGNFbmRwb2ludElkIDogbnVsbCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLm5vZGUuZGVmYXVsdENoaWxkID0gdGhpcy5yZXNvdXJjZTtcblxuICAgIC8vIENyZWF0ZSBhIHJvdXRlIG9ubHkgYWZ0ZXIgdGFyZ2V0IGdhdGV3YXkgb3IgZW5kcG9pbnQgaXMgY3JlYXRlZFxuICAgIGlmICh0aGlzLnRhcmdldC5nYXRld2F5KSB7XG4gICAgICB0aGlzLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLnRhcmdldC5nYXRld2F5KTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGFyZ2V0LmVuZHBvaW50KSB7XG4gICAgICB0aGlzLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLnRhcmdldC5lbmRwb2ludCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUHJvcGVydGllcyB0byBkZWZpbmUgYSByb3V0ZSB0YWJsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSb3V0ZVRhYmxlUHJvcHMge1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBWUEMuXG4gICAqL1xuICByZWFkb25seSB2cGM6IElWcGNWMjtcblxuICAvKipcbiAgICogVGhlIHJlc291cmNlIG5hbWUgb2YgdGhlIHJvdXRlIHRhYmxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHByb3Zpc2lvbmVkIHdpdGhvdXQgYSByb3V0ZSB0YWJsZSBuYW1lXG4gICAqL1xuICByZWFkb25seSByb3V0ZVRhYmxlTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgcm91dGUgdGFibGUgZm9yIHRoZSBzcGVjaWZpZWQgVlBDXG4gKiBAcmVzb3VyY2UgQVdTOjpFQzI6OlJvdXRlVGFibGVcbiAqL1xuZXhwb3J0IGNsYXNzIFJvdXRlVGFibGUgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElSb3V0ZVRhYmxlIHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm91dGUgdGFibGUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcm91dGVUYWJsZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByb3V0ZSB0YWJsZSBDRk4gcmVzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2U6IENmblJvdXRlVGFibGU7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJvdXRlVGFibGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IENmblJvdXRlVGFibGUodGhpcywgJ1JvdXRlVGFibGUnLCB7XG4gICAgICB2cGNJZDogcHJvcHMudnBjLnZwY0lkLFxuICAgIH0pO1xuICAgIGlmIChwcm9wcy5yb3V0ZVRhYmxlTmFtZSkge1xuICAgICAgVGFncy5vZih0aGlzKS5hZGQoTkFNRV9UQUcsIHByb3BzLnJvdXRlVGFibGVOYW1lKTtcbiAgICB9XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG5cbiAgICB0aGlzLnJvdXRlVGFibGVJZCA9IHRoaXMucmVzb3VyY2UuYXR0clJvdXRlVGFibGVJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IGN1c3RvbSByb3V0ZSB0byB0aGUgcm91dGUgdGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSBkZXN0aW5hdGlvbiBUaGUgSVB2NCBvciBJUHY2IENJRFIgYmxvY2sgdXNlZCBmb3IgdGhlIGRlc3RpbmF0aW9uIG1hdGNoLlxuICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSBnYXRld2F5IG9yIGVuZHBvaW50IHRhcmdldGVkIGJ5IHRoZSByb3V0ZS5cbiAgICogQHBhcmFtIHJvdXRlTmFtZSBUaGUgcmVzb3VyY2UgbmFtZSBvZiB0aGUgcm91dGUuXG4gICAqL1xuICBATWV0aG9kTWV0YWRhdGEoKVxuICBwdWJsaWMgYWRkUm91dGUoaWQ6IHN0cmluZywgZGVzdGluYXRpb246IHN0cmluZywgdGFyZ2V0OiBSb3V0ZVRhcmdldFR5cGUsIHJvdXRlTmFtZT86IHN0cmluZykge1xuICAgIG5ldyBSb3V0ZSh0aGlzLCBpZCwge1xuICAgICAgcm91dGVUYWJsZTogdGhpcyxcbiAgICAgIGRlc3RpbmF0aW9uOiBkZXN0aW5hdGlvbixcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgcm91dGVOYW1lOiByb3V0ZU5hbWUsXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcm91dGVyVHlwZVRvUHJvcE5hbWUocm91dGVyVHlwZTogUm91dGVyVHlwZSkge1xuICByZXR1cm4gKHtcbiAgICBbUm91dGVyVHlwZS5DQVJSSUVSX0dBVEVXQVldOiAnY2FycmllckdhdGV3YXlJZCcsXG4gICAgW1JvdXRlclR5cGUuRUdSRVNTX09OTFlfSU5URVJORVRfR0FURVdBWV06ICdlZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5SWQnLFxuICAgIFtSb3V0ZXJUeXBlLkdBVEVXQVldOiAnZ2F0ZXdheUlkJyxcbiAgICBbUm91dGVyVHlwZS5JTlNUQU5DRV06ICdpbnN0YW5jZUlkJyxcbiAgICBbUm91dGVyVHlwZS5MT0NBTF9HQVRFV0FZXTogJ2xvY2FsR2F0ZXdheUlkJyxcbiAgICBbUm91dGVyVHlwZS5OQVRfR0FURVdBWV06ICduYXRHYXRld2F5SWQnLFxuICAgIFtSb3V0ZXJUeXBlLk5FVFdPUktfSU5URVJGQUNFXTogJ25ldHdvcmtJbnRlcmZhY2VJZCcsXG4gICAgW1JvdXRlclR5cGUuVFJBTlNJVF9HQVRFV0FZXTogJ3RyYW5zaXRHYXRld2F5SWQnLFxuICAgIFtSb3V0ZXJUeXBlLlZQQ19QRUVSSU5HX0NPTk5FQ1RJT05dOiAndnBjUGVlcmluZ0Nvbm5lY3Rpb25JZCcsXG4gICAgW1JvdXRlclR5cGUuVlBDX0VORFBPSU5UXTogJ3ZwY0VuZHBvaW50SWQnLFxuICB9KVtyb3V0ZXJUeXBlXTtcbn1cbiJdfQ==
@@ -13,9 +13,9 @@ interface ICidr {
13
13
  */
14
14
  export declare class IpCidr implements ICidr {
15
15
  /**
16
- * IPv6 CIDR range for the subnet
17
- * Allowed only if IPv6 is enabled on VPc
18
- */
16
+ * IPv6 CIDR range for the subnet
17
+ * Allowed only if IPv6 is enabled on VPc
18
+ */
19
19
  readonly cidr: string;
20
20
  constructor(props: string);
21
21
  }