@pipeline-builder/pipeline-core 3.4.134 → 3.4.136

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/lib/cdk.d.ts ADDED
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @module @pipeline-builder/pipeline-core/cdk
3
+ *
4
+ * The AWS CDK surface: the constructs that assemble a pipeline into a
5
+ * CodePipeline stack, the synth-time authoring types they take, and the adapters
6
+ * that turn plain `AWSConfig` data into CDK value objects.
7
+ *
8
+ * Everything reachable from here pulls in `aws-cdk-lib`, which is why it is a
9
+ * separate entry point from the package root. Import from here only in code that
10
+ * actually synthesizes stacks — the CLI's CDK app. Services that just need config
11
+ * or domain types import `@pipeline-builder/pipeline-core` instead and never load
12
+ * the CDK. `aws-cdk-lib` and `constructs` are peer dependencies; the consuming app
13
+ * supplies them, so there is exactly one copy of each on the resolution graph.
14
+ *
15
+ * **Constructs**
16
+ * - PipelineBuilder — top-level CDK pipeline construct
17
+ * - StageBuilder — pipeline stage composition
18
+ * - PluginLookup — plugin resolution custom resource
19
+ * - ArtifactManager — build artifact management
20
+ * - PipelineConfiguration — pipeline config resolution
21
+ *
22
+ * **Authoring types**
23
+ * - SourceTypes, StepTypes — pipeline source and step configuration
24
+ * - NetworkTypes — VPC/subnet/security-group configuration
25
+ *
26
+ * **Config adapters**
27
+ * - lambdaRuntime, lambdaTimeout, logRetention, ... — `AWSConfig` → CDK values
28
+ */
29
+ export * from './config/aws-config-cdk.js';
30
+ export * from './core/network-types.js';
31
+ export * from './core/artifact-manager.js';
32
+ export { buildConfigFromMetadata, metadataForCodePipeline, metadataForCodeBuildStep, metadataForShellStep, metadataForBuildEnvironment, } from './core/metadata-builder.js';
33
+ export * from './pipeline/source-types.js';
34
+ export * from './pipeline/step-types.js';
35
+ export * from './pipeline/stage-builder.js';
36
+ export * from './pipeline/pipeline-builder.js';
37
+ export * from './pipeline/plugin-lookup.js';
38
+ export { PipelineConfiguration } from './pipeline/pipeline-configuration.js';
package/lib/cdk.js ADDED
@@ -0,0 +1,44 @@
1
+ // Copyright 2026 Pipeline Builder Contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ /**
4
+ * @module @pipeline-builder/pipeline-core/cdk
5
+ *
6
+ * The AWS CDK surface: the constructs that assemble a pipeline into a
7
+ * CodePipeline stack, the synth-time authoring types they take, and the adapters
8
+ * that turn plain `AWSConfig` data into CDK value objects.
9
+ *
10
+ * Everything reachable from here pulls in `aws-cdk-lib`, which is why it is a
11
+ * separate entry point from the package root. Import from here only in code that
12
+ * actually synthesizes stacks — the CLI's CDK app. Services that just need config
13
+ * or domain types import `@pipeline-builder/pipeline-core` instead and never load
14
+ * the CDK. `aws-cdk-lib` and `constructs` are peer dependencies; the consuming app
15
+ * supplies them, so there is exactly one copy of each on the resolution graph.
16
+ *
17
+ * **Constructs**
18
+ * - PipelineBuilder — top-level CDK pipeline construct
19
+ * - StageBuilder — pipeline stage composition
20
+ * - PluginLookup — plugin resolution custom resource
21
+ * - ArtifactManager — build artifact management
22
+ * - PipelineConfiguration — pipeline config resolution
23
+ *
24
+ * **Authoring types**
25
+ * - SourceTypes, StepTypes — pipeline source and step configuration
26
+ * - NetworkTypes — VPC/subnet/security-group configuration
27
+ *
28
+ * **Config adapters**
29
+ * - lambdaRuntime, lambdaTimeout, logRetention, ... — `AWSConfig` → CDK values
30
+ */
31
+ // Config adapters (plain AWSConfig data → CDK value objects)
32
+ export * from './config/aws-config-cdk.js';
33
+ // Infrastructure types that reference CDK values
34
+ export * from './core/network-types.js';
35
+ export * from './core/artifact-manager.js';
36
+ export { buildConfigFromMetadata, metadataForCodePipeline, metadataForCodeBuildStep, metadataForShellStep, metadataForBuildEnvironment, } from './core/metadata-builder.js';
37
+ // Pipeline authoring types and CDK constructs
38
+ export * from './pipeline/source-types.js';
39
+ export * from './pipeline/step-types.js';
40
+ export * from './pipeline/stage-builder.js';
41
+ export * from './pipeline/pipeline-builder.js';
42
+ export * from './pipeline/plugin-lookup.js';
43
+ export { PipelineConfiguration } from './pipeline/pipeline-configuration.js';
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Nkay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQkc7QUFFSCw2REFBNkQ7QUFDN0QsY0FBYyw0QkFBNEIsQ0FBQztBQUUzQyxpREFBaUQ7QUFDakQsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsdUJBQXVCLEVBQ3ZCLHdCQUF3QixFQUN4QixvQkFBb0IsRUFDcEIsMkJBQTJCLEdBQzVCLE1BQU0sNEJBQTRCLENBQUM7QUFFcEMsOENBQThDO0FBQzlDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIEBtb2R1bGUgQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtY29yZS9jZGtcbiAqXG4gKiBUaGUgQVdTIENESyBzdXJmYWNlOiB0aGUgY29uc3RydWN0cyB0aGF0IGFzc2VtYmxlIGEgcGlwZWxpbmUgaW50byBhXG4gKiBDb2RlUGlwZWxpbmUgc3RhY2ssIHRoZSBzeW50aC10aW1lIGF1dGhvcmluZyB0eXBlcyB0aGV5IHRha2UsIGFuZCB0aGUgYWRhcHRlcnNcbiAqIHRoYXQgdHVybiBwbGFpbiBgQVdTQ29uZmlnYCBkYXRhIGludG8gQ0RLIHZhbHVlIG9iamVjdHMuXG4gKlxuICogRXZlcnl0aGluZyByZWFjaGFibGUgZnJvbSBoZXJlIHB1bGxzIGluIGBhd3MtY2RrLWxpYmAsIHdoaWNoIGlzIHdoeSBpdCBpcyBhXG4gKiBzZXBhcmF0ZSBlbnRyeSBwb2ludCBmcm9tIHRoZSBwYWNrYWdlIHJvb3QuIEltcG9ydCBmcm9tIGhlcmUgb25seSBpbiBjb2RlIHRoYXRcbiAqIGFjdHVhbGx5IHN5bnRoZXNpemVzIHN0YWNrcyDigJQgdGhlIENMSSdzIENESyBhcHAuIFNlcnZpY2VzIHRoYXQganVzdCBuZWVkIGNvbmZpZ1xuICogb3IgZG9tYWluIHR5cGVzIGltcG9ydCBgQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtY29yZWAgaW5zdGVhZCBhbmQgbmV2ZXIgbG9hZFxuICogdGhlIENESy4gYGF3cy1jZGstbGliYCBhbmQgYGNvbnN0cnVjdHNgIGFyZSBwZWVyIGRlcGVuZGVuY2llczsgdGhlIGNvbnN1bWluZyBhcHBcbiAqIHN1cHBsaWVzIHRoZW0sIHNvIHRoZXJlIGlzIGV4YWN0bHkgb25lIGNvcHkgb2YgZWFjaCBvbiB0aGUgcmVzb2x1dGlvbiBncmFwaC5cbiAqXG4gKiAqKkNvbnN0cnVjdHMqKlxuICogLSBQaXBlbGluZUJ1aWxkZXIg4oCUIHRvcC1sZXZlbCBDREsgcGlwZWxpbmUgY29uc3RydWN0XG4gKiAtIFN0YWdlQnVpbGRlciDigJQgcGlwZWxpbmUgc3RhZ2UgY29tcG9zaXRpb25cbiAqIC0gUGx1Z2luTG9va3VwIOKAlCBwbHVnaW4gcmVzb2x1dGlvbiBjdXN0b20gcmVzb3VyY2VcbiAqIC0gQXJ0aWZhY3RNYW5hZ2VyIOKAlCBidWlsZCBhcnRpZmFjdCBtYW5hZ2VtZW50XG4gKiAtIFBpcGVsaW5lQ29uZmlndXJhdGlvbiDigJQgcGlwZWxpbmUgY29uZmlnIHJlc29sdXRpb25cbiAqXG4gKiAqKkF1dGhvcmluZyB0eXBlcyoqXG4gKiAtIFNvdXJjZVR5cGVzLCBTdGVwVHlwZXMg4oCUIHBpcGVsaW5lIHNvdXJjZSBhbmQgc3RlcCBjb25maWd1cmF0aW9uXG4gKiAtIE5ldHdvcmtUeXBlcyDigJQgVlBDL3N1Ym5ldC9zZWN1cml0eS1ncm91cCBjb25maWd1cmF0aW9uXG4gKlxuICogKipDb25maWcgYWRhcHRlcnMqKlxuICogLSBsYW1iZGFSdW50aW1lLCBsYW1iZGFUaW1lb3V0LCBsb2dSZXRlbnRpb24sIC4uLiDigJQgYEFXU0NvbmZpZ2Ag4oaSIENESyB2YWx1ZXNcbiAqL1xuXG4vLyBDb25maWcgYWRhcHRlcnMgKHBsYWluIEFXU0NvbmZpZyBkYXRhIOKGkiBDREsgdmFsdWUgb2JqZWN0cylcbmV4cG9ydCAqIGZyb20gJy4vY29uZmlnL2F3cy1jb25maWctY2RrLmpzJztcblxuLy8gSW5mcmFzdHJ1Y3R1cmUgdHlwZXMgdGhhdCByZWZlcmVuY2UgQ0RLIHZhbHVlc1xuZXhwb3J0ICogZnJvbSAnLi9jb3JlL25ldHdvcmstdHlwZXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb3JlL2FydGlmYWN0LW1hbmFnZXIuanMnO1xuZXhwb3J0IHtcbiAgYnVpbGRDb25maWdGcm9tTWV0YWRhdGEsXG4gIG1ldGFkYXRhRm9yQ29kZVBpcGVsaW5lLFxuICBtZXRhZGF0YUZvckNvZGVCdWlsZFN0ZXAsXG4gIG1ldGFkYXRhRm9yU2hlbGxTdGVwLFxuICBtZXRhZGF0YUZvckJ1aWxkRW52aXJvbm1lbnQsXG59IGZyb20gJy4vY29yZS9tZXRhZGF0YS1idWlsZGVyLmpzJztcblxuLy8gUGlwZWxpbmUgYXV0aG9yaW5nIHR5cGVzIGFuZCBDREsgY29uc3RydWN0c1xuZXhwb3J0ICogZnJvbSAnLi9waXBlbGluZS9zb3VyY2UtdHlwZXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlbGluZS9zdGVwLXR5cGVzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZWxpbmUvc3RhZ2UtYnVpbGRlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3BpcGVsaW5lL3BpcGVsaW5lLWJ1aWxkZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlbGluZS9wbHVnaW4tbG9va3VwLmpzJztcbmV4cG9ydCB7IFBpcGVsaW5lQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vcGlwZWxpbmUvcGlwZWxpbmUtY29uZmlndXJhdGlvbi5qcyc7XG4iXX0=
@@ -0,0 +1,49 @@
1
+ /**
2
+ * CDK adapters for {@link AWSConfig}.
3
+ *
4
+ * `AWSConfig` is deliberately plain data (see its doc comment): env-loaded
5
+ * numbers and strings, no `aws-cdk-lib` on the import graph. That keeps `Config`
6
+ * — which every API service reads — free of CDK. These functions are the single
7
+ * conversion point from that plain data into CDK value objects, and they live
8
+ * behind the `@pipeline-builder/pipeline-core/cdk` entry point, so only code that
9
+ * actually synthesizes stacks pays for `aws-cdk-lib`.
10
+ */
11
+ import { Duration, RemovalPolicy } from 'aws-cdk-lib';
12
+ import { Architecture, Runtime } from 'aws-cdk-lib/aws-lambda';
13
+ import { RetentionDays } from 'aws-cdk-lib/aws-logs';
14
+ import type { AWSConfig } from './config-types.js';
15
+ /**
16
+ * Resolve a Lambda runtime identifier (e.g. `'nodejs24.x'`) to a CDK `Runtime`.
17
+ *
18
+ * @param runtime - runtime identifier from `Config.get('aws').lambda.runtime`
19
+ * @returns the CDK enum member; falls back to Node.js 24 for unknown values
20
+ */
21
+ export declare function lambdaRuntime(runtime: AWSConfig['lambda']['runtime']): Runtime;
22
+ /**
23
+ * Convert a Lambda timeout in seconds to a CDK `Duration`.
24
+ *
25
+ * @param seconds - timeout from `Config.get('aws').lambda.timeoutSeconds`
26
+ */
27
+ export declare function lambdaTimeout(seconds: AWSConfig['lambda']['timeoutSeconds']): Duration;
28
+ /**
29
+ * Resolve a Lambda architecture name to a CDK `Architecture`.
30
+ *
31
+ * @param architecture - value from `Config.get('aws').lambda.architecture`
32
+ */
33
+ export declare function lambdaArchitecture(architecture: AWSConfig['lambda']['architecture']): Architecture;
34
+ /**
35
+ * Convert a retention day count to CDK's `RetentionDays`.
36
+ *
37
+ * `RetentionDays` members are the day counts themselves, so the cast is exact —
38
+ * `infrastructure-config.ts` has already validated the value against the same
39
+ * set of allowed periods.
40
+ *
41
+ * @param days - value from `Config.get('aws').logging.retentionDays`
42
+ */
43
+ export declare function logRetention(days: AWSConfig['logging']['retentionDays']): RetentionDays;
44
+ /**
45
+ * Resolve a log-group removal policy name to a CDK `RemovalPolicy`.
46
+ *
47
+ * @param policy - value from `Config.get('aws').logging.removalPolicy`
48
+ */
49
+ export declare function logRemovalPolicy(policy: AWSConfig['logging']['removalPolicy']): RemovalPolicy;
@@ -0,0 +1,65 @@
1
+ // Copyright 2026 Pipeline Builder Contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ /**
4
+ * CDK adapters for {@link AWSConfig}.
5
+ *
6
+ * `AWSConfig` is deliberately plain data (see its doc comment): env-loaded
7
+ * numbers and strings, no `aws-cdk-lib` on the import graph. That keeps `Config`
8
+ * — which every API service reads — free of CDK. These functions are the single
9
+ * conversion point from that plain data into CDK value objects, and they live
10
+ * behind the `@pipeline-builder/pipeline-core/cdk` entry point, so only code that
11
+ * actually synthesizes stacks pays for `aws-cdk-lib`.
12
+ */
13
+ import { Duration, RemovalPolicy } from 'aws-cdk-lib';
14
+ import { Architecture, Runtime } from 'aws-cdk-lib/aws-lambda';
15
+ import { RetentionDays } from 'aws-cdk-lib/aws-logs';
16
+ /** Runtime identifiers this platform supports, mapped to their CDK enum member. */
17
+ const RUNTIMES = {
18
+ 'nodejs24.x': Runtime.NODEJS_24_X,
19
+ };
20
+ /**
21
+ * Resolve a Lambda runtime identifier (e.g. `'nodejs24.x'`) to a CDK `Runtime`.
22
+ *
23
+ * @param runtime - runtime identifier from `Config.get('aws').lambda.runtime`
24
+ * @returns the CDK enum member; falls back to Node.js 24 for unknown values
25
+ */
26
+ export function lambdaRuntime(runtime) {
27
+ return RUNTIMES[runtime] || Runtime.NODEJS_24_X;
28
+ }
29
+ /**
30
+ * Convert a Lambda timeout in seconds to a CDK `Duration`.
31
+ *
32
+ * @param seconds - timeout from `Config.get('aws').lambda.timeoutSeconds`
33
+ */
34
+ export function lambdaTimeout(seconds) {
35
+ return Duration.seconds(seconds);
36
+ }
37
+ /**
38
+ * Resolve a Lambda architecture name to a CDK `Architecture`.
39
+ *
40
+ * @param architecture - value from `Config.get('aws').lambda.architecture`
41
+ */
42
+ export function lambdaArchitecture(architecture) {
43
+ return architecture === 'x86_64' ? Architecture.X86_64 : Architecture.ARM_64;
44
+ }
45
+ /**
46
+ * Convert a retention day count to CDK's `RetentionDays`.
47
+ *
48
+ * `RetentionDays` members are the day counts themselves, so the cast is exact —
49
+ * `infrastructure-config.ts` has already validated the value against the same
50
+ * set of allowed periods.
51
+ *
52
+ * @param days - value from `Config.get('aws').logging.retentionDays`
53
+ */
54
+ export function logRetention(days) {
55
+ return days;
56
+ }
57
+ /**
58
+ * Resolve a log-group removal policy name to a CDK `RemovalPolicy`.
59
+ *
60
+ * @param policy - value from `Config.get('aws').logging.removalPolicy`
61
+ */
62
+ export function logRemovalPolicy(policy) {
63
+ return policy === 'retain' ? RemovalPolicy.RETAIN : RemovalPolicy.DESTROY;
64
+ }
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWNvbmZpZy1jZGsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL2F3cy1jb25maWctY2RrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7OztHQVNHO0FBRUgsT0FBTyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHckQsbUZBQW1GO0FBQ25GLE1BQU0sUUFBUSxHQUE0QjtJQUN4QyxZQUFZLEVBQUUsT0FBTyxDQUFDLFdBQVc7Q0FDbEMsQ0FBQztBQUVGOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxPQUF1QztJQUNuRSxPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDO0FBQ2xELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxPQUE4QztJQUMxRSxPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsWUFBaUQ7SUFDbEYsT0FBTyxZQUFZLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO0FBQy9FLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsSUFBMkM7SUFDdEUsT0FBTyxJQUFxQixDQUFDO0FBQy9CLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLE1BQTZDO0lBQzVFLE9BQU8sTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQztBQUM1RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogQ0RLIGFkYXB0ZXJzIGZvciB7QGxpbmsgQVdTQ29uZmlnfS5cbiAqXG4gKiBgQVdTQ29uZmlnYCBpcyBkZWxpYmVyYXRlbHkgcGxhaW4gZGF0YSAoc2VlIGl0cyBkb2MgY29tbWVudCk6IGVudi1sb2FkZWRcbiAqIG51bWJlcnMgYW5kIHN0cmluZ3MsIG5vIGBhd3MtY2RrLWxpYmAgb24gdGhlIGltcG9ydCBncmFwaC4gVGhhdCBrZWVwcyBgQ29uZmlnYFxuICog4oCUIHdoaWNoIGV2ZXJ5IEFQSSBzZXJ2aWNlIHJlYWRzIOKAlCBmcmVlIG9mIENESy4gVGhlc2UgZnVuY3Rpb25zIGFyZSB0aGUgc2luZ2xlXG4gKiBjb252ZXJzaW9uIHBvaW50IGZyb20gdGhhdCBwbGFpbiBkYXRhIGludG8gQ0RLIHZhbHVlIG9iamVjdHMsIGFuZCB0aGV5IGxpdmVcbiAqIGJlaGluZCB0aGUgYEBwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWNvcmUvY2RrYCBlbnRyeSBwb2ludCwgc28gb25seSBjb2RlIHRoYXRcbiAqIGFjdHVhbGx5IHN5bnRoZXNpemVzIHN0YWNrcyBwYXlzIGZvciBgYXdzLWNkay1saWJgLlxuICovXG5cbmltcG9ydCB7IER1cmF0aW9uLCBSZW1vdmFsUG9saWN5IH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQXJjaGl0ZWN0dXJlLCBSdW50aW1lIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBSZXRlbnRpb25EYXlzIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0IHR5cGUgeyBBV1NDb25maWcgfSBmcm9tICcuL2NvbmZpZy10eXBlcy5qcyc7XG5cbi8qKiBSdW50aW1lIGlkZW50aWZpZXJzIHRoaXMgcGxhdGZvcm0gc3VwcG9ydHMsIG1hcHBlZCB0byB0aGVpciBDREsgZW51bSBtZW1iZXIuICovXG5jb25zdCBSVU5USU1FUzogUmVjb3JkPHN0cmluZywgUnVudGltZT4gPSB7XG4gICdub2RlanMyNC54JzogUnVudGltZS5OT0RFSlNfMjRfWCxcbn07XG5cbi8qKlxuICogUmVzb2x2ZSBhIExhbWJkYSBydW50aW1lIGlkZW50aWZpZXIgKGUuZy4gYCdub2RlanMyNC54J2ApIHRvIGEgQ0RLIGBSdW50aW1lYC5cbiAqXG4gKiBAcGFyYW0gcnVudGltZSAtIHJ1bnRpbWUgaWRlbnRpZmllciBmcm9tIGBDb25maWcuZ2V0KCdhd3MnKS5sYW1iZGEucnVudGltZWBcbiAqIEByZXR1cm5zIHRoZSBDREsgZW51bSBtZW1iZXI7IGZhbGxzIGJhY2sgdG8gTm9kZS5qcyAyNCBmb3IgdW5rbm93biB2YWx1ZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxhbWJkYVJ1bnRpbWUocnVudGltZTogQVdTQ29uZmlnWydsYW1iZGEnXVsncnVudGltZSddKTogUnVudGltZSB7XG4gIHJldHVybiBSVU5USU1FU1tydW50aW1lXSB8fCBSdW50aW1lLk5PREVKU18yNF9YO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSBMYW1iZGEgdGltZW91dCBpbiBzZWNvbmRzIHRvIGEgQ0RLIGBEdXJhdGlvbmAuXG4gKlxuICogQHBhcmFtIHNlY29uZHMgLSB0aW1lb3V0IGZyb20gYENvbmZpZy5nZXQoJ2F3cycpLmxhbWJkYS50aW1lb3V0U2Vjb25kc2BcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxhbWJkYVRpbWVvdXQoc2Vjb25kczogQVdTQ29uZmlnWydsYW1iZGEnXVsndGltZW91dFNlY29uZHMnXSk6IER1cmF0aW9uIHtcbiAgcmV0dXJuIER1cmF0aW9uLnNlY29uZHMoc2Vjb25kcyk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIExhbWJkYSBhcmNoaXRlY3R1cmUgbmFtZSB0byBhIENESyBgQXJjaGl0ZWN0dXJlYC5cbiAqXG4gKiBAcGFyYW0gYXJjaGl0ZWN0dXJlIC0gdmFsdWUgZnJvbSBgQ29uZmlnLmdldCgnYXdzJykubGFtYmRhLmFyY2hpdGVjdHVyZWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxhbWJkYUFyY2hpdGVjdHVyZShhcmNoaXRlY3R1cmU6IEFXU0NvbmZpZ1snbGFtYmRhJ11bJ2FyY2hpdGVjdHVyZSddKTogQXJjaGl0ZWN0dXJlIHtcbiAgcmV0dXJuIGFyY2hpdGVjdHVyZSA9PT0gJ3g4Nl82NCcgPyBBcmNoaXRlY3R1cmUuWDg2XzY0IDogQXJjaGl0ZWN0dXJlLkFSTV82NDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgcmV0ZW50aW9uIGRheSBjb3VudCB0byBDREsncyBgUmV0ZW50aW9uRGF5c2AuXG4gKlxuICogYFJldGVudGlvbkRheXNgIG1lbWJlcnMgYXJlIHRoZSBkYXkgY291bnRzIHRoZW1zZWx2ZXMsIHNvIHRoZSBjYXN0IGlzIGV4YWN0IOKAlFxuICogYGluZnJhc3RydWN0dXJlLWNvbmZpZy50c2AgaGFzIGFscmVhZHkgdmFsaWRhdGVkIHRoZSB2YWx1ZSBhZ2FpbnN0IHRoZSBzYW1lXG4gKiBzZXQgb2YgYWxsb3dlZCBwZXJpb2RzLlxuICpcbiAqIEBwYXJhbSBkYXlzIC0gdmFsdWUgZnJvbSBgQ29uZmlnLmdldCgnYXdzJykubG9nZ2luZy5yZXRlbnRpb25EYXlzYFxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9nUmV0ZW50aW9uKGRheXM6IEFXU0NvbmZpZ1snbG9nZ2luZyddWydyZXRlbnRpb25EYXlzJ10pOiBSZXRlbnRpb25EYXlzIHtcbiAgcmV0dXJuIGRheXMgYXMgUmV0ZW50aW9uRGF5cztcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgbG9nLWdyb3VwIHJlbW92YWwgcG9saWN5IG5hbWUgdG8gYSBDREsgYFJlbW92YWxQb2xpY3lgLlxuICpcbiAqIEBwYXJhbSBwb2xpY3kgLSB2YWx1ZSBmcm9tIGBDb25maWcuZ2V0KCdhd3MnKS5sb2dnaW5nLnJlbW92YWxQb2xpY3lgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2dSZW1vdmFsUG9saWN5KHBvbGljeTogQVdTQ29uZmlnWydsb2dnaW5nJ11bJ3JlbW92YWxQb2xpY3knXSk6IFJlbW92YWxQb2xpY3kge1xuICByZXR1cm4gcG9saWN5ID09PSAncmV0YWluJyA/IFJlbW92YWxQb2xpY3kuUkVUQUlOIDogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZO1xufVxuIl19
@@ -1,8 +1,4 @@
1
1
  import type { QuotaTier, QuotaTierLimits } from '@pipeline-builder/api-core';
