@aws-cdk/aws-ec2-alpha 2.218.0-alpha.0 → 2.220.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/.jsii +3 -3
- package/.jsii.tabl.json.gz +0 -0
- package/lib/ipam.js +291 -155
- package/lib/route.js +647 -371
- package/lib/subnet-v2.js +249 -177
- package/lib/transit-gateway-route-table-association.js +78 -33
- package/lib/transit-gateway-route-table-propagation.js +78 -33
- package/lib/transit-gateway-route-table.js +79 -33
- package/lib/transit-gateway-route.js +127 -64
- package/lib/transit-gateway-vpc-attachment.js +126 -80
- package/lib/transit-gateway.js +135 -52
- package/lib/util.js +29 -2
- package/lib/vpc-v2-base.js +40 -30
- package/lib/vpc-v2.js +370 -220
- package/package.json +9 -8
package/lib/transit-gateway.js
CHANGED
|
@@ -1,17 +1,77 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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 __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
19
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
20
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
21
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
22
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
23
|
+
var _, done = false;
|
|
24
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
25
|
+
var context = {};
|
|
26
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
27
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
28
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
29
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
30
|
+
if (kind === "accessor") {
|
|
31
|
+
if (result === void 0) continue;
|
|
32
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
33
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
34
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
35
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
36
|
+
}
|
|
37
|
+
else if (_ = accept(result)) {
|
|
38
|
+
if (kind === "field") initializers.unshift(_);
|
|
39
|
+
else descriptor[key] = _;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
43
|
+
done = true;
|
|
7
44
|
};
|
|
8
|
-
var
|
|
45
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
46
|
+
var useValue = arguments.length > 2;
|
|
47
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
48
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
49
|
+
}
|
|
50
|
+
return useValue ? value : void 0;
|
|
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
|
+
})();
|
|
9
69
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
70
|
exports.TransitGateway = void 0;
|
|
11
71
|
const jsiiDeprecationWarnings = require("../.warnings.jsii.js");
|
|
12
72
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
13
73
|
const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
|
|
14
|
-
const cdk = require("aws-cdk-lib/core");
|
|
74
|
+
const cdk = __importStar(require("aws-cdk-lib/core"));
|
|
15
75
|
const transit_gateway_route_table_1 = require("./transit-gateway-route-table");
|
|
16
76
|
const transit_gateway_vpc_attachment_1 = require("./transit-gateway-vpc-attachment");
|
|
17
77
|
const transit_gateway_route_table_association_1 = require("./transit-gateway-route-table-association");
|
|
@@ -74,52 +134,75 @@ class TransitGatewayBase extends cdk.Resource {
|
|
|
74
134
|
*
|
|
75
135
|
* @resource AWS::EC2::TransitGateway
|
|
76
136
|
*/
|
|
77
|
-
let TransitGateway =
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
137
|
+
let TransitGateway = (() => {
|
|
138
|
+
let _classDecorators = [prop_injectable_1.propertyInjectable];
|
|
139
|
+
let _classDescriptor;
|
|
140
|
+
let _classExtraInitializers = [];
|
|
141
|
+
let _classThis;
|
|
142
|
+
let _classSuper = TransitGatewayBase;
|
|
143
|
+
var TransitGateway = class extends _classSuper {
|
|
144
|
+
static { _classThis = this; }
|
|
145
|
+
static {
|
|
146
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
147
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
148
|
+
TransitGateway = _classThis = _classDescriptor.value;
|
|
149
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
82
150
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
151
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.TransitGateway", version: "2.220.0-alpha.0" };
|
|
152
|
+
/** Uniquely identifies this class. */
|
|
153
|
+
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-ec2-alpha.TransitGateway';
|
|
154
|
+
routerType;
|
|
155
|
+
routerTargetId;
|
|
156
|
+
transitGatewayId;
|
|
157
|
+
transitGatewayArn;
|
|
158
|
+
defaultRouteTable;
|
|
159
|
+
defaultRouteTableAssociation;
|
|
160
|
+
defaultRouteTablePropagation;
|
|
161
|
+
dnsSupport;
|
|
162
|
+
securityGroupReferencingSupport;
|
|
163
|
+
constructor(scope, id, props = {}) {
|
|
164
|
+
super(scope, id);
|
|
165
|
+
try {
|
|
166
|
+
jsiiDeprecationWarnings._aws_cdk_aws_ec2_alpha_TransitGatewayProps(props);
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
170
|
+
Error.captureStackTrace(error, TransitGateway);
|
|
171
|
+
}
|
|
172
|
+
throw error;
|
|
86
173
|
}
|
|
87
|
-
|
|
174
|
+
// Enhanced CDK Analytics Telemetry
|
|
175
|
+
(0, metadata_resource_1.addConstructMetadata)(this, props);
|
|
176
|
+
const resource = new aws_ec2_1.CfnTransitGateway(this, id, {
|
|
177
|
+
amazonSideAsn: props.amazonSideAsn ?? undefined,
|
|
178
|
+
autoAcceptSharedAttachments: (0, util_1.getFeatureStatus)(props.autoAcceptSharedAttachments),
|
|
179
|
+
// Default Association/Propagation will always be false when creating the L1 to prevent EC2 from creating the default route table.
|
|
180
|
+
// Instead, CDK will create a custom default route table and use the properties to mimic the automatic assocation/propagation behaviour.
|
|
181
|
+
defaultRouteTableAssociation: util_1.TransitGatewayFeatureStatus.DISABLE,
|
|
182
|
+
defaultRouteTablePropagation: util_1.TransitGatewayFeatureStatus.DISABLE,
|
|
183
|
+
transitGatewayCidrBlocks: props.transitGatewayCidrBlocks,
|
|
184
|
+
description: props.description,
|
|
185
|
+
dnsSupport: (0, util_1.getFeatureStatus)(props.dnsSupport),
|
|
186
|
+
securityGroupReferencingSupport: (0, util_1.getFeatureStatus)(props.securityGroupReferencingSupport),
|
|
187
|
+
});
|
|
188
|
+
this.node.defaultChild = resource;
|
|
189
|
+
this.transitGatewayId = resource.attrId;
|
|
190
|
+
this.routerTargetId = resource.attrId;
|
|
191
|
+
this.routerType = aws_ec2_1.RouterType.TRANSIT_GATEWAY;
|
|
192
|
+
this.transitGatewayArn = resource.attrTransitGatewayArn;
|
|
193
|
+
this.dnsSupport = props.dnsSupport ?? true;
|
|
194
|
+
this.securityGroupReferencingSupport = props.securityGroupReferencingSupport ?? false;
|
|
195
|
+
this.defaultRouteTable = new transit_gateway_route_table_1.TransitGatewayRouteTable(this, 'DefaultRouteTable', {
|
|
196
|
+
transitGateway: this,
|
|
197
|
+
});
|
|
198
|
+
this.defaultRouteTableAssociation = props.defaultRouteTableAssociation ?? true;
|
|
199
|
+
this.defaultRouteTablePropagation = props.defaultRouteTablePropagation ?? true;
|
|
88
200
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
// Instead, CDK will create a custom default route table and use the properties to mimic the automatic assocation/propagation behaviour.
|
|
96
|
-
defaultRouteTableAssociation: util_1.TransitGatewayFeatureStatus.DISABLE,
|
|
97
|
-
defaultRouteTablePropagation: util_1.TransitGatewayFeatureStatus.DISABLE,
|
|
98
|
-
transitGatewayCidrBlocks: props.transitGatewayCidrBlocks,
|
|
99
|
-
description: props.description,
|
|
100
|
-
dnsSupport: (0, util_1.getFeatureStatus)(props.dnsSupport),
|
|
101
|
-
securityGroupReferencingSupport: (0, util_1.getFeatureStatus)(props.securityGroupReferencingSupport),
|
|
102
|
-
});
|
|
103
|
-
this.node.defaultChild = resource;
|
|
104
|
-
this.transitGatewayId = resource.attrId;
|
|
105
|
-
this.routerTargetId = resource.attrId;
|
|
106
|
-
this.routerType = aws_ec2_1.RouterType.TRANSIT_GATEWAY;
|
|
107
|
-
this.transitGatewayArn = resource.attrTransitGatewayArn;
|
|
108
|
-
this.dnsSupport = props.dnsSupport ?? true;
|
|
109
|
-
this.securityGroupReferencingSupport = props.securityGroupReferencingSupport ?? false;
|
|
110
|
-
this.defaultRouteTable = new transit_gateway_route_table_1.TransitGatewayRouteTable(this, 'DefaultRouteTable', {
|
|
111
|
-
transitGateway: this,
|
|
112
|
-
});
|
|
113
|
-
this.defaultRouteTableAssociation = props.defaultRouteTableAssociation ?? true;
|
|
114
|
-
this.defaultRouteTablePropagation = props.defaultRouteTablePropagation ?? true;
|
|
115
|
-
}
|
|
116
|
-
};
|
|
201
|
+
static {
|
|
202
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
return TransitGateway = _classThis;
|
|
206
|
+
})();
|
|
117
207
|
exports.TransitGateway = TransitGateway;
|
|
118
|
-
_a = JSII_RTTI_SYMBOL_1;
|
|
119
|
-
TransitGateway[_a] = { fqn: "@aws-cdk/aws-ec2-alpha.TransitGateway", version: "2.218.0-alpha.0" };
|
|
120
|
-
/** Uniquely identifies this class. */
|
|
121
|
-
TransitGateway.PROPERTY_INJECTION_ID = '@aws-cdk.aws-ec2-alpha.TransitGateway';
|
|
122
|
-
exports.TransitGateway = TransitGateway = __decorate([
|
|
123
|
-
prop_injectable_1.propertyInjectable
|
|
124
|
-
], TransitGateway);
|
|
125
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNpdC1nYXRld2F5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidHJhbnNpdC1nYXRld2F5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLGlEQUFvRTtBQUNwRSx3Q0FBd0M7QUFFeEMsK0VBQW9HO0FBQ3BHLHFGQUErSDtBQUUvSCx1R0FBZ0c7QUFDaEcsdUdBQWdHO0FBQ2hHLGlDQUF1RTtBQUN2RSw4RUFBOEU7QUFDOUUsMEVBQTBFO0FBcUkxRTs7O0dBR0c7QUFDSCxNQUFlLGtCQUFtQixTQUFRLEdBQUcsQ0FBQyxRQUFRO0lBV3BEOzs7O09BSUc7SUFDSSxhQUFhLENBQUMsRUFBVTtRQUM3QixPQUFPLElBQUksc0RBQXdCLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUM1QyxjQUFjLEVBQUUsSUFBSTtTQUNyQixDQUFDLENBQUM7S0FDSjtJQUVEOzs7O09BSUc7SUFDSSxTQUFTLENBQUMsRUFBVSxFQUFFLE9BQXlCO1FBQ3BELE1BQU0sVUFBVSxHQUFHLElBQUksNERBQTJCLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUMzRCxjQUFjLEVBQUUsSUFBSTtZQUNwQixHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7WUFDaEIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1lBQ3hCLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxvQkFBb0IsSUFBSSxTQUFTO1NBQ2hFLENBQUMsQ0FBQztRQUVILHVJQUF1STtRQUN2SSwwSkFBMEo7UUFDMUosSUFBSSxPQUFPLENBQUMscUJBQXFCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxPQUFPLENBQUMscUJBQXFCLElBQUksSUFBSSxDQUFDLDRCQUE0QixDQUFDLEVBQUUsQ0FBQztZQUN0SSxJQUFJLDZFQUFtQyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ25GLDJC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QyxBQUFsRCxDQUFtRDt5QkFGcEYsY0FBYztJQUQxQixvQ0FBa0I7R0FDTixjQUFjLENBOEMxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENmblRyYW5zaXRHYXRld2F5LCBSb3V0ZXJUeXBlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWIvY29yZSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IElUcmFuc2l0R2F0ZXdheVJvdXRlVGFibGUsIFRyYW5zaXRHYXRld2F5Um91dGVUYWJsZSB9IGZyb20gJy4vdHJhbnNpdC1nYXRld2F5LXJvdXRlLXRhYmxlJztcbmltcG9ydCB7IFRyYW5zaXRHYXRld2F5VnBjQXR0YWNobWVudCwgQXR0YWNoVnBjT3B0aW9ucywgSVRyYW5zaXRHYXRld2F5VnBjQXR0YWNobWVudCB9IGZyb20gJy4vdHJhbnNpdC1nYXRld2F5LXZwYy1hdHRhY2htZW50JztcbmltcG9ydCB7IElSb3V0ZVRhcmdldCB9IGZyb20gJy4vcm91dGUnO1xuaW1wb3J0IHsgVHJhbnNpdEdhdGV3YXlSb3V0ZVRhYmxlQXNzb2NpYXRpb24gfSBmcm9tICcuL3RyYW5zaXQtZ2F0ZXdheS1yb3V0ZS10YWJsZS1hc3NvY2lhdGlvbic7XG5pbXBvcnQgeyBUcmFuc2l0R2F0ZXdheVJvdXRlVGFibGVQcm9wYWdhdGlvbiB9IGZyb20gJy4vdHJhbnNpdC1nYXRld2F5LXJvdXRlLXRhYmxlLXByb3BhZ2F0aW9uJztcbmltcG9ydCB7IGdldEZlYXR1cmVTdGF0dXMsIFRyYW5zaXRHYXRld2F5RmVhdHVyZVN0YXR1cyB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIFRyYW5zaXQgR2F0ZXdheS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJVHJhbnNpdEdhdGV3YXkgZXh0ZW5kcyBjZGsuSVJlc291cmNlLCBJUm91dGVUYXJnZXQge1xuICAvKipcbiAgICogVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBUcmFuc2l0IEdhdGV3YXkuXG4gICAqXG4gICAqIFRoaXMgSUQgaXMgYXV0b21hdGljYWxseSBhc3NpZ25lZCBieSBBV1MgdXBvbiBjcmVhdGlvbiBvZiB0aGUgVHJhbnNpdCBHYXRld2F5XG4gICAqIGFuZCBpcyB1c2VkIHRvIHJlZmVyZW5jZSBpdCBpbiB2YXJpb3VzIGNvbmZpZ3VyYXRpb25zIGFuZCBvcGVyYXRpb25zLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSB0cmFuc2l0R2F0ZXdheUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgVHJhbnNpdCBHYXRld2F5LlxuICAgKlxuICAgKiBUaGUgQVJOIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIFRyYW5zaXQgR2F0ZXdheSBhY3Jvc3MgQVdTIGFuZCBpcyBjb21tb25seVxuICAgKiB1c2VkIGZvciBwZXJtaXNzaW9ucyBhbmQgcmVzb3VyY2UgdHJhY2tpbmcuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHRyYW5zaXRHYXRld2F5QXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHJvdXRlIHRhYmxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgVHJhbnNpdCBHYXRld2F5LlxuICAgKlxuICAgKiBUaGlzIHJvdXRlIHRhYmxlIGlzIGNyZWF0ZWQgYnkgdGhlIENESyBhbmQgaXMgdXNlZCB0byBtYW5hZ2UgdGhlIHJvdXRlc1xuICAgKiBmb3IgYXR0YWNobWVudHMgdGhhdCBkbyBub3QgaGF2ZSBhbiBleHBsaWNpdGx5IGRlZmluZWQgcm91dGUgdGFibGUgYXNzb2NpYXRpb24uXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0Um91dGVUYWJsZTogSVRyYW5zaXRHYXRld2F5Um91dGVUYWJsZTtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgbmV3IGF0dGFjaG1lbnRzIGFyZSBhdXRvbWF0aWNhbGx5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZGVmYXVsdCByb3V0ZSB0YWJsZS5cbiAgICpcbiAgICogSWYgc2V0IHRvIGB0cnVlYCwgYW55IFZQQyBvciBWUE4gYXR0YWNobWVudCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgYXNzb2NpYXRlZCB3aXRoXG4gICAqIHRoZSBkZWZhdWx0IHJvdXRlIHRhYmxlIHVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdFJvdXRlVGFibGVBc3NvY2lhdGlvbjogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgcm91dGUgcHJvcGFnYXRpb24gdG8gdGhlIGRlZmF1bHQgcm91dGUgdGFibGUgaXMgZW5hYmxlZC5cbiAgICpcbiAgICogV2hlbiBzZXQgdG8gYHRydWVgLCByb3V0ZXMgZnJvbSBhdHRhY2htZW50cyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcHJvcGFnYXRlZFxuICAgKiB0byB0aGUgZGVmYXVsdCByb3V0ZSB0YWJsZSB1bmxlc3MgcHJvcGFnYXRpb24gaXMgZXhwbGljaXRseSBkaXNhYmxlZC5cbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRSb3V0ZVRhYmxlUHJvcGFnYXRpb246IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IEROUyBzdXBwb3J0IGlzIGVuYWJsZWQgb24gdGhlIFRyYW5zaXQgR2F0ZXdheS5cbiAgICovXG4gIHJlYWRvbmx5IGRuc1N1cHBvcnQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHNlY3VyaXR5IGdyb3VwIHJlZmVyZW5jaW5nIHN1cHBvcnQgaXMgZW5hYmxlZCBvbiB0aGUgVHJhbnNpdCBHYXRld2F5LlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cFJlZmVyZW5jaW5nU3VwcG9ydDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb21tb24gcHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYSBUcmFuc2l0IEdhdGV3YXkgcmVzb3VyY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNpdEdhdGV3YXlQcm9wcyB7XG4gIC8qKlxuICAgKiBQaHlzaWNhbCBuYW1lIG9mIHRoaXMgVHJhbnNpdCBHYXRld2F5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEFzc2lnbmVkIGJ5IENsb3VkRm9ybWF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgdHJhbnNpdEdhdGV3YXlOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHByaXZhdGUgQXV0b25vbW91cyBTeXN0ZW0gTnVtYmVyIChBU04pIGZvciB0aGUgQW1hem9uIHNpZGUgb2YgYSBCR1Agc2Vzc2lvbi4gVGhlIHJhbmdlIGlzIDY0NTEyIHRvIDY1NTM0IGZvciAxNi1iaXQgQVNOcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWQsIDY0NTEyIGlzIGFzc2lnbmVkIGJ5IENsb3VkRm9ybWF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgYW1hem9uU2lkZUFzbj86IG51bWJlcjtcblxuICAvKipcbiAgICogRW5hYmxlIG9yIGRpc2FibGUgYXV0b21hdGljIGFjY2VwdGFuY2Ugb2YgY3Jvc3MtYWNjb3VudCBhdHRhY2htZW50IHJlcXVlc3RzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRpc2FibGUgKGZhbHNlKVxuICAgKi9cbiAgcmVhZG9ubHkgYXV0b0FjY2VwdFNoYXJlZEF0dGFjaG1lbnRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW5hYmxlIG9yIGRpc2FibGUgYXV0b21hdGljIGFzc29jaWF0aW9uIHdpdGggdGhlIGRlZmF1bHQgYXNzb2NpYXRpb24gcm91dGUgdGFibGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZW5hYmxlICh0cnVlKVxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdFJvdXRlVGFibGVBc3NvY2lhdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvciBkaXNhYmxlIGF1dG9tYXRpYyBwcm9wYWdhdGlvbiBvZiByb3V0ZXMgdG8gdGhlIGRlZmF1bHQgcHJvcGFnYXRpb24gcm91dGUgdGFibGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZW5hYmxlICh0cnVlKVxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdFJvdXRlVGFibGVQcm9wYWdhdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgdHJhbnNpdCBnYXRld2F5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGRlc2NyaXB0aW9uXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogRW5hYmxlIG9yIGRpc2FibGUgRE5TIHN1cHBvcnQuXG4gICAqXG4gICAqIElmIGRuc1N1cHBvcnQgaXMgZW5hYmxlZCBvbiBhIFZQQyBBdHRhY2htZW50LCB0aGlzIGFsc28gbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgdGhlIGZlYXR1cmUgdG8gd29yay5cbiAgICogT3RoZXJ3aXNlIHRoZSByZXNvdXJjZXMgd2lsbCBzdGlsbCBkZXBsb3kgYnV0IHRoZSBmZWF0dXJlIHdpbGwgbm90IHdvcmsuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZW5hYmxlICh0cnVlKVxuICAgKi9cbiAgcmVhZG9ubHkgZG5zU3VwcG9ydD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvciBkaXNhYmxlIHNlY3VyaXR5IGdyb3VwIHJlZmVyZW5jaW5nIHN1cHBvcnRcbiAgICpcbiAgICogSWYgc2VjdXJpdHlHcm91cFJlZmVyZW5jaW5nU3VwcG9ydCBpcyBlbmFibGVkIG9uIGEgVlBDIEF0dGFjaG1lbnQsIHRoaXMgYWxzbyBuZWVkcyB0byBiZSBlbmFibGVkIGZvciB0aGUgZmVhdHVyZSB0byB3b3JrLlxuICAgKiBPdGhlcndpc2UgdGhlIHJlc291cmNlcyB3aWxsIHN0aWxsIGRlcGxveSBidXQgdGhlIGZlYXR1cmUgd2lsbCBub3Qgd29yay5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkaXNhYmxlIChmYWxzZSlcbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBSZWZlcmVuY2luZ1N1cHBvcnQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgdHJhbnNpdCBnYXRld2F5IENJRFIgYmxvY2tzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IHRyYW5zaXRHYXRld2F5Q2lkckJsb2Nrcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEEgVHJhbnNpdCBHYXRld2F5LlxuICogQGludGVybmFsXG4gKi9cbmFic3RyYWN0IGNsYXNzIFRyYW5zaXRHYXRld2F5QmFzZSBleHRlbmRzIGNkay5SZXNvdXJjZSBpbXBsZW1lbnRzIElUcmFuc2l0R2F0ZXdheSwgSVJvdXRlVGFyZ2V0IHtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHJvdXRlclR5cGU6IFJvdXRlclR5cGU7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSByb3V0ZXJUYXJnZXRJZDogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdHJhbnNpdEdhdGV3YXlJZDogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdHJhbnNpdEdhdGV3YXlBcm46IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGRlZmF1bHRSb3V0ZVRhYmxlOiBJVHJhbnNpdEdhdGV3YXlSb3V0ZVRhYmxlO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgZGVmYXVsdFJvdXRlVGFibGVBc3NvY2lhdGlvbjogYm9vbGVhbjtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGRlZmF1bHRSb3V0ZVRhYmxlUHJvcGFnYXRpb246IGJvb2xlYW47XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBkbnNTdXBwb3J0OiBib29sZWFuO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgc2VjdXJpdHlHcm91cFJlZmVyZW5jaW5nU3VwcG9ydDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQWRkcyBhIG5ldyByb3V0ZSB0YWJsZSB0byB0aGUgVHJhbnNpdCBHYXRld2F5LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBUcmFuc2l0IEdhdGV3YXkgcm91dGUgdGFibGUuXG4gICAqL1xuICBwdWJsaWMgYWRkUm91dGVUYWJsZShpZDogc3RyaW5nKTogSVRyYW5zaXRHYXRld2F5Um91dGVUYWJsZSB7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2l0R2F0ZXdheVJvdXRlVGFibGUodGhpcywgaWQsIHtcbiAgICAgIHRyYW5zaXRHYXRld2F5OiB0aGlzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGFjaGVzIGEgVlBDIHRvIHRoZSBUcmFuc2l0IEdhdGV3YXkuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIFRyYW5zaXQgR2F0ZXdheSBWUEMgYXR0YWNobWVudC5cbiAgICovXG4gIHB1YmxpYyBhdHRhY2hWcGMoaWQ6IHN0cmluZywgb3B0aW9uczogQXR0YWNoVnBjT3B0aW9ucyk6IElUcmFuc2l0R2F0ZXdheVZwY0F0dGFjaG1lbnQge1xuICAgIGNvbnN0IGF0dGFjaG1lbnQgPSBuZXcgVHJhbnNpdEdhdGV3YXlWcGNBdHRhY2htZW50KHRoaXMsIGlkLCB7XG4gICAgICB0cmFuc2l0R2F0ZXdheTogdGhpcyxcbiAgICAgIHZwYzogb3B0aW9ucy52cGMsXG4gICAgICBzdWJuZXRzOiBvcHRpb25zLnN1Ym5ldHMsXG4gICAgICB2cGNBdHRhY2htZW50T3B0aW9uczogb3B0aW9ucy52cGNBdHRhY2htZW50T3B0aW9ucyA/PyB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICAvLyBJZiBgYXNzb2NpYXRpb25Sb3V0ZVRhYmxlYCBpcyBwcm92aWRlZCwgc2tpcCBjcmVhdGluZyB0aGUgQXNzb2NpYXRpb24gb25seSBpZiBgYXNzb2NpYXRpb25Sb3V0ZVRhYmxlYCBpcyB0aGUgZGVmYXVsdCByb3V0ZSB0YWJsZSBhbmRcbiAgICAvLyBhdXRvbWF0aWMgYXNzb2NpYXRpb24gKGBkZWZhdWx0Um91dGVUYWJsZUFzc29jaWF0aW9uYCkgaXMgZW5hYmxlZCwgYXMgdGhlIFRyYW5zaXRHYXRld2F5Um91dGVUYWJsZUF0dGFjaG1lbnQncyBjb25zdHJ1Y3RvciB3aWxsIGhhbmRsZSBpdCBpbiB0aGF0IGNhc2UuXG4gICAgaWYgKG9wdGlvbnMuYXNzb2NpYXRpb25Sb3V0ZVRhYmxlICYmICEodGhpcy5kZWZhdWx0Um91dGVUYWJsZSA9PT0gb3B0aW9ucy5hc3NvY2lhdGlvblJvdXRlVGFibGUgJiYgdGhpcy5kZWZhdWx0Um91dGVUYWJsZUFzc29jaWF0aW9uKSkge1xuICAgICAgbmV3IFRyYW5zaXRHYXRld2F5Um91dGVUYWJsZUFzc29jaWF0aW9uKHRoaXMsIGAke2lkfS1Bc3NvY2lhdGlvbi0ke3RoaXMubm9kZS5hZGRyfWAsIHtcbiAgICAgICAgdHJhbnNpdEdhdGV3YXlWcGNBdHRhY2htZW50OiBhdHRhY2htZW50LFxuICAgICAgICB0cmFuc2l0R2F0ZXdheVJvdXRlVGFibGU6IG9wdGlvbnMuYXNzb2NpYXRpb25Sb3V0ZVRhYmxlLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMucHJvcGFnYXRpb25Sb3V0ZVRhYmxlcykge1xuICAgICAgb3B0aW9ucy5wcm9wYWdhdGlvblJvdXRlVGFibGVzLmZvckVhY2goKHByb3BhZ2F0aW9uUm91dGVUYWJsZSwgaW5kZXgpID0+IHtcbiAgICAgICAgLy8gSWYgYHByb3BhZ2F0aW9uUm91dGVUYWJsZWAgaXMgcHJvdmlkZWQsIHNraXAgY3JlYXRpbmcgdGhlIFByb3BhZ2F0aW9uIG9ubHkgaWYgYHByb3BhZ2F0aW9uUm91dGVUYWJsZWAgaXMgdGhlIGRlZmF1bHQgcm91dGUgdGFibGUgYW5kXG4gICAgICAgIC8vIGF1dG9tYXRpYyBwcm9wYWdhdGlvbiAoYGRlZmF1bHRSb3V0ZVRhYmxlUHJvcGFnYXRpb25gKSBpcyBlbmFibGVkLCBhcyB0aGUgVHJhbnNpdEdhdGV3YXlSb3V0ZVRhYmxlQXR0YWNobWVudCdzIGNvbnN0cnVjdG9yIHdpbGwgaGFuZGxlIGl0IGluIHRoYXQgY2FzZS5cbiAgICAgICAgaWYgKCEodGhpcy5kZWZhdWx0Um91dGVUYWJsZSA9PT0gcHJvcGFnYXRpb25Sb3V0ZVRhYmxlICYmIHRoaXMuZGVmYXVsdFJvdXRlVGFibGVQcm9wYWdhdGlvbikpIHtcbiAgICAgICAgICBuZXcgVHJhbnNpdEdhdGV3YXlSb3V0ZVRhYmxlUHJvcGFnYXRpb24odGhpcywgYCR7aWR9LVByb3BhZ2F0aW9uLSR7aW5kZXh9YCwge1xuICAgICAgICAgICAgdHJhbnNpdEdhdGV3YXlWcGNBdHRhY2htZW50OiBhdHRhY2htZW50LFxuICAgICAgICAgICAgdHJhbnNpdEdhdGV3YXlSb3V0ZVRhYmxlOiBwcm9wYWdhdGlvblJvdXRlVGFibGUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhdHRhY2htZW50O1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIFRyYW5zaXQgR2F0ZXdheS5cbiAqXG4gKiBAcmVzb3VyY2UgQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5XG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBUcmFuc2l0R2F0ZXdheSBleHRlbmRzIFRyYW5zaXRHYXRld2F5QmFzZSB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWVjMi1hbHBoYS5UcmFuc2l0R2F0ZXdheSc7XG4gIHB1YmxpYyByZWFkb25seSByb3V0ZXJUeXBlOiBSb3V0ZXJUeXBlO1xuICBwdWJsaWMgcmVhZG9ubHkgcm91dGVyVGFyZ2V0SWQ6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHRyYW5zaXRHYXRld2F5SWQ6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHRyYW5zaXRHYXRld2F5QXJuOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBkZWZhdWx0Um91dGVUYWJsZTogSVRyYW5zaXRHYXRld2F5Um91dGVUYWJsZTtcbiAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRSb3V0ZVRhYmxlQXNzb2NpYXRpb246IGJvb2xlYW47XG4gIHB1YmxpYyByZWFkb25seSBkZWZhdWx0Um91dGVUYWJsZVByb3BhZ2F0aW9uOiBib29sZWFuO1xuICBwdWJsaWMgcmVhZG9ubHkgZG5zU3VwcG9ydDogYm9vbGVhbjtcbiAgcHVibGljIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBSZWZlcmVuY2luZ1N1cHBvcnQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFRyYW5zaXRHYXRld2F5UHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICBjb25zdCByZXNvdXJjZSA9IG5ldyBDZm5UcmFuc2l0R2F0ZXdheSh0aGlzLCBpZCwge1xuICAgICAgYW1hem9uU2lkZUFzbjogcHJvcHMuYW1hem9uU2lkZUFzbiA/PyB1bmRlZmluZWQsXG4gICAgICBhdXRvQWNjZXB0U2hhcmVkQXR0YWNobWVudHM6IGdldEZlYXR1cmVTdGF0dXMocHJvcHMuYXV0b0FjY2VwdFNoYXJlZEF0dGFjaG1lbnRzKSxcbiAgICAgIC8vIERlZmF1bHQgQXNzb2NpYXRpb24vUHJvcGFnYXRpb24gd2lsbCBhbHdheXMgYmUgZmFsc2Ugd2hlbiBjcmVhdGluZyB0aGUgTDEgdG8gcHJldmVudCBFQzIgZnJvbSBjcmVhdGluZyB0aGUgZGVmYXVsdCByb3V0ZSB0YWJsZS5cbiAgICAgIC8vIEluc3RlYWQsIENESyB3aWxsIGNyZWF0ZSBhIGN1c3RvbSBkZWZhdWx0IHJvdXRlIHRhYmxlIGFuZCB1c2UgdGhlIHByb3BlcnRpZXMgdG8gbWltaWMgdGhlIGF1dG9tYXRpYyBhc3NvY2F0aW9uL3Byb3BhZ2F0aW9uIGJlaGF2aW91ci5cbiAgICAgIGRlZmF1bHRSb3V0ZVRhYmxlQXNzb2NpYXRpb246IFRyYW5zaXRHYXRld2F5RmVhdHVyZVN0YXR1cy5ESVNBQkxFLFxuICAgICAgZGVmYXVsdFJvdXRlVGFibGVQcm9wYWdhdGlvbjogVHJhbnNpdEdhdGV3YXlGZWF0dXJlU3RhdHVzLkRJU0FCTEUsXG4gICAgICB0cmFuc2l0R2F0ZXdheUNpZHJCbG9ja3M6IHByb3BzLnRyYW5zaXRHYXRld2F5Q2lkckJsb2NrcyxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIGRuc1N1cHBvcnQ6IGdldEZlYXR1cmVTdGF0dXMocHJvcHMuZG5zU3VwcG9ydCksXG4gICAgICBzZWN1cml0eUdyb3VwUmVmZXJlbmNpbmdTdXBwb3J0OiBnZXRGZWF0dXJlU3RhdHVzKHByb3BzLnNlY3VyaXR5R3JvdXBSZWZlcmVuY2luZ1N1cHBvcnQpLFxuICAgIH0pO1xuXG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHJlc291cmNlO1xuICAgIHRoaXMudHJhbnNpdEdhdGV3YXlJZCA9IHJlc291cmNlLmF0dHJJZDtcbiAgICB0aGlzLnJvdXRlclRhcmdldElkID0gcmVzb3VyY2UuYXR0cklkO1xuICAgIHRoaXMucm91dGVyVHlwZSA9IFJvdXRlclR5cGUuVFJBTlNJVF9HQVRFV0FZO1xuICAgIHRoaXMudHJhbnNpdEdhdGV3YXlBcm4gPSByZXNvdXJjZS5hdHRyVHJhbnNpdEdhdGV3YXlBcm47XG4gICAgdGhpcy5kbnNTdXBwb3J0ID0gcHJvcHMuZG5zU3VwcG9ydCA/PyB0cnVlO1xuICAgIHRoaXMuc2VjdXJpdHlHcm91cFJlZmVyZW5jaW5nU3VwcG9ydCA9IHByb3BzLnNlY3VyaXR5R3JvdXBSZWZlcmVuY2luZ1N1cHBvcnQgPz8gZmFsc2U7XG5cbiAgICB0aGlzLmRlZmF1bHRSb3V0ZVRhYmxlID0gbmV3IFRyYW5zaXRHYXRld2F5Um91dGVUYWJsZSh0aGlzLCAnRGVmYXVsdFJvdXRlVGFibGUnLCB7XG4gICAgICB0cmFuc2l0R2F0ZXdheTogdGhpcyxcbiAgICB9KTtcblxuICAgIHRoaXMuZGVmYXVsdFJvdXRlVGFibGVBc3NvY2lhdGlvbiA9IHByb3BzLmRlZmF1bHRSb3V0ZVRhYmxlQXNzb2NpYXRpb24gPz8gdHJ1ZTtcbiAgICB0aGlzLmRlZmF1bHRSb3V0ZVRhYmxlUHJvcGFnYXRpb24gPSBwcm9wcy5kZWZhdWx0Um91dGVUYWJsZVByb3BhZ2F0aW9uID8/IHRydWU7XG4gIH1cbn1cbiJdfQ==
|
|
208
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNpdC1nYXRld2F5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidHJhbnNpdC1nYXRld2F5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUFvRTtBQUNwRSxzREFBd0M7QUFFeEMsK0VBQW9HO0FBQ3BHLHFGQUErSDtBQUUvSCx1R0FBZ0c7QUFDaEcsdUdBQWdHO0FBQ2hHLGlDQUF1RTtBQUN2RSw4RUFBOEU7QUFDOUUsMEVBQTBFO0FBcUkxRTs7O0dBR0c7QUFDSCxNQUFlLGtCQUFtQixTQUFRLEdBQUcsQ0FBQyxRQUFRO0lBV3BEOzs7O09BSUc7SUFDSSxhQUFhLENBQUMsRUFBVTtRQUM3QixPQUFPLElBQUksc0RBQXdCLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUM1QyxjQUFjLEVBQUUsSUFBSTtTQUNyQixDQUFDLENBQUM7S0FDSjtJQUVEOzs7O09BSUc7SUFDSSxTQUFTLENBQUMsRUFBVSxFQUFFLE9BQXlCO1FBQ3BELE1BQU0sVUFBVSxHQUFHLElBQUksNERBQTJCLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUMzRCxjQUFjLEVBQUUsSUFBSTtZQUNwQixHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7WUFDaEIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1lBQ3hCLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxvQkFBb0IsSUFBSSxTQUFTO1NBQ2hFLENBQUMsQ0FBQztRQUVILHVJQUF1STtRQUN2SSwwSkFBMEo7UUFDMUosSUFBSSxPQUFPLENBQUMscUJBQXFCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxPQUFPLENBQUMscUJBQXFCLElBQUksSUFBSSxDQUFDLDRCQUE0QixDQUFDLEVBQUUsQ0FBQztZQUN0SSxJQUFJLDZFQUFtQyxDQUFDLElBQUksRUFBRSxH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R0FBRyxLQUFLLENBQUMsK0JBQStCLElBQUksS0FBSyxDQUFDO1lBRXRGLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLHNEQUF3QixDQUFDLElBQUksRUFBRSxtQkFBbUIsRUFBRTtnQkFDL0UsY0FBYyxFQUFFLElBQUk7YUFDckIsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLDRCQUE0QixHQUFHLEtBQUssQ0FBQyw0QkFBNEIsSUFBSSxJQUFJLENBQUM7WUFDL0UsSUFBSSxDQUFDLDRCQUE0QixHQUFHLEtBQUssQ0FBQyw0QkFBNEIsSUFBSSxJQUFJLENBQUM7U0FDaEY7O1lBN0NVLHVEQUFjOzs7OztBQUFkLHdDQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2ZuVHJhbnNpdEdhdGV3YXksIFJvdXRlclR5cGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgSVRyYW5zaXRHYXRld2F5Um91dGVUYWJsZSwgVHJhbnNpdEdhdGV3YXlSb3V0ZVRhYmxlIH0gZnJvbSAnLi90cmFuc2l0LWdhdGV3YXktcm91dGUtdGFibGUnO1xuaW1wb3J0IHsgVHJhbnNpdEdhdGV3YXlWcGNBdHRhY2htZW50LCBBdHRhY2hWcGNPcHRpb25zLCBJVHJhbnNpdEdhdGV3YXlWcGNBdHRhY2htZW50IH0gZnJvbSAnLi90cmFuc2l0LWdhdGV3YXktdnBjLWF0dGFjaG1lbnQnO1xuaW1wb3J0IHsgSVJvdXRlVGFyZ2V0IH0gZnJvbSAnLi9yb3V0ZSc7XG5pbXBvcnQgeyBUcmFuc2l0R2F0ZXdheVJvdXRlVGFibGVBc3NvY2lhdGlvbiB9IGZyb20gJy4vdHJhbnNpdC1nYXRld2F5LXJvdXRlLXRhYmxlLWFzc29jaWF0aW9uJztcbmltcG9ydCB7IFRyYW5zaXRHYXRld2F5Um91dGVUYWJsZVByb3BhZ2F0aW9uIH0gZnJvbSAnLi90cmFuc2l0LWdhdGV3YXktcm91dGUtdGFibGUtcHJvcGFnYXRpb24nO1xuaW1wb3J0IHsgZ2V0RmVhdHVyZVN0YXR1cywgVHJhbnNpdEdhdGV3YXlGZWF0dXJlU3RhdHVzIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvbWV0YWRhdGEtcmVzb3VyY2UnO1xuaW1wb3J0IHsgcHJvcGVydHlJbmplY3RhYmxlIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvcHJvcC1pbmplY3RhYmxlJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgVHJhbnNpdCBHYXRld2F5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElUcmFuc2l0R2F0ZXdheSBleHRlbmRzIGNkay5JUmVzb3VyY2UsIElSb3V0ZVRhcmdldCB7XG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIFRyYW5zaXQgR2F0ZXdheS5cbiAgICpcbiAgICogVGhpcyBJRCBpcyBhdXRvbWF0aWNhbGx5IGFzc2lnbmVkIGJ5IEFXUyB1cG9uIGNyZWF0aW9uIG9mIHRoZSBUcmFuc2l0IEdhdGV3YXlcbiAgICogYW5kIGlzIHVzZWQgdG8gcmVmZXJlbmNlIGl0IGluIHZhcmlvdXMgY29uZmlndXJhdGlvbnMgYW5kIG9wZXJhdGlvbnMuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHRyYW5zaXRHYXRld2F5SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBUcmFuc2l0IEdhdGV3YXkuXG4gICAqXG4gICAqIFRoZSBBUk4gdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgVHJhbnNpdCBHYXRld2F5IGFjcm9zcyBBV1MgYW5kIGlzIGNvbW1vbmx5XG4gICAqIHVzZWQgZm9yIHBlcm1pc3Npb25zIGFuZCByZXNvdXJjZSB0cmFja2luZy5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgdHJhbnNpdEdhdGV3YXlBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgcm91dGUgdGFibGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBUcmFuc2l0IEdhdGV3YXkuXG4gICAqXG4gICAqIFRoaXMgcm91dGUgdGFibGUgaXMgY3JlYXRlZCBieSB0aGUgQ0RLIGFuZCBpcyB1c2VkIHRvIG1hbmFnZSB0aGUgcm91dGVzXG4gICAqIGZvciBhdHRhY2htZW50cyB0aGF0IGRvIG5vdCBoYXZlIGFuIGV4cGxpY2l0bHkgZGVmaW5lZCByb3V0ZSB0YWJsZSBhc3NvY2lhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRSb3V0ZVRhYmxlOiBJVHJhbnNpdEdhdGV3YXlSb3V0ZVRhYmxlO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciBuZXcgYXR0YWNobWVudHMgYXJlIGF1dG9tYXRpY2FsbHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZWZhdWx0IHJvdXRlIHRhYmxlLlxuICAgKlxuICAgKiBJZiBzZXQgdG8gYHRydWVgLCBhbnkgVlBDIG9yIFZQTiBhdHRhY2htZW50IHdpbGwgYmUgYXV0b21hdGljYWxseSBhc3NvY2lhdGVkIHdpdGhcbiAgICogdGhlIGRlZmF1bHQgcm91dGUgdGFibGUgdW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQuXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0Um91dGVUYWJsZUFzc29jaWF0aW9uOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciByb3V0ZSBwcm9wYWdhdGlvbiB0byB0aGUgZGVmYXVsdCByb3V0ZSB0YWJsZSBpcyBlbmFibGVkLlxuICAgKlxuICAgKiBXaGVuIHNldCB0byBgdHJ1ZWAsIHJvdXRlcyBmcm9tIGF0dGFjaG1lbnRzIHdpbGwgYmUgYXV0b21hdGljYWxseSBwcm9wYWdhdGVkXG4gICAqIHRvIHRoZSBkZWZhdWx0IHJvdXRlIHRhYmxlIHVubGVzcyBwcm9wYWdhdGlvbiBpcyBleHBsaWNpdGx5IGRpc2FibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdFJvdXRlVGFibGVQcm9wYWdhdGlvbjogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgRE5TIHN1cHBvcnQgaXMgZW5hYmxlZCBvbiB0aGUgVHJhbnNpdCBHYXRld2F5LlxuICAgKi9cbiAgcmVhZG9ubHkgZG5zU3VwcG9ydDogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3Qgc2VjdXJpdHkgZ3JvdXAgcmVmZXJlbmNpbmcgc3VwcG9ydCBpcyBlbmFibGVkIG9uIHRoZSBUcmFuc2l0IEdhdGV3YXkuXG4gICAqL1xuICByZWFkb25seSBzZWN1cml0eUdyb3VwUmVmZXJlbmNpbmdTdXBwb3J0OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbW1vbiBwcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhIFRyYW5zaXQgR2F0ZXdheSByZXNvdXJjZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmFuc2l0R2F0ZXdheVByb3BzIHtcbiAgLyoqXG4gICAqIFBoeXNpY2FsIG5hbWUgb2YgdGhpcyBUcmFuc2l0IEdhdGV3YXkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQXNzaWduZWQgYnkgQ2xvdWRGb3JtYXRpb24uXG4gICAqL1xuICByZWFkb25seSB0cmFuc2l0R2F0ZXdheU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgcHJpdmF0ZSBBdXRvbm9tb3VzIFN5c3RlbSBOdW1iZXIgKEFTTikgZm9yIHRoZSBBbWF6b24gc2lkZSBvZiBhIEJHUCBzZXNzaW9uLiBUaGUgcmFuZ2UgaXMgNjQ1MTIgdG8gNjU1MzQgZm9yIDE2LWJpdCBBU05zLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZCwgNjQ1MTIgaXMgYXNzaWduZWQgYnkgQ2xvdWRGb3JtYXRpb24uXG4gICAqL1xuICByZWFkb25seSBhbWF6b25TaWRlQXNuPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgb3IgZGlzYWJsZSBhdXRvbWF0aWMgYWNjZXB0YW5jZSBvZiBjcm9zcy1hY2NvdW50IGF0dGFjaG1lbnQgcmVxdWVzdHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGlzYWJsZSAoZmFsc2UpXG4gICAqL1xuICByZWFkb25seSBhdXRvQWNjZXB0U2hhcmVkQXR0YWNobWVudHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgb3IgZGlzYWJsZSBhdXRvbWF0aWMgYXNzb2NpYXRpb24gd2l0aCB0aGUgZGVmYXVsdCBhc3NvY2lhdGlvbiByb3V0ZSB0YWJsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBlbmFibGUgKHRydWUpXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0Um91dGVUYWJsZUFzc29jaWF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW5hYmxlIG9yIGRpc2FibGUgYXV0b21hdGljIHByb3BhZ2F0aW9uIG9mIHJvdXRlcyB0byB0aGUgZGVmYXVsdCBwcm9wYWdhdGlvbiByb3V0ZSB0YWJsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBlbmFibGUgKHRydWUpXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0Um91dGVUYWJsZVByb3BhZ2F0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSB0cmFuc2l0IGdhdGV3YXkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgb3IgZGlzYWJsZSBETlMgc3VwcG9ydC5cbiAgICpcbiAgICogSWYgZG5zU3VwcG9ydCBpcyBlbmFibGVkIG9uIGEgVlBDIEF0dGFjaG1lbnQsIHRoaXMgYWxzbyBuZWVkcyB0byBiZSBlbmFibGVkIGZvciB0aGUgZmVhdHVyZSB0byB3b3JrLlxuICAgKiBPdGhlcndpc2UgdGhlIHJlc291cmNlcyB3aWxsIHN0aWxsIGRlcGxveSBidXQgdGhlIGZlYXR1cmUgd2lsbCBub3Qgd29yay5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBlbmFibGUgKHRydWUpXG4gICAqL1xuICByZWFkb25seSBkbnNTdXBwb3J0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW5hYmxlIG9yIGRpc2FibGUgc2VjdXJpdHkgZ3JvdXAgcmVmZXJlbmNpbmcgc3VwcG9ydFxuICAgKlxuICAgKiBJZiBzZWN1cml0eUdyb3VwUmVmZXJlbmNpbmdTdXBwb3J0IGlzIGVuYWJsZWQgb24gYSBWUEMgQXR0YWNobWVudCwgdGhpcyBhbHNvIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIHRoZSBmZWF0dXJlIHRvIHdvcmsuXG4gICAqIE90aGVyd2lzZSB0aGUgcmVzb3VyY2VzIHdpbGwgc3RpbGwgZGVwbG95IGJ1dCB0aGUgZmVhdHVyZSB3aWxsIG5vdCB3b3JrLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRpc2FibGUgKGZhbHNlKVxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cFJlZmVyZW5jaW5nU3VwcG9ydD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSB0cmFuc2l0IGdhdGV3YXkgQ0lEUiBibG9ja3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgdHJhbnNpdEdhdGV3YXlDaWRyQmxvY2tzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQSBUcmFuc2l0IEdhdGV3YXkuXG4gKiBAaW50ZXJuYWxcbiAqL1xuYWJzdHJhY3QgY2xhc3MgVHJhbnNpdEdhdGV3YXlCYXNlIGV4dGVuZHMgY2RrLlJlc291cmNlIGltcGxlbWVudHMgSVRyYW5zaXRHYXRld2F5LCBJUm91dGVUYXJnZXQge1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgcm91dGVyVHlwZTogUm91dGVyVHlwZTtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHJvdXRlclRhcmdldElkOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB0cmFuc2l0R2F0ZXdheUlkOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB0cmFuc2l0R2F0ZXdheUFybjogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgZGVmYXVsdFJvdXRlVGFibGU6IElUcmFuc2l0R2F0ZXdheVJvdXRlVGFibGU7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBkZWZhdWx0Um91dGVUYWJsZUFzc29jaWF0aW9uOiBib29sZWFuO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgZGVmYXVsdFJvdXRlVGFibGVQcm9wYWdhdGlvbjogYm9vbGVhbjtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGRuc1N1cHBvcnQ6IGJvb2xlYW47XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBzZWN1cml0eUdyb3VwUmVmZXJlbmNpbmdTdXBwb3J0OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IHJvdXRlIHRhYmxlIHRvIHRoZSBUcmFuc2l0IEdhdGV3YXkuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIFRyYW5zaXQgR2F0ZXdheSByb3V0ZSB0YWJsZS5cbiAgICovXG4gIHB1YmxpYyBhZGRSb3V0ZVRhYmxlKGlkOiBzdHJpbmcpOiBJVHJhbnNpdEdhdGV3YXlSb3V0ZVRhYmxlIHtcbiAgICByZXR1cm4gbmV3IFRyYW5zaXRHYXRld2F5Um91dGVUYWJsZSh0aGlzLCBpZCwge1xuICAgICAgdHJhbnNpdEdhdGV3YXk6IHRoaXMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXR0YWNoZXMgYSBWUEMgdG8gdGhlIFRyYW5zaXQgR2F0ZXdheS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGNyZWF0ZWQgVHJhbnNpdCBHYXRld2F5IFZQQyBhdHRhY2htZW50LlxuICAgKi9cbiAgcHVibGljIGF0dGFjaFZwYyhpZDogc3RyaW5nLCBvcHRpb25zOiBBdHRhY2hWcGNPcHRpb25zKTogSVRyYW5zaXRHYXRld2F5VnBjQXR0YWNobWVudCB7XG4gICAgY29uc3QgYXR0YWNobWVudCA9IG5ldyBUcmFuc2l0R2F0ZXdheVZwY0F0dGFjaG1lbnQodGhpcywgaWQsIHtcbiAgICAgIHRyYW5zaXRHYXRld2F5OiB0aGlzLFxuICAgICAgdnBjOiBvcHRpb25zLnZwYyxcbiAgICAgIHN1Ym5ldHM6IG9wdGlvbnMuc3VibmV0cyxcbiAgICAgIHZwY0F0dGFjaG1lbnRPcHRpb25zOiBvcHRpb25zLnZwY0F0dGFjaG1lbnRPcHRpb25zID8/IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIC8vIElmIGBhc3NvY2lhdGlvblJvdXRlVGFibGVgIGlzIHByb3ZpZGVkLCBza2lwIGNyZWF0aW5nIHRoZSBBc3NvY2lhdGlvbiBvbmx5IGlmIGBhc3NvY2lhdGlvblJvdXRlVGFibGVgIGlzIHRoZSBkZWZhdWx0IHJvdXRlIHRhYmxlIGFuZFxuICAgIC8vIGF1dG9tYXRpYyBhc3NvY2lhdGlvbiAoYGRlZmF1bHRSb3V0ZVRhYmxlQXNzb2NpYXRpb25gKSBpcyBlbmFibGVkLCBhcyB0aGUgVHJhbnNpdEdhdGV3YXlSb3V0ZVRhYmxlQXR0YWNobWVudCdzIGNvbnN0cnVjdG9yIHdpbGwgaGFuZGxlIGl0IGluIHRoYXQgY2FzZS5cbiAgICBpZiAob3B0aW9ucy5hc3NvY2lhdGlvblJvdXRlVGFibGUgJiYgISh0aGlzLmRlZmF1bHRSb3V0ZVRhYmxlID09PSBvcHRpb25zLmFzc29jaWF0aW9uUm91dGVUYWJsZSAmJiB0aGlzLmRlZmF1bHRSb3V0ZVRhYmxlQXNzb2NpYXRpb24pKSB7XG4gICAgICBuZXcgVHJhbnNpdEdhdGV3YXlSb3V0ZVRhYmxlQXNzb2NpYXRpb24odGhpcywgYCR7aWR9LUFzc29jaWF0aW9uLSR7dGhpcy5ub2RlLmFkZHJ9YCwge1xuICAgICAgICB0cmFuc2l0R2F0ZXdheVZwY0F0dGFjaG1lbnQ6IGF0dGFjaG1lbnQsXG4gICAgICAgIHRyYW5zaXRHYXRld2F5Um91dGVUYWJsZTogb3B0aW9ucy5hc3NvY2lhdGlvblJvdXRlVGFibGUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5wcm9wYWdhdGlvblJvdXRlVGFibGVzKSB7XG4gICAgICBvcHRpb25zLnByb3BhZ2F0aW9uUm91dGVUYWJsZXMuZm9yRWFjaCgocHJvcGFnYXRpb25Sb3V0ZVRhYmxlLCBpbmRleCkgPT4ge1xuICAgICAgICAvLyBJZiBgcHJvcGFnYXRpb25Sb3V0ZVRhYmxlYCBpcyBwcm92aWRlZCwgc2tpcCBjcmVhdGluZyB0aGUgUHJvcGFnYXRpb24gb25seSBpZiBgcHJvcGFnYXRpb25Sb3V0ZVRhYmxlYCBpcyB0aGUgZGVmYXVsdCByb3V0ZSB0YWJsZSBhbmRcbiAgICAgICAgLy8gYXV0b21hdGljIHByb3BhZ2F0aW9uIChgZGVmYXVsdFJvdXRlVGFibGVQcm9wYWdhdGlvbmApIGlzIGVuYWJsZWQsIGFzIHRoZSBUcmFuc2l0R2F0ZXdheVJvdXRlVGFibGVBdHRhY2htZW50J3MgY29uc3RydWN0b3Igd2lsbCBoYW5kbGUgaXQgaW4gdGhhdCBjYXNlLlxuICAgICAgICBpZiAoISh0aGlzLmRlZmF1bHRSb3V0ZVRhYmxlID09PSBwcm9wYWdhdGlvblJvdXRlVGFibGUgJiYgdGhpcy5kZWZhdWx0Um91dGVUYWJsZVByb3BhZ2F0aW9uKSkge1xuICAgICAgICAgIG5ldyBUcmFuc2l0R2F0ZXdheVJvdXRlVGFibGVQcm9wYWdhdGlvbih0aGlzLCBgJHtpZH0tUHJvcGFnYXRpb24tJHtpbmRleH1gLCB7XG4gICAgICAgICAgICB0cmFuc2l0R2F0ZXdheVZwY0F0dGFjaG1lbnQ6IGF0dGFjaG1lbnQsXG4gICAgICAgICAgICB0cmFuc2l0R2F0ZXdheVJvdXRlVGFibGU6IHByb3BhZ2F0aW9uUm91dGVUYWJsZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF0dGFjaG1lbnQ7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgVHJhbnNpdCBHYXRld2F5LlxuICpcbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6VHJhbnNpdEdhdGV3YXlcbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIFRyYW5zaXRHYXRld2F5IGV4dGVuZHMgVHJhbnNpdEdhdGV3YXlCYXNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtZWMyLWFscGhhLlRyYW5zaXRHYXRld2F5JztcbiAgcHVibGljIHJlYWRvbmx5IHJvdXRlclR5cGU6IFJvdXRlclR5cGU7XG4gIHB1YmxpYyByZWFkb25seSByb3V0ZXJUYXJnZXRJZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgdHJhbnNpdEdhdGV3YXlJZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgdHJhbnNpdEdhdGV3YXlBcm46IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRSb3V0ZVRhYmxlOiBJVHJhbnNpdEdhdGV3YXlSb3V0ZVRhYmxlO1xuICBwdWJsaWMgcmVhZG9ubHkgZGVmYXVsdFJvdXRlVGFibGVBc3NvY2lhdGlvbjogYm9vbGVhbjtcbiAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRSb3V0ZVRhYmxlUHJvcGFnYXRpb246IGJvb2xlYW47XG4gIHB1YmxpYyByZWFkb25seSBkbnNTdXBwb3J0OiBib29sZWFuO1xuICBwdWJsaWMgcmVhZG9ubHkgc2VjdXJpdHlHcm91cFJlZmVyZW5jaW5nU3VwcG9ydDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVHJhbnNpdEdhdGV3YXlQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIGNvbnN0IHJlc291cmNlID0gbmV3IENmblRyYW5zaXRHYXRld2F5KHRoaXMsIGlkLCB7XG4gICAgICBhbWF6b25TaWRlQXNuOiBwcm9wcy5hbWF6b25TaWRlQXNuID8/IHVuZGVmaW5lZCxcbiAgICAgIGF1dG9BY2NlcHRTaGFyZWRBdHRhY2htZW50czogZ2V0RmVhdHVyZVN0YXR1cyhwcm9wcy5hdXRvQWNjZXB0U2hhcmVkQXR0YWNobWVudHMpLFxuICAgICAgLy8gRGVmYXVsdCBBc3NvY2lhdGlvbi9Qcm9wYWdhdGlvbiB3aWxsIGFsd2F5cyBiZSBmYWxzZSB3aGVuIGNyZWF0aW5nIHRoZSBMMSB0byBwcmV2ZW50IEVDMiBmcm9tIGNyZWF0aW5nIHRoZSBkZWZhdWx0IHJvdXRlIHRhYmxlLlxuICAgICAgLy8gSW5zdGVhZCwgQ0RLIHdpbGwgY3JlYXRlIGEgY3VzdG9tIGRlZmF1bHQgcm91dGUgdGFibGUgYW5kIHVzZSB0aGUgcHJvcGVydGllcyB0byBtaW1pYyB0aGUgYXV0b21hdGljIGFzc29jYXRpb24vcHJvcGFnYXRpb24gYmVoYXZpb3VyLlxuICAgICAgZGVmYXVsdFJvdXRlVGFibGVBc3NvY2lhdGlvbjogVHJhbnNpdEdhdGV3YXlGZWF0dXJlU3RhdHVzLkRJU0FCTEUsXG4gICAgICBkZWZhdWx0Um91dGVUYWJsZVByb3BhZ2F0aW9uOiBUcmFuc2l0R2F0ZXdheUZlYXR1cmVTdGF0dXMuRElTQUJMRSxcbiAgICAgIHRyYW5zaXRHYXRld2F5Q2lkckJsb2NrczogcHJvcHMudHJhbnNpdEdhdGV3YXlDaWRyQmxvY2tzLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgZG5zU3VwcG9ydDogZ2V0RmVhdHVyZVN0YXR1cyhwcm9wcy5kbnNTdXBwb3J0KSxcbiAgICAgIHNlY3VyaXR5R3JvdXBSZWZlcmVuY2luZ1N1cHBvcnQ6IGdldEZlYXR1cmVTdGF0dXMocHJvcHMuc2VjdXJpdHlHcm91cFJlZmVyZW5jaW5nU3VwcG9ydCksXG4gICAgfSk7XG5cbiAgICB0aGlzLm5vZGUuZGVmYXVsdENoaWxkID0gcmVzb3VyY2U7XG4gICAgdGhpcy50cmFuc2l0R2F0ZXdheUlkID0gcmVzb3VyY2UuYXR0cklkO1xuICAgIHRoaXMucm91dGVyVGFyZ2V0SWQgPSByZXNvdXJjZS5hdHRySWQ7XG4gICAgdGhpcy5yb3V0ZXJUeXBlID0gUm91dGVyVHlwZS5UUkFOU0lUX0dBVEVXQVk7XG4gICAgdGhpcy50cmFuc2l0R2F0ZXdheUFybiA9IHJlc291cmNlLmF0dHJUcmFuc2l0R2F0ZXdheUFybjtcbiAgICB0aGlzLmRuc1N1cHBvcnQgPSBwcm9wcy5kbnNTdXBwb3J0ID8/IHRydWU7XG4gICAgdGhpcy5zZWN1cml0eUdyb3VwUmVmZXJlbmNpbmdTdXBwb3J0ID0gcHJvcHMuc2VjdXJpdHlHcm91cFJlZmVyZW5jaW5nU3VwcG9ydCA/PyBmYWxzZTtcblxuICAgIHRoaXMuZGVmYXVsdFJvdXRlVGFibGUgPSBuZXcgVHJhbnNpdEdhdGV3YXlSb3V0ZVRhYmxlKHRoaXMsICdEZWZhdWx0Um91dGVUYWJsZScsIHtcbiAgICAgIHRyYW5zaXRHYXRld2F5OiB0aGlzLFxuICAgIH0pO1xuXG4gICAgdGhpcy5kZWZhdWx0Um91dGVUYWJsZUFzc29jaWF0aW9uID0gcHJvcHMuZGVmYXVsdFJvdXRlVGFibGVBc3NvY2lhdGlvbiA/PyB0cnVlO1xuICAgIHRoaXMuZGVmYXVsdFJvdXRlVGFibGVQcm9wYWdhdGlvbiA9IHByb3BzLmRlZmF1bHRSb3V0ZVRhYmxlUHJvcGFnYXRpb24gPz8gdHJ1ZTtcbiAgfVxufVxuIl19
|
package/lib/util.js
CHANGED
|
@@ -177,6 +177,22 @@ class CidrBlock {
|
|
|
177
177
|
static calculateNetsize(mask) {
|
|
178
178
|
return 2 ** (32 - mask);
|
|
179
179
|
}
|
|
180
|
+
/**
|
|
181
|
+
* IP address in the CIDR block.
|
|
182
|
+
*/
|
|
183
|
+
cidr;
|
|
184
|
+
/*
|
|
185
|
+
* The CIDR mask e.g. for CIDR '10.0.0.0/21' returns 21
|
|
186
|
+
*/
|
|
187
|
+
mask;
|
|
188
|
+
/*
|
|
189
|
+
* The total number of IP addresses in the CIDR
|
|
190
|
+
*/
|
|
191
|
+
networkSize;
|
|
192
|
+
/*
|
|
193
|
+
* The network address provided in CIDR creation offset by the Netsize -1
|
|
194
|
+
*/
|
|
195
|
+
networkAddress;
|
|
180
196
|
constructor(ipAddressOrCidr, mask) {
|
|
181
197
|
if (typeof ipAddressOrCidr === 'string') {
|
|
182
198
|
this.mask = parseInt(ipAddressOrCidr.split('/')[1], 10);
|
|
@@ -275,8 +291,18 @@ exports.CidrBlock = CidrBlock;
|
|
|
275
291
|
* IP addresses in a CIDR block, and checking if two CIDR blocks overlap.
|
|
276
292
|
*/
|
|
277
293
|
class CidrBlockIpv6 {
|
|
294
|
+
/**
|
|
295
|
+
* Ipv6 CIDR range
|
|
296
|
+
*/
|
|
297
|
+
cidr;
|
|
298
|
+
/**
|
|
299
|
+
* The CIDR prefix length (number of bits used for the network portion of the address).
|
|
300
|
+
*/
|
|
301
|
+
cidrPrefix;
|
|
302
|
+
ipParts;
|
|
303
|
+
networkBits;
|
|
304
|
+
networkPart;
|
|
278
305
|
constructor(cidr) {
|
|
279
|
-
this.formatIPv6Part = (part) => part.toString(16).padStart(4, '0');
|
|
280
306
|
this.cidr = cidr;
|
|
281
307
|
const [ipAddress, prefix] = cidr.split('/');
|
|
282
308
|
this.cidrPrefix = parseInt(prefix, 10);
|
|
@@ -345,6 +371,7 @@ class CidrBlockIpv6 {
|
|
|
345
371
|
*/
|
|
346
372
|
return endIP.map(this.formatIPv6Part).join(':');
|
|
347
373
|
}
|
|
374
|
+
formatIPv6Part = (part) => part.toString(16).padStart(4, '0');
|
|
348
375
|
/**
|
|
349
376
|
*
|
|
350
377
|
* @param range1 Ipv6 CIDR range to compare
|
|
@@ -377,4 +404,4 @@ class CidrBlockIpv6 {
|
|
|
377
404
|
}
|
|
378
405
|
}
|
|
379
406
|
exports.CidrBlockIpv6 = CidrBlockIpv6;
|
|
380
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHNFQUFzRTs7O0FBT3RFLDhDQVVDO0FBT0Qsd0VBRUM7QUFLRCw0QkFFQztBQWlCRCw0Q0FNQztBQUtELDRDQVFDO0FBRUQsMEJBRUM7QUF2RUQsaURBQXNFO0FBRXRFOztHQUVHO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQUMsSUFBZ0I7SUFDaEQsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUNiLEtBQUssb0JBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLFFBQVEsQ0FBQztRQUN4QyxLQUFLLG9CQUFVLENBQUMsZ0JBQWdCLENBQUM7UUFDakMsS0FBSyxvQkFBVSxDQUFDLG1CQUFtQjtZQUNqQyxPQUFPLFNBQVMsQ0FBQztRQUNuQixLQUFLLG9CQUFVLENBQUMsZ0JBQWdCO1lBQzlCLE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLDhCQUE4QixDQUFDLE1BQWtCO0lBQy9ELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixRQUFRLENBQUMsSUFBWSxFQUFFLENBQVM7SUFDOUMsT0FBTyxHQUFHLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDakMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsSUFBWSwyQkFVWDtBQVZELFdBQVksMkJBQTJCO0lBQ3JDOztPQUVHO0lBQ0gsZ0RBQWlCLENBQUE7SUFFakI7O09BRUc7SUFDSCxrREFBbUIsQ0FBQTtBQUNyQixDQUFDLEVBVlcsMkJBQTJCLDJDQUEzQiwyQkFBMkIsUUFVdEM7QUFFRCxTQUFnQixnQkFBZ0IsQ0FBQyxNQUFnQjtJQUMvQyxJ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cUQ7UUFDckQsTUFBTSxLQUFLLEdBQUcsSUFBSSxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFeEMsMkRBQTJEO1FBQzNELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDaEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM5QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFOUMsb0JBQW9CO1FBQ3BCLE9BQU8sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLENBQUM7S0FDN0M7SUFFRDs7T0FFRztJQUNLLFlBQVksQ0FBQyxXQUFtQjtRQUN0QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbEQsSUFBSSxVQUFVLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNCLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7WUFDM0IsK0JBQStCO1lBQy9CLFVBQVUsR0FBRyxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDbEQsQ0FBQztRQUNELE9BQU8sVUFBVSxDQUFDO0tBQ25CO0NBQ0Y7QUE1SEQsc0NBNEhDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50IG5vLWJpdHdpc2U6IFtcImVycm9yXCIsIHsgXCJhbGxvd1wiOiBbXCJ+XCIsIFwifFwiLCBcIjw8XCIsIFwiJlwiXSB9XSAqL1xuXG5pbXBvcnQgeyBJU3VibmV0LCBJU3VibmV0UmVmLCBTdWJuZXRUeXBlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgbmFtZXMgZm9yIGV2ZXJ5IHN1Ym5ldCB0eXBlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0U3VibmV0TmFtZSh0eXBlOiBTdWJuZXRUeXBlKSB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgU3VibmV0VHlwZS5QVUJMSUM6IHJldHVybiAnUHVibGljJztcbiAgICBjYXNlIFN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX05BVDpcbiAgICBjYXNlIFN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTUzpcbiAgICAgIHJldHVybiAnUHJpdmF0ZSc7XG4gICAgY2FzZSBTdWJuZXRUeXBlLlBSSVZBVEVfSVNPTEFURUQ6XG4gICAgICByZXR1cm4gJ0lzb2xhdGVkJztcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJldHVybiBhIHN1Ym5ldCBuYW1lIGZyb20gaXRzIGNvbnN0cnVjdCBJRFxuICpcbiAqIEFsbCBzdWJuZXQgbmFtZXMgbG9vayBsaWtlIE5BTUUgPD4gXCJTdWJuZXRcIiA8PiBJTkRFWFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3VibmV0R3JvdXBOYW1lRnJvbUNvbnN0cnVjdElkKHN1Ym5ldDogSVN1Ym5ldFJlZikge1xuICByZXR1cm4gc3VibmV0Lm5vZGUuaWQucmVwbGFjZSgvU3VibmV0XFxkKyQvLCAnJyk7XG59XG5cbi8qKlxuICogTWFrZSB0aGUgc3VibmV0IGNvbnN0cnVjdCBJRCBmcm9tIGEgbmFtZSBhbmQgbnVtYmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJuZXRJZChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICByZXR1cm4gYCR7bmFtZX1TdWJuZXQke2kgKyAxfWA7XG59XG5cbi8qKlxuICogVGhlIHN0YXR1cyBvZiBhIFRyYW5zaXQgR2F0ZXdheSBmZWF0dXJlLlxuICovXG5leHBvcnQgZW51bSBUcmFuc2l0R2F0ZXdheUZlYXR1cmVTdGF0dXMge1xuICAvKipcbiAgICogVGhlIGZlYXR1cmUgaXMgZW5hYmxlZC5cbiAgICovXG4gIEVOQUJMRSA9ICdlbmFibGUnLFxuXG4gIC8qKlxuICAgKiBUaGUgZmVhdHVyZSBpcyBkaXNhYmxlZC5cbiAgICovXG4gIERJU0FCTEUgPSAnZGlzYWJsZScsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGZWF0dXJlU3RhdHVzKHN0YXR1cz86IGJvb2xlYW4pOiBUcmFuc2l0R2F0ZXdheUZlYXR1cmVTdGF0dXMgfCB1bmRlZmluZWQge1xuICBpZiAoc3RhdHVzID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzdGF0dXMgPyBUcmFuc2l0R2F0ZXdheUZlYXR1cmVTdGF0dXMuRU5BQkxFIDogVHJhbnNpdEdhdGV3YXlGZWF0dXJlU3RhdHVzLkRJU0FCTEU7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHVuaW9uIG9mIHRhYmxlIElEcyBmcm9tIGFsbCBzZWxlY3RlZCBzdWJuZXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGxSb3V0ZVRhYmxlSWRzKHN1Ym5ldHM6IElTdWJuZXRbXSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgcmV0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3Qgc3VibmV0IG9mIHN1Ym5ldHMpIHtcbiAgICBpZiAoc3VibmV0LnJvdXRlVGFibGUgJiYgc3VibmV0LnJvdXRlVGFibGUucm91dGVUYWJsZUlkKSB7XG4gICAgICByZXQuYWRkKHN1Ym5ldC5yb3V0ZVRhYmxlLnJvdXRlVGFibGVJZCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBBcnJheS5mcm9tKHJldCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuPEE+KHhzOiBBW11bXSk6IEFbXSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCB4cyk7XG59XG5cbi8qKlxuICogTmV0d29ya1V0aWxzIGNvbnRhaW5zIGhlbHBlcnMgdG8gd29yayB3aXRoIG5ldHdvcmsgY29uc3RydWN0cyAoc3VibmV0cy9yYW5nZXMpXG4gKi9cbmV4cG9ydCBjbGFzcyBOZXR3b3JrVXRpbHMge1xuICAvKipcbiAgICogVmFsaWRhdGVzIGFuIElQdjQgYWRkcmVzcyBzdHJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBpcEFkZHJlc3MgVGhlIElQdjQgYWRkcmVzcyBzdHJpbmcgdG8gYmUgdmFsaWRhdGVkLlxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBzdHJpbmcgaXMgYSB2YWxpZCBJUHY0IGFkZHJlc3MsIGZhbHNlIG90aGVyd2lzZS5cbiAgICogVmFsaWRhdGVzIGFuIElQdjQgc3RyaW5nXG4gICAqXG4gICAqIHJldHVybnMgdHJ1ZSBvZiB0aGUgc3RyaW5nIGNvbnRhaW5zIDQgbnVtYmVycyBiZXR3ZWVuIDAtMjU1IGRlbGltaXRlZCBieVxuICAgKiBhIGAuYCBjaGFyYWN0ZXJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdmFsaWRJcChpcEFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG9jdGV0cyA9IGlwQWRkcmVzcy5zcGxpdCgnLicpO1xuICAgIGlmIChvY3RldHMubGVuZ3RoICE9PSA0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBvY3RldHMubWFwKChvY3RldDogc3RyaW5nKSA9PiBwYXJzZUludChvY3RldCwgMTApKS5cbiAgICAgIGV2ZXJ5KChvY3RldDogbnVtYmVyKSA9PiBvY3RldCA+PSAwICYmIG9jdGV0IDw9IDI1NSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gSVB2NCBhZGRyZXNzIHRvIGl0cyBjb3JyZXNwb25kaW5nIG51bWVyaWNhbCB2YWx1ZS5cbiAgICpcbiAgICogVXNlcyB0aGUgZm9ybXVsYTpcbiAgICogKGZpcnN0IG9jdGV0ICogMjU2wrMpICsgKHNlY29uZCBvY3RldCAqIDI1NsKyKSArICh0aGlyZCBvY3RldCAqIDI1NikgK1xuICAgKiAoZm91cnRoIG9jdGV0KVxuICAgKlxuICAgKiBAcGFyYW0gIGlwQWRkcmVzcyB0aGUgSVAgYWRkcmVzcyAoZS5nLiAxNzQuNjYuMTczLjE2OClcbiAgICogQHJldHVybnMgdGhlIGludGVnZXIgdmFsdWUgb2YgdGhlIElQIGFkZHJlc3MgKGUuZyAyOTIzNjA1NDE2KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpcFRvTnVtKGlwQWRkcmVzczogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMudmFsaWRJcChpcEFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7aXBBZGRyZXNzfSBpcyBub3QgdmFsaWRgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXBBZGRyZXNzXG4gICAgICAuc3BsaXQoJy4nKVxuICAgICAgLnJlZHVjZShcbiAgICAgICAgKHA6IG51bWJlciwgYzogc3RyaW5nLCBpOiBudW1iZXIpID0+IHAgKyBwYXJzZUludChjLCAxMCkgKiAyNTYgKiogKDMgLSBpKSxcbiAgICAgICAgMCxcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGFrZXMgbnVtYmVyIGFuZCBjb252ZXJ0cyBpdCB0byBJUHY0IGFkZHJlc3Mgc3RyaW5nXG4gICAqXG4gICAqIFRha2VzIGEgbnVtYmVyIChlLmcgMjkyMzYwNTQxNikgYW5kIGNvbnZlcnRzIGl0IHRvIGFuIElQdjQgYWRkcmVzcyBzdHJpbmdcbiAgICogY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgSVB2NFxuICAgKlxuICAgKiBAcGFyYW0gaXBOdW0gaW50ZWdlciB2YWx1ZSBvZiB0aGUgSVAgYWRkcmVzcyAoZS5nIDI5MjM2MDU0MTYpXG4gICAqIEByZXR1cm5zIElQdjQgYWRkcmVzcyAoZS5nLiAxNzQuNjYuMTczLjE2OClcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbnVtVG9JcChpcE51bTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAvLyB0aGlzIGFsbCBiZWNhdXNlIGJpdHdpc2UgbWF0aCBpcyBzaWduZWRcbiAgICBsZXQgcmVtYWluaW5nID0gaXBOdW07XG4gICAgY29uc3QgYWRkcmVzcyA9IG5ldyBBcnJheTxudW1iZXI+KCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICAgIGlmIChyZW1haW5pbmcgIT09IDApIHtcbiAgICAgICAgYWRkcmVzcy5wdXNoKE1hdGguZmxvb3IocmVtYWluaW5nIC8gMjU2ICoqICgzIC0gaSkpKTtcbiAgICAgICAgcmVtYWluaW5nID0gcmVtYWluaW5nICUgMjU2ICoqICgzIC0gaSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhZGRyZXNzLnB1c2goMCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGlwQWRkcmVzczogc3RyaW5nID0gYWRkcmVzcy5qb2luKCcuJyk7XG4gICAgaWYgKCAhdGhpcy52YWxpZElwKGlwQWRkcmVzcykgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7aXBBZGRyZXNzfSBpcyBub3QgYSB2YWxpZCBJUCBBZGRyZXNzYCk7XG4gICAgfVxuICAgIHJldHVybiBpcEFkZHJlc3M7XG4gIH1cbn1cblxuLyoqXG4gKiBFeHBvcnRlZCBjbGFzcyBmcm9tIFZQQyB0byBzdXBwb3J0IHN1Ym5ldCBmaWx0ZXJpbmdcbiAqIGFuZCBDSURSIHZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IGNsYXNzIENpZHJCbG9jayB7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBuZXRtYXNrIGZvciBhIGdpdmVuIENJRFIgbWFza1xuICAgKlxuICAgKiBUaGUgbmV0bWFzayBpcyBhIDMyLWJpdCBiaW5hcnkgdmFsdWUgdXNlZCB0byBzZXBhcmF0ZSB0aGUgbmV0d29yayBwb3J0aW9uIGZyb20gdGhlIGhvc3QgcG9ydGlvbiBvZiBhbiBJUHY0IGFkZHJlc3MuXG4gICAqIEl0IGlzIGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlIENJRFIgcHJlZml4IGxlbmd0aCAodGhlIG51bWJlciBvZiBiaXRzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBuZXR3b3JrIHBvcnRpb24pLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZTpcbiAgICogQ2lkckJsb2NrLmNhbGN1bGF0ZU5ldG1hc2soMjQpIHJldHVybnMgJzI1NS4yNTUuMjU1LjAnXG4gICAqXG4gICAqIEBwYXJhbSBtYXNrIFRoZSBDSURSIHByZWZpeCBsZW5ndGggKGJldHdlZW4gMCBhbmQgMzIpIGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIG5ldG1hc2suXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBuZXRtYXNrIGJ5IHBlcmZvcm1pbmcgYSBiaXR3aXNlIE5PVCBvbiB0aGUgcmVzdWx0IG9mICgyXjMyIC0gMl4oMzIgLSBtYXNrKSlcbiAgICogQHJldHVybnMgVGhlIG5ldG1hc2sgc3RyaW5nIGluIElQdjQgYWRkcmVzcyBmb3JtYXQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNhbGN1bGF0ZU5ldG1hc2sobWFzazogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gTmV0d29ya1V0aWxzLm51bVRvSXAoMiAqKiAzMiAtIDIgKiogKDMyIC0gbWFzaykpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIG51bWJlciBJUCBhZGRyZXNzZXMgaW4gYSBDSURSIE1hc2tcbiAgICpcbiAgICogRm9yIGV4YW1wbGU6XG4gICAqIENpZHJCbG9jay5jYWxjdWxhdGVOZXRzaXplKDE2KSByZXR1cm5zIDY1NTM2XG4gICAqXG4gICAqIEBwYXJhbSBtYXNrIFRoZSBDSURSIHByZWZpeCBsZW5ndGggKGJldHdlZW4gMCBhbmQgMzIpIGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIG5ldHdvcmsgc2l6ZS5cbiAgICogQ2lkckJsb2NrLmNhbGN1bGF0ZU5ldHNpemUoMjQpIHJldHVybnMgMjU2XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNhbGN1bGF0ZU5ldHNpemUobWFzazogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gMiAqKiAoMzIgLSBtYXNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJUCBhZGRyZXNzIGluIHRoZSBDSURSIGJsb2NrLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNpZHI6IHN0cmluZztcblxuICAvKlxuICAgKiBUaGUgQ0lEUiBtYXNrIGUuZy4gZm9yIENJRFIgJzEwLjAuMC4wLzIxJyByZXR1cm5zIDIxXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbWFzazogbnVtYmVyO1xuXG4gIC8qXG4gICAqIFRoZSB0b3RhbCBudW1iZXIgb2YgSVAgYWRkcmVzc2VzIGluIHRoZSBDSURSXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmV0d29ya1NpemU6IG51bWJlcjtcblxuICAvKlxuICAgKiBUaGUgbmV0d29yayBhZGRyZXNzIHByb3ZpZGVkIGluIENJRFIgY3JlYXRpb24gb2Zmc2V0IGJ5IHRoZSBOZXRzaXplIC0xXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IG5ldHdvcmtBZGRyZXNzOiBudW1iZXI7XG5cbiAgLypcbiAgICogUGFyc2VzIGVpdGhlciBDSURSIG5vdGF0aW9uIFN0cmluZyBvciB0d28gbnVtYmVycyByZXByZXNlbnRpbmcgdGhlIElQXG4gICAqIHNwYWNlXG4gICAqXG4gICAqIGNpZHIgZXhwZWN0cyBhIHN0cmluZyAnMTAuMC4wLjAvMTYnXG4gICAqIGlwQWRkcmVzcyBleHBlY3RzIGEgbnVtYmVyXG4gICAqIG1hc2sgZXhwZWN0cyBhIG51bWJlclxuICAgKlxuICAgKiBJZiB0aGUgZ2l2ZW4gYGNpZHJgIG9yIGBpcEFkZHJlc3NgIGlzIG5vdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBibG9jayxcbiAgICogdGhlbiB0aGUgbmV4dCBhdmFpbGFibGUgYmxvY2sgd2lsbCBiZSByZXR1cm5lZC4gRm9yIGV4YW1wbGUsIGlmXG4gICAqIGAxMC4wLjMuMS8yOGAgaXMgZ2l2ZW4gdGhlIHJldHVybmVkIGJsb2NrIHdpbGwgcmVwcmVzZW50IGAxMC4wLjMuMTYvMjhgLlxuICAgKi9cbiAgY29uc3RydWN0b3IoY2lkcjogc3RyaW5nKVxuICBjb25zdHJ1Y3RvcihpcEFkZHJlc3M6IG51bWJlciwgbWFzazogbnVtYmVyKVxuICBjb25zdHJ1Y3RvcihpcEFkZHJlc3NPckNpZHI6IHN0cmluZyB8IG51bWJlciwgbWFzaz86IG51bWJlcikge1xuICAgIGlmICh0eXBlb2YgaXBBZGRyZXNzT3JDaWRyID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5tYXNrID0gcGFyc2VJbnQoaXBBZGRyZXNzT3JDaWRyLnNwbGl0KCcvJylbMV0sIDEwKTtcbiAgICAgIHRoaXMubmV0d29ya0FkZHJlc3MgPSBOZXR3b3JrVXRpbHMuaXBUb051bShpcEFkZHJlc3NPckNpZHIuc3BsaXQoJy8nKVswXSkgK1xuICAgICAgICBDaWRyQmxvY2suY2FsY3VsYXRlTmV0c2l6ZSh0aGlzLm1hc2spIC0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiBtYXNrID09PSAnbnVtYmVyJykge1xuICAgICAgICB0aGlzLm1hc2sgPSBtYXNrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdGhpcyBzaG91bGQgYmUgaW1wb3NzaWJsZVxuICAgICAgICB0aGlzLm1hc2sgPSAxNjtcbiAgICAgIH1cbiAgICAgIHRoaXMubmV0d29ya0FkZHJlc3MgPSBpcEFkZHJlc3NPckNpZHIgKyBDaWRyQmxvY2suY2FsY3VsYXRlTmV0c2l6ZSh0aGlzLm1hc2spIC0gMTtcbiAgICAgIHRoaXMubmV0d29ya1NpemUgPSAyICoqICgzMiAtIHRoaXMubWFzayk7XG4gICAgfVxuICAgIHRoaXMubmV0d29ya1NpemUgPSAyICoqICgzMiAtIHRoaXMubWFzayk7XG4gICAgdGhpcy5jaWRyID0gYCR7dGhpcy5taW5JcCgpfS8ke3RoaXMubWFza31gO1xuICB9XG5cbiAgLypcbiAgICogVGhlIG1heGltdW0gSVAgaW4gdGhlIENJRFIgQmxvY2sgZS5nLiAnMTAuMC44LjI1NSdcbiAgICovXG4gIHB1YmxpYyBtYXhJcCgpOiBzdHJpbmcge1xuICAgIC8vIG1pbiArICgyXigzMi1tYXNrKSkgLSAxIFt6ZXJvIG5lZWRzIHRvIGNvdW50XVxuICAgIHJldHVybiBOZXR3b3JrVXRpbHMubnVtVG9JcCh0aGlzLm1heEFkZHJlc3MoKSk7XG4gIH1cblxuICAvKlxuICAgKiBDaGVja3MgaWYgdGhpcyBDSURSIGJsb2NrIGZ1bGx5IGNvbnRhaW5zIHRoZSBwcm92aWRlZCBDSURSIGJsb2NrLlxuICAgKlxuICAgKiBAcGFyYW0gb3RoZXIgVGhlIENJRFIgYmxvY2sgdG8gY2hlY2sgZm9yIGNvbnRhaW5tZW50LlxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoaXMgQ0lEUiBibG9jayBmdWxseSBjb250YWlucyB0aGUgcHJvdmlkZWQgQ0lEUiBibG9jaywgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBUaGUgbWluaW11bSBJUCBpbiB0aGUgQ0lEUiBCbG9jayBlLmcuICcxMC4wLjAuMCdcbiAgICovXG4gIHB1YmxpYyBtaW5JcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBOZXR3b3JrVXRpbHMubnVtVG9JcCh0aGlzLm1pbkFkZHJlc3MoKSk7XG4gIH1cblxuICAvKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBtaW5pbXVtIElQdjQgYWRkcmVzc1xuICAgKi9cbiAgcHVibGljIG1pbkFkZHJlc3MoKTogbnVtYmVyIHtcbiAgICBjb25zdCBkaXYgPSB0aGlzLm5ldHdvcmtBZGRyZXNzICUgdGhpcy5uZXR3b3JrU2l6ZTtcbiAgICByZXR1cm4gdGhpcy5uZXR3b3JrQWRkcmVzcyAtIGRpdjtcbiAgfVxuXG4gIC8qXG4gICAqIFJldHVybnMgdGhlIG51bWJlciByZXByZXNlbnRhdGlvbiBmb3IgdGhlIG1heGltdW0gSVB2NCBhZGRyZXNzXG4gICAqL1xuICBwdWJsaWMgbWF4QWRkcmVzcygpOiBudW1iZXIge1xuICAgIC8qKlxuICAgICAqIFRoZSBtYXhpbXVtIElQIGFkZHJlc3MgaW4gdGhlIENJRFIgYmxvY2sgaXMgY2FsY3VsYXRlZCBhcyB0aGUgbWluaW11bSBhZGRyZXNzICsgKDJeKDMyLW1hc2spKSAtIDEuXG4gICAgICogVGhpcyBpcyBiZWNhdXNlIHRoZSBtaW5pbXVtIGFkZHJlc3MgcmVwcmVzZW50cyB0aGUgbmV0d29yayBhZGRyZXNzLCBhbmQgdGhlIG1heGltdW0gYWRkcmVzcyBpcyB0aGUgYnJvYWRjYXN0IGFkZHJlc3MuXG4gICAgICovXG4gICAgLy8gbWluICsgKDJeKDMyLW1hc2spKSAtIDEgW3plcm8gbmVlZHMgdG8gY291bnRdXG4gICAgcmV0dXJuIHRoaXMubWluQWRkcmVzcygpICsgdGhpcy5uZXR3b3JrU2l6ZSAtIDE7XG4gIH1cblxuICAvKlxuICAgKiBSZXR1cm5zIHRoZSBuZXh0IGNvbnNlY3V0aXZlIENJRFIgYmxvY2sgb2YgdGhlIHNhbWUgbWFzayBzaXplIGZvbGxvd2luZyB0aGlzIENJRFIgYmxvY2suXG4gICAqXG4gICAqIEZvciBleGFtcGxlLCBpZiB0aGlzIENJRFIgYmxvY2sgaXMgJzEwLjAuMC4wLzI0JywgdGhlIG5leHQgYmxvY2sgd291bGQgYmUgJzEwLjAuMS4wLzI0Jy5cbiAgICpcbiAgICogUmV0dXJucyB0aGUgbmV4dCBDSURSIEJsb2NrIG9mIHRoZSBzYW1lIG1hc2sgc2l6ZVxuICAgKi9cbiAgcHVibGljIG5leHRCbG9jaygpOiBDaWRyQmxvY2sge1xuICAgIHJldHVybiBuZXcgQ2lkckJsb2NrKHRoaXMubWF4QWRkcmVzcygpICsgMSwgdGhpcy5tYXNrKTtcbiAgfVxuXG4gIC8qXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIENpZHJCbG9jayBmdWxseSBjb250YWlucyB0aGUgcHJvdmlkZWQgQ2lkckJsb2NrXG4gICAqL1xuICBwdWJsaWMgY29udGFpbnNDaWRyKG90aGVyOiBDaWRyQmxvY2spOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMubWF4QWRkcmVzcygpID49IG90aGVyLm1heEFkZHJlc3MoKSkgJiZcbiAgICAgICh0aGlzLm1pbkFkZHJlc3MoKSA8PSBvdGhlci5taW5BZGRyZXNzKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0d28gSVB2NCBhZGRyZXNzIHJhbmdlcyBvdmVybGFwLlxuICAgKlxuICAgKiBAcGFyYW0gcmFuZ2UxIFRoZSBmaXJzdCBJUCBhZGRyZXNzIHJhbmdlIHJlcHJlc2VudGVkIGFzIGFuIGFycmF5IFtzdGFydCwgZW5kXS5cbiAgICogQHBhcmFtIHJhbmdlMiBUaGUgc2Vjb25kIElQIGFkZHJlc3MgcmFuZ2UgcmVwcmVzZW50ZWQgYXMgYW4gYXJyYXkgW3N0YXJ0LCBlbmRdLlxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB0d28gSVAgYWRkcmVzcyByYW5nZXMgb3ZlcmxhcCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBOb3RlOiBUaGlzIG1ldGhvZCBhc3N1bWVzIHRoYXQgdGhlIHN0YXJ0IGFuZCBlbmQgYWRkcmVzc2VzIGFyZSB2YWxpZCBJUHY0IGFkZHJlc3Nlcy5cbiAgICovXG4gIHB1YmxpYyByYW5nZXNPdmVybGFwKHJhbmdlMTogW3N0cmluZywgc3RyaW5nXSwgcmFuZ2UyOiBbc3RyaW5nLCBzdHJpbmddKTogYm9vbGVhbiB7XG4gICAgY29uc3QgW3N0YXJ0MSwgZW5kMV0gPSByYW5nZTEubWFwKGlwID0+IE5ldHdvcmtVdGlscy5pcFRvTnVtKGlwKSk7XG4gICAgY29uc3QgW3N0YXJ0MiwgZW5kMl0gPSByYW5nZTIubWFwKGlwID0+IE5ldHdvcmtVdGlscy5pcFRvTnVtKGlwKSk7XG4gICAgLy8gQ2hlY2sgaWYgcmFuZ2VzIG92ZXJsYXBcbiAgICByZXR1cm4gc3RhcnQxIDw9IGVuZDIgJiYgc3RhcnQyIDw9IGVuZDE7XG4gIH1cbn1cblxuLyoqXG4gKiBDbGFzcyB3aXRoIGhlbHBlciBmdW5jdGlvbnMgdG8gc3VwcG9ydFxuICogU3VibmV0IElwdjYgQWRkcmVzcyBWYWxpZGF0aW9uXG4gKlxuICogVGhpcyBjbGFzcyBwcm92aWRlcyBtZXRob2RzIGZvciB3b3JraW5nIHdpdGggSVB2NiBDSURSIGJsb2NrcywgaW5jbHVkaW5nIGNhbGN1bGF0aW5nIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtXG4gKiBJUCBhZGRyZXNzZXMgaW4gYSBDSURSIGJsb2NrLCBhbmQgY2hlY2tpbmcgaWYgdHdvIENJRFIgYmxvY2tzIG92ZXJsYXAuXG4gKi9cbmV4cG9ydCBjbGFzcyBDaWRyQmxvY2tJcHY2IHtcbiAgLyoqXG4gICAqIElwdjYgQ0lEUiByYW5nZVxuICAgKi9cbiAgcHVibGljIGNpZHI6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBDSURSIHByZWZpeCBsZW5ndGggKG51bWJlciBvZiBiaXRzIHVzZWQgZm9yIHRoZSBuZXR3b3JrIHBvcnRpb24gb2YgdGhlIGFkZHJlc3MpLlxuICAgKi9cbiAgcHVibGljIGNpZHJQcmVmaXg6IG51bWJlcjtcbiAgcHJpdmF0ZSBpcFBhcnRzOiBiaWdpbnRbXTtcbiAgcHJpdmF0ZSBuZXR3b3JrQml0czogbnVtYmVyO1xuICBwcml2YXRlIG5ldHdvcmtQYXJ0OiBiaWdpbnRbXTtcblxuICBjb25zdHJ1Y3RvcihjaWRyOiBzdHJpbmcpIHtcbiAgICB0aGlzLmNpZHIgPSBjaWRyO1xuICAgIGNvbnN0IFtpcEFkZHJlc3MsIHByZWZpeF0gPSBjaWRyLnNwbGl0KCcvJyk7XG4gICAgdGhpcy5jaWRyUHJlZml4ID0gcGFyc2VJbnQocHJlZml4LCAxMCk7XG4gICAgdGhpcy5pcFBhcnRzID0gdGhpcy5wYXJzZUJpZ0ludFBhcnRzKGlwQWRkcmVzcyk7XG4gICAgdGhpcy5uZXR3b3JrQml0cyA9IHRoaXMuY2lkclByZWZpeDtcbiAgICB0aGlzLm5ldHdvcmtQYXJ0ID0gdGhpcy5pcFBhcnRzLnNsaWNlKDAsIE1hdGguY2VpbCh0aGlzLm5ldHdvcmtCaXRzIC8gMTYpKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VCaWdJbnRQYXJ0cyhpcEFkZHJlc3M6IHN0cmluZyk6IGJpZ2ludFtdIHtcbiAgICByZXR1cm4gaXBBZGRyZXNzLnNwbGl0KCc6JykubWFwKChwYXJ0KSA9PiBCaWdJbnQoYDB4JHtwYXJ0LnBhZFN0YXJ0KDQsICcwJyl9YCB8fCAnMCcpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBNaW5pbXVtIElQdjYgYWRkcmVzcyBmb3IgYSBwcm92aWRlZCBDSURSXG4gICAqL1xuICBwdWJsaWMgbWluSXAoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdGFydElQID0gWy4uLnRoaXMubmV0d29ya1BhcnRdO1xuICAgIGZvciAobGV0IGkgPSB0aGlzLm5ldHdvcmtQYXJ0Lmxlbmd0aDsgaSA8IDg7IGkrKykge1xuICAgICAgc3RhcnRJUC5wdXNoKEJpZ0ludCgwKSk7XG4gICAgfVxuICAgIHJldHVybiBzdGFydElQLm1hcCh0aGlzLmZvcm1hdElQdjZQYXJ0KS5qb2luKCc6Jyk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgbWF4aW11bSBJUHY2IGFkZHJlc3MgaW4gdGhlIENJRFIgYmxvY2tcbiAgICogQHJldHVybnMgVGhlIG1heGltdW0gSVB2NiBhZGRyZXNzIGFzIGEgc3RyaW5nXG4gICAqL1xuICBwdWJsaWMgbWF4SXAoKTogc3RyaW5nIHtcbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgaG93IG1hbnkgMTYtYml0IGJsb2NrcyBhcmUgbmVlZGVkIGZvciB0aGUgbmV0d29yayBwb3J0aW9uXG4gICAgICogZS5nLiBmb3IgLzU2LCBuZXR3b3JrUGFydExlbmd0aCA9IGNlaWwoNTYvMTYpID0gNCBibG9ja3NcbiAgICAgKi9cbiAgICBjb25zdCBuZXR3b3JrUGFydExlbmd0aCA9IE1hdGguY2VpbCh0aGlzLmNpZHJQcmVmaXggLyAxNik7XG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHJlbWFpbmluZyBiaXRzIGluIGxhc3QgbmV0d29yayBibG9ja1xuICAgICAqIGUuZy4gZm9yIC81NiwgcmVtYWluaW5nQml0cyA9IDU2ICUgMTYgPSA4IGJpdHNcbiAgICAgKi9cbiAgICBjb25zdCByZW1haW5pbmdCaXRzID0gdGhpcy5jaWRyUHJlZml4ICUgMTY7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGNvcHkgb2YgbmV0d29yayBwb3J0aW9uIG9mIGFkZHJlc3NcbiAgICAgKiBlLmcuIFsyMDAxLCBkYjgsIDAsIDBdIGZvciAyMDAxOmRiODo6LzU2XG4gICAgICovXG4gICAgY29uc3QgZW5kSVAgPSBbLi4udGhpcy5uZXR3b3JrUGFydF07XG5cbiAgICAvKipcbiAgICAgKiBJZiB0aGVyZSBhcmUgcmVtYWluaW5nIGJpdHMgaW4gbGFzdCBuZXR3b3JrIGJsb2NrLFxuICAgICAqIGNyZWF0ZSBhcHByb3ByaWF0ZSBiaXRtYXNrIGFuZCBhcHBseSB0byBsYXN0IG5ldHdvcmsgYmxvY2tcbiAgICAgKiBlLmcuIGZvciAvNTY6IG1hc2sgPSAoMSA8PCAoMTYtOCkpIC0gMSA9IDB4MDBGRlxuICAgICAqL1xuICAgIGlmIChyZW1haW5pbmdCaXRzID4gMCkge1xuICAgICAgY29uc3QgbGFzdE5ldHdvcmtJbmRleCA9IG5ldHdvcmtQYXJ0TGVuZ3RoIC0gMTtcbiAgICAgIGNvbnN0IG1hc2sgPSAoQmlnSW50KDEpIDw8IEJpZ0ludCgxNiAtIHJlbWFpbmluZ0JpdHMpKSAtIEJpZ0ludCgxKTtcbiAgICAgIC8qKlxuICAgICAgICogQXBwbHkgYml0bWFzayB0byBsYXN0IG5ldHdvcmsgYmxvY2sgdXNpbmcgYml0d2lzZSBPUlxuICAgICAgICogZS5nLiBpZiBsYXN0TmV0d29ya0luZGV4PTMgYW5kIG1hc2s9MHgwMEZGOlxuICAgICAgICogbmV0d29ya1BhcnRbM109MHgwMDAwIHwgMHgwMEZGID0gMHgwMEZGXG4gICAgICAgKi9cbiAgICAgIGVuZElQW2xhc3ROZXR3b3JrSW5kZXhdID0gdGhpcy5uZXR3b3JrUGFydFtsYXN0TmV0d29ya0luZGV4XSB8IG1hc2s7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlsbCByZW1haW5pbmcgYmxvY2tzIHdpdGggbWF4aW11bSB2YWx1ZSAweEZGRkZcbiAgICAgKiBlLmcuIFsyMDAxLCBkYjgsIDAsIGZmLCBmZmZmLCBmZmZmLCBmZmZmLCBmZmZmXVxuICAgICAqL1xuICAgIGZvciAobGV0IGkgPSBuZXR3b3JrUGFydExlbmd0aDsgaSA8IDg7IGkrKykge1xuICAgICAgZW5kSVAucHVzaChCaWdJbnQoJzB4ZmZmZicpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGJsb2NrcyB0byBoZXggc3RyaW5ncyBhbmQgam9pbiB3aXRoIGNvbG9uc1xuICAgICAqIGUuZy4gMjAwMTpkYjg6MDpmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmXG4gICAgICovXG4gICAgcmV0dXJuIGVuZElQLm1hcCh0aGlzLmZvcm1hdElQdjZQYXJ0KS5qb2luKCc6Jyk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdElQdjZQYXJ0ID0gKHBhcnQ6IGJpZ2ludCkgPT4gcGFydC50b1N0cmluZygxNikucGFkU3RhcnQoNCwgJzAnKTtcblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHJhbmdlMSBJcHY2IENJRFIgcmFuZ2UgdG8gY29tcGFyZVxuICAgKiBAcGFyYW0gcmFuZ2UyIElwdjYgQ0lEUiByYW5nZSB0byBjb21wYXJlXG4gICAqIEByZXR1cm5zIHRydWUgaWYgdHdvIHJhbmdlcyBvdmVybGFwLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHB1YmxpYyByYW5nZXNPdmVybGFwKHJhbmdlMTogc3RyaW5nLCByYW5nZTI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vIENyZWF0ZSBuZXcgQ2lkckJsb2NrSXB2NiBpbnN0YW5jZXMgZm9yIGJvdGggcmFuZ2VzXG4gICAgY29uc3QgY2lkcjEgPSBuZXcgQ2lkckJsb2NrSXB2NihyYW5nZTEpO1xuICAgIGNvbnN0IGNpZHIyID0gbmV3IENpZHJCbG9ja0lwdjYocmFuZ2UyKTtcblxuICAgIC8vIENvbnZlcnQgbWluIGFuZCBtYXggSVBzIHRvIG51bWVyaWMgdmFsdWVzIGZvciBjb21wYXJpc29uXG4gICAgY29uc3Qgc3RhcnQxID0gdGhpcy5pcHY2VG9OdW1iZXIoY2lkcjEubWluSXAoKSk7XG4gICAgY29uc3QgZW5kMSA9IHRoaXMuaXB2NlRvTnVtYmVyKGNpZHIxLm1heElwKCkpO1xuICAgIGNvbnN0IHN0YXJ0MiA9IHRoaXMuaXB2NlRvTnVtYmVyKGNpZHIyLm1pbklwKCkpO1xuICAgIGNvbnN0IGVuZDIgPSB0aGlzLmlwdjZUb051bWJlcihjaWRyMi5tYXhJcCgpKTtcblxuICAgIC8vIENoZWNrIGZvciBvdmVybGFwXG4gICAgcmV0dXJuIChzdGFydDEgPD0gZW5kMikgJiYgKHN0YXJ0MiA8PSBlbmQxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBDb252ZXJ0cyBnaXZlbiBpcHY2IGFkZHJlc3MgcmFuZ2UgdG8gYmlnIGludCBudW1iZXJcbiAgICovXG4gIHByaXZhdGUgaXB2NlRvTnVtYmVyKGlwdjZBZGRyZXNzOiBzdHJpbmcpOiBiaWdpbnQge1xuICAgIGNvbnN0IGJsb2NrcyA9IHRoaXMucGFyc2VCaWdJbnRQYXJ0cyhpcHY2QWRkcmVzcyk7XG4gICAgbGV0IGlwdjZOdW1iZXIgPSBCaWdJbnQoMCk7XG4gICAgZm9yIChjb25zdCBibG9jayBvZiBibG9ja3MpIHtcbiAgICAgIC8qIHRzbGludDpkaXNhYmxlOm5vLWJpdHdpc2UgKi9cbiAgICAgIGlwdjZOdW1iZXIgPSAoaXB2Nk51bWJlciA8PCBCaWdJbnQoMTYpKSArIGJsb2NrO1xuICAgIH1cbiAgICByZXR1cm4gaXB2Nk51bWJlcjtcbiAgfVxufVxuIl19
|
|
407
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHNFQUFzRTs7O0FBT3RFLDhDQVVDO0FBT0Qsd0VBRUM7QUFLRCw0QkFFQztBQWlCRCw0Q0FNQztBQUtELDRDQVFDO0FBRUQsMEJBRUM7QUF2RUQsaURBQXNFO0FBRXRFOztHQUVHO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQUMsSUFBZ0I7SUFDaEQsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUNiLEtBQUssb0JBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLFFBQVEsQ0FBQztRQUN4QyxLQUFLLG9CQUFVLENBQUMsZ0JBQWdCLENBQUM7UUFDakMsS0FBSyxvQkFBVSxDQUFDLG1CQUFtQjtZQUNqQyxPQUFPLFNBQVMsQ0FBQztRQUNuQixLQUFLLG9CQUFVLENBQUMsZ0JBQWdCO1lBQzlCLE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLDhCQUE4QixDQUFDLE1BQWtCO0lBQy9ELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixRQUFRLENBQUMsSUFBWSxFQUFFLENBQVM7SUFDOUMsT0FBTyxHQUFHLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDakMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsSUFBWSwyQkFVWDtBQVZELFdBQVksMkJBQTJCO0lBQ3JDOztPQUVHO0lBQ0gsZ0RBQWlCLENBQUE7SUFFakI7O09BRUc7SUFDSCxrREFBbUIsQ0FBQTtBQUNyQixDQUFDLEVBVlcsMkJBQTJCLDJDQUEzQiwyQkFBMkIsUUFVdEM7QUFFRCxTQUFnQixnQkFBZ0IsQ0FBQyxNQUFnQjtJQUMvQyxJ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R0FBRyxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDbEQsQ0FBQztRQUNELE9BQU8sVUFBVSxDQUFDO0tBQ25CO0NBQ0Y7QUE1SEQsc0NBNEhDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50IG5vLWJpdHdpc2U6IFtcImVycm9yXCIsIHsgXCJhbGxvd1wiOiBbXCJ+XCIsIFwifFwiLCBcIjw8XCIsIFwiJlwiXSB9XSAqL1xuXG5pbXBvcnQgeyBJU3VibmV0LCBJU3VibmV0UmVmLCBTdWJuZXRUeXBlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgbmFtZXMgZm9yIGV2ZXJ5IHN1Ym5ldCB0eXBlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0U3VibmV0TmFtZSh0eXBlOiBTdWJuZXRUeXBlKSB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgU3VibmV0VHlwZS5QVUJMSUM6IHJldHVybiAnUHVibGljJztcbiAgICBjYXNlIFN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX05BVDpcbiAgICBjYXNlIFN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTUzpcbiAgICAgIHJldHVybiAnUHJpdmF0ZSc7XG4gICAgY2FzZSBTdWJuZXRUeXBlLlBSSVZBVEVfSVNPTEFURUQ6XG4gICAgICByZXR1cm4gJ0lzb2xhdGVkJztcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJldHVybiBhIHN1Ym5ldCBuYW1lIGZyb20gaXRzIGNvbnN0cnVjdCBJRFxuICpcbiAqIEFsbCBzdWJuZXQgbmFtZXMgbG9vayBsaWtlIE5BTUUgPD4gXCJTdWJuZXRcIiA8PiBJTkRFWFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3VibmV0R3JvdXBOYW1lRnJvbUNvbnN0cnVjdElkKHN1Ym5ldDogSVN1Ym5ldFJlZikge1xuICByZXR1cm4gc3VibmV0Lm5vZGUuaWQucmVwbGFjZSgvU3VibmV0XFxkKyQvLCAnJyk7XG59XG5cbi8qKlxuICogTWFrZSB0aGUgc3VibmV0IGNvbnN0cnVjdCBJRCBmcm9tIGEgbmFtZSBhbmQgbnVtYmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJuZXRJZChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICByZXR1cm4gYCR7bmFtZX1TdWJuZXQke2kgKyAxfWA7XG59XG5cbi8qKlxuICogVGhlIHN0YXR1cyBvZiBhIFRyYW5zaXQgR2F0ZXdheSBmZWF0dXJlLlxuICovXG5leHBvcnQgZW51bSBUcmFuc2l0R2F0ZXdheUZlYXR1cmVTdGF0dXMge1xuICAvKipcbiAgICogVGhlIGZlYXR1cmUgaXMgZW5hYmxlZC5cbiAgICovXG4gIEVOQUJMRSA9ICdlbmFibGUnLFxuXG4gIC8qKlxuICAgKiBUaGUgZmVhdHVyZSBpcyBkaXNhYmxlZC5cbiAgICovXG4gIERJU0FCTEUgPSAnZGlzYWJsZScsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGZWF0dXJlU3RhdHVzKHN0YXR1cz86IGJvb2xlYW4pOiBUcmFuc2l0R2F0ZXdheUZlYXR1cmVTdGF0dXMgfCB1bmRlZmluZWQge1xuICBpZiAoc3RhdHVzID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzdGF0dXMgPyBUcmFuc2l0R2F0ZXdheUZlYXR1cmVTdGF0dXMuRU5BQkxFIDogVHJhbnNpdEdhdGV3YXlGZWF0dXJlU3RhdHVzLkRJU0FCTEU7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHVuaW9uIG9mIHRhYmxlIElEcyBmcm9tIGFsbCBzZWxlY3RlZCBzdWJuZXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGxSb3V0ZVRhYmxlSWRzKHN1Ym5ldHM6IElTdWJuZXRbXSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgcmV0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3Qgc3VibmV0IG9mIHN1Ym5ldHMpIHtcbiAgICBpZiAoc3VibmV0LnJvdXRlVGFibGUgJiYgc3VibmV0LnJvdXRlVGFibGUucm91dGVUYWJsZUlkKSB7XG4gICAgICByZXQuYWRkKHN1Ym5ldC5yb3V0ZVRhYmxlLnJvdXRlVGFibGVJZCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBBcnJheS5mcm9tKHJldCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuPEE+KHhzOiBBW11bXSk6IEFbXSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCB4cyk7XG59XG5cbi8qKlxuICogTmV0d29ya1V0aWxzIGNvbnRhaW5zIGhlbHBlcnMgdG8gd29yayB3aXRoIG5ldHdvcmsgY29uc3RydWN0cyAoc3VibmV0cy9yYW5nZXMpXG4gKi9cbmV4cG9ydCBjbGFzcyBOZXR3b3JrVXRpbHMge1xuICAvKipcbiAgICogVmFsaWRhdGVzIGFuIElQdjQgYWRkcmVzcyBzdHJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBpcEFkZHJlc3MgVGhlIElQdjQgYWRkcmVzcyBzdHJpbmcgdG8gYmUgdmFsaWRhdGVkLlxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBzdHJpbmcgaXMgYSB2YWxpZCBJUHY0IGFkZHJlc3MsIGZhbHNlIG90aGVyd2lzZS5cbiAgICogVmFsaWRhdGVzIGFuIElQdjQgc3RyaW5nXG4gICAqXG4gICAqIHJldHVybnMgdHJ1ZSBvZiB0aGUgc3RyaW5nIGNvbnRhaW5zIDQgbnVtYmVycyBiZXR3ZWVuIDAtMjU1IGRlbGltaXRlZCBieVxuICAgKiBhIGAuYCBjaGFyYWN0ZXJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdmFsaWRJcChpcEFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG9jdGV0cyA9IGlwQWRkcmVzcy5zcGxpdCgnLicpO1xuICAgIGlmIChvY3RldHMubGVuZ3RoICE9PSA0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBvY3RldHMubWFwKChvY3RldDogc3RyaW5nKSA9PiBwYXJzZUludChvY3RldCwgMTApKS5cbiAgICAgIGV2ZXJ5KChvY3RldDogbnVtYmVyKSA9PiBvY3RldCA+PSAwICYmIG9jdGV0IDw9IDI1NSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gSVB2NCBhZGRyZXNzIHRvIGl0cyBjb3JyZXNwb25kaW5nIG51bWVyaWNhbCB2YWx1ZS5cbiAgICpcbiAgICogVXNlcyB0aGUgZm9ybXVsYTpcbiAgICogKGZpcnN0IG9jdGV0ICogMjU2wrMpICsgKHNlY29uZCBvY3RldCAqIDI1NsKyKSArICh0aGlyZCBvY3RldCAqIDI1NikgK1xuICAgKiAoZm91cnRoIG9jdGV0KVxuICAgKlxuICAgKiBAcGFyYW0gIGlwQWRkcmVzcyB0aGUgSVAgYWRkcmVzcyAoZS5nLiAxNzQuNjYuMTczLjE2OClcbiAgICogQHJldHVybnMgdGhlIGludGVnZXIgdmFsdWUgb2YgdGhlIElQIGFkZHJlc3MgKGUuZyAyOTIzNjA1NDE2KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpcFRvTnVtKGlwQWRkcmVzczogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMudmFsaWRJcChpcEFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7aXBBZGRyZXNzfSBpcyBub3QgdmFsaWRgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXBBZGRyZXNzXG4gICAgICAuc3BsaXQoJy4nKVxuICAgICAgLnJlZHVjZShcbiAgICAgICAgKHA6IG51bWJlciwgYzogc3RyaW5nLCBpOiBudW1iZXIpID0+IHAgKyBwYXJzZUludChjLCAxMCkgKiAyNTYgKiogKDMgLSBpKSxcbiAgICAgICAgMCxcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGFrZXMgbnVtYmVyIGFuZCBjb252ZXJ0cyBpdCB0byBJUHY0IGFkZHJlc3Mgc3RyaW5nXG4gICAqXG4gICAqIFRha2VzIGEgbnVtYmVyIChlLmcgMjkyMzYwNTQxNikgYW5kIGNvbnZlcnRzIGl0IHRvIGFuIElQdjQgYWRkcmVzcyBzdHJpbmdcbiAgICogY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgSVB2NFxuICAgKlxuICAgKiBAcGFyYW0gaXBOdW0gaW50ZWdlciB2YWx1ZSBvZiB0aGUgSVAgYWRkcmVzcyAoZS5nIDI5MjM2MDU0MTYpXG4gICAqIEByZXR1cm5zIElQdjQgYWRkcmVzcyAoZS5nLiAxNzQuNjYuMTczLjE2OClcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbnVtVG9JcChpcE51bTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAvLyB0aGlzIGFsbCBiZWNhdXNlIGJpdHdpc2UgbWF0aCBpcyBzaWduZWRcbiAgICBsZXQgcmVtYWluaW5nID0gaXBOdW07XG4gICAgY29uc3QgYWRkcmVzcyA9IG5ldyBBcnJheTxudW1iZXI+KCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICAgIGlmIChyZW1haW5pbmcgIT09IDApIHtcbiAgICAgICAgYWRkcmVzcy5wdXNoKE1hdGguZmxvb3IocmVtYWluaW5nIC8gMjU2ICoqICgzIC0gaSkpKTtcbiAgICAgICAgcmVtYWluaW5nID0gcmVtYWluaW5nICUgMjU2ICoqICgzIC0gaSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhZGRyZXNzLnB1c2goMCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGlwQWRkcmVzczogc3RyaW5nID0gYWRkcmVzcy5qb2luKCcuJyk7XG4gICAgaWYgKCAhdGhpcy52YWxpZElwKGlwQWRkcmVzcykgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7aXBBZGRyZXNzfSBpcyBub3QgYSB2YWxpZCBJUCBBZGRyZXNzYCk7XG4gICAgfVxuICAgIHJldHVybiBpcEFkZHJlc3M7XG4gIH1cbn1cblxuLyoqXG4gKiBFeHBvcnRlZCBjbGFzcyBmcm9tIFZQQyB0byBzdXBwb3J0IHN1Ym5ldCBmaWx0ZXJpbmdcbiAqIGFuZCBDSURSIHZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IGNsYXNzIENpZHJCbG9jayB7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBuZXRtYXNrIGZvciBhIGdpdmVuIENJRFIgbWFza1xuICAgKlxuICAgKiBUaGUgbmV0bWFzayBpcyBhIDMyLWJpdCBiaW5hcnkgdmFsdWUgdXNlZCB0byBzZXBhcmF0ZSB0aGUgbmV0d29yayBwb3J0aW9uIGZyb20gdGhlIGhvc3QgcG9ydGlvbiBvZiBhbiBJUHY0IGFkZHJlc3MuXG4gICAqIEl0IGlzIGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlIENJRFIgcHJlZml4IGxlbmd0aCAodGhlIG51bWJlciBvZiBiaXRzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBuZXR3b3JrIHBvcnRpb24pLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZTpcbiAgICogQ2lkckJsb2NrLmNhbGN1bGF0ZU5ldG1hc2soMjQpIHJldHVybnMgJzI1NS4yNTUuMjU1LjAnXG4gICAqXG4gICAqIEBwYXJhbSBtYXNrIFRoZSBDSURSIHByZWZpeCBsZW5ndGggKGJldHdlZW4gMCBhbmQgMzIpIGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIG5ldG1hc2suXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBuZXRtYXNrIGJ5IHBlcmZvcm1pbmcgYSBiaXR3aXNlIE5PVCBvbiB0aGUgcmVzdWx0IG9mICgyXjMyIC0gMl4oMzIgLSBtYXNrKSlcbiAgICogQHJldHVybnMgVGhlIG5ldG1hc2sgc3RyaW5nIGluIElQdjQgYWRkcmVzcyBmb3JtYXQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNhbGN1bGF0ZU5ldG1hc2sobWFzazogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gTmV0d29ya1V0aWxzLm51bVRvSXAoMiAqKiAzMiAtIDIgKiogKDMyIC0gbWFzaykpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIG51bWJlciBJUCBhZGRyZXNzZXMgaW4gYSBDSURSIE1hc2tcbiAgICpcbiAgICogRm9yIGV4YW1wbGU6XG4gICAqIENpZHJCbG9jay5jYWxjdWxhdGVOZXRzaXplKDE2KSByZXR1cm5zIDY1NTM2XG4gICAqXG4gICAqIEBwYXJhbSBtYXNrIFRoZSBDSURSIHByZWZpeCBsZW5ndGggKGJldHdlZW4gMCBhbmQgMzIpIGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIG5ldHdvcmsgc2l6ZS5cbiAgICogQ2lkckJsb2NrLmNhbGN1bGF0ZU5ldHNpemUoMjQpIHJldHVybnMgMjU2XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNhbGN1bGF0ZU5ldHNpemUobWFzazogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gMiAqKiAoMzIgLSBtYXNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJUCBhZGRyZXNzIGluIHRoZSBDSURSIGJsb2NrLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNpZHI6IHN0cmluZztcblxuICAvKlxuICAgKiBUaGUgQ0lEUiBtYXNrIGUuZy4gZm9yIENJRFIgJzEwLjAuMC4wLzIxJyByZXR1cm5zIDIxXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbWFzazogbnVtYmVyO1xuXG4gIC8qXG4gICAqIFRoZSB0b3RhbCBudW1iZXIgb2YgSVAgYWRkcmVzc2VzIGluIHRoZSBDSURSXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmV0d29ya1NpemU6IG51bWJlcjtcblxuICAvKlxuICAgKiBUaGUgbmV0d29yayBhZGRyZXNzIHByb3ZpZGVkIGluIENJRFIgY3JlYXRpb24gb2Zmc2V0IGJ5IHRoZSBOZXRzaXplIC0xXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IG5ldHdvcmtBZGRyZXNzOiBudW1iZXI7XG5cbiAgLypcbiAgICogUGFyc2VzIGVpdGhlciBDSURSIG5vdGF0aW9uIFN0cmluZyBvciB0d28gbnVtYmVycyByZXByZXNlbnRpbmcgdGhlIElQXG4gICAqIHNwYWNlXG4gICAqXG4gICAqIGNpZHIgZXhwZWN0cyBhIHN0cmluZyAnMTAuMC4wLjAvMTYnXG4gICAqIGlwQWRkcmVzcyBleHBlY3RzIGEgbnVtYmVyXG4gICAqIG1hc2sgZXhwZWN0cyBhIG51bWJlclxuICAgKlxuICAgKiBJZiB0aGUgZ2l2ZW4gYGNpZHJgIG9yIGBpcEFkZHJlc3NgIGlzIG5vdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBibG9jayxcbiAgICogdGhlbiB0aGUgbmV4dCBhdmFpbGFibGUgYmxvY2sgd2lsbCBiZSByZXR1cm5lZC4gRm9yIGV4YW1wbGUsIGlmXG4gICAqIGAxMC4wLjMuMS8yOGAgaXMgZ2l2ZW4gdGhlIHJldHVybmVkIGJsb2NrIHdpbGwgcmVwcmVzZW50IGAxMC4wLjMuMTYvMjhgLlxuICAgKi9cbiAgY29uc3RydWN0b3IoY2lkcjogc3RyaW5nKVxuICBjb25zdHJ1Y3RvcihpcEFkZHJlc3M6IG51bWJlciwgbWFzazogbnVtYmVyKVxuICBjb25zdHJ1Y3RvcihpcEFkZHJlc3NPckNpZHI6IHN0cmluZyB8IG51bWJlciwgbWFzaz86IG51bWJlcikge1xuICAgIGlmICh0eXBlb2YgaXBBZGRyZXNzT3JDaWRyID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5tYXNrID0gcGFyc2VJbnQoaXBBZGRyZXNzT3JDaWRyLnNwbGl0KCcvJylbMV0sIDEwKTtcbiAgICAgIHRoaXMubmV0d29ya0FkZHJlc3MgPSBOZXR3b3JrVXRpbHMuaXBUb051bShpcEFkZHJlc3NPckNpZHIuc3BsaXQoJy8nKVswXSkgK1xuICAgICAgICBDaWRyQmxvY2suY2FsY3VsYXRlTmV0c2l6ZSh0aGlzLm1hc2spIC0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiBtYXNrID09PSAnbnVtYmVyJykge1xuICAgICAgICB0aGlzLm1hc2sgPSBtYXNrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdGhpcyBzaG91bGQgYmUgaW1wb3NzaWJsZVxuICAgICAgICB0aGlzLm1hc2sgPSAxNjtcbiAgICAgIH1cbiAgICAgIHRoaXMubmV0d29ya0FkZHJlc3MgPSBpcEFkZHJlc3NPckNpZHIgKyBDaWRyQmxvY2suY2FsY3VsYXRlTmV0c2l6ZSh0aGlzLm1hc2spIC0gMTtcbiAgICAgIHRoaXMubmV0d29ya1NpemUgPSAyICoqICgzMiAtIHRoaXMubWFzayk7XG4gICAgfVxuICAgIHRoaXMubmV0d29ya1NpemUgPSAyICoqICgzMiAtIHRoaXMubWFzayk7XG4gICAgdGhpcy5jaWRyID0gYCR7dGhpcy5taW5JcCgpfS8ke3RoaXMubWFza31gO1xuICB9XG5cbiAgLypcbiAgICogVGhlIG1heGltdW0gSVAgaW4gdGhlIENJRFIgQmxvY2sgZS5nLiAnMTAuMC44LjI1NSdcbiAgICovXG4gIHB1YmxpYyBtYXhJcCgpOiBzdHJpbmcge1xuICAgIC8vIG1pbiArICgyXigzMi1tYXNrKSkgLSAxIFt6ZXJvIG5lZWRzIHRvIGNvdW50XVxuICAgIHJldHVybiBOZXR3b3JrVXRpbHMubnVtVG9JcCh0aGlzLm1heEFkZHJlc3MoKSk7XG4gIH1cblxuICAvKlxuICAgKiBDaGVja3MgaWYgdGhpcyBDSURSIGJsb2NrIGZ1bGx5IGNvbnRhaW5zIHRoZSBwcm92aWRlZCBDSURSIGJsb2NrLlxuICAgKlxuICAgKiBAcGFyYW0gb3RoZXIgVGhlIENJRFIgYmxvY2sgdG8gY2hlY2sgZm9yIGNvbnRhaW5tZW50LlxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoaXMgQ0lEUiBibG9jayBmdWxseSBjb250YWlucyB0aGUgcHJvdmlkZWQgQ0lEUiBibG9jaywgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBUaGUgbWluaW11bSBJUCBpbiB0aGUgQ0lEUiBCbG9jayBlLmcuICcxMC4wLjAuMCdcbiAgICovXG4gIHB1YmxpYyBtaW5JcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBOZXR3b3JrVXRpbHMubnVtVG9JcCh0aGlzLm1pbkFkZHJlc3MoKSk7XG4gIH1cblxuICAvKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBtaW5pbXVtIElQdjQgYWRkcmVzc1xuICAgKi9cbiAgcHVibGljIG1pbkFkZHJlc3MoKTogbnVtYmVyIHtcbiAgICBjb25zdCBkaXYgPSB0aGlzLm5ldHdvcmtBZGRyZXNzICUgdGhpcy5uZXR3b3JrU2l6ZTtcbiAgICByZXR1cm4gdGhpcy5uZXR3b3JrQWRkcmVzcyAtIGRpdjtcbiAgfVxuXG4gIC8qXG4gICAqIFJldHVybnMgdGhlIG51bWJlciByZXByZXNlbnRhdGlvbiBmb3IgdGhlIG1heGltdW0gSVB2NCBhZGRyZXNzXG4gICAqL1xuICBwdWJsaWMgbWF4QWRkcmVzcygpOiBudW1iZXIge1xuICAgIC8qKlxuICAgICAqIFRoZSBtYXhpbXVtIElQIGFkZHJlc3MgaW4gdGhlIENJRFIgYmxvY2sgaXMgY2FsY3VsYXRlZCBhcyB0aGUgbWluaW11bSBhZGRyZXNzICsgKDJeKDMyLW1hc2spKSAtIDEuXG4gICAgICogVGhpcyBpcyBiZWNhdXNlIHRoZSBtaW5pbXVtIGFkZHJlc3MgcmVwcmVzZW50cyB0aGUgbmV0d29yayBhZGRyZXNzLCBhbmQgdGhlIG1heGltdW0gYWRkcmVzcyBpcyB0aGUgYnJvYWRjYXN0IGFkZHJlc3MuXG4gICAgICovXG4gICAgLy8gbWluICsgKDJeKDMyLW1hc2spKSAtIDEgW3plcm8gbmVlZHMgdG8gY291bnRdXG4gICAgcmV0dXJuIHRoaXMubWluQWRkcmVzcygpICsgdGhpcy5uZXR3b3JrU2l6ZSAtIDE7XG4gIH1cblxuICAvKlxuICAgKiBSZXR1cm5zIHRoZSBuZXh0IGNvbnNlY3V0aXZlIENJRFIgYmxvY2sgb2YgdGhlIHNhbWUgbWFzayBzaXplIGZvbGxvd2luZyB0aGlzIENJRFIgYmxvY2suXG4gICAqXG4gICAqIEZvciBleGFtcGxlLCBpZiB0aGlzIENJRFIgYmxvY2sgaXMgJzEwLjAuMC4wLzI0JywgdGhlIG5leHQgYmxvY2sgd291bGQgYmUgJzEwLjAuMS4wLzI0Jy5cbiAgICpcbiAgICogUmV0dXJucyB0aGUgbmV4dCBDSURSIEJsb2NrIG9mIHRoZSBzYW1lIG1hc2sgc2l6ZVxuICAgKi9cbiAgcHVibGljIG5leHRCbG9jaygpOiBDaWRyQmxvY2sge1xuICAgIHJldHVybiBuZXcgQ2lkckJsb2NrKHRoaXMubWF4QWRkcmVzcygpICsgMSwgdGhpcy5tYXNrKTtcbiAgfVxuXG4gIC8qXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIENpZHJCbG9jayBmdWxseSBjb250YWlucyB0aGUgcHJvdmlkZWQgQ2lkckJsb2NrXG4gICAqL1xuICBwdWJsaWMgY29udGFpbnNDaWRyKG90aGVyOiBDaWRyQmxvY2spOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMubWF4QWRkcmVzcygpID49IG90aGVyLm1heEFkZHJlc3MoKSkgJiZcbiAgICAgICh0aGlzLm1pbkFkZHJlc3MoKSA8PSBvdGhlci5taW5BZGRyZXNzKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0d28gSVB2NCBhZGRyZXNzIHJhbmdlcyBvdmVybGFwLlxuICAgKlxuICAgKiBAcGFyYW0gcmFuZ2UxIFRoZSBmaXJzdCBJUCBhZGRyZXNzIHJhbmdlIHJlcHJlc2VudGVkIGFzIGFuIGFycmF5IFtzdGFydCwgZW5kXS5cbiAgICogQHBhcmFtIHJhbmdlMiBUaGUgc2Vjb25kIElQIGFkZHJlc3MgcmFuZ2UgcmVwcmVzZW50ZWQgYXMgYW4gYXJyYXkgW3N0YXJ0LCBlbmRdLlxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB0d28gSVAgYWRkcmVzcyByYW5nZXMgb3ZlcmxhcCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBOb3RlOiBUaGlzIG1ldGhvZCBhc3N1bWVzIHRoYXQgdGhlIHN0YXJ0IGFuZCBlbmQgYWRkcmVzc2VzIGFyZSB2YWxpZCBJUHY0IGFkZHJlc3Nlcy5cbiAgICovXG4gIHB1YmxpYyByYW5nZXNPdmVybGFwKHJhbmdlMTogW3N0cmluZywgc3RyaW5nXSwgcmFuZ2UyOiBbc3RyaW5nLCBzdHJpbmddKTogYm9vbGVhbiB7XG4gICAgY29uc3QgW3N0YXJ0MSwgZW5kMV0gPSByYW5nZTEubWFwKGlwID0+IE5ldHdvcmtVdGlscy5pcFRvTnVtKGlwKSk7XG4gICAgY29uc3QgW3N0YXJ0MiwgZW5kMl0gPSByYW5nZTIubWFwKGlwID0+IE5ldHdvcmtVdGlscy5pcFRvTnVtKGlwKSk7XG4gICAgLy8gQ2hlY2sgaWYgcmFuZ2VzIG92ZXJsYXBcbiAgICByZXR1cm4gc3RhcnQxIDw9IGVuZDIgJiYgc3RhcnQyIDw9IGVuZDE7XG4gIH1cbn1cblxuLyoqXG4gKiBDbGFzcyB3aXRoIGhlbHBlciBmdW5jdGlvbnMgdG8gc3VwcG9ydFxuICogU3VibmV0IElwdjYgQWRkcmVzcyBWYWxpZGF0aW9uXG4gKlxuICogVGhpcyBjbGFzcyBwcm92aWRlcyBtZXRob2RzIGZvciB3b3JraW5nIHdpdGggSVB2NiBDSURSIGJsb2NrcywgaW5jbHVkaW5nIGNhbGN1bGF0aW5nIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtXG4gKiBJUCBhZGRyZXNzZXMgaW4gYSBDSURSIGJsb2NrLCBhbmQgY2hlY2tpbmcgaWYgdHdvIENJRFIgYmxvY2tzIG92ZXJsYXAuXG4gKi9cbmV4cG9ydCBjbGFzcyBDaWRyQmxvY2tJcHY2IHtcbiAgLyoqXG4gICAqIElwdjYgQ0lEUiByYW5nZVxuICAgKi9cbiAgcHVibGljIGNpZHI6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBDSURSIHByZWZpeCBsZW5ndGggKG51bWJlciBvZiBiaXRzIHVzZWQgZm9yIHRoZSBuZXR3b3JrIHBvcnRpb24gb2YgdGhlIGFkZHJlc3MpLlxuICAgKi9cbiAgcHVibGljIGNpZHJQcmVmaXg6IG51bWJlcjtcbiAgcHJpdmF0ZSBpcFBhcnRzOiBiaWdpbnRbXTtcbiAgcHJpdmF0ZSBuZXR3b3JrQml0czogbnVtYmVyO1xuICBwcml2YXRlIG5ldHdvcmtQYXJ0OiBiaWdpbnRbXTtcblxuICBjb25zdHJ1Y3RvcihjaWRyOiBzdHJpbmcpIHtcbiAgICB0aGlzLmNpZHIgPSBjaWRyO1xuICAgIGNvbnN0IFtpcEFkZHJlc3MsIHByZWZpeF0gPSBjaWRyLnNwbGl0KCcvJyk7XG4gICAgdGhpcy5jaWRyUHJlZml4ID0gcGFyc2VJbnQocHJlZml4LCAxMCk7XG4gICAgdGhpcy5pcFBhcnRzID0gdGhpcy5wYXJzZUJpZ0ludFBhcnRzKGlwQWRkcmVzcyk7XG4gICAgdGhpcy5uZXR3b3JrQml0cyA9IHRoaXMuY2lkclByZWZpeDtcbiAgICB0aGlzLm5ldHdvcmtQYXJ0ID0gdGhpcy5pcFBhcnRzLnNsaWNlKDAsIE1hdGguY2VpbCh0aGlzLm5ldHdvcmtCaXRzIC8gMTYpKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VCaWdJbnRQYXJ0cyhpcEFkZHJlc3M6IHN0cmluZyk6IGJpZ2ludFtdIHtcbiAgICByZXR1cm4gaXBBZGRyZXNzLnNwbGl0KCc6JykubWFwKChwYXJ0KSA9PiBCaWdJbnQoYDB4JHtwYXJ0LnBhZFN0YXJ0KDQsICcwJyl9YCB8fCAnMCcpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBNaW5pbXVtIElQdjYgYWRkcmVzcyBmb3IgYSBwcm92aWRlZCBDSURSXG4gICAqL1xuICBwdWJsaWMgbWluSXAoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdGFydElQID0gWy4uLnRoaXMubmV0d29ya1BhcnRdO1xuICAgIGZvciAobGV0IGkgPSB0aGlzLm5ldHdvcmtQYXJ0Lmxlbmd0aDsgaSA8IDg7IGkrKykge1xuICAgICAgc3RhcnRJUC5wdXNoKEJpZ0ludCgwKSk7XG4gICAgfVxuICAgIHJldHVybiBzdGFydElQLm1hcCh0aGlzLmZvcm1hdElQdjZQYXJ0KS5qb2luKCc6Jyk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgbWF4aW11bSBJUHY2IGFkZHJlc3MgaW4gdGhlIENJRFIgYmxvY2tcbiAgICogQHJldHVybnMgVGhlIG1heGltdW0gSVB2NiBhZGRyZXNzIGFzIGEgc3RyaW5nXG4gICAqL1xuICBwdWJsaWMgbWF4SXAoKTogc3RyaW5nIHtcbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgaG93IG1hbnkgMTYtYml0IGJsb2NrcyBhcmUgbmVlZGVkIGZvciB0aGUgbmV0d29yayBwb3J0aW9uXG4gICAgICogZS5nLiBmb3IgLzU2LCBuZXR3b3JrUGFydExlbmd0aCA9IGNlaWwoNTYvMTYpID0gNCBibG9ja3NcbiAgICAgKi9cbiAgICBjb25zdCBuZXR3b3JrUGFydExlbmd0aCA9IE1hdGguY2VpbCh0aGlzLmNpZHJQcmVmaXggLyAxNik7XG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHJlbWFpbmluZyBiaXRzIGluIGxhc3QgbmV0d29yayBibG9ja1xuICAgICAqIGUuZy4gZm9yIC81NiwgcmVtYWluaW5nQml0cyA9IDU2ICUgMTYgPSA4IGJpdHNcbiAgICAgKi9cbiAgICBjb25zdCByZW1haW5pbmdCaXRzID0gdGhpcy5jaWRyUHJlZml4ICUgMTY7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGNvcHkgb2YgbmV0d29yayBwb3J0aW9uIG9mIGFkZHJlc3NcbiAgICAgKiBlLmcuIFsyMDAxLCBkYjgsIDAsIDBdIGZvciAyMDAxOmRiODo6LzU2XG4gICAgICovXG4gICAgY29uc3QgZW5kSVAgPSBbLi4udGhpcy5uZXR3b3JrUGFydF07XG5cbiAgICAvKipcbiAgICAgKiBJZiB0aGVyZSBhcmUgcmVtYWluaW5nIGJpdHMgaW4gbGFzdCBuZXR3b3JrIGJsb2NrLFxuICAgICAqIGNyZWF0ZSBhcHByb3ByaWF0ZSBiaXRtYXNrIGFuZCBhcHBseSB0byBsYXN0IG5ldHdvcmsgYmxvY2tcbiAgICAgKiBlLmcuIGZvciAvNTY6IG1hc2sgPSAoMSA8PCAoMTYtOCkpIC0gMSA9IDB4MDBGRlxuICAgICAqL1xuICAgIGlmIChyZW1haW5pbmdCaXRzID4gMCkge1xuICAgICAgY29uc3QgbGFzdE5ldHdvcmtJbmRleCA9IG5ldHdvcmtQYXJ0TGVuZ3RoIC0gMTtcbiAgICAgIGNvbnN0IG1hc2sgPSAoQmlnSW50KDEpIDw8IEJpZ0ludCgxNiAtIHJlbWFpbmluZ0JpdHMpKSAtIEJpZ0ludCgxKTtcbiAgICAgIC8qKlxuICAgICAgICogQXBwbHkgYml0bWFzayB0byBsYXN0IG5ldHdvcmsgYmxvY2sgdXNpbmcgYml0d2lzZSBPUlxuICAgICAgICogZS5nLiBpZiBsYXN0TmV0d29ya0luZGV4PTMgYW5kIG1hc2s9MHgwMEZGOlxuICAgICAgICogbmV0d29ya1BhcnRbM109MHgwMDAwIHwgMHgwMEZGID0gMHgwMEZGXG4gICAgICAgKi9cbiAgICAgIGVuZElQW2xhc3ROZXR3b3JrSW5kZXhdID0gdGhpcy5uZXR3b3JrUGFydFtsYXN0TmV0d29ya0luZGV4XSB8IG1hc2s7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlsbCByZW1haW5pbmcgYmxvY2tzIHdpdGggbWF4aW11bSB2YWx1ZSAweEZGRkZcbiAgICAgKiBlLmcuIFsyMDAxLCBkYjgsIDAsIGZmLCBmZmZmLCBmZmZmLCBmZmZmLCBmZmZmXVxuICAgICAqL1xuICAgIGZvciAobGV0IGkgPSBuZXR3b3JrUGFydExlbmd0aDsgaSA8IDg7IGkrKykge1xuICAgICAgZW5kSVAucHVzaChCaWdJbnQoJzB4ZmZmZicpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGJsb2NrcyB0byBoZXggc3RyaW5ncyBhbmQgam9pbiB3aXRoIGNvbG9uc1xuICAgICAqIGUuZy4gMjAwMTpkYjg6MDpmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmXG4gICAgICovXG4gICAgcmV0dXJuIGVuZElQLm1hcCh0aGlzLmZvcm1hdElQdjZQYXJ0KS5qb2luKCc6Jyk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdElQdjZQYXJ0ID0gKHBhcnQ6IGJpZ2ludCkgPT4gcGFydC50b1N0cmluZygxNikucGFkU3RhcnQoNCwgJzAnKTtcblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHJhbmdlMSBJcHY2IENJRFIgcmFuZ2UgdG8gY29tcGFyZVxuICAgKiBAcGFyYW0gcmFuZ2UyIElwdjYgQ0lEUiByYW5nZSB0byBjb21wYXJlXG4gICAqIEByZXR1cm5zIHRydWUgaWYgdHdvIHJhbmdlcyBvdmVybGFwLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHB1YmxpYyByYW5nZXNPdmVybGFwKHJhbmdlMTogc3RyaW5nLCByYW5nZTI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vIENyZWF0ZSBuZXcgQ2lkckJsb2NrSXB2NiBpbnN0YW5jZXMgZm9yIGJvdGggcmFuZ2VzXG4gICAgY29uc3QgY2lkcjEgPSBuZXcgQ2lkckJsb2NrSXB2NihyYW5nZTEpO1xuICAgIGNvbnN0IGNpZHIyID0gbmV3IENpZHJCbG9ja0lwdjYocmFuZ2UyKTtcblxuICAgIC8vIENvbnZlcnQgbWluIGFuZCBtYXggSVBzIHRvIG51bWVyaWMgdmFsdWVzIGZvciBjb21wYXJpc29uXG4gICAgY29uc3Qgc3RhcnQxID0gdGhpcy5pcHY2VG9OdW1iZXIoY2lkcjEubWluSXAoKSk7XG4gICAgY29uc3QgZW5kMSA9IHRoaXMuaXB2NlRvTnVtYmVyKGNpZHIxLm1heElwKCkpO1xuICAgIGNvbnN0IHN0YXJ0MiA9IHRoaXMuaXB2NlRvTnVtYmVyKGNpZHIyLm1pbklwKCkpO1xuICAgIGNvbnN0IGVuZDIgPSB0aGlzLmlwdjZUb051bWJlcihjaWRyMi5tYXhJcCgpKTtcblxuICAgIC8vIENoZWNrIGZvciBvdmVybGFwXG4gICAgcmV0dXJuIChzdGFydDEgPD0gZW5kMikgJiYgKHN0YXJ0MiA8PSBlbmQxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBDb252ZXJ0cyBnaXZlbiBpcHY2IGFkZHJlc3MgcmFuZ2UgdG8gYmlnIGludCBudW1iZXJcbiAgICovXG4gIHByaXZhdGUgaXB2NlRvTnVtYmVyKGlwdjZBZGRyZXNzOiBzdHJpbmcpOiBiaWdpbnQge1xuICAgIGNvbnN0IGJsb2NrcyA9IHRoaXMucGFyc2VCaWdJbnRQYXJ0cyhpcHY2QWRkcmVzcyk7XG4gICAgbGV0IGlwdjZOdW1iZXIgPSBCaWdJbnQoMCk7XG4gICAgZm9yIChjb25zdCBibG9jayBvZiBibG9ja3MpIHtcbiAgICAgIC8qIHRzbGludDpkaXNhYmxlOm5vLWJpdHdpc2UgKi9cbiAgICAgIGlwdjZOdW1iZXIgPSAoaXB2Nk51bWJlciA8PCBCaWdJbnQoMTYpKSArIGJsb2NrO1xuICAgIH1cbiAgICByZXR1cm4gaXB2Nk51bWJlcjtcbiAgfVxufVxuIl19
|