@cloudsnorkel/cdk-github-runners 0.14.24 → 0.15.1
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 +5953 -602
- package/API.md +1349 -115
- package/README.md +53 -1
- package/assets/delete-failed-runner.lambda/index.js +122 -9
- package/assets/idle-runner-repear.lambda/index.js +153 -14
- package/assets/image-builders/aws-image-builder/delete-resources.lambda/index.js +1 -1
- package/assets/image-builders/build-image.lambda/index.js +1 -1
- package/assets/providers/ami-root-device.lambda/index.js +1 -1
- package/assets/setup.lambda/index.html +7 -7
- package/assets/setup.lambda/index.js +118 -8
- package/assets/status.lambda/index.js +121 -8
- package/assets/token-retriever.lambda/index.js +121 -8
- package/assets/warm-runner-manager.lambda/index.js +5909 -0
- package/assets/webhook-handler.lambda/index.js +126 -11
- package/assets/webhook-redelivery.lambda/index.js +139 -24
- package/lib/access.js +1 -1
- package/lib/delete-failed-runner.lambda.js +2 -2
- package/lib/idle-runner-repear.lambda.js +33 -7
- package/lib/image-builders/api.js +1 -1
- package/lib/image-builders/aws-image-builder/base-image.d.ts +13 -0
- package/lib/image-builders/aws-image-builder/base-image.js +36 -3
- package/lib/image-builders/aws-image-builder/builder.js +4 -4
- package/lib/image-builders/aws-image-builder/delete-resources.lambda.js +2 -2
- package/lib/image-builders/aws-image-builder/deprecated/ami.js +1 -1
- package/lib/image-builders/aws-image-builder/deprecated/container.js +1 -1
- package/lib/image-builders/aws-image-builder/deprecated/linux-components.js +1 -1
- package/lib/image-builders/aws-image-builder/deprecated/windows-components.js +1 -1
- package/lib/image-builders/build-image.lambda.js +2 -2
- package/lib/image-builders/codebuild-deprecated.js +1 -1
- package/lib/image-builders/components.js +3 -3
- package/lib/image-builders/static.js +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -1
- package/lib/lambda-github.d.ts +1 -1
- package/lib/lambda-github.js +3 -2
- package/lib/lambda-helpers.js +4 -4
- package/lib/providers/ami-root-device.lambda.js +2 -2
- package/lib/providers/codebuild.d.ts +18 -2
- package/lib/providers/codebuild.js +15 -4
- package/lib/providers/common.d.ts +47 -3
- package/lib/providers/common.js +29 -5
- package/lib/providers/composite.js +14 -19
- package/lib/providers/ec2.d.ts +9 -2
- package/lib/providers/ec2.js +84 -42
- package/lib/providers/ecs.d.ts +19 -2
- package/lib/providers/ecs.js +49 -44
- package/lib/providers/fargate.d.ts +2 -2
- package/lib/providers/fargate.js +19 -36
- package/lib/providers/lambda.d.ts +2 -2
- package/lib/providers/lambda.js +3 -3
- package/lib/runner.d.ts +31 -3
- package/lib/runner.js +171 -46
- package/lib/secrets.js +1 -1
- package/lib/setup.lambda.js +2 -2
- package/lib/utils.d.ts +10 -1
- package/lib/utils.js +15 -1
- package/lib/warm-runner-manager-function.d.ts +18 -0
- package/lib/warm-runner-manager-function.js +24 -0
- package/lib/warm-runner-manager.lambda.d.ts +41 -0
- package/lib/warm-runner-manager.lambda.js +487 -0
- package/lib/warm-runner.d.ts +155 -0
- package/lib/warm-runner.js +217 -0
- package/lib/webhook-handler.lambda.js +5 -3
- package/lib/webhook-redelivery.lambda.js +17 -16
- package/lib/webhook.d.ts +4 -0
- package/lib/webhook.js +2 -1
- package/node_modules/cron-parser/LICENSE +21 -0
- package/node_modules/cron-parser/README.md +408 -0
- package/node_modules/cron-parser/dist/CronDate.js +518 -0
- package/node_modules/cron-parser/dist/CronExpression.js +520 -0
- package/node_modules/cron-parser/dist/CronExpressionParser.js +382 -0
- package/node_modules/cron-parser/dist/CronFieldCollection.js +371 -0
- package/node_modules/cron-parser/dist/CronFileParser.js +109 -0
- package/node_modules/cron-parser/dist/fields/CronDayOfMonth.js +44 -0
- package/node_modules/cron-parser/dist/fields/CronDayOfWeek.js +51 -0
- package/node_modules/cron-parser/dist/fields/CronField.js +214 -0
- package/node_modules/cron-parser/dist/fields/CronHour.js +40 -0
- package/node_modules/cron-parser/dist/fields/CronMinute.js +40 -0
- package/node_modules/cron-parser/dist/fields/CronMonth.js +44 -0
- package/node_modules/cron-parser/dist/fields/CronSecond.js +40 -0
- package/node_modules/cron-parser/dist/fields/index.js +24 -0
- package/node_modules/cron-parser/dist/fields/types.js +2 -0
- package/node_modules/cron-parser/dist/index.js +31 -0
- package/node_modules/cron-parser/dist/types/CronDate.d.ts +288 -0
- package/node_modules/cron-parser/dist/types/CronExpression.d.ts +118 -0
- package/node_modules/cron-parser/dist/types/CronExpressionParser.d.ts +70 -0
- package/node_modules/cron-parser/dist/types/CronFieldCollection.d.ts +153 -0
- package/node_modules/cron-parser/dist/types/CronFileParser.d.ts +30 -0
- package/node_modules/cron-parser/dist/types/fields/CronDayOfMonth.d.ts +25 -0
- package/node_modules/cron-parser/dist/types/fields/CronDayOfWeek.d.ts +30 -0
- package/node_modules/cron-parser/dist/types/fields/CronField.d.ts +130 -0
- package/node_modules/cron-parser/dist/types/fields/CronHour.d.ts +23 -0
- package/node_modules/cron-parser/dist/types/fields/CronMinute.d.ts +23 -0
- package/node_modules/cron-parser/dist/types/fields/CronMonth.d.ts +24 -0
- package/node_modules/cron-parser/dist/types/fields/CronSecond.d.ts +23 -0
- package/node_modules/cron-parser/dist/types/fields/index.d.ts +8 -0
- package/node_modules/cron-parser/dist/types/fields/types.d.ts +18 -0
- package/node_modules/cron-parser/dist/types/index.d.ts +8 -0
- package/node_modules/cron-parser/dist/types/utils/random.d.ts +10 -0
- package/node_modules/cron-parser/dist/utils/random.js +38 -0
- package/node_modules/cron-parser/package.json +117 -0
- package/node_modules/luxon/LICENSE.md +7 -0
- package/node_modules/luxon/README.md +55 -0
- package/node_modules/luxon/build/amd/luxon.js +8741 -0
- package/node_modules/luxon/build/amd/luxon.js.map +1 -0
- package/node_modules/luxon/build/cjs-browser/luxon.js +8739 -0
- package/node_modules/luxon/build/cjs-browser/luxon.js.map +1 -0
- package/node_modules/luxon/build/es6/luxon.mjs +8133 -0
- package/node_modules/luxon/build/es6/luxon.mjs.map +1 -0
- package/node_modules/luxon/build/global/luxon.js +8744 -0
- package/node_modules/luxon/build/global/luxon.js.map +1 -0
- package/node_modules/luxon/build/global/luxon.min.js +1 -0
- package/node_modules/luxon/build/global/luxon.min.js.map +1 -0
- package/node_modules/luxon/build/node/luxon.js +7792 -0
- package/node_modules/luxon/build/node/luxon.js.map +1 -0
- package/node_modules/luxon/package.json +87 -0
- package/node_modules/luxon/src/datetime.js +2603 -0
- package/node_modules/luxon/src/duration.js +1009 -0
- package/node_modules/luxon/src/errors.js +61 -0
- package/node_modules/luxon/src/impl/conversions.js +206 -0
- package/node_modules/luxon/src/impl/diff.js +95 -0
- package/node_modules/luxon/src/impl/digits.js +94 -0
- package/node_modules/luxon/src/impl/english.js +233 -0
- package/node_modules/luxon/src/impl/formats.js +176 -0
- package/node_modules/luxon/src/impl/formatter.js +434 -0
- package/node_modules/luxon/src/impl/invalid.js +14 -0
- package/node_modules/luxon/src/impl/locale.js +569 -0
- package/node_modules/luxon/src/impl/regexParser.js +335 -0
- package/node_modules/luxon/src/impl/tokenParser.js +505 -0
- package/node_modules/luxon/src/impl/util.js +330 -0
- package/node_modules/luxon/src/impl/zoneUtil.js +34 -0
- package/node_modules/luxon/src/info.js +205 -0
- package/node_modules/luxon/src/interval.js +669 -0
- package/node_modules/luxon/src/luxon.js +26 -0
- package/node_modules/luxon/src/package.json +4 -0
- package/node_modules/luxon/src/settings.js +180 -0
- package/node_modules/luxon/src/zone.js +97 -0
- package/node_modules/luxon/src/zones/IANAZone.js +235 -0
- package/node_modules/luxon/src/zones/fixedOffsetZone.js +150 -0
- package/node_modules/luxon/src/zones/invalidZone.js +53 -0
- package/node_modules/luxon/src/zones/systemZone.js +61 -0
- package/package.json +33 -24
package/lib/providers/common.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
var _a, _b, _c;
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.BaseProvider = exports.Os = exports.Architecture = exports.RunnerVersion = void 0;
|
|
5
|
+
exports.mergeConstMaps = mergeConstMaps;
|
|
5
6
|
exports.amiRootDevice = amiRootDevice;
|
|
6
7
|
exports.generateStateName = generateStateName;
|
|
7
8
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
@@ -45,7 +46,7 @@ class RunnerVersion {
|
|
|
45
46
|
}
|
|
46
47
|
exports.RunnerVersion = RunnerVersion;
|
|
47
48
|
_a = JSII_RTTI_SYMBOL_1;
|
|
48
|
-
RunnerVersion[_a] = { fqn: "@cloudsnorkel/cdk-github-runners.RunnerVersion", version: "0.
|
|
49
|
+
RunnerVersion[_a] = { fqn: "@cloudsnorkel/cdk-github-runners.RunnerVersion", version: "0.15.1" };
|
|
49
50
|
/**
|
|
50
51
|
* CPU architecture enum for an image.
|
|
51
52
|
*/
|
|
@@ -94,7 +95,7 @@ class Architecture {
|
|
|
94
95
|
}
|
|
95
96
|
exports.Architecture = Architecture;
|
|
96
97
|
_b = JSII_RTTI_SYMBOL_1;
|
|
97
|
-
Architecture[_b] = { fqn: "@cloudsnorkel/cdk-github-runners.Architecture", version: "0.
|
|
98
|
+
Architecture[_b] = { fqn: "@cloudsnorkel/cdk-github-runners.Architecture", version: "0.15.1" };
|
|
98
99
|
/**
|
|
99
100
|
* ARM64
|
|
100
101
|
*/
|
|
@@ -137,7 +138,7 @@ class Os {
|
|
|
137
138
|
}
|
|
138
139
|
exports.Os = Os;
|
|
139
140
|
_c = JSII_RTTI_SYMBOL_1;
|
|
140
|
-
Os[_c] = { fqn: "@cloudsnorkel/cdk-github-runners.Os", version: "0.
|
|
141
|
+
Os[_c] = { fqn: "@cloudsnorkel/cdk-github-runners.Os", version: "0.15.1" };
|
|
141
142
|
/**
|
|
142
143
|
* Linux
|
|
143
144
|
*
|
|
@@ -180,6 +181,23 @@ Os._ALL_LINUX_UBUNTU_VERSIONS = [Os.LINUX_UBUNTU, Os.LINUX_UBUNTU_2204, Os.LINUX
|
|
|
180
181
|
* Windows
|
|
181
182
|
*/
|
|
182
183
|
Os.WINDOWS = Os.of('Windows');
|
|
184
|
+
/**
|
|
185
|
+
* Merges static-const maps; throws if two maps use the same key with different values.
|
|
186
|
+
*
|
|
187
|
+
* @internal
|
|
188
|
+
*/
|
|
189
|
+
function mergeConstMaps(...maps) {
|
|
190
|
+
const merged = {};
|
|
191
|
+
for (const part of maps) {
|
|
192
|
+
for (const [key, value] of Object.entries(part)) {
|
|
193
|
+
if (Object.prototype.hasOwnProperty.call(merged, key) && merged[key] !== value) {
|
|
194
|
+
throw new Error(`Duplicate stepFunctionConstants() key "${key}" with different values. Use unique keys per provider (e.g. include the construct id or node address).`);
|
|
195
|
+
}
|
|
196
|
+
merged[key] = value;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
return merged;
|
|
200
|
+
}
|
|
183
201
|
/**
|
|
184
202
|
* Base class for all providers with common methods used by all providers.
|
|
185
203
|
*
|
|
@@ -190,9 +208,15 @@ class BaseProvider extends constructs_1.Construct {
|
|
|
190
208
|
super(scope, id);
|
|
191
209
|
cdk.Tags.of(this).add('GitHubRunners:Provider', this.node.path);
|
|
192
210
|
}
|
|
211
|
+
/**
|
|
212
|
+
* Override to inject static strings into `$.consts` on the orchestrator state machine.
|
|
213
|
+
*/
|
|
214
|
+
stepFunctionConstants() {
|
|
215
|
+
return {};
|
|
216
|
+
}
|
|
193
217
|
labelsFromProperties(defaultLabel, propsLabel, propsLabels) {
|
|
194
218
|
if (propsLabels && propsLabel) {
|
|
195
|
-
|
|
219
|
+
cdk.Annotations.of(this).addError('Must supply either `label` or `labels` in runner properties, but not both. Try removing the `label` property.');
|
|
196
220
|
}
|
|
197
221
|
if (propsLabels) {
|
|
198
222
|
return propsLabels;
|
|
@@ -264,4 +288,4 @@ function generateStateName(construct, suffix) {
|
|
|
264
288
|
const truncated = fullName.slice(0, truncatedLength);
|
|
265
289
|
return `${truncated}${separator}${hashSuffix}`;
|
|
266
290
|
}
|
|
267
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3ZpZGVycy9jb21tb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQTBuQkEsc0NBMEJDO0FBYUQsOENBa0JDOztBQW5yQkQsaUNBQWlDO0FBQ2pDLG1DQUFtQztBQUNuQyw2Q0FTcUI7QUFFckIsMkNBQW1EO0FBQ25ELHlFQUFtRTtBQUNuRSxvQ0FBZ0Y7QUFFaEY7O0dBRUc7QUFDSCxNQUFhLGFBQWE7SUFDeEI7O09BRUc7SUFDSSxNQUFNLENBQUMsTUFBTTtRQUNsQixPQUFPLElBQUksYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQWU7UUFDcEMsT0FBTyxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsWUFBK0IsT0FBZTtRQUFmLFlBQU8sR0FBUCxPQUFPLENBQVE7SUFDOUMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxFQUFFLENBQUMsS0FBb0I7UUFDNUIsT0FBTyxJQUFJLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUM7SUFDdkMsQ0FBQzs7QUE3Qkgsc0NBOEJDOzs7QUFFRDs7R0FFRztBQUNILE1BQWEsWUFBWTtJQVdmLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBb0I7UUFDcEMsT0FBTyxJQUFJLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsWUFBb0MsSUFBWTtRQUFaLFNBQUksR0FBSixJQUFJLENBQVE7SUFDaEQsQ0FBQztJQUVEOzs7O01BSUU7SUFDSyxFQUFFLENBQUMsSUFBa0I7UUFDMUIsT0FBTyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxJQUFJLENBQUMsTUFBc0I7UUFDaEMsS0FBSyxN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TUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkYsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDO0lBQ3RCLE1BQU0sZUFBZSxHQUFHLFNBQVMsR0FBRyxVQUFVLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7SUFDekUsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDckQsT0FBTyxHQUFHLFNBQVMsR0FBRyxTQUFTLEdBQUcsVUFBVSxFQUFFLENBQUM7QUFDakQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNyeXB0byBmcm9tICdjcnlwdG8nO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7XG4gIGF3c19lYzIgYXMgZWMyLFxuICBhd3NfZWNyIGFzIGVjcixcbiAgYXdzX2lhbSBhcyBpYW0sXG4gIGF3c19sYW1iZGEgYXMgbGFtYmRhLFxuICBhd3NfbG9ncyBhcyBsb2dzLFxuICBhd3Nfc3RlcGZ1bmN0aW9ucyBhcyBzdGVwZnVuY3Rpb25zLFxuICBDdXN0b21SZXNvdXJjZSxcbiAgRHVyYXRpb24sXG59IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IEVic0RldmljZVZvbHVtZVR5cGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB7IENvbnN0cnVjdCwgSUNvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQW1pUm9vdERldmljZUZ1bmN0aW9uIH0gZnJvbSAnLi9hbWktcm9vdC1kZXZpY2UtZnVuY3Rpb24nO1xuaW1wb3J0IHsgc2luZ2xldG9uTGFtYmRhLCBzaW5nbGV0b25Mb2dHcm91cCwgU2luZ2xldG9uTG9nVHlwZSB9IGZyb20gJy4uL3V0aWxzJztcblxuLyoqXG4gKiBEZWZpbmVzIGRlc2lyZWQgR2l0SHViIEFjdGlvbnMgcnVubmVyIHZlcnNpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBSdW5uZXJWZXJzaW9uIHtcbiAgLyoqXG4gICAqIFVzZSB0aGUgbGF0ZXN0IHZlcnNpb24gYXZhaWxhYmxlIGF0IHRoZSB0aW1lIHRoZSBydW5uZXIgcHJvdmlkZXIgaW1hZ2UgaXMgYnVpbHQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGxhdGVzdCgpOiBSdW5uZXJWZXJzaW9uIHtcbiAgICByZXR1cm4gbmV3IFJ1bm5lclZlcnNpb24oJ2xhdGVzdCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZSBhIHNwZWNpZmljIHZlcnNpb24uXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2FjdGlvbnMvcnVubmVyL3JlbGVhc2VzXG4gICAqXG4gICAqIEBwYXJhbSB2ZXJzaW9uIEdpdEh1YiBSdW5uZXIgdmVyc2lvblxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzcGVjaWZpYyh2ZXJzaW9uOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFJ1bm5lclZlcnNpb24odmVyc2lvbik7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IocmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nKSB7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdHdvIHZlcnNpb25zIGFyZSB0aGUgc2FtZS5cbiAgICpcbiAgICogQHBhcmFtIG90aGVyIHZlcnNpb24gdG8gY29tcGFyZVxuICAgKi9cbiAgcHVibGljIGlzKG90aGVyOiBSdW5uZXJWZXJzaW9uKSB7XG4gICAgcmV0dXJuIHRoaXMudmVyc2lvbiA9PSBvdGhlci52ZXJzaW9uO1xuICB9XG59XG5cbi8qKlxuICogQ1BVIGFyY2hpdGVjdHVyZSBlbnVtIGZvciBhbiBpbWFnZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEFyY2hpdGVjdHVyZSB7XG4gIC8qKlxuICAgKiBBUk02NFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBUk02NCA9IEFyY2hpdGVjdHVyZS5vZignQVJNNjQnKTtcblxuICAvKipcbiAgICogWDg2XzY0XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFg4Nl82NCA9IEFyY2hpdGVjdHVyZS5vZignWDg2XzY0Jyk7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgb2YoYXJjaGl0ZWN0dXJlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IEFyY2hpdGVjdHVyZShhcmNoaXRlY3R1cmUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nKSB7XG4gIH1cblxuICAvKipcbiAgKiBDaGVja3MgaWYgdGhlIGdpdmVuIGFyY2hpdGVjdHVyZSBpcyB0aGUgc2FtZSBhcyB0aGlzIG9uZS5cbiAgKlxuICAqIEBwYXJhbSBhcmNoIGFyY2hpdGVjdHVyZSB0byBjb21wYXJlXG4gICovXG4gIHB1YmxpYyBpcyhhcmNoOiBBcmNoaXRlY3R1cmUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gYXJjaC5uYW1lID09IHRoaXMubmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhpcyBhcmNoaXRlY3R1cmUgaXMgaW4gYSBnaXZlbiBsaXN0LlxuICAgKlxuICAgKiBAcGFyYW0gYXJjaGVzIGFyY2hpdGVjdHVyZXMgdG8gY2hlY2tcbiAgICovXG4gIHB1YmxpYyBpc0luKGFyY2hlczogQXJjaGl0ZWN0dXJlW10pOiBib29sZWFuIHtcbiAgICBmb3IgKGNvbnN0IGFyY2ggb2YgYXJjaGVzKSB7XG4gICAgICBpZiAodGhpcy5pcyhhcmNoKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIGdpdmVuIEVDMiBpbnN0YW5jZSB0eXBlIG1hdGNoZXMgdGhpcyBhcmNoaXRlY3R1cmUuXG4gICAqXG4gICAqIEBwYXJhbSBpbnN0YW5jZVR5cGUgaW5zdGFuY2UgdHlwZSB0byBjaGVja1xuICAgKi9cbiAgcHVibGljIGluc3RhbmNlVHlwZU1hdGNoKGluc3RhbmNlVHlwZTogZWMyLkluc3RhbmNlVHlwZSk6IGJvb2xlYW4ge1xuICAgIGlmIChpbnN0YW5jZVR5cGUuYXJjaGl0ZWN0dXJlID09IGVjMi5JbnN0YW5jZUFyY2hpdGVjdHVyZS5YODZfNjQpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzKEFyY2hpdGVjdHVyZS5YODZfNjQpO1xuICAgIH1cbiAgICBpZiAoaW5zdGFuY2VUeXBlLmFyY2hpdGVjdHVyZSA9PSBlYzIuSW5zdGFuY2VBcmNoaXRlY3R1cmUuQVJNXzY0KSB7XG4gICAgICByZXR1cm4gdGhpcy5pcyhBcmNoaXRlY3R1cmUuQVJNNjQpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gaW5zdGFuY2UgdHlwZSBhcmNoaXRlY3R1cmUnKTtcbiAgfVxufVxuXG4vKipcbiAqIE9TIGVudW0gZm9yIGFuIGltYWdlLlxuICovXG5leHBvcnQgY2xhc3MgT3Mge1xuICAvKipcbiAgKiBMaW51eFxuICAqXG4gICogQGRlcHJlY2F0ZWQgdXNlIHtAbGluayBMSU5VWF9VQlVOVFV9LCB7QGxpbmsgTElOVVhfVUJVTlRVXzI0MDR9LCB7QGxpbmsgTElOVVhfQU1BWk9OXzJ9IG9yIHtAbGluayBMSU5VWF9BTUFaT05fMjAyM31cbiAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBMSU5VWCA9IE9zLm9mKCdMaW51eCcpO1xuXG4gIC8qKlxuICAgKiBVYnVudHUgTGludXhcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTElOVVhfVUJVTlRVID0gT3Mub2YoJ1VidW50dSBMaW51eCcpO1xuXG4gIC8qKlxuICAqIFVidW50dSBMaW51eCAyMi4wNFxuICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IExJTlVYX1VCVU5UVV8yMjA0ID0gT3Mub2YoJ1VidW50dSBMaW51eCAyMi4wNCcpO1xuXG4gIC8qKlxuICAgKiBVYnVudHUgTGludXggMjQuMDRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTElOVVhfVUJVTlRVXzI0MDQgPSBPcy5vZignVWJ1bnR1IExpbnV4IDI0LjA0Jyk7XG5cbiAgLyoqXG4gICAqIEFtYXpvbiBMaW51eCAyXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IExJTlVYX0FNQVpPTl8yID0gT3Mub2YoJ0FtYXpvbiBMaW51eCAyJyk7XG5cbiAgLyoqXG4gICAqIEFtYXpvbiBMaW51eCAyMDIzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IExJTlVYX0FNQVpPTl8yMDIzID0gT3Mub2YoJ0FtYXpvbiBMaW51eCAyMDIzJyk7XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBfQUxMX0xJTlVYX1ZFUlNJT05TID1cbiAgICBbT3MuTElOVVgsIE9zLkxJTlVYX1VCVU5UVSwgT3MuTElOVVhfVUJVTlRVXzIyMDQsIE9zLkxJTlVYX1VCVU5UVV8yNDA0LCBPcy5MSU5VWF9BTUFaT05fMiwgT3MuTElOVVhfQU1BWk9OXzIwMjNdO1xuXG4gIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IF9BTExfTElOVVhfQU1BWk9OX1ZFUlNJT05TID0gW09zLkxJTlVYX0FNQVpPTl8yLCBPcy5MSU5VWF9BTUFaT05fMjAyM107XG5cbiAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgX0FMTF9MSU5VWF9VQlVOVFVfVkVSU0lPTlMgPSBbT3MuTElOVVhfVUJVTlRVLCBPcy5MSU5VWF9VQlVOVFVfMjIwNCwgT3MuTElOVVhfVUJVTlRVXzI0MDRdO1xuXG4gIC8qKlxuICAqIFdpbmRvd3NcbiAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBXSU5ET1dTID0gT3Mub2YoJ1dpbmRvd3MnKTtcblxuICBwcml2YXRlIHN0YXRpYyBvZihvczogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBPcyhvcyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmcpIHtcbiAgfVxuXG4gIC8qKlxuICAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gT1MgaXMgdGhlIHNhbWUgYXMgdGhpcyBvbmUuXG4gICpcbiAgKiBAcGFyYW0gb3MgT1MgdG8gY29tcGFyZVxuICAqL1xuICBwdWJsaWMgaXMob3M6IE9zKSB7XG4gICAgcmV0dXJuIG9zLm5hbWUgPT0gdGhpcy5uYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGlzIE9TIGlzIGluIGEgZ2l2ZW4gbGlzdC5cbiAgICpcbiAgICogQHBhcmFtIG9zZXMgbGlzdCBvZiBPUyB0byBjaGVja1xuICAgKi9cbiAgcHVibGljIGlzSW4ob3NlczogT3NbXSk6IGJvb2xlYW4ge1xuICAgIGZvciAoY29uc3Qgb3Mgb2Ygb3Nlcykge1xuICAgICAgaWYgKHRoaXMuaXMob3MpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBEZXNjcmlwdGlvbiBvZiBhIERvY2tlciBpbWFnZSBidWlsdCBieSB7QGxpbmsgUnVubmVySW1hZ2VCdWlsZGVyfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdW5uZXJJbWFnZSB7XG4gIC8qKlxuICAgKiBFQ1IgcmVwb3NpdG9yeSBjb250YWluaW5nIHRoZSBpbWFnZS5cbiAgICovXG4gIHJlYWRvbmx5IGltYWdlUmVwb3NpdG9yeTogZWNyLklSZXBvc2l0b3J5O1xuXG4gIC8qKlxuICAgKiBTdGF0aWMgaW1hZ2UgdGFnIHdoZXJlIHRoZSBpbWFnZSB3aWxsIGJlIHB1c2hlZC5cbiAgICovXG4gIHJlYWRvbmx5IGltYWdlVGFnOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFyY2hpdGVjdHVyZSBvZiB0aGUgaW1hZ2UuXG4gICAqL1xuICByZWFkb25seSBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZTtcblxuICAvKipcbiAgICogT1MgdHlwZSBvZiB0aGUgaW1hZ2UuXG4gICAqL1xuICByZWFkb25seSBvczogT3M7XG5cbiAgLyoqXG4gICAqIExvZyBncm91cCB3aGVyZSBpbWFnZSBidWlsZHMgYXJlIGxvZ2dlZC5cbiAgICovXG4gIHJlYWRvbmx5IGxvZ0dyb3VwPzogbG9ncy5Mb2dHcm91cDtcblxuICAvKipcbiAgICogSW5zdGFsbGVkIHJ1bm5lciB2ZXJzaW9uLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBvcGVuIGEgdGlja2V0IGlmIHlvdSBuZWVkIHRoaXNcbiAgICovXG4gIHJlYWRvbmx5IHJ1bm5lclZlcnNpb246IFJ1bm5lclZlcnNpb247XG5cbiAgLyoqXG4gICAqIEEgZGVwZW5kYWJsZSBzdHJpbmcgdGhhdCBjYW4gYmUgd2FpdGVkIG9uIHRvIGVuc3VyZSB0aGUgaW1hZ2UgaXMgcmVhZHkuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcmVhZG9ubHkgX2RlcGVuZGFibGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVzY3JpcHRpb24gb2YgYSBBTUkgYnVpbHQgYnkge0BsaW5rIFJ1bm5lckltYWdlQnVpbGRlcn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVubmVyQW1pIHtcbiAgLyoqXG4gICAqIExhdW5jaCB0ZW1wbGF0ZSBwb2ludGluZyB0byB0aGUgbGF0ZXN0IEFNSS5cbiAgICovXG4gIHJlYWRvbmx5IGxhdW5jaFRlbXBsYXRlOiBlYzIuSUxhdW5jaFRlbXBsYXRlO1xuXG4gIC8qKlxuICAgKiBBcmNoaXRlY3R1cmUgb2YgdGhlIGltYWdlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXJjaGl0ZWN0dXJlOiBBcmNoaXRlY3R1cmU7XG5cbiAgLyoqXG4gICAqIE9TIHR5cGUgb2YgdGhlIGltYWdlLlxuICAgKi9cbiAgcmVhZG9ubHkgb3M6IE9zO1xuXG4gIC8qKlxuICAgKiBMb2cgZ3JvdXAgd2hlcmUgaW1hZ2UgYnVpbGRzIGFyZSBsb2dnZWQuXG4gICAqL1xuICByZWFkb25seSBsb2dHcm91cD86IGxvZ3MuTG9nR3JvdXA7XG5cbiAgLyoqXG4gICAqIEluc3RhbGxlZCBydW5uZXIgdmVyc2lvbi5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgb3BlbiBhIHRpY2tldCBpZiB5b3UgbmVlZCB0aGlzXG4gICAqL1xuICByZWFkb25seSBydW5uZXJWZXJzaW9uOiBSdW5uZXJWZXJzaW9uO1xufVxuXG4vKipcbiAqIFJldHJ5IG9wdGlvbnMgZm9yIHByb3ZpZGVycy4gVGhlIGRlZmF1bHQgaXMgdG8gcmV0cnkgMjMgdGltZXMgZm9yIGFib3V0IDI0IGhvdXJzIHdpdGggaW5jcmVhc2luZyBpbnRlcnZhbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm92aWRlclJldHJ5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBTZXQgdG8gdHJ1ZSB0byByZXRyeSBwcm92aWRlciBvbiBzdXBwb3J0ZWQgZmFpbHVyZXMuIFdoaWNoIGZhaWx1cmVzIGdlbmVyYXRlIGEgcmV0cnkgZGVwZW5kcyBvbiB0aGUgc3BlY2lmaWMgcHJvdmlkZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHJldHJ5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSG93IG11Y2ggdGltZSB0byB3YWl0IGFmdGVyIGZpcnN0IHJldHJ5YWJsZSBmYWlsdXJlLiBUaGlzIGludGVydmFsIHdpbGwgYmUgbXVsdGlwbGllZCBieSB7QGxpbmsgYmFja29mZlJhdGV9IGVhY2ggcmV0cnkuXG4gICAqXG4gICAqIEBkZWZhdWx0IDEgbWludXRlXG4gICAqL1xuICByZWFkb25seSBpbnRlcnZhbD86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBIb3cgbWFueSB0aW1lcyB0byByZXRyeS5cbiAgICpcbiAgICogQGRlZmF1bHQgMjNcbiAgICovXG4gIHJlYWRvbmx5IG1heEF0dGVtcHRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBNdWx0aXBsaWNhdGlvbiBmb3IgaG93IG11Y2ggbG9uZ2VyIHRoZSB3YWl0IGludGVydmFsIGdldHMgb24gZXZlcnkgcmV0cnkuXG4gICAqXG4gICAqIEBkZWZhdWx0IDEuM1xuICAgKi9cbiAgcmVhZG9ubHkgYmFja29mZlJhdGU/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQ29tbW9uIHByb3BlcnRpZXMgZm9yIGFsbCBydW5uZXIgcHJvdmlkZXJzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bm5lclByb3ZpZGVyUHJvcHMge1xuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBkYXlzIGxvZyBldmVudHMgYXJlIGtlcHQgaW4gQ2xvdWRXYXRjaCBMb2dzLiBXaGVuIHVwZGF0aW5nXG4gICAqIHRoaXMgcHJvcGVydHksIHVuc2V0dGluZyBpdCBkb2Vzbid0IHJlbW92ZSB0aGUgbG9nIHJldGVudGlvbiBwb2xpY3kuIFRvXG4gICAqIHJlbW92ZSB0aGUgcmV0ZW50aW9uIHBvbGljeSwgc2V0IHRoZSB2YWx1ZSB0byBgSU5GSU5JVEVgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBsb2dzLlJldGVudGlvbkRheXMuT05FX01PTlRIXG4gICAqL1xuICByZWFkb25seSBsb2dSZXRlbnRpb24/OiBsb2dzLlJldGVudGlvbkRheXM7XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZSB7QGxpbmsgcmV0cnlPcHRpb25zfSBvbiB7QGxpbmsgR2l0SHViUnVubmVyc30gaW5zdGVhZFxuICAgKi9cbiAgcmVhZG9ubHkgcmV0cnlPcHRpb25zPzogUHJvdmlkZXJSZXRyeU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEFkZCBkZWZhdWx0IGxhYmVscyBiYXNlZCBvbiBPUyBhbmQgYXJjaGl0ZWN0dXJlIG9mIHRoZSBydW5uZXIuIFRoaXMgd2lsbCB0ZWxsIEdpdEh1YiBSdW5uZXIgdG8gYWRkIGRlZmF1bHQgbGFiZWxzIGxpa2UgYHNlbGYtaG9zdGVkYCwgYGxpbnV4YCwgYHg2NGAsIGFuZCBgYXJtNjRgLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0TGFiZWxzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBXb3JrZmxvdyBqb2IgcGFyYW1ldGVycyBhcyBwYXJzZWQgZnJvbSB0aGUgd2ViaG9vayBldmVudC4gUGFzcyB0aGVzZSBpbnRvIHlvdXIgcnVubmVyIGV4ZWN1dG9yIGFuZCBydW4gc29tZXRoaW5nIGxpa2U6XG4gKlxuICogYGBgc2hcbiAqIC4vY29uZmlnLnNoIC0tdW5hdHRlbmRlZCAtLXVybCBcIntSRUdJU1RSQVRJT05fVVJMfVwiIC0tdG9rZW4gXCIke1JVTk5FUl9UT0tFTn1cIiAtLWVwaGVtZXJhbCAtLXdvcmsgX3dvcmsgLS1sYWJlbHMgXCIke1JVTk5FUl9MQUJFTH1cIiAtLW5hbWUgXCIke1JVTk5FUl9OQU1FfVwiIC0tZGlzYWJsZXVwZGF0ZVxuICogYGBgXG4gKlxuICogQWxsIHBhcmFtZXRlcnMgYXJlIHNwZWNpZmllZCBhcyBzdGVwIGZ1bmN0aW9uIHBhdGhzIGFuZCB0aGVyZWZvcmUgbXVzdCBiZSB1c2VkIG9ubHkgaW4gc3RlcCBmdW5jdGlvbiB0YXNrIHBhcmFtZXRlcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVubmVyUnVudGltZVBhcmFtZXRlcnMge1xuICAvKipcbiAgICogUGF0aCB0byBydW5uZXIgdG9rZW4gdXNlZCB0byByZWdpc3RlciB0b2tlbi5cbiAgICovXG4gIHJlYWRvbmx5IHJ1bm5lclRva2VuUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIGRlc2lyZWQgcnVubmVyIG5hbWUuIFdlIHNwZWNpZmljYWxseSBzZXQgdGhlIG5hbWUgdG8gbWFrZSB0cm91Ymxlc2hvb3RpbmcgZWFzaWVyLlxuICAgKi9cbiAgcmVhZG9ubHkgcnVubmVyTmFtZVBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byBHaXRIdWIgZG9tYWluLiBNb3N0IG9mIHRoZSB0aW1lIHRoaXMgd2lsbCBiZSBnaXRodWIuY29tIGJ1dCBmb3Igc2VsZi1ob3N0ZWQgR2l0SHViIGluc3RhbmNlcywgdGhpcyB3aWxsIGJlIGRpZmZlcmVudC5cbiAgICovXG4gIHJlYWRvbmx5IGdpdGh1YkRvbWFpblBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byByZXBvc2l0b3J5IG93bmVyIG5hbWUuXG4gICAqL1xuICByZWFkb25seSBvd25lclBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byByZXBvc2l0b3J5IG5hbWUuXG4gICAqL1xuICByZWFkb25seSByZXBvUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXBvc2l0b3J5IG9yIG9yZ2FuaXphdGlvbiBVUkwgdG8gcmVnaXN0ZXIgcnVubmVyIGF0LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaXN0cmF0aW9uVXJsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gY29tbWEtc2VwYXJhdGVkIGxhYmVscyBzdHJpbmcgdG8gdXNlIGZvciBydW5uZXIuXG4gICAqL1xuICByZWFkb25seSBsYWJlbHNQYXRoOiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBJbWFnZSBzdGF0dXMgcmV0dXJuZWQgZnJvbSBydW5uZXIgcHJvdmlkZXJzIHRvIGJlIGRpc3BsYXllZCBpbiBzdGF0dXMuanNvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUnVubmVySW1hZ2VTdGF0dXMge1xuICAvKipcbiAgICogSW1hZ2UgcmVwb3NpdG9yeSB3aGVyZSBpbWFnZSBidWlsZGVyIHB1c2hlcyBydW5uZXIgaW1hZ2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VSZXBvc2l0b3J5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRhZyBvZiBpbWFnZSB0aGF0IHNob3VsZCBiZSB1c2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VUYWc6IHN0cmluZztcblxuICAvKipcbiAgICogTG9nIGdyb3VwIG5hbWUgZm9yIHRoZSBpbWFnZSBidWlsZGVyIHdoZXJlIGhpc3Rvcnkgb2YgaW1hZ2UgYnVpbGRzIGNhbiBiZSBhbmFseXplZC5cbiAgICovXG4gIHJlYWRvbmx5IGltYWdlQnVpbGRlckxvZ0dyb3VwPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFNSSBzdGF0dXMgcmV0dXJuZWQgZnJvbSBydW5uZXIgcHJvdmlkZXJzIHRvIGJlIGRpc3BsYXllZCBhcyBvdXRwdXQgb2Ygc3RhdHVzIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElSdW5uZXJBbWlTdGF0dXMge1xuICAvKipcbiAgICogSWQgb2YgbGF1bmNoIHRlbXBsYXRlIHBvaW50aW5nIHRvIHRoZSBsYXRlc3QgQU1JIGJ1aWx0IGJ5IHRoZSBBTUkgYnVpbGRlci5cbiAgICovXG4gIHJlYWRvbmx5IGxhdW5jaFRlbXBsYXRlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExvZyBncm91cCBuYW1lIGZvciB0aGUgQU1JIGJ1aWxkZXIgd2hlcmUgaGlzdG9yeSBvZiBidWlsZHMgY2FuIGJlIGFuYWx5emVkLlxuICAgKi9cbiAgcmVhZG9ubHkgYW1pQnVpbGRlckxvZ0dyb3VwPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgcnVubmVyIGltYWdlIHN0YXR1cyB1c2VkIGJ5IHN0YXR1cy5qc29uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElSdW5uZXJQcm92aWRlclN0YXR1cyB7XG4gIC8qKlxuICAgKiBSdW5uZXIgcHJvdmlkZXIgdHlwZS5cbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogTGFiZWxzIGFzc29jaWF0ZWQgd2l0aCBwcm92aWRlci5cbiAgICovXG4gIHJlYWRvbmx5IGxhYmVsczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIENESyBjb25zdHJ1Y3Qgbm9kZSBwYXRoIGZvciB0aGlzIHByb3ZpZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgY29uc3RydWN0UGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogVlBDIHdoZXJlIHJ1bm5lcnMgd2lsbCBiZSBsYXVuY2hlZC5cbiAgICovXG4gIHJlYWRvbmx5IHZwY0Fybj86IHN0cmluZztcblxuICAvKipcbiAgICogU2VjdXJpdHkgZ3JvdXBzIGF0dGFjaGVkIHRvIHJ1bm5lcnMuXG4gICAqL1xuICByZWFkb25seSBzZWN1cml0eUdyb3Vwcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBSb2xlIGF0dGFjaGVkIHRvIHJ1bm5lcnMuXG4gICAqL1xuICByZWFkb25seSByb2xlQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZXRhaWxzIGFib3V0IERvY2tlciBpbWFnZSB1c2VkIGJ5IHRoaXMgcnVubmVyIHByb3ZpZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2U/OiBJUnVubmVySW1hZ2VTdGF0dXM7XG5cbiAgLyoqXG4gICAqIERldGFpbHMgYWJvdXQgQU1JIHVzZWQgYnkgdGhpcyBydW5uZXIgcHJvdmlkZXIuXG4gICAqL1xuICByZWFkb25seSBhbWk/OiBJUnVubmVyQW1pU3RhdHVzO1xuXG4gIC8qKlxuICAgKiBMb2cgZ3JvdXAgZm9yIHJ1bm5lcnMuXG4gICAqL1xuICByZWFkb25seSBsb2dHcm91cD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIGFsbCBydW5uZXIgcHJvdmlkZXJzLiBJbXBsZW1lbnRhdGlvbnMgY3JlYXRlIGFsbCByZXF1aXJlZCByZXNvdXJjZXMgYW5kIHJldHVybiBhIHN0ZXAgZnVuY3Rpb24gdGFzayB0aGF0IHN0YXJ0cyB0aG9zZSByZXNvdXJjZXMgZnJvbSB7QGxpbmsgZ2V0U3RlcEZ1bmN0aW9uVGFza30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVJ1bm5lclByb3ZpZGVyIGV4dGVuZHMgZWMyLklDb25uZWN0YWJsZSwgaWFtLklHcmFudGFibGUsIElDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogR2l0SHViIEFjdGlvbnMgbGFiZWxzIHVzZWQgZm9yIHRoaXMgcHJvdmlkZXIuXG4gICAqXG4gICAqIFRoZXNlIGxhYmVscyBhcmUgdXNlZCB0byBpZGVudGlmeSB3aGljaCBwcm92aWRlciBzaG91bGQgc3Bhd24gYSBuZXcgb24tZGVtYW5kIHJ1bm5lci4gRXZlcnkgam9iIHNlbmRzIGEgd2ViaG9vayB3aXRoIHRoZSBsYWJlbHMgaXQncyBsb29raW5nIGZvclxuICAgKiBiYXNlZCBvbiBydW5zLW9uLiBXZSB1c2UgbWF0Y2ggdGhlIGxhYmVscyBmcm9tIHRoZSB3ZWJob29rIHdpdGggdGhlIGxhYmVscyBzcGVjaWZpZWQgaGVyZS4gSWYgYWxsIHRoZSBsYWJlbHMgc3BlY2lmaWVkIGhlcmUgYXJlIHByZXNlbnQgaW4gdGhlXG4gICAqIGpvYidzIGxhYmVscywgdGhpcyBwcm92aWRlciB3aWxsIGJlIGNob3NlbiBhbmQgc3Bhd24gYSBuZXcgcnVubmVyLlxuICAgKi9cbiAgcmVhZG9ubHkgbGFiZWxzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTG9nIGdyb3VwIHdoZXJlIHByb3ZpZGVkIHJ1bm5lcnMgd2lsbCBzYXZlIHRoZWlyIGxvZ3MuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCB0aGUgam9iIGxvZywgYnV0IHRoZSBydW5uZXIgaXRzZWxmLiBJdCB3aWxsIG5vdCBjb250YWluIG91dHB1dCBmcm9tIHRoZSBHaXRIdWIgQWN0aW9uIGJ1dCBvbmx5IG1ldGFkYXRhIG9uIGl0cyBleGVjdXRpb24uXG4gICAqL1xuICByZWFkb25seSBsb2dHcm91cDogbG9ncy5JTG9nR3JvdXA7XG5cbiAgLyoqXG4gICAqIExpc3Qgb2Ygc3RlcCBmdW5jdGlvbnMgZXJyb3JzIHRoYXQgc2hvdWxkIGJlIHJldHJpZWQuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIGRvIG5vdCB1c2VcbiAgICovXG4gIHJlYWRvbmx5IHJldHJ5YWJsZUVycm9yczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHN0ZXAgZnVuY3Rpb24gdGFza3MgdGhhdCBleGVjdXRlIHRoZSBydW5uZXIuXG4gICAqXG4gICAqIENhbGxlZCBieSBHaXRodWJSdW5uZXJzIGFuZCBzaG91bGRuJ3QgYmUgY2FsbGVkIG1hbnVhbGx5LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1ldGVycyBzcGVjaWZpYyBidWlsZCBwYXJhbWV0ZXJzXG4gICAqL1xuICBnZXRTdGVwRnVuY3Rpb25UYXNrKHBhcmFtZXRlcnM6IFJ1bm5lclJ1bnRpbWVQYXJhbWV0ZXJzKTogc3RlcGZ1bmN0aW9ucy5JQ2hhaW5hYmxlO1xuXG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBtZXRob2QgdGhhdCBtb2RpZmllcyB0aGUgcm9sZSBvZiB0aGUgc3RhdGUgbWFjaGluZSBhZnRlciBhbGwgdGhlIHRhc2tzIGhhdmUgYmVlbiBnZW5lcmF0ZWQuIFRoaXMgY2FuIGJlIHVzZWQgdG8gYWRkIGFkZGl0aW9uYWwgcG9saWN5XG4gICAqIHN0YXRlbWVudHMgdG8gdGhlIHN0YXRlIG1hY2hpbmUgcm9sZSB0aGF0IGFyZSBub3QgYXV0b21hdGljYWxseSBhZGRlZCBieSB0aGUgdGFzayByZXR1cm5lZCBmcm9tIHtAbGluayBnZXRTdGVwRnVuY3Rpb25UYXNrfS5cbiAgICpcbiAgICogQHBhcmFtIHN0YXRlTWFjaGluZVJvbGUgcm9sZSBmb3IgdGhlIHN0YXRlIG1hY2hpbmUgdGhhdCBleGVjdXRlcyB0aGUgdGFzayByZXR1cm5lZCBmcm9tIHtAbGluayBnZXRTdGVwRnVuY3Rpb25UYXNrfS5cbiAgICovXG4gIGdyYW50U3RhdGVNYWNoaW5lKHN0YXRlTWFjaGluZVJvbGU6IGlhbS5JR3JhbnRhYmxlKTogdm9pZDtcblxuICAvKipcbiAgICogUmV0dXJuIHN0YXR1cyBvZiB0aGUgcnVubmVyIHByb3ZpZGVyIHRvIGJlIHVzZWQgaW4gdGhlIG1haW4gc3RhdHVzIGZ1bmN0aW9uLiBBbHNvIGdpdmVzIHRoZSBzdGF0dXMgZnVuY3Rpb24gYW55IG5lZWRlZCBwZXJtaXNzaW9ucyB0byBxdWVyeSB0aGUgRG9ja2VyIGltYWdlIG9yIEFNSS5cbiAgICpcbiAgICogQHBhcmFtIHN0YXR1c0Z1bmN0aW9uUm9sZSBncmFudGFibGUgZm9yIHRoZSBzdGF0dXMgZnVuY3Rpb25cbiAgICovXG4gIHN0YXR1cyhzdGF0dXNGdW5jdGlvblJvbGU6IGlhbS5JR3JhbnRhYmxlKTogSVJ1bm5lclByb3ZpZGVyU3RhdHVzO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgY29tcG9zaXRlIHJ1bm5lciBwcm92aWRlcnMgdGhhdCBpbnRlcmFjdCB3aXRoIG11bHRpcGxlIHN1Yi1wcm92aWRlcnMuXG4gKiBVbmxpa2UgSVJ1bm5lclByb3ZpZGVyLCBjb21wb3NpdGUgcHJvdmlkZXJzIGRvIG5vdCBoYXZlIGNvbm5lY3Rpb25zLCBncmFudCBjYXBhYmlsaXRpZXMsXG4gKiBsb2cgZ3JvdXBzLCBvciByZXRyeWFibGUgZXJyb3JzIGFzIHRoZXkgZGVsZWdhdGUgdG8gdGhlaXIgc3ViLXByb3ZpZGVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ29tcG9zaXRlUHJvdmlkZXIgZXh0ZW5kcyBJQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIEdpdEh1YiBBY3Rpb25zIGxhYmVscyB1c2VkIGZvciB0aGlzIHByb3ZpZGVyLlxuICAgKlxuICAgKiBUaGVzZSBsYWJlbHMgYXJlIHVzZWQgdG8gaWRlbnRpZnkgd2hpY2ggcHJvdmlkZXIgc2hvdWxkIHNwYXduIGEgbmV3IG9uLWRlbWFuZCBydW5uZXIuIEV2ZXJ5IGpvYiBzZW5kcyBhIHdlYmhvb2sgd2l0aCB0aGUgbGFiZWxzIGl0J3MgbG9va2luZyBmb3JcbiAgICogYmFzZWQgb24gcnVucy1vbi4gV2UgdXNlIG1hdGNoIHRoZSBsYWJlbHMgZnJvbSB0aGUgd2ViaG9vayB3aXRoIHRoZSBsYWJlbHMgc3BlY2lmaWVkIGhlcmUuIElmIGFsbCB0aGUgbGFiZWxzIHNwZWNpZmllZCBoZXJlIGFyZSBwcmVzZW50IGluIHRoZVxuICAgKiBqb2IncyBsYWJlbHMsIHRoaXMgcHJvdmlkZXIgd2lsbCBiZSBjaG9zZW4gYW5kIHNwYXduIGEgbmV3IHJ1bm5lci5cbiAgICovXG4gIHJlYWRvbmx5IGxhYmVsczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEFsbCBzdWItcHJvdmlkZXJzIGNvbnRhaW5lZCBpbiB0aGlzIGNvbXBvc2l0ZSBwcm92aWRlci5cbiAgICogVGhpcyBpcyB1c2VkIHRvIGV4dHJhY3QgcHJvdmlkZXJzIGZvciBtZXRyaWMgZmlsdGVycyBhbmQgb3RoZXIgb3BlcmF0aW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IHByb3ZpZGVyczogSVJ1bm5lclByb3ZpZGVyW107XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHN0ZXAgZnVuY3Rpb24gdGFza3MgdGhhdCBleGVjdXRlIHRoZSBydW5uZXIuXG4gICAqXG4gICAqIENhbGxlZCBieSBHaXRodWJSdW5uZXJzIGFuZCBzaG91bGRuJ3QgYmUgY2FsbGVkIG1hbnVhbGx5LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1ldGVycyBzcGVjaWZpYyBidWlsZCBwYXJhbWV0ZXJzXG4gICAqL1xuICBnZXRTdGVwRnVuY3Rpb25UYXNrKHBhcmFtZXRlcnM6IFJ1bm5lclJ1bnRpbWVQYXJhbWV0ZXJzKTogc3RlcGZ1bmN0aW9ucy5JQ2hhaW5hYmxlO1xuXG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBtZXRob2QgdGhhdCBtb2RpZmllcyB0aGUgcm9sZSBvZiB0aGUgc3RhdGUgbWFjaGluZSBhZnRlciBhbGwgdGhlIHRhc2tzIGhhdmUgYmVlbiBnZW5lcmF0ZWQuIFRoaXMgY2FuIGJlIHVzZWQgdG8gYWRkIGFkZGl0aW9uYWwgcG9saWN5XG4gICAqIHN0YXRlbWVudHMgdG8gdGhlIHN0YXRlIG1hY2hpbmUgcm9sZSB0aGF0IGFyZSBub3QgYXV0b21hdGljYWxseSBhZGRlZCBieSB0aGUgdGFzayByZXR1cm5lZCBmcm9tIHtAbGluayBnZXRTdGVwRnVuY3Rpb25UYXNrfS5cbiAgICpcbiAgICogQHBhcmFtIHN0YXRlTWFjaGluZVJvbGUgcm9sZSBmb3IgdGhlIHN0YXRlIG1hY2hpbmUgdGhhdCBleGVjdXRlcyB0aGUgdGFzayByZXR1cm5lZCBmcm9tIHtAbGluayBnZXRTdGVwRnVuY3Rpb25UYXNrfS5cbiAgICovXG4gIGdyYW50U3RhdGVNYWNoaW5lKHN0YXRlTWFjaGluZVJvbGU6IGlhbS5JR3JhbnRhYmxlKTogdm9pZDtcblxuICAvKipcbiAgICogUmV0dXJuIHN0YXR1c2VzIG9mIGFsbCBzdWItcHJvdmlkZXJzIHRvIGJlIHVzZWQgaW4gdGhlIG1haW4gc3RhdHVzIGZ1bmN0aW9uLiBBbHNvIGdpdmVzIHRoZSBzdGF0dXMgZnVuY3Rpb24gYW55IG5lZWRlZCBwZXJtaXNzaW9ucyB0byBxdWVyeSB0aGUgRG9ja2VyIGltYWdlcyBvciBBTUlzLlxuICAgKlxuICAgKiBAcGFyYW0gc3RhdHVzRnVuY3Rpb25Sb2xlIGdyYW50YWJsZSBmb3IgdGhlIHN0YXR1cyBmdW5jdGlvblxuICAgKi9cbiAgc3RhdHVzKHN0YXR1c0Z1bmN0aW9uUm9sZTogaWFtLklHcmFudGFibGUpOiBJUnVubmVyUHJvdmlkZXJTdGF0dXNbXTtcbn1cblxuLyoqXG4gKiBTdG9yYWdlIG9wdGlvbnMgZm9yIHRoZSBydW5uZXIgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RvcmFnZU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIEVCUyB2b2x1bWUgdHlwZVxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9FQlNWb2x1bWVUeXBlcy5odG1sXG4gICAqXG4gICAqIEBkZWZhdWx0IGBFYnNEZXZpY2VWb2x1bWVUeXBlLkdQMmBcbiAgICovXG4gIHJlYWRvbmx5IHZvbHVtZVR5cGU/OiBFYnNEZXZpY2VWb2x1bWVUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIEkvTyBvcGVyYXRpb25zIHBlciBzZWNvbmQgKElPUFMpIHRvIHByb3Zpc2lvbiBmb3IgdGhlIHZvbHVtZS5cbiAgICpcbiAgICogTXVzdCBvbmx5IGJlIHNldCBmb3IgYHZvbHVtZVR5cGVgOiBgRWJzRGV2aWNlVm9sdW1lVHlwZS5JTzFgXG4gICAqXG4gICAqIFRoZSBtYXhpbXVtIHJhdGlvIG9mIElPUFMgdG8gdm9sdW1lIHNpemUgKGluIEdpQikgaXMgNTA6MSwgc28gZm9yIDUsMDAwIHByb3Zpc2lvbmVkIElPUFMsXG4gICAqIHlvdSBuZWVkIGF0IGxlYXN0IDEwMCBHaUIgc3RvcmFnZSBvbiB0aGUgdm9sdW1lLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9FQlNWb2x1bWVUeXBlcy5odG1sXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm9uZSwgcmVxdWlyZWQgZm9yIGBFYnNEZXZpY2VWb2x1bWVUeXBlLklPMWBcbiAgICovXG4gIHJlYWRvbmx5IGlvcHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0aHJvdWdocHV0IHRoYXQgdGhlIHZvbHVtZSBzdXBwb3J0cywgaW4gTWlCL3NcbiAgICogVGFrZXMgYSBtaW5pbXVtIG9mIDEyNSBhbmQgbWF4aW11bSBvZiAxMDAwLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItdm9sdW1lLmh0bWwjY2ZuLWVjMi12b2x1bWUtdGhyb3VnaHB1dFxuICAgKiBAZGVmYXVsdCAtIDEyNSBNaUIvcy4gT25seSB2YWxpZCBvbiBncDMgdm9sdW1lcy5cbiAgICovXG4gIHJlYWRvbmx5IHRocm91Z2hwdXQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgYWxsIHByb3ZpZGVycyB3aXRoIGNvbW1vbiBtZXRob2RzIHVzZWQgYnkgYWxsIHByb3ZpZGVycy5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VQcm92aWRlciBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBfcHJvcHM/OiBSdW5uZXJQcm92aWRlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNkay5UYWdzLm9mKHRoaXMpLmFkZCgnR2l0SHViUnVubmVyczpQcm92aWRlcicsIHRoaXMubm9kZS5wYXRoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBsYWJlbHNGcm9tUHJvcGVydGllcyhkZWZhdWx0TGFiZWw6IHN0cmluZywgcHJvcHNMYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkLCBwcm9wc0xhYmVsczogc3RyaW5nW10gfCB1bmRlZmluZWQpOiBzdHJpbmdbXSB7XG4gICAgaWYgKHByb3BzTGFiZWxzICYmIHByb3BzTGFiZWwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTXVzdCBzdXBwbHkgZWl0aGVyIGBsYWJlbGAgb3IgYGxhYmVsc2AgaW4gcnVubmVyIHByb3BlcnRpZXMsIGJ1dCBub3QgYm90aC4gVHJ5IHJlbW92aW5nIHRoZSBgbGFiZWxgIHByb3BlcnR5LicpO1xuICAgIH1cblxuICAgIGlmIChwcm9wc0xhYmVscykge1xuICAgICAgcmV0dXJuIHByb3BzTGFiZWxzO1xuICAgIH1cbiAgICBpZiAocHJvcHNMYWJlbCkge1xuICAgICAgcmV0dXJuIFtwcm9wc0xhYmVsXTtcbiAgICB9XG4gICAgcmV0dXJuIFtkZWZhdWx0TGFiZWxdO1xuICB9XG59XG5cbi8qKlxuICogVXNlIGN1c3RvbSByZXNvdXJjZSB0byBkZXRlcm1pbmUgdGhlIHJvb3QgZGV2aWNlIG5hbWUgb2YgYSBnaXZlbiBBTUksIExhdW5jaCBUZW1wbGF0ZSwgb3IgU1NNIHBhcmFtZXRlciBwb2ludGluZyB0byBBTUkuXG4gKlxuICogVE9ETyBtb3ZlIHNvbWV3aGVyZSBtb3JlIGNvbW1vbiBhcyBpdCdzIHVzZWQgYnkgYm90aCBwcm92aWRlcnMgYW5kIEFNSSBidWlsZGVyIG5vd1xuICpcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gYW1pUm9vdERldmljZShzY29wZTogQ29uc3RydWN0LCBhbWk/OiBzdHJpbmcpIHtcbiAgY29uc3QgY3JIYW5kbGVyID0gc2luZ2xldG9uTGFtYmRhKEFtaVJvb3REZXZpY2VGdW5jdGlvbiwgc2NvcGUsICdBTUkgUm9vdCBEZXZpY2UgUmVhZGVyJywge1xuICAgIGRlc2NyaXB0aW9uOiAnQ3VzdG9tIHJlc291cmNlIGhhbmRsZXIgdGhhdCBkaXNjb3ZlcnMgdGhlIGJvb3QgZHJpdmUgZGV2aWNlIG5hbWUgZm9yIGEgZ2l2ZW4gQU1JJyxcbiAgICB0aW1lb3V0OiBjZGsuRHVyYXRpb24ubWludXRlcygxKSxcbiAgICBsb2dHcm91cDogc2luZ2xldG9uTG9nR3JvdXAoc2NvcGUsIFNpbmdsZXRvbkxvZ1R5cGUuUlVOTkVSX0lNQUdFX0JVSUxEKSxcbiAgICBsb2dnaW5nRm9ybWF0OiBsYW1iZGEuTG9nZ2luZ0Zvcm1hdC5KU09OLFxuICAgIGluaXRpYWxQb2xpY3k6IFtcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICdzc206R2V0UGFyYW1ldGVyJyxcbiAgICAgICAgICAnZWMyOkRlc2NyaWJlSW1hZ2VzJyxcbiAgICAgICAgICAnZWMyOkRlc2NyaWJlTGF1bmNoVGVtcGxhdGVWZXJzaW9ucycsXG4gICAgICAgICAgJ2ltYWdlYnVpbGRlcjpHZXRJbWFnZScsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICB9KSxcbiAgICBdLFxuICB9KTtcblxuICByZXR1cm4gbmV3IEN1c3RvbVJlc291cmNlKHNjb3BlLCAnQU1JIFJvb3QgRGV2aWNlJywge1xuICAgIHNlcnZpY2VUb2tlbjogY3JIYW5kbGVyLmZ1bmN0aW9uQXJuLFxuICAgIHJlc291cmNlVHlwZTogJ0N1c3RvbTo6QW1pUm9vdERldmljZScsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgQW1pOiBhbWkgPz8gJycsXG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNob3J0ZW5lZCBzdGF0ZSBuYW1lIGZyb20gYSBjb25zdHJ1Y3QncyBwYXRoIGZvciB1c2UgaW4gQVdTIFN0ZXAgRnVuY3Rpb25zLlxuICogU3RlcCBGdW5jdGlvbnMgc3RhdGUgbmFtZXMgYXJlIGxpbWl0ZWQgdG8gODAgY2hhcmFjdGVycy4gVGhpcyBmdW5jdGlvbiBnZW5lcmF0ZXMgYSBuYW1lXG4gKiBmcm9tIHRoZSBjb25zdHJ1Y3QncyBwYXRoICh3aXRob3V0IHRoZSBzdGFjayBuYW1lKSwgb3B0aW9uYWxseSBhcHBlbmRzIGEgc3VmZml4LCBhbmRcbiAqIHNob3J0ZW5zIGl0IGlmIG5lY2Vzc2FyeSBieSB0cnVuY2F0aW5nIGFuZCBhcHBlbmRpbmcgYSBoYXNoIHN1ZmZpeCB0byBlbnN1cmUgdW5pcXVlbmVzcy5cbiAqXG4gKiBAcGFyYW0gY29uc3RydWN0IFRoZSBjb25zdHJ1Y3QgdG8gZ2V0IHRoZSBwYXRoIGZyb21cbiAqIEBwYXJhbSBzdWZmaXggT3B0aW9uYWwgc3VmZml4IHRvIGFwcGVuZCB0byB0aGUgcGF0aCAoZS5nLiwgXCJkYXRhXCIsIFwicmFuZFwiLCBcImNob2ljZVwiKVxuICogQHJldHVybnMgQSBzaG9ydGVuZWQgc3RhdGUgbmFtZSB0aGF0IGZpdHMgd2l0aGluIEFXUyBTdGVwIEZ1bmN0aW9ucycgODAtY2hhcmFjdGVyIGxpbWl0XG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlU3RhdGVOYW1lKGNvbnN0cnVjdDogQ29uc3RydWN0LCBzdWZmaXg/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBHZXQgY29uc3RydWN0IHBhdGggd2l0aG91dCBzdGFjayBuYW1lXG4gIGNvbnN0IGJhc2VQYXRoID0gY29uc3RydWN0Lm5vZGUucGF0aC5zcGxpdCgnLycpLnNsaWNlKDEpLmpvaW4oJy8nKTtcblxuICAvLyBCdWlsZCBmdWxsIG5hbWUgd2l0aCBvcHRpb25hbCBzdWZmaXhcbiAgY29uc3QgZnVsbE5hbWUgPSBzdWZmaXggPyBgJHtiYXNlUGF0aH0gJHtzdWZmaXh9YCA6IGJhc2VQYXRoO1xuXG4gIC8vIFNob3J0ZW4gaWYgbmVjZXNzYXJ5XG4gIGNvbnN0IG1heExlbmd0aCA9IDgwO1xuICBpZiAoZnVsbE5hbWUubGVuZ3RoIDw9IG1heExlbmd0aCkge1xuICAgIHJldHVybiBmdWxsTmFtZTtcbiAgfVxuXG4gIGNvbnN0IGhhc2hTdWZmaXggPSBjcnlwdG8uY3JlYXRlSGFzaCgnbWQ1JykudXBkYXRlKGZ1bGxOYW1lKS5kaWdlc3QoJ2hleCcpLnNsaWNlKDAsIDMpO1xuICBjb25zdCBzZXBhcmF0b3IgPSAnLSc7XG4gIGNvbnN0IHRydW5jYXRlZExlbmd0aCA9IG1heExlbmd0aCAtIGhhc2hTdWZmaXgubGVuZ3RoIC0gc2VwYXJhdG9yLmxlbmd0aDtcbiAgY29uc3QgdHJ1bmNhdGVkID0gZnVsbE5hbWUuc2xpY2UoMCwgdHJ1bmNhdGVkTGVuZ3RoKTtcbiAgcmV0dXJuIGAke3RydW5jYXRlZH0ke3NlcGFyYXRvcn0ke2hhc2hTdWZmaXh9YDtcbn1cbiJdfQ==
|
|
291
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3ZpZGVycy9jb21tb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQStsQkEsd0NBYUM7QUE4RUQsc0NBMEJDO0FBYUQsOENBa0JDOztBQW52QkQsaUNBQWlDO0FBQ2pDLG1DQUFtQztBQUNuQyw2Q0FTcUI7QUFFckIsMkNBQW1EO0FBQ25ELHlFQUFtRTtBQUNuRSxvQ0FBZ0Y7QUFFaEY7O0dBRUc7QUFDSCxNQUFhLGFBQWE7SUFDeEI7O09BRUc7SUFDSSxNQUFNLENBQUMsTUFBTTtRQUNsQixPQUFPLElBQUksYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQWU7UUFDcEMsT0FBTyxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsWUFBK0IsT0FBZTtRQUFmLFlBQU8sR0FBUCxPQUFPLENBQVE7SUFDOUMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxFQUFFLENBQUMsS0FBb0I7UUFDNUIsT0FBTyxJQUFJLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUM7SUFDdkMsQ0FBQzs7QUE3Qkgsc0NBOEJDOzs7QUFFRDs7R0FFRztBQUNILE1BQWEsWUFBWTtJQVdmLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBb0I7UUFDcEMsT0FBTyxJQUFJLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsWUFBb0MsSUFBWTtRQUFaLFNBQUksR0FBSixJQUFJLENBQVE7SUFDaEQsQ0FBQztJQUVEOzs7O01BSUU7SUFDSyxFQUFFLENBQUMsSUFBa0I7UUFDMUIsT0FBTyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxJQUFJLENBQUMsTUFBc0I7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U0FBUyxHQUFHLFNBQVMsR0FBRyxVQUFVLEVBQUUsQ0FBQztBQUNqRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHtcbiAgYXdzX2VjMiBhcyBlYzIsXG4gIGF3c19lY3IgYXMgZWNyLFxuICBhd3NfaWFtIGFzIGlhbSxcbiAgYXdzX2xhbWJkYSBhcyBsYW1iZGEsXG4gIGF3c19sb2dzIGFzIGxvZ3MsXG4gIGF3c19zdGVwZnVuY3Rpb25zIGFzIHN0ZXBmdW5jdGlvbnMsXG4gIEN1c3RvbVJlc291cmNlLFxuICBEdXJhdGlvbixcbn0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgRWJzRGV2aWNlVm9sdW1lVHlwZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgQ29uc3RydWN0LCBJQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBBbWlSb290RGV2aWNlRnVuY3Rpb24gfSBmcm9tICcuL2FtaS1yb290LWRldmljZS1mdW5jdGlvbic7XG5pbXBvcnQgeyBzaW5nbGV0b25MYW1iZGEsIHNpbmdsZXRvbkxvZ0dyb3VwLCBTaW5nbGV0b25Mb2dUeXBlIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vKipcbiAqIERlZmluZXMgZGVzaXJlZCBHaXRIdWIgQWN0aW9ucyBydW5uZXIgdmVyc2lvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFJ1bm5lclZlcnNpb24ge1xuICAvKipcbiAgICogVXNlIHRoZSBsYXRlc3QgdmVyc2lvbiBhdmFpbGFibGUgYXQgdGhlIHRpbWUgdGhlIHJ1bm5lciBwcm92aWRlciBpbWFnZSBpcyBidWlsdC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbGF0ZXN0KCk6IFJ1bm5lclZlcnNpb24ge1xuICAgIHJldHVybiBuZXcgUnVubmVyVmVyc2lvbignbGF0ZXN0Jyk7XG4gIH1cblxuICAvKipcbiAgICogVXNlIGEgc3BlY2lmaWMgdmVyc2lvbi5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vYWN0aW9ucy9ydW5uZXIvcmVsZWFzZXNcbiAgICpcbiAgICogQHBhcmFtIHZlcnNpb24gR2l0SHViIFJ1bm5lciB2ZXJzaW9uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHNwZWNpZmljKHZlcnNpb246IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgUnVubmVyVmVyc2lvbih2ZXJzaW9uKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihyZWFkb25seSB2ZXJzaW9uOiBzdHJpbmcpIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0d28gdmVyc2lvbnMgYXJlIHRoZSBzYW1lLlxuICAgKlxuICAgKiBAcGFyYW0gb3RoZXIgdmVyc2lvbiB0byBjb21wYXJlXG4gICAqL1xuICBwdWJsaWMgaXMob3RoZXI6IFJ1bm5lclZlcnNpb24pIHtcbiAgICByZXR1cm4gdGhpcy52ZXJzaW9uID09IG90aGVyLnZlcnNpb247XG4gIH1cbn1cblxuLyoqXG4gKiBDUFUgYXJjaGl0ZWN0dXJlIGVudW0gZm9yIGFuIGltYWdlLlxuICovXG5leHBvcnQgY2xhc3MgQXJjaGl0ZWN0dXJlIHtcbiAgLyoqXG4gICAqIEFSTTY0XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFSTTY0ID0gQXJjaGl0ZWN0dXJlLm9mKCdBUk02NCcpO1xuXG4gIC8qKlxuICAgKiBYODZfNjRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgWDg2XzY0ID0gQXJjaGl0ZWN0dXJlLm9mKCdYODZfNjQnKTtcblxuICBwcml2YXRlIHN0YXRpYyBvZihhcmNoaXRlY3R1cmU6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgQXJjaGl0ZWN0dXJlKGFyY2hpdGVjdHVyZSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmcpIHtcbiAgfVxuXG4gIC8qKlxuICAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJjaGl0ZWN0dXJlIGlzIHRoZSBzYW1lIGFzIHRoaXMgb25lLlxuICAqXG4gICogQHBhcmFtIGFyY2ggYXJjaGl0ZWN0dXJlIHRvIGNvbXBhcmVcbiAgKi9cbiAgcHVibGljIGlzKGFyY2g6IEFyY2hpdGVjdHVyZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhcmNoLm5hbWUgPT0gdGhpcy5uYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGlzIGFyY2hpdGVjdHVyZSBpcyBpbiBhIGdpdmVuIGxpc3QuXG4gICAqXG4gICAqIEBwYXJhbSBhcmNoZXMgYXJjaGl0ZWN0dXJlcyB0byBjaGVja1xuICAgKi9cbiAgcHVibGljIGlzSW4oYXJjaGVzOiBBcmNoaXRlY3R1cmVbXSk6IGJvb2xlYW4ge1xuICAgIGZvciAoY29uc3QgYXJjaCBvZiBhcmNoZXMpIHtcbiAgICAgIGlmICh0aGlzLmlzKGFyY2gpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgZ2l2ZW4gRUMyIGluc3RhbmNlIHR5cGUgbWF0Y2hlcyB0aGlzIGFyY2hpdGVjdHVyZS5cbiAgICpcbiAgICogQHBhcmFtIGluc3RhbmNlVHlwZSBpbnN0YW5jZSB0eXBlIHRvIGNoZWNrXG4gICAqL1xuICBwdWJsaWMgaW5zdGFuY2VUeXBlTWF0Y2goaW5zdGFuY2VUeXBlOiBlYzIuSW5zdGFuY2VUeXBlKTogYm9vbGVhbiB7XG4gICAgaWYgKGluc3RhbmNlVHlwZS5hcmNoaXRlY3R1cmUgPT0gZWMyLkluc3RhbmNlQXJjaGl0ZWN0dXJlLlg4Nl82NCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXMoQXJjaGl0ZWN0dXJlLlg4Nl82NCk7XG4gICAgfVxuICAgIGlmIChpbnN0YW5jZVR5cGUuYXJjaGl0ZWN0dXJlID09IGVjMi5JbnN0YW5jZUFyY2hpdGVjdHVyZS5BUk1fNjQpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzKEFyY2hpdGVjdHVyZS5BUk02NCk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBpbnN0YW5jZSB0eXBlIGFyY2hpdGVjdHVyZScpO1xuICB9XG59XG5cbi8qKlxuICogT1MgZW51bSBmb3IgYW4gaW1hZ2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBPcyB7XG4gIC8qKlxuICAqIExpbnV4XG4gICpcbiAgKiBAZGVwcmVjYXRlZCB1c2Uge0BsaW5rIExJTlVYX1VCVU5UVX0sIHtAbGluayBMSU5VWF9VQlVOVFVfMjQwNH0sIHtAbGluayBMSU5VWF9BTUFaT05fMn0gb3Ige0BsaW5rIExJTlVYX0FNQVpPTl8yMDIzfVxuICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IExJTlVYID0gT3Mub2YoJ0xpbnV4Jyk7XG5cbiAgLyoqXG4gICAqIFVidW50dSBMaW51eFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBMSU5VWF9VQlVOVFUgPSBPcy5vZignVWJ1bnR1IExpbnV4Jyk7XG5cbiAgLyoqXG4gICogVWJ1bnR1IExpbnV4IDIyLjA0XG4gICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTElOVVhfVUJVTlRVXzIyMDQgPSBPcy5vZignVWJ1bnR1IExpbnV4IDIyLjA0Jyk7XG5cbiAgLyoqXG4gICAqIFVidW50dSBMaW51eCAyNC4wNFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBMSU5VWF9VQlVOVFVfMjQwNCA9IE9zLm9mKCdVYnVudHUgTGludXggMjQuMDQnKTtcblxuICAvKipcbiAgICogQW1hem9uIExpbnV4IDJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTElOVVhfQU1BWk9OXzIgPSBPcy5vZignQW1hem9uIExpbnV4IDInKTtcblxuICAvKipcbiAgICogQW1hem9uIExpbnV4IDIwMjNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTElOVVhfQU1BWk9OXzIwMjMgPSBPcy5vZignQW1hem9uIExpbnV4IDIwMjMnKTtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IF9BTExfTElOVVhfVkVSU0lPTlMgPVxuICAgIFtPcy5MSU5VWCwgT3MuTElOVVhfVUJVTlRVLCBPcy5MSU5VWF9VQlVOVFVfMjIwNCwgT3MuTElOVVhfVUJVTlRVXzI0MDQsIE9zLkxJTlVYX0FNQVpPTl8yLCBPcy5MSU5VWF9BTUFaT05fMjAyM107XG5cbiAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgX0FMTF9MSU5VWF9BTUFaT05fVkVSU0lPTlMgPSBbT3MuTElOVVhfQU1BWk9OXzIsIE9zLkxJTlVYX0FNQVpPTl8yMDIzXTtcblxuICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBfQUxMX0xJTlVYX1VCVU5UVV9WRVJTSU9OUyA9IFtPcy5MSU5VWF9VQlVOVFUsIE9zLkxJTlVYX1VCVU5UVV8yMjA0LCBPcy5MSU5VWF9VQlVOVFVfMjQwNF07XG5cbiAgLyoqXG4gICogV2luZG93c1xuICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFdJTkRPV1MgPSBPcy5vZignV2luZG93cycpO1xuXG4gIHByaXZhdGUgc3RhdGljIG9mKG9zOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IE9zKG9zKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZykge1xuICB9XG5cbiAgLyoqXG4gICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBPUyBpcyB0aGUgc2FtZSBhcyB0aGlzIG9uZS5cbiAgKlxuICAqIEBwYXJhbSBvcyBPUyB0byBjb21wYXJlXG4gICovXG4gIHB1YmxpYyBpcyhvczogT3MpIHtcbiAgICByZXR1cm4gb3MubmFtZSA9PSB0aGlzLm5hbWU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoaXMgT1MgaXMgaW4gYSBnaXZlbiBsaXN0LlxuICAgKlxuICAgKiBAcGFyYW0gb3NlcyBsaXN0IG9mIE9TIHRvIGNoZWNrXG4gICAqL1xuICBwdWJsaWMgaXNJbihvc2VzOiBPc1tdKTogYm9vbGVhbiB7XG4gICAgZm9yIChjb25zdCBvcyBvZiBvc2VzKSB7XG4gICAgICBpZiAodGhpcy5pcyhvcykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIERlc2NyaXB0aW9uIG9mIGEgRG9ja2VyIGltYWdlIGJ1aWx0IGJ5IHtAbGluayBSdW5uZXJJbWFnZUJ1aWxkZXJ9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bm5lckltYWdlIHtcbiAgLyoqXG4gICAqIEVDUiByZXBvc2l0b3J5IGNvbnRhaW5pbmcgdGhlIGltYWdlLlxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VSZXBvc2l0b3J5OiBlY3IuSVJlcG9zaXRvcnk7XG5cbiAgLyoqXG4gICAqIFN0YXRpYyBpbWFnZSB0YWcgd2hlcmUgdGhlIGltYWdlIHdpbGwgYmUgcHVzaGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VUYWc6IHN0cmluZztcblxuICAvKipcbiAgICogQXJjaGl0ZWN0dXJlIG9mIHRoZSBpbWFnZS5cbiAgICovXG4gIHJlYWRvbmx5IGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlO1xuXG4gIC8qKlxuICAgKiBPUyB0eXBlIG9mIHRoZSBpbWFnZS5cbiAgICovXG4gIHJlYWRvbmx5IG9zOiBPcztcblxuICAvKipcbiAgICogTG9nIGdyb3VwIHdoZXJlIGltYWdlIGJ1aWxkcyBhcmUgbG9nZ2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9nR3JvdXA/OiBsb2dzLkxvZ0dyb3VwO1xuXG4gIC8qKlxuICAgKiBJbnN0YWxsZWQgcnVubmVyIHZlcnNpb24uXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIG9wZW4gYSB0aWNrZXQgaWYgeW91IG5lZWQgdGhpc1xuICAgKi9cbiAgcmVhZG9ubHkgcnVubmVyVmVyc2lvbjogUnVubmVyVmVyc2lvbjtcblxuICAvKipcbiAgICogQSBkZXBlbmRhYmxlIHN0cmluZyB0aGF0IGNhbiBiZSB3YWl0ZWQgb24gdG8gZW5zdXJlIHRoZSBpbWFnZSBpcyByZWFkeS5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICByZWFkb25seSBfZGVwZW5kYWJsZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZXNjcmlwdGlvbiBvZiBhIEFNSSBidWlsdCBieSB7QGxpbmsgUnVubmVySW1hZ2VCdWlsZGVyfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdW5uZXJBbWkge1xuICAvKipcbiAgICogTGF1bmNoIHRlbXBsYXRlIHBvaW50aW5nIHRvIHRoZSBsYXRlc3QgQU1JLlxuICAgKi9cbiAgcmVhZG9ubHkgbGF1bmNoVGVtcGxhdGU6IGVjMi5JTGF1bmNoVGVtcGxhdGU7XG5cbiAgLyoqXG4gICAqIEFyY2hpdGVjdHVyZSBvZiB0aGUgaW1hZ2UuXG4gICAqL1xuICByZWFkb25seSBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZTtcblxuICAvKipcbiAgICogT1MgdHlwZSBvZiB0aGUgaW1hZ2UuXG4gICAqL1xuICByZWFkb25seSBvczogT3M7XG5cbiAgLyoqXG4gICAqIExvZyBncm91cCB3aGVyZSBpbWFnZSBidWlsZHMgYXJlIGxvZ2dlZC5cbiAgICovXG4gIHJlYWRvbmx5IGxvZ0dyb3VwPzogbG9ncy5Mb2dHcm91cDtcblxuICAvKipcbiAgICogSW5zdGFsbGVkIHJ1bm5lciB2ZXJzaW9uLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBvcGVuIGEgdGlja2V0IGlmIHlvdSBuZWVkIHRoaXNcbiAgICovXG4gIHJlYWRvbmx5IHJ1bm5lclZlcnNpb246IFJ1bm5lclZlcnNpb247XG59XG5cbi8qKlxuICogUmV0cnkgb3B0aW9ucyBmb3IgcHJvdmlkZXJzLiBUaGUgZGVmYXVsdCBpcyB0byByZXRyeSAyMyB0aW1lcyBmb3IgYWJvdXQgMjQgaG91cnMgd2l0aCBpbmNyZWFzaW5nIGludGVydmFsLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb3ZpZGVyUmV0cnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIFNldCB0byB0cnVlIHRvIHJldHJ5IHByb3ZpZGVyIG9uIHN1cHBvcnRlZCBmYWlsdXJlcy4gV2hpY2ggZmFpbHVyZXMgZ2VuZXJhdGUgYSByZXRyeSBkZXBlbmRzIG9uIHRoZSBzcGVjaWZpYyBwcm92aWRlci5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcmV0cnk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBIb3cgbXVjaCB0aW1lIHRvIHdhaXQgYWZ0ZXIgZmlyc3QgcmV0cnlhYmxlIGZhaWx1cmUuIFRoaXMgaW50ZXJ2YWwgd2lsbCBiZSBtdWx0aXBsaWVkIGJ5IHtAbGluayBiYWNrb2ZmUmF0ZX0gZWFjaCByZXRyeS5cbiAgICpcbiAgICogQGRlZmF1bHQgMSBtaW51dGVcbiAgICovXG4gIHJlYWRvbmx5IGludGVydmFsPzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIEhvdyBtYW55IHRpbWVzIHRvIHJldHJ5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAyM1xuICAgKi9cbiAgcmVhZG9ubHkgbWF4QXR0ZW1wdHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE11bHRpcGxpY2F0aW9uIGZvciBob3cgbXVjaCBsb25nZXIgdGhlIHdhaXQgaW50ZXJ2YWwgZ2V0cyBvbiBldmVyeSByZXRyeS5cbiAgICpcbiAgICogQGRlZmF1bHQgMS4zXG4gICAqL1xuICByZWFkb25seSBiYWNrb2ZmUmF0ZT86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDb21tb24gcHJvcGVydGllcyBmb3IgYWxsIHJ1bm5lciBwcm92aWRlcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVubmVyUHJvdmlkZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGRheXMgbG9nIGV2ZW50cyBhcmUga2VwdCBpbiBDbG91ZFdhdGNoIExvZ3MuIFdoZW4gdXBkYXRpbmdcbiAgICogdGhpcyBwcm9wZXJ0eSwgdW5zZXR0aW5nIGl0IGRvZXNuJ3QgcmVtb3ZlIHRoZSBsb2cgcmV0ZW50aW9uIHBvbGljeS4gVG9cbiAgICogcmVtb3ZlIHRoZSByZXRlbnRpb24gcG9saWN5LCBzZXQgdGhlIHZhbHVlIHRvIGBJTkZJTklURWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGxvZ3MuUmV0ZW50aW9uRGF5cy5PTkVfTU9OVEhcbiAgICovXG4gIHJlYWRvbmx5IGxvZ1JldGVudGlvbj86IGxvZ3MuUmV0ZW50aW9uRGF5cztcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIHtAbGluayByZXRyeU9wdGlvbnN9IG9uIHtAbGluayBHaXRIdWJSdW5uZXJzfSBpbnN0ZWFkXG4gICAqL1xuICByZWFkb25seSByZXRyeU9wdGlvbnM/OiBQcm92aWRlclJldHJ5T3B0aW9ucztcblxuICAvKipcbiAgICogQWRkIGRlZmF1bHQgbGFiZWxzIGJhc2VkIG9uIE9TIGFuZCBhcmNoaXRlY3R1cmUgb2YgdGhlIHJ1bm5lci4gVGhpcyB3aWxsIHRlbGwgR2l0SHViIFJ1bm5lciB0byBhZGQgZGVmYXVsdCBsYWJlbHMgbGlrZSBgc2VsZi1ob3N0ZWRgLCBgbGludXhgLCBgeDY0YCwgYW5kIGBhcm02NGAuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRMYWJlbHM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFdvcmtmbG93IGpvYiBwYXJhbWV0ZXJzIGFzIHBhcnNlZCBmcm9tIHRoZSB3ZWJob29rIGV2ZW50LiBQYXNzIHRoZXNlIGludG8geW91ciBydW5uZXIgZXhlY3V0b3IgYW5kIHJ1biBzb21ldGhpbmcgbGlrZTpcbiAqXG4gKiBgYGBzaFxuICogLi9jb25maWcuc2ggLS11bmF0dGVuZGVkIC0tdXJsIFwie1JFR0lTVFJBVElPTl9VUkx9XCIgLS10b2tlbiBcIiR7UlVOTkVSX1RPS0VOfVwiIC0tZXBoZW1lcmFsIC0td29yayBfd29yayAtLWxhYmVscyBcIiR7UlVOTkVSX0xBQkVMfVwiIC0tbmFtZSBcIiR7UlVOTkVSX05BTUV9XCIgLS1kaXNhYmxldXBkYXRlXG4gKiBgYGBcbiAqXG4gKiBBbGwgcGFyYW1ldGVycyBhcmUgc3BlY2lmaWVkIGFzIHN0ZXAgZnVuY3Rpb24gcGF0aHMgYW5kIHRoZXJlZm9yZSBtdXN0IGJlIHVzZWQgb25seSBpbiBzdGVwIGZ1bmN0aW9uIHRhc2sgcGFyYW1ldGVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUnVubmVyUnVudGltZVBhcmFtZXRlcnMge1xuICAvKipcbiAgICogUGF0aCB0byBydW5uZXIgdG9rZW4gdXNlZCB0byByZWdpc3RlciB0b2tlbi5cbiAgICovXG4gIHJlYWRvbmx5IHJ1bm5lclRva2VuUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIGRlc2lyZWQgcnVubmVyIG5hbWUuIFdlIHNwZWNpZmljYWxseSBzZXQgdGhlIG5hbWUgdG8gbWFrZSB0cm91Ymxlc2hvb3RpbmcgZWFzaWVyLlxuICAgKi9cbiAgcmVhZG9ubHkgcnVubmVyTmFtZVBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byBHaXRIdWIgZG9tYWluLiBNb3N0IG9mIHRoZSB0aW1lIHRoaXMgd2lsbCBiZSBnaXRodWIuY29tIGJ1dCBmb3Igc2VsZi1ob3N0ZWQgR2l0SHViIGluc3RhbmNlcywgdGhpcyB3aWxsIGJlIGRpZmZlcmVudC5cbiAgICovXG4gIHJlYWRvbmx5IGdpdGh1YkRvbWFpblBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byByZXBvc2l0b3J5IG93bmVyIG5hbWUuXG4gICAqL1xuICByZWFkb25seSBvd25lclBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byByZXBvc2l0b3J5IG5hbWUuXG4gICAqL1xuICByZWFkb25seSByZXBvUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXBvc2l0b3J5IG9yIG9yZ2FuaXphdGlvbiBVUkwgdG8gcmVnaXN0ZXIgcnVubmVyIGF0LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaXN0cmF0aW9uVXJsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gY29tbWEtc2VwYXJhdGVkIGxhYmVscyBzdHJpbmcgdG8gdXNlIGZvciBydW5uZXIuXG4gICAqL1xuICByZWFkb25seSBsYWJlbHNQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENhdGNoZXMgYWxsIGVycm9ycyBhbmQgY2xlYW5zIHVwIHRoZSBmYWlsZWQgcnVubmVyIGZyb20gR2l0SHViIEFjdGlvbnMuXG4gICAqXG4gICAqIEl0IGlzIGltcG9ydGFudCB0byBmdWxseSBjbGVhbiB1cCBhZnRlciBhbnkgZmFpbGVkIHJ1bm5lciBwcm92aXNpb25pbmcuIEdpdEh1YlxuICAgKiB3aWxsIGZhaWwgYm9vdGluZyBhIG5ldyBydW5uZXIgaWYgdGhlIHByZXZpb3VzIG9uZSB3aXRoIHRoZSBzYW1lIG5hbWUgaXMgbm90XG4gICAqIGZ1bGx5IGNsZWFuZWQgdXAuXG4gICAqXG4gICAqIEBwYXJhbSBzdGF0ZSBzdGF0ZSB3aG9zZSBmYWlsdXJlcyBzaG91bGQgdHJpZ2dlciBjbGVhbnVwXG4gICAqIEBwYXJhbSBuZXh0IG9wdGlvbmFsIHN1YmdyYXBoIHRvIHJ1biBhZnRlciBjbGVhbnVwXG4gICAqL1xuICBhZGRDYXRjaEFuZENsZWFuVXAoc3RhdGU6IHN0ZXBmdW5jdGlvbnMuVGFza1N0YXRlQmFzZSB8IHN0ZXBmdW5jdGlvbnMuUGFyYWxsZWwgfCBzdGVwZnVuY3Rpb25zLk1hcCwgbmV4dD86IHN0ZXBmdW5jdGlvbnMuSUNoYWluYWJsZSk6IHZvaWQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBJUnVubmVyUnVudGltZVBhcmFtZXRlcnN9LlxuICovXG5leHBvcnQgdHlwZSBSdW5uZXJSdW50aW1lUGFyYW1ldGVycyA9IElSdW5uZXJSdW50aW1lUGFyYW1ldGVycztcblxuLyoqXG4gKiBJbWFnZSBzdGF0dXMgcmV0dXJuZWQgZnJvbSBydW5uZXIgcHJvdmlkZXJzIHRvIGJlIGRpc3BsYXllZCBpbiBzdGF0dXMuanNvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUnVubmVySW1hZ2VTdGF0dXMge1xuICAvKipcbiAgICogSW1hZ2UgcmVwb3NpdG9yeSB3aGVyZSBpbWFnZSBidWlsZGVyIHB1c2hlcyBydW5uZXIgaW1hZ2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VSZXBvc2l0b3J5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRhZyBvZiBpbWFnZSB0aGF0IHNob3VsZCBiZSB1c2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VUYWc6IHN0cmluZztcblxuICAvKipcbiAgICogTG9nIGdyb3VwIG5hbWUgZm9yIHRoZSBpbWFnZSBidWlsZGVyIHdoZXJlIGhpc3Rvcnkgb2YgaW1hZ2UgYnVpbGRzIGNhbiBiZSBhbmFseXplZC5cbiAgICovXG4gIHJlYWRvbmx5IGltYWdlQnVpbGRlckxvZ0dyb3VwPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFNSSBzdGF0dXMgcmV0dXJuZWQgZnJvbSBydW5uZXIgcHJvdmlkZXJzIHRvIGJlIGRpc3BsYXllZCBhcyBvdXRwdXQgb2Ygc3RhdHVzIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElSdW5uZXJBbWlTdGF0dXMge1xuICAvKipcbiAgICogSWQgb2YgbGF1bmNoIHRlbXBsYXRlIHBvaW50aW5nIHRvIHRoZSBsYXRlc3QgQU1JIGJ1aWx0IGJ5IHRoZSBBTUkgYnVpbGRlci5cbiAgICovXG4gIHJlYWRvbmx5IGxhdW5jaFRlbXBsYXRlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExvZyBncm91cCBuYW1lIGZvciB0aGUgQU1JIGJ1aWxkZXIgd2hlcmUgaGlzdG9yeSBvZiBidWlsZHMgY2FuIGJlIGFuYWx5emVkLlxuICAgKi9cbiAgcmVhZG9ubHkgYW1pQnVpbGRlckxvZ0dyb3VwPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgcnVubmVyIGltYWdlIHN0YXR1cyB1c2VkIGJ5IHN0YXR1cy5qc29uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElSdW5uZXJQcm92aWRlclN0YXR1cyB7XG4gIC8qKlxuICAgKiBSdW5uZXIgcHJvdmlkZXIgdHlwZS5cbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogTGFiZWxzIGFzc29jaWF0ZWQgd2l0aCBwcm92aWRlci5cbiAgICovXG4gIHJlYWRvbmx5IGxhYmVsczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIENESyBjb25zdHJ1Y3Qgbm9kZSBwYXRoIGZvciB0aGlzIHByb3ZpZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgY29uc3RydWN0UGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogVlBDIHdoZXJlIHJ1bm5lcnMgd2lsbCBiZSBsYXVuY2hlZC5cbiAgICovXG4gIHJlYWRvbmx5IHZwY0Fybj86IHN0cmluZztcblxuICAvKipcbiAgICogU2VjdXJpdHkgZ3JvdXBzIGF0dGFjaGVkIHRvIHJ1bm5lcnMuXG4gICAqL1xuICByZWFkb25seSBzZWN1cml0eUdyb3Vwcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBSb2xlIGF0dGFjaGVkIHRvIHJ1bm5lcnMuXG4gICAqL1xuICByZWFkb25seSByb2xlQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZXRhaWxzIGFib3V0IERvY2tlciBpbWFnZSB1c2VkIGJ5IHRoaXMgcnVubmVyIHByb3ZpZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2U/OiBJUnVubmVySW1hZ2VTdGF0dXM7XG5cbiAgLyoqXG4gICAqIERldGFpbHMgYWJvdXQgQU1JIHVzZWQgYnkgdGhpcyBydW5uZXIgcHJvdmlkZXIuXG4gICAqL1xuICByZWFkb25seSBhbWk/OiBJUnVubmVyQW1pU3RhdHVzO1xuXG4gIC8qKlxuICAgKiBMb2cgZ3JvdXAgZm9yIHJ1bm5lcnMuXG4gICAqL1xuICByZWFkb25seSBsb2dHcm91cD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIGFsbCBydW5uZXIgcHJvdmlkZXJzLiBJbXBsZW1lbnRhdGlvbnMgY3JlYXRlIGFsbCByZXF1aXJlZCByZXNvdXJjZXMgYW5kIHJldHVybiBhIHN0ZXAgZnVuY3Rpb24gdGFzayB0aGF0IHN0YXJ0cyB0aG9zZSByZXNvdXJjZXMgZnJvbSB7QGxpbmsgZ2V0U3RlcEZ1bmN0aW9uVGFza30uXG4gKlxuICogVGhpcyBpbnRlcmZhY2UgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgc3RhYmxlLiBJZiB5b3UgZW5kIHVwIGltcGxlbWVudGluZyB5b3VyIG93biBwcm92aWRlciwgcGxlYXNlIGxldCB1cyBrbm93IHNvIHdlIGNhbiBjb25zaWRlciBjaGFuZ2luZyB0aGF0IGNvbnRyYWN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElSdW5uZXJQcm92aWRlciBleHRlbmRzIGVjMi5JQ29ubmVjdGFibGUsIGlhbS5JR3JhbnRhYmxlLCBJQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIEdpdEh1YiBBY3Rpb25zIGxhYmVscyB1c2VkIGZvciB0aGlzIHByb3ZpZGVyLlxuICAgKlxuICAgKiBUaGVzZSBsYWJlbHMgYXJlIHVzZWQgdG8gaWRlbnRpZnkgd2hpY2ggcHJvdmlkZXIgc2hvdWxkIHNwYXduIGEgbmV3IG9uLWRlbWFuZCBydW5uZXIuIEV2ZXJ5IGpvYiBzZW5kcyBhIHdlYmhvb2sgd2l0aCB0aGUgbGFiZWxzIGl0J3MgbG9va2luZyBmb3JcbiAgICogYmFzZWQgb24gcnVucy1vbi4gV2UgdXNlIG1hdGNoIHRoZSBsYWJlbHMgZnJvbSB0aGUgd2ViaG9vayB3aXRoIHRoZSBsYWJlbHMgc3BlY2lmaWVkIGhlcmUuIElmIGFsbCB0aGUgbGFiZWxzIHNwZWNpZmllZCBoZXJlIGFyZSBwcmVzZW50IGluIHRoZVxuICAgKiBqb2IncyBsYWJlbHMsIHRoaXMgcHJvdmlkZXIgd2lsbCBiZSBjaG9zZW4gYW5kIHNwYXduIGEgbmV3IHJ1bm5lci5cbiAgICovXG4gIHJlYWRvbmx5IGxhYmVsczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIExvZyBncm91cCB3aGVyZSBwcm92aWRlZCBydW5uZXJzIHdpbGwgc2F2ZSB0aGVpciBsb2dzLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGhpcyBpcyBub3QgdGhlIGpvYiBsb2csIGJ1dCB0aGUgcnVubmVyIGl0c2VsZi4gSXQgd2lsbCBub3QgY29udGFpbiBvdXRwdXQgZnJvbSB0aGUgR2l0SHViIEFjdGlvbiBidXQgb25seSBtZXRhZGF0YSBvbiBpdHMgZXhlY3V0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9nR3JvdXA6IGxvZ3MuSUxvZ0dyb3VwO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIHN0ZXAgZnVuY3Rpb25zIGVycm9ycyB0aGF0IHNob3VsZCBiZSByZXRyaWVkLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBkbyBub3QgdXNlXG4gICAqL1xuICByZWFkb25seSByZXRyeWFibGVFcnJvcnM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBzdGVwIGZ1bmN0aW9uIHRhc2tzIHRoYXQgZXhlY3V0ZSB0aGUgcnVubmVyLlxuICAgKlxuICAgKiBDYWxsZWQgYnkgR2l0aHViUnVubmVycyBhbmQgc2hvdWxkbid0IGJlIGNhbGxlZCBtYW51YWxseS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtZXRlcnMgc3BlY2lmaWMgYnVpbGQgcGFyYW1ldGVyc1xuICAgKi9cbiAgZ2V0U3RlcEZ1bmN0aW9uVGFzayhwYXJhbWV0ZXJzOiBJUnVubmVyUnVudGltZVBhcmFtZXRlcnMpOiBzdGVwZnVuY3Rpb25zLklDaGFpbmFibGU7XG5cbiAgLyoqXG4gICAqIFN0YXRpYyBzdHJpbmcgY29uc3RhbnRzIGluamVjdGVkIG9uY2UgaW50byB0aGUgb3JjaGVzdHJhdG9yIGV4ZWN1dGlvbiBpbnB1dCBhdCBgJC5jb25zdHNgLiBVc2UgdW5pcXVlIGtleXMgZm9yXG4gICAqIGR5bmFtaWMgdmFsdWVzIChlLmcuIGluY2x1ZGUgYHRoaXMubm9kZS5wYXRoYCBpbiB0aGUga2V5KS4gVmFsdWVzIG11c3QgYmUgcGxhaW4gc3RyaW5ncyBrbm93biBhdCBzeW50aGVzaXMgdGltZS5cbiAgICpcbiAgICogVG8gdXNlIHRoZSBjb25zdGFudHMgaW4geW91ciBwcm92aWRlciwgdXNlIGAnJC5jb25zdHMua2V5J2AgYXMgYSBwYXRoLlxuICAgKlxuICAgKiBAZGVmYXVsdCBge31gIOKAlCB7QGxpbmsgQmFzZVByb3ZpZGVyfSByZXR1cm5zIGFuIGVtcHR5IG9iamVjdDsgb3ZlcnJpZGUgd2hlbiBuZWVkZWQgKGUuZy4gRUMyIHVzZXJkYXRhIHRlbXBsYXRlKS5cbiAgICovXG4gIHN0ZXBGdW5jdGlvbkNvbnN0YW50cygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBtZXRob2QgdGhhdCBtb2RpZmllcyB0aGUgcm9sZSBvZiB0aGUgc3RhdGUgbWFjaGluZSBhZnRlciBhbGwgdGhlIHRhc2tzIGhhdmUgYmVlbiBnZW5lcmF0ZWQuIFRoaXMgY2FuIGJlIHVzZWQgdG8gYWRkIGFkZGl0aW9uYWwgcG9saWN5XG4gICAqIHN0YXRlbWVudHMgdG8gdGhlIHN0YXRlIG1hY2hpbmUgcm9sZSB0aGF0IGFyZSBub3QgYXV0b21hdGljYWxseSBhZGRlZCBieSB0aGUgdGFzayByZXR1cm5lZCBmcm9tIHtAbGluayBnZXRTdGVwRnVuY3Rpb25UYXNrfS5cbiAgICpcbiAgICogQHBhcmFtIHN0YXRlTWFjaGluZVJvbGUgcm9sZSBmb3IgdGhlIHN0YXRlIG1hY2hpbmUgdGhhdCBleGVjdXRlcyB0aGUgdGFzayByZXR1cm5lZCBmcm9tIHtAbGluayBnZXRTdGVwRnVuY3Rpb25UYXNrfS5cbiAgICovXG4gIGdyYW50U3RhdGVNYWNoaW5lKHN0YXRlTWFjaGluZVJvbGU6IGlhbS5JR3JhbnRhYmxlKTogdm9pZDtcblxuICAvKipcbiAgICogUmV0dXJuIHN0YXR1cyBvZiB0aGUgcnVubmVyIHByb3ZpZGVyIHRvIGJlIHVzZWQgaW4gdGhlIG1haW4gc3RhdHVzIGZ1bmN0aW9uLiBBbHNvIGdpdmVzIHRoZSBzdGF0dXMgZnVuY3Rpb24gYW55IG5lZWRlZCBwZXJtaXNzaW9ucyB0byBxdWVyeSB0aGUgRG9ja2VyIGltYWdlIG9yIEFNSS5cbiAgICpcbiAgICogQHBhcmFtIHN0YXR1c0Z1bmN0aW9uUm9sZSBncmFudGFibGUgZm9yIHRoZSBzdGF0dXMgZnVuY3Rpb25cbiAgICovXG4gIHN0YXR1cyhzdGF0dXNGdW5jdGlvblJvbGU6IGlhbS5JR3JhbnRhYmxlKTogSVJ1bm5lclByb3ZpZGVyU3RhdHVzO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgY29tcG9zaXRlIHJ1bm5lciBwcm92aWRlcnMgdGhhdCBpbnRlcmFjdCB3aXRoIG11bHRpcGxlIHN1Yi1wcm92aWRlcnMuXG4gKiBVbmxpa2UgSVJ1bm5lclByb3ZpZGVyLCBjb21wb3NpdGUgcHJvdmlkZXJzIGRvIG5vdCBoYXZlIGNvbm5lY3Rpb25zLCBncmFudCBjYXBhYmlsaXRpZXMsXG4gKiBsb2cgZ3JvdXBzLCBvciByZXRyeWFibGUgZXJyb3JzIGFzIHRoZXkgZGVsZWdhdGUgdG8gdGhlaXIgc3ViLXByb3ZpZGVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ29tcG9zaXRlUHJvdmlkZXIgZXh0ZW5kcyBJQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIEdpdEh1YiBBY3Rpb25zIGxhYmVscyB1c2VkIGZvciB0aGlzIHByb3ZpZGVyLlxuICAgKlxuICAgKiBUaGVzZSBsYWJlbHMgYXJlIHVzZWQgdG8gaWRlbnRpZnkgd2hpY2ggcHJvdmlkZXIgc2hvdWxkIHNwYXduIGEgbmV3IG9uLWRlbWFuZCBydW5uZXIuIEV2ZXJ5IGpvYiBzZW5kcyBhIHdlYmhvb2sgd2l0aCB0aGUgbGFiZWxzIGl0J3MgbG9va2luZyBmb3JcbiAgICogYmFzZWQgb24gcnVucy1vbi4gV2UgdXNlIG1hdGNoIHRoZSBsYWJlbHMgZnJvbSB0aGUgd2ViaG9vayB3aXRoIHRoZSBsYWJlbHMgc3BlY2lmaWVkIGhlcmUuIElmIGFsbCB0aGUgbGFiZWxzIHNwZWNpZmllZCBoZXJlIGFyZSBwcmVzZW50IGluIHRoZVxuICAgKiBqb2IncyBsYWJlbHMsIHRoaXMgcHJvdmlkZXIgd2lsbCBiZSBjaG9zZW4gYW5kIHNwYXduIGEgbmV3IHJ1bm5lci5cbiAgICovXG4gIHJlYWRvbmx5IGxhYmVsczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEFsbCBzdWItcHJvdmlkZXJzIGNvbnRhaW5lZCBpbiB0aGlzIGNvbXBvc2l0ZSBwcm92aWRlci5cbiAgICogVGhpcyBpcyB1c2VkIHRvIGV4dHJhY3QgcHJvdmlkZXJzIGZvciBtZXRyaWMgZmlsdGVycyBhbmQgb3RoZXIgb3BlcmF0aW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IHByb3ZpZGVyczogSVJ1bm5lclByb3ZpZGVyW107XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHN0ZXAgZnVuY3Rpb24gdGFza3MgdGhhdCBleGVjdXRlIHRoZSBydW5uZXIuXG4gICAqXG4gICAqIElmIHRoZSBwcm92aWRlciBoYXMgbXVsdGlwbGUgYXR0ZW1wdHMsIGVhY2ggYXR0ZW1wdCBzaG91bGQgYmUgZm9sbG93ZWQgYnkgYSBgQ2F0Y2hgIHRoYXQgZGVsZXRlcyB0aGUgZmFpbGVkIHJ1bm5lci4gVXNlXG4gICAqIHtAbGluayBJUnVubmVyUnVudGltZVBhcmFtZXRlcnMuYWRkQ2F0Y2hBbmRDbGVhblVwfSB0byBhZGQgdGhlIGNhdGNoLlxuICAgKlxuICAgKiBDYWxsZWQgYnkgR2l0aHViUnVubmVycyBhbmQgc2hvdWxkbid0IGJlIGNhbGxlZCBtYW51YWxseS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtZXRlcnMgc3BlY2lmaWMgYnVpbGQgcGFyYW1ldGVyc1xuICAgKi9cbiAgZ2V0U3RlcEZ1bmN0aW9uVGFzayhwYXJhbWV0ZXJzOiBJUnVubmVyUnVudGltZVBhcmFtZXRlcnMpOiBzdGVwZnVuY3Rpb25zLklDaGFpbmFibGU7XG5cbiAgLyoqXG4gICAqIE1lcmdlZCBjb25zdGFudHMgZnJvbSBhbGwgc3ViLXByb3ZpZGVycyBmb3IgdGhlIHNpbmdsZSBvcmNoZXN0cmF0b3IgYCQuY29uc3RzYCBwYXNzLiBEdXBsaWNhdGUga2V5cyBhY3Jvc3NcbiAgICogc3ViLXByb3ZpZGVycyBtdXN0IGJlIGF2b2lkZWQuXG4gICAqL1xuICBzdGVwRnVuY3Rpb25Db25zdGFudHMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogQW4gb3B0aW9uYWwgbWV0aG9kIHRoYXQgbW9kaWZpZXMgdGhlIHJvbGUgb2YgdGhlIHN0YXRlIG1hY2hpbmUgYWZ0ZXIgYWxsIHRoZSB0YXNrcyBoYXZlIGJlZW4gZ2VuZXJhdGVkLiBUaGlzIGNhbiBiZSB1c2VkIHRvIGFkZCBhZGRpdGlvbmFsIHBvbGljeVxuICAgKiBzdGF0ZW1lbnRzIHRvIHRoZSBzdGF0ZSBtYWNoaW5lIHJvbGUgdGhhdCBhcmUgbm90IGF1dG9tYXRpY2FsbHkgYWRkZWQgYnkgdGhlIHRhc2sgcmV0dXJuZWQgZnJvbSB7QGxpbmsgZ2V0U3RlcEZ1bmN0aW9uVGFza30uXG4gICAqXG4gICAqIEBwYXJhbSBzdGF0ZU1hY2hpbmVSb2xlIHJvbGUgZm9yIHRoZSBzdGF0ZSBtYWNoaW5lIHRoYXQgZXhlY3V0ZXMgdGhlIHRhc2sgcmV0dXJuZWQgZnJvbSB7QGxpbmsgZ2V0U3RlcEZ1bmN0aW9uVGFza30uXG4gICAqL1xuICBncmFudFN0YXRlTWFjaGluZShzdGF0ZU1hY2hpbmVSb2xlOiBpYW0uSUdyYW50YWJsZSk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFJldHVybiBzdGF0dXNlcyBvZiBhbGwgc3ViLXByb3ZpZGVycyB0byBiZSB1c2VkIGluIHRoZSBtYWluIHN0YXR1cyBmdW5jdGlvbi4gQWxzbyBnaXZlcyB0aGUgc3RhdHVzIGZ1bmN0aW9uIGFueSBuZWVkZWQgcGVybWlzc2lvbnMgdG8gcXVlcnkgdGhlIERvY2tlciBpbWFnZXMgb3IgQU1Jcy5cbiAgICpcbiAgICogQHBhcmFtIHN0YXR1c0Z1bmN0aW9uUm9sZSBncmFudGFibGUgZm9yIHRoZSBzdGF0dXMgZnVuY3Rpb25cbiAgICovXG4gIHN0YXR1cyhzdGF0dXNGdW5jdGlvblJvbGU6IGlhbS5JR3JhbnRhYmxlKTogSVJ1bm5lclByb3ZpZGVyU3RhdHVzW107XG59XG5cbi8qKlxuICogTWVyZ2VzIHN0YXRpYy1jb25zdCBtYXBzOyB0aHJvd3MgaWYgdHdvIG1hcHMgdXNlIHRoZSBzYW1lIGtleSB3aXRoIGRpZmZlcmVudCB2YWx1ZXMuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUNvbnN0TWFwcyguLi5tYXBzOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PltdKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IG1lcmdlZDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBmb3IgKGNvbnN0IHBhcnQgb2YgbWFwcykge1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHBhcnQpKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lcmdlZCwga2V5KSAmJiBtZXJnZWRba2V5XSAhPT0gdmFsdWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBEdXBsaWNhdGUgc3RlcEZ1bmN0aW9uQ29uc3RhbnRzKCkga2V5IFwiJHtrZXl9XCIgd2l0aCBkaWZmZXJlbnQgdmFsdWVzLiBVc2UgdW5pcXVlIGtleXMgcGVyIHByb3ZpZGVyIChlLmcuIGluY2x1ZGUgdGhlIGNvbnN0cnVjdCBpZCBvciBub2RlIGFkZHJlc3MpLmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBtZXJnZWRba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbWVyZ2VkO1xufVxuXG4vKipcbiAqIFN0b3JhZ2Ugb3B0aW9ucyBmb3IgdGhlIHJ1bm5lciBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdG9yYWdlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgRUJTIHZvbHVtZSB0eXBlXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL0VCU1ZvbHVtZVR5cGVzLmh0bWxcbiAgICpcbiAgICogQGRlZmF1bHQgYEVic0RldmljZVZvbHVtZVR5cGUuR1AyYFxuICAgKi9cbiAgcmVhZG9ubHkgdm9sdW1lVHlwZT86IEVic0RldmljZVZvbHVtZVR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgSS9PIG9wZXJhdGlvbnMgcGVyIHNlY29uZCAoSU9QUykgdG8gcHJvdmlzaW9uIGZvciB0aGUgdm9sdW1lLlxuICAgKlxuICAgKiBNdXN0IG9ubHkgYmUgc2V0IGZvciBgdm9sdW1lVHlwZWA6IGBFYnNEZXZpY2VWb2x1bWVUeXBlLklPMWBcbiAgICpcbiAgICogVGhlIG1heGltdW0gcmF0aW8gb2YgSU9QUyB0byB2b2x1bWUgc2l6ZSAoaW4gR2lCKSBpcyA1MDoxLCBzbyBmb3IgNSwwMDAgcHJvdmlzaW9uZWQgSU9QUyxcbiAgICogeW91IG5lZWQgYXQgbGVhc3QgMTAwIEdpQiBzdG9yYWdlIG9uIHRoZSB2b2x1bWUuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL0VCU1ZvbHVtZVR5cGVzLmh0bWxcbiAgICpcbiAgICogQGRlZmF1bHQgLSBub25lLCByZXF1aXJlZCBmb3IgYEVic0RldmljZVZvbHVtZVR5cGUuSU8xYFxuICAgKi9cbiAgcmVhZG9ubHkgaW9wcz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHRocm91Z2hwdXQgdGhhdCB0aGUgdm9sdW1lIHN1cHBvcnRzLCBpbiBNaUIvc1xuICAgKiBUYWtlcyBhIG1pbmltdW0gb2YgMTI1IGFuZCBtYXhpbXVtIG9mIDEwMDAuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi12b2x1bWUuaHRtbCNjZm4tZWMyLXZvbHVtZS10aHJvdWdocHV0XG4gICAqIEBkZWZhdWx0IC0gMTI1IE1pQi9zLiBPbmx5IHZhbGlkIG9uIGdwMyB2b2x1bWVzLlxuICAgKi9cbiAgcmVhZG9ubHkgdGhyb3VnaHB1dD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBhbGwgcHJvdmlkZXJzIHdpdGggY29tbW9uIG1ldGhvZHMgdXNlZCBieSBhbGwgcHJvdmlkZXJzLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZVByb3ZpZGVyIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIF9wcm9wcz86IFJ1bm5lclByb3ZpZGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY2RrLlRhZ3Mub2YodGhpcykuYWRkKCdHaXRIdWJSdW5uZXJzOlByb3ZpZGVyJywgdGhpcy5ub2RlLnBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRvIGluamVjdCBzdGF0aWMgc3RyaW5ncyBpbnRvIGAkLmNvbnN0c2Agb24gdGhlIG9yY2hlc3RyYXRvciBzdGF0ZSBtYWNoaW5lLlxuICAgKi9cbiAgcHVibGljIHN0ZXBGdW5jdGlvbkNvbnN0YW50cygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBwcm90ZWN0ZWQgbGFiZWxzRnJvbVByb3BlcnRpZXMoZGVmYXVsdExhYmVsOiBzdHJpbmcsIHByb3BzTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZCwgcHJvcHNMYWJlbHM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkKTogc3RyaW5nW10ge1xuICAgIGlmIChwcm9wc0xhYmVscyAmJiBwcm9wc0xhYmVsKSB7XG4gICAgICBjZGsuQW5ub3RhdGlvbnMub2YodGhpcykuYWRkRXJyb3IoJ011c3Qgc3VwcGx5IGVpdGhlciBgbGFiZWxgIG9yIGBsYWJlbHNgIGluIHJ1bm5lciBwcm9wZXJ0aWVzLCBidXQgbm90IGJvdGguIFRyeSByZW1vdmluZyB0aGUgYGxhYmVsYCBwcm9wZXJ0eS4nKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHNMYWJlbHMpIHtcbiAgICAgIHJldHVybiBwcm9wc0xhYmVscztcbiAgICB9XG4gICAgaWYgKHByb3BzTGFiZWwpIHtcbiAgICAgIHJldHVybiBbcHJvcHNMYWJlbF07XG4gICAgfVxuICAgIHJldHVybiBbZGVmYXVsdExhYmVsXTtcbiAgfVxufVxuXG4vKipcbiAqIFVzZSBjdXN0b20gcmVzb3VyY2UgdG8gZGV0ZXJtaW5lIHRoZSByb290IGRldmljZSBuYW1lIG9mIGEgZ2l2ZW4gQU1JLCBMYXVuY2ggVGVtcGxhdGUsIG9yIFNTTSBwYXJhbWV0ZXIgcG9pbnRpbmcgdG8gQU1JLlxuICpcbiAqIFRPRE8gbW92ZSBzb21ld2hlcmUgbW9yZSBjb21tb24gYXMgaXQncyB1c2VkIGJ5IGJvdGggcHJvdmlkZXJzIGFuZCBBTUkgYnVpbGRlciBub3dcbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFtaVJvb3REZXZpY2Uoc2NvcGU6IENvbnN0cnVjdCwgYW1pPzogc3RyaW5nKSB7XG4gIGNvbnN0IGNySGFuZGxlciA9IHNpbmdsZXRvbkxhbWJkYShBbWlSb290RGV2aWNlRnVuY3Rpb24sIHNjb3BlLCAnQU1JIFJvb3QgRGV2aWNlIFJlYWRlcicsIHtcbiAgICBkZXNjcmlwdGlvbjogJ0N1c3RvbSByZXNvdXJjZSBoYW5kbGVyIHRoYXQgZGlzY292ZXJzIHRoZSBib290IGRyaXZlIGRldmljZSBuYW1lIGZvciBhIGdpdmVuIEFNSScsXG4gICAgdGltZW91dDogY2RrLkR1cmF0aW9uLm1pbnV0ZXMoMSksXG4gICAgbG9nR3JvdXA6IHNpbmdsZXRvbkxvZ0dyb3VwKHNjb3BlLCBTaW5nbGV0b25Mb2dUeXBlLlJVTk5FUl9JTUFHRV9CVUlMRCksXG4gICAgbG9nZ2luZ0Zvcm1hdDogbGFtYmRhLkxvZ2dpbmdGb3JtYXQuSlNPTixcbiAgICBpbml0aWFsUG9saWN5OiBbXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAnc3NtOkdldFBhcmFtZXRlcicsXG4gICAgICAgICAgJ2VjMjpEZXNjcmliZUltYWdlcycsXG4gICAgICAgICAgJ2VjMjpEZXNjcmliZUxhdW5jaFRlbXBsYXRlVmVyc2lvbnMnLFxuICAgICAgICAgICdpbWFnZWJ1aWxkZXI6R2V0SW1hZ2UnLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgfSksXG4gICAgXSxcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBDdXN0b21SZXNvdXJjZShzY29wZSwgJ0FNSSBSb290IERldmljZScsIHtcbiAgICBzZXJ2aWNlVG9rZW46IGNySGFuZGxlci5mdW5jdGlvbkFybixcbiAgICByZXNvdXJjZVR5cGU6ICdDdXN0b206OkFtaVJvb3REZXZpY2UnLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIEFtaTogYW1pID8/ICcnLFxuICAgIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBzaG9ydGVuZWQgc3RhdGUgbmFtZSBmcm9tIGEgY29uc3RydWN0J3MgcGF0aCBmb3IgdXNlIGluIEFXUyBTdGVwIEZ1bmN0aW9ucy5cbiAqIFN0ZXAgRnVuY3Rpb25zIHN0YXRlIG5hbWVzIGFyZSBsaW1pdGVkIHRvIDgwIGNoYXJhY3RlcnMuIFRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIGEgbmFtZVxuICogZnJvbSB0aGUgY29uc3RydWN0J3MgcGF0aCAod2l0aG91dCB0aGUgc3RhY2sgbmFtZSksIG9wdGlvbmFsbHkgYXBwZW5kcyBhIHN1ZmZpeCwgYW5kXG4gKiBzaG9ydGVucyBpdCBpZiBuZWNlc3NhcnkgYnkgdHJ1bmNhdGluZyBhbmQgYXBwZW5kaW5nIGEgaGFzaCBzdWZmaXggdG8gZW5zdXJlIHVuaXF1ZW5lc3MuXG4gKlxuICogQHBhcmFtIGNvbnN0cnVjdCBUaGUgY29uc3RydWN0IHRvIGdldCB0aGUgcGF0aCBmcm9tXG4gKiBAcGFyYW0gc3VmZml4IE9wdGlvbmFsIHN1ZmZpeCB0byBhcHBlbmQgdG8gdGhlIHBhdGggKGUuZy4sIFwiZGF0YVwiLCBcInJhbmRcIiwgXCJjaG9pY2VcIilcbiAqIEByZXR1cm5zIEEgc2hvcnRlbmVkIHN0YXRlIG5hbWUgdGhhdCBmaXRzIHdpdGhpbiBBV1MgU3RlcCBGdW5jdGlvbnMnIDgwLWNoYXJhY3RlciBsaW1pdFxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVN0YXRlTmFtZShjb25zdHJ1Y3Q6IENvbnN0cnVjdCwgc3VmZml4Pzogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gR2V0IGNvbnN0cnVjdCBwYXRoIHdpdGhvdXQgc3RhY2sgbmFtZVxuICBjb25zdCBiYXNlUGF0aCA9IGNvbnN0cnVjdC5ub2RlLnBhdGguc3BsaXQoJy8nKS5zbGljZSgxKS5qb2luKCcvJyk7XG5cbiAgLy8gQnVpbGQgZnVsbCBuYW1lIHdpdGggb3B0aW9uYWwgc3VmZml4XG4gIGNvbnN0IGZ1bGxOYW1lID0gc3VmZml4ID8gYCR7YmFzZVBhdGh9ICR7c3VmZml4fWAgOiBiYXNlUGF0aDtcblxuICAvLyBTaG9ydGVuIGlmIG5lY2Vzc2FyeVxuICBjb25zdCBtYXhMZW5ndGggPSA4MDtcbiAgaWYgKGZ1bGxOYW1lLmxlbmd0aCA8PSBtYXhMZW5ndGgpIHtcbiAgICByZXR1cm4gZnVsbE5hbWU7XG4gIH1cblxuICBjb25zdCBoYXNoU3VmZml4ID0gY3J5cHRvLmNyZWF0ZUhhc2goJ21kNScpLnVwZGF0ZShmdWxsTmFtZSkuZGlnZXN0KCdoZXgnKS5zbGljZSgwLCAzKTtcbiAgY29uc3Qgc2VwYXJhdG9yID0gJy0nO1xuICBjb25zdCB0cnVuY2F0ZWRMZW5ndGggPSBtYXhMZW5ndGggLSBoYXNoU3VmZml4Lmxlbmd0aCAtIHNlcGFyYXRvci5sZW5ndGg7XG4gIGNvbnN0IHRydW5jYXRlZCA9IGZ1bGxOYW1lLnNsaWNlKDAsIHRydW5jYXRlZExlbmd0aCk7XG4gIHJldHVybiBgJHt0cnVuY2F0ZWR9JHtzZXBhcmF0b3J9JHtoYXNoU3VmZml4fWA7XG59XG4iXX0=
|
|
@@ -80,7 +80,7 @@ class CompositeProvider {
|
|
|
80
80
|
}
|
|
81
81
|
exports.CompositeProvider = CompositeProvider;
|
|
82
82
|
_a = JSII_RTTI_SYMBOL_1;
|
|
83
|
-
CompositeProvider[_a] = { fqn: "@cloudsnorkel/cdk-github-runners.CompositeProvider", version: "0.
|
|
83
|
+
CompositeProvider[_a] = { fqn: "@cloudsnorkel/cdk-github-runners.CompositeProvider", version: "0.15.1" };
|
|
84
84
|
/**
|
|
85
85
|
* Internal implementation of fallback runner provider.
|
|
86
86
|
*
|
|
@@ -112,7 +112,6 @@ class FallbackRunnerProvider extends constructs_1.Construct {
|
|
|
112
112
|
* @returns A Step Functions chainable that implements the fallback logic
|
|
113
113
|
*/
|
|
114
114
|
getStepFunctionTask(parameters) {
|
|
115
|
-
// Get all provider chainables upfront
|
|
116
115
|
const providerChainables = this.providers.map(p => p.getStepFunctionTask(parameters));
|
|
117
116
|
// Wrap providers with multiple end states in a Parallel state
|
|
118
117
|
const wrappedProviderChainables = providerChainables.map((p, i) => {
|
|
@@ -128,10 +127,7 @@ class FallbackRunnerProvider extends constructs_1.Construct {
|
|
|
128
127
|
const currentProvider = wrappedProviderChainables[i];
|
|
129
128
|
const nextProvider = wrappedProviderChainables[i + 1];
|
|
130
129
|
const endState = currentProvider.endStates[0];
|
|
131
|
-
|
|
132
|
-
errors: ['States.ALL'],
|
|
133
|
-
resultPath: `$.fallbackError${i + 1}`,
|
|
134
|
-
});
|
|
130
|
+
parameters.addCatchAndCleanUp(endState, nextProvider);
|
|
135
131
|
}
|
|
136
132
|
return wrappedProviderChainables[0];
|
|
137
133
|
}
|
|
@@ -140,17 +136,16 @@ class FallbackRunnerProvider extends constructs_1.Construct {
|
|
|
140
136
|
* This avoids wrapping in a Parallel state when possible.
|
|
141
137
|
*/
|
|
142
138
|
canAddCatchDirectly(provider) {
|
|
143
|
-
if (
|
|
144
|
-
return
|
|
139
|
+
if (provider instanceof aws_cdk_lib_1.aws_stepfunctions.StateMachineFragment) {
|
|
140
|
+
return provider.endStates.length === 1;
|
|
145
141
|
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
return false;
|
|
142
|
+
if (provider instanceof aws_cdk_lib_1.aws_stepfunctions.State) {
|
|
143
|
+
return provider.endStates.length === 1;
|
|
149
144
|
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
return
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
stepFunctionConstants() {
|
|
148
|
+
return (0, common_1.mergeConstMaps)(...this.providers.map(p => p.stepFunctionConstants()));
|
|
154
149
|
}
|
|
155
150
|
grantStateMachine(stateMachineRole) {
|
|
156
151
|
for (const provider of this.providers) {
|
|
@@ -158,7 +153,6 @@ class FallbackRunnerProvider extends constructs_1.Construct {
|
|
|
158
153
|
}
|
|
159
154
|
}
|
|
160
155
|
status(statusFunctionRole) {
|
|
161
|
-
// Return statuses from all sub-providers
|
|
162
156
|
return this.providers.map(provider => provider.status(statusFunctionRole));
|
|
163
157
|
}
|
|
164
158
|
}
|
|
@@ -198,7 +192,6 @@ class DistributedRunnerProvider extends constructs_1.Construct {
|
|
|
198
192
|
stateName: (0, common_1.generateStateName)(this, 'choice'),
|
|
199
193
|
});
|
|
200
194
|
rand.next(choice);
|
|
201
|
-
// Find provider with the highest weight
|
|
202
195
|
let rollingWeight = 0;
|
|
203
196
|
for (const wp of this.weightedProviders) {
|
|
204
197
|
rollingWeight += wp.weight;
|
|
@@ -206,14 +199,16 @@ class DistributedRunnerProvider extends constructs_1.Construct {
|
|
|
206
199
|
}
|
|
207
200
|
return rand;
|
|
208
201
|
}
|
|
202
|
+
stepFunctionConstants() {
|
|
203
|
+
return (0, common_1.mergeConstMaps)(...this.providers.map(p => p.stepFunctionConstants()));
|
|
204
|
+
}
|
|
209
205
|
grantStateMachine(stateMachineRole) {
|
|
210
206
|
for (const wp of this.weightedProviders) {
|
|
211
207
|
wp.provider.grantStateMachine(stateMachineRole);
|
|
212
208
|
}
|
|
213
209
|
}
|
|
214
210
|
status(statusFunctionRole) {
|
|
215
|
-
// Return statuses from all sub-providers
|
|
216
211
|
return this.providers.map(provider => provider.status(statusFunctionRole));
|
|
217
212
|
}
|
|
218
213
|
}
|
|
219
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9zaXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3ZpZGVycy9jb21wb3NpdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBaUY7QUFDakYsMkNBQXVDO0FBQ3ZDLHFDQUFrSTtBQWtCbEk7O0dBRUc7QUFDSCxNQUFhLGlCQUFpQjtJQUM1Qjs7Ozs7Ozs7Ozs7Ozs7O09BZUc7SUFDSSxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLFNBQTRCO1FBQy9FLElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7UUFDM0UsQ0FBQztRQUVELElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFL0IsT0FBTyxJQUFJLHNCQUFzQixDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7OztPQWNHO0lBQ0ksTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFnQixFQUFFLEVBQVUsRUFBRSxpQkFBMkM7UUFDaEcsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO1FBQy9FLENBQUM7UUFFRCxrQkFBa0I7UUFDbEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUU5RCxtQkFBbUI7UUFDbkIsS0FBSyxNQUFNLEVBQUUsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQ25DLElBQUksRUFBRSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDbkIsTUFBTSxJQUFJLEtBQUssQ0FB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QUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFbEIsd0NBQXdDO1FBQ3hDLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQztRQUN0QixLQUFLLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3hDLGFBQWEsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQzNCLE1BQU0sQ0FBQyxJQUFJLENBQ1QsK0JBQWEsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsa0JBQWtCLEVBQUUsYUFBYSxDQUFDLEVBQy9FLEVBQUUsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLENBQzVDLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsZ0JBQWdDO1FBQ2hELEtBQUssTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDeEMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2xELENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLGtCQUFrQztRQUN2Qyx5Q0FBeUM7UUFDekMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO0lBQzdFLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGF3c19pYW0gYXMgaWFtLCBhd3Nfc3RlcGZ1bmN0aW9ucyBhcyBzdGVwZnVuY3Rpb25zIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBJQ29tcG9zaXRlUHJvdmlkZXIsIElSdW5uZXJQcm92aWRlciwgSVJ1bm5lclByb3ZpZGVyU3RhdHVzLCBSdW5uZXJSdW50aW1lUGFyYW1ldGVycywgZ2VuZXJhdGVTdGF0ZU5hbWUgfSBmcm9tICcuL2NvbW1vbic7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3Igd2VpZ2h0ZWQgZGlzdHJpYnV0aW9uIG9mIHJ1bm5lcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2VpZ2h0ZWRSdW5uZXJQcm92aWRlciB7XG4gIC8qKlxuICAgKiBUaGUgcnVubmVyIHByb3ZpZGVyIHRvIHVzZS5cbiAgICovXG4gIHJlYWRvbmx5IHByb3ZpZGVyOiBJUnVubmVyUHJvdmlkZXI7XG5cbiAgLyoqXG4gICAqIFdlaWdodCBmb3IgdGhpcyBwcm92aWRlci4gSGlnaGVyIHdlaWdodHMgbWVhbiBoaWdoZXIgcHJvYmFiaWxpdHkgb2Ygc2VsZWN0aW9uLlxuICAgKiBNdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyLlxuICAgKi9cbiAgcmVhZG9ubHkgd2VpZ2h0OiBudW1iZXI7XG59XG5cbi8qKlxuICogQSBjb21wb3NpdGUgcnVubmVyIHByb3ZpZGVyIHRoYXQgaW1wbGVtZW50cyBmYWxsYmFjayBhbmQgZGlzdHJpYnV0aW9uIHN0cmF0ZWdpZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21wb3NpdGVQcm92aWRlciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZmFsbGJhY2sgcnVubmVyIHByb3ZpZGVyIHRoYXQgdHJpZXMgZWFjaCBwcm92aWRlciBpbiBvcmRlciB1bnRpbCBvbmUgc3VjY2VlZHMuXG4gICAqXG4gICAqIEZvciBleGFtcGxlLCBnaXZlbiBwcm92aWRlcnMgQSwgQiwgQzpcbiAgICogLSBUcnkgQSBmaXJzdFxuICAgKiAtIElmIEEgZmFpbHMsIHRyeSBCXG4gICAqIC0gSWYgQiBmYWlscywgdHJ5IENcbiAgICpcbiAgICogWW91IGNhbiB1c2UgdGhpcyB0byB0cnkgc3BvdCBpbnN0YW5jZSBmaXJzdCwgYW5kIHN3aXRjaCB0byBvbi1kZW1hbmQgaW5zdGFuY2VzIGlmIHNwb3QgaXMgdW5hdmFpbGFibGUuXG4gICAqXG4gICAqIE9yIHlvdSBjYW4gdXNlIHRoaXMgdG8gdHJ5IGRpZmZlcmVudCBpbnN0YW5jZSB0eXBlcyBpbiBvcmRlciBvZiBwcmVmZXJlbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gaWQgVGhlIHNjb3BlZCBjb25zdHJ1Y3QgSURcbiAgICogQHBhcmFtIHByb3ZpZGVycyBMaXN0IG9mIHJ1bm5lciBwcm92aWRlcnMgdG8gdHJ5IGluIG9yZGVyXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZhbGxiYWNrKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3ZpZGVyczogSVJ1bm5lclByb3ZpZGVyW10pOiBJQ29tcG9zaXRlUHJvdmlkZXIge1xuICAgIGlmIChwcm92aWRlcnMubGVuZ3RoIDwgMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdCBsZWFzdCB0d28gcHJvdmlkZXJzIG11c3QgYmUgc3BlY2lmaWVkIGZvciBmYWxsYmFjaycpO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWRhdGVMYWJlbHMocHJvdmlkZXJzKTtcblxuICAgIHJldHVybiBuZXcgRmFsbGJhY2tSdW5uZXJQcm92aWRlcihzY29wZSwgaWQsIHByb3ZpZGVycyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHdlaWdodGVkIGRpc3RyaWJ1dGlvbiBydW5uZXIgcHJvdmlkZXIgdGhhdCByYW5kb21seSBzZWxlY3RzIGEgcHJvdmlkZXIgYmFzZWQgb24gd2VpZ2h0cy5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUsIGdpdmVuIHByb3ZpZGVycyBBICh3ZWlnaHQgMTApLCBCICh3ZWlnaHQgMjApLCBDICh3ZWlnaHQgMzApOlxuICAgKiAtIFRvdGFsIHdlaWdodCA9IDYwXG4gICAqIC0gUHJvYmFiaWxpdHkgb2Ygc2VsZWN0aW5nIEEgPSAxMC82MCA9IDE2LjY3JVxuICAgKiAtIFByb2JhYmlsaXR5IG9mIHNlbGVjdGluZyBCID0gMjAvNjAgPSAzMy4zMyVcbiAgICogLSBQcm9iYWJpbGl0eSBvZiBzZWxlY3RpbmcgQyA9IDMwLzYwID0gNTAlXG4gICAqXG4gICAqIFlvdSBjYW4gdXNlIHRoaXMgdG8gZGlzdHJpYnV0ZSBsb2FkIGFjcm9zcyBtdWx0aXBsZSBpbnN0YW5jZSB0eXBlcyBvciBhdmFpbGFiaWxpdHkgem9uZXMuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgY29uc3RydWN0XG4gICAqIEBwYXJhbSBpZCBUaGUgc2NvcGVkIGNvbnN0cnVjdCBJRFxuICAgKiBAcGFyYW0gd2VpZ2h0ZWRQcm92aWRlcnMgTGlzdCBvZiB3ZWlnaHRlZCBydW5uZXIgcHJvdmlkZXJzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGRpc3RyaWJ1dGUoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgd2VpZ2h0ZWRQcm92aWRlcnM6IFdlaWdodGVkUnVubmVyUHJvdmlkZXJbXSk6IElDb21wb3NpdGVQcm92aWRlciB7XG4gICAgaWYgKHdlaWdodGVkUHJvdmlkZXJzLmxlbmd0aCA8IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXQgbGVhc3QgdHdvIHByb3ZpZGVycyBtdXN0IGJlIHNwZWNpZmllZCBmb3IgZGlzdHJpYnV0aW9uJyk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgbGFiZWxzXG4gICAgdGhpcy52YWxpZGF0ZUxhYmVscyh3ZWlnaHRlZFByb3ZpZGVycy5tYXAod3AgPT4gd3AucHJvdmlkZXIpKTtcblxuICAgIC8vIFZhbGlkYXRlIHdlaWdodHNcbiAgICBmb3IgKGNvbnN0IHdwIG9mIHdlaWdodGVkUHJvdmlkZXJzKSB7XG4gICAgICBpZiAod3Aud2VpZ2h0IDw9IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBbGwgd2VpZ2h0cyBtdXN0IGJlIHBvc2l0aXZlIG51bWJlcnMnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IERpc3RyaWJ1dGVkUnVubmVyUHJvdmlkZXIoc2NvcGUsIGlkLCB3ZWlnaHRlZFByb3ZpZGVycyk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoYXQgYWxsIHByb3ZpZGVycyBoYXZlIHRoZSBleGFjdCBzYW1lIGxhYmVscy5cbiAgICogVGhpcyBpcyByZXF1aXJlZCBzbyB0aGF0IGFueSBwcm92aXNpb25lZCBydW5uZXIgY2FuIG1hdGNoIHRoZSBsYWJlbHMgcmVxdWVzdGVkIGJ5IHRoZSBHaXRIdWIgd29ya2Zsb3cgam9iLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvdmlkZXJzIFByb3ZpZGVycyB0byB2YWxpZGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVMYWJlbHMocHJvdmlkZXJzOiBJUnVubmVyUHJvdmlkZXJbXSk6IHZvaWQge1xuICAgIGNvbnN0IGZpcnN0TGFiZWxzID0gbmV3IFNldChwcm92aWRlcnNbMF0ubGFiZWxzKTtcbiAgICBmb3IgKGNvbnN0IHByb3ZpZGVyIG9mIHByb3ZpZGVycy5zbGljZSgxKSkge1xuICAgICAgY29uc3QgcHJvdmlkZXJMYWJlbHMgPSBuZXcgU2V0KHByb3ZpZGVyLmxhYmVscyk7XG4gICAgICBpZiAoZmlyc3RMYWJlbHMuc2l6ZSAhPT0gcHJvdmlkZXJMYWJlbHMuc2l6ZSB8fCAhWy4uLmZpcnN0TGFiZWxzXS5ldmVyeShsYWJlbCA9PiBwcm92aWRlckxhYmVscy5oYXMobGFiZWwpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFsbCBwcm92aWRlcnMgbXVzdCBoYXZlIHRoZSBleGFjdCBzYW1lIGxhYmVscyAoJHtbLi4uZmlyc3RMYWJlbHNdLmpvaW4oJywgJyl9ICE9ICR7Wy4uLnByb3ZpZGVyTGFiZWxzXS5qb2luKCcsICcpfSlgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBmYWxsYmFjayBydW5uZXIgcHJvdmlkZXIuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIEZhbGxiYWNrUnVubmVyUHJvdmlkZXIgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJQ29tcG9zaXRlUHJvdmlkZXIge1xuICBwdWJsaWMgcmVhZG9ubHkgbGFiZWxzOiBzdHJpbmdbXTtcbiAgcHVibGljIHJlYWRvbmx5IHByb3ZpZGVyczogSVJ1bm5lclByb3ZpZGVyW107XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvdmlkZXJzOiBJUnVubmVyUHJvdmlkZXJbXSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5sYWJlbHMgPSBwcm92aWRlcnNbMF0ubGFiZWxzO1xuICAgIHRoaXMucHJvdmlkZXJzID0gcHJvdmlkZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhIFN0ZXAgRnVuY3Rpb25zIHN0YXRlIG1hY2hpbmUgdGhhdCBpbXBsZW1lbnRzIGEgZmFsbGJhY2sgc3RyYXRlZ3kuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGNvbnN0cnVjdHMgYSBjaGFpbiB3aGVyZSBlYWNoIHByb3ZpZGVyIGNhdGNoZXMgZXJyb3JzIGFuZCBmYWxscyBiYWNrXG4gICAqIHRvIHRoZSBuZXh0IHByb3ZpZGVyIGluIHNlcXVlbmNlLiBXZSBpdGVyYXRlIGZvcndhcmQgdGhyb3VnaCBwcm92aWRlcnMsIGF0dGFjaGluZ1xuICAgKiBjYXRjaCBoYW5kbGVycyB0byBlYWNoIG9uZSAoZXhjZXB0IHRoZSBsYXN0KSB0aGF0IHJvdXRlIHRvIHRoZSBuZXh0IHByb3ZpZGVyLlxuICAgKlxuICAgKiBFeGFtcGxlIHdpdGggcHJvdmlkZXJzIFtBLCBCLCBDXTpcbiAgICogLSBTYXZlIGZpcnN0UHJvdmlkZXIgPSBBICh0aGlzIHdpbGwgYmUgcmV0dXJuZWQpXG4gICAqIC0gSXRlcmF0aW9uIDEgKGk9MCwgcHJvdmlkZXIgQSk6IEEgY2F0Y2hlcyBlcnJvcnMg4oaSIGZhbGxzIGJhY2sgdG8gQlxuICAgKiAtIEl0ZXJhdGlvbiAyIChpPTEsIHByb3ZpZGVyIEIpOiBCIGNhdGNoZXMgZXJyb3JzIOKGkiBmYWxscyBiYWNrIHRvIENcbiAgICogLSBSZXN1bHQ6IEEg4oaSIChvbiBlcnJvcikg4oaSIEIg4oaSIChvbiBlcnJvcikg4oaSIENcbiAgICpcbiAgICogU29tZSBwcm92aWRlcnMgZ2VuZXJhdGUgb25lIHN0YXRlIHdoaWxlIG90aGVycyAobGlrZSBFQzIpIG1heSBnZW5lcmF0ZSBtb3JlIGNvbXBsZXggY2hhaW5zLlxuICAgKiBXZSB0cnkgdG8gYXZvaWQgY3JlYXRpbmcgYSBjb21wbGljYXRlZCBzdGF0ZSBtYWNoaW5lLCBidXQgY29tcGxleCBjaGFpbnMgbWF5IHJlcXVpcmUgd3JhcHBpbmcgaW4gUGFyYWxsZWwuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJzIFJ1bnRpbWUgcGFyYW1ldGVycyBmb3IgdGhlIHN0ZXAgZnVuY3Rpb24gdGFza1xuICAgKiBAcmV0dXJucyBBIFN0ZXAgRnVuY3Rpb25zIGNoYWluYWJsZSB0aGF0IGltcGxlbWVudHMgdGhlIGZhbGxiYWNrIGxvZ2ljXG4gICAqL1xuICBnZXRTdGVwRnVuY3Rpb25UYXNrKHBhcmFtZXRlcnM6IFJ1bm5lclJ1bnRpbWVQYXJhbWV0ZXJzKTogc3RlcGZ1bmN0aW9ucy5JQ2hhaW5hYmxlIHtcbiAgICAvLyBHZXQgYWxsIHByb3ZpZGVyIGNoYWluYWJsZXMgdXBmcm9udFxuICAgIGNvbnN0IHByb3ZpZGVyQ2hhaW5hYmxlcyA9IHRoaXMucHJvdmlkZXJzLm1hcChwID0+IHAuZ2V0U3RlcEZ1bmN0aW9uVGFzayhwYXJhbWV0ZXJzKSk7XG5cbiAgICAvLyBXcmFwIHByb3ZpZGVycyB3aXRoIG11bHRpcGxlIGVuZCBzdGF0ZXMgaW4gYSBQYXJhbGxlbCBzdGF0ZVxuICAgIGNvbnN0IHdyYXBwZWRQcm92aWRlckNoYWluYWJsZXMgPSBwcm92aWRlckNoYWluYWJsZXMubWFwKChwLCBpKSA9PiB7XG4gICAgICBpZiAodGhpcy5jYW5BZGRDYXRjaERpcmVjdGx5KHApKSB7XG4gICAgICAgIHJldHVybiBwO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBzdGVwZnVuY3Rpb25zLlBhcmFsbGVsKHRoaXMsIGBBdHRlbXB0ICMke2kgKyAxfWAsIHtcbiAgICAgICAgc3RhdGVOYW1lOiBnZW5lcmF0ZVN0YXRlTmFtZSh0aGlzLCBgYXR0ZW1wdCAjJHtpICsgMX1gKSxcbiAgICAgIH0pLmJyYW5jaChwKTtcbiAgICB9KTtcblxuICAgIC8vIEF0dGFjaCBjYXRjaCBoYW5kbGVycyB0byBlYWNoIHByb3ZpZGVyIChleGNlcHQgdGhlIGxhc3QpIHRvIGZhbGwgYmFjayB0byB0aGUgbmV4dCBwcm92aWRlclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wcm92aWRlcnMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBjb25zdCBjdXJyZW50UHJvdmlkZXIgPSB3cmFwcGVkUHJvdmlkZXJDaGFpbmFibGVzW2ldO1xuICAgICAgY29uc3QgbmV4dFByb3ZpZGVyID0gd3JhcHBlZFByb3ZpZGVyQ2hhaW5hYmxlc1tpICsgMV07XG5cbiAgICAgIGNvbnN0IGVuZFN0YXRlID0gKGN1cnJlbnRQcm92aWRlciBhcyBzdGVwZnVuY3Rpb25zLlN0YXRlKS5lbmRTdGF0ZXNbMF0gYXMgYW55O1xuICAgICAgZW5kU3RhdGUuYWRkQ2F0Y2gobmV4dFByb3ZpZGVyLCB7XG4gICAgICAgIGVycm9yczogWydTdGF0ZXMuQUxMJ10sXG4gICAgICAgIHJlc3VsdFBhdGg6IGAkLmZhbGxiYWNrRXJyb3Ike2kgKyAxfWAsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gd3JhcHBlZFByb3ZpZGVyQ2hhaW5hYmxlc1swXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgd2UgY2FuIGFkZCBhIGNhdGNoIGhhbmRsZXIgZGlyZWN0bHkgdG8gdGhlIHByb3ZpZGVyJ3MgZW5kIHN0YXRlLlxuICAgKiBUaGlzIGF2b2lkcyB3cmFwcGluZyBpbiBhIFBhcmFsbGVsIHN0YXRlIHdoZW4gcG9zc2libGUuXG4gICAqL1xuICBwcml2YXRlIGNhbkFkZENhdGNoRGlyZWN0bHkocHJvdmlkZXI6IHN0ZXBmdW5jdGlvbnMuSUNoYWluYWJsZSk6IGJvb2xlYW4ge1xuICAgIGlmICghKHByb3ZpZGVyIGluc3RhbmNlb2Ygc3RlcGZ1bmN0aW9ucy5TdGF0ZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZW5kU3RhdGVzID0gcHJvdmlkZXIuZW5kU3RhdGVzO1xuICAgIGlmIChlbmRTdGF0ZXMubGVuZ3RoICE9PSAxIHx8ICEoZW5kU3RhdGVzWzBdIGluc3RhbmNlb2Ygc3RlcGZ1bmN0aW9ucy5TdGF0ZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gVXNlICdhbnknIHR5cGUgYXNzZXJ0aW9uIGJlY2F1c2Ugbm90IGFsbCBTdGF0ZSB0eXBlcyBoYXZlIGFkZENhdGNoIGluIHRoZWlyIHR5cGUgZGVmaW5pdGlvbixcbiAgICAvLyBidXQgVGFzayBzdGF0ZXMgYW5kIG90aGVyIGV4ZWN1dGFibGUgc3RhdGVzIGRvIHN1cHBvcnQgaXQgYXQgcnVudGltZVxuICAgIGNvbnN0IGVuZFN0YXRlID0gZW5kU3RhdGVzWzBdIGFzIGFueTtcbiAgICByZXR1cm4gdHlwZW9mIGVuZFN0YXRlLmFkZENhdGNoID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgZ3JhbnRTdGF0ZU1hY2hpbmUoc3RhdGVNYWNoaW5lUm9sZTogaWFtLklHcmFudGFibGUpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHByb3ZpZGVyIG9mIHRoaXMucHJvdmlkZXJzKSB7XG4gICAgICBwcm92aWRlci5ncmFudFN0YXRlTWFjaGluZShzdGF0ZU1hY2hpbmVSb2xlKTtcbiAgICB9XG4gIH1cblxuICBzdGF0dXMoc3RhdHVzRnVuY3Rpb25Sb2xlOiBpYW0uSUdyYW50YWJsZSk6IElSdW5uZXJQcm92aWRlclN0YXR1c1tdIHtcbiAgICAvLyBSZXR1cm4gc3RhdHVzZXMgZnJvbSBhbGwgc3ViLXByb3ZpZGVyc1xuICAgIHJldHVybiB0aGlzLnByb3ZpZGVycy5tYXAocHJvdmlkZXIgPT4gcHJvdmlkZXIuc3RhdHVzKHN0YXR1c0Z1bmN0aW9uUm9sZSkpO1xuICB9XG59XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgZGlzdHJpYnV0ZWQgcnVubmVyIHByb3ZpZGVyLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5jbGFzcyBEaXN0cmlidXRlZFJ1bm5lclByb3ZpZGVyIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSUNvbXBvc2l0ZVByb3ZpZGVyIHtcbiAgcHVibGljIHJlYWRvbmx5IGxhYmVsczogc3RyaW5nW107XG4gIHB1YmxpYyByZWFkb25seSBwcm92aWRlcnM6IElSdW5uZXJQcm92aWRlcltdO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByaXZhdGUgcmVhZG9ubHkgd2VpZ2h0ZWRQcm92aWRlcnM6IFdlaWdodGVkUnVubmVyUHJvdmlkZXJbXSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5sYWJlbHMgPSB3ZWlnaHRlZFByb3ZpZGVyc1swXS5wcm92aWRlci5sYWJlbHM7XG4gICAgdGhpcy5wcm92aWRlcnMgPSB3ZWlnaHRlZFByb3ZpZGVycy5tYXAod3AgPT4gd3AucHJvdmlkZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdlaWdodGVkIHJhbmRvbSBzZWxlY3Rpb24gYWxnb3JpdGhtOlxuICAgKiAxLiBHZW5lcmF0ZSBhIHJhbmRvbSBudW1iZXIgaW4gWzEsIHRvdGFsV2VpZ2h0KzEpXG4gICAqIDIuIEJ1aWxkIGN1bXVsYXRpdmUgd2VpZ2h0IHJhbmdlcyBmb3IgZWFjaCBwcm92aWRlciAoZS5nLiwgd2VpZ2h0cyBbMTAsMjAsMzBdIC0+IHJhbmdlcyBbMS0xMCwgMTEtMzAsIDMxLTYwXSlcbiAgICogMy4gVXNlIFN0ZXAgRnVuY3Rpb25zIENob2ljZSBzdGF0ZSB0byByb3V0ZSB0byB0aGUgcHJvdmlkZXIgd2hvc2UgcmFuZ2UgY29udGFpbnMgdGhlIHJhbmRvbSBudW1iZXJcbiAgICogICAgVGhlIGZpcnN0IG1hdGNoaW5nIGNvbmRpdGlvbiB3aW5zLCBzbyB3ZSBjaGVjayBpZiByYW5kIDw9IGN1bXVsYXRpdmVXZWlnaHQgZm9yIGVhY2ggcHJvdmlkZXIgaW4gb3JkZXJcbiAgICpcbiAgICogTm90ZTogU3RhdGVzLk1hdGhSYW5kb20gcmV0dXJucyBhIHZhbHVlIGluIFtzdGFydCwgZW5kKSB3aGVyZSBlbmQgaXMgZXhjbHVzaXZlLiBXZSB1c2UgWzEsIHRvdGFsV2VpZ2h0KzEpXG4gICAqIHRvIGVuc3VyZSB0aGUgcmFuZG9tIHZhbHVlIGNhbiBiZSB1cCB0byB0b3RhbFdlaWdodCAoaW5jbHVzaXZlKSwgd2hpY2ggYWxsb3dzIHRoZSBsYXN0IHByb3ZpZGVyIHRvIGJlIHNlbGVjdGVkXG4gICAqIHdoZW4gcmFuZCBlcXVhbHMgdG90YWxXZWlnaHQuXG4gICAqL1xuICBnZXRTdGVwRnVuY3Rpb25UYXNrKHBhcmFtZXRlcnM6IFJ1bm5lclJ1bnRpbWVQYXJhbWV0ZXJzKTogc3RlcGZ1bmN0aW9ucy5JQ2hhaW5hYmxlIHtcbiAgICBjb25zdCB0b3RhbFdlaWdodCA9IHRoaXMud2VpZ2h0ZWRQcm92aWRlcnMucmVkdWNlKChzdW0sIHdwKSA9PiBzdW0gKyB3cC53ZWlnaHQsIDApO1xuICAgIGNvbnN0IHJhbmQgPSBuZXcgc3RlcGZ1bmN0aW9ucy5QYXNzKHRoaXMsICdSYW5kJywge1xuICAgICAgc3RhdGVOYW1lOiBnZW5lcmF0ZVN0YXRlTmFtZSh0aGlzLCAncmFuZCcpLFxuICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICByYW5kOiBzdGVwZnVuY3Rpb25zLkpzb25QYXRoLm1hdGhSYW5kb20oMSwgdG90YWxXZWlnaHQgKyAxKSxcbiAgICAgIH0sXG4gICAgICByZXN1bHRQYXRoOiAnJC5jb21wb3NpdGUnLFxuICAgIH0pO1xuICAgIGNvbnN0IGNob2ljZSA9IG5ldyBzdGVwZnVuY3Rpb25zLkNob2ljZSh0aGlzLCAnQ2hvaWNlJywge1xuICAgICAgc3RhdGVOYW1lOiBnZW5lcmF0ZVN0YXRlTmFtZSh0aGlzLCAnY2hvaWNlJyksXG4gICAgfSk7XG4gICAgcmFuZC5uZXh0KGNob2ljZSk7XG5cbiAgICAvLyBGaW5kIHByb3ZpZGVyIHdpdGggdGhlIGhpZ2hlc3Qgd2VpZ2h0XG4gICAgbGV0IHJvbGxpbmdXZWlnaHQgPSAwO1xuICAgIGZvciAoY29uc3Qgd3Agb2YgdGhpcy53ZWlnaHRlZFByb3ZpZGVycykge1xuICAgICAgcm9sbGluZ1dlaWdodCArPSB3cC53ZWlnaHQ7XG4gICAgICBjaG9pY2Uud2hlbihcbiAgICAgICAgc3RlcGZ1bmN0aW9ucy5Db25kaXRpb24ubnVtYmVyTGVzc1RoYW5FcXVhbHMoJyQuY29tcG9zaXRlLnJhbmQnLCByb2xsaW5nV2VpZ2h0KSxcbiAgICAgICAgd3AucHJvdmlkZXIuZ2V0U3RlcEZ1bmN0aW9uVGFzayhwYXJhbWV0ZXJzKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJhbmQ7XG4gIH1cblxuICBncmFudFN0YXRlTWFjaGluZShzdGF0ZU1hY2hpbmVSb2xlOiBpYW0uSUdyYW50YWJsZSk6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgd3Agb2YgdGhpcy53ZWlnaHRlZFByb3ZpZGVycykge1xuICAgICAgd3AucHJvdmlkZXIuZ3JhbnRTdGF0ZU1hY2hpbmUoc3RhdGVNYWNoaW5lUm9sZSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdHVzKHN0YXR1c0Z1bmN0aW9uUm9sZTogaWFtLklHcmFudGFibGUpOiBJUnVubmVyUHJvdmlkZXJTdGF0dXNbXSB7XG4gICAgLy8gUmV0dXJuIHN0YXR1c2VzIGZyb20gYWxsIHN1Yi1wcm92aWRlcnNcbiAgICByZXR1cm4gdGhpcy5wcm92aWRlcnMubWFwKHByb3ZpZGVyID0+IHByb3ZpZGVyLnN0YXR1cyhzdGF0dXNGdW5jdGlvblJvbGUpKTtcbiAgfVxufVxuIl19
|
|
214
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9zaXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3ZpZGVycy9jb21wb3NpdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBaUY7QUFDakYsMkNBQXVDO0FBQ3ZDLHFDQU9rQjtBQWtCbEI7O0dBRUc7QUFDSCxNQUFhLGlCQUFpQjtJQUM1Qjs7Ozs7Ozs7Ozs7Ozs7O09BZUc7SUFDSSxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLFNBQTRCO1FBQy9FLElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7UUFDM0UsQ0FBQztRQUVELElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFL0IsT0FBTyxJQUFJLHNCQUFzQixDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7OztPQWNHO0lBQ0ksTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFnQixFQUFFLEVBQVUsRUFBRSxpQkFBMkM7UUFDaEcsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO1FBQy9FLENBQUM7UUFFRCxrQkFBa0I7UUFDbEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUU5RCxtQkFBbUI7UUFDbkIsS0FBSyxNQUFNLEVBQUUsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQ25DLElBQUksRUFBRSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDbkIsTUFBTSxJQUFJLEtBQUssQ0FB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QUFFLENBQUM7WUFDeEMsYUFBYSxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDM0IsTUFBTSxDQUFDLElBQUksQ0FDVCwrQkFBYSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxrQkFBa0IsRUFBRSxhQUFhLENBQUMsRUFDL0UsRUFBRSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FDNUMsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsT0FBTyxJQUFBLHVCQUFjLEVBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRUQsaUJBQWlCLENBQUMsZ0JBQWdDO1FBQ2hELEtBQUssTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDeEMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2xELENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLGtCQUFrQztRQUN2QyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7SUFDN0UsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXdzX2lhbSBhcyBpYW0sIGF3c19zdGVwZnVuY3Rpb25zIGFzIHN0ZXBmdW5jdGlvbnMgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7XG4gIGdlbmVyYXRlU3RhdGVOYW1lLFxuICBJQ29tcG9zaXRlUHJvdmlkZXIsXG4gIElSdW5uZXJQcm92aWRlcixcbiAgSVJ1bm5lclByb3ZpZGVyU3RhdHVzLFxuICBJUnVubmVyUnVudGltZVBhcmFtZXRlcnMsXG4gIG1lcmdlQ29uc3RNYXBzLFxufSBmcm9tICcuL2NvbW1vbic7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3Igd2VpZ2h0ZWQgZGlzdHJpYnV0aW9uIG9mIHJ1bm5lcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2VpZ2h0ZWRSdW5uZXJQcm92aWRlciB7XG4gIC8qKlxuICAgKiBUaGUgcnVubmVyIHByb3ZpZGVyIHRvIHVzZS5cbiAgICovXG4gIHJlYWRvbmx5IHByb3ZpZGVyOiBJUnVubmVyUHJvdmlkZXI7XG5cbiAgLyoqXG4gICAqIFdlaWdodCBmb3IgdGhpcyBwcm92aWRlci4gSGlnaGVyIHdlaWdodHMgbWVhbiBoaWdoZXIgcHJvYmFiaWxpdHkgb2Ygc2VsZWN0aW9uLlxuICAgKiBNdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyLlxuICAgKi9cbiAgcmVhZG9ubHkgd2VpZ2h0OiBudW1iZXI7XG59XG5cbi8qKlxuICogQSBjb21wb3NpdGUgcnVubmVyIHByb3ZpZGVyIHRoYXQgaW1wbGVtZW50cyBmYWxsYmFjayBhbmQgZGlzdHJpYnV0aW9uIHN0cmF0ZWdpZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21wb3NpdGVQcm92aWRlciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZmFsbGJhY2sgcnVubmVyIHByb3ZpZGVyIHRoYXQgdHJpZXMgZWFjaCBwcm92aWRlciBpbiBvcmRlciB1bnRpbCBvbmUgc3VjY2VlZHMuXG4gICAqXG4gICAqIEZvciBleGFtcGxlLCBnaXZlbiBwcm92aWRlcnMgQSwgQiwgQzpcbiAgICogLSBUcnkgQSBmaXJzdFxuICAgKiAtIElmIEEgZmFpbHMsIHRyeSBCXG4gICAqIC0gSWYgQiBmYWlscywgdHJ5IENcbiAgICpcbiAgICogWW91IGNhbiB1c2UgdGhpcyB0byB0cnkgc3BvdCBpbnN0YW5jZSBmaXJzdCwgYW5kIHN3aXRjaCB0byBvbi1kZW1hbmQgaW5zdGFuY2VzIGlmIHNwb3QgaXMgdW5hdmFpbGFibGUuXG4gICAqXG4gICAqIE9yIHlvdSBjYW4gdXNlIHRoaXMgdG8gdHJ5IGRpZmZlcmVudCBpbnN0YW5jZSB0eXBlcyBpbiBvcmRlciBvZiBwcmVmZXJlbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gaWQgVGhlIHNjb3BlZCBjb25zdHJ1Y3QgSURcbiAgICogQHBhcmFtIHByb3ZpZGVycyBMaXN0IG9mIHJ1bm5lciBwcm92aWRlcnMgdG8gdHJ5IGluIG9yZGVyXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZhbGxiYWNrKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3ZpZGVyczogSVJ1bm5lclByb3ZpZGVyW10pOiBJQ29tcG9zaXRlUHJvdmlkZXIge1xuICAgIGlmIChwcm92aWRlcnMubGVuZ3RoIDwgMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdCBsZWFzdCB0d28gcHJvdmlkZXJzIG11c3QgYmUgc3BlY2lmaWVkIGZvciBmYWxsYmFjaycpO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWRhdGVMYWJlbHMocHJvdmlkZXJzKTtcblxuICAgIHJldHVybiBuZXcgRmFsbGJhY2tSdW5uZXJQcm92aWRlcihzY29wZSwgaWQsIHByb3ZpZGVycyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHdlaWdodGVkIGRpc3RyaWJ1dGlvbiBydW5uZXIgcHJvdmlkZXIgdGhhdCByYW5kb21seSBzZWxlY3RzIGEgcHJvdmlkZXIgYmFzZWQgb24gd2VpZ2h0cy5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUsIGdpdmVuIHByb3ZpZGVycyBBICh3ZWlnaHQgMTApLCBCICh3ZWlnaHQgMjApLCBDICh3ZWlnaHQgMzApOlxuICAgKiAtIFRvdGFsIHdlaWdodCA9IDYwXG4gICAqIC0gUHJvYmFiaWxpdHkgb2Ygc2VsZWN0aW5nIEEgPSAxMC82MCA9IDE2LjY3JVxuICAgKiAtIFByb2JhYmlsaXR5IG9mIHNlbGVjdGluZyBCID0gMjAvNjAgPSAzMy4zMyVcbiAgICogLSBQcm9iYWJpbGl0eSBvZiBzZWxlY3RpbmcgQyA9IDMwLzYwID0gNTAlXG4gICAqXG4gICAqIFlvdSBjYW4gdXNlIHRoaXMgdG8gZGlzdHJpYnV0ZSBsb2FkIGFjcm9zcyBtdWx0aXBsZSBpbnN0YW5jZSB0eXBlcyBvciBhdmFpbGFiaWxpdHkgem9uZXMuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgY29uc3RydWN0XG4gICAqIEBwYXJhbSBpZCBUaGUgc2NvcGVkIGNvbnN0cnVjdCBJRFxuICAgKiBAcGFyYW0gd2VpZ2h0ZWRQcm92aWRlcnMgTGlzdCBvZiB3ZWlnaHRlZCBydW5uZXIgcHJvdmlkZXJzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGRpc3RyaWJ1dGUoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgd2VpZ2h0ZWRQcm92aWRlcnM6IFdlaWdodGVkUnVubmVyUHJvdmlkZXJbXSk6IElDb21wb3NpdGVQcm92aWRlciB7XG4gICAgaWYgKHdlaWdodGVkUHJvdmlkZXJzLmxlbmd0aCA8IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXQgbGVhc3QgdHdvIHByb3ZpZGVycyBtdXN0IGJlIHNwZWNpZmllZCBmb3IgZGlzdHJpYnV0aW9uJyk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgbGFiZWxzXG4gICAgdGhpcy52YWxpZGF0ZUxhYmVscyh3ZWlnaHRlZFByb3ZpZGVycy5tYXAod3AgPT4gd3AucHJvdmlkZXIpKTtcblxuICAgIC8vIFZhbGlkYXRlIHdlaWdodHNcbiAgICBmb3IgKGNvbnN0IHdwIG9mIHdlaWdodGVkUHJvdmlkZXJzKSB7XG4gICAgICBpZiAod3Aud2VpZ2h0IDw9IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBbGwgd2VpZ2h0cyBtdXN0IGJlIHBvc2l0aXZlIG51bWJlcnMnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IERpc3RyaWJ1dGVkUnVubmVyUHJvdmlkZXIoc2NvcGUsIGlkLCB3ZWlnaHRlZFByb3ZpZGVycyk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoYXQgYWxsIHByb3ZpZGVycyBoYXZlIHRoZSBleGFjdCBzYW1lIGxhYmVscy5cbiAgICogVGhpcyBpcyByZXF1aXJlZCBzbyB0aGF0IGFueSBwcm92aXNpb25lZCBydW5uZXIgY2FuIG1hdGNoIHRoZSBsYWJlbHMgcmVxdWVzdGVkIGJ5IHRoZSBHaXRIdWIgd29ya2Zsb3cgam9iLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvdmlkZXJzIFByb3ZpZGVycyB0byB2YWxpZGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVMYWJlbHMocHJvdmlkZXJzOiBJUnVubmVyUHJvdmlkZXJbXSk6IHZvaWQge1xuICAgIGNvbnN0IGZpcnN0TGFiZWxzID0gbmV3IFNldChwcm92aWRlcnNbMF0ubGFiZWxzKTtcbiAgICBmb3IgKGNvbnN0IHByb3ZpZGVyIG9mIHByb3ZpZGVycy5zbGljZSgxKSkge1xuICAgICAgY29uc3QgcHJvdmlkZXJMYWJlbHMgPSBuZXcgU2V0KHByb3ZpZGVyLmxhYmVscyk7XG4gICAgICBpZiAoZmlyc3RMYWJlbHMuc2l6ZSAhPT0gcHJvdmlkZXJMYWJlbHMuc2l6ZSB8fCAhWy4uLmZpcnN0TGFiZWxzXS5ldmVyeShsYWJlbCA9PiBwcm92aWRlckxhYmVscy5oYXMobGFiZWwpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFsbCBwcm92aWRlcnMgbXVzdCBoYXZlIHRoZSBleGFjdCBzYW1lIGxhYmVscyAoJHtbLi4uZmlyc3RMYWJlbHNdLmpvaW4oJywgJyl9ICE9ICR7Wy4uLnByb3ZpZGVyTGFiZWxzXS5qb2luKCcsICcpfSlgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBmYWxsYmFjayBydW5uZXIgcHJvdmlkZXIuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIEZhbGxiYWNrUnVubmVyUHJvdmlkZXIgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJQ29tcG9zaXRlUHJvdmlkZXIge1xuICBwdWJsaWMgcmVhZG9ubHkgbGFiZWxzOiBzdHJpbmdbXTtcbiAgcHVibGljIHJlYWRvbmx5IHByb3ZpZGVyczogSVJ1bm5lclByb3ZpZGVyW107XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvdmlkZXJzOiBJUnVubmVyUHJvdmlkZXJbXSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5sYWJlbHMgPSBwcm92aWRlcnNbMF0ubGFiZWxzO1xuICAgIHRoaXMucHJvdmlkZXJzID0gcHJvdmlkZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhIFN0ZXAgRnVuY3Rpb25zIHN0YXRlIG1hY2hpbmUgdGhhdCBpbXBsZW1lbnRzIGEgZmFsbGJhY2sgc3RyYXRlZ3kuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGNvbnN0cnVjdHMgYSBjaGFpbiB3aGVyZSBlYWNoIHByb3ZpZGVyIGNhdGNoZXMgZXJyb3JzIGFuZCBmYWxscyBiYWNrXG4gICAqIHRvIHRoZSBuZXh0IHByb3ZpZGVyIGluIHNlcXVlbmNlLiBXZSBpdGVyYXRlIGZvcndhcmQgdGhyb3VnaCBwcm92aWRlcnMsIGF0dGFjaGluZ1xuICAgKiBjYXRjaCBoYW5kbGVycyB0byBlYWNoIG9uZSAoZXhjZXB0IHRoZSBsYXN0KSB0aGF0IHJvdXRlIHRvIHRoZSBuZXh0IHByb3ZpZGVyLlxuICAgKlxuICAgKiBFeGFtcGxlIHdpdGggcHJvdmlkZXJzIFtBLCBCLCBDXTpcbiAgICogLSBTYXZlIGZpcnN0UHJvdmlkZXIgPSBBICh0aGlzIHdpbGwgYmUgcmV0dXJuZWQpXG4gICAqIC0gSXRlcmF0aW9uIDEgKGk9MCwgcHJvdmlkZXIgQSk6IEEgY2F0Y2hlcyBlcnJvcnMg4oaSIGZhbGxzIGJhY2sgdG8gQlxuICAgKiAtIEl0ZXJhdGlvbiAyIChpPTEsIHByb3ZpZGVyIEIpOiBCIGNhdGNoZXMgZXJyb3JzIOKGkiBmYWxscyBiYWNrIHRvIENcbiAgICogLSBSZXN1bHQ6IEEg4oaSIChvbiBlcnJvcikg4oaSIEIg4oaSIChvbiBlcnJvcikg4oaSIENcbiAgICpcbiAgICogU29tZSBwcm92aWRlcnMgZ2VuZXJhdGUgb25lIHN0YXRlIHdoaWxlIG90aGVycyAobGlrZSBFQzIpIG1heSBnZW5lcmF0ZSBtb3JlIGNvbXBsZXggY2hhaW5zLlxuICAgKiBXZSB0cnkgdG8gYXZvaWQgY3JlYXRpbmcgYSBjb21wbGljYXRlZCBzdGF0ZSBtYWNoaW5lLCBidXQgY29tcGxleCBjaGFpbnMgbWF5IHJlcXVpcmUgd3JhcHBpbmcgaW4gUGFyYWxsZWwuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJzIFJ1bnRpbWUgcGFyYW1ldGVycyBmb3IgdGhlIHN0ZXAgZnVuY3Rpb24gdGFza1xuICAgKiBAcmV0dXJucyBBIFN0ZXAgRnVuY3Rpb25zIGNoYWluYWJsZSB0aGF0IGltcGxlbWVudHMgdGhlIGZhbGxiYWNrIGxvZ2ljXG4gICAqL1xuICBnZXRTdGVwRnVuY3Rpb25UYXNrKHBhcmFtZXRlcnM6IElSdW5uZXJSdW50aW1lUGFyYW1ldGVycyk6IHN0ZXBmdW5jdGlvbnMuSUNoYWluYWJsZSB7XG4gICAgY29uc3QgcHJvdmlkZXJDaGFpbmFibGVzID0gdGhpcy5wcm92aWRlcnMubWFwKHAgPT4gcC5nZXRTdGVwRnVuY3Rpb25UYXNrKHBhcmFtZXRlcnMpKTtcblxuICAgIC8vIFdyYXAgcHJvdmlkZXJzIHdpdGggbXVsdGlwbGUgZW5kIHN0YXRlcyBpbiBhIFBhcmFsbGVsIHN0YXRlXG4gICAgY29uc3Qgd3JhcHBlZFByb3ZpZGVyQ2hhaW5hYmxlcyA9IHByb3ZpZGVyQ2hhaW5hYmxlcy5tYXAoKHAsIGkpID0+IHtcbiAgICAgIGlmICh0aGlzLmNhbkFkZENhdGNoRGlyZWN0bHkocCkpIHtcbiAgICAgICAgcmV0dXJuIHA7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IHN0ZXBmdW5jdGlvbnMuUGFyYWxsZWwodGhpcywgYEF0dGVtcHQgIyR7aSArIDF9YCwge1xuICAgICAgICBzdGF0ZU5hbWU6IGdlbmVyYXRlU3RhdGVOYW1lKHRoaXMsIGBhdHRlbXB0ICMke2kgKyAxfWApLFxuICAgICAgfSkuYnJhbmNoKHApO1xuICAgIH0pO1xuXG4gICAgLy8gQXR0YWNoIGNhdGNoIGhhbmRsZXJzIHRvIGVhY2ggcHJvdmlkZXIgKGV4Y2VwdCB0aGUgbGFzdCkgdG8gZmFsbCBiYWNrIHRvIHRoZSBuZXh0IHByb3ZpZGVyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnByb3ZpZGVycy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRQcm92aWRlciA9IHdyYXBwZWRQcm92aWRlckNoYWluYWJsZXNbaV07XG4gICAgICBjb25zdCBuZXh0UHJvdmlkZXIgPSB3cmFwcGVkUHJvdmlkZXJDaGFpbmFibGVzW2kgKyAxXTtcblxuICAgICAgY29uc3QgZW5kU3RhdGUgPSBjdXJyZW50UHJvdmlkZXIuZW5kU3RhdGVzWzBdIGFzIHN0ZXBmdW5jdGlvbnMuVGFza1N0YXRlQmFzZSB8IHN0ZXBmdW5jdGlvbnMuUGFyYWxsZWw7XG4gICAgICBwYXJhbWV0ZXJzLmFkZENhdGNoQW5kQ2xlYW5VcChlbmRTdGF0ZSwgbmV4dFByb3ZpZGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd3JhcHBlZFByb3ZpZGVyQ2hhaW5hYmxlc1swXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgd2UgY2FuIGFkZCBhIGNhdGNoIGhhbmRsZXIgZGlyZWN0bHkgdG8gdGhlIHByb3ZpZGVyJ3MgZW5kIHN0YXRlLlxuICAgKiBUaGlzIGF2b2lkcyB3cmFwcGluZyBpbiBhIFBhcmFsbGVsIHN0YXRlIHdoZW4gcG9zc2libGUuXG4gICAqL1xuICBwcml2YXRlIGNhbkFkZENhdGNoRGlyZWN0bHkocHJvdmlkZXI6IHN0ZXBmdW5jdGlvbnMuSUNoYWluYWJsZSk6IGJvb2xlYW4ge1xuICAgIGlmIChwcm92aWRlciBpbnN0YW5jZW9mIHN0ZXBmdW5jdGlvbnMuU3RhdGVNYWNoaW5lRnJhZ21lbnQpIHtcbiAgICAgIHJldHVybiBwcm92aWRlci5lbmRTdGF0ZXMubGVuZ3RoID09PSAxO1xuICAgIH1cbiAgICBpZiAocHJvdmlkZXIgaW5zdGFuY2VvZiBzdGVwZnVuY3Rpb25zLlN0YXRlKSB7XG4gICAgICByZXR1cm4gcHJvdmlkZXIuZW5kU3RhdGVzLmxlbmd0aCA9PT0gMTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3RlcEZ1bmN0aW9uQ29uc3RhbnRzKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIHJldHVybiBtZXJnZUNvbnN0TWFwcyguLi50aGlzLnByb3ZpZGVycy5tYXAocCA9PiBwLnN0ZXBGdW5jdGlvbkNvbnN0YW50cygpKSk7XG4gIH1cblxuICBncmFudFN0YXRlTWFjaGluZShzdGF0ZU1hY2hpbmVSb2xlOiBpYW0uSUdyYW50YWJsZSk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgcHJvdmlkZXIgb2YgdGhpcy5wcm92aWRlcnMpIHtcbiAgICAgIHByb3ZpZGVyLmdyYW50U3RhdGVNYWNoaW5lKHN0YXRlTWFjaGluZVJvbGUpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXR1cyhzdGF0dXNGdW5jdGlvblJvbGU6IGlhbS5JR3JhbnRhYmxlKTogSVJ1bm5lclByb3ZpZGVyU3RhdHVzW10ge1xuICAgIHJldHVybiB0aGlzLnByb3ZpZGVycy5tYXAocHJvdmlkZXIgPT4gcHJvdmlkZXIuc3RhdHVzKHN0YXR1c0Z1bmN0aW9uUm9sZSkpO1xuICB9XG59XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgZGlzdHJpYnV0ZWQgcnVubmVyIHByb3ZpZGVyLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5jbGFzcyBEaXN0cmlidXRlZFJ1bm5lclByb3ZpZGVyIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSUNvbXBvc2l0ZVByb3ZpZGVyIHtcbiAgcHVibGljIHJlYWRvbmx5IGxhYmVsczogc3RyaW5nW107XG4gIHB1YmxpYyByZWFkb25seSBwcm92aWRlcnM6IElSdW5uZXJQcm92aWRlcltdO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByaXZhdGUgcmVhZG9ubHkgd2VpZ2h0ZWRQcm92aWRlcnM6IFdlaWdodGVkUnVubmVyUHJvdmlkZXJbXSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5sYWJlbHMgPSB3ZWlnaHRlZFByb3ZpZGVyc1swXS5wcm92aWRlci5sYWJlbHM7XG4gICAgdGhpcy5wcm92aWRlcnMgPSB3ZWlnaHRlZFByb3ZpZGVycy5tYXAod3AgPT4gd3AucHJvdmlkZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdlaWdodGVkIHJhbmRvbSBzZWxlY3Rpb24gYWxnb3JpdGhtOlxuICAgKiAxLiBHZW5lcmF0ZSBhIHJhbmRvbSBudW1iZXIgaW4gWzEsIHRvdGFsV2VpZ2h0KzEpXG4gICAqIDIuIEJ1aWxkIGN1bXVsYXRpdmUgd2VpZ2h0IHJhbmdlcyBmb3IgZWFjaCBwcm92aWRlciAoZS5nLiwgd2VpZ2h0cyBbMTAsMjAsMzBdIC0+IHJhbmdlcyBbMS0xMCwgMTEtMzAsIDMxLTYwXSlcbiAgICogMy4gVXNlIFN0ZXAgRnVuY3Rpb25zIENob2ljZSBzdGF0ZSB0byByb3V0ZSB0byB0aGUgcHJvdmlkZXIgd2hvc2UgcmFuZ2UgY29udGFpbnMgdGhlIHJhbmRvbSBudW1iZXJcbiAgICogICAgVGhlIGZpcnN0IG1hdGNoaW5nIGNvbmRpdGlvbiB3aW5zLCBzbyB3ZSBjaGVjayBpZiByYW5kIDw9IGN1bXVsYXRpdmVXZWlnaHQgZm9yIGVhY2ggcHJvdmlkZXIgaW4gb3JkZXJcbiAgICpcbiAgICogTm90ZTogU3RhdGVzLk1hdGhSYW5kb20gcmV0dXJucyBhIHZhbHVlIGluIFtzdGFydCwgZW5kKSB3aGVyZSBlbmQgaXMgZXhjbHVzaXZlLiBXZSB1c2UgWzEsIHRvdGFsV2VpZ2h0KzEpXG4gICAqIHRvIGVuc3VyZSB0aGUgcmFuZG9tIHZhbHVlIGNhbiBiZSB1cCB0byB0b3RhbFdlaWdodCAoaW5jbHVzaXZlKSwgd2hpY2ggYWxsb3dzIHRoZSBsYXN0IHByb3ZpZGVyIHRvIGJlIHNlbGVjdGVkXG4gICAqIHdoZW4gcmFuZCBlcXVhbHMgdG90YWxXZWlnaHQuXG4gICAqL1xuICBnZXRTdGVwRnVuY3Rpb25UYXNrKHBhcmFtZXRlcnM6IElSdW5uZXJSdW50aW1lUGFyYW1ldGVycyk6IHN0ZXBmdW5jdGlvbnMuSUNoYWluYWJsZSB7XG4gICAgY29uc3QgdG90YWxXZWlnaHQgPSB0aGlzLndlaWdodGVkUHJvdmlkZXJzLnJlZHVjZSgoc3VtLCB3cCkgPT4gc3VtICsgd3Aud2VpZ2h0LCAwKTtcbiAgICBjb25zdCByYW5kID0gbmV3IHN0ZXBmdW5jdGlvbnMuUGFzcyh0aGlzLCAnUmFuZCcsIHtcbiAgICAgIHN0YXRlTmFtZTogZ2VuZXJhdGVTdGF0ZU5hbWUodGhpcywgJ3JhbmQnKSxcbiAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgcmFuZDogc3RlcGZ1bmN0aW9ucy5Kc29uUGF0aC5tYXRoUmFuZG9tKDEsIHRvdGFsV2VpZ2h0ICsgMSksXG4gICAgICB9LFxuICAgICAgcmVzdWx0UGF0aDogJyQuY29tcG9zaXRlJyxcbiAgICB9KTtcbiAgICBjb25zdCBjaG9pY2UgPSBuZXcgc3RlcGZ1bmN0aW9ucy5DaG9pY2UodGhpcywgJ0Nob2ljZScsIHtcbiAgICAgIHN0YXRlTmFtZTogZ2VuZXJhdGVTdGF0ZU5hbWUodGhpcywgJ2Nob2ljZScpLFxuICAgIH0pO1xuICAgIHJhbmQubmV4dChjaG9pY2UpO1xuXG4gICAgbGV0IHJvbGxpbmdXZWlnaHQgPSAwO1xuICAgIGZvciAoY29uc3Qgd3Agb2YgdGhpcy53ZWlnaHRlZFByb3ZpZGVycykge1xuICAgICAgcm9sbGluZ1dlaWdodCArPSB3cC53ZWlnaHQ7XG4gICAgICBjaG9pY2Uud2hlbihcbiAgICAgICAgc3RlcGZ1bmN0aW9ucy5Db25kaXRpb24ubnVtYmVyTGVzc1RoYW5FcXVhbHMoJyQuY29tcG9zaXRlLnJhbmQnLCByb2xsaW5nV2VpZ2h0KSxcbiAgICAgICAgd3AucHJvdmlkZXIuZ2V0U3RlcEZ1bmN0aW9uVGFzayhwYXJhbWV0ZXJzKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJhbmQ7XG4gIH1cblxuICBzdGVwRnVuY3Rpb25Db25zdGFudHMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgcmV0dXJuIG1lcmdlQ29uc3RNYXBzKC4uLnRoaXMucHJvdmlkZXJzLm1hcChwID0+IHAuc3RlcEZ1bmN0aW9uQ29uc3RhbnRzKCkpKTtcbiAgfVxuXG4gIGdyYW50U3RhdGVNYWNoaW5lKHN0YXRlTWFjaGluZVJvbGU6IGlhbS5JR3JhbnRhYmxlKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCB3cCBvZiB0aGlzLndlaWdodGVkUHJvdmlkZXJzKSB7XG4gICAgICB3cC5wcm92aWRlci5ncmFudFN0YXRlTWFjaGluZShzdGF0ZU1hY2hpbmVSb2xlKTtcbiAgICB9XG4gIH1cblxuICBzdGF0dXMoc3RhdHVzRnVuY3Rpb25Sb2xlOiBpYW0uSUdyYW50YWJsZSk6IElSdW5uZXJQcm92aWRlclN0YXR1c1tdIHtcbiAgICByZXR1cm4gdGhpcy5wcm92aWRlcnMubWFwKHByb3ZpZGVyID0+IHByb3ZpZGVyLnN0YXR1cyhzdGF0dXNGdW5jdGlvblJvbGUpKTtcbiAgfVxufVxuIl19
|
package/lib/providers/ec2.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as cdk from 'aws-cdk-lib';
|
|
2
2
|
import { aws_ec2 as ec2, aws_iam as iam, aws_logs as logs, aws_stepfunctions as stepfunctions } from 'aws-cdk-lib';
|
|
3
3
|
import { Construct } from 'constructs';
|
|
4
|
-
import { BaseProvider, IRunnerProvider, IRunnerProviderStatus,
|
|
4
|
+
import { BaseProvider, IRunnerProvider, IRunnerProviderStatus, IRunnerRuntimeParameters, RunnerProviderProps, StorageOptions } from './common';
|
|
5
5
|
import { IRunnerImageBuilder, RunnerImageBuilderProps } from '../image-builders';
|
|
6
6
|
/**
|
|
7
7
|
* Properties for {@link Ec2RunnerProvider} construct.
|
|
@@ -45,6 +45,11 @@ export interface Ec2RunnerProviderProps extends RunnerProviderProps {
|
|
|
45
45
|
/**
|
|
46
46
|
* Instance type for launched runner instances.
|
|
47
47
|
*
|
|
48
|
+
* For GPU instance types (g4dn, g5, p3, etc.), we automatically use a GPU base image (AWS Deep Learning AMI)
|
|
49
|
+
* with NVIDIA drivers pre-installed. If you provide your own image builder, use
|
|
50
|
+
* `baseAmi: BaseImage.fromGpuBase(os, architecture)` or another image preloaded with NVIDIA drivers, or use
|
|
51
|
+
* an image component to install NVIDIA drivers.
|
|
52
|
+
*
|
|
48
53
|
* @default m6i.large
|
|
49
54
|
*/
|
|
50
55
|
readonly instanceType?: ec2.InstanceType;
|
|
@@ -160,6 +165,8 @@ export declare class Ec2RunnerProvider extends BaseProvider implements IRunnerPr
|
|
|
160
165
|
private readonly securityGroups;
|
|
161
166
|
private readonly defaultLabels;
|
|
162
167
|
constructor(scope: Construct, id: string, props?: Ec2RunnerProviderProps);
|
|
168
|
+
private userDataConst;
|
|
169
|
+
stepFunctionConstants(): Record<string, string>;
|
|
163
170
|
/**
|
|
164
171
|
* Generate step function task(s) to start a new runner.
|
|
165
172
|
*
|
|
@@ -167,7 +174,7 @@ export declare class Ec2RunnerProvider extends BaseProvider implements IRunnerPr
|
|
|
167
174
|
*
|
|
168
175
|
* @param parameters workflow job details
|
|
169
176
|
*/
|
|
170
|
-
getStepFunctionTask(parameters:
|
|
177
|
+
getStepFunctionTask(parameters: IRunnerRuntimeParameters): stepfunctions.IChainable;
|
|
171
178
|
grantStateMachine(stateMachineRole: iam.IGrantable): void;
|
|
172
179
|
status(statusFunctionRole: iam.IGrantable): IRunnerProviderStatus;
|
|
173
180
|
/**
|