@aligent/cdk-aspects 0.5.7 → 0.6.2

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/CHANGELOG.md CHANGED
@@ -1,5 +1,29 @@
1
1
  # @aligent/cdk-aspects
2
2
 
3
+ ## 0.6.2
4
+
5
+ ### Patch Changes
6
+
7
+ - [#1688](https://github.com/aligent/cdk-constructs/pull/1688) [`5fc3de2`](https://github.com/aligent/cdk-constructs/commit/5fc3de2da74962c1e11a57a375fb11c71406d5c8) Thanks [@dependabot](https://github.com/apps/dependabot)! - chore(deps): bump the aws group across 1 directory with 10 updates
8
+
9
+ - [#1692](https://github.com/aligent/cdk-constructs/pull/1692) [`baac665`](https://github.com/aligent/cdk-constructs/commit/baac665095aed5e548e465374d7b84a00f84cecc) Thanks [@dependabot](https://github.com/apps/dependabot)! - chore(deps): bump the other-dependencies group across 1 directory with 2 updates
10
+
11
+ ## 0.6.1
12
+
13
+ ### Patch Changes
14
+
15
+ - [#1685](https://github.com/aligent/cdk-constructs/pull/1685) [`4a4b1aa`](https://github.com/aligent/cdk-constructs/commit/4a4b1aa137e371e7448cefc2de3de416f4bb0284) Thanks [@kai-nguyen-aligent](https://github.com/kai-nguyen-aligent)! - Skip prefixing AWS-reserved log group names (e.g. `/aws/lambda/...`, `/aws/apigateway/...`). Previously, the `ResourcePrefixAspect` would incorrectly rename these log groups, causing deployment failures since AWS reserves the `/aws/` prefix for its own services. Also fixed base name resolution to check both PascalCase and camelCase CFN property keys.
16
+
17
+ ## 0.6.0
18
+
19
+ ### Minor Changes
20
+
21
+ - [#1680](https://github.com/aligent/cdk-constructs/pull/1680) [`727dc22`](https://github.com/aligent/cdk-constructs/commit/727dc22827da803bf8948ebd61b33894750e0092) Thanks [@toddhainsworth](https://github.com/toddhainsworth)! - `MicroserviceChecks` now skips CDK-managed singleton resources (BucketDeployment custom handler, `LogRetention`, `Custom::S3AutoDeleteObjects`, and `cr.Provider` framework lambdas). These nodes have framework-owned runtime config that consumers cannot tune, so surfacing memory size, timeout, tracing, and log retention nags on them is noise. Consumers no longer need bespoke suppression aspects for these resources.
22
+
23
+ ### Patch Changes
24
+
25
+ - [#1678](https://github.com/aligent/cdk-constructs/pull/1678) [`50e4458`](https://github.com/aligent/cdk-constructs/commit/50e445871adb3cb6a8c0d98783a5b5fb09e13898) Thanks [@aikido-autofix](https://github.com/apps/aikido-autofix)! - [Aikido] Fix security issue in fast-uri via minor version upgrade from 3.1.0 to 3.1.2
26
+
3
27
  ## 0.5.7
4
28
 
5
29
  ### Patch Changes
@@ -14,4 +14,5 @@ import type { IConstruct } from "constructs";
14
14
  export declare class MicroserviceChecks extends NagPack {
15
15
  constructor(props?: NagPackProps);
16
16
  visit(node: IConstruct): void;
17
+ private isCdkManagedSingleton;
17
18
  }
@@ -3,6 +3,22 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MicroserviceChecks = void 0;
4
4
  const aws_cdk_lib_1 = require("aws-cdk-lib");
5
5
  const cdk_nag_1 = require("cdk-nag");
6
+ /**
7
+ * Path fragments identifying CDK-managed singleton resources that consumers
8
+ * cannot configure. These nodes are skipped during rule evaluation because
9
+ * surfacing nags on memory size, timeout, tracing, or log retention for
10
+ * resources owned by the CDK framework is noise.
11
+ */
12
+ const CDK_MANAGED_PATH_FRAGMENTS = [
13
+ // aws-s3-deployment.BucketDeployment custom resource handler
14
+ "Custom::CDKBucketDeployment",
15
+ // Deprecated CDK log retention custom resource
16
+ "LogRetention",
17
+ // Bucket(autoDeleteObjects: true)
18
+ "Custom::S3AutoDeleteObjects",
19
+ // cr.Provider framework on-event / is-complete handler
20
+ "AWS679f53fac002430cb0da5b7982bd2287",
21
+ ];
6
22
  /**
7
23
  * Microservice Checks are a compilation of rules to validate infrastructure-as-code template
8
24
  * against recommended practices using the cdk-nag library.
@@ -20,6 +36,8 @@ class MicroserviceChecks extends cdk_nag_1.NagPack {
20
36
  this.packName = "Microservices";
21
37
  }
22
38
  visit(node) {
39
+ if (this.isCdkManagedSingleton(node))
40
+ return;
23
41
  if (node instanceof aws_cdk_lib_1.CfnResource) {
24
42
  this.applyRule({
25
43
  info: "The Lambda function does not have an explicit memory value configured.",
@@ -51,6 +69,10 @@ class MicroserviceChecks extends cdk_nag_1.NagPack {
51
69
  });
52
70
  }
53
71
  }
72
+ isCdkManagedSingleton(node) {
73
+ const path = node.node.path;
74
+ return CDK_MANAGED_PATH_FRAGMENTS.some(fragment => path.includes(fragment));
75
+ }
54
76
  }
55
77
  exports.MicroserviceChecks = MicroserviceChecks;
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWljcm9zZXJ2aWNlLWNoZWNrcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1pY3Jvc2VydmljZS1jaGVja3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQTBDO0FBQzFDLHFDQUE2RTtBQUc3RTs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBYSxrQkFBbUIsU0FBUSxpQkFBTztJQUM3QyxZQUFZLEtBQW9CO1FBQzlCLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNiLElBQUksQ0FBQyxRQUFRLEdBQUcsZUFBZSxDQUFDO0lBQ2xDLENBQUM7SUFFTSxLQUFLLENBQUMsSUFBZ0I7UUFDM0IsSUFBSSxJQUFJLFlBQVkseUJBQVcsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQ2IsSUFBSSxFQUFFLHdFQUF3RTtnQkFDOUUsV0FBVyxFQUNULGdiQUFnYjtnQkFDbGIsS0FBSyxFQUFFLHlCQUFlLENBQUMsS0FBSztnQkFDNUIsSUFBSSxFQUFFLGVBQUssQ0FBQyxNQUFNLENBQUMsdUJBQXVCO2dCQUMxQyxJQUFJLEVBQUUsSUFBSTthQUNYLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQ2IsSUFBSSxFQUFFLHdFQUF3RTtnQkFDOUUsV0FBVyxFQUNULHFqQkFBcWpCO2dCQUN2akIsS0FBSyxFQUFFLHlCQUFlLENBQUMsS0FBSztnQkFDNUIsSUFBSSxFQUFFLGVBQUssQ0FBQyxNQUFNLENBQUMsb0JBQW9CO2dCQUN2QyxJQUFJLEVBQUUsSUFBSTthQUNYLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQ2IsSUFBSSxFQUFFLGtFQUFrRTtnQkFDeEUsV0FBVyxFQUNULGtKQUFrSjtnQkFDcEosS0FBSyxFQUFFLHlCQUFlLENBQUMsS0FBSztnQkFDNUIsSUFBSSxFQUFFLGVBQUssQ0FBQyxNQUFNLENBQUMsYUFBYTtnQkFDaEMsSUFBSSxFQUFFLElBQUk7YUFDWCxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUNiLElBQUksRUFBRSw4RUFBOEU7Z0JBQ3BGLFdBQVcsRUFDVCwwU0FBMFM7Z0JBQzVTLEtBQUssRUFBRSx5QkFBZSxDQUFDLEtBQUs7Z0JBQzVCLElBQUksRUFBRSxlQUFLLENBQUMsVUFBVSxDQUFDLGlDQUFpQztnQkFDeEQsSUFBSSxFQUFFLElBQUk7YUFDWCxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBMUNELGdEQTBDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENmblJlc291cmNlIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBOYWdNZXNzYWdlTGV2ZWwsIE5hZ1BhY2ssIHJ1bGVzLCB0eXBlIE5hZ1BhY2tQcm9wcyB9IGZyb20gXCJjZGstbmFnXCI7XG5pbXBvcnQgdHlwZSB7IElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG4vKipcbiAqIE1pY3Jvc2VydmljZSBDaGVja3MgYXJlIGEgY29tcGlsYXRpb24gb2YgcnVsZXMgdG8gdmFsaWRhdGUgaW5mcmFzdHJ1Y3R1cmUtYXMtY29kZSB0ZW1wbGF0ZVxuICogYWdhaW5zdCByZWNvbW1lbmRlZCBwcmFjdGljZXMgdXNpbmcgdGhlIGNkay1uYWcgbGlicmFyeS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jZGstcGF0dGVybnMvY2RrLW5hZy9cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgYXBwID0gbmV3IEFwcCgpO1xuICogY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCAnTXlTdGFjaycpO1xuICogQXNwZWN0cy5vZihzdGFjaykuYWRkKG5ldyBNaWNyb3NlcnZpY2VzQ2hlY2tzKCkpO1xuICovXG5leHBvcnQgY2xhc3MgTWljcm9zZXJ2aWNlQ2hlY2tzIGV4dGVuZHMgTmFnUGFjayB7XG4gIGNvbnN0cnVjdG9yKHByb3BzPzogTmFnUGFja1Byb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMucGFja05hbWUgPSBcIk1pY3Jvc2VydmljZXNcIjtcbiAgfVxuXG4gIHB1YmxpYyB2aXNpdChub2RlOiBJQ29uc3RydWN0KSB7XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDZm5SZXNvdXJjZSkge1xuICAgICAgdGhpcy5hcHBseVJ1bGUoe1xuICAgICAgICBpbmZvOiBcIlRoZSBMYW1iZGEgZnVuY3Rpb24gZG9lcyBub3QgaGF2ZSBhbiBleHBsaWNpdCBtZW1vcnkgdmFsdWUgY29uZmlndXJlZC5cIixcbiAgICAgICAgZXhwbGFuYXRpb246XG4gICAgICAgICAgXCJMYW1iZGEgYWxsb2NhdGVzIENQVSBwb3dlciBpbiBwcm9wb3J0aW9uIHRvIHRoZSBhbW91bnQgb2YgbWVtb3J5IGNvbmZpZ3VyZWQuIEJ5IGRlZmF1bHQsIHlvdXIgZnVuY3Rpb25zIGhhdmUgMTI4IE1CIG9mIG1lbW9yeSBhbGxvY2F0ZWQuIFlvdSBjYW4gaW5jcmVhc2UgdGhhdCB2YWx1ZSB1cCB0byAxMCBHQi4gV2l0aCBtb3JlIENQVSByZXNvdXJjZXMsIHlvdXIgTGFtYmRhIGZ1bmN0aW9uJ3MgZHVyYXRpb24gbWlnaHQgZGVjcmVhc2UuICBZb3UgY2FuIHVzZSB0b29scyBzdWNoIGFzIEFXUyBMYW1iZGEgUG93ZXIgVHVuaW5nIHRvIHRlc3QgeW91ciBmdW5jdGlvbiBhdCBkaWZmZXJlbnQgbWVtb3J5IHNldHRpbmdzIHRvIGZpbmQgdGhlIG9uZSB0aGF0IG1hdGNoZXMgeW91ciBjb3N0IGFuZCBwZXJmb3JtYW5jZSByZXF1aXJlbWVudHMgdGhlIGJlc3QuXCIsXG4gICAgICAgIGxldmVsOiBOYWdNZXNzYWdlTGV2ZWwuRVJST1IsXG4gICAgICAgIHJ1bGU6IHJ1bGVzLmxhbWJkYS5MYW1iZGFEZWZhdWx0TWVtb3J5U2l6ZSxcbiAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5hcHBseVJ1bGUoe1xuICAgICAgICBpbmZvOiBcIlRoZSBMYW1iZGEgZnVuY3Rpb24gZG9lcyBub3QgaGF2ZSBhbiBleHBsaWNpdGx5IGRlZmluZWQgdGltZW91dCB2YWx1ZS5cIixcbiAgICAgICAgZXhwbGFuYXRpb246XG4gICAgICAgICAgXCJMYW1iZGEgZnVuY3Rpb25zIGhhdmUgYSBkZWZhdWx0IHRpbWVvdXQgb2YgMyBzZWNvbmRzLiBJZiB5b3VyIHRpbWVvdXQgdmFsdWUgaXMgdG9vIHNob3J0LCBMYW1iZGEgbWlnaHQgdGVybWluYXRlIGludm9jYXRpb25zIHByZW1hdHVyZWx5LiBPbiB0aGUgb3RoZXIgc2lkZSwgc2V0dGluZyB0aGUgdGltZW91dCBtdWNoIGhpZ2hlciB0aGFuIHRoZSBhdmVyYWdlIGV4ZWN1dGlvbiBtYXkgY2F1c2UgZnVuY3Rpb25zIHRvIGV4ZWN1dGUgZm9yIGxvbmdlciB1cG9uIGNvZGUgbWFsZnVuY3Rpb24sIHJlc3VsdGluZyBpbiBoaWdoZXIgY29zdHMgYW5kIHBvc3NpYmx5IHJlYWNoaW5nIGNvbmN1cnJlbmN5IGxpbWl0cyBkZXBlbmRpbmcgb24gaG93IHN1Y2ggZnVuY3Rpb25zIGFyZSBpbnZva2VkLiBZb3UgY2FuIGFsc28gdXNlIEFXUyBMYW1iZGEgUG93ZXIgVHVuaW5nIHRvIHRlc3QgeW91ciBmdW5jdGlvbiBhdCBkaWZmZXJlbnQgdGltZW91dCBzZXR0aW5ncyB0byBmaW5kIHRoZSBvbmUgdGhhdCBtYXRjaGVzIHlvdXIgY29zdCBhbmQgcGVyZm9ybWFuY2UgcmVxdWlyZW1lbnRzIHRoZSBiZXN0LlwiLFxuICAgICAgICBsZXZlbDogTmFnTWVzc2FnZUxldmVsLkVSUk9SLFxuICAgICAgICBydWxlOiBydWxlcy5sYW1iZGEuTGFtYmRhRGVmYXVsdFRpbWVvdXQsXG4gICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYXBwbHlSdWxlKHtcbiAgICAgICAgaW5mbzogXCJUaGUgTGFtYmRhIGZ1bmN0aW9uIGRvZXMgbm90IGhhdmUgdHJhY2luZyBzZXQgdG8gVHJhY2luZy5BQ1RJVkUuXCIsXG4gICAgICAgIGV4cGxhbmF0aW9uOlxuICAgICAgICAgIFwiV2hlbiBhIExhbWJkYSBmdW5jdGlvbiBoYXMgQUNUSVZFIHRyYWNpbmcsIExhbWJkYSBhdXRvbWF0aWNhbGx5IHNhbXBsZXMgaW52b2NhdGlvbiByZXF1ZXN0cywgYmFzZWQgb24gdGhlIHNhbXBsaW5nIGFsZ29yaXRobSBzcGVjaWZpZWQgYnkgWC1SYXkuXCIsXG4gICAgICAgIGxldmVsOiBOYWdNZXNzYWdlTGV2ZWwuRVJST1IsXG4gICAgICAgIHJ1bGU6IHJ1bGVzLmxhbWJkYS5MYW1iZGFUcmFjaW5nLFxuICAgICAgICBub2RlOiBub2RlLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmFwcGx5UnVsZSh7XG4gICAgICAgIGluZm86IFwiVGhlIENsb3VkV2F0Y2ggTG9nIEdyb3VwIGRvZXMgbm90IGhhdmUgYW4gZXhwbGljaXQgcmV0ZW50aW9uIHBvbGljeSBkZWZpbmVkLlwiLFxuICAgICAgICBleHBsYW5hdGlvbjpcbiAgICAgICAgICBcIkJ5IGRlZmF1bHQsIGxvZ3MgYXJlIGtlcHQgaW5kZWZpbml0ZWx5IGFuZCBuZXZlciBleHBpcmUuIFlvdSBjYW4gYWRqdXN0IHRoZSByZXRlbnRpb24gcG9saWN5IGZvciBlYWNoIGxvZyBncm91cCwga2VlcGluZyB0aGUgaW5kZWZpbml0ZSByZXRlbnRpb24sIG9yIGNob29zaW5nIGEgcmV0ZW50aW9uIHBlcmlvZCBiZXR3ZWVuIG9uZSBkYXkgYW5kIDEwIHllYXJzLiBGb3IgTGFtYmRhIGZ1bmN0aW9ucywgdGhpcyBhcHBsaWVzIHRvIHRoZWlyIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBDbG91ZFdhdGNoIExvZyBHcm91cHMuXCIsXG4gICAgICAgIGxldmVsOiBOYWdNZXNzYWdlTGV2ZWwuRVJST1IsXG4gICAgICAgIHJ1bGU6IHJ1bGVzLmNsb3Vkd2F0Y2guQ2xvdWRXYXRjaExvZ0dyb3VwUmV0ZW50aW9uUGVyaW9kLFxuICAgICAgICBub2RlOiBub2RlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWljcm9zZXJ2aWNlLWNoZWNrcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1pY3Jvc2VydmljZS1jaGVja3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQTBDO0FBQzFDLHFDQUE2RTtBQUc3RTs7Ozs7R0FLRztBQUNILE1BQU0sMEJBQTBCLEdBQUc7SUFDakMsNkRBQTZEO0lBQzdELDZCQUE2QjtJQUM3QiwrQ0FBK0M7SUFDL0MsY0FBYztJQUNkLGtDQUFrQztJQUNsQyw2QkFBNkI7SUFDN0IsdURBQXVEO0lBQ3ZELHFDQUFxQztDQUN0QyxDQUFDO0FBRUY7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQWEsa0JBQW1CLFNBQVEsaUJBQU87SUFDN0MsWUFBWSxLQUFvQjtRQUM5QixLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDYixJQUFJLENBQUMsUUFBUSxHQUFHLGVBQWUsQ0FBQztJQUNsQyxDQUFDO0lBRU0sS0FBSyxDQUFDLElBQWdCO1FBQzNCLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQztZQUFFLE9BQU87UUFFN0MsSUFBSSxJQUFJLFlBQVkseUJBQVcsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQ2IsSUFBSSxFQUFFLHdFQUF3RTtnQkFDOUUsV0FBVyxFQUNULGdiQUFnYjtnQkFDbGIsS0FBSyxFQUFFLHlCQUFlLENBQUMsS0FBSztnQkFDNUIsSUFBSSxFQUFFLGVBQUssQ0FBQyxNQUFNLENBQUMsdUJBQXVCO2dCQUMxQyxJQUFJLEVBQUUsSUFBSTthQUNYLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQ2IsSUFBSSxFQUFFLHdFQUF3RTtnQkFDOUUsV0FBVyxFQUNULHFqQkFBcWpCO2dCQUN2akIsS0FBSyxFQUFFLHlCQUFlLENBQUMsS0FBSztnQkFDNUIsSUFBSSxFQUFFLGVBQUssQ0FBQyxNQUFNLENBQUMsb0JBQW9CO2dCQUN2QyxJQUFJLEVBQUUsSUFBSTthQUNYLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQ2IsSUFBSSxFQUFFLGtFQUFrRTtnQkFDeEUsV0FBVyxFQUNULGtKQUFrSjtnQkFDcEosS0FBSyxFQUFFLHlCQUFlLENBQUMsS0FBSztnQkFDNUIsSUFBSSxFQUFFLGVBQUssQ0FBQyxNQUFNLENBQUMsYUFBYTtnQkFDaEMsSUFBSSxFQUFFLElBQUk7YUFDWCxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUNiLElBQUksRUFBRSw4RUFBOEU7Z0JBQ3BGLFdBQVcsRUFDVCwwU0FBMFM7Z0JBQzVTLEtBQUssRUFBRSx5QkFBZSxDQUFDLEtBQUs7Z0JBQzVCLElBQUksRUFBRSxlQUFLLENBQUMsVUFBVSxDQUFDLGlDQUFpQztnQkFDeEQsSUFBSSxFQUFFLElBQUk7YUFDWCxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQixDQUFDLElBQWdCO1FBQzVDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzVCLE9BQU8sMEJBQTBCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzlFLENBQUM7Q0FDRjtBQWpERCxnREFpREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5SZXNvdXJjZSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgTmFnTWVzc2FnZUxldmVsLCBOYWdQYWNrLCBydWxlcywgdHlwZSBOYWdQYWNrUHJvcHMgfSBmcm9tIFwiY2RrLW5hZ1wiO1xuaW1wb3J0IHR5cGUgeyBJQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuLyoqXG4gKiBQYXRoIGZyYWdtZW50cyBpZGVudGlmeWluZyBDREstbWFuYWdlZCBzaW5nbGV0b24gcmVzb3VyY2VzIHRoYXQgY29uc3VtZXJzXG4gKiBjYW5ub3QgY29uZmlndXJlLiBUaGVzZSBub2RlcyBhcmUgc2tpcHBlZCBkdXJpbmcgcnVsZSBldmFsdWF0aW9uIGJlY2F1c2VcbiAqIHN1cmZhY2luZyBuYWdzIG9uIG1lbW9yeSBzaXplLCB0aW1lb3V0LCB0cmFjaW5nLCBvciBsb2cgcmV0ZW50aW9uIGZvclxuICogcmVzb3VyY2VzIG93bmVkIGJ5IHRoZSBDREsgZnJhbWV3b3JrIGlzIG5vaXNlLlxuICovXG5jb25zdCBDREtfTUFOQUdFRF9QQVRIX0ZSQUdNRU5UUyA9IFtcbiAgLy8gYXdzLXMzLWRlcGxveW1lbnQuQnVja2V0RGVwbG95bWVudCBjdXN0b20gcmVzb3VyY2UgaGFuZGxlclxuICBcIkN1c3RvbTo6Q0RLQnVja2V0RGVwbG95bWVudFwiLFxuICAvLyBEZXByZWNhdGVkIENESyBsb2cgcmV0ZW50aW9uIGN1c3RvbSByZXNvdXJjZVxuICBcIkxvZ1JldGVudGlvblwiLFxuICAvLyBCdWNrZXQoYXV0b0RlbGV0ZU9iamVjdHM6IHRydWUpXG4gIFwiQ3VzdG9tOjpTM0F1dG9EZWxldGVPYmplY3RzXCIsXG4gIC8vIGNyLlByb3ZpZGVyIGZyYW1ld29yayBvbi1ldmVudCAvIGlzLWNvbXBsZXRlIGhhbmRsZXJcbiAgXCJBV1M2NzlmNTNmYWMwMDI0MzBjYjBkYTViNzk4MmJkMjI4N1wiLFxuXTtcblxuLyoqXG4gKiBNaWNyb3NlcnZpY2UgQ2hlY2tzIGFyZSBhIGNvbXBpbGF0aW9uIG9mIHJ1bGVzIHRvIHZhbGlkYXRlIGluZnJhc3RydWN0dXJlLWFzLWNvZGUgdGVtcGxhdGVcbiAqIGFnYWluc3QgcmVjb21tZW5kZWQgcHJhY3RpY2VzIHVzaW5nIHRoZSBjZGstbmFnIGxpYnJhcnkuXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2RrLXBhdHRlcm5zL2Nkay1uYWcvXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGFwcCA9IG5ldyBBcHAoKTtcbiAqIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgJ015U3RhY2snKTtcbiAqIEFzcGVjdHMub2Yoc3RhY2spLmFkZChuZXcgTWljcm9zZXJ2aWNlc0NoZWNrcygpKTtcbiAqL1xuZXhwb3J0IGNsYXNzIE1pY3Jvc2VydmljZUNoZWNrcyBleHRlbmRzIE5hZ1BhY2sge1xuICBjb25zdHJ1Y3Rvcihwcm9wcz86IE5hZ1BhY2tQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnBhY2tOYW1lID0gXCJNaWNyb3NlcnZpY2VzXCI7XG4gIH1cblxuICBwdWJsaWMgdmlzaXQobm9kZTogSUNvbnN0cnVjdCkge1xuICAgIGlmICh0aGlzLmlzQ2RrTWFuYWdlZFNpbmdsZXRvbihub2RlKSkgcmV0dXJuO1xuXG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDZm5SZXNvdXJjZSkge1xuICAgICAgdGhpcy5hcHBseVJ1bGUoe1xuICAgICAgICBpbmZvOiBcIlRoZSBMYW1iZGEgZnVuY3Rpb24gZG9lcyBub3QgaGF2ZSBhbiBleHBsaWNpdCBtZW1vcnkgdmFsdWUgY29uZmlndXJlZC5cIixcbiAgICAgICAgZXhwbGFuYXRpb246XG4gICAgICAgICAgXCJMYW1iZGEgYWxsb2NhdGVzIENQVSBwb3dlciBpbiBwcm9wb3J0aW9uIHRvIHRoZSBhbW91bnQgb2YgbWVtb3J5IGNvbmZpZ3VyZWQuIEJ5IGRlZmF1bHQsIHlvdXIgZnVuY3Rpb25zIGhhdmUgMTI4IE1CIG9mIG1lbW9yeSBhbGxvY2F0ZWQuIFlvdSBjYW4gaW5jcmVhc2UgdGhhdCB2YWx1ZSB1cCB0byAxMCBHQi4gV2l0aCBtb3JlIENQVSByZXNvdXJjZXMsIHlvdXIgTGFtYmRhIGZ1bmN0aW9uJ3MgZHVyYXRpb24gbWlnaHQgZGVjcmVhc2UuICBZb3UgY2FuIHVzZSB0b29scyBzdWNoIGFzIEFXUyBMYW1iZGEgUG93ZXIgVHVuaW5nIHRvIHRlc3QgeW91ciBmdW5jdGlvbiBhdCBkaWZmZXJlbnQgbWVtb3J5IHNldHRpbmdzIHRvIGZpbmQgdGhlIG9uZSB0aGF0IG1hdGNoZXMgeW91ciBjb3N0IGFuZCBwZXJmb3JtYW5jZSByZXF1aXJlbWVudHMgdGhlIGJlc3QuXCIsXG4gICAgICAgIGxldmVsOiBOYWdNZXNzYWdlTGV2ZWwuRVJST1IsXG4gICAgICAgIHJ1bGU6IHJ1bGVzLmxhbWJkYS5MYW1iZGFEZWZhdWx0TWVtb3J5U2l6ZSxcbiAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5hcHBseVJ1bGUoe1xuICAgICAgICBpbmZvOiBcIlRoZSBMYW1iZGEgZnVuY3Rpb24gZG9lcyBub3QgaGF2ZSBhbiBleHBsaWNpdGx5IGRlZmluZWQgdGltZW91dCB2YWx1ZS5cIixcbiAgICAgICAgZXhwbGFuYXRpb246XG4gICAgICAgICAgXCJMYW1iZGEgZnVuY3Rpb25zIGhhdmUgYSBkZWZhdWx0IHRpbWVvdXQgb2YgMyBzZWNvbmRzLiBJZiB5b3VyIHRpbWVvdXQgdmFsdWUgaXMgdG9vIHNob3J0LCBMYW1iZGEgbWlnaHQgdGVybWluYXRlIGludm9jYXRpb25zIHByZW1hdHVyZWx5LiBPbiB0aGUgb3RoZXIgc2lkZSwgc2V0dGluZyB0aGUgdGltZW91dCBtdWNoIGhpZ2hlciB0aGFuIHRoZSBhdmVyYWdlIGV4ZWN1dGlvbiBtYXkgY2F1c2UgZnVuY3Rpb25zIHRvIGV4ZWN1dGUgZm9yIGxvbmdlciB1cG9uIGNvZGUgbWFsZnVuY3Rpb24sIHJlc3VsdGluZyBpbiBoaWdoZXIgY29zdHMgYW5kIHBvc3NpYmx5IHJlYWNoaW5nIGNvbmN1cnJlbmN5IGxpbWl0cyBkZXBlbmRpbmcgb24gaG93IHN1Y2ggZnVuY3Rpb25zIGFyZSBpbnZva2VkLiBZb3UgY2FuIGFsc28gdXNlIEFXUyBMYW1iZGEgUG93ZXIgVHVuaW5nIHRvIHRlc3QgeW91ciBmdW5jdGlvbiBhdCBkaWZmZXJlbnQgdGltZW91dCBzZXR0aW5ncyB0byBmaW5kIHRoZSBvbmUgdGhhdCBtYXRjaGVzIHlvdXIgY29zdCBhbmQgcGVyZm9ybWFuY2UgcmVxdWlyZW1lbnRzIHRoZSBiZXN0LlwiLFxuICAgICAgICBsZXZlbDogTmFnTWVzc2FnZUxldmVsLkVSUk9SLFxuICAgICAgICBydWxlOiBydWxlcy5sYW1iZGEuTGFtYmRhRGVmYXVsdFRpbWVvdXQsXG4gICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYXBwbHlSdWxlKHtcbiAgICAgICAgaW5mbzogXCJUaGUgTGFtYmRhIGZ1bmN0aW9uIGRvZXMgbm90IGhhdmUgdHJhY2luZyBzZXQgdG8gVHJhY2luZy5BQ1RJVkUuXCIsXG4gICAgICAgIGV4cGxhbmF0aW9uOlxuICAgICAgICAgIFwiV2hlbiBhIExhbWJkYSBmdW5jdGlvbiBoYXMgQUNUSVZFIHRyYWNpbmcsIExhbWJkYSBhdXRvbWF0aWNhbGx5IHNhbXBsZXMgaW52b2NhdGlvbiByZXF1ZXN0cywgYmFzZWQgb24gdGhlIHNhbXBsaW5nIGFsZ29yaXRobSBzcGVjaWZpZWQgYnkgWC1SYXkuXCIsXG4gICAgICAgIGxldmVsOiBOYWdNZXNzYWdlTGV2ZWwuRVJST1IsXG4gICAgICAgIHJ1bGU6IHJ1bGVzLmxhbWJkYS5MYW1iZGFUcmFjaW5nLFxuICAgICAgICBub2RlOiBub2RlLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmFwcGx5UnVsZSh7XG4gICAgICAgIGluZm86IFwiVGhlIENsb3VkV2F0Y2ggTG9nIEdyb3VwIGRvZXMgbm90IGhhdmUgYW4gZXhwbGljaXQgcmV0ZW50aW9uIHBvbGljeSBkZWZpbmVkLlwiLFxuICAgICAgICBleHBsYW5hdGlvbjpcbiAgICAgICAgICBcIkJ5IGRlZmF1bHQsIGxvZ3MgYXJlIGtlcHQgaW5kZWZpbml0ZWx5IGFuZCBuZXZlciBleHBpcmUuIFlvdSBjYW4gYWRqdXN0IHRoZSByZXRlbnRpb24gcG9saWN5IGZvciBlYWNoIGxvZyBncm91cCwga2VlcGluZyB0aGUgaW5kZWZpbml0ZSByZXRlbnRpb24sIG9yIGNob29zaW5nIGEgcmV0ZW50aW9uIHBlcmlvZCBiZXR3ZWVuIG9uZSBkYXkgYW5kIDEwIHllYXJzLiBGb3IgTGFtYmRhIGZ1bmN0aW9ucywgdGhpcyBhcHBsaWVzIHRvIHRoZWlyIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBDbG91ZFdhdGNoIExvZyBHcm91cHMuXCIsXG4gICAgICAgIGxldmVsOiBOYWdNZXNzYWdlTGV2ZWwuRVJST1IsXG4gICAgICAgIHJ1bGU6IHJ1bGVzLmNsb3Vkd2F0Y2guQ2xvdWRXYXRjaExvZ0dyb3VwUmV0ZW50aW9uUGVyaW9kLFxuICAgICAgICBub2RlOiBub2RlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc0Nka01hbmFnZWRTaW5nbGV0b24obm9kZTogSUNvbnN0cnVjdCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHBhdGggPSBub2RlLm5vZGUucGF0aDtcbiAgICByZXR1cm4gQ0RLX01BTkFHRURfUEFUSF9GUkFHTUVOVFMuc29tZShmcmFnbWVudCA9PiBwYXRoLmluY2x1ZGVzKGZyYWdtZW50KSk7XG4gIH1cbn1cbiJdfQ==
@@ -49,8 +49,18 @@ export declare class ResourcePrefixAspect implements IAspect {
49
49
  private readonly exclude;
50
50
  constructor(props: ResourcePrefixAspectProps);
51
51
  visit(node: IConstruct): void;
52
+ /**
53
+ * Determines whether a resource should be skipped from prefixing based on
54
+ * resource-type-specific rules (e.g., AWS-reserved naming conventions).
55
+ */
56
+ private shouldSkipResource;
52
57
  private isAlreadyPrefixed;
53
- private deriveNameFromLogicalId;
58
+ /**
59
+ * Resolves the base name for a resource by checking explicitly set CFN properties
60
+ * first, then falling back to deriving a name from the logical ID.
61
+ * CDK stores L1 properties in camelCase internally, so both casings are checked.
62
+ */
63
+ private resolveBaseName;
54
64
  /**
55
65
  * Builds the prefixed name, handling special cases for specific resource types.
56
66
  *
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ResourcePrefixAspect = void 0;
4
- const crypto_1 = require("crypto");
5
4
  const aws_cdk_lib_1 = require("aws-cdk-lib");
5
+ const crypto_1 = require("crypto");
6
6
  /**
7
7
  * Maps CloudFormation resource types to their name property and AWS length limits.
8
8
  * Sources: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html
@@ -101,11 +101,10 @@ class ResourcePrefixAspect {
101
101
  }
102
102
  const { cfnName, maxLength } = config;
103
103
  const cfnProperties = (_b = (_a = node._cfnProperties) !== null && _a !== void 0 ? _a : node.cfnProperties) !== null && _b !== void 0 ? _b : {};
104
- // Get any explicitly set name, or derive one from the logical ID
105
- const existingName = typeof cfnProperties[cfnName] === "string"
106
- ? cfnProperties[cfnName]
107
- : undefined;
108
- const baseName = existingName !== null && existingName !== void 0 ? existingName : this.deriveNameFromLogicalId(node);
104
+ const baseName = this.resolveBaseName(node, cfnName, cfnProperties);
105
+ if (this.shouldSkipResource(resourceType, baseName)) {
106
+ return;
107
+ }
109
108
  if (this.isAlreadyPrefixed(baseName)) {
110
109
  return;
111
110
  }
@@ -118,10 +117,28 @@ class ResourcePrefixAspect {
118
117
  return;
119
118
  node.addPropertyOverride(cfnName, finalName);
120
119
  }
120
+ /**
121
+ * Determines whether a resource should be skipped from prefixing based on
122
+ * resource-type-specific rules (e.g., AWS-reserved naming conventions).
123
+ */
124
+ shouldSkipResource(cfnResourceType, baseName) {
125
+ return (cfnResourceType === "AWS::Logs::LogGroup" && baseName.startsWith("/aws/"));
126
+ }
121
127
  isAlreadyPrefixed(name) {
122
128
  return (name.startsWith(`${this.prefix}-`) || name.startsWith(`/${this.prefix}/`));
123
129
  }
124
- deriveNameFromLogicalId(node) {
130
+ /**
131
+ * Resolves the base name for a resource by checking explicitly set CFN properties
132
+ * first, then falling back to deriving a name from the logical ID.
133
+ * CDK stores L1 properties in camelCase internally, so both casings are checked.
134
+ */
135
+ resolveBaseName(node, cfnName, cfnProperties) {
136
+ var _a;
137
+ const camelCfnName = cfnName.charAt(0).toLowerCase() + cfnName.slice(1);
138
+ const rawName = (_a = cfnProperties[cfnName]) !== null && _a !== void 0 ? _a : cfnProperties[camelCfnName];
139
+ if (typeof rawName === "string") {
140
+ return rawName;
141
+ }
125
142
  const logicalId = aws_cdk_lib_1.Stack.of(node).getLogicalId(node);
126
143
  return logicalId
127
144
  .replace(/[^a-zA-Z0-9]+/g, "-") // non-alphanumeric → dash
@@ -199,4 +216,4 @@ class ResourcePrefixAspect {
199
216
  }
200
217
  }
201
218
  exports.ResourcePrefixAspect = ResourcePrefixAspect;
202
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtcHJlZml4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmVzb3VyY2UtcHJlZml4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFvQztBQUNwQyw2Q0FBdUU7QUFnQ3ZFOzs7R0FHRztBQUNILE1BQU0sZUFBZSxHQUF1QztJQUMxRCxVQUFVO0lBQ1YsdUJBQXVCLEVBQUUsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFFbkUsVUFBVTtJQUNWLGlCQUFpQixFQUFFLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQzNELHNCQUFzQixFQUFFLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFO0lBQ2hFLDRCQUE0QixFQUFFLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFO0lBRXRFLFlBQVk7SUFDWixpQkFBaUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUMxRCxpQkFBaUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRTtJQUUzRCwyQkFBMkI7SUFDM0IsdUJBQXVCLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUU7SUFDNUQsbUJBQW1CLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDdkQseUJBQXlCLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDN0Qsa0JBQWtCLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDdEQsa0NBQWtDLEVBQUU7UUFDbEMsT0FBTyxFQUFFLGtCQUFrQjtRQUMzQixTQUFT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Ozs7T0FHRztJQUNLLG9CQUFvQixDQUMxQixJQUFZLEVBQ1osZUFBdUIsRUFDdkIsSUFBZ0I7UUFFaEIsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBRXJCLElBQUksZUFBZSxLQUFLLGlCQUFpQixFQUFFLENBQUM7WUFDMUMsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7Z0JBQ2hDLHlCQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FDM0IsMENBQTBDLElBQUksZ0NBQWdDO29CQUM1RSxzQ0FBc0MsQ0FDekMsQ0FBQztnQkFDRixRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLENBQUM7WUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDdkIseUJBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUMzQiwwQ0FBMEMsSUFBSSwwQkFBMEI7b0JBQ3RFLCtEQUErRCxDQUNsRSxDQUFDO2dCQUNGLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDbEIsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0NBQ0Y7QUFoTEQsb0RBZ0xDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCB7IEFubm90YXRpb25zLCBDZm5SZXNvdXJjZSwgSUFzcGVjdCwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5pbnRlcmZhY2UgUmVzb3VyY2VOYW1lQ29uZmlnIHtcbiAgLyoqIFRoZSBDbG91ZEZvcm1hdGlvbiBwcm9wZXJ0eSB0aGF0IGhvbGRzIHRoZSByZXNvdXJjZSdzIHBoeXNpY2FsIG5hbWUgKi9cbiAgY2ZuTmFtZTogc3RyaW5nO1xuICAvKiogTWF4aW11bSBhbGxvd2VkIGNoYXJhY3RlciBsZW5ndGggZm9yIHRoaXMgcmVzb3VyY2UgdHlwZSAqL1xuICBtYXhMZW5ndGg6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBFeHRlbnNpb24gdHlwZSB0byBhY2Nlc3MgaW50ZXJuYWwgQ2xvdWRGb3JtYXRpb24gcHJvcGVydGllcyBvbiBDZm5SZXNvdXJjZS5cbiAqXG4gKiBDREsgZG9lcyBub3QgcHJvdmlkZSBhIHB1YmxpYyBBUEkgdG8gcmVhZCByYXcgQ2xvdWRGb3JtYXRpb24gcHJvcGVydGllcyB0aGF0IGhhdmVcbiAqIGJlZW4gc2V0IG9uIGEgQ2ZuUmVzb3VyY2UuIFRoZSBwcm9wZXJ0aWVzIGBfY2ZuUHJvcGVydGllc2AgYW5kIGBjZm5Qcm9wZXJ0aWVzYCBhcmVcbiAqIHByb3RlY3RlZCBhbmQgb25seSBhY2Nlc3NpYmxlIHdpdGhpbiB0aGUgQ2ZuUmVzb3VyY2UgY2xhc3MgaGllcmFyY2h5LlxuICpcbiAqIFdlIGludmVzdGlnYXRlZCB1c2luZyBDREsncyBwdWJsaWMgQVBJcywgYnV0IHRoZXJlIGlzIG5vIHB1YmxpYyBtZXRob2QgdG8gcmV0cmlldmVcbiAqIHRoZSByYXcgcHJvcGVydHkgdmFsdWVzIHRoYXQgaGF2ZSBiZWVuIHNldCAoZS5nLiwgdmlhIGNvbnN0cnVjdG9yIHByb3BzIG9yIGFkZFByb3BlcnR5T3ZlcnJpZGUpLlxuICogVGhlIG9ubHkgcHVibGljIEFQSXMgYXJlIGZvciB3cml0aW5nIChhZGRQcm9wZXJ0eU92ZXJyaWRlLCBhZGRQcm9wZXJ0eURlbGV0aW9uT3ZlcnJpZGUpIG9yXG4gKiBnZXR0aW5nIGF0dHJpYnV0ZSByZWZlcmVuY2VzIChnZXRBdHQpLCBub3QgZm9yIHJlYWRpbmcgbGl0ZXJhbCBwcm9wZXJ0eSB2YWx1ZXMuXG4gKlxuICogVGhpcyB0eXBlIGFzc2VydGlvbiBpcyBzYWZlIGJlY2F1c2U6XG4gKiAtIFdlIG9ubHkgcmVhZCB0aGVzZSBwcm9wZXJ0aWVzLCBuZXZlciBtb2RpZnkgdGhlbVxuICogLSBXZSBuZWVkIHRvIGNoZWNrIGlmIGEgdXNlciBleHBsaWNpdGx5IHNldCBhIG5hbWUgcHJvcGVydHkgYmVmb3JlIGFwcGx5aW5nIG91ciBwcmVmaXhcbiAqIC0gVGhlIHByb3BlcnRpZXMgZXhpc3QgYXQgcnVudGltZSBhbmQgYXJlIHBhcnQgb2YgQ0RLJ3MgaW50ZXJuYWwgaW1wbGVtZW50YXRpb25cbiAqL1xudHlwZSBDZm5SZXNvdXJjZVdpdGhQcm9wcyA9IENmblJlc291cmNlICYge1xuICByZWFkb25seSBfY2ZuUHJvcGVydGllcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICByZWFkb25seSBjZm5Qcm9wZXJ0aWVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59O1xuXG4vKipcbiAqIE1hcHMgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UgdHlwZXMgdG8gdGhlaXIgbmFtZSBwcm9wZXJ0eSBhbmQgQVdTIGxlbmd0aCBsaW1pdHMuXG4gKiBTb3VyY2VzOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtdGVtcGxhdGUtcmVzb3VyY2UtdHlwZS1yZWYuaHRtbFxuICovXG5jb25zdCBSRVNPVVJDRV9DT05GSUc6IFJlY29yZDxzdHJpbmcsIFJlc291cmNlTmFtZUNvbmZpZz4gPSB7XG4gIC8vIENvbXB1dGVcbiAgXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIjogeyBjZm5OYW1lOiBcIkZ1bmN0aW9uTmFtZVwiLCBtYXhMZW5ndGg6IDY0IH0sXG5cbiAgLy8gU3RvcmFnZVxuICBcIkFXUzo6UzM6OkJ1Y2tldFwiOiB7IGNmbk5hbWU6IFwiQnVja2V0TmFtZVwiLCBtYXhMZW5ndGg6IDYzIH0sXG4gIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIjogeyBjZm5OYW1lOiBcIlRhYmxlTmFtZVwiLCBtYXhMZW5ndGg6IDI1NSB9LFxuICBcIkFXUzo6RHluYW1vREI6Okdsb2JhbFRhYmxlXCI6IHsgY2ZuTmFtZTogXCJUYWJsZU5hbWVcIiwgbWF4TGVuZ3RoOiAyNTUgfSxcblxuICAvLyBNZXNzYWdpbmdcbiAgXCJBV1M6OlNRUzo6UXVldWVcIjogeyBjZm5OYW1lOiBcIlF1ZXVlTmFtZVwiLCBtYXhMZW5ndGg6IDgwIH0sXG4gIFwiQVdTOjpTTlM6OlRvcGljXCI6IHsgY2ZuTmFtZTogXCJUb3BpY05hbWVcIiwgbWF4TGVuZ3RoOiAyNTYgfSxcblxuICAvLyBFdmVudGluZyAmIE9yY2hlc3RyYXRpb25cbiAgXCJBV1M6OkV2ZW50czo6RXZlbnRCdXNcIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiAyNTYgfSxcbiAgXCJBV1M6OkV2ZW50czo6UnVsZVwiOiB7IGNmbk5hbWU6IFwiTmFtZVwiLCBtYXhMZW5ndGg6IDY0IH0sXG4gIFwiQVdTOjpFdmVudHM6OkNvbm5lY3Rpb25cIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiA2NCB9LFxuICBcIkFXUzo6UGlwZXM6OlBpcGVcIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiA2NCB9LFxuICBcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXCI6IHtcbiAgICBjZm5OYW1lOiBcIlN0YXRlTWFjaGluZU5hbWVcIixcbiAgICBtYXhMZW5ndGg6IDgwLFxuICB9LFxuICBcIkFXUzo6U3RlcEZ1bmN0aW9uczo6QWN0aXZpdHlcIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiA4MCB9LFxuICBcIkFXUzo6U2NoZWR1bGVyOjpTY2hlZHVsZVwiOiB7IGNmbk5hbWU6IFwiTmFtZVwiLCBtYXhMZW5ndGg6IDY0IH0sXG4gIFwiQVdTOjpTY2hlZHVsZXI6OlNjaGVkdWxlR3JvdXBcIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiA2NCB9LFxuXG4gIC8vIEFQSVxuICBcIkFXUzo6QXBpR2F0ZXdheTo6UmVzdEFwaVwiOiB7IGNmbk5hbWU6IFwiTmFtZVwiLCBtYXhMZW5ndGg6IDEyOCB9LFxuICBcIkFXUzo6QXBpR2F0ZXdheTo6VXNhZ2VQbGFuXCI6IHsgY2ZuTmFtZTogXCJVc2FnZVBsYW5OYW1lXCIsIG1heExlbmd0aDogMTI4IH0sXG4gIFwiQVdTOjpBcGlHYXRld2F5OjpBcGlLZXlcIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiAxMjggfSxcbiAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXCI6IHsgY2ZuTmFtZTogXCJOYW1lXCIsIG1heExlbmd0aDogMTI4IH0sXG4gIFwiQVdTOjpBcGlHYXRld2F5VjI6OkF1dGhvcml6ZXJcIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiAxMjggfSxcblxuICAvLyBTZWNyZXRzICYgQ29uZmlnXG4gIFwiQVdTOjpTZWNyZXRzTWFuYWdlcjo6U2VjcmV0XCI6IHsgY2ZuTmFtZTogXCJOYW1lXCIsIG1heExlbmd0aDogNTEyIH0sXG4gIFwiQVdTOjpTU006OlBhcmFtZXRlclwiOiB7IGNmbk5hbWU6IFwiTmFtZVwiLCBtYXhMZW5ndGg6IDIwNDggfSxcbiAgXCJBV1M6OkFwcENvbmZpZzo6QXBwbGljYXRpb25cIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiA2NCB9LFxuICBcIkFXUzo6QXBwQ29uZmlnOjpFbnZpcm9ubWVudFwiOiB7IGNmbk5hbWU6IFwiTmFtZVwiLCBtYXhMZW5ndGg6IDY0IH0sXG5cbiAgLy8gTm90aWZpY2F0aW9uc1xuICBcIkFXUzo6Tm90aWZpY2F0aW9uczo6Tm90aWZpY2F0aW9uQ29uZmlndXJhdGlvblwiOiB7XG4gICAgY2ZuTmFtZTogXCJOYW1lXCIsXG4gICAgbWF4TGVuZ3RoOiA2NCxcbiAgfSxcblxuICAvLyBPYnNlcnZhYmlsaXR5XG4gIFwiQVdTOjpMb2dzOjpMb2dHcm91cFwiOiB7IGNmbk5hbWU6IFwiTG9nR3JvdXBOYW1lXCIsIG1heExlbmd0aDogNTEyIH0sXG4gIFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVwiOiB7IGNmbk5hbWU6IFwiQWxhcm1OYW1lXCIsIG1heExlbmd0aDogMjU1IH0sXG5cbiAgLy8gSUFNXG4gIFwiQVdTOjpJQU06OlJvbGVcIjogeyBjZm5OYW1lOiBcIlJvbGVOYW1lXCIsIG1heExlbmd0aDogNjQgfSxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VQcmVmaXhBc3BlY3RQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgcHJlZml4IHRvIGFwcGx5IHRvIGFsbCByZXNvdXJjZSBuYW1lcy5cbiAgICogZS5nLiAnbXlhcHAtcHJvZCcg4oaSICdteWFwcC1wcm9kLW9yZGVycydcbiAgICovXG4gIHByZWZpeDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZSB0eXBlcyB0byBza2lwIGVudGlyZWx5LlxuICAgKiBlLmcuIFsnQVdTOjpJQU06OlJvbGUnXSB0byBsZWF2ZSBJQU0gcm9sZSBuYW1lcyB1bnRvdWNoZWQuXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqL1xuICBleGNsdWRlPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQ0RLIEFzcGVjdCB0aGF0IGF1dG9tYXRpY2FsbHkgcHJlZml4ZXMgcGh5c2ljYWwgcmVzb3VyY2UgbmFtZXMgYWNyb3NzIEFXUyByZXNvdXJjZXMuXG4gKlxuICogQHJlbWFya3NcbiAqICoqQ3JpdGljYWwgSW1wbGVtZW50YXRpb24gTm90ZXM6KipcbiAqXG4gKiAxLiAqKlN0YWdlIFN5bnRoZXNpcyBCb3VuZGFyaWVzKio6XG4gKiAgICAtIENESyBgU3RhZ2VgIGNvbnN0cnVjdHMgY3JlYXRlIHN5bnRoZXNpcyBib3VuZGFyaWVzIHRoYXQgcHJldmVudCBBcHAtbGV2ZWwgYXNwZWN0c1xuICogICAgICBmcm9tIHRyYXZlcnNpbmcgaW50byB0aGVtXG4gKiAgICAtIFRoaXMgYXNwZWN0IE1VU1QgYmUgYXBwbGllZCB0byBlYWNoIFN0YWdlIGluZGl2aWR1YWxseSwgbm90IHRvIHRoZSBBcHBcbiAqICAgIC0gRXhhbXBsZTogYEFzcGVjdHMub2Yoc3RhZ2UpLmFkZChuZXcgUmVzb3VyY2VQcmVmaXhBc3BlY3Qoey4uLn0pKWBcbiAqXG4gKiAyLiAqKlByb3BlcnR5IE5hbWUgQ2FzaW5nKio6XG4gKiAgICAtIENsb3VkRm9ybWF0aW9uIHByb3BlcnRpZXMgdXNlIFBhc2NhbENhc2UgKGUuZy4sIGBGdW5jdGlvbk5hbWVgLCBgQnVja2V0TmFtZWApXG4gKiAgICAtIFVzaW5nIGNhbWVsQ2FzZSAoZS5nLiwgYGZ1bmN0aW9uTmFtZWApIHdpbGwgY2F1c2UgZXJyb3JzIHdpdGggdmVyc2lvbmluZyBhc3BlY3RzXG4gKiAgICAtIFdoZW4gdXNpbmcgYGFkZFByb3BlcnR5T3ZlcnJpZGUoKWAsIGFsd2F5cyB1c2UgdGhlIGV4YWN0IENsb3VkRm9ybWF0aW9uIHByb3BlcnR5IG5hbWVcbiAqXG4gKiAzLiAqKkFzcGVjdCBQcmlvcml0eSB3aXRoIFZlcnNpb25pbmcqKjpcbiAqICAgIC0gV2hlbiBjb21iaW5pbmcgd2l0aCBMYW1iZGFBbmRTdGVwRnVuY3Rpb25WZXJzaW9uaW5nQXNwZWN0LCBhcHBseSB0aGlzIGFzcGVjdCBCRUZPUkUgdmVyc2lvbmluZ1xuICogICAgLSBVc2UgQ0RLJ3MgcHJpb3JpdHkgc3lzdGVtOiBgQXNwZWN0cy5vZihzdGFnZSkuYWRkKHByZWZpeEFzcGVjdCwgeyBwcmlvcml0eTogMTAwIH0pYFxuICogICAgLSBUaGVuOiBgQXNwZWN0cy5vZihzdGFnZSkuYWRkKHZlcnNpb25pbmdBc3BlY3QsIHsgcHJpb3JpdHk6IDIwMCB9KWBcbiAqICAgIC0gTG93ZXIgcHJpb3JpdHkgbnVtYmVycyBydW4gZmlyc3RcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gQ29ycmVjdCB1c2FnZSB3aXRoIHN0YWdpbmdcbiAqIGNvbnN0IHN0YWdlID0gbmV3IEFwcGxpY2F0aW9uU3RhZ2UoYXBwLCAncHJvZCcpO1xuICogQXNwZWN0cy5vZihzdGFnZSkuYWRkKG5ldyBSZXNvdXJjZVByZWZpeEFzcGVjdCh7IHByZWZpeDogJ215YXBwJyB9KSwgeyBwcmlvcml0eTogMTAwIH0pO1xuICogQXNwZWN0cy5vZihzdGFnZSkuYWRkKG5ldyBMYW1iZGFBbmRTdGVwRnVuY3Rpb25WZXJzaW9uaW5nQXNwZWN0KCksIHsgcHJpb3JpdHk6IDIwMCB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VQcmVmaXhBc3BlY3QgaW1wbGVtZW50cyBJQXNwZWN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBwcmVmaXg6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBleGNsdWRlOiBTZXQ8c3RyaW5nPjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogUmVzb3VyY2VQcmVmaXhBc3BlY3RQcm9wcykge1xuICAgIGlmICghcHJvcHMucHJlZml4IHx8ICEvXlthLXowLTktXSskLy50ZXN0KHByb3BzLnByZWZpeCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBSZXNvdXJjZVByZWZpeEFzcGVjdDogcHJlZml4IG11c3QgY29udGFpbiBvbmx5IGxvd2VyY2FzZSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgaHlwaGVucywgZ290IFwiJHtwcm9wcy5wcmVmaXh9XCJgXG4gICAgICApO1xuXG4gICAgdGhpcy5wcmVmaXggPSBwcm9wcy5wcmVmaXg7XG4gICAgdGhpcy5leGNsdWRlID0gbmV3IFNldChwcm9wcy5leGNsdWRlID8/IFtdKTtcbiAgfVxuXG4gIHZpc2l0KG5vZGU6IElDb25zdHJ1Y3QpIHtcbiAgICBpZiAoIShub2RlIGluc3RhbmNlb2YgQ2ZuUmVzb3VyY2UpKSByZXR1cm47XG5cbiAgICBjb25zdCByZXNvdXJjZVR5cGUgPSBub2RlLmNmblJlc291cmNlVHlwZTtcbiAgICBjb25zdCBjb25maWcgPSBSRVNPVVJDRV9DT05GSUdbcmVzb3VyY2VUeXBlXTtcblxuICAgIGlmICghY29uZmlnIHx8IHRoaXMuZXhjbHVkZS5oYXMocmVzb3VyY2VUeXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgY2ZuTmFtZSwgbWF4TGVuZ3RoIH0gPSBjb25maWc7XG4gICAgY29uc3QgY2ZuUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPVxuICAgICAgKG5vZGUgYXMgQ2ZuUmVzb3VyY2VXaXRoUHJvcHMpLl9jZm5Qcm9wZXJ0aWVzID8/XG4gICAgICAobm9kZSBhcyBDZm5SZXNvdXJjZVdpdGhQcm9wcykuY2ZuUHJvcGVydGllcyA/P1xuICAgICAge307XG5cbiAgICAvLyBHZXQgYW55IGV4cGxpY2l0bHkgc2V0IG5hbWUsIG9yIGRlcml2ZSBvbmUgZnJvbSB0aGUgbG9naWNhbCBJRFxuICAgIGNvbnN0IGV4aXN0aW5nTmFtZSA9XG4gICAgICB0eXBlb2YgY2ZuUHJvcGVydGllc1tjZm5OYW1lXSA9PT0gXCJzdHJpbmdcIlxuICAgICAgICA/IGNmblByb3BlcnRpZXNbY2ZuTmFtZV1cbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgYmFzZU5hbWUgPSBleGlzdGluZ05hbWUgPz8gdGhpcy5kZXJpdmVOYW1lRnJvbUxvZ2ljYWxJZChub2RlKTtcblxuICAgIGlmICh0aGlzLmlzQWxyZWFkeVByZWZpeGVkKGJhc2VOYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHByZWZpeGVkTmFtZSA9IHRoaXMuYnVpbGRQcmVmaXhlZE5hbWUoXG4gICAgICBiYXNlTmFtZSxcbiAgICAgIHJlc291cmNlVHlwZSxcbiAgICAgIGNmblByb3BlcnRpZXNcbiAgICApO1xuXG4gICAgLy8gVHJ1bmNhdGlvbiBhcHBsaWVzIHRvIGFsbCBvdmVyZmxvd3Mg4oCUIGluY2x1ZGluZyB1c2VyLXNldCBuYW1lcyDigJQgYmVjYXVzZSBMM1xuICAgIC8vIGNvbnN0cnVjdHMgY2FuIGdlbmVyYXRlIG5hbWVzIHRoZSB1c2VyIGhhcyBubyBkaXJlY3QgY29udHJvbCBvdmVyLlxuICAgIGNvbnN0IGZpbmFsTmFtZSA9IHRoaXMudHJ1bmNhdGVUb0ZpdChwcmVmaXhlZE5hbWUsIG1heExlbmd0aCwgbm9kZSk7XG5cbiAgICBjb25zdCBoYXNFcnJvciA9IHRoaXMudmFsaWRhdGVSZXNvdXJjZU5hbWUoZmluYWxOYW1lLCByZXNvdXJjZVR5cGUsIG5vZGUpO1xuXG4gICAgaWYgKGhhc0Vycm9yKSByZXR1cm47XG5cbiAgICBub2RlLmFkZFByb3BlcnR5T3ZlcnJpZGUoY2ZuTmFtZSwgZmluYWxOYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNBbHJlYWR5UHJlZml4ZWQobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIG5hbWUuc3RhcnRzV2l0aChgJHt0aGlzLnByZWZpeH0tYCkgfHwgbmFtZS5zdGFydHNXaXRoKGAvJHt0aGlzLnByZWZpeH0vYClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXJpdmVOYW1lRnJvbUxvZ2ljYWxJZChub2RlOiBDZm5SZXNvdXJjZSkge1xuICAgIGNvbnN0IGxvZ2ljYWxJZCA9IFN0YWNrLm9mKG5vZGUpLmdldExvZ2ljYWxJZChub2RlKTtcbiAgICByZXR1cm4gbG9naWNhbElkXG4gICAgICAucmVwbGFjZSgvW15hLXpBLVowLTldKy9nLCBcIi1cIikgLy8gbm9uLWFscGhhbnVtZXJpYyDihpIgZGFzaFxuICAgICAgLnJlcGxhY2UoL14tK3wtKyQvZywgXCJcIik7IC8vIHRyaW0gbGVhZGluZy90cmFpbGluZyBkYXNoZXNcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIHByZWZpeGVkIG5hbWUsIGhhbmRsaW5nIHNwZWNpYWwgY2FzZXMgZm9yIHNwZWNpZmljIHJlc291cmNlIHR5cGVzLlxuICAgKlxuICAgKiBAcGFyYW0gYmFzZU5hbWUgLSBUaGUgYmFzZSByZXNvdXJjZSBuYW1lICh3aXRob3V0IHByZWZpeClcbiAgICogQHBhcmFtIGNmblJlc291cmNlVHlwZSAtIFRoZSBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZSB0eXBlXG4gICAqIEBwYXJhbSBjZm5Qcm9wZXJ0aWVzIC0gVGhlIENsb3VkRm9ybWF0aW9uIHJlc291cmNlIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgVGhlIGZpbmFsIHByZWZpeGVkIG5hbWUgd2l0aCBhbnkgc3BlY2lhbCBjYXNlIGhhbmRsaW5nIGFwcGxpZWRcbiAgICovXG4gIHByaXZhdGUgYnVpbGRQcmVmaXhlZE5hbWUoXG4gICAgYmFzZU5hbWU6IHN0cmluZyxcbiAgICBjZm5SZXNvdXJjZVR5cGU6IHN0cmluZyxcbiAgICBjZm5Qcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApOiBzdHJpbmcge1xuICAgIC8vIFNwZWNpYWwgY2FzZTogRklGTyBxdWV1ZXMgbXVzdCBlbmQgd2l0aCAuZmlmbyBzdWZmaXhcbiAgICBpZiAoXG4gICAgICBjZm5SZXNvdXJjZVR5cGUgPT09IFwiQVdTOjpTUVM6OlF1ZXVlXCIgJiZcbiAgICAgIGNmblByb3BlcnRpZXMuZmlmb1F1ZXVlID09PSB0cnVlICYmXG4gICAgICAhYmFzZU5hbWUuZW5kc1dpdGgoXCIuZmlmb1wiKVxuICAgICkge1xuICAgICAgcmV0dXJuIGAke3RoaXMucHJlZml4fS0ke2Jhc2VOYW1lfS5maWZvYDtcbiAgICB9XG5cbiAgICAvLyBTcGVjaWFsIGNhc2U6IEZJRk8gdG9waWNzIG11c3QgZW5kIHdpdGggLmZpZm8gc3VmZml4XG4gICAgaWYgKFxuICAgICAgY2ZuUmVzb3VyY2VUeXBlID09PSBcIkFXUzo6U05TOjpUb3BpY1wiICYmXG4gICAgICBjZm5Qcm9wZXJ0aWVzLmZpZm9Ub3BpYyA9PT0gdHJ1ZSAmJlxuICAgICAgIWJhc2VOYW1lLmVuZHNXaXRoKFwiLmZpZm9cIilcbiAgICApIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLnByZWZpeH0tJHtiYXNlTmFtZX0uZmlmb2A7XG4gICAgfVxuXG4gICAgLy8gU3BlY2lhbCBjYXNlOiBTU00gcGFyYW1ldGVyIG5hbWVzIHVzZSBwYXRoLXN0eWxlIHByZWZpeFxuICAgIGlmIChjZm5SZXNvdXJjZVR5cGUgPT09IFwiQVdTOjpTU006OlBhcmFtZXRlclwiKSB7XG4gICAgICByZXR1cm4gYC8ke3RoaXMucHJlZml4fS8ke2Jhc2VOYW1lfWA7XG4gICAgfVxuXG4gICAgLy8gU3BlY2lhbCBjYXNlOiBTMyBidWNrZXQgbmFtZSBiZSBsb3dlcmNhc2Ugb25seVxuICAgIGlmIChjZm5SZXNvdXJjZVR5cGUgPT09IFwiQVdTOjpTMzo6QnVja2V0XCIpIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLnByZWZpeH0tJHtiYXNlTmFtZX1gLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdDogc2ltcGxlIHByZWZpeFxuICAgIHJldHVybiBgJHt0aGlzLnByZWZpeH0tJHtiYXNlTmFtZX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFRydW5jYXRlcyBhIHByZWZpeGVkIG5hbWUgdG8gZml0IHdpdGhpbiBtYXhMZW5ndGggYnkgaGFzaGluZyB0aGUgb3JpZ2luYWxcbiAgICogZm9yIHVuaXF1ZW5lc3MuIEVtaXRzIGEgQ0RLIHdhcm5pbmcgd2hlbiB0cnVuY2F0aW9uIG9jY3Vycy5cbiAgICovXG4gIHByaXZhdGUgdHJ1bmNhdGVUb0ZpdChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgbWF4TGVuZ3RoOiBudW1iZXIsXG4gICAgbm9kZTogSUNvbnN0cnVjdFxuICApOiBzdHJpbmcge1xuICAgIGlmIChuYW1lLmxlbmd0aCA8PSBtYXhMZW5ndGgpIHJldHVybiBuYW1lO1xuXG4gICAgY29uc3QgaGFzaCA9IGNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKG5hbWUpLmRpZ2VzdChcImhleFwiKS5zbGljZSgwLCA4KTtcblxuICAgIC8vIFByZXNlcnZlIC5maWZvIHN1ZmZpeCDigJQgQVdTIHJlcXVpcmVzIGl0IGF0IHRoZSBlbmQgb2YgRklGTyByZXNvdXJjZSBuYW1lc1xuICAgIGNvbnN0IHN1ZmZpeCA9IG5hbWUuZW5kc1dpdGgoXCIuZmlmb1wiKSA/IFwiLmZpZm9cIiA6IFwiXCI7XG4gICAgY29uc3QgbmFtZVdpdGhvdXRTdWZmaXggPSBzdWZmaXggPyBuYW1lLnNsaWNlKDAsIC1zdWZmaXgubGVuZ3RoKSA6IG5hbWU7XG5cbiAgICAvLyAxIGFjY291bnRzIGZvciB0aGUgZGFzaCBzZXBhcmF0b3IgYmVmb3JlIHRoZSBoYXNoXG4gICAgY29uc3QgYnVkZ2V0ID0gbWF4TGVuZ3RoIC0gaGFzaC5sZW5ndGggLSAxIC0gc3VmZml4Lmxlbmd0aDtcbiAgICBjb25zdCB0cnVuY2F0ZWQgPSBuYW1lV2l0aG91dFN1ZmZpeC5zbGljZSgwLCBidWRnZXQpICsgXCItXCIgKyBoYXNoICsgc3VmZml4O1xuXG4gICAgQW5ub3RhdGlvbnMub2Yobm9kZSkuYWRkV2FybmluZyhcbiAgICAgIGBbUmVzb3VyY2VQcmVmaXhBc3BlY3RdIFwiJHtuYW1lfVwiICgke25hbWUubGVuZ3RofSBjaGFycykgZXhjZWVkcyB0aGUgbWF4aW11bSBhbGxvd2VkIGxlbmd0aCBvZiAke21heExlbmd0aH0uIGAgK1xuICAgICAgICBgTmFtZSBoYXMgYmVlbiB0cnVuY2F0ZWQgdG8gXCIke3RydW5jYXRlZH1cIi4gU2hvcnRlbiB0aGUgcmVzb3VyY2UgYmFzZSBuYW1lIG9yIHlvdXIgcHJlZml4IChcIiR7dGhpcy5wcmVmaXh9XCIpIHRvIGF2b2lkIHRydW5jYXRpb24uYFxuICAgICk7XG5cbiAgICByZXR1cm4gdHJ1bmNhdGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyByZXNvdXJjZS1zcGVjaWZpYyBzdHJ1Y3R1cmFsIG5hbWluZyByZXF1aXJlbWVudHMgdGhhdCBBV1MgZW5mb3JjZXMuXG4gICAqIExlbmd0aCB2aW9sYXRpb25zIGFyZSBoYW5kbGVkIHVwc3RyZWFtIGJ5IHRydW5jYXRlVG9GaXQuXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlUmVzb3VyY2VOYW1lKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBjZm5SZXNvdXJjZVR5cGU6IHN0cmluZyxcbiAgICBub2RlOiBJQ29uc3RydWN0XG4gICk6IGJvb2xlYW4ge1xuICAgIGxldCBoYXNFcnJvciA9IGZhbHNlO1xuXG4gICAgaWYgKGNmblJlc291cmNlVHlwZSA9PT0gXCJBV1M6OlMzOjpCdWNrZXRcIikge1xuICAgICAgaWYgKG5hbWUgIT09IG5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBBbm5vdGF0aW9ucy5vZihub2RlKS5hZGRFcnJvcihcbiAgICAgICAgICBgW1Jlc291cmNlUHJlZml4QXNwZWN0XSBTMyBidWNrZXQgbmFtZSBcIiR7bmFtZX1cIiBjb250YWlucyB1cHBlcmNhc2UgbGV0dGVycy4gYCArXG4gICAgICAgICAgICBgQnVja2V0IG5hbWVzIG11c3QgYmUgbG93ZXJjYXNlIG9ubHkuYFxuICAgICAgICApO1xuICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChuYW1lLmluY2x1ZGVzKFwiX1wiKSkge1xuICAgICAgICBBbm5vdGF0aW9ucy5vZihub2RlKS5hZGRFcnJvcihcbiAgICAgICAgICBgW1Jlc291cmNlUHJlZml4QXNwZWN0XSBTMyBidWNrZXQgbmFtZSBcIiR7bmFtZX1cIiBjb250YWlucyB1bmRlcnNjb3Jlcy4gYCArXG4gICAgICAgICAgICBgQnVja2V0IG5hbWVzIGNhbm5vdCBjb250YWluIHVuZGVyc2NvcmVzLiBVc2UgaHlwaGVucyBpbnN0ZWFkLmBcbiAgICAgICAgKTtcbiAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoYXNFcnJvcjtcbiAgfVxufVxuIl19
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtcHJlZml4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmVzb3VyY2UtcHJlZml4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUF1RTtBQUV2RSxtQ0FBb0M7QUErQnBDOzs7R0FHRztBQUNILE1BQU0sZUFBZSxHQUF1QztJQUMxRCxVQUFVO0lBQ1YsdUJBQXVCLEVBQUUsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFFbkUsVUFBVTtJQUNWLGlCQUFpQixFQUFFLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQzNELHNCQUFzQixFQUFFLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFO0lBQ2hFLDRCQUE0QixFQUFFLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFO0lBRXRFLFlBQVk7SUFDWixpQkFBaUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUMxRCxpQkFBaUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRTtJQUUzRCwyQkFBMkI7SUFDM0IsdUJBQXVCLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUU7SUFDNUQsbUJBQW1CLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDdkQseUJBQXlCLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDN0Qsa0JBQWtCLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDdEQsa0NBQWtDLEVBQUU7UUFDbEMsT0FBTyxFQUFFLGtCQUFrQjtRQUMzQixTQUFT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QUNGO0FBeE1ELG9EQXdNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFubm90YXRpb25zLCBDZm5SZXNvdXJjZSwgSUFzcGVjdCwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gXCJjcnlwdG9cIjtcblxuaW50ZXJmYWNlIFJlc291cmNlTmFtZUNvbmZpZyB7XG4gIC8qKiBUaGUgQ2xvdWRGb3JtYXRpb24gcHJvcGVydHkgdGhhdCBob2xkcyB0aGUgcmVzb3VyY2UncyBwaHlzaWNhbCBuYW1lICovXG4gIGNmbk5hbWU6IHN0cmluZztcbiAgLyoqIE1heGltdW0gYWxsb3dlZCBjaGFyYWN0ZXIgbGVuZ3RoIGZvciB0aGlzIHJlc291cmNlIHR5cGUgKi9cbiAgbWF4TGVuZ3RoOiBudW1iZXI7XG59XG5cbi8qKlxuICogRXh0ZW5zaW9uIHR5cGUgdG8gYWNjZXNzIGludGVybmFsIENsb3VkRm9ybWF0aW9uIHByb3BlcnRpZXMgb24gQ2ZuUmVzb3VyY2UuXG4gKlxuICogQ0RLIGRvZXMgbm90IHByb3ZpZGUgYSBwdWJsaWMgQVBJIHRvIHJlYWQgcmF3IENsb3VkRm9ybWF0aW9uIHByb3BlcnRpZXMgdGhhdCBoYXZlXG4gKiBiZWVuIHNldCBvbiBhIENmblJlc291cmNlLiBUaGUgcHJvcGVydGllcyBgX2NmblByb3BlcnRpZXNgIGFuZCBgY2ZuUHJvcGVydGllc2AgYXJlXG4gKiBwcm90ZWN0ZWQgYW5kIG9ubHkgYWNjZXNzaWJsZSB3aXRoaW4gdGhlIENmblJlc291cmNlIGNsYXNzIGhpZXJhcmNoeS5cbiAqXG4gKiBXZSBpbnZlc3RpZ2F0ZWQgdXNpbmcgQ0RLJ3MgcHVibGljIEFQSXMsIGJ1dCB0aGVyZSBpcyBubyBwdWJsaWMgbWV0aG9kIHRvIHJldHJpZXZlXG4gKiB0aGUgcmF3IHByb3BlcnR5IHZhbHVlcyB0aGF0IGhhdmUgYmVlbiBzZXQgKGUuZy4sIHZpYSBjb25zdHJ1Y3RvciBwcm9wcyBvciBhZGRQcm9wZXJ0eU92ZXJyaWRlKS5cbiAqIFRoZSBvbmx5IHB1YmxpYyBBUElzIGFyZSBmb3Igd3JpdGluZyAoYWRkUHJvcGVydHlPdmVycmlkZSwgYWRkUHJvcGVydHlEZWxldGlvbk92ZXJyaWRlKSBvclxuICogZ2V0dGluZyBhdHRyaWJ1dGUgcmVmZXJlbmNlcyAoZ2V0QXR0KSwgbm90IGZvciByZWFkaW5nIGxpdGVyYWwgcHJvcGVydHkgdmFsdWVzLlxuICpcbiAqIFRoaXMgdHlwZSBhc3NlcnRpb24gaXMgc2FmZSBiZWNhdXNlOlxuICogLSBXZSBvbmx5IHJlYWQgdGhlc2UgcHJvcGVydGllcywgbmV2ZXIgbW9kaWZ5IHRoZW1cbiAqIC0gV2UgbmVlZCB0byBjaGVjayBpZiBhIHVzZXIgZXhwbGljaXRseSBzZXQgYSBuYW1lIHByb3BlcnR5IGJlZm9yZSBhcHBseWluZyBvdXIgcHJlZml4XG4gKiAtIFRoZSBwcm9wZXJ0aWVzIGV4aXN0IGF0IHJ1bnRpbWUgYW5kIGFyZSBwYXJ0IG9mIENESydzIGludGVybmFsIGltcGxlbWVudGF0aW9uXG4gKi9cbnR5cGUgQ2ZuUmVzb3VyY2VXaXRoUHJvcHMgPSBDZm5SZXNvdXJjZSAmIHtcbiAgcmVhZG9ubHkgX2NmblByb3BlcnRpZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmVhZG9ubHkgY2ZuUHJvcGVydGllcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufTtcblxuLyoqXG4gKiBNYXBzIENsb3VkRm9ybWF0aW9uIHJlc291cmNlIHR5cGVzIHRvIHRoZWlyIG5hbWUgcHJvcGVydHkgYW5kIEFXUyBsZW5ndGggbGltaXRzLlxuICogU291cmNlczogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXRlbXBsYXRlLXJlc291cmNlLXR5cGUtcmVmLmh0bWxcbiAqL1xuY29uc3QgUkVTT1VSQ0VfQ09ORklHOiBSZWNvcmQ8c3RyaW5nLCBSZXNvdXJjZU5hbWVDb25maWc+ID0ge1xuICAvLyBDb21wdXRlXG4gIFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXCI6IHsgY2ZuTmFtZTogXCJGdW5jdGlvbk5hbWVcIiwgbWF4TGVuZ3RoOiA2NCB9LFxuXG4gIC8vIFN0b3JhZ2VcbiAgXCJBV1M6OlMzOjpCdWNrZXRcIjogeyBjZm5OYW1lOiBcIkJ1Y2tldE5hbWVcIiwgbWF4TGVuZ3RoOiA2MyB9LFxuICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCI6IHsgY2ZuTmFtZTogXCJUYWJsZU5hbWVcIiwgbWF4TGVuZ3RoOiAyNTUgfSxcbiAgXCJBV1M6OkR5bmFtb0RCOjpHbG9iYWxUYWJsZVwiOiB7IGNmbk5hbWU6IFwiVGFibGVOYW1lXCIsIG1heExlbmd0aDogMjU1IH0sXG5cbiAgLy8gTWVzc2FnaW5nXG4gIFwiQVdTOjpTUVM6OlF1ZXVlXCI6IHsgY2ZuTmFtZTogXCJRdWV1ZU5hbWVcIiwgbWF4TGVuZ3RoOiA4MCB9LFxuICBcIkFXUzo6U05TOjpUb3BpY1wiOiB7IGNmbk5hbWU6IFwiVG9waWNOYW1lXCIsIG1heExlbmd0aDogMjU2IH0sXG5cbiAgLy8gRXZlbnRpbmcgJiBPcmNoZXN0cmF0aW9uXG4gIFwiQVdTOjpFdmVudHM6OkV2ZW50QnVzXCI6IHsgY2ZuTmFtZTogXCJOYW1lXCIsIG1heExlbmd0aDogMjU2IH0sXG4gIFwiQVdTOjpFdmVudHM6OlJ1bGVcIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiA2NCB9LFxuICBcIkFXUzo6RXZlbnRzOjpDb25uZWN0aW9uXCI6IHsgY2ZuTmFtZTogXCJOYW1lXCIsIG1heExlbmd0aDogNjQgfSxcbiAgXCJBV1M6OlBpcGVzOjpQaXBlXCI6IHsgY2ZuTmFtZTogXCJOYW1lXCIsIG1heExlbmd0aDogNjQgfSxcbiAgXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZVwiOiB7XG4gICAgY2ZuTmFtZTogXCJTdGF0ZU1hY2hpbmVOYW1lXCIsXG4gICAgbWF4TGVuZ3RoOiA4MCxcbiAgfSxcbiAgXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OkFjdGl2aXR5XCI6IHsgY2ZuTmFtZTogXCJOYW1lXCIsIG1heExlbmd0aDogODAgfSxcbiAgXCJBV1M6OlNjaGVkdWxlcjo6U2NoZWR1bGVcIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiA2NCB9LFxuICBcIkFXUzo6U2NoZWR1bGVyOjpTY2hlZHVsZUdyb3VwXCI6IHsgY2ZuTmFtZTogXCJOYW1lXCIsIG1heExlbmd0aDogNjQgfSxcblxuICAvLyBBUElcbiAgXCJBV1M6OkFwaUdhdGV3YXk6OlJlc3RBcGlcIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiAxMjggfSxcbiAgXCJBV1M6OkFwaUdhdGV3YXk6OlVzYWdlUGxhblwiOiB7IGNmbk5hbWU6IFwiVXNhZ2VQbGFuTmFtZVwiLCBtYXhMZW5ndGg6IDEyOCB9LFxuICBcIkFXUzo6QXBpR2F0ZXdheTo6QXBpS2V5XCI6IHsgY2ZuTmFtZTogXCJOYW1lXCIsIG1heExlbmd0aDogMTI4IH0sXG4gIFwiQVdTOjpBcGlHYXRld2F5VjI6OkFwaVwiOiB7IGNmbk5hbWU6IFwiTmFtZVwiLCBtYXhMZW5ndGg6IDEyOCB9LFxuICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpBdXRob3JpemVyXCI6IHsgY2ZuTmFtZTogXCJOYW1lXCIsIG1heExlbmd0aDogMTI4IH0sXG5cbiAgLy8gU2VjcmV0cyAmIENvbmZpZ1xuICBcIkFXUzo6U2VjcmV0c01hbmFnZXI6OlNlY3JldFwiOiB7IGNmbk5hbWU6IFwiTmFtZVwiLCBtYXhMZW5ndGg6IDUxMiB9LFxuICBcIkFXUzo6U1NNOjpQYXJhbWV0ZXJcIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiAyMDQ4IH0sXG4gIFwiQVdTOjpBcHBDb25maWc6OkFwcGxpY2F0aW9uXCI6IHsgY2ZuTmFtZTogXCJOYW1lXCIsIG1heExlbmd0aDogNjQgfSxcbiAgXCJBV1M6OkFwcENvbmZpZzo6RW52aXJvbm1lbnRcIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiA2NCB9LFxuXG4gIC8vIE5vdGlmaWNhdGlvbnNcbiAgXCJBV1M6Ok5vdGlmaWNhdGlvbnM6Ok5vdGlmaWNhdGlvbkNvbmZpZ3VyYXRpb25cIjoge1xuICAgIGNmbk5hbWU6IFwiTmFtZVwiLFxuICAgIG1heExlbmd0aDogNjQsXG4gIH0sXG5cbiAgLy8gT2JzZXJ2YWJpbGl0eVxuICBcIkFXUzo6TG9nczo6TG9nR3JvdXBcIjogeyBjZm5OYW1lOiBcIkxvZ0dyb3VwTmFtZVwiLCBtYXhMZW5ndGg6IDUxMiB9LFxuICBcIkFXUzo6Q2xvdWRXYXRjaDo6QWxhcm1cIjogeyBjZm5OYW1lOiBcIkFsYXJtTmFtZVwiLCBtYXhMZW5ndGg6IDI1NSB9LFxuXG4gIC8vIElBTVxuICBcIkFXUzo6SUFNOjpSb2xlXCI6IHsgY2ZuTmFtZTogXCJSb2xlTmFtZVwiLCBtYXhMZW5ndGg6IDY0IH0sXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlUHJlZml4QXNwZWN0UHJvcHMge1xuICAvKipcbiAgICogVGhlIHByZWZpeCB0byBhcHBseSB0byBhbGwgcmVzb3VyY2UgbmFtZXMuXG4gICAqIGUuZy4gJ215YXBwLXByb2QnIOKGkiAnbXlhcHAtcHJvZC1vcmRlcnMnXG4gICAqL1xuICBwcmVmaXg6IHN0cmluZztcblxuICAvKipcbiAgICogUmVzb3VyY2UgdHlwZXMgdG8gc2tpcCBlbnRpcmVseS5cbiAgICogZS5nLiBbJ0FXUzo6SUFNOjpSb2xlJ10gdG8gbGVhdmUgSUFNIHJvbGUgbmFtZXMgdW50b3VjaGVkLlxuICAgKiBAZGVmYXVsdCBbXVxuICAgKi9cbiAgZXhjbHVkZT86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIENESyBBc3BlY3QgdGhhdCBhdXRvbWF0aWNhbGx5IHByZWZpeGVzIHBoeXNpY2FsIHJlc291cmNlIG5hbWVzIGFjcm9zcyBBV1MgcmVzb3VyY2VzLlxuICpcbiAqIEByZW1hcmtzXG4gKiAqKkNyaXRpY2FsIEltcGxlbWVudGF0aW9uIE5vdGVzOioqXG4gKlxuICogMS4gKipTdGFnZSBTeW50aGVzaXMgQm91bmRhcmllcyoqOlxuICogICAgLSBDREsgYFN0YWdlYCBjb25zdHJ1Y3RzIGNyZWF0ZSBzeW50aGVzaXMgYm91bmRhcmllcyB0aGF0IHByZXZlbnQgQXBwLWxldmVsIGFzcGVjdHNcbiAqICAgICAgZnJvbSB0cmF2ZXJzaW5nIGludG8gdGhlbVxuICogICAgLSBUaGlzIGFzcGVjdCBNVVNUIGJlIGFwcGxpZWQgdG8gZWFjaCBTdGFnZSBpbmRpdmlkdWFsbHksIG5vdCB0byB0aGUgQXBwXG4gKiAgICAtIEV4YW1wbGU6IGBBc3BlY3RzLm9mKHN0YWdlKS5hZGQobmV3IFJlc291cmNlUHJlZml4QXNwZWN0KHsuLi59KSlgXG4gKlxuICogMi4gKipQcm9wZXJ0eSBOYW1lIENhc2luZyoqOlxuICogICAgLSBDbG91ZEZvcm1hdGlvbiBwcm9wZXJ0aWVzIHVzZSBQYXNjYWxDYXNlIChlLmcuLCBgRnVuY3Rpb25OYW1lYCwgYEJ1Y2tldE5hbWVgKVxuICogICAgLSBVc2luZyBjYW1lbENhc2UgKGUuZy4sIGBmdW5jdGlvbk5hbWVgKSB3aWxsIGNhdXNlIGVycm9ycyB3aXRoIHZlcnNpb25pbmcgYXNwZWN0c1xuICogICAgLSBXaGVuIHVzaW5nIGBhZGRQcm9wZXJ0eU92ZXJyaWRlKClgLCBhbHdheXMgdXNlIHRoZSBleGFjdCBDbG91ZEZvcm1hdGlvbiBwcm9wZXJ0eSBuYW1lXG4gKlxuICogMy4gKipBc3BlY3QgUHJpb3JpdHkgd2l0aCBWZXJzaW9uaW5nKio6XG4gKiAgICAtIFdoZW4gY29tYmluaW5nIHdpdGggTGFtYmRhQW5kU3RlcEZ1bmN0aW9uVmVyc2lvbmluZ0FzcGVjdCwgYXBwbHkgdGhpcyBhc3BlY3QgQkVGT1JFIHZlcnNpb25pbmdcbiAqICAgIC0gVXNlIENESydzIHByaW9yaXR5IHN5c3RlbTogYEFzcGVjdHMub2Yoc3RhZ2UpLmFkZChwcmVmaXhBc3BlY3QsIHsgcHJpb3JpdHk6IDEwMCB9KWBcbiAqICAgIC0gVGhlbjogYEFzcGVjdHMub2Yoc3RhZ2UpLmFkZCh2ZXJzaW9uaW5nQXNwZWN0LCB7IHByaW9yaXR5OiAyMDAgfSlgXG4gKiAgICAtIExvd2VyIHByaW9yaXR5IG51bWJlcnMgcnVuIGZpcnN0XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIENvcnJlY3QgdXNhZ2Ugd2l0aCBzdGFnaW5nXG4gKiBjb25zdCBzdGFnZSA9IG5ldyBBcHBsaWNhdGlvblN0YWdlKGFwcCwgJ3Byb2QnKTtcbiAqIEFzcGVjdHMub2Yoc3RhZ2UpLmFkZChuZXcgUmVzb3VyY2VQcmVmaXhBc3BlY3QoeyBwcmVmaXg6ICdteWFwcCcgfSksIHsgcHJpb3JpdHk6IDEwMCB9KTtcbiAqIEFzcGVjdHMub2Yoc3RhZ2UpLmFkZChuZXcgTGFtYmRhQW5kU3RlcEZ1bmN0aW9uVmVyc2lvbmluZ0FzcGVjdCgpLCB7IHByaW9yaXR5OiAyMDAgfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFJlc291cmNlUHJlZml4QXNwZWN0IGltcGxlbWVudHMgSUFzcGVjdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJlZml4OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXhjbHVkZTogU2V0PHN0cmluZz47XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFJlc291cmNlUHJlZml4QXNwZWN0UHJvcHMpIHtcbiAgICBpZiAoIXByb3BzLnByZWZpeCB8fCAhL15bYS16MC05LV0rJC8udGVzdChwcm9wcy5wcmVmaXgpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgUmVzb3VyY2VQcmVmaXhBc3BlY3Q6IHByZWZpeCBtdXN0IGNvbnRhaW4gb25seSBsb3dlcmNhc2UgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgYW5kIGh5cGhlbnMsIGdvdCBcIiR7cHJvcHMucHJlZml4fVwiYFxuICAgICAgKTtcblxuICAgIHRoaXMucHJlZml4ID0gcHJvcHMucHJlZml4O1xuICAgIHRoaXMuZXhjbHVkZSA9IG5ldyBTZXQocHJvcHMuZXhjbHVkZSA/PyBbXSk7XG4gIH1cblxuICB2aXNpdChub2RlOiBJQ29uc3RydWN0KSB7XG4gICAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIENmblJlc291cmNlKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgcmVzb3VyY2VUeXBlID0gbm9kZS5jZm5SZXNvdXJjZVR5cGU7XG4gICAgY29uc3QgY29uZmlnID0gUkVTT1VSQ0VfQ09ORklHW3Jlc291cmNlVHlwZV07XG5cbiAgICBpZiAoIWNvbmZpZyB8fCB0aGlzLmV4Y2x1ZGUuaGFzKHJlc291cmNlVHlwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IGNmbk5hbWUsIG1heExlbmd0aCB9ID0gY29uZmlnO1xuICAgIGNvbnN0IGNmblByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID1cbiAgICAgIChub2RlIGFzIENmblJlc291cmNlV2l0aFByb3BzKS5fY2ZuUHJvcGVydGllcyA/P1xuICAgICAgKG5vZGUgYXMgQ2ZuUmVzb3VyY2VXaXRoUHJvcHMpLmNmblByb3BlcnRpZXMgPz9cbiAgICAgIHt9O1xuXG4gICAgY29uc3QgYmFzZU5hbWUgPSB0aGlzLnJlc29sdmVCYXNlTmFtZShub2RlLCBjZm5OYW1lLCBjZm5Qcm9wZXJ0aWVzKTtcblxuICAgIGlmICh0aGlzLnNob3VsZFNraXBSZXNvdXJjZShyZXNvdXJjZVR5cGUsIGJhc2VOYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzQWxyZWFkeVByZWZpeGVkKGJhc2VOYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHByZWZpeGVkTmFtZSA9IHRoaXMuYnVpbGRQcmVmaXhlZE5hbWUoXG4gICAgICBiYXNlTmFtZSxcbiAgICAgIHJlc291cmNlVHlwZSxcbiAgICAgIGNmblByb3BlcnRpZXNcbiAgICApO1xuXG4gICAgLy8gVHJ1bmNhdGlvbiBhcHBsaWVzIHRvIGFsbCBvdmVyZmxvd3Mg4oCUIGluY2x1ZGluZyB1c2VyLXNldCBuYW1lcyDigJQgYmVjYXVzZSBMM1xuICAgIC8vIGNvbnN0cnVjdHMgY2FuIGdlbmVyYXRlIG5hbWVzIHRoZSB1c2VyIGhhcyBubyBkaXJlY3QgY29udHJvbCBvdmVyLlxuICAgIGNvbnN0IGZpbmFsTmFtZSA9IHRoaXMudHJ1bmNhdGVUb0ZpdChwcmVmaXhlZE5hbWUsIG1heExlbmd0aCwgbm9kZSk7XG5cbiAgICBjb25zdCBoYXNFcnJvciA9IHRoaXMudmFsaWRhdGVSZXNvdXJjZU5hbWUoZmluYWxOYW1lLCByZXNvdXJjZVR5cGUsIG5vZGUpO1xuXG4gICAgaWYgKGhhc0Vycm9yKSByZXR1cm47XG5cbiAgICBub2RlLmFkZFByb3BlcnR5T3ZlcnJpZGUoY2ZuTmFtZSwgZmluYWxOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSByZXNvdXJjZSBzaG91bGQgYmUgc2tpcHBlZCBmcm9tIHByZWZpeGluZyBiYXNlZCBvblxuICAgKiByZXNvdXJjZS10eXBlLXNwZWNpZmljIHJ1bGVzIChlLmcuLCBBV1MtcmVzZXJ2ZWQgbmFtaW5nIGNvbnZlbnRpb25zKS5cbiAgICovXG4gIHByaXZhdGUgc2hvdWxkU2tpcFJlc291cmNlKGNmblJlc291cmNlVHlwZTogc3RyaW5nLCBiYXNlTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGNmblJlc291cmNlVHlwZSA9PT0gXCJBV1M6OkxvZ3M6OkxvZ0dyb3VwXCIgJiYgYmFzZU5hbWUuc3RhcnRzV2l0aChcIi9hd3MvXCIpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNBbHJlYWR5UHJlZml4ZWQobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIG5hbWUuc3RhcnRzV2l0aChgJHt0aGlzLnByZWZpeH0tYCkgfHwgbmFtZS5zdGFydHNXaXRoKGAvJHt0aGlzLnByZWZpeH0vYClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIHRoZSBiYXNlIG5hbWUgZm9yIGEgcmVzb3VyY2UgYnkgY2hlY2tpbmcgZXhwbGljaXRseSBzZXQgQ0ZOIHByb3BlcnRpZXNcbiAgICogZmlyc3QsIHRoZW4gZmFsbGluZyBiYWNrIHRvIGRlcml2aW5nIGEgbmFtZSBmcm9tIHRoZSBsb2dpY2FsIElELlxuICAgKiBDREsgc3RvcmVzIEwxIHByb3BlcnRpZXMgaW4gY2FtZWxDYXNlIGludGVybmFsbHksIHNvIGJvdGggY2FzaW5ncyBhcmUgY2hlY2tlZC5cbiAgICovXG4gIHByaXZhdGUgcmVzb2x2ZUJhc2VOYW1lKFxuICAgIG5vZGU6IENmblJlc291cmNlLFxuICAgIGNmbk5hbWU6IHN0cmluZyxcbiAgICBjZm5Qcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApIHtcbiAgICBjb25zdCBjYW1lbENmbk5hbWUgPSBjZm5OYW1lLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgY2ZuTmFtZS5zbGljZSgxKTtcbiAgICBjb25zdCByYXdOYW1lID0gY2ZuUHJvcGVydGllc1tjZm5OYW1lXSA/PyBjZm5Qcm9wZXJ0aWVzW2NhbWVsQ2ZuTmFtZV07XG4gICAgaWYgKHR5cGVvZiByYXdOYW1lID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gcmF3TmFtZTtcbiAgICB9XG5cbiAgICBjb25zdCBsb2dpY2FsSWQgPSBTdGFjay5vZihub2RlKS5nZXRMb2dpY2FsSWQobm9kZSk7XG4gICAgcmV0dXJuIGxvZ2ljYWxJZFxuICAgICAgLnJlcGxhY2UoL1teYS16QS1aMC05XSsvZywgXCItXCIpIC8vIG5vbi1hbHBoYW51bWVyaWMg4oaSIGRhc2hcbiAgICAgIC5yZXBsYWNlKC9eLSt8LSskL2csIFwiXCIpOyAvLyB0cmltIGxlYWRpbmcvdHJhaWxpbmcgZGFzaGVzXG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIHRoZSBwcmVmaXhlZCBuYW1lLCBoYW5kbGluZyBzcGVjaWFsIGNhc2VzIGZvciBzcGVjaWZpYyByZXNvdXJjZSB0eXBlcy5cbiAgICpcbiAgICogQHBhcmFtIGJhc2VOYW1lIC0gVGhlIGJhc2UgcmVzb3VyY2UgbmFtZSAod2l0aG91dCBwcmVmaXgpXG4gICAqIEBwYXJhbSBjZm5SZXNvdXJjZVR5cGUgLSBUaGUgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UgdHlwZVxuICAgKiBAcGFyYW0gY2ZuUHJvcGVydGllcyAtIFRoZSBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZSBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIFRoZSBmaW5hbCBwcmVmaXhlZCBuYW1lIHdpdGggYW55IHNwZWNpYWwgY2FzZSBoYW5kbGluZyBhcHBsaWVkXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkUHJlZml4ZWROYW1lKFxuICAgIGJhc2VOYW1lOiBzdHJpbmcsXG4gICAgY2ZuUmVzb3VyY2VUeXBlOiBzdHJpbmcsXG4gICAgY2ZuUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBGSUZPIHF1ZXVlcyBtdXN0IGVuZCB3aXRoIC5maWZvIHN1ZmZpeFxuICAgIGlmIChcbiAgICAgIGNmblJlc291cmNlVHlwZSA9PT0gXCJBV1M6OlNRUzo6UXVldWVcIiAmJlxuICAgICAgY2ZuUHJvcGVydGllcy5maWZvUXVldWUgPT09IHRydWUgJiZcbiAgICAgICFiYXNlTmFtZS5lbmRzV2l0aChcIi5maWZvXCIpXG4gICAgKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5wcmVmaXh9LSR7YmFzZU5hbWV9LmZpZm9gO1xuICAgIH1cblxuICAgIC8vIFNwZWNpYWwgY2FzZTogRklGTyB0b3BpY3MgbXVzdCBlbmQgd2l0aCAuZmlmbyBzdWZmaXhcbiAgICBpZiAoXG4gICAgICBjZm5SZXNvdXJjZVR5cGUgPT09IFwiQVdTOjpTTlM6OlRvcGljXCIgJiZcbiAgICAgIGNmblByb3BlcnRpZXMuZmlmb1RvcGljID09PSB0cnVlICYmXG4gICAgICAhYmFzZU5hbWUuZW5kc1dpdGgoXCIuZmlmb1wiKVxuICAgICkge1xuICAgICAgcmV0dXJuIGAke3RoaXMucHJlZml4fS0ke2Jhc2VOYW1lfS5maWZvYDtcbiAgICB9XG5cbiAgICAvLyBTcGVjaWFsIGNhc2U6IFNTTSBwYXJhbWV0ZXIgbmFtZXMgdXNlIHBhdGgtc3R5bGUgcHJlZml4XG4gICAgaWYgKGNmblJlc291cmNlVHlwZSA9PT0gXCJBV1M6OlNTTTo6UGFyYW1ldGVyXCIpIHtcbiAgICAgIHJldHVybiBgLyR7dGhpcy5wcmVmaXh9LyR7YmFzZU5hbWV9YDtcbiAgICB9XG5cbiAgICAvLyBTcGVjaWFsIGNhc2U6IFMzIGJ1Y2tldCBuYW1lIGJlIGxvd2VyY2FzZSBvbmx5XG4gICAgaWYgKGNmblJlc291cmNlVHlwZSA9PT0gXCJBV1M6OlMzOjpCdWNrZXRcIikge1xuICAgICAgcmV0dXJuIGAke3RoaXMucHJlZml4fS0ke2Jhc2VOYW1lfWAudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICAvLyBEZWZhdWx0OiBzaW1wbGUgcHJlZml4XG4gICAgcmV0dXJuIGAke3RoaXMucHJlZml4fS0ke2Jhc2VOYW1lfWA7XG4gIH1cblxuICAvKipcbiAgICogVHJ1bmNhdGVzIGEgcHJlZml4ZWQgbmFtZSB0byBmaXQgd2l0aGluIG1heExlbmd0aCBieSBoYXNoaW5nIHRoZSBvcmlnaW5hbFxuICAgKiBmb3IgdW5pcXVlbmVzcy4gRW1pdHMgYSBDREsgd2FybmluZyB3aGVuIHRydW5jYXRpb24gb2NjdXJzLlxuICAgKi9cbiAgcHJpdmF0ZSB0cnVuY2F0ZVRvRml0KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBtYXhMZW5ndGg6IG51bWJlcixcbiAgICBub2RlOiBJQ29uc3RydWN0XG4gICk6IHN0cmluZyB7XG4gICAgaWYgKG5hbWUubGVuZ3RoIDw9IG1heExlbmd0aCkgcmV0dXJuIG5hbWU7XG5cbiAgICBjb25zdCBoYXNoID0gY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUobmFtZSkuZGlnZXN0KFwiaGV4XCIpLnNsaWNlKDAsIDgpO1xuXG4gICAgLy8gUHJlc2VydmUgLmZpZm8gc3VmZml4IOKAlCBBV1MgcmVxdWlyZXMgaXQgYXQgdGhlIGVuZCBvZiBGSUZPIHJlc291cmNlIG5hbWVzXG4gICAgY29uc3Qgc3VmZml4ID0gbmFtZS5lbmRzV2l0aChcIi5maWZvXCIpID8gXCIuZmlmb1wiIDogXCJcIjtcbiAgICBjb25zdCBuYW1lV2l0aG91dFN1ZmZpeCA9IHN1ZmZpeCA/IG5hbWUuc2xpY2UoMCwgLXN1ZmZpeC5sZW5ndGgpIDogbmFtZTtcblxuICAgIC8vIDEgYWNjb3VudHMgZm9yIHRoZSBkYXNoIHNlcGFyYXRvciBiZWZvcmUgdGhlIGhhc2hcbiAgICBjb25zdCBidWRnZXQgPSBtYXhMZW5ndGggLSBoYXNoLmxlbmd0aCAtIDEgLSBzdWZmaXgubGVuZ3RoO1xuICAgIGNvbnN0IHRydW5jYXRlZCA9IG5hbWVXaXRob3V0U3VmZml4LnNsaWNlKDAsIGJ1ZGdldCkgKyBcIi1cIiArIGhhc2ggKyBzdWZmaXg7XG5cbiAgICBBbm5vdGF0aW9ucy5vZihub2RlKS5hZGRXYXJuaW5nKFxuICAgICAgYFtSZXNvdXJjZVByZWZpeEFzcGVjdF0gXCIke25hbWV9XCIgKCR7bmFtZS5sZW5ndGh9IGNoYXJzKSBleGNlZWRzIHRoZSBtYXhpbXVtIGFsbG93ZWQgbGVuZ3RoIG9mICR7bWF4TGVuZ3RofS4gYCArXG4gICAgICAgIGBOYW1lIGhhcyBiZWVuIHRydW5jYXRlZCB0byBcIiR7dHJ1bmNhdGVkfVwiLiBTaG9ydGVuIHRoZSByZXNvdXJjZSBiYXNlIG5hbWUgb3IgeW91ciBwcmVmaXggKFwiJHt0aGlzLnByZWZpeH1cIikgdG8gYXZvaWQgdHJ1bmNhdGlvbi5gXG4gICAgKTtcblxuICAgIHJldHVybiB0cnVuY2F0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHJlc291cmNlLXNwZWNpZmljIHN0cnVjdHVyYWwgbmFtaW5nIHJlcXVpcmVtZW50cyB0aGF0IEFXUyBlbmZvcmNlcy5cbiAgICogTGVuZ3RoIHZpb2xhdGlvbnMgYXJlIGhhbmRsZWQgdXBzdHJlYW0gYnkgdHJ1bmNhdGVUb0ZpdC5cbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVSZXNvdXJjZU5hbWUoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGNmblJlc291cmNlVHlwZTogc3RyaW5nLFxuICAgIG5vZGU6IElDb25zdHJ1Y3RcbiAgKTogYm9vbGVhbiB7XG4gICAgbGV0IGhhc0Vycm9yID0gZmFsc2U7XG5cbiAgICBpZiAoY2ZuUmVzb3VyY2VUeXBlID09PSBcIkFXUzo6UzM6OkJ1Y2tldFwiKSB7XG4gICAgICBpZiAobmFtZSAhPT0gbmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIEFubm90YXRpb25zLm9mKG5vZGUpLmFkZEVycm9yKFxuICAgICAgICAgIGBbUmVzb3VyY2VQcmVmaXhBc3BlY3RdIFMzIGJ1Y2tldCBuYW1lIFwiJHtuYW1lfVwiIGNvbnRhaW5zIHVwcGVyY2FzZSBsZXR0ZXJzLiBgICtcbiAgICAgICAgICAgIGBCdWNrZXQgbmFtZXMgbXVzdCBiZSBsb3dlcmNhc2Ugb25seS5gXG4gICAgICAgICk7XG4gICAgICAgIGhhc0Vycm9yID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5hbWUuaW5jbHVkZXMoXCJfXCIpKSB7XG4gICAgICAgIEFubm90YXRpb25zLm9mKG5vZGUpLmFkZEVycm9yKFxuICAgICAgICAgIGBbUmVzb3VyY2VQcmVmaXhBc3BlY3RdIFMzIGJ1Y2tldCBuYW1lIFwiJHtuYW1lfVwiIGNvbnRhaW5zIHVuZGVyc2NvcmVzLiBgICtcbiAgICAgICAgICAgIGBCdWNrZXQgbmFtZXMgY2Fubm90IGNvbnRhaW4gdW5kZXJzY29yZXMuIFVzZSBoeXBoZW5zIGluc3RlYWQuYFxuICAgICAgICApO1xuICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhc0Vycm9yO1xuICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aligent/cdk-aspects",
3
- "version": "0.5.7",
3
+ "version": "0.6.2",
4
4
  "description": "Collection of CDK Asppects",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
@@ -20,15 +20,15 @@
20
20
  },
21
21
  "devDependencies": {
22
22
  "@types/jest": "^29.5.10",
23
- "@types/node": "^20.19.39",
24
- "aws-cdk": "^2.1120.0",
23
+ "@types/node": "^24.12.4",
24
+ "aws-cdk": "^2.1124.1",
25
25
  "jest": "^29.7.0",
26
26
  "ts-jest": "^29.4.9",
27
27
  "ts-node": "^10.9.1",
28
28
  "typescript": "^5.3.2"
29
29
  },
30
30
  "dependencies": {
31
- "aws-cdk-lib": "^2.252.0",
31
+ "aws-cdk-lib": "^2.257.0",
32
32
  "constructs": "^10.5.0",
33
33
  "esbuild": "^0.28.0",
34
34
  "source-map-support": "^0.5.21"