@jjrawlins/cdk-diff-pr-github-action 1.3.12 → 1.4.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 +18 -18
- package/lib/CdkDiffIamTemplate.js +6 -3
- package/lib/CdkDiffIamTemplateStackSet.js +4 -3
- package/lib/CdkDiffStackWorkflow.js +1 -1
- package/lib/CdkDriftDetectionWorkflow.js +1 -1
- package/lib/CdkDriftIamTemplate.js +2 -2
- package/lib/bin/cdk-changeset-script.js +153 -20
- package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/package.json +1 -1
- package/node_modules/@aws-sdk/client-cloudformation/package.json +2 -2
- package/node_modules/@smithy/core/dist-cjs/submodules/cbor/index.js +13 -10
- package/node_modules/@smithy/core/dist-cjs/submodules/protocols/index.js +5 -0
- package/node_modules/@smithy/core/dist-cjs/submodules/schema/index.js +24 -5
- package/node_modules/@smithy/core/dist-es/submodules/cbor/SmithyRpcV2CborProtocol.js +15 -11
- package/node_modules/@smithy/core/dist-es/submodules/protocols/HttpProtocol.js +6 -1
- package/node_modules/@smithy/core/dist-es/submodules/schema/TypeRegistry.js +24 -5
- package/node_modules/@smithy/core/dist-types/submodules/cbor/SmithyRpcV2CborProtocol.d.ts +7 -1
- package/node_modules/@smithy/core/dist-types/submodules/protocols/HttpBindingProtocol.d.ts +5 -1
- package/node_modules/@smithy/core/dist-types/submodules/protocols/HttpProtocol.d.ts +14 -1
- package/node_modules/@smithy/core/dist-types/submodules/protocols/RpcProtocol.d.ts +5 -0
- package/node_modules/@smithy/core/dist-types/submodules/schema/TypeRegistry.d.ts +8 -1
- package/node_modules/@smithy/core/dist-types/ts3.4/submodules/cbor/SmithyRpcV2CborProtocol.d.ts +7 -1
- package/node_modules/@smithy/core/dist-types/ts3.4/submodules/protocols/HttpBindingProtocol.d.ts +5 -1
- package/node_modules/@smithy/core/dist-types/ts3.4/submodules/protocols/HttpProtocol.d.ts +14 -1
- package/node_modules/@smithy/core/dist-types/ts3.4/submodules/protocols/RpcProtocol.d.ts +5 -0
- package/node_modules/@smithy/core/dist-types/ts3.4/submodules/schema/TypeRegistry.d.ts +8 -1
- package/node_modules/@smithy/core/package.json +2 -2
- package/node_modules/@smithy/middleware-endpoint/package.json +2 -2
- package/node_modules/@smithy/middleware-retry/package.json +2 -2
- package/node_modules/@smithy/node-http-handler/dist-cjs/index.js +9 -2
- package/node_modules/@smithy/node-http-handler/dist-es/write-request-body.js +9 -2
- package/node_modules/@smithy/node-http-handler/package.json +1 -1
- package/node_modules/@smithy/smithy-client/package.json +4 -4
- package/node_modules/@smithy/util-defaults-mode-browser/package.json +2 -2
- package/node_modules/@smithy/util-defaults-mode-node/package.json +2 -2
- package/node_modules/@smithy/util-stream/package.json +2 -2
- package/package.json +3 -3
|
@@ -79,7 +79,7 @@ class CdkDriftIamTemplateGenerator {
|
|
|
79
79
|
}
|
|
80
80
|
exports.CdkDriftIamTemplateGenerator = CdkDriftIamTemplateGenerator;
|
|
81
81
|
_a = JSII_RTTI_SYMBOL_1;
|
|
82
|
-
CdkDriftIamTemplateGenerator[_a] = { fqn: "@jjrawlins/cdk-diff-pr-github-action.CdkDriftIamTemplateGenerator", version: "1.
|
|
82
|
+
CdkDriftIamTemplateGenerator[_a] = { fqn: "@jjrawlins/cdk-diff-pr-github-action.CdkDriftIamTemplateGenerator", version: "1.4.0" };
|
|
83
83
|
/**
|
|
84
84
|
* Projen construct that emits a CloudFormation template with minimal IAM permissions
|
|
85
85
|
* for the CDK Drift Detection Workflow.
|
|
@@ -102,5 +102,5 @@ class CdkDriftIamTemplate {
|
|
|
102
102
|
}
|
|
103
103
|
exports.CdkDriftIamTemplate = CdkDriftIamTemplate;
|
|
104
104
|
_b = JSII_RTTI_SYMBOL_1;
|
|
105
|
-
CdkDriftIamTemplate[_b] = { fqn: "@jjrawlins/cdk-diff-pr-github-action.CdkDriftIamTemplate", version: "1.
|
|
105
|
+
CdkDriftIamTemplate[_b] = { fqn: "@jjrawlins/cdk-diff-pr-github-action.CdkDriftIamTemplate", version: "1.4.0" };
|
|
106
106
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2RrRHJpZnRJYW1UZW1wbGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9DZGtEcmlmdElhbVRlbXBsYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsbUNBQWtDO0FBY2xDOzs7R0FHRztBQUNILE1BQWEsNEJBQTRCO0lBQ3ZDOztPQUVHO0lBQ0gsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEtBQXdDO1FBQzlELE1BQU0sS0FBSyxHQUFHO1lBQ1osd0NBQXdDO1lBQ3hDLDBEQUEwRDtZQUMxRCxFQUFFO1lBQ0YsYUFBYTtZQUNiLHNCQUFzQjtZQUN0QixrQkFBa0I7WUFDbEIseUZBQXlGO1lBQ3pGLGlCQUFpQixLQUFLLENBQUMsV0FBVyxHQUFHO1lBQ3JDLEVBQUU7WUFDRixZQUFZO1lBQ1osOEZBQThGO1lBQzlGLGlCQUFpQjtZQUNqQiwwQkFBMEI7WUFDMUIsaUJBQWlCO1lBQ2pCLG1CQUFtQixHQUFHLEtBQUssQ0FBQyxRQUFRLEdBQUcsR0FBRztZQUMxQyxpQ0FBaUM7WUFDakMsK0JBQStCO1lBQy9CLG9CQUFvQjtZQUNwQiwyQkFBMkI7WUFDM0Isd0JBQXdCO1lBQ3hCLDJDQUEyQztZQUMzQyxvQ0FBb0M7WUFDcEMsd0JBQXdCO1lBQ3hCLDZCQUE2QjtZQUM3Qix3Q0FBd0MsR0FBRyxLQUFLLENBQUMsVUFBVSxHQUFHLEdBQUc7WUFDakUsaUJBQWlCO1lBQ2pCLGlEQUFpRDtZQUNqRCwyQkFBMkI7WUFDM0IsbUNBQW1DO1lBQ25DLHdCQUF3QjtZQUN4QiwyREFBMkQ7WUFDM0QsK0JBQStCO1lBQy9CLHlCQUF5QjtZQUN6QixxREFBcUQ7WUFDckQsc0VBQXNFO1lBQ3RFLGdFQUFnRTtZQUNoRSxtREFBbUQ7WUFDbkQsdURBQXVEO1lBQ3ZELDZEQUE2RDtZQUM3RCwrQkFBK0I7WUFDL0IsRUFBRTtZQUNGLFVBQVU7WUFDVixvQkFBb0I7WUFDcEIsd0RBQXdEO1lBQ3hELHFDQUFxQztZQUNyQyxhQUFhO1lBQ2Isc0RBQXNEO1lBQ3RELEVBQUU7WUFDRixxQkFBcUI7WUFDckIseURBQXlEO1lBQ3pELDhCQUE4QjtZQUM5QixhQUFhO1lBQ2IsdURBQXVEO1NBQ3hELENBQUM7UUFFRixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLHFCQUFxQixDQUFDLGVBQXVCLHNDQUFzQztRQUN4RixPQUFPLDZDQUE2QyxZQUFZLCtFQUErRSxDQUFDO0lBQ2xKLENBQUM7O0FBckVILG9FQXNFQzs7O0FBWUQ7Ozs7O0dBS0c7QUFDSCxNQUFhLG1CQUFtQjtJQUM5QixZQUFZLEtBQStCO1FBQ3pDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLElBQUksc0NBQXNDLENBQUM7UUFFOUUsd0NBQXdDO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLDRCQUE0QixDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RFLElBQUksaUJBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV6RSxrQkFBa0I7UUFDbEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsOEJBQThCLEVBQUU7WUFDcEQsV0FBVyxFQUNULHVJQUF1STtZQUN6SSxXQUFXLEVBQUUsSUFBSTtZQUNqQixJQUFJLEVBQUUsNEJBQTRCLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDO1NBQ3JFLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBZkgsa0RBZ0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGV4dEZpbGUgfSBmcm9tICdwcm9qZW4nO1xuXG4vKipcbiAqIFByb3BzIGZvciBnZW5lcmF0aW5nIENESyBEcmlmdCBJQU0gdGVtcGxhdGVzIChubyBQcm9qZW4gZGVwZW5kZW5jeSlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZGtEcmlmdElhbVRlbXBsYXRlR2VuZXJhdG9yUHJvcHMge1xuICAvKiogTmFtZSBmb3IgdGhlIElBTSByb2xlICovXG4gIHJlYWRvbmx5IHJvbGVOYW1lOiBzdHJpbmc7XG4gIC8qKiBBUk4gb2YgdGhlIGV4aXN0aW5nIEdpdEh1YiBPSURDIHJvbGUgdGhhdCBjYW4gYXNzdW1lIHRoaXMgZHJpZnQgcm9sZSAqL1xuICByZWFkb25seSBvaWRjUm9sZUFybjogc3RyaW5nO1xuICAvKiogUmVnaW9uIGZvciB0aGUgT0lEQyB0cnVzdCBjb25kaXRpb24gKi9cbiAgcmVhZG9ubHkgb2lkY1JlZ2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFB1cmUgZ2VuZXJhdG9yIGNsYXNzIGZvciBDREsgRHJpZnQgSUFNIHRlbXBsYXRlcy5cbiAqIE5vIFByb2plbiBkZXBlbmRlbmN5IC0gY2FuIGJlIHVzZWQgaW4gYW55IHByb2plY3QuXG4gKi9cbmV4cG9ydCBjbGFzcyBDZGtEcmlmdElhbVRlbXBsYXRlR2VuZXJhdG9yIHtcbiAgLyoqXG4gICAqIEdlbmVyYXRlIHRoZSBDbG91ZEZvcm1hdGlvbiBJQU0gdGVtcGxhdGUgYXMgYSBZQU1MIHN0cmluZy5cbiAgICovXG4gIHN0YXRpYyBnZW5lcmF0ZVRlbXBsYXRlKHByb3BzOiBDZGtEcmlmdElhbVRlbXBsYXRlR2VuZXJhdG9yUHJvcHMpOiBzdHJpbmcge1xuICAgIGNvbnN0IGxpbmVzID0gW1xuICAgICAgXCJBV1NUZW1wbGF0ZUZvcm1hdFZlcnNpb246ICcyMDEwLTA5LTA5J1wiLFxuICAgICAgXCJEZXNjcmlwdGlvbjogJ0lBTSByb2xlIGZvciBDREsgRHJpZnQgRGV0ZWN0aW9uIFdvcmtmbG93J1wiLFxuICAgICAgJycsXG4gICAgICAnUGFyYW1ldGVyczonLFxuICAgICAgJyAgR2l0SHViT0lEQ1JvbGVBcm46JyxcbiAgICAgICcgICAgVHlwZTogU3RyaW5nJyxcbiAgICAgIFwiICAgIERlc2NyaXB0aW9uOiAnQVJOIG9mIHRoZSBleGlzdGluZyBHaXRIdWIgT0lEQyByb2xlIHRoYXQgY2FuIGFzc3VtZSB0aGlzIGRyaWZ0IHJvbGUnXCIsXG4gICAgICBgICAgIERlZmF1bHQ6ICcke3Byb3BzLm9pZGNSb2xlQXJufSdgLFxuICAgICAgJycsXG4gICAgICAnUmVzb3VyY2VzOicsXG4gICAgICAnICAjIENsb3VkRm9ybWF0aW9uIERyaWZ0IERldGVjdGlvbiBSb2xlIC0gbWluaW1hbCBwZXJtaXNzaW9ucyBmb3IgZHJpZnQgZGV0ZWN0aW9uIG9wZXJhdGlvbnMnLFxuICAgICAgJyAgQ2RrRHJpZnRSb2xlOicsXG4gICAgICAnICAgIFR5cGU6IEFXUzo6SUFNOjpSb2xlJyxcbiAgICAgICcgICAgUHJvcGVydGllczonLFxuICAgICAgXCIgICAgICBSb2xlTmFtZTogJ1wiICsgcHJvcHMucm9sZU5hbWUgKyBcIidcIixcbiAgICAgICcgICAgICBBc3N1bWVSb2xlUG9saWN5RG9jdW1lbnQ6JyxcbiAgICAgIFwiICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNydcIixcbiAgICAgICcgICAgICAgIFN0YXRlbWVudDonLFxuICAgICAgJyAgICAgICAgICAtIEVmZmVjdDogQWxsb3cnLFxuICAgICAgJyAgICAgICAgICAgIFByaW5jaXBhbDonLFxuICAgICAgJyAgICAgICAgICAgICAgQVdTOiAhUmVmIEdpdEh1Yk9JRENSb2xlQXJuJyxcbiAgICAgICcgICAgICAgICAgICBBY3Rpb246IHN0czpBc3N1bWVSb2xlJyxcbiAgICAgICcgICAgICAgICAgICBDb25kaXRpb246JyxcbiAgICAgICcgICAgICAgICAgICAgIFN0cmluZ0VxdWFsczonLFxuICAgICAgXCIgICAgICAgICAgICAgICAgYXdzOlJlcXVlc3RlZFJlZ2lvbjogJ1wiICsgcHJvcHMub2lkY1JlZ2lvbiArIFwiJ1wiLFxuICAgICAgJyAgICAgIFBvbGljaWVzOicsXG4gICAgICAnICAgICAgICAtIFBvbGljeU5hbWU6IENsb3VkRm9ybWF0aW9uRHJpZnRBY2Nlc3MnLFxuICAgICAgJyAgICAgICAgICBQb2xpY3lEb2N1bWVudDonLFxuICAgICAgXCIgICAgICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNydcIixcbiAgICAgICcgICAgICAgICAgICBTdGF0ZW1lbnQ6JyxcbiAgICAgICcgICAgICAgICAgICAgICMgQ2xvdWRGb3JtYXRpb24gZHJpZnQgZGV0ZWN0aW9uIG9wZXJhdGlvbnMnLFxuICAgICAgJyAgICAgICAgICAgICAgLSBFZmZlY3Q6IEFsbG93JyxcbiAgICAgICcgICAgICAgICAgICAgICAgQWN0aW9uOicsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBjbG91ZGZvcm1hdGlvbjpEZXRlY3RTdGFja0RyaWZ0JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIGNsb3VkZm9ybWF0aW9uOkRlc2NyaWJlU3RhY2tEcmlmdERldGVjdGlvblN0YXR1cycsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBjbG91ZGZvcm1hdGlvbjpEZXNjcmliZVN0YWNrUmVzb3VyY2VEcmlmdHMnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gY2xvdWRmb3JtYXRpb246RGVzY3JpYmVTdGFja3MnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gY2xvdWRmb3JtYXRpb246TGlzdFN0YWNrUmVzb3VyY2VzJyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIGNsb3VkZm9ybWF0aW9uOkRldGVjdFN0YWNrUmVzb3VyY2VEcmlmdCcsXG4gICAgICBcIiAgICAgICAgICAgICAgICBSZXNvdXJjZTogJyonXCIsXG4gICAgICAnJyxcbiAgICAgICdPdXRwdXRzOicsXG4gICAgICAnICBDZGtEcmlmdFJvbGVBcm46JyxcbiAgICAgIFwiICAgIERlc2NyaXB0aW9uOiAnQVJOIG9mIHRoZSBDREsgZHJpZnQgZGV0ZWN0aW9uIHJvbGUnXCIsXG4gICAgICAnICAgIFZhbHVlOiAhR2V0QXR0IENka0RyaWZ0Um9sZS5Bcm4nLFxuICAgICAgJyAgICBFeHBvcnQ6JyxcbiAgICAgIFwiICAgICAgTmFtZTogIVN1YiAnJHtBV1M6OlN0YWNrTmFtZX0tQ2RrRHJpZnRSb2xlQXJuJ1wiLFxuICAgICAgJycsXG4gICAgICAnICBDZGtEcmlmdFJvbGVOYW1lOicsXG4gICAgICBcIiAgICBEZXNjcmlwdGlvbjogJ05hbWUgb2YgdGhlIENESyBkcmlmdCBkZXRlY3Rpb24gcm9sZSdcIixcbiAgICAgICcgICAgVmFsdWU6ICFSZWYgQ2RrRHJpZnRSb2xlJyxcbiAgICAgICcgICAgRXhwb3J0OicsXG4gICAgICBcIiAgICAgIE5hbWU6ICFTdWIgJyR7QVdTOjpTdGFja05hbWV9LUNka0RyaWZ0Um9sZU5hbWUnXCIsXG4gICAgXTtcblxuICAgIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB0aGUgQVdTIENMSSBkZXBsb3kgY29tbWFuZCBmb3IgdGhlIElBTSB0ZW1wbGF0ZS5cbiAgICovXG4gIHN0YXRpYyBnZW5lcmF0ZURlcGxveUNvbW1hbmQodGVtcGxhdGVQYXRoOiBzdHJpbmcgPSAnY2RrLWRyaWZ0LXdvcmtmbG93LWlhbS10ZW1wbGF0ZS55YW1sJyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBhd3MgY2xvdWRmb3JtYXRpb24gZGVwbG95IC0tdGVtcGxhdGUtZmlsZSAke3RlbXBsYXRlUGF0aH0gLS1zdGFjay1uYW1lIGNkay1kcmlmdC13b3JrZmxvdy1pYW0tcm9sZSAtLWNhcGFiaWxpdGllcyBDQVBBQklMSVRZX05BTUVEX0lBTWA7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wcyBmb3IgdGhlIFByb2plbi1pbnRlZ3JhdGVkIENESyBEcmlmdCBJQU0gdGVtcGxhdGUgY29uc3RydWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2RrRHJpZnRJYW1UZW1wbGF0ZVByb3BzIGV4dGVuZHMgQ2RrRHJpZnRJYW1UZW1wbGF0ZUdlbmVyYXRvclByb3BzIHtcbiAgLyoqIFByb2plbiBwcm9qZWN0IGluc3RhbmNlICovXG4gIHJlYWRvbmx5IHByb2plY3Q6IGFueTtcbiAgLyoqIE91dHB1dCBwYXRoIGZvciB0aGUgdGVtcGxhdGUgZmlsZSAoZGVmYXVsdDogJ2Nkay1kcmlmdC13b3JrZmxvdy1pYW0tdGVtcGxhdGUueWFtbCcpICovXG4gIHJlYWRvbmx5IG91dHB1dFBhdGg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvamVuIGNvbnN0cnVjdCB0aGF0IGVtaXRzIGEgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUgd2l0aCBtaW5pbWFsIElBTSBwZXJtaXNzaW9uc1xuICogZm9yIHRoZSBDREsgRHJpZnQgRGV0ZWN0aW9uIFdvcmtmbG93LlxuICpcbiAqIEZvciBub24tUHJvamVuIHByb2plY3RzLCB1c2UgYENka0RyaWZ0SWFtVGVtcGxhdGVHZW5lcmF0b3JgIGRpcmVjdGx5LlxuICovXG5leHBvcnQgY2xhc3MgQ2RrRHJpZnRJYW1UZW1wbGF0ZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBDZGtEcmlmdElhbVRlbXBsYXRlUHJvcHMpIHtcbiAgICBjb25zdCBvdXRwdXRQYXRoID0gcHJvcHMub3V0cHV0UGF0aCA/PyAnY2RrLWRyaWZ0LXdvcmtmbG93LWlhbS10ZW1wbGF0ZS55YW1sJztcblxuICAgIC8vIEdlbmVyYXRlIHRlbXBsYXRlIHVzaW5nIHRoZSBnZW5lcmF0b3JcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IENka0RyaWZ0SWFtVGVtcGxhdGVHZW5lcmF0b3IuZ2VuZXJhdGVUZW1wbGF0ZShwcm9wcyk7XG4gICAgbmV3IFRleHRGaWxlKHByb3BzLnByb2plY3QsIG91dHB1dFBhdGgsIHsgbGluZXM6IHRlbXBsYXRlLnNwbGl0KCdcXG4nKSB9KTtcblxuICAgIC8vIEFkZCBkZXBsb3kgdGFza1xuICAgIHByb3BzLnByb2plY3QuYWRkVGFzaygnZGVwbG95LWNka2RyaWZ0LWlhbS10ZW1wbGF0ZScsIHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnRGVwbG95IHRoZSBDREsgRHJpZnQgRGV0ZWN0aW9uIElBTSB0ZW1wbGF0ZSB2aWEgQ2xvdWRGb3JtYXRpb24gKGFjY2VwdHMgZXh0cmEgQVdTIENMSSBhcmdzLCBlLmcuLCAtLXBhcmFtZXRlci1vdmVycmlkZXMgS2V5PVZhbHVlLi4uKScsXG4gICAgICByZWNlaXZlQXJnczogdHJ1ZSxcbiAgICAgIGV4ZWM6IENka0RyaWZ0SWFtVGVtcGxhdGVHZW5lcmF0b3IuZ2VuZXJhdGVEZXBsb3lDb21tYW5kKG91dHB1dFBhdGgpLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -8,7 +8,7 @@ class CdkChangesetScript {
|
|
|
8
8
|
new projen_1.TextFile(props.project, outputPath, {
|
|
9
9
|
lines: [
|
|
10
10
|
"import { appendFile } from 'fs/promises';",
|
|
11
|
-
"import { CloudFormationClient, DescribeChangeSetCommand } from '@aws-sdk/client-cloudformation';",
|
|
11
|
+
"import { CloudFormationClient, DescribeChangeSetCommand, DescribeStacksCommand, DescribeStackResourceDriftsCommand } from '@aws-sdk/client-cloudformation';",
|
|
12
12
|
'',
|
|
13
13
|
'/**',
|
|
14
14
|
' * Small sleep helper.',
|
|
@@ -175,20 +175,81 @@ class CdkChangesetScript {
|
|
|
175
175
|
" throw new Error('Timed out waiting for change set to reach a terminal status.');",
|
|
176
176
|
'}',
|
|
177
177
|
'',
|
|
178
|
-
'
|
|
179
|
-
'
|
|
180
|
-
|
|
181
|
-
'
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
"
|
|
185
|
-
'
|
|
186
|
-
'
|
|
187
|
-
' }
|
|
178
|
+
'/**',
|
|
179
|
+
' * Parse the Link header from GitHub API responses for pagination.',
|
|
180
|
+
' */',
|
|
181
|
+
'function parseLinkHeader(header: string | null): Record<string, string> {',
|
|
182
|
+
' const links: Record<string, string> = {};',
|
|
183
|
+
' if (!header) return links;',
|
|
184
|
+
" for (const part of header.split(',')) {",
|
|
185
|
+
' const match = part.match(/<([^>]+)>;\\s*rel="([^"]+)"/);',
|
|
186
|
+
' if (match) links[match[2]] = match[1];',
|
|
187
|
+
' }',
|
|
188
|
+
' return links;',
|
|
189
|
+
'}',
|
|
190
|
+
'',
|
|
191
|
+
'/**',
|
|
192
|
+
' * Search existing PR comments for one containing the given marker.',
|
|
193
|
+
' * Returns the comment ID if found, null otherwise.',
|
|
194
|
+
' */',
|
|
195
|
+
'async function findExistingComment(commentsUrl: string, token: string, marker: string): Promise<number | null> {',
|
|
196
|
+
' let url: string | undefined = `${commentsUrl}?per_page=100`;',
|
|
197
|
+
' while (url) {',
|
|
198
|
+
' const res = await fetch(url, {',
|
|
199
|
+
' headers: {',
|
|
200
|
+
" 'Authorization': `token ${token}`,",
|
|
201
|
+
" 'Accept': 'application/vnd.github+json',",
|
|
202
|
+
' },',
|
|
203
|
+
' });',
|
|
204
|
+
' if (!res.ok) return null;',
|
|
205
|
+
' const comments: any[] = await res.json();',
|
|
206
|
+
' for (const c of comments) {',
|
|
207
|
+
" if (typeof c.body === 'string' && c.body.includes(marker)) {",
|
|
208
|
+
' return c.id;',
|
|
209
|
+
' }',
|
|
210
|
+
' }',
|
|
211
|
+
" const links = parseLinkHeader(res.headers.get('link'));",
|
|
212
|
+
' url = links.next;',
|
|
213
|
+
' }',
|
|
214
|
+
' return null;',
|
|
215
|
+
'}',
|
|
216
|
+
'',
|
|
217
|
+
'/**',
|
|
218
|
+
' * Create or update a PR comment. Uses an HTML marker to find existing comments.',
|
|
219
|
+
' * If found, PATCHes the existing comment; otherwise POSTs a new one.',
|
|
220
|
+
' */',
|
|
221
|
+
'async function upsertGithubComment(commentsUrl: string, token: string, body: string, marker: string): Promise<void> {',
|
|
222
|
+
' const markedBody = `${marker}\\n${body}`;',
|
|
223
|
+
' const existingId = await findExistingComment(commentsUrl, token, marker);',
|
|
224
|
+
'',
|
|
225
|
+
' let res: Response;',
|
|
226
|
+
' if (existingId) {',
|
|
227
|
+
" const baseUrl = commentsUrl.substring(0, commentsUrl.indexOf('/issues/'));",
|
|
228
|
+
' const patchUrl = `${baseUrl}/issues/comments/${existingId}`;',
|
|
229
|
+
' res = await fetch(patchUrl, {',
|
|
230
|
+
" method: 'PATCH',",
|
|
231
|
+
' headers: {',
|
|
232
|
+
" 'Authorization': `token ${token}`,",
|
|
233
|
+
" 'Content-Type': 'application/json',",
|
|
234
|
+
" 'Accept': 'application/vnd.github+json',",
|
|
235
|
+
' },',
|
|
236
|
+
' body: JSON.stringify({ body: markedBody }),',
|
|
237
|
+
' });',
|
|
238
|
+
' } else {',
|
|
239
|
+
' res = await fetch(commentsUrl, {',
|
|
240
|
+
" method: 'POST',",
|
|
241
|
+
' headers: {',
|
|
242
|
+
" 'Authorization': `token ${token}`,",
|
|
243
|
+
" 'Content-Type': 'application/json',",
|
|
244
|
+
" 'Accept': 'application/vnd.github+json',",
|
|
245
|
+
' },',
|
|
246
|
+
' body: JSON.stringify({ body: markedBody }),',
|
|
247
|
+
' });',
|
|
248
|
+
' }',
|
|
188
249
|
'',
|
|
189
250
|
' if (!res.ok) {',
|
|
190
251
|
" const text = await res.text().catch(() => '');",
|
|
191
|
-
|
|
252
|
+
" throw new Error(`Failed to ${existingId ? 'update' : 'post'} GitHub comment: ${res.status} ${res.statusText} ${text}`);",
|
|
192
253
|
' }',
|
|
193
254
|
'}',
|
|
194
255
|
'',
|
|
@@ -196,6 +257,69 @@ class CdkChangesetScript {
|
|
|
196
257
|
" await appendFile(summaryPath, `${content}\\n`, { encoding: 'utf8' });",
|
|
197
258
|
'}',
|
|
198
259
|
'',
|
|
260
|
+
'/**',
|
|
261
|
+
' * Check cached drift status for the stack and return an HTML banner.',
|
|
262
|
+
' * Non-fatal: returns empty string on any error.',
|
|
263
|
+
' */',
|
|
264
|
+
'async function getDriftBannerHtml(client: CloudFormationClient, stackName: string): Promise<string> {',
|
|
265
|
+
' const stackResp = await client.send(new DescribeStacksCommand({ StackName: stackName }));',
|
|
266
|
+
' const stack = stackResp.Stacks?.[0];',
|
|
267
|
+
" if (!stack) return '';",
|
|
268
|
+
'',
|
|
269
|
+
' const driftInfo = stack.DriftInformation;',
|
|
270
|
+
' const driftStatus = driftInfo?.StackDriftStatus;',
|
|
271
|
+
' const lastChecked = driftInfo?.LastCheckTimestamp;',
|
|
272
|
+
'',
|
|
273
|
+
" if (driftStatus === 'IN_SYNC') return '';",
|
|
274
|
+
'',
|
|
275
|
+
" if (driftStatus === 'NOT_CHECKED') {",
|
|
276
|
+
" return '<blockquote><p>ℹ️ Drift detection has not been run for this stack.</p></blockquote>';",
|
|
277
|
+
' }',
|
|
278
|
+
'',
|
|
279
|
+
" if (driftStatus === 'DETECTION_IN_PROGRESS') {",
|
|
280
|
+
" return '<blockquote><p>⏳ Drift detection is currently in progress.</p></blockquote>';",
|
|
281
|
+
' }',
|
|
282
|
+
'',
|
|
283
|
+
" if (driftStatus === 'DRIFTED') {",
|
|
284
|
+
" let banner = '<blockquote>';",
|
|
285
|
+
'',
|
|
286
|
+
' try {',
|
|
287
|
+
' const driftsResp = await client.send(new DescribeStackResourceDriftsCommand({',
|
|
288
|
+
' StackName: stackName,',
|
|
289
|
+
" StackResourceDriftStatusFilters: ['MODIFIED', 'DELETED'],",
|
|
290
|
+
' }));',
|
|
291
|
+
' const drifts = driftsResp.StackResourceDrifts ?? [];',
|
|
292
|
+
' const count = drifts.length;',
|
|
293
|
+
" const ts = lastChecked ? lastChecked.toISOString() : 'unknown';",
|
|
294
|
+
'',
|
|
295
|
+
" banner += `<h3>⚠️ Stack has drifted (${count} resource${count !== 1 ? 's' : ''} out of sync)</h3>`;",
|
|
296
|
+
' banner += `<p>Last drift check: <em>${ts}</em></p>`;',
|
|
297
|
+
'',
|
|
298
|
+
' if (count > 0) {',
|
|
299
|
+
" banner += '<details><summary>View drifted resources</summary>';",
|
|
300
|
+
" banner += '<table><tr><th>Resource</th><th>Type</th><th>Drift Status</th></tr>';",
|
|
301
|
+
' for (const d of drifts) {',
|
|
302
|
+
" const logicalId = d.LogicalResourceId ?? '-';",
|
|
303
|
+
" const resourceType = d.ResourceType ?? '-';",
|
|
304
|
+
" const status = d.StackResourceDriftStatus ?? '-';",
|
|
305
|
+
' banner += `<tr><td>${logicalId}</td><td>${resourceType}</td><td>${status}</td></tr>`;',
|
|
306
|
+
' }',
|
|
307
|
+
" banner += '</table></details>';",
|
|
308
|
+
' }',
|
|
309
|
+
' } catch (e: any) {',
|
|
310
|
+
" const ts = lastChecked ? lastChecked.toISOString() : 'unknown';",
|
|
311
|
+
" banner += '<h3>⚠️ Stack has drifted</h3>';",
|
|
312
|
+
' banner += `<p>Last drift check: <em>${ts}</em></p>`;',
|
|
313
|
+
" banner += `<p><em>Could not retrieve drift details: ${e?.message ?? 'unknown error'}</em></p>`;",
|
|
314
|
+
' }',
|
|
315
|
+
'',
|
|
316
|
+
" banner += '</blockquote>';",
|
|
317
|
+
' return banner;',
|
|
318
|
+
' }',
|
|
319
|
+
'',
|
|
320
|
+
" return '';",
|
|
321
|
+
'}',
|
|
322
|
+
'',
|
|
199
323
|
'async function main() {',
|
|
200
324
|
' const {',
|
|
201
325
|
' STACK_NAME,',
|
|
@@ -217,6 +341,7 @@ class CdkChangesetScript {
|
|
|
217
341
|
' }',
|
|
218
342
|
'',
|
|
219
343
|
' const changeSetName = CHANGE_SET_NAME || STACK_NAME;',
|
|
344
|
+
' const marker = `<!-- cdk-diff:stack:${STACK_NAME} -->`;',
|
|
220
345
|
'',
|
|
221
346
|
' const client = new CloudFormationClient({ region });',
|
|
222
347
|
'',
|
|
@@ -254,27 +379,35 @@ class CdkChangesetScript {
|
|
|
254
379
|
' // Build HTML exactly like pretty_format.py logic (table when there are changes; "no change." otherwise).',
|
|
255
380
|
' const html = buildHtml(STACK_NAME, filteredChanges);',
|
|
256
381
|
'',
|
|
382
|
+
' // Check cached drift status (non-fatal)',
|
|
383
|
+
" let driftBanner = '';",
|
|
384
|
+
' try {',
|
|
385
|
+
' driftBanner = await getDriftBannerHtml(client, STACK_NAME);',
|
|
386
|
+
' } catch (e: any) {',
|
|
387
|
+
" console.error('Drift check failed:', e?.message || e);",
|
|
388
|
+
' }',
|
|
389
|
+
' const fullHtml = driftBanner + html;',
|
|
390
|
+
'',
|
|
257
391
|
' // Print to stdout',
|
|
258
|
-
'
|
|
259
|
-
' console.log(html);',
|
|
392
|
+
' console.log(fullHtml);',
|
|
260
393
|
'',
|
|
261
394
|
' // Optionally append to GitHub Step Summary',
|
|
262
395
|
' if (GITHUB_STEP_SUMMARY) {',
|
|
263
396
|
' try {',
|
|
264
|
-
' await appendStepSummary(GITHUB_STEP_SUMMARY,
|
|
397
|
+
' await appendStepSummary(GITHUB_STEP_SUMMARY, fullHtml);',
|
|
265
398
|
' console.error(`Appended HTML to GITHUB_STEP_SUMMARY: ${GITHUB_STEP_SUMMARY}`);',
|
|
266
399
|
' } catch (e: any) {',
|
|
267
400
|
" console.error('Failed to append to GITHUB_STEP_SUMMARY:', e?.message || e);",
|
|
268
401
|
' }',
|
|
269
402
|
' }',
|
|
270
403
|
'',
|
|
271
|
-
' //
|
|
404
|
+
' // Upsert PR comment (find existing by marker, update or create)',
|
|
272
405
|
' if (GITHUB_TOKEN && GITHUB_COMMENT_URL) {',
|
|
273
406
|
' try {',
|
|
274
|
-
' await
|
|
275
|
-
" console.error('
|
|
407
|
+
' await upsertGithubComment(GITHUB_COMMENT_URL, GITHUB_TOKEN, fullHtml, marker);',
|
|
408
|
+
" console.error('Upserted GitHub PR comment.');",
|
|
276
409
|
' } catch (e: any) {',
|
|
277
|
-
" console.error('Failed to
|
|
410
|
+
" console.error('Failed to upsert GitHub PR comment:', e?.message || e);",
|
|
278
411
|
' // Do not fail the whole script just for comment posting',
|
|
279
412
|
' }',
|
|
280
413
|
' }',
|
|
@@ -294,4 +427,4 @@ class CdkChangesetScript {
|
|
|
294
427
|
}
|
|
295
428
|
}
|
|
296
429
|
exports.CdkChangesetScript = CdkChangesetScript;
|
|
297
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWNoYW5nZXNldC1zY3JpcHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmluL2Nkay1jaGFuZ2VzZXQtc2NyaXB0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFrQztBQVFsQyxNQUFhLGtCQUFrQjtJQUM3QixZQUFZLEtBQThCO1FBQ3hDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLElBQUksb0NBQW9DLENBQUM7UUFFNUUsSUFBSSxpQkFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFO1lBQ3RDLEtBQUssRUFBRTtnQkFDTCwyQ0FBMkM7Z0JBQzNDLGtHQUFrRztnQkFDbEcsRUFBRTtnQkFDRixLQUFLO2dCQUNMLHdCQUF3QjtnQkFDeEIsS0FBSztnQkFDTCwwRUFBMEU7Z0JBQzFFLEVBQUU7Z0JBQ0YsS0FBSztnQkFDTCw2Q0FBNkM7Z0JBQzdDLGlFQUFpRTtnQkFDakUsS0FBSztnQkFDTCxnREFBZ0Q7Z0JBQ2hELDJEQUEyRDtnQkFDM0QsOENBQThDO2dCQUM5QyxtQkFBbUI7Z0JBQ25CLGdCQUFnQjtnQkFDaEIsbUJBQW1CO2dCQUNuQixNQUFNO2dCQUNOLDBEQUEwRDtnQkFDMUQsc0NBQXNDO2dCQUN0QyxHQUFHO2dCQUNILEVBQUU7Z0JBQ0YsS0FBSztnQkFDTCxvQ0FBb0M7Z0JBQ3BDLEtBQUs7Z0JBQ0wsNENBQTRDO2dCQUM1QyxrRkFBa0Y7Z0JBQ2xGLEdBQUc7Z0JBQ0gsRUFBRTtnQkFDRixLQUFLO2dCQUNMLGtDQUFrQztnQkFDbEMsS0FBSztnQkFDTCxzSUFBc0k7Z0JBQ3RJLDRGQUE0RjtnQkFDNUYsSUFBSTtnQkFDSixvRUFBb0U7Z0JBQ3BFLDBDQUEwQztnQkFDMUMsd0NBQXdDO2dCQUN4QyxvREFBb0Q7Z0JBQ3BELElBQUk7Z0JBQ0osMEJBQTBCO2dCQUMxQixvQkFBb0I7Z0JBQ3BCLG9PQUFvTztnQkFDcE8sT0FBTztnQkFDUCwySUFBMkk7Z0JB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O2dCQUMvQyw4QkFBOEI7Z0JBQzlCLFdBQVc7Z0JBQ1gsMkRBQTJEO2dCQUMzRCxzRkFBc0Y7Z0JBQ3RGLHdCQUF3QjtnQkFDeEIsbUZBQW1GO2dCQUNuRixPQUFPO2dCQUNQLEtBQUs7Z0JBQ0wsRUFBRTtnQkFDRixtQ0FBbUM7Z0JBQ25DLDZDQUE2QztnQkFDN0MsV0FBVztnQkFDWCx3RUFBd0U7Z0JBQ3hFLDZEQUE2RDtnQkFDN0Qsd0JBQXdCO2dCQUN4Qiw0RUFBNEU7Z0JBQzVFLGdFQUFnRTtnQkFDaEUsT0FBTztnQkFDUCxLQUFLO2dCQUNMLEVBQUU7Z0JBQ0YsNEdBQTRHO2dCQUM1Ryw4Q0FBOEM7Z0JBQzlDLDBFQUEwRTtnQkFDMUUsS0FBSztnQkFDTCxHQUFHO2dCQUNILEVBQUU7Z0JBQ0YseUJBQXlCO2dCQUN6Qix1QkFBdUI7Z0JBQ3ZCLHlCQUF5QjtnQkFDekIsS0FBSzthQUNOO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBblNELGdEQW1TQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRleHRGaWxlIH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IEF3c0Nka1R5cGVTY3JpcHRBcHAgfSBmcm9tICdwcm9qZW4vbGliL2F3c2Nkayc7XG5cbmludGVyZmFjZSBDZGtDaGFuZ2VzZXRTY3JpcHRQcm9wcyB7XG4gIHByb2plY3Q6IEF3c0Nka1R5cGVTY3JpcHRBcHA7XG4gIG91dHB1dFBhdGg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBDZGtDaGFuZ2VzZXRTY3JpcHQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogQ2RrQ2hhbmdlc2V0U2NyaXB0UHJvcHMpIHtcbiAgICBjb25zdCBvdXRwdXRQYXRoID0gcHJvcHMub3V0cHV0UGF0aCA/PyAncHJvamVucmMvZGVzY3JpYmUtY2ZuLWNoYW5nZXNldC50cyc7XG5cbiAgICBuZXcgVGV4dEZpbGUocHJvcHMucHJvamVjdCwgb3V0cHV0UGF0aCwge1xuICAgICAgbGluZXM6IFtcbiAgICAgICAgXCJpbXBvcnQgeyBhcHBlbmRGaWxlIH0gZnJvbSAnZnMvcHJvbWlzZXMnO1wiLFxuICAgICAgICBcImltcG9ydCB7IENsb3VkRm9ybWF0aW9uQ2xpZW50LCBEZXNjcmliZUNoYW5nZVNldENvbW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1wiLFxuICAgICAgICAnJyxcbiAgICAgICAgJy8qKicsXG4gICAgICAgICcgKiBTbWFsbCBzbGVlcCBoZWxwZXIuJyxcbiAgICAgICAgJyAqLycsXG4gICAgICAgICdjb25zdCBzbGVlcCA9IChtczogbnVtYmVyKSA9PiBuZXcgUHJvbWlzZSgocmVzKSA9PiBzZXRUaW1lb3V0KHJlcywgbXMpKTsnLFxuICAgICAgICAnJyxcbiAgICAgICAgJy8qKicsXG4gICAgICAgICcgKiBCdWlsZCB0aGUgSFRNTCBjb2xvciBjaGlwIGZvciBhbiBhY3Rpb24uJyxcbiAgICAgICAgJyAqIE1vZGlmeT1ibHVlLCBBZGQ9Z3JlZW4sIFJlbW92ZT1yZWQgKG1hdGNoIHByZXR0eV9mb3JtYXQucHkpLicsXG4gICAgICAgICcgKi8nLFxuICAgICAgICAnZnVuY3Rpb24gYWN0aW9uQ2hpcChhY3Rpb24/OiBzdHJpbmcpOiBzdHJpbmcgeycsXG4gICAgICAgICcgIC8vIFVzZSBlbW9qaSBpbnN0ZWFkIG9mIGV4dGVybmFsIGltYWdlcyBmb3IgcmVsaWFiaWxpdHknLFxuICAgICAgICAnICBjb25zdCBlbW9qaU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsnLFxuICAgICAgICBcIiAgICBNb2RpZnk6ICfwn5S1JyxcIixcbiAgICAgICAgXCIgICAgQWRkOiAn8J+foicsXCIsXG4gICAgICAgIFwiICAgIFJlbW92ZTogJ/CflLQnLFwiLFxuICAgICAgICAnICB9OycsXG4gICAgICAgIFwiICBjb25zdCBtYXJrID0gYWN0aW9uID8gKGVtb2ppTWFwW2FjdGlvbl0gPz8gJ+KaqicpIDogJ+Kaqic7XCIsXG4gICAgICAgIFwiICByZXR1cm4gYCR7bWFya30gJHthY3Rpb24gPz8gJy0nfWA7XCIsXG4gICAgICAgICd9JyxcbiAgICAgICAgJycsXG4gICAgICAgICcvKionLFxuICAgICAgICAnICogRXNjYXBlIEhUTUwgc3BlY2lhbCBjaGFyYWN0ZXJzLicsXG4gICAgICAgICcgKi8nLFxuICAgICAgICAnZnVuY3Rpb24gZXNjYXBlSHRtbChzdHI6IHN0cmluZyk6IHN0cmluZyB7JyxcbiAgICAgICAgXCIgIHJldHVybiBzdHIucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5yZXBsYWNlKC88L2csICcmbHQ7JykucmVwbGFjZSgvPi9nLCAnJmd0OycpO1wiLFxuICAgICAgICAnfScsXG4gICAgICAgICcnLFxuICAgICAgICAnLyoqJyxcbiAgICAgICAgJyAqIEZvcm1hdCBhIGJlZm9yZeKGkmFmdGVyIGNoYW5nZS4nLFxuICAgICAgICAnICovJyxcbiAgICAgICAgJ2Z1bmN0aW9uIGZvcm1hdENoYW5nZShuYW1lOiBzdHJpbmcsIGNoYW5nZVR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCwgYmVmb3JlOiBzdHJpbmcgfCB1bmRlZmluZWQsIGFmdGVyOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcgeycsXG4gICAgICAgIFwiICBjb25zdCBjaGFuZ2VFbW9qaSA9IGNoYW5nZVR5cGUgPT09ICdBZGQnID8gJ/Cfn6InIDogY2hhbmdlVHlwZSA9PT0gJ1JlbW92ZScgPyAn8J+UtCcgOiAn8J+UtSc7XCIsXG4gICAgICAgICcgICcsXG4gICAgICAgICcgIC8vIElmIGJvdGggdmFsdWVzIGV4aXN0IGFuZCBhcmUgbGFyZ2UsIHVzZSBhIG1vcmUgY29tcGFjdCBmb3JtYXQnLFxuICAgICAgICAnICBjb25zdCBiZWZvcmVMZW4gPSBiZWZvcmU/Lmxlbmd0aCA/PyAwOycsXG4gICAgICAgICcgIGNvbnN0IGFmdGVyTGVuID0gYWZ0ZXI/Lmxlbmd0aCA/PyAwOycsXG4gICAgICAgICcgIGNvbnN0IGlzTGFyZ2UgPSBiZWZvcmVMZW4gPiA4MCB8fCBhZnRlckxlbiA+IDgwOycsXG4gICAgICAgICcgICcsXG4gICAgICAgICcgIGlmIChiZWZvcmUgJiYgYWZ0ZXIpIHsnLFxuICAgICAgICAnICAgIGlmIChpc0xhcmdlKSB7JyxcbiAgICAgICAgJyAgICAgIHJldHVybiBgPGRldGFpbHM+PHN1bW1hcnk+JHtjaGFuZ2VFbW9qaX0gPHN0cm9uZz4ke2VzY2FwZUh0bWwobmFtZSl9PC9zdHJvbmc+IChtb2RpZmllZCk8L3N1bW1hcnk+PHN0cm9uZz5CZWZvcmU6PC9zdHJvbmc+PHByZT4ke2VzY2FwZUh0bWwoYmVmb3JlKX08L3ByZT48c3Ryb25nPkFmdGVyOjwvc3Ryb25nPjxwcmU+JHtlc2NhcGVIdG1sKGFmdGVyKX08L3ByZT48L2RldGFpbHM+YDsnLFxuICAgICAgICAnICAgIH0nLFxuICAgICAgICAnICAgIHJldHVybiBgJHtjaGFuZ2VFbW9qaX0gPHN0cm9uZz4ke2VzY2FwZUh0bWwobmFtZSl9PC9zdHJvbmc+OiA8Y29kZT4ke2VzY2FwZUh0bWwoYmVmb3JlKX08L2NvZGU+IOKGkiA8Y29kZT4ke2VzY2FwZUh0bWwoYWZ0ZXIpfTwvY29kZT5gOycsXG4gICAgICAgICcgIH0gZWxzZSBpZiAoYWZ0ZXIpIHsnLFxuICAgICAgICAnICAgIGlmIChpc0xhcmdlKSB7JyxcbiAgICAgICAgJyAgICAgIHJldHVybiBgPGRldGFpbHM+PHN1bW1hcnk+JHtjaGFuZ2VFbW9qaX0gPHN0cm9uZz4ke2VzY2FwZUh0bWwobmFtZSl9PC9zdHJvbmc+IChhZGRlZCk8L3N1bW1hcnk+PHByZT4ke2VzY2FwZUh0bWwoYWZ0ZXIpfTwvcHJlPjwvZGV0YWlscz5gOycsXG4gICAgICAgICcgICAgfScsXG4gICAgICAgICcgICAgcmV0dXJuIGAke2NoYW5nZUVtb2ppfSA8c3Ryb25nPiR7ZXNjYXBlSHRtbChuYW1lKX08L3N0cm9uZz46IDxjb2RlPiR7ZXNjYXBlSHRtbChhZnRlcil9PC9jb2RlPmA7JyxcbiAgICAgICAgJyAgfSBlbHNlIGlmIChiZWZvcmUpIHsnLFxuICAgICAgICAnICAgIGlmIChpc0xhcmdlKSB7JyxcbiAgICAgICAgJyAgICAgIHJldHVybiBgPGRldGFpbHM+PHN1bW1hcnk+JHtjaGFuZ2VFbW9qaX0gPHN0cm9uZz4ke2VzY2FwZUh0bWwobmFtZSl9PC9zdHJvbmc+IChyZW1vdmVkKTwvc3VtbWFyeT48cHJlPiR7ZXNjYXBlSHRtbChiZWZvcmUpfTwvcHJlPjwvZGV0YWlscz5gOycsXG4gICAgICAgICcgICAgfScsXG4gICAgICAgICcgICAgcmV0dXJuIGAke2NoYW5nZUVtb2ppfSA8c3Ryb25nPiR7ZXNjYXBlSHRtbChuYW1lKX08L3N0cm9uZz46IDxzPjxjb2RlPiR7ZXNjYXBlSHRtbChiZWZvcmUpfTwvY29kZT48L3M+YDsnLFxuICAgICAgICAnICB9JyxcbiAgICAgICAgJyAgLy8gRmFsbGJhY2s6IG5vIHZhbHVlcyBhdmFpbGFibGUgKEFQSSBkaWQgbm90IHJldHVybiB0aGVtKScsXG4gICAgICAgICcgIHJldHVybiBgJHtjaGFuZ2VFbW9qaX0gPHN0cm9uZz4ke2VzY2FwZUh0bWwobmFtZSl9PC9zdHJvbmc+YDsnLFxuICAgICAgICAnfScsXG4gICAgICAgICcnLFxuICAgICAgICAnLyoqJyxcbiAgICAgICAgJyAqIEV4dHJhY3QgY2hhbmdlZCBwcm9wZXJ0aWVzL3RhZ3MvYXR0cmlidXRlcyB3aXRoIGJlZm9yZS9hZnRlciB2YWx1ZXMuJyxcbiAgICAgICAgJyAqLycsXG4gICAgICAgICdmdW5jdGlvbiBjaGFuZ2VkUHJvcGVydGllc0hUTUwoY2hhbmdlOiBhbnkpOiBzdHJpbmcgeycsXG4gICAgICAgICcgIGNvbnN0IGRldGFpbHMgPSBjaGFuZ2U/LlJlc291cmNlQ2hhbmdlPy5EZXRhaWxzID8/IFtdOycsXG4gICAgICAgICcgIGNvbnN0IHByb3BzOiBzdHJpbmdbXSA9IFtdOycsXG4gICAgICAgICcgIGZvciAoY29uc3QgZCBvZiBkZXRhaWxzKSB7JyxcbiAgICAgICAgJyAgICBjb25zdCBhdHRyID0gZD8uVGFyZ2V0Py5BdHRyaWJ1dGU7JyxcbiAgICAgICAgJyAgICAvLyBVc2UgcHJvcGVydHkgbmFtZSBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSB1c2UgYXR0cmlidXRlIHR5cGUnLFxuICAgICAgICBcIiAgICBjb25zdCBuYW1lID0gZD8uVGFyZ2V0Py5OYW1lID8/IGF0dHIgPz8gJ3Vua25vd24nO1wiLFxuICAgICAgICAnICAgIGNvbnN0IGNoYW5nZVR5cGUgPSBkPy5UYXJnZXQ/LkF0dHJpYnV0ZUNoYW5nZVR5cGU7JyxcbiAgICAgICAgJyAgICBjb25zdCBiZWZvcmUgPSBkPy5UYXJnZXQ/LkJlZm9yZVZhbHVlOycsXG4gICAgICAgICcgICAgY29uc3QgYWZ0ZXIgPSBkPy5UYXJnZXQ/LkFmdGVyVmFsdWU7JyxcbiAgICAgICAgJyAgICBwcm9wcy5wdXNoKGZvcm1hdENoYW5nZShuYW1lLCBjaGFuZ2VUeXBlLCBiZWZvcmUsIGFmdGVyKSk7JyxcbiAgICAgICAgJyAgfScsXG4gICAgICAgIFwiICByZXR1cm4gcHJvcHMuam9pbignPGJyPicpO1wiLFxuICAgICAgICAnfScsXG4gICAgICAgICcnLFxuICAgICAgICAnLyoqJyxcbiAgICAgICAgJyAqIERldGVybWluZSBpZiBhIGNoYW5nZSBzaG91bGQgYmUgaWdub3JlZCBiYXNlZCBvbiBsb2dpY2FsIElEcyBhbmQvb3IgcmVzb3VyY2UgdHlwZXMuJyxcbiAgICAgICAgXCIgKiAtIElHTk9SRV9MT0dJQ0FMX0lEUzogY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgbG9naWNhbCBJRHMgdG8gaWdub3JlIChkZWZhdWx0IGluY2x1ZGVzICdDREtNZXRhZGF0YScpXCIsXG4gICAgICAgIFwiICogLSBJR05PUkVfUkVTT1VSQ0VfVFlQRVM6IGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHJlc291cmNlIHR5cGVzIHRvIGlnbm9yZSAoZS5nLiwgJ0FXUzo6Q0RLOjpNZXRhZGF0YScpXCIsXG4gICAgICAgICcgKi8nLFxuICAgICAgICAnZnVuY3Rpb24gc2hvdWxkSWdub3JlQ2hhbmdlKGNoYW5nZTogYW55LCBpZ25vcmVJZHM6IFNldDxzdHJpbmc+LCBpZ25vcmVUeXBlczogU2V0PHN0cmluZz4pOiBib29sZWFuIHsnLFxuICAgICAgICAnICBjb25zdCByYyA9IGNoYW5nZT8uUmVzb3VyY2VDaGFuZ2UgPz8ge307JyxcbiAgICAgICAgJyAgY29uc3QgbG9naWNhbElkID0gcmM/LkxvZ2ljYWxSZXNvdXJjZUlkIGFzIHN0cmluZyB8IHVuZGVmaW5lZDsnLFxuICAgICAgICAnICBjb25zdCByZXNvdXJjZVR5cGUgPSByYz8uUmVzb3VyY2VUeXBlIGFzIHN0cmluZyB8IHVuZGVmaW5lZDsnLFxuICAgICAgICAnICBpZiAobG9naWNhbElkICYmIGlnbm9yZUlkcy5oYXMobG9naWNhbElkKSkgcmV0dXJuIHRydWU7JyxcbiAgICAgICAgJyAgaWYgKHJlc291cmNlVHlwZSAmJiBpZ25vcmVUeXBlcy5oYXMocmVzb3VyY2VUeXBlKSkgcmV0dXJuIHRydWU7JyxcbiAgICAgICAgJyAgcmV0dXJuIGZhbHNlOycsXG4gICAgICAgICd9JyxcbiAgICAgICAgJycsXG4gICAgICAgICcvKionLFxuICAgICAgICAnICogR2VuZXJhdGUgdGhlIEhUTUwgYm9keSBzaW1pbGFyIHRvIHByZXR0eV9mb3JtYXQucHknLFxuICAgICAgICAnICovJyxcbiAgICAgICAgJ2Z1bmN0aW9uIGJ1aWxkSHRtbChzdGFja05hbWU6IHN0cmluZywgY2hhbmdlczogYW55W10pOiBzdHJpbmcgeycsXG4gICAgICAgICcgIGxldCBib2R5ID0gYDxoMT5DaGFuZ2Ugc2V0PC9oMT48aDI+U3RhY2sgTmFtZTogJHtzdGFja05hbWV9PC9oMj48YnI+YDsnLFxuICAgICAgICAnICBpZiAoKGNoYW5nZXM/Lmxlbmd0aCA/PyAwKSA+IDApIHsnLFxuICAgICAgICBcIiAgICBib2R5ICs9ICc8dGFibGU+PHRyPjx0aD5BY3Rpb24mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L3RoPjx0aD5JRDwvdGg+PHRoPlR5cGU8L3RoPjx0aD5SZXBsYWNlbWVudDwvdGg+PHRoPkRldGFpbHM8L3RoPjwvdHI+JztcIixcbiAgICAgICAgJyAgICBmb3IgKGNvbnN0IGMgb2YgY2hhbmdlcykgeycsXG4gICAgICAgICcgICAgICBjb25zdCByYyA9IGM/LlJlc291cmNlQ2hhbmdlID8/IHt9OycsXG4gICAgICAgICcgICAgICBjb25zdCBhY3Rpb24gPSBhY3Rpb25DaGlwKHJjPy5BY3Rpb24pOycsXG4gICAgICAgIFwiICAgICAgY29uc3QgbG9naWNhbElkID0gcmM/LkxvZ2ljYWxSZXNvdXJjZUlkID8/ICctJztcIixcbiAgICAgICAgXCIgICAgICBjb25zdCB0eXBlID0gcmM/LlJlc291cmNlVHlwZSA/PyAnLSc7XCIsXG4gICAgICAgIFwiICAgICAgY29uc3QgcmVwbGFjZW1lbnQgPSByYz8uUmVwbGFjZW1lbnQgPz8gJy0nO1wiLFxuICAgICAgICAnICAgICAgY29uc3QgZGV0YWlscyA9IGNoYW5nZWRQcm9wZXJ0aWVzSFRNTChjKTsnLFxuICAgICAgICAnJyxcbiAgICAgICAgXCIgICAgICBib2R5ICs9ICc8dHI+JztcIixcbiAgICAgICAgJyAgICAgIGJvZHkgKz0gYDx0ZD4ke2FjdGlvbn08L3RkPmA7JyxcbiAgICAgICAgJyAgICAgIGJvZHkgKz0gYDx0ZD4ke2xvZ2ljYWxJZH08L3RkPmA7JyxcbiAgICAgICAgJyAgICAgIGJvZHkgKz0gYDx0ZD4ke3R5cGV9PC90ZD5gOycsXG4gICAgICAgICcgICAgICBib2R5ICs9IGA8dGQ+JHtyZXBsYWNlbWVudH08L3RkPmA7JyxcbiAgICAgICAgJyAgICAgIGJvZHkgKz0gYDx0ZD4ke2RldGFpbHN9PC90ZD5gOycsXG4gICAgICAgIFwiICAgICAgYm9keSArPSAnPC90cj4nO1wiLFxuICAgICAgICAnICAgIH0nLFxuICAgICAgICBcIiAgICBib2R5ICs9ICc8L3RhYmxlPic7XCIsXG4gICAgICAgICcgIH0gZWxzZSB7JyxcbiAgICAgICAgXCIgICAgYm9keSArPSAnbm8gY2hhbmdlLic7XCIsXG4gICAgICAgICcgIH0nLFxuICAgICAgICAnICByZXR1cm4gYm9keTsnLFxuICAgICAgICAnfScsXG4gICAgICAgICcnLFxuICAgICAgICAnLyoqJyxcbiAgICAgICAgJyAqIFBvbGwgRGVzY3JpYmVDaGFuZ2VTZXQgdW50aWwgYSB0ZXJtaW5hbCBzdGF0dXMsIHRoZW4gcGFnaW5hdGUgdG8gcmV0cmlldmUgYWxsIENoYW5nZXMuJyxcbiAgICAgICAgJyAqLycsXG4gICAgICAgICdhc3luYyBmdW5jdGlvbiBnZXRUZXJtaW5hbENoYW5nZVNldCgnLFxuICAgICAgICAnICBjbGllbnQ6IENsb3VkRm9ybWF0aW9uQ2xpZW50LCcsXG4gICAgICAgICcgIHN0YWNrTmFtZTogc3RyaW5nLCcsXG4gICAgICAgICcgIGNoYW5nZVNldE5hbWU6IHN0cmluZywnLFxuICAgICAgICAnICBtYXhBdHRlbXB0cyA9IDYwLCcsXG4gICAgICAgICcgIGRlbGF5TXMgPSAzMDAwLCcsXG4gICAgICAgICcpOiBQcm9taXNlPHsgc3RhdHVzPzogc3RyaW5nOyBzdGF0dXNSZWFzb24/OiBzdHJpbmc7IGNoYW5nZXM6IGFueVtdIH0+IHsnLFxuICAgICAgICAnICBmb3IgKGxldCBhdHRlbXB0ID0gMTsgYXR0ZW1wdCA8PSBtYXhBdHRlbXB0czsgYXR0ZW1wdCsrKSB7JyxcbiAgICAgICAgJyAgICBjb25zdCByZXNwID0gYXdhaXQgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlQ2hhbmdlU2V0Q29tbWFuZCh7JyxcbiAgICAgICAgJyAgICAgIFN0YWNrTmFtZTogc3RhY2tOYW1lLCcsXG4gICAgICAgICcgICAgICBDaGFuZ2VTZXROYW1lOiBjaGFuZ2VTZXROYW1lLCcsXG4gICAgICAgICcgICAgICBJbmNsdWRlUHJvcGVydHlWYWx1ZXM6IHRydWUsJyxcbiAgICAgICAgJyAgICB9KSk7JyxcbiAgICAgICAgJycsXG4gICAgICAgICcgICAgY29uc3Qgc3RhdHVzID0gcmVzcC5TdGF0dXM7JyxcbiAgICAgICAgJyAgICBjb25zdCBzdGF0dXNSZWFzb24gPSByZXNwLlN0YXR1c1JlYXNvbjsnLFxuICAgICAgICAnJyxcbiAgICAgICAgXCIgICAgaWYgKHN0YXR1cyA9PT0gJ0NSRUFURV9DT01QTEVURScgfHwgc3RhdHVzID09PSAnRkFJTEVEJykge1wiLFxuICAgICAgICAnICAgICAgLy8gR2F0aGVyIGFsbCBwYWdlcycsXG4gICAgICAgICcgICAgICBjb25zdCBjaGFuZ2VzOiBhbnlbXSA9IFtdOycsXG4gICAgICAgICcgICAgICBpZiAocmVzcC5DaGFuZ2VzKSBjaGFuZ2VzLnB1c2goLi4ucmVzcC5DaGFuZ2VzKTsnLFxuICAgICAgICAnICAgICAgbGV0IG5leHQgPSByZXNwLk5leHRUb2tlbjsnLFxuICAgICAgICAnICAgICAgd2hpbGUgKG5leHQpIHsnLFxuICAgICAgICAnICAgICAgICBjb25zdCBwYWdlID0gYXdhaXQgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlQ2hhbmdlU2V0Q29tbWFuZCh7JyxcbiAgICAgICAgJyAgICAgICAgICBTdGFja05hbWU6IHN0YWNrTmFtZSwnLFxuICAgICAgICAnICAgICAgICAgIENoYW5nZVNldE5hbWU6IGNoYW5nZVNldE5hbWUsJyxcbiAgICAgICAgJyAgICAgICAgICBJbmNsdWRlUHJvcGVydHlWYWx1ZXM6IHRydWUsJyxcbiAgICAgICAgJyAgICAgICAgICBOZXh0VG9rZW46IG5leHQsJyxcbiAgICAgICAgJyAgICAgICAgfSkpOycsXG4gICAgICAgICcgICAgICAgIGlmIChwYWdlLkNoYW5nZXMpIGNoYW5nZXMucHVzaCguLi5wYWdlLkNoYW5nZXMpOycsXG4gICAgICAgICcgICAgICAgIG5leHQgPSBwYWdlLk5leHRUb2tlbjsnLFxuICAgICAgICAnICAgICAgfScsXG4gICAgICAgICcgICAgICByZXR1cm4geyBzdGF0dXMsIHN0YXR1c1JlYXNvbiwgY2hhbmdlcyB9OycsXG4gICAgICAgICcgICAgfScsXG4gICAgICAgICcnLFxuICAgICAgICAnICAgIC8vIE5vdCB0ZXJtaW5hbCB5ZXQ7IHdhaXQgYW5kIHJldHJ5JyxcbiAgICAgICAgJyAgICBhd2FpdCBzbGVlcChkZWxheU1zKTsnLFxuICAgICAgICAnICB9JyxcbiAgICAgICAgJycsXG4gICAgICAgIFwiICB0aHJvdyBuZXcgRXJyb3IoJ1RpbWVkIG91dCB3YWl0aW5nIGZvciBjaGFuZ2Ugc2V0IHRvIHJlYWNoIGEgdGVybWluYWwgc3RhdHVzLicpO1wiLFxuICAgICAgICAnfScsXG4gICAgICAgICcnLFxuICAgICAgICAnYXN5bmMgZnVuY3Rpb24gcG9zdEdpdGh1YkNvbW1lbnQodXJsOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIGJvZHk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4geycsXG4gICAgICAgICcgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCwgeycsXG4gICAgICAgIFwiICAgIG1ldGhvZDogJ1BPU1QnLFwiLFxuICAgICAgICAnICAgIGhlYWRlcnM6IHsnLFxuICAgICAgICBcIiAgICAgICdBdXRob3JpemF0aW9uJzogYHRva2VuICR7dG9rZW59YCxcIixcbiAgICAgICAgXCIgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFwiLFxuICAgICAgICBcIiAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vdm5kLmdpdGh1Yitqc29uJyxcIixcbiAgICAgICAgJyAgICB9LCcsXG4gICAgICAgICcgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBib2R5IH0pLCcsXG4gICAgICAgICcgIH0pOycsXG4gICAgICAgICcnLFxuICAgICAgICAnICBpZiAoIXJlcy5vaykgeycsXG4gICAgICAgIFwiICAgIGNvbnN0IHRleHQgPSBhd2FpdCByZXMudGV4dCgpLmNhdGNoKCgpID0+ICcnKTtcIixcbiAgICAgICAgJyAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBwb3N0IEdpdEh1YiBjb21tZW50OiAke3Jlcy5zdGF0dXN9ICR7cmVzLnN0YXR1c1RleHR9ICR7dGV4dH1gKTsnLFxuICAgICAgICAnICB9JyxcbiAgICAgICAgJ30nLFxuICAgICAgICAnJyxcbiAgICAgICAgJ2FzeW5jIGZ1bmN0aW9uIGFwcGVuZFN0ZXBTdW1tYXJ5KHN1bW1hcnlQYXRoOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4geycsXG4gICAgICAgIFwiICBhd2FpdCBhcHBlbmRGaWxlKHN1bW1hcnlQYXRoLCBgJHtjb250ZW50fVxcXFxuYCwgeyBlbmNvZGluZzogJ3V0ZjgnIH0pO1wiLFxuICAgICAgICAnfScsXG4gICAgICAgICcnLFxuICAgICAgICAnYXN5bmMgZnVuY3Rpb24gbWFpbigpIHsnLFxuICAgICAgICAnICBjb25zdCB7JyxcbiAgICAgICAgJyAgICBTVEFDS19OQU1FLCcsXG4gICAgICAgICcgICAgQ0hBTkdFX1NFVF9OQU1FLCcsXG4gICAgICAgICcgICAgQVdTX1JFR0lPTiwnLFxuICAgICAgICAnICAgIEdJVEhVQl9UT0tFTiwnLFxuICAgICAgICAnICAgIEdJVEhVQl9DT01NRU5UX1VSTCwnLFxuICAgICAgICAnICAgIEdJVEhVQl9TVEVQX1NVTU1BUlksJyxcbiAgICAgICAgJyAgICBJR05PUkVfTE9HSUNBTF9JRFMsJyxcbiAgICAgICAgJyAgICBJR05PUkVfUkVTT1VSQ0VfVFlQRVMsJyxcbiAgICAgICAgJyAgfSA9IHByb2Nlc3MuZW52OycsXG4gICAgICAgICcnLFxuICAgICAgICAnICBpZiAoIVNUQUNLX05BTUUpIHsnLFxuICAgICAgICBcIiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NUQUNLX05BTUUgaXMgcmVxdWlyZWQnKTtcIixcbiAgICAgICAgJyAgfScsXG4gICAgICAgICcgIGNvbnN0IHJlZ2lvbiA9IEFXU19SRUdJT04gfHwgcHJvY2Vzcy5lbnYuQVdTX0RFRkFVTFRfUkVHSU9OOycsXG4gICAgICAgICcgIGlmICghcmVnaW9uKSB7JyxcbiAgICAgICAgXCIgICAgdGhyb3cgbmV3IEVycm9yKCdBV1NfUkVHSU9OIGlzIHJlcXVpcmVkJyk7XCIsXG4gICAgICAgICcgIH0nLFxuICAgICAgICAnJyxcbiAgICAgICAgJyAgY29uc3QgY2hhbmdlU2V0TmFtZSA9IENIQU5HRV9TRVRfTkFNRSB8fCBTVEFDS19OQU1FOycsXG4gICAgICAgICcnLFxuICAgICAgICAnICBjb25zdCBjbGllbnQgPSBuZXcgQ2xvdWRGb3JtYXRpb25DbGllbnQoeyByZWdpb24gfSk7JyxcbiAgICAgICAgJycsXG4gICAgICAgICcgIGxldCBzdGF0dXM6IHN0cmluZyB8IHVuZGVmaW5lZDsnLFxuICAgICAgICAnICBsZXQgc3RhdHVzUmVhc29uOiBzdHJpbmcgfCB1bmRlZmluZWQ7JyxcbiAgICAgICAgJyAgbGV0IGNoYW5nZXM6IGFueVtdID0gW107JyxcbiAgICAgICAgJycsXG4gICAgICAgICcgIHRyeSB7JyxcbiAgICAgICAgJyAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRUZXJtaW5hbENoYW5nZVNldChjbGllbnQsIFNUQUNLX05BTUUsIGNoYW5nZVNldE5hbWUpOycsXG4gICAgICAgICcgICAgc3RhdHVzID0gcmVzdWx0LnN0YXR1czsnLFxuICAgICAgICAnICAgIHN0YXR1c1JlYXNvbiA9IHJlc3VsdC5zdGF0dXNSZWFzb247JyxcbiAgICAgICAgJyAgICBjaGFuZ2VzID0gcmVzdWx0LmNoYW5nZXMgPz8gW107JyxcbiAgICAgICAgJyAgfSBjYXRjaCAoZXJyOiBhbnkpIHsnLFxuICAgICAgICAnICAgIC8vIElmIERlc2NyaWJlQ2hhbmdlU2V0IGZhaWxzIGVudGlyZWx5LCBzdXJmYWNlIHRoZSBlcnJvcicsXG4gICAgICAgIFwiICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGRlc2NyaWJpbmcgY2hhbmdlIHNldDonLCBlcnI/Lm1lc3NhZ2UgfHwgZXJyKTtcIixcbiAgICAgICAgJyAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTsnLFxuICAgICAgICAnICAgIHJldHVybjsnLFxuICAgICAgICAnICB9JyxcbiAgICAgICAgJycsXG4gICAgICAgIFwiICAvLyBBcHBseSBpZ25vcmVzIGZyb20gZW52IHZhcnMgKElEcyBhbmQgdHlwZXMpLiBEZWZhdWx0IGlnbm9yZSBJRHMgaW5jbHVkZSAnQ0RLTWV0YWRhdGEnLlwiLFxuICAgICAgICAnICBjb25zdCBpZ25vcmVJZFNldCA9IG5ldyBTZXQoJyxcbiAgICAgICAgXCIgICAgKElHTk9SRV9MT0dJQ0FMX0lEUyA/PyAnQ0RLTWV0YWRhdGEnKVwiLFxuICAgICAgICBcIiAgICAgIC5zcGxpdCgnLCcpXCIsXG4gICAgICAgICcgICAgICAubWFwKHMgPT4gcy50cmltKCkpJyxcbiAgICAgICAgJyAgICAgIC5maWx0ZXIoQm9vbGVhbiksJyxcbiAgICAgICAgJyAgKTsnLFxuICAgICAgICAnICBjb25zdCBpZ25vcmVUeXBlU2V0ID0gbmV3IFNldCgnLFxuICAgICAgICBcIiAgICAoSUdOT1JFX1JFU09VUkNFX1RZUEVTID8/ICcnKVwiLFxuICAgICAgICBcIiAgICAgIC5zcGxpdCgnLCcpXCIsXG4gICAgICAgICcgICAgICAubWFwKHMgPT4gcy50cmltKCkpJyxcbiAgICAgICAgJyAgICAgIC5maWx0ZXIoQm9vbGVhbiksJyxcbiAgICAgICAgJyAgKTsnLFxuICAgICAgICAnICBjb25zdCBmaWx0ZXJlZENoYW5nZXMgPSBjaGFuZ2VzLmZpbHRlcihjID0+ICFzaG91bGRJZ25vcmVDaGFuZ2UoYywgaWdub3JlSWRTZXQsIGlnbm9yZVR5cGVTZXQpKTsnLFxuICAgICAgICAnJyxcbiAgICAgICAgJyAgLy8gQnVpbGQgSFRNTCBleGFjdGx5IGxpa2UgcHJldHR5X2Zvcm1hdC5weSBsb2dpYyAodGFibGUgd2hlbiB0aGVyZSBhcmUgY2hhbmdlczsgXCJubyBjaGFuZ2UuXCIgb3RoZXJ3aXNlKS4nLFxuICAgICAgICAnICBjb25zdCBodG1sID0gYnVpbGRIdG1sKFNUQUNLX05BTUUsIGZpbHRlcmVkQ2hhbmdlcyk7JyxcbiAgICAgICAgJycsXG4gICAgICAgICcgIC8vIFByaW50IHRvIHN0ZG91dCcsXG4gICAgICAgICcgIC8vIFRoaXMgYWxsb3dzIGNhcHR1cmluZyBvdXRwdXQgb3IgcmVkaXJlY3RpbmcgdG8gYSBmaWxlIGlmIG5lZWRlZC4nLFxuICAgICAgICAnICBjb25zb2xlLmxvZyhodG1sKTsnLFxuICAgICAgICAnJyxcbiAgICAgICAgJyAgLy8gT3B0aW9uYWxseSBhcHBlbmQgdG8gR2l0SHViIFN0ZXAgU3VtbWFyeScsXG4gICAgICAgICcgIGlmIChHSVRIVUJfU1RFUF9TVU1NQVJZKSB7JyxcbiAgICAgICAgJyAgICB0cnkgeycsXG4gICAgICAgICcgICAgICBhd2FpdCBhcHBlbmRTdGVwU3VtbWFyeShHSVRIVUJfU1RFUF9TVU1NQVJZLCBodG1sKTsnLFxuICAgICAgICAnICAgICAgY29uc29sZS5lcnJvcihgQXBwZW5kZWQgSFRNTCB0byBHSVRIVUJfU1RFUF9TVU1NQVJZOiAke0dJVEhVQl9TVEVQX1NVTU1BUll9YCk7JyxcbiAgICAgICAgJyAgICB9IGNhdGNoIChlOiBhbnkpIHsnLFxuICAgICAgICBcIiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBhcHBlbmQgdG8gR0lUSFVCX1NURVBfU1VNTUFSWTonLCBlPy5tZXNzYWdlIHx8IGUpO1wiLFxuICAgICAgICAnICAgIH0nLFxuICAgICAgICAnICB9JyxcbiAgICAgICAgJycsXG4gICAgICAgICcgIC8vIE9wdGlvbmFsbHkgcG9zdCBhIFBSIGNvbW1lbnQnLFxuICAgICAgICAnICBpZiAoR0lUSFVCX1RPS0VOICYmIEdJVEhVQl9DT01NRU5UX1VSTCkgeycsXG4gICAgICAgICcgICAgdHJ5IHsnLFxuICAgICAgICAnICAgICAgYXdhaXQgcG9zdEdpdGh1YkNvbW1lbnQoR0lUSFVCX0NPTU1FTlRfVVJMLCBHSVRIVUJfVE9LRU4sIGh0bWwpOycsXG4gICAgICAgIFwiICAgICAgY29uc29sZS5lcnJvcignUG9zdGVkIEhUTUwgYXMgYSBHaXRIdWIgUFIgY29tbWVudC4nKTtcIixcbiAgICAgICAgJyAgICB9IGNhdGNoIChlOiBhbnkpIHsnLFxuICAgICAgICBcIiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBwb3N0IEdpdEh1YiBQUiBjb21tZW50OicsIGU/Lm1lc3NhZ2UgfHwgZSk7XCIsXG4gICAgICAgICcgICAgICAvLyBEbyBub3QgZmFpbCB0aGUgd2hvbGUgc2NyaXB0IGp1c3QgZm9yIGNvbW1lbnQgcG9zdGluZycsXG4gICAgICAgICcgICAgfScsXG4gICAgICAgICcgIH0nLFxuICAgICAgICAnJyxcbiAgICAgICAgXCIgIC8vIE5vdGU6IFdoZW4gc3RhdHVzIGlzIEZBSUxFRCBkdWUgdG8gXFxcImRpZG4ndCBjb250YWluIGNoYW5nZXNcXFwiLCB0aGUgSFRNTCBuYXR1cmFsbHkgc2F5cyBcXFwibm8gY2hhbmdlLlxcXCJcIixcbiAgICAgICAgXCIgIGlmIChzdGF0dXMgPT09ICdGQUlMRUQnICYmIHN0YXR1c1JlYXNvbikge1wiLFxuICAgICAgICAnICAgIGNvbnNvbGUuZXJyb3IoYENoYW5nZSBzZXQgc3RhdHVzOiBGQUlMRUQuIFJlYXNvbjogJHtzdGF0dXNSZWFzb259YCk7JyxcbiAgICAgICAgJyAgfScsXG4gICAgICAgICd9JyxcbiAgICAgICAgJycsXG4gICAgICAgICdtYWluKCkuY2F0Y2goKGVycikgPT4geycsXG4gICAgICAgICcgIGNvbnNvbGUuZXJyb3IoZXJyKTsnLFxuICAgICAgICAnICBwcm9jZXNzLmV4aXRDb2RlID0gMTsnLFxuICAgICAgICAnfSk7JyxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
430
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWNoYW5nZXNldC1zY3JpcHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmluL2Nkay1jaGFuZ2VzZXQtc2NyaXB0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFrQztBQVFsQyxNQUFhLGtCQUFrQjtJQUM3QixZQUFZLEtBQThCO1FBQ3hDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLElBQUksb0NBQW9DLENBQUM7UUFFNUUsSUFBSSxpQkFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFO1lBQ3RDLEtBQUssRUFBRTtnQkFDTCwyQ0FBMkM7Z0JBQzNDLDZKQUE2SjtnQkFDN0osRUFBRTtnQkFDRixLQUFLO2dCQUNMLHdCQUF3QjtnQkFDeEIsS0FBSztnQkFDTCwwRUFBMEU7Z0JBQzFFLEVBQUU7Z0JBQ0YsS0FBSztnQkFDTCw2Q0FBNkM7Z0JBQzdDLGlFQUFpRTtnQkFDakUsS0FBSztnQkFDTCxnREFBZ0Q7Z0JBQ2hELDJEQUEyRDtnQkFDM0QsOENBQThDO2dCQUM5QyxtQkFBbUI7Z0JBQ25CLGdCQUFnQjtnQkFDaEIsbUJBQW1CO2dCQUNuQixNQUFNO2dCQUNOLDBEQUEwRDtnQkFDMUQsc0NBQXNDO2dCQUN0QyxHQUFHO2dCQUNILEVBQUU7Z0JBQ0YsS0FBSztnQkFDTCxvQ0FBb0M7Z0JBQ3BDLEtBQUs7Z0JBQ0wsNENBQTRDO2dCQUM1QyxrRkFBa0Y7Z0JBQ2xGLEdBQUc7Z0JBQ0gsRUFBRTtnQkFDRixLQUFLO2dCQUNMLGtDQUFrQztnQkFDbEMsS0FBSztnQkFDTCxzSUFBc0k7Z0JBQ3RJLDRGQUE0RjtnQkFDNUYsSUFBSTtnQkFDSixvRUFBb0U7Z0JBQ3BFLDBDQUEwQztnQkFDMUMsd0NBQXdDO2dCQUN4QyxvREFBb0Q7Z0JBQ3BELElBQUk7Z0JBQ0osMEJBQTBCO2dCQUMxQixvQkFBb0I7Z0JBQ3BCLG9PQUFvTztnQkFDcE8sT0FBTztnQkFDUCwySUFBMkk7Z0JB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bUY7Z0JBQ25GLE9BQU87Z0JBQ1AsS0FBSztnQkFDTCxFQUFFO2dCQUNGLG9FQUFvRTtnQkFDcEUsNkNBQTZDO2dCQUM3QyxXQUFXO2dCQUNYLHNGQUFzRjtnQkFDdEYscURBQXFEO2dCQUNyRCx3QkFBd0I7Z0JBQ3hCLDhFQUE4RTtnQkFDOUUsZ0VBQWdFO2dCQUNoRSxPQUFPO2dCQUNQLEtBQUs7Z0JBQ0wsRUFBRTtnQkFDRiw0R0FBNEc7Z0JBQzVHLDhDQUE4QztnQkFDOUMsMEVBQTBFO2dCQUMxRSxLQUFLO2dCQUNMLEdBQUc7Z0JBQ0gsRUFBRTtnQkFDRix5QkFBeUI7Z0JBQ3pCLHVCQUF1QjtnQkFDdkIseUJBQXlCO2dCQUN6QixLQUFLO2FBQ047U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUF4YUQsZ0RBd2FDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGV4dEZpbGUgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgQXdzQ2RrVHlwZVNjcmlwdEFwcCB9IGZyb20gJ3Byb2plbi9saWIvYXdzY2RrJztcblxuaW50ZXJmYWNlIENka0NoYW5nZXNldFNjcmlwdFByb3BzIHtcbiAgcHJvamVjdDogQXdzQ2RrVHlwZVNjcmlwdEFwcDtcbiAgb3V0cHV0UGF0aD86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIENka0NoYW5nZXNldFNjcmlwdCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBDZGtDaGFuZ2VzZXRTY3JpcHRQcm9wcykge1xuICAgIGNvbnN0IG91dHB1dFBhdGggPSBwcm9wcy5vdXRwdXRQYXRoID8/ICdwcm9qZW5yYy9kZXNjcmliZS1jZm4tY2hhbmdlc2V0LnRzJztcblxuICAgIG5ldyBUZXh0RmlsZShwcm9wcy5wcm9qZWN0LCBvdXRwdXRQYXRoLCB7XG4gICAgICBsaW5lczogW1xuICAgICAgICBcImltcG9ydCB7IGFwcGVuZEZpbGUgfSBmcm9tICdmcy9wcm9taXNlcyc7XCIsXG4gICAgICAgIFwiaW1wb3J0IHsgQ2xvdWRGb3JtYXRpb25DbGllbnQsIERlc2NyaWJlQ2hhbmdlU2V0Q29tbWFuZCwgRGVzY3JpYmVTdGFja3NDb21tYW5kLCBEZXNjcmliZVN0YWNrUmVzb3VyY2VEcmlmdHNDb21tYW5kIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcIixcbiAgICAgICAgJycsXG4gICAgICAgICcvKionLFxuICAgICAgICAnICogU21hbGwgc2xlZXAgaGVscGVyLicsXG4gICAgICAgICcgKi8nLFxuICAgICAgICAnY29uc3Qgc2xlZXAgPSAobXM6IG51bWJlcikgPT4gbmV3IFByb21pc2UoKHJlcykgPT4gc2V0VGltZW91dChyZXMsIG1zKSk7JyxcbiAgICAgICAgJycsXG4gICAgICAgICcvKionLFxuICAgICAgICAnICogQnVpbGQgdGhlIEhUTUwgY29sb3IgY2hpcCBmb3IgYW4gYWN0aW9uLicsXG4gICAgICAgICcgKiBNb2RpZnk9Ymx1ZSwgQWRkPWdyZWVuLCBSZW1vdmU9cmVkIChtYXRjaCBwcmV0dHlfZm9ybWF0LnB5KS4nLFxuICAgICAgICAnICovJyxcbiAgICAgICAgJ2Z1bmN0aW9uIGFjdGlvbkNoaXAoYWN0aW9uPzogc3RyaW5nKTogc3RyaW5nIHsnLFxuICAgICAgICAnICAvLyBVc2UgZW1vamkgaW5zdGVhZCBvZiBleHRlcm5hbCBpbWFnZXMgZm9yIHJlbGlhYmlsaXR5JyxcbiAgICAgICAgJyAgY29uc3QgZW1vamlNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7JyxcbiAgICAgICAgXCIgICAgTW9kaWZ5OiAn8J+UtScsXCIsXG4gICAgICAgIFwiICAgIEFkZDogJ/Cfn6InLFwiLFxuICAgICAgICBcIiAgICBSZW1vdmU6ICfwn5S0JyxcIixcbiAgICAgICAgJyAgfTsnLFxuICAgICAgICBcIiAgY29uc3QgbWFyayA9IGFjdGlvbiA/IChlbW9qaU1hcFthY3Rpb25dID8/ICfimqonKSA6ICfimqonO1wiLFxuICAgICAgICBcIiAgcmV0dXJuIGAke21hcmt9ICR7YWN0aW9uID8/ICctJ31gO1wiLFxuICAgICAgICAnfScsXG4gICAgICAgICcnLFxuICAgICAgICAnLyoqJyxcbiAgICAgICAgJyAqIEVzY2FwZSBIVE1MIHNwZWNpYWwgY2hhcmFjdGVycy4nLFxuICAgICAgICAnICovJyxcbiAgICAgICAgJ2Z1bmN0aW9uIGVzY2FwZUh0bWwoc3RyOiBzdHJpbmcpOiBzdHJpbmcgeycsXG4gICAgICAgIFwiICByZXR1cm4gc3RyLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpLnJlcGxhY2UoLz4vZywgJyZndDsnKTtcIixcbiAgICAgICAgJ30nLFxuICAgICAgICAnJyxcbiAgICAgICAgJy8qKicsXG4gICAgICAgICcgKiBGb3JtYXQgYSBiZWZvcmXihpJhZnRlciBjaGFuZ2UuJyxcbiAgICAgICAgJyAqLycsXG4gICAgICAgICdmdW5jdGlvbiBmb3JtYXRDaGFuZ2UobmFtZTogc3RyaW5nLCBjaGFuZ2VUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQsIGJlZm9yZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBhZnRlcjogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHsnLFxuICAgICAgICBcIiAgY29uc3QgY2hhbmdlRW1vamkgPSBjaGFuZ2VUeXBlID09PSAnQWRkJyA/ICfwn5+iJyA6IGNoYW5nZVR5cGUgPT09ICdSZW1vdmUnID8gJ/CflLQnIDogJ/CflLUnO1wiLFxuICAgICAgICAnICAnLFxuICAgICAgICAnICAvLyBJZiBib3RoIHZhbHVlcyBleGlzdCBhbmQgYXJlIGxhcmdlLCB1c2UgYSBtb3JlIGNvbXBhY3QgZm9ybWF0JyxcbiAgICAgICAgJyAgY29uc3QgYmVmb3JlTGVuID0gYmVmb3JlPy5sZW5ndGggPz8gMDsnLFxuICAgICAgICAnICBjb25zdCBhZnRlckxlbiA9IGFmdGVyPy5sZW5ndGggPz8gMDsnLFxuICAgICAgICAnICBjb25zdCBpc0xhcmdlID0gYmVmb3JlTGVuID4gODAgfHwgYWZ0ZXJMZW4gPiA4MDsnLFxuICAgICAgICAnICAnLFxuICAgICAgICAnICBpZiAoYmVmb3JlICYmIGFmdGVyKSB7JyxcbiAgICAgICAgJyAgICBpZiAoaXNMYXJnZSkgeycsXG4gICAgICAgICcgICAgICByZXR1cm4gYDxkZXRhaWxzPjxzdW1tYXJ5PiR7Y2hhbmdlRW1vaml9IDxzdHJvbmc+JHtlc2NhcGVIdG1sKG5hbWUpfTwvc3Ryb25nPiAobW9kaWZpZWQpPC9zdW1tYXJ5PjxzdHJvbmc+QmVmb3JlOjwvc3Ryb25nPjxwcmU+JHtlc2NhcGVIdG1sKGJlZm9yZSl9PC9wcmU+PHN0cm9uZz5BZnRlcjo8L3N0cm9uZz48cHJlPiR7ZXNjYXBlSHRtbChhZnRlcil9PC9wcmU+PC9kZXRhaWxzPmA7JyxcbiAgICAgICAgJyAgICB9JyxcbiAgICAgICAgJyAgICByZXR1cm4gYCR7Y2hhbmdlRW1vaml9IDxzdHJvbmc+JHtlc2NhcGVIdG1sKG5hbWUpfTwvc3Ryb25nPjogPGNvZGU+JHtlc2NhcGVIdG1sKGJlZm9yZSl9PC9jb2RlPiDihpIgPGNvZGU+JHtlc2NhcGVIdG1sKGFmdGVyKX08L2NvZGU+YDsnLFxuICAgICAgICAnICB9IGVsc2UgaWYgKGFmdGVyKSB7JyxcbiAgICAgICAgJyAgICBpZiAoaXNMYXJnZSkgeycsXG4gICAgICAgICcgICAgICByZXR1cm4gYDxkZXRhaWxzPjxzdW1tYXJ5PiR7Y2hhbmdlRW1vaml9IDxzdHJvbmc+JHtlc2NhcGVIdG1sKG5hbWUpfTwvc3Ryb25nPiAoYWRkZWQpPC9zdW1tYXJ5PjxwcmU+JHtlc2NhcGVIdG1sKGFmdGVyKX08L3ByZT48L2RldGFpbHM+YDsnLFxuICAgICAgICAnICAgIH0nLFxuICAgICAgICAnICAgIHJldHVybiBgJHtjaGFuZ2VFbW9qaX0gPHN0cm9uZz4ke2VzY2FwZUh0bWwobmFtZSl9PC9zdHJvbmc+OiA8Y29kZT4ke2VzY2FwZUh0bWwoYWZ0ZXIpfTwvY29kZT5gOycsXG4gICAgICAgICcgIH0gZWxzZSBpZiAoYmVmb3JlKSB7JyxcbiAgICAgICAgJyAgICBpZiAoaXNMYXJnZSkgeycsXG4gICAgICAgICcgICAgICByZXR1cm4gYDxkZXRhaWxzPjxzdW1tYXJ5PiR7Y2hhbmdlRW1vaml9IDxzdHJvbmc+JHtlc2NhcGVIdG1sKG5hbWUpfTwvc3Ryb25nPiAocmVtb3ZlZCk8L3N1bW1hcnk+PHByZT4ke2VzY2FwZUh0bWwoYmVmb3JlKX08L3ByZT48L2RldGFpbHM+YDsnLFxuICAgICAgICAnICAgIH0nLFxuICAgICAgICAnICAgIHJldHVybiBgJHtjaGFuZ2VFbW9qaX0gPHN0cm9uZz4ke2VzY2FwZUh0bWwobmFtZSl9PC9zdHJvbmc+OiA8cz48Y29kZT4ke2VzY2FwZUh0bWwoYmVmb3JlKX08L2NvZGU+PC9zPmA7JyxcbiAgICAgICAgJyAgfScsXG4gICAgICAgICcgIC8vIEZhbGxiYWNrOiBubyB2YWx1ZXMgYXZhaWxhYmxlIChBUEkgZGlkIG5vdCByZXR1cm4gdGhlbSknLFxuICAgICAgICAnICByZXR1cm4gYCR7Y2hhbmdlRW1vaml9IDxzdHJvbmc+JHtlc2NhcGVIdG1sKG5hbWUpfTwvc3Ryb25nPmA7JyxcbiAgICAgICAgJ30nLFxuICAgICAgICAnJyxcbiAgICAgICAgJy8qKicsXG4gICAgICAgICcgKiBFeHRyYWN0IGNoYW5nZWQgcHJvcGVydGllcy90YWdzL2F0dHJpYnV0ZXMgd2l0aCBiZWZvcmUvYWZ0ZXIgdmFsdWVzLicsXG4gICAgICAgICcgKi8nLFxuICAgICAgICAnZnVuY3Rpb24gY2hhbmdlZFByb3BlcnRpZXNIVE1MKGNoYW5nZTogYW55KTogc3RyaW5nIHsnLFxuICAgICAgICAnICBjb25zdCBkZXRhaWxzID0gY2hhbmdlPy5SZXNvdXJjZUNoYW5nZT8uRGV0YWlscyA/PyBbXTsnLFxuICAgICAgICAnICBjb25zdCBwcm9wczogc3RyaW5nW10gPSBbXTsnLFxuICAgICAgICAnICBmb3IgKGNvbnN0IGQgb2YgZGV0YWlscykgeycsXG4gICAgICAgICcgICAgY29uc3QgYXR0ciA9IGQ/LlRhcmdldD8uQXR0cmlidXRlOycsXG4gICAgICAgICcgICAgLy8gVXNlIHByb3BlcnR5IG5hbWUgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgdXNlIGF0dHJpYnV0ZSB0eXBlJyxcbiAgICAgICAgXCIgICAgY29uc3QgbmFtZSA9IGQ/LlRhcmdldD8uTmFtZSA/PyBhdHRyID8/ICd1bmtub3duJztcIixcbiAgICAgICAgJyAgICBjb25zdCBjaGFuZ2VUeXBlID0gZD8uVGFyZ2V0Py5BdHRyaWJ1dGVDaGFuZ2VUeXBlOycsXG4gICAgICAgICcgICAgY29uc3QgYmVmb3JlID0gZD8uVGFyZ2V0Py5CZWZvcmVWYWx1ZTsnLFxuICAgICAgICAnICAgIGNvbnN0IGFmdGVyID0gZD8uVGFyZ2V0Py5BZnRlclZhbHVlOycsXG4gICAgICAgICcgICAgcHJvcHMucHVzaChmb3JtYXRDaGFuZ2UobmFtZSwgY2hhbmdlVHlwZSwgYmVmb3JlLCBhZnRlcikpOycsXG4gICAgICAgICcgIH0nLFxuICAgICAgICBcIiAgcmV0dXJuIHByb3BzLmpvaW4oJzxicj4nKTtcIixcbiAgICAgICAgJ30nLFxuICAgICAgICAnJyxcbiAgICAgICAgJy8qKicsXG4gICAgICAgICcgKiBEZXRlcm1pbmUgaWYgYSBjaGFuZ2Ugc2hvdWxkIGJlIGlnbm9yZWQgYmFzZWQgb24gbG9naWNhbCBJRHMgYW5kL29yIHJlc291cmNlIHR5cGVzLicsXG4gICAgICAgIFwiICogLSBJR05PUkVfTE9HSUNBTF9JRFM6IGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGxvZ2ljYWwgSURzIHRvIGlnbm9yZSAoZGVmYXVsdCBpbmNsdWRlcyAnQ0RLTWV0YWRhdGEnKVwiLFxuICAgICAgICBcIiAqIC0gSUdOT1JFX1JFU09VUkNFX1RZUEVTOiBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiByZXNvdXJjZSB0eXBlcyB0byBpZ25vcmUgKGUuZy4sICdBV1M6OkNESzo6TWV0YWRhdGEnKVwiLFxuICAgICAgICAnICovJyxcbiAgICAgICAgJ2Z1bmN0aW9uIHNob3VsZElnbm9yZUNoYW5nZShjaGFuZ2U6IGFueSwgaWdub3JlSWRzOiBTZXQ8c3RyaW5nPiwgaWdub3JlVHlwZXM6IFNldDxzdHJpbmc+KTogYm9vbGVhbiB7JyxcbiAgICAgICAgJyAgY29uc3QgcmMgPSBjaGFuZ2U/LlJlc291cmNlQ2hhbmdlID8/IHt9OycsXG4gICAgICAgICcgIGNvbnN0IGxvZ2ljYWxJZCA9IHJjPy5Mb2dpY2FsUmVzb3VyY2VJZCBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7JyxcbiAgICAgICAgJyAgY29uc3QgcmVzb3VyY2VUeXBlID0gcmM/LlJlc291cmNlVHlwZSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7JyxcbiAgICAgICAgJyAgaWYgKGxvZ2ljYWxJZCAmJiBpZ25vcmVJZHMuaGFzKGxvZ2ljYWxJZCkpIHJldHVybiB0cnVlOycsXG4gICAgICAgICcgIGlmIChyZXNvdXJjZVR5cGUgJiYgaWdub3JlVHlwZXMuaGFzKHJlc291cmNlVHlwZSkpIHJldHVybiB0cnVlOycsXG4gICAgICAgICcgIHJldHVybiBmYWxzZTsnLFxuICAgICAgICAnfScsXG4gICAgICAgICcnLFxuICAgICAgICAnLyoqJyxcbiAgICAgICAgJyAqIEdlbmVyYXRlIHRoZSBIVE1MIGJvZHkgc2ltaWxhciB0byBwcmV0dHlfZm9ybWF0LnB5JyxcbiAgICAgICAgJyAqLycsXG4gICAgICAgICdmdW5jdGlvbiBidWlsZEh0bWwoc3RhY2tOYW1lOiBzdHJpbmcsIGNoYW5nZXM6IGFueVtdKTogc3RyaW5nIHsnLFxuICAgICAgICAnICBsZXQgYm9keSA9IGA8aDE+Q2hhbmdlIHNldDwvaDE+PGgyPlN0YWNrIE5hbWU6ICR7c3RhY2tOYW1lfTwvaDI+PGJyPmA7JyxcbiAgICAgICAgJyAgaWYgKChjaGFuZ2VzPy5sZW5ndGggPz8gMCkgPiAwKSB7JyxcbiAgICAgICAgXCIgICAgYm9keSArPSAnPHRhYmxlPjx0cj48dGg+QWN0aW9uJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC90aD48dGg+SUQ8L3RoPjx0aD5UeXBlPC90aD48dGg+UmVwbGFjZW1lbnQ8L3RoPjx0aD5EZXRhaWxzPC90aD48L3RyPic7XCIsXG4gICAgICAgICcgICAgZm9yIChjb25zdCBjIG9mIGNoYW5nZXMpIHsnLFxuICAgICAgICAnICAgICAgY29uc3QgcmMgPSBjPy5SZXNvdXJjZUNoYW5nZSA/PyB7fTsnLFxuICAgICAgICAnICAgICAgY29uc3QgYWN0aW9uID0gYWN0aW9uQ2hpcChyYz8uQWN0aW9uKTsnLFxuICAgICAgICBcIiAgICAgIGNvbnN0IGxvZ2ljYWxJZCA9IHJjPy5Mb2dpY2FsUmVzb3VyY2VJZCA/PyAnLSc7XCIsXG4gICAgICAgIFwiICAgICAgY29uc3QgdHlwZSA9IHJjPy5SZXNvdXJjZVR5cGUgPz8gJy0nO1wiLFxuICAgICAgICBcIiAgICAgIGNvbnN0IHJlcGxhY2VtZW50ID0gcmM/LlJlcGxhY2VtZW50ID8/ICctJztcIixcbiAgICAgICAgJyAgICAgIGNvbnN0IGRldGFpbHMgPSBjaGFuZ2VkUHJvcGVydGllc0hUTUwoYyk7JyxcbiAgICAgICAgJycsXG4gICAgICAgIFwiICAgICAgYm9keSArPSAnPHRyPic7XCIsXG4gICAgICAgICcgICAgICBib2R5ICs9IGA8dGQ+JHthY3Rpb259PC90ZD5gOycsXG4gICAgICAgICcgICAgICBib2R5ICs9IGA8dGQ+JHtsb2dpY2FsSWR9PC90ZD5gOycsXG4gICAgICAgICcgICAgICBib2R5ICs9IGA8dGQ+JHt0eXBlfTwvdGQ+YDsnLFxuICAgICAgICAnICAgICAgYm9keSArPSBgPHRkPiR7cmVwbGFjZW1lbnR9PC90ZD5gOycsXG4gICAgICAgICcgICAgICBib2R5ICs9IGA8dGQ+JHtkZXRhaWxzfTwvdGQ+YDsnLFxuICAgICAgICBcIiAgICAgIGJvZHkgKz0gJzwvdHI+JztcIixcbiAgICAgICAgJyAgICB9JyxcbiAgICAgICAgXCIgICAgYm9keSArPSAnPC90YWJsZT4nO1wiLFxuICAgICAgICAnICB9IGVsc2UgeycsXG4gICAgICAgIFwiICAgIGJvZHkgKz0gJ25vIGNoYW5nZS4nO1wiLFxuICAgICAgICAnICB9JyxcbiAgICAgICAgJyAgcmV0dXJuIGJvZHk7JyxcbiAgICAgICAgJ30nLFxuICAgICAgICAnJyxcbiAgICAgICAgJy8qKicsXG4gICAgICAgICcgKiBQb2xsIERlc2NyaWJlQ2hhbmdlU2V0IHVudGlsIGEgdGVybWluYWwgc3RhdHVzLCB0aGVuIHBhZ2luYXRlIHRvIHJldHJpZXZlIGFsbCBDaGFuZ2VzLicsXG4gICAgICAgICcgKi8nLFxuICAgICAgICAnYXN5bmMgZnVuY3Rpb24gZ2V0VGVybWluYWxDaGFuZ2VTZXQoJyxcbiAgICAgICAgJyAgY2xpZW50OiBDbG91ZEZvcm1hdGlvbkNsaWVudCwnLFxuICAgICAgICAnICBzdGFja05hbWU6IHN0cmluZywnLFxuICAgICAgICAnICBjaGFuZ2VTZXROYW1lOiBzdHJpbmcsJyxcbiAgICAgICAgJyAgbWF4QXR0ZW1wdHMgPSA2MCwnLFxuICAgICAgICAnICBkZWxheU1zID0gMzAwMCwnLFxuICAgICAgICAnKTogUHJvbWlzZTx7IHN0YXR1cz86IHN0cmluZzsgc3RhdHVzUmVhc29uPzogc3RyaW5nOyBjaGFuZ2VzOiBhbnlbXSB9PiB7JyxcbiAgICAgICAgJyAgZm9yIChsZXQgYXR0ZW1wdCA9IDE7IGF0dGVtcHQgPD0gbWF4QXR0ZW1wdHM7IGF0dGVtcHQrKykgeycsXG4gICAgICAgICcgICAgY29uc3QgcmVzcCA9IGF3YWl0IGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZUNoYW5nZVNldENvbW1hbmQoeycsXG4gICAgICAgICcgICAgICBTdGFja05hbWU6IHN0YWNrTmFtZSwnLFxuICAgICAgICAnICAgICAgQ2hhbmdlU2V0TmFtZTogY2hhbmdlU2V0TmFtZSwnLFxuICAgICAgICAnICAgICAgSW5jbHVkZVByb3BlcnR5VmFsdWVzOiB0cnVlLCcsXG4gICAgICAgICcgICAgfSkpOycsXG4gICAgICAgICcnLFxuICAgICAgICAnICAgIGNvbnN0IHN0YXR1cyA9IHJlc3AuU3RhdHVzOycsXG4gICAgICAgICcgICAgY29uc3Qgc3RhdHVzUmVhc29uID0gcmVzcC5TdGF0dXNSZWFzb247JyxcbiAgICAgICAgJycsXG4gICAgICAgIFwiICAgIGlmIChzdGF0dXMgPT09ICdDUkVBVEVfQ09NUExFVEUnIHx8IHN0YXR1cyA9PT0gJ0ZBSUxFRCcpIHtcIixcbiAgICAgICAgJyAgICAgIC8vIEdhdGhlciBhbGwgcGFnZXMnLFxuICAgICAgICAnICAgICAgY29uc3QgY2hhbmdlczogYW55W10gPSBbXTsnLFxuICAgICAgICAnICAgICAgaWYgKHJlc3AuQ2hhbmdlcykgY2hhbmdlcy5wdXNoKC4uLnJlc3AuQ2hhbmdlcyk7JyxcbiAgICAgICAgJyAgICAgIGxldCBuZXh0ID0gcmVzcC5OZXh0VG9rZW47JyxcbiAgICAgICAgJyAgICAgIHdoaWxlIChuZXh0KSB7JyxcbiAgICAgICAgJyAgICAgICAgY29uc3QgcGFnZSA9IGF3YWl0IGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZUNoYW5nZVNldENvbW1hbmQoeycsXG4gICAgICAgICcgICAgICAgICAgU3RhY2tOYW1lOiBzdGFja05hbWUsJyxcbiAgICAgICAgJyAgICAgICAgICBDaGFuZ2VTZXROYW1lOiBjaGFuZ2VTZXROYW1lLCcsXG4gICAgICAgICcgICAgICAgICAgSW5jbHVkZVByb3BlcnR5VmFsdWVzOiB0cnVlLCcsXG4gICAgICAgICcgICAgICAgICAgTmV4dFRva2VuOiBuZXh0LCcsXG4gICAgICAgICcgICAgICAgIH0pKTsnLFxuICAgICAgICAnICAgICAgICBpZiAocGFnZS5DaGFuZ2VzKSBjaGFuZ2VzLnB1c2goLi4ucGFnZS5DaGFuZ2VzKTsnLFxuICAgICAgICAnICAgICAgICBuZXh0ID0gcGFnZS5OZXh0VG9rZW47JyxcbiAgICAgICAgJyAgICAgIH0nLFxuICAgICAgICAnICAgICAgcmV0dXJuIHsgc3RhdHVzLCBzdGF0dXNSZWFzb24sIGNoYW5nZXMgfTsnLFxuICAgICAgICAnICAgIH0nLFxuICAgICAgICAnJyxcbiAgICAgICAgJyAgICAvLyBOb3QgdGVybWluYWwgeWV0OyB3YWl0IGFuZCByZXRyeScsXG4gICAgICAgICcgICAgYXdhaXQgc2xlZXAoZGVsYXlNcyk7JyxcbiAgICAgICAgJyAgfScsXG4gICAgICAgICcnLFxuICAgICAgICBcIiAgdGhyb3cgbmV3IEVycm9yKCdUaW1lZCBvdXQgd2FpdGluZyBmb3IgY2hhbmdlIHNldCB0byByZWFjaCBhIHRlcm1pbmFsIHN0YXR1cy4nKTtcIixcbiAgICAgICAgJ30nLFxuICAgICAgICAnJyxcbiAgICAgICAgJy8qKicsXG4gICAgICAgICcgKiBQYXJzZSB0aGUgTGluayBoZWFkZXIgZnJvbSBHaXRIdWIgQVBJIHJlc3BvbnNlcyBmb3IgcGFnaW5hdGlvbi4nLFxuICAgICAgICAnICovJyxcbiAgICAgICAgJ2Z1bmN0aW9uIHBhcnNlTGlua0hlYWRlcihoZWFkZXI6IHN0cmluZyB8IG51bGwpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHsnLFxuICAgICAgICAnICBjb25zdCBsaW5rczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9OycsXG4gICAgICAgICcgIGlmICghaGVhZGVyKSByZXR1cm4gbGlua3M7JyxcbiAgICAgICAgXCIgIGZvciAoY29uc3QgcGFydCBvZiBoZWFkZXIuc3BsaXQoJywnKSkge1wiLFxuICAgICAgICAnICAgIGNvbnN0IG1hdGNoID0gcGFydC5tYXRjaCgvPChbXj5dKyk+O1xcXFxzKnJlbD1cIihbXlwiXSspXCIvKTsnLFxuICAgICAgICAnICAgIGlmIChtYXRjaCkgbGlua3NbbWF0Y2hbMl1dID0gbWF0Y2hbMV07JyxcbiAgICAgICAgJyAgfScsXG4gICAgICAgICcgIHJldHVybiBsaW5rczsnLFxuICAgICAgICAnfScsXG4gICAgICAgICcnLFxuICAgICAgICAnLyoqJyxcbiAgICAgICAgJyAqIFNlYXJjaCBleGlzdGluZyBQUiBjb21tZW50cyBmb3Igb25lIGNvbnRhaW5pbmcgdGhlIGdpdmVuIG1hcmtlci4nLFxuICAgICAgICAnICogUmV0dXJucyB0aGUgY29tbWVudCBJRCBpZiBmb3VuZCwgbnVsbCBvdGhlcndpc2UuJyxcbiAgICAgICAgJyAqLycsXG4gICAgICAgICdhc3luYyBmdW5jdGlvbiBmaW5kRXhpc3RpbmdDb21tZW50KGNvbW1lbnRzVXJsOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIG1hcmtlcjogc3RyaW5nKTogUHJvbWlzZTxudW1iZXIgfCBudWxsPiB7JyxcbiAgICAgICAgJyAgbGV0IHVybDogc3RyaW5nIHwgdW5kZWZpbmVkID0gYCR7Y29tbWVudHNVcmx9P3Blcl9wYWdlPTEwMGA7JyxcbiAgICAgICAgJyAgd2hpbGUgKHVybCkgeycsXG4gICAgICAgICcgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2godXJsLCB7JyxcbiAgICAgICAgJyAgICAgIGhlYWRlcnM6IHsnLFxuICAgICAgICBcIiAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBgdG9rZW4gJHt0b2tlbn1gLFwiLFxuICAgICAgICBcIiAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi92bmQuZ2l0aHViK2pzb24nLFwiLFxuICAgICAgICAnICAgICAgfSwnLFxuICAgICAgICAnICAgIH0pOycsXG4gICAgICAgICcgICAgaWYgKCFyZXMub2spIHJldHVybiBudWxsOycsXG4gICAgICAgICcgICAgY29uc3QgY29tbWVudHM6IGFueVtdID0gYXdhaXQgcmVzLmpzb24oKTsnLFxuICAgICAgICAnICAgIGZvciAoY29uc3QgYyBvZiBjb21tZW50cykgeycsXG4gICAgICAgIFwiICAgICAgaWYgKHR5cGVvZiBjLmJvZHkgPT09ICdzdHJpbmcnICYmIGMuYm9keS5pbmNsdWRlcyhtYXJrZXIpKSB7XCIsXG4gICAgICAgICcgICAgICAgIHJldHVybiBjLmlkOycsXG4gICAgICAgICcgICAgICB9JyxcbiAgICAgICAgJyAgICB9JyxcbiAgICAgICAgXCIgICAgY29uc3QgbGlua3MgPSBwYXJzZUxpbmtIZWFkZXIocmVzLmhlYWRlcnMuZ2V0KCdsaW5rJykpO1wiLFxuICAgICAgICAnICAgIHVybCA9IGxpbmtzLm5leHQ7JyxcbiAgICAgICAgJyAgfScsXG4gICAgICAgICcgIHJldHVybiBudWxsOycsXG4gICAgICAgICd9JyxcbiAgICAgICAgJycsXG4gICAgICAgICcvKionLFxuICAgICAgICAnICogQ3JlYXRlIG9yIHVwZGF0ZSBhIFBSIGNvbW1lbnQuIFVzZXMgYW4gSFRNTCBtYXJrZXIgdG8gZmluZCBleGlzdGluZyBjb21tZW50cy4nLFxuICAgICAgICAnICogSWYgZm91bmQsIFBBVENIZXMgdGhlIGV4aXN0aW5nIGNvbW1lbnQ7IG90aGVyd2lzZSBQT1NUcyBhIG5ldyBvbmUuJyxcbiAgICAgICAgJyAqLycsXG4gICAgICAgICdhc3luYyBmdW5jdGlvbiB1cHNlcnRHaXRodWJDb21tZW50KGNvbW1lbnRzVXJsOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIGJvZHk6IHN0cmluZywgbWFya2VyOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHsnLFxuICAgICAgICAnICBjb25zdCBtYXJrZWRCb2R5ID0gYCR7bWFya2VyfVxcXFxuJHtib2R5fWA7JyxcbiAgICAgICAgJyAgY29uc3QgZXhpc3RpbmdJZCA9IGF3YWl0IGZpbmRFeGlzdGluZ0NvbW1lbnQoY29tbWVudHNVcmwsIHRva2VuLCBtYXJrZXIpOycsXG4gICAgICAgICcnLFxuICAgICAgICAnICBsZXQgcmVzOiBSZXNwb25zZTsnLFxuICAgICAgICAnICBpZiAoZXhpc3RpbmdJZCkgeycsXG4gICAgICAgIFwiICAgIGNvbnN0IGJhc2VVcmwgPSBjb21tZW50c1VybC5zdWJzdHJpbmcoMCwgY29tbWVudHNVcmwuaW5kZXhPZignL2lzc3Vlcy8nKSk7XCIsXG4gICAgICAgICcgICAgY29uc3QgcGF0Y2hVcmwgPSBgJHtiYXNlVXJsfS9pc3N1ZXMvY29tbWVudHMvJHtleGlzdGluZ0lkfWA7JyxcbiAgICAgICAgJyAgICByZXMgPSBhd2FpdCBmZXRjaChwYXRjaFVybCwgeycsXG4gICAgICAgIFwiICAgICAgbWV0aG9kOiAnUEFUQ0gnLFwiLFxuICAgICAgICAnICAgICAgaGVhZGVyczogeycsXG4gICAgICAgIFwiICAgICAgICAnQXV0aG9yaXphdGlvbic6IGB0b2tlbiAke3Rva2VufWAsXCIsXG4gICAgICAgIFwiICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFwiLFxuICAgICAgICBcIiAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi92bmQuZ2l0aHViK2pzb24nLFwiLFxuICAgICAgICAnICAgICAgfSwnLFxuICAgICAgICAnICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBib2R5OiBtYXJrZWRCb2R5IH0pLCcsXG4gICAgICAgICcgICAgfSk7JyxcbiAgICAgICAgJyAgfSBlbHNlIHsnLFxuICAgICAgICAnICAgIHJlcyA9IGF3YWl0IGZldGNoKGNvbW1lbnRzVXJsLCB7JyxcbiAgICAgICAgXCIgICAgICBtZXRob2Q6ICdQT1NUJyxcIixcbiAgICAgICAgJyAgICAgIGhlYWRlcnM6IHsnLFxuICAgICAgICBcIiAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBgdG9rZW4gJHt0b2tlbn1gLFwiLFxuICAgICAgICBcIiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcIixcbiAgICAgICAgXCIgICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vdm5kLmdpdGh1Yitqc29uJyxcIixcbiAgICAgICAgJyAgICAgIH0sJyxcbiAgICAgICAgJyAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgYm9keTogbWFya2VkQm9keSB9KSwnLFxuICAgICAgICAnICAgIH0pOycsXG4gICAgICAgICcgIH0nLFxuICAgICAgICAnJyxcbiAgICAgICAgJyAgaWYgKCFyZXMub2spIHsnLFxuICAgICAgICBcIiAgICBjb25zdCB0ZXh0ID0gYXdhaXQgcmVzLnRleHQoKS5jYXRjaCgoKSA9PiAnJyk7XCIsXG4gICAgICAgIFwiICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvICR7ZXhpc3RpbmdJZCA/ICd1cGRhdGUnIDogJ3Bvc3QnfSBHaXRIdWIgY29tbWVudDogJHtyZXMuc3RhdHVzfSAke3Jlcy5zdGF0dXNUZXh0fSAke3RleHR9YCk7XCIsXG4gICAgICAgICcgIH0nLFxuICAgICAgICAnfScsXG4gICAgICAgICcnLFxuICAgICAgICAnYXN5bmMgZnVuY3Rpb24gYXBwZW5kU3RlcFN1bW1hcnkoc3VtbWFyeVBhdGg6IHN0cmluZywgY29udGVudDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7JyxcbiAgICAgICAgXCIgIGF3YWl0IGFwcGVuZEZpbGUoc3VtbWFyeVBhdGgsIGAke2NvbnRlbnR9XFxcXG5gLCB7IGVuY29kaW5nOiAndXRmOCcgfSk7XCIsXG4gICAgICAgICd9JyxcbiAgICAgICAgJycsXG4gICAgICAgICcvKionLFxuICAgICAgICAnICogQ2hlY2sgY2FjaGVkIGRyaWZ0IHN0YXR1cyBmb3IgdGhlIHN0YWNrIGFuZCByZXR1cm4gYW4gSFRNTCBiYW5uZXIuJyxcbiAgICAgICAgJyAqIE5vbi1mYXRhbDogcmV0dXJucyBlbXB0eSBzdHJpbmcgb24gYW55IGVycm9yLicsXG4gICAgICAgICcgKi8nLFxuICAgICAgICAnYXN5bmMgZnVuY3Rpb24gZ2V0RHJpZnRCYW5uZXJIdG1sKGNsaWVudDogQ2xvdWRGb3JtYXRpb25DbGllbnQsIHN0YWNrTmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHsnLFxuICAgICAgICAnICBjb25zdCBzdGFja1Jlc3AgPSBhd2FpdCBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHsgU3RhY2tOYW1lOiBzdGFja05hbWUgfSkpOycsXG4gICAgICAgICcgIGNvbnN0IHN0YWNrID0gc3RhY2tSZXNwLlN0YWNrcz8uWzBdOycsXG4gICAgICAgIFwiICBpZiAoIXN0YWNrKSByZXR1cm4gJyc7XCIsXG4gICAgICAgICcnLFxuICAgICAgICAnICBjb25zdCBkcmlmdEluZm8gPSBzdGFjay5EcmlmdEluZm9ybWF0aW9uOycsXG4gICAgICAgICcgIGNvbnN0IGRyaWZ0U3RhdHVzID0gZHJpZnRJbmZvPy5TdGFja0RyaWZ0U3RhdHVzOycsXG4gICAgICAgICcgIGNvbnN0IGxhc3RDaGVja2VkID0gZHJpZnRJbmZvPy5MYXN0Q2hlY2tUaW1lc3RhbXA7JyxcbiAgICAgICAgJycsXG4gICAgICAgIFwiICBpZiAoZHJpZnRTdGF0dXMgPT09ICdJTl9TWU5DJykgcmV0dXJuICcnO1wiLFxuICAgICAgICAnJyxcbiAgICAgICAgXCIgIGlmIChkcmlmdFN0YXR1cyA9PT0gJ05PVF9DSEVDS0VEJykge1wiLFxuICAgICAgICBcIiAgICByZXR1cm4gJzxibG9ja3F1b3RlPjxwPuKEue+4jyBEcmlmdCBkZXRlY3Rpb24gaGFzIG5vdCBiZWVuIHJ1biBmb3IgdGhpcyBzdGFjay48L3A+PC9ibG9ja3F1b3RlPic7XCIsXG4gICAgICAgICcgIH0nLFxuICAgICAgICAnJyxcbiAgICAgICAgXCIgIGlmIChkcmlmdFN0YXR1cyA9PT0gJ0RFVEVDVElPTl9JTl9QUk9HUkVTUycpIHtcIixcbiAgICAgICAgXCIgICAgcmV0dXJuICc8YmxvY2txdW90ZT48cD7ij7MgRHJpZnQgZGV0ZWN0aW9uIGlzIGN1cnJlbnRseSBpbiBwcm9ncmVzcy48L3A+PC9ibG9ja3F1b3RlPic7XCIsXG4gICAgICAgICcgIH0nLFxuICAgICAgICAnJyxcbiAgICAgICAgXCIgIGlmIChkcmlmdFN0YXR1cyA9PT0gJ0RSSUZURUQnKSB7XCIsXG4gICAgICAgIFwiICAgIGxldCBiYW5uZXIgPSAnPGJsb2NrcXVvdGU+JztcIixcbiAgICAgICAgJycsXG4gICAgICAgICcgICAgdHJ5IHsnLFxuICAgICAgICAnICAgICAgY29uc3QgZHJpZnRzUmVzcCA9IGF3YWl0IGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZVN0YWNrUmVzb3VyY2VEcmlmdHNDb21tYW5kKHsnLFxuICAgICAgICAnICAgICAgICBTdGFja05hbWU6IHN0YWNrTmFtZSwnLFxuICAgICAgICBcIiAgICAgICAgU3RhY2tSZXNvdXJjZURyaWZ0U3RhdHVzRmlsdGVyczogWydNT0RJRklFRCcsICdERUxFVEVEJ10sXCIsXG4gICAgICAgICcgICAgICB9KSk7JyxcbiAgICAgICAgJyAgICAgIGNvbnN0IGRyaWZ0cyA9IGRyaWZ0c1Jlc3AuU3RhY2tSZXNvdXJjZURyaWZ0cyA/PyBbXTsnLFxuICAgICAgICAnICAgICAgY29uc3QgY291bnQgPSBkcmlmdHMubGVuZ3RoOycsXG4gICAgICAgIFwiICAgICAgY29uc3QgdHMgPSBsYXN0Q2hlY2tlZCA/IGxhc3RDaGVja2VkLnRvSVNPU3RyaW5nKCkgOiAndW5rbm93bic7XCIsXG4gICAgICAgICcnLFxuICAgICAgICBcIiAgICAgIGJhbm5lciArPSBgPGgzPuKaoO+4jyBTdGFjayBoYXMgZHJpZnRlZCAoJHtjb3VudH0gcmVzb3VyY2Uke2NvdW50ICE9PSAxID8gJ3MnIDogJyd9IG91dCBvZiBzeW5jKTwvaDM+YDtcIixcbiAgICAgICAgJyAgICAgIGJhbm5lciArPSBgPHA+TGFzdCBkcmlmdCBjaGVjazogPGVtPiR7dHN9PC9lbT48L3A+YDsnLFxuICAgICAgICAnJyxcbiAgICAgICAgJyAgICAgIGlmIChjb3VudCA+IDApIHsnLFxuICAgICAgICBcIiAgICAgICAgYmFubmVyICs9ICc8ZGV0YWlscz48c3VtbWFyeT5WaWV3IGRyaWZ0ZWQgcmVzb3VyY2VzPC9zdW1tYXJ5Pic7XCIsXG4gICAgICAgIFwiICAgICAgICBiYW5uZXIgKz0gJzx0YWJsZT48dHI+PHRoPlJlc291cmNlPC90aD48dGg+VHlwZTwvdGg+PHRoPkRyaWZ0IFN0YXR1czwvdGg+PC90cj4nO1wiLFxuICAgICAgICAnICAgICAgICBmb3IgKGNvbnN0IGQgb2YgZHJpZnRzKSB7JyxcbiAgICAgICAgXCIgICAgICAgICAgY29uc3QgbG9naWNhbElkID0gZC5Mb2dpY2FsUmVzb3VyY2VJZCA/PyAnLSc7XCIsXG4gICAgICAgIFwiICAgICAgICAgIGNvbnN0IHJlc291cmNlVHlwZSA9IGQuUmVzb3VyY2VUeXBlID8/ICctJztcIixcbiAgICAgICAgXCIgICAgICAgICAgY29uc3Qgc3RhdHVzID0gZC5TdGFja1Jlc291cmNlRHJpZnRTdGF0dXMgPz8gJy0nO1wiLFxuICAgICAgICAnICAgICAgICAgIGJhbm5lciArPSBgPHRyPjx0ZD4ke2xvZ2ljYWxJZH08L3RkPjx0ZD4ke3Jlc291cmNlVHlwZX08L3RkPjx0ZD4ke3N0YXR1c308L3RkPjwvdHI+YDsnLFxuICAgICAgICAnICAgICAgICB9JyxcbiAgICAgICAgXCIgICAgICAgIGJhbm5lciArPSAnPC90YWJsZT48L2RldGFpbHM+JztcIixcbiAgICAgICAgJyAgICAgIH0nLFxuICAgICAgICAnICAgIH0gY2F0Y2ggKGU6IGFueSkgeycsXG4gICAgICAgIFwiICAgICAgY29uc3QgdHMgPSBsYXN0Q2hlY2tlZCA/IGxhc3RDaGVja2VkLnRvSVNPU3RyaW5nKCkgOiAndW5rbm93bic7XCIsXG4gICAgICAgIFwiICAgICAgYmFubmVyICs9ICc8aDM+4pqg77iPIFN0YWNrIGhhcyBkcmlmdGVkPC9oMz4nO1wiLFxuICAgICAgICAnICAgICAgYmFubmVyICs9IGA8cD5MYXN0IGRyaWZ0IGNoZWNrOiA8ZW0+JHt0c308L2VtPjwvcD5gOycsXG4gICAgICAgIFwiICAgICAgYmFubmVyICs9IGA8cD48ZW0+Q291bGQgbm90IHJldHJpZXZlIGRyaWZ0IGRldGFpbHM6ICR7ZT8ubWVzc2FnZSA/PyAndW5rbm93biBlcnJvcid9PC9lbT48L3A+YDtcIixcbiAgICAgICAgJyAgICB9JyxcbiAgICAgICAgJycsXG4gICAgICAgIFwiICAgIGJhbm5lciArPSAnPC9ibG9ja3F1b3RlPic7XCIsXG4gICAgICAgICcgICAgcmV0dXJuIGJhbm5lcjsnLFxuICAgICAgICAnICB9JyxcbiAgICAgICAgJycsXG4gICAgICAgIFwiICByZXR1cm4gJyc7XCIsXG4gICAgICAgICd9JyxcbiAgICAgICAgJycsXG4gICAgICAgICdhc3luYyBmdW5jdGlvbiBtYWluKCkgeycsXG4gICAgICAgICcgIGNvbnN0IHsnLFxuICAgICAgICAnICAgIFNUQUNLX05BTUUsJyxcbiAgICAgICAgJyAgICBDSEFOR0VfU0VUX05BTUUsJyxcbiAgICAgICAgJyAgICBBV1NfUkVHSU9OLCcsXG4gICAgICAgICcgICAgR0lUSFVCX1RPS0VOLCcsXG4gICAgICAgICcgICAgR0lUSFVCX0NPTU1FTlRfVVJMLCcsXG4gICAgICAgICcgICAgR0lUSFVCX1NURVBfU1VNTUFSWSwnLFxuICAgICAgICAnICAgIElHTk9SRV9MT0dJQ0FMX0lEUywnLFxuICAgICAgICAnICAgIElHTk9SRV9SRVNPVVJDRV9UWVBFUywnLFxuICAgICAgICAnICB9ID0gcHJvY2Vzcy5lbnY7JyxcbiAgICAgICAgJycsXG4gICAgICAgICcgIGlmICghU1RBQ0tfTkFNRSkgeycsXG4gICAgICAgIFwiICAgIHRocm93IG5ldyBFcnJvcignU1RBQ0tfTkFNRSBpcyByZXF1aXJlZCcpO1wiLFxuICAgICAgICAnICB9JyxcbiAgICAgICAgJyAgY29uc3QgcmVnaW9uID0gQVdTX1JFR0lPTiB8fCBwcm9jZXNzLmVudi5BV1NfREVGQVVMVF9SRUdJT047JyxcbiAgICAgICAgJyAgaWYgKCFyZWdpb24pIHsnLFxuICAgICAgICBcIiAgICB0aHJvdyBuZXcgRXJyb3IoJ0FXU19SRUdJT04gaXMgcmVxdWlyZWQnKTtcIixcbiAgICAgICAgJyAgfScsXG4gICAgICAgICcnLFxuICAgICAgICAnICBjb25zdCBjaGFuZ2VTZXROYW1lID0gQ0hBTkdFX1NFVF9OQU1FIHx8IFNUQUNLX05BTUU7JyxcbiAgICAgICAgJyAgY29uc3QgbWFya2VyID0gYDwhLS0gY2RrLWRpZmY6c3RhY2s6JHtTVEFDS19OQU1FfSAtLT5gOycsXG4gICAgICAgICcnLFxuICAgICAgICAnICBjb25zdCBjbGllbnQgPSBuZXcgQ2xvdWRGb3JtYXRpb25DbGllbnQoeyByZWdpb24gfSk7JyxcbiAgICAgICAgJycsXG4gICAgICAgICcgIGxldCBzdGF0dXM6IHN0cmluZyB8IHVuZGVmaW5lZDsnLFxuICAgICAgICAnICBsZXQgc3RhdHVzUmVhc29uOiBzdHJpbmcgfCB1bmRlZmluZWQ7JyxcbiAgICAgICAgJyAgbGV0IGNoYW5nZXM6IGFueVtdID0gW107JyxcbiAgICAgICAgJycsXG4gICAgICAgICcgIHRyeSB7JyxcbiAgICAgICAgJyAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRUZXJtaW5hbENoYW5nZVNldChjbGllbnQsIFNUQUNLX05BTUUsIGNoYW5nZVNldE5hbWUpOycsXG4gICAgICAgICcgICAgc3RhdHVzID0gcmVzdWx0LnN0YXR1czsnLFxuICAgICAgICAnICAgIHN0YXR1c1JlYXNvbiA9IHJlc3VsdC5zdGF0dXNSZWFzb247JyxcbiAgICAgICAgJyAgICBjaGFuZ2VzID0gcmVzdWx0LmNoYW5nZXMgPz8gW107JyxcbiAgICAgICAgJyAgfSBjYXRjaCAoZXJyOiBhbnkpIHsnLFxuICAgICAgICAnICAgIC8vIElmIERlc2NyaWJlQ2hhbmdlU2V0IGZhaWxzIGVudGlyZWx5LCBzdXJmYWNlIHRoZSBlcnJvcicsXG4gICAgICAgIFwiICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGRlc2NyaWJpbmcgY2hhbmdlIHNldDonLCBlcnI/Lm1lc3NhZ2UgfHwgZXJyKTtcIixcbiAgICAgICAgJyAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTsnLFxuICAgICAgICAnICAgIHJldHVybjsnLFxuICAgICAgICAnICB9JyxcbiAgICAgICAgJycsXG4gICAgICAgIFwiICAvLyBBcHBseSBpZ25vcmVzIGZyb20gZW52IHZhcnMgKElEcyBhbmQgdHlwZXMpLiBEZWZhdWx0IGlnbm9yZSBJRHMgaW5jbHVkZSAnQ0RLTWV0YWRhdGEnLlwiLFxuICAgICAgICAnICBjb25zdCBpZ25vcmVJZFNldCA9IG5ldyBTZXQoJyxcbiAgICAgICAgXCIgICAgKElHTk9SRV9MT0dJQ0FMX0lEUyA/PyAnQ0RLTWV0YWRhdGEnKVwiLFxuICAgICAgICBcIiAgICAgIC5zcGxpdCgnLCcpXCIsXG4gICAgICAgICcgICAgICAubWFwKHMgPT4gcy50cmltKCkpJyxcbiAgICAgICAgJyAgICAgIC5maWx0ZXIoQm9vbGVhbiksJyxcbiAgICAgICAgJyAgKTsnLFxuICAgICAgICAnICBjb25zdCBpZ25vcmVUeXBlU2V0ID0gbmV3IFNldCgnLFxuICAgICAgICBcIiAgICAoSUdOT1JFX1JFU09VUkNFX1RZUEVTID8/ICcnKVwiLFxuICAgICAgICBcIiAgICAgIC5zcGxpdCgnLCcpXCIsXG4gICAgICAgICcgICAgICAubWFwKHMgPT4gcy50cmltKCkpJyxcbiAgICAgICAgJyAgICAgIC5maWx0ZXIoQm9vbGVhbiksJyxcbiAgICAgICAgJyAgKTsnLFxuICAgICAgICAnICBjb25zdCBmaWx0ZXJlZENoYW5nZXMgPSBjaGFuZ2VzLmZpbHRlcihjID0+ICFzaG91bGRJZ25vcmVDaGFuZ2UoYywgaWdub3JlSWRTZXQsIGlnbm9yZVR5cGVTZXQpKTsnLFxuICAgICAgICAnJyxcbiAgICAgICAgJyAgLy8gQnVpbGQgSFRNTCBleGFjdGx5IGxpa2UgcHJldHR5X2Zvcm1hdC5weSBsb2dpYyAodGFibGUgd2hlbiB0aGVyZSBhcmUgY2hhbmdlczsgXCJubyBjaGFuZ2UuXCIgb3RoZXJ3aXNlKS4nLFxuICAgICAgICAnICBjb25zdCBodG1sID0gYnVpbGRIdG1sKFNUQUNLX05BTUUsIGZpbHRlcmVkQ2hhbmdlcyk7JyxcbiAgICAgICAgJycsXG4gICAgICAgICcgIC8vIENoZWNrIGNhY2hlZCBkcmlmdCBzdGF0dXMgKG5vbi1mYXRhbCknLFxuICAgICAgICBcIiAgbGV0IGRyaWZ0QmFubmVyID0gJyc7XCIsXG4gICAgICAgICcgIHRyeSB7JyxcbiAgICAgICAgJyAgICBkcmlmdEJhbm5lciA9IGF3YWl0IGdldERyaWZ0QmFubmVySHRtbChjbGllbnQsIFNUQUNLX05BTUUpOycsXG4gICAgICAgICcgIH0gY2F0Y2ggKGU6IGFueSkgeycsXG4gICAgICAgIFwiICAgIGNvbnNvbGUuZXJyb3IoJ0RyaWZ0IGNoZWNrIGZhaWxlZDonLCBlPy5tZXNzYWdlIHx8IGUpO1wiLFxuICAgICAgICAnICB9JyxcbiAgICAgICAgJyAgY29uc3QgZnVsbEh0bWwgPSBkcmlmdEJhbm5lciArIGh0bWw7JyxcbiAgICAgICAgJycsXG4gICAgICAgICcgIC8vIFByaW50IHRvIHN0ZG91dCcsXG4gICAgICAgICcgIGNvbnNvbGUubG9nKGZ1bGxIdG1sKTsnLFxuICAgICAgICAnJyxcbiAgICAgICAgJyAgLy8gT3B0aW9uYWxseSBhcHBlbmQgdG8gR2l0SHViIFN0ZXAgU3VtbWFyeScsXG4gICAgICAgICcgIGlmIChHSVRIVUJfU1RFUF9TVU1NQVJZKSB7JyxcbiAgICAgICAgJyAgICB0cnkgeycsXG4gICAgICAgICcgICAgICBhd2FpdCBhcHBlbmRTdGVwU3VtbWFyeShHSVRIVUJfU1RFUF9TVU1NQVJZLCBmdWxsSHRtbCk7JyxcbiAgICAgICAgJyAgICAgIGNvbnNvbGUuZXJyb3IoYEFwcGVuZGVkIEhUTUwgdG8gR0lUSFVCX1NURVBfU1VNTUFSWTogJHtHSVRIVUJfU1RFUF9TVU1NQVJZfWApOycsXG4gICAgICAgICcgICAgfSBjYXRjaCAoZTogYW55KSB7JyxcbiAgICAgICAgXCIgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gYXBwZW5kIHRvIEdJVEhVQl9TVEVQX1NVTU1BUlk6JywgZT8ubWVzc2FnZSB8fCBlKTtcIixcbiAgICAgICAgJyAgICB9JyxcbiAgICAgICAgJyAgfScsXG4gICAgICAgICcnLFxuICAgICAgICAnICAvLyBVcHNlcnQgUFIgY29tbWVudCAoZmluZCBleGlzdGluZyBieSBtYXJrZXIsIHVwZGF0ZSBvciBjcmVhdGUpJyxcbiAgICAgICAgJyAgaWYgKEdJVEhVQl9UT0tFTiAmJiBHSVRIVUJfQ09NTUVOVF9VUkwpIHsnLFxuICAgICAgICAnICAgIHRyeSB7JyxcbiAgICAgICAgJyAgICAgIGF3YWl0IHVwc2VydEdpdGh1YkNvbW1lbnQoR0lUSFVCX0NPTU1FTlRfVVJMLCBHSVRIVUJfVE9LRU4sIGZ1bGxIdG1sLCBtYXJrZXIpOycsXG4gICAgICAgIFwiICAgICAgY29uc29sZS5lcnJvcignVXBzZXJ0ZWQgR2l0SHViIFBSIGNvbW1lbnQuJyk7XCIsXG4gICAgICAgICcgICAgfSBjYXRjaCAoZTogYW55KSB7JyxcbiAgICAgICAgXCIgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gdXBzZXJ0IEdpdEh1YiBQUiBjb21tZW50OicsIGU/Lm1lc3NhZ2UgfHwgZSk7XCIsXG4gICAgICAgICcgICAgICAvLyBEbyBub3QgZmFpbCB0aGUgd2hvbGUgc2NyaXB0IGp1c3QgZm9yIGNvbW1lbnQgcG9zdGluZycsXG4gICAgICAgICcgICAgfScsXG4gICAgICAgICcgIH0nLFxuICAgICAgICAnJyxcbiAgICAgICAgXCIgIC8vIE5vdGU6IFdoZW4gc3RhdHVzIGlzIEZBSUxFRCBkdWUgdG8gXFxcImRpZG4ndCBjb250YWluIGNoYW5nZXNcXFwiLCB0aGUgSFRNTCBuYXR1cmFsbHkgc2F5cyBcXFwibm8gY2hhbmdlLlxcXCJcIixcbiAgICAgICAgXCIgIGlmIChzdGF0dXMgPT09ICdGQUlMRUQnICYmIHN0YXR1c1JlYXNvbikge1wiLFxuICAgICAgICAnICAgIGNvbnNvbGUuZXJyb3IoYENoYW5nZSBzZXQgc3RhdHVzOiBGQUlMRUQuIFJlYXNvbjogJHtzdGF0dXNSZWFzb259YCk7JyxcbiAgICAgICAgJyAgfScsXG4gICAgICAgICd9JyxcbiAgICAgICAgJycsXG4gICAgICAgICdtYWluKCkuY2F0Y2goKGVycikgPT4geycsXG4gICAgICAgICcgIGNvbnNvbGUuZXJyb3IoZXJyKTsnLFxuICAgICAgICAnICBwcm9jZXNzLmV4aXRDb2RlID0gMTsnLFxuICAgICAgICAnfSk7JyxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aws-sdk/client-cloudformation",
|
|
3
3
|
"description": "AWS SDK for JavaScript Cloudformation Client for Node.js, Browser and React Native",
|
|
4
|
-
"version": "3.
|
|
4
|
+
"version": "3.987.0",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"build": "concurrently 'yarn:build:types' 'yarn:build:es' && yarn build:cjs",
|
|
7
7
|
"build:cjs": "node ../../scripts/compilation/inline client-cloudformation",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"@aws-sdk/middleware-user-agent": "^3.972.7",
|
|
32
32
|
"@aws-sdk/region-config-resolver": "^3.972.3",
|
|
33
33
|
"@aws-sdk/types": "^3.973.1",
|
|
34
|
-
"@aws-sdk/util-endpoints": "3.
|
|
34
|
+
"@aws-sdk/util-endpoints": "3.987.0",
|
|
35
35
|
"@aws-sdk/util-user-agent-browser": "^3.972.3",
|
|
36
36
|
"@aws-sdk/util-user-agent-node": "^3.972.5",
|
|
37
37
|
"@smithy/config-resolver": "^4.4.6",
|
|
@@ -990,8 +990,8 @@ class SmithyRpcV2CborProtocol extends protocols.RpcProtocol {
|
|
|
990
990
|
codec = new CborCodec();
|
|
991
991
|
serializer = this.codec.createSerializer();
|
|
992
992
|
deserializer = this.codec.createDeserializer();
|
|
993
|
-
constructor({ defaultNamespace }) {
|
|
994
|
-
super({ defaultNamespace });
|
|
993
|
+
constructor({ defaultNamespace, errorTypeRegistries, }) {
|
|
994
|
+
super({ defaultNamespace, errorTypeRegistries });
|
|
995
995
|
}
|
|
996
996
|
getShapeId() {
|
|
997
997
|
return "smithy.protocols#rpcv2Cbor";
|
|
@@ -1035,15 +1035,17 @@ class SmithyRpcV2CborProtocol extends protocols.RpcProtocol {
|
|
|
1035
1035
|
}
|
|
1036
1036
|
async handleError(operationSchema, context, response, dataObject, metadata) {
|
|
1037
1037
|
const errorName = loadSmithyRpcV2CborErrorCode(response, dataObject) ?? "Unknown";
|
|
1038
|
-
let namespace = this.options.defaultNamespace;
|
|
1039
|
-
if (errorName.includes("#")) {
|
|
1040
|
-
[namespace] = errorName.split("#");
|
|
1041
|
-
}
|
|
1042
1038
|
const errorMetadata = {
|
|
1043
1039
|
$metadata: metadata,
|
|
1044
1040
|
$fault: response.statusCode <= 500 ? "client" : "server",
|
|
1045
1041
|
};
|
|
1046
|
-
|
|
1042
|
+
let namespace = this.options.defaultNamespace;
|
|
1043
|
+
if (errorName.includes("#")) {
|
|
1044
|
+
[namespace] = errorName.split("#");
|
|
1045
|
+
}
|
|
1046
|
+
const registry = this.compositeErrorRegistry;
|
|
1047
|
+
const nsRegistry = schema.TypeRegistry.for(namespace);
|
|
1048
|
+
registry.copyFrom(nsRegistry);
|
|
1047
1049
|
let errorSchema;
|
|
1048
1050
|
try {
|
|
1049
1051
|
errorSchema = registry.getSchema(errorName);
|
|
@@ -1052,10 +1054,11 @@ class SmithyRpcV2CborProtocol extends protocols.RpcProtocol {
|
|
|
1052
1054
|
if (dataObject.Message) {
|
|
1053
1055
|
dataObject.message = dataObject.Message;
|
|
1054
1056
|
}
|
|
1055
|
-
const
|
|
1056
|
-
|
|
1057
|
+
const syntheticRegistry = schema.TypeRegistry.for("smithy.ts.sdk.synthetic." + namespace);
|
|
1058
|
+
registry.copyFrom(syntheticRegistry);
|
|
1059
|
+
const baseExceptionSchema = registry.getBaseException();
|
|
1057
1060
|
if (baseExceptionSchema) {
|
|
1058
|
-
const ErrorCtor =
|
|
1061
|
+
const ErrorCtor = registry.getErrorCtor(baseExceptionSchema);
|
|
1059
1062
|
throw Object.assign(new ErrorCtor({ name: errorName }), errorMetadata, dataObject);
|
|
1060
1063
|
}
|
|
1061
1064
|
throw Object.assign(new Error(errorName), errorMetadata, dataObject);
|
|
@@ -33,9 +33,14 @@ class SerdeContext {
|
|
|
33
33
|
|
|
34
34
|
class HttpProtocol extends SerdeContext {
|
|
35
35
|
options;
|
|
36
|
+
compositeErrorRegistry;
|
|
36
37
|
constructor(options) {
|
|
37
38
|
super();
|
|
38
39
|
this.options = options;
|
|
40
|
+
this.compositeErrorRegistry = schema.TypeRegistry.for(options.defaultNamespace);
|
|
41
|
+
for (const etr of options.errorTypeRegistries ?? []) {
|
|
42
|
+
this.compositeErrorRegistry.copyFrom(etr);
|
|
43
|
+
}
|
|
39
44
|
}
|
|
40
45
|
getRequestType() {
|
|
41
46
|
return protocolHttp.HttpRequest;
|
|
@@ -566,10 +566,24 @@ class TypeRegistry {
|
|
|
566
566
|
}
|
|
567
567
|
return TypeRegistry.registries.get(namespace);
|
|
568
568
|
}
|
|
569
|
+
copyFrom(other) {
|
|
570
|
+
const { schemas, exceptions } = this;
|
|
571
|
+
for (const [k, v] of other.schemas) {
|
|
572
|
+
if (!schemas.has(k)) {
|
|
573
|
+
schemas.set(k, v);
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
for (const [k, v] of other.exceptions) {
|
|
577
|
+
if (!exceptions.has(k)) {
|
|
578
|
+
exceptions.set(k, v);
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
}
|
|
569
582
|
register(shapeId, schema) {
|
|
570
583
|
const qualifiedName = this.normalizeShapeId(shapeId);
|
|
571
|
-
const
|
|
572
|
-
|
|
584
|
+
for (const r of [this, TypeRegistry.for(qualifiedName.split("#")[0])]) {
|
|
585
|
+
r.schemas.set(qualifiedName, schema);
|
|
586
|
+
}
|
|
573
587
|
}
|
|
574
588
|
getSchema(shapeId) {
|
|
575
589
|
const id = this.normalizeShapeId(shapeId);
|
|
@@ -580,12 +594,17 @@ class TypeRegistry {
|
|
|
580
594
|
}
|
|
581
595
|
registerError(es, ctor) {
|
|
582
596
|
const $error = es;
|
|
583
|
-
const
|
|
584
|
-
|
|
585
|
-
|
|
597
|
+
const ns = $error[1];
|
|
598
|
+
for (const r of [this, TypeRegistry.for(ns)]) {
|
|
599
|
+
r.schemas.set(ns + "#" + $error[2], $error);
|
|
600
|
+
r.exceptions.set($error, ctor);
|
|
601
|
+
}
|
|
586
602
|
}
|
|
587
603
|
getErrorCtor(es) {
|
|
588
604
|
const $error = es;
|
|
605
|
+
if (this.exceptions.has($error)) {
|
|
606
|
+
return this.exceptions.get($error);
|
|
607
|
+
}
|
|
589
608
|
const registry = TypeRegistry.for($error[1]);
|
|
590
609
|
return registry.exceptions.get($error);
|
|
591
610
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { RpcProtocol } from "@smithy/core/protocols";
|
|
2
|
-
import {
|
|
2
|
+
import { TypeRegistry } from "@smithy/core/schema";
|
|
3
|
+
import { deref, NormalizedSchema } from "@smithy/core/schema";
|
|
3
4
|
import { getSmithyContext } from "@smithy/util-middleware";
|
|
4
5
|
import { CborCodec } from "./CborCodec";
|
|
5
6
|
import { loadSmithyRpcV2CborErrorCode } from "./parseCborBody";
|
|
@@ -7,8 +8,8 @@ export class SmithyRpcV2CborProtocol extends RpcProtocol {
|
|
|
7
8
|
codec = new CborCodec();
|
|
8
9
|
serializer = this.codec.createSerializer();
|
|
9
10
|
deserializer = this.codec.createDeserializer();
|
|
10
|
-
constructor({ defaultNamespace }) {
|
|
11
|
-
super({ defaultNamespace });
|
|
11
|
+
constructor({ defaultNamespace, errorTypeRegistries, }) {
|
|
12
|
+
super({ defaultNamespace, errorTypeRegistries });
|
|
12
13
|
}
|
|
13
14
|
getShapeId() {
|
|
14
15
|
return "smithy.protocols#rpcv2Cbor";
|
|
@@ -52,15 +53,17 @@ export class SmithyRpcV2CborProtocol extends RpcProtocol {
|
|
|
52
53
|
}
|
|
53
54
|
async handleError(operationSchema, context, response, dataObject, metadata) {
|
|
54
55
|
const errorName = loadSmithyRpcV2CborErrorCode(response, dataObject) ?? "Unknown";
|
|
55
|
-
let namespace = this.options.defaultNamespace;
|
|
56
|
-
if (errorName.includes("#")) {
|
|
57
|
-
[namespace] = errorName.split("#");
|
|
58
|
-
}
|
|
59
56
|
const errorMetadata = {
|
|
60
57
|
$metadata: metadata,
|
|
61
58
|
$fault: response.statusCode <= 500 ? "client" : "server",
|
|
62
59
|
};
|
|
63
|
-
|
|
60
|
+
let namespace = this.options.defaultNamespace;
|
|
61
|
+
if (errorName.includes("#")) {
|
|
62
|
+
[namespace] = errorName.split("#");
|
|
63
|
+
}
|
|
64
|
+
const registry = this.compositeErrorRegistry;
|
|
65
|
+
const nsRegistry = TypeRegistry.for(namespace);
|
|
66
|
+
registry.copyFrom(nsRegistry);
|
|
64
67
|
let errorSchema;
|
|
65
68
|
try {
|
|
66
69
|
errorSchema = registry.getSchema(errorName);
|
|
@@ -69,10 +72,11 @@ export class SmithyRpcV2CborProtocol extends RpcProtocol {
|
|
|
69
72
|
if (dataObject.Message) {
|
|
70
73
|
dataObject.message = dataObject.Message;
|
|
71
74
|
}
|
|
72
|
-
const
|
|
73
|
-
|
|
75
|
+
const syntheticRegistry = TypeRegistry.for("smithy.ts.sdk.synthetic." + namespace);
|
|
76
|
+
registry.copyFrom(syntheticRegistry);
|
|
77
|
+
const baseExceptionSchema = registry.getBaseException();
|
|
74
78
|
if (baseExceptionSchema) {
|
|
75
|
-
const ErrorCtor =
|
|
79
|
+
const ErrorCtor = registry.getErrorCtor(baseExceptionSchema);
|
|
76
80
|
throw Object.assign(new ErrorCtor({ name: errorName }), errorMetadata, dataObject);
|
|
77
81
|
}
|
|
78
82
|
throw Object.assign(new Error(errorName), errorMetadata, dataObject);
|
|
@@ -1,11 +1,16 @@
|
|
|
1
|
-
import { NormalizedSchema, translateTraits } from "@smithy/core/schema";
|
|
1
|
+
import { NormalizedSchema, translateTraits, TypeRegistry } from "@smithy/core/schema";
|
|
2
2
|
import { HttpRequest, HttpResponse } from "@smithy/protocol-http";
|
|
3
3
|
import { SerdeContext } from "./SerdeContext";
|
|
4
4
|
export class HttpProtocol extends SerdeContext {
|
|
5
5
|
options;
|
|
6
|
+
compositeErrorRegistry;
|
|
6
7
|
constructor(options) {
|
|
7
8
|
super();
|
|
8
9
|
this.options = options;
|
|
10
|
+
this.compositeErrorRegistry = TypeRegistry.for(options.defaultNamespace);
|
|
11
|
+
for (const etr of options.errorTypeRegistries ?? []) {
|
|
12
|
+
this.compositeErrorRegistry.copyFrom(etr);
|
|
13
|
+
}
|
|
9
14
|
}
|
|
10
15
|
getRequestType() {
|
|
11
16
|
return HttpRequest;
|