@aws-cdk/aws-bedrock-agentcore-alpha 2.256.1-alpha.0 → 2.258.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +2806 -2580
- package/.jsii.tabl.json.gz +0 -0
- package/.warnings.jsii.js +2135 -59
- package/lib/common/types.d.ts +2 -0
- package/lib/common/types.js +3 -1
- package/lib/evaluation/custom-evaluator.d.ts +1 -0
- package/lib/evaluation/custom-evaluator.js +37 -4
- package/lib/evaluation/data-source.d.ts +1 -0
- package/lib/evaluation/data-source.js +15 -2
- package/lib/evaluation/evaluator-base.d.ts +2 -0
- package/lib/evaluation/evaluator-base.js +65 -3
- package/lib/evaluation/evaluator-config.d.ts +4 -0
- package/lib/evaluation/evaluator-config.js +25 -3
- package/lib/evaluation/evaluator.d.ts +1 -0
- package/lib/evaluation/evaluator.js +14 -2
- package/lib/evaluation/online-evaluation-base.d.ts +2 -0
- package/lib/evaluation/online-evaluation-base.js +65 -3
- package/lib/evaluation/online-evaluation.d.ts +1 -0
- package/lib/evaluation/online-evaluation.js +37 -4
- package/lib/evaluation/perms.d.ts +5 -0
- package/lib/evaluation/perms.js +6 -1
- package/lib/evaluation/types.d.ts +15 -0
- package/lib/evaluation/types.js +75 -6
- package/lib/evaluation/validation-helpers.d.ts +22 -0
- package/lib/evaluation/validation-helpers.js +23 -1
- package/lib/gateway/gateway-base.d.ts +7 -0
- package/lib/gateway/gateway-base.js +178 -3
- package/lib/gateway/gateway.d.ts +9 -0
- package/lib/gateway/gateway.js +49 -6
- package/lib/gateway/inbound-auth/authorizer.d.ts +12 -0
- package/lib/gateway/inbound-auth/authorizer.js +31 -5
- package/lib/gateway/inbound-auth/custom-claim.d.ts +1 -0
- package/lib/gateway/inbound-auth/custom-claim.js +13 -2
- package/lib/gateway/interceptor.d.ts +5 -0
- package/lib/gateway/interceptor.js +7 -2
- package/lib/gateway/outbound-auth/api-key.d.ts +5 -0
- package/lib/gateway/outbound-auth/api-key.js +7 -2
- package/lib/gateway/outbound-auth/credential-provider.d.ts +5 -0
- package/lib/gateway/outbound-auth/credential-provider.js +17 -2
- package/lib/gateway/outbound-auth/iam-role.d.ts +1 -0
- package/lib/gateway/outbound-auth/iam-role.js +2 -1
- package/lib/gateway/outbound-auth/oauth.d.ts +2 -0
- package/lib/gateway/outbound-auth/oauth.js +2 -1
- package/lib/gateway/perms.d.ts +16 -0
- package/lib/gateway/perms.js +17 -1
- package/lib/gateway/protocol.d.ts +7 -0
- package/lib/gateway/protocol.js +10 -3
- package/lib/gateway/targets/schema/api-schema.d.ts +4 -0
- package/lib/gateway/targets/schema/api-schema.js +161 -6
- package/lib/gateway/targets/schema/base-schema.d.ts +1 -0
- package/lib/gateway/targets/schema/base-schema.js +2 -1
- package/lib/gateway/targets/schema/tool-schema.d.ts +12 -0
- package/lib/gateway/targets/schema/tool-schema.js +166 -6
- package/lib/gateway/targets/target-base.d.ts +5 -0
- package/lib/gateway/targets/target-base.js +76 -3
- package/lib/gateway/targets/target-configuration.d.ts +14 -0
- package/lib/gateway/targets/target-configuration.js +125 -9
- package/lib/gateway/targets/target.d.ts +8 -0
- package/lib/gateway/targets/target.js +37 -4
- package/lib/gateway/validation-helpers.d.ts +4 -0
- package/lib/gateway/validation-helpers.js +4 -1
- package/lib/identity/api-key-credential-provider.d.ts +4 -0
- package/lib/identity/api-key-credential-provider.js +36 -3
- package/lib/identity/grant-helpers.d.ts +7 -0
- package/lib/identity/grant-helpers.js +42 -2
- package/lib/identity/oauth2-credential-provider.d.ts +29 -0
- package/lib/identity/oauth2-credential-provider.js +37 -3
- package/lib/identity/perms.d.ts +5 -0
- package/lib/identity/perms.js +9 -4
- package/lib/identity/validation-helpers.d.ts +53 -0
- package/lib/identity/validation-helpers.js +54 -1
- package/lib/identity/workload-identity.d.ts +3 -0
- package/lib/identity/workload-identity.js +36 -3
- package/lib/memory/memory-strategy.d.ts +6 -0
- package/lib/memory/memory-strategy.js +47 -2
- package/lib/memory/memory.d.ts +4 -0
- package/lib/memory/memory.js +210 -5
- package/lib/memory/strategies/managed-strategy.d.ts +4 -0
- package/lib/memory/strategies/managed-strategy.js +22 -2
- package/lib/memory/strategies/self-managed-strategy.d.ts +4 -0
- package/lib/memory/strategies/self-managed-strategy.js +57 -4
- package/lib/memory/validation-helpers.d.ts +6 -0
- package/lib/memory/validation-helpers.js +7 -1
- package/lib/network/network-configuration.d.ts +5 -0
- package/lib/network/network-configuration.js +83 -6
- package/lib/policy/policy-base.js +36 -3
- package/lib/policy/policy-engine-base.js +36 -3
- package/lib/policy/policy-engine.js +37 -4
- package/lib/policy/policy-statement.js +5 -5
- package/lib/policy/policy-types.js +1 -1
- package/lib/policy/policy.js +36 -3
- package/lib/runtime/inbound-auth/custom-claim.d.ts +1 -0
- package/lib/runtime/inbound-auth/custom-claim.js +13 -2
- package/lib/runtime/inbound-auth/runtime-authorizer-configuration.d.ts +1 -0
- package/lib/runtime/inbound-auth/runtime-authorizer-configuration.js +40 -2
- package/lib/runtime/observability.d.ts +5 -0
- package/lib/runtime/observability.js +79 -5
- package/lib/runtime/perms.d.ts +12 -0
- package/lib/runtime/perms.js +13 -1
- package/lib/runtime/runtime-artifact.d.ts +3 -0
- package/lib/runtime/runtime-artifact.js +69 -5
- package/lib/runtime/runtime-base.d.ts +3 -0
- package/lib/runtime/runtime-base.js +200 -3
- package/lib/runtime/runtime-endpoint-base.d.ts +3 -0
- package/lib/runtime/runtime-endpoint-base.js +22 -2
- package/lib/runtime/runtime-endpoint.d.ts +1 -0
- package/lib/runtime/runtime-endpoint.js +36 -3
- package/lib/runtime/runtime.d.ts +2 -0
- package/lib/runtime/runtime.js +38 -5
- package/lib/runtime/types.d.ts +3 -0
- package/lib/runtime/types.js +2 -1
- package/lib/runtime/validation-helpers.d.ts +6 -0
- package/lib/runtime/validation-helpers.js +7 -1
- package/lib/tools/browser.d.ts +6 -0
- package/lib/tools/browser.js +205 -8
- package/lib/tools/code-interpreter.d.ts +4 -0
- package/lib/tools/code-interpreter.js +185 -7
- package/lib/tools/perms.d.ts +12 -0
- package/lib/tools/perms.js +13 -1
- package/lib/tools/validation-helpers.d.ts +6 -0
- package/lib/tools/validation-helpers.js +7 -1
- package/package.json +10 -10
|
@@ -1,4 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
2
18
|
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
3
19
|
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
4
20
|
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
@@ -33,12 +49,29 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
|
|
|
33
49
|
}
|
|
34
50
|
return useValue ? value : void 0;
|
|
35
51
|
};
|
|
52
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
53
|
+
var ownKeys = function(o) {
|
|
54
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
55
|
+
var ar = [];
|
|
56
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
57
|
+
return ar;
|
|
58
|
+
};
|
|
59
|
+
return ownKeys(o);
|
|
60
|
+
};
|
|
61
|
+
return function (mod) {
|
|
62
|
+
if (mod && mod.__esModule) return mod;
|
|
63
|
+
var result = {};
|
|
64
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
65
|
+
__setModuleDefault(result, mod);
|
|
66
|
+
return result;
|
|
67
|
+
};
|
|
68
|
+
})();
|
|
36
69
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
70
|
exports.RuntimeEndpoint = void 0;
|
|
38
71
|
const jsiiDeprecationWarnings = require("../../.warnings.jsii.js");
|
|
39
72
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
40
73
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
41
|
-
const bedrockagentcore = require("aws-cdk-lib/aws-bedrockagentcore");
|
|
74
|
+
const bedrockagentcore = __importStar(require("aws-cdk-lib/aws-bedrockagentcore"));
|
|
42
75
|
const errors_1 = require("aws-cdk-lib/core/lib/errors");
|
|
43
76
|
const helpers_internal_1 = require("aws-cdk-lib/core/lib/helpers-internal");
|
|
44
77
|
const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource");
|
|
@@ -69,7 +102,7 @@ let RuntimeEndpoint = (() => {
|
|
|
69
102
|
RuntimeEndpoint = _classThis = _classDescriptor.value;
|
|
70
103
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
71
104
|
}
|
|
72
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.RuntimeEndpoint", version: "2.
|
|
105
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.RuntimeEndpoint", version: "2.258.0-alpha.0" };
|
|
73
106
|
/** Uniquely identifies this class. */
|
|
74
107
|
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-bedrock-agentcore-alpha.RuntimeEndpoint';
|
|
75
108
|
/**
|
|
@@ -378,4 +411,4 @@ let RuntimeEndpoint = (() => {
|
|
|
378
411
|
return RuntimeEndpoint = _classThis;
|
|
379
412
|
})();
|
|
380
413
|
exports.RuntimeEndpoint = RuntimeEndpoint;
|
|
381
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS1lbmRwb2ludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInJ1bnRpbWUtZW5kcG9pbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkNBQWlEO0FBQ2pELHFFQUFxRTtBQUNyRSx3REFBc0U7QUFDdEUsNEVBQTREO0FBQzVELDhFQUE4RTtBQUM5RSwwRUFBMEU7QUFHMUUsbUVBQThEO0FBQzlELDZEQUFpRjtBQWtEakY7OytFQUUrRTtBQUUvRTs7Ozs7O0dBTUc7SUFFVSxlQUFlOzRCQUQzQixvQ0FBa0I7Ozs7c0JBQ2tCLDJDQUFtQjsrQkFBM0IsU0FBUSxXQUFtQjs7OztZQUF4RCw2S0ErVkM7Ozs7O1FBOVZDLHNDQUFzQztRQUMvQixNQUFNLENBQVUscUJBQXFCLEdBQVcsc0RBQXNELENBQUM7UUFFOUc7Ozs7Ozs7O1dBUUc7UUFDSSxNQUFNLENBQUMsNkJBQTZCLENBQ3pDLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUFnQzs7Ozs7Ozs7OztZQUVoQyxNQUFNLG1DQUFvQyxTQUFRLDJDQUFtQjtnQkFDbkQsdUJBQXVCLEdBQUcsS0FBSyxDQUFDLHVCQUF1QixDQUFDO2dCQUN4RCxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztnQkFDbEMsZUFBZSxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUM7Z0JBQ3hDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO2dCQUNoQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztnQkFDdEIsV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7Z0JBQ2hDLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDO2dCQUNwQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztnQkFDNUIsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7Z0JBQzlCLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFB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QVMsRUFBRSxHQUFHO2lCQUNmLENBQUMsQ0FBQztnQkFFSCw2QkFBNkI7Z0JBQzdCLE1BQU0sa0JBQWtCLEdBQUcsSUFBQSx5Q0FBb0IsRUFDN0MsS0FBSyxFQUNMLHNCQUFzQixHQUFHLEdBQUcsRUFDNUIsMEJBQTBCLEVBQzFCLHNCQUFzQixHQUFHLGlHQUFpRyxDQUMzSCxDQUFDO2dCQUVGLHdDQUF3QztnQkFDeEMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLGlCQUFpQixFQUFFLEdBQUcsa0JBQWtCLENBQUMsQ0FBQztnQkFDbEUsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUMzQixNQUFNLElBQUksZ0NBQXVCLENBQUMsSUFBQSxzQkFBRyxFQUFBLHlCQUF5QixFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDMUYsQ0FBQztZQUNILENBQUM7U0FDRjs7WUE5VlUsdURBQWU7Ozs7O0FBQWYsMENBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUb2tlbiwgTGF6eSwgTmFtZXMgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBiZWRyb2NrYWdlbnRjb3JlIGZyb20gJ2F3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlJztcbmltcG9ydCB7IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvZXJyb3JzJztcbmltcG9ydCB7IGxpdCB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2hlbHBlcnMtaW50ZXJuYWwnO1xuaW1wb3J0IHsgYWRkQ29uc3RydWN0TWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB0eXBlIHsgSVJ1bnRpbWVFbmRwb2ludCwgUnVudGltZUVuZHBvaW50QXR0cmlidXRlcyB9IGZyb20gJy4vcnVudGltZS1lbmRwb2ludC1iYXNlJztcbmltcG9ydCB7IFJ1bnRpbWVFbmRwb2ludEJhc2UgfSBmcm9tICcuL3J1bnRpbWUtZW5kcG9pbnQtYmFzZSc7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZ0ZpZWxkLCB2YWxpZGF0ZUZpZWxkUGF0dGVybiB9IGZyb20gJy4vdmFsaWRhdGlvbi1oZWxwZXJzJztcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3BzXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYSBCZWRyb2NrIEFnZW50IENvcmUgUnVudGltZSBFbmRwb2ludCByZXNvdXJjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bnRpbWVFbmRwb2ludFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBhZ2VudCBydW50aW1lIGVuZHBvaW50XG4gICAqIFZhbGlkIGNoYXJhY3RlcnMgYXJlIGEteiwgQS1aLCAwLTksIF8gKHVuZGVyc2NvcmUpXG4gICAqIE11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciBhbmQgY2FuIGJlIHVwIHRvIDQ4IGNoYXJhY3RlcnMgbG9uZ1xuICAgKiBQYXR0ZXJuOiBeW2EtekEtWl1bYS16QS1aMC05X117MCw0N30kXG4gICAqIEBkZWZhdWx0IC0gYXV0byBnZW5lcmF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5kcG9pbnROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIGFnZW50IHJ1bnRpbWUgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBlbmRwb2ludFxuICAgKiBUaGlzIGlzIHRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgcnVudGltZSByZXNvdXJjZVxuICAgKiBQYXR0ZXJuOiBeW2EtekEtWl1bYS16QS1aMC05X117MCw5OX0tW2EtekEtWjAtOV17MTB9JFxuICAgKi9cbiAgcmVhZG9ubHkgYWdlbnRSdW50aW1lSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIGFnZW50IHJ1bnRpbWUgdG8gdXNlIGZvciB0aGlzIGVuZHBvaW50XG4gICAqIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBlbmRwb2ludCB3aWxsIHBvaW50IHRvIHZlcnNpb24gXCIxXCIgb2YgdGhlIHJ1bnRpbWUuXG4gICAqIFBhdHRlcm46IF4oWzEtOV1bMC05XXswLDR9KSRcbiAgICogQGRlZmF1bHQgXCIxXCJcbiAgICovXG4gIHJlYWRvbmx5IGFnZW50UnVudGltZVZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRlc2NyaXB0aW9uIGZvciB0aGUgYWdlbnQgcnVudGltZSBlbmRwb2ludFxuICAgKiBMZW5ndGggTWluaW11bTogMSAsICBNYXhpbXVtOiAyNTZcbiAgICogQGRlZmF1bHQgLSBObyBkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRhZ3MgZm9yIHRoZSBhZ2VudCBydW50aW1lIGVuZHBvaW50XG4gICAqIEEgbGlzdCBvZiBrZXk6dmFsdWUgcGFpcnMgb2YgdGFncyB0byBhcHBseSB0byB0aGlzIFJ1bnRpbWVFbmRwb2ludCByZXNvdXJjZVxuICAgKiBQYXR0ZXJuOiBeW2EtekEtWjAtOVxccy5fOi89K0AtXSokXG4gICAqIEBkZWZhdWx0IHt9IC0gbm8gdGFnc1xuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzc1xuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKipcbiAqIEJlZHJvY2sgQWdlbnQgQ29yZSBSdW50aW1lIEVuZHBvaW50XG4gKiBQcm92aWRlcyBhIHN0YWJsZSBlbmRwb2ludCBmb3IgaW52b2tpbmcgYWdlbnQgcnVudGltZXMgd2l0aCB2ZXJzaW9uaW5nIHN1cHBvcnRcbiAqXG4gKiBAcmVzb3VyY2UgQVdTOjpCZWRyb2NrQWdlbnRDb3JlOjpSdW50aW1lRW5kcG9pbnRcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9ydW50aW1lLWVuZHBvaW50Lmh0bWxcbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIFJ1bnRpbWVFbmRwb2ludCBleHRlbmRzIFJ1bnRpbWVFbmRwb2ludEJhc2Uge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1iZWRyb2NrLWFnZW50Y29yZS1hbHBoYS5SdW50aW1lRW5kcG9pbnQnO1xuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgQWdlbnQgUnVudGltZSBFbmRwb2ludCB1c2luZyBhdHRyaWJ1dGVzXG4gICAqIFRoaXMgYWxsb3dzIHlvdSB0byByZWZlcmVuY2UgYW4gQWdlbnQgUnVudGltZSBFbmRwb2ludCB0aGF0IHdhcyBjcmVhdGVkIG91dHNpZGUgb2YgQ0RLXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0IGlkXG4gICAqIEBwYXJhbSBhdHRycyBUaGUgYXR0cmlidXRlcyBvZiB0aGUgZXhpc3RpbmcgQWdlbnQgUnVudGltZSBFbmRwb2ludFxuICAgKiBAcmV0dXJucyBBbiBJUnVudGltZUVuZHBvaW50IGluc3RhbmNlIHJlcHJlc2VudGluZyB0aGUgaW1wb3J0ZWQgZW5kcG9pbnRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVJ1bnRpbWVFbmRwb2ludEF0dHJpYnV0ZXMoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGF0dHJzOiBSdW50aW1lRW5kcG9pbnRBdHRyaWJ1dGVzLFxuICApOiBJUnVudGltZUVuZHBvaW50IHtcbiAgICBjbGFzcyBJbXBvcnRlZEJlZHJvY2tBZ2VudFJ1bnRpbWVFbmRwb2ludCBleHRlbmRzIFJ1bnRpbWVFbmRwb2ludEJhc2Uge1xuICAgICAgcHVibGljIHJlYWRvbmx5IGFnZW50UnVudGltZUVuZHBvaW50QXJuID0gYXR0cnMuYWdlbnRSdW50aW1lRW5kcG9pbnRBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZW5kcG9pbnROYW1lID0gYXR0cnMuZW5kcG9pbnROYW1lO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGFnZW50UnVudGltZUFybiA9IGF0dHJzLmFnZW50UnVudGltZUFybjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbiA9IGF0dHJzLmRlc2NyaXB0aW9uO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHN0YXR1cyA9IGF0dHJzLnN0YXR1cztcbiAgICAgIHB1YmxpYyByZWFkb25seSBsaXZlVmVyc2lvbiA9IGF0dHJzLmxpdmVWZXJzaW9uO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHRhcmdldFZlcnNpb24gPSBhdHRycy50YXJnZXRWZXJzaW9uO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZWRBdCA9IGF0dHJzLmNyZWF0ZWRBdDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBlbmRwb2ludElkID0gYXR0cnMuZW5kcG9pbnRJZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBsYXN0VXBkYXRlZEF0ID0gYXR0cnMubGFzdFVwZGF0ZWRBdDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydGVkQmVkcm9ja0FnZW50UnVudGltZUVuZHBvaW50KHNjb3BlLCBpZCk7XG4gIH1cblxuICAvLyBQcm9wZXJ0aWVzIGZyb20gYmFzZSBpbnRlcmZhY2VcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGFnZW50IHJ1bnRpbWUgZW5kcG9pbnRcbiAgICogQGF0dHJpYnV0ZVxuICAgKiBAcmV0dXJucyBhIHRva2VuIHJlcHJlc2VudGluZyB0aGUgQVJOIG9mIHRoaXMgYWdlbnQgcnVudGltZSBlbmRwb2ludFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFnZW50UnVudGltZUVuZHBvaW50QXJuOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZW5kcG9pbnRcbiAgICogQGF0dHJpYnV0ZVxuICAgKiBAcmV0dXJucyBhIHRva2VuIHJlcHJlc2VudGluZyB0aGUgbmFtZSBvZiB0aGlzIGVuZHBvaW50XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZW5kcG9pbnROYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBhZ2VudCBydW50aW1lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGVuZHBvaW50XG4gICAqIEBhdHRyaWJ1dGVcbiAgICogQHJldHVybnMgYSB0b2tlbiByZXByZXNlbnRpbmcgdGhlIEFSTiBvZiB0aGUgYWdlbnQgcnVudGltZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFnZW50UnVudGltZUFybjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHN0YXR1cyBvZiB0aGUgZW5kcG9pbnRcbiAgICogQGF0dHJpYnV0ZVxuICAgKiBAcmV0dXJucyBhIHRva2VuIHJlcHJlc2VudGluZyB0aGUgc3RhdHVzIG9mIHRoaXMgZW5kcG9pbnRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgbGl2ZSB2ZXJzaW9uIG9mIHRoZSBlbmRwb2ludFxuICAgKiBAYXR0cmlidXRlXG4gICAqIEByZXR1cm5zIGEgdG9rZW4gcmVwcmVzZW50aW5nIHRoZSBsaXZlIHZlcnNpb24gb2YgdGhpcyBlbmRwb2ludFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGxpdmVWZXJzaW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHRhcmdldCB2ZXJzaW9uIG9mIHRoZSBlbmRwb2ludFxuICAgKiBAYXR0cmlidXRlXG4gICAqIEByZXR1cm5zIGEgdG9rZW4gcmVwcmVzZW50aW5nIHRoZSB0YXJnZXQgdmVyc2lvbiBvZiB0aGlzIGVuZHBvaW50XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGFyZ2V0VmVyc2lvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSB0aW1lc3RhbXAgd2hlbiB0aGUgZW5kcG9pbnQgd2FzIGNyZWF0ZWRcbiAgICogQGF0dHJpYnV0ZVxuICAgKiBAcmV0dXJucyBhIHRva2VuIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gdGltZXN0YW1wIG9mIHRoaXMgZW5kcG9pbnRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQXQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBkZXNjcmlwdGlvbiBmb3IgdGhlIGVuZHBvaW50XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHJ1bnRpbWUgZW5kcG9pbnRcbiAgICogQGF0dHJpYnV0ZVxuICAgKiBAcmV0dXJucyBhIHRva2VuIHJlcHJlc2VudGluZyB0aGUgSUQgb2YgdGhpcyBlbmRwb2ludFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVuZHBvaW50SWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgYWdlbnQgcnVudGltZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBlbmRwb2ludFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFnZW50UnVudGltZUlkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgYWdlbnQgcnVudGltZSB1c2VkIGJ5IHRoaXMgZW5kcG9pbnRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhZ2VudFJ1bnRpbWVWZXJzaW9uOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGVuIHRoaXMgZW5kcG9pbnQgd2FzIGxhc3QgdXBkYXRlZFxuICAgKiBAYXR0cmlidXRlXG4gICAqIEByZXR1cm5zIGEgdG9rZW4gcmVwcmVzZW50aW5nIHRoZSBsYXN0IHVwZGF0ZSB0aW1lc3RhbXAgb2YgdGhpcyBlbmRwb2ludFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGxhc3RVcGRhdGVkQXQ/OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludFJlc291cmNlOiBiZWRyb2NrYWdlbnRjb3JlLkNmblJ1bnRpbWVFbmRwb2ludDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUnVudGltZUVuZHBvaW50UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIC8vIE1heGltdW0gbmFtZSBsZW5ndGggb2YgNDggY2hhcmFjdGVyc1xuICAgICAgLy8gQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1iZWRyb2NrYWdlbnRjb3JlLXJ1bnRpbWVlbmRwb2ludC5odG1sI2Nmbi1iZWRyb2NrYWdlbnRjb3JlLXJ1bnRpbWVlbmRwb2ludC1uYW1lXG4gICAgICBwaHlzaWNhbE5hbWU6IHByb3BzLmVuZHBvaW50TmFtZSA/P1xuICAgICAgICBMYXp5LnN0cmluZyh7XG4gICAgICAgICAgcHJvZHVjZTogKCkgPT4gTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHsgbWF4TGVuZ3RoOiA0OCB9KSxcbiAgICAgICAgfSksXG4gICAgfSk7XG5cbiAgICAvLyBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIC8vIFNldCBhbmQgdmFsaWRhdGUgcHJvcGVydGllcyBpbW1lZGlhdGVseVxuICAgIHRoaXMuZW5kcG9pbnROYW1lID0gdGhpcy5waHlzaWNhbE5hbWU7XG4gICAgdGhpcy52YWxpZGF0ZUVuZHBvaW50TmFtZSgpO1xuXG4gICAgdGhpcy5hZ2VudFJ1bnRpbWVJZCA9IHByb3BzLmFnZW50UnVudGltZUlkO1xuICAgIHRoaXMudmFsaWRhdGVBZ2VudFJ1bnRpbWVJZCgpO1xuXG4gICAgdGhpcy5hZ2VudFJ1bnRpbWVWZXJzaW9uID0gcHJvcHMuYWdlbnRSdW50aW1lVmVyc2lvbiA/PyAnMSc7XG4gICAgdGhpcy52YWxpZGF0ZUFnZW50UnVudGltZVZlcnNpb24oKTtcblxuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBwcm9wcy5kZXNjcmlwdGlvbjtcbiAgICBpZiAodGhpcy5kZXNjcmlwdGlvbikge1xuICAgICAgdGhpcy52YWxpZGF0ZURlc2NyaXB0aW9uKCk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnRhZ3MpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVUYWdzKHByb3BzLnRhZ3MpO1xuICAgIH1cblxuICAgIGNvbnN0IGNmblByb3BzOiBiZWRyb2NrYWdlbnRjb3JlLkNmblJ1bnRpbWVFbmRwb2ludFByb3BzID0ge1xuICAgICAgbmFtZTogdGhpcy5lbmRwb2ludE5hbWUsXG4gICAgICBhZ2VudFJ1bnRpbWVJZDogTGF6eS5zdHJpbmcoe1xuICAgICAgICBwcm9kdWNlOiAoKSA9PiB0aGlzLnJlbmRlckFnZW50UnVudGltZUlkKCksXG4gICAgICB9KSxcbiAgICAgIGFnZW50UnVudGltZVZlcnNpb246IExhenkuc3RyaW5nKHtcbiAgICAgICAgcHJvZHVjZTogKCkgPT4gdGhpcy5yZW5kZXJBZ2VudFJ1bnRpbWVWZXJzaW9uKCksXG4gICAgICB9KSxcbiAgICAgIGRlc2NyaXB0aW9uOiBMYXp5LnN0cmluZyh7XG4gICAgICAgIHByb2R1Y2U6ICgpID0+IHRoaXMucmVuZGVyRGVzY3JpcHRpb24oKSxcbiAgICAgIH0pLFxuICAgICAgdGFnczogcHJvcHMudGFncyA/PyB7fSxcbiAgICB9O1xuXG4gICAgdGhpcy5lbmRwb2ludFJlc291cmNlID0gbmV3IGJlZHJvY2thZ2VudGNvcmUuQ2ZuUnVudGltZUVuZHBvaW50KHRoaXMsICdSZXNvdXJjZScsIGNmblByb3BzKTtcblxuICAgIHRoaXMuZW5kcG9pbnRJZCA9IHRoaXMuZW5kcG9pbnRSZXNvdXJjZS5hdHRySWQ7XG4gICAgdGhpcy5hZ2VudFJ1bnRpbWVFbmRwb2ludEFybiA9IHRoaXMuZW5kcG9pbnRSZXNvdXJjZS5hdHRyQWdlbnRSdW50aW1lRW5kcG9pbnRBcm47XG4gICAgdGhpcy5hZ2VudFJ1bnRpbWVBcm4gPSB0aGlzLmVuZHBvaW50UmVzb3VyY2UuYXR0ckFnZW50UnVudGltZUFybjtcbiAgICB0aGlzLnN0YXR1cyA9IHRoaXMuZW5kcG9pbnRSZXNvdXJjZS5hdHRyU3RhdHVzO1xuICAgIHRoaXMubGl2ZVZlcnNpb24gPSB0aGlzLmVuZHBvaW50UmVzb3VyY2UuYXR0ckxpdmVWZXJzaW9uO1xuICAgIHRoaXMudGFyZ2V0VmVyc2lvbiA9IHRoaXMuZW5kcG9pbnRSZXNvdXJjZS5hdHRyVGFyZ2V0VmVyc2lvbjtcbiAgICB0aGlzLmNyZWF0ZWRBdCA9IHRoaXMuZW5kcG9pbnRSZXNvdXJjZS5hdHRyQ3JlYXRlZEF0O1xuICAgIHRoaXMubGFzdFVwZGF0ZWRBdCA9IHRoaXMuZW5kcG9pbnRSZXNvdXJjZS5hdHRyTGFzdFVwZGF0ZWRBdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBhZ2VudCBydW50aW1lIElEIGZvciBDbG91ZEZvcm1hdGlvblxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgcmVuZGVyQWdlbnRSdW50aW1lSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hZ2VudFJ1bnRpbWVJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBhZ2VudCBydW50aW1lIHZlcnNpb24gZm9yIENsb3VkRm9ybWF0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJBZ2VudFJ1bnRpbWVWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYWdlbnRSdW50aW1lVmVyc2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBkZXNjcmlwdGlvbiBmb3IgQ2xvdWRGb3JtYXRpb25cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIHJlbmRlckRlc2NyaXB0aW9uKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZGVzY3JpcHRpb247XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBlbmRwb2ludCBuYW1lIGZvcm1hdFxuICAgKiBQYXR0ZXJuOiBeW2EtekEtWl1bYS16QS1aMC05X117MCw0N30kXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdmFsaWRhdGlvbiBmYWlsc1xuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUVuZHBvaW50TmFtZSgpOiB2b2lkIHtcbiAgICAvLyBTa2lwIHZhbGlkYXRpb24gaWYgdGhlIG5hbWUgY29udGFpbnMgQ0RLIHRva2VucyAodW5yZXNvbHZlZCB2YWx1ZXMpXG4gICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZCh0aGlzLmVuZHBvaW50TmFtZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBsZW5ndGhcbiAgICBjb25zdCBsZW5ndGhFcnJvcnMgPSB2YWxpZGF0ZVN0cmluZ0ZpZWxkKHtcbiAgICAgIHZhbHVlOiB0aGlzLmVuZHBvaW50TmFtZSxcbiAgICAgIGZpZWxkTmFtZTogJ0VuZHBvaW50IG5hbWUnLFxuICAgICAgbWluTGVuZ3RoOiAxLFxuICAgICAgbWF4TGVuZ3RoOiA0OCxcbiAgICB9KTtcblxuICAgIC8vIFZhbGlkYXRlIHBhdHRlcm5cbiAgICBjb25zdCBwYXR0ZXJuRXJyb3JzID0gdmFsaWRhdGVGaWVsZFBhdHRlcm4oXG4gICAgICB0aGlzLmVuZHBvaW50TmFtZSxcbiAgICAgICdFbmRwb2ludCBuYW1lJyxcbiAgICAgIC9eW2EtekEtWl1bYS16QS1aMC05X117MCw0N30kLyxcbiAgICAgICdFbmRwb2ludCBuYW1lIG11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciBhbmQgY29udGFpbiBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGFuZCB1bmRlcnNjb3JlcycsXG4gICAgKTtcblxuICAgIC8vIENvbWJpbmUgYW5kIHRocm93IGlmIGFueSBlcnJvcnNcbiAgICBjb25zdCBhbGxFcnJvcnMgPSBbLi4ubGVuZ3RoRXJyb3JzLCAuLi5wYXR0ZXJuRXJyb3JzXTtcbiAgICBpZiAoYWxsRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgSW52YWxpZEVuZHBvaW50TmFtZWAsIGFsbEVycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgZGVzY3JpcHRpb24gZm9ybWF0XG4gICAqIE11c3QgYmUgYmV0d2VlbiAxIGFuZCAyNTYgY2hhcmFjdGVycyAocGVyIENsb3VkRm9ybWF0aW9uIHNwZWNpZmljYXRpb24pXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdmFsaWRhdGlvbiBmYWlsc1xuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZURlc2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQodGhpcy5kZXNjcmlwdGlvbikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kZXNjcmlwdGlvbikge1xuICAgICAgY29uc3QgZXJyb3JzID0gdmFsaWRhdGVTdHJpbmdGaWVsZCh7XG4gICAgICAgIHZhbHVlOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgICBmaWVsZE5hbWU6ICdEZXNjcmlwdGlvbicsXG4gICAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgICAgbWF4TGVuZ3RoOiAyNTYsXG4gICAgICB9KTtcblxuICAgICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgSW52YWxpZEVuZHBvaW50RGVzY3JpcHRpb25gLCBlcnJvcnMuam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGFnZW50IHJ1bnRpbWUgSUQgZm9ybWF0XG4gICAqIFBhdHRlcm46IF5bYS16QS1aXVthLXpBLVowLTlfXXswLDk5fS1bYS16QS1aMC05XXsxMH0kXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdmFsaWRhdGlvbiBmYWlsc1xuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUFnZW50UnVudGltZUlkKCk6IHZvaWQge1xuICAgIC8vIFNraXAgdmFsaWRhdGlvbiBpZiB0aGUgSUQgY29udGFpbnMgQ0RLIHRva2VucyAodW5yZXNvbHZlZCB2YWx1ZXMpXG4gICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZCh0aGlzLmFnZW50UnVudGltZUlkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHBhdHRlcm4gb25seSAobm8gbGVuZ3RoIHZhbGlkYXRpb24gcGVyIEFXUyBzcGVjcylcbiAgICBjb25zdCBwYXR0ZXJuRXJyb3JzID0gdmFsaWRhdGVGaWVsZFBhdHRlcm4oXG4gICAgICB0aGlzLmFnZW50UnVudGltZUlkLFxuICAgICAgJ0FnZW50IHJ1bnRpbWUgSUQnLFxuICAgICAgL15bYS16QS1aXVthLXpBLVowLTlfXXswLDk5fS1bYS16QS1aMC05XXsxMH0kLyxcbiAgICAgICdBZ2VudCBydW50aW1lIElEIG11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciwgZm9sbG93ZWQgYnkgdXAgdG8gOTkgYWxwaGFudW1lcmljIG9yIHVuZGVyc2NvcmUgY2hhcmFjdGVycywgdGhlbiBhIGh5cGhlbiwgYW5kIGV4YWN0bHkgMTAgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMnLFxuICAgICk7XG5cbiAgICBpZiAocGF0dGVybkVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YEludmFsaWRBZ2VudFJ1bnRpbWVJZGAsIHBhdHRlcm5FcnJvcnMuam9pbignXFxuJykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGFnZW50IHJ1bnRpbWUgdmVyc2lvbiBmb3JtYXRcbiAgICogUGF0dGVybjogXihbMS05XVswLTldezAsNH0pJFxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHZhbGlkYXRpb24gZmFpbHNcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVBZ2VudFJ1bnRpbWVWZXJzaW9uKCk6IHZvaWQge1xuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQodGhpcy5hZ2VudFJ1bnRpbWVWZXJzaW9uKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHBhdHRlcm4gb25seSAobm8gbGVuZ3RoIHZhbGlkYXRpb24gcGVyIEFXUyBzcGVjcylcbiAgICBjb25zdCBwYXR0ZXJuRXJyb3JzID0gdmFsaWRhdGVGaWVsZFBhdHRlcm4oXG4gICAgICB0aGlzLmFnZW50UnVudGltZVZlcnNpb24sXG4gICAgICAnQWdlbnQgcnVudGltZSB2ZXJzaW9uJyxcbiAgICAgIC9eWzEtOV1cXGR7MCw0fSQvLFxuICAgICAgJ0FnZW50IHJ1bnRpbWUgdmVyc2lvbiBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMSBhbmQgOTk5OTknLFxuICAgICk7XG5cbiAgICBpZiAocGF0dGVybkVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YEludmFsaWRBZ2VudFJ1bnRpbWVWZXJzaW9uYCwgcGF0dGVybkVycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgdGFncyBmb3JtYXRcbiAgICogQHBhcmFtIHRhZ3MgVGhlIHRhZ3Mgb2JqZWN0IHRvIHZhbGlkYXRlXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdmFsaWRhdGlvbiBmYWlsc1xuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVRhZ3ModGFnczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRhZ3MpKSB7XG4gICAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKGtleSkgfHwgVG9rZW4uaXNVbnJlc29sdmVkKHZhbHVlKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgdGFnIGtleSBsZW5ndGhcbiAgICAgIGNvbnN0IGtleUxlbmd0aEVycm9ycyA9IHZhbGlkYXRlU3RyaW5nRmllbGQoe1xuICAgICAgICB2YWx1ZToga2V5LFxuICAgICAgICBmaWVsZE5hbWU6IGBUYWcga2V5IFwiJHtrZXl9XCJgLFxuICAgICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICAgIG1heExlbmd0aDogMjU2LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFZhbGlkYXRlIHRhZyBrZXkgcGF0dGVyblxuICAgICAgY29uc3Qga2V5UGF0dGVybkVycm9ycyA9IHZhbGlkYXRlRmllbGRQYXR0ZXJuKFxuICAgICAgICBrZXksXG4gICAgICAgIGBUYWcga2V5IFwiJHtrZXl9XCJgLFxuICAgICAgICAvXlthLXpBLVowLTlcXHMuXzovPStALV0qJC8sXG4gICAgICAgIGBUYWcga2V5IFwiJHtrZXl9XCIgY2FuIG9ubHkgY29udGFpbiBsZXR0ZXJzIChhLXosIEEtWiksIG51bWJlcnMgKDAtOSksIHNwYWNlcywgYW5kIHNwZWNpYWwgY2hhcmFjdGVycyAoLl86Lz0rQC0pYCxcbiAgICAgICk7XG5cbiAgICAgIC8vIENvbWJpbmUga2V5IGVycm9ycyBhbmQgdGhyb3cgaWYgYW55XG4gICAgICBjb25zdCBrZXlFcnJvcnMgPSBbLi4ua2V5TGVuZ3RoRXJyb3JzLCAuLi5rZXlQYXR0ZXJuRXJyb3JzXTtcbiAgICAgIGlmIChrZXlFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YEludmFsaWRFbmRwb2ludFRhZ0tleWAsIGtleUVycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgTnVsbEVuZHBvaW50VGFnVmFsdWVgLCBgVGFnIHZhbHVlIGZvciBrZXkgXCIke2tleX1cIiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWRgKTtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgdGFnIHZhbHVlIGxlbmd0aFxuICAgICAgY29uc3QgdmFsdWVMZW5ndGhFcnJvcnMgPSB2YWxpZGF0ZVN0cmluZ0ZpZWxkKHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBmaWVsZE5hbWU6IGBUYWcgdmFsdWUgZm9yIGtleSBcIiR7a2V5fVwiYCxcbiAgICAgICAgbWluTGVuZ3RoOiAwLFxuICAgICAgICBtYXhMZW5ndGg6IDI1NixcbiAgICAgIH0pO1xuXG4gICAgICAvLyBWYWxpZGF0ZSB0YWcgdmFsdWUgcGF0dGVyblxuICAgICAgY29uc3QgdmFsdWVQYXR0ZXJuRXJyb3JzID0gdmFsaWRhdGVGaWVsZFBhdHRlcm4oXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBgVGFnIHZhbHVlIGZvciBrZXkgXCIke2tleX1cImAsXG4gICAgICAgIC9eW2EtekEtWjAtOVxccy5fOi89K0AtXSokLyxcbiAgICAgICAgYFRhZyB2YWx1ZSBmb3Iga2V5IFwiJHtrZXl9XCIgY2FuIG9ubHkgY29udGFpbiBsZXR0ZXJzIChhLXosIEEtWiksIG51bWJlcnMgKDAtOSksIHNwYWNlcywgYW5kIHNwZWNpYWwgY2hhcmFjdGVycyAoLl86Lz0rQC0pYCxcbiAgICAgICk7XG5cbiAgICAgIC8vIENvbWJpbmUgdmFsdWUgZXJyb3JzIGFuZCB0aHJvdyBpZiBhbnlcbiAgICAgIGNvbnN0IHZhbHVlRXJyb3JzID0gWy4uLnZhbHVlTGVuZ3RoRXJyb3JzLCAuLi52YWx1ZVBhdHRlcm5FcnJvcnNdO1xuICAgICAgaWYgKHZhbHVlRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBJbnZhbGlkRW5kcG9pbnRUYWdWYWx1ZWAsIHZhbHVlRXJyb3JzLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
414
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS1lbmRwb2ludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInJ1bnRpbWUtZW5kcG9pbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkNBQWlEO0FBQ2pELG1GQUFxRTtBQUNyRSx3REFBc0U7QUFDdEUsNEVBQTREO0FBQzVELDhFQUE4RTtBQUM5RSwwRUFBMEU7QUFHMUUsbUVBQThEO0FBQzlELDZEQUFpRjtBQW1EakY7OytFQUUrRTtBQUUvRTs7Ozs7O0dBTUc7SUFNVSxlQUFlOzRCQUwzQixvQ0FBa0I7Ozs7c0JBS2tCLDJDQUFtQjsrQkFBM0IsU0FBUSxXQUFtQjs7OztZQUF4RCw2S0ErVkM7Ozs7O1FBOVZDLHNDQUFzQztRQUMvQixNQUFNLENBQVUscUJBQXFCLEdBQVcsc0RBQXNELENBQUM7UUFFOUc7Ozs7Ozs7O1dBUUc7UUFDSSxNQUFNLENBQUMsNkJBQTZCLENBQ3pDLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUFnQzs7Ozs7Ozs7OztZQUVoQyxNQUFNLG1DQUFvQyxTQUFRLDJDQUFtQjtnQkFDbkQsdUJBQXVCLEdBQUcsS0FBSyxDQUFDLHVCQUF1QixDQUFDO2dCQUN4RCxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztnQkFDbEMsZUFBZSxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUM7Z0JBQ3hDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO2dCQUNoQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztnQkFDdEIsV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7Z0JBQ2hDLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDO2dCQUNwQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztnQkFDNUIsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLENB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QUc7b0JBQ3ZDLFNBQVMsRUFBRSxDQUFDO29CQUNaLFNBQVMsRUFBRSxHQUFHO2lCQUNmLENBQUMsQ0FBQztnQkFFSCw2QkFBNkI7Z0JBQzdCLE1BQU0sa0JBQWtCLEdBQUcsSUFBQSx5Q0FBb0IsRUFDN0MsS0FBSyxFQUNMLHNCQUFzQixHQUFHLEdBQUcsRUFDNUIsMEJBQTBCLEVBQzFCLHNCQUFzQixHQUFHLGlHQUFpRyxDQUMzSCxDQUFDO2dCQUVGLHdDQUF3QztnQkFDeEMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLGlCQUFpQixFQUFFLEdBQUcsa0JBQWtCLENBQUMsQ0FBQztnQkFDbEUsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUMzQixNQUFNLElBQUksZ0NBQXVCLENBQUMsSUFBQSxzQkFBRyxFQUFBLHlCQUF5QixFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDMUYsQ0FBQztZQUNILENBQUM7U0FDRjs7WUE5VlUsdURBQWU7Ozs7O0FBQWYsMENBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUb2tlbiwgTGF6eSwgTmFtZXMgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBiZWRyb2NrYWdlbnRjb3JlIGZyb20gJ2F3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlJztcbmltcG9ydCB7IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvZXJyb3JzJztcbmltcG9ydCB7IGxpdCB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2hlbHBlcnMtaW50ZXJuYWwnO1xuaW1wb3J0IHsgYWRkQ29uc3RydWN0TWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB0eXBlIHsgSVJ1bnRpbWVFbmRwb2ludCwgUnVudGltZUVuZHBvaW50QXR0cmlidXRlcyB9IGZyb20gJy4vcnVudGltZS1lbmRwb2ludC1iYXNlJztcbmltcG9ydCB7IFJ1bnRpbWVFbmRwb2ludEJhc2UgfSBmcm9tICcuL3J1bnRpbWUtZW5kcG9pbnQtYmFzZSc7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZ0ZpZWxkLCB2YWxpZGF0ZUZpZWxkUGF0dGVybiB9IGZyb20gJy4vdmFsaWRhdGlvbi1oZWxwZXJzJztcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3BzXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYSBCZWRyb2NrIEFnZW50IENvcmUgUnVudGltZSBFbmRwb2ludCByZXNvdXJjZVxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBlcXVpdmFsZW50IGNvbnN0cnVjdCBmcm9tIGBhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZWAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdW50aW1lRW5kcG9pbnRQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgYWdlbnQgcnVudGltZSBlbmRwb2ludFxuICAgKiBWYWxpZCBjaGFyYWN0ZXJzIGFyZSBhLXosIEEtWiwgMC05LCBfICh1bmRlcnNjb3JlKVxuICAgKiBNdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIgYW5kIGNhbiBiZSB1cCB0byA0OCBjaGFyYWN0ZXJzIGxvbmdcbiAgICogUGF0dGVybjogXlthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9JFxuICAgKiBAZGVmYXVsdCAtIGF1dG8gZ2VuZXJhdGVcbiAgICovXG4gIHJlYWRvbmx5IGVuZHBvaW50TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBhZ2VudCBydW50aW1lIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgZW5kcG9pbnRcbiAgICogVGhpcyBpcyB0aGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHJ1bnRpbWUgcmVzb3VyY2VcbiAgICogUGF0dGVybjogXlthLXpBLVpdW2EtekEtWjAtOV9dezAsOTl9LVthLXpBLVowLTldezEwfSRcbiAgICovXG4gIHJlYWRvbmx5IGFnZW50UnVudGltZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBhZ2VudCBydW50aW1lIHRvIHVzZSBmb3IgdGhpcyBlbmRwb2ludFxuICAgKiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgZW5kcG9pbnQgd2lsbCBwb2ludCB0byB2ZXJzaW9uIFwiMVwiIG9mIHRoZSBydW50aW1lLlxuICAgKiBQYXR0ZXJuOiBeKFsxLTldWzAtOV17MCw0fSkkXG4gICAqIEBkZWZhdWx0IFwiMVwiXG4gICAqL1xuICByZWFkb25seSBhZ2VudFJ1bnRpbWVWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBkZXNjcmlwdGlvbiBmb3IgdGhlIGFnZW50IHJ1bnRpbWUgZW5kcG9pbnRcbiAgICogTGVuZ3RoIE1pbmltdW06IDEgLCAgTWF4aW11bTogMjU2XG4gICAqIEBkZWZhdWx0IC0gTm8gZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUYWdzIGZvciB0aGUgYWdlbnQgcnVudGltZSBlbmRwb2ludFxuICAgKiBBIGxpc3Qgb2Yga2V5OnZhbHVlIHBhaXJzIG9mIHRhZ3MgdG8gYXBwbHkgdG8gdGhpcyBSdW50aW1lRW5kcG9pbnQgcmVzb3VyY2VcbiAgICogUGF0dGVybjogXlthLXpBLVowLTlcXHMuXzovPStALV0qJFxuICAgKiBAZGVmYXVsdCB7fSAtIG5vIHRhZ3NcbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyoqXG4gKiBCZWRyb2NrIEFnZW50IENvcmUgUnVudGltZSBFbmRwb2ludFxuICogUHJvdmlkZXMgYSBzdGFibGUgZW5kcG9pbnQgZm9yIGludm9raW5nIGFnZW50IHJ1bnRpbWVzIHdpdGggdmVyc2lvbmluZyBzdXBwb3J0XG4gKlxuICogQHJlc291cmNlIEFXUzo6QmVkcm9ja0FnZW50Q29yZTo6UnVudGltZUVuZHBvaW50XG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvcnVudGltZS1lbmRwb2ludC5odG1sXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbi8qKlxuICogVGhpcyBBUEkgaGFzIGJlZW4gZ3JhZHVhdGVkIHRvIHN0YWJsZS5cbiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgZXF1aXZhbGVudCBjb25zdHJ1Y3QgZnJvbSBgYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmVgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBSdW50aW1lRW5kcG9pbnQgZXh0ZW5kcyBSdW50aW1lRW5kcG9pbnRCYXNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtYmVkcm9jay1hZ2VudGNvcmUtYWxwaGEuUnVudGltZUVuZHBvaW50JztcblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIEFnZW50IFJ1bnRpbWUgRW5kcG9pbnQgdXNpbmcgYXR0cmlidXRlc1xuICAgKiBUaGlzIGFsbG93cyB5b3UgdG8gcmVmZXJlbmNlIGFuIEFnZW50IFJ1bnRpbWUgRW5kcG9pbnQgdGhhdCB3YXMgY3JlYXRlZCBvdXRzaWRlIG9mIENES1xuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIGNvbnN0cnVjdCBzY29wZVxuICAgKiBAcGFyYW0gaWQgVGhlIGNvbnN0cnVjdCBpZFxuICAgKiBAcGFyYW0gYXR0cnMgVGhlIGF0dHJpYnV0ZXMgb2YgdGhlIGV4aXN0aW5nIEFnZW50IFJ1bnRpbWUgRW5kcG9pbnRcbiAgICogQHJldHVybnMgQW4gSVJ1bnRpbWVFbmRwb2ludCBpbnN0YW5jZSByZXByZXNlbnRpbmcgdGhlIGltcG9ydGVkIGVuZHBvaW50XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21SdW50aW1lRW5kcG9pbnRBdHRyaWJ1dGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBhdHRyczogUnVudGltZUVuZHBvaW50QXR0cmlidXRlcyxcbiAgKTogSVJ1bnRpbWVFbmRwb2ludCB7XG4gICAgY2xhc3MgSW1wb3J0ZWRCZWRyb2NrQWdlbnRSdW50aW1lRW5kcG9pbnQgZXh0ZW5kcyBSdW50aW1lRW5kcG9pbnRCYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBhZ2VudFJ1bnRpbWVFbmRwb2ludEFybiA9IGF0dHJzLmFnZW50UnVudGltZUVuZHBvaW50QXJuO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGVuZHBvaW50TmFtZSA9IGF0dHJzLmVuZHBvaW50TmFtZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBhZ2VudFJ1bnRpbWVBcm4gPSBhdHRycy5hZ2VudFJ1bnRpbWVBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZGVzY3JpcHRpb24gPSBhdHRycy5kZXNjcmlwdGlvbjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBzdGF0dXMgPSBhdHRycy5zdGF0dXM7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgbGl2ZVZlcnNpb24gPSBhdHRycy5saXZlVmVyc2lvbjtcbiAgICAgIHB1YmxpYyByZWFkb25seSB0YXJnZXRWZXJzaW9uID0gYXR0cnMudGFyZ2V0VmVyc2lvbjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQXQgPSBhdHRycy5jcmVhdGVkQXQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZW5kcG9pbnRJZCA9IGF0dHJzLmVuZHBvaW50SWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgbGFzdFVwZGF0ZWRBdCA9IGF0dHJzLmxhc3RVcGRhdGVkQXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnRlZEJlZHJvY2tBZ2VudFJ1bnRpbWVFbmRwb2ludChzY29wZSwgaWQpO1xuICB9XG5cbiAgLy8gUHJvcGVydGllcyBmcm9tIGJhc2UgaW50ZXJmYWNlXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBhZ2VudCBydW50aW1lIGVuZHBvaW50XG4gICAqIEBhdHRyaWJ1dGVcbiAgICogQHJldHVybnMgYSB0b2tlbiByZXByZXNlbnRpbmcgdGhlIEFSTiBvZiB0aGlzIGFnZW50IHJ1bnRpbWUgZW5kcG9pbnRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhZ2VudFJ1bnRpbWVFbmRwb2ludEFybjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGVuZHBvaW50XG4gICAqIEBhdHRyaWJ1dGVcbiAgICogQHJldHVybnMgYSB0b2tlbiByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhpcyBlbmRwb2ludFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVuZHBvaW50TmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgYWdlbnQgcnVudGltZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBlbmRwb2ludFxuICAgKiBAYXR0cmlidXRlXG4gICAqIEByZXR1cm5zIGEgdG9rZW4gcmVwcmVzZW50aW5nIHRoZSBBUk4gb2YgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhZ2VudFJ1bnRpbWVBcm46IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBzdGF0dXMgb2YgdGhlIGVuZHBvaW50XG4gICAqIEBhdHRyaWJ1dGVcbiAgICogQHJldHVybnMgYSB0b2tlbiByZXByZXNlbnRpbmcgdGhlIHN0YXR1cyBvZiB0aGlzIGVuZHBvaW50XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGxpdmUgdmVyc2lvbiBvZiB0aGUgZW5kcG9pbnRcbiAgICogQGF0dHJpYnV0ZVxuICAgKiBAcmV0dXJucyBhIHRva2VuIHJlcHJlc2VudGluZyB0aGUgbGl2ZSB2ZXJzaW9uIG9mIHRoaXMgZW5kcG9pbnRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBsaXZlVmVyc2lvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSB0YXJnZXQgdmVyc2lvbiBvZiB0aGUgZW5kcG9pbnRcbiAgICogQGF0dHJpYnV0ZVxuICAgKiBAcmV0dXJucyBhIHRva2VuIHJlcHJlc2VudGluZyB0aGUgdGFyZ2V0IHZlcnNpb24gb2YgdGhpcyBlbmRwb2ludFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRhcmdldFZlcnNpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgdGltZXN0YW1wIHdoZW4gdGhlIGVuZHBvaW50IHdhcyBjcmVhdGVkXG4gICAqIEBhdHRyaWJ1dGVcbiAgICogQHJldHVybnMgYSB0b2tlbiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIHRpbWVzdGFtcCBvZiB0aGlzIGVuZHBvaW50XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEF0Pzogc3RyaW5nO1xuICAvKipcbiAgICogT3B0aW9uYWwgZGVzY3JpcHRpb24gZm9yIHRoZSBlbmRwb2ludFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBydW50aW1lIGVuZHBvaW50XG4gICAqIEBhdHRyaWJ1dGVcbiAgICogQHJldHVybnMgYSB0b2tlbiByZXByZXNlbnRpbmcgdGhlIElEIG9mIHRoaXMgZW5kcG9pbnRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlbmRwb2ludElkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIGFnZW50IHJ1bnRpbWUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZW5kcG9pbnRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhZ2VudFJ1bnRpbWVJZDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIGFnZW50IHJ1bnRpbWUgdXNlZCBieSB0aGlzIGVuZHBvaW50XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYWdlbnRSdW50aW1lVmVyc2lvbjogc3RyaW5nO1xuICAvKipcbiAgICogV2hlbiB0aGlzIGVuZHBvaW50IHdhcyBsYXN0IHVwZGF0ZWRcbiAgICogQGF0dHJpYnV0ZVxuICAgKiBAcmV0dXJucyBhIHRva2VuIHJlcHJlc2VudGluZyB0aGUgbGFzdCB1cGRhdGUgdGltZXN0YW1wIG9mIHRoaXMgZW5kcG9pbnRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBsYXN0VXBkYXRlZEF0Pzogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZW5kcG9pbnRSZXNvdXJjZTogYmVkcm9ja2FnZW50Y29yZS5DZm5SdW50aW1lRW5kcG9pbnQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJ1bnRpbWVFbmRwb2ludFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAvLyBNYXhpbXVtIG5hbWUgbGVuZ3RoIG9mIDQ4IGNoYXJhY3RlcnNcbiAgICAgIC8vIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYmVkcm9ja2FnZW50Y29yZS1ydW50aW1lZW5kcG9pbnQuaHRtbCNjZm4tYmVkcm9ja2FnZW50Y29yZS1ydW50aW1lZW5kcG9pbnQtbmFtZVxuICAgICAgcGh5c2ljYWxOYW1lOiBwcm9wcy5lbmRwb2ludE5hbWUgPz9cbiAgICAgICAgTGF6eS5zdHJpbmcoe1xuICAgICAgICAgIHByb2R1Y2U6ICgpID0+IE5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7IG1heExlbmd0aDogNDggfSksXG4gICAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgLy8gQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICAvLyBTZXQgYW5kIHZhbGlkYXRlIHByb3BlcnRpZXMgaW1tZWRpYXRlbHlcbiAgICB0aGlzLmVuZHBvaW50TmFtZSA9IHRoaXMucGh5c2ljYWxOYW1lO1xuICAgIHRoaXMudmFsaWRhdGVFbmRwb2ludE5hbWUoKTtcblxuICAgIHRoaXMuYWdlbnRSdW50aW1lSWQgPSBwcm9wcy5hZ2VudFJ1bnRpbWVJZDtcbiAgICB0aGlzLnZhbGlkYXRlQWdlbnRSdW50aW1lSWQoKTtcblxuICAgIHRoaXMuYWdlbnRSdW50aW1lVmVyc2lvbiA9IHByb3BzLmFnZW50UnVudGltZVZlcnNpb24gPz8gJzEnO1xuICAgIHRoaXMudmFsaWRhdGVBZ2VudFJ1bnRpbWVWZXJzaW9uKCk7XG5cbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gcHJvcHMuZGVzY3JpcHRpb247XG4gICAgaWYgKHRoaXMuZGVzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMudmFsaWRhdGVEZXNjcmlwdGlvbigpO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy50YWdzKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlVGFncyhwcm9wcy50YWdzKTtcbiAgICB9XG5cbiAgICBjb25zdCBjZm5Qcm9wczogYmVkcm9ja2FnZW50Y29yZS5DZm5SdW50aW1lRW5kcG9pbnRQcm9wcyA9IHtcbiAgICAgIG5hbWU6IHRoaXMuZW5kcG9pbnROYW1lLFxuICAgICAgYWdlbnRSdW50aW1lSWQ6IExhenkuc3RyaW5nKHtcbiAgICAgICAgcHJvZHVjZTogKCkgPT4gdGhpcy5yZW5kZXJBZ2VudFJ1bnRpbWVJZCgpLFxuICAgICAgfSksXG4gICAgICBhZ2VudFJ1bnRpbWVWZXJzaW9uOiBMYXp5LnN0cmluZyh7XG4gICAgICAgIHByb2R1Y2U6ICgpID0+IHRoaXMucmVuZGVyQWdlbnRSdW50aW1lVmVyc2lvbigpLFxuICAgICAgfSksXG4gICAgICBkZXNjcmlwdGlvbjogTGF6eS5zdHJpbmcoe1xuICAgICAgICBwcm9kdWNlOiAoKSA9PiB0aGlzLnJlbmRlckRlc2NyaXB0aW9uKCksXG4gICAgICB9KSxcbiAgICAgIHRhZ3M6IHByb3BzLnRhZ3MgPz8ge30sXG4gICAgfTtcblxuICAgIHRoaXMuZW5kcG9pbnRSZXNvdXJjZSA9IG5ldyBiZWRyb2NrYWdlbnRjb3JlLkNmblJ1bnRpbWVFbmRwb2ludCh0aGlzLCAnUmVzb3VyY2UnLCBjZm5Qcm9wcyk7XG5cbiAgICB0aGlzLmVuZHBvaW50SWQgPSB0aGlzLmVuZHBvaW50UmVzb3VyY2UuYXR0cklkO1xuICAgIHRoaXMuYWdlbnRSdW50aW1lRW5kcG9pbnRBcm4gPSB0aGlzLmVuZHBvaW50UmVzb3VyY2UuYXR0ckFnZW50UnVudGltZUVuZHBvaW50QXJuO1xuICAgIHRoaXMuYWdlbnRSdW50aW1lQXJuID0gdGhpcy5lbmRwb2ludFJlc291cmNlLmF0dHJBZ2VudFJ1bnRpbWVBcm47XG4gICAgdGhpcy5zdGF0dXMgPSB0aGlzLmVuZHBvaW50UmVzb3VyY2UuYXR0clN0YXR1cztcbiAgICB0aGlzLmxpdmVWZXJzaW9uID0gdGhpcy5lbmRwb2ludFJlc291cmNlLmF0dHJMaXZlVmVyc2lvbjtcbiAgICB0aGlzLnRhcmdldFZlcnNpb24gPSB0aGlzLmVuZHBvaW50UmVzb3VyY2UuYXR0clRhcmdldFZlcnNpb247XG4gICAgdGhpcy5jcmVhdGVkQXQgPSB0aGlzLmVuZHBvaW50UmVzb3VyY2UuYXR0ckNyZWF0ZWRBdDtcbiAgICB0aGlzLmxhc3RVcGRhdGVkQXQgPSB0aGlzLmVuZHBvaW50UmVzb3VyY2UuYXR0ckxhc3RVcGRhdGVkQXQ7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgYWdlbnQgcnVudGltZSBJRCBmb3IgQ2xvdWRGb3JtYXRpb25cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIHJlbmRlckFnZW50UnVudGltZUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYWdlbnRSdW50aW1lSWQ7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgYWdlbnQgcnVudGltZSB2ZXJzaW9uIGZvciBDbG91ZEZvcm1hdGlvblxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgcmVuZGVyQWdlbnRSdW50aW1lVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFnZW50UnVudGltZVZlcnNpb247XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgZGVzY3JpcHRpb24gZm9yIENsb3VkRm9ybWF0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJEZXNjcmlwdGlvbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmRlc2NyaXB0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgZW5kcG9pbnQgbmFtZSBmb3JtYXRcbiAgICogUGF0dGVybjogXlthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9JFxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHZhbGlkYXRpb24gZmFpbHNcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVFbmRwb2ludE5hbWUoKTogdm9pZCB7XG4gICAgLy8gU2tpcCB2YWxpZGF0aW9uIGlmIHRoZSBuYW1lIGNvbnRhaW5zIENESyB0b2tlbnMgKHVucmVzb2x2ZWQgdmFsdWVzKVxuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQodGhpcy5lbmRwb2ludE5hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgbGVuZ3RoXG4gICAgY29uc3QgbGVuZ3RoRXJyb3JzID0gdmFsaWRhdGVTdHJpbmdGaWVsZCh7XG4gICAgICB2YWx1ZTogdGhpcy5lbmRwb2ludE5hbWUsXG4gICAgICBmaWVsZE5hbWU6ICdFbmRwb2ludCBuYW1lJyxcbiAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgIG1heExlbmd0aDogNDgsXG4gICAgfSk7XG5cbiAgICAvLyBWYWxpZGF0ZSBwYXR0ZXJuXG4gICAgY29uc3QgcGF0dGVybkVycm9ycyA9IHZhbGlkYXRlRmllbGRQYXR0ZXJuKFxuICAgICAgdGhpcy5lbmRwb2ludE5hbWUsXG4gICAgICAnRW5kcG9pbnQgbmFtZScsXG4gICAgICAvXlthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9JC8sXG4gICAgICAnRW5kcG9pbnQgbmFtZSBtdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIgYW5kIGNvbnRhaW4gb25seSBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgdW5kZXJzY29yZXMnLFxuICAgICk7XG5cbiAgICAvLyBDb21iaW5lIGFuZCB0aHJvdyBpZiBhbnkgZXJyb3JzXG4gICAgY29uc3QgYWxsRXJyb3JzID0gWy4uLmxlbmd0aEVycm9ycywgLi4ucGF0dGVybkVycm9yc107XG4gICAgaWYgKGFsbEVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YEludmFsaWRFbmRwb2ludE5hbWVgLCBhbGxFcnJvcnMuam9pbignXFxuJykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGRlc2NyaXB0aW9uIGZvcm1hdFxuICAgKiBNdXN0IGJlIGJldHdlZW4gMSBhbmQgMjU2IGNoYXJhY3RlcnMgKHBlciBDbG91ZEZvcm1hdGlvbiBzcGVjaWZpY2F0aW9uKVxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHZhbGlkYXRpb24gZmFpbHNcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVEZXNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKHRoaXMuZGVzY3JpcHRpb24pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGVzY3JpcHRpb24pIHtcbiAgICAgIGNvbnN0IGVycm9ycyA9IHZhbGlkYXRlU3RyaW5nRmllbGQoe1xuICAgICAgICB2YWx1ZTogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgICAgZmllbGROYW1lOiAnRGVzY3JpcHRpb24nLFxuICAgICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICAgIG1heExlbmd0aDogMjU2LFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YEludmFsaWRFbmRwb2ludERlc2NyaXB0aW9uYCwgZXJyb3JzLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBhZ2VudCBydW50aW1lIElEIGZvcm1hdFxuICAgKiBQYXR0ZXJuOiBeW2EtekEtWl1bYS16QS1aMC05X117MCw5OX0tW2EtekEtWjAtOV17MTB9JFxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHZhbGlkYXRpb24gZmFpbHNcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVBZ2VudFJ1bnRpbWVJZCgpOiB2b2lkIHtcbiAgICAvLyBTa2lwIHZhbGlkYXRpb24gaWYgdGhlIElEIGNvbnRhaW5zIENESyB0b2tlbnMgKHVucmVzb2x2ZWQgdmFsdWVzKVxuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQodGhpcy5hZ2VudFJ1bnRpbWVJZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBwYXR0ZXJuIG9ubHkgKG5vIGxlbmd0aCB2YWxpZGF0aW9uIHBlciBBV1Mgc3BlY3MpXG4gICAgY29uc3QgcGF0dGVybkVycm9ycyA9IHZhbGlkYXRlRmllbGRQYXR0ZXJuKFxuICAgICAgdGhpcy5hZ2VudFJ1bnRpbWVJZCxcbiAgICAgICdBZ2VudCBydW50aW1lIElEJyxcbiAgICAgIC9eW2EtekEtWl1bYS16QS1aMC05X117MCw5OX0tW2EtekEtWjAtOV17MTB9JC8sXG4gICAgICAnQWdlbnQgcnVudGltZSBJRCBtdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIsIGZvbGxvd2VkIGJ5IHVwIHRvIDk5IGFscGhhbnVtZXJpYyBvciB1bmRlcnNjb3JlIGNoYXJhY3RlcnMsIHRoZW4gYSBoeXBoZW4sIGFuZCBleGFjdGx5IDEwIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzJyxcbiAgICApO1xuXG4gICAgaWYgKHBhdHRlcm5FcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBJbnZhbGlkQWdlbnRSdW50aW1lSWRgLCBwYXR0ZXJuRXJyb3JzLmpvaW4oJ1xcbicpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBhZ2VudCBydW50aW1lIHZlcnNpb24gZm9ybWF0XG4gICAqIFBhdHRlcm46IF4oWzEtOV1bMC05XXswLDR9KSRcbiAgICogQHRocm93cyBFcnJvciBpZiB2YWxpZGF0aW9uIGZhaWxzXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlQWdlbnRSdW50aW1lVmVyc2lvbigpOiB2b2lkIHtcbiAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKHRoaXMuYWdlbnRSdW50aW1lVmVyc2lvbikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBwYXR0ZXJuIG9ubHkgKG5vIGxlbmd0aCB2YWxpZGF0aW9uIHBlciBBV1Mgc3BlY3MpXG4gICAgY29uc3QgcGF0dGVybkVycm9ycyA9IHZhbGlkYXRlRmllbGRQYXR0ZXJuKFxuICAgICAgdGhpcy5hZ2VudFJ1bnRpbWVWZXJzaW9uLFxuICAgICAgJ0FnZW50IHJ1bnRpbWUgdmVyc2lvbicsXG4gICAgICAvXlsxLTldXFxkezAsNH0kLyxcbiAgICAgICdBZ2VudCBydW50aW1lIHZlcnNpb24gbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDEgYW5kIDk5OTk5JyxcbiAgICApO1xuXG4gICAgaWYgKHBhdHRlcm5FcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBJbnZhbGlkQWdlbnRSdW50aW1lVmVyc2lvbmAsIHBhdHRlcm5FcnJvcnMuam9pbignXFxuJykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIHRhZ3MgZm9ybWF0XG4gICAqIEBwYXJhbSB0YWdzIFRoZSB0YWdzIG9iamVjdCB0byB2YWxpZGF0ZVxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHZhbGlkYXRpb24gZmFpbHNcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVUYWdzKHRhZ3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0YWdzKSkge1xuICAgICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChrZXkpIHx8IFRva2VuLmlzVW5yZXNvbHZlZCh2YWx1ZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIHRhZyBrZXkgbGVuZ3RoXG4gICAgICBjb25zdCBrZXlMZW5ndGhFcnJvcnMgPSB2YWxpZGF0ZVN0cmluZ0ZpZWxkKHtcbiAgICAgICAgdmFsdWU6IGtleSxcbiAgICAgICAgZmllbGROYW1lOiBgVGFnIGtleSBcIiR7a2V5fVwiYCxcbiAgICAgICAgbWluTGVuZ3RoOiAxLFxuICAgICAgICBtYXhMZW5ndGg6IDI1NixcbiAgICAgIH0pO1xuXG4gICAgICAvLyBWYWxpZGF0ZSB0YWcga2V5IHBhdHRlcm5cbiAgICAgIGNvbnN0IGtleVBhdHRlcm5FcnJvcnMgPSB2YWxpZGF0ZUZpZWxkUGF0dGVybihcbiAgICAgICAga2V5LFxuICAgICAgICBgVGFnIGtleSBcIiR7a2V5fVwiYCxcbiAgICAgICAgL15bYS16QS1aMC05XFxzLl86Lz0rQC1dKiQvLFxuICAgICAgICBgVGFnIGtleSBcIiR7a2V5fVwiIGNhbiBvbmx5IGNvbnRhaW4gbGV0dGVycyAoYS16LCBBLVopLCBudW1iZXJzICgwLTkpLCBzcGFjZXMsIGFuZCBzcGVjaWFsIGNoYXJhY3RlcnMgKC5fOi89K0AtKWAsXG4gICAgICApO1xuXG4gICAgICAvLyBDb21iaW5lIGtleSBlcnJvcnMgYW5kIHRocm93IGlmIGFueVxuICAgICAgY29uc3Qga2V5RXJyb3JzID0gWy4uLmtleUxlbmd0aEVycm9ycywgLi4ua2V5UGF0dGVybkVycm9yc107XG4gICAgICBpZiAoa2V5RXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBJbnZhbGlkRW5kcG9pbnRUYWdLZXlgLCBrZXlFcnJvcnMuam9pbignXFxuJykpO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YE51bGxFbmRwb2ludFRhZ1ZhbHVlYCwgYFRhZyB2YWx1ZSBmb3Iga2V5IFwiJHtrZXl9XCIgY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkYCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIHRhZyB2YWx1ZSBsZW5ndGhcbiAgICAgIGNvbnN0IHZhbHVlTGVuZ3RoRXJyb3JzID0gdmFsaWRhdGVTdHJpbmdGaWVsZCh7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgZmllbGROYW1lOiBgVGFnIHZhbHVlIGZvciBrZXkgXCIke2tleX1cImAsXG4gICAgICAgIG1pbkxlbmd0aDogMCxcbiAgICAgICAgbWF4TGVuZ3RoOiAyNTYsXG4gICAgICB9KTtcblxuICAgICAgLy8gVmFsaWRhdGUgdGFnIHZhbHVlIHBhdHRlcm5cbiAgICAgIGNvbnN0IHZhbHVlUGF0dGVybkVycm9ycyA9IHZhbGlkYXRlRmllbGRQYXR0ZXJuKFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgYFRhZyB2YWx1ZSBmb3Iga2V5IFwiJHtrZXl9XCJgLFxuICAgICAgICAvXlthLXpBLVowLTlcXHMuXzovPStALV0qJC8sXG4gICAgICAgIGBUYWcgdmFsdWUgZm9yIGtleSBcIiR7a2V5fVwiIGNhbiBvbmx5IGNvbnRhaW4gbGV0dGVycyAoYS16LCBBLVopLCBudW1iZXJzICgwLTkpLCBzcGFjZXMsIGFuZCBzcGVjaWFsIGNoYXJhY3RlcnMgKC5fOi89K0AtKWAsXG4gICAgICApO1xuXG4gICAgICAvLyBDb21iaW5lIHZhbHVlIGVycm9ycyBhbmQgdGhyb3cgaWYgYW55XG4gICAgICBjb25zdCB2YWx1ZUVycm9ycyA9IFsuLi52YWx1ZUxlbmd0aEVycm9ycywgLi4udmFsdWVQYXR0ZXJuRXJyb3JzXTtcbiAgICAgIGlmICh2YWx1ZUVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgSW52YWxpZEVuZHBvaW50VGFnVmFsdWVgLCB2YWx1ZUVycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
|
package/lib/runtime/runtime.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ import { RuntimeNetworkConfiguration } from '../network/network-configuration';
|
|
|
14
14
|
*****************************************************************************/
|
|
15
15
|
/**
|
|
16
16
|
* Properties for creating a Bedrock Agent Core Runtime resource
|
|
17
|
+
* @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
|
|
17
18
|
*/
|
|
18
19
|
export interface RuntimeProps {
|
|
19
20
|
/**
|
|
@@ -104,6 +105,7 @@ export interface RuntimeProps {
|
|
|
104
105
|
}
|
|
105
106
|
/**
|
|
106
107
|
* Options for adding an endpoint to the runtime
|
|
108
|
+
* @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
|
|
107
109
|
*/
|
|
108
110
|
export interface AddEndpointOptions {
|
|
109
111
|
/**
|
package/lib/runtime/runtime.js
CHANGED
|
@@ -1,4 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
2
18
|
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
3
19
|
var useValue = arguments.length > 2;
|
|
4
20
|
for (var i = 0; i < initializers.length; i++) {
|
|
@@ -33,14 +49,31 @@ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn,
|
|
|
33
49
|
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
34
50
|
done = true;
|
|
35
51
|
};
|
|
52
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
53
|
+
var ownKeys = function(o) {
|
|
54
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
55
|
+
var ar = [];
|
|
56
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
57
|
+
return ar;
|
|
58
|
+
};
|
|
59
|
+
return ownKeys(o);
|
|
60
|
+
};
|
|
61
|
+
return function (mod) {
|
|
62
|
+
if (mod && mod.__esModule) return mod;
|
|
63
|
+
var result = {};
|
|
64
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
65
|
+
__setModuleDefault(result, mod);
|
|
66
|
+
return result;
|
|
67
|
+
};
|
|
68
|
+
})();
|
|
36
69
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
70
|
exports.Runtime = void 0;
|
|
38
71
|
const jsiiDeprecationWarnings = require("../../.warnings.jsii.js");
|
|
39
72
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
40
73
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
41
|
-
const bedrockagentcore = require("aws-cdk-lib/aws-bedrockagentcore");
|
|
42
|
-
const ec2 = require("aws-cdk-lib/aws-ec2");
|
|
43
|
-
const iam = require("aws-cdk-lib/aws-iam");
|
|
74
|
+
const bedrockagentcore = __importStar(require("aws-cdk-lib/aws-bedrockagentcore"));
|
|
75
|
+
const ec2 = __importStar(require("aws-cdk-lib/aws-ec2"));
|
|
76
|
+
const iam = __importStar(require("aws-cdk-lib/aws-iam"));
|
|
44
77
|
const errors_1 = require("aws-cdk-lib/core/lib/errors");
|
|
45
78
|
const helpers_internal_1 = require("aws-cdk-lib/core/lib/helpers-internal");
|
|
46
79
|
const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource");
|
|
@@ -94,7 +127,7 @@ let Runtime = (() => {
|
|
|
94
127
|
Runtime = _classThis = _classDescriptor.value;
|
|
95
128
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
96
129
|
}
|
|
97
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.Runtime", version: "2.
|
|
130
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.Runtime", version: "2.258.0-alpha.0" };
|
|
98
131
|
/** Uniquely identifies this class. */
|
|
99
132
|
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-bedrock-agentcore-alpha.Runtime';
|
|
100
133
|
/**
|
|
@@ -710,4 +743,4 @@ let Runtime = (() => {
|
|
|
710
743
|
return Runtime = _classThis;
|
|
711
744
|
})();
|
|
712
745
|
exports.Runtime = Runtime;
|
|
713
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInJ1bnRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsNkNBQStGO0FBQy9GLHFFQUFxRTtBQUNyRSwyQ0FBMkM7QUFDM0MsMkNBQTJDO0FBQzNDLHdEQUE4RDtBQUM5RCw0RUFBNEQ7QUFDNUQsOEVBQThGO0FBQzlGLDBFQUEwRTtBQUkxRSxtREFBcUY7QUFDckYsbUNBUWlCO0FBSWpCLGlEQUE2QztBQUM3Qyx5REFBcUQ7QUFFckQsbUNBQXVDO0FBQ3ZDLDZEQUFpRjtBQUNqRiw0RUFBK0U7QUFFL0U7OytFQUUrRTtBQUMvRTs7O0dBR0c7QUFDSCxNQUFNLHFCQUFxQixHQUFHLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRW5EOzs7R0FHRztBQUNILE1BQU0sc0JBQXNCLEdBQUcsc0JBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUF5SHZEOzsrRUFFK0U7QUFFL0U7Ozs7Ozs7R0FPRztJQUVVLE9BQU87NEJBRG5CLG9DQUFrQjs7OztzQkFDVSwwQkFBVzs7O3VCQUFuQixTQUFRLFdBQVc7Ozs7dUNBa3JCckMsSUFBQSxrQ0FBYyxHQUFFO1lBQ2pCLG9MQUFPLFdBQVcsNkRBZ0JqQjtZQW5zQkgsNktBb3NCQzs7Ozs7UUFuc0JDLHNDQUFzQztRQUMvQixNQUFNLENBQVUscUJBQXFCLEdBQVcsOENBQThDLENBQUM7UUFFdEc7Ozs7Ozs7O1dBUUc7UUFDSSxNQUFNLENBQUMsMEJBQTBCLENBQ3RDLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUE2Qjs7Ozs7Ozs7OztZQUU3QixNQUFNLDJCQUE0QixTQUFRLDBCQUFXO2dCQUNuQyxlQUFlLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQztnQkFDeEMsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7Z0JBQ3RDLGdCQUFn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QVksRUFBRSxZQUFZO2dCQUMxQixjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7Z0JBQ25DLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxPQUFPLElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLEdBQUc7Z0JBQ3hFLFdBQVcsRUFBRSxPQUFPLEVBQUUsV0FBVzthQUNsQyxDQUFDLENBQUM7WUFFSCwrREFBK0Q7WUFDL0QsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBRWxELE9BQU8sUUFBUSxDQUFDO1NBQ2pCOztZQW5zQlUsdURBQU87Ozs7O0FBQVAsMEJBQU8iLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7IER1cmF0aW9uLCBTdGFjaywgQW5ub3RhdGlvbnMsIFRva2VuLCBBcm4sIEFybkZvcm1hdCwgTGF6eSwgTmFtZXMgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBiZWRyb2NrYWdlbnRjb3JlIGZyb20gJ2F3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlJztcbmltcG9ydCAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvciB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2Vycm9ycyc7XG5pbXBvcnQgeyBsaXQgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9oZWxwZXJzLWludGVybmFsJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhLCBNZXRob2RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHR5cGUgeyBSdW50aW1lQXV0aG9yaXplckNvbmZpZ3VyYXRpb24gfSBmcm9tICcuL2luYm91bmQtYXV0aC9ydW50aW1lLWF1dGhvcml6ZXItY29uZmlndXJhdGlvbic7XG5pbXBvcnQgdHlwZSB7IExvZ2dpbmdDb25maWcgfSBmcm9tICcuL29ic2VydmFiaWxpdHknO1xuaW1wb3J0IHsgY29uZmlndXJlVHJhY2luZ0RlbGl2ZXJ5LCBjb25maWd1cmVMb2dnaW5nRGVsaXZlcnkgfSBmcm9tICcuL29ic2VydmFiaWxpdHknO1xuaW1wb3J0IHtcbiAgUlVOVElNRV9MT0dTX0dST1VQX0FDVElPTlMsXG4gIFJVTlRJTUVfTE9HU19ERVNDUklCRV9BQ1RJT05TLFxuICBSVU5USU1FX0xPR1NfU1RSRUFNX0FDVElPTlMsXG4gIFJVTlRJTUVfWFJBWV9BQ1RJT05TLFxuICBSVU5USU1FX0NMT1VEV0FUQ0hfTUVUUklDU19BQ1RJT05TLFxuICBSVU5USU1FX0NMT1VEV0FUQ0hfTkFNRVNQQUNFLFxuICBSVU5USU1FX1dPUktMT0FEX0lERU5USVRZX0FDVElPTlMsXG59IGZyb20gJy4vcGVybXMnO1xuaW1wb3J0IHR5cGUgeyBBZ2VudFJ1bnRpbWVBcnRpZmFjdCB9IGZyb20gJy4vcnVudGltZS1hcnRpZmFjdCc7XG5cbmltcG9ydCB0eXBlIHsgSUJlZHJvY2tBZ2VudFJ1bnRpbWUsIEFnZW50UnVudGltZUF0dHJpYnV0ZXMgfSBmcm9tICcuL3J1bnRpbWUtYmFzZSc7XG5pbXBvcnQgeyBSdW50aW1lQmFzZSB9IGZyb20gJy4vcnVudGltZS1iYXNlJztcbmltcG9ydCB7IFJ1bnRpbWVFbmRwb2ludCB9IGZyb20gJy4vcnVudGltZS1lbmRwb2ludCc7XG5pbXBvcnQgdHlwZSB7IExpZmVjeWNsZUNvbmZpZ3VyYXRpb24sIFJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBQcm90b2NvbFR5cGUgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nRmllbGQsIHZhbGlkYXRlRmllbGRQYXR0ZXJuIH0gZnJvbSAnLi92YWxpZGF0aW9uLWhlbHBlcnMnO1xuaW1wb3J0IHsgUnVudGltZU5ldHdvcmtDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vbmV0d29yay9uZXR3b3JrLWNvbmZpZ3VyYXRpb24nO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRzXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKipcbiAqIE1pbmltdW0gdGltZW91dCBmb3IgaWRsZSBydW50aW1lIHNlc3Npb25zXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgTElGRUNZQ0xFX01JTl9USU1FT1VUID0gRHVyYXRpb24uc2Vjb25kcyg2MCk7XG5cbi8qKlxuICogTWF4aW11bSBsaWZldGltZSBmb3IgdGhlIGluc3RhbmNlXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgTElGRUNZQ0xFX01BWF9MSUZFVElNRSA9IER1cmF0aW9uLnNlY29uZHMoMjg4MDApO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvcHNcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhIEJlZHJvY2sgQWdlbnQgQ29yZSBSdW50aW1lIHJlc291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVudGltZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIFZhbGlkIGNoYXJhY3RlcnMgYXJlIGEteiwgQS1aLCAwLTksIF8gKHVuZGVyc2NvcmUpXG4gICAqIE11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciBhbmQgY2FuIGJlIHVwIHRvIDQ4IGNoYXJhY3RlcnMgbG9uZ1xuICAgKiBQYXR0ZXJuOiBeW2EtekEtWl1bYS16QS1aMC05X117MCw0N30kXG4gICAqIEBkZWZhdWx0IC0gYXV0byBnZW5lcmF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcnVudGltZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhcnRpZmFjdCBjb25maWd1cmF0aW9uIGZvciB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBDb250YWlucyB0aGUgY29udGFpbmVyIGNvbmZpZ3VyYXRpb24gd2l0aCBFQ1IgVVJJXG4gICAqL1xuICByZWFkb25seSBhZ2VudFJ1bnRpbWVBcnRpZmFjdDogQWdlbnRSdW50aW1lQXJ0aWZhY3Q7XG5cbiAgLyoqXG4gICAqIFRoZSBJQU0gcm9sZSB0aGF0IHByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBJZiBub3QgcHJvdmlkZWQsIGEgcm9sZSB3aWxsIGJlIGNyZWF0ZWQgYXV0b21hdGljYWxseVxuICAgKiBAZGVmYXVsdCAtIEEgbmV3IHJvbGUgd2lsbCBiZSBjcmVhdGVkXG4gICAqL1xuICByZWFkb25seSBleGVjdXRpb25Sb2xlPzogaWFtLklSb2xlO1xuXG4gIC8qKlxuICAgKiBOZXR3b3JrIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIEBkZWZhdWx0IC0gUnVudGltZU5ldHdvcmtDb25maWd1cmF0aW9uLnVzaW5nUHVibGljTmV0d29yaygpXG4gICAqL1xuICByZWFkb25seSBuZXR3b3JrQ29uZmlndXJhdGlvbj86IFJ1bnRpbWVOZXR3b3JrQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogT3B0aW9uYWwgZGVzY3JpcHRpb24gZm9yIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIEBkZWZhdWx0IC0gTm8gZGVzY3JpcHRpb25cbiAgICogTGVuZ3RoIE1pbmltdW06IDEgLCBNYXhpbXVtOiAxMjAwXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogUHJvdG9jb2wgY29uZmlndXJhdGlvbiBmb3IgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICogQGRlZmF1bHQgLSBQcm90b2NvbFR5cGUuSFRUUFxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdG9jb2xDb25maWd1cmF0aW9uPzogUHJvdG9jb2xUeXBlO1xuXG4gIC8qKlxuICAgKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIC0gTWF4aW11bSA1MCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICogLSBLZXk6IE11c3QgYmUgMS0xMDAgY2hhcmFjdGVycywgc3RhcnQgd2l0aCBsZXR0ZXIgb3IgdW5kZXJzY29yZSwgY29udGFpbiBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGFuZCB1bmRlcnNjb3Jlc1xuICAgKiAtIFZhbHVlOiBNdXN0IGJlIDAtMjA0OCBjaGFyYWN0ZXJzIChwZXIgQ2xvdWRGb3JtYXRpb24gc3BlY2lmaWNhdGlvbilcbiAgICogQGRlZmF1bHQgLSBObyBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50VmFyaWFibGVzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogQXV0aG9yaXplciBjb25maWd1cmF0aW9uIGZvciB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBVc2UgUnVudGltZUF1dGhvcml6ZXJDb25maWd1cmF0aW9uIHN0YXRpYyBtZXRob2RzIHRvIGNyZWF0ZSB0aGUgY29uZmlndXJhdGlvblxuICAgKiBAZGVmYXVsdCAtIFJ1bnRpbWVBdXRob3JpemVyQ29uZmlndXJhdGlvbi5pYW0oKSAoSUFNIGF1dGhlbnRpY2F0aW9uKVxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aG9yaXplckNvbmZpZ3VyYXRpb24/OiBSdW50aW1lQXV0aG9yaXplckNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFRhZ3MgZm9yIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIEEgbGlzdCBvZiBrZXk6dmFsdWUgcGFpcnMgb2YgdGFncyB0byBhcHBseSB0byB0aGlzIFJ1bnRpbWUgcmVzb3VyY2VcbiAgICogQGRlZmF1bHQge30gLSBubyB0YWdzXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgSFRUUCByZXF1ZXN0IGhlYWRlcnMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0aHJvdWdoIHRvIHRoZSBydW50aW1lLlxuICAgKiBAZGVmYXVsdCAtIE5vIHJlcXVlc3QgaGVhZGVycyBjb25maWd1cmVkXG4gICAqL1xuICByZWFkb25seSByZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbj86IFJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlmZSBjeWNsZSBjb25maWd1cmF0aW9uIGZvciB0aGUgQWdlbnRDb3JlIFJ1bnRpbWUuXG4gICAqIEBkZWZhdWx0IC0gTm8gbGlmZWN5Y2xlIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGxpZmVjeWNsZUNvbmZpZ3VyYXRpb24/OiBMaWZlY3ljbGVDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGVuYWJsZSBYLVJheSB0cmFjaW5nIGZvciB0aGlzIHJ1bnRpbWUuXG4gICAqIFdoZW4gZW5hYmxlZCwgdHJhY2VzIHdpbGwgYmUgZGVsaXZlcmVkIHRvIEFXUyBYLVJheS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL29ic2VydmFiaWxpdHkuaHRtbFxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgdHJhY2luZ0VuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb2dnaW5nIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBydW50aW1lLlxuICAgKiBBbGxvd3Mgc2VuZGluZyBBUFBMSUNBVElPTl9MT0dTIGFuZCBVU0FHRV9MT0dTIHRvIENsb3VkV2F0Y2ggTG9ncywgUzMsIG9yIEtpbmVzaXMgRGF0YSBGaXJlaG9zZS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL29ic2VydmFiaWxpdHkuaHRtbFxuICAgKiBAZGVmYXVsdCAtIE5vIGxvZ2dpbmcgY29uZmlndXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgbG9nZ2luZ0NvbmZpZ3M/OiBMb2dnaW5nQ29uZmlnW107XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYWRkaW5nIGFuIGVuZHBvaW50IHRvIHRoZSBydW50aW1lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWRkRW5kcG9pbnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIERlc2NyaXB0aW9uIGZvciB0aGUgZW5kcG9pbnQsIE11c3QgYmUgYmV0d2VlbiAxIGFuZCAxMjAwIGNoYXJhY3RlcnNcbiAgICogQGRlZmF1bHQgLSBObyBkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgcnVudGltZSB2ZXJzaW9uIGZvciB0aGlzIGVuZHBvaW50XG4gICAqIEBkZWZhdWx0ICAxXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uPzogc3RyaW5nO1xufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyoqXG4gKiBCZWRyb2NrIEFnZW50IENvcmUgUnVudGltZVxuICogRW5hYmxlcyBydW5uaW5nIGNvbnRhaW5lcml6ZWQgYWdlbnRzIHdpdGggc3BlY2lmaWMgbmV0d29yayBjb25maWd1cmF0aW9ucyxcbiAqIHNlY3VyaXR5IHNldHRpbmdzLCBhbmQgcnVudGltZSBhcnRpZmFjdHMuXG4gKlxuICogQHJlc291cmNlIEFXUzo6QmVkcm9ja0FnZW50Q29yZTo6UnVudGltZVxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL3J1bnRpbWUuaHRtbFxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgUnVudGltZSBleHRlbmRzIFJ1bnRpbWVCYXNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtYmVkcm9jay1hZ2VudGNvcmUtYWxwaGEuUnVudGltZSc7XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBBZ2VudCBSdW50aW1lIHVzaW5nIGF0dHJpYnV0ZXNcbiAgICogVGhpcyBhbGxvd3MgeW91IHRvIHJlZmVyZW5jZSBhbiBBZ2VudCBSdW50aW1lIHRoYXQgd2FzIGNyZWF0ZWQgb3V0c2lkZSBvZiBDREtcbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QgaWRcbiAgICogQHBhcmFtIGF0dHJzIFRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBleGlzdGluZyBBZ2VudCBSdW50aW1lXG4gICAqIEByZXR1cm5zIEFuIElCZWRyb2NrQWdlbnRSdW50aW1lIGluc3RhbmNlIHJlcHJlc2VudGluZyB0aGUgaW1wb3J0ZWQgcnVudGltZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQWdlbnRSdW50aW1lQXR0cmlidXRlcyhcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgYXR0cnM6IEFnZW50UnVudGltZUF0dHJpYnV0ZXMsXG4gICk6IElCZWRyb2NrQWdlbnRSdW50aW1lIHtcbiAgICBjbGFzcyBJbXBvcnRlZEJlZHJvY2tBZ2VudFJ1bnRpbWUgZXh0ZW5kcyBSdW50aW1lQmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgYWdlbnRSdW50aW1lQXJuID0gYXR0cnMuYWdlbnRSdW50aW1lQXJuO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGFnZW50UnVudGltZUlkID0gYXR0cnMuYWdlbnRSdW50aW1lSWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgYWdlbnRSdW50aW1lTmFtZSA9IGF0dHJzLmFnZW50UnVudGltZU5hbWU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgYWdlbnRSdW50aW1lVmVyc2lvbiA9IGF0dHJzLmFnZW50UnVudGltZVZlcnNpb247XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgYWdlbnRTdGF0dXMgPSBhdHRycy5hZ2VudFN0YXR1cztcbiAgICAgIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbiA9IGF0dHJzLmRlc2NyaXB0aW9uO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZWRBdCA9IGF0dHJzLmNyZWF0ZWRBdDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBsYXN0VXBkYXRlZEF0ID0gYXR0cnMubGFzdFVwZGF0ZWRBdDtcblxuICAgICAgcHVibGljIHJlYWRvbmx5IHJvbGU6IGlhbS5JUm9sZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBncmFudFByaW5jaXBhbDogaWFtLklQcmluY2lwYWw7XG5cbiAgICAgIGNvbnN0cnVjdG9yKHM6IENvbnN0cnVjdCwgaTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKHMsIGkpO1xuICAgICAgICB0aGlzLnJvbGUgPSBpYW0uUm9sZS5mcm9tUm9sZUFybih0aGlzLCAnUm9sZScsIGF0dHJzLnJvbGVBcm4pO1xuICAgICAgICB0aGlzLmdyYW50UHJpbmNpcGFsID0gdGhpcy5yb2xlO1xuICAgICAgICBpZiAoYXR0cnMuc2VjdXJpdHlHcm91cHMpIHtcbiAgICAgICAgICB0aGlzLl9jb25uZWN0aW9ucyA9IG5ldyBlYzIuQ29ubmVjdGlvbnMoe1xuICAgICAgICAgICAgc2VjdXJpdHlHcm91cHM6IGF0dHJzLnNlY3VyaXR5R3JvdXBzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnRlZEJlZHJvY2tBZ2VudFJ1bnRpbWUoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIEBhdHRyaWJ1dGVcbiAgICogQHJldHVybnMgYSB0b2tlbiByZXByZXNlbnRpbmcgdGhlIEFSTiBvZiB0aGlzIGFnZW50IHJ1bnRpbWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhZ2VudFJ1bnRpbWVBcm46IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBAYXR0cmlidXRlXG4gICAqIEByZXR1cm5zIGEgdG9rZW4gcmVwcmVzZW50aW5nIHRoZSBJRCBvZiB0aGlzIGFnZW50IHJ1bnRpbWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhZ2VudFJ1bnRpbWVJZDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICogQGF0dHJpYnV0ZVxuICAgKiBAcmV0dXJucyBhIHRva2VuIHJlcHJlc2VudGluZyB0aGUgbmFtZSBvZiB0aGlzIGFnZW50IHJ1bnRpbWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhZ2VudFJ1bnRpbWVOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSByb2xlOiBpYW0uSVJvbGU7XG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBAYXR0cmlidXRlXG4gICAqIEByZXR1cm5zIGEgdG9rZW4gcmVwcmVzZW50aW5nIHRoZSB2ZXJzaW9uIG9mIHRoaXMgYWdlbnQgcnVudGltZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFnZW50UnVudGltZVZlcnNpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgc3RhdHVzIG9mIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIEBhdHRyaWJ1dGVcbiAgICogQHJldHVybnMgYSB0b2tlbiByZXByZXNlbnRpbmcgdGhlIHN0YXR1cyBvZiB0aGlzIGFnZW50IHJ1bnRpbWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhZ2VudFN0YXR1cz86IHN0cmluZztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRlc2NyaXB0aW9uIGZvciB0aGUgYWdlbnQgcnVudGltZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHRpbWVzdGFtcCB3aGVuIHRoZSBhZ2VudCBydW50aW1lIHdhcyBjcmVhdGVkXG4gICAqIEBhdHRyaWJ1dGVcbiAgICogQHJldHVybnMgYSB0b2tlbiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIHRpbWVzdGFtcCBvZiB0aGlzIGFnZW50IHJ1bnRpbWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQXQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgdGltZXN0YW1wIHdoZW4gdGhlIGFnZW50IHJ1bnRpbWUgd2FzIGxhc3QgdXBkYXRlZFxuICAgKiBAYXR0cmlidXRlXG4gICAqIEByZXR1cm5zIGEgdG9rZW4gcmVwcmVzZW50aW5nIHRoZSBsYXN0IHVwZGF0ZSB0aW1lc3RhbXAgb2YgdGhpcyBhZ2VudCBydW50aW1lXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbGFzdFVwZGF0ZWRBdD86IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGdyYW50UHJpbmNpcGFsOiBpYW0uSVByaW5jaXBhbDtcbiAgcHJpdmF0ZSByZWFkb25seSBydW50aW1lUmVzb3VyY2U6IGJlZHJvY2thZ2VudGNvcmUuQ2ZuUnVudGltZTtcbiAgLyoqXG4gICAqIFRoZSBhcnRpZmFjdCBjb25maWd1cmF0aW9uIGZvciB0aGUgYWdlbnQgcnVudGltZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFnZW50UnVudGltZUFydGlmYWN0OiBBZ2VudFJ1bnRpbWVBcnRpZmFjdDtcbiAgcHJpdmF0ZSByZWFkb25seSBuZXR3b3JrQ29uZmlndXJhdGlvbjogUnVudGltZU5ldHdvcmtDb25maWd1cmF0aW9uIDtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm90b2NvbENvbmZpZ3VyYXRpb246IFByb3RvY29sVHlwZTtcbiAgcHJpdmF0ZSByZWFkb25seSBhdXRob3JpemVyQ29uZmlndXJhdGlvbj86IFJ1bnRpbWVBdXRob3JpemVyQ29uZmlndXJhdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBsaWZlY3ljbGVDb25maWd1cmF0aW9uPzogTGlmZWN5Y2xlQ29uZmlndXJhdGlvbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUnVudGltZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAvLyBNYXhpbXVtIG5hbWUgbGVuZ3RoIG9mIDQ4IGNoYXJhY3RlcnNcbiAgICAgIC8vIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYmVkcm9ja2FnZW50Y29yZS1ydW50aW1lLmh0bWwjY2ZuLWJlZHJvY2thZ2VudGNvcmUtcnVudGltZS1hZ2VudHJ1bnRpbWVuYW1lXG4gICAgICBwaHlzaWNhbE5hbWU6IHByb3BzLnJ1bnRpbWVOYW1lID8/XG4gICAgICAgIExhenkuc3RyaW5nKHtcbiAgICAgICAgICBwcm9kdWNlOiAoKSA9PiBOYW1lcy51bmlxdWVSZXNvdXJjZU5hbWUodGhpcywgeyBtYXhMZW5ndGg6IDQ4IH0pLFxuICAgICAgICB9KSxcbiAgICB9KTtcblxuICAgIC8vIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgdGhpcy5hZ2VudFJ1bnRpbWVOYW1lID0gdGhpcy5waHlzaWNhbE5hbWU7XG4gICAgdGhpcy52YWxpZGF0ZVJ1bnRpbWVOYW1lKCk7XG5cbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gcHJvcHMuZGVzY3JpcHRpb247XG4gICAgaWYgKHRoaXMuZGVzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMudmFsaWRhdGVEZXNjcmlwdGlvbigpO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5lbnZpcm9ubWVudFZhcmlhYmxlcykge1xuICAgICAgdGhpcy52YWxpZGF0ZUVudmlyb25tZW50VmFyaWFibGVzKHByb3BzLmVudmlyb25tZW50VmFyaWFibGVzKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMudGFncykge1xuICAgICAgdGhpcy52YWxpZGF0ZVRhZ3MocHJvcHMudGFncyk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlUmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24ocHJvcHMucmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIHRoaXMubGlmZWN5Y2xlQ29uZmlndXJhdGlvbiA9IHByb3BzLmxpZmVjeWNsZUNvbmZpZ3VyYXRpb24gPyB7XG4gICAgICBpZGxlUnVudGltZVNlc3Npb25UaW1lb3V0OiBwcm9wcy5saWZlY3ljbGVDb25maWd1cmF0aW9uPy5pZGxlUnVudGltZVNlc3Npb25UaW1lb3V0LFxuICAgICAgbWF4TGlmZXRpbWU6IHByb3BzLmxpZmVjeWNsZUNvbmZpZ3VyYXRpb24/Lm1heExpZmV0aW1lLFxuICAgIH0gOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAodGhpcy5saWZlY3ljbGVDb25maWd1cmF0aW9uKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlTGlmZWN5Y2xlQ29uZmlndXJhdGlvbih0aGlzLmxpZmVjeWNsZUNvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5leGVjdXRpb25Sb2xlKSB7XG4gICAgICB0aGlzLnJvbGUgPSBwcm9wcy5leGVjdXRpb25Sb2xlO1xuICAgICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQocHJvcHMuZXhlY3V0aW9uUm9sZS5yb2xlQXJuKSkge1xuICAgICAgICB0aGlzLnZhbGlkYXRlUm9sZUFybihwcm9wcy5leGVjdXRpb25Sb2xlLnJvbGVBcm4pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgJ0V4ZWN1dGlvblJvbGUnLCB7XG4gICAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdiZWRyb2NrLWFnZW50Y29yZS5hbWF6b25hd3MuY29tJyksXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnRXhlY3V0aW9uIHJvbGUgZm9yIEJlZHJvY2sgQWdlbnQgQ29yZSBSdW50aW1lJyxcbiAgICAgICAgbWF4U2Vzc2lvbkR1cmF0aW9uOiBEdXJhdGlvbi5ob3Vycyg4KSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmFkZEV4ZWN1dGlvblJvbGVQZXJtaXNzaW9ucygpO1xuXG4gICAgdGhpcy5ncmFudFByaW5jaXBhbCA9IHRoaXMucm9sZTtcbiAgICB0aGlzLmFnZW50UnVudGltZUFydGlmYWN0ID0gcHJvcHMuYWdlbnRSdW50aW1lQXJ0aWZhY3Q7XG4gICAgLy8gU2V0IHVwIG5ldHdvcmsgY29uZmlndXJhdGlvbiB3aXRoIFZQQyBzdXBwb3J0XG4gICAgdGhpcy5uZXR3b3JrQ29uZmlndXJhdGlvbiA9IHByb3BzLm5ldHdvcmtDb25maWd1cmF0aW9uID8/IFJ1bnRpbWVOZXR3b3JrQ29uZmlndXJhdGlvbi51c2luZ1B1YmxpY05ldHdvcmsoKTtcbiAgICAvLyBTZXQgY29ubmVjdGlvbnMgLSBjcmVhdGUgYSBzaGFyZWQgY29ubmVjdGlvbnMgb2JqZWN0XG4gICAgaWYgKHRoaXMubmV0d29ya0NvbmZpZ3VyYXRpb24uY29ubmVjdGlvbnMpIHtcbiAgICAgIC8vIFVzZSB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uJ3MgY29ubmVjdGlvbnMgYXMgdGhlIHNoYXJlZCBvYmplY3RcbiAgICAgIHRoaXMuX2Nvbm5lY3Rpb25zID0gdGhpcy5uZXR3b3JrQ29uZmlndXJhdGlvbi5jb25uZWN0aW9ucztcbiAgICB9XG4gICAgdGhpcy5wcm90b2NvbENvbmZpZ3VyYXRpb24gPSBwcm9wcy5wcm90b2NvbENvbmZpZ3VyYXRpb24gPz8gUHJvdG9jb2xUeXBlLkhUVFA7XG4gICAgdGhpcy5hdXRob3JpemVyQ29uZmlndXJhdGlvbiA9IHByb3BzLmF1dGhvcml6ZXJDb25maWd1cmF0aW9uO1xuXG4gICAgY29uc3QgY2ZuUHJvcHM6IGFueSA9IHtcbiAgICAgIGFnZW50UnVudGltZU5hbWU6IHRoaXMuYWdlbnRSdW50aW1lTmFtZSxcbiAgICAgIHJvbGVBcm46IHRoaXMucm9sZS5yb2xlQXJuLFxuICAgICAgYWdlbnRSdW50aW1lQXJ0aWZhY3Q6IExhenkuYW55KHtcbiAgICAgICAgcHJvZHVjZTogKCkgPT4gdGhpcy5yZW5kZXJBZ2VudFJ1bnRpbWVBcnRpZmFjdCgpLFxuICAgICAgfSksXG4gICAgICBuZXR3b3JrQ29uZmlndXJhdGlvbjogTGF6eS5hbnkoe1xuICAgICAgICBwcm9kdWNlOiAoKSA9PiB0aGlzLm5ldHdvcmtDb25maWd1cmF0aW9uLl9yZW5kZXIodGhpcy5fY29ubmVjdGlvbnMpLFxuICAgICAgfSksXG4gICAgICBwcm90b2NvbENvbmZpZ3VyYXRpb246IExhenkuc3RyaW5nKHtcbiAgICAgICAgcHJvZHVjZTogKCkgPT4gdGhpcy5wcm90b2NvbENvbmZpZ3VyYXRpb24sXG4gICAgICB9KSxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIGVudmlyb25tZW50VmFyaWFibGVzOiBMYXp5LmFueSh7XG4gICAgICAgIHByb2R1Y2U6ICgpID0+IHRoaXMucmVuZGVyRW52aXJvbm1lbnRWYXJpYWJsZXMocHJvcHMuZW52aXJvbm1lbnRWYXJpYWJsZXMpLFxuICAgICAgfSksXG4gICAgICB0YWdzOiBwcm9wcy50YWdzID8/IHt9LFxuICAgICAgbGlmZWN5Y2xlQ29uZmlndXJhdGlvbjogdGhpcy5yZW5kZXJMaWZlY3ljbGVDb25maWd1cmF0aW9uKCksXG4gICAgfTtcbiAgICBpZiAocHJvcHMucmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24pIHtcbiAgICAgIGNmblByb3BzLnJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uID0gdGhpcy5yZW5kZXJSZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbihwcm9wcy5yZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbik7XG4gICAgfVxuICAgIGlmIChwcm9wcy5hdXRob3JpemVyQ29uZmlndXJhdGlvbikge1xuICAgICAgY2ZuUHJvcHMuYXV0aG9yaXplckNvbmZpZ3VyYXRpb24gPSBMYXp5LmFueSh7XG4gICAgICAgIHByb2R1Y2U6ICgpID0+IHRoaXMuYXV0aG9yaXplckNvbmZpZ3VyYXRpb24hLl9yZW5kZXIoKSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMucnVudGltZVJlc291cmNlID0gbmV3IGJlZHJvY2thZ2VudGNvcmUuQ2ZuUnVudGltZSh0aGlzLCAnUmVzb3VyY2UnLCBjZm5Qcm9wcyBhcyBiZWRyb2NrYWdlbnRjb3JlLkNmblJ1bnRpbWVQcm9wcyk7XG5cbiAgICAvLyBBZGQgZGVwZW5kZW5jeSBvbiB0aGUgcm9sZSAoZm9yIGJvdGggY3VzdG9tIGFuZCBhdXRvLWNyZWF0ZWQgcm9sZXMpXG4gICAgLy8gVGhpcyBlbnN1cmVzIHRoZSBSdW50aW1lIHdhaXRzIGZvciB0aGUgcm9sZSBhbmQgYWxsIGl0cyBwb2xpY2llcyAoaW5jbHVkaW5nIEVDUiBwZXJtaXNzaW9ucykgdG8gYmUgY3JlYXRlZFxuICAgIHRoaXMucnVudGltZVJlc291cmNlLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLnJvbGUpO1xuXG4gICAgdGhpcy5hZ2VudFJ1bnRpbWVJZCA9IHRoaXMucnVudGltZVJlc291cmNlLmF0dHJBZ2VudFJ1bnRpbWVJZDtcbiAgICB0aGlzLmFnZW50UnVudGltZUFybiA9IHRoaXMucnVudGltZVJlc291cmNlLmF0dHJBZ2VudFJ1bnRpbWVBcm47XG4gICAgdGhpcy5hZ2VudFN0YXR1cyA9IHRoaXMucnVudGltZVJlc291cmNlLmF0dHJTdGF0dXM7XG4gICAgdGhpcy5hZ2VudFJ1bnRpbWVWZXJzaW9uID0gdGhpcy5ydW50aW1lUmVzb3VyY2UuYXR0ckFnZW50UnVudGltZVZlcnNpb247XG4gICAgdGhpcy5jcmVhdGVkQXQgPSB0aGlzLnJ1bnRpbWVSZXNvdXJjZS5hdHRyQ3JlYXRlZEF0O1xuICAgIHRoaXMubGFzdFVwZGF0ZWRBdCA9IHRoaXMucnVudGltZVJlc291cmNlLmF0dHJMYXN0VXBkYXRlZEF0O1xuXG4gICAgLy8gQ29uZmlndXJlIG9ic2VydmFiaWxpdHkgKHRyYWNpbmcgYW5kIGxvZ2dpbmcpXG4gICAgaWYgKHByb3BzLnRyYWNpbmdFbmFibGVkKSB7XG4gICAgICBjb25maWd1cmVUcmFjaW5nRGVsaXZlcnkodGhpcywgdGhpcy5hZ2VudFJ1bnRpbWVBcm4pO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5sb2dnaW5nQ29uZmlncyAmJiBwcm9wcy5sb2dnaW5nQ29uZmlncy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25maWd1cmVMb2dnaW5nRGVsaXZlcnkodGhpcywgdGhpcy5hZ2VudFJ1bnRpbWVBcm4sIHByb3BzLmxvZ2dpbmdDb25maWdzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBDbG91ZEZvcm1hdGlvblxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgcmVuZGVyRW52aXJvbm1lbnRWYXJpYWJsZXMoZW52VmFycz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pOiBhbnkge1xuICAgIGlmICghZW52VmFycyB8fCBPYmplY3Qua2V5cyhlbnZWYXJzKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBlbnZWYXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgcHJvcGVyIHBlcm1pc3Npb25zIHRvIHRoZSBleGVjdXRpb24gcm9sZSBmb3IgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICogQmFzZWQgb246IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvcnVudGltZS1wZXJtaXNzaW9ucy5odG1sXG4gICAqL1xuICBwcml2YXRlIGFkZEV4ZWN1dGlvblJvbGVQZXJtaXNzaW9ucygpIHtcbiAgICBjb25zdCByZWdpb24gPSBTdGFjay5vZih0aGlzKS5yZWdpb247XG4gICAgY29uc3QgYWNjb3VudCA9IFN0YWNrLm9mKHRoaXMpLmFjY291bnQ7XG5cbiAgICAvLyBDbG91ZFdhdGNoIExvZ3MgLSBMb2cgR3JvdXAgb3BlcmF0aW9uc1xuICAgIHRoaXMucm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdMb2dHcm91cEFjY2VzcycsXG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBSVU5USU1FX0xPR1NfR1JPVVBfQUNUSU9OUyxcbiAgICAgIHJlc291cmNlczogW2Bhcm46JHtTdGFjay5vZih0aGlzKS5wYXJ0aXRpb259OmxvZ3M6JHtyZWdpb259OiR7YWNjb3VudH06bG9nLWdyb3VwOi9hd3MvYmVkcm9jay1hZ2VudGNvcmUvcnVudGltZXMvKmBdLFxuICAgIH0pKTtcblxuICAgIC8vIENsb3VkV2F0Y2ggTG9ncyAtIERlc2NyaWJlIGFsbCBsb2cgZ3JvdXBzXG4gICAgdGhpcy5yb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIHNpZDogJ0Rlc2NyaWJlTG9nR3JvdXBzJyxcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFJVTlRJTUVfTE9HU19ERVNDUklCRV9BQ1RJT05TLFxuICAgICAgcmVzb3VyY2VzOiBbYGFybjoke1N0YWNrLm9mKHRoaXMpLnBhcnRpdGlvbn06bG9nczoke3JlZ2lvbn06JHthY2NvdW50fTpsb2ctZ3JvdXA6KmBdLFxuICAgIH0pKTtcblxuICAgIC8vIENsb3VkV2F0Y2ggTG9ncyAtIExvZyBTdHJlYW0gb3BlcmF0aW9uc1xuICAgIHRoaXMucm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdMb2dTdHJlYW1BY2Nlc3MnLFxuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogUlVOVElNRV9MT0dTX1NUUkVBTV9BQ1RJT05TLFxuICAgICAgcmVzb3VyY2VzOiBbYGFybjoke1N0YWNrLm9mKHRoaXMpLnBhcnRpdGlvbn06bG9nczoke3JlZ2lvbn06JHthY2NvdW50fTpsb2ctZ3JvdXA6L2F3cy9iZWRyb2NrLWFnZW50Y29yZS9ydW50aW1lcy8qOmxvZy1zdHJlYW06KmBdLFxuICAgIH0pKTtcblxuICAgIC8vIFgtUmF5IFRyYWNpbmcgLSBtdXN0IGJlICogZm9yIHRyYWNpbmdcbiAgICB0aGlzLnJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgc2lkOiAnWFJheUFjY2VzcycsXG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBSVU5USU1FX1hSQVlfQUNUSU9OUyxcbiAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgfSkpO1xuXG4gICAgLy8gQ2xvdWRXYXRjaCBNZXRyaWNzIC0gc2NvcGVkIHRvIGJlZHJvY2stYWdlbnRjb3JlIG5hbWVzcGFjZVxuICAgIHRoaXMucm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdDbG91ZFdhdGNoTWV0cmljcycsXG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBSVU5USU1FX0NMT1VEV0FUQ0hfTUVUUklDU19BQ1RJT05TLFxuICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgJ2Nsb3Vkd2F0Y2g6bmFtZXNwYWNlJzogUlVOVElNRV9DTE9VRFdBVENIX05BTUVTUEFDRSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSkpO1xuXG4gICAgLy8gQmVkcm9jayBBZ2VudENvcmUgV29ya2xvYWQgSWRlbnRpdHkgQWNjZXNzXG4gICAgLy8gTm90ZTogVGhlIGFnZW50IG5hbWUgd2lsbCBiZSBkZXRlcm1pbmVkIGF0IHJ1bnRpbWUsIHNvIHdlIHVzZSBhIHdpbGRjYXJkIHBhdHRlcm5cbiAgICB0aGlzLnJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgc2lkOiAnR2V0QWdlbnRBY2Nlc3NUb2tlbicsXG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBSVU5USU1FX1dPUktMT0FEX0lERU5USVRZX0FDVElPTlMsXG4gICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgYGFybjoke1N0YWNrLm9mKHRoaXMpLnBhcnRpdGlvbn06YmVkcm9jay1hZ2VudGNvcmU6JHtyZWdpb259OiR7YWNjb3VudH06d29ya2xvYWQtaWRlbnRpdHktZGlyZWN0b3J5L2RlZmF1bHRgLFxuICAgICAgICBgYXJuOiR7U3RhY2sub2YodGhpcykucGFydGl0aW9ufTpiZWRyb2NrLWFnZW50Y29yZToke3JlZ2lvbn06JHthY2NvdW50fTp3b3JrbG9hZC1pZGVudGl0eS1kaXJlY3RvcnkvZGVmYXVsdC93b3JrbG9hZC1pZGVudGl0eS8qYCxcbiAgICAgIF0sXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGFydGlmYWN0IGNvbmZpZ3VyYXRpb24gZm9yIENsb3VkRm9ybWF0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJBZ2VudFJ1bnRpbWVBcnRpZmFjdCgpOiBhbnkge1xuICAgIC8vIHNldCBwZXJtaXNzaW9uIHdpdGggYmluZFxuICAgIHRoaXMuYWdlbnRSdW50aW1lQXJ0aWZhY3QuYmluZCh0aGlzLCB0aGlzKTtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmFnZW50UnVudGltZUFydGlmYWN0Ll9yZW5kZXIoKTtcbiAgICBpZiAoKGNvbmZpZyBhcyBhbnkpLmNvZGUpIHsgLy8gUzNJbWFnZVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29kZUNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBjb2RlOiAoY29uZmlnIGFzIGFueSkuY29kZSxcbiAgICAgICAgICBydW50aW1lOiAoY29uZmlnIGFzIGFueSkucnVudGltZSxcbiAgICAgICAgICBlbnRyeVBvaW50OiAoY29uZmlnIGFzIGFueSkuZW50cnlQb2ludCxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEVjckltYWdlIG9yIEFzc2V0SW1hZ2VcbiAgICAgIGNvbnN0IGNvbnRhaW5lclVyaSA9IChjb25maWcgYXMgYW55KS5jb250YWluZXJVcmk7XG4gICAgICBpZiAoY29udGFpbmVyVXJpKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVDb250YWluZXJVcmkoY29udGFpbmVyVXJpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRhaW5lckNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBjb250YWluZXJVcmk6IGNvbnRhaW5lclVyaSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIHJlcXVlc3QgaGVhZGVyIGNvbmZpZ3VyYXRpb24gZm9yIENsb3VkRm9ybWF0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJSZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbihyZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbj86IFJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uKTogYW55IHtcbiAgICBpZiAoIXJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uPy5hbGxvd2xpc3RlZEhlYWRlcnMpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICByZXF1ZXN0SGVhZGVyQWxsb3dsaXN0OiByZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbi5hbGxvd2xpc3RlZEhlYWRlcnMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBsaWZlY3ljbGUgY29uZmlndXJhdGlvbiBmb3IgQ2xvdWRGb3JtYXRpb25cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIHJlbmRlckxpZmVjeWNsZUNvbmZpZ3VyYXRpb24oKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgaWRsZVJ1bnRpbWVTZXNzaW9uVGltZW91dDogdGhpcy5saWZlY3ljbGVDb25maWd1cmF0aW9uPy5pZGxlUnVudGltZVNlc3Npb25UaW1lb3V0Py50b1NlY29uZHMoKSxcbiAgICAgIG1heExpZmV0aW1lOiB0aGlzLmxpZmVjeWNsZUNvbmZpZ3VyYXRpb24/Lm1heExpZmV0aW1lPy50b1NlY29uZHMoKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgcmVxdWVzdCBoZWFkZXIgY29uZmlndXJhdGlvblxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHZhbGlkYXRpb24gZmFpbHNcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVSZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbihyZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbjogUmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24pOiB2b2lkIHtcbiAgICBjb25zdCBhbGxFcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uLmFsbG93bGlzdGVkSGVhZGVycykge1xuICAgICAgaWYgKHJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uLmFsbG93bGlzdGVkSGVhZGVycy5sZW5ndGggPCAxIHx8IHJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uLmFsbG93bGlzdGVkSGVhZGVycy5sZW5ndGggPiAyMCkge1xuICAgICAgICBhbGxFcnJvcnMucHVzaCgnUmVxdWVzdCBoZWFkZXIgYWxsb3cgbGlzdCBjb250YWluIGJldHdlZW4gMSBhbmQgMjAgaGVhZGVycycpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGhlYWRlciBvZiByZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbi5hbGxvd2xpc3RlZEhlYWRlcnMpIHtcbiAgICAgICAgLy8gVmFsaWRhdGUgbGVuZ3RoXG4gICAgICAgIGNvbnN0IGxlbmd0aEVycm9ycyA9IHZhbGlkYXRlU3RyaW5nRmllbGQoe1xuICAgICAgICAgIHZhbHVlOiBoZWFkZXIsXG4gICAgICAgICAgZmllbGROYW1lOiAnUmVxdWVzdCBoZWFkZXInLFxuICAgICAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgICAgICBtYXhMZW5ndGg6IDI1NixcbiAgICAgICAgfSk7XG4gICAgICAgIGFsbEVycm9ycy5wdXNoKC4uLmxlbmd0aEVycm9ycyk7XG5cbiAgICAgICAgY29uc3QgcGF0dGVybkVycm9ycyA9IHZhbGlkYXRlRmllbGRQYXR0ZXJuKFxuICAgICAgICAgIGhlYWRlcixcbiAgICAgICAgICAnUmVxdWVzdCBoZWFkZXInLFxuICAgICAgICAgIC8oQXV0aG9yaXphdGlvbnxYLUFtem4tQmVkcm9jay1BZ2VudENvcmUtUnVudGltZS1DdXN0b20tW2EtekEtWjAtOS1dKykvLFxuICAgICAgICAgICdSZXF1ZXN0IGhlYWRlciBtdXN0IGNvbnRhaW4gb25seSBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgaHlwaGVucycsXG4gICAgICAgICk7XG4gICAgICAgIGFsbEVycm9ycy5wdXNoKC4uLnBhdHRlcm5FcnJvcnMpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWxsRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YEludmFsaWRSZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbmAsIGFsbEVycm9ycy5qb2luKCdcXG4nKSwgdGhpcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgbGlmZWN5Y2xlIGNvbmZpZ3VyYXRpb25cbiAgICogQHRocm93cyBFcnJvciBpZiB2YWxpZGF0aW9uIGZhaWxzXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlTGlmZWN5Y2xlQ29uZmlndXJhdGlvbihsaWZlY3ljbGVDb25maWd1cmF0aW9uOiBMaWZlY3ljbGVDb25maWd1cmF0aW9uKTogdm9pZCB7XG4gICAgaWYgKGxpZmVjeWNsZUNvbmZpZ3VyYXRpb24uaWRsZVJ1bnRpbWVTZXNzaW9uVGltZW91dCAmJiAhbGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5pZGxlUnVudGltZVNlc3Npb25UaW1lb3V0LmlzVW5yZXNvbHZlZCgpKSB7XG4gICAgICBpZiAobGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5pZGxlUnVudGltZVNlc3Npb25UaW1lb3V0LnRvU2Vjb25kcygpIDwgTElGRUNZQ0xFX01JTl9USU1FT1VULnRvU2Vjb25kcygpXG4gICAgICAgIHx8IGxpZmVjeWNsZUNvbmZpZ3VyYXRpb24uaWRsZVJ1bnRpbWVTZXNzaW9uVGltZW91dC50b1NlY29uZHMoKSA+IExJRkVDWUNMRV9NQVhfTElGRVRJTUUudG9TZWNvbmRzKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgSW52YWxpZElkbGVSdW50aW1lU2Vzc2lvblRpbWVvdXRgLCBgSWRsZSBydW50aW1lIHNlc3Npb24gdGltZW91dCBtdXN0IGJlIGJldHdlZW4gJHtMSUZFQ1lDTEVfTUlOX1RJTUVPVVQudG9TZWNvbmRzKCl9IHNlY29uZHMgYW5kICR7TElGRUNZQ0xFX01BWF9MSUZFVElNRS50b1NlY29uZHMoKX0gc2Vjb25kc2AsIHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5tYXhMaWZldGltZSAmJiAhbGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5tYXhMaWZldGltZS5pc1VucmVzb2x2ZWQoKSkge1xuICAgICAgaWYgKGxpZmVjeWNsZUNvbmZpZ3VyYXRpb24ubWF4TGlmZXRpbWUudG9TZWNvbmRzKCkgPCBMSUZFQ1lDTEVfTUlOX1RJTUVPVVQudG9TZWNvbmRzKClcbiAgICAgICAgfHwgbGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5tYXhMaWZldGltZS50b1NlY29uZHMoKSA+IExJRkVDWUNMRV9NQVhfTElGRVRJTUUudG9TZWNvbmRzKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgSW52YWxpZE1heExpZmV0aW1lYCwgYE1heGltdW0gbGlmZXRpbWUgbXVzdCBiZSBiZXR3ZWVuICR7TElGRUNZQ0xFX01JTl9USU1FT1VULnRvU2Vjb25kcygpfSBzZWNvbmRzIGFuZCAke0xJRkVDWUNMRV9NQVhfTElGRVRJTUUudG9TZWNvbmRzKCl9IHNlY29uZHNgLCB0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBydW50aW1lIG5hbWUgZm9ybWF0XG4gICAqIFBhdHRlcm46IF5bYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fSRcbiAgICogQHRocm93cyBFcnJvciBpZiB2YWxpZGF0aW9uIGZhaWxzXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlUnVudGltZU5hbWUoKTogdm9pZCB7XG4gICAgLy8gU2tpcCB2YWxpZGF0aW9uIGlmIHRoZSBuYW1lIGNvbnRhaW5zIENESyB0b2tlbnMgKHVucmVzb2x2ZWQgdmFsdWVzKVxuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQodGhpcy5hZ2VudFJ1bnRpbWVOYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGxlbmd0aFxuICAgIGNvbnN0IGxlbmd0aEVycm9ycyA9IHZhbGlkYXRlU3RyaW5nRmllbGQoe1xuICAgICAgdmFsdWU6IHRoaXMuYWdlbnRSdW50aW1lTmFtZSxcbiAgICAgIGZpZWxkTmFtZTogJ1J1bnRpbWUgbmFtZScsXG4gICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICBtYXhMZW5ndGg6IDQ4LFxuICAgIH0pO1xuXG4gICAgLy8gVmFsaWRhdGUgcGF0dGVyblxuICAgIGNvbnN0IHBhdHRlcm5FcnJvcnMgPSB2YWxpZGF0ZUZpZWxkUGF0dGVybihcbiAgICAgIHRoaXMuYWdlbnRSdW50aW1lTmFtZSxcbiAgICAgICdSdW50aW1lIG5hbWUnLFxuICAgICAgL15bYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fSQvLFxuICAgICAgJ1J1bnRpbWUgbmFtZSBtdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIgYW5kIGNvbnRhaW4gb25seSBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgdW5kZXJzY29yZXMnLFxuICAgICk7XG5cbiAgICAvLyBDb21iaW5lIGFuZCB0aHJvdyBpZiBhbnkgZXJyb3JzXG4gICAgY29uc3QgYWxsRXJyb3JzID0gWy4uLmxlbmd0aEVycm9ycywgLi4ucGF0dGVybkVycm9yc107XG4gICAgaWYgKGFsbEVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBJbnZhbGlkUnVudGltZU5hbWVgLCBhbGxFcnJvcnMuam9pbignXFxuJyksIHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGRlc2NyaXB0aW9uIGZvcm1hdFxuICAgKiBNdXN0IGJlIGJldHdlZW4gMSBhbmQgMTIwMCBjaGFyYWN0ZXJzIChwZXIgQ2xvdWRGb3JtYXRpb24gc3BlY2lmaWNhdGlvbilcbiAgICogQHRocm93cyBFcnJvciBpZiB2YWxpZGF0aW9uIGZhaWxzXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlRGVzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgLy8gU2tpcCB2YWxpZGF0aW9uIGlmIHRoZSBkZXNjcmlwdGlvbiBjb250YWlucyBDREsgdG9rZW5zICh1bnJlc29sdmVkIHZhbHVlcylcbiAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKHRoaXMuZGVzY3JpcHRpb24pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGVzY3JpcHRpb24pIHtcbiAgICAgIGNvbnN0IGVycm9ycyA9IHZhbGlkYXRlU3RyaW5nRmllbGQoe1xuICAgICAgICB2YWx1ZTogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgICAgZmllbGROYW1lOiAnRGVzY3JpcHRpb24nLFxuICAgICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICAgIG1heExlbmd0aDogMTIwMCxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgSW52YWxpZERlc2NyaXB0aW9uYCwgZXJyb3JzLmpvaW4oJ1xcbicpLCB0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgKiAtIE1heGltdW0gNTAgZW50cmllc1xuICAgKiAtIEtleTogMS0xMDAgY2hhcmFjdGVyc1xuICAgKiAtIFZhbHVlOiAwLTIwNDggY2hhcmFjdGVycyAocGVyIENsb3VkRm9ybWF0aW9uIHNwZWNpZmljYXRpb24pXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdmFsaWRhdGlvbiBmYWlsc1xuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUVudmlyb25tZW50VmFyaWFibGVzKGVudlZhcnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pOiB2b2lkIHtcbiAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMoZW52VmFycyk7XG5cbiAgICAvLyBWYWxpZGF0ZSBudW1iZXIgb2YgZW50cmllcyAoMC01MClcbiAgICBpZiAoZW50cmllcy5sZW5ndGggPiA1MCkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgbGl0YFRvb01hbnlFbnZpcm9ubWVudFZhcmlhYmxlc2AsXG4gICAgICAgIGBUb28gbWFueSBlbnZpcm9ubWVudCB2YXJpYWJsZXM6ICR7ZW50cmllcy5sZW5ndGh9LiBNYXhpbXVtIGFsbG93ZWQgaXMgNTBgLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBlbnRyaWVzKSB7XG4gICAgICAvLyBTa2lwIHZhbGlkYXRpb24gaWYga2V5IG9yIHZhbHVlIGNvbnRhaW5zIENESyB0b2tlbnNcbiAgICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQoa2V5KSB8fCBUb2tlbi5pc1VucmVzb2x2ZWQodmFsdWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSBrZXkgbGVuZ3RoXG4gICAgICBjb25zdCBsZW5ndGhFcnJvcnMgPSB2YWxpZGF0ZVN0cmluZ0ZpZWxkKHtcbiAgICAgICAgdmFsdWU6IGtleSxcbiAgICAgICAgZmllbGROYW1lOiBgRW52aXJvbm1lbnQgdmFyaWFibGUga2V5ICcke2tleX0nYCxcbiAgICAgICAgbWluTGVuZ3RoOiAxLFxuICAgICAgICBtYXhMZW5ndGg6IDEwMCxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBWYWxpZGF0ZSBrZXkgcGF0dGVyblxuICAgICAgY29uc3QgcGF0dGVybkVycm9ycyA9IHZhbGlkYXRlRmllbGRQYXR0ZXJuKFxuICAgICAgICBrZXksXG4gICAgICAgIGBFbnZpcm9ubWVudCB2YXJpYWJsZSBrZXkgJyR7a2V5fSdgLFxuICAgICAgICAvXlthLXpBLVpfXVthLXpBLVowLTlfXSokLyxcbiAgICAgICAgYEVudmlyb25tZW50IHZhcmlhYmxlIGtleSAnJHtrZXl9JyBtdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIgb3IgdW5kZXJzY29yZSBhbmQgY29udGFpbiBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGFuZCB1bmRlcnNjb3Jlc2AsXG4gICAgICApO1xuXG4gICAgICAvLyBDb21iaW5lIGFuZCB0aHJvdyBpZiBhbnkgZXJyb3JzXG4gICAgICBjb25zdCBhbGxFcnJvcnMgPSBbLi4ubGVuZ3RoRXJyb3JzLCAuLi5wYXR0ZXJuRXJyb3JzXTtcbiAgICAgIGlmIChhbGxFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBJbnZhbGlkRW52aXJvbm1lbnRWYXJpYWJsZUtleWAsIGFsbEVycm9ycy5qb2luKCdcXG4nKSwgdGhpcyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIHZhbHVlIGxlbmd0aCAoMC0yMDQ4IGNoYXJhY3RlcnMgcGVyIENsb3VkRm9ybWF0aW9uKVxuICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDIwNDgpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBsaXRgSW52YWxpZEVudmlyb25tZW50VmFyaWFibGVWYWx1ZWAsXG4gICAgICAgICAgYEludmFsaWQgZW52aXJvbm1lbnQgdmFyaWFibGUgdmFsdWUgbGVuZ3RoIGZvciBrZXkgJyR7a2V5fSc6ICR7dmFsdWUubGVuZ3RofSBjaGFyYWN0ZXJzLiBgICtcbiAgICAgICAgICAnVmFsdWVzIG11c3Qgbm90IGV4Y2VlZCAyMDQ4IGNoYXJhY3RlcnMnLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgdGFncyBmb3JtYXRcbiAgICogQHBhcmFtIHRhZ3MgVGhlIHRhZ3Mgb2JqZWN0IHRvIHZhbGlkYXRlXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdmFsaWRhdGlvbiBmYWlsc1xuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVRhZ3ModGFnczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIC8vIFZhbGlkYXRlIGVhY2ggdGFnIGtleSBhbmQgdmFsdWVcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0YWdzKSkge1xuICAgICAgLy8gU2tpcCB2YWxpZGF0aW9uIGlmIGtleSBvciB2YWx1ZSBjb250YWlucyBDREsgdG9rZW5zXG4gICAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKGtleSkgfHwgVG9rZW4uaXNVbnJlc29sdmVkKHZhbHVlKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgdGFnIGtleSBsZW5ndGhcbiAgICAgIGNvbnN0IGtleUxlbmd0aEVycm9ycyA9IHZhbGlkYXRlU3RyaW5nRmllbGQoe1xuICAgICAgICB2YWx1ZToga2V5LFxuICAgICAgICBmaWVsZE5hbWU6IGBUYWcga2V5IFwiJHtrZXl9XCJgLFxuICAgICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICAgIG1heExlbmd0aDogMjU2LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFZhbGlkYXRlIHRhZyBrZXkgcGF0dGVyblxuICAgICAgY29uc3Qga2V5UGF0dGVybkVycm9ycyA9IHZhbGlkYXRlRmllbGRQYXR0ZXJuKFxuICAgICAgICBrZXksXG4gICAgICAgIGBUYWcga2V5IFwiJHtrZXl9XCJgLFxuICAgICAgICAvXlthLXpBLVowLTlcXHMuXzovPStALV0qJC8sXG4gICAgICAgIGBUYWcga2V5IFwiJHtrZXl9XCIgY2FuIG9ubHkgY29udGFpbiBsZXR0ZXJzIChhLXosIEEtWiksIG51bWJlcnMgKDAtOSksIHNwYWNlcywgYW5kIHNwZWNpYWwgY2hhcmFjdGVycyAoLl86Lz0rQC0pYCxcbiAgICAgICk7XG5cbiAgICAgIC8vIENvbWJpbmUga2V5IGVycm9ycyBhbmQgdGhyb3cgaWYgYW55XG4gICAgICBjb25zdCBrZXlFcnJvcnMgPSBbLi4ua2V5TGVuZ3RoRXJyb3JzLCAuLi5rZXlQYXR0ZXJuRXJyb3JzXTtcbiAgICAgIGlmIChrZXlFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBJbnZhbGlkVGFnS2V5YCwga2V5RXJyb3JzLmpvaW4oJ1xcbicpLCB0aGlzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgTnVsbFRhZ1ZhbHVlYCwgYFRhZyB2YWx1ZSBmb3Iga2V5IFwiJHtrZXl9XCIgY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkYCwgdGhpcyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIHRhZyB2YWx1ZSBsZW5ndGhcbiAgICAgIGNvbnN0IHZhbHVlTGVuZ3RoRXJyb3JzID0gdmFsaWRhdGVTdHJpbmdGaWVsZCh7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgZmllbGROYW1lOiBgVGFnIHZhbHVlIGZvciBrZXkgXCIke2tleX1cImAsXG4gICAgICAgIG1pbkxlbmd0aDogMCxcbiAgICAgICAgbWF4TGVuZ3RoOiAyNTYsXG4gICAgICB9KTtcblxuICAgICAgLy8gVmFsaWRhdGUgdGFnIHZhbHVlIHBhdHRlcm5cbiAgICAgIGNvbnN0IHZhbHVlUGF0dGVybkVycm9ycyA9IHZhbGlkYXRlRmllbGRQYXR0ZXJuKFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgYFRhZyB2YWx1ZSBmb3Iga2V5IFwiJHtrZXl9XCJgLFxuICAgICAgICAvXlthLXpBLVowLTlcXHMuXzovPStALV0qJC8sXG4gICAgICAgIGBUYWcgdmFsdWUgZm9yIGtleSBcIiR7a2V5fVwiIGNhbiBvbmx5IGNvbnRhaW4gbGV0dGVycyAoYS16LCBBLVopLCBudW1iZXJzICgwLTkpLCBzcGFjZXMsIGFuZCBzcGVjaWFsIGNoYXJhY3RlcnMgKC5fOi89K0AtKWAsXG4gICAgICApO1xuXG4gICAgICAvLyBDb21iaW5lIHZhbHVlIGVycm9ycyBhbmQgdGhyb3cgaWYgYW55XG4gICAgICBjb25zdCB2YWx1ZUVycm9ycyA9IFsuLi52YWx1ZUxlbmd0aEVycm9ycywgLi4udmFsdWVQYXR0ZXJuRXJyb3JzXTtcbiAgICAgIGlmICh2YWx1ZUVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YEludmFsaWRUYWdWYWx1ZWAsIHZhbHVlRXJyb3JzLmpvaW4oJ1xcbicpLCB0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBjb250YWluZXIgVVJJIGZvcm1hdFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUNvbnRhaW5lclVyaSh1cmk6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIFNraXAgdmFsaWRhdGlvbiBpZiB0aGUgVVJJIGNvbnRhaW5zIENESyB0b2tlbnMgKHVucmVzb2x2ZWQgdmFsdWVzKVxuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQodXJpKSkge1xuICAgICAgLy8gQWRkIGEgd2FybmluZyB0aGF0IHZhbGlkYXRpb24gd2lsbCBiZSBza2lwcGVkIGZvciB0b2tlbi1iYXNlZCBVUklzXG4gICAgICBBbm5vdGF0aW9ucy5vZih0aGlzKS5hZGRJbmZvKFxuICAgICAgICAnQ29udGFpbmVyIFVSSSB2YWxpZGF0aW9uIHNraXBwZWQgYXMgaXQgY29udGFpbnMgdW5yZXNvbHZlZCBDREsgdG9rZW5zLiAnICtcbiAgICAgICAgJ1RoZSBVUkkgd2lsbCBiZSB2YWxpZGF0ZWQgYXQgZGVwbG95bWVudCB0aW1lLicsXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIE9ubHkgdmFsaWRhdGUgaWYgdGhlIFVSSSBpcyBhIGNvbmNyZXRlIHN0cmluZyAobm90IGEgdG9rZW4pXG4gICAgY29uc3QgcGF0dGVybiA9IC9eXFxkezEyfVxcLmRrclxcLmVjclxcLihbYS16MC05LV0rKVxcLmFtYXpvbmF3c1xcLmNvbVxcLygoPzpbYS16MC05XSsoPzpbLl8tXVthLXowLTldKykqXFwvKSpbYS16MC05XSsoPzpbLl8tXVthLXowLTldKykqKShbOkBdXFxTKykkLztcbiAgICBpZiAoIXBhdHRlcm4udGVzdCh1cmkpKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBsaXRgSW52YWxpZENvbnRhaW5lclVyaWAsXG4gICAgICAgIGBJbnZhbGlkIGNvbnRhaW5lciBVUkkgZm9ybWF0OiAke3VyaX0uIE11c3QgYmUgYSB2YWxpZCBFQ1IgVVJJIChlLmcuLCAxMjM0NTY3ODkwMTIuZGtyLmVjci51cy13ZXN0LTIuYW1hem9uYXdzLmNvbS9teS1hZ2VudDpsYXRlc3QpYCxcbiAgICAgICAgdGhpcyxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgSUFNIHJvbGUgQVJOIGZvcm1hdCBhbmQgc3RydWN0dXJlXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdmFsaWRhdGlvbiBmYWlsc1xuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVJvbGVBcm4ocm9sZUFybjogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gVmFsaWRhdGUgYmFzaWMgQVJOIGZvcm1hdCBmb3IgSUFNIHJvbGVzXG4gICAgY29uc3QgYXJuUGF0dGVybiA9IC9eYXJuOlthLXpcXC1dKzppYW06OlxcZHsxMn06cm9sZVxcL1thLXpBLVowLTkrPSwuQFxcLV9cXC9dKyQvO1xuICAgIGlmICghYXJuUGF0dGVybi50ZXN0KHJvbGVBcm4pKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBsaXRgSW52YWxpZFJvbGVBcm5Gb3JtYXRgLFxuICAgICAgICBgSW52YWxpZCBJQU0gcm9sZSBBUk4gZm9ybWF0OiAke3JvbGVBcm59LiBgICtcbiAgICAgICAgJ0V4cGVjdGVkIGZvcm1hdDogYXJuOjxwYXJ0aXRpb24+OmlhbTo6PGFjY291bnQtaWQ+OnJvbGUvPHJvbGUtbmFtZT4gb3IgYXJuOjxwYXJ0aXRpb24+OmlhbTo6PGFjY291bnQtaWQ+OnJvbGUvPHBhdGg+Lzxyb2xlLW5hbWU+JyxcbiAgICAgICAgdGhpcyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gUGFyc2UgdGhlIEFSTiBjb21wb25lbnRzIHVzaW5nIENESydzIEFybi5zcGxpdCgpXG4gICAgLy8gVXNlIFNMQVNIX1JFU09VUkNFX05BTUUgZm9ybWF0IGZvciBJQU0gcm9sZXMgKHdoaWNoIHVzZSBmb3JtYXQ6IHJvbGUvcm9sZS1uYW1lIG9yIHJvbGUvcGF0aC90by9yb2xlLW5hbWUpXG4gICAgY29uc3QgYXJuQ29tcG9uZW50cyA9IEFybi5zcGxpdChyb2xlQXJuLCBBcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSk7XG5cbiAgICBpZiAoYXJuQ29tcG9uZW50cy5zZXJ2aWNlICE9PSAnaWFtJykge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgSW52YWxpZFJvbGVBcm5TZXJ2aWNlYCwgYEludmFsaWQgc2VydmljZSBpbiBBUk46ICR7YXJuQ29tcG9uZW50cy5zZXJ2aWNlfS4gRXhwZWN0ZWQgJ2lhbScgZm9yIElBTSByb2xlIEFSTi5gLCB0aGlzKTtcbiAgICB9XG5cbiAgICBjb25zdCBhY2NvdW50SWQgPSBhcm5Db21wb25lbnRzLmFjY291bnQ7XG4gICAgaWYgKCFhY2NvdW50SWQgfHwgIS9eXFxkezEyfSQvLnRlc3QoYWNjb3VudElkKSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgSW52YWxpZFJvbGVBcm5BY2NvdW50SWRgLCBgSW52YWxpZCBBV1MgYWNjb3VudCBJRCBpbiByb2xlIEFSTjogJHthY2NvdW50SWR9LiBNdXN0IGJlIGEgMTItZGlnaXQgbnVtYmVyLmAsIHRoaXMpO1xuICAgIH1cblxuICAgIC8vIEV4dHJhY3Qgcm9sZSBuYW1lIGZyb20gcmVzb3VyY2VcbiAgICAvLyBGb3IgSUFNIHJvbGVzLCByZXNvdXJjZSB3aWxsIGJlIFwicm9sZVwiIGFuZCByZXNvdXJjZU5hbWUgd2lsbCBiZSB0aGUgcm9sZSBuYW1lICh3aXRoIG9wdGlvbmFsIHBhdGgpXG4gICAgY29uc3QgcmVzb3VyY2UgPSBhcm5Db21wb25lbnRzLnJlc291cmNlO1xuICAgIGNvbnN0IHJlc291cmNlTmFtZSA9IGFybkNvbXBvbmVudHMucmVzb3VyY2VOYW1lO1xuXG4gICAgaWYgKHJlc291cmNlICE9PSAncm9sZScpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YEludmFsaWRSb2xlQXJuUmVzb3VyY2VUeXBlYCwgYEludmFsaWQgcmVzb3VyY2UgdHlwZSBpbiBBUk46ICR7cmVzb3VyY2V9LiBFeHBlY3RlZCAncm9sZScgZm9yIElBTSByb2xlIEFSTi5gLCB0aGlzKTtcbiAgICB9XG5cbiAgICBpZiAoIXJlc291cmNlTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgTWlzc2luZ1JvbGVOYW1lYCwgJ1JvbGUgbmFtZSBpcyBtaXNzaW5nIGluIHRoZSBBUk4nLCB0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgcm9sZVBhdGhQYXJ0cyA9IHJlc291cmNlTmFtZS5zcGxpdCgnLycpO1xuICAgICAgY29uc3Qgcm9sZU5hbWUgPSByb2xlUGF0aFBhcnRzW3JvbGVQYXRoUGFydHMubGVuZ3RoIC0gMV07XG5cbiAgICAgIGlmIChyb2xlTmFtZS5sZW5ndGggPiA2NCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBSb2xlTmFtZVRvb0xvbmdgLCBgUm9sZSBuYW1lIGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgNjQgY2hhcmFjdGVyczogJHtyb2xlTmFtZX1gLCB0aGlzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzdGFja0FjY291bnQgPSBTdGFjay5vZih0aGlzKS5hY2NvdW50O1xuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKHN0YWNrQWNjb3VudCkgJiYgYWNjb3VudElkICE9PSBzdGFja0FjY291bnQpIHtcbiAgICAgIEFubm90YXRpb25zLm9mKHRoaXMpLmFkZFdhcm5pbmcoXG4gICAgICAgIGBJQU0gcm9sZSBpcyBmcm9tIGEgZGlmZmVyZW50IGFjY291bnQgKCR7YWNjb3VudElkfSkgdGhhbiB0aGUgc3RhY2sgYWNjb3VudCAoJHtzdGFja0FjY291bnR9KS4gYCArXG4gICAgICAgICdFbnN1cmUgY3Jvc3MtYWNjb3VudCBwZXJtaXNzaW9ucyBhcmUgcHJvcGVybHkgY29uZmlndXJlZC4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGUgcmVnaW9uIChJQU0gaXMgZ2xvYmFsLCBzbyByZWdpb24gc2hvdWxkIGJlIGVtcHR5KVxuICAgIGNvbnN0IHJlZ2lvbiA9IGFybkNvbXBvbmVudHMucmVnaW9uO1xuICAgIGNvbnN0IHN0YWNrUmVnaW9uID0gU3RhY2sub2YodGhpcykucmVnaW9uO1xuICAgIGlmIChyZWdpb24gJiYgcmVnaW9uICE9PSAnJyAmJiByZWdpb24gIT09IHN0YWNrUmVnaW9uICYmICFUb2tlbi5pc1VucmVzb2x2ZWQoc3RhY2tSZWdpb24pKSB7XG4gICAgICBBbm5vdGF0aW9ucy5vZih0aGlzKS5hZGRXYXJuaW5nKFxuICAgICAgICBgSUFNIHJvbGUgQVJOIGNvbnRhaW5zIGEgcmVnaW9uICgke3JlZ2lvbn0pIHRoYXQgZG9lc24ndCBtYXRjaCB0aGUgc3RhY2sgcmVnaW9uICgke3N0YWNrUmVnaW9ufSkuIGAgK1xuICAgICAgICAnSUFNIGlzIGEgZ2xvYmFsIHNlcnZpY2UsIHNvIHRoaXMgbWlnaHQgYmUgaW50ZW50aW9uYWwuJyxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBlbmRwb2ludCB0byB0aGlzIHJ1bnRpbWVcbiAgICogVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0aGF0IGNyZWF0ZXMgYSBSdW50aW1lRW5kcG9pbnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcnVudGltZVxuICAgKlxuICAgKiBAcGFyYW0gZW5kcG9pbnROYW1lIFRoZSBuYW1lIG9mIHRoZSBlbmRwb2ludFxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgZW5kcG9pbnRcbiAgICogQHJldHVybnMgVGhlIGNyZWF0ZWQgUnVudGltZUVuZHBvaW50XG4gICAqL1xuICBATWV0aG9kTWV0YWRhdGEoKVxuICBwdWJsaWMgYWRkRW5kcG9pbnQoXG4gICAgZW5kcG9pbnROYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IEFkZEVuZHBvaW50T3B0aW9ucyxcbiAgKTogUnVudGltZUVuZHBvaW50IHtcbiAgICAvLyBDcmVhdGUgdGhlIGVuZHBvaW50IChzZWN1cml0eSBjb25maWd1cmF0aW9uIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQpXG4gICAgY29uc3QgZW5kcG9pbnQgPSBuZXcgUnVudGltZUVuZHBvaW50KHRoaXMsIGBFbmRwb2ludCR7ZW5kcG9pbnROYW1lfWAsIHtcbiAgICAgIGVuZHBvaW50TmFtZTogZW5kcG9pbnROYW1lLFxuICAgICAgYWdlbnRSdW50aW1lSWQ6IHRoaXMuYWdlbnRSdW50aW1lSWQsXG4gICAgICBhZ2VudFJ1bnRpbWVWZXJzaW9uOiBvcHRpb25zPy52ZXJzaW9uID8/IHRoaXMuYWdlbnRSdW50aW1lVmVyc2lvbiA/PyAnMScsXG4gICAgICBkZXNjcmlwdGlvbjogb3B0aW9ucz8uZGVzY3JpcHRpb24sXG4gICAgfSk7XG5cbiAgICAvLyBBZGQgZGVwZW5kZW5jeTogZW5kcG9pbnQgbXVzdCB3YWl0IGZvciBydW50aW1lIHRvIGJlIGNyZWF0ZWRcbiAgICBlbmRwb2ludC5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy5ydW50aW1lUmVzb3VyY2UpO1xuXG4gICAgcmV0dXJuIGVuZHBvaW50O1xuICB9XG59XG4iXX0=
|
|
746
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInJ1bnRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsNkNBQStGO0FBQy9GLG1GQUFxRTtBQUNyRSx5REFBMkM7QUFDM0MseURBQTJDO0FBQzNDLHdEQUE4RDtBQUM5RCw0RUFBNEQ7QUFDNUQsOEVBQThGO0FBQzlGLDBFQUEwRTtBQUkxRSxtREFBcUY7QUFDckYsbUNBUWlCO0FBSWpCLGlEQUE2QztBQUM3Qyx5REFBcUQ7QUFFckQsbUNBQXVDO0FBQ3ZDLDZEQUFpRjtBQUNqRiw0RUFBK0U7QUFFL0U7OytFQUUrRTtBQUMvRTs7O0dBR0c7QUFDSCxNQUFNLHFCQUFxQixHQUFHLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRW5EOzs7R0FHRztBQUNILE1BQU0sc0JBQXNCLEdBQUcsc0JBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUEySHZEOzsrRUFFK0U7QUFFL0U7Ozs7Ozs7R0FPRztJQU1VLE9BQU87NEJBTG5CLG9DQUFrQjs7OztzQkFLVSwwQkFBVzs7O3VCQUFuQixTQUFRLFdBQVc7Ozs7dUNBa3JCckMsSUFBQSxrQ0FBYyxHQUFFO1lBQ2pCLG9MQUFPLFdBQVcsNkRBZ0JqQjtZQW5zQkgsNktBb3NCQzs7Ozs7UUFuc0JDLHNDQUFzQztRQUMvQixNQUFNLENBQVUscUJBQXFCLEdBQVcsOENBQThDLENBQUM7UUFFdEc7Ozs7Ozs7O1dBUUc7UUFDSSxNQUFNLENBQUMsMEJBQTBCLENBQ3RDLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUE2Qjs7Ozs7Ozs7OztZQUU3QixNQUFNLDJCQUE0QixTQUFRLDBCQUFXO2dCQUNuQyxlQUFlLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQztnQkFDeEMsY0FBYyxHQUFH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QUFFLFdBQVcsWUFBWSxFQUFFLEVBQUU7Z0JBQ3BFLFlBQVksRUFBRSxZQUFZO2dCQUMxQixjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7Z0JBQ25DLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxPQUFPLElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLEdBQUc7Z0JBQ3hFLFdBQVcsRUFBRSxPQUFPLEVBQUUsV0FBVzthQUNsQyxDQUFDLENBQUM7WUFFSCwrREFBK0Q7WUFDL0QsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBRWxELE9BQU8sUUFBUSxDQUFDO1NBQ2pCOztZQW5zQlUsdURBQU87Ozs7O0FBQVAsMEJBQU8iLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7IER1cmF0aW9uLCBTdGFjaywgQW5ub3RhdGlvbnMsIFRva2VuLCBBcm4sIEFybkZvcm1hdCwgTGF6eSwgTmFtZXMgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBiZWRyb2NrYWdlbnRjb3JlIGZyb20gJ2F3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlJztcbmltcG9ydCAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvciB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2Vycm9ycyc7XG5pbXBvcnQgeyBsaXQgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9oZWxwZXJzLWludGVybmFsJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhLCBNZXRob2RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHR5cGUgeyBSdW50aW1lQXV0aG9yaXplckNvbmZpZ3VyYXRpb24gfSBmcm9tICcuL2luYm91bmQtYXV0aC9ydW50aW1lLWF1dGhvcml6ZXItY29uZmlndXJhdGlvbic7XG5pbXBvcnQgdHlwZSB7IExvZ2dpbmdDb25maWcgfSBmcm9tICcuL29ic2VydmFiaWxpdHknO1xuaW1wb3J0IHsgY29uZmlndXJlVHJhY2luZ0RlbGl2ZXJ5LCBjb25maWd1cmVMb2dnaW5nRGVsaXZlcnkgfSBmcm9tICcuL29ic2VydmFiaWxpdHknO1xuaW1wb3J0IHtcbiAgUlVOVElNRV9MT0dTX0dST1VQX0FDVElPTlMsXG4gIFJVTlRJTUVfTE9HU19ERVNDUklCRV9BQ1RJT05TLFxuICBSVU5USU1FX0xPR1NfU1RSRUFNX0FDVElPTlMsXG4gIFJVTlRJTUVfWFJBWV9BQ1RJT05TLFxuICBSVU5USU1FX0NMT1VEV0FUQ0hfTUVUUklDU19BQ1RJT05TLFxuICBSVU5USU1FX0NMT1VEV0FUQ0hfTkFNRVNQQUNFLFxuICBSVU5USU1FX1dPUktMT0FEX0lERU5USVRZX0FDVElPTlMsXG59IGZyb20gJy4vcGVybXMnO1xuaW1wb3J0IHR5cGUgeyBBZ2VudFJ1bnRpbWVBcnRpZmFjdCB9IGZyb20gJy4vcnVudGltZS1hcnRpZmFjdCc7XG5cbmltcG9ydCB0eXBlIHsgSUJlZHJvY2tBZ2VudFJ1bnRpbWUsIEFnZW50UnVudGltZUF0dHJpYnV0ZXMgfSBmcm9tICcuL3J1bnRpbWUtYmFzZSc7XG5pbXBvcnQgeyBSdW50aW1lQmFzZSB9IGZyb20gJy4vcnVudGltZS1iYXNlJztcbmltcG9ydCB7IFJ1bnRpbWVFbmRwb2ludCB9IGZyb20gJy4vcnVudGltZS1lbmRwb2ludCc7XG5pbXBvcnQgdHlwZSB7IExpZmVjeWNsZUNvbmZpZ3VyYXRpb24sIFJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBQcm90b2NvbFR5cGUgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nRmllbGQsIHZhbGlkYXRlRmllbGRQYXR0ZXJuIH0gZnJvbSAnLi92YWxpZGF0aW9uLWhlbHBlcnMnO1xuaW1wb3J0IHsgUnVudGltZU5ldHdvcmtDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vbmV0d29yay9uZXR3b3JrLWNvbmZpZ3VyYXRpb24nO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRzXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKipcbiAqIE1pbmltdW0gdGltZW91dCBmb3IgaWRsZSBydW50aW1lIHNlc3Npb25zXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgTElGRUNZQ0xFX01JTl9USU1FT1VUID0gRHVyYXRpb24uc2Vjb25kcyg2MCk7XG5cbi8qKlxuICogTWF4aW11bSBsaWZldGltZSBmb3IgdGhlIGluc3RhbmNlXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgTElGRUNZQ0xFX01BWF9MSUZFVElNRSA9IER1cmF0aW9uLnNlY29uZHMoMjg4MDApO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvcHNcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhIEJlZHJvY2sgQWdlbnQgQ29yZSBSdW50aW1lIHJlc291cmNlXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGVxdWl2YWxlbnQgY29uc3RydWN0IGZyb20gYGF3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlYCBpbnN0ZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bnRpbWVQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBWYWxpZCBjaGFyYWN0ZXJzIGFyZSBhLXosIEEtWiwgMC05LCBfICh1bmRlcnNjb3JlKVxuICAgKiBNdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIgYW5kIGNhbiBiZSB1cCB0byA0OCBjaGFyYWN0ZXJzIGxvbmdcbiAgICogUGF0dGVybjogXlthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9JFxuICAgKiBAZGVmYXVsdCAtIGF1dG8gZ2VuZXJhdGVcbiAgICovXG4gIHJlYWRvbmx5IHJ1bnRpbWVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYXJ0aWZhY3QgY29uZmlndXJhdGlvbiBmb3IgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICogQ29udGFpbnMgdGhlIGNvbnRhaW5lciBjb25maWd1cmF0aW9uIHdpdGggRUNSIFVSSVxuICAgKi9cbiAgcmVhZG9ubHkgYWdlbnRSdW50aW1lQXJ0aWZhY3Q6IEFnZW50UnVudGltZUFydGlmYWN0O1xuXG4gIC8qKlxuICAgKiBUaGUgSUFNIHJvbGUgdGhhdCBwcm92aWRlcyBwZXJtaXNzaW9ucyBmb3IgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICogSWYgbm90IHByb3ZpZGVkLCBhIHJvbGUgd2lsbCBiZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHlcbiAgICogQGRlZmF1bHQgLSBBIG5ldyByb2xlIHdpbGwgYmUgY3JlYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgZXhlY3V0aW9uUm9sZT86IGlhbS5JUm9sZTtcblxuICAvKipcbiAgICogTmV0d29yayBjb25maWd1cmF0aW9uIGZvciB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBAZGVmYXVsdCAtIFJ1bnRpbWVOZXR3b3JrQ29uZmlndXJhdGlvbi51c2luZ1B1YmxpY05ldHdvcmsoKVxuICAgKi9cbiAgcmVhZG9ubHkgbmV0d29ya0NvbmZpZ3VyYXRpb24/OiBSdW50aW1lTmV0d29ya0NvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRlc2NyaXB0aW9uIGZvciB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBAZGVmYXVsdCAtIE5vIGRlc2NyaXB0aW9uXG4gICAqIExlbmd0aCBNaW5pbXVtOiAxICwgTWF4aW11bTogMTIwMFxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByb3RvY29sIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIEBkZWZhdWx0IC0gUHJvdG9jb2xUeXBlLkhUVFBcbiAgICovXG4gIHJlYWRvbmx5IHByb3RvY29sQ29uZmlndXJhdGlvbj86IFByb3RvY29sVHlwZTtcblxuICAvKipcbiAgICogRW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgYWdlbnQgcnVudGltZVxuICAgKiAtIE1heGltdW0gNTAgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAqIC0gS2V5OiBNdXN0IGJlIDEtMTAwIGNoYXJhY3RlcnMsIHN0YXJ0IHdpdGggbGV0dGVyIG9yIHVuZGVyc2NvcmUsIGNvbnRhaW4gb25seSBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgdW5kZXJzY29yZXNcbiAgICogLSBWYWx1ZTogTXVzdCBiZSAwLTIwNDggY2hhcmFjdGVycyAocGVyIENsb3VkRm9ybWF0aW9uIHNwZWNpZmljYXRpb24pXG4gICAqIEBkZWZhdWx0IC0gTm8gZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAqL1xuICByZWFkb25seSBlbnZpcm9ubWVudFZhcmlhYmxlcz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIEF1dGhvcml6ZXIgY29uZmlndXJhdGlvbiBmb3IgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICogVXNlIFJ1bnRpbWVBdXRob3JpemVyQ29uZmlndXJhdGlvbiBzdGF0aWMgbWV0aG9kcyB0byBjcmVhdGUgdGhlIGNvbmZpZ3VyYXRpb25cbiAgICogQGRlZmF1bHQgLSBSdW50aW1lQXV0aG9yaXplckNvbmZpZ3VyYXRpb24uaWFtKCkgKElBTSBhdXRoZW50aWNhdGlvbilcbiAgICovXG4gIHJlYWRvbmx5IGF1dGhvcml6ZXJDb25maWd1cmF0aW9uPzogUnVudGltZUF1dGhvcml6ZXJDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUYWdzIGZvciB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBBIGxpc3Qgb2Yga2V5OnZhbHVlIHBhaXJzIG9mIHRhZ3MgdG8gYXBwbHkgdG8gdGhpcyBSdW50aW1lIHJlc291cmNlXG4gICAqIEBkZWZhdWx0IHt9IC0gbm8gdGFnc1xuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gZm9yIEhUVFAgcmVxdWVzdCBoZWFkZXJzIHRoYXQgd2lsbCBiZSBwYXNzZWQgdGhyb3VnaCB0byB0aGUgcnVudGltZS5cbiAgICogQGRlZmF1bHQgLSBObyByZXF1ZXN0IGhlYWRlcnMgY29uZmlndXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24/OiBSZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIGxpZmUgY3ljbGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIEFnZW50Q29yZSBSdW50aW1lLlxuICAgKiBAZGVmYXVsdCAtIE5vIGxpZmVjeWNsZSBjb25maWd1cmF0aW9uXG4gICAqL1xuICByZWFkb25seSBsaWZlY3ljbGVDb25maWd1cmF0aW9uPzogTGlmZWN5Y2xlQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBlbmFibGUgWC1SYXkgdHJhY2luZyBmb3IgdGhpcyBydW50aW1lLlxuICAgKiBXaGVuIGVuYWJsZWQsIHRyYWNlcyB3aWxsIGJlIGRlbGl2ZXJlZCB0byBBV1MgWC1SYXkuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9vYnNlcnZhYmlsaXR5Lmh0bWxcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHRyYWNpbmdFbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTG9nZ2luZyBjb25maWd1cmF0aW9uIGZvciB0aGUgcnVudGltZS5cbiAgICogQWxsb3dzIHNlbmRpbmcgQVBQTElDQVRJT05fTE9HUyBhbmQgVVNBR0VfTE9HUyB0byBDbG91ZFdhdGNoIExvZ3MsIFMzLCBvciBLaW5lc2lzIERhdGEgRmlyZWhvc2UuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9vYnNlcnZhYmlsaXR5Lmh0bWxcbiAgICogQGRlZmF1bHQgLSBObyBsb2dnaW5nIGNvbmZpZ3VyZWRcbiAgICovXG4gIHJlYWRvbmx5IGxvZ2dpbmdDb25maWdzPzogTG9nZ2luZ0NvbmZpZ1tdO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGFkZGluZyBhbiBlbmRwb2ludCB0byB0aGUgcnVudGltZVxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBlcXVpdmFsZW50IGNvbnN0cnVjdCBmcm9tIGBhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZWAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZGRFbmRwb2ludE9wdGlvbnMge1xuICAvKipcbiAgICogRGVzY3JpcHRpb24gZm9yIHRoZSBlbmRwb2ludCwgTXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDEyMDAgY2hhcmFjdGVyc1xuICAgKiBAZGVmYXVsdCAtIE5vIGRlc2NyaXB0aW9uXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSBydW50aW1lIHZlcnNpb24gZm9yIHRoaXMgZW5kcG9pbnRcbiAgICogQGRlZmF1bHQgIDFcbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb24/OiBzdHJpbmc7XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzc1xuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKipcbiAqIEJlZHJvY2sgQWdlbnQgQ29yZSBSdW50aW1lXG4gKiBFbmFibGVzIHJ1bm5pbmcgY29udGFpbmVyaXplZCBhZ2VudHMgd2l0aCBzcGVjaWZpYyBuZXR3b3JrIGNvbmZpZ3VyYXRpb25zLFxuICogc2VjdXJpdHkgc2V0dGluZ3MsIGFuZCBydW50aW1lIGFydGlmYWN0cy5cbiAqXG4gKiBAcmVzb3VyY2UgQVdTOjpCZWRyb2NrQWdlbnRDb3JlOjpSdW50aW1lXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvcnVudGltZS5odG1sXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbi8qKlxuICogVGhpcyBBUEkgaGFzIGJlZW4gZ3JhZHVhdGVkIHRvIHN0YWJsZS5cbiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgZXF1aXZhbGVudCBjb25zdHJ1Y3QgZnJvbSBgYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmVgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBSdW50aW1lIGV4dGVuZHMgUnVudGltZUJhc2Uge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1iZWRyb2NrLWFnZW50Y29yZS1hbHBoYS5SdW50aW1lJztcblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIEFnZW50IFJ1bnRpbWUgdXNpbmcgYXR0cmlidXRlc1xuICAgKiBUaGlzIGFsbG93cyB5b3UgdG8gcmVmZXJlbmNlIGFuIEFnZW50IFJ1bnRpbWUgdGhhdCB3YXMgY3JlYXRlZCBvdXRzaWRlIG9mIENES1xuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIGNvbnN0cnVjdCBzY29wZVxuICAgKiBAcGFyYW0gaWQgVGhlIGNvbnN0cnVjdCBpZFxuICAgKiBAcGFyYW0gYXR0cnMgVGhlIGF0dHJpYnV0ZXMgb2YgdGhlIGV4aXN0aW5nIEFnZW50IFJ1bnRpbWVcbiAgICogQHJldHVybnMgQW4gSUJlZHJvY2tBZ2VudFJ1bnRpbWUgaW5zdGFuY2UgcmVwcmVzZW50aW5nIHRoZSBpbXBvcnRlZCBydW50aW1lXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21BZ2VudFJ1bnRpbWVBdHRyaWJ1dGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBhdHRyczogQWdlbnRSdW50aW1lQXR0cmlidXRlcyxcbiAgKTogSUJlZHJvY2tBZ2VudFJ1bnRpbWUge1xuICAgIGNsYXNzIEltcG9ydGVkQmVkcm9ja0FnZW50UnVudGltZSBleHRlbmRzIFJ1bnRpbWVCYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBhZ2VudFJ1bnRpbWVBcm4gPSBhdHRycy5hZ2VudFJ1bnRpbWVBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgYWdlbnRSdW50aW1lSWQgPSBhdHRycy5hZ2VudFJ1bnRpbWVJZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBhZ2VudFJ1bnRpbWVOYW1lID0gYXR0cnMuYWdlbnRSdW50aW1lTmFtZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBhZ2VudFJ1bnRpbWVWZXJzaW9uID0gYXR0cnMuYWdlbnRSdW50aW1lVmVyc2lvbjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBhZ2VudFN0YXR1cyA9IGF0dHJzLmFnZW50U3RhdHVzO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGRlc2NyaXB0aW9uID0gYXR0cnMuZGVzY3JpcHRpb247XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEF0ID0gYXR0cnMuY3JlYXRlZEF0O1xuICAgICAgcHVibGljIHJlYWRvbmx5IGxhc3RVcGRhdGVkQXQgPSBhdHRycy5sYXN0VXBkYXRlZEF0O1xuXG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcm9sZTogaWFtLklSb2xlO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGdyYW50UHJpbmNpcGFsOiBpYW0uSVByaW5jaXBhbDtcblxuICAgICAgY29uc3RydWN0b3IoczogQ29uc3RydWN0LCBpOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIocywgaSk7XG4gICAgICAgIHRoaXMucm9sZSA9IGlhbS5Sb2xlLmZyb21Sb2xlQXJuKHRoaXMsICdSb2xlJywgYXR0cnMucm9sZUFybik7XG4gICAgICAgIHRoaXMuZ3JhbnRQcmluY2lwYWwgPSB0aGlzLnJvbGU7XG4gICAgICAgIGlmIChhdHRycy5zZWN1cml0eUdyb3Vwcykge1xuICAgICAgICAgIHRoaXMuX2Nvbm5lY3Rpb25zID0gbmV3IGVjMi5Db25uZWN0aW9ucyh7XG4gICAgICAgICAgICBzZWN1cml0eUdyb3VwczogYXR0cnMuc2VjdXJpdHlHcm91cHMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydGVkQmVkcm9ja0FnZW50UnVudGltZShzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICogQGF0dHJpYnV0ZVxuICAgKiBAcmV0dXJucyBhIHRva2VuIHJlcHJlc2VudGluZyB0aGUgQVJOIG9mIHRoaXMgYWdlbnQgcnVudGltZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFnZW50UnVudGltZUFybjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIEBhdHRyaWJ1dGVcbiAgICogQHJldHVybnMgYSB0b2tlbiByZXByZXNlbnRpbmcgdGhlIElEIG9mIHRoaXMgYWdlbnQgcnVudGltZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFnZW50UnVudGltZUlkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBAYXR0cmlidXRlXG4gICAqIEByZXR1cm5zIGEgdG9rZW4gcmVwcmVzZW50aW5nIHRoZSBuYW1lIG9mIHRoaXMgYWdlbnQgcnVudGltZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFnZW50UnVudGltZU5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHJvbGU6IGlhbS5JUm9sZTtcbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIEBhdHRyaWJ1dGVcbiAgICogQHJldHVybnMgYSB0b2tlbiByZXByZXNlbnRpbmcgdGhlIHZlcnNpb24gb2YgdGhpcyBhZ2VudCBydW50aW1lXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYWdlbnRSdW50aW1lVmVyc2lvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBzdGF0dXMgb2YgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICogQGF0dHJpYnV0ZVxuICAgKiBAcmV0dXJucyBhIHRva2VuIHJlcHJlc2VudGluZyB0aGUgc3RhdHVzIG9mIHRoaXMgYWdlbnQgcnVudGltZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFnZW50U3RhdHVzPzogc3RyaW5nO1xuICAvKipcbiAgICogT3B0aW9uYWwgZGVzY3JpcHRpb24gZm9yIHRoZSBhZ2VudCBydW50aW1lXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgdGltZXN0YW1wIHdoZW4gdGhlIGFnZW50IHJ1bnRpbWUgd2FzIGNyZWF0ZWRcbiAgICogQGF0dHJpYnV0ZVxuICAgKiBAcmV0dXJucyBhIHRva2VuIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gdGltZXN0YW1wIG9mIHRoaXMgYWdlbnQgcnVudGltZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZWRBdD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSB0aW1lc3RhbXAgd2hlbiB0aGUgYWdlbnQgcnVudGltZSB3YXMgbGFzdCB1cGRhdGVkXG4gICAqIEBhdHRyaWJ1dGVcbiAgICogQHJldHVybnMgYSB0b2tlbiByZXByZXNlbnRpbmcgdGhlIGxhc3QgdXBkYXRlIHRpbWVzdGFtcCBvZiB0aGlzIGFnZW50IHJ1bnRpbWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBsYXN0VXBkYXRlZEF0Pzogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgZ3JhbnRQcmluY2lwYWw6IGlhbS5JUHJpbmNpcGFsO1xuICBwcml2YXRlIHJlYWRvbmx5IHJ1bnRpbWVSZXNvdXJjZTogYmVkcm9ja2FnZW50Y29yZS5DZm5SdW50aW1lO1xuICAvKipcbiAgICogVGhlIGFydGlmYWN0IGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhZ2VudCBydW50aW1lXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYWdlbnRSdW50aW1lQXJ0aWZhY3Q6IEFnZW50UnVudGltZUFydGlmYWN0O1xuICBwcml2YXRlIHJlYWRvbmx5IG5ldHdvcmtDb25maWd1cmF0aW9uOiBSdW50aW1lTmV0d29ya0NvbmZpZ3VyYXRpb24gO1xuICBwcml2YXRlIHJlYWRvbmx5IHByb3RvY29sQ29uZmlndXJhdGlvbjogUHJvdG9jb2xUeXBlO1xuICBwcml2YXRlIHJlYWRvbmx5IGF1dGhvcml6ZXJDb25maWd1cmF0aW9uPzogUnVudGltZUF1dGhvcml6ZXJDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IGxpZmVjeWNsZUNvbmZpZ3VyYXRpb24/OiBMaWZlY3ljbGVDb25maWd1cmF0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSdW50aW1lUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIC8vIE1heGltdW0gbmFtZSBsZW5ndGggb2YgNDggY2hhcmFjdGVyc1xuICAgICAgLy8gQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1iZWRyb2NrYWdlbnRjb3JlLXJ1bnRpbWUuaHRtbCNjZm4tYmVkcm9ja2FnZW50Y29yZS1ydW50aW1lLWFnZW50cnVudGltZW5hbWVcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHMucnVudGltZU5hbWUgPz9cbiAgICAgICAgTGF6eS5zdHJpbmcoe1xuICAgICAgICAgIHByb2R1Y2U6ICgpID0+IE5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7IG1heExlbmd0aDogNDggfSksXG4gICAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgLy8gQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICB0aGlzLmFnZW50UnVudGltZU5hbWUgPSB0aGlzLnBoeXNpY2FsTmFtZTtcbiAgICB0aGlzLnZhbGlkYXRlUnVudGltZU5hbWUoKTtcblxuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBwcm9wcy5kZXNjcmlwdGlvbjtcbiAgICBpZiAodGhpcy5kZXNjcmlwdGlvbikge1xuICAgICAgdGhpcy52YWxpZGF0ZURlc2NyaXB0aW9uKCk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmVudmlyb25tZW50VmFyaWFibGVzKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlRW52aXJvbm1lbnRWYXJpYWJsZXMocHJvcHMuZW52aXJvbm1lbnRWYXJpYWJsZXMpO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy50YWdzKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlVGFncyhwcm9wcy50YWdzKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMucmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24pIHtcbiAgICAgIHRoaXMudmFsaWRhdGVSZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbihwcm9wcy5yZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbik7XG4gICAgfVxuXG4gICAgdGhpcy5saWZlY3ljbGVDb25maWd1cmF0aW9uID0gcHJvcHMubGlmZWN5Y2xlQ29uZmlndXJhdGlvbiA/IHtcbiAgICAgIGlkbGVSdW50aW1lU2Vzc2lvblRpbWVvdXQ6IHByb3BzLmxpZmVjeWNsZUNvbmZpZ3VyYXRpb24/LmlkbGVSdW50aW1lU2Vzc2lvblRpbWVvdXQsXG4gICAgICBtYXhMaWZldGltZTogcHJvcHMubGlmZWN5Y2xlQ29uZmlndXJhdGlvbj8ubWF4TGlmZXRpbWUsXG4gICAgfSA6IHVuZGVmaW5lZDtcblxuICAgIGlmICh0aGlzLmxpZmVjeWNsZUNvbmZpZ3VyYXRpb24pIHtcbiAgICAgIHRoaXMudmFsaWRhdGVMaWZlY3ljbGVDb25maWd1cmF0aW9uKHRoaXMubGlmZWN5Y2xlQ29uZmlndXJhdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmV4ZWN1dGlvblJvbGUpIHtcbiAgICAgIHRoaXMucm9sZSA9IHByb3BzLmV4ZWN1dGlvblJvbGU7XG4gICAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZChwcm9wcy5leGVjdXRpb25Sb2xlLnJvbGVBcm4pKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVSb2xlQXJuKHByb3BzLmV4ZWN1dGlvblJvbGUucm9sZUFybik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCAnRXhlY3V0aW9uUm9sZScsIHtcbiAgICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2JlZHJvY2stYWdlbnRjb3JlLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdFeGVjdXRpb24gcm9sZSBmb3IgQmVkcm9jayBBZ2VudCBDb3JlIFJ1bnRpbWUnLFxuICAgICAgICBtYXhTZXNzaW9uRHVyYXRpb246IER1cmF0aW9uLmhvdXJzKDgpLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuYWRkRXhlY3V0aW9uUm9sZVBlcm1pc3Npb25zKCk7XG5cbiAgICB0aGlzLmdyYW50UHJpbmNpcGFsID0gdGhpcy5yb2xlO1xuICAgIHRoaXMuYWdlbnRSdW50aW1lQXJ0aWZhY3QgPSBwcm9wcy5hZ2VudFJ1bnRpbWVBcnRpZmFjdDtcbiAgICAvLyBTZXQgdXAgbmV0d29yayBjb25maWd1cmF0aW9uIHdpdGggVlBDIHN1cHBvcnRcbiAgICB0aGlzLm5ldHdvcmtDb25maWd1cmF0aW9uID0gcHJvcHMubmV0d29ya0NvbmZpZ3VyYXRpb24gPz8gUnVudGltZU5ldHdvcmtDb25maWd1cmF0aW9uLnVzaW5nUHVibGljTmV0d29yaygpO1xuICAgIC8vIFNldCBjb25uZWN0aW9ucyAtIGNyZWF0ZSBhIHNoYXJlZCBjb25uZWN0aW9ucyBvYmplY3RcbiAgICBpZiAodGhpcy5uZXR3b3JrQ29uZmlndXJhdGlvbi5jb25uZWN0aW9ucykge1xuICAgICAgLy8gVXNlIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24ncyBjb25uZWN0aW9ucyBhcyB0aGUgc2hhcmVkIG9iamVjdFxuICAgICAgdGhpcy5fY29ubmVjdGlvbnMgPSB0aGlzLm5ldHdvcmtDb25maWd1cmF0aW9uLmNvbm5lY3Rpb25zO1xuICAgIH1cbiAgICB0aGlzLnByb3RvY29sQ29uZmlndXJhdGlvbiA9IHByb3BzLnByb3RvY29sQ29uZmlndXJhdGlvbiA/PyBQcm90b2NvbFR5cGUuSFRUUDtcbiAgICB0aGlzLmF1dGhvcml6ZXJDb25maWd1cmF0aW9uID0gcHJvcHMuYXV0aG9yaXplckNvbmZpZ3VyYXRpb247XG5cbiAgICBjb25zdCBjZm5Qcm9wczogYW55ID0ge1xuICAgICAgYWdlbnRSdW50aW1lTmFtZTogdGhpcy5hZ2VudFJ1bnRpbWVOYW1lLFxuICAgICAgcm9sZUFybjogdGhpcy5yb2xlLnJvbGVBcm4sXG4gICAgICBhZ2VudFJ1bnRpbWVBcnRpZmFjdDogTGF6eS5hbnkoe1xuICAgICAgICBwcm9kdWNlOiAoKSA9PiB0aGlzLnJlbmRlckFnZW50UnVudGltZUFydGlmYWN0KCksXG4gICAgICB9KSxcbiAgICAgIG5ldHdvcmtDb25maWd1cmF0aW9uOiBMYXp5LmFueSh7XG4gICAgICAgIHByb2R1Y2U6ICgpID0+IHRoaXMubmV0d29ya0NvbmZpZ3VyYXRpb24uX3JlbmRlcih0aGlzLl9jb25uZWN0aW9ucyksXG4gICAgICB9KSxcbiAgICAgIHByb3RvY29sQ29uZmlndXJhdGlvbjogTGF6eS5zdHJpbmcoe1xuICAgICAgICBwcm9kdWNlOiAoKSA9PiB0aGlzLnByb3RvY29sQ29uZmlndXJhdGlvbixcbiAgICAgIH0pLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IExhenkuYW55KHtcbiAgICAgICAgcHJvZHVjZTogKCkgPT4gdGhpcy5yZW5kZXJFbnZpcm9ubWVudFZhcmlhYmxlcyhwcm9wcy5lbnZpcm9ubWVudFZhcmlhYmxlcyksXG4gICAgICB9KSxcbiAgICAgIHRhZ3M6IHByb3BzLnRhZ3MgPz8ge30sXG4gICAgICBsaWZlY3ljbGVDb25maWd1cmF0aW9uOiB0aGlzLnJlbmRlckxpZmVjeWNsZUNvbmZpZ3VyYXRpb24oKSxcbiAgICB9O1xuICAgIGlmIChwcm9wcy5yZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbikge1xuICAgICAgY2ZuUHJvcHMucmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24gPSB0aGlzLnJlbmRlclJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uKHByb3BzLnJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uKTtcbiAgICB9XG4gICAgaWYgKHByb3BzLmF1dGhvcml6ZXJDb25maWd1cmF0aW9uKSB7XG4gICAgICBjZm5Qcm9wcy5hdXRob3JpemVyQ29uZmlndXJhdGlvbiA9IExhenkuYW55KHtcbiAgICAgICAgcHJvZHVjZTogKCkgPT4gdGhpcy5hdXRob3JpemVyQ29uZmlndXJhdGlvbiEuX3JlbmRlcigpLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5ydW50aW1lUmVzb3VyY2UgPSBuZXcgYmVkcm9ja2FnZW50Y29yZS5DZm5SdW50aW1lKHRoaXMsICdSZXNvdXJjZScsIGNmblByb3BzIGFzIGJlZHJvY2thZ2VudGNvcmUuQ2ZuUnVudGltZVByb3BzKTtcblxuICAgIC8vIEFkZCBkZXBlbmRlbmN5IG9uIHRoZSByb2xlIChmb3IgYm90aCBjdXN0b20gYW5kIGF1dG8tY3JlYXRlZCByb2xlcylcbiAgICAvLyBUaGlzIGVuc3VyZXMgdGhlIFJ1bnRpbWUgd2FpdHMgZm9yIHRoZSByb2xlIGFuZCBhbGwgaXRzIHBvbGljaWVzIChpbmNsdWRpbmcgRUNSIHBlcm1pc3Npb25zKSB0byBiZSBjcmVhdGVkXG4gICAgdGhpcy5ydW50aW1lUmVzb3VyY2Uubm9kZS5hZGREZXBlbmRlbmN5KHRoaXMucm9sZSk7XG5cbiAgICB0aGlzLmFnZW50UnVudGltZUlkID0gdGhpcy5ydW50aW1lUmVzb3VyY2UuYXR0ckFnZW50UnVudGltZUlkO1xuICAgIHRoaXMuYWdlbnRSdW50aW1lQXJuID0gdGhpcy5ydW50aW1lUmVzb3VyY2UuYXR0ckFnZW50UnVudGltZUFybjtcbiAgICB0aGlzLmFnZW50U3RhdHVzID0gdGhpcy5ydW50aW1lUmVzb3VyY2UuYXR0clN0YXR1cztcbiAgICB0aGlzLmFnZW50UnVudGltZVZlcnNpb24gPSB0aGlzLnJ1bnRpbWVSZXNvdXJjZS5hdHRyQWdlbnRSdW50aW1lVmVyc2lvbjtcbiAgICB0aGlzLmNyZWF0ZWRBdCA9IHRoaXMucnVudGltZVJlc291cmNlLmF0dHJDcmVhdGVkQXQ7XG4gICAgdGhpcy5sYXN0VXBkYXRlZEF0ID0gdGhpcy5ydW50aW1lUmVzb3VyY2UuYXR0ckxhc3RVcGRhdGVkQXQ7XG5cbiAgICAvLyBDb25maWd1cmUgb2JzZXJ2YWJpbGl0eSAodHJhY2luZyBhbmQgbG9nZ2luZylcbiAgICBpZiAocHJvcHMudHJhY2luZ0VuYWJsZWQpIHtcbiAgICAgIGNvbmZpZ3VyZVRyYWNpbmdEZWxpdmVyeSh0aGlzLCB0aGlzLmFnZW50UnVudGltZUFybik7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmxvZ2dpbmdDb25maWdzICYmIHByb3BzLmxvZ2dpbmdDb25maWdzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbmZpZ3VyZUxvZ2dpbmdEZWxpdmVyeSh0aGlzLCB0aGlzLmFnZW50UnVudGltZUFybiwgcHJvcHMubG9nZ2luZ0NvbmZpZ3MpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIENsb3VkRm9ybWF0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJFbnZpcm9ubWVudFZhcmlhYmxlcyhlbnZWYXJzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IGFueSB7XG4gICAgaWYgKCFlbnZWYXJzIHx8IE9iamVjdC5rZXlzKGVudlZhcnMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGVudlZhcnM7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBwcm9wZXIgcGVybWlzc2lvbnMgdG8gdGhlIGV4ZWN1dGlvbiByb2xlIGZvciB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBCYXNlZCBvbjogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9ydW50aW1lLXBlcm1pc3Npb25zLmh0bWxcbiAgICovXG4gIHByaXZhdGUgYWRkRXhlY3V0aW9uUm9sZVBlcm1pc3Npb25zKCkge1xuICAgIGNvbnN0IHJlZ2lvbiA9IFN0YWNrLm9mKHRoaXMpLnJlZ2lvbjtcbiAgICBjb25zdCBhY2NvdW50ID0gU3RhY2sub2YodGhpcykuYWNjb3VudDtcblxuICAgIC8vIENsb3VkV2F0Y2ggTG9ncyAtIExvZyBHcm91cCBvcGVyYXRpb25zXG4gICAgdGhpcy5yb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIHNpZDogJ0xvZ0dyb3VwQWNjZXNzJyxcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFJVTlRJTUVfTE9HU19HUk9VUF9BQ1RJT05TLFxuICAgICAgcmVzb3VyY2VzOiBbYGFybjoke1N0YWNrLm9mKHRoaXMpLnBhcnRpdGlvbn06bG9nczoke3JlZ2lvbn06JHthY2NvdW50fTpsb2ctZ3JvdXA6L2F3cy9iZWRyb2NrLWFnZW50Y29yZS9ydW50aW1lcy8qYF0sXG4gICAgfSkpO1xuXG4gICAgLy8gQ2xvdWRXYXRjaCBMb2dzIC0gRGVzY3JpYmUgYWxsIGxvZyBncm91cHNcbiAgICB0aGlzLnJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgc2lkOiAnRGVzY3JpYmVMb2dHcm91cHMnLFxuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogUlVOVElNRV9MT0dTX0RFU0NSSUJFX0FDVElPTlMsXG4gICAgICByZXNvdXJjZXM6IFtgYXJuOiR7U3RhY2sub2YodGhpcykucGFydGl0aW9ufTpsb2dzOiR7cmVnaW9ufToke2FjY291bnR9OmxvZy1ncm91cDoqYF0sXG4gICAgfSkpO1xuXG4gICAgLy8gQ2xvdWRXYXRjaCBMb2dzIC0gTG9nIFN0cmVhbSBvcGVyYXRpb25zXG4gICAgdGhpcy5yb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIHNpZDogJ0xvZ1N0cmVhbUFjY2VzcycsXG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBSVU5USU1FX0xPR1NfU1RSRUFNX0FDVElPTlMsXG4gICAgICByZXNvdXJjZXM6IFtgYXJuOiR7U3RhY2sub2YodGhpcykucGFydGl0aW9ufTpsb2dzOiR7cmVnaW9ufToke2FjY291bnR9OmxvZy1ncm91cDovYXdzL2JlZHJvY2stYWdlbnRjb3JlL3J1bnRpbWVzLyo6bG9nLXN0cmVhbToqYF0sXG4gICAgfSkpO1xuXG4gICAgLy8gWC1SYXkgVHJhY2luZyAtIG11c3QgYmUgKiBmb3IgdHJhY2luZ1xuICAgIHRoaXMucm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdYUmF5QWNjZXNzJyxcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFJVTlRJTUVfWFJBWV9BQ1RJT05TLFxuICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICB9KSk7XG5cbiAgICAvLyBDbG91ZFdhdGNoIE1ldHJpY3MgLSBzY29wZWQgdG8gYmVkcm9jay1hZ2VudGNvcmUgbmFtZXNwYWNlXG4gICAgdGhpcy5yb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIHNpZDogJ0Nsb3VkV2F0Y2hNZXRyaWNzJyxcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFJVTlRJTUVfQ0xPVURXQVRDSF9NRVRSSUNTX0FDVElPTlMsXG4gICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAnY2xvdWR3YXRjaDpuYW1lc3BhY2UnOiBSVU5USU1FX0NMT1VEV0FUQ0hfTkFNRVNQQUNFLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KSk7XG5cbiAgICAvLyBCZWRyb2NrIEFnZW50Q29yZSBXb3JrbG9hZCBJZGVudGl0eSBBY2Nlc3NcbiAgICAvLyBOb3RlOiBUaGUgYWdlbnQgbmFtZSB3aWxsIGJlIGRldGVybWluZWQgYXQgcnVudGltZSwgc28gd2UgdXNlIGEgd2lsZGNhcmQgcGF0dGVyblxuICAgIHRoaXMucm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdHZXRBZ2VudEFjY2Vzc1Rva2VuJyxcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFJVTlRJTUVfV09SS0xPQURfSURFTlRJVFlfQUNUSU9OUyxcbiAgICAgIHJlc291cmNlczogW1xuICAgICAgICBgYXJuOiR7U3RhY2sub2YodGhpcykucGFydGl0aW9ufTpiZWRyb2NrLWFnZW50Y29yZToke3JlZ2lvbn06JHthY2NvdW50fTp3b3JrbG9hZC1pZGVudGl0eS1kaXJlY3RvcnkvZGVmYXVsdGAsXG4gICAgICAgIGBhcm46JHtTdGFjay5vZih0aGlzKS5wYXJ0aXRpb259OmJlZHJvY2stYWdlbnRjb3JlOiR7cmVnaW9ufToke2FjY291bnR9Ondvcmtsb2FkLWlkZW50aXR5LWRpcmVjdG9yeS9kZWZhdWx0L3dvcmtsb2FkLWlkZW50aXR5LypgLFxuICAgICAgXSxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgYXJ0aWZhY3QgY29uZmlndXJhdGlvbiBmb3IgQ2xvdWRGb3JtYXRpb25cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIHJlbmRlckFnZW50UnVudGltZUFydGlmYWN0KCk6IGFueSB7XG4gICAgLy8gc2V0IHBlcm1pc3Npb24gd2l0aCBiaW5kXG4gICAgdGhpcy5hZ2VudFJ1bnRpbWVBcnRpZmFjdC5iaW5kKHRoaXMsIHRoaXMpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuYWdlbnRSdW50aW1lQXJ0aWZhY3QuX3JlbmRlcigpO1xuICAgIGlmICgoY29uZmlnIGFzIGFueSkuY29kZSkgeyAvLyBTM0ltYWdlXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2RlQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgIGNvZGU6IChjb25maWcgYXMgYW55KS5jb2RlLFxuICAgICAgICAgIHJ1bnRpbWU6IChjb25maWcgYXMgYW55KS5ydW50aW1lLFxuICAgICAgICAgIGVudHJ5UG9pbnQ6IChjb25maWcgYXMgYW55KS5lbnRyeVBvaW50LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRWNySW1hZ2Ugb3IgQXNzZXRJbWFnZVxuICAgICAgY29uc3QgY29udGFpbmVyVXJpID0gKGNvbmZpZyBhcyBhbnkpLmNvbnRhaW5lclVyaTtcbiAgICAgIGlmIChjb250YWluZXJVcmkpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUNvbnRhaW5lclVyaShjb250YWluZXJVcmkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGFpbmVyQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgIGNvbnRhaW5lclVyaTogY29udGFpbmVyVXJpLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgcmVxdWVzdCBoZWFkZXIgY29uZmlndXJhdGlvbiBmb3IgQ2xvdWRGb3JtYXRpb25cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIHJlbmRlclJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uKHJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uPzogUmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24pOiBhbnkge1xuICAgIGlmICghcmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24/LmFsbG93bGlzdGVkSGVhZGVycykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJBbGxvd2xpc3Q6IHJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uLmFsbG93bGlzdGVkSGVhZGVycyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGxpZmVjeWNsZSBjb25maWd1cmF0aW9uIGZvciBDbG91ZEZvcm1hdGlvblxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgcmVuZGVyTGlmZWN5Y2xlQ29uZmlndXJhdGlvbigpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBpZGxlUnVudGltZVNlc3Npb25UaW1lb3V0OiB0aGlzLmxpZmVjeWNsZUNvbmZpZ3VyYXRpb24/LmlkbGVSdW50aW1lU2Vzc2lvblRpbWVvdXQ/LnRvU2Vjb25kcygpLFxuICAgICAgbWF4TGlmZXRpbWU6IHRoaXMubGlmZWN5Y2xlQ29uZmlndXJhdGlvbj8ubWF4TGlmZXRpbWU/LnRvU2Vjb25kcygpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSByZXF1ZXN0IGhlYWRlciBjb25maWd1cmF0aW9uXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdmFsaWRhdGlvbiBmYWlsc1xuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uKHJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uOiBSZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGFsbEVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAocmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24uYWxsb3dsaXN0ZWRIZWFkZXJzKSB7XG4gICAgICBpZiAocmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24uYWxsb3dsaXN0ZWRIZWFkZXJzLmxlbmd0aCA8IDEgfHwgcmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24uYWxsb3dsaXN0ZWRIZWFkZXJzLmxlbmd0aCA+IDIwKSB7XG4gICAgICAgIGFsbEVycm9ycy5wdXNoKCdSZXF1ZXN0IGhlYWRlciBhbGxvdyBsaXN0IGNvbnRhaW4gYmV0d2VlbiAxIGFuZCAyMCBoZWFkZXJzJyk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgaGVhZGVyIG9mIHJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uLmFsbG93bGlzdGVkSGVhZGVycykge1xuICAgICAgICAvLyBWYWxpZGF0ZSBsZW5ndGhcbiAgICAgICAgY29uc3QgbGVuZ3RoRXJyb3JzID0gdmFsaWRhdGVTdHJpbmdGaWVsZCh7XG4gICAgICAgICAgdmFsdWU6IGhlYWRlcixcbiAgICAgICAgICBmaWVsZE5hbWU6ICdSZXF1ZXN0IGhlYWRlcicsXG4gICAgICAgICAgbWluTGVuZ3RoOiAxLFxuICAgICAgICAgIG1heExlbmd0aDogMjU2LFxuICAgICAgICB9KTtcbiAgICAgICAgYWxsRXJyb3JzLnB1c2goLi4ubGVuZ3RoRXJyb3JzKTtcblxuICAgICAgICBjb25zdCBwYXR0ZXJuRXJyb3JzID0gdmFsaWRhdGVGaWVsZFBhdHRlcm4oXG4gICAgICAgICAgaGVhZGVyLFxuICAgICAgICAgICdSZXF1ZXN0IGhlYWRlcicsXG4gICAgICAgICAgLyhBdXRob3JpemF0aW9ufFgtQW16bi1CZWRyb2NrLUFnZW50Q29yZS1SdW50aW1lLUN1c3RvbS1bYS16QS1aMC05LV0rKS8sXG4gICAgICAgICAgJ1JlcXVlc3QgaGVhZGVyIG11c3QgY29udGFpbiBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGFuZCBoeXBoZW5zJyxcbiAgICAgICAgKTtcbiAgICAgICAgYWxsRXJyb3JzLnB1c2goLi4ucGF0dGVybkVycm9ycyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhbGxFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgSW52YWxpZFJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uYCwgYWxsRXJyb3JzLmpvaW4oJ1xcbicpLCB0aGlzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBsaWZlY3ljbGUgY29uZmlndXJhdGlvblxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHZhbGlkYXRpb24gZmFpbHNcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVMaWZlY3ljbGVDb25maWd1cmF0aW9uKGxpZmVjeWNsZUNvbmZpZ3VyYXRpb246IExpZmVjeWNsZUNvbmZpZ3VyYXRpb24pOiB2b2lkIHtcbiAgICBpZiAobGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5pZGxlUnVudGltZVNlc3Npb25UaW1lb3V0ICYmICFsaWZlY3ljbGVDb25maWd1cmF0aW9uLmlkbGVSdW50aW1lU2Vzc2lvblRpbWVvdXQuaXNVbnJlc29sdmVkKCkpIHtcbiAgICAgIGlmIChsaWZlY3ljbGVDb25maWd1cmF0aW9uLmlkbGVSdW50aW1lU2Vzc2lvblRpbWVvdXQudG9TZWNvbmRzKCkgPCBMSUZFQ1lDTEVfTUlOX1RJTUVPVVQudG9TZWNvbmRzKClcbiAgICAgICAgfHwgbGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5pZGxlUnVudGltZVNlc3Npb25UaW1lb3V0LnRvU2Vjb25kcygpID4gTElGRUNZQ0xFX01BWF9MSUZFVElNRS50b1NlY29uZHMoKSkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBJbnZhbGlkSWRsZVJ1bnRpbWVTZXNzaW9uVGltZW91dGAsIGBJZGxlIHJ1bnRpbWUgc2Vzc2lvbiB0aW1lb3V0IG11c3QgYmUgYmV0d2VlbiAke0xJRkVDWUNMRV9NSU5fVElNRU9VVC50b1NlY29uZHMoKX0gc2Vjb25kcyBhbmQgJHtMSUZFQ1lDTEVfTUFYX0xJRkVUSU1FLnRvU2Vjb25kcygpfSBzZWNvbmRzYCwgdGhpcyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChsaWZlY3ljbGVDb25maWd1cmF0aW9uLm1heExpZmV0aW1lICYmICFsaWZlY3ljbGVDb25maWd1cmF0aW9uLm1heExpZmV0aW1lLmlzVW5yZXNvbHZlZCgpKSB7XG4gICAgICBpZiAobGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5tYXhMaWZldGltZS50b1NlY29uZHMoKSA8IExJRkVDWUNMRV9NSU5fVElNRU9VVC50b1NlY29uZHMoKVxuICAgICAgICB8fCBsaWZlY3ljbGVDb25maWd1cmF0aW9uLm1heExpZmV0aW1lLnRvU2Vjb25kcygpID4gTElGRUNZQ0xFX01BWF9MSUZFVElNRS50b1NlY29uZHMoKSkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBJbnZhbGlkTWF4TGlmZXRpbWVgLCBgTWF4aW11bSBsaWZldGltZSBtdXN0IGJlIGJldHdlZW4gJHtMSUZFQ1lDTEVfTUlOX1RJTUVPVVQudG9TZWNvbmRzKCl9IHNlY29uZHMgYW5kICR7TElGRUNZQ0xFX01BWF9MSUZFVElNRS50b1NlY29uZHMoKX0gc2Vjb25kc2AsIHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIHJ1bnRpbWUgbmFtZSBmb3JtYXRcbiAgICogUGF0dGVybjogXlthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9JFxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHZhbGlkYXRpb24gZmFpbHNcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVSdW50aW1lTmFtZSgpOiB2b2lkIHtcbiAgICAvLyBTa2lwIHZhbGlkYXRpb24gaWYgdGhlIG5hbWUgY29udGFpbnMgQ0RLIHRva2VucyAodW5yZXNvbHZlZCB2YWx1ZXMpXG4gICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZCh0aGlzLmFnZW50UnVudGltZU5hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgbGVuZ3RoXG4gICAgY29uc3QgbGVuZ3RoRXJyb3JzID0gdmFsaWRhdGVTdHJpbmdGaWVsZCh7XG4gICAgICB2YWx1ZTogdGhpcy5hZ2VudFJ1bnRpbWVOYW1lLFxuICAgICAgZmllbGROYW1lOiAnUnVudGltZSBuYW1lJyxcbiAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgIG1heExlbmd0aDogNDgsXG4gICAgfSk7XG5cbiAgICAvLyBWYWxpZGF0ZSBwYXR0ZXJuXG4gICAgY29uc3QgcGF0dGVybkVycm9ycyA9IHZhbGlkYXRlRmllbGRQYXR0ZXJuKFxuICAgICAgdGhpcy5hZ2VudFJ1bnRpbWVOYW1lLFxuICAgICAgJ1J1bnRpbWUgbmFtZScsXG4gICAgICAvXlthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9JC8sXG4gICAgICAnUnVudGltZSBuYW1lIG11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciBhbmQgY29udGFpbiBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGFuZCB1bmRlcnNjb3JlcycsXG4gICAgKTtcblxuICAgIC8vIENvbWJpbmUgYW5kIHRocm93IGlmIGFueSBlcnJvcnNcbiAgICBjb25zdCBhbGxFcnJvcnMgPSBbLi4ubGVuZ3RoRXJyb3JzLCAuLi5wYXR0ZXJuRXJyb3JzXTtcbiAgICBpZiAoYWxsRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YEludmFsaWRSdW50aW1lTmFtZWAsIGFsbEVycm9ycy5qb2luKCdcXG4nKSwgdGhpcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgZGVzY3JpcHRpb24gZm9ybWF0XG4gICAqIE11c3QgYmUgYmV0d2VlbiAxIGFuZCAxMjAwIGNoYXJhY3RlcnMgKHBlciBDbG91ZEZvcm1hdGlvbiBzcGVjaWZpY2F0aW9uKVxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHZhbGlkYXRpb24gZmFpbHNcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVEZXNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICAvLyBTa2lwIHZhbGlkYXRpb24gaWYgdGhlIGRlc2NyaXB0aW9uIGNvbnRhaW5zIENESyB0b2tlbnMgKHVucmVzb2x2ZWQgdmFsdWVzKVxuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQodGhpcy5kZXNjcmlwdGlvbikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kZXNjcmlwdGlvbikge1xuICAgICAgY29uc3QgZXJyb3JzID0gdmFsaWRhdGVTdHJpbmdGaWVsZCh7XG4gICAgICAgIHZhbHVlOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgICBmaWVsZE5hbWU6ICdEZXNjcmlwdGlvbicsXG4gICAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgICAgbWF4TGVuZ3RoOiAxMjAwLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBJbnZhbGlkRGVzY3JpcHRpb25gLCBlcnJvcnMuam9pbignXFxuJyksIHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAqIC0gTWF4aW11bSA1MCBlbnRyaWVzXG4gICAqIC0gS2V5OiAxLTEwMCBjaGFyYWN0ZXJzXG4gICAqIC0gVmFsdWU6IDAtMjA0OCBjaGFyYWN0ZXJzIChwZXIgQ2xvdWRGb3JtYXRpb24gc3BlY2lmaWNhdGlvbilcbiAgICogQHRocm93cyBFcnJvciBpZiB2YWxpZGF0aW9uIGZhaWxzXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlRW52aXJvbm1lbnRWYXJpYWJsZXMoZW52VmFyczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhlbnZWYXJzKTtcblxuICAgIC8vIFZhbGlkYXRlIG51bWJlciBvZiBlbnRyaWVzICgwLTUwKVxuICAgIGlmIChlbnRyaWVzLmxlbmd0aCA+IDUwKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBsaXRgVG9vTWFueUVudmlyb25tZW50VmFyaWFibGVzYCxcbiAgICAgICAgYFRvbyBtYW55IGVudmlyb25tZW50IHZhcmlhYmxlczogJHtlbnRyaWVzLmxlbmd0aH0uIE1heGltdW0gYWxsb3dlZCBpcyA1MGAsXG4gICAgICAgIHRoaXMsXG4gICAgICApO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGVudHJpZXMpIHtcbiAgICAgIC8vIFNraXAgdmFsaWRhdGlvbiBpZiBrZXkgb3IgdmFsdWUgY29udGFpbnMgQ0RLIHRva2Vuc1xuICAgICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChrZXkpIHx8IFRva2VuLmlzVW5yZXNvbHZlZCh2YWx1ZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIGtleSBsZW5ndGhcbiAgICAgIGNvbnN0IGxlbmd0aEVycm9ycyA9IHZhbGlkYXRlU3RyaW5nRmllbGQoe1xuICAgICAgICB2YWx1ZToga2V5LFxuICAgICAgICBmaWVsZE5hbWU6IGBFbnZpcm9ubWVudCB2YXJpYWJsZSBrZXkgJyR7a2V5fSdgLFxuICAgICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICAgIG1heExlbmd0aDogMTAwLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFZhbGlkYXRlIGtleSBwYXR0ZXJuXG4gICAgICBjb25zdCBwYXR0ZXJuRXJyb3JzID0gdmFsaWRhdGVGaWVsZFBhdHRlcm4oXG4gICAgICAgIGtleSxcbiAgICAgICAgYEVudmlyb25tZW50IHZhcmlhYmxlIGtleSAnJHtrZXl9J2AsXG4gICAgICAgIC9eW2EtekEtWl9dW2EtekEtWjAtOV9dKiQvLFxuICAgICAgICBgRW52aXJvbm1lbnQgdmFyaWFibGUga2V5ICcke2tleX0nIG11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciBvciB1bmRlcnNjb3JlIGFuZCBjb250YWluIG9ubHkgbGV0dGVycywgbnVtYmVycywgYW5kIHVuZGVyc2NvcmVzYCxcbiAgICAgICk7XG5cbiAgICAgIC8vIENvbWJpbmUgYW5kIHRocm93IGlmIGFueSBlcnJvcnNcbiAgICAgIGNvbnN0IGFsbEVycm9ycyA9IFsuLi5sZW5ndGhFcnJvcnMsIC4uLnBhdHRlcm5FcnJvcnNdO1xuICAgICAgaWYgKGFsbEVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YEludmFsaWRFbnZpcm9ubWVudFZhcmlhYmxlS2V5YCwgYWxsRXJyb3JzLmpvaW4oJ1xcbicpLCB0aGlzKTtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgdmFsdWUgbGVuZ3RoICgwLTIwNDggY2hhcmFjdGVycyBwZXIgQ2xvdWRGb3JtYXRpb24pXG4gICAgICBpZiAodmFsdWUubGVuZ3RoID4gMjA0OCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIGxpdGBJbnZhbGlkRW52aXJvbm1lbnRWYXJpYWJsZVZhbHVlYCxcbiAgICAgICAgICBgSW52YWxpZCBlbnZpcm9ubWVudCB2YXJpYWJsZSB2YWx1ZSBsZW5ndGggZm9yIGtleSAnJHtrZXl9JzogJHt2YWx1ZS5sZW5ndGh9IGNoYXJhY3RlcnMuIGAgK1xuICAgICAgICAgICdWYWx1ZXMgbXVzdCBub3QgZXhjZWVkIDIwNDggY2hhcmFjdGVycycsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSB0YWdzIGZvcm1hdFxuICAgKiBAcGFyYW0gdGFncyBUaGUgdGFncyBvYmplY3QgdG8gdmFsaWRhdGVcbiAgICogQHRocm93cyBFcnJvciBpZiB2YWxpZGF0aW9uIGZhaWxzXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlVGFncyh0YWdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KTogdm9pZCB7XG4gICAgLy8gVmFsaWRhdGUgZWFjaCB0YWcga2V5IGFuZCB2YWx1ZVxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRhZ3MpKSB7XG4gICAgICAvLyBTa2lwIHZhbGlkYXRpb24gaWYga2V5IG9yIHZhbHVlIGNvbnRhaW5zIENESyB0b2tlbnNcbiAgICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQoa2V5KSB8fCBUb2tlbi5pc1VucmVzb2x2ZWQodmFsdWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSB0YWcga2V5IGxlbmd0aFxuICAgICAgY29uc3Qga2V5TGVuZ3RoRXJyb3JzID0gdmFsaWRhdGVTdHJpbmdGaWVsZCh7XG4gICAgICAgIHZhbHVlOiBrZXksXG4gICAgICAgIGZpZWxkTmFtZTogYFRhZyBrZXkgXCIke2tleX1cImAsXG4gICAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgICAgbWF4TGVuZ3RoOiAyNTYsXG4gICAgICB9KTtcblxuICAgICAgLy8gVmFsaWRhdGUgdGFnIGtleSBwYXR0ZXJuXG4gICAgICBjb25zdCBrZXlQYXR0ZXJuRXJyb3JzID0gdmFsaWRhdGVGaWVsZFBhdHRlcm4oXG4gICAgICAgIGtleSxcbiAgICAgICAgYFRhZyBrZXkgXCIke2tleX1cImAsXG4gICAgICAgIC9eW2EtekEtWjAtOVxccy5fOi89K0AtXSokLyxcbiAgICAgICAgYFRhZyBrZXkgXCIke2tleX1cIiBjYW4gb25seSBjb250YWluIGxldHRlcnMgKGEteiwgQS1aKSwgbnVtYmVycyAoMC05KSwgc3BhY2VzLCBhbmQgc3BlY2lhbCBjaGFyYWN0ZXJzICguXzovPStALSlgLFxuICAgICAgKTtcblxuICAgICAgLy8gQ29tYmluZSBrZXkgZXJyb3JzIGFuZCB0aHJvdyBpZiBhbnlcbiAgICAgIGNvbnN0IGtleUVycm9ycyA9IFsuLi5rZXlMZW5ndGhFcnJvcnMsIC4uLmtleVBhdHRlcm5FcnJvcnNdO1xuICAgICAgaWYgKGtleUVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YEludmFsaWRUYWdLZXlgLCBrZXlFcnJvcnMuam9pbignXFxuJyksIHRoaXMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBOdWxsVGFnVmFsdWVgLCBgVGFnIHZhbHVlIGZvciBrZXkgXCIke2tleX1cIiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWRgLCB0aGlzKTtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgdGFnIHZhbHVlIGxlbmd0aFxuICAgICAgY29uc3QgdmFsdWVMZW5ndGhFcnJvcnMgPSB2YWxpZGF0ZVN0cmluZ0ZpZWxkKHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBmaWVsZE5hbWU6IGBUYWcgdmFsdWUgZm9yIGtleSBcIiR7a2V5fVwiYCxcbiAgICAgICAgbWluTGVuZ3RoOiAwLFxuICAgICAgICBtYXhMZW5ndGg6IDI1NixcbiAgICAgIH0pO1xuXG4gICAgICAvLyBWYWxpZGF0ZSB0YWcgdmFsdWUgcGF0dGVyblxuICAgICAgY29uc3QgdmFsdWVQYXR0ZXJuRXJyb3JzID0gdmFsaWRhdGVGaWVsZFBhdHRlcm4oXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBgVGFnIHZhbHVlIGZvciBrZXkgXCIke2tleX1cImAsXG4gICAgICAgIC9eW2EtekEtWjAtOVxccy5fOi89K0AtXSokLyxcbiAgICAgICAgYFRhZyB2YWx1ZSBmb3Iga2V5IFwiJHtrZXl9XCIgY2FuIG9ubHkgY29udGFpbiBsZXR0ZXJzIChhLXosIEEtWiksIG51bWJlcnMgKDAtOSksIHNwYWNlcywgYW5kIHNwZWNpYWwgY2hhcmFjdGVycyAoLl86Lz0rQC0pYCxcbiAgICAgICk7XG5cbiAgICAgIC8vIENvbWJpbmUgdmFsdWUgZXJyb3JzIGFuZCB0aHJvdyBpZiBhbnlcbiAgICAgIGNvbnN0IHZhbHVlRXJyb3JzID0gWy4uLnZhbHVlTGVuZ3RoRXJyb3JzLCAuLi52YWx1ZVBhdHRlcm5FcnJvcnNdO1xuICAgICAgaWYgKHZhbHVlRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgSW52YWxpZFRhZ1ZhbHVlYCwgdmFsdWVFcnJvcnMuam9pbignXFxuJyksIHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGNvbnRhaW5lciBVUkkgZm9ybWF0XG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlQ29udGFpbmVyVXJpKHVyaTogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gU2tpcCB2YWxpZGF0aW9uIGlmIHRoZSBVUkkgY29udGFpbnMgQ0RLIHRva2VucyAodW5yZXNvbHZlZCB2YWx1ZXMpXG4gICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZCh1cmkpKSB7XG4gICAgICAvLyBBZGQgYSB3YXJuaW5nIHRoYXQgdmFsaWRhdGlvbiB3aWxsIGJlIHNraXBwZWQgZm9yIHRva2VuLWJhc2VkIFVSSXNcbiAgICAgIEFubm90YXRpb25zLm9mKHRoaXMpLmFkZEluZm8oXG4gICAgICAgICdDb250YWluZXIgVVJJIHZhbGlkYXRpb24gc2tpcHBlZCBhcyBpdCBjb250YWlucyB1bnJlc29sdmVkIENESyB0b2tlbnMuICcgK1xuICAgICAgICAnVGhlIFVSSSB3aWxsIGJlIHZhbGlkYXRlZCBhdCBkZXBsb3ltZW50IHRpbWUuJyxcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gT25seSB2YWxpZGF0ZSBpZiB0aGUgVVJJIGlzIGEgY29uY3JldGUgc3RyaW5nIChub3QgYSB0b2tlbilcbiAgICBjb25zdCBwYXR0ZXJuID0gL15cXGR7MTJ9XFwuZGtyXFwuZWNyXFwuKFthLXowLTktXSspXFwuYW1hem9uYXdzXFwuY29tXFwvKCg/OlthLXowLTldKyg/OlsuXy1dW2EtejAtOV0rKSpcXC8pKlthLXowLTldKyg/OlsuXy1dW2EtejAtOV0rKSopKFs6QF1cXFMrKSQvO1xuICAgIGlmICghcGF0dGVybi50ZXN0KHVyaSkpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGxpdGBJbnZhbGlkQ29udGFpbmVyVXJpYCxcbiAgICAgICAgYEludmFsaWQgY29udGFpbmVyIFVSSSBmb3JtYXQ6ICR7dXJpfS4gTXVzdCBiZSBhIHZhbGlkIEVDUiBVUkkgKGUuZy4sIDEyMzQ1Njc4OTAxMi5ka3IuZWNyLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tL215LWFnZW50OmxhdGVzdClgLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBJQU0gcm9sZSBBUk4gZm9ybWF0IGFuZCBzdHJ1Y3R1cmVcbiAgICogQHRocm93cyBFcnJvciBpZiB2YWxpZGF0aW9uIGZhaWxzXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlUm9sZUFybihyb2xlQXJuOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBWYWxpZGF0ZSBiYXNpYyBBUk4gZm9ybWF0IGZvciBJQU0gcm9sZXNcbiAgICBjb25zdCBhcm5QYXR0ZXJuID0gL15hcm46W2EtelxcLV0rOmlhbTo6XFxkezEyfTpyb2xlXFwvW2EtekEtWjAtOSs9LC5AXFwtX1xcL10rJC87XG4gICAgaWYgKCFhcm5QYXR0ZXJuLnRlc3Qocm9sZUFybikpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGxpdGBJbnZhbGlkUm9sZUFybkZvcm1hdGAsXG4gICAgICAgIGBJbnZhbGlkIElBTSByb2xlIEFSTiBmb3JtYXQ6ICR7cm9sZUFybn0uIGAgK1xuICAgICAgICAnRXhwZWN0ZWQgZm9ybWF0OiBhcm46PHBhcnRpdGlvbj46aWFtOjo8YWNjb3VudC1pZD46cm9sZS88cm9sZS1uYW1lPiBvciBhcm46PHBhcnRpdGlvbj46aWFtOjo8YWNjb3VudC1pZD46cm9sZS88cGF0aD4vPHJvbGUtbmFtZT4nLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBQYXJzZSB0aGUgQVJOIGNvbXBvbmVudHMgdXNpbmcgQ0RLJ3MgQXJuLnNwbGl0KClcbiAgICAvLyBVc2UgU0xBU0hfUkVTT1VSQ0VfTkFNRSBmb3JtYXQgZm9yIElBTSByb2xlcyAod2hpY2ggdXNlIGZvcm1hdDogcm9sZS9yb2xlLW5hbWUgb3Igcm9sZS9wYXRoL3RvL3JvbGUtbmFtZSlcbiAgICBjb25zdCBhcm5Db21wb25lbnRzID0gQXJuLnNwbGl0KHJvbGVBcm4sIEFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FKTtcblxuICAgIGlmIChhcm5Db21wb25lbnRzLnNlcnZpY2UgIT09ICdpYW0nKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBJbnZhbGlkUm9sZUFyblNlcnZpY2VgLCBgSW52YWxpZCBzZXJ2aWNlIGluIEFSTjogJHthcm5Db21wb25lbnRzLnNlcnZpY2V9LiBFeHBlY3RlZCAnaWFtJyBmb3IgSUFNIHJvbGUgQVJOLmAsIHRoaXMpO1xuICAgIH1cblxuICAgIGNvbnN0IGFjY291bnRJZCA9IGFybkNvbXBvbmVudHMuYWNjb3VudDtcbiAgICBpZiAoIWFjY291bnRJZCB8fCAhL15cXGR7MTJ9JC8udGVzdChhY2NvdW50SWQpKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBJbnZhbGlkUm9sZUFybkFjY291bnRJZGAsIGBJbnZhbGlkIEFXUyBhY2NvdW50IElEIGluIHJvbGUgQVJOOiAke2FjY291bnRJZH0uIE11c3QgYmUgYSAxMi1kaWdpdCBudW1iZXIuYCwgdGhpcyk7XG4gICAgfVxuXG4gICAgLy8gRXh0cmFjdCByb2xlIG5hbWUgZnJvbSByZXNvdXJjZVxuICAgIC8vIEZvciBJQU0gcm9sZXMsIHJlc291cmNlIHdpbGwgYmUgXCJyb2xlXCIgYW5kIHJlc291cmNlTmFtZSB3aWxsIGJlIHRoZSByb2xlIG5hbWUgKHdpdGggb3B0aW9uYWwgcGF0aClcbiAgICBjb25zdCByZXNvdXJjZSA9IGFybkNvbXBvbmVudHMucmVzb3VyY2U7XG4gICAgY29uc3QgcmVzb3VyY2VOYW1lID0gYXJuQ29tcG9uZW50cy5yZXNvdXJjZU5hbWU7XG5cbiAgICBpZiAocmVzb3VyY2UgIT09ICdyb2xlJykge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgSW52YWxpZFJvbGVBcm5SZXNvdXJjZVR5cGVgLCBgSW52YWxpZCByZXNvdXJjZSB0eXBlIGluIEFSTjogJHtyZXNvdXJjZX0uIEV4cGVjdGVkICdyb2xlJyBmb3IgSUFNIHJvbGUgQVJOLmAsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmICghcmVzb3VyY2VOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBNaXNzaW5nUm9sZU5hbWVgLCAnUm9sZSBuYW1lIGlzIG1pc3NpbmcgaW4gdGhlIEFSTicsIHRoaXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByb2xlUGF0aFBhcnRzID0gcmVzb3VyY2VOYW1lLnNwbGl0KCcvJyk7XG4gICAgICBjb25zdCByb2xlTmFtZSA9IHJvbGVQYXRoUGFydHNbcm9sZVBhdGhQYXJ0cy5sZW5ndGggLSAxXTtcblxuICAgICAgaWYgKHJvbGVOYW1lLmxlbmd0aCA+IDY0KSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YFJvbGVOYW1lVG9vTG9uZ2AsIGBSb2xlIG5hbWUgZXhjZWVkcyBtYXhpbXVtIGxlbmd0aCBvZiA2NCBjaGFyYWN0ZXJzOiAke3JvbGVOYW1lfWAsIHRoaXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHN0YWNrQWNjb3VudCA9IFN0YWNrLm9mKHRoaXMpLmFjY291bnQ7XG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQoc3RhY2tBY2NvdW50KSAmJiBhY2NvdW50SWQgIT09IHN0YWNrQWNjb3VudCkge1xuICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkV2FybmluZyhcbiAgICAgICAgYElBTSByb2xlIGlzIGZyb20gYSBkaWZmZXJlbnQgYWNjb3VudCAoJHthY2NvdW50SWR9KSB0aGFuIHRoZSBzdGFjayBhY2NvdW50ICgke3N0YWNrQWNjb3VudH0pLiBgICtcbiAgICAgICAgJ0Vuc3VyZSBjcm9zcy1hY2NvdW50IHBlcm1pc3Npb25zIGFyZSBwcm9wZXJseSBjb25maWd1cmVkLicsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHRoZSByZWdpb24gKElBTSBpcyBnbG9iYWwsIHNvIHJlZ2lvbiBzaG91bGQgYmUgZW1wdHkpXG4gICAgY29uc3QgcmVnaW9uID0gYXJuQ29tcG9uZW50cy5yZWdpb247XG4gICAgY29uc3Qgc3RhY2tSZWdpb24gPSBTdGFjay5vZih0aGlzKS5yZWdpb247XG4gICAgaWYgKHJlZ2lvbiAmJiByZWdpb24gIT09ICcnICYmIHJlZ2lvbiAhPT0gc3RhY2tSZWdpb24gJiYgIVRva2VuLmlzVW5yZXNvbHZlZChzdGFja1JlZ2lvbikpIHtcbiAgICAgIEFubm90YXRpb25zLm9mKHRoaXMpLmFkZFdhcm5pbmcoXG4gICAgICAgIGBJQU0gcm9sZSBBUk4gY29udGFpbnMgYSByZWdpb24gKCR7cmVnaW9ufSkgdGhhdCBkb2Vzbid0IG1hdGNoIHRoZSBzdGFjayByZWdpb24gKCR7c3RhY2tSZWdpb259KS4gYCArXG4gICAgICAgICdJQU0gaXMgYSBnbG9iYWwgc2VydmljZSwgc28gdGhpcyBtaWdodCBiZSBpbnRlbnRpb25hbC4nLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIGVuZHBvaW50IHRvIHRoaXMgcnVudGltZVxuICAgKiBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRoYXQgY3JlYXRlcyBhIFJ1bnRpbWVFbmRwb2ludCBhc3NvY2lhdGVkIHdpdGggdGhpcyBydW50aW1lXG4gICAqXG4gICAqIEBwYXJhbSBlbmRwb2ludE5hbWUgVGhlIG5hbWUgb2YgdGhlIGVuZHBvaW50XG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBlbmRwb2ludFxuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBSdW50aW1lRW5kcG9pbnRcbiAgICovXG4gIEBNZXRob2RNZXRhZGF0YSgpXG4gIHB1YmxpYyBhZGRFbmRwb2ludChcbiAgICBlbmRwb2ludE5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogQWRkRW5kcG9pbnRPcHRpb25zLFxuICApOiBSdW50aW1lRW5kcG9pbnQge1xuICAgIC8vIENyZWF0ZSB0aGUgZW5kcG9pbnQgKHNlY3VyaXR5IGNvbmZpZ3VyYXRpb24gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZClcbiAgICBjb25zdCBlbmRwb2ludCA9IG5ldyBSdW50aW1lRW5kcG9pbnQodGhpcywgYEVuZHBvaW50JHtlbmRwb2ludE5hbWV9YCwge1xuICAgICAgZW5kcG9pbnROYW1lOiBlbmRwb2ludE5hbWUsXG4gICAgICBhZ2VudFJ1bnRpbWVJZDogdGhpcy5hZ2VudFJ1bnRpbWVJZCxcbiAgICAgIGFnZW50UnVudGltZVZlcnNpb246IG9wdGlvbnM/LnZlcnNpb24gPz8gdGhpcy5hZ2VudFJ1bnRpbWVWZXJzaW9uID8/ICcxJyxcbiAgICAgIGRlc2NyaXB0aW9uOiBvcHRpb25zPy5kZXNjcmlwdGlvbixcbiAgICB9KTtcblxuICAgIC8vIEFkZCBkZXBlbmRlbmN5OiBlbmRwb2ludCBtdXN0IHdhaXQgZm9yIHJ1bnRpbWUgdG8gYmUgY3JlYXRlZFxuICAgIGVuZHBvaW50Lm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLnJ1bnRpbWVSZXNvdXJjZSk7XG5cbiAgICByZXR1cm4gZW5kcG9pbnQ7XG4gIH1cbn1cbiJdfQ==
|