@aws-cdk/aws-bedrock-agentcore-alpha 2.237.1-alpha.0 → 2.239.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 +2128 -856
- package/.jsii.tabl.json.gz +0 -0
- package/.warnings.jsii.js +119 -1
- package/README.md +109 -47
- package/lib/gateway/gateway-base.d.ts +14 -7
- package/lib/gateway/gateway-base.js +13 -4
- package/lib/gateway/gateway.d.ts +66 -10
- package/lib/gateway/gateway.js +38 -3
- package/lib/gateway/inbound-auth/authorizer.d.ts +2 -2
- package/lib/gateway/inbound-auth/authorizer.js +4 -4
- package/lib/gateway/inbound-auth/custom-claim.d.ts +1 -1
- package/lib/gateway/inbound-auth/custom-claim.js +2 -2
- package/lib/gateway/interceptor.d.ts +3 -3
- package/lib/gateway/interceptor.js +2 -2
- package/lib/gateway/outbound-auth/api-key.d.ts +4 -2
- package/lib/gateway/outbound-auth/api-key.js +2 -2
- package/lib/gateway/outbound-auth/credential-provider.d.ts +5 -5
- package/lib/gateway/outbound-auth/credential-provider.js +2 -2
- package/lib/gateway/outbound-auth/iam-role.d.ts +3 -2
- package/lib/gateway/outbound-auth/iam-role.js +1 -1
- package/lib/gateway/outbound-auth/oauth.d.ts +4 -2
- package/lib/gateway/outbound-auth/oauth.js +1 -1
- package/lib/gateway/protocol.d.ts +1 -1
- package/lib/gateway/protocol.js +3 -3
- package/lib/gateway/targets/schema/api-schema.d.ts +3 -3
- package/lib/gateway/targets/schema/api-schema.js +5 -5
- package/lib/gateway/targets/schema/base-schema.d.ts +2 -2
- package/lib/gateway/targets/schema/base-schema.js +1 -1
- package/lib/gateway/targets/schema/tool-schema.d.ts +3 -3
- package/lib/gateway/targets/schema/tool-schema.js +5 -5
- package/lib/gateway/targets/target-base.d.ts +13 -5
- package/lib/gateway/targets/target-base.js +13 -2
- package/lib/gateway/targets/target-configuration.d.ts +251 -5
- package/lib/gateway/targets/target-configuration.js +344 -8
- package/lib/gateway/targets/target.d.ts +59 -9
- package/lib/gateway/targets/target.js +46 -3
- package/lib/memory/memory-strategy.d.ts +6 -4
- package/lib/memory/memory-strategy.js +2 -3
- package/lib/memory/memory.d.ts +12 -5
- package/lib/memory/memory.js +13 -17
- package/lib/memory/strategies/managed-strategy.d.ts +5 -4
- package/lib/memory/strategies/managed-strategy.js +2 -2
- package/lib/memory/strategies/self-managed-strategy.d.ts +4 -4
- package/lib/memory/strategies/self-managed-strategy.js +2 -2
- package/lib/memory/validation-helpers.d.ts +1 -1
- package/lib/memory/validation-helpers.js +1 -1
- package/lib/network/network-configuration.d.ts +2 -2
- package/lib/network/network-configuration.js +5 -5
- package/lib/runtime/inbound-auth/custom-claim.d.ts +1 -1
- package/lib/runtime/inbound-auth/custom-claim.js +2 -2
- package/lib/runtime/inbound-auth/runtime-authorizer-configuration.d.ts +3 -3
- package/lib/runtime/inbound-auth/runtime-authorizer-configuration.js +2 -2
- package/lib/runtime/runtime-artifact.d.ts +27 -4
- package/lib/runtime/runtime-artifact.js +67 -2
- package/lib/runtime/runtime-base.d.ts +12 -5
- package/lib/runtime/runtime-base.js +15 -18
- package/lib/runtime/runtime-endpoint-base.d.ts +9 -3
- package/lib/runtime/runtime-endpoint-base.js +10 -14
- package/lib/runtime/runtime-endpoint.d.ts +3 -2
- package/lib/runtime/runtime-endpoint.js +2 -2
- package/lib/runtime/runtime.d.ts +7 -5
- package/lib/runtime/runtime.js +2 -2
- package/lib/runtime/types.d.ts +1 -1
- package/lib/runtime/types.js +1 -1
- package/lib/tools/browser.d.ts +12 -5
- package/lib/tools/browser.js +14 -5
- package/lib/tools/code-interpreter.d.ts +11 -4
- package/lib/tools/code-interpreter.js +14 -5
- package/package.json +12 -12
- package/rosetta/default.ts-fixture +1 -0
package/lib/memory/memory.js
CHANGED
|
@@ -37,18 +37,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
37
37
|
exports.Memory = exports.MemoryBase = void 0;
|
|
38
38
|
const jsiiDeprecationWarnings = require("../../.warnings.jsii.js");
|
|
39
39
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
40
|
-
/**
|
|
41
|
-
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
42
|
-
*
|
|
43
|
-
* Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
|
|
44
|
-
* with the License. A copy of the License is located at
|
|
45
|
-
*
|
|
46
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
47
|
-
*
|
|
48
|
-
* or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
|
|
49
|
-
* OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
|
|
50
|
-
* and limitations under the License.
|
|
51
|
-
*/
|
|
52
40
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
53
41
|
const aws_bedrockagentcore_1 = require("aws-cdk-lib/aws-bedrockagentcore");
|
|
54
42
|
const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
|
|
@@ -99,7 +87,15 @@ const MEMORY_EXPIRATION_DAYS_MAX = 365;
|
|
|
99
87
|
* Contains methods and attributes valid for Memories either created with CDK or imported.
|
|
100
88
|
*/
|
|
101
89
|
class MemoryBase extends aws_cdk_lib_1.Resource {
|
|
102
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.MemoryBase", version: "2.
|
|
90
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.MemoryBase", version: "2.239.0-alpha.0" };
|
|
91
|
+
/**
|
|
92
|
+
* A reference to a Memory resource.
|
|
93
|
+
*/
|
|
94
|
+
get memoryRef() {
|
|
95
|
+
return {
|
|
96
|
+
memoryArn: this.memoryArn,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
103
99
|
constructor(scope, id, props = {}) {
|
|
104
100
|
super(scope, id, props);
|
|
105
101
|
}
|
|
@@ -116,7 +112,7 @@ class MemoryBase extends aws_cdk_lib_1.Resource {
|
|
|
116
112
|
return iam.Grant.addToPrincipal({
|
|
117
113
|
grantee,
|
|
118
114
|
actions,
|
|
119
|
-
resourceArns: [this.memoryArn],
|
|
115
|
+
resourceArns: [this.memoryRef.memoryArn],
|
|
120
116
|
scope: this,
|
|
121
117
|
});
|
|
122
118
|
}
|
|
@@ -279,7 +275,7 @@ class MemoryBase extends aws_cdk_lib_1.Resource {
|
|
|
279
275
|
const metricProps = {
|
|
280
276
|
namespace: 'AWS/Bedrock-AgentCore',
|
|
281
277
|
metricName,
|
|
282
|
-
dimensionsMap: { ...dimensions, Resource: this.memoryArn },
|
|
278
|
+
dimensionsMap: { ...dimensions, Resource: this.memoryRef.memoryArn },
|
|
283
279
|
...props,
|
|
284
280
|
};
|
|
285
281
|
return this.configureMetric(metricProps);
|
|
@@ -373,7 +369,7 @@ let Memory = (() => {
|
|
|
373
369
|
Memory = _classThis = _classDescriptor.value;
|
|
374
370
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
375
371
|
}
|
|
376
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.Memory", version: "2.
|
|
372
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.Memory", version: "2.239.0-alpha.0" };
|
|
377
373
|
/** Uniquely identifies this class. */
|
|
378
374
|
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-bedrock-agentcore-alpha.Memory';
|
|
379
375
|
/**
|
|
@@ -689,4 +685,4 @@ let Memory = (() => {
|
|
|
689
685
|
return Memory = _classThis;
|
|
690
686
|
})();
|
|
691
687
|
exports.Memory = Memory;
|
|
692
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibWVtb3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7Ozs7Ozs7OztHQVdHO0FBRUgsNkNBQStHO0FBRS9HLDJFQUE2RTtBQUM3RSwrREFNb0M7QUFDcEMsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyw4RUFBOEY7QUFDOUYsMEVBQTBFO0FBSTFFLG1DQUFzQztBQUN0Qyw2REFBdUc7QUFFdkc7OytFQUUrRTtBQUMvRTs7O0dBR0c7QUFDSCxNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQztBQUVqQzs7O0dBR0c7QUFDSCxNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUVsQzs7O0dBR0c7QUFDSCxNQUFNLHFCQUFxQixHQUFHLENBQUMsQ0FBQztBQUVoQzs7O0dBR0c7QUFDSCxNQUFNLHFCQUFxQixHQUFHLEdBQUcsQ0FBQztBQUVsQzs7O0dBR0c7QUFDSCxNQUFNLDBCQUEwQixHQUFHLENBQUMsQ0FBQztBQUNyQzs7O0dBR0c7QUFDSCxNQUFNLDBCQUEwQixHQUFHLEdBQUcsQ0FBQztBQWlIdkM7OytFQUUrRTtBQUMvRTs7O0dBR0c7QUFDSCxNQUFzQixVQUFXLFNBQVEsc0JBQVE7O0lBYS9DLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsUUFBdUIsRUFBRTtRQUNqRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUN6QjtJQUNEOzs7Ozs7OztPQVFHO0lBQ0gsS0FBSyxDQUFDLE9BQXVCLEVBQUUsR0FBRyxPQUFpQjtRQUNqRCxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO1lBQzlCLE9BQU87WUFDUCxPQUFPO1lBQ1AsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUM5QixLQUFLLEVBQUUsSUFBSTtTQUNaLENBQUMsQ0FB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RUQsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQyxDQUFDO1FBRUYseURBQXlEO1FBQ3pELFlBQVk7UUFDWix5REFBeUQ7UUFDekQ7Ozs7OztXQU1HO1FBQ0ssdUJBQXVCO1lBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDakUsT0FBTyxTQUFTLENBQUM7WUFDbkIsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1NBQ3JEOztZQXBVVSx1REFBTTs7Ozs7QUFBTix3QkFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEFybiwgQXJuRm9ybWF0LCBEdXJhdGlvbiwgSVJlc291cmNlLCBMYXp5LCBSZXNvdXJjZSwgUmVzb3VyY2VQcm9wcywgVG9rZW4sIE5hbWVzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgYmVkcm9ja2FnZW50Y29yZSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZSc7XG5pbXBvcnQgeyBDZm5NZW1vcnksIENmbk1lbW9yeVByb3BzIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmUnO1xuaW1wb3J0IHtcbiAgRGltZW5zaW9uc01hcCxcbiAgTWV0cmljLFxuICBNZXRyaWNPcHRpb25zLFxuICBNZXRyaWNQcm9wcyxcbiAgU3RhdHMsXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIGttcyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhLCBNZXRob2RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5pbXBvcnQgeyBJQ29uc3RydWN0LCBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbi8vIEludGVybmFsIExpYnNcbmltcG9ydCB7IElNZW1vcnlTdHJhdGVneSB9IGZyb20gJy4vbWVtb3J5LXN0cmF0ZWd5JztcbmltcG9ydCB7IE1lbW9yeVBlcm1zIH0gZnJvbSAnLi9wZXJtcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUZpZWxkUGF0dGVybiwgdmFsaWRhdGVTdHJpbmdGaWVsZExlbmd0aCwgdGhyb3dJZkludmFsaWQgfSBmcm9tICcuL3ZhbGlkYXRpb24taGVscGVycyc7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RBTlRTXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKipcbiAqIE1pbmltdW0gbGVuZ3RoIGZvciBicm93c2VyIG5hbWVcbiAqIEBpbnRlcm5hbFxuICovXG5jb25zdCBNRU1PUllfTkFNRV9NSU5fTEVOR1RIID0gMTtcblxuLyoqXG4gKiBNYXhpbXVtIGxlbmd0aCBmb3IgYnJvd3NlciBuYW1lXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgTUVNT1JZX05BTUVfTUFYX0xFTkdUSCA9IDQ4O1xuXG4vKipcbiAqIE1pbmltdW0gbGVuZ3RoIGZvciBicm93c2VyIHRhZ3NcbiAqIEBpbnRlcm5hbFxuICovXG5jb25zdCBNRU1PUllfVEFHX01JTl9MRU5HVEggPSAxO1xuXG4vKipcbiAqIE1heGltdW0gbGVuZ3RoIGZvciBicm93c2VyIHRhZ3NcbiAqIEBpbnRlcm5hbFxuICovXG5jb25zdCBNRU1PUllfVEFHX01BWF9MRU5HVEggPSAyNTY7XG5cbi8qKlxuICogTWluaW11bSBsZW5ndGggZm9yIG1lbW9yeSBleHBpcmF0aW9uIGRheXNcbiAqIEBpbnRlcm5hbFxuICovXG5jb25zdCBNRU1PUllfRVhQSVJBVElPTl9EQVlTX01JTiA9IDc7XG4vKipcbiAqIE1heGltdW0gbGVuZ3RoIGZvciBtZW1vcnkgZXhwaXJhdGlvbiBkYXlzXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgTUVNT1JZX0VYUElSQVRJT05fREFZU19NQVggPSAzNjU7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcmZhY2VcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKlxuICogSW50ZXJmYWNlIGZvciBNZW1vcnkgcmVzb3VyY2VzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSU1lbW9yeSBleHRlbmRzIElSZXNvdXJjZSwgaWFtLklHcmFudGFibGUge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgbWVtb3J5IHJlc291cmNlXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IG1lbW9yeUFybjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBtZW1vcnlcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgbWVtb3J5SWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBJQU0gcm9sZSB0aGF0IHByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciB0aGUgbWVtb3J5IHRvIGFjY2VzcyBBV1Mgc2VydmljZXMuXG4gICAqL1xuICByZWFkb25seSBleGVjdXRpb25Sb2xlPzogaWFtLklSb2xlO1xuICAvKipcbiAgICogQ3VzdG9tIEtNUyBrZXkgZm9yIGVuY3J5cHRpb24gKGlmIHByb3ZpZGVkKVxuICAgKi9cbiAgcmVhZG9ubHkga21zS2V5Pzoga21zLklLZXk7XG4gIC8qKlxuICAgKiBUaGUgc3RhdHVzIG9mIHRoZSBtZW1vcnlcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzPzogc3RyaW5nO1xuICAvKipcbiAgICogVGltZXN0YW1wIHdoZW4gdGhlIG1lbW9yeSB3YXMgbGFzdCB1cGRhdGVkXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHVwZGF0ZWRBdD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRpbWVzdGFtcCB3aGVuIHRoZSBtZW1vcnkgd2FzIGNyZWF0ZWRcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlZEF0Pzogc3RyaW5nO1xuICAvKipcbiAgICogR3JhbnQgdGhlIGdpdmVuIHByaW5jaXBhbCBpZGVudGl0eSBwZXJtaXNzaW9ucyB0byBwZXJmb3JtIGFjdGlvbnMgb24gdGhpcyBtZW1vcnkuXG4gICAqL1xuICBncmFudChncmFudGVlOiBpYW0uSUdyYW50YWJsZSwgLi4uYWN0aW9uczogc3RyaW5nW10pOiBpYW0uR3JhbnQ7XG4gIC8qKlxuICAgKiBHcmFudCB0aGUgZ2l2ZW4gcHJpbmNpcGFsIGlkZW50aXR5IHBlcm1pc3Npb25zIHRvIHdyaXRlIGNvbnRlbnQgdG8gdGhpcyBtZW1vcnkuXG4gICAqL1xuICBncmFudFdyaXRlKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuICAvKipcbiAgICogR3JhbnQgdGhlIGdpdmVuIHByaW5jaXBhbCBpZGVudGl0eSBwZXJtaXNzaW9ucyB0byByZWFkIHRoZSBjb250ZW50cyBvZiB0aGlzIG1lbW9yeS5cbiAgICogQm90aCBTaG9ydC1UZXJtIE1lbW9yeSAoU1RNKSBhbmQgTG9uZy1UZXJtIE1lbW9yeSAoTFRNKS5cbiAgICovXG4gIGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gcmVhZCB0aGUgU2hvcnQtVGVybSBNZW1vcnkgKFNUTSkgY29udGVudHMgb2YgdGhpcyBtZW1vcnkuXG4gICAqL1xuICBncmFudFJlYWRTaG9ydFRlcm1NZW1vcnkoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQ7XG4gIC8qKlxuICAgKiBHcmFudCB0aGUgZ2l2ZW4gcHJpbmNpcGFsIGlkZW50aXR5IHBlcm1pc3Npb25zIHRvIHJlYWQgdGhlIExvbmctVGVybSBNZW1vcnkgKExUTSkgY29udGVudHMgb2YgdGhpcyBtZW1vcnkuXG4gICAqL1xuICBncmFudFJlYWRMb25nVGVybU1lbW9yeShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gZGVsZXRlIGNvbnRlbnQgb24gdGhpcyBtZW1vcnkuXG4gICAqL1xuICBncmFudERlbGV0ZShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gZGVsZXRlIFNob3J0LVRlcm0gTWVtb3J5IChTVE0pIGNvbnRlbnQgb24gdGhpcyBtZW1vcnkuXG4gICAqL1xuICBncmFudERlbGV0ZVNob3J0VGVybU1lbW9yeShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gZGVsZXRlIExvbmctVGVybSBNZW1vcnkgKExUTSkgY29udGVudCBvbiB0aGlzIG1lbW9yeS5cbiAgICovXG4gIGdyYW50RGVsZXRlTG9uZ1Rlcm1NZW1vcnkoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQ7XG4gIC8qKlxuICAgKiBHcmFudCB0aGUgZ2l2ZW4gcHJpbmNpcGFsIGlkZW50aXR5IHBlcm1pc3Npb25zIHRvIG1hbmFnZSB0aGUgY29udHJvbCBwbGFuZSBvZiB0aGlzIG1lbW9yeS5cbiAgICovXG4gIGdyYW50QWRtaW4oZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQ7XG4gIC8qKlxuICAgKiBHcmFudCB0aGUgZ2l2ZW4gcHJpbmNpcGFsIGlkZW50aXR5IHBlcm1pc3Npb25zIHRvIGRvIGV2ZXJ5IGFjdGlvbiBvbiB0aGlzIG1lbW9yeS5cbiAgICovXG4gIGdyYW50RnVsbEFjY2VzcyhncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gTWV0cmljc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgZ2l2ZW4gbmFtZWQgbWV0cmljIGZvciB0aGlzIG1lbW9yeS5cbiAgICovXG4gIG1ldHJpYyhtZXRyaWNOYW1lOiBzdHJpbmcsIGRpbWVuc2lvbnM6IERpbWVuc2lvbnNNYXAsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcbiAgLyoqXG4gICAqIFJldHVybiB0aGUgZ2l2ZW4gbmFtZWQgbWV0cmljIHJlbGF0ZWQgdG8gdGhlIEFQSSBvcGVyYXRpb24gcGVyZm9ybWVkIG9uIHRoaXMgbWVtb3J5LlxuICAgKi9cbiAgbWV0cmljRm9yQXBpT3BlcmF0aW9uKG1ldHJpY05hbWU6IHN0cmluZywgb3BlcmF0aW9uOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcbiAgLyoqXG4gICAqIFJldHVybiBhIG1ldHJpYyBtZWFzdXJpbmcgdGhlIGxhdGVuY3kgb2YgYSBzcGVjaWZpYyBBUEkgb3BlcmF0aW9uIHBlcmZvcm1lZCBvbiB0aGlzIG1lbW9yeS5cbiAgICovXG4gIG1ldHJpY0xhdGVuY3lGb3JBcGlPcGVyYXRpb24ob3BlcmF0aW9uOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcbiAgLyoqXG4gICAqIFJldHVybiBhIG1ldHJpYyBjb250YWluaW5nIHRoZSB0b3RhbCBudW1iZXIgb2YgQVBJIHJlcXVlc3RzIG1hZGUgZm9yIGEgc3BlY2lmaWMgbWVtb3J5IG9wZXJhdGlvbi5cbiAgICovXG4gIG1ldHJpY0ludm9jYXRpb25zRm9yQXBpT3BlcmF0aW9uKG9wZXJhdGlvbjogc3RyaW5nLCBwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG4gIC8qKlxuICAgKiBSZXR1cm4gYSBtZXRyaWMgY29udGFpbmluZyB0aGUgbnVtYmVyIG9mIGVycm9ycyBmb3IgYSBzcGVjaWZpYyBBUEkgb3BlcmF0aW9uIHBlcmZvcm1lZCBvbiB0aGlzIG1lbW9yeS5cbiAgICovXG4gIG1ldHJpY0Vycm9yc0ZvckFwaU9wZXJhdGlvbihvcGVyYXRpb246IHN0cmluZywgcHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgbWV0cmljIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiBjcmVhdGVkIG1lbW9yeSBldmVudHMgYW5kIG1lbW9yeSByZWNvcmRzLlxuICAgKi9cbiAgbWV0cmljRXZlbnRDcmVhdGlvbkNvdW50KHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICBBQlNUUkFDVCBCQVNFIENMQVNTXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKipcbiAqIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGEgTWVtb3J5LlxuICogQ29udGFpbnMgbWV0aG9kcyBhbmQgYXR0cmlidXRlcyB2YWxpZCBmb3IgTWVtb3JpZXMgZWl0aGVyIGNyZWF0ZWQgd2l0aCBDREsgb3IgaW1wb3J0ZWQuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBNZW1vcnlCYXNlIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJTWVtb3J5IHtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IG1lbW9yeUFybjogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgbWVtb3J5SWQ6IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHN0YXR1cz86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHVwZGF0ZWRBdD86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGNyZWF0ZWRBdD86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGV4ZWN1dGlvblJvbGU/OiBpYW0uSVJvbGU7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleTtcbiAgLyoqXG4gICAqIFRoZSBwcmluY2lwYWwgdG8gZ3JhbnQgcGVybWlzc2lvbnMgdG9cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBncmFudFByaW5jaXBhbDogaWFtLklQcmluY2lwYWw7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJlc291cmNlUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICB9XG4gIC8qKlxuICAgKiBHcmFudHMgSUFNIGFjdGlvbnMgdG8gdGhlIElBTSBQcmluY2lwYWxcbiAgICpcbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIC0gVGhlIElBTSBwcmluY2lwYWwgdG8gZ3JhbnQgcGVybWlzc2lvbnMgdG9cbiAgICogQHBhcmFtIGFjdGlvbnMgLSBUaGUgYWN0aW9ucyB0byBncmFudFxuICAgKiBAcmV0dXJucyBBbiBJQU0gR3JhbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZ3JhbnRlZCBwZXJtaXNzaW9uc1xuICAgKi9cbiAgZ3JhbnQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUsIC4uLmFjdGlvbnM6IHN0cmluZ1tdKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gaWFtLkdyYW50LmFkZFRvUHJpbmNpcGFsKHtcbiAgICAgIGdyYW50ZWUsXG4gICAgICBhY3Rpb25zLFxuICAgICAgcmVzb3VyY2VBcm5zOiBbdGhpcy5tZW1vcnlBcm5dLFxuICAgICAgc2NvcGU6IHRoaXMsXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gd3JpdGUgY29udGVudCB0byBzaG9ydC10ZXJtIG1lbW9yeS5cbiAgICpcbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIC0gVGhlIElBTSBwcmluY2lwYWwgdG8gZ3JhbnQgcmVhZCBwZXJtaXNzaW9ucyB0b1xuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgZ3JhbnQgY29uZmlndXJhdGlvbjpcbiAgICogLSBhY3Rpb25zOiBbJ2JlZHJvY2stYWdlbnRjb3JlOkNyZWF0ZUV2ZW50J10gb24gdGhpcy5tZW1vcnlBcm5cbiAgICogQHJldHVybnMgQW4gSUFNIEdyYW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGdyYW50ZWQgcGVybWlzc2lvbnNcbiAgICovXG4gIGdyYW50V3JpdGUoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmdyYW50KGdyYW50ZWUsIC4uLk1lbW9yeVBlcm1zLlNUTS5XUklURV9QRVJNUyk7XG4gIH1cbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gcmVhZCB0aGUgY29udGVudHMgb2YgdGhpcyBtZW1vcnkuXG4gICAqIEJvdGggU2hvcnQtVGVybSBNZW1vcnkgKFNUTSkgYW5kIExvbmctVGVybSBNZW1vcnkgKExUTSkuXG4gICAqXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSAtIFRoZSBJQU0gcHJpbmNpcGFsIHRvIGdyYW50IHJlYWQgcGVybWlzc2lvbnMgdG9cbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IGdyYW50IGNvbmZpZ3VyYXRpb246XG4gICAqIC0gYWN0aW9uczogWydiZWRyb2NrLWFnZW50Y29yZTpHZXRNZW1vcnlSZWNvcmQnLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOlJldHJpZXZlTWVtb3J5UmVjb3JkcycsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6TGlzdE1lbW9yeVJlY29yZHMnLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOkxpc3RBY3RvcnMnLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOkxpc3RTZXNzaW9uc10gb24gdGhpcy5tZW1vcnlBcm5cbiAgICogQHJldHVybnMgQW4gSUFNIEdyYW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGdyYW50ZWQgcGVybWlzc2lvbnNcbiAgICovXG4gIGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhbnQoZ3JhbnRlZSwgLi4uTWVtb3J5UGVybXMuUkVBRF9QRVJNUyk7XG4gIH1cbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gcmVhZCB0aGUgU2hvcnQtVGVybSBNZW1vcnkgKFNUTSkgY29udGVudHMgb2YgdGhpcyBtZW1vcnkuXG4gICAqXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSAtIFRoZSBJQU0gcHJpbmNpcGFsIHRvIGdyYW50IHJlYWQgcGVybWlzc2lvbnMgdG9cbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IGdyYW50IGNvbmZpZ3VyYXRpb246XG4gICAqIC0gYWN0aW9uczogWydiZWRyb2NrLWFnZW50Y29yZTpHZXRFdmVudCcsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6TGlzdEV2ZW50cycsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6TGlzdEFjdG9ycycsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6TGlzdFNlc3Npb25zJyxdIG9uIHRoaXMubWVtb3J5QXJuXG4gICAqIEByZXR1cm5zIEFuIElBTSBHcmFudCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBncmFudGVkIHBlcm1pc3Npb25zXG4gICAqL1xuICBncmFudFJlYWRTaG9ydFRlcm1NZW1vcnkoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmdyYW50KGdyYW50ZWUsIC4uLk1lbW9yeVBlcm1zLlNUTS5SRUFEX1BFUk1TKTtcbiAgfVxuICAvKipcbiAgICogR3JhbnQgdGhlIGdpdmVuIHByaW5jaXBhbCBpZGVudGl0eSBwZXJtaXNzaW9ucyB0byByZWFkIHRoZSBMb25nLVRlcm0gTWVtb3J5IChMVE0pIGNvbnRlbnRzIG9mIHRoaXMgbWVtb3J5LlxuICAgKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgLSBUaGUgSUFNIHByaW5jaXBhbCB0byBncmFudCByZWFkIHBlcm1pc3Npb25zIHRvXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBncmFudCBjb25maWd1cmF0aW9uOlxuICAgKiAtIGFjdGlvbnM6IFsnYmVkcm9jay1hZ2VudGNvcmU6R2V0TWVtb3J5UmVjb3JkJyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpSZXRyaWV2ZU1lbW9yeVJlY29yZHMnLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOkxpc3RNZW1vcnlSZWNvcmRzJyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpMaXN0QWN0b3JzJyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpMaXN0U2Vzc2lvbnMnLF0gb24gdGhpcy5tZW1vcnlBcm5cbiAgICogQHJldHVybnMgQW4gSUFNIEdyYW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGdyYW50ZWQgcGVybWlzc2lvbnNcbiAgICovXG4gIGdyYW50UmVhZExvbmdUZXJtTWVtb3J5KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5ncmFudChncmFudGVlLCAuLi5NZW1vcnlQZXJtcy5MVE0uUkVBRF9QRVJNUyk7XG4gIH1cbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gZGVsZXRlIGNvbnRlbnQgb24gdGhpcyBtZW1vcnkuXG4gICAqXG4gICAqIEJvdGggU2hvcnQtVGVybSBNZW1vcnkgKFNUTSkgYW5kIExvbmctVGVybSBNZW1vcnkgKExUTSkuXG4gICAqXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSAtIFRoZSBJQU0gcHJpbmNpcGFsIHRvIGdyYW50IGRlbGV0ZSBwZXJtaXNzaW9ucyB0b1xuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgZ3JhbnQgY29uZmlndXJhdGlvbjpcbiAgICogLSBhY3Rpb25zOiBbJ2JlZHJvY2stYWdlbnRjb3JlOkRlbGV0ZUV2ZW50JyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpEZWxldGVNZW1vcnlSZWNvcmQnXSBvbiB0aGlzLm1lbW9yeUFyblxuICAgKiBAcmV0dXJucyBBbiBJQU0gR3JhbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZ3JhbnRlZCBwZXJtaXNzaW9uc1xuICAgKi9cbiAgZ3JhbnREZWxldGUoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmdyYW50KGdyYW50ZWUsIC4uLk1lbW9yeVBlcm1zLkRFTEVURV9QRVJNUyk7XG4gIH1cbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gZGVsZXRlIFNob3J0LVRlcm0gTWVtb3J5IChTVE0pIGNvbnRlbnQgb24gdGhpcyBtZW1vcnkuXG4gICAqXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSAtIFRoZSBJQU0gcHJpbmNpcGFsIHRvIGdyYW50IGRlbGV0ZSBwZXJtaXNzaW9ucyB0b1xuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgZ3JhbnQgY29uZmlndXJhdGlvbjpcbiAgICogLSBhY3Rpb25zOiBbJ2JlZHJvY2stYWdlbnRjb3JlOkRlbGV0ZUV2ZW50J10gb24gdGhpcy5tZW1vcnlBcm5cbiAgICogQHJldHVybnMgQW4gSUFNIEdyYW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGdyYW50ZWQgcGVybWlzc2lvbnNcbiAgICovXG4gIGdyYW50RGVsZXRlU2hvcnRUZXJtTWVtb3J5KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5ncmFudChncmFudGVlLCAuLi5NZW1vcnlQZXJtcy5TVE0uREVMRVRFX1BFUk1TKTtcbiAgfVxuICAvKipcbiAgICogR3JhbnQgdGhlIGdpdmVuIHByaW5jaXBhbCBpZGVudGl0eSBwZXJtaXNzaW9ucyB0byBkZWxldGUgTG9uZy1UZXJtIE1lbW9yeSAoTFRNKSBjb250ZW50IG9uIHRoaXMgbWVtb3J5LlxuICAgKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgLSBUaGUgSUFNIHByaW5jaXBhbCB0byBncmFudCBkZWxldGUgcGVybWlzc2lvbnMgdG9cbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IGdyYW50IGNvbmZpZ3VyYXRpb246XG4gICAqIC0gYWN0aW9uczogWydiZWRyb2NrLWFnZW50Y29yZTpEZWxldGVNZW1vcnlSZWNvcmQnXSBvbiB0aGlzLm1lbW9yeUFyblxuICAgKiBAcmV0dXJucyBBbiBJQU0gR3JhbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZ3JhbnRlZCBwZXJtaXNzaW9uc1xuICAgKi9cbiAgZ3JhbnREZWxldGVMb25nVGVybU1lbW9yeShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhbnQoZ3JhbnRlZSwgLi4uTWVtb3J5UGVybXMuTFRNLkRFTEVURV9QRVJNUyk7XG4gIH1cbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gbWFuYWdlIHRoZSBjb250cm9sIHBsYW5lIG9mIHRoaXMgbWVtb3J5LlxuICAgKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgLSBUaGUgSUFNIHByaW5jaXBhbCB0byBncmFudCBhZG1pbiBwZXJtaXNzaW9ucyB0b1xuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgZ3JhbnQgY29uZmlndXJhdGlvbjpcbiAgICogLSBhY3Rpb25zOiBbJ2JlZHJvY2stYWdlbnRjb3JlOkNyZWF0ZU1lbW9yeScsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6R2V0TWVtb3J5JyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpEZWxldGVNZW1vcnknLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOlVwZGF0ZU1lbW9yeSddIG9uIHRoaXMubWVtb3J5QXJuXG4gICAqIEByZXR1cm5zIEFuIElBTSBHcmFudCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBncmFudGVkIHBlcm1pc3Npb25zXG4gICAqL1xuICBncmFudEFkbWluKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5ncmFudChncmFudGVlLCAuLi5NZW1vcnlQZXJtcy5BRE1JTl9QRVJNUyk7XG4gIH1cbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gZG8gZXZlcnkgYWN0aW9uIG9uIHRoaXMgbWVtb3J5LlxuICAgKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgLSBUaGUgSUFNIHByaW5jaXBhbCB0byBncmFudCBmdWxsIGFjY2VzcyBwZXJtaXNzaW9ucyB0b1xuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgZ3JhbnQgY29uZmlndXJhdGlvbjpcbiAgICogLSBhY3Rpb25zOiBbJ2JlZHJvY2stYWdlbnRjb3JlOkNyZWF0ZUV2ZW50JyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpHZXRFdmVudCcsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6RGVsZXRlRXZlbnQnLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOkdldE1lbW9yeVJlY29yZCcsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6UmV0cmlldmVNZW1vcnlSZWNvcmRzJyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpMaXN0TWVtb3J5UmVjb3JkcycsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6TGlzdEFjdG9ycycsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6TGlzdFNlc3Npb25zJyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpDcmVhdGVNZW1vcnknLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOkdldE1lbW9yeScsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6RGVsZXRlTWVtb3J5JyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpVcGRhdGVNZW1vcnknXSBvbiB0aGlzLm1lbW9yeUFyblxuICAgKiBAcmV0dXJucyBBbiBJQU0gR3JhbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZ3JhbnRlZCBwZXJtaXNzaW9uc1xuICAgKi9cbiAgZ3JhbnRGdWxsQWNjZXNzKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5ncmFudChncmFudGVlLCAuLi5NZW1vcnlQZXJtcy5GVUxMX0FDQ0VTU19QRVJNUyk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gTWV0cmljc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgZ2l2ZW4gbmFtZWQgbWV0cmljIGZvciB0aGlzIG1lbW9yeS5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdGhlIG1ldHJpYyB3aWxsIGJlIGNhbGN1bGF0ZWQgYXMgYSBzdW0gb3ZlciBhIHBlcmlvZCBvZiA1IG1pbnV0ZXMuXG4gICAqIFlvdSBjYW4gY3VzdG9taXplIHRoaXMgYnkgdXNpbmcgdGhlIGBzdGF0aXN0aWNgIGFuZCBgcGVyaW9kYCBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgcHVibGljIG1ldHJpYyhtZXRyaWNOYW1lOiBzdHJpbmcsIGRpbWVuc2lvbnM6IERpbWVuc2lvbnNNYXAsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgY29uc3QgbWV0cmljUHJvcHM6IE1ldHJpY1Byb3BzID0ge1xuICAgICAgbmFtZXNwYWNlOiAnQVdTL0JlZHJvY2stQWdlbnRDb3JlJyxcbiAgICAgIG1ldHJpY05hbWUsXG4gICAgICBkaW1lbnNpb25zTWFwOiB7IC4uLmRpbWVuc2lvbnMsIFJlc291cmNlOiB0aGlzLm1lbW9yeUFybiB9LFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5jb25maWd1cmVNZXRyaWMobWV0cmljUHJvcHMpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGdpdmVuIG5hbWVkIG1ldHJpYyByZWxhdGVkIHRvIHRoZSBBUEkgb3BlcmF0aW9uIHBlcmZvcm1lZCBvbiB0aGlzIG1lbW9yeS5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNGb3JBcGlPcGVyYXRpb24oXG4gICAgbWV0cmljTmFtZTogc3RyaW5nLFxuICAgIG9wZXJhdGlvbjogc3RyaW5nLFxuICAgIHByb3BzPzogTWV0cmljT3B0aW9ucyxcbiAgKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMobWV0cmljTmFtZSwgeyBPcGVyYXRpb246IG9wZXJhdGlvbiB9LCBwcm9wcyk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiBhIG1ldHJpYyBtZWFzdXJpbmcgdGhlIGxhdGVuY3kgb2YgYSBzcGVjaWZpYyBBUEkgb3BlcmF0aW9uIHBlcmZvcm1lZCBvbiB0aGlzIG1lbW9yeS5cbiAgICpcbiAgICogVGhlIGxhdGVuY3kgbWV0cmljIHJlcHJlc2VudHMgdGhlIHRvdGFsIHRpbWUgZWxhcHNlZCBiZXR3ZWVuIHJlY2VpdmluZyB0aGUgcmVxdWVzdCBhbmQgc2VuZGluZ1xuICAgKiB0aGUgZmluYWwgcmVzcG9uc2UgdG9rZW4sIG1lYXN1cmluZyBjb21wbGV0ZSBlbmQtdG8tZW5kIHByb2Nlc3NpbmcgdGltZS5cbiAgICpcbiAgICogRm9yIG1lbW9yeSBjcmVhdGlvbiBldmVudHMgc3BlY2lmaWNhbGx5LCB0aGlzIG1lYXN1cmVzIHRoZSB0aW1lIGZyb20gdGhlIGxhc3QgQ3JlYXRlRXZlbnRcbiAgICogdGhhdCBtZXQgc3RyYXRlZ3kgY3JpdGVyaWEgdW50aWwgbWVtb3J5IHN0b3JhZ2UgaXMgY29tcGxldGVkLlxuICAgKlxuICAgKi9cbiAgcHVibGljIG1ldHJpY0xhdGVuY3lGb3JBcGlPcGVyYXRpb24ob3BlcmF0aW9uOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljRm9yQXBpT3BlcmF0aW9uKCdMYXRlbmN5Jywgb3BlcmF0aW9uLCB7IHN0YXRpc3RpYzogU3RhdHMuQVZFUkFHRSwgLi4ucHJvcHMgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiBhIG1ldHJpYyBjb250YWluaW5nIHRoZSB0b3RhbCBudW1iZXIgb2YgQVBJIHJlcXVlc3RzIG1hZGUgZm9yIGEgc3BlY2lmaWMgbWVtb3J5IG9wZXJhdGlvbiBsaWtlXG4gICAqIGBDcmVhdGVFdmVudGAsIGBMaXN0RXZlbnRzYCwgYFJldHJpZXZlTWVtb3J5UmVjb3Jkc2AgLi4uXG4gICAqL1xuICBwdWJsaWMgbWV0cmljSW52b2NhdGlvbnNGb3JBcGlPcGVyYXRpb24ob3BlcmF0aW9uOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljRm9yQXBpT3BlcmF0aW9uKCdJbnZvY2F0aW9ucycsIG9wZXJhdGlvbiwge1xuICAgICAgc3RhdGlzdGljOiBTdGF0cy5TVU0sXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIGEgbWV0cmljIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiBlcnJvcnMgZm9yIGEgc3BlY2lmaWMgQVBJIG9wZXJhdGlvbiBwZXJmb3JtZWQgb24gdGhpcyBtZW1vcnkuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljRXJyb3JzRm9yQXBpT3BlcmF0aW9uKG9wZXJhdGlvbjogc3RyaW5nLCBwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0ZvckFwaU9wZXJhdGlvbignRXJyb3JzJywgb3BlcmF0aW9uLCB7IHN0YXRpc3RpYzogU3RhdHMuU1VNLCAuLi5wcm9wcyB9KTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbWV0cmljIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiBzaG9ydC10ZXJtIG1lbW9yeSBldmVudHMuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljRXZlbnRDcmVhdGlvbkNvdW50KHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdDcmVhdGlvbkNvdW50JywgeyBJdGVtVHlwZTogJ0V2ZW50JyB9LCB7IHN0YXRpc3RpYzogU3RhdHMuU1VNLCAuLi5wcm9wcyB9KTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbWV0cmljIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiBsb25nLXRlcm0gbWVtb3J5IHJlY29yZHNcbiAgICogY3JlYXRlZCBieSB0aGUgbG9uZy10ZXJtIGV4dHJhY3Rpb24gc3RyYXRlZ2llcy5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNNZW1vcnlSZWNvcmRDcmVhdGlvbkNvdW50KHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKFxuICAgICAgJ0NyZWF0aW9uQ291bnQnLFxuICAgICAgeyBJdGVtVHlwZTogJ01lbW9yeVJlY29yZHNFeHRyYWN0ZWQnIH0sXG4gICAgICB7IHN0YXRpc3RpYzogU3RhdHMuU1VNLCAuLi5wcm9wcyB9LFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIEludGVybmFsIG1ldGhvZCB0byBjcmVhdGUgYSBtZXRyaWMuXG4gICAqL1xuICBwcml2YXRlIGNvbmZpZ3VyZU1ldHJpYyhwcm9wczogTWV0cmljUHJvcHMpIHtcbiAgICByZXR1cm4gbmV3IE1ldHJpYyh7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHJlZ2lvbjogcHJvcHM/LnJlZ2lvbiA/PyB0aGlzLnN0YWNrLnJlZ2lvbixcbiAgICAgIGFjY291bnQ6IHByb3BzPy5hY2NvdW50ID8/IHRoaXMuc3RhY2suYWNjb3VudCxcbiAgICB9KTtcbiAgfVxufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIFBST1BTIEZPUiBORVcgQ09OU1RSVUNUXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGNyZWF0aW5nIGEgTWVtb3J5IHJlc291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVtb3J5UHJvcHMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIG1lbW9yeVxuICAgKiBWYWxpZCBjaGFyYWN0ZXJzIGFyZSBhLXosIEEtWiwgMC05LCBfICh1bmRlcnNjb3JlKVxuICAgKiBUaGUgbmFtZSBtdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIgYW5kIGNhbiBiZSB1cCB0byA0OCBjaGFyYWN0ZXJzIGxvbmdcbiAgICogUGF0dGVybjogW2EtekEtWl1bYS16QS1aMC05X117MCw0N31cbiAgICogQGRlZmF1bHQgLSBhdXRvIGdlbmVyYXRlXG4gICAqL1xuICByZWFkb25seSBtZW1vcnlOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogU2hvcnQtdGVybSBtZW1vcnkgZXhwaXJhdGlvbiBpbiBkYXlzIChiZXR3ZWVuIDcgYW5kIDM2NSkuXG4gICAqIFNldHMgdGhlIHNob3J0LXRlcm0gKHJhdyBldmVudCkgbWVtb3J5IHJldGVudGlvbi5cbiAgICogRXZlbnRzIG9sZGVyIHRoYW4gdGhlIHNwZWNpZmllZCBkdXJhdGlvbiB3aWxsIGV4cGlyZSBhbmQgbm8gbG9uZ2VyIGJlIHN0b3JlZC5cbiAgICogQGRlZmF1bHQgLSA5MCBkYXlzXG4gICAqL1xuICByZWFkb25seSBleHBpcmF0aW9uRHVyYXRpb24/OiBEdXJhdGlvbjtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRlc2NyaXB0aW9uIGZvciB0aGUgbWVtb3J5XG4gICAqIFZhbGlkIGNoYXJhY3RlcnMgYXJlIGEteiwgQS1aLCAwLTksIF8gKHVuZGVyc2NvcmUpLCAtIChoeXBoZW4pIGFuZCBzcGFjZXNcbiAgICogVGhlIGRlc2NyaXB0aW9uIGNhbiBoYXZlIHVwIHRvIDIwMCBjaGFyYWN0ZXJzXG4gICAqIEBkZWZhdWx0IC0gTm8gZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogQ3VzdG9tIEtNUyBrZXkgdG8gdXNlIGZvciBlbmNyeXB0aW9uLlxuICAgKiBAZGVmYXVsdCAtIFlvdXIgZGF0YSBpcyBlbmNyeXB0ZWQgd2l0aCBhIGtleSB0aGF0IEFXUyBvd25zIGFuZCBtYW5hZ2VzIGZvciB5b3VcbiAgICovXG4gIHJlYWRvbmx5IGttc0tleT86IGttcy5JS2V5O1xuICAvKipcbiAgICogSWYgeW91IG5lZWQgbG9uZy10ZXJtIG1lbW9yeSBmb3IgY29udGV4dCByZWNhbGwgYWNyb3NzIHNlc3Npb25zLFxuICAgKiB5b3UgY2FuIHNldHVwIG1lbW9yeSBleHRyYWN0aW9uIHN0cmF0ZWdpZXMgdG8gZXh0cmFjdCB0aGUgcmVsZXZhbnQgbWVtb3J5IGZyb20gdGhlIHJhdyBldmVudHMuXG4gICAqIEBkZWZhdWx0IC0gTm8gZXh0cmFjdGlvbiBzdHJhdGVnaWVzIChzaG9ydCB0ZXJtIG1lbW9yeSBvbmx5KVxuICAgKi9cbiAgcmVhZG9ubHkgbWVtb3J5U3RyYXRlZ2llcz86IElNZW1vcnlTdHJhdGVneVtdO1xuICAvKipcbiAgICogVGhlIElBTSByb2xlIHRoYXQgcHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIHRoZSBtZW1vcnkgdG8gYWNjZXNzIEFXUyBzZXJ2aWNlc1xuICAgKiB3aGVuIHVzaW5nIGN1c3RvbSBzdHJhdGVnaWVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEEgbmV3IHJvbGUgd2lsbCBiZSBjcmVhdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZXhlY3V0aW9uUm9sZT86IGlhbS5JUm9sZTtcbiAgLyoqXG4gICAqIFRhZ3MgKG9wdGlvbmFsKVxuICAgKiBBIGxpc3Qgb2Yga2V5OnZhbHVlIHBhaXJzIG9mIHRhZ3MgdG8gYXBwbHkgdG8gdGhpcyBtZW1vcnkgcmVzb3VyY2VcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyB0YWdzXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgQVRUUlMgRk9SIElNUE9SVEVEIENPTlNUUlVDVFxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqXG4gKiBBdHRyaWJ1dGVzIGZvciBzcGVjaWZ5aW5nIGFuIGltcG9ydGVkIE1lbW9yeS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZW1vcnlBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIG1lbW9yeS5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgbWVtb3J5QXJuOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBJQU0gcm9sZSBhc3NvY2lhdGVkIHRvIHRoZSBtZW1vcnkuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHJvbGVBcm46IHN0cmluZztcbiAgLyoqXG4gICAqIFdoZW4gdGhpcyBtZW1vcnkgd2FzIGxhc3QgdXBkYXRlZC5cbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkIC0gTm8gbGFzdCB1cGRhdGVkIHRpbWVzdGFtcCBpcyBwcm92aWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgdXBkYXRlZEF0Pzogc3RyaW5nO1xuICAvKipcbiAgICogT3B0aW9uYWwgS01TIGVuY3J5cHRpb24ga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1lbW9yeVxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWQgLSBBbiBBV1MgbWFuYWdlZCBrZXkgaXMgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkga21zS2V5QXJuPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHN0YXR1cyBvZiB0aGUgbWVtb3J5LlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWQgLSBObyBzdGF0dXMgaXMgcHJvdmlkZWRcbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1cz86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBjcmVhdGVkIHRpbWVzdGFtcCBvZiB0aGUgbWVtb3J5LlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWQgLSBObyBjcmVhdGVkIHRpbWVzdGFtcCBpcyBwcm92aWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlZEF0Pzogc3RyaW5nO1xufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKlxuICogTG9uZy10ZXJtIG1lbW9yeSBzdG9yZSBmb3IgZXh0cmFjdGVkIGluc2lnaHRzIGxpa2UgdXNlciBwcmVmZXJlbmNlcywgc2VtYW50aWMgZmFjdHMgYW5kIHN1bW1hcmllcy5cbiAqIEVuYWJsZXMga25vd2xlZGdlIHJldGVudGlvbiBhY3Jvc3Mgc2Vzc2lvbnMgYnkgc3RvcmluZyB1c2VyIHByZWZlcmVuY2VzIChlLmcuIGNvZGluZyBzdHlsZSksXG4gKiBzZW1hbnRpYyBmYWN0cyAoZS5nLiBsZWFybmVkIGluZm8pIGFuZCBpbnRlcmFjdGlvbiBzdW1tYXJpZXMgZm9yIGNvbnRleHQgb3B0aW1pemF0aW9uLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9tZW1vcnkuaHRtbFxuICogQHJlc291cmNlIEFXUzo6QmVkcm9ja0FnZW50Q29yZTo6TWVtb3J5XG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBNZW1vcnkgZXh0ZW5kcyBNZW1vcnlCYXNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtYmVkcm9jay1hZ2VudGNvcmUtYWxwaGEuTWVtb3J5JztcblxuICAvKipcbiAgICogU3RhdGljIE1ldGhvZCBmb3IgaW1wb3J0aW5nIGFuIGV4aXN0aW5nIEJlZHJvY2sgQWdlbnRDb3JlIE1lbW9yeS5cbiAgICovXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIE1lbW9yeSByZWZlcmVuY2UgZnJvbSBhbiBleGlzdGluZyBtZW1vcnkncyBhdHRyaWJ1dGVzLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCAtIElkZW50aWZpZXIgb2YgdGhlIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gYXR0cnMgLSBBdHRyaWJ1dGVzIG9mIHRoZSBleGlzdGluZyBicm93c2VyIGN1c3RvbVxuICAgKiBAcmV0dXJucyBBbiBJQnJvd3NlckN1c3RvbSByZWZlcmVuY2UgdG8gdGhlIGV4aXN0aW5nIGJyb3dzZXJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbU1lbW9yeUF0dHJpYnV0ZXMoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgYXR0cnM6IE1lbW9yeUF0dHJpYnV0ZXMpOiBJTWVtb3J5IHtcbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBNZW1vcnlCYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBtZW1vcnlBcm4gPSBhdHRycy5tZW1vcnlBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgbWVtb3J5SWQgPSBBcm4uc3BsaXQoYXR0cnMubWVtb3J5QXJuLCBBcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSkucmVzb3VyY2VOYW1lITtcbiAgICAgIHB1YmxpYyByZWFkb25seSBleGVjdXRpb25Sb2xlID0gaWFtLlJvbGUuZnJvbVJvbGVBcm4oc2NvcGUsIGAke2lkfVJvbGVgLCBhdHRycy5yb2xlQXJuKTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBrbXNLZXkgPSBhdHRycy5rbXNLZXlBcm4gPyBrbXMuS2V5LmZyb21LZXlBcm4oc2NvcGUsIGAke2lkfUtleWAsIGF0dHJzLmttc0tleUFybikgOiB1bmRlZmluZWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgdXBkYXRlZEF0ID0gYXR0cnMudXBkYXRlZEF0O1xuICAgICAgcHVibGljIHJlYWRvbmx5IGdyYW50UHJpbmNpcGFsID0gdGhpcy5leGVjdXRpb25Sb2xlO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHN0YXR1cyA9IGF0dHJzLnN0YXR1cztcbiAgICAgIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQXQgPSBhdHRycy5jcmVhdGVkQXQ7XG5cbiAgICAgIGNvbnN0cnVjdG9yKHM6IENvbnN0cnVjdCwgaTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKHMsIGkpO1xuXG4gICAgICAgIHRoaXMuZ3JhbnRQcmluY2lwYWwgPSB0aGlzLmV4ZWN1dGlvblJvbGUgfHwgbmV3IGlhbS5Vbmtub3duUHJpbmNpcGFsKHsgcmVzb3VyY2U6IHRoaXMgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIG5ldyBNZW1vcnlcbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEF0dHJpYnV0ZXNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBtZW1vcnkgcmVzb3VyY2UuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtZW1vcnlBcm46IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBtZW1vcnkuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtZW1vcnlOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIG1lbW9yeS5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1lbW9yeUlkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgZXhwaXJhdGlvbiBkYXlzIG9mIHRoZSBtZW1vcnkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZXhwaXJhdGlvbkR1cmF0aW9uPzogRHVyYXRpb247XG4gIC8qKlxuICAgKiBUaGUgZmFpbHVyZSByZWFzb24gb2YgdGhlIGJyb3dzZXJcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGZhaWx1cmVSZWFzb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIG1lbW9yeS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBleGVjdXRpb24gcm9sZSBvZiB0aGUgbWVtb3J5LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGV4ZWN1dGlvblJvbGU/OiBpYW0uSVJvbGU7XG4gIC8qKlxuICAgKiBUaGUgc3RhdHVzIG9mIHRoZSBtZW1vcnkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGNyZWF0ZWQgdGltZXN0YW1wIG9mIHRoZSBtZW1vcnkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEF0Pzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHVwZGF0ZWQgYXQgdGltZXN0YW1wIG9mIHRoZSBtZW1vcnkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdXBkYXRlZEF0Pzogc3RyaW5nO1xuICAvKipcbiAgICogVGFncyBhcHBsaWVkIHRvIHRoaXMgYnJvd3NlciByZXNvdXJjZVxuICAgKiBBIG1hcCBvZiBrZXktdmFsdWUgcGFpcnMgZm9yIHJlc291cmNlIHRhZ2dpbmdcbiAgICogQGRlZmF1bHQgLSBObyB0YWdzIGFwcGxpZWRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0YWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgLyoqXG4gICAqIFRoZSBwcmluY2lwYWwgdG8gZ3JhbnQgcGVybWlzc2lvbnMgdG9cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBncmFudFByaW5jaXBhbDogaWFtLklQcmluY2lwYWw7XG4gIC8qKlxuICAgKiBUaGUgS01TIGtleSB1c2VkIHRvIGVuY3J5cHQgdGhlIG1lbW9yeS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleTtcbiAgLyoqXG4gICAqIFRoZSBtZW1vcnkgc3RyYXRlZ2llcyB1c2VkIGJ5IHRoZSBtZW1vcnkuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtZW1vcnlTdHJhdGVnaWVzOiBJTWVtb3J5U3RyYXRlZ3lbXSA9IFtdO1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gSW50ZXJuYWwgT25seVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgcHJpdmF0ZSByZWFkb25seSBfX3Jlc291cmNlOiBDZm5NZW1vcnk7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIENPTlNUUlVDVE9SXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTWVtb3J5UHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLy8gTWF4aW11bSBuYW1lIGxlbmd0aCBvZiA0OCBjaGFyYWN0ZXJzXG4gICAgICAvLyBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWJlZHJvY2thZ2VudGNvcmUtbWVtb3J5Lmh0bWwjY2ZuLWJlZHJvY2thZ2VudGNvcmUtbWVtb3J5LW5hbWVcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHM/Lm1lbW9yeU5hbWUgPz9cbiAgICAgICAgTGF6eS5zdHJpbmcoe1xuICAgICAgICAgIHByb2R1Y2U6ICgpID0+IE5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7IG1heExlbmd0aDogNDggfSksXG4gICAgICAgIH0pLFxuICAgIH0pO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gU2V0IHByb3BlcnRpZXMgYW5kIGRlZmF1bHRzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgdGhpcy5tZW1vcnlOYW1lID0gdGhpcy5waHlzaWNhbE5hbWU7XG4gICAgdGhpcy5leHBpcmF0aW9uRHVyYXRpb24gPSBwcm9wcy5leHBpcmF0aW9uRHVyYXRpb24gPz8gRHVyYXRpb24uZGF5cyg5MCk7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IHByb3BzLmRlc2NyaXB0aW9uO1xuICAgIHRoaXMua21zS2V5ID0gcHJvcHMua21zS2V5O1xuICAgIHRoaXMuZXhlY3V0aW9uUm9sZSA9IHByb3BzLmV4ZWN1dGlvblJvbGUgPz8gdGhpcy5fY3JlYXRlTWVtb3J5Um9sZSgpO1xuICAgIHRoaXMuZ3JhbnRQcmluY2lwYWwgPSB0aGlzLmV4ZWN1dGlvblJvbGU7XG4gICAgdGhpcy50YWdzID0gcHJvcHMudGFncztcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFBlcm1pc3Npb25zXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gRm9yIEtNUyBwZXJtaXNzaW9ucyBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9zdG9yYWdlLWVuY3J5cHRpb24uaHRtbFxuICAgIGlmICh0aGlzLmttc0tleSkge1xuICAgICAgdGhpcy5rbXNLZXkuZ3JhbnQodGhpcy5leGVjdXRpb25Sb2xlLFxuICAgICAgICAna21zOkNyZWF0ZUdyYW50JyxcbiAgICAgICAgJ2ttczpEZWNyeXB0JyxcbiAgICAgICAgJ2ttczpEZXNjcmliZUtleScsXG4gICAgICAgICdrbXM6R2VuZXJhdGVEYXRhS2V5JyxcbiAgICAgICAgJ2ttczpHZW5lcmF0ZURhdGFLZXlXaXRob3V0UGxhaW50ZXh0JyxcbiAgICAgICAgJ2ttczpSZUVuY3J5cHQqJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gVmFsaWRhdGlvbnNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIC8vIFZhbGlkYXRlIG1lbW9yeSBuYW1lXG4gICAgdGhyb3dJZkludmFsaWQodGhpcy5fdmFsaWRhdGVNZW1vcnlOYW1lLCB0aGlzLm1lbW9yeU5hbWUsIHRoaXMpO1xuXG4gICAgLy8gVmFsaWRhdGUgZXhwaXJhdGlvbiBkdXJhdGlvblxuICAgIHRocm93SWZJbnZhbGlkKHRoaXMuX3ZhbGlkYXRlTWVtb3J5RXhwaXJhdGlvbkRheXMsIHRoaXMuZXhwaXJhdGlvbkR1cmF0aW9uLnRvRGF5cygpKTtcblxuICAgIC8vIFZhbGlkYXRlIG1lbW9yeSB0YWdzXG4gICAgdGhyb3dJZkludmFsaWQodGhpcy5fdmFsaWRhdGVNZW1vcnlUYWdzLCB0aGlzLnRhZ3MsIHRoaXMpO1xuXG4gICAgLy8gTWVtb3J5IHN0cmF0ZWdpZXMgYXJlIGFscmVhZHkgdmFsaWRhdGVkIHdoZW4gYnVpbGRpbmcgdGhlbSwgc28gbm8gbmVlZCB0byB2YWxpZGF0ZSB0aGVtIGhlcmVcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIENGTiBQcm9wcyAtIFdpdGggTGF6eSBzdXBwb3J0XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgY2ZuUHJvcHM6IENmbk1lbW9yeVByb3BzID0ge1xuICAgICAgbmFtZTogdGhpcy5tZW1vcnlOYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBldmVudEV4cGlyeUR1cmF0aW9uOiB0aGlzLmV4cGlyYXRpb25EdXJhdGlvbi50b0RheXMoKSxcbiAgICAgIGVuY3J5cHRpb25LZXlBcm46IHRoaXMua21zS2V5Py5rZXlBcm4sXG4gICAgICBtZW1vcnlFeGVjdXRpb25Sb2xlQXJuOiB0aGlzLmV4ZWN1dGlvblJvbGU/LnJvbGVBcm4sXG4gICAgICBtZW1vcnlTdHJhdGVnaWVzOiBMYXp5LmFueSh7IHByb2R1Y2U6ICgpID0+IHRoaXMuX3JlbmRlck1lbW9yeVN0cmF0ZWdpZXMoKSB9LCB7IG9taXRFbXB0eUFycmF5OiB0cnVlIH0pLFxuICAgICAgdGFnczogdGhpcy50YWdzLFxuICAgIH07XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBDRk4gUmVzb3VyY2VcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICB0aGlzLl9fcmVzb3VyY2UgPSBuZXcgQ2ZuTWVtb3J5KHRoaXMsICdNZW1vcnknLCBjZm5Qcm9wcyk7XG5cbiAgICB0aGlzLm1lbW9yeUlkID0gdGhpcy5fX3Jlc291cmNlLmF0dHJNZW1vcnlJZDtcbiAgICB0aGlzLm1lbW9yeUFybiA9IHRoaXMuX19yZXNvdXJjZS5hdHRyTWVtb3J5QXJuO1xuICAgIHRoaXMuc3RhdHVzID0gdGhpcy5fX3Jlc291cmNlLmF0dHJTdGF0dXM7XG4gICAgdGhpcy51cGRhdGVkQXQgPSB0aGlzLl9fcmVzb3VyY2UuYXR0clVwZGF0ZWRBdDtcbiAgICB0aGlzLmNyZWF0ZWRBdCA9IHRoaXMuX19yZXNvdXJjZS5hdHRyQ3JlYXRlZEF0O1xuICAgIHRoaXMuZmFpbHVyZVJlYXNvbiA9IHRoaXMuX19yZXNvdXJjZS5hdHRyRmFpbHVyZVJlYXNvbjtcblxuICAgIC8vIEFkZCBtZW1vcnkgc3RyYXRlZ2llcyB0byB0aGUgbWVtb3J5XG4gICAgZm9yIChjb25zdCBzdHJhdGVneSBvZiBwcm9wcz8ubWVtb3J5U3RyYXRlZ2llcyA/PyBbXSkge3RoaXMuYWRkTWVtb3J5U3RyYXRlZ3koc3RyYXRlZ3kpO31cbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBIRUxQRVIgTUVUSE9EUyAtIGFkZFgoKVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIEFkZCBtZW1vcnkgc3RyYXRlZ3kgdG8gdGhlIG1lbW9yeS5cbiAgICogQGRlZmF1bHQgLSBObyBtZW1vcnkgc3RyYXRlZ2llcy5cbiAgICovXG4gIEBNZXRob2RNZXRhZGF0YSgpXG4gIHB1YmxpYyBhZGRNZW1vcnlTdHJhdGVneShtZW1vcnlTdHJhdGVneTogSU1lbW9yeVN0cmF0ZWd5KSB7XG4gICAgLy8gQWRkIHRoZSBtZW1vcnkgc3RyYXRlZ3kgdG8gdGhlIG1lbW9yeVxuICAgIHRoaXMubWVtb3J5U3RyYXRlZ2llcy5wdXNoKG1lbW9yeVN0cmF0ZWd5KTtcblxuICAgIC8vIEdyYW50IG5lY2Vzc2FyeSBwZXJtaXNzaW9ucyB0byB0aGUgZXhlY3V0aW9uIHJvbGVcbiAgICBjb25zdCBncmFudCA9IG1lbW9yeVN0cmF0ZWd5LmdyYW50KHRoaXMuZXhlY3V0aW9uUm9sZSBhcyBpYW0uSVJvbGUpO1xuICAgIGdyYW50Py5hcHBseUJlZm9yZSh0aGlzLl9fcmVzb3VyY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgZXhlY3V0aW9uIHJvbGUgbmVlZGVkIGZvciB0aGUgbWVtb3J5IHRvIGFjY2VzcyBBV1Mgc2VydmljZXNcbiAgICogQHJldHVybnMgVGhlIGNyZWF0ZWQgcm9sZVxuICAgKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cbiAgICovXG4gIHByaXZhdGUgX2NyZWF0ZU1lbW9yeVJvbGUoKTogaWFtLklSb2xlIHtcbiAgICBjb25zdCByb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsICdTZXJ2aWNlUm9sZScsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdiZWRyb2NrLWFnZW50Y29yZS5hbWF6b25hd3MuY29tJyksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcm9sZTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBWQUxJREFUT1JTXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBtZW1vcnkgdGFncyBmb3JtYXRcbiAgICogQHBhcmFtIHRhZ3MgVGhlIHRhZ3Mgb2JqZWN0IHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gICAqL1xuICBwcml2YXRlIF92YWxpZGF0ZU1lbW9yeVRhZ3MgPSAodGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sIHNjb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdID0+IHtcbiAgICBsZXQgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmICghdGFncykge1xuICAgICAgcmV0dXJuIGVycm9yczsgLy8gVGFncyBhcmUgb3B0aW9uYWxcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBlYWNoIHRhZyBrZXkgYW5kIHZhbHVlXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGFncykpIHtcbiAgICAgIGVycm9ycy5wdXNoKC4uLnZhbGlkYXRlU3RyaW5nRmllbGRMZW5ndGgoe1xuICAgICAgICB2YWx1ZToga2V5LFxuICAgICAgICBmaWVsZE5hbWU6ICdUYWcga2V5JyxcbiAgICAgICAgbWluTGVuZ3RoOiBNRU1PUllfVEFHX01JTl9MRU5HVEgsXG4gICAgICAgIG1heExlbmd0aDogTUVNT1JZX1RBR19NQVhfTEVOR1RILFxuICAgICAgfSwgc2NvcGUpKTtcblxuICAgICAgLy8gVmFsaWRhdGUgdGFnIGtleSBwYXR0ZXJuOiBeW2EtekEtWjAtOVxccy5fOi89K0AtXSokXG4gICAgICBjb25zdCB2YWxpZEtleVBhdHRlcm4gPSAvXlthLXpBLVowLTlcXHMuXzovPStALV0qJC87XG4gICAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZUZpZWxkUGF0dGVybihrZXksICdUYWcga2V5JywgdmFsaWRLZXlQYXR0ZXJuLCB1bmRlZmluZWQsIHNjb3BlKSk7XG5cbiAgICAgIC8vIFZhbGlkYXRlIHRhZyB2YWx1ZVxuICAgICAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVTdHJpbmdGaWVsZExlbmd0aCh7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgZmllbGROYW1lOiAnVGFnIHZhbHVlJyxcbiAgICAgICAgbWluTGVuZ3RoOiBNRU1PUllfVEFHX01JTl9MRU5HVEgsXG4gICAgICAgIG1heExlbmd0aDogTUVNT1JZX1RBR19NQVhfTEVOR1RILFxuICAgICAgfSwgc2NvcGUpKTtcblxuICAgICAgLy8gVmFsaWRhdGUgdGFnIHZhbHVlIHBhdHRlcm46IF5bYS16QS1aMC05XFxzLl86Lz0rQC1dKiRcbiAgICAgIGNvbnN0IHZhbGlkVmFsdWVQYXR0ZXJuID0gL15bYS16QS1aMC05XFxzLl86Lz0rQC1dKiQvO1xuICAgICAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVGaWVsZFBhdHRlcm4odmFsdWUsICdUYWcgdmFsdWUnLCB2YWxpZFZhbHVlUGF0dGVybiwgdW5kZWZpbmVkLCBzY29wZSkpO1xuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnM7XG4gIH07XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgbWVtb3J5IG5hbWUgZm9ybWF0XG4gICAqIEBwYXJhbSBuYW1lIFRoZSBtZW1vcnkgbmFtZSB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICAgKi9cbiAgcHJpdmF0ZSBfdmFsaWRhdGVNZW1vcnlOYW1lID0gKG5hbWU6IHN0cmluZywgc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10gPT4ge1xuICAgIGxldCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZVN0cmluZ0ZpZWxkTGVuZ3RoKHtcbiAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgZmllbGROYW1lOiAnTWVtb3J5IG5hbWUnLFxuICAgICAgbWluTGVuZ3RoOiBNRU1PUllfTkFNRV9NSU5fTEVOR1RILFxuICAgICAgbWF4TGVuZ3RoOiBNRU1PUllfTkFNRV9NQVhfTEVOR1RILFxuICAgIH0sIHNjb3BlKSk7XG5cbiAgICAvLyBDaGVjayBpZiBuYW1lIG1hdGNoZXMgdGhlIEFXUyBBUEkgcGF0dGVybjogW2EtekEtWl1bYS16QS1aMC05X117MCw0N31cbiAgICAvLyBNdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIsIGZvbGxvd2VkIGJ5IHVwIHRvIDQ3IGxldHRlcnMsIG51bWJlcnMsIG9yIHVuZGVyc2NvcmVzXG4gICAgY29uc3QgdmFsaWROYW1lUGF0dGVybiA9IC9eW2EtekEtWl1bYS16QS1aMC05X117MCw0N30kLztcbiAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZUZpZWxkUGF0dGVybihuYW1lLCAnTWVtb3J5IG5hbWUnLCB2YWxpZE5hbWVQYXR0ZXJuLCB1bmRlZmluZWQsIHNjb3BlKSk7XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIG1lbW9yeSBleHBpcmF0aW9uIGRheXNcbiAgICogQHBhcmFtIGV4cGlyYXRpb25EYXlzIFRoZSBtZW1vcnkgZXhwaXJhdGlvbiBkYXlzIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gICAqL1xuICBwcml2YXRlIF92YWxpZGF0ZU1lbW9yeUV4cGlyYXRpb25EYXlzID0gKGV4cGlyYXRpb25EYXlzOiBudW1iZXIpOiBzdHJpbmdbXSA9PiB7XG4gICAgbGV0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQoZXhwaXJhdGlvbkRheXMpKSB7XG4gICAgICByZXR1cm4gZXJyb3JzO1xuICAgIH1cblxuICAgIGlmIChleHBpcmF0aW9uRGF5cyA8IE1FTU9SWV9FWFBJUkFUSU9OX0RBWVNfTUlOIHx8IGV4cGlyYXRpb25EYXlzID4gTUVNT1JZX0VYUElSQVRJT05fREFZU19NQVgpIHtcbiAgICAgIGVycm9ycy5wdXNoKGBNZW1vcnkgZXhwaXJhdGlvbiBkYXlzIG11c3QgYmUgYmV0d2VlbiAke01FTU9SWV9FWFBJUkFUSU9OX0RBWVNfTUlOfSBhbmQgJHtNRU1PUllfRVhQSVJBVElPTl9EQVlTX01BWH1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9O1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBSRU5ERVJFUlNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIG1lbW9yeSBzdHJhdGVnaWVzLlxuICAgKlxuICAgKiBAcmV0dXJucyBBcnJheSBvZiBNZW1vcnlTdHJhdGVneVByb3BlcnR5IG9iamVjdHMgaW4gQ2xvdWRGb3JtYXRpb24gZm9ybWF0LCBvciB1bmRlZmluZWQgaWYgbm8gc3RyYXRlZ2llcyBhcmUgZGVmaW5lZFxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZCBpZiBubyBzdHJhdGVnaWVzIGFyZSBkZWZpbmVkIG9yIGFycmF5IGlzIGVtcHR5XG4gICAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuICAgKi9cbiAgcHJpdmF0ZSBfcmVuZGVyTWVtb3J5U3RyYXRlZ2llcygpOiBiZWRyb2NrYWdlbnRjb3JlLkNmbk1lbW9yeS5NZW1vcnlTdHJhdGVneVByb3BlcnR5W10gfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5tZW1vcnlTdHJhdGVnaWVzIHx8IHRoaXMubWVtb3J5U3RyYXRlZ2llcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubWVtb3J5U3RyYXRlZ2llcy5tYXAobXMgPT4gbXMucmVuZGVyKCkpO1xuICB9XG59XG4iXX0=
|
|
688
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibWVtb3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWNBLDZDQUFxRjtBQUVyRiwyRUFBNkQ7QUFNN0QsK0RBR29DO0FBQ3BDLDJDQUEyQztBQUMzQywyQ0FBMkM7QUFDM0MsOEVBQThGO0FBQzlGLDBFQUEwRTtBQUkxRSxtQ0FBc0M7QUFDdEMsNkRBQXVHO0FBRXZHOzsrRUFFK0U7QUFDL0U7OztHQUdHO0FBQ0gsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLENBQUM7QUFFakM7OztHQUdHO0FBQ0gsTUFBTSxzQkFBc0IsR0FBRyxFQUFFLENBQUM7QUFFbEM7OztHQUdHO0FBQ0gsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLENBQUM7QUFFaEM7OztHQUdHO0FBQ0gsTUFBTSxxQkFBcUIsR0FBRyxHQUFHLENBQUM7QUFFbEM7OztHQUdHO0FBQ0gsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLENBQUM7QUFDckM7OztHQUdHO0FBQ0gsTUFBTSwwQkFBMEIsR0FBRyxHQUFHLENBQUM7QUFpSHZDOzsrRUFFK0U7QUFDL0U7OztHQUdHO0FBQ0gsTUFBc0IsVUFBVyxTQUFRLHNCQUFROztJQWEvQzs7T0FFRztJQUNILElBQVcsU0FBUztRQUNsQixPQUFPO1lBQ0wsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1NBQzFCLENBQUM7S0FDSDtJQUVELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsUUFBdUIsRUFBRTtRQUNqRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUN6QjtJQUNEOzs7Ozs7OztPQVFHO0lBQ0gsS0FBSyxDQUFDLE9BQXVCLEVBQUUsR0FBRyxPQUFpQjtRQUNqRCxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO1lBQzlCLE9BQU87WUFDUCxPQUFPO1lBQ1AsWUFBWSxF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QztnQkFDL0YsTUFBTSxDQUFDLElBQUksQ0FBQywwQ0FBMEMsMEJBQTBCLFFBQVEsMEJBQTBCLEVBQUUsQ0FBQyxDQUFDO1lBQ3hILENBQUM7WUFFRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUM7UUFFRix5REFBeUQ7UUFDekQsWUFBWTtRQUNaLHlEQUF5RDtRQUN6RDs7Ozs7O1dBTUc7UUFDSyx1QkFBdUI7WUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNqRSxPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDO1lBRUQsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7U0FDckQ7O1lBcFVVLHVEQUFNOzs7OztBQUFOLHdCQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIikuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqICB3aXRoIHRoZSBMaWNlbnNlLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgbG9jYXRlZCBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIG9yIGluIHRoZSAnbGljZW5zZScgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBmaWxlLiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTXG4gKiAgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbiAqICBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBJUmVzb3VyY2UsIFJlc291cmNlUHJvcHMgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBBcm4sIEFybkZvcm1hdCwgRHVyYXRpb24sIExhenksIFJlc291cmNlLCBUb2tlbiwgTmFtZXMgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgdHlwZSB7IENmbk1lbW9yeVByb3BzLCBJTWVtb3J5UmVmLCBNZW1vcnlSZWZlcmVuY2UgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZSc7XG5pbXBvcnQgeyBDZm5NZW1vcnkgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZSc7XG5pbXBvcnQgdHlwZSB7XG4gIERpbWVuc2lvbnNNYXAsXG4gIE1ldHJpY09wdGlvbnMsXG4gIE1ldHJpY1Byb3BzLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQge1xuICBNZXRyaWMsXG4gIFN0YXRzLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBrbXMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWttcyc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSwgTWV0aG9kTWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHR5cGUgeyBJQ29uc3RydWN0LCBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbi8vIEludGVybmFsIExpYnNcbmltcG9ydCB0eXBlIHsgSU1lbW9yeVN0cmF0ZWd5IH0gZnJvbSAnLi9tZW1vcnktc3RyYXRlZ3knO1xuaW1wb3J0IHsgTWVtb3J5UGVybXMgfSBmcm9tICcuL3Blcm1zJztcbmltcG9ydCB7IHZhbGlkYXRlRmllbGRQYXR0ZXJuLCB2YWxpZGF0ZVN0cmluZ0ZpZWxkTGVuZ3RoLCB0aHJvd0lmSW52YWxpZCB9IGZyb20gJy4vdmFsaWRhdGlvbi1oZWxwZXJzJztcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVEFOVFNcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKlxuICogTWluaW11bSBsZW5ndGggZm9yIGJyb3dzZXIgbmFtZVxuICogQGludGVybmFsXG4gKi9cbmNvbnN0IE1FTU9SWV9OQU1FX01JTl9MRU5HVEggPSAxO1xuXG4vKipcbiAqIE1heGltdW0gbGVuZ3RoIGZvciBicm93c2VyIG5hbWVcbiAqIEBpbnRlcm5hbFxuICovXG5jb25zdCBNRU1PUllfTkFNRV9NQVhfTEVOR1RIID0gNDg7XG5cbi8qKlxuICogTWluaW11bSBsZW5ndGggZm9yIGJyb3dzZXIgdGFnc1xuICogQGludGVybmFsXG4gKi9cbmNvbnN0IE1FTU9SWV9UQUdfTUlOX0xFTkdUSCA9IDE7XG5cbi8qKlxuICogTWF4aW11bSBsZW5ndGggZm9yIGJyb3dzZXIgdGFnc1xuICogQGludGVybmFsXG4gKi9cbmNvbnN0IE1FTU9SWV9UQUdfTUFYX0xFTkdUSCA9IDI1NjtcblxuLyoqXG4gKiBNaW5pbXVtIGxlbmd0aCBmb3IgbWVtb3J5IGV4cGlyYXRpb24gZGF5c1xuICogQGludGVybmFsXG4gKi9cbmNvbnN0IE1FTU9SWV9FWFBJUkFUSU9OX0RBWVNfTUlOID0gNztcbi8qKlxuICogTWF4aW11bSBsZW5ndGggZm9yIG1lbW9yeSBleHBpcmF0aW9uIGRheXNcbiAqIEBpbnRlcm5hbFxuICovXG5jb25zdCBNRU1PUllfRVhQSVJBVElPTl9EQVlTX01BWCA9IDM2NTtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVyZmFjZVxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIE1lbW9yeSByZXNvdXJjZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJTWVtb3J5IGV4dGVuZHMgSVJlc291cmNlLCBpYW0uSUdyYW50YWJsZSwgSU1lbW9yeVJlZiB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBtZW1vcnkgcmVzb3VyY2VcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgbWVtb3J5QXJuOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIG1lbW9yeVxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBtZW1vcnlJZDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIElBTSByb2xlIHRoYXQgcHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIHRoZSBtZW1vcnkgdG8gYWNjZXNzIEFXUyBzZXJ2aWNlcy5cbiAgICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblJvbGU/OiBpYW0uSVJvbGU7XG4gIC8qKlxuICAgKiBDdXN0b20gS01TIGtleSBmb3IgZW5jcnlwdGlvbiAoaWYgcHJvdmlkZWQpXG4gICAqL1xuICByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleTtcbiAgLyoqXG4gICAqIFRoZSBzdGF0dXMgb2YgdGhlIG1lbW9yeVxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaW1lc3RhbXAgd2hlbiB0aGUgbWVtb3J5IHdhcyBsYXN0IHVwZGF0ZWRcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgdXBkYXRlZEF0Pzogc3RyaW5nO1xuICAvKipcbiAgICogVGltZXN0YW1wIHdoZW4gdGhlIG1lbW9yeSB3YXMgY3JlYXRlZFxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjcmVhdGVkQXQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBHcmFudCB0aGUgZ2l2ZW4gcHJpbmNpcGFsIGlkZW50aXR5IHBlcm1pc3Npb25zIHRvIHBlcmZvcm0gYWN0aW9ucyBvbiB0aGlzIG1lbW9yeS5cbiAgICovXG4gIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IGlhbS5HcmFudDtcbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gd3JpdGUgY29udGVudCB0byB0aGlzIG1lbW9yeS5cbiAgICovXG4gIGdyYW50V3JpdGUoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQ7XG4gIC8qKlxuICAgKiBHcmFudCB0aGUgZ2l2ZW4gcHJpbmNpcGFsIGlkZW50aXR5IHBlcm1pc3Npb25zIHRvIHJlYWQgdGhlIGNvbnRlbnRzIG9mIHRoaXMgbWVtb3J5LlxuICAgKiBCb3RoIFNob3J0LVRlcm0gTWVtb3J5IChTVE0pIGFuZCBMb25nLVRlcm0gTWVtb3J5IChMVE0pLlxuICAgKi9cbiAgZ3JhbnRSZWFkKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuICAvKipcbiAgICogR3JhbnQgdGhlIGdpdmVuIHByaW5jaXBhbCBpZGVudGl0eSBwZXJtaXNzaW9ucyB0byByZWFkIHRoZSBTaG9ydC1UZXJtIE1lbW9yeSAoU1RNKSBjb250ZW50cyBvZiB0aGlzIG1lbW9yeS5cbiAgICovXG4gIGdyYW50UmVhZFNob3J0VGVybU1lbW9yeShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gcmVhZCB0aGUgTG9uZy1UZXJtIE1lbW9yeSAoTFRNKSBjb250ZW50cyBvZiB0aGlzIG1lbW9yeS5cbiAgICovXG4gIGdyYW50UmVhZExvbmdUZXJtTWVtb3J5KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuICAvKipcbiAgICogR3JhbnQgdGhlIGdpdmVuIHByaW5jaXBhbCBpZGVudGl0eSBwZXJtaXNzaW9ucyB0byBkZWxldGUgY29udGVudCBvbiB0aGlzIG1lbW9yeS5cbiAgICovXG4gIGdyYW50RGVsZXRlKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuICAvKipcbiAgICogR3JhbnQgdGhlIGdpdmVuIHByaW5jaXBhbCBpZGVudGl0eSBwZXJtaXNzaW9ucyB0byBkZWxldGUgU2hvcnQtVGVybSBNZW1vcnkgKFNUTSkgY29udGVudCBvbiB0aGlzIG1lbW9yeS5cbiAgICovXG4gIGdyYW50RGVsZXRlU2hvcnRUZXJtTWVtb3J5KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuICAvKipcbiAgICogR3JhbnQgdGhlIGdpdmVuIHByaW5jaXBhbCBpZGVudGl0eSBwZXJtaXNzaW9ucyB0byBkZWxldGUgTG9uZy1UZXJtIE1lbW9yeSAoTFRNKSBjb250ZW50IG9uIHRoaXMgbWVtb3J5LlxuICAgKi9cbiAgZ3JhbnREZWxldGVMb25nVGVybU1lbW9yeShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gbWFuYWdlIHRoZSBjb250cm9sIHBsYW5lIG9mIHRoaXMgbWVtb3J5LlxuICAgKi9cbiAgZ3JhbnRBZG1pbihncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gZG8gZXZlcnkgYWN0aW9uIG9uIHRoaXMgbWVtb3J5LlxuICAgKi9cbiAgZ3JhbnRGdWxsQWNjZXNzKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBNZXRyaWNzXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogUmV0dXJuIHRoZSBnaXZlbiBuYW1lZCBtZXRyaWMgZm9yIHRoaXMgbWVtb3J5LlxuICAgKi9cbiAgbWV0cmljKG1ldHJpY05hbWU6IHN0cmluZywgZGltZW5zaW9uczogRGltZW5zaW9uc01hcCwgcHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuICAvKipcbiAgICogUmV0dXJuIHRoZSBnaXZlbiBuYW1lZCBtZXRyaWMgcmVsYXRlZCB0byB0aGUgQVBJIG9wZXJhdGlvbiBwZXJmb3JtZWQgb24gdGhpcyBtZW1vcnkuXG4gICAqL1xuICBtZXRyaWNGb3JBcGlPcGVyYXRpb24obWV0cmljTmFtZTogc3RyaW5nLCBvcGVyYXRpb246IHN0cmluZywgcHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuICAvKipcbiAgICogUmV0dXJuIGEgbWV0cmljIG1lYXN1cmluZyB0aGUgbGF0ZW5jeSBvZiBhIHNwZWNpZmljIEFQSSBvcGVyYXRpb24gcGVyZm9ybWVkIG9uIHRoaXMgbWVtb3J5LlxuICAgKi9cbiAgbWV0cmljTGF0ZW5jeUZvckFwaU9wZXJhdGlvbihvcGVyYXRpb246IHN0cmluZywgcHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuICAvKipcbiAgICogUmV0dXJuIGEgbWV0cmljIGNvbnRhaW5pbmcgdGhlIHRvdGFsIG51bWJlciBvZiBBUEkgcmVxdWVzdHMgbWFkZSBmb3IgYSBzcGVjaWZpYyBtZW1vcnkgb3BlcmF0aW9uLlxuICAgKi9cbiAgbWV0cmljSW52b2NhdGlvbnNGb3JBcGlPcGVyYXRpb24ob3BlcmF0aW9uOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcbiAgLyoqXG4gICAqIFJldHVybiBhIG1ldHJpYyBjb250YWluaW5nIHRoZSBudW1iZXIgb2YgZXJyb3JzIGZvciBhIHNwZWNpZmljIEFQSSBvcGVyYXRpb24gcGVyZm9ybWVkIG9uIHRoaXMgbWVtb3J5LlxuICAgKi9cbiAgbWV0cmljRXJyb3JzRm9yQXBpT3BlcmF0aW9uKG9wZXJhdGlvbjogc3RyaW5nLCBwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBtZXRyaWMgY29udGFpbmluZyB0aGUgbnVtYmVyIG9mIGNyZWF0ZWQgbWVtb3J5IGV2ZW50cyBhbmQgbWVtb3J5IHJlY29yZHMuXG4gICAqL1xuICBtZXRyaWNFdmVudENyZWF0aW9uQ291bnQocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIEFCU1RSQUNUIEJBU0UgQ0xBU1NcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKlxuICogQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgYSBNZW1vcnkuXG4gKiBDb250YWlucyBtZXRob2RzIGFuZCBhdHRyaWJ1dGVzIHZhbGlkIGZvciBNZW1vcmllcyBlaXRoZXIgY3JlYXRlZCB3aXRoIENESyBvciBpbXBvcnRlZC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE1lbW9yeUJhc2UgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElNZW1vcnkge1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgbWVtb3J5QXJuOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBtZW1vcnlJZDogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgc3RhdHVzPzogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdXBkYXRlZEF0Pzogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgY3JlYXRlZEF0Pzogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgZXhlY3V0aW9uUm9sZT86IGlhbS5JUm9sZTtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGttc0tleT86IGttcy5JS2V5O1xuICAvKipcbiAgICogVGhlIHByaW5jaXBhbCB0byBncmFudCBwZXJtaXNzaW9ucyB0b1xuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGdyYW50UHJpbmNpcGFsOiBpYW0uSVByaW5jaXBhbDtcblxuICAvKipcbiAgICogQSByZWZlcmVuY2UgdG8gYSBNZW1vcnkgcmVzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1lbW9yeVJlZigpOiBNZW1vcnlSZWZlcmVuY2Uge1xuICAgIHJldHVybiB7XG4gICAgICBtZW1vcnlBcm46IHRoaXMubWVtb3J5QXJuLFxuICAgIH07XG4gIH1cblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUmVzb3VyY2VQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gIH1cbiAgLyoqXG4gICAqIEdyYW50cyBJQU0gYWN0aW9ucyB0byB0aGUgSUFNIFByaW5jaXBhbFxuICAgKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgLSBUaGUgSUFNIHByaW5jaXBhbCB0byBncmFudCBwZXJtaXNzaW9ucyB0b1xuICAgKiBAcGFyYW0gYWN0aW9ucyAtIFRoZSBhY3Rpb25zIHRvIGdyYW50XG4gICAqIEByZXR1cm5zIEFuIElBTSBHcmFudCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBncmFudGVkIHBlcm1pc3Npb25zXG4gICAqL1xuICBncmFudChncmFudGVlOiBpYW0uSUdyYW50YWJsZSwgLi4uYWN0aW9uczogc3RyaW5nW10pOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgZ3JhbnRlZSxcbiAgICAgIGFjdGlvbnMsXG4gICAgICByZXNvdXJjZUFybnM6IFt0aGlzLm1lbW9yeVJlZi5tZW1vcnlBcm5dLFxuICAgICAgc2NvcGU6IHRoaXMsXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gd3JpdGUgY29udGVudCB0byBzaG9ydC10ZXJtIG1lbW9yeS5cbiAgICpcbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIC0gVGhlIElBTSBwcmluY2lwYWwgdG8gZ3JhbnQgcmVhZCBwZXJtaXNzaW9ucyB0b1xuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgZ3JhbnQgY29uZmlndXJhdGlvbjpcbiAgICogLSBhY3Rpb25zOiBbJ2JlZHJvY2stYWdlbnRjb3JlOkNyZWF0ZUV2ZW50J10gb24gdGhpcy5tZW1vcnlBcm5cbiAgICogQHJldHVybnMgQW4gSUFNIEdyYW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGdyYW50ZWQgcGVybWlzc2lvbnNcbiAgICovXG4gIGdyYW50V3JpdGUoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmdyYW50KGdyYW50ZWUsIC4uLk1lbW9yeVBlcm1zLlNUTS5XUklURV9QRVJNUyk7XG4gIH1cbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gcmVhZCB0aGUgY29udGVudHMgb2YgdGhpcyBtZW1vcnkuXG4gICAqIEJvdGggU2hvcnQtVGVybSBNZW1vcnkgKFNUTSkgYW5kIExvbmctVGVybSBNZW1vcnkgKExUTSkuXG4gICAqXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSAtIFRoZSBJQU0gcHJpbmNpcGFsIHRvIGdyYW50IHJlYWQgcGVybWlzc2lvbnMgdG9cbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IGdyYW50IGNvbmZpZ3VyYXRpb246XG4gICAqIC0gYWN0aW9uczogWydiZWRyb2NrLWFnZW50Y29yZTpHZXRNZW1vcnlSZWNvcmQnLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOlJldHJpZXZlTWVtb3J5UmVjb3JkcycsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6TGlzdE1lbW9yeVJlY29yZHMnLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOkxpc3RBY3RvcnMnLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOkxpc3RTZXNzaW9uc10gb24gdGhpcy5tZW1vcnlBcm5cbiAgICogQHJldHVybnMgQW4gSUFNIEdyYW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGdyYW50ZWQgcGVybWlzc2lvbnNcbiAgICovXG4gIGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhbnQoZ3JhbnRlZSwgLi4uTWVtb3J5UGVybXMuUkVBRF9QRVJNUyk7XG4gIH1cbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gcmVhZCB0aGUgU2hvcnQtVGVybSBNZW1vcnkgKFNUTSkgY29udGVudHMgb2YgdGhpcyBtZW1vcnkuXG4gICAqXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSAtIFRoZSBJQU0gcHJpbmNpcGFsIHRvIGdyYW50IHJlYWQgcGVybWlzc2lvbnMgdG9cbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IGdyYW50IGNvbmZpZ3VyYXRpb246XG4gICAqIC0gYWN0aW9uczogWydiZWRyb2NrLWFnZW50Y29yZTpHZXRFdmVudCcsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6TGlzdEV2ZW50cycsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6TGlzdEFjdG9ycycsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6TGlzdFNlc3Npb25zJyxdIG9uIHRoaXMubWVtb3J5QXJuXG4gICAqIEByZXR1cm5zIEFuIElBTSBHcmFudCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBncmFudGVkIHBlcm1pc3Npb25zXG4gICAqL1xuICBncmFudFJlYWRTaG9ydFRlcm1NZW1vcnkoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmdyYW50KGdyYW50ZWUsIC4uLk1lbW9yeVBlcm1zLlNUTS5SRUFEX1BFUk1TKTtcbiAgfVxuICAvKipcbiAgICogR3JhbnQgdGhlIGdpdmVuIHByaW5jaXBhbCBpZGVudGl0eSBwZXJtaXNzaW9ucyB0byByZWFkIHRoZSBMb25nLVRlcm0gTWVtb3J5IChMVE0pIGNvbnRlbnRzIG9mIHRoaXMgbWVtb3J5LlxuICAgKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgLSBUaGUgSUFNIHByaW5jaXBhbCB0byBncmFudCByZWFkIHBlcm1pc3Npb25zIHRvXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBncmFudCBjb25maWd1cmF0aW9uOlxuICAgKiAtIGFjdGlvbnM6IFsnYmVkcm9jay1hZ2VudGNvcmU6R2V0TWVtb3J5UmVjb3JkJyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpSZXRyaWV2ZU1lbW9yeVJlY29yZHMnLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOkxpc3RNZW1vcnlSZWNvcmRzJyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpMaXN0QWN0b3JzJyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpMaXN0U2Vzc2lvbnMnLF0gb24gdGhpcy5tZW1vcnlBcm5cbiAgICogQHJldHVybnMgQW4gSUFNIEdyYW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGdyYW50ZWQgcGVybWlzc2lvbnNcbiAgICovXG4gIGdyYW50UmVhZExvbmdUZXJtTWVtb3J5KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5ncmFudChncmFudGVlLCAuLi5NZW1vcnlQZXJtcy5MVE0uUkVBRF9QRVJNUyk7XG4gIH1cbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gZGVsZXRlIGNvbnRlbnQgb24gdGhpcyBtZW1vcnkuXG4gICAqXG4gICAqIEJvdGggU2hvcnQtVGVybSBNZW1vcnkgKFNUTSkgYW5kIExvbmctVGVybSBNZW1vcnkgKExUTSkuXG4gICAqXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSAtIFRoZSBJQU0gcHJpbmNpcGFsIHRvIGdyYW50IGRlbGV0ZSBwZXJtaXNzaW9ucyB0b1xuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgZ3JhbnQgY29uZmlndXJhdGlvbjpcbiAgICogLSBhY3Rpb25zOiBbJ2JlZHJvY2stYWdlbnRjb3JlOkRlbGV0ZUV2ZW50JyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpEZWxldGVNZW1vcnlSZWNvcmQnXSBvbiB0aGlzLm1lbW9yeUFyblxuICAgKiBAcmV0dXJucyBBbiBJQU0gR3JhbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZ3JhbnRlZCBwZXJtaXNzaW9uc1xuICAgKi9cbiAgZ3JhbnREZWxldGUoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmdyYW50KGdyYW50ZWUsIC4uLk1lbW9yeVBlcm1zLkRFTEVURV9QRVJNUyk7XG4gIH1cbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gZGVsZXRlIFNob3J0LVRlcm0gTWVtb3J5IChTVE0pIGNvbnRlbnQgb24gdGhpcyBtZW1vcnkuXG4gICAqXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSAtIFRoZSBJQU0gcHJpbmNpcGFsIHRvIGdyYW50IGRlbGV0ZSBwZXJtaXNzaW9ucyB0b1xuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgZ3JhbnQgY29uZmlndXJhdGlvbjpcbiAgICogLSBhY3Rpb25zOiBbJ2JlZHJvY2stYWdlbnRjb3JlOkRlbGV0ZUV2ZW50J10gb24gdGhpcy5tZW1vcnlBcm5cbiAgICogQHJldHVybnMgQW4gSUFNIEdyYW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGdyYW50ZWQgcGVybWlzc2lvbnNcbiAgICovXG4gIGdyYW50RGVsZXRlU2hvcnRUZXJtTWVtb3J5KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5ncmFudChncmFudGVlLCAuLi5NZW1vcnlQZXJtcy5TVE0uREVMRVRFX1BFUk1TKTtcbiAgfVxuICAvKipcbiAgICogR3JhbnQgdGhlIGdpdmVuIHByaW5jaXBhbCBpZGVudGl0eSBwZXJtaXNzaW9ucyB0byBkZWxldGUgTG9uZy1UZXJtIE1lbW9yeSAoTFRNKSBjb250ZW50IG9uIHRoaXMgbWVtb3J5LlxuICAgKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgLSBUaGUgSUFNIHByaW5jaXBhbCB0byBncmFudCBkZWxldGUgcGVybWlzc2lvbnMgdG9cbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IGdyYW50IGNvbmZpZ3VyYXRpb246XG4gICAqIC0gYWN0aW9uczogWydiZWRyb2NrLWFnZW50Y29yZTpEZWxldGVNZW1vcnlSZWNvcmQnXSBvbiB0aGlzLm1lbW9yeUFyblxuICAgKiBAcmV0dXJucyBBbiBJQU0gR3JhbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZ3JhbnRlZCBwZXJtaXNzaW9uc1xuICAgKi9cbiAgZ3JhbnREZWxldGVMb25nVGVybU1lbW9yeShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhbnQoZ3JhbnRlZSwgLi4uTWVtb3J5UGVybXMuTFRNLkRFTEVURV9QRVJNUyk7XG4gIH1cbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gbWFuYWdlIHRoZSBjb250cm9sIHBsYW5lIG9mIHRoaXMgbWVtb3J5LlxuICAgKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgLSBUaGUgSUFNIHByaW5jaXBhbCB0byBncmFudCBhZG1pbiBwZXJtaXNzaW9ucyB0b1xuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgZ3JhbnQgY29uZmlndXJhdGlvbjpcbiAgICogLSBhY3Rpb25zOiBbJ2JlZHJvY2stYWdlbnRjb3JlOkNyZWF0ZU1lbW9yeScsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6R2V0TWVtb3J5JyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpEZWxldGVNZW1vcnknLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOlVwZGF0ZU1lbW9yeSddIG9uIHRoaXMubWVtb3J5QXJuXG4gICAqIEByZXR1cm5zIEFuIElBTSBHcmFudCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBncmFudGVkIHBlcm1pc3Npb25zXG4gICAqL1xuICBncmFudEFkbWluKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5ncmFudChncmFudGVlLCAuLi5NZW1vcnlQZXJtcy5BRE1JTl9QRVJNUyk7XG4gIH1cbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gZG8gZXZlcnkgYWN0aW9uIG9uIHRoaXMgbWVtb3J5LlxuICAgKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgLSBUaGUgSUFNIHByaW5jaXBhbCB0byBncmFudCBmdWxsIGFjY2VzcyBwZXJtaXNzaW9ucyB0b1xuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgZ3JhbnQgY29uZmlndXJhdGlvbjpcbiAgICogLSBhY3Rpb25zOiBbJ2JlZHJvY2stYWdlbnRjb3JlOkNyZWF0ZUV2ZW50JyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpHZXRFdmVudCcsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6RGVsZXRlRXZlbnQnLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOkdldE1lbW9yeVJlY29yZCcsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6UmV0cmlldmVNZW1vcnlSZWNvcmRzJyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpMaXN0TWVtb3J5UmVjb3JkcycsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6TGlzdEFjdG9ycycsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6TGlzdFNlc3Npb25zJyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpDcmVhdGVNZW1vcnknLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOkdldE1lbW9yeScsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6RGVsZXRlTWVtb3J5JyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpVcGRhdGVNZW1vcnknXSBvbiB0aGlzLm1lbW9yeUFyblxuICAgKiBAcmV0dXJucyBBbiBJQU0gR3JhbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZ3JhbnRlZCBwZXJtaXNzaW9uc1xuICAgKi9cbiAgZ3JhbnRGdWxsQWNjZXNzKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5ncmFudChncmFudGVlLCAuLi5NZW1vcnlQZXJtcy5GVUxMX0FDQ0VTU19QRVJNUyk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gTWV0cmljc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgZ2l2ZW4gbmFtZWQgbWV0cmljIGZvciB0aGlzIG1lbW9yeS5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdGhlIG1ldHJpYyB3aWxsIGJlIGNhbGN1bGF0ZWQgYXMgYSBzdW0gb3ZlciBhIHBlcmlvZCBvZiA1IG1pbnV0ZXMuXG4gICAqIFlvdSBjYW4gY3VzdG9taXplIHRoaXMgYnkgdXNpbmcgdGhlIGBzdGF0aXN0aWNgIGFuZCBgcGVyaW9kYCBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgcHVibGljIG1ldHJpYyhtZXRyaWNOYW1lOiBzdHJpbmcsIGRpbWVuc2lvbnM6IERpbWVuc2lvbnNNYXAsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgY29uc3QgbWV0cmljUHJvcHM6IE1ldHJpY1Byb3BzID0ge1xuICAgICAgbmFtZXNwYWNlOiAnQVdTL0JlZHJvY2stQWdlbnRDb3JlJyxcbiAgICAgIG1ldHJpY05hbWUsXG4gICAgICBkaW1lbnNpb25zTWFwOiB7IC4uLmRpbWVuc2lvbnMsIFJlc291cmNlOiB0aGlzLm1lbW9yeVJlZi5tZW1vcnlBcm4gfSxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuY29uZmlndXJlTWV0cmljKG1ldHJpY1Byb3BzKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIHRoZSBnaXZlbiBuYW1lZCBtZXRyaWMgcmVsYXRlZCB0byB0aGUgQVBJIG9wZXJhdGlvbiBwZXJmb3JtZWQgb24gdGhpcyBtZW1vcnkuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljRm9yQXBpT3BlcmF0aW9uKFxuICAgIG1ldHJpY05hbWU6IHN0cmluZyxcbiAgICBvcGVyYXRpb246IHN0cmluZyxcbiAgICBwcm9wcz86IE1ldHJpY09wdGlvbnMsXG4gICk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKG1ldHJpY05hbWUsIHsgT3BlcmF0aW9uOiBvcGVyYXRpb24gfSwgcHJvcHMpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gYSBtZXRyaWMgbWVhc3VyaW5nIHRoZSBsYXRlbmN5IG9mIGEgc3BlY2lmaWMgQVBJIG9wZXJhdGlvbiBwZXJmb3JtZWQgb24gdGhpcyBtZW1vcnkuXG4gICAqXG4gICAqIFRoZSBsYXRlbmN5IG1ldHJpYyByZXByZXNlbnRzIHRoZSB0b3RhbCB0aW1lIGVsYXBzZWQgYmV0d2VlbiByZWNlaXZpbmcgdGhlIHJlcXVlc3QgYW5kIHNlbmRpbmdcbiAgICogdGhlIGZpbmFsIHJlc3BvbnNlIHRva2VuLCBtZWFzdXJpbmcgY29tcGxldGUgZW5kLXRvLWVuZCBwcm9jZXNzaW5nIHRpbWUuXG4gICAqXG4gICAqIEZvciBtZW1vcnkgY3JlYXRpb24gZXZlbnRzIHNwZWNpZmljYWxseSwgdGhpcyBtZWFzdXJlcyB0aGUgdGltZSBmcm9tIHRoZSBsYXN0IENyZWF0ZUV2ZW50XG4gICAqIHRoYXQgbWV0IHN0cmF0ZWd5IGNyaXRlcmlhIHVudGlsIG1lbW9yeSBzdG9yYWdlIGlzIGNvbXBsZXRlZC5cbiAgICpcbiAgICovXG4gIHB1YmxpYyBtZXRyaWNMYXRlbmN5Rm9yQXBpT3BlcmF0aW9uKG9wZXJhdGlvbjogc3RyaW5nLCBwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0ZvckFwaU9wZXJhdGlvbignTGF0ZW5jeScsIG9wZXJhdGlvbiwgeyBzdGF0aXN0aWM6IFN0YXRzLkFWRVJBR0UsIC4uLnByb3BzIH0pO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gYSBtZXRyaWMgY29udGFpbmluZyB0aGUgdG90YWwgbnVtYmVyIG9mIEFQSSByZXF1ZXN0cyBtYWRlIGZvciBhIHNwZWNpZmljIG1lbW9yeSBvcGVyYXRpb24gbGlrZVxuICAgKiBgQ3JlYXRlRXZlbnRgLCBgTGlzdEV2ZW50c2AsIGBSZXRyaWV2ZU1lbW9yeVJlY29yZHNgIC4uLlxuICAgKi9cbiAgcHVibGljIG1ldHJpY0ludm9jYXRpb25zRm9yQXBpT3BlcmF0aW9uKG9wZXJhdGlvbjogc3RyaW5nLCBwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0ZvckFwaU9wZXJhdGlvbignSW52b2NhdGlvbnMnLCBvcGVyYXRpb24sIHtcbiAgICAgIHN0YXRpc3RpYzogU3RhdHMuU1VNLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiBhIG1ldHJpYyBjb250YWluaW5nIHRoZSBudW1iZXIgb2YgZXJyb3JzIGZvciBhIHNwZWNpZmljIEFQSSBvcGVyYXRpb24gcGVyZm9ybWVkIG9uIHRoaXMgbWVtb3J5LlxuICAgKi9cbiAgcHVibGljIG1ldHJpY0Vycm9yc0ZvckFwaU9wZXJhdGlvbihvcGVyYXRpb246IHN0cmluZywgcHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGb3JBcGlPcGVyYXRpb24oJ0Vycm9ycycsIG9wZXJhdGlvbiwgeyBzdGF0aXN0aWM6IFN0YXRzLlNVTSwgLi4ucHJvcHMgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG1ldHJpYyBjb250YWluaW5nIHRoZSBudW1iZXIgb2Ygc2hvcnQtdGVybSBtZW1vcnkgZXZlbnRzLlxuICAgKi9cbiAgcHVibGljIG1ldHJpY0V2ZW50Q3JlYXRpb25Db3VudChwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYygnQ3JlYXRpb25Db3VudCcsIHsgSXRlbVR5cGU6ICdFdmVudCcgfSwgeyBzdGF0aXN0aWM6IFN0YXRzLlNVTSwgLi4ucHJvcHMgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG1ldHJpYyBjb250YWluaW5nIHRoZSBudW1iZXIgb2YgbG9uZy10ZXJtIG1lbW9yeSByZWNvcmRzXG4gICAqIGNyZWF0ZWQgYnkgdGhlIGxvbmctdGVybSBleHRyYWN0aW9uIHN0cmF0ZWdpZXMuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljTWVtb3J5UmVjb3JkQ3JlYXRpb25Db3VudChwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYyhcbiAgICAgICdDcmVhdGlvbkNvdW50JyxcbiAgICAgIHsgSXRlbVR5cGU6ICdNZW1vcnlSZWNvcmRzRXh0cmFjdGVkJyB9LFxuICAgICAgeyBzdGF0aXN0aWM6IFN0YXRzLlNVTSwgLi4ucHJvcHMgfSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBJbnRlcm5hbCBtZXRob2QgdG8gY3JlYXRlIGEgbWV0cmljLlxuICAgKi9cbiAgcHJpdmF0ZSBjb25maWd1cmVNZXRyaWMocHJvcHM6IE1ldHJpY1Byb3BzKSB7XG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgLi4ucHJvcHMsXG4gICAgICByZWdpb246IHByb3BzPy5yZWdpb24gPz8gdGhpcy5zdGFjay5yZWdpb24sXG4gICAgICBhY2NvdW50OiBwcm9wcz8uYWNjb3VudCA/PyB0aGlzLnN0YWNrLmFjY291bnQsXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICBQUk9QUyBGT1IgTkVXIENPTlNUUlVDVFxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhIE1lbW9yeSByZXNvdXJjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lbW9yeVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBtZW1vcnlcbiAgICogVmFsaWQgY2hhcmFjdGVycyBhcmUgYS16LCBBLVosIDAtOSwgXyAodW5kZXJzY29yZSlcbiAgICogVGhlIG5hbWUgbXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyIGFuZCBjYW4gYmUgdXAgdG8gNDggY2hhcmFjdGVycyBsb25nXG4gICAqIFBhdHRlcm46IFthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9XG4gICAqIEBkZWZhdWx0IC0gYXV0byBnZW5lcmF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgbWVtb3J5TmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFNob3J0LXRlcm0gbWVtb3J5IGV4cGlyYXRpb24gaW4gZGF5cyAoYmV0d2VlbiA3IGFuZCAzNjUpLlxuICAgKiBTZXRzIHRoZSBzaG9ydC10ZXJtIChyYXcgZXZlbnQpIG1lbW9yeSByZXRlbnRpb24uXG4gICAqIEV2ZW50cyBvbGRlciB0aGFuIHRoZSBzcGVjaWZpZWQgZHVyYXRpb24gd2lsbCBleHBpcmUgYW5kIG5vIGxvbmdlciBiZSBzdG9yZWQuXG4gICAqIEBkZWZhdWx0IC0gOTAgZGF5c1xuICAgKi9cbiAgcmVhZG9ubHkgZXhwaXJhdGlvbkR1cmF0aW9uPzogRHVyYXRpb247XG4gIC8qKlxuICAgKiBPcHRpb25hbCBkZXNjcmlwdGlvbiBmb3IgdGhlIG1lbW9yeVxuICAgKiBWYWxpZCBjaGFyYWN0ZXJzIGFyZSBhLXosIEEtWiwgMC05LCBfICh1bmRlcnNjb3JlKSwgLSAoaHlwaGVuKSBhbmQgc3BhY2VzXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBjYW4gaGF2ZSB1cCB0byAyMDAgY2hhcmFjdGVyc1xuICAgKiBAZGVmYXVsdCAtIE5vIGRlc2NyaXB0aW9uXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIEN1c3RvbSBLTVMga2V5IHRvIHVzZSBmb3IgZW5jcnlwdGlvbi5cbiAgICogQGRlZmF1bHQgLSBZb3VyIGRhdGEgaXMgZW5jcnlwdGVkIHdpdGggYSBrZXkgdGhhdCBBV1Mgb3ducyBhbmQgbWFuYWdlcyBmb3IgeW91XG4gICAqL1xuICByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleTtcbiAgLyoqXG4gICAqIElmIHlvdSBuZWVkIGxvbmctdGVybSBtZW1vcnkgZm9yIGNvbnRleHQgcmVjYWxsIGFjcm9zcyBzZXNzaW9ucyxcbiAgICogeW91IGNhbiBzZXR1cCBtZW1vcnkgZXh0cmFjdGlvbiBzdHJhdGVnaWVzIHRvIGV4dHJhY3QgdGhlIHJlbGV2YW50IG1lbW9yeSBmcm9tIHRoZSByYXcgZXZlbnRzLlxuICAgKiBAZGVmYXVsdCAtIE5vIGV4dHJhY3Rpb24gc3RyYXRlZ2llcyAoc2hvcnQgdGVybSBtZW1vcnkgb25seSlcbiAgICovXG4gIHJlYWRvbmx5IG1lbW9yeVN0cmF0ZWdpZXM/OiBJTWVtb3J5U3RyYXRlZ3lbXTtcbiAgLyoqXG4gICAqIFRoZSBJQU0gcm9sZSB0aGF0IHByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciB0aGUgbWVtb3J5IHRvIGFjY2VzcyBBV1Mgc2VydmljZXNcbiAgICogd2hlbiB1c2luZyBjdXN0b20gc3RyYXRlZ2llcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBBIG5ldyByb2xlIHdpbGwgYmUgY3JlYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblJvbGU/OiBpYW0uSVJvbGU7XG4gIC8qKlxuICAgKiBUYWdzIChvcHRpb25hbClcbiAgICogQSBsaXN0IG9mIGtleTp2YWx1ZSBwYWlycyBvZiB0YWdzIHRvIGFwcGx5IHRvIHRoaXMgbWVtb3J5IHJlc291cmNlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gdGFnc1xuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgIEFUVFJTIEZPUiBJTVBPUlRFRCBDT05TVFJVQ1RcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKlxuICogQXR0cmlidXRlcyBmb3Igc3BlY2lmeWluZyBhbiBpbXBvcnRlZCBNZW1vcnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVtb3J5QXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBtZW1vcnkuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IG1lbW9yeUFybjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgSUFNIHJvbGUgYXNzb2NpYXRlZCB0byB0aGUgbWVtb3J5LlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSByb2xlQXJuOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGVuIHRoaXMgbWVtb3J5IHdhcyBsYXN0IHVwZGF0ZWQuXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZCAtIE5vIGxhc3QgdXBkYXRlZCB0aW1lc3RhbXAgaXMgcHJvdmlkZWRcbiAgICovXG4gIHJlYWRvbmx5IHVwZGF0ZWRBdD86IHN0cmluZztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIEtNUyBlbmNyeXB0aW9uIGtleSBhc3NvY2lhdGVkIHdpdGggdGhpcyBtZW1vcnlcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkIC0gQW4gQVdTIG1hbmFnZWQga2V5IGlzIHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IGttc0tleUFybj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBzdGF0dXMgb2YgdGhlIG1lbW9yeS5cbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkIC0gTm8gc3RhdHVzIGlzIHByb3ZpZGVkXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgY3JlYXRlZCB0aW1lc3RhbXAgb2YgdGhlIG1lbW9yeS5cbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkIC0gTm8gY3JlYXRlZCB0aW1lc3RhbXAgaXMgcHJvdmlkZWRcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZWRBdD86IHN0cmluZztcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKipcbiAqIExvbmctdGVybSBtZW1vcnkgc3RvcmUgZm9yIGV4dHJhY3RlZCBpbnNpZ2h0cyBsaWtlIHVzZXIgcHJlZmVyZW5jZXMsIHNlbWFudGljIGZhY3RzIGFuZCBzdW1tYXJpZXMuXG4gKiBFbmFibGVzIGtub3dsZWRnZSByZXRlbnRpb24gYWNyb3NzIHNlc3Npb25zIGJ5IHN0b3JpbmcgdXNlciBwcmVmZXJlbmNlcyAoZS5nLiBjb2Rpbmcgc3R5bGUpLFxuICogc2VtYW50aWMgZmFjdHMgKGUuZy4gbGVhcm5lZCBpbmZvKSBhbmQgaW50ZXJhY3Rpb24gc3VtbWFyaWVzIGZvciBjb250ZXh0IG9wdGltaXphdGlvbi5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvbWVtb3J5Lmh0bWxcbiAqIEByZXNvdXJjZSBBV1M6OkJlZHJvY2tBZ2VudENvcmU6Ok1lbW9yeVxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgTWVtb3J5IGV4dGVuZHMgTWVtb3J5QmFzZSB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWJlZHJvY2stYWdlbnRjb3JlLWFscGhhLk1lbW9yeSc7XG5cbiAgLyoqXG4gICAqIFN0YXRpYyBNZXRob2QgZm9yIGltcG9ydGluZyBhbiBleGlzdGluZyBCZWRyb2NrIEFnZW50Q29yZSBNZW1vcnkuXG4gICAqL1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBNZW1vcnkgcmVmZXJlbmNlIGZyb20gYW4gZXhpc3RpbmcgbWVtb3J5J3MgYXR0cmlidXRlcy5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZVxuICAgKiBAcGFyYW0gaWQgLSBJZGVudGlmaWVyIG9mIHRoZSBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIGF0dHJzIC0gQXR0cmlidXRlcyBvZiB0aGUgZXhpc3RpbmcgYnJvd3NlciBjdXN0b21cbiAgICogQHJldHVybnMgQW4gSUJyb3dzZXJDdXN0b20gcmVmZXJlbmNlIHRvIHRoZSBleGlzdGluZyBicm93c2VyXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21NZW1vcnlBdHRyaWJ1dGVzKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGF0dHJzOiBNZW1vcnlBdHRyaWJ1dGVzKTogSU1lbW9yeSB7XG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgTWVtb3J5QmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgbWVtb3J5QXJuID0gYXR0cnMubWVtb3J5QXJuO1xuICAgICAgcHVibGljIHJlYWRvbmx5IG1lbW9yeUlkID0gQXJuLnNwbGl0KGF0dHJzLm1lbW9yeUFybiwgQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUpLnJlc291cmNlTmFtZSE7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZXhlY3V0aW9uUm9sZSA9IGlhbS5Sb2xlLmZyb21Sb2xlQXJuKHNjb3BlLCBgJHtpZH1Sb2xlYCwgYXR0cnMucm9sZUFybik7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkga21zS2V5ID0gYXR0cnMua21zS2V5QXJuID8ga21zLktleS5mcm9tS2V5QXJuKHNjb3BlLCBgJHtpZH1LZXlgLCBhdHRycy5rbXNLZXlBcm4pIDogdW5kZWZpbmVkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHVwZGF0ZWRBdCA9IGF0dHJzLnVwZGF0ZWRBdDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBncmFudFByaW5jaXBhbCA9IHRoaXMuZXhlY3V0aW9uUm9sZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBzdGF0dXMgPSBhdHRycy5zdGF0dXM7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEF0ID0gYXR0cnMuY3JlYXRlZEF0O1xuXG4gICAgICBjb25zdHJ1Y3RvcihzOiBDb25zdHJ1Y3QsIGk6IHN0cmluZykge1xuICAgICAgICBzdXBlcihzLCBpKTtcblxuICAgICAgICB0aGlzLmdyYW50UHJpbmNpcGFsID0gdGhpcy5leGVjdXRpb25Sb2xlIHx8IG5ldyBpYW0uVW5rbm93blByaW5jaXBhbCh7IHJlc291cmNlOiB0aGlzIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiBuZXcgTWVtb3J5XG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBBdHRyaWJ1dGVzXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgbWVtb3J5IHJlc291cmNlLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbWVtb3J5QXJuOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgbWVtb3J5LlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbWVtb3J5TmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBtZW1vcnkuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtZW1vcnlJZDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGV4cGlyYXRpb24gZGF5cyBvZiB0aGUgbWVtb3J5LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGV4cGlyYXRpb25EdXJhdGlvbj86IER1cmF0aW9uO1xuICAvKipcbiAgICogVGhlIGZhaWx1cmUgcmVhc29uIG9mIHRoZSBicm93c2VyXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBmYWlsdXJlUmVhc29uPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBtZW1vcnkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgZXhlY3V0aW9uIHJvbGUgb2YgdGhlIG1lbW9yeS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBleGVjdXRpb25Sb2xlPzogaWFtLklSb2xlO1xuICAvKipcbiAgICogVGhlIHN0YXR1cyBvZiB0aGUgbWVtb3J5LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHN0YXR1cz86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBjcmVhdGVkIHRpbWVzdGFtcCBvZiB0aGUgbWVtb3J5LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZWRBdD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSB1cGRhdGVkIGF0IHRpbWVzdGFtcCBvZiB0aGUgbWVtb3J5LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVwZGF0ZWRBdD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRhZ3MgYXBwbGllZCB0byB0aGlzIGJyb3dzZXIgcmVzb3VyY2VcbiAgICogQSBtYXAgb2Yga2V5LXZhbHVlIHBhaXJzIGZvciByZXNvdXJjZSB0YWdnaW5nXG4gICAqIEBkZWZhdWx0IC0gTm8gdGFncyBhcHBsaWVkXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIC8qKlxuICAgKiBUaGUgcHJpbmNpcGFsIHRvIGdyYW50IHBlcm1pc3Npb25zIHRvXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ3JhbnRQcmluY2lwYWw6IGlhbS5JUHJpbmNpcGFsO1xuICAvKipcbiAgICogVGhlIEtNUyBrZXkgdXNlZCB0byBlbmNyeXB0IHRoZSBtZW1vcnkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkga21zS2V5Pzoga21zLklLZXk7XG4gIC8qKlxuICAgKiBUaGUgbWVtb3J5IHN0cmF0ZWdpZXMgdXNlZCBieSB0aGUgbWVtb3J5LlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbWVtb3J5U3RyYXRlZ2llczogSU1lbW9yeVN0cmF0ZWd5W10gPSBbXTtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEludGVybmFsIE9ubHlcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIHByaXZhdGUgcmVhZG9ubHkgX19yZXNvdXJjZTogQ2ZuTWVtb3J5O1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBDT05TVFJVQ1RPUlxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE1lbW9yeVByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIC8vIE1heGltdW0gbmFtZSBsZW5ndGggb2YgNDggY2hhcmFjdGVyc1xuICAgICAgLy8gQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1iZWRyb2NrYWdlbnRjb3JlLW1lbW9yeS5odG1sI2Nmbi1iZWRyb2NrYWdlbnRjb3JlLW1lbW9yeS1uYW1lXG4gICAgICBwaHlzaWNhbE5hbWU6IHByb3BzPy5tZW1vcnlOYW1lID8/XG4gICAgICAgIExhenkuc3RyaW5nKHtcbiAgICAgICAgICBwcm9kdWNlOiAoKSA9PiBOYW1lcy51bmlxdWVSZXNvdXJjZU5hbWUodGhpcywgeyBtYXhMZW5ndGg6IDQ4IH0pLFxuICAgICAgICB9KSxcbiAgICB9KTtcbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFNldCBwcm9wZXJ0aWVzIGFuZCBkZWZhdWx0c1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIHRoaXMubWVtb3J5TmFtZSA9IHRoaXMucGh5c2ljYWxOYW1lO1xuICAgIHRoaXMuZXhwaXJhdGlvbkR1cmF0aW9uID0gcHJvcHMuZXhwaXJhdGlvbkR1cmF0aW9uID8/IER1cmF0aW9uLmRheXMoOTApO1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBwcm9wcy5kZXNjcmlwdGlvbjtcbiAgICB0aGlzLmttc0tleSA9IHByb3BzLmttc0tleTtcbiAgICB0aGlzLmV4ZWN1dGlvblJvbGUgPSBwcm9wcy5leGVjdXRpb25Sb2xlID8/IHRoaXMuX2NyZWF0ZU1lbW9yeVJvbGUoKTtcbiAgICB0aGlzLmdyYW50UHJpbmNpcGFsID0gdGhpcy5leGVjdXRpb25Sb2xlO1xuICAgIHRoaXMudGFncyA9IHByb3BzLnRhZ3M7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBQZXJtaXNzaW9uc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEZvciBLTVMgcGVybWlzc2lvbnMgc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvc3RvcmFnZS1lbmNyeXB0aW9uLmh0bWxcbiAgICBpZiAodGhpcy5rbXNLZXkpIHtcbiAgICAgIHRoaXMua21zS2V5LmdyYW50KHRoaXMuZXhlY3V0aW9uUm9sZSxcbiAgICAgICAgJ2ttczpDcmVhdGVHcmFudCcsXG4gICAgICAgICdrbXM6RGVjcnlwdCcsXG4gICAgICAgICdrbXM6RGVzY3JpYmVLZXknLFxuICAgICAgICAna21zOkdlbmVyYXRlRGF0YUtleScsXG4gICAgICAgICdrbXM6R2VuZXJhdGVEYXRhS2V5V2l0aG91dFBsYWludGV4dCcsXG4gICAgICAgICdrbXM6UmVFbmNyeXB0KicsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFZhbGlkYXRpb25zXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICAvLyBWYWxpZGF0ZSBtZW1vcnkgbmFtZVxuICAgIHRocm93SWZJbnZhbGlkKHRoaXMuX3ZhbGlkYXRlTWVtb3J5TmFtZSwgdGhpcy5tZW1vcnlOYW1lLCB0aGlzKTtcblxuICAgIC8vIFZhbGlkYXRlIGV4cGlyYXRpb24gZHVyYXRpb25cbiAgICB0aHJvd0lmSW52YWxpZCh0aGlzLl92YWxpZGF0ZU1lbW9yeUV4cGlyYXRpb25EYXlzLCB0aGlzLmV4cGlyYXRpb25EdXJhdGlvbi50b0RheXMoKSk7XG5cbiAgICAvLyBWYWxpZGF0ZSBtZW1vcnkgdGFnc1xuICAgIHRocm93SWZJbnZhbGlkKHRoaXMuX3ZhbGlkYXRlTWVtb3J5VGFncywgdGhpcy50YWdzLCB0aGlzKTtcblxuICAgIC8vIE1lbW9yeSBzdHJhdGVnaWVzIGFyZSBhbHJlYWR5IHZhbGlkYXRlZCB3aGVuIGJ1aWxkaW5nIHRoZW0sIHNvIG5vIG5lZWQgdG8gdmFsaWRhdGUgdGhlbSBoZXJlXG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBDRk4gUHJvcHMgLSBXaXRoIExhenkgc3VwcG9ydFxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGNmblByb3BzOiBDZm5NZW1vcnlQcm9wcyA9IHtcbiAgICAgIG5hbWU6IHRoaXMubWVtb3J5TmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgZXZlbnRFeHBpcnlEdXJhdGlvbjogdGhpcy5leHBpcmF0aW9uRHVyYXRpb24udG9EYXlzKCksXG4gICAgICBlbmNyeXB0aW9uS2V5QXJuOiB0aGlzLmttc0tleT8ua2V5QXJuLFxuICAgICAgbWVtb3J5RXhlY3V0aW9uUm9sZUFybjogdGhpcy5leGVjdXRpb25Sb2xlPy5yb2xlQXJuLFxuICAgICAgbWVtb3J5U3RyYXRlZ2llczogTGF6eS5hbnkoeyBwcm9kdWNlOiAoKSA9PiB0aGlzLl9yZW5kZXJNZW1vcnlTdHJhdGVnaWVzKCkgfSwgeyBvbWl0RW1wdHlBcnJheTogdHJ1ZSB9KSxcbiAgICAgIHRhZ3M6IHRoaXMudGFncyxcbiAgICB9O1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQ0ZOIFJlc291cmNlXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgdGhpcy5fX3Jlc291cmNlID0gbmV3IENmbk1lbW9yeSh0aGlzLCAnTWVtb3J5JywgY2ZuUHJvcHMpO1xuXG4gICAgdGhpcy5tZW1vcnlJZCA9IHRoaXMuX19yZXNvdXJjZS5hdHRyTWVtb3J5SWQ7XG4gICAgdGhpcy5tZW1vcnlBcm4gPSB0aGlzLl9fcmVzb3VyY2UuYXR0ck1lbW9yeUFybjtcbiAgICB0aGlzLnN0YXR1cyA9IHRoaXMuX19yZXNvdXJjZS5hdHRyU3RhdHVzO1xuICAgIHRoaXMudXBkYXRlZEF0ID0gdGhpcy5fX3Jlc291cmNlLmF0dHJVcGRhdGVkQXQ7XG4gICAgdGhpcy5jcmVhdGVkQXQgPSB0aGlzLl9fcmVzb3VyY2UuYXR0ckNyZWF0ZWRBdDtcbiAgICB0aGlzLmZhaWx1cmVSZWFzb24gPSB0aGlzLl9fcmVzb3VyY2UuYXR0ckZhaWx1cmVSZWFzb247XG5cbiAgICAvLyBBZGQgbWVtb3J5IHN0cmF0ZWdpZXMgdG8gdGhlIG1lbW9yeVxuICAgIGZvciAoY29uc3Qgc3RyYXRlZ3kgb2YgcHJvcHM/Lm1lbW9yeVN0cmF0ZWdpZXMgPz8gW10pIHt0aGlzLmFkZE1lbW9yeVN0cmF0ZWd5KHN0cmF0ZWd5KTt9XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gSEVMUEVSIE1FVEhPRFMgLSBhZGRYKClcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBBZGQgbWVtb3J5IHN0cmF0ZWd5IHRvIHRoZSBtZW1vcnkuXG4gICAqIEBkZWZhdWx0IC0gTm8gbWVtb3J5IHN0cmF0ZWdpZXMuXG4gICAqL1xuICBATWV0aG9kTWV0YWRhdGEoKVxuICBwdWJsaWMgYWRkTWVtb3J5U3RyYXRlZ3kobWVtb3J5U3RyYXRlZ3k6IElNZW1vcnlTdHJhdGVneSkge1xuICAgIC8vIEFkZCB0aGUgbWVtb3J5IHN0cmF0ZWd5IHRvIHRoZSBtZW1vcnlcbiAgICB0aGlzLm1lbW9yeVN0cmF0ZWdpZXMucHVzaChtZW1vcnlTdHJhdGVneSk7XG5cbiAgICAvLyBHcmFudCBuZWNlc3NhcnkgcGVybWlzc2lvbnMgdG8gdGhlIGV4ZWN1dGlvbiByb2xlXG4gICAgY29uc3QgZ3JhbnQgPSBtZW1vcnlTdHJhdGVneS5ncmFudCh0aGlzLmV4ZWN1dGlvblJvbGUgYXMgaWFtLklSb2xlKTtcbiAgICBncmFudD8uYXBwbHlCZWZvcmUodGhpcy5fX3Jlc291cmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGV4ZWN1dGlvbiByb2xlIG5lZWRlZCBmb3IgdGhlIG1lbW9yeSB0byBhY2Nlc3MgQVdTIHNlcnZpY2VzXG4gICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIHJvbGVcbiAgICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG4gICAqL1xuICBwcml2YXRlIF9jcmVhdGVNZW1vcnlSb2xlKCk6IGlhbS5JUm9sZSB7XG4gICAgY29uc3Qgcm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCAnU2VydmljZVJvbGUnLCB7XG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnYmVkcm9jay1hZ2VudGNvcmUuYW1hem9uYXdzLmNvbScpLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJvbGU7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gVkFMSURBVE9SU1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgbWVtb3J5IHRhZ3MgZm9ybWF0XG4gICAqIEBwYXJhbSB0YWdzIFRoZSB0YWdzIG9iamVjdCB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICAgKi9cbiAgcHJpdmF0ZSBfdmFsaWRhdGVNZW1vcnlUYWdzID0gKHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9LCBzY29wZT86IElDb25zdHJ1Y3QpOiBzdHJpbmdbXSA9PiB7XG4gICAgbGV0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAoIXRhZ3MpIHtcbiAgICAgIHJldHVybiBlcnJvcnM7IC8vIFRhZ3MgYXJlIG9wdGlvbmFsXG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgZWFjaCB0YWcga2V5IGFuZCB2YWx1ZVxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRhZ3MpKSB7XG4gICAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZVN0cmluZ0ZpZWxkTGVuZ3RoKHtcbiAgICAgICAgdmFsdWU6IGtleSxcbiAgICAgICAgZmllbGROYW1lOiAnVGFnIGtleScsXG4gICAgICAgIG1pbkxlbmd0aDogTUVNT1JZX1RBR19NSU5fTEVOR1RILFxuICAgICAgICBtYXhMZW5ndGg6IE1FTU9SWV9UQUdfTUFYX0xFTkdUSCxcbiAgICAgIH0sIHNjb3BlKSk7XG5cbiAgICAgIC8vIFZhbGlkYXRlIHRhZyBrZXkgcGF0dGVybjogXlthLXpBLVowLTlcXHMuXzovPStALV0qJFxuICAgICAgY29uc3QgdmFsaWRLZXlQYXR0ZXJuID0gL15bYS16QS1aMC05XFxzLl86Lz0rQC1dKiQvO1xuICAgICAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVGaWVsZFBhdHRlcm4oa2V5LCAnVGFnIGtleScsIHZhbGlkS2V5UGF0dGVybiwgdW5kZWZpbmVkLCBzY29wZSkpO1xuXG4gICAgICAvLyBWYWxpZGF0ZSB0YWcgdmFsdWVcbiAgICAgIGVycm9ycy5wdXNoKC4uLnZhbGlkYXRlU3RyaW5nRmllbGRMZW5ndGgoe1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGZpZWxkTmFtZTogJ1RhZyB2YWx1ZScsXG4gICAgICAgIG1pbkxlbmd0aDogTUVNT1JZX1RBR19NSU5fTEVOR1RILFxuICAgICAgICBtYXhMZW5ndGg6IE1FTU9SWV9UQUdfTUFYX0xFTkdUSCxcbiAgICAgIH0sIHNjb3BlKSk7XG5cbiAgICAgIC8vIFZhbGlkYXRlIHRhZyB2YWx1ZSBwYXR0ZXJuOiBeW2EtekEtWjAtOVxccy5fOi89K0AtXSokXG4gICAgICBjb25zdCB2YWxpZFZhbHVlUGF0dGVybiA9IC9eW2EtekEtWjAtOVxccy5fOi89K0AtXSokLztcbiAgICAgIGVycm9ycy5wdXNoKC4uLnZhbGlkYXRlRmllbGRQYXR0ZXJuKHZhbHVlLCAnVGFnIHZhbHVlJywgdmFsaWRWYWx1ZVBhdHRlcm4sIHVuZGVmaW5lZCwgc2NvcGUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIG1lbW9yeSBuYW1lIGZvcm1hdFxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbWVtb3J5IG5hbWUgdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMgQXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlcywgZW1wdHkgaWYgdmFsaWRcbiAgICovXG4gIHByaXZhdGUgX3ZhbGlkYXRlTWVtb3J5TmFtZSA9IChuYW1lOiBzdHJpbmcsIHNjb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdID0+IHtcbiAgICBsZXQgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVTdHJpbmdGaWVsZExlbmd0aCh7XG4gICAgICB2YWx1ZTogbmFtZSxcbiAgICAgIGZpZWxkTmFtZTogJ01lbW9yeSBuYW1lJyxcbiAgICAgIG1pbkxlbmd0aDogTUVNT1JZX05BTUVfTUlOX0xFTkdUSCxcbiAgICAgIG1heExlbmd0aDogTUVNT1JZX05BTUVfTUFYX0xFTkdUSCxcbiAgICB9LCBzY29wZSkpO1xuXG4gICAgLy8gQ2hlY2sgaWYgbmFtZSBtYXRjaGVzIHRoZSBBV1MgQVBJIHBhdHRlcm46IFthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9XG4gICAgLy8gTXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyLCBmb2xsb3dlZCBieSB1cCB0byA0NyBsZXR0ZXJzLCBudW1iZXJzLCBvciB1bmRlcnNjb3Jlc1xuICAgIGNvbnN0IHZhbGlkTmFtZVBhdHRlcm4gPSAvXlthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9JC87XG4gICAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVGaWVsZFBhdHRlcm4obmFtZSwgJ01lbW9yeSBuYW1lJywgdmFsaWROYW1lUGF0dGVybiwgdW5kZWZpbmVkLCBzY29wZSkpO1xuXG4gICAgcmV0dXJuIGVycm9ycztcbiAgfTtcblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBtZW1vcnkgZXhwaXJhdGlvbiBkYXlzXG4gICAqIEBwYXJhbSBleHBpcmF0aW9uRGF5cyBUaGUgbWVtb3J5IGV4cGlyYXRpb24gZGF5cyB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICAgKi9cbiAgcHJpdmF0ZSBfdmFsaWRhdGVNZW1vcnlFeHBpcmF0aW9uRGF5cyA9IChleHBpcmF0aW9uRGF5czogbnVtYmVyKTogc3RyaW5nW10gPT4ge1xuICAgIGxldCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKGV4cGlyYXRpb25EYXlzKSkge1xuICAgICAgcmV0dXJuIGVycm9ycztcbiAgICB9XG5cbiAgICBpZiAoZXhwaXJhdGlvbkRheXMgPCBNRU1PUllfRVhQSVJBVElPTl9EQVlTX01JTiB8fCBleHBpcmF0aW9uRGF5cyA+IE1FTU9SWV9FWFBJUkFUSU9OX0RBWVNfTUFYKSB7XG4gICAgICBlcnJvcnMucHVzaChgTWVtb3J5IGV4cGlyYXRpb24gZGF5cyBtdXN0IGJlIGJldHdlZW4gJHtNRU1PUllfRVhQSVJBVElPTl9EQVlTX01JTn0gYW5kICR7TUVNT1JZX0VYUElSQVRJT05fREFZU19NQVh9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbiAgfTtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gUkVOREVSRVJTXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogUmVuZGVyIHRoZSBtZW1vcnkgc3RyYXRlZ2llcy5cbiAgICpcbiAgICogQHJldHVybnMgQXJyYXkgb2YgTWVtb3J5U3RyYXRlZ3lQcm9wZXJ0eSBvYmplY3RzIGluIENsb3VkRm9ybWF0aW9uIGZvcm1hdCwgb3IgdW5kZWZpbmVkIGlmIG5vIHN0cmF0ZWdpZXMgYXJlIGRlZmluZWRcbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWQgaWYgbm8gc3RyYXRlZ2llcyBhcmUgZGVmaW5lZCBvciBhcnJheSBpcyBlbXB0eVxuICAgKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cbiAgICovXG4gIHByaXZhdGUgX3JlbmRlck1lbW9yeVN0cmF0ZWdpZXMoKTogQ2ZuTWVtb3J5Lk1lbW9yeVN0cmF0ZWd5UHJvcGVydHlbXSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLm1lbW9yeVN0cmF0ZWdpZXMgfHwgdGhpcy5tZW1vcnlTdHJhdGVnaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5tZW1vcnlTdHJhdGVnaWVzLm1hcChtcyA9PiBtcy5yZW5kZXIoKSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -10,10 +10,11 @@
|
|
|
10
10
|
* OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
|
|
11
11
|
* and limitations under the License.
|
|
12
12
|
*/
|
|
13
|
-
import { IBedrockInvokable } from '@aws-cdk/aws-bedrock-alpha';
|
|
14
|
-
import * as bedrockagentcore from 'aws-cdk-lib/aws-bedrockagentcore';
|
|
15
|
-
import { Grant, IGrantable } from 'aws-cdk-lib/aws-iam';
|
|
16
|
-
import { MemoryStrategyCommonProps, IMemoryStrategy
|
|
13
|
+
import type { IBedrockInvokable } from '@aws-cdk/aws-bedrock-alpha';
|
|
14
|
+
import type * as bedrockagentcore from 'aws-cdk-lib/aws-bedrockagentcore';
|
|
15
|
+
import type { Grant, IGrantable } from 'aws-cdk-lib/aws-iam';
|
|
16
|
+
import type { MemoryStrategyCommonProps, IMemoryStrategy } from '../memory-strategy';
|
|
17
|
+
import { MemoryStrategyType } from '../memory-strategy';
|
|
17
18
|
/**
|
|
18
19
|
* Configuration for overriding model and prompt template
|
|
19
20
|
*/
|
|
@@ -25,7 +25,7 @@ const PROMPT_MAX_LENGTH = 30000;
|
|
|
25
25
|
* with specific models and prompt templates.
|
|
26
26
|
*/
|
|
27
27
|
class ManagedMemoryStrategy {
|
|
28
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.ManagedMemoryStrategy", version: "2.
|
|
28
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.ManagedMemoryStrategy", version: "2.239.0-alpha.0" };
|
|
29
29
|
name;
|
|
30
30
|
description;
|
|
31
31
|
/**
|
|
@@ -251,4 +251,4 @@ class ManagedMemoryStrategy {
|
|
|
251
251
|
};
|
|
252
252
|
}
|
|
253
253
|
exports.ManagedMemoryStrategy = ManagedMemoryStrategy;
|
|
254
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlZC1zdHJhdGVneS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1hbmFnZWQtc3RyYXRlZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFjQSw2Q0FBNkM7QUFJN0Msd0RBQW9KO0FBQ3BKLDhEQUF3RztBQUV4Rzs7K0VBRStFO0FBQy9FOzs7R0FHRztBQUNILE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0FBQzVCOzs7R0FHRztBQUNILE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDO0FBOEVoQzs7OztHQUlHO0FBQ0gsTUFBYSxxQkFBcUI7O0lBQ2hCLElBQUksQ0FBUztJQUNiLFdBQVcsQ0FBVTtJQUNyQzs7T0FFRztJQUNhLFVBQVUsQ0FBVztJQUNyQzs7T0FFRztJQUNhLHFCQUFxQixDQUFrQjtJQUN2RDs7T0FFRztJQUNhLGtCQUFrQixDQUFrQjtJQUNwRDs7T0FFRztJQUNhLHVCQUF1QixDQUFtQztJQUMxRCxZQUFZLENBQXFCO0lBRWpEOzs7O09BSUc7SUFDSCxZQUFZLFlBQWdDLEVBQUUsS0FBMkI7Ozs7Ozs7K0NBMUI5RCxxQkFBcUI7Ozs7UUEyQjlCLHlEQUF5RDtRQUN6RCw4QkFBOEI7UUFDOUIseURBQXlEO1FBQ3pELElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDckMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBQ25DLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUMsbUJBQW1CLENBQUM7UUFDdkQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztRQUNqRCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsS0FBSyxDQUFDLHVCQUF1QixDQUFDO1FBRTdELHlEQUF5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QUksQ0FBQyxHQUFHLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUM1RSxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQyxDQUFDOztBQTNPSixzREE0T0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBJQmVkcm9ja0ludm9rYWJsZSB9IGZyb20gJ0Bhd3MtY2RrL2F3cy1iZWRyb2NrLWFscGhhJztcbmltcG9ydCB7IEFybiwgQXJuRm9ybWF0IH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgYmVkcm9ja2FnZW50Y29yZSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZSc7XG5pbXBvcnQgeyBHcmFudCwgSUdyYW50YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgSUNvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgTWVtb3J5U3RyYXRlZ3lDb21tb25Qcm9wcywgSU1lbW9yeVN0cmF0ZWd5LCBNZW1vcnlTdHJhdGVneVR5cGUsIE1FTU9SWV9OQU1FX01JTl9MRU5HVEgsIE1FTU9SWV9OQU1FX01BWF9MRU5HVEggfSBmcm9tICcuLi9tZW1vcnktc3RyYXRlZ3knO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmdGaWVsZExlbmd0aCwgdGhyb3dJZkludmFsaWQsIHZhbGlkYXRlRmllbGRQYXR0ZXJuIH0gZnJvbSAnLi4vdmFsaWRhdGlvbi1oZWxwZXJzJztcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVEFOVFNcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKlxuICogTWluaW11bSBsZW5ndGggZm9yIHByb21wdFxuICogQGludGVybmFsXG4gKi9cbmNvbnN0IFBST01QVF9NSU5fTEVOR1RIID0gMTtcbi8qKlxuICogTWF4aW11bSBsZW5ndGggZm9yIHByb21wdFxuICogQGludGVybmFsXG4gKi9cbmNvbnN0IFBST01QVF9NQVhfTEVOR1RIID0gMzAwMDA7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3Igb3ZlcnJpZGluZyBtb2RlbCBhbmQgcHJvbXB0IHRlbXBsYXRlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3ZlcnJpZGVDb25maWcge1xuICAvKipcbiAgICogVGhlIG1vZGVsIHRvIHVzZSBmb3IgY29uc29saWRhdGlvbi9leHRyYWN0aW9uXG4gICAqL1xuICByZWFkb25seSBtb2RlbDogSUJlZHJvY2tJbnZva2FibGU7XG4gIC8qKlxuICAgKiBUaGUgcHJvbXB0IHRoYXQgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgc3lzdGVtIHByb21wdCB0byBkZWZpbmVcbiAgICogdGhlIG1vZGVsJ3MgbWVtb3J5IGNvbnNvbGlkYXRpb24vZXh0cmFjdGlvbiBzdHJhdGVneS5cbiAgICogVGhpcyBjb25maWd1cmF0aW9uIHByb3ZpZGVzIGN1c3RvbWl6YXRpb24gdG8gaG93IHRoZSBtb2RlbCBpZGVudGlmaWVzIGFuZCBleHRyYWN0c1xuICAgKiByZWxldmFudCBpbmZvcm1hdGlvbiBmb3IgbWVtb3J5IHN0b3JhZ2UuIFlvdSBjYW4gdXNlIHRoZSBkZWZhdWx0IHVzZXIgcHJvbXB0IG9yIGNyZWF0ZSBhIGN1c3RvbWl6ZWQgb25lLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvc3lzdGVtLXByb21wdHMuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgYXBwZW5kVG9Qcm9tcHQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBlcGlzb2RpYyBtZW1vcnkgcmVmbGVjdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVwaXNvZGljUmVmbGVjdGlvbkNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogTmFtZXNwYWNlcyBmb3IgZXBpc29kaWMgcmVmbGVjdGlvblxuICAgKiBNaW5pbXVtIDEgbmFtZXNwYWNlIHJlcXVpcmVkXG4gICAqL1xuICByZWFkb25seSBuYW1lc3BhY2VzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yIGEgbWVtb3J5IHN0cmF0ZWd5IHRoYXQgY2FuIG92ZXJyaWRlXG4gKiBleGlzdGluZyBidWlsdC1pbiBkZWZhdWx0IHByb21wdHMvbW9kZWxzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFuYWdlZFN0cmF0ZWd5UHJvcHMgZXh0ZW5kcyBNZW1vcnlTdHJhdGVneUNvbW1vblByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgY3VzdG9tIGV4dHJhY3Rpb24uXG4gICAqIFRoaXMgY29uZmlndXJhdGlvbiBwcm92aWRlcyBjdXN0b21pemF0aW9uIHRvIGhvdyB0aGUgbW9kZWwgaWRlbnRpZmllc1xuICAgKiBhbmQgZXh0cmFjdHMgcmVsZXZhbnQgaW5mb3JtYXRpb24gZm9yIG1lbW9yeSBzdG9yYWdlLlxuICAgKiBAZGVmYXVsdCAtIE5vIGN1c3RvbSBleHRyYWN0aW9uXG4gICAqL1xuICByZWFkb25seSBjdXN0b21FeHRyYWN0aW9uPzogT3ZlcnJpZGVDb25maWc7XG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGN1c3RvbSBjb25zb2xpZGF0aW9uLlxuICAgKiBUaGlzIGNvbmZpZ3VyYXRpb24gcHJvdmlkZXMgY3VzdG9taXphdGlvbiB0byBob3cgdGhlIG1vZGVsIGlkZW50aWZpZXNcbiAgICogYW5kIGV4dHJhY3RzIHJlbGV2YW50IGluZm9ybWF0aW9uIGZvciBtZW1vcnkgc3RvcmFnZS5cbiAgICogQGRlZmF1bHQgLSBObyBjdXN0b20gZXh0cmFjdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tQ29uc29saWRhdGlvbj86IE92ZXJyaWRlQ29uZmlnO1xuICAvKipcbiAgICogVGhlIG5hbWVzcGFjZXMgZm9yIHRoZSBzdHJhdGVneVxuICAgKiBSZXByZXNlbnRzIGEgbmFtZXNwYWNlIGZvciBvcmdhbml6aW5nIG1lbW9yeSBkYXRhXG4gICAqIFVzZSBhIGhpZXJhcmNoaWNhbCBmb3JtYXQgc2VwYXJhdGVkIGJ5IGZvcndhcmQgc2xhc2hlcyAoLylcbiAgICpcbiAgICogVXNlIGEgaGllcmFyY2hpY2FsIGZvcm1hdCBzZXBhcmF0ZWQgYnkgZm9yd2FyZCBzbGFzaGVzICgvKSB0byBvcmdhbml6ZSBuYW1lc3BhY2VzIGxvZ2ljYWxseS5cbiAgICogWW91IGNhbiBpbmNsdWRlIHRoZXNlIGRlZmluZWQgdmFyaWFibGVzOlxuICAgKlxuICAgKiAtIHtzZXNzaW9uSWR9IC0gdGhlIHVzZXIgaWRlbnRpZmllciB0byBiZSBjcmVhdGVkIGluIHRoZSBDcmVhdGVFdmVudCBBUElcbiAgICogLSB7bWVtb3J5U3RyYXRlZ3lJZH0gLSBhbiBpZGVudGlmaWVyIGZvciBhbiBleHRyYWN0aW9uIHN0cmF0ZWd5XG4gICAqIC0ge3Nlc3Npb25JZH0gLSBhbiBpZGVudGlmaWVyIGZvciBlYWNoIHNlc3Npb25cbiAgICpcbiAgICogRXhhbXBsZSBuYW1lc3BhY2UgcGF0aDpcbiAgICogL3N0cmF0ZWdpZXMve21lbW9yeVN0cmF0ZWd5SWR9L2FjdGlvbnMve2FjdGlvbklkfS9zZXNzaW9ucy97c2Vzc2lvbklkfVxuICAgKlxuICAgKiBBZnRlciBtZW1vcnkgY3JlYXRpb24sIHRoaXMgbmFtZXNwYWNlIG1pZ2h0IGxvb2sgbGlrZTpcbiAgICogL2FjdG9yL2FjdG9yLTNhZmM1YWE4ZmVmOS9zdHJhdGVneS9zdW1tYXJpemF0aW9uLWZ5NWM1ZndjNy9zZXNzaW9uL3Nlc3Npb24tcWo3dHBkMWt2cjhcbiAgICovXG4gIHJlYWRvbmx5IG5hbWVzcGFjZXM6IHN0cmluZ1tdO1xuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgZXBpc29kaWMgbWVtb3J5IHJlZmxlY3Rpb24gKG9ubHkgYXBwbGljYWJsZSBmb3IgRVBJU09ESUMgc3RyYXRlZ3kgdHlwZSlcbiAgICogRGVmaW5lcyBhZGRpdGlvbmFsIG5hbWVzcGFjZXMgZm9yIHJlZmxlY3Rpb24tYmFzZWQgZXBpc29kaWMgcmVjYWxsXG4gICAqIEBkZWZhdWx0IC0gTm8gcmVmbGVjdGlvbiBjb25maWd1cmF0aW9uXG4gICAqL1xuICByZWFkb25seSByZWZsZWN0aW9uQ29uZmlndXJhdGlvbj86IEVwaXNvZGljUmVmbGVjdGlvbkNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogTWFuYWdlZCBtZW1vcnkgc3RyYXRlZ3kgdGhhdCBoYW5kbGVzIGJvdGggYnVpbHQtaW4gYW5kIG92ZXJyaWRlIGNvbmZpZ3VyYXRpb25zLlxuICogVGhpcyBzdHJhdGVneSBjYW4gYmUgdXNlZCBmb3IgcXVpY2sgc2V0dXAgd2l0aCBidWlsdC1pbiBkZWZhdWx0cyBvciBjdXN0b21pemVkXG4gKiB3aXRoIHNwZWNpZmljIG1vZGVscyBhbmQgcHJvbXB0IHRlbXBsYXRlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIE1hbmFnZWRNZW1vcnlTdHJhdGVneSBpbXBsZW1lbnRzIElNZW1vcnlTdHJhdGVneSB7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuYW1lc3BhY2VzIGZvciB0aGUgc3RyYXRlZ3lcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuYW1lc3BhY2VzOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgY3VzdG9tIGNvbnNvbGlkYXRpb24uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29uc29saWRhdGlvbk92ZXJyaWRlPzogT3ZlcnJpZGVDb25maWc7XG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGN1c3RvbSBleHRyYWN0aW9uLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGV4dHJhY3Rpb25PdmVycmlkZT86IE92ZXJyaWRlQ29uZmlnO1xuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIGVwaXNvZGljIHJlZmxlY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVmbGVjdGlvbkNvbmZpZ3VyYXRpb24/OiBFcGlzb2RpY1JlZmxlY3Rpb25Db25maWd1cmF0aW9uO1xuICBwdWJsaWMgcmVhZG9ubHkgc3RyYXRlZ3lUeXBlOiBNZW1vcnlTdHJhdGVneVR5cGU7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yIHRvIGNyZWF0ZSBhIG5ldyBtYW5hZ2VkIG1lbW9yeSBzdHJhdGVneVxuICAgKiBAcGFyYW0gc3RyYXRlZ3lUeXBlIHRoZSBzdHJhdGVneSB0eXBlXG4gICAqIEBwYXJhbSBwcm9wcyB0aGUgcHJvcGVydGllcyBmb3IgdGhlIHN0cmF0ZWd5XG4gICAqL1xuICBjb25zdHJ1Y3RvcihzdHJhdGVneVR5cGU6IE1lbW9yeVN0cmF0ZWd5VHlwZSwgcHJvcHM6IE1hbmFnZWRTdHJhdGVneVByb3BzKSB7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gU2V0IHByb3BlcnRpZXMgYW5kIGRlZmF1bHRzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgdGhpcy5uYW1lID0gcHJvcHMubmFtZTtcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gcHJvcHMuZGVzY3JpcHRpb247XG4gICAgdGhpcy5uYW1lc3BhY2VzID0gcHJvcHMubmFtZXNwYWNlcztcbiAgICB0aGlzLnN0cmF0ZWd5VHlwZSA9IHN0cmF0ZWd5VHlwZTtcbiAgICB0aGlzLmNvbnNvbGlkYXRpb25PdmVycmlkZSA9IHByb3BzLmN1c3RvbUNvbnNvbGlkYXRpb247XG4gICAgdGhpcy5leHRyYWN0aW9uT3ZlcnJpZGUgPSBwcm9wcy5jdXN0b21FeHRyYWN0aW9uO1xuICAgIHRoaXMucmVmbGVjdGlvbkNvbmZpZ3VyYXRpb24gPSBwcm9wcy5yZWZsZWN0aW9uQ29uZmlndXJhdGlvbjtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFZhbGlkYXRpb25zXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgdGhyb3dJZkludmFsaWQodGhpcy5fdmFsaWRhdGVQcm9tcHQsIHRoaXMuY29uc29saWRhdGlvbk92ZXJyaWRlPy5hcHBlbmRUb1Byb21wdCk7XG4gICAgdGhyb3dJZkludmFsaWQodGhpcy5fdmFsaWRhdGVQcm9tcHQsIHRoaXMuZXh0cmFjdGlvbk92ZXJyaWRlPy5hcHBlbmRUb1Byb21wdCk7XG4gICAgdGhyb3dJZkludmFsaWQodGhpcy5fdmFsaWRhdGVNZW1vcnlTdHJhdGVneU5hbWUsIHRoaXMubmFtZSk7XG4gICAgaWYgKHRoaXMubmFtZXNwYWNlcykge1xuICAgICAgdGhyb3dJZkludmFsaWQodGhpcy5fdmFsaWRhdGVNZW1vcnlTdHJhdGVneU5hbWVzcGFjZXMsIHRoaXMubmFtZXNwYWNlcyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnJlZmxlY3Rpb25Db25maWd1cmF0aW9uKSB7XG4gICAgICB0aHJvd0lmSW52YWxpZCh0aGlzLl92YWxpZGF0ZVJlZmxlY3Rpb25Db25maWd1cmF0aW9uLCB0aGlzLnJlZmxlY3Rpb25Db25maWd1cmF0aW9uKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uIGFzIGEgQ2xvdWRGb3JtYXRpb24gcHJvcGVydHkuXG4gICAqIEByZXR1cm5zIFRoZSBDbG91ZEZvcm1hdGlvbiBwcm9wZXJ0eSBmb3IgdGhlIG1lbW9yeSBzdHJhdGVneS5cbiAgICovXG4gIHB1YmxpYyByZW5kZXIoKTogYmVkcm9ja2FnZW50Y29yZS5DZm5NZW1vcnkuTWVtb3J5U3RyYXRlZ3lQcm9wZXJ0eSB7XG4gICAgLy8gSWYgbm8gb3ZlcnJpZGVzIGFuZCBubyByZWZsZWN0aW9uIGNvbmZpZywgdXNlIGJ1aWx0LWluIHN0cmF0ZWd5IGZvcm1hdFxuICAgIGlmICghdGhpcy5jb25zb2xpZGF0aW9uT3ZlcnJpZGUgJiYgIXRoaXMuZXh0cmFjdGlvbk92ZXJyaWRlICYmICF0aGlzLnJlZmxlY3Rpb25Db25maWd1cmF0aW9uKSB7XG4gICAgICBjb25zdCBjZm5TdHJhdGVneU1hcDogUmVjb3JkPE1lbW9yeVN0cmF0ZWd5VHlwZSwgc3RyaW5nPiA9IHtcbiAgICAgICAgW01lbW9yeVN0cmF0ZWd5VHlwZS5VU0VSX1BSRUZFUkVOQ0VdOiAndXNlclByZWZlcmVuY2VNZW1vcnlTdHJhdGVneScsXG4gICAgICAgIFtNZW1vcnlTdHJhdGVneVR5cGUuU0VNQU5USUNdOiAnc2VtYW50aWNNZW1vcnlTdHJhdGVneScsXG4gICAgICAgIFtNZW1vcnlTdHJhdGVneVR5cGUuU1VNTUFSSVpBVElPTl06ICdzdW1tYXJ5TWVtb3J5U3RyYXRlZ3knLFxuICAgICAgICBbTWVtb3J5U3RyYXRlZ3lUeXBlLkVQSVNPRElDXTogJ2VwaXNvZGljTWVtb3J5U3RyYXRlZ3knLFxuICAgICAgICBbTWVtb3J5U3RyYXRlZ3lUeXBlLkNVU1RPTV06ICdjdXN0b21NZW1vcnlTdHJhdGVneScsXG4gICAgICB9O1xuICAgICAgY29uc3Qgc3RyYXRlZ3lLZXkgPSBjZm5TdHJhdGVneU1hcFt0aGlzLnN0cmF0ZWd5VHlwZV07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbc3RyYXRlZ3lLZXldOiB7XG4gICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgICAgIG5hbWVzcGFjZXM6IHRoaXMubmFtZXNwYWNlcyxcbiAgICAgICAgICB0eXBlOiB0aGlzLnN0cmF0ZWd5VHlwZSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gRm9yIGVwaXNvZGljIHdpdGggcmVmbGVjdGlvbiBjb25maWcgb25seSAobm8gb3RoZXIgb3ZlcnJpZGVzKVxuICAgIGlmICh0aGlzLnN0cmF0ZWd5VHlwZSA9PT0gTWVtb3J5U3RyYXRlZ3lUeXBlLkVQSVNPRElDICYmIHRoaXMucmVmbGVjdGlvbkNvbmZpZ3VyYXRpb24gJiZcbiAgICAgICAgIXRoaXMuY29uc29saWRhdGlvbk92ZXJyaWRlICYmICF0aGlzLmV4dHJhY3Rpb25PdmVycmlkZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXBpc29kaWNNZW1vcnlTdHJhdGVneToge1xuICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgICAgICBuYW1lc3BhY2VzOiB0aGlzLm5hbWVzcGFjZXMsXG4gICAgICAgICAgdHlwZTogdGhpcy5zdHJhdGVneVR5cGUsXG4gICAgICAgICAgcmVmbGVjdGlvbkNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgIG5hbWVzcGFjZXM6IHRoaXMucmVmbGVjdGlvbkNvbmZpZ3VyYXRpb24ubmFtZXNwYWNlcyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBJZiBvdmVycmlkZXMgYXJlIHByb3ZpZGVkLCB1c2UgY3VzdG9tIHN0cmF0ZWd5IGZvcm1hdFxuICAgIGNvbnN0IGNmblN0cmF0ZWd5TWFwOiBSZWNvcmQ8TWVtb3J5U3RyYXRlZ3lUeXBlLCBzdHJpbmc+ID0ge1xuICAgICAgW01lbW9yeVN0cmF0ZWd5VHlwZS5VU0VSX1BSRUZFUkVOQ0VdOiAndXNlclByZWZlcmVuY2VPdmVycmlkZScsXG4gICAgICBbTWVtb3J5U3RyYXRlZ3lUeXBlLlNFTUFOVElDXTogJ3NlbWFudGljT3ZlcnJpZGUnLFxuICAgICAgW01lbW9yeVN0cmF0ZWd5VHlwZS5TVU1NQVJJWkFUSU9OXTogJ3N1bW1hcnlPdmVycmlkZScsXG4gICAgICBbTWVtb3J5U3RyYXRlZ3lUeXBlLkVQSVNPRElDXTogJ2VwaXNvZGljT3ZlcnJpZGUnLFxuICAgICAgW01lbW9yeVN0cmF0ZWd5VHlwZS5DVVNUT01dOiAnJyxcbiAgICB9O1xuXG4gICAgY29uc3Qgc3RyYXRlZ3lLZXkgPSBjZm5TdHJhdGVneU1hcFt0aGlzLnN0cmF0ZWd5VHlwZV07XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1c3RvbU1lbW9yeVN0cmF0ZWd5OiB7XG4gICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICAgIG5hbWVzcGFjZXM6IHRoaXMubmFtZXNwYWNlcyxcbiAgICAgICAgdHlwZTogdGhpcy5zdHJhdGVneVR5cGUsXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBbc3RyYXRlZ3lLZXldOiB7XG4gICAgICAgICAgICAuLi4odGhpcy5jb25zb2xpZGF0aW9uT3ZlcnJpZGUgJiYge1xuICAgICAgICAgICAgICBjb25zb2xpZGF0aW9uOiB7XG4gICAgICAgICAgICAgICAgbW9kZWxJZDogQXJuLnNwbGl0KHRoaXMuY29uc29saWRhdGlvbk92ZXJyaWRlLm1vZGVsLmludm9rYWJsZUFybiwgQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUpXG4gICAgICAgICAgICAgICAgICAucmVzb3VyY2VOYW1lLFxuICAgICAgICAgICAgICAgIGFwcGVuZFRvUHJvbXB0OiB0aGlzLmNvbnNvbGlkYXRpb25PdmVycmlkZS5hcHBlbmRUb1Byb21wdCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLi4uKHRoaXMuZXh0cmFjdGlvbk92ZXJyaWRlICYmIHtcbiAgICAgICAgICAgICAgZXh0cmFjdGlvbjoge1xuICAgICAgICAgICAgICAgIG1vZGVsSWQ6IEFybi5zcGxpdCh0aGlzLmV4dHJhY3Rpb25PdmVycmlkZS5tb2RlbC5pbnZva2FibGVBcm4sIEFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FKVxuICAgICAgICAgICAgICAgICAgLnJlc291cmNlTmFtZSxcbiAgICAgICAgICAgICAgICBhcHBlbmRUb1Byb21wdDogdGhpcy5leHRyYWN0aW9uT3ZlcnJpZGUuYXBwZW5kVG9Qcm9tcHQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyB0aGUgbmVjZXNzYXJ5IHBlcm1pc3Npb25zIHRvIHRoZSByb2xlXG4gICAqXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSAtIFRoZSBncmFudGVlIHRvIGdyYW50IHBlcm1pc3Npb25zIHRvXG4gICAqIEByZXR1cm5zIFRoZSBHcmFudCBvYmplY3QgZm9yIGNoYWluaW5nXG4gICAqL1xuICBwdWJsaWMgZ3JhbnQoZ3JhbnRlZTogSUdyYW50YWJsZSk6IEdyYW50IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBncmFudDEgPSB0aGlzLmNvbnNvbGlkYXRpb25PdmVycmlkZT8ubW9kZWwuZ3JhbnRJbnZva2UoZ3JhbnRlZSk7XG4gICAgY29uc3QgZ3JhbnQyID0gdGhpcy5leHRyYWN0aW9uT3ZlcnJpZGU/Lm1vZGVsLmdyYW50SW52b2tlKGdyYW50ZWUpO1xuICAgIHJldHVybiBncmFudDEgJiYgZ3JhbnQyID8gZ3JhbnQxLmNvbWJpbmUoZ3JhbnQyKSA6IGdyYW50MSB8fCBncmFudDI7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gVkFMSURBVE9SU1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgbWVtb3J5IHN0cmF0ZWd5IG5hbWVcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICAgKi9cbiAgcHJpdmF0ZSBfdmFsaWRhdGVNZW1vcnlTdHJhdGVneU5hbWUgPSAobmFtZTogc3RyaW5nLCBzY29wZT86IElDb25zdHJ1Y3QpOiBzdHJpbmdbXSA9PiB7XG4gICAgbGV0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICAgIGVycm9ycy5wdXNoKC4uLnZhbGlkYXRlU3RyaW5nRmllbGRMZW5ndGgoe1xuICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICBmaWVsZE5hbWU6ICdNZW1vcnkgbmFtZScsXG4gICAgICBtaW5MZW5ndGg6IE1FTU9SWV9OQU1FX01JTl9MRU5HVEgsXG4gICAgICBtYXhMZW5ndGg6IE1FTU9SWV9OQU1FX01BWF9MRU5HVEgsXG4gICAgfSwgc2NvcGUpKTtcblxuICAgIC8vIENoZWNrIGlmIG5hbWUgbWF0Y2hlcyB0aGUgQVdTIEFQSSBwYXR0ZXJuOiBbYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fVxuICAgIC8vIE11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciwgZm9sbG93ZWQgYnkgdXAgdG8gNDcgbGV0dGVycywgbnVtYmVycywgb3IgdW5kZXJzY29yZXNcbiAgICBjb25zdCB2YWxpZE5hbWVQYXR0ZXJuID0gL15bYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fSQvO1xuICAgIGVycm9ycy5wdXNoKC4uLnZhbGlkYXRlRmllbGRQYXR0ZXJuKG5hbWUsICdNZW1vcnkgbmFtZScsIHZhbGlkTmFtZVBhdHRlcm4sIHVuZGVmaW5lZCwgc2NvcGUpKTtcblxuICAgIHJldHVybiBlcnJvcnM7XG4gIH07XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgcHJvbXB0XG4gICAqIEBwYXJhbSBwcm9tcHQgLSBUaGUgcHJvbXB0IHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gICAqL1xuICBwcml2YXRlIF92YWxpZGF0ZVByb21wdCA9IChwcm9tcHQ/OiBzdHJpbmcsIHNjb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdID0+IHtcbiAgICBsZXQgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmICghcHJvbXB0KSB7XG4gICAgICByZXR1cm4gZXJyb3JzO1xuICAgIH1cbiAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZVN0cmluZ0ZpZWxkTGVuZ3RoKHtcbiAgICAgIHZhbHVlOiBwcm9tcHQsXG4gICAgICBmaWVsZE5hbWU6ICdQcm9tcHQnLFxuICAgICAgbWluTGVuZ3RoOiBQUk9NUFRfTUlOX0xFTkdUSCxcbiAgICAgIG1heExlbmd0aDogUFJPTVBUX01BWF9MRU5HVEgsXG4gICAgfSwgc2NvcGUpKTtcbiAgICByZXR1cm4gZXJyb3JzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIG1lbW9yeSBzdHJhdGVneSBuYW1lc3BhY2VzXG4gICAqIEBwYXJhbSBuYW1lc3BhY2VzIC0gVGhlIG5hbWVzcGFjZXMgdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMgQXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlcywgZW1wdHkgaWYgdmFsaWRcbiAgICovXG4gIHByaXZhdGUgX3ZhbGlkYXRlTWVtb3J5U3RyYXRlZ3lOYW1lc3BhY2VzID0gKG5hbWVzcGFjZXM6IHN0cmluZ1tdKTogc3RyaW5nW10gPT4ge1xuICAgIGxldCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAobmFtZXNwYWNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBuYW1lc3BhY2Ugb2YgbmFtZXNwYWNlcykge1xuICAgICAgLy8gT25seSBjaGVjayBmb3IgdGVtcGxhdGUgdmFyaWFibGVzIGluIG5hbWVzcGFjZSBkZWZpbml0aW9uXG4gICAgICBpZiAobmFtZXNwYWNlLmluY2x1ZGVzKCd7JykgJiYgIShcbiAgICAgICAgbmFtZXNwYWNlLmluY2x1ZGVzKCd7YWN0b3JJZH0nKSB8fFxuICAgICAgICAgICAgbmFtZXNwYWNlLmluY2x1ZGVzKCd7c2Vzc2lvbklkfScpIHx8XG4gICAgICAgICAgICBuYW1lc3BhY2UuaW5jbHVkZXMoJ3ttZW1vcnlTdHJhdGVneUlkfScpXG4gICAgICApKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKGBOYW1lc3BhY2Ugd2l0aCB0ZW1wbGF0ZXMgc2hvdWxkIGNvbnRhaW4gdmFsaWQgdmFyaWFibGVzOiAke25hbWVzcGFjZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGVwaXNvZGljIHJlZmxlY3Rpb24gY29uZmlndXJhdGlvblxuICAgKiBAcGFyYW0gY29uZmlnIC0gVGhlIHJlZmxlY3Rpb24gY29uZmlndXJhdGlvbiB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICAgKi9cbiAgcHJpdmF0ZSBfdmFsaWRhdGVSZWZsZWN0aW9uQ29uZmlndXJhdGlvbiA9IChjb25maWc6IEVwaXNvZGljUmVmbGVjdGlvbkNvbmZpZ3VyYXRpb24pOiBzdHJpbmdbXSA9PiB7XG4gICAgbGV0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8vIFZhbGlkYXRlIHRoYXQgbmFtZXNwYWNlcyBhcnJheSBpcyBub3QgZW1wdHlcbiAgICBpZiAoIWNvbmZpZy5uYW1lc3BhY2VzIHx8IGNvbmZpZy5uYW1lc3BhY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZXJyb3JzLnB1c2goJ1JlZmxlY3Rpb24gY29uZmlndXJhdGlvbiBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIG5hbWVzcGFjZScpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGVhY2ggbmFtZXNwYWNlIGluIHJlZmxlY3Rpb24gY29uZmlndXJhdGlvblxuICAgIGlmIChjb25maWcubmFtZXNwYWNlcykge1xuICAgICAgZXJyb3JzLnB1c2goLi4udGhpcy5fdmFsaWRhdGVNZW1vcnlTdHJhdGVneU5hbWVzcGFjZXMoY29uZmlnLm5hbWVzcGFjZXMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9O1xufVxuIl19
|
|
254
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlZC1zdHJhdGVneS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1hbmFnZWQtc3RyYXRlZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFjQSw2Q0FBNkM7QUFLN0Msd0RBQXdHO0FBQ3hHLDhEQUF3RztBQUV4Rzs7K0VBRStFO0FBQy9FOzs7R0FHRztBQUNILE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0FBQzVCOzs7R0FHRztBQUNILE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDO0FBOEVoQzs7OztHQUlHO0FBQ0gsTUFBYSxxQkFBcUI7O0lBQ2hCLElBQUksQ0FBUztJQUNiLFdBQVcsQ0FBVTtJQUNyQzs7T0FFRztJQUNhLFVBQVUsQ0FBVztJQUNyQzs7T0FFRztJQUNhLHFCQUFxQixDQUFrQjtJQUN2RDs7T0FFRztJQUNhLGtCQUFrQixDQUFrQjtJQUNwRDs7T0FFRztJQUNhLHVCQUF1QixDQUFtQztJQUMxRCxZQUFZLENBQXFCO0lBRWpEOzs7O09BSUc7SUFDSCxZQUFZLFlBQWdDLEVBQUUsS0FBMkI7Ozs7Ozs7K0NBMUI5RCxxQkFBcUI7Ozs7UUEyQjlCLHlEQUF5RDtRQUN6RCw4QkFBOEI7UUFDOUIseURBQXlEO1FBQ3pELElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDckMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBQ25DLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUMsbUJBQW1CLENBQUM7UUFDdkQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztRQUNqRCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsS0FBSyxDQUFDLHVCQUF1QixDQUFDO1FBRTdELHlEQUF5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QUksQ0FBQyxHQUFHLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUM1RSxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQyxDQUFDOztBQTNPSixzREE0T0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IElCZWRyb2NrSW52b2thYmxlIH0gZnJvbSAnQGF3cy1jZGsvYXdzLWJlZHJvY2stYWxwaGEnO1xuaW1wb3J0IHsgQXJuLCBBcm5Gb3JtYXQgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgdHlwZSAqIGFzIGJlZHJvY2thZ2VudGNvcmUgZnJvbSAnYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmUnO1xuaW1wb3J0IHR5cGUgeyBHcmFudCwgSUdyYW50YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHR5cGUgeyBJQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgdHlwZSB7IE1lbW9yeVN0cmF0ZWd5Q29tbW9uUHJvcHMsIElNZW1vcnlTdHJhdGVneSB9IGZyb20gJy4uL21lbW9yeS1zdHJhdGVneSc7XG5pbXBvcnQgeyBNZW1vcnlTdHJhdGVneVR5cGUsIE1FTU9SWV9OQU1FX01JTl9MRU5HVEgsIE1FTU9SWV9OQU1FX01BWF9MRU5HVEggfSBmcm9tICcuLi9tZW1vcnktc3RyYXRlZ3knO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmdGaWVsZExlbmd0aCwgdGhyb3dJZkludmFsaWQsIHZhbGlkYXRlRmllbGRQYXR0ZXJuIH0gZnJvbSAnLi4vdmFsaWRhdGlvbi1oZWxwZXJzJztcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVEFOVFNcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKlxuICogTWluaW11bSBsZW5ndGggZm9yIHByb21wdFxuICogQGludGVybmFsXG4gKi9cbmNvbnN0IFBST01QVF9NSU5fTEVOR1RIID0gMTtcbi8qKlxuICogTWF4aW11bSBsZW5ndGggZm9yIHByb21wdFxuICogQGludGVybmFsXG4gKi9cbmNvbnN0IFBST01QVF9NQVhfTEVOR1RIID0gMzAwMDA7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3Igb3ZlcnJpZGluZyBtb2RlbCBhbmQgcHJvbXB0IHRlbXBsYXRlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3ZlcnJpZGVDb25maWcge1xuICAvKipcbiAgICogVGhlIG1vZGVsIHRvIHVzZSBmb3IgY29uc29saWRhdGlvbi9leHRyYWN0aW9uXG4gICAqL1xuICByZWFkb25seSBtb2RlbDogSUJlZHJvY2tJbnZva2FibGU7XG4gIC8qKlxuICAgKiBUaGUgcHJvbXB0IHRoYXQgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgc3lzdGVtIHByb21wdCB0byBkZWZpbmVcbiAgICogdGhlIG1vZGVsJ3MgbWVtb3J5IGNvbnNvbGlkYXRpb24vZXh0cmFjdGlvbiBzdHJhdGVneS5cbiAgICogVGhpcyBjb25maWd1cmF0aW9uIHByb3ZpZGVzIGN1c3RvbWl6YXRpb24gdG8gaG93IHRoZSBtb2RlbCBpZGVudGlmaWVzIGFuZCBleHRyYWN0c1xuICAgKiByZWxldmFudCBpbmZvcm1hdGlvbiBmb3IgbWVtb3J5IHN0b3JhZ2UuIFlvdSBjYW4gdXNlIHRoZSBkZWZhdWx0IHVzZXIgcHJvbXB0IG9yIGNyZWF0ZSBhIGN1c3RvbWl6ZWQgb25lLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvc3lzdGVtLXByb21wdHMuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgYXBwZW5kVG9Qcm9tcHQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBlcGlzb2RpYyBtZW1vcnkgcmVmbGVjdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVwaXNvZGljUmVmbGVjdGlvbkNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogTmFtZXNwYWNlcyBmb3IgZXBpc29kaWMgcmVmbGVjdGlvblxuICAgKiBNaW5pbXVtIDEgbmFtZXNwYWNlIHJlcXVpcmVkXG4gICAqL1xuICByZWFkb25seSBuYW1lc3BhY2VzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yIGEgbWVtb3J5IHN0cmF0ZWd5IHRoYXQgY2FuIG92ZXJyaWRlXG4gKiBleGlzdGluZyBidWlsdC1pbiBkZWZhdWx0IHByb21wdHMvbW9kZWxzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFuYWdlZFN0cmF0ZWd5UHJvcHMgZXh0ZW5kcyBNZW1vcnlTdHJhdGVneUNvbW1vblByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgY3VzdG9tIGV4dHJhY3Rpb24uXG4gICAqIFRoaXMgY29uZmlndXJhdGlvbiBwcm92aWRlcyBjdXN0b21pemF0aW9uIHRvIGhvdyB0aGUgbW9kZWwgaWRlbnRpZmllc1xuICAgKiBhbmQgZXh0cmFjdHMgcmVsZXZhbnQgaW5mb3JtYXRpb24gZm9yIG1lbW9yeSBzdG9yYWdlLlxuICAgKiBAZGVmYXVsdCAtIE5vIGN1c3RvbSBleHRyYWN0aW9uXG4gICAqL1xuICByZWFkb25seSBjdXN0b21FeHRyYWN0aW9uPzogT3ZlcnJpZGVDb25maWc7XG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGN1c3RvbSBjb25zb2xpZGF0aW9uLlxuICAgKiBUaGlzIGNvbmZpZ3VyYXRpb24gcHJvdmlkZXMgY3VzdG9taXphdGlvbiB0byBob3cgdGhlIG1vZGVsIGlkZW50aWZpZXNcbiAgICogYW5kIGV4dHJhY3RzIHJlbGV2YW50IGluZm9ybWF0aW9uIGZvciBtZW1vcnkgc3RvcmFnZS5cbiAgICogQGRlZmF1bHQgLSBObyBjdXN0b20gZXh0cmFjdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tQ29uc29saWRhdGlvbj86IE92ZXJyaWRlQ29uZmlnO1xuICAvKipcbiAgICogVGhlIG5hbWVzcGFjZXMgZm9yIHRoZSBzdHJhdGVneVxuICAgKiBSZXByZXNlbnRzIGEgbmFtZXNwYWNlIGZvciBvcmdhbml6aW5nIG1lbW9yeSBkYXRhXG4gICAqIFVzZSBhIGhpZXJhcmNoaWNhbCBmb3JtYXQgc2VwYXJhdGVkIGJ5IGZvcndhcmQgc2xhc2hlcyAoLylcbiAgICpcbiAgICogVXNlIGEgaGllcmFyY2hpY2FsIGZvcm1hdCBzZXBhcmF0ZWQgYnkgZm9yd2FyZCBzbGFzaGVzICgvKSB0byBvcmdhbml6ZSBuYW1lc3BhY2VzIGxvZ2ljYWxseS5cbiAgICogWW91IGNhbiBpbmNsdWRlIHRoZXNlIGRlZmluZWQgdmFyaWFibGVzOlxuICAgKlxuICAgKiAtIHtzZXNzaW9uSWR9IC0gdGhlIHVzZXIgaWRlbnRpZmllciB0byBiZSBjcmVhdGVkIGluIHRoZSBDcmVhdGVFdmVudCBBUElcbiAgICogLSB7bWVtb3J5U3RyYXRlZ3lJZH0gLSBhbiBpZGVudGlmaWVyIGZvciBhbiBleHRyYWN0aW9uIHN0cmF0ZWd5XG4gICAqIC0ge3Nlc3Npb25JZH0gLSBhbiBpZGVudGlmaWVyIGZvciBlYWNoIHNlc3Npb25cbiAgICpcbiAgICogRXhhbXBsZSBuYW1lc3BhY2UgcGF0aDpcbiAgICogL3N0cmF0ZWdpZXMve21lbW9yeVN0cmF0ZWd5SWR9L2FjdGlvbnMve2FjdGlvbklkfS9zZXNzaW9ucy97c2Vzc2lvbklkfVxuICAgKlxuICAgKiBBZnRlciBtZW1vcnkgY3JlYXRpb24sIHRoaXMgbmFtZXNwYWNlIG1pZ2h0IGxvb2sgbGlrZTpcbiAgICogL2FjdG9yL2FjdG9yLTNhZmM1YWE4ZmVmOS9zdHJhdGVneS9zdW1tYXJpemF0aW9uLWZ5NWM1ZndjNy9zZXNzaW9uL3Nlc3Npb24tcWo3dHBkMWt2cjhcbiAgICovXG4gIHJlYWRvbmx5IG5hbWVzcGFjZXM6IHN0cmluZ1tdO1xuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgZXBpc29kaWMgbWVtb3J5IHJlZmxlY3Rpb24gKG9ubHkgYXBwbGljYWJsZSBmb3IgRVBJU09ESUMgc3RyYXRlZ3kgdHlwZSlcbiAgICogRGVmaW5lcyBhZGRpdGlvbmFsIG5hbWVzcGFjZXMgZm9yIHJlZmxlY3Rpb24tYmFzZWQgZXBpc29kaWMgcmVjYWxsXG4gICAqIEBkZWZhdWx0IC0gTm8gcmVmbGVjdGlvbiBjb25maWd1cmF0aW9uXG4gICAqL1xuICByZWFkb25seSByZWZsZWN0aW9uQ29uZmlndXJhdGlvbj86IEVwaXNvZGljUmVmbGVjdGlvbkNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogTWFuYWdlZCBtZW1vcnkgc3RyYXRlZ3kgdGhhdCBoYW5kbGVzIGJvdGggYnVpbHQtaW4gYW5kIG92ZXJyaWRlIGNvbmZpZ3VyYXRpb25zLlxuICogVGhpcyBzdHJhdGVneSBjYW4gYmUgdXNlZCBmb3IgcXVpY2sgc2V0dXAgd2l0aCBidWlsdC1pbiBkZWZhdWx0cyBvciBjdXN0b21pemVkXG4gKiB3aXRoIHNwZWNpZmljIG1vZGVscyBhbmQgcHJvbXB0IHRlbXBsYXRlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIE1hbmFnZWRNZW1vcnlTdHJhdGVneSBpbXBsZW1lbnRzIElNZW1vcnlTdHJhdGVneSB7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuYW1lc3BhY2VzIGZvciB0aGUgc3RyYXRlZ3lcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuYW1lc3BhY2VzOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgY3VzdG9tIGNvbnNvbGlkYXRpb24uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29uc29saWRhdGlvbk92ZXJyaWRlPzogT3ZlcnJpZGVDb25maWc7XG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGN1c3RvbSBleHRyYWN0aW9uLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGV4dHJhY3Rpb25PdmVycmlkZT86IE92ZXJyaWRlQ29uZmlnO1xuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIGVwaXNvZGljIHJlZmxlY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVmbGVjdGlvbkNvbmZpZ3VyYXRpb24/OiBFcGlzb2RpY1JlZmxlY3Rpb25Db25maWd1cmF0aW9uO1xuICBwdWJsaWMgcmVhZG9ubHkgc3RyYXRlZ3lUeXBlOiBNZW1vcnlTdHJhdGVneVR5cGU7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yIHRvIGNyZWF0ZSBhIG5ldyBtYW5hZ2VkIG1lbW9yeSBzdHJhdGVneVxuICAgKiBAcGFyYW0gc3RyYXRlZ3lUeXBlIHRoZSBzdHJhdGVneSB0eXBlXG4gICAqIEBwYXJhbSBwcm9wcyB0aGUgcHJvcGVydGllcyBmb3IgdGhlIHN0cmF0ZWd5XG4gICAqL1xuICBjb25zdHJ1Y3RvcihzdHJhdGVneVR5cGU6IE1lbW9yeVN0cmF0ZWd5VHlwZSwgcHJvcHM6IE1hbmFnZWRTdHJhdGVneVByb3BzKSB7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gU2V0IHByb3BlcnRpZXMgYW5kIGRlZmF1bHRzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgdGhpcy5uYW1lID0gcHJvcHMubmFtZTtcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gcHJvcHMuZGVzY3JpcHRpb247XG4gICAgdGhpcy5uYW1lc3BhY2VzID0gcHJvcHMubmFtZXNwYWNlcztcbiAgICB0aGlzLnN0cmF0ZWd5VHlwZSA9IHN0cmF0ZWd5VHlwZTtcbiAgICB0aGlzLmNvbnNvbGlkYXRpb25PdmVycmlkZSA9IHByb3BzLmN1c3RvbUNvbnNvbGlkYXRpb247XG4gICAgdGhpcy5leHRyYWN0aW9uT3ZlcnJpZGUgPSBwcm9wcy5jdXN0b21FeHRyYWN0aW9uO1xuICAgIHRoaXMucmVmbGVjdGlvbkNvbmZpZ3VyYXRpb24gPSBwcm9wcy5yZWZsZWN0aW9uQ29uZmlndXJhdGlvbjtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFZhbGlkYXRpb25zXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgdGhyb3dJZkludmFsaWQodGhpcy5fdmFsaWRhdGVQcm9tcHQsIHRoaXMuY29uc29saWRhdGlvbk92ZXJyaWRlPy5hcHBlbmRUb1Byb21wdCk7XG4gICAgdGhyb3dJZkludmFsaWQodGhpcy5fdmFsaWRhdGVQcm9tcHQsIHRoaXMuZXh0cmFjdGlvbk92ZXJyaWRlPy5hcHBlbmRUb1Byb21wdCk7XG4gICAgdGhyb3dJZkludmFsaWQodGhpcy5fdmFsaWRhdGVNZW1vcnlTdHJhdGVneU5hbWUsIHRoaXMubmFtZSk7XG4gICAgaWYgKHRoaXMubmFtZXNwYWNlcykge1xuICAgICAgdGhyb3dJZkludmFsaWQodGhpcy5fdmFsaWRhdGVNZW1vcnlTdHJhdGVneU5hbWVzcGFjZXMsIHRoaXMubmFtZXNwYWNlcyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnJlZmxlY3Rpb25Db25maWd1cmF0aW9uKSB7XG4gICAgICB0aHJvd0lmSW52YWxpZCh0aGlzLl92YWxpZGF0ZVJlZmxlY3Rpb25Db25maWd1cmF0aW9uLCB0aGlzLnJlZmxlY3Rpb25Db25maWd1cmF0aW9uKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uIGFzIGEgQ2xvdWRGb3JtYXRpb24gcHJvcGVydHkuXG4gICAqIEByZXR1cm5zIFRoZSBDbG91ZEZvcm1hdGlvbiBwcm9wZXJ0eSBmb3IgdGhlIG1lbW9yeSBzdHJhdGVneS5cbiAgICovXG4gIHB1YmxpYyByZW5kZXIoKTogYmVkcm9ja2FnZW50Y29yZS5DZm5NZW1vcnkuTWVtb3J5U3RyYXRlZ3lQcm9wZXJ0eSB7XG4gICAgLy8gSWYgbm8gb3ZlcnJpZGVzIGFuZCBubyByZWZsZWN0aW9uIGNvbmZpZywgdXNlIGJ1aWx0LWluIHN0cmF0ZWd5IGZvcm1hdFxuICAgIGlmICghdGhpcy5jb25zb2xpZGF0aW9uT3ZlcnJpZGUgJiYgIXRoaXMuZXh0cmFjdGlvbk92ZXJyaWRlICYmICF0aGlzLnJlZmxlY3Rpb25Db25maWd1cmF0aW9uKSB7XG4gICAgICBjb25zdCBjZm5TdHJhdGVneU1hcDogUmVjb3JkPE1lbW9yeVN0cmF0ZWd5VHlwZSwgc3RyaW5nPiA9IHtcbiAgICAgICAgW01lbW9yeVN0cmF0ZWd5VHlwZS5VU0VSX1BSRUZFUkVOQ0VdOiAndXNlclByZWZlcmVuY2VNZW1vcnlTdHJhdGVneScsXG4gICAgICAgIFtNZW1vcnlTdHJhdGVneVR5cGUuU0VNQU5USUNdOiAnc2VtYW50aWNNZW1vcnlTdHJhdGVneScsXG4gICAgICAgIFtNZW1vcnlTdHJhdGVneVR5cGUuU1VNTUFSSVpBVElPTl06ICdzdW1tYXJ5TWVtb3J5U3RyYXRlZ3knLFxuICAgICAgICBbTWVtb3J5U3RyYXRlZ3lUeXBlLkVQSVNPRElDXTogJ2VwaXNvZGljTWVtb3J5U3RyYXRlZ3knLFxuICAgICAgICBbTWVtb3J5U3RyYXRlZ3lUeXBlLkNVU1RPTV06ICdjdXN0b21NZW1vcnlTdHJhdGVneScsXG4gICAgICB9O1xuICAgICAgY29uc3Qgc3RyYXRlZ3lLZXkgPSBjZm5TdHJhdGVneU1hcFt0aGlzLnN0cmF0ZWd5VHlwZV07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbc3RyYXRlZ3lLZXldOiB7XG4gICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgICAgIG5hbWVzcGFjZXM6IHRoaXMubmFtZXNwYWNlcyxcbiAgICAgICAgICB0eXBlOiB0aGlzLnN0cmF0ZWd5VHlwZSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gRm9yIGVwaXNvZGljIHdpdGggcmVmbGVjdGlvbiBjb25maWcgb25seSAobm8gb3RoZXIgb3ZlcnJpZGVzKVxuICAgIGlmICh0aGlzLnN0cmF0ZWd5VHlwZSA9PT0gTWVtb3J5U3RyYXRlZ3lUeXBlLkVQSVNPRElDICYmIHRoaXMucmVmbGVjdGlvbkNvbmZpZ3VyYXRpb24gJiZcbiAgICAgICAgIXRoaXMuY29uc29saWRhdGlvbk92ZXJyaWRlICYmICF0aGlzLmV4dHJhY3Rpb25PdmVycmlkZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXBpc29kaWNNZW1vcnlTdHJhdGVneToge1xuICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgICAgICBuYW1lc3BhY2VzOiB0aGlzLm5hbWVzcGFjZXMsXG4gICAgICAgICAgdHlwZTogdGhpcy5zdHJhdGVneVR5cGUsXG4gICAgICAgICAgcmVmbGVjdGlvbkNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgIG5hbWVzcGFjZXM6IHRoaXMucmVmbGVjdGlvbkNvbmZpZ3VyYXRpb24ubmFtZXNwYWNlcyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBJZiBvdmVycmlkZXMgYXJlIHByb3ZpZGVkLCB1c2UgY3VzdG9tIHN0cmF0ZWd5IGZvcm1hdFxuICAgIGNvbnN0IGNmblN0cmF0ZWd5TWFwOiBSZWNvcmQ8TWVtb3J5U3RyYXRlZ3lUeXBlLCBzdHJpbmc+ID0ge1xuICAgICAgW01lbW9yeVN0cmF0ZWd5VHlwZS5VU0VSX1BSRUZFUkVOQ0VdOiAndXNlclByZWZlcmVuY2VPdmVycmlkZScsXG4gICAgICBbTWVtb3J5U3RyYXRlZ3lUeXBlLlNFTUFOVElDXTogJ3NlbWFudGljT3ZlcnJpZGUnLFxuICAgICAgW01lbW9yeVN0cmF0ZWd5VHlwZS5TVU1NQVJJWkFUSU9OXTogJ3N1bW1hcnlPdmVycmlkZScsXG4gICAgICBbTWVtb3J5U3RyYXRlZ3lUeXBlLkVQSVNPRElDXTogJ2VwaXNvZGljT3ZlcnJpZGUnLFxuICAgICAgW01lbW9yeVN0cmF0ZWd5VHlwZS5DVVNUT01dOiAnJyxcbiAgICB9O1xuXG4gICAgY29uc3Qgc3RyYXRlZ3lLZXkgPSBjZm5TdHJhdGVneU1hcFt0aGlzLnN0cmF0ZWd5VHlwZV07XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1c3RvbU1lbW9yeVN0cmF0ZWd5OiB7XG4gICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICAgIG5hbWVzcGFjZXM6IHRoaXMubmFtZXNwYWNlcyxcbiAgICAgICAgdHlwZTogdGhpcy5zdHJhdGVneVR5cGUsXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBbc3RyYXRlZ3lLZXldOiB7XG4gICAgICAgICAgICAuLi4odGhpcy5jb25zb2xpZGF0aW9uT3ZlcnJpZGUgJiYge1xuICAgICAgICAgICAgICBjb25zb2xpZGF0aW9uOiB7XG4gICAgICAgICAgICAgICAgbW9kZWxJZDogQXJuLnNwbGl0KHRoaXMuY29uc29saWRhdGlvbk92ZXJyaWRlLm1vZGVsLmludm9rYWJsZUFybiwgQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUpXG4gICAgICAgICAgICAgICAgICAucmVzb3VyY2VOYW1lLFxuICAgICAgICAgICAgICAgIGFwcGVuZFRvUHJvbXB0OiB0aGlzLmNvbnNvbGlkYXRpb25PdmVycmlkZS5hcHBlbmRUb1Byb21wdCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLi4uKHRoaXMuZXh0cmFjdGlvbk92ZXJyaWRlICYmIHtcbiAgICAgICAgICAgICAgZXh0cmFjdGlvbjoge1xuICAgICAgICAgICAgICAgIG1vZGVsSWQ6IEFybi5zcGxpdCh0aGlzLmV4dHJhY3Rpb25PdmVycmlkZS5tb2RlbC5pbnZva2FibGVBcm4sIEFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FKVxuICAgICAgICAgICAgICAgICAgLnJlc291cmNlTmFtZSxcbiAgICAgICAgICAgICAgICBhcHBlbmRUb1Byb21wdDogdGhpcy5leHRyYWN0aW9uT3ZlcnJpZGUuYXBwZW5kVG9Qcm9tcHQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyB0aGUgbmVjZXNzYXJ5IHBlcm1pc3Npb25zIHRvIHRoZSByb2xlXG4gICAqXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSAtIFRoZSBncmFudGVlIHRvIGdyYW50IHBlcm1pc3Npb25zIHRvXG4gICAqIEByZXR1cm5zIFRoZSBHcmFudCBvYmplY3QgZm9yIGNoYWluaW5nXG4gICAqL1xuICBwdWJsaWMgZ3JhbnQoZ3JhbnRlZTogSUdyYW50YWJsZSk6IEdyYW50IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBncmFudDEgPSB0aGlzLmNvbnNvbGlkYXRpb25PdmVycmlkZT8ubW9kZWwuZ3JhbnRJbnZva2UoZ3JhbnRlZSk7XG4gICAgY29uc3QgZ3JhbnQyID0gdGhpcy5leHRyYWN0aW9uT3ZlcnJpZGU/Lm1vZGVsLmdyYW50SW52b2tlKGdyYW50ZWUpO1xuICAgIHJldHVybiBncmFudDEgJiYgZ3JhbnQyID8gZ3JhbnQxLmNvbWJpbmUoZ3JhbnQyKSA6IGdyYW50MSB8fCBncmFudDI7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gVkFMSURBVE9SU1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgbWVtb3J5IHN0cmF0ZWd5IG5hbWVcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICAgKi9cbiAgcHJpdmF0ZSBfdmFsaWRhdGVNZW1vcnlTdHJhdGVneU5hbWUgPSAobmFtZTogc3RyaW5nLCBzY29wZT86IElDb25zdHJ1Y3QpOiBzdHJpbmdbXSA9PiB7XG4gICAgbGV0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICAgIGVycm9ycy5wdXNoKC4uLnZhbGlkYXRlU3RyaW5nRmllbGRMZW5ndGgoe1xuICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICBmaWVsZE5hbWU6ICdNZW1vcnkgbmFtZScsXG4gICAgICBtaW5MZW5ndGg6IE1FTU9SWV9OQU1FX01JTl9MRU5HVEgsXG4gICAgICBtYXhMZW5ndGg6IE1FTU9SWV9OQU1FX01BWF9MRU5HVEgsXG4gICAgfSwgc2NvcGUpKTtcblxuICAgIC8vIENoZWNrIGlmIG5hbWUgbWF0Y2hlcyB0aGUgQVdTIEFQSSBwYXR0ZXJuOiBbYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fVxuICAgIC8vIE11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciwgZm9sbG93ZWQgYnkgdXAgdG8gNDcgbGV0dGVycywgbnVtYmVycywgb3IgdW5kZXJzY29yZXNcbiAgICBjb25zdCB2YWxpZE5hbWVQYXR0ZXJuID0gL15bYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fSQvO1xuICAgIGVycm9ycy5wdXNoKC4uLnZhbGlkYXRlRmllbGRQYXR0ZXJuKG5hbWUsICdNZW1vcnkgbmFtZScsIHZhbGlkTmFtZVBhdHRlcm4sIHVuZGVmaW5lZCwgc2NvcGUpKTtcblxuICAgIHJldHVybiBlcnJvcnM7XG4gIH07XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgcHJvbXB0XG4gICAqIEBwYXJhbSBwcm9tcHQgLSBUaGUgcHJvbXB0IHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gICAqL1xuICBwcml2YXRlIF92YWxpZGF0ZVByb21wdCA9IChwcm9tcHQ/OiBzdHJpbmcsIHNjb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdID0+IHtcbiAgICBsZXQgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmICghcHJvbXB0KSB7XG4gICAgICByZXR1cm4gZXJyb3JzO1xuICAgIH1cbiAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZVN0cmluZ0ZpZWxkTGVuZ3RoKHtcbiAgICAgIHZhbHVlOiBwcm9tcHQsXG4gICAgICBmaWVsZE5hbWU6ICdQcm9tcHQnLFxuICAgICAgbWluTGVuZ3RoOiBQUk9NUFRfTUlOX0xFTkdUSCxcbiAgICAgIG1heExlbmd0aDogUFJPTVBUX01BWF9MRU5HVEgsXG4gICAgfSwgc2NvcGUpKTtcbiAgICByZXR1cm4gZXJyb3JzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIG1lbW9yeSBzdHJhdGVneSBuYW1lc3BhY2VzXG4gICAqIEBwYXJhbSBuYW1lc3BhY2VzIC0gVGhlIG5hbWVzcGFjZXMgdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMgQXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlcywgZW1wdHkgaWYgdmFsaWRcbiAgICovXG4gIHByaXZhdGUgX3ZhbGlkYXRlTWVtb3J5U3RyYXRlZ3lOYW1lc3BhY2VzID0gKG5hbWVzcGFjZXM6IHN0cmluZ1tdKTogc3RyaW5nW10gPT4ge1xuICAgIGxldCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAobmFtZXNwYWNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBuYW1lc3BhY2Ugb2YgbmFtZXNwYWNlcykge1xuICAgICAgLy8gT25seSBjaGVjayBmb3IgdGVtcGxhdGUgdmFyaWFibGVzIGluIG5hbWVzcGFjZSBkZWZpbml0aW9uXG4gICAgICBpZiAobmFtZXNwYWNlLmluY2x1ZGVzKCd7JykgJiYgIShcbiAgICAgICAgbmFtZXNwYWNlLmluY2x1ZGVzKCd7YWN0b3JJZH0nKSB8fFxuICAgICAgICAgICAgbmFtZXNwYWNlLmluY2x1ZGVzKCd7c2Vzc2lvbklkfScpIHx8XG4gICAgICAgICAgICBuYW1lc3BhY2UuaW5jbHVkZXMoJ3ttZW1vcnlTdHJhdGVneUlkfScpXG4gICAgICApKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKGBOYW1lc3BhY2Ugd2l0aCB0ZW1wbGF0ZXMgc2hvdWxkIGNvbnRhaW4gdmFsaWQgdmFyaWFibGVzOiAke25hbWVzcGFjZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGVwaXNvZGljIHJlZmxlY3Rpb24gY29uZmlndXJhdGlvblxuICAgKiBAcGFyYW0gY29uZmlnIC0gVGhlIHJlZmxlY3Rpb24gY29uZmlndXJhdGlvbiB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICAgKi9cbiAgcHJpdmF0ZSBfdmFsaWRhdGVSZWZsZWN0aW9uQ29uZmlndXJhdGlvbiA9IChjb25maWc6IEVwaXNvZGljUmVmbGVjdGlvbkNvbmZpZ3VyYXRpb24pOiBzdHJpbmdbXSA9PiB7XG4gICAgbGV0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8vIFZhbGlkYXRlIHRoYXQgbmFtZXNwYWNlcyBhcnJheSBpcyBub3QgZW1wdHlcbiAgICBpZiAoIWNvbmZpZy5uYW1lc3BhY2VzIHx8IGNvbmZpZy5uYW1lc3BhY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZXJyb3JzLnB1c2goJ1JlZmxlY3Rpb24gY29uZmlndXJhdGlvbiBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIG5hbWVzcGFjZScpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGVhY2ggbmFtZXNwYWNlIGluIHJlZmxlY3Rpb24gY29uZmlndXJhdGlvblxuICAgIGlmIChjb25maWcubmFtZXNwYWNlcykge1xuICAgICAgZXJyb3JzLnB1c2goLi4udGhpcy5fdmFsaWRhdGVNZW1vcnlTdHJhdGVneU5hbWVzcGFjZXMoY29uZmlnLm5hbWVzcGFjZXMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9O1xufVxuIl19
|
|
@@ -11,11 +11,11 @@
|
|
|
11
11
|
* and limitations under the License.
|
|
12
12
|
*/
|
|
13
13
|
import * as cdk from 'aws-cdk-lib';
|
|
14
|
-
import * as bedrockagentcore from 'aws-cdk-lib/aws-bedrockagentcore';
|
|
14
|
+
import type * as bedrockagentcore from 'aws-cdk-lib/aws-bedrockagentcore';
|
|
15
15
|
import * as iam from 'aws-cdk-lib/aws-iam';
|
|
16
|
-
import { Location } from 'aws-cdk-lib/aws-s3';
|
|
17
|
-
import * as sns from 'aws-cdk-lib/aws-sns';
|
|
18
|
-
import { IMemoryStrategy, MemoryStrategyCommonProps, MemoryStrategyType } from '../memory-strategy';
|
|
16
|
+
import type { Location } from 'aws-cdk-lib/aws-s3';
|
|
17
|
+
import type * as sns from 'aws-cdk-lib/aws-sns';
|
|
18
|
+
import type { IMemoryStrategy, MemoryStrategyCommonProps, MemoryStrategyType } from '../memory-strategy';
|
|
19
19
|
/**
|
|
20
20
|
* Trigger conditions for self managed memory strategy
|
|
21
21
|
* When first condition is met, batched payloads are sent to specified S3 bucket.
|