2
- import type { Duration, RemovalPolicy } from 'aws-cdk-lib';
3
- import type { ComputeType } from 'aws-cdk-lib/aws-codebuild';
4
- import type { Architecture, Runtime } from 'aws-cdk-lib/aws-lambda';
5
- import type { RetentionDays } from 'aws-cdk-lib/aws-logs';
6
2
  import type { Algorithm } from 'jsonwebtoken';
7
3
  /**
8
4
  * Type-safe configuration interface
@@ -180,21 +176,36 @@ export interface ComplianceConfig {
180
176
  /** Cross-pod leader-lock TTL for the digest scheduler (ms). Default: 300000. */
181
177
  readonly digestLockTtlMs: number;
182
178
  }
179
+ /**
180
+ * AWS infrastructure configuration.
181
+ *
182
+ * Deliberately expressed in PLAIN DATA (numbers, strings, string unions) rather
183
+ * than CDK value objects (`Duration`, `Runtime`, `RetentionDays`, ...). Config is
184
+ * loaded by every service, but only the CDK entry point (`@pipeline-builder/
185
+ * pipeline-core/cdk`) builds stacks typing this block with CDK classes put
186
+ * `aws-cdk-lib` on the import graph of `Config`, and therefore of every API
187
+ * service that reads so much as a port number. Conversion to CDK objects happens
188
+ * at the construct boundary in `config/aws-config-cdk.ts`.
189
+ */
183
190
  export interface AWSConfig {
184
191
  readonly lambda: {
185
- readonly runtime: Runtime;
186
- readonly timeout: Duration;
192
+ /** Lambda runtime identifier, e.g. `'nodejs24.x'` (env: `LAMBDA_RUNTIME`). */
193
+ readonly runtime: string;
194
+ /** Function timeout in seconds (env: `LAMBDA_TIMEOUT`). */
195
+ readonly timeoutSeconds: number;
187
196
  readonly memorySize: number;
188
- readonly architecture: Architecture;
197
+ readonly architecture: 'arm64' | 'x86_64';
189
198
  readonly reservedConcurrentExecutions?: number;
190
199
  };
191
200
  readonly logging: {
192
201
  readonly groupName: string;
193
- readonly retention: RetentionDays;
194
- readonly removalPolicy: RemovalPolicy;
202
+ /** CloudWatch retention in days; `0` means never expire (env: `LOG_RETENTION`). */
203
+ readonly retentionDays: number;
204
+ readonly removalPolicy: 'retain' | 'destroy';
195
205
  };
196
206
  readonly codeBuild: {
197
- readonly computeType: ComputeType;
207
+ /** CodeBuild compute type name, e.g. `'SMALL'` (env: `CODEBUILD_COMPUTE_TYPE`). */
208
+ readonly computeType: string;
198
209
  /**
199
210
  * Image used for CodeBuild steps that don't have a plugin-baked image
200
211
  * (cold-start synth bootstrap, ShellSteps with no registry, and
@@ -1,4 +1,4 @@
1
1
  // Copyright 2026 Pipeline Builder Contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
  export {};
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLXR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy9jb25maWctdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IFF1b3RhVGllciwgUXVvdGFUaWVyTGltaXRzIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHR5cGUgeyBEdXJhdGlvbiwgUmVtb3ZhbFBvbGljeSB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB0eXBlIHsgQ29tcHV0ZVR5cGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZWJ1aWxkJztcbmltcG9ydCB0eXBlIHsgQXJjaGl0ZWN0dXJlLCBSdW50aW1lIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgdHlwZSB7IFJldGVudGlvbkRheXMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgdHlwZSB7IEFsZ29yaXRobSB9IGZyb20gJ2pzb253ZWJ0b2tlbic7XG5cbi8qKlxuICogVHlwZS1zYWZlIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwQ29uZmlnIHtcbiAgcmVhZG9ubHkgc2VydmVyOiBTZXJ2ZXJDb25maWc7XG4gIHJlYWRvbmx5IGF1dGg6IEF1dGhDb25maWc7XG4gIHJlYWRvbmx5IGRhdGFiYXNlOiBEYXRhYmFzZUNvbmZpZztcbiAgcmVhZG9ubHkgcmVnaXN0cnk6IFJlZ2lzdHJ5Q29uZmlnO1xuICByZWFkb25seSByZWRpczogUmVkaXNDb25maWc7XG4gIHJlYWRvbmx5IHBsdWdpbkJ1aWxkOiBQbHVnaW5CdWlsZENvbmZpZztcbiAgcmVhZG9ubHkgZG9ja2VyQ29uZmlnOiBCdWlsZENvbmZpZztcbiAgcmVhZG9ubHkgb2JzZXJ2YWJpbGl0eTogT2JzZXJ2YWJpbGl0eUNvbmZpZztcbiAgcmVhZG9ubHkgY29tcGxpYW5jZTogQ29tcGxpYW5jZUNvbmZpZztcbiAgcmVhZG9ubHkgYXdzOiBBV1NDb25maWc7XG4gIHJlYWRvbmx5IHJhdGVMaW1pdDogUmF0ZUxpbWl0Q29uZmlnO1xuICByZWFkb25seSBiaWxsaW5nOiBCaWxsaW5nQ29uZmlnO1xufVxuXG4vKiogRXhwcmVzcyBzZXJ2ZXIgY29uZmlndXJhdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmVyQ29uZmlnIHtcbiAgLyoqIEhUVFAgbGlzdGVuIHBvcnQgKGVudjogYFBPUlRgKS4gKi9cbiAgcmVhZG9ubHkgcG9ydDogbnVtYmVyO1xuICByZWFkb25seSBjb3JzOiB7XG4gICAgLyoqIFdoZXRoZXIgdG8gaW5jbHVkZSBjcmVkZW50aWFscyBpbiBDT1JTIHJlc3BvbnNlcyAoZW52OiBgQ09SU19DUkVERU5USUFMU2ApLiAqL1xuICAgIHJlYWRvbmx5IGNyZWRlbnRpYWxzOiBib29sZWFuO1xuICAgIC8qKiBBbGxvd2VkIG9yaWdpbihzKSDigJQgc2luZ2xlIHN0cmluZywgYXJyYXksIG9yIGAnKidgIChlbnY6IGBDT1JTX09SSUdJTmApLiAqL1xuICAgIHJlYWRvbmx5IG9yaWdpbjogc3RyaW5nIHwgc3RyaW5nW107XG4gIH07XG4gIC8qKiBOdW1iZXIgb2YgcmV2ZXJzZSBwcm94eSBob3BzIHRvIHRydXN0IChlbnY6IGBUUlVTVF9QUk9YWWApLiAqL1xuICByZWFkb25seSB0cnVzdFByb3h5OiBudW1iZXI7XG4gIC8qKiBGcm9udGVuZCBiYXNlIFVSTCwgdXNlZCBhcyBDT1JTIGZhbGxiYWNrIChlbnY6IGBQTEFURk9STV9CQVNFX1VSTGApLiAqL1xuICByZWFkb25seSBwbGF0Zm9ybVVybDogc3RyaW5nO1xuICByZWFkb25seSBodHRwQ2xpZW50OiB7XG4gICAgLyoqIERlZmF1bHQgSFRUUCByZXF1ZXN0IHRpbWVvdXQgaW4gbXMgKGVudjogYEhUVFBfQ0xJRU5UX1RJTUVPVVRgKS4gKi9cbiAgICByZWFkb25seSB0aW1lb3V0OiBudW1iZXI7XG4gICAgLyoqIE1heGltdW0gcmV0cnkgYXR0ZW1wdHMgZm9yIGZhaWxlZCByZXF1ZXN0cyAoZW52OiBgSFRUUF9DTElFTlRfTUFYX1JFVFJJRVNgKS4gKi9cbiAgICByZWFkb25seSBtYXhSZXRyaWVzOiBudW1iZXI7XG4gICAgLyoqIEJhc2UgZGVsYXkgYmV0d2VlbiByZXRyaWVzIGluIG1zIChlbnY6IGBIVFRQX0NMSUVOVF9SRVRSWV9ERUxBWV9NU2ApLiAqL1xuICAgIHJlYWRvbmx5IHJldHJ5RGVsYXlNczogbnVtYmVyO1xuICB9O1xuICByZWFkb25seSBzc2U6IHtcbiAgICAvKiogTWF4IFNTRSBjbGllbnRzIHBlciByZXF1ZXN0IChlbnY6IGBTU0VfTUFYX0NMSUVOVFNfUEVSX1JFUVVFU1RgKS4gKi9cbiAgICByZWFkb25seSBtYXhDbGllbnRzUGVyUmVxdWVzdDogbnVtYmVyO1xuICAgIC8qKiBTU0UgY2xpZW50IHRpbWVvdXQgaW4gbXMgKGVudjogYFNTRV9DTElFTlRfVElNRU9VVF9NU2ApLiAqL1xuICAgIHJlYWRvbmx5IGNsaWVudFRpbWVvdXRNczogbnVtYmVyO1xuICAgIC8qKiBTU0UgY2xlYW51cCBpbnRlcnZhbCBpbiBtcyAoZW52OiBgU1NFX0NMRUFOVVBfSU5URVJWQUxfTVNgKS4gKi9cbiAgICByZWFkb25seSBjbGVhbnVwSW50ZXJ2YWxNczogbnVtYmVyO1xuICB9O1xuICByZWFkb25seSBzZXJ2aWNlczoge1xuICAgIHJlYWRvbmx5IHBsdWdpbkhvc3Q6IHN0cmluZztcbiAgICByZWFkb25seSBwbHVnaW5Qb3J0OiBudW1iZXI7XG4gICAgcmVhZG9ubHkgcGlwZWxpbmVIb3N0OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgcGlwZWxpbmVQb3J0OiBudW1iZXI7XG4gICAgcmVhZG9ubHkgbWVzc2FnZUhvc3Q6IHN0cmluZztcbiAgICByZWFkb25seSBtZXNzYWdlUG9ydDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IHBsYXRmb3JtSG9zdDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHBsYXRmb3JtUG9ydDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGNvbXBsaWFuY2VIb3N0OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgY29tcGxpYW5jZVBvcnQ6IG51bWJlcjtcbiAgICByZWFkb25seSBiaWxsaW5nSG9zdDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGJpbGxpbmdQb3J0OiBudW1iZXI7XG4gICAgcmVhZG9ubHkgYmlsbGluZ1RpbWVvdXQ6IG51bWJlcjtcbiAgfTtcbn1cblxuLyoqIEpXVCBhbmQgcmVmcmVzaCB0b2tlbiBhdXRoZW50aWNhdGlvbiBjb25maWd1cmF0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRoQ29uZmlnIHtcbiAgcmVhZG9ubHkgand0OiB7XG4gICAgLyoqIFNpZ25pbmcgc2VjcmV0IGZvciBhY2Nlc3MgdG9rZW5zIChlbnY6IGBKV1RfU0VDUkVUYCkuICovXG4gICAgcmVhZG9ubHkgc2VjcmV0OiBzdHJpbmc7XG4gICAgLyoqIFRva2VuIGxpZmV0aW1lIGluIHNlY29uZHMgKGVudjogYEpXVF9FWFBJUkVTX0lOYCkuICovXG4gICAgcmVhZG9ubHkgZXhwaXJlc0luOiBudW1iZXI7XG4gICAgLyoqIFNpZ25pbmcgYWxnb3JpdGhtLCBlLmcuIGAnSFMyNTYnYCAoZW52OiBgSldUX0FMR09SSVRITWApLiAqL1xuICAgIHJlYWRvbmx5IGFsZ29yaXRobTogQWxnb3JpdGhtO1xuICAgIC8qKiBiY3J5cHQgc2FsdCByb3VuZHMgZm9yIHBhc3N3b3JkIGhhc2hpbmcgKGVudjogYEJDUllQVF9TQUxUX1JPVU5EU2ApLiAqL1xuICAgIHJlYWRvbmx5IHNhbHRSb3VuZHM6IG51bWJlcjtcbiAgfTtcbiAgcmVhZG9ubHkgcmVmcmVzaFRva2VuOiB7XG4gICAgLyoqIFNpZ25pbmcgc2VjcmV0IGZvciByZWZyZXNoIHRva2VucyAoZW52OiBgUkVGUkVTSF9UT0tFTl9TRUNSRVRgKS4gKi9cbiAgICByZWFkb25seSBzZWNyZXQ6IHN0cmluZztcbiAgICAvKiogVG9rZW4gbGlmZXRpbWUgaW4gc2Vjb25kcyAoZW52OiBgUkVGUkVTSF9UT0tFTl9FWFBJUkVTX0lOYCkuICovXG4gICAgcmVhZG9ubHkgZXhwaXJlc0luOiBudW1iZXI7XG4gIH07XG59XG5cbi8qKiBQb3N0Z3JlU1FMIGFuZCBEcml6emxlIE9STSBkYXRhYmFzZSBjb25maWd1cmF0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhYmFzZUNvbmZpZyB7XG4gIHJlYWRvbmx5IHBvc3RncmVzOiB7XG4gICAgLyoqIFBvc3RncmVTUUwgaG9zdCAoZW52OiBgREJfSE9TVGApLiAqL1xuICAgIHJlYWRvbmx5IGhvc3Q6IHN0cmluZztcbiAgICAvKiogUG9zdGdyZVNRTCBwb3J0IChlbnY6IGBEQl9QT1JUYCkuICovXG4gICAgcmVhZG9ubHkgcG9ydDogbnVtYmVyO1xuICAgIC8qKiBEYXRhYmFzZSBuYW1lIChlbnY6IGBEQVRBQkFTRWApLiAqL1xuICAgIHJlYWRvbmx5IGRhdGFiYXNlOiBzdHJpbmc7XG4gICAgLyoqIERhdGFiYXNlIHVzZXIgKGVudjogYERCX1VTRVJgKS4gKi9cbiAgICByZWFkb25seSB1c2VyOiBzdHJpbmc7XG4gICAgLyoqIERhdGFiYXNlIHBhc3N3b3JkIChlbnY6IGBEQl9QQVNTV09SRGApLiAqL1xuICAgIHJlYWRvbmx5IHBhc3N3b3JkOiBzdHJpbmc7XG4gIH07XG4gIHJlYWRvbmx5IGRyaXp6bGU6IHtcbiAgICAvKiogTWF4aW11bSBjb25uZWN0aW9uIHBvb2wgc2l6ZSAoZW52OiBgRFJJWlpMRV9NQVhfUE9PTF9TSVpFYCkuICovXG4gICAgcmVhZG9ubHkgbWF4UG9vbFNpemU6IG51bWJlcjtcbiAgICAvKiogSWRsZSBjb25uZWN0aW9uIHRpbWVvdXQgaW4gbXMgKGVudjogYERSSVpaTEVfSURMRV9USU1FT1VUX01JTExJU2ApLiAqL1xuICAgIHJlYWRvbmx5IGlkbGVUaW1lb3V0TWlsbGlzOiBudW1iZXI7XG4gICAgLyoqIE5ldyBjb25uZWN0aW9uIHRpbWVvdXQgaW4gbXMgKGVudjogYERSSVpaTEVfQ09OTkVDVElPTl9USU1FT1VUX01JTExJU2ApLiAqL1xuICAgIHJlYWRvbmx5IGNvbm5lY3Rpb25UaW1lb3V0TWlsbGlzOiBudW1iZXI7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0cnlDb25maWcge1xuICByZWFkb25seSBob3N0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcbiAgLyoqXG4gICAqIEhvc3QvcG9ydCBhbiBPVVQtT0YtQ0xVU1RFUiBjbGllbnQgKG5vdGFibHkgQVdTIENvZGVCdWlsZCkgdXNlcyB0byBwdWxsXG4gICAqIHBsdWdpbiBpbWFnZXMsIHdoZW4gaXQgZGlmZmVycyBmcm9tIHRoZSBpbi1jbHVzdGVyIGBob3N0YC9gcG9ydGAuIFRoZVxuICAgKiBpbi1jbHVzdGVyIGByZWdpc3RyeTo1MDAwYCBDbHVzdGVySVAgaXNuJ3QgcmVzb2x2YWJsZSBmcm9tIHRoZSBWUEMsIHNvIHRoZVxuICAgKiBzeW50aGVzaXplZCBDb2RlQnVpbGQgaW1hZ2UgVVJJIG11c3QgcG9pbnQgYXQgdGhlIHB1YmxpYyBnYXRld2F5IGluc3RlYWQuXG4gICAqIEVudjogYElNQUdFX1JFR0lTVFJZX1BVTExfSE9TVGAgLyBgSU1BR0VfUkVHSVNUUllfUFVMTF9QT1JUYC4gT3B0aW9uYWw7XG4gICAqIGNvbnN1bWVycyBmYWxsIGJhY2sgdG8gYGhvc3RgL2Bwb3J0YCB3aGVuIHVuc2V0IChzaW5nbGUtaG9zdCAvXG4gICAqIGluLWNsdXN0ZXItb25seSBkZXBsb3lzKS4gYGxvYWRSZWdpc3RyeUNvbmZpZ2AgYWx3YXlzIHBvcHVsYXRlcyB0aGVtLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVsbEhvc3Q/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHB1bGxQb3J0PzogbnVtYmVyO1xuICAvKiogRG9ja2VyIG5ldHdvcmsgZm9yIGJ1aWxkL3B1c2ggKGVtcHR5IHN0cmluZyA9IGRlZmF1bHQpLiAqL1xuICByZWFkb25seSBuZXR3b3JrOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBCdWlsZEtpdCB0YWxrcyB0byB0aGUgcmVnaXN0cnkgb3ZlciBwbGFpbiBIVFRQIHdoZW4gdHJ1ZTsgSFRUUFMgd2l0aCB0aGVcbiAgICogc3lzdGVtIENBIGJ1bmRsZSBvdGhlcndpc2UuIEVudjogYElNQUdFX1JFR0lTVFJZX0hUVFBgIChkZWZhdWx0cyB0cnVlIOKAlFxuICAgKiB0aGUgaW4tY2x1c3RlciByZWdpc3RyeSBoYXMgbm8gVExTKS5cbiAgICovXG4gIHJlYWRvbmx5IGh0dHA6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVkaXNDb25maWcge1xuICByZWFkb25seSBob3N0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5CdWlsZENvbmZpZyB7XG4gIHJlYWRvbmx5IGNvbmN1cnJlbmN5OiBudW1iZXI7XG4gIHJlYWRvbmx5IG1heEF0dGVtcHRzOiBudW1iZXI7XG4gIHJlYWRvbmx5IGJhY2tvZmZEZWxheU1zOiBudW1iZXI7XG4gIHJlYWRvbmx5IHdvcmtlclRpbWVvdXRNczogbnVtYmVyO1xuICByZWFkb25seSB0ZW1wRGlyTWF4QWdlTXM6IG51bWJlcjtcbiAgcmVhZG9ubHkgZGxxTWF4QXR0ZW1wdHM6IG51bWJlcjtcbiAgcmVhZG9ubHkgZGxxQmFja29mZkJhc2VNczogbnVtYmVyO1xuICByZWFkb25seSBkbHFNYXhTaXplOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRDb25maWcge1xuICAvKiogUm9vdCBkaXJlY3RvcnkgZm9yIGJ1aWxkIHRlbXAgZmlsZXMuICovXG4gIHJlYWRvbmx5IHRlbXBSb290OiBzdHJpbmc7XG4gIC8qKiBCdWlsZCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcy4gKi9cbiAgcmVhZG9ubHkgdGltZW91dE1zOiBudW1iZXI7XG4gIC8qKiBQdXNoIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLiAqL1xuICByZWFkb25seSBwdXNoVGltZW91dE1zOiBudW1iZXI7XG4gIC8qKlxuICAgKiBQYXRoIHRvIHRoZSBidWlsZGtpdGQgc29ja2V0IHRoZSBwbHVnaW4ncyBgYnVpbGRjdGxgIGNvbm5lY3RzIHRvLiBJbiBrOHNcbiAgICogYW5kIGNvbXBvc2UgdGhpcyBpcyBhIHNoYXJlZCBlbXB0eURpci90bXBmcyB2b2x1bWUgbW91bnRlZCBmcm9tIHRoZVxuICAgKiBidWlsZGtpdGQgc2lkZWNhci5cbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxka2l0QWRkcjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9ic2VydmFiaWxpdHlDb25maWcge1xuICByZWFkb25seSBsb2dMZXZlbDogc3RyaW5nO1xuICByZWFkb25seSBsb2dGb3JtYXQ6IHN0cmluZztcbiAgcmVhZG9ubHkgc2VydmljZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgdHJhY2luZzoge1xuICAgIHJlYWRvbmx5IGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgZW5kcG9pbnQ6IHN0cmluZztcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wbGlhbmNlQ29uZmlnIHtcbiAgcmVhZG9ubHkgc2NhblNjaGVkdWxlckludGVydmFsTXM6IG51bWJlcjtcbiAgLyoqIFdoZW4gZmFsc2UsIHRoZSBzY2hlZHVsZXIgc2tpcHMgc2NhbnMvc2NoZWR1bGVzIGZvciB0aGUgc3lzdGVtIG9yZy4gRGVmYXVsdDogZmFsc2UuICovXG4gIHJlYWRvbmx5IHN5c3RlbU9yZ1NjYW5zRW5hYmxlZDogYm9vbGVhbjtcbiAgLyoqIENyb3NzLXBvZCBsZWFkZXItbG9jayBUVEwgZm9yIHRoZSBzY2FuIHNjaGVkdWxlciAobXMpLiBEZWZhdWx0OiAzMDAwMDAuICovXG4gIHJlYWRvbmx5IHNjYW5Mb2NrVHRsTXM6IG51bWJlcjtcbiAgLyoqIEhvdyBvZnRlbiB0aGUgZGlnZXN0IHNjaGVkdWxlciBjaGVja3MgZm9yIGR1ZSBkaWdlc3RzIChtcykuIERlZmF1bHQ6IDM2MDAwMDAuICovXG4gIHJlYWRvbmx5IGRpZ2VzdFNjaGVkdWxlckludGVydmFsTXM6IG51bWJlcjtcbiAgLyoqIENyb3NzLXBvZCBsZWFkZXItbG9jayBUVEwgZm9yIHRoZSBkaWdlc3Qgc2NoZWR1bGVyIChtcykuIERlZmF1bHQ6IDMwMDAwMC4gKi9cbiAgcmVhZG9ubHkgZGlnZXN0TG9ja1R0bE1zOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVdTQ29uZmlnIHtcbiAgcmVhZG9ubHkgbGFtYmRhOiB7XG4gICAgcmVhZG9ubHkgcnVudGltZTogUnVudGltZTtcbiAgICByZWFkb25seSB0aW1lb3V0OiBEdXJhdGlvbjtcbiAgICByZWFkb25seSBtZW1vcnlTaXplOiBudW1iZXI7XG4gICAgcmVhZG9ubHkgYXJjaGl0ZWN0dXJlOiBBcmNoaXRlY3R1cmU7XG4gICAgcmVhZG9ubHkgcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9ucz86IG51bWJlcjtcbiAgfTtcbiAgcmVhZG9ubHkgbG9nZ2luZzoge1xuICAgIHJlYWRvbmx5IGdyb3VwTmFtZTogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHJldGVudGlvbjogUmV0ZW50aW9uRGF5cztcbiAgICByZWFkb25seSByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5O1xuICB9O1xuICByZWFkb25seSBjb2RlQnVpbGQ6IHtcbiAgICByZWFkb25seSBjb21wdXRlVHlwZTogQ29tcHV0ZVR5cGU7XG4gICAgLyoqXG4gICAgICogSW1hZ2UgdXNlZCBmb3IgQ29kZUJ1aWxkIHN0ZXBzIHRoYXQgZG9uJ3QgaGF2ZSBhIHBsdWdpbi1iYWtlZCBpbWFnZVxuICAgICAqIChjb2xkLXN0YXJ0IHN5bnRoIGJvb3RzdHJhcCwgU2hlbGxTdGVwcyB3aXRoIG5vIHJlZ2lzdHJ5LCBhbmRcbiAgICAgKiBgbWV0YWRhdGFfb25seWAgcGx1Z2lucykuIGVudjogYENPREVCVUlMRF9ERUZBVUxUX0lNQUdFYC4gRGVmYXVsdFxuICAgICAqIGBwaXBlbGluZS1ib290c3RyYXA6MS4wYCDigJQgdGhlIGxvY2FsIHRhZyBidWlsdCBieVxuICAgICAqIGBkZXBsb3kvY29kZWJ1aWxkL2Jvb3RzdHJhcC9Eb2NrZXJmaWxlYCwgd2l0aCBgcGlwZWxpbmUtbWFuYWdlcmBcbiAgICAgKiBiYWtlZCBpbi5cbiAgICAgKlxuICAgICAqIENvbnRyYWN0OiB0aGUgaW1hZ2UgTVVTVCBoYXZlIGBwaXBlbGluZS1tYW5hZ2VyYCBvbiBQQVRILiBUaGVcbiAgICAgKiBib290c3RyYXAgc3ludGggcGF0aCBubyBsb25nZXIgc2VsZi1oZWFscyB2aWEgYG5wbSBpbnN0YWxsIC1nYDtcbiAgICAgKiBwb2ludGluZyB0aGlzIGF0IGFuIGltYWdlIHdpdGhvdXQgdGhlIHRvb2wgZ2V0cyBleGl0IDEyNyBvbiB0aGVcbiAgICAgKiBmaXJzdCBjb2xkLXN0YXJ0IGJ1aWxkLlxuICAgICAqXG4gICAgICogUmVzb2x1dGlvbjpcbiAgICAgKiAtIEJhcmUgdGFnIChubyBgL2ApIOKGkiBhdXRvLXByZWZpeGVkIHRvXG4gICAgICogICBgPHJlZ2lzdHJ5LWhvc3Q+Ojxwb3J0Pi9saWJyYXJ5Lzx0YWc+YCB1c2luZyB0aGUgcmVnaXN0cnkgY29uZmlnLFxuICAgICAqICAgd2l0aCB0aGUgcGVyLW9yZyBwbGF0Zm9ybSBTZWNyZXQgYXMgQmFzaWMgYXV0aCAoc2FtZSBmbG93IGFzXG4gICAgICogICBwbHVnaW4gaW1hZ2VzKS5cbiAgICAgKiAtIEZ1bGx5LXF1YWxpZmllZCByZWdpc3RyeSBVUkkgKGNvbnRhaW5zIGAvYCkg4oaSIHVzZWQgYXMtaXMsIG5vXG4gICAgICogICBhdXRoIHdpcmVkIChvcGVyYXRvciBvd25zIG1ha2luZyBpdCBwdWxsYWJsZSkuXG4gICAgICogLSBXaGVuIHRoZSByZWdpc3RyeSBpc24ndCBjb25maWd1cmVkIG9yIHBlci1vcmcgYXV0aCBpc24ndFxuICAgICAqICAgYXZhaWxhYmxlIGF0IHRoZSBjYWxsIHNpdGUsIGZhbGxzIGJhY2sgdG9cbiAgICAgKiAgIGBhd3MvY29kZWJ1aWxkL3N0YW5kYXJkOjguMGAgd2l0aCBhIHdhcm5pbmcg4oCUIGNvbGQtc3RhcnQgc3ludGhcbiAgICAgKiAgIHdpbGwgdGhlbiBmYWlsIG9uIGBwaXBlbGluZS1tYW5hZ2VyOiBub3QgZm91bmRgLCBzdXJmYWNpbmcgdGhlXG4gICAgICogICBtaXNjb25maWd1cmF0aW9uIGxvdWRseSBpbnN0ZWFkIG9mIHNpbGVudGx5IHN3YXBwaW5nIGltYWdlcy5cbiAgICAgKi9cbiAgICByZWFkb25seSBkZWZhdWx0SW1hZ2U6IHN0cmluZztcbiAgfTtcbn1cblxuLyoqIEV4cHJlc3MgcmF0ZSBsaW1pdGluZyBjb25maWd1cmF0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSYXRlTGltaXRDb25maWcge1xuICAvKiogTWF4aW11bSByZXF1ZXN0cyBwZXIgd2luZG93IChlbnY6IGBMSU1JVEVSX01BWGApLiAqL1xuICByZWFkb25seSBtYXg6IG51bWJlcjtcbiAgLyoqIFJhdGUgbGltaXQgd2luZG93IGluIG1pbGxpc2Vjb25kcyAoZW52OiBgTElNSVRFUl9XSU5ET1dNU2ApLiAqL1xuICByZWFkb25seSB3aW5kb3dNczogbnVtYmVyO1xuICAvKiogSW5jbHVkZSBsZWdhY3kgYFgtUmF0ZUxpbWl0LSpgIGhlYWRlcnMuICovXG4gIHJlYWRvbmx5IGxlZ2FjeUhlYWRlcnM6IGJvb2xlYW47XG4gIC8qKiBJbmNsdWRlIHN0YW5kYXJkIGBSYXRlTGltaXQtKmAgaGVhZGVycyAoUkZDIDY1ODUpLiAqL1xuICByZWFkb25seSBzdGFuZGFyZEhlYWRlcnM6IGJvb2xlYW47XG59XG5cbi8qKiBQcmljZSBjb25maWd1cmF0aW9uIGZvciBhIHNpbmdsZSBiaWxsaW5nIHBsYW4gKGluIGNlbnRzKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmlsbGluZ1BsYW5QcmljZXMge1xuICByZWFkb25seSBtb250aGx5OiBudW1iZXI7XG4gIHJlYWRvbmx5IGFubnVhbDogbnVtYmVyO1xufVxuXG4vKiogRnVsbCBiaWxsaW5nIHBsYW4gZGVmaW5pdGlvbiB1c2VkIGZvciBzZWVkaW5nIGFuZCBydW50aW1lIGNvbmZpZ3VyYXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIEJpbGxpbmdQbGFuQ29uZmlnIHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICByZWFkb25seSB0aWVyOiBRdW90YVRpZXI7XG4gIHJlYWRvbmx5IHByaWNlczogQmlsbGluZ1BsYW5QcmljZXM7XG4gIHJlYWRvbmx5IGZlYXR1cmVzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgaXNBY3RpdmU6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGlzRGVmYXVsdDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc29ydE9yZGVyOiBudW1iZXI7XG59XG5cbi8qKlxuICogQSBwdXJjaGFzYWJsZSBhZGQtb24gYnVuZGxlOiBhIHF1YW50aXR5LXN0YWNrYWJsZSBwYWNrIHRoYXQgQUREUyB0byB0aGVcbiAqIGFjY291bnQncyBiYXNlICh0aWVyKSBsaW1pdHMgYW5kIGFkZHMgYSByZWN1cnJpbmcgbGluZSBpdGVtLiBTZWVcbiAqIGRvY3MvYmlsbGluZy1idW5kbGVzLm1kLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1bmRsZUNvbmZpZyB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcbiAgLyoqIFBlci11bml0IGRlbHRhcyBvbiBgUXVvdGFUaWVyTGltaXRzYCBmaWVsZHMsIGUuZy4gYHsgc2VhdHM6IDUgfWAuIEtleXMgYXJlXG4gICAqICBjb25zdHJhaW5lZCB0byByZWFsIHF1b3RhIGZpZWxkcyBzbyBhIHR5cG8gaXMgYSBjb21waWxlIGVycm9yICh3YXNcbiAgICogIGBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+YCwgd2hlcmUgYSBtaXNzcGVsbGVkIGtleSB3YXMgc2lsZW50bHkgdW5lbmZvcmNlYWJsZSkuICovXG4gIHJlYWRvbmx5IGdyYW50czogUmVhZG9ubHk8UGFydGlhbDxSZWNvcmQ8a2V5b2YgUXVvdGFUaWVyTGltaXRzLCBudW1iZXI+Pj47XG4gIC8qKiBGZWF0dXJlIGZsYWdzIGdyYW50ZWQgYnkgYSBmZWF0dXJlIGJ1bmRsZSAoZS5nLiBgYXVkaXRfbG9nYCkuICovXG4gIHJlYWRvbmx5IGZlYXR1cmVzPzogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBQZXItdW5pdCBwcmljZSAoY2VudHMpLiBTdHJpcGUgbXVsdGlwbGllcyBieSBxdWFudGl0eS4gKi9cbiAgcmVhZG9ubHkgcHJpY2VzOiBCaWxsaW5nUGxhblByaWNlcztcbiAgLyoqIFRydWUgZm9yIHN0YWNrYWJsZSByZXNvdXJjZSBwYWNrczsgZmFsc2UgZm9yIGEgYm9vbGVhbiBmZWF0dXJlIGJ1bmRsZS4gKi9cbiAgcmVhZG9ubHkgc3RhY2thYmxlOiBib29sZWFuO1xuICAvKiogQmFzZSB0aWVycyB0aGlzIGJ1bmRsZSBpcyBvZmZlcmVkIHRvLiAqL1xuICByZWFkb25seSBhdmFpbGFibGVGb3JUaWVyczogcmVhZG9ubHkgUXVvdGFUaWVyW107XG4gIHJlYWRvbmx5IGlzQWN0aXZlOiBib29sZWFuO1xuICByZWFkb25seSBzb3J0T3JkZXI6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBIGNvbWJvIGRpc2NvdW50OiB3aGVuIGFuIGFjY291bnQgaG9sZHMgRVZFUlkgYnVuZGxlIGluIGBidW5kbGVJZHNgLCB0aGUgcGFpclxuICogaXMgYmlsbGVkIGF0IGBwcmljZXNgICh0aGUgY29tYmluZWQgcHJpY2UpIGluc3RlYWQgb2YgdGhlIHN1bSBvZiB0aGUgbWVtYmVycydcbiAqIGluZGl2aWR1YWwgcHJpY2VzLiBSZWFsaXplZCBhcyBhIHJlY3VycmluZyB1c2FnZSBjcmVkaXQgZm9yIHRoZSBkaWZmZXJlbmNlIOKAlFxuICogbmV2ZXIgYSBwcm92aWRlciBjb3Vwb24g4oCUIGNvbnNpc3RlbnQgd2l0aCB0aGUgdXNhZ2UtY3JlZGl0IGRpc2NvdW50IG1vZGVsLiBTZWVcbiAqIGRvY3MvYmlsbGluZy1idW5kbGVzLm1kIMKnQ29tYm8gcHJpY2luZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21ib0Rpc2NvdW50Q29uZmlnIHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAvKiogVGhlIG1lbWJlciBidW5kbGUgaWRzIHRoYXQgbXVzdCBBTEwgYmUgcHJlc2VudCBmb3IgdGhlIGNvbWJvIHRvIGFwcGx5LiAqL1xuICByZWFkb25seSBidW5kbGVJZHM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogUGVyLW1lbWJlciBtaW5pbXVtIHF1YW50aXR5IChidW5kbGVJZCDihpIgY291bnQ7IGFic2VudCDih5IgMSkuIExldHMgYSBzdGFja2FibGVcbiAgICogIGNhcGFjaXR5IHBhY2sgYW5jaG9yIGEgY29tYm8g4oCUIGUuZy4gYHsgc2VhdF9wYWNrOiAxIH1gID0gXCLiiaUgMSBTZWF0IFBhY2tcIi4gVGhlXG4gICAqICBjcmVkaXQgYmFzaXMgdXNlcyB0aGlzIG1pbmltdW0sIHNvIGV4dHJhIHBhY2tzIG5ldmVyIGluZmxhdGUgdGhlIGRpc2NvdW50LiAqL1xuICByZWFkb25seSBtaW5RdWFudGl0aWVzPzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgbnVtYmVyPj47XG4gIC8qKiBUaGUgY29tYmluZWQgcHJpY2UgZm9yIHRoZSBtaW5pbXVtIHNldCAoY2VudHMpLiBUaGUgY3JlZGl0IGlzXG4gICAqICBgzqMgbWVtYmVyIHVuaXQgcHJpY2Ugw5cgbWluUXR5IOKIkiBwcmljZXNgLCBjbGFtcGVkIOKJpSAwLiAqL1xuICByZWFkb25seSBwcmljZXM6IEJpbGxpbmdQbGFuUHJpY2VzO1xuICAvKiogRGV0ZXJtaW5pc3RpYyB0aWUtYnJlYWsgYW1vbmcgZXF1YWwtdG90YWwgb3B0aW1hbCBwYWNraW5ncyB3aGVuIGNvbWJvcyBvdmVybGFwXG4gICAqICAobG93ZXIgd2lucykuICovXG4gIHJlYWRvbmx5IHNvcnRPcmRlcjogbnVtYmVyO1xuICByZWFkb25seSBpc0FjdGl2ZTogYm9vbGVhbjtcbn1cblxuLyoqIEJpbGxpbmcgcGxhbnMgKyBhZGQtb24gYnVuZGxlIGNvbmZpZ3VyYXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIEJpbGxpbmdDb25maWcge1xuICByZWFkb25seSBwbGFuczogcmVhZG9ubHkgQmlsbGluZ1BsYW5Db25maWdbXTtcbiAgcmVhZG9ubHkgYnVuZGxlczogcmVhZG9ubHkgQnVuZGxlQ29uZmlnW107XG4gIHJlYWRvbmx5IGNvbWJvRGlzY291bnRzOiByZWFkb25seSBDb21ib0Rpc2NvdW50Q29uZmlnW107XG59XG4iXX0=
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLXR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy9jb25maWctdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IFF1b3RhVGllciwgUXVvdGFUaWVyTGltaXRzIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHR5cGUgeyBBbGdvcml0aG0gfSBmcm9tICdqc29ud2VidG9rZW4nO1xuXG4vKipcbiAqIFR5cGUtc2FmZSBjb25maWd1cmF0aW9uIGludGVyZmFjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcENvbmZpZyB7XG4gIHJlYWRvbmx5IHNlcnZlcjogU2VydmVyQ29uZmlnO1xuICByZWFkb25seSBhdXRoOiBBdXRoQ29uZmlnO1xuICByZWFkb25seSBkYXRhYmFzZTogRGF0YWJhc2VDb25maWc7XG4gIHJlYWRvbmx5IHJlZ2lzdHJ5OiBSZWdpc3RyeUNvbmZpZztcbiAgcmVhZG9ubHkgcmVkaXM6IFJlZGlzQ29uZmlnO1xuICByZWFkb25seSBwbHVnaW5CdWlsZDogUGx1Z2luQnVpbGRDb25maWc7XG4gIHJlYWRvbmx5IGRvY2tlckNvbmZpZzogQnVpbGRDb25maWc7XG4gIHJlYWRvbmx5IG9ic2VydmFiaWxpdHk6IE9ic2VydmFiaWxpdHlDb25maWc7XG4gIHJlYWRvbmx5IGNvbXBsaWFuY2U6IENvbXBsaWFuY2VDb25maWc7XG4gIHJlYWRvbmx5IGF3czogQVdTQ29uZmlnO1xuICByZWFkb25seSByYXRlTGltaXQ6IFJhdGVMaW1pdENvbmZpZztcbiAgcmVhZG9ubHkgYmlsbGluZzogQmlsbGluZ0NvbmZpZztcbn1cblxuLyoqIEV4cHJlc3Mgc2VydmVyIGNvbmZpZ3VyYXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZlckNvbmZpZyB7XG4gIC8qKiBIVFRQIGxpc3RlbiBwb3J0IChlbnY6IGBQT1JUYCkuICovXG4gIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcbiAgcmVhZG9ubHkgY29yczoge1xuICAgIC8qKiBXaGV0aGVyIHRvIGluY2x1ZGUgY3JlZGVudGlhbHMgaW4gQ09SUyByZXNwb25zZXMgKGVudjogYENPUlNfQ1JFREVOVElBTFNgKS4gKi9cbiAgICByZWFkb25seSBjcmVkZW50aWFsczogYm9vbGVhbjtcbiAgICAvKiogQWxsb3dlZCBvcmlnaW4ocykg4oCUIHNpbmdsZSBzdHJpbmcsIGFycmF5LCBvciBgJyonYCAoZW52OiBgQ09SU19PUklHSU5gKS4gKi9cbiAgICByZWFkb25seSBvcmlnaW46IHN0cmluZyB8IHN0cmluZ1tdO1xuICB9O1xuICAvKiogTnVtYmVyIG9mIHJldmVyc2UgcHJveHkgaG9wcyB0byB0cnVzdCAoZW52OiBgVFJVU1RfUFJPWFlgKS4gKi9cbiAgcmVhZG9ubHkgdHJ1c3RQcm94eTogbnVtYmVyO1xuICAvKiogRnJvbnRlbmQgYmFzZSBVUkwsIHVzZWQgYXMgQ09SUyBmYWxsYmFjayAoZW52OiBgUExBVEZPUk1fQkFTRV9VUkxgKS4gKi9cbiAgcmVhZG9ubHkgcGxhdGZvcm1Vcmw6IHN0cmluZztcbiAgcmVhZG9ubHkgaHR0cENsaWVudDoge1xuICAgIC8qKiBEZWZhdWx0IEhUVFAgcmVxdWVzdCB0aW1lb3V0IGluIG1zIChlbnY6IGBIVFRQX0NMSUVOVF9USU1FT1VUYCkuICovXG4gICAgcmVhZG9ubHkgdGltZW91dDogbnVtYmVyO1xuICAgIC8qKiBNYXhpbXVtIHJldHJ5IGF0dGVtcHRzIGZvciBmYWlsZWQgcmVxdWVzdHMgKGVudjogYEhUVFBfQ0xJRU5UX01BWF9SRVRSSUVTYCkuICovXG4gICAgcmVhZG9ubHkgbWF4UmV0cmllczogbnVtYmVyO1xuICAgIC8qKiBCYXNlIGRlbGF5IGJldHdlZW4gcmV0cmllcyBpbiBtcyAoZW52OiBgSFRUUF9DTElFTlRfUkVUUllfREVMQVlfTVNgKS4gKi9cbiAgICByZWFkb25seSByZXRyeURlbGF5TXM6IG51bWJlcjtcbiAgfTtcbiAgcmVhZG9ubHkgc3NlOiB7XG4gICAgLyoqIE1heCBTU0UgY2xpZW50cyBwZXIgcmVxdWVzdCAoZW52OiBgU1NFX01BWF9DTElFTlRTX1BFUl9SRVFVRVNUYCkuICovXG4gICAgcmVhZG9ubHkgbWF4Q2xpZW50c1BlclJlcXVlc3Q6IG51bWJlcjtcbiAgICAvKiogU1NFIGNsaWVudCB0aW1lb3V0IGluIG1zIChlbnY6IGBTU0VfQ0xJRU5UX1RJTUVPVVRfTVNgKS4gKi9cbiAgICByZWFkb25seSBjbGllbnRUaW1lb3V0TXM6IG51bWJlcjtcbiAgICAvKiogU1NFIGNsZWFudXAgaW50ZXJ2YWwgaW4gbXMgKGVudjogYFNTRV9DTEVBTlVQX0lOVEVSVkFMX01TYCkuICovXG4gICAgcmVhZG9ubHkgY2xlYW51cEludGVydmFsTXM6IG51bWJlcjtcbiAgfTtcbiAgcmVhZG9ubHkgc2VydmljZXM6IHtcbiAgICByZWFkb25seSBwbHVnaW5Ib3N0OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgcGx1Z2luUG9ydDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IHBpcGVsaW5lSG9zdDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHBpcGVsaW5lUG9ydDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IG1lc3NhZ2VIb3N0OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgbWVzc2FnZVBvcnQ6IG51bWJlcjtcbiAgICByZWFkb25seSBwbGF0Zm9ybUhvc3Q6IHN0cmluZztcbiAgICByZWFkb25seSBwbGF0Zm9ybVBvcnQ6IG51bWJlcjtcbiAgICByZWFkb25seSBjb21wbGlhbmNlSG9zdDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGNvbXBsaWFuY2VQb3J0OiBudW1iZXI7XG4gICAgcmVhZG9ubHkgYmlsbGluZ0hvc3Q6IHN0cmluZztcbiAgICByZWFkb25seSBiaWxsaW5nUG9ydDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGJpbGxpbmdUaW1lb3V0OiBudW1iZXI7XG4gIH07XG59XG5cbi8qKiBKV1QgYW5kIHJlZnJlc2ggdG9rZW4gYXV0aGVudGljYXRpb24gY29uZmlndXJhdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aENvbmZpZyB7XG4gIHJlYWRvbmx5IGp3dDoge1xuICAgIC8qKiBTaWduaW5nIHNlY3JldCBmb3IgYWNjZXNzIHRva2VucyAoZW52OiBgSldUX1NFQ1JFVGApLiAqL1xuICAgIHJlYWRvbmx5IHNlY3JldDogc3RyaW5nO1xuICAgIC8qKiBUb2tlbiBsaWZldGltZSBpbiBzZWNvbmRzIChlbnY6IGBKV1RfRVhQSVJFU19JTmApLiAqL1xuICAgIHJlYWRvbmx5IGV4cGlyZXNJbjogbnVtYmVyO1xuICAgIC8qKiBTaWduaW5nIGFsZ29yaXRobSwgZS5nLiBgJ0hTMjU2J2AgKGVudjogYEpXVF9BTEdPUklUSE1gKS4gKi9cbiAgICByZWFkb25seSBhbGdvcml0aG06IEFsZ29yaXRobTtcbiAgICAvKiogYmNyeXB0IHNhbHQgcm91bmRzIGZvciBwYXNzd29yZCBoYXNoaW5nIChlbnY6IGBCQ1JZUFRfU0FMVF9ST1VORFNgKS4gKi9cbiAgICByZWFkb25seSBzYWx0Um91bmRzOiBudW1iZXI7XG4gIH07XG4gIHJlYWRvbmx5IHJlZnJlc2hUb2tlbjoge1xuICAgIC8qKiBTaWduaW5nIHNlY3JldCBmb3IgcmVmcmVzaCB0b2tlbnMgKGVudjogYFJFRlJFU0hfVE9LRU5fU0VDUkVUYCkuICovXG4gICAgcmVhZG9ubHkgc2VjcmV0OiBzdHJpbmc7XG4gICAgLyoqIFRva2VuIGxpZmV0aW1lIGluIHNlY29uZHMgKGVudjogYFJFRlJFU0hfVE9LRU5fRVhQSVJFU19JTmApLiAqL1xuICAgIHJlYWRvbmx5IGV4cGlyZXNJbjogbnVtYmVyO1xuICB9O1xufVxuXG4vKiogUG9zdGdyZVNRTCBhbmQgRHJpenpsZSBPUk0gZGF0YWJhc2UgY29uZmlndXJhdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJhc2VDb25maWcge1xuICByZWFkb25seSBwb3N0Z3Jlczoge1xuICAgIC8qKiBQb3N0Z3JlU1FMIGhvc3QgKGVudjogYERCX0hPU1RgKS4gKi9cbiAgICByZWFkb25seSBob3N0OiBzdHJpbmc7XG4gICAgLyoqIFBvc3RncmVTUUwgcG9ydCAoZW52OiBgREJfUE9SVGApLiAqL1xuICAgIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcbiAgICAvKiogRGF0YWJhc2UgbmFtZSAoZW52OiBgREFUQUJBU0VgKS4gKi9cbiAgICByZWFkb25seSBkYXRhYmFzZTogc3RyaW5nO1xuICAgIC8qKiBEYXRhYmFzZSB1c2VyIChlbnY6IGBEQl9VU0VSYCkuICovXG4gICAgcmVhZG9ubHkgdXNlcjogc3RyaW5nO1xuICAgIC8qKiBEYXRhYmFzZSBwYXNzd29yZCAoZW52OiBgREJfUEFTU1dPUkRgKS4gKi9cbiAgICByZWFkb25seSBwYXNzd29yZDogc3RyaW5nO1xuICB9O1xuICByZWFkb25seSBkcml6emxlOiB7XG4gICAgLyoqIE1heGltdW0gY29ubmVjdGlvbiBwb29sIHNpemUgKGVudjogYERSSVpaTEVfTUFYX1BPT0xfU0laRWApLiAqL1xuICAgIHJlYWRvbmx5IG1heFBvb2xTaXplOiBudW1iZXI7XG4gICAgLyoqIElkbGUgY29ubmVjdGlvbiB0aW1lb3V0IGluIG1zIChlbnY6IGBEUklaWkxFX0lETEVfVElNRU9VVF9NSUxMSVNgKS4gKi9cbiAgICByZWFkb25seSBpZGxlVGltZW91dE1pbGxpczogbnVtYmVyO1xuICAgIC8qKiBOZXcgY29ubmVjdGlvbiB0aW1lb3V0IGluIG1zIChlbnY6IGBEUklaWkxFX0NPTk5FQ1RJT05fVElNRU9VVF9NSUxMSVNgKS4gKi9cbiAgICByZWFkb25seSBjb25uZWN0aW9uVGltZW91dE1pbGxpczogbnVtYmVyO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdHJ5Q29uZmlnIHtcbiAgcmVhZG9ubHkgaG9zdDogc3RyaW5nO1xuICByZWFkb25seSBwb3J0OiBudW1iZXI7XG4gIC8qKlxuICAgKiBIb3N0L3BvcnQgYW4gT1VULU9GLUNMVVNURVIgY2xpZW50IChub3RhYmx5IEFXUyBDb2RlQnVpbGQpIHVzZXMgdG8gcHVsbFxuICAgKiBwbHVnaW4gaW1hZ2VzLCB3aGVuIGl0IGRpZmZlcnMgZnJvbSB0aGUgaW4tY2x1c3RlciBgaG9zdGAvYHBvcnRgLiBUaGVcbiAgICogaW4tY2x1c3RlciBgcmVnaXN0cnk6NTAwMGAgQ2x1c3RlcklQIGlzbid0IHJlc29sdmFibGUgZnJvbSB0aGUgVlBDLCBzbyB0aGVcbiAgICogc3ludGhlc2l6ZWQgQ29kZUJ1aWxkIGltYWdlIFVSSSBtdXN0IHBvaW50IGF0IHRoZSBwdWJsaWMgZ2F0ZXdheSBpbnN0ZWFkLlxuICAgKiBFbnY6IGBJTUFHRV9SRUdJU1RSWV9QVUxMX0hPU1RgIC8gYElNQUdFX1JFR0lTVFJZX1BVTExfUE9SVGAuIE9wdGlvbmFsO1xuICAgKiBjb25zdW1lcnMgZmFsbCBiYWNrIHRvIGBob3N0YC9gcG9ydGAgd2hlbiB1bnNldCAoc2luZ2xlLWhvc3QgL1xuICAgKiBpbi1jbHVzdGVyLW9ubHkgZGVwbG95cykuIGBsb2FkUmVnaXN0cnlDb25maWdgIGFsd2F5cyBwb3B1bGF0ZXMgdGhlbS5cbiAgICovXG4gIHJlYWRvbmx5IHB1bGxIb3N0Pzogc3RyaW5nO1xuICByZWFkb25seSBwdWxsUG9ydD86IG51bWJlcjtcbiAgLyoqIERvY2tlciBuZXR3b3JrIGZvciBidWlsZC9wdXNoIChlbXB0eSBzdHJpbmcgPSBkZWZhdWx0KS4gKi9cbiAgcmVhZG9ubHkgbmV0d29yazogc3RyaW5nO1xuICAvKipcbiAgICogQnVpbGRLaXQgdGFsa3MgdG8gdGhlIHJlZ2lzdHJ5IG92ZXIgcGxhaW4gSFRUUCB3aGVuIHRydWU7IEhUVFBTIHdpdGggdGhlXG4gICAqIHN5c3RlbSBDQSBidW5kbGUgb3RoZXJ3aXNlLiBFbnY6IGBJTUFHRV9SRUdJU1RSWV9IVFRQYCAoZGVmYXVsdHMgdHJ1ZSDigJRcbiAgICogdGhlIGluLWNsdXN0ZXIgcmVnaXN0cnkgaGFzIG5vIFRMUykuXG4gICAqL1xuICByZWFkb25seSBodHRwOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlZGlzQ29uZmlnIHtcbiAgcmVhZG9ubHkgaG9zdDogc3RyaW5nO1xuICByZWFkb25seSBwb3J0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luQnVpbGRDb25maWcge1xuICByZWFkb25seSBjb25jdXJyZW5jeTogbnVtYmVyO1xuICByZWFkb25seSBtYXhBdHRlbXB0czogbnVtYmVyO1xuICByZWFkb25seSBiYWNrb2ZmRGVsYXlNczogbnVtYmVyO1xuICByZWFkb25seSB3b3JrZXJUaW1lb3V0TXM6IG51bWJlcjtcbiAgcmVhZG9ubHkgdGVtcERpck1heEFnZU1zOiBudW1iZXI7XG4gIHJlYWRvbmx5IGRscU1heEF0dGVtcHRzOiBudW1iZXI7XG4gIHJlYWRvbmx5IGRscUJhY2tvZmZCYXNlTXM6IG51bWJlcjtcbiAgcmVhZG9ubHkgZGxxTWF4U2l6ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkQ29uZmlnIHtcbiAgLyoqIFJvb3QgZGlyZWN0b3J5IGZvciBidWlsZCB0ZW1wIGZpbGVzLiAqL1xuICByZWFkb25seSB0ZW1wUm9vdDogc3RyaW5nO1xuICAvKiogQnVpbGQgdGltZW91dCBpbiBtaWxsaXNlY29uZHMuICovXG4gIHJlYWRvbmx5IHRpbWVvdXRNczogbnVtYmVyO1xuICAvKiogUHVzaCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcy4gKi9cbiAgcmVhZG9ubHkgcHVzaFRpbWVvdXRNczogbnVtYmVyO1xuICAvKipcbiAgICogUGF0aCB0byB0aGUgYnVpbGRraXRkIHNvY2tldCB0aGUgcGx1Z2luJ3MgYGJ1aWxkY3RsYCBjb25uZWN0cyB0by4gSW4gazhzXG4gICAqIGFuZCBjb21wb3NlIHRoaXMgaXMgYSBzaGFyZWQgZW1wdHlEaXIvdG1wZnMgdm9sdW1lIG1vdW50ZWQgZnJvbSB0aGVcbiAgICogYnVpbGRraXRkIHNpZGVjYXIuXG4gICAqL1xuICByZWFkb25seSBidWlsZGtpdEFkZHI6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPYnNlcnZhYmlsaXR5Q29uZmlnIHtcbiAgcmVhZG9ubHkgbG9nTGV2ZWw6IHN0cmluZztcbiAgcmVhZG9ubHkgbG9nRm9ybWF0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRyYWNpbmc6IHtcbiAgICByZWFkb25seSBlbmFibGVkOiBib29sZWFuO1xuICAgIHJlYWRvbmx5IGVuZHBvaW50OiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGxpYW5jZUNvbmZpZyB7XG4gIHJlYWRvbmx5IHNjYW5TY2hlZHVsZXJJbnRlcnZhbE1zOiBudW1iZXI7XG4gIC8qKiBXaGVuIGZhbHNlLCB0aGUgc2NoZWR1bGVyIHNraXBzIHNjYW5zL3NjaGVkdWxlcyBmb3IgdGhlIHN5c3RlbSBvcmcuIERlZmF1bHQ6IGZhbHNlLiAqL1xuICByZWFkb25seSBzeXN0ZW1PcmdTY2Fuc0VuYWJsZWQ6IGJvb2xlYW47XG4gIC8qKiBDcm9zcy1wb2QgbGVhZGVyLWxvY2sgVFRMIGZvciB0aGUgc2NhbiBzY2hlZHVsZXIgKG1zKS4gRGVmYXVsdDogMzAwMDAwLiAqL1xuICByZWFkb25seSBzY2FuTG9ja1R0bE1zOiBudW1iZXI7XG4gIC8qKiBIb3cgb2Z0ZW4gdGhlIGRpZ2VzdCBzY2hlZHVsZXIgY2hlY2tzIGZvciBkdWUgZGlnZXN0cyAobXMpLiBEZWZhdWx0OiAzNjAwMDAwLiAqL1xuICByZWFkb25seSBkaWdlc3RTY2hlZHVsZXJJbnRlcnZhbE1zOiBudW1iZXI7XG4gIC8qKiBDcm9zcy1wb2QgbGVhZGVyLWxvY2sgVFRMIGZvciB0aGUgZGlnZXN0IHNjaGVkdWxlciAobXMpLiBEZWZhdWx0OiAzMDAwMDAuICovXG4gIHJlYWRvbmx5IGRpZ2VzdExvY2tUdGxNczogbnVtYmVyO1xufVxuXG4vKipcbiAqIEFXUyBpbmZyYXN0cnVjdHVyZSBjb25maWd1cmF0aW9uLlxuICpcbiAqIERlbGliZXJhdGVseSBleHByZXNzZWQgaW4gUExBSU4gREFUQSAobnVtYmVycywgc3RyaW5ncywgc3RyaW5nIHVuaW9ucykgcmF0aGVyXG4gKiB0aGFuIENESyB2YWx1ZSBvYmplY3RzIChgRHVyYXRpb25gLCBgUnVudGltZWAsIGBSZXRlbnRpb25EYXlzYCwgLi4uKS4gQ29uZmlnIGlzXG4gKiBsb2FkZWQgYnkgZXZlcnkgc2VydmljZSwgYnV0IG9ubHkgdGhlIENESyBlbnRyeSBwb2ludCAoYEBwaXBlbGluZS1idWlsZGVyL1xuICogcGlwZWxpbmUtY29yZS9jZGtgKSBidWlsZHMgc3RhY2tzICB0eXBpbmcgdGhpcyBibG9jayB3aXRoIENESyBjbGFzc2VzIHB1dFxuICogYGF3cy1jZGstbGliYCBvbiB0aGUgaW1wb3J0IGdyYXBoIG9mIGBDb25maWdgLCBhbmQgdGhlcmVmb3JlIG9mIGV2ZXJ5IEFQSVxuICogc2VydmljZSB0aGF0IHJlYWRzIHNvIG11Y2ggYXMgYSBwb3J0IG51bWJlci4gQ29udmVyc2lvbiB0byBDREsgb2JqZWN0cyBoYXBwZW5zXG4gKiBhdCB0aGUgY29uc3RydWN0IGJvdW5kYXJ5IGluIGBjb25maWcvYXdzLWNvbmZpZy1jZGsudHNgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFXU0NvbmZpZyB7XG4gIHJlYWRvbmx5IGxhbWJkYToge1xuICAgIC8qKiBMYW1iZGEgcnVudGltZSBpZGVudGlmaWVyLCBlLmcuIGAnbm9kZWpzMjQueCdgIChlbnY6IGBMQU1CREFfUlVOVElNRWApLiAqL1xuICAgIHJlYWRvbmx5IHJ1bnRpbWU6IHN0cmluZztcbiAgICAvKiogRnVuY3Rpb24gdGltZW91dCBpbiBzZWNvbmRzIChlbnY6IGBMQU1CREFfVElNRU9VVGApLiAqL1xuICAgIHJlYWRvbmx5IHRpbWVvdXRTZWNvbmRzOiBudW1iZXI7XG4gICAgcmVhZG9ubHkgbWVtb3J5U2l6ZTogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGFyY2hpdGVjdHVyZTogJ2FybTY0JyB8ICd4ODZfNjQnO1xuICAgIHJlYWRvbmx5IHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM/OiBudW1iZXI7XG4gIH07XG4gIHJlYWRvbmx5IGxvZ2dpbmc6IHtcbiAgICByZWFkb25seSBncm91cE5hbWU6IHN0cmluZztcbiAgICAvKiogQ2xvdWRXYXRjaCByZXRlbnRpb24gaW4gZGF5czsgYDBgIG1lYW5zIG5ldmVyIGV4cGlyZSAoZW52OiBgTE9HX1JFVEVOVElPTmApLiAqL1xuICAgIHJlYWRvbmx5IHJldGVudGlvbkRheXM6IG51bWJlcjtcbiAgICByZWFkb25seSByZW1vdmFsUG9saWN5OiAncmV0YWluJyB8ICdkZXN0cm95JztcbiAgfTtcbiAgcmVhZG9ubHkgY29kZUJ1aWxkOiB7XG4gICAgLyoqIENvZGVCdWlsZCBjb21wdXRlIHR5cGUgbmFtZSwgZS5nLiBgJ1NNQUxMJ2AgKGVudjogYENPREVCVUlMRF9DT01QVVRFX1RZUEVgKS4gKi9cbiAgICByZWFkb25seSBjb21wdXRlVHlwZTogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEltYWdlIHVzZWQgZm9yIENvZGVCdWlsZCBzdGVwcyB0aGF0IGRvbid0IGhhdmUgYSBwbHVnaW4tYmFrZWQgaW1hZ2VcbiAgICAgKiAoY29sZC1zdGFydCBzeW50aCBib290c3RyYXAsIFNoZWxsU3RlcHMgd2l0aCBubyByZWdpc3RyeSwgYW5kXG4gICAgICogYG1ldGFkYXRhX29ubHlgIHBsdWdpbnMpLiBlbnY6IGBDT0RFQlVJTERfREVGQVVMVF9JTUFHRWAuIERlZmF1bHRcbiAgICAgKiBgcGlwZWxpbmUtYm9vdHN0cmFwOjEuMGAg4oCUIHRoZSBsb2NhbCB0YWcgYnVpbHQgYnlcbiAgICAgKiBgZGVwbG95L2NvZGVidWlsZC9ib290c3RyYXAvRG9ja2VyZmlsZWAsIHdpdGggYHBpcGVsaW5lLW1hbmFnZXJgXG4gICAgICogYmFrZWQgaW4uXG4gICAgICpcbiAgICAgKiBDb250cmFjdDogdGhlIGltYWdlIE1VU1QgaGF2ZSBgcGlwZWxpbmUtbWFuYWdlcmAgb24gUEFUSC4gVGhlXG4gICAgICogYm9vdHN0cmFwIHN5bnRoIHBhdGggbm8gbG9uZ2VyIHNlbGYtaGVhbHMgdmlhIGBucG0gaW5zdGFsbCAtZ2A7XG4gICAgICogcG9pbnRpbmcgdGhpcyBhdCBhbiBpbWFnZSB3aXRob3V0IHRoZSB0b29sIGdldHMgZXhpdCAxMjcgb24gdGhlXG4gICAgICogZmlyc3QgY29sZC1zdGFydCBidWlsZC5cbiAgICAgKlxuICAgICAqIFJlc29sdXRpb246XG4gICAgICogLSBCYXJlIHRhZyAobm8gYC9gKSDihpIgYXV0by1wcmVmaXhlZCB0b1xuICAgICAqICAgYDxyZWdpc3RyeS1ob3N0Pjo8cG9ydD4vbGlicmFyeS88dGFnPmAgdXNpbmcgdGhlIHJlZ2lzdHJ5IGNvbmZpZyxcbiAgICAgKiAgIHdpdGggdGhlIHBlci1vcmcgcGxhdGZvcm0gU2VjcmV0IGFzIEJhc2ljIGF1dGggKHNhbWUgZmxvdyBhc1xuICAgICAqICAgcGx1Z2luIGltYWdlcykuXG4gICAgICogLSBGdWxseS1xdWFsaWZpZWQgcmVnaXN0cnkgVVJJIChjb250YWlucyBgL2ApIOKGkiB1c2VkIGFzLWlzLCBub1xuICAgICAqICAgYXV0aCB3aXJlZCAob3BlcmF0b3Igb3ducyBtYWtpbmcgaXQgcHVsbGFibGUpLlxuICAgICAqIC0gV2hlbiB0aGUgcmVnaXN0cnkgaXNuJ3QgY29uZmlndXJlZCBvciBwZXItb3JnIGF1dGggaXNuJ3RcbiAgICAgKiAgIGF2YWlsYWJsZSBhdCB0aGUgY2FsbCBzaXRlLCBmYWxscyBiYWNrIHRvXG4gICAgICogICBgYXdzL2NvZGVidWlsZC9zdGFuZGFyZDo4LjBgIHdpdGggYSB3YXJuaW5nIOKAlCBjb2xkLXN0YXJ0IHN5bnRoXG4gICAgICogICB3aWxsIHRoZW4gZmFpbCBvbiBgcGlwZWxpbmUtbWFuYWdlcjogbm90IGZvdW5kYCwgc3VyZmFjaW5nIHRoZVxuICAgICAqICAgbWlzY29uZmlndXJhdGlvbiBsb3VkbHkgaW5zdGVhZCBvZiBzaWxlbnRseSBzd2FwcGluZyBpbWFnZXMuXG4gICAgICovXG4gICAgcmVhZG9ubHkgZGVmYXVsdEltYWdlOiBzdHJpbmc7XG4gIH07XG59XG5cbi8qKiBFeHByZXNzIHJhdGUgbGltaXRpbmcgY29uZmlndXJhdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmF0ZUxpbWl0Q29uZmlnIHtcbiAgLyoqIE1heGltdW0gcmVxdWVzdHMgcGVyIHdpbmRvdyAoZW52OiBgTElNSVRFUl9NQVhgKS4gKi9cbiAgcmVhZG9ubHkgbWF4OiBudW1iZXI7XG4gIC8qKiBSYXRlIGxpbWl0IHdpbmRvdyBpbiBtaWxsaXNlY29uZHMgKGVudjogYExJTUlURVJfV0lORE9XTVNgKS4gKi9cbiAgcmVhZG9ubHkgd2luZG93TXM6IG51bWJlcjtcbiAgLyoqIEluY2x1ZGUgbGVnYWN5IGBYLVJhdGVMaW1pdC0qYCBoZWFkZXJzLiAqL1xuICByZWFkb25seSBsZWdhY3lIZWFkZXJzOiBib29sZWFuO1xuICAvKiogSW5jbHVkZSBzdGFuZGFyZCBgUmF0ZUxpbWl0LSpgIGhlYWRlcnMgKFJGQyA2NTg1KS4gKi9cbiAgcmVhZG9ubHkgc3RhbmRhcmRIZWFkZXJzOiBib29sZWFuO1xufVxuXG4vKiogUHJpY2UgY29uZmlndXJhdGlvbiBmb3IgYSBzaW5nbGUgYmlsbGluZyBwbGFuIChpbiBjZW50cykuICovXG5leHBvcnQgaW50ZXJmYWNlIEJpbGxpbmdQbGFuUHJpY2VzIHtcbiAgcmVhZG9ubHkgbW9udGhseTogbnVtYmVyO1xuICByZWFkb25seSBhbm51YWw6IG51bWJlcjtcbn1cblxuLyoqIEZ1bGwgYmlsbGluZyBwbGFuIGRlZmluaXRpb24gdXNlZCBmb3Igc2VlZGluZyBhbmQgcnVudGltZSBjb25maWd1cmF0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBCaWxsaW5nUGxhbkNvbmZpZyB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcbiAgcmVhZG9ubHkgdGllcjogUXVvdGFUaWVyO1xuICByZWFkb25seSBwcmljZXM6IEJpbGxpbmdQbGFuUHJpY2VzO1xuICByZWFkb25seSBmZWF0dXJlczogcmVhZG9ubHkgc3RyaW5nW107XG4gIHJlYWRvbmx5IGlzQWN0aXZlOiBib29sZWFuO1xuICByZWFkb25seSBpc0RlZmF1bHQ6IGJvb2xlYW47XG4gIHJlYWRvbmx5IHNvcnRPcmRlcjogbnVtYmVyO1xufVxuXG4vKipcbiAqIEEgcHVyY2hhc2FibGUgYWRkLW9uIGJ1bmRsZTogYSBxdWFudGl0eS1zdGFja2FibGUgcGFjayB0aGF0IEFERFMgdG8gdGhlXG4gKiBhY2NvdW50J3MgYmFzZSAodGllcikgbGltaXRzIGFuZCBhZGRzIGEgcmVjdXJyaW5nIGxpbmUgaXRlbS4gU2VlXG4gKiBkb2NzL2JpbGxpbmctYnVuZGxlcy5tZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdW5kbGVDb25maWcge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIC8qKiBQZXItdW5pdCBkZWx0YXMgb24gYFF1b3RhVGllckxpbWl0c2AgZmllbGRzLCBlLmcuIGB7IHNlYXRzOiA1IH1gLiBLZXlzIGFyZVxuICAgKiAgY29uc3RyYWluZWQgdG8gcmVhbCBxdW90YSBmaWVsZHMgc28gYSB0eXBvIGlzIGEgY29tcGlsZSBlcnJvciAod2FzXG4gICAqICBgUmVjb3JkPHN0cmluZywgbnVtYmVyPmAsIHdoZXJlIGEgbWlzc3BlbGxlZCBrZXkgd2FzIHNpbGVudGx5IHVuZW5mb3JjZWFibGUpLiAqL1xuICByZWFkb25seSBncmFudHM6IFJlYWRvbmx5PFBhcnRpYWw8UmVjb3JkPGtleW9mIFF1b3RhVGllckxpbWl0cywgbnVtYmVyPj4+O1xuICAvKiogRmVhdHVyZSBmbGFncyBncmFudGVkIGJ5IGEgZmVhdHVyZSBidW5kbGUgKGUuZy4gYGF1ZGl0X2xvZ2ApLiAqL1xuICByZWFkb25seSBmZWF0dXJlcz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogUGVyLXVuaXQgcHJpY2UgKGNlbnRzKS4gU3RyaXBlIG11bHRpcGxpZXMgYnkgcXVhbnRpdHkuICovXG4gIHJlYWRvbmx5IHByaWNlczogQmlsbGluZ1BsYW5QcmljZXM7XG4gIC8qKiBUcnVlIGZvciBzdGFja2FibGUgcmVzb3VyY2UgcGFja3M7IGZhbHNlIGZvciBhIGJvb2xlYW4gZmVhdHVyZSBidW5kbGUuICovXG4gIHJlYWRvbmx5IHN0YWNrYWJsZTogYm9vbGVhbjtcbiAgLyoqIEJhc2UgdGllcnMgdGhpcyBidW5kbGUgaXMgb2ZmZXJlZCB0by4gKi9cbiAgcmVhZG9ubHkgYXZhaWxhYmxlRm9yVGllcnM6IHJlYWRvbmx5IFF1b3RhVGllcltdO1xuICByZWFkb25seSBpc0FjdGl2ZTogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc29ydE9yZGVyOiBudW1iZXI7XG59XG5cbi8qKlxuICogQSBjb21ibyBkaXNjb3VudDogd2hlbiBhbiBhY2NvdW50IGhvbGRzIEVWRVJZIGJ1bmRsZSBpbiBgYnVuZGxlSWRzYCwgdGhlIHBhaXJcbiAqIGlzIGJpbGxlZCBhdCBgcHJpY2VzYCAodGhlIGNvbWJpbmVkIHByaWNlKSBpbnN0ZWFkIG9mIHRoZSBzdW0gb2YgdGhlIG1lbWJlcnMnXG4gKiBpbmRpdmlkdWFsIHByaWNlcy4gUmVhbGl6ZWQgYXMgYSByZWN1cnJpbmcgdXNhZ2UgY3JlZGl0IGZvciB0aGUgZGlmZmVyZW5jZSDigJRcbiAqIG5ldmVyIGEgcHJvdmlkZXIgY291cG9uIOKAlCBjb25zaXN0ZW50IHdpdGggdGhlIHVzYWdlLWNyZWRpdCBkaXNjb3VudCBtb2RlbC4gU2VlXG4gKiBkb2NzL2JpbGxpbmctYnVuZGxlcy5tZCDCp0NvbWJvIHByaWNpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tYm9EaXNjb3VudENvbmZpZyB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgLyoqIFRoZSBtZW1iZXIgYnVuZGxlIGlkcyB0aGF0IG11c3QgQUxMIGJlIHByZXNlbnQgZm9yIHRoZSBjb21ibyB0byBhcHBseS4gKi9cbiAgcmVhZG9ubHkgYnVuZGxlSWRzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIFBlci1tZW1iZXIgbWluaW11bSBxdWFudGl0eSAoYnVuZGxlSWQg4oaSIGNvdW50OyBhYnNlbnQg4oeSIDEpLiBMZXRzIGEgc3RhY2thYmxlXG4gICAqICBjYXBhY2l0eSBwYWNrIGFuY2hvciBhIGNvbWJvIOKAlCBlLmcuIGB7IHNlYXRfcGFjazogMSB9YCA9IFwi4omlIDEgU2VhdCBQYWNrXCIuIFRoZVxuICAgKiAgY3JlZGl0IGJhc2lzIHVzZXMgdGhpcyBtaW5pbXVtLCBzbyBleHRyYSBwYWNrcyBuZXZlciBpbmZsYXRlIHRoZSBkaXNjb3VudC4gKi9cbiAgcmVhZG9ubHkgbWluUXVhbnRpdGllcz86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIG51bWJlcj4+O1xuICAvKiogVGhlIGNvbWJpbmVkIHByaWNlIGZvciB0aGUgbWluaW11bSBzZXQgKGNlbnRzKS4gVGhlIGNyZWRpdCBpc1xuICAgKiAgYM6jIG1lbWJlciB1bml0IHByaWNlIMOXIG1pblF0eSDiiJIgcHJpY2VzYCwgY2xhbXBlZCDiiaUgMC4gKi9cbiAgcmVhZG9ubHkgcHJpY2VzOiBCaWxsaW5nUGxhblByaWNlcztcbiAgLyoqIERldGVybWluaXN0aWMgdGllLWJyZWFrIGFtb25nIGVxdWFsLXRvdGFsIG9wdGltYWwgcGFja2luZ3Mgd2hlbiBjb21ib3Mgb3ZlcmxhcFxuICAgKiAgKGxvd2VyIHdpbnMpLiAqL1xuICByZWFkb25seSBzb3J0T3JkZXI6IG51bWJlcjtcbiAgcmVhZG9ubHkgaXNBY3RpdmU6IGJvb2xlYW47XG59XG5cbi8qKiBCaWxsaW5nIHBsYW5zICsgYWRkLW9uIGJ1bmRsZSBjb25maWd1cmF0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBCaWxsaW5nQ29uZmlnIHtcbiAgcmVhZG9ubHkgcGxhbnM6IHJlYWRvbmx5IEJpbGxpbmdQbGFuQ29uZmlnW107XG4gIHJlYWRvbmx5IGJ1bmRsZXM6IHJlYWRvbmx5IEJ1bmRsZUNvbmZpZ1tdO1xuICByZWFkb25seSBjb21ib0Rpc2NvdW50czogcmVhZG9ubHkgQ29tYm9EaXNjb3VudENvbmZpZ1tdO1xufVxuIl19
@@ -4,10 +4,15 @@
4
4
  * Leaf constants for the PluginLookup Lambda handler.
5
5
  *
6
6
  * Deliberately dependency-free (only `process.env` reads, no imports) so the
7
- * handler's esbuild bundle does NOT transitively reach `app-config.ts` →
8
- * `infrastructure-config.ts` `aws-cdk-lib`. Bundling all of aws-cdk-lib into
9
- * the Lambda OOM-kills esbuild (hundreds of MB, SIGKILL during cold-start
10
- * synth). The handler imports THIS module, not `CoreConstants`.
7
+ * handler's esbuild bundle stays small — it does not drag in the whole config
8
+ * machinery via `app-config.ts`. The handler imports THIS module, not
9
+ * `CoreConstants`.
10
+ *
11
+ * This originally guarded a much sharper edge: `app-config.ts` →
12
+ * `infrastructure-config.ts` → `aws-cdk-lib`, which OOM-killed esbuild
13
+ * (hundreds of MB, SIGKILL during cold-start synth). That chain is gone —
14
+ * `infrastructure-config.ts` is now CDK-free and the constructs live behind the
15
+ * `/cdk` entry point — but the dependency-free contract is still worth keeping.
11
16
  *
12
17
  * `CoreConstants` (app-config.ts) re-exports these so synth-side consumers
13
18
  * (api-server, server-config) keep using `CoreConstants.HANDLER_*` unchanged —
@@ -31,4 +36,4 @@ export const HANDLER_DEFAULT_BASE_URL = process.env.PLATFORM_BASE_URL || DEFAULT
31
36
  export const HANDLER_MAX_RETRIES = envInt(process.env.HANDLER_MAX_RETRIES, 2);
32
37
  /** Base backoff between handler retries (exponential). */
33
38
  export const HANDLER_RETRY_DELAY_MS = envInt(process.env.HANDLER_RETRY_DELAY_MS, 1000); // 1s
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlci1jb25zdGFudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL2hhbmRsZXItY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7OztHQVlHO0FBRUg7OztpRkFHaUY7QUFDakYsU0FBUyxNQUFNLENBQUMsS0FBeUIsRUFBRSxRQUFnQjtJQUN6RCxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNwQyxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCx1RUFBdUU7QUFDdkUsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsd0JBQXdCLENBQUM7QUFFN0QsK0ZBQStGO0FBQy9GLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUV2RixtR0FBbUc7QUFDbkcsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsSUFBSSxvQkFBb0IsQ0FBQztBQUU5Rix1REFBdUQ7QUFDdkQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFOUUsMERBQTBEO0FBQzFELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIExlYWYgY29uc3RhbnRzIGZvciB0aGUgUGx1Z2luTG9va3VwIExhbWJkYSBoYW5kbGVyLlxuICpcbiAqIERlbGliZXJhdGVseSBkZXBlbmRlbmN5LWZyZWUgKG9ubHkgYHByb2Nlc3MuZW52YCByZWFkcywgbm8gaW1wb3J0cykgc28gdGhlXG4gKiBoYW5kbGVyJ3MgZXNidWlsZCBidW5kbGUgZG9lcyBOT1QgdHJhbnNpdGl2ZWx5IHJlYWNoIGBhcHAtY29uZmlnLnRzYCDihpJcbiAqIGBpbmZyYXN0cnVjdHVyZS1jb25maWcudHNgIOKGkiBgYXdzLWNkay1saWJgLiBCdW5kbGluZyBhbGwgb2YgYXdzLWNkay1saWIgaW50b1xuICogdGhlIExhbWJkYSBPT00ta2lsbHMgZXNidWlsZCAoaHVuZHJlZHMgb2YgTUIsIFNJR0tJTEwgZHVyaW5nIGNvbGQtc3RhcnRcbiAqIHN5bnRoKS4gVGhlIGhhbmRsZXIgaW1wb3J0cyBUSElTIG1vZHVsZSwgbm90IGBDb3JlQ29uc3RhbnRzYC5cbiAqXG4gKiBgQ29yZUNvbnN0YW50c2AgKGFwcC1jb25maWcudHMpIHJlLWV4cG9ydHMgdGhlc2Ugc28gc3ludGgtc2lkZSBjb25zdW1lcnNcbiAqIChhcGktc2VydmVyLCBzZXJ2ZXItY29uZmlnKSBrZWVwIHVzaW5nIGBDb3JlQ29uc3RhbnRzLkhBTkRMRVJfKmAgdW5jaGFuZ2VkIOKAlFxuICogc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBsaXZlcyBoZXJlLlxuICovXG5cbi8qKiBQYXJzZSBhbiBpbnRlZ2VyIGVudiB2YXIsIGZhbGxpbmcgYmFjayBvbiB1bnNldCBPUiBtYWxmb3JtZWQgKE5hTikuIEEgcmF3XG4gKiAgYHBhcnNlSW50YCByZXR1cm5pbmcgTmFOIHNpbGVudGx5IGRpc2FibGVzIHRoZSBoYW5kbGVyJ3MgcmV0cnkgbG9vcCAvIGF4aW9zXG4gKiAgdGltZW91dCDigJQgYnJlYWtpbmcgZXZlcnkgcGx1Z2luIGxvb2t1cCDigJQgc28gZ3VhcmQgaXQuIEtlcHQgaW5saW5lIHRvIHByZXNlcnZlXG4gKiAgdGhpcyBtb2R1bGUncyBkZXBlbmRlbmN5LWZyZWUgY29udHJhY3QgKG5vIGltcG9ydHMg4oaSIHNtYWxsIExhbWJkYSBidW5kbGUpLiAqL1xuZnVuY3Rpb24gZW52SW50KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQsIGZhbGxiYWNrOiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCBuID0gcGFyc2VJbnQodmFsdWUgPz8gJycsIDEwKTtcbiAgcmV0dXJuIE51bWJlci5pc05hTihuKSA/IGZhbGxiYWNrIDogbjtcbn1cblxuLyoqIERlZmF1bHQgcGxhdGZvcm0gVVJMIGZhbGxiYWNrIHdoZW4gUExBVEZPUk1fQkFTRV9VUkwgaXMgbm90IHNldC4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1BMQVRGT1JNX1VSTCA9ICdodHRwczovL2xvY2FsaG9zdDo4NDQzJztcblxuLyoqIEN1c3RvbS1yZXNvdXJjZSBoYW5kbGVyIHRpbWVvdXQgKG11c3QgYmUgPCB0aGUgTGFtYmRhJ3MgMzBzIHRvIGFsbG93IHJlc3BvbnNlIGhhbmRsaW5nKS4gKi9cbmV4cG9ydCBjb25zdCBIQU5ETEVSX1RJTUVPVVRfTVMgPSBlbnZJbnQocHJvY2Vzcy5lbnYuSEFORExFUl9USU1FT1VUX01TLCAyNTAwMCk7IC8vIDI1c1xuXG4vKiogUGxhdGZvcm0gYmFzZSBVUkwgdGhlIGhhbmRsZXIgY2FsbHM7IG92ZXJyaWRhYmxlIHBlci1yZXF1ZXN0IHZpYSBSZXNvdXJjZVByb3BlcnRpZXMuYmFzZVVSTC4gKi9cbmV4cG9ydCBjb25zdCBIQU5ETEVSX0RFRkFVTFRfQkFTRV9VUkwgPSBwcm9jZXNzLmVudi5QTEFURk9STV9CQVNFX1VSTCB8fCBERUZBVUxUX1BMQVRGT1JNX1VSTDtcblxuLyoqIE1heCByZXRyaWVzIG9uIHRyYW5zaWVudCBwbHVnaW4tbG9va3VwIGZhaWx1cmVzLiAqL1xuZXhwb3J0IGNvbnN0IEhBTkRMRVJfTUFYX1JFVFJJRVMgPSBlbnZJbnQocHJvY2Vzcy5lbnYuSEFORExFUl9NQVhfUkVUUklFUywgMik7XG5cbi8qKiBCYXNlIGJhY2tvZmYgYmV0d2VlbiBoYW5kbGVyIHJldHJpZXMgKGV4cG9uZW50aWFsKS4gKi9cbmV4cG9ydCBjb25zdCBIQU5ETEVSX1JFVFJZX0RFTEFZX01TID0gZW52SW50KHByb2Nlc3MuZW52LkhBTkRMRVJfUkVUUllfREVMQVlfTVMsIDEwMDApOyAvLyAxc1xuIl19
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlci1jb25zdGFudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL2hhbmRsZXItY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBRUg7OztpRkFHaUY7QUFDakYsU0FBUyxNQUFNLENBQUMsS0FBeUIsRUFBRSxRQUFnQjtJQUN6RCxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNwQyxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCx1RUFBdUU7QUFDdkUsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsd0JBQXdCLENBQUM7QUFFN0QsK0ZBQStGO0FBQy9GLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUV2RixtR0FBbUc7QUFDbkcsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsSUFBSSxvQkFBb0IsQ0FBQztBQUU5Rix1REFBdUQ7QUFDdkQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFOUUsMERBQTBEO0FBQzFELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIExlYWYgY29uc3RhbnRzIGZvciB0aGUgUGx1Z2luTG9va3VwIExhbWJkYSBoYW5kbGVyLlxuICpcbiAqIERlbGliZXJhdGVseSBkZXBlbmRlbmN5LWZyZWUgKG9ubHkgYHByb2Nlc3MuZW52YCByZWFkcywgbm8gaW1wb3J0cykgc28gdGhlXG4gKiBoYW5kbGVyJ3MgZXNidWlsZCBidW5kbGUgc3RheXMgc21hbGwg4oCUIGl0IGRvZXMgbm90IGRyYWcgaW4gdGhlIHdob2xlIGNvbmZpZ1xuICogbWFjaGluZXJ5IHZpYSBgYXBwLWNvbmZpZy50c2AuIFRoZSBoYW5kbGVyIGltcG9ydHMgVEhJUyBtb2R1bGUsIG5vdFxuICogYENvcmVDb25zdGFudHNgLlxuICpcbiAqIFRoaXMgb3JpZ2luYWxseSBndWFyZGVkIGEgbXVjaCBzaGFycGVyIGVkZ2U6IGBhcHAtY29uZmlnLnRzYCDihpJcbiAqIGBpbmZyYXN0cnVjdHVyZS1jb25maWcudHNgIOKGkiBgYXdzLWNkay1saWJgLCB3aGljaCBPT00ta2lsbGVkIGVzYnVpbGRcbiAqIChodW5kcmVkcyBvZiBNQiwgU0lHS0lMTCBkdXJpbmcgY29sZC1zdGFydCBzeW50aCkuIFRoYXQgY2hhaW4gaXMgZ29uZSDigJRcbiAqIGBpbmZyYXN0cnVjdHVyZS1jb25maWcudHNgIGlzIG5vdyBDREstZnJlZSBhbmQgdGhlIGNvbnN0cnVjdHMgbGl2ZSBiZWhpbmQgdGhlXG4gKiBgL2Nka2AgZW50cnkgcG9pbnQg4oCUIGJ1dCB0aGUgZGVwZW5kZW5jeS1mcmVlIGNvbnRyYWN0IGlzIHN0aWxsIHdvcnRoIGtlZXBpbmcuXG4gKlxuICogYENvcmVDb25zdGFudHNgIChhcHAtY29uZmlnLnRzKSByZS1leHBvcnRzIHRoZXNlIHNvIHN5bnRoLXNpZGUgY29uc3VtZXJzXG4gKiAoYXBpLXNlcnZlciwgc2VydmVyLWNvbmZpZykga2VlcCB1c2luZyBgQ29yZUNvbnN0YW50cy5IQU5ETEVSXypgIHVuY2hhbmdlZCDigJRcbiAqIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggbGl2ZXMgaGVyZS5cbiAqL1xuXG4vKiogUGFyc2UgYW4gaW50ZWdlciBlbnYgdmFyLCBmYWxsaW5nIGJhY2sgb24gdW5zZXQgT1IgbWFsZm9ybWVkIChOYU4pLiBBIHJhd1xuICogIGBwYXJzZUludGAgcmV0dXJuaW5nIE5hTiBzaWxlbnRseSBkaXNhYmxlcyB0aGUgaGFuZGxlcidzIHJldHJ5IGxvb3AgLyBheGlvc1xuICogIHRpbWVvdXQg4oCUIGJyZWFraW5nIGV2ZXJ5IHBsdWdpbiBsb29rdXAg4oCUIHNvIGd1YXJkIGl0LiBLZXB0IGlubGluZSB0byBwcmVzZXJ2ZVxuICogIHRoaXMgbW9kdWxlJ3MgZGVwZW5kZW5jeS1mcmVlIGNvbnRyYWN0IChubyBpbXBvcnRzIOKGkiBzbWFsbCBMYW1iZGEgYnVuZGxlKS4gKi9cbmZ1bmN0aW9uIGVudkludCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBmYWxsYmFjazogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgbiA9IHBhcnNlSW50KHZhbHVlID8/ICcnLCAxMCk7XG4gIHJldHVybiBOdW1iZXIuaXNOYU4obikgPyBmYWxsYmFjayA6IG47XG59XG5cbi8qKiBEZWZhdWx0IHBsYXRmb3JtIFVSTCBmYWxsYmFjayB3aGVuIFBMQVRGT1JNX0JBU0VfVVJMIGlzIG5vdCBzZXQuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9QTEFURk9STV9VUkwgPSAnaHR0cHM6Ly9sb2NhbGhvc3Q6ODQ0Myc7XG5cbi8qKiBDdXN0b20tcmVzb3VyY2UgaGFuZGxlciB0aW1lb3V0IChtdXN0IGJlIDwgdGhlIExhbWJkYSdzIDMwcyB0byBhbGxvdyByZXNwb25zZSBoYW5kbGluZykuICovXG5leHBvcnQgY29uc3QgSEFORExFUl9USU1FT1VUX01TID0gZW52SW50KHByb2Nlc3MuZW52LkhBTkRMRVJfVElNRU9VVF9NUywgMjUwMDApOyAvLyAyNXNcblxuLyoqIFBsYXRmb3JtIGJhc2UgVVJMIHRoZSBoYW5kbGVyIGNhbGxzOyBvdmVycmlkYWJsZSBwZXItcmVxdWVzdCB2aWEgUmVzb3VyY2VQcm9wZXJ0aWVzLmJhc2VVUkwuICovXG5leHBvcnQgY29uc3QgSEFORExFUl9ERUZBVUxUX0JBU0VfVVJMID0gcHJvY2Vzcy5lbnYuUExBVEZPUk1fQkFTRV9VUkwgfHwgREVGQVVMVF9QTEFURk9STV9VUkw7XG5cbi8qKiBNYXggcmV0cmllcyBvbiB0cmFuc2llbnQgcGx1Z2luLWxvb2t1cCBmYWlsdXJlcy4gKi9cbmV4cG9ydCBjb25zdCBIQU5ETEVSX01BWF9SRVRSSUVTID0gZW52SW50KHByb2Nlc3MuZW52LkhBTkRMRVJfTUFYX1JFVFJJRVMsIDIpO1xuXG4vKiogQmFzZSBiYWNrb2ZmIGJldHdlZW4gaGFuZGxlciByZXRyaWVzIChleHBvbmVudGlhbCkuICovXG5leHBvcnQgY29uc3QgSEFORExFUl9SRVRSWV9ERUxBWV9NUyA9IGVudkludChwcm9jZXNzLmVudi5IQU5ETEVSX1JFVFJZX0RFTEFZX01TLCAxMDAwKTsgLy8gMXNcbiJdfQ==
@@ -1,10 +1,6 @@
1
1
  // Copyright 2026 Pipeline Builder Contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
  import path from 'path';
4
- import { Duration, RemovalPolicy } from 'aws-cdk-lib';
5
- import { Architecture, Runtime } from 'aws-cdk-lib/aws-lambda';
6
- import { RetentionDays } from 'aws-cdk-lib/aws-logs';
7
- import { getComputeType } from '../core/pipeline-helpers.js';
8
4
  /**
9
5
  * Load Docker registry configuration from environment variables.
10
6
  *
@@ -159,52 +155,43 @@ export function loadDockerConfig() {
159
155
  export function loadAWSConfig() {
160
156
  return {
161
157
  lambda: {
162
- runtime: parseRuntime(process.env.LAMBDA_RUNTIME || 'nodejs24.x'),
163
- timeout: Duration.seconds(parseInt(process.env.LAMBDA_TIMEOUT || '900', 10)),
158
+ runtime: process.env.LAMBDA_RUNTIME || 'nodejs24.x',
159
+ timeoutSeconds: parseInt(process.env.LAMBDA_TIMEOUT || '900', 10),
164
160
  memorySize: parseInt(process.env.LAMBDA_MEMORY_SIZE || '512', 10),
165
- architecture: process.env.LAMBDA_ARCHITECTURE === 'x86_64'
166
- ? Architecture.X86_64
167
- : Architecture.ARM_64,
161
+ architecture: process.env.LAMBDA_ARCHITECTURE === 'x86_64' ? 'x86_64' : 'arm64',
168
162
  reservedConcurrentExecutions: process.env.LAMBDA_RESERVED_CONCURRENCY
169
163
  ? parseInt(process.env.LAMBDA_RESERVED_CONCURRENCY, 10)
170
164
  : undefined,
171
165
  },
172
166
  logging: {
173
167
  groupName: process.env.LOG_GROUP_NAME || '/pipeline-builder/logs',
174
- retention: parseRetention(process.env.LOG_RETENTION || '7'),
175
- removalPolicy: process.env.LOG_REMOVAL_POLICY === 'RETAIN'
176
- ? RemovalPolicy.RETAIN
177
- : RemovalPolicy.DESTROY,
168
+ retentionDays: parseRetentionDays(process.env.LOG_RETENTION || '7'),
169
+ removalPolicy: process.env.LOG_REMOVAL_POLICY === 'RETAIN' ? 'retain' : 'destroy',
178
170
  },
179
171
  codeBuild: {
180
- computeType: getComputeType(process.env.CODEBUILD_COMPUTE_TYPE || 'SMALL'),
172
+ computeType: (process.env.CODEBUILD_COMPUTE_TYPE || 'SMALL').toUpperCase(),
181
173
  defaultImage: process.env.CODEBUILD_DEFAULT_IMAGE || 'pipeline-bootstrap:1.0',
182
174
  },
183
175
  };
184
176
  }
185
177
  /**
186
- * Parse Lambda runtime string into a CDK Runtime enum value.
187
- *
188
- * @param runtime - Runtime string (e.g. `'nodejs24.x'`)
189
- * @returns CDK Runtime enum; falls back to NODEJS_24_X for unknown values
178
+ * Valid CloudWatch Logs retention periods, in days. Mirrors the day counts of
179
+ * CDK's `RetentionDays` enum (whose members ARE the day counts), but written out
180
+ * so this module stays free of `aws-cdk-lib` see the note on {@link AWSConfig}.
181
+ * `0` is CDK's `INFINITE` (never expire).
190
182
  */
191
- function parseRuntime(runtime) {
192
- const runtimeMap = {
193
- 'nodejs24.x': Runtime.NODEJS_24_X,
194
- };
195
- return runtimeMap[runtime] || Runtime.NODEJS_24_X;
196
- }
183
+ const VALID_RETENTION_DAYS = new Set([
184
+ 0, 1, 3, 5, 7, 14, 30, 60, 90, 120, 150, 180, 365, 400, 545, 731,
185
+ 1096, 1827, 2192, 2557, 2922, 3288, 3653,
186
+ ]);
197
187
  /**
198
- * Parse log retention days string into a CDK RetentionDays enum value.
199
- * RetentionDays enum values are the numeric day counts themselves,
200
- * so we parse the string and check if it's a valid enum member.
188
+ * Parse a log-retention string into a valid CloudWatch retention day count.
201
189
  *
202
190
  * @param days - Retention period in days as a string (e.g. `'30'`)
203
- * @returns CDK RetentionDays enum; falls back to ONE_DAY for unknown values
191
+ * @returns the day count; falls back to 1 day for unknown/invalid values
204
192
  */
205
- const VALID_RETENTION_DAYS = new Set(Object.values(RetentionDays).filter((v) => typeof v === 'number'));
206
- function parseRetention(days) {
193
+ function parseRetentionDays(days) {
207
194
  const parsed = parseInt(days, 10);
208
- return VALID_RETENTION_DAYS.has(parsed) ? parsed : RetentionDays.ONE_DAY;
195
+ return VALID_RETENTION_DAYS.has(parsed) ? parsed : 1;
209
196
  }
210
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mcmFzdHJ1Y3R1cmUtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy9pbmZyYXN0cnVjdHVyZS1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTdEOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQjtJQUNoQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixJQUFJLFVBQVUsQ0FBQztJQUMzRCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsSUFBSSxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDckUsNEVBQTRFO0lBQzVFLHdFQUF3RTtJQUN4RSw4RUFBOEU7SUFDOUUsNEVBQTRFO0lBQzVFLE1BQU0sUUFBUSxHQUFHLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNyRSxPQUFPO1FBQ0wsSUFBSTtRQUNKLElBQUk7UUFDSixRQUFRLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsSUFBSSxRQUFRLEVBQUUsSUFBSSxJQUFJLElBQUk7UUFDeEUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCO1lBQzVDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FB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LENBQUMsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDO0FBQ3BELENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBZSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztBQUVySCxTQUFTLGNBQWMsQ0FBQyxJQUFZO0lBQ2xDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbEMsT0FBTyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQXVCLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7QUFDNUYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IER1cmF0aW9uLCBSZW1vdmFsUG9saWN5IH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQXJjaGl0ZWN0dXJlLCBSdW50aW1lIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBSZXRlbnRpb25EYXlzIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0IHR5cGUgeyBBV1NDb25maWcsIEJ1aWxkQ29uZmlnLCBDb21wbGlhbmNlQ29uZmlnLCBEYXRhYmFzZUNvbmZpZywgT2JzZXJ2YWJpbGl0eUNvbmZpZywgUGx1Z2luQnVpbGRDb25maWcsIFJlZGlzQ29uZmlnLCBSZWdpc3RyeUNvbmZpZyB9IGZyb20gJy4vY29uZmlnLXR5cGVzLmpzJztcbmltcG9ydCB7IGdldENvbXB1dGVUeXBlIH0gZnJvbSAnLi4vY29yZS9waXBlbGluZS1oZWxwZXJzLmpzJztcblxuLyoqXG4gKiBMb2FkIERvY2tlciByZWdpc3RyeSBjb25maWd1cmF0aW9uIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICpcbiAqIEVudmlyb25tZW50IHZhcmlhYmxlczpcbiAqIC0gYElNQUdFX1JFR0lTVFJZX0hPU1RgIOKAlCBSZWdpc3RyeSBob3N0bmFtZSAoZGVmYXVsdDogYCdyZWdpc3RyeSdgKVxuICogLSBgSU1BR0VfUkVHSVNUUllfUE9SVGAg4oCUIFJlZ2lzdHJ5IHBvcnQgKGRlZmF1bHQ6IGA1MDAwYClcbiAqIC0gYElNQUdFX1JFR0lTVFJZX1BVTExfSE9TVGAg4oCUIEhvc3QgYW4gb3V0LW9mLWNsdXN0ZXIgY2xpZW50IChDb2RlQnVpbGQpXG4gKiAgIHVzZXMgdG8gcHVsbCBwbHVnaW4gaW1hZ2VzLiBXaGVuIHVuc2V0LCBkZXJpdmVkIGZyb20gYFBMQVRGT1JNX0JBU0VfVVJMYCdzXG4gKiAgIGhvc3QgKHRoZSBwdWJsaWMgZW5kcG9pbnQgQ29kZUJ1aWxkIGNhbiByZXNvbHZlKSwgdGhlbiBgSU1BR0VfUkVHSVNUUllfSE9TVGAuXG4gKiAtIGBJTUFHRV9SRUdJU1RSWV9QVUxMX1BPUlRgIOKAlCBQb3J0IGZvciB0aGUgYWJvdmUuIFdoZW4gdW5zZXQsIGRlcml2ZWQgZnJvbVxuICogICBgUExBVEZPUk1fQkFTRV9VUkxgJ3MgcG9ydCwgdGhlbiBgSU1BR0VfUkVHSVNUUllfUE9SVGAuXG4gKiAtIGBET0NLRVJfTkVUV09SS2Ag4oCUIERvY2tlciBuZXR3b3JrIGZvciBidWlsZC9wdXNoIChkZWZhdWx0OiBgJydgKVxuICogLSBgSU1BR0VfUkVHSVNUUllfSFRUUGAg4oCUIFVzZSBwbGFpbiBIVFRQIGluc3RlYWQgb2YgSFRUUFMgKGRlZmF1bHQ6IGB0cnVlYCxcbiAqICAgdGhlIGluLWNsdXN0ZXIgcmVnaXN0cnkgaGFzIG5vIFRMUykuXG4gKlxuICogQHJldHVybnMgUmVnaXN0cnkgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZFJlZ2lzdHJ5Q29uZmlnKCk6IFJlZ2lzdHJ5Q29uZmlnIHtcbiAgY29uc3QgaG9zdCA9IHByb2Nlc3MuZW52LklNQUdFX1JFR0lTVFJZX0hPU1QgfHwgJ3JlZ2lzdHJ5JztcbiAgY29uc3QgcG9ydCA9IHBhcnNlSW50KHByb2Nlc3MuZW52LklNQUdFX1JFR0lTVFJZX1BPUlQgfHwgJzUwMDAnLCAxMCk7XG4gIC8vIFdoZW4gbm8gZXhwbGljaXQgcHVsbCBob3N0IGlzIHNldCwgZGVyaXZlIGl0IGZyb20gUExBVEZPUk1fQkFTRV9VUkwg4oCUIHRoZVxuICAvLyBwdWJsaWMgcGxhdGZvcm0gZW5kcG9pbnQgYW4gb3V0LW9mLWNsdXN0ZXIgY2xpZW50IChBV1MgQ29kZUJ1aWxkKSBjYW5cbiAgLy8gcmVzb2x2ZSwgdW5saWtlIHRoZSBpbi1jbHVzdGVyIGByZWdpc3RyeWAgQ2x1c3RlcklQLiBPbmx5IGZhbGxzIGJhY2sgdG8gdGhlXG4gIC8vIGluLWNsdXN0ZXIgaG9zdCB3aGVuIFBMQVRGT1JNX0JBU0VfVVJMIGlzIHVuc2V0L3VucGFyc2VhYmxlIChlLmcuIGxvY2FsKS5cbiAgY29uc3QgcGxhdGZvcm0gPSBwYXJzZVBsYXRmb3JtQmFzZVVybChwcm9jZXNzLmVudi5QTEFURk9STV9CQVNFX1VSTCk7XG4gIHJldHVybiB7XG4gICAgaG9zdCxcbiAgICBwb3J0LFxuICAgIHB1bGxIb3N0OiBwcm9jZXNzLmVudi5JTUFHRV9SRUdJU1RSWV9QVUxMX0hPU1QgfHwgcGxhdGZvcm0/Lmhvc3QgfHwgaG9zdCxcbiAgICBwdWxsUG9ydDogcHJvY2Vzcy5lbnYuSU1BR0VfUkVHSVNUUllfUFVMTF9QT1JUXG4gICAgICA/IHBhcnNlSW50KHByb2Nlc3MuZW52LklNQUdFX1JFR0lTVFJZX1BVTExfUE9SVCwgMTApXG4gICAgICA6IChwbGF0Zm9ybT8ucG9ydCA/PyBwb3J0KSxcbiAgICBuZXR3b3JrOiBwcm9jZXNzLmVudi5ET0NLRVJfTkVUV09SSyB8fCAnJyxcbiAgICBodHRwOiBwcm9jZXNzLmVudi5JTUFHRV9SRUdJU1RSWV9IVFRQICE9PSAnZmFsc2UnLFxuICB9O1xufVxuXG4vKiogRXh0cmFjdCBob3N0ICsgcG9ydCBmcm9tIFBMQVRGT1JNX0JBU0VfVVJMIChlLmcuIGBodHRwczovL3BpcGVsaW5lLWJ1aWxkZXIuY29tYFxuICogIOKGkiBgeyBob3N0OiAncGlwZWxpbmUtYnVpbGRlci5jb20nLCBwb3J0OiA0NDMgfWApLiBSZXR1cm5zIG51bGwgd2hlbiB0aGUgdmFsdWVcbiAqICBpcyB1bnNldCBvciBub3QgYSB2YWxpZCBVUkwuIEV4cG9ydGVkIHNvIHRoZSBDTEkgKHBpcGVsaW5lLW1hbmFnZXIpIGRlcml2ZXNcbiAqICB0aGUgcmVnaXN0cnkgcHVsbCB0YXJnZXQgd2l0aCB0aGUgU0FNRSBwYXJzaW5nLCBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nIGl0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGxhdGZvcm1CYXNlVXJsKHJhdz86IHN0cmluZyk6IHsgaG9zdDogc3RyaW5nOyBwb3J0OiBudW1iZXIgfSB8IG51bGwge1xuICBpZiAoIXJhdykgcmV0dXJuIG51bGw7XG4gIHRyeSB7XG4gICAgY29uc3QgdSA9IG5ldyBVUkwocmF3KTtcbiAgICAvLyBBIHNjaGVtZS1sZXNzIHZhbHVlIGxpa2UgYGhvc3Q6ODQ0M2AgcGFyc2VzIHdpdGggYSBjdXN0b20gcHJvdG9jb2wgYW5kIGFuXG4gICAgLy8gRU1QVFkgaG9zdG5hbWUg4oCUIHJlamVjdCBpdCBzbyBjYWxsZXJzIGZhbGwgYmFjayByYXRoZXIgdGhhbiBkZXJpdmUgYVxuICAgIC8vIGhvc3QtbGVzcyBlbmRwb2ludC5cbiAgICBpZiAoIXUuaG9zdG5hbWUpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHBvcnQgPSB1LnBvcnQgPyBwYXJzZUludCh1LnBvcnQsIDEwKSA6ICh1LnByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwKTtcbiAgICByZXR1cm4geyBob3N0OiB1Lmhvc3RuYW1lLCBwb3J0IH07XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkUmVkaXNDb25maWcoKTogUmVkaXNDb25maWcge1xuICByZXR1cm4ge1xuICAgIGhvc3Q6IHByb2Nlc3MuZW52LlJFRElTX0hPU1QgfHwgJ2xvY2FsaG9zdCcsXG4gICAgcG9ydDogcGFyc2VJbnQocHJvY2Vzcy5lbnYuUkVESVNfUE9SVCB8fCAnNjM3OScsIDEwKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBMb2FkIHBsdWdpbiBidWlsZCBxdWV1ZSBjb25maWd1cmF0aW9uLlxuICpcbiAqIEVudmlyb25tZW50IHZhcmlhYmxlczpcbiAqIC0gYFBMVUdJTl9CVUlMRF9DT05DVVJSRU5DWWAg4oCUIE1heCBjb25jdXJyZW50IHBsdWdpbiBidWlsZHMgKGRlZmF1bHQ6IGAxYClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRQbHVnaW5CdWlsZENvbmZpZygpOiBQbHVnaW5CdWlsZENvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgY29uY3VycmVuY3k6IHBhcnNlSW50KHByb2Nlc3MuZW52LlBMVUdJTl9CVUlMRF9DT05DVVJSRU5DWSB8fCAnMScsIDEwKSxcbiAgICBtYXhBdHRlbXB0czogcGFyc2VJbnQocHJvY2Vzcy5lbnYuUExVR0lOX0JVSUxEX01BWF9BVFRFTVBUUyB8fCAnMicsIDEwKSxcbiAgICBiYWNrb2ZmRGVsYXlNczogcGFyc2VJbnQocHJvY2Vzcy5lbnYuUExVR0lOX0JVSUxEX0JBQ0tPRkZfREVMQVlfTVMgfHwgJzUwMDAnLCAxMCksXG4gICAgd29ya2VyVGltZW91dE1zOiBwYXJzZUludChwcm9jZXNzLmVudi5QTFVHSU5fQlVJTERfV09SS0VSX1RJTUVPVVRfTVMgfHwgJzEwMDAwJywgMTApLFxuICAgIHRlbXBEaXJNYXhBZ2VNczogcGFyc2VJbnQocHJvY2Vzcy5lbnYuVEVNUF9ESVJfTUFYX0FHRV9NUyB8fCAnMTQ0MDAwMDAnLCAxMCksXG4gICAgZGxxTWF4QXR0ZW1wdHM6IHBhcnNlSW50KHByb2Nlc3MuZW52LlBMVUdJTl9ETFFfTUFYX0FUVEVNUFRTIHx8ICczJywgMTApLFxuICAgIGRscUJhY2tvZmZCYXNlTXM6IHBhcnNlSW50KHByb2Nlc3MuZW52LlBMVUdJTl9ETFFfQkFDS09GRl9CQVNFX01TIHx8ICczMDAwMDAnLCAxMCksXG4gICAgZGxxTWF4U2l6ZTogcGFyc2VJbnQocHJvY2Vzcy5lbnYuUExVR0lOX0RMUV9NQVhfU0laRSB8fCAnMjAnLCAxMCksXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRGF0YWJhc2VDb25maWcoKTogRGF0YWJhc2VDb25maWcge1xuICByZXR1cm4ge1xuICAgIHBvc3RncmVzOiB7XG4gICAgICBob3N0OiBwcm9jZXNzLmVudi5EQl9IT1NUIHx8ICdwb3N0Z3JlcycsXG4gICAgICBwb3J0OiBwYXJzZUludChwcm9jZXNzLmVudi5EQl9QT1JUIHx8ICc1NDMyJywgMTApLFxuICAgICAgZGF0YWJhc2U6IHByb2Nlc3MuZW52LkRBVEFCQVNFIHx8ICdwaXBlbGluZV9idWlsZGVyJyxcbiAgICAgIHVzZXI6IHByb2Nlc3MuZW52LkRCX1VTRVIgfHwgJ3Bvc3RncmVzJyxcbiAgICAgIHBhc3N3b3JkOiBwcm9jZXNzLmVudi5EQl9QQVNTV09SRCB8fCAnJyxcbiAgICB9LFxuICAgIGRyaXp6bGU6IHtcbiAgICAgIG1heFBvb2xTaXplOiBwYXJzZUludChwcm9jZXNzLmVudi5EUklaWkxFX01BWF9QT09MX1NJWkUgfHwgJzIwJywgMTApLFxuICAgICAgaWRsZVRpbWVvdXRNaWxsaXM6IHBhcnNlSW50KHByb2Nlc3MuZW52LkRSSVpaTEVfSURMRV9USU1FT1VUX01JTExJUyB8fCAnMzAwMDAnLCAxMCksXG4gICAgICBjb25uZWN0aW9uVGltZW91dE1pbGxpczogcGFyc2VJbnQocHJvY2Vzcy5lbnYuRFJJWlpMRV9DT05ORUNUSU9OX1RJTUVPVVRfTUlMTElTIHx8ICcxMDAwMCcsIDEwKSxcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZE9ic2VydmFiaWxpdHlDb25maWcoKTogT2JzZXJ2YWJpbGl0eUNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgbG9nTGV2ZWw6IHByb2Nlc3MuZW52LkxPR19MRVZFTCB8fCAnaW5mbycsXG4gICAgbG9nRm9ybWF0OiBwcm9jZXNzLmVudi5MT0dfRk9STUFUIHx8ICdqc29uJyxcbiAgICBzZXJ2aWNlTmFtZTogcHJvY2Vzcy5lbnYuU0VSVklDRV9OQU1FIHx8ICdhcGknLFxuICAgIHRyYWNpbmc6IHtcbiAgICAgIGVuYWJsZWQ6IHByb2Nlc3MuZW52Lk9URUxfVFJBQ0lOR19FTkFCTEVEID09PSAndHJ1ZScsXG4gICAgICBlbmRwb2ludDogcHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9PVExQX0VORFBPSU5UIHx8ICdodHRwOi8vbG9jYWxob3N0OjQzMTgvdjEvdHJhY2VzJyxcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZENvbXBsaWFuY2VDb25maWcoKTogQ29tcGxpYW5jZUNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgc2NhblNjaGVkdWxlckludGVydmFsTXM6IHBhcnNlSW50KHByb2Nlc3MuZW52LlNDQU5fU0NIRURVTEVSX0lOVEVSVkFMX01TIHx8ICc2MDAwMCcsIDEwKSxcbiAgICBzeXN0ZW1PcmdTY2Fuc0VuYWJsZWQ6IHByb2Nlc3MuZW52LlNZU1RFTV9PUkdfU0NBTlNfRU5BQkxFRCA9PT0gJ3RydWUnLFxuICAgIHNjYW5Mb2NrVHRsTXM6IHBhcnNlSW50KHByb2Nlc3MuZW52LlNDQU5fTE9DS19UVExfTVMgfHwgJzMwMDAwMCcsIDEwKSxcbiAgICBkaWdlc3RTY2hlZHVsZXJJbnRlcnZhbE1zOiBwYXJzZUludChwcm9jZXNzLmVudi5ESUdFU1RfU0NIRURVTEVSX0lOVEVSVkFMX01TIHx8ICczNjAwMDAwJywgMTApLFxuICAgIGRpZ2VzdExvY2tUdGxNczogcGFyc2VJbnQocHJvY2Vzcy5lbnYuRElHRVNUX0xPQ0tfVFRMX01TIHx8ICczMDAwMDAnLCAxMCksXG4gIH07XG59XG5cbi8qKlxuICogTG9hZCBwbHVnaW4gYnVpbGQgY29uZmlndXJhdGlvbi4gQnVpbGRzIHJ1biBhZ2FpbnN0IGEgcm9vdGxlc3MgYG1vYnkvYnVpbGRraXRgXG4gKiBzaWRlY2FyIOKAlCBzZWUgYEJVSUxES0lUX0hPU1RgLlxuICpcbiAqIEVudmlyb25tZW50IHZhcmlhYmxlczpcbiAqIC0gYERPQ0tFUl9CVUlMRF9URU1QX1JPT1RgIOKAlCBUZW1wIGRpcmVjdG9yeSBmb3IgYnVpbGQgY29udGV4dHMgKGRlZmF1bHQ6IGA8Y3dkPi90bXBgKVxuICogLSBgRE9DS0VSX0JVSUxEX1RJTUVPVVRfTVNgIOKAlCBCdWlsZCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAoZGVmYXVsdDogYDkwMDAwMGAgLyAxNSBtaW4pXG4gKiAtIGBET0NLRVJfUFVTSF9USU1FT1VUX01TYCDigJQgUHVzaCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAoZGVmYXVsdDogYDMwMDAwMGAgLyA1IG1pbilcbiAqIC0gYEJVSUxES0lUX0hPU1RgIOKAlCBidWlsZGN0bCBgLS1hZGRyYCB2YWx1ZSBmb3IgdGhlIGJ1aWxka2l0ZCBzaWRlY2FyXG4gKiAgIChkZWZhdWx0OiBgdW5peDovLy9ydW4vYnVpbGRraXQvYnVpbGRraXRkLnNvY2tgKVxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZERvY2tlckNvbmZpZygpOiBCdWlsZENvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgdGVtcFJvb3Q6IHByb2Nlc3MuZW52LkRPQ0tFUl9CVUlMRF9URU1QX1JPT1QgfHwgcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICd0bXAnKSxcbiAgICB0aW1lb3V0TXM6IHBhcnNlSW50KHByb2Nlc3MuZW52LkRPQ0tFUl9CVUlMRF9USU1FT1VUX01TIHx8ICc5MDAwMDAnLCAxMCksXG4gICAgcHVzaFRpbWVvdXRNczogcGFyc2VJbnQocHJvY2Vzcy5lbnYuRE9DS0VSX1BVU0hfVElNRU9VVF9NUyB8fCAnMzAwMDAwJywgMTApLFxuICAgIGJ1aWxka2l0QWRkcjogcHJvY2Vzcy5lbnYuQlVJTERLSVRfSE9TVCB8fCAndW5peDovLy9ydW4vYnVpbGRraXQvYnVpbGRraXRkLnNvY2snLFxuICB9O1xufVxuXG4vKipcbiAqIExvYWQgQVdTIGluZnJhc3RydWN0dXJlIGNvbmZpZ3VyYXRpb24gZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gKlxuICogRW52aXJvbm1lbnQgdmFyaWFibGVzOlxuICogLSBgTEFNQkRBX1JVTlRJTUVgIOKAlCBMYW1iZGEgcnVudGltZSAoZGVmYXVsdDogYCdub2RlanMyNC54J2A7IHVua25vd24gdmFsdWVzIGZhbGwgYmFjayB0byBpdClcbiAqIC0gYExBTUJEQV9USU1FT1VUYCDigJQgTGFtYmRhIHRpbWVvdXQgaW4gc2Vjb25kcyAoZGVmYXVsdDogYDkwMGApXG4gKiAtIGBMQU1CREFfTUVNT1JZX1NJWkVgIOKAlCBMYW1iZGEgbWVtb3J5IGluIE1CIChkZWZhdWx0OiBgNTEyYClcbiAqIC0gYExBTUJEQV9BUkNISVRFQ1RVUkVgIOKAlCBgJ3g4Nl82NCdgIG9yIEFSTSAoZGVmYXVsdDogQVJNXzY0KVxuICogLSBgTE9HX0dST1VQX05BTUVgIOKAlCBDbG91ZFdhdGNoIGxvZyBncm91cCAoZGVmYXVsdDogYCcvcGlwZWxpbmUtYnVpbGRlci9sb2dzJ2ApXG4gKiAtIGBMT0dfUkVURU5USU9OYCDigJQgTG9nIHJldGVudGlvbiBpbiBkYXlzIChkZWZhdWx0OiBgN2ApXG4gKiAtIGBMT0dfUkVNT1ZBTF9QT0xJQ1lgIOKAlCBgJ1JFVEFJTidgIG9yIGRlc3Ryb3kgKGRlZmF1bHQ6IERFU1RST1kpXG4gKiAtIGBDT0RFQlVJTERfQ09NUFVURV9UWVBFYCDigJQgQ29kZUJ1aWxkIGNvbXB1dGUgdHlwZSAoZGVmYXVsdDogYCdTTUFMTCdgKVxuICpcbiAqIEByZXR1cm5zIEFXUyBpbmZyYXN0cnVjdHVyZSBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQVdTQ29uZmlnKCk6IEFXU0NvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgbGFtYmRhOiB7XG4gICAgICBydW50aW1lOiBwYXJzZVJ1bnRpbWUocHJvY2Vzcy5lbnYuTEFNQkRBX1JVTlRJTUUgfHwgJ25vZGVqczI0LngnKSxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMocGFyc2VJbnQocHJvY2Vzcy5lbnYuTEFNQkRBX1RJTUVPVVQgfHwgJzkwMCcsIDEwKSksXG4gICAgICBtZW1vcnlTaXplOiBwYXJzZUludChwcm9jZXNzLmVudi5MQU1CREFfTUVNT1JZX1NJWkUgfHwgJzUxMicsIDEwKSxcbiAgICAgIGFyY2hpdGVjdHVyZTogcHJvY2Vzcy5lbnYuTEFNQkRBX0FSQ0hJVEVDVFVSRSA9PT0gJ3g4Nl82NCdcbiAgICAgICAgPyBBcmNoaXRlY3R1cmUuWDg2XzY0XG4gICAgICAgIDogQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgIHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM6IHByb2Nlc3MuZW52LkxBTUJEQV9SRVNFUlZFRF9DT05DVVJSRU5DWVxuICAgICAgICA/IHBhcnNlSW50KHByb2Nlc3MuZW52LkxBTUJEQV9SRVNFUlZFRF9DT05DVVJSRU5DWSwgMTApXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0sXG5cbiAgICBsb2dnaW5nOiB7XG4gICAgICBncm91cE5hbWU6IHByb2Nlc3MuZW52LkxPR19HUk9VUF9OQU1FIHx8ICcvcGlwZWxpbmUtYnVpbGRlci9sb2dzJyxcbiAgICAgIHJldGVudGlvbjogcGFyc2VSZXRlbnRpb24ocHJvY2Vzcy5lbnYuTE9HX1JFVEVOVElPTiB8fCAnNycpLFxuICAgICAgcmVtb3ZhbFBvbGljeTogcHJvY2Vzcy5lbnYuTE9HX1JFTU9WQUxfUE9MSUNZID09PSAnUkVUQUlOJ1xuICAgICAgICA/IFJlbW92YWxQb2xpY3kuUkVUQUlOXG4gICAgICAgIDogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgIH0sXG5cbiAgICBjb2RlQnVpbGQ6IHtcbiAgICAgIGNvbXB1dGVUeXBlOiBnZXRDb21wdXRlVHlwZShwcm9jZXNzLmVudi5DT0RFQlVJTERfQ09NUFVURV9UWVBFIHx8ICdTTUFMTCcpLFxuICAgICAgZGVmYXVsdEltYWdlOiBwcm9jZXNzLmVudi5DT0RFQlVJTERfREVGQVVMVF9JTUFHRSB8fCAncGlwZWxpbmUtYm9vdHN0cmFwOjEuMCcsXG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBQYXJzZSBMYW1iZGEgcnVudGltZSBzdHJpbmcgaW50byBhIENESyBSdW50aW1lIGVudW0gdmFsdWUuXG4gKlxuICogQHBhcmFtIHJ1bnRpbWUgLSBSdW50aW1lIHN0cmluZyAoZS5nLiBgJ25vZGVqczI0LngnYClcbiAqIEByZXR1cm5zIENESyBSdW50aW1lIGVudW07IGZhbGxzIGJhY2sgdG8gTk9ERUpTXzI0X1ggZm9yIHVua25vd24gdmFsdWVzXG4gKi9cbmZ1bmN0aW9uIHBhcnNlUnVudGltZShydW50aW1lOiBzdHJpbmcpOiBSdW50aW1lIHtcbiAgY29uc3QgcnVudGltZU1hcDogUmVjb3JkPHN0cmluZywgUnVudGltZT4gPSB7XG4gICAgJ25vZGVqczI0LngnOiBSdW50aW1lLk5PREVKU18yNF9YLFxuICB9O1xuICByZXR1cm4gcnVudGltZU1hcFtydW50aW1lXSB8fCBSdW50aW1lLk5PREVKU18yNF9YO1xufVxuXG4vKipcbiAqIFBhcnNlIGxvZyByZXRlbnRpb24gZGF5cyBzdHJpbmcgaW50byBhIENESyBSZXRlbnRpb25EYXlzIGVudW0gdmFsdWUuXG4gKiBSZXRlbnRpb25EYXlzIGVudW0gdmFsdWVzIGFyZSB0aGUgbnVtZXJpYyBkYXkgY291bnRzIHRoZW1zZWx2ZXMsXG4gKiBzbyB3ZSBwYXJzZSB0aGUgc3RyaW5nIGFuZCBjaGVjayBpZiBpdCdzIGEgdmFsaWQgZW51bSBtZW1iZXIuXG4gKlxuICogQHBhcmFtIGRheXMgLSBSZXRlbnRpb24gcGVyaW9kIGluIGRheXMgYXMgYSBzdHJpbmcgKGUuZy4gYCczMCdgKVxuICogQHJldHVybnMgQ0RLIFJldGVudGlvbkRheXMgZW51bTsgZmFsbHMgYmFjayB0byBPTkVfREFZIGZvciB1bmtub3duIHZhbHVlc1xuICovXG5jb25zdCBWQUxJRF9SRVRFTlRJT05fREFZUyA9IG5ldyBTZXQoT2JqZWN0LnZhbHVlcyhSZXRlbnRpb25EYXlzKS5maWx0ZXIoKHYpOiB2IGlzIG51bWJlciA9PiB0eXBlb2YgdiA9PT0gJ251bWJlcicpKTtcblxuZnVuY3Rpb24gcGFyc2VSZXRlbnRpb24oZGF5czogc3RyaW5nKTogUmV0ZW50aW9uRGF5cyB7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlSW50KGRheXMsIDEwKTtcbiAgcmV0dXJuIFZBTElEX1JFVEVOVElPTl9EQVlTLmhhcyhwYXJzZWQpID8gcGFyc2VkIGFzIFJldGVudGlvbkRheXMgOiBSZXRlbnRpb25EYXlzLk9ORV9EQVk7XG59XG4iXX0=
197
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mcmFzdHJ1Y3R1cmUtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy9pbmZyYXN0cnVjdHVyZS1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFHeEI7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCO0lBQ2hDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLElBQUksVUFBVSxDQUFDO0lBQzNELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixJQUFJLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNyRSw0RUFBNEU7SUFDNUUsd0VBQXdFO0lBQ3hFLDhFQUE4RTtJQUM5RSw0RUFBNEU7SUFDNUUsTUFBTSxRQUFRLEdBQUcsb0JBQW9CLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3JFLE9BQU87UUFDTCxJQUFJO1FBQ0osSUFBSTtRQUNKLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixJQUFJLFFBQVEsRUFBRSxJQUFJLElBQUksSUFBSTtRQUN4RSxRQUFRLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0I7WUFDNUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQztZQUNwRCxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQztRQUM1QixPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLElBQUksRUFBRTtRQUN6QyxJQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsS0FBSyxPQUFPO0tBQ2xELENBQUM7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QUM7SUFDbEMsT0FBTyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgdHlwZSB7IEFXU0NvbmZpZywgQnVpbGRDb25maWcsIENvbXBsaWFuY2VDb25maWcsIERhdGFiYXNlQ29uZmlnLCBPYnNlcnZhYmlsaXR5Q29uZmlnLCBQbHVnaW5CdWlsZENvbmZpZywgUmVkaXNDb25maWcsIFJlZ2lzdHJ5Q29uZmlnIH0gZnJvbSAnLi9jb25maWctdHlwZXMuanMnO1xuXG4vKipcbiAqIExvYWQgRG9ja2VyIHJlZ2lzdHJ5IGNvbmZpZ3VyYXRpb24gZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gKlxuICogRW52aXJvbm1lbnQgdmFyaWFibGVzOlxuICogLSBgSU1BR0VfUkVHSVNUUllfSE9TVGAg4oCUIFJlZ2lzdHJ5IGhvc3RuYW1lIChkZWZhdWx0OiBgJ3JlZ2lzdHJ5J2ApXG4gKiAtIGBJTUFHRV9SRUdJU1RSWV9QT1JUYCDigJQgUmVnaXN0cnkgcG9ydCAoZGVmYXVsdDogYDUwMDBgKVxuICogLSBgSU1BR0VfUkVHSVNUUllfUFVMTF9IT1NUYCDigJQgSG9zdCBhbiBvdXQtb2YtY2x1c3RlciBjbGllbnQgKENvZGVCdWlsZClcbiAqICAgdXNlcyB0byBwdWxsIHBsdWdpbiBpbWFnZXMuIFdoZW4gdW5zZXQsIGRlcml2ZWQgZnJvbSBgUExBVEZPUk1fQkFTRV9VUkxgJ3NcbiAqICAgaG9zdCAodGhlIHB1YmxpYyBlbmRwb2ludCBDb2RlQnVpbGQgY2FuIHJlc29sdmUpLCB0aGVuIGBJTUFHRV9SRUdJU1RSWV9IT1NUYC5cbiAqIC0gYElNQUdFX1JFR0lTVFJZX1BVTExfUE9SVGAg4oCUIFBvcnQgZm9yIHRoZSBhYm92ZS4gV2hlbiB1bnNldCwgZGVyaXZlZCBmcm9tXG4gKiAgIGBQTEFURk9STV9CQVNFX1VSTGAncyBwb3J0LCB0aGVuIGBJTUFHRV9SRUdJU1RSWV9QT1JUYC5cbiAqIC0gYERPQ0tFUl9ORVRXT1JLYCDigJQgRG9ja2VyIG5ldHdvcmsgZm9yIGJ1aWxkL3B1c2ggKGRlZmF1bHQ6IGAnJ2ApXG4gKiAtIGBJTUFHRV9SRUdJU1RSWV9IVFRQYCDigJQgVXNlIHBsYWluIEhUVFAgaW5zdGVhZCBvZiBIVFRQUyAoZGVmYXVsdDogYHRydWVgLFxuICogICB0aGUgaW4tY2x1c3RlciByZWdpc3RyeSBoYXMgbm8gVExTKS5cbiAqXG4gKiBAcmV0dXJucyBSZWdpc3RyeSBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkUmVnaXN0cnlDb25maWcoKTogUmVnaXN0cnlDb25maWcge1xuICBjb25zdCBob3N0ID0gcHJvY2Vzcy5lbnYuSU1BR0VfUkVHSVNUUllfSE9TVCB8fCAncmVnaXN0cnknO1xuICBjb25zdCBwb3J0ID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuSU1BR0VfUkVHSVNUUllfUE9SVCB8fCAnNTAwMCcsIDEwKTtcbiAgLy8gV2hlbiBubyBleHBsaWNpdCBwdWxsIGhvc3QgaXMgc2V0LCBkZXJpdmUgaXQgZnJvbSBQTEFURk9STV9CQVNFX1VSTCDigJQgdGhlXG4gIC8vIHB1YmxpYyBwbGF0Zm9ybSBlbmRwb2ludCBhbiBvdXQtb2YtY2x1c3RlciBjbGllbnQgKEFXUyBDb2RlQnVpbGQpIGNhblxuICAvLyByZXNvbHZlLCB1bmxpa2UgdGhlIGluLWNsdXN0ZXIgYHJlZ2lzdHJ5YCBDbHVzdGVySVAuIE9ubHkgZmFsbHMgYmFjayB0byB0aGVcbiAgLy8gaW4tY2x1c3RlciBob3N0IHdoZW4gUExBVEZPUk1fQkFTRV9VUkwgaXMgdW5zZXQvdW5wYXJzZWFibGUgKGUuZy4gbG9jYWwpLlxuICBjb25zdCBwbGF0Zm9ybSA9IHBhcnNlUGxhdGZvcm1CYXNlVXJsKHByb2Nlc3MuZW52LlBMQVRGT1JNX0JBU0VfVVJMKTtcbiAgcmV0dXJuIHtcbiAgICBob3N0LFxuICAgIHBvcnQsXG4gICAgcHVsbEhvc3Q6IHByb2Nlc3MuZW52LklNQUdFX1JFR0lTVFJZX1BVTExfSE9TVCB8fCBwbGF0Zm9ybT8uaG9zdCB8fCBob3N0LFxuICAgIHB1bGxQb3J0OiBwcm9jZXNzLmVudi5JTUFHRV9SRUdJU1RSWV9QVUxMX1BPUlRcbiAgICAgID8gcGFyc2VJbnQocHJvY2Vzcy5lbnYuSU1BR0VfUkVHSVNUUllfUFVMTF9QT1JULCAxMClcbiAgICAgIDogKHBsYXRmb3JtPy5wb3J0ID8/IHBvcnQpLFxuICAgIG5ldHdvcms6IHByb2Nlc3MuZW52LkRPQ0tFUl9ORVRXT1JLIHx8ICcnLFxuICAgIGh0dHA6IHByb2Nlc3MuZW52LklNQUdFX1JFR0lTVFJZX0hUVFAgIT09ICdmYWxzZScsXG4gIH07XG59XG5cbi8qKiBFeHRyYWN0IGhvc3QgKyBwb3J0IGZyb20gUExBVEZPUk1fQkFTRV9VUkwgKGUuZy4gYGh0dHBzOi8vcGlwZWxpbmUtYnVpbGRlci5jb21gXG4gKiAg4oaSIGB7IGhvc3Q6ICdwaXBlbGluZS1idWlsZGVyLmNvbScsIHBvcnQ6IDQ0MyB9YCkuIFJldHVybnMgbnVsbCB3aGVuIHRoZSB2YWx1ZVxuICogIGlzIHVuc2V0IG9yIG5vdCBhIHZhbGlkIFVSTC4gRXhwb3J0ZWQgc28gdGhlIENMSSAocGlwZWxpbmUtbWFuYWdlcikgZGVyaXZlc1xuICogIHRoZSByZWdpc3RyeSBwdWxsIHRhcmdldCB3aXRoIHRoZSBTQU1FIHBhcnNpbmcsIGluc3RlYWQgb2YgZHVwbGljYXRpbmcgaXQuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQbGF0Zm9ybUJhc2VVcmwocmF3Pzogc3RyaW5nKTogeyBob3N0OiBzdHJpbmc7IHBvcnQ6IG51bWJlciB9IHwgbnVsbCB7XG4gIGlmICghcmF3KSByZXR1cm4gbnVsbDtcbiAgdHJ5IHtcbiAgICBjb25zdCB1ID0gbmV3IFVSTChyYXcpO1xuICAgIC8vIEEgc2NoZW1lLWxlc3MgdmFsdWUgbGlrZSBgaG9zdDo4NDQzYCBwYXJzZXMgd2l0aCBhIGN1c3RvbSBwcm90b2NvbCBhbmQgYW5cbiAgICAvLyBFTVBUWSBob3N0bmFtZSDigJQgcmVqZWN0IGl0IHNvIGNhbGxlcnMgZmFsbCBiYWNrIHJhdGhlciB0aGFuIGRlcml2ZSBhXG4gICAgLy8gaG9zdC1sZXNzIGVuZHBvaW50LlxuICAgIGlmICghdS5ob3N0bmFtZSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgcG9ydCA9IHUucG9ydCA/IHBhcnNlSW50KHUucG9ydCwgMTApIDogKHUucHJvdG9jb2wgPT09ICdodHRwczonID8gNDQzIDogODApO1xuICAgIHJldHVybiB7IGhvc3Q6IHUuaG9zdG5hbWUsIHBvcnQgfTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRSZWRpc0NvbmZpZygpOiBSZWRpc0NvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgaG9zdDogcHJvY2Vzcy5lbnYuUkVESVNfSE9TVCB8fCAnbG9jYWxob3N0JyxcbiAgICBwb3J0OiBwYXJzZUludChwcm9jZXNzLmVudi5SRURJU19QT1JUIHx8ICc2Mzc5JywgMTApLFxuICB9O1xufVxuXG4vKipcbiAqIExvYWQgcGx1Z2luIGJ1aWxkIHF1ZXVlIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogRW52aXJvbm1lbnQgdmFyaWFibGVzOlxuICogLSBgUExVR0lOX0JVSUxEX0NPTkNVUlJFTkNZYCDigJQgTWF4IGNvbmN1cnJlbnQgcGx1Z2luIGJ1aWxkcyAoZGVmYXVsdDogYDFgKVxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZFBsdWdpbkJ1aWxkQ29uZmlnKCk6IFBsdWdpbkJ1aWxkQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICBjb25jdXJyZW5jeTogcGFyc2VJbnQocHJvY2Vzcy5lbnYuUExVR0lOX0JVSUxEX0NPTkNVUlJFTkNZIHx8ICcxJywgMTApLFxuICAgIG1heEF0dGVtcHRzOiBwYXJzZUludChwcm9jZXNzLmVudi5QTFVHSU5fQlVJTERfTUFYX0FUVEVNUFRTIHx8ICcyJywgMTApLFxuICAgIGJhY2tvZmZEZWxheU1zOiBwYXJzZUludChwcm9jZXNzLmVudi5QTFVHSU5fQlVJTERfQkFDS09GRl9ERUxBWV9NUyB8fCAnNTAwMCcsIDEwKSxcbiAgICB3b3JrZXJUaW1lb3V0TXM6IHBhcnNlSW50KHByb2Nlc3MuZW52LlBMVUdJTl9CVUlMRF9XT1JLRVJfVElNRU9VVF9NUyB8fCAnMTAwMDAnLCAxMCksXG4gICAgdGVtcERpck1heEFnZU1zOiBwYXJzZUludChwcm9jZXNzLmVudi5URU1QX0RJUl9NQVhfQUdFX01TIHx8ICcxNDQwMDAwMCcsIDEwKSxcbiAgICBkbHFNYXhBdHRlbXB0czogcGFyc2VJbnQocHJvY2Vzcy5lbnYuUExVR0lOX0RMUV9NQVhfQVRURU1QVFMgfHwgJzMnLCAxMCksXG4gICAgZGxxQmFja29mZkJhc2VNczogcGFyc2VJbnQocHJvY2Vzcy5lbnYuUExVR0lOX0RMUV9CQUNLT0ZGX0JBU0VfTVMgfHwgJzMwMDAwMCcsIDEwKSxcbiAgICBkbHFNYXhTaXplOiBwYXJzZUludChwcm9jZXNzLmVudi5QTFVHSU5fRExRX01BWF9TSVpFIHx8ICcyMCcsIDEwKSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWREYXRhYmFzZUNvbmZpZygpOiBEYXRhYmFzZUNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgcG9zdGdyZXM6IHtcbiAgICAgIGhvc3Q6IHByb2Nlc3MuZW52LkRCX0hPU1QgfHwgJ3Bvc3RncmVzJyxcbiAgICAgIHBvcnQ6IHBhcnNlSW50KHByb2Nlc3MuZW52LkRCX1BPUlQgfHwgJzU0MzInLCAxMCksXG4gICAgICBkYXRhYmFzZTogcHJvY2Vzcy5lbnYuREFUQUJBU0UgfHwgJ3BpcGVsaW5lX2J1aWxkZXInLFxuICAgICAgdXNlcjogcHJvY2Vzcy5lbnYuREJfVVNFUiB8fCAncG9zdGdyZXMnLFxuICAgICAgcGFzc3dvcmQ6IHByb2Nlc3MuZW52LkRCX1BBU1NXT1JEIHx8ICcnLFxuICAgIH0sXG4gICAgZHJpenpsZToge1xuICAgICAgbWF4UG9vbFNpemU6IHBhcnNlSW50KHByb2Nlc3MuZW52LkRSSVpaTEVfTUFYX1BPT0xfU0laRSB8fCAnMjAnLCAxMCksXG4gICAgICBpZGxlVGltZW91dE1pbGxpczogcGFyc2VJbnQocHJvY2Vzcy5lbnYuRFJJWlpMRV9JRExFX1RJTUVPVVRfTUlMTElTIHx8ICczMDAwMCcsIDEwKSxcbiAgICAgIGNvbm5lY3Rpb25UaW1lb3V0TWlsbGlzOiBwYXJzZUludChwcm9jZXNzLmVudi5EUklaWkxFX0NPTk5FQ1RJT05fVElNRU9VVF9NSUxMSVMgfHwgJzEwMDAwJywgMTApLFxuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkT2JzZXJ2YWJpbGl0eUNvbmZpZygpOiBPYnNlcnZhYmlsaXR5Q29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICBsb2dMZXZlbDogcHJvY2Vzcy5lbnYuTE9HX0xFVkVMIHx8ICdpbmZvJyxcbiAgICBsb2dGb3JtYXQ6IHByb2Nlc3MuZW52LkxPR19GT1JNQVQgfHwgJ2pzb24nLFxuICAgIHNlcnZpY2VOYW1lOiBwcm9jZXNzLmVudi5TRVJWSUNFX05BTUUgfHwgJ2FwaScsXG4gICAgdHJhY2luZzoge1xuICAgICAgZW5hYmxlZDogcHJvY2Vzcy5lbnYuT1RFTF9UUkFDSU5HX0VOQUJMRUQgPT09ICd0cnVlJyxcbiAgICAgIGVuZHBvaW50OiBwcm9jZXNzLmVudi5PVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlQgfHwgJ2h0dHA6Ly9sb2NhbGhvc3Q6NDMxOC92MS90cmFjZXMnLFxuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQ29tcGxpYW5jZUNvbmZpZygpOiBDb21wbGlhbmNlQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICBzY2FuU2NoZWR1bGVySW50ZXJ2YWxNczogcGFyc2VJbnQocHJvY2Vzcy5lbnYuU0NBTl9TQ0hFRFVMRVJfSU5URVJWQUxfTVMgfHwgJzYwMDAwJywgMTApLFxuICAgIHN5c3RlbU9yZ1NjYW5zRW5hYmxlZDogcHJvY2Vzcy5lbnYuU1lTVEVNX09SR19TQ0FOU19FTkFCTEVEID09PSAndHJ1ZScsXG4gICAgc2NhbkxvY2tUdGxNczogcGFyc2VJbnQocHJvY2Vzcy5lbnYuU0NBTl9MT0NLX1RUTF9NUyB8fCAnMzAwMDAwJywgMTApLFxuICAgIGRpZ2VzdFNjaGVkdWxlckludGVydmFsTXM6IHBhcnNlSW50KHByb2Nlc3MuZW52LkRJR0VTVF9TQ0hFRFVMRVJfSU5URVJWQUxfTVMgfHwgJzM2MDAwMDAnLCAxMCksXG4gICAgZGlnZXN0TG9ja1R0bE1zOiBwYXJzZUludChwcm9jZXNzLmVudi5ESUdFU1RfTE9DS19UVExfTVMgfHwgJzMwMDAwMCcsIDEwKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBMb2FkIHBsdWdpbiBidWlsZCBjb25maWd1cmF0aW9uLiBCdWlsZHMgcnVuIGFnYWluc3QgYSByb290bGVzcyBgbW9ieS9idWlsZGtpdGBcbiAqIHNpZGVjYXIg4oCUIHNlZSBgQlVJTERLSVRfSE9TVGAuXG4gKlxuICogRW52aXJvbm1lbnQgdmFyaWFibGVzOlxuICogLSBgRE9DS0VSX0JVSUxEX1RFTVBfUk9PVGAg4oCUIFRlbXAgZGlyZWN0b3J5IGZvciBidWlsZCBjb250ZXh0cyAoZGVmYXVsdDogYDxjd2Q+L3RtcGApXG4gKiAtIGBET0NLRVJfQlVJTERfVElNRU9VVF9NU2Ag4oCUIEJ1aWxkIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIChkZWZhdWx0OiBgOTAwMDAwYCAvIDE1IG1pbilcbiAqIC0gYERPQ0tFUl9QVVNIX1RJTUVPVVRfTVNgIOKAlCBQdXNoIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIChkZWZhdWx0OiBgMzAwMDAwYCAvIDUgbWluKVxuICogLSBgQlVJTERLSVRfSE9TVGAg4oCUIGJ1aWxkY3RsIGAtLWFkZHJgIHZhbHVlIGZvciB0aGUgYnVpbGRraXRkIHNpZGVjYXJcbiAqICAgKGRlZmF1bHQ6IGB1bml4Oi8vL3J1bi9idWlsZGtpdC9idWlsZGtpdGQuc29ja2ApXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRG9ja2VyQ29uZmlnKCk6IEJ1aWxkQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICB0ZW1wUm9vdDogcHJvY2Vzcy5lbnYuRE9DS0VSX0JVSUxEX1RFTVBfUk9PVCB8fCBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgJ3RtcCcpLFxuICAgIHRpbWVvdXRNczogcGFyc2VJbnQocHJvY2Vzcy5lbnYuRE9DS0VSX0JVSUxEX1RJTUVPVVRfTVMgfHwgJzkwMDAwMCcsIDEwKSxcbiAgICBwdXNoVGltZW91dE1zOiBwYXJzZUludChwcm9jZXNzLmVudi5ET0NLRVJfUFVTSF9USU1FT1VUX01TIHx8ICczMDAwMDAnLCAxMCksXG4gICAgYnVpbGRraXRBZGRyOiBwcm9jZXNzLmVudi5CVUlMREtJVF9IT1NUIHx8ICd1bml4Oi8vL3J1bi9idWlsZGtpdC9idWlsZGtpdGQuc29jaycsXG4gIH07XG59XG5cbi8qKlxuICogTG9hZCBBV1MgaW5mcmFzdHJ1Y3R1cmUgY29uZmlndXJhdGlvbiBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAqXG4gKiBFbnZpcm9ubWVudCB2YXJpYWJsZXM6XG4gKiAtIGBMQU1CREFfUlVOVElNRWAg4oCUIExhbWJkYSBydW50aW1lIChkZWZhdWx0OiBgJ25vZGVqczI0LngnYDsgdW5rbm93biB2YWx1ZXMgZmFsbCBiYWNrIHRvIGl0KVxuICogLSBgTEFNQkRBX1RJTUVPVVRgIOKAlCBMYW1iZGEgdGltZW91dCBpbiBzZWNvbmRzIChkZWZhdWx0OiBgOTAwYClcbiAqIC0gYExBTUJEQV9NRU1PUllfU0laRWAg4oCUIExhbWJkYSBtZW1vcnkgaW4gTUIgKGRlZmF1bHQ6IGA1MTJgKVxuICogLSBgTEFNQkRBX0FSQ0hJVEVDVFVSRWAg4oCUIGAneDg2XzY0J2Agb3IgQVJNIChkZWZhdWx0OiBBUk1fNjQpXG4gKiAtIGBMT0dfR1JPVVBfTkFNRWAg4oCUIENsb3VkV2F0Y2ggbG9nIGdyb3VwIChkZWZhdWx0OiBgJy9waXBlbGluZS1idWlsZGVyL2xvZ3MnYClcbiAqIC0gYExPR19SRVRFTlRJT05gIOKAlCBMb2cgcmV0ZW50aW9uIGluIGRheXMgKGRlZmF1bHQ6IGA3YClcbiAqIC0gYExPR19SRU1PVkFMX1BPTElDWWAg4oCUIGAnUkVUQUlOJ2Agb3IgZGVzdHJveSAoZGVmYXVsdDogREVTVFJPWSlcbiAqIC0gYENPREVCVUlMRF9DT01QVVRFX1RZUEVgIOKAlCBDb2RlQnVpbGQgY29tcHV0ZSB0eXBlIChkZWZhdWx0OiBgJ1NNQUxMJ2ApXG4gKlxuICogQHJldHVybnMgQVdTIGluZnJhc3RydWN0dXJlIGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRBV1NDb25maWcoKTogQVdTQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICBsYW1iZGE6IHtcbiAgICAgIHJ1bnRpbWU6IHByb2Nlc3MuZW52LkxBTUJEQV9SVU5USU1FIHx8ICdub2RlanMyNC54JyxcbiAgICAgIHRpbWVvdXRTZWNvbmRzOiBwYXJzZUludChwcm9jZXNzLmVudi5MQU1CREFfVElNRU9VVCB8fCAnOTAwJywgMTApLFxuICAgICAgbWVtb3J5U2l6ZTogcGFyc2VJbnQocHJvY2Vzcy5lbnYuTEFNQkRBX01FTU9SWV9TSVpFIHx8ICc1MTInLCAxMCksXG4gICAgICBhcmNoaXRlY3R1cmU6IHByb2Nlc3MuZW52LkxBTUJEQV9BUkNISVRFQ1RVUkUgPT09ICd4ODZfNjQnID8gJ3g4Nl82NCcgOiAnYXJtNjQnLFxuICAgICAgcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9uczogcHJvY2Vzcy5lbnYuTEFNQkRBX1JFU0VSVkVEX0NPTkNVUlJFTkNZXG4gICAgICAgID8gcGFyc2VJbnQocHJvY2Vzcy5lbnYuTEFNQkRBX1JFU0VSVkVEX0NPTkNVUlJFTkNZLCAxMClcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfSxcblxuICAgIGxvZ2dpbmc6IHtcbiAgICAgIGdyb3VwTmFtZTogcHJvY2Vzcy5lbnYuTE9HX0dST1VQX05BTUUgfHwgJy9waXBlbGluZS1idWlsZGVyL2xvZ3MnLFxuICAgICAgcmV0ZW50aW9uRGF5czogcGFyc2VSZXRlbnRpb25EYXlzKHByb2Nlc3MuZW52LkxPR19SRVRFTlRJT04gfHwgJzcnKSxcbiAgICAgIHJlbW92YWxQb2xpY3k6IHByb2Nlc3MuZW52LkxPR19SRU1PVkFMX1BPTElDWSA9PT0gJ1JFVEFJTicgPyAncmV0YWluJyA6ICdkZXN0cm95JyxcbiAgICB9LFxuXG4gICAgY29kZUJ1aWxkOiB7XG4gICAgICBjb21wdXRlVHlwZTogKHByb2Nlc3MuZW52LkNPREVCVUlMRF9DT01QVVRFX1RZUEUgfHwgJ1NNQUxMJykudG9VcHBlckNhc2UoKSxcbiAgICAgIGRlZmF1bHRJbWFnZTogcHJvY2Vzcy5lbnYuQ09ERUJVSUxEX0RFRkFVTFRfSU1BR0UgfHwgJ3BpcGVsaW5lLWJvb3RzdHJhcDoxLjAnLFxuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogVmFsaWQgQ2xvdWRXYXRjaCBMb2dzIHJldGVudGlvbiBwZXJpb2RzLCBpbiBkYXlzLiBNaXJyb3JzIHRoZSBkYXkgY291bnRzIG9mXG4gKiBDREsncyBgUmV0ZW50aW9uRGF5c2AgZW51bSAod2hvc2UgbWVtYmVycyBBUkUgdGhlIGRheSBjb3VudHMpLCBidXQgd3JpdHRlbiBvdXRcbiAqIHNvIHRoaXMgbW9kdWxlIHN0YXlzIGZyZWUgb2YgYGF3cy1jZGstbGliYCAgc2VlIHRoZSBub3RlIG9uIHtAbGluayBBV1NDb25maWd9LlxuICogYDBgIGlzIENESydzIGBJTkZJTklURWAgKG5ldmVyIGV4cGlyZSkuXG4gKi9cbmNvbnN0IFZBTElEX1JFVEVOVElPTl9EQVlTID0gbmV3IFNldChbXG4gIDAsIDEsIDMsIDUsIDcsIDE0LCAzMCwgNjAsIDkwLCAxMjAsIDE1MCwgMTgwLCAzNjUsIDQwMCwgNTQ1LCA3MzEsXG4gIDEwOTYsIDE4MjcsIDIxOTIsIDI1NTcsIDI5MjIsIDMyODgsIDM2NTMsXG5dKTtcblxuLyoqXG4gKiBQYXJzZSBhIGxvZy1yZXRlbnRpb24gc3RyaW5nIGludG8gYSB2YWxpZCBDbG91ZFdhdGNoIHJldGVudGlvbiBkYXkgY291bnQuXG4gKlxuICogQHBhcmFtIGRheXMgLSBSZXRlbnRpb24gcGVyaW9kIGluIGRheXMgYXMgYSBzdHJpbmcgKGUuZy4gYCczMCdgKVxuICogQHJldHVybnMgdGhlIGRheSBjb3VudDsgZmFsbHMgYmFjayB0byAxIGRheSBmb3IgdW5rbm93bi9pbnZhbGlkIHZhbHVlc1xuICovXG5mdW5jdGlvbiBwYXJzZVJldGVudGlvbkRheXMoZGF5czogc3RyaW5nKTogbnVtYmVyIHtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VJbnQoZGF5cywgMTApO1xuICByZXR1cm4gVkFMSURfUkVURU5USU9OX0RBWVMuaGFzKHBhcnNlZCkgPyBwYXJzZWQgOiAxO1xufVxuIl19
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Metadata and string helpers that are FREE of `aws-cdk-lib`.
3
+ *
4
+ * Split out of `pipeline-helpers.ts` (which builds CodeBuild steps and therefore
5
+ * pulls in the CDK) so the main `@pipeline-builder/pipeline-core` entry point can
6
+ * export them without putting `aws-cdk-lib` on every consumer's import graph.
7
+ * Anything here that needs a CDK type belongs in `pipeline-helpers.ts` instead.
8
+ */
9
+ import { type MetaDataType } from './pipeline-types.js';
10
+ /**
11
+ * Merge multiple metadata objects into one. Later sources override earlier ones.
12
+ */
13
+ export declare function merge(...sources: Array<Partial<MetaDataType>>): MetaDataType;
14
+ /**
15
+ * Extract non-namespaced metadata keys as environment variable strings.
16
+ * Keys starting with 'aws:cdk:' are reserved for CDK construct props
17
+ * (processed by metadata extraction functions) and are excluded here.
18
+ *
19
+ * All values are converted to strings for CodeBuild compatibility.
20
+ */
21
+ export declare function extractMetadataEnv(metadata: MetaDataType): Record<string, string>;
22
+ /** Resolve the effective failureBehavior: a scan/security-category plugin is pinned
23
+ * to 'fail'; otherwise the authored value (default 'fail'). */
24
+ export declare function resolveFailureBehavior(category?: string, authored?: 'fail' | 'warn' | 'ignore'): 'fail' | 'warn' | 'ignore';
25
+ /**
26
+ * Replaces all characters that are not letters or numbers with the specified value
27
+ * @param input - The string to process
28
+ * @param replaceValue - The character(s) to replace non-alphanumeric characters with (default: '_')
29
+ * @returns The string with non-alphanumeric characters replaced
30
+ */
31
+ export declare function replaceNonAlphanumeric(input: string, replaceValue?: string): string;