@pipeline-builder/pipeline-core 3.1.1
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/LICENSE +202 -0
- package/README.md +32 -0
- package/lib/config/app-config.d.ts +81 -0
- package/lib/config/app-config.js +151 -0
- package/lib/config/billing-config.d.ts +17 -0
- package/lib/config/billing-config.js +95 -0
- package/lib/config/config-types.d.ts +213 -0
- package/lib/config/config-types.js +5 -0
- package/lib/config/infrastructure-config.d.ts +55 -0
- package/lib/config/infrastructure-config.js +200 -0
- package/lib/config/server-config.d.ts +53 -0
- package/lib/config/server-config.js +180 -0
- package/lib/core/artifact-manager.d.ts +62 -0
- package/lib/core/artifact-manager.js +86 -0
- package/lib/core/id-generator.d.ts +26 -0
- package/lib/core/id-generator.js +44 -0
- package/lib/core/metadata-builder.d.ts +13 -0
- package/lib/core/metadata-builder.js +81 -0
- package/lib/core/network-types.d.ts +200 -0
- package/lib/core/network-types.js +5 -0
- package/lib/core/network.d.ts +20 -0
- package/lib/core/network.js +84 -0
- package/lib/core/pipeline-helpers.d.ts +53 -0
- package/lib/core/pipeline-helpers.js +273 -0
- package/lib/core/pipeline-types.d.ts +136 -0
- package/lib/core/pipeline-types.js +140 -0
- package/lib/core/role-types.d.ts +254 -0
- package/lib/core/role-types.js +5 -0
- package/lib/core/role.d.ts +14 -0
- package/lib/core/role.js +118 -0
- package/lib/core/security-group-types.d.ts +84 -0
- package/lib/core/security-group-types.js +5 -0
- package/lib/core/security-group.d.ts +14 -0
- package/lib/core/security-group.js +34 -0
- package/lib/handlers/plugin-lookup-handler.d.ts +32 -0
- package/lib/handlers/plugin-lookup-handler.js +313 -0
- package/lib/handlers/pnpm-lock.yaml +12 -0
- package/lib/index.d.ts +54 -0
- package/lib/index.js +112 -0
- package/lib/pipeline/pipeline-builder.d.ts +82 -0
- package/lib/pipeline/pipeline-builder.js +292 -0
- package/lib/pipeline/pipeline-configuration.d.ts +72 -0
- package/lib/pipeline/pipeline-configuration.js +196 -0
- package/lib/pipeline/plugin-lookup.d.ts +100 -0
- package/lib/pipeline/plugin-lookup.js +247 -0
- package/lib/pipeline/source-builder.d.ts +47 -0
- package/lib/pipeline/source-builder.js +111 -0
- package/lib/pipeline/source-types.d.ts +191 -0
- package/lib/pipeline/source-types.js +5 -0
- package/lib/pipeline/stage-builder.d.ts +71 -0
- package/lib/pipeline/stage-builder.js +118 -0
- package/lib/pipeline/step-types.d.ts +307 -0
- package/lib/pipeline/step-types.js +5 -0
- package/package.json +137 -0
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.merge = merge;
|
|
6
|
+
exports.extractMetadataEnv = extractMetadataEnv;
|
|
7
|
+
exports.createCodeBuildStep = createCodeBuildStep;
|
|
8
|
+
exports.getComputeType = getComputeType;
|
|
9
|
+
exports.replaceNonAlphanumeric = replaceNonAlphanumeric;
|
|
10
|
+
exports.unwrapSecret = unwrapSecret;
|
|
11
|
+
const api_core_1 = require("@pipeline-builder/api-core");
|
|
12
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
13
|
+
const aws_codebuild_1 = require("aws-cdk-lib/aws-codebuild");
|
|
14
|
+
const pipelines_1 = require("aws-cdk-lib/pipelines");
|
|
15
|
+
const metadata_builder_1 = require("./metadata-builder");
|
|
16
|
+
const network_1 = require("./network");
|
|
17
|
+
const pipeline_types_1 = require("./pipeline-types");
|
|
18
|
+
const app_config_1 = require("../config/app-config");
|
|
19
|
+
const log = (0, api_core_1.createLogger)('Helper');
|
|
20
|
+
/**
|
|
21
|
+
* Merge multiple metadata objects into one. Later sources override earlier ones.
|
|
22
|
+
*/
|
|
23
|
+
function merge(...sources) {
|
|
24
|
+
return Object.assign({}, ...sources);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Extract non-namespaced metadata keys as environment variable strings.
|
|
28
|
+
* Keys starting with 'aws:cdk:' are reserved for CDK construct props
|
|
29
|
+
* (processed by metadata extraction functions) and are excluded here.
|
|
30
|
+
*
|
|
31
|
+
* All values are converted to strings for CodeBuild compatibility.
|
|
32
|
+
*/
|
|
33
|
+
function extractMetadataEnv(metadata) {
|
|
34
|
+
const env = {};
|
|
35
|
+
for (const [key, value] of Object.entries(metadata)) {
|
|
36
|
+
if (!key.startsWith(pipeline_types_1.CDK_METADATA_PREFIX)) {
|
|
37
|
+
env[key] = String(value);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return env;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Build environment variables from plugin config, merged metadata, and custom env.
|
|
44
|
+
*
|
|
45
|
+
* Merge order (last wins):
|
|
46
|
+
* 1. plugin.env — plugin default env vars (lowest priority)
|
|
47
|
+
* 2. non-namespaced metadata keys — e.g. PYTHON_VERSION, WORKDIR
|
|
48
|
+
* 3. customEnv — per-step custom env vars (highest priority)
|
|
49
|
+
*/
|
|
50
|
+
const BOOTSTRAP_CMD = 'export WORKDIR=${WORKDIR:-./}; cd ${WORKDIR}';
|
|
51
|
+
function buildEnv(plugin, metadata, customEnv) {
|
|
52
|
+
return {
|
|
53
|
+
...(plugin.env ?? {}),
|
|
54
|
+
...extractMetadataEnv(metadata),
|
|
55
|
+
...(customEnv ?? {}),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Wrap build commands based on failure behavior.
|
|
60
|
+
* - 'fail' (default): No wrapping — commands fail the pipeline naturally.
|
|
61
|
+
* - 'warn': Run commands with `set +e`, capture failures, log warnings, continue.
|
|
62
|
+
* - 'ignore': Append `|| true` to each command — failures are silently swallowed.
|
|
63
|
+
*
|
|
64
|
+
* Only applied to build commands, not install commands (install failures should always stop the build).
|
|
65
|
+
*/
|
|
66
|
+
function wrapCommandsForFailureBehavior(commands, behavior) {
|
|
67
|
+
if (!behavior || behavior === 'fail')
|
|
68
|
+
return commands;
|
|
69
|
+
if (behavior === 'ignore') {
|
|
70
|
+
return commands.map(cmd => `${cmd} || true`);
|
|
71
|
+
}
|
|
72
|
+
// 'warn': run all commands, capture failures, but don't stop
|
|
73
|
+
return [
|
|
74
|
+
'set +e',
|
|
75
|
+
'_STEP_EXIT=0',
|
|
76
|
+
...commands.map(cmd => `${cmd} || { echo "WARNING: Command failed with exit code $?"; _STEP_EXIT=1; }`),
|
|
77
|
+
'set -e',
|
|
78
|
+
'if [ "$_STEP_EXIT" -ne 0 ]; then echo "WARNING: One or more commands in this step failed"; fi',
|
|
79
|
+
];
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Build bootstrap-prefixed install and build commands from plugin config.
|
|
83
|
+
* Each command list is prepended with a WORKDIR bootstrap that defaults to './'.
|
|
84
|
+
* When custom commands are provided, they are injected before/after the plugin's commands.
|
|
85
|
+
* Build commands are optionally wrapped by failureBehavior logic.
|
|
86
|
+
*/
|
|
87
|
+
function buildCommands(plugin, custom, failureBehavior) {
|
|
88
|
+
const userCommands = [
|
|
89
|
+
...(custom?.preCommands ?? []),
|
|
90
|
+
...(plugin.commands?.length ? plugin.commands : []),
|
|
91
|
+
...(custom?.postCommands ?? []),
|
|
92
|
+
];
|
|
93
|
+
return {
|
|
94
|
+
installCommands: [
|
|
95
|
+
BOOTSTRAP_CMD,
|
|
96
|
+
...(custom?.preInstallCommands ?? []),
|
|
97
|
+
...(plugin.installCommands ?? []),
|
|
98
|
+
...(custom?.postInstallCommands ?? []),
|
|
99
|
+
],
|
|
100
|
+
commands: [BOOTSTRAP_CMD, ...wrapCommandsForFailureBehavior(userCommands, failureBehavior)],
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Convert a plain env record to CodeBuild's environmentVariables format (PLAINTEXT).
|
|
105
|
+
*/
|
|
106
|
+
function toCodeBuildEnvVars(env) {
|
|
107
|
+
return Object.fromEntries(Object.entries(env).map(([name, value]) => [name, { value }]));
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Build SECRETS_MANAGER-type environment variables from plugin secret declarations.
|
|
111
|
+
* Uses naming convention: pipeline-builder/{orgId}/{secretName}
|
|
112
|
+
* Each org manages these secrets in their own AWS Secrets Manager.
|
|
113
|
+
*/
|
|
114
|
+
const VALID_SECRET_NAME = /^[a-zA-Z0-9/_+=.@-]+$/;
|
|
115
|
+
function toSecretEnvVars(secrets, orgId) {
|
|
116
|
+
return Object.fromEntries(secrets.map(({ name }) => {
|
|
117
|
+
const secretPath = app_config_1.CoreConstants.secretPath(orgId, name);
|
|
118
|
+
if (!VALID_SECRET_NAME.test(secretPath)) {
|
|
119
|
+
throw new Error(`Secret path "${secretPath}" contains invalid characters for AWS Secrets Manager`);
|
|
120
|
+
}
|
|
121
|
+
return [
|
|
122
|
+
name,
|
|
123
|
+
{
|
|
124
|
+
value: secretPath,
|
|
125
|
+
type: aws_codebuild_1.BuildEnvironmentVariableType.SECRETS_MANAGER,
|
|
126
|
+
},
|
|
127
|
+
];
|
|
128
|
+
}));
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Create a CodeBuild step or Shell step based on plugin configuration.
|
|
132
|
+
*
|
|
133
|
+
* Metadata merge order (last wins):
|
|
134
|
+
* 1. Step-level metadata (from options.metadata)
|
|
135
|
+
* 2. Plugin metadata (from plugin.metadata in database)
|
|
136
|
+
*
|
|
137
|
+
* Environment merge order (last wins):
|
|
138
|
+
* 1. Plugin env vars (from plugin.env)
|
|
139
|
+
* 2. Custom env vars (from options.env)
|
|
140
|
+
* 3. WORKDIR from merged metadata
|
|
141
|
+
*
|
|
142
|
+
* CDK prop spread order (last wins):
|
|
143
|
+
* programmatic defaults (input, commands, env, network) → metadata overrides
|
|
144
|
+
*
|
|
145
|
+
* This means metadata keys like `aws:cdk:pipelines:codebuildstep:commands`
|
|
146
|
+
* will override the plugin-derived commands when explicitly set.
|
|
147
|
+
*/
|
|
148
|
+
function createCodeBuildStep(options) {
|
|
149
|
+
const { id, plugin, input, metadata, network, scope, preInstallCommands, postInstallCommands, preCommands, postCommands, env: customEnv, additionalInputs, timeout, failureBehavior, artifactManager, stageName, stageAlias, pluginAlias, orgId, } = options;
|
|
150
|
+
const merged = merge(metadata ?? {}, plugin.metadata ?? {});
|
|
151
|
+
// ManualApprovalStep: no commands, env, compute, or network — just id + optional comment
|
|
152
|
+
if (plugin.pluginType === pipeline_types_1.PluginType.MANUAL_APPROVAL_STEP) {
|
|
153
|
+
return new pipelines_1.ManualApprovalStep(id, {
|
|
154
|
+
comment: typeof merged.APPROVAL_COMMENT === 'string' ? merged.APPROVAL_COMMENT : undefined,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
log.debug('[CreateCodeBuildStep] Building step with merged metadata');
|
|
158
|
+
// Warn about required secrets without orgId (can't resolve)
|
|
159
|
+
const requiredSecrets = plugin.secrets?.filter(s => s.required) ?? [];
|
|
160
|
+
if (requiredSecrets.length > 0 && !orgId) {
|
|
161
|
+
log.warn(`Plugin "${plugin.name}" declares ${requiredSecrets.length} required secret(s) but no orgId is available. ` +
|
|
162
|
+
`Secrets will not be injected: ${requiredSecrets.map(s => s.name).join(', ')}`);
|
|
163
|
+
}
|
|
164
|
+
// Resolve plugin secrets as SECRETS_MANAGER env vars
|
|
165
|
+
const secretEnvVars = (plugin.secrets?.length && orgId)
|
|
166
|
+
? toSecretEnvVars(plugin.secrets, orgId)
|
|
167
|
+
: {};
|
|
168
|
+
const env = buildEnv(plugin, merged, customEnv);
|
|
169
|
+
// CodePipeline resolved variables — must be in CodeBuildStep.env (action-level),
|
|
170
|
+
// not buildEnvironment.environmentVariables (project-level)
|
|
171
|
+
const actionEnv = {
|
|
172
|
+
PIPELINE_EXECUTION_ID: '#{codepipeline.PipelineExecutionId}',
|
|
173
|
+
};
|
|
174
|
+
const outputDir = plugin.primaryOutputDirectory;
|
|
175
|
+
const ensureOutputDir = (outputDir && !outputDir.includes('*'))
|
|
176
|
+
? [`mkdir -p "${outputDir}" && touch "${outputDir}/.gitkeep"`]
|
|
177
|
+
: [];
|
|
178
|
+
const { installCommands, commands } = buildCommands(plugin, {
|
|
179
|
+
preInstallCommands: [...ensureOutputDir, ...(preInstallCommands ?? [])],
|
|
180
|
+
postInstallCommands,
|
|
181
|
+
preCommands,
|
|
182
|
+
postCommands,
|
|
183
|
+
}, failureBehavior);
|
|
184
|
+
const programmatic = { input, installCommands, commands };
|
|
185
|
+
// Return ShellStep if plugin type is SHELL_STEP
|
|
186
|
+
if (plugin.pluginType === pipeline_types_1.PluginType.SHELL_STEP) {
|
|
187
|
+
return new pipelines_1.ShellStep(id, {
|
|
188
|
+
...programmatic,
|
|
189
|
+
env: { ...env, ...actionEnv },
|
|
190
|
+
...(0, metadata_builder_1.metadataForShellStep)(merged),
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
const computeType = getComputeType(plugin.computeType ?? options.defaultComputeType ?? 'SMALL');
|
|
194
|
+
const networkProps = network
|
|
195
|
+
? (0, network_1.resolveNetwork)(scope, options.uniqueId, network)
|
|
196
|
+
: {};
|
|
197
|
+
// Metadata spread last so it can override programmatic defaults.
|
|
198
|
+
// NOTE: Caching is supported via two metadata paths:
|
|
199
|
+
// 1. MetadataKeys.CACHE ('aws:cdk:pipelines:codebuildstep:cache') — passed directly
|
|
200
|
+
// as the CodeBuildStep `cache` prop (expects a codebuild.Cache object).
|
|
201
|
+
// 2. MetadataKeys.PARTIAL_BUILD_SPEC ('aws:cdk:pipelines:codebuildstep:partialbuildspec')
|
|
202
|
+
// — passed as `partialBuildSpec`, which can include a `cache:` section for
|
|
203
|
+
// S3 or local caching (e.g., BuildSpec.fromObject({ cache: { paths: [...] } })).
|
|
204
|
+
const step = new pipelines_1.CodeBuildStep(id, {
|
|
205
|
+
...programmatic,
|
|
206
|
+
...networkProps,
|
|
207
|
+
...(additionalInputs && { additionalInputs }),
|
|
208
|
+
...(timeout && { timeout: aws_cdk_lib_1.Duration.minutes(timeout) }),
|
|
209
|
+
env: actionEnv,
|
|
210
|
+
primaryOutputDirectory: plugin.primaryOutputDirectory ?? undefined,
|
|
211
|
+
buildEnvironment: {
|
|
212
|
+
computeType,
|
|
213
|
+
environmentVariables: {
|
|
214
|
+
...toCodeBuildEnvVars(env),
|
|
215
|
+
...secretEnvVars,
|
|
216
|
+
},
|
|
217
|
+
...(0, metadata_builder_1.metadataForBuildEnvironment)(merged),
|
|
218
|
+
},
|
|
219
|
+
...(0, metadata_builder_1.metadataForCodeBuildStep)(merged),
|
|
220
|
+
});
|
|
221
|
+
// Register with artifact manager if primaryOutputDirectory is set
|
|
222
|
+
if (plugin.primaryOutputDirectory && artifactManager && stageName) {
|
|
223
|
+
const artifactKey = {
|
|
224
|
+
stageName,
|
|
225
|
+
stageAlias: stageAlias ?? `${stageName}-alias`,
|
|
226
|
+
pluginName: plugin.name,
|
|
227
|
+
pluginAlias: pluginAlias ?? `${plugin.name}-alias`,
|
|
228
|
+
outputDirectory: plugin.primaryOutputDirectory,
|
|
229
|
+
};
|
|
230
|
+
artifactManager.add(artifactKey, step);
|
|
231
|
+
}
|
|
232
|
+
return step;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Convert string or ComputeType enum to CDK ComputeType
|
|
236
|
+
*/
|
|
237
|
+
function getComputeType(input = 'SMALL') {
|
|
238
|
+
// If already a CDK ComputeType, return as-is
|
|
239
|
+
if (typeof input !== 'string') {
|
|
240
|
+
return input;
|
|
241
|
+
}
|
|
242
|
+
const normalized = input.toUpperCase();
|
|
243
|
+
const mapping = {
|
|
244
|
+
[pipeline_types_1.ComputeType.SMALL]: aws_codebuild_1.ComputeType.SMALL,
|
|
245
|
+
[pipeline_types_1.ComputeType.MEDIUM]: aws_codebuild_1.ComputeType.MEDIUM,
|
|
246
|
+
[pipeline_types_1.ComputeType.LARGE]: aws_codebuild_1.ComputeType.LARGE,
|
|
247
|
+
[pipeline_types_1.ComputeType.X2_LARGE]: aws_codebuild_1.ComputeType.X2_LARGE,
|
|
248
|
+
};
|
|
249
|
+
const result = mapping[normalized];
|
|
250
|
+
if (!result) {
|
|
251
|
+
log.warn(`Unknown compute type "${input}", falling back to SMALL`);
|
|
252
|
+
return aws_codebuild_1.ComputeType.SMALL;
|
|
253
|
+
}
|
|
254
|
+
return result;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Replaces all characters that are not letters or numbers with the specified value
|
|
258
|
+
* @param input - The string to process
|
|
259
|
+
* @param replaceValue - The character(s) to replace non-alphanumeric characters with (default: '_')
|
|
260
|
+
* @returns The string with non-alphanumeric characters replaced
|
|
261
|
+
*/
|
|
262
|
+
function replaceNonAlphanumeric(input, replaceValue = '_') {
|
|
263
|
+
return input.replace(/[^a-zA-Z0-9]/g, replaceValue);
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Unwrap a SecretValue | string into a plain string.
|
|
267
|
+
* When a SecretValue is provided (e.g. from Secrets Manager), calls unsafeUnwrap()
|
|
268
|
+
* to extract the underlying value.
|
|
269
|
+
*/
|
|
270
|
+
function unwrapSecret(value) {
|
|
271
|
+
return typeof value === 'string' ? value : value.unsafeUnwrap();
|
|
272
|
+
}
|
|
273
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL3BpcGVsaW5lLWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7O0FBbUJ0QyxzQkFFQztBQVNELGdEQVFDO0FBNEhELGtEQThHQztBQUtELHdDQXFCQztBQVFELHdEQUVDO0FBT0Qsb0NBRUM7QUEzVEQseURBQTBEO0FBRTFELDZDQUFvRDtBQUNwRCw2REFBd0c7QUFDeEcscURBQXFGO0FBRXJGLHlEQUFpSDtBQUNqSCx1Q0FBMkM7QUFDM0MscURBQThGO0FBQzlGLHFEQUFxRDtBQUdyRCxNQUFNLEdBQUcsR0FBRyxJQUFBLHVCQUFZLEVBQUMsUUFBUSxDQUFDLENBQUM7QUFFbkM7O0dBRUc7QUFDSCxTQUFnQixLQUFLLENBQUMsR0FBRyxPQUFxQztJQUM1RCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFpQixDQUFDO0FBQ3ZELENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixrQkFBa0IsQ0FBQyxRQUFzQjtJQUN2RCxNQUFNLEdBQUcsR0FBMkIsRUFBRSxDQUFDO0lBQ3ZDLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsb0NBQW1CLENBQUMsRUFBRSxDQUFDO1lBQ3pDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxhQUFhLEdBQUcsOENBQThDLENBQUM7QUFFckUsU0FBUyxRQUFRLENBQUMsTUFBYyxFQUFFLFFBQXNCLEVBQUUsU0FBa0M7SUFDMUYsT0FBTztRQUNMLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQztRQUNyQixHQUFHLGtCQUFrQixDQUFDLFFBQVEsQ0FBQztRQUMvQixHQUFHLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztLQUNyQixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFTLDhCQUE4QixDQUFDLFFBQWtCLEVBQUUsUUFBcUM7SUFDL0YsSUFBSSxDQUFDLFFBQVEsSUFBSSxRQUFRLEtBQUssTUFBTTtRQUFFLE9BQU8sUUFBUSxDQUFDO0lBRXRELElBQUksUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzFCLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsNkRBQTZEO0lBQzdELE9BQU87UUFDTCxRQUFRO1FBQ1IsY0FBYztRQUNkLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyx5RUFBeUUsQ0FBQztRQUN2RyxRQUFRO1FBQ1IsK0ZBQStGO0tBQ2hHLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLGFBQWEsQ0FBQyxNQUFjLEVBQUUsTUFBMEIsRUFBRSxlQUE0QztJQUM3RyxNQUFNLFlBQVksR0FBRztRQUNuQixHQUFHLENBQUMsTUFBTSxFQUFFLFdBQVcsSUFBSSxFQUFFLENBQUM7UUFDOUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbkQsR0FBRyxDQUFDLE1BQU0sRUFBRSxZQUFZLElBQUksRUFBRSxDQUFDO0tBQ2hDLENBQUM7SUFFRixPQUFPO1FBQ0wsZUFBZSxFQUFFO1lBQ2YsYUFBYTtZQUNiLEdBQUcsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLElBQUksRUFBRSxDQUFDO1lBQ3JDLEdBQUcsQ0FBQyxNQUFNLENBQUMsZUFBZSxJQUFJLEVBQUUsQ0FBQztZQUNqQyxHQUFHLENBQUMsTUFBTSxFQUFFLG1CQUFtQixJQUFJLEVBQUUsQ0FBQztTQUN2QztRQUNELFFBQVEsRUFBRSxDQUFDLGFBQWEsRUFBRSxHQUFHLDhCQUE4QixDQUFDLFlBQVksRUFBRSxlQUFlLENBQUMsQ0FBQztLQUM1RixDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxrQkFBa0IsQ0FBQyxHQUEyQjtJQUNyRCxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQ3ZCLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUM5RCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLGlCQUFpQixHQUFHLHVCQUF1QixDQUFDO0FBRWxELFNBQVMsZUFBZSxDQUN0QixPQUFtRCxFQUNuRCxLQUFhO0lBRWIsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUN2QixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFO1FBQ3ZCLE1BQU0sVUFBVSxHQUFHLDBCQUFhLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDeEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsVUFBVSx1REFBdUQsQ0FBQyxDQUFDO1FBQ3JHLENBQUM7UUFDRCxPQUFPO1lBQ0wsSUFBSTtZQUNKO2dCQUNFLEtBQUssRUFBRSxVQUFVO2dCQUNqQixJQUFJLEVBQUUsNENBQTRCLENBQUMsZUFBZTthQUNuRDtTQUNGLENBQUM7SUFDSixDQUFDLENBQUMsQ0FDSCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILFNBQWdCLG1CQUFtQixDQUFDLE9BQTZCO0lBQy9ELE1BQU0sRUFDSixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFDM0Msa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFDbEUsR0FBRyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUMxRCxlQUFlLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsS0FBSyxHQUMzRCxHQUFHLE9BQU8sQ0FBQztJQUVaLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLElBQUksRUFBRSxFQUFFLE1BQU0sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7SUFFNUQseUZBQXlGO0lBQ3pGLElBQUksTUFBTSxDQUFDLFVBQVUsS0FBSywyQkFBVSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDMUQsT0FBTyxJQUFJLDhCQUFrQixDQUFDLEVBQUUsRUFBRTtZQUNoQyxPQUFPLEVBQUUsT0FBTyxNQUFNLENBQUMsZ0JBQWdCLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLFNBQVM7U0FDM0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEdBQUcsQ0FBQyxLQUFLLENBQUMsMERBQTBELENBQUMsQ0FBQztJQUV0RSw0REFBNEQ7SUFDNUQsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3RFLElBQUksZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN6QyxHQUFHLENBQUMsSUFBSSxDQUNOLFdBQVcsTUFBTSxDQUFDLElBQUksY0FBYyxlQUFlLENBQUMsTUFBTSxpREFBaUQ7WUFDM0csaUNBQWlDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQy9FLENBQUM7SUFDSixDQUFDO0lBRUQscURBQXFEO0lBQ3JELE1BQU0sYUFBYSxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLElBQUksS0FBSyxDQUFDO1FBQ3JELENBQUMsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7UUFDeEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUVQLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRWhELGlGQUFpRjtJQUNqRiw0REFBNEQ7SUFDNUQsTUFBTSxTQUFTLEdBQTJCO1FBQ3hDLHFCQUFxQixFQUFFLHFDQUFxQztLQUM3RCxDQUFDO0lBRUYsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixDQUFDO0lBQ2hELE1BQU0sZUFBZSxHQUFHLENBQUMsU0FBUyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUMsQ0FBQyxhQUFhLFNBQVMsZUFBZSxTQUFTLFlBQVksQ0FBQztRQUM5RCxDQUFDLENBQUMsRUFBRSxDQUFDO0lBRVAsTUFBTSxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFO1FBQzFELGtCQUFrQixFQUFFLENBQUMsR0FBRyxlQUFlLEVBQUUsR0FBRyxDQUFDLGtCQUFrQixJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLG1CQUFtQjtRQUNuQixXQUFXO1FBQ1gsWUFBWTtLQUNiLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFFcEIsTUFBTSxZQUFZLEdBQUcsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBRTFELGdEQUFnRDtJQUNoRCxJQUFJLE1BQU0sQ0FBQyxVQUFVLEtBQUssMkJBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNoRCxPQUFPLElBQUkscUJBQVMsQ0FBQyxFQUFFLEVBQUU7WUFDdkIsR0FBRyxZQUFZO1lBQ2YsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxTQUFTLEVBQUU7WUFDN0IsR0FBRyxJQUFBLHVDQUFvQixFQUFDLE1BQU0sQ0FBQztTQUNoQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUNoQyxNQUFNLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxrQkFBa0IsSUFBSSxPQUFPLENBQzVELENBQUM7SUFFRixNQUFNLFlBQVksR0FBRyxPQUFPO1FBQzFCLENBQUMsQ0FBQyxJQUFBLHdCQUFjLEVBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDO1FBQ2xELENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFUCxpRUFBaUU7SUFDakUscURBQXFEO0lBQ3JELHNGQUFzRjtJQUN0Riw2RUFBNkU7SUFDN0UsNEZBQTRGO0lBQzVGLGdGQUFnRjtJQUNoRixzRkFBc0Y7SUFDdEYsTUFBTSxJQUFJLEdBQUcsSUFBSSx5QkFBYSxDQUFDLEVBQUUsRUFBRTtRQUNqQyxHQUFHLFlBQVk7UUFDZixHQUFHLFlBQVk7UUFDZixHQUFHLENBQUMsZ0JBQWdCLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO1FBQzdDLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRSxPQUFPLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUN0RCxHQUFHLEVBQUUsU0FBUztRQUNkLHNCQUFzQixFQUFFLE1BQU0sQ0FBQyxzQkFBc0IsSUFBSSxTQUFTO1FBQ2xFLGdCQUFnQixFQUFFO1lBQ2hCLFdBQVc7WUFDWCxvQkFBb0IsRUFBRTtnQkFDcEIsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLENBQUM7Z0JBQzFCLEdBQUcsYUFBYTthQUNqQjtZQUNELEdBQUcsSUFBQSw4Q0FBMkIsRUFBQyxNQUFNLENBQUM7U0FDdkM7UUFDRCxHQUFHLElBQUEsMkNBQXdCLEVBQUMsTUFBTSxDQUFDO0tBQ3BDLENBQUMsQ0FBQztJQUVILGtFQUFrRTtJQUNsRSxJQUFJLE1BQU0sQ0FBQyxzQkFBc0IsSUFBSSxlQUFlLElBQUksU0FBUyxFQUFFLENBQUM7UUFDbEUsTUFBTSxXQUFXLEdBQWdCO1lBQy9CLFNBQVM7WUFDVCxVQUFVLEVBQUUsVUFBVSxJQUFJLEdBQUcsU0FBUyxRQUFRO1lBQzlDLFVBQVUsRUFBRSxNQUFNLENBQUMsSUFBSTtZQUN2QixXQUFXLEVBQUUsV0FBVyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksUUFBUTtZQUNsRCxlQUFlLEVBQUUsTUFBTSxDQUFDLHNCQUFzQjtTQUMvQyxDQUFDO1FBQ0YsZUFBZSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsY0FBYyxDQUFDLFFBQWlDLE9BQU87SUFDckUsNkNBQTZDO0lBQzdDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDOUIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBaUIsQ0FBQztJQUV0RCxNQUFNLE9BQU8sR0FBd0M7UUFDbkQsQ0FBQyw0QkFBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLDJCQUFjLENBQUMsS0FBSztRQUN6QyxDQUFDLDRCQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsMkJBQWMsQ0FBQyxNQUFNO1FBQzNDLENBQUMsNEJBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSwyQkFBYyxDQUFDLEtBQUs7UUFDekMsQ0FBQyw0QkFBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLDJCQUFjLENBQUMsUUFBUTtLQUNoRCxDQUFDO0lBRUYsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ25DLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLEdBQUcsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEtBQUssMEJBQTBCLENBQUMsQ0FBQztRQUNuRSxPQUFPLDJCQUFjLENBQUMsS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixzQkFBc0IsQ0FBQyxLQUFhLEVBQUUsZUFBdUIsR0FBRztJQUM5RSxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQ3RELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsWUFBWSxDQUFDLEtBQTJCO0lBQ3RELE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNsRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtZGF0YSc7XG5pbXBvcnQgeyBEdXJhdGlvbiwgU2VjcmV0VmFsdWUgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBCdWlsZEVudmlyb25tZW50VmFyaWFibGVUeXBlLCBDb21wdXRlVHlwZSBhcyBDREtDb21wdXRlVHlwZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlYnVpbGQnO1xuaW1wb3J0IHsgQ29kZUJ1aWxkU3RlcCwgTWFudWFsQXBwcm92YWxTdGVwLCBTaGVsbFN0ZXAgfSBmcm9tICdhd3MtY2RrLWxpYi9waXBlbGluZXMnO1xuaW1wb3J0IHR5cGUgeyBBcnRpZmFjdEtleSB9IGZyb20gJy4vYXJ0aWZhY3QtbWFuYWdlcic7XG5pbXBvcnQgeyBtZXRhZGF0YUZvclNoZWxsU3RlcCwgbWV0YWRhdGFGb3JDb2RlQnVpbGRTdGVwLCBtZXRhZGF0YUZvckJ1aWxkRW52aXJvbm1lbnQgfSBmcm9tICcuL21ldGFkYXRhLWJ1aWxkZXInO1xuaW1wb3J0IHsgcmVzb2x2ZU5ldHdvcmsgfSBmcm9tICcuL25ldHdvcmsnO1xuaW1wb3J0IHsgUGx1Z2luVHlwZSwgQ29tcHV0ZVR5cGUsIE1ldGFEYXRhVHlwZSwgQ0RLX01FVEFEQVRBX1BSRUZJWCB9IGZyb20gJy4vcGlwZWxpbmUtdHlwZXMnO1xuaW1wb3J0IHsgQ29yZUNvbnN0YW50cyB9IGZyb20gJy4uL2NvbmZpZy9hcHAtY29uZmlnJztcbmltcG9ydCB0eXBlIHsgQ29kZUJ1aWxkU3RlcE9wdGlvbnMsIFN0ZXBDdXN0b21pemF0aW9uIH0gZnJvbSAnLi4vcGlwZWxpbmUvc3RlcC10eXBlcyc7XG5cbmNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcignSGVscGVyJyk7XG5cbi8qKlxuICogTWVyZ2UgbXVsdGlwbGUgbWV0YWRhdGEgb2JqZWN0cyBpbnRvIG9uZS4gTGF0ZXIgc291cmNlcyBvdmVycmlkZSBlYXJsaWVyIG9uZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZSguLi5zb3VyY2VzOiBBcnJheTxQYXJ0aWFsPE1ldGFEYXRhVHlwZT4+KTogTWV0YURhdGFUeXBlIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIC4uLnNvdXJjZXMpIGFzIE1ldGFEYXRhVHlwZTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IG5vbi1uYW1lc3BhY2VkIG1ldGFkYXRhIGtleXMgYXMgZW52aXJvbm1lbnQgdmFyaWFibGUgc3RyaW5ncy5cbiAqIEtleXMgc3RhcnRpbmcgd2l0aCAnYXdzOmNkazonIGFyZSByZXNlcnZlZCBmb3IgQ0RLIGNvbnN0cnVjdCBwcm9wc1xuICogKHByb2Nlc3NlZCBieSBtZXRhZGF0YSBleHRyYWN0aW9uIGZ1bmN0aW9ucykgYW5kIGFyZSBleGNsdWRlZCBoZXJlLlxuICpcbiAqIEFsbCB2YWx1ZXMgYXJlIGNvbnZlcnRlZCB0byBzdHJpbmdzIGZvciBDb2RlQnVpbGQgY29tcGF0aWJpbGl0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RNZXRhZGF0YUVudihtZXRhZGF0YTogTWV0YURhdGFUeXBlKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IGVudjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhtZXRhZGF0YSkpIHtcbiAgICBpZiAoIWtleS5zdGFydHNXaXRoKENES19NRVRBREFUQV9QUkVGSVgpKSB7XG4gICAgICBlbnZba2V5XSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBlbnY7XG59XG5cbi8qKlxuICogQnVpbGQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZyb20gcGx1Z2luIGNvbmZpZywgbWVyZ2VkIG1ldGFkYXRhLCBhbmQgY3VzdG9tIGVudi5cbiAqXG4gKiBNZXJnZSBvcmRlciAobGFzdCB3aW5zKTpcbiAqICAgMS4gcGx1Z2luLmVudiDigJQgcGx1Z2luIGRlZmF1bHQgZW52IHZhcnMgKGxvd2VzdCBwcmlvcml0eSlcbiAqICAgMi4gbm9uLW5hbWVzcGFjZWQgbWV0YWRhdGEga2V5cyDigJQgZS5nLiBQWVRIT05fVkVSU0lPTiwgV09SS0RJUlxuICogICAzLiBjdXN0b21FbnYg4oCUIHBlci1zdGVwIGN1c3RvbSBlbnYgdmFycyAoaGlnaGVzdCBwcmlvcml0eSlcbiAqL1xuY29uc3QgQk9PVFNUUkFQX0NNRCA9ICdleHBvcnQgV09SS0RJUj0ke1dPUktESVI6LS4vfTsgY2QgJHtXT1JLRElSfSc7XG5cbmZ1bmN0aW9uIGJ1aWxkRW52KHBsdWdpbjogUGx1Z2luLCBtZXRhZGF0YTogTWV0YURhdGFUeXBlLCBjdXN0b21FbnY/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIHJldHVybiB7XG4gICAgLi4uKHBsdWdpbi5lbnYgPz8ge30pLFxuICAgIC4uLmV4dHJhY3RNZXRhZGF0YUVudihtZXRhZGF0YSksXG4gICAgLi4uKGN1c3RvbUVudiA/PyB7fSksXG4gIH07XG59XG5cbi8qKlxuICogV3JhcCBidWlsZCBjb21tYW5kcyBiYXNlZCBvbiBmYWlsdXJlIGJlaGF2aW9yLlxuICogLSAnZmFpbCcgKGRlZmF1bHQpOiBObyB3cmFwcGluZyDigJQgY29tbWFuZHMgZmFpbCB0aGUgcGlwZWxpbmUgbmF0dXJhbGx5LlxuICogLSAnd2Fybic6IFJ1biBjb21tYW5kcyB3aXRoIGBzZXQgK2VgLCBjYXB0dXJlIGZhaWx1cmVzLCBsb2cgd2FybmluZ3MsIGNvbnRpbnVlLlxuICogLSAnaWdub3JlJzogQXBwZW5kIGB8fCB0cnVlYCB0byBlYWNoIGNvbW1hbmQg4oCUIGZhaWx1cmVzIGFyZSBzaWxlbnRseSBzd2FsbG93ZWQuXG4gKlxuICogT25seSBhcHBsaWVkIHRvIGJ1aWxkIGNvbW1hbmRzLCBub3QgaW5zdGFsbCBjb21tYW5kcyAoaW5zdGFsbCBmYWlsdXJlcyBzaG91bGQgYWx3YXlzIHN0b3AgdGhlIGJ1aWxkKS5cbiAqL1xuZnVuY3Rpb24gd3JhcENvbW1hbmRzRm9yRmFpbHVyZUJlaGF2aW9yKGNvbW1hbmRzOiBzdHJpbmdbXSwgYmVoYXZpb3I/OiAnZmFpbCcgfCAnd2FybicgfCAnaWdub3JlJyk6IHN0cmluZ1tdIHtcbiAgaWYgKCFiZWhhdmlvciB8fCBiZWhhdmlvciA9PT0gJ2ZhaWwnKSByZXR1cm4gY29tbWFuZHM7XG5cbiAgaWYgKGJlaGF2aW9yID09PSAnaWdub3JlJykge1xuICAgIHJldHVybiBjb21tYW5kcy5tYXAoY21kID0+IGAke2NtZH0gfHwgdHJ1ZWApO1xuICB9XG5cbiAgLy8gJ3dhcm4nOiBydW4gYWxsIGNvbW1hbmRzLCBjYXB0dXJlIGZhaWx1cmVzLCBidXQgZG9uJ3Qgc3RvcFxuICByZXR1cm4gW1xuICAgICdzZXQgK2UnLFxuICAgICdfU1RFUF9FWElUPTAnLFxuICAgIC4uLmNvbW1hbmRzLm1hcChjbWQgPT4gYCR7Y21kfSB8fCB7IGVjaG8gXCJXQVJOSU5HOiBDb21tYW5kIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAkP1wiOyBfU1RFUF9FWElUPTE7IH1gKSxcbiAgICAnc2V0IC1lJyxcbiAgICAnaWYgWyBcIiRfU1RFUF9FWElUXCIgLW5lIDAgXTsgdGhlbiBlY2hvIFwiV0FSTklORzogT25lIG9yIG1vcmUgY29tbWFuZHMgaW4gdGhpcyBzdGVwIGZhaWxlZFwiOyBmaScsXG4gIF07XG59XG5cbi8qKlxuICogQnVpbGQgYm9vdHN0cmFwLXByZWZpeGVkIGluc3RhbGwgYW5kIGJ1aWxkIGNvbW1hbmRzIGZyb20gcGx1Z2luIGNvbmZpZy5cbiAqIEVhY2ggY29tbWFuZCBsaXN0IGlzIHByZXBlbmRlZCB3aXRoIGEgV09SS0RJUiBib290c3RyYXAgdGhhdCBkZWZhdWx0cyB0byAnLi8nLlxuICogV2hlbiBjdXN0b20gY29tbWFuZHMgYXJlIHByb3ZpZGVkLCB0aGV5IGFyZSBpbmplY3RlZCBiZWZvcmUvYWZ0ZXIgdGhlIHBsdWdpbidzIGNvbW1hbmRzLlxuICogQnVpbGQgY29tbWFuZHMgYXJlIG9wdGlvbmFsbHkgd3JhcHBlZCBieSBmYWlsdXJlQmVoYXZpb3IgbG9naWMuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkQ29tbWFuZHMocGx1Z2luOiBQbHVnaW4sIGN1c3RvbT86IFN0ZXBDdXN0b21pemF0aW9uLCBmYWlsdXJlQmVoYXZpb3I/OiAnZmFpbCcgfCAnd2FybicgfCAnaWdub3JlJyk6IHsgaW5zdGFsbENvbW1hbmRzOiBzdHJpbmdbXTsgY29tbWFuZHM6IHN0cmluZ1tdIH0ge1xuICBjb25zdCB1c2VyQ29tbWFuZHMgPSBbXG4gICAgLi4uKGN1c3RvbT8ucHJlQ29tbWFuZHMgPz8gW10pLFxuICAgIC4uLihwbHVnaW4uY29tbWFuZHM/Lmxlbmd0aCA/IHBsdWdpbi5jb21tYW5kcyA6IFtdKSxcbiAgICAuLi4oY3VzdG9tPy5wb3N0Q29tbWFuZHMgPz8gW10pLFxuICBdO1xuXG4gIHJldHVybiB7XG4gICAgaW5zdGFsbENvbW1hbmRzOiBbXG4gICAgICBCT09UU1RSQVBfQ01ELFxuICAgICAgLi4uKGN1c3RvbT8ucHJlSW5zdGFsbENvbW1hbmRzID8/IFtdKSxcbiAgICAgIC4uLihwbHVnaW4uaW5zdGFsbENvbW1hbmRzID8/IFtdKSxcbiAgICAgIC4uLihjdXN0b20/LnBvc3RJbnN0YWxsQ29tbWFuZHMgPz8gW10pLFxuICAgIF0sXG4gICAgY29tbWFuZHM6IFtCT09UU1RSQVBfQ01ELCAuLi53cmFwQ29tbWFuZHNGb3JGYWlsdXJlQmVoYXZpb3IodXNlckNvbW1hbmRzLCBmYWlsdXJlQmVoYXZpb3IpXSxcbiAgfTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgcGxhaW4gZW52IHJlY29yZCB0byBDb2RlQnVpbGQncyBlbnZpcm9ubWVudFZhcmlhYmxlcyBmb3JtYXQgKFBMQUlOVEVYVCkuXG4gKi9cbmZ1bmN0aW9uIHRvQ29kZUJ1aWxkRW52VmFycyhlbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBSZWNvcmQ8c3RyaW5nLCB7IHZhbHVlOiBzdHJpbmcgfT4ge1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGVudikubWFwKChbbmFtZSwgdmFsdWVdKSA9PiBbbmFtZSwgeyB2YWx1ZSB9XSksXG4gICk7XG59XG5cbi8qKlxuICogQnVpbGQgU0VDUkVUU19NQU5BR0VSLXR5cGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZyb20gcGx1Z2luIHNlY3JldCBkZWNsYXJhdGlvbnMuXG4gKiBVc2VzIG5hbWluZyBjb252ZW50aW9uOiBwaXBlbGluZS1idWlsZGVyL3tvcmdJZH0ve3NlY3JldE5hbWV9XG4gKiBFYWNoIG9yZyBtYW5hZ2VzIHRoZXNlIHNlY3JldHMgaW4gdGhlaXIgb3duIEFXUyBTZWNyZXRzIE1hbmFnZXIuXG4gKi9cbmNvbnN0IFZBTElEX1NFQ1JFVF9OQU1FID0gL15bYS16QS1aMC05L18rPS5ALV0rJC87XG5cbmZ1bmN0aW9uIHRvU2VjcmV0RW52VmFycyhcbiAgc2VjcmV0czogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IHJlcXVpcmVkOiBib29sZWFuIH0+LFxuICBvcmdJZDogc3RyaW5nLFxuKTogUmVjb3JkPHN0cmluZywgeyB2YWx1ZTogc3RyaW5nOyB0eXBlOiBCdWlsZEVudmlyb25tZW50VmFyaWFibGVUeXBlIH0+IHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBzZWNyZXRzLm1hcCgoeyBuYW1lIH0pID0+IHtcbiAgICAgIGNvbnN0IHNlY3JldFBhdGggPSBDb3JlQ29uc3RhbnRzLnNlY3JldFBhdGgob3JnSWQsIG5hbWUpO1xuICAgICAgaWYgKCFWQUxJRF9TRUNSRVRfTkFNRS50ZXN0KHNlY3JldFBhdGgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU2VjcmV0IHBhdGggXCIke3NlY3JldFBhdGh9XCIgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzIGZvciBBV1MgU2VjcmV0cyBNYW5hZ2VyYCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gW1xuICAgICAgICBuYW1lLFxuICAgICAgICB7XG4gICAgICAgICAgdmFsdWU6IHNlY3JldFBhdGgsXG4gICAgICAgICAgdHlwZTogQnVpbGRFbnZpcm9ubWVudFZhcmlhYmxlVHlwZS5TRUNSRVRTX01BTkFHRVIsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH0pLFxuICApO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIENvZGVCdWlsZCBzdGVwIG9yIFNoZWxsIHN0ZXAgYmFzZWQgb24gcGx1Z2luIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogTWV0YWRhdGEgbWVyZ2Ugb3JkZXIgKGxhc3Qgd2lucyk6XG4gKiAgIDEuIFN0ZXAtbGV2ZWwgbWV0YWRhdGEgKGZyb20gb3B0aW9ucy5tZXRhZGF0YSlcbiAqICAgMi4gUGx1Z2luIG1ldGFkYXRhIChmcm9tIHBsdWdpbi5tZXRhZGF0YSBpbiBkYXRhYmFzZSlcbiAqXG4gKiBFbnZpcm9ubWVudCBtZXJnZSBvcmRlciAobGFzdCB3aW5zKTpcbiAqICAgMS4gUGx1Z2luIGVudiB2YXJzIChmcm9tIHBsdWdpbi5lbnYpXG4gKiAgIDIuIEN1c3RvbSBlbnYgdmFycyAoZnJvbSBvcHRpb25zLmVudilcbiAqICAgMy4gV09SS0RJUiBmcm9tIG1lcmdlZCBtZXRhZGF0YVxuICpcbiAqIENESyBwcm9wIHNwcmVhZCBvcmRlciAobGFzdCB3aW5zKTpcbiAqICAgcHJvZ3JhbW1hdGljIGRlZmF1bHRzIChpbnB1dCwgY29tbWFuZHMsIGVudiwgbmV0d29yaykg4oaSIG1ldGFkYXRhIG92ZXJyaWRlc1xuICpcbiAqIFRoaXMgbWVhbnMgbWV0YWRhdGEga2V5cyBsaWtlIGBhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOmNvbW1hbmRzYFxuICogd2lsbCBvdmVycmlkZSB0aGUgcGx1Z2luLWRlcml2ZWQgY29tbWFuZHMgd2hlbiBleHBsaWNpdGx5IHNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvZGVCdWlsZFN0ZXAob3B0aW9uczogQ29kZUJ1aWxkU3RlcE9wdGlvbnMpOiBTaGVsbFN0ZXAgfCBDb2RlQnVpbGRTdGVwIHwgTWFudWFsQXBwcm92YWxTdGVwIHtcbiAgY29uc3Qge1xuICAgIGlkLCBwbHVnaW4sIGlucHV0LCBtZXRhZGF0YSwgbmV0d29yaywgc2NvcGUsXG4gICAgcHJlSW5zdGFsbENvbW1hbmRzLCBwb3N0SW5zdGFsbENvbW1hbmRzLCBwcmVDb21tYW5kcywgcG9zdENvbW1hbmRzLFxuICAgIGVudjogY3VzdG9tRW52LCBhZGRpdGlvbmFsSW5wdXRzLCB0aW1lb3V0LCBmYWlsdXJlQmVoYXZpb3IsXG4gICAgYXJ0aWZhY3RNYW5hZ2VyLCBzdGFnZU5hbWUsIHN0YWdlQWxpYXMsIHBsdWdpbkFsaWFzLCBvcmdJZCxcbiAgfSA9IG9wdGlvbnM7XG5cbiAgY29uc3QgbWVyZ2VkID0gbWVyZ2UobWV0YWRhdGEgPz8ge30sIHBsdWdpbi5tZXRhZGF0YSA/PyB7fSk7XG5cbiAgLy8gTWFudWFsQXBwcm92YWxTdGVwOiBubyBjb21tYW5kcywgZW52LCBjb21wdXRlLCBvciBuZXR3b3JrIOKAlCBqdXN0IGlkICsgb3B0aW9uYWwgY29tbWVudFxuICBpZiAocGx1Z2luLnBsdWdpblR5cGUgPT09IFBsdWdpblR5cGUuTUFOVUFMX0FQUFJPVkFMX1NURVApIHtcbiAgICByZXR1cm4gbmV3IE1hbnVhbEFwcHJvdmFsU3RlcChpZCwge1xuICAgICAgY29tbWVudDogdHlwZW9mIG1lcmdlZC5BUFBST1ZBTF9DT01NRU5UID09PSAnc3RyaW5nJyA/IG1lcmdlZC5BUFBST1ZBTF9DT01NRU5UIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICB9XG5cbiAgbG9nLmRlYnVnKCdbQ3JlYXRlQ29kZUJ1aWxkU3RlcF0gQnVpbGRpbmcgc3RlcCB3aXRoIG1lcmdlZCBtZXRhZGF0YScpO1xuXG4gIC8vIFdhcm4gYWJvdXQgcmVxdWlyZWQgc2VjcmV0cyB3aXRob3V0IG9yZ0lkIChjYW4ndCByZXNvbHZlKVxuICBjb25zdCByZXF1aXJlZFNlY3JldHMgPSBwbHVnaW4uc2VjcmV0cz8uZmlsdGVyKHMgPT4gcy5yZXF1aXJlZCkgPz8gW107XG4gIGlmIChyZXF1aXJlZFNlY3JldHMubGVuZ3RoID4gMCAmJiAhb3JnSWQpIHtcbiAgICBsb2cud2FybihcbiAgICAgIGBQbHVnaW4gXCIke3BsdWdpbi5uYW1lfVwiIGRlY2xhcmVzICR7cmVxdWlyZWRTZWNyZXRzLmxlbmd0aH0gcmVxdWlyZWQgc2VjcmV0KHMpIGJ1dCBubyBvcmdJZCBpcyBhdmFpbGFibGUuIGAgK1xuICAgICAgYFNlY3JldHMgd2lsbCBub3QgYmUgaW5qZWN0ZWQ6ICR7cmVxdWlyZWRTZWNyZXRzLm1hcChzID0+IHMubmFtZSkuam9pbignLCAnKX1gLFxuICAgICk7XG4gIH1cblxuICAvLyBSZXNvbHZlIHBsdWdpbiBzZWNyZXRzIGFzIFNFQ1JFVFNfTUFOQUdFUiBlbnYgdmFyc1xuICBjb25zdCBzZWNyZXRFbnZWYXJzID0gKHBsdWdpbi5zZWNyZXRzPy5sZW5ndGggJiYgb3JnSWQpXG4gICAgPyB0b1NlY3JldEVudlZhcnMocGx1Z2luLnNlY3JldHMsIG9yZ0lkKVxuICAgIDoge307XG5cbiAgY29uc3QgZW52ID0gYnVpbGRFbnYocGx1Z2luLCBtZXJnZWQsIGN1c3RvbUVudik7XG5cbiAgLy8gQ29kZVBpcGVsaW5lIHJlc29sdmVkIHZhcmlhYmxlcyDigJQgbXVzdCBiZSBpbiBDb2RlQnVpbGRTdGVwLmVudiAoYWN0aW9uLWxldmVsKSxcbiAgLy8gbm90IGJ1aWxkRW52aXJvbm1lbnQuZW52aXJvbm1lbnRWYXJpYWJsZXMgKHByb2plY3QtbGV2ZWwpXG4gIGNvbnN0IGFjdGlvbkVudjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICBQSVBFTElORV9FWEVDVVRJT05fSUQ6ICcje2NvZGVwaXBlbGluZS5QaXBlbGluZUV4ZWN1dGlvbklkfScsXG4gIH07XG5cbiAgY29uc3Qgb3V0cHV0RGlyID0gcGx1Z2luLnByaW1hcnlPdXRwdXREaXJlY3Rvcnk7XG4gIGNvbnN0IGVuc3VyZU91dHB1dERpciA9IChvdXRwdXREaXIgJiYgIW91dHB1dERpci5pbmNsdWRlcygnKicpKVxuICAgID8gW2Bta2RpciAtcCBcIiR7b3V0cHV0RGlyfVwiICYmIHRvdWNoIFwiJHtvdXRwdXREaXJ9Ly5naXRrZWVwXCJgXVxuICAgIDogW107XG5cbiAgY29uc3QgeyBpbnN0YWxsQ29tbWFuZHMsIGNvbW1hbmRzIH0gPSBidWlsZENvbW1hbmRzKHBsdWdpbiwge1xuICAgIHByZUluc3RhbGxDb21tYW5kczogWy4uLmVuc3VyZU91dHB1dERpciwgLi4uKHByZUluc3RhbGxDb21tYW5kcyA/PyBbXSldLFxuICAgIHBvc3RJbnN0YWxsQ29tbWFuZHMsXG4gICAgcHJlQ29tbWFuZHMsXG4gICAgcG9zdENvbW1hbmRzLFxuICB9LCBmYWlsdXJlQmVoYXZpb3IpO1xuXG4gIGNvbnN0IHByb2dyYW1tYXRpYyA9IHsgaW5wdXQsIGluc3RhbGxDb21tYW5kcywgY29tbWFuZHMgfTtcblxuICAvLyBSZXR1cm4gU2hlbGxTdGVwIGlmIHBsdWdpbiB0eXBlIGlzIFNIRUxMX1NURVBcbiAgaWYgKHBsdWdpbi5wbHVnaW5UeXBlID09PSBQbHVnaW5UeXBlLlNIRUxMX1NURVApIHtcbiAgICByZXR1cm4gbmV3IFNoZWxsU3RlcChpZCwge1xuICAgICAgLi4ucHJvZ3JhbW1hdGljLFxuICAgICAgZW52OiB7IC4uLmVudiwgLi4uYWN0aW9uRW52IH0sXG4gICAgICAuLi5tZXRhZGF0YUZvclNoZWxsU3RlcChtZXJnZWQpLFxuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgY29tcHV0ZVR5cGUgPSBnZXRDb21wdXRlVHlwZShcbiAgICBwbHVnaW4uY29tcHV0ZVR5cGUgPz8gb3B0aW9ucy5kZWZhdWx0Q29tcHV0ZVR5cGUgPz8gJ1NNQUxMJyxcbiAgKTtcblxuICBjb25zdCBuZXR3b3JrUHJvcHMgPSBuZXR3b3JrXG4gICAgPyByZXNvbHZlTmV0d29yayhzY29wZSwgb3B0aW9ucy51bmlxdWVJZCwgbmV0d29yaylcbiAgICA6IHt9O1xuXG4gIC8vIE1ldGFkYXRhIHNwcmVhZCBsYXN0IHNvIGl0IGNhbiBvdmVycmlkZSBwcm9ncmFtbWF0aWMgZGVmYXVsdHMuXG4gIC8vIE5PVEU6IENhY2hpbmcgaXMgc3VwcG9ydGVkIHZpYSB0d28gbWV0YWRhdGEgcGF0aHM6XG4gIC8vICAgMS4gTWV0YWRhdGFLZXlzLkNBQ0hFICgnYXdzOmNkazpwaXBlbGluZXM6Y29kZWJ1aWxkc3RlcDpjYWNoZScpIOKAlCBwYXNzZWQgZGlyZWN0bHlcbiAgLy8gICAgICBhcyB0aGUgQ29kZUJ1aWxkU3RlcCBgY2FjaGVgIHByb3AgKGV4cGVjdHMgYSBjb2RlYnVpbGQuQ2FjaGUgb2JqZWN0KS5cbiAgLy8gICAyLiBNZXRhZGF0YUtleXMuUEFSVElBTF9CVUlMRF9TUEVDICgnYXdzOmNkazpwaXBlbGluZXM6Y29kZWJ1aWxkc3RlcDpwYXJ0aWFsYnVpbGRzcGVjJylcbiAgLy8gICAgICDigJQgcGFzc2VkIGFzIGBwYXJ0aWFsQnVpbGRTcGVjYCwgd2hpY2ggY2FuIGluY2x1ZGUgYSBgY2FjaGU6YCBzZWN0aW9uIGZvclxuICAvLyAgICAgIFMzIG9yIGxvY2FsIGNhY2hpbmcgKGUuZy4sIEJ1aWxkU3BlYy5mcm9tT2JqZWN0KHsgY2FjaGU6IHsgcGF0aHM6IFsuLi5dIH0gfSkpLlxuICBjb25zdCBzdGVwID0gbmV3IENvZGVCdWlsZFN0ZXAoaWQsIHtcbiAgICAuLi5wcm9ncmFtbWF0aWMsXG4gICAgLi4ubmV0d29ya1Byb3BzLFxuICAgIC4uLihhZGRpdGlvbmFsSW5wdXRzICYmIHsgYWRkaXRpb25hbElucHV0cyB9KSxcbiAgICAuLi4odGltZW91dCAmJiB7IHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXModGltZW91dCkgfSksXG4gICAgZW52OiBhY3Rpb25FbnYsXG4gICAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogcGx1Z2luLnByaW1hcnlPdXRwdXREaXJlY3RvcnkgPz8gdW5kZWZpbmVkLFxuICAgIGJ1aWxkRW52aXJvbm1lbnQ6IHtcbiAgICAgIGNvbXB1dGVUeXBlLFxuICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IHtcbiAgICAgICAgLi4udG9Db2RlQnVpbGRFbnZWYXJzKGVudiksXG4gICAgICAgIC4uLnNlY3JldEVudlZhcnMsXG4gICAgICB9LFxuICAgICAgLi4ubWV0YWRhdGFGb3JCdWlsZEVudmlyb25tZW50KG1lcmdlZCksXG4gICAgfSxcbiAgICAuLi5tZXRhZGF0YUZvckNvZGVCdWlsZFN0ZXAobWVyZ2VkKSxcbiAgfSk7XG5cbiAgLy8gUmVnaXN0ZXIgd2l0aCBhcnRpZmFjdCBtYW5hZ2VyIGlmIHByaW1hcnlPdXRwdXREaXJlY3RvcnkgaXMgc2V0XG4gIGlmIChwbHVnaW4ucHJpbWFyeU91dHB1dERpcmVjdG9yeSAmJiBhcnRpZmFjdE1hbmFnZXIgJiYgc3RhZ2VOYW1lKSB7XG4gICAgY29uc3QgYXJ0aWZhY3RLZXk6IEFydGlmYWN0S2V5ID0ge1xuICAgICAgc3RhZ2VOYW1lLFxuICAgICAgc3RhZ2VBbGlhczogc3RhZ2VBbGlhcyA/PyBgJHtzdGFnZU5hbWV9LWFsaWFzYCxcbiAgICAgIHBsdWdpbk5hbWU6IHBsdWdpbi5uYW1lLFxuICAgICAgcGx1Z2luQWxpYXM6IHBsdWdpbkFsaWFzID8/IGAke3BsdWdpbi5uYW1lfS1hbGlhc2AsXG4gICAgICBvdXRwdXREaXJlY3Rvcnk6IHBsdWdpbi5wcmltYXJ5T3V0cHV0RGlyZWN0b3J5LFxuICAgIH07XG4gICAgYXJ0aWZhY3RNYW5hZ2VyLmFkZChhcnRpZmFjdEtleSwgc3RlcCk7XG4gIH1cblxuICByZXR1cm4gc3RlcDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IHN0cmluZyBvciBDb21wdXRlVHlwZSBlbnVtIHRvIENESyBDb21wdXRlVHlwZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29tcHV0ZVR5cGUoaW5wdXQ6IHN0cmluZyB8IENES0NvbXB1dGVUeXBlID0gJ1NNQUxMJyk6IENES0NvbXB1dGVUeXBlIHtcbiAgLy8gSWYgYWxyZWFkeSBhIENESyBDb21wdXRlVHlwZSwgcmV0dXJuIGFzLWlzXG4gIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplZCA9IGlucHV0LnRvVXBwZXJDYXNlKCkgYXMgQ29tcHV0ZVR5cGU7XG5cbiAgY29uc3QgbWFwcGluZzogUmVjb3JkPENvbXB1dGVUeXBlLCBDREtDb21wdXRlVHlwZT4gPSB7XG4gICAgW0NvbXB1dGVUeXBlLlNNQUxMXTogQ0RLQ29tcHV0ZVR5cGUuU01BTEwsXG4gICAgW0NvbXB1dGVUeXBlLk1FRElVTV06IENES0NvbXB1dGVUeXBlLk1FRElVTSxcbiAgICBbQ29tcHV0ZVR5cGUuTEFSR0VdOiBDREtDb21wdXRlVHlwZS5MQVJHRSxcbiAgICBbQ29tcHV0ZVR5cGUuWDJfTEFSR0VdOiBDREtDb21wdXRlVHlwZS5YMl9MQVJHRSxcbiAgfTtcblxuICBjb25zdCByZXN1bHQgPSBtYXBwaW5nW25vcm1hbGl6ZWRdO1xuICBpZiAoIXJlc3VsdCkge1xuICAgIGxvZy53YXJuKGBVbmtub3duIGNvbXB1dGUgdHlwZSBcIiR7aW5wdXR9XCIsIGZhbGxpbmcgYmFjayB0byBTTUFMTGApO1xuICAgIHJldHVybiBDREtDb21wdXRlVHlwZS5TTUFMTDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFJlcGxhY2VzIGFsbCBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBsZXR0ZXJzIG9yIG51bWJlcnMgd2l0aCB0aGUgc3BlY2lmaWVkIHZhbHVlXG4gKiBAcGFyYW0gaW5wdXQgLSBUaGUgc3RyaW5nIHRvIHByb2Nlc3NcbiAqIEBwYXJhbSByZXBsYWNlVmFsdWUgLSBUaGUgY2hhcmFjdGVyKHMpIHRvIHJlcGxhY2Ugbm9uLWFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIHdpdGggKGRlZmF1bHQ6ICdfJylcbiAqIEByZXR1cm5zIFRoZSBzdHJpbmcgd2l0aCBub24tYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgcmVwbGFjZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VOb25BbHBoYW51bWVyaWMoaW5wdXQ6IHN0cmluZywgcmVwbGFjZVZhbHVlOiBzdHJpbmcgPSAnXycpOiBzdHJpbmcge1xuICByZXR1cm4gaW5wdXQucmVwbGFjZSgvW15hLXpBLVowLTldL2csIHJlcGxhY2VWYWx1ZSk7XG59XG5cbi8qKlxuICogVW53cmFwIGEgU2VjcmV0VmFsdWUgfCBzdHJpbmcgaW50byBhIHBsYWluIHN0cmluZy5cbiAqIFdoZW4gYSBTZWNyZXRWYWx1ZSBpcyBwcm92aWRlZCAoZS5nLiBmcm9tIFNlY3JldHMgTWFuYWdlciksIGNhbGxzIHVuc2FmZVVud3JhcCgpXG4gKiB0byBleHRyYWN0IHRoZSB1bmRlcmx5aW5nIHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW53cmFwU2VjcmV0KHZhbHVlOiBTZWNyZXRWYWx1ZSB8IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiB2YWx1ZS51bnNhZmVVbndyYXAoKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import type { CodeCommitSourceConfig, CodeStarSourceConfig, GitHubSourceConfig, S3SourceConfig } from '../pipeline/source-types';
|
|
2
|
+
export { AccessModifier, ComputeType, PluginType, MetaDataType } from '@pipeline-builder/api-core';
|
|
3
|
+
/**
|
|
4
|
+
* Pipeline trigger behavior.
|
|
5
|
+
*
|
|
6
|
+
* @property NONE - Manual trigger only, pipeline does not start automatically
|
|
7
|
+
* @property AUTO - Automatic trigger on source changes (S3/GitHub: polling, CodeStar: push-based webhook)
|
|
8
|
+
*/
|
|
9
|
+
export declare const TriggerType: {
|
|
10
|
+
readonly NONE: "NONE";
|
|
11
|
+
/** Automatic trigger on source changes. Uses polling for S3/GitHub, push-based webhook for CodeStar. */
|
|
12
|
+
readonly AUTO: "AUTO";
|
|
13
|
+
/** Scheduled trigger via EventBridge rule. Requires a cron expression in the source options. */
|
|
14
|
+
readonly SCHEDULE: "SCHEDULE";
|
|
15
|
+
};
|
|
16
|
+
export type TriggerType = (typeof TriggerType)[keyof typeof TriggerType];
|
|
17
|
+
/**
|
|
18
|
+
* Union type of all supported pipeline source types
|
|
19
|
+
*
|
|
20
|
+
* Supported sources:
|
|
21
|
+
* - S3SourceConfig: Source code from S3 bucket
|
|
22
|
+
* - GitHubSourceConfig: Source code from GitHub repository
|
|
23
|
+
* - CodeStarSourceConfig: Source code via CodeStar connection (GitHub, Bitbucket, GitLab)
|
|
24
|
+
* - CodeCommitSourceConfig: Source code from AWS CodeCommit repository
|
|
25
|
+
*/
|
|
26
|
+
export type SourceType = S3SourceConfig | GitHubSourceConfig | CodeStarSourceConfig | CodeCommitSourceConfig;
|
|
27
|
+
/**
|
|
28
|
+
* Constants for metadata keys to avoid string typos.
|
|
29
|
+
*
|
|
30
|
+
* Key format: `aws:cdk:{namespace}:{property}` (all lowercase).
|
|
31
|
+
* These match the keys produced by `getCustomKey(namespace, property)`
|
|
32
|
+
* and looked up by `buildConfigFromMetadata`.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```typescript
|
|
36
|
+
* const metadata = {
|
|
37
|
+
* [MetadataKeys.SELF_MUTATION]: true,
|
|
38
|
+
* [MetadataKeys.PUBLISH_ASSETS_IN_PARALLEL]: true
|
|
39
|
+
* };
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export declare const MetadataKeys: {
|
|
43
|
+
readonly SELF_MUTATION: "aws:cdk:pipelines:codepipeline:selfmutation";
|
|
44
|
+
readonly CROSS_ACCOUNT_KEYS: "aws:cdk:pipelines:codepipeline:crossaccountkeys";
|
|
45
|
+
readonly DOCKER_ENABLED_FOR_SELF_MUTATION: "aws:cdk:pipelines:codepipeline:dockerenabledforselfmutation";
|
|
46
|
+
readonly DOCKER_ENABLED_FOR_SYNTH: "aws:cdk:pipelines:codepipeline:dockerenabledforsynth";
|
|
47
|
+
readonly ENABLE_KEY_ROTATION: "aws:cdk:pipelines:codepipeline:enablekeyrotation";
|
|
48
|
+
readonly PUBLISH_ASSETS_IN_PARALLEL: "aws:cdk:pipelines:codepipeline:publishassetsinparallel";
|
|
49
|
+
readonly REUSE_CROSS_REGION_SUPPORT_STACKS: "aws:cdk:pipelines:codepipeline:reusecrossregionsupportstacks";
|
|
50
|
+
readonly USE_CHANGE_SETS: "aws:cdk:pipelines:codepipeline:usechangesets";
|
|
51
|
+
readonly USE_PIPELINE_ROLE_FOR_ACTIONS: "aws:cdk:pipelines:codepipeline:usepipelineroleforactions";
|
|
52
|
+
readonly ARTIFACT_BUCKET: "aws:cdk:pipelines:codepipeline:artifactbucket";
|
|
53
|
+
readonly ASSET_PUBLISHING_CODE_BUILD_DEFAULTS: "aws:cdk:pipelines:codepipeline:assetpublishingcodebuilddefaults";
|
|
54
|
+
readonly CDK_ASSETS_CLI_VERSION: "aws:cdk:pipelines:codepipeline:cdkassetscliversion";
|
|
55
|
+
readonly CLI_VERSION: "aws:cdk:pipelines:codepipeline:cliversion";
|
|
56
|
+
readonly CODE_BUILD_DEFAULTS: "aws:cdk:pipelines:codepipeline:codebuilddefaults";
|
|
57
|
+
readonly CODE_PIPELINE: "aws:cdk:pipelines:codepipeline:codepipeline";
|
|
58
|
+
readonly CROSS_REGION_REPLICATION_BUCKETS: "aws:cdk:pipelines:codepipeline:crossregionreplicationbuckets";
|
|
59
|
+
readonly DOCKER_CREDENTIALS: "aws:cdk:pipelines:codepipeline:dockercredentials";
|
|
60
|
+
readonly PIPELINE_NAME: "aws:cdk:pipelines:codepipeline:pipelinename";
|
|
61
|
+
readonly PIPELINE_TYPE: "aws:cdk:pipelines:codepipeline:pipelinetype";
|
|
62
|
+
readonly PIPELINE_ROLE: "aws:cdk:pipelines:codepipeline:role";
|
|
63
|
+
readonly SELF_MUTATION_CODE_BUILD_DEFAULTS: "aws:cdk:pipelines:codepipeline:selfmutationcodebuilddefaults";
|
|
64
|
+
readonly SYNTH: "aws:cdk:pipelines:codepipeline:synth";
|
|
65
|
+
readonly SYNTH_CODE_BUILD_DEFAULTS: "aws:cdk:pipelines:codepipeline:synthcodebuilddefaults";
|
|
66
|
+
readonly ACTION_ROLE: "aws:cdk:pipelines:codebuildstep:actionrole";
|
|
67
|
+
readonly ADDITIONAL_INPUTS: "aws:cdk:pipelines:codebuildstep:additionalinputs";
|
|
68
|
+
readonly BUILD_ENVIRONMENT: "aws:cdk:pipelines:codebuildstep:buildenvironment";
|
|
69
|
+
readonly CACHE: "aws:cdk:pipelines:codebuildstep:cache";
|
|
70
|
+
readonly COMMANDS: "aws:cdk:pipelines:codebuildstep:commands";
|
|
71
|
+
readonly CODE_BUILD_ENV: "aws:cdk:pipelines:codebuildstep:env";
|
|
72
|
+
readonly ENV_FROM_CFN_OUTPUTS: "aws:cdk:pipelines:codebuildstep:envfromcfnoutputs";
|
|
73
|
+
readonly FILE_SYSTEM_LOCATIONS: "aws:cdk:pipelines:codebuildstep:filesystemlocations";
|
|
74
|
+
readonly INPUT: "aws:cdk:pipelines:codebuildstep:input";
|
|
75
|
+
readonly INSTALL_COMMANDS: "aws:cdk:pipelines:codebuildstep:installcommands";
|
|
76
|
+
readonly LOGGING: "aws:cdk:pipelines:codebuildstep:logging";
|
|
77
|
+
readonly PARTIAL_BUILD_SPEC: "aws:cdk:pipelines:codebuildstep:partialbuildspec";
|
|
78
|
+
readonly PRIMARY_OUTPUT_DIRECTORY: "aws:cdk:pipelines:codebuildstep:primaryoutputdirectory";
|
|
79
|
+
readonly PROJECT_NAME: "aws:cdk:pipelines:codebuildstep:projectname";
|
|
80
|
+
readonly STEP_ROLE: "aws:cdk:pipelines:codebuildstep:role";
|
|
81
|
+
readonly ROLE_POLICY_STATEMENTS: "aws:cdk:pipelines:codebuildstep:rolepolicystatements";
|
|
82
|
+
readonly TIMEOUT: "aws:cdk:pipelines:codebuildstep:timeout";
|
|
83
|
+
readonly SHELL_ADDITIONAL_INPUTS: "aws:cdk:pipelines:shellstep:additionalinputs";
|
|
84
|
+
readonly SHELL_COMMANDS: "aws:cdk:pipelines:shellstep:commands";
|
|
85
|
+
readonly SHELL_ENV: "aws:cdk:pipelines:shellstep:env";
|
|
86
|
+
readonly SHELL_ENV_FROM_CFN_OUTPUTS: "aws:cdk:pipelines:shellstep:envfromcfnoutputs";
|
|
87
|
+
readonly SHELL_INPUT: "aws:cdk:pipelines:shellstep:input";
|
|
88
|
+
readonly SHELL_INSTALL_COMMANDS: "aws:cdk:pipelines:shellstep:installcommands";
|
|
89
|
+
readonly SHELL_PRIMARY_OUTPUT_DIRECTORY: "aws:cdk:pipelines:shellstep:primaryoutputdirectory";
|
|
90
|
+
readonly PRIVILEGED: "aws:cdk:codebuild:buildenvironment:privileged";
|
|
91
|
+
readonly BUILD_IMAGE: "aws:cdk:codebuild:buildenvironment:buildimage";
|
|
92
|
+
readonly CERTIFICATE: "aws:cdk:codebuild:buildenvironment:certificate";
|
|
93
|
+
readonly COMPUTE_TYPE: "aws:cdk:codebuild:buildenvironment:computetype";
|
|
94
|
+
readonly DOCKER_SERVER: "aws:cdk:codebuild:buildenvironment:dockerserver";
|
|
95
|
+
readonly ENVIRONMENT_VARIABLES: "aws:cdk:codebuild:buildenvironment:environmentvariables";
|
|
96
|
+
readonly FLEET: "aws:cdk:codebuild:buildenvironment:fleet";
|
|
97
|
+
readonly NETWORK_TYPE: "aws:cdk:ec2:network:type";
|
|
98
|
+
readonly NETWORK_VPC_ID: "aws:cdk:ec2:network:vpcid";
|
|
99
|
+
readonly NETWORK_SUBNET_IDS: "aws:cdk:ec2:network:subnetids";
|
|
100
|
+
readonly NETWORK_SUBNET_TYPE: "aws:cdk:ec2:network:subnettype";
|
|
101
|
+
readonly NETWORK_AVAILABILITY_ZONES: "aws:cdk:ec2:network:availabilityzones";
|
|
102
|
+
readonly NETWORK_SUBNET_GROUP_NAME: "aws:cdk:ec2:network:subnetgroupname";
|
|
103
|
+
readonly NETWORK_SECURITY_GROUP_IDS: "aws:cdk:ec2:network:securitygroupids";
|
|
104
|
+
readonly NETWORK_TAGS: "aws:cdk:ec2:network:tags";
|
|
105
|
+
readonly NETWORK_VPC_NAME: "aws:cdk:ec2:network:vpcname";
|
|
106
|
+
readonly NETWORK_REGION: "aws:cdk:ec2:network:region";
|
|
107
|
+
readonly ROLE_TYPE: "aws:cdk:iam:role:type";
|
|
108
|
+
readonly ROLE_ARN: "aws:cdk:iam:role:rolearn";
|
|
109
|
+
readonly ROLE_NAME: "aws:cdk:iam:role:rolename";
|
|
110
|
+
readonly ROLE_MUTABLE: "aws:cdk:iam:role:mutable";
|
|
111
|
+
readonly SECURITY_GROUP_TYPE: "aws:cdk:ec2:securitygroup:type";
|
|
112
|
+
readonly SECURITY_GROUP_IDS: "aws:cdk:ec2:securitygroup:securitygroupids";
|
|
113
|
+
readonly SECURITY_GROUP_MUTABLE: "aws:cdk:ec2:securitygroup:mutable";
|
|
114
|
+
readonly SECURITY_GROUP_NAME: "aws:cdk:ec2:securitygroup:securitygroupname";
|
|
115
|
+
readonly SECURITY_GROUP_VPC_ID: "aws:cdk:ec2:securitygroup:vpcid";
|
|
116
|
+
readonly NOTIFICATION_TOPIC_ARN: "aws:cdk:notifications:topic:arn";
|
|
117
|
+
readonly NOTIFICATION_EVENTS: "aws:cdk:notifications:events";
|
|
118
|
+
readonly BUILD_PARALLEL: "aws:cdk:build:parallel";
|
|
119
|
+
readonly BUILD_CACHE: "aws:cdk:build:cache";
|
|
120
|
+
readonly BUILD_TIMEOUT: "aws:cdk:build:timeout";
|
|
121
|
+
readonly ENABLE_EXECUTION_EVENTS: "aws:cdk:operations:executionevents";
|
|
122
|
+
readonly ENABLE_METRICS: "aws:cdk:operations:metrics";
|
|
123
|
+
readonly ARTIFACT_RETENTION_DAYS: "aws:cdk:operations:artifactretentiondays";
|
|
124
|
+
readonly PIPELINE_VARIABLES: "aws:cdk:operations:variables";
|
|
125
|
+
readonly KMS_KEY_ARN: "aws:cdk:encryption:kmskeyarn";
|
|
126
|
+
};
|
|
127
|
+
/**
|
|
128
|
+
* Type for MetadataKeys values
|
|
129
|
+
*/
|
|
130
|
+
export type MetadataKey = typeof MetadataKeys[keyof typeof MetadataKeys];
|
|
131
|
+
/**
|
|
132
|
+
* Prefix for AWS CDK metadata keys.
|
|
133
|
+
* Keys with this prefix are handled by the metadata extraction functions
|
|
134
|
+
* (metadataForCodePipeline, etc.) and should NOT be passed as CodeBuild environment variables.
|
|
135
|
+
*/
|
|
136
|
+
export declare const CDK_METADATA_PREFIX = "aws:cdk:";
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.CDK_METADATA_PREFIX = exports.MetadataKeys = exports.TriggerType = exports.PluginType = exports.ComputeType = exports.AccessModifier = void 0;
|
|
6
|
+
// Re-export shared types from api-core for convenience
|
|
7
|
+
var api_core_1 = require("@pipeline-builder/api-core");
|
|
8
|
+
Object.defineProperty(exports, "AccessModifier", { enumerable: true, get: function () { return api_core_1.AccessModifier; } });
|
|
9
|
+
Object.defineProperty(exports, "ComputeType", { enumerable: true, get: function () { return api_core_1.ComputeType; } });
|
|
10
|
+
Object.defineProperty(exports, "PluginType", { enumerable: true, get: function () { return api_core_1.PluginType; } });
|
|
11
|
+
/**
|
|
12
|
+
* Pipeline trigger behavior.
|
|
13
|
+
*
|
|
14
|
+
* @property NONE - Manual trigger only, pipeline does not start automatically
|
|
15
|
+
* @property AUTO - Automatic trigger on source changes (S3/GitHub: polling, CodeStar: push-based webhook)
|
|
16
|
+
*/
|
|
17
|
+
exports.TriggerType = {
|
|
18
|
+
NONE: 'NONE',
|
|
19
|
+
/** Automatic trigger on source changes. Uses polling for S3/GitHub, push-based webhook for CodeStar. */
|
|
20
|
+
AUTO: 'AUTO',
|
|
21
|
+
/** Scheduled trigger via EventBridge rule. Requires a cron expression in the source options. */
|
|
22
|
+
SCHEDULE: 'SCHEDULE',
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Constants for metadata keys to avoid string typos.
|
|
26
|
+
*
|
|
27
|
+
* Key format: `aws:cdk:{namespace}:{property}` (all lowercase).
|
|
28
|
+
* These match the keys produced by `getCustomKey(namespace, property)`
|
|
29
|
+
* and looked up by `buildConfigFromMetadata`.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```typescript
|
|
33
|
+
* const metadata = {
|
|
34
|
+
* [MetadataKeys.SELF_MUTATION]: true,
|
|
35
|
+
* [MetadataKeys.PUBLISH_ASSETS_IN_PARALLEL]: true
|
|
36
|
+
* };
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
exports.MetadataKeys = {
|
|
40
|
+
// ── CodePipeline (namespace: pipelines:codepipeline) ──
|
|
41
|
+
SELF_MUTATION: 'aws:cdk:pipelines:codepipeline:selfmutation',
|
|
42
|
+
CROSS_ACCOUNT_KEYS: 'aws:cdk:pipelines:codepipeline:crossaccountkeys',
|
|
43
|
+
DOCKER_ENABLED_FOR_SELF_MUTATION: 'aws:cdk:pipelines:codepipeline:dockerenabledforselfmutation',
|
|
44
|
+
DOCKER_ENABLED_FOR_SYNTH: 'aws:cdk:pipelines:codepipeline:dockerenabledforsynth',
|
|
45
|
+
ENABLE_KEY_ROTATION: 'aws:cdk:pipelines:codepipeline:enablekeyrotation',
|
|
46
|
+
PUBLISH_ASSETS_IN_PARALLEL: 'aws:cdk:pipelines:codepipeline:publishassetsinparallel',
|
|
47
|
+
REUSE_CROSS_REGION_SUPPORT_STACKS: 'aws:cdk:pipelines:codepipeline:reusecrossregionsupportstacks',
|
|
48
|
+
USE_CHANGE_SETS: 'aws:cdk:pipelines:codepipeline:usechangesets',
|
|
49
|
+
USE_PIPELINE_ROLE_FOR_ACTIONS: 'aws:cdk:pipelines:codepipeline:usepipelineroleforactions',
|
|
50
|
+
ARTIFACT_BUCKET: 'aws:cdk:pipelines:codepipeline:artifactbucket',
|
|
51
|
+
ASSET_PUBLISHING_CODE_BUILD_DEFAULTS: 'aws:cdk:pipelines:codepipeline:assetpublishingcodebuilddefaults',
|
|
52
|
+
CDK_ASSETS_CLI_VERSION: 'aws:cdk:pipelines:codepipeline:cdkassetscliversion',
|
|
53
|
+
CLI_VERSION: 'aws:cdk:pipelines:codepipeline:cliversion',
|
|
54
|
+
CODE_BUILD_DEFAULTS: 'aws:cdk:pipelines:codepipeline:codebuilddefaults',
|
|
55
|
+
CODE_PIPELINE: 'aws:cdk:pipelines:codepipeline:codepipeline',
|
|
56
|
+
CROSS_REGION_REPLICATION_BUCKETS: 'aws:cdk:pipelines:codepipeline:crossregionreplicationbuckets',
|
|
57
|
+
DOCKER_CREDENTIALS: 'aws:cdk:pipelines:codepipeline:dockercredentials',
|
|
58
|
+
PIPELINE_NAME: 'aws:cdk:pipelines:codepipeline:pipelinename',
|
|
59
|
+
PIPELINE_TYPE: 'aws:cdk:pipelines:codepipeline:pipelinetype',
|
|
60
|
+
PIPELINE_ROLE: 'aws:cdk:pipelines:codepipeline:role',
|
|
61
|
+
SELF_MUTATION_CODE_BUILD_DEFAULTS: 'aws:cdk:pipelines:codepipeline:selfmutationcodebuilddefaults',
|
|
62
|
+
SYNTH: 'aws:cdk:pipelines:codepipeline:synth',
|
|
63
|
+
SYNTH_CODE_BUILD_DEFAULTS: 'aws:cdk:pipelines:codepipeline:synthcodebuilddefaults',
|
|
64
|
+
// ── CodeBuildStep (namespace: pipelines:codebuildstep) ──
|
|
65
|
+
ACTION_ROLE: 'aws:cdk:pipelines:codebuildstep:actionrole',
|
|
66
|
+
ADDITIONAL_INPUTS: 'aws:cdk:pipelines:codebuildstep:additionalinputs',
|
|
67
|
+
BUILD_ENVIRONMENT: 'aws:cdk:pipelines:codebuildstep:buildenvironment',
|
|
68
|
+
CACHE: 'aws:cdk:pipelines:codebuildstep:cache',
|
|
69
|
+
COMMANDS: 'aws:cdk:pipelines:codebuildstep:commands',
|
|
70
|
+
CODE_BUILD_ENV: 'aws:cdk:pipelines:codebuildstep:env',
|
|
71
|
+
ENV_FROM_CFN_OUTPUTS: 'aws:cdk:pipelines:codebuildstep:envfromcfnoutputs',
|
|
72
|
+
FILE_SYSTEM_LOCATIONS: 'aws:cdk:pipelines:codebuildstep:filesystemlocations',
|
|
73
|
+
INPUT: 'aws:cdk:pipelines:codebuildstep:input',
|
|
74
|
+
INSTALL_COMMANDS: 'aws:cdk:pipelines:codebuildstep:installcommands',
|
|
75
|
+
LOGGING: 'aws:cdk:pipelines:codebuildstep:logging',
|
|
76
|
+
PARTIAL_BUILD_SPEC: 'aws:cdk:pipelines:codebuildstep:partialbuildspec',
|
|
77
|
+
PRIMARY_OUTPUT_DIRECTORY: 'aws:cdk:pipelines:codebuildstep:primaryoutputdirectory',
|
|
78
|
+
PROJECT_NAME: 'aws:cdk:pipelines:codebuildstep:projectname',
|
|
79
|
+
STEP_ROLE: 'aws:cdk:pipelines:codebuildstep:role',
|
|
80
|
+
ROLE_POLICY_STATEMENTS: 'aws:cdk:pipelines:codebuildstep:rolepolicystatements',
|
|
81
|
+
TIMEOUT: 'aws:cdk:pipelines:codebuildstep:timeout',
|
|
82
|
+
// ── ShellStep (namespace: pipelines:shellstep) ──
|
|
83
|
+
SHELL_ADDITIONAL_INPUTS: 'aws:cdk:pipelines:shellstep:additionalinputs',
|
|
84
|
+
SHELL_COMMANDS: 'aws:cdk:pipelines:shellstep:commands',
|
|
85
|
+
SHELL_ENV: 'aws:cdk:pipelines:shellstep:env',
|
|
86
|
+
SHELL_ENV_FROM_CFN_OUTPUTS: 'aws:cdk:pipelines:shellstep:envfromcfnoutputs',
|
|
87
|
+
SHELL_INPUT: 'aws:cdk:pipelines:shellstep:input',
|
|
88
|
+
SHELL_INSTALL_COMMANDS: 'aws:cdk:pipelines:shellstep:installcommands',
|
|
89
|
+
SHELL_PRIMARY_OUTPUT_DIRECTORY: 'aws:cdk:pipelines:shellstep:primaryoutputdirectory',
|
|
90
|
+
// ── BuildEnvironment (namespace: codebuild:buildenvironment) ──
|
|
91
|
+
PRIVILEGED: 'aws:cdk:codebuild:buildenvironment:privileged',
|
|
92
|
+
BUILD_IMAGE: 'aws:cdk:codebuild:buildenvironment:buildimage',
|
|
93
|
+
CERTIFICATE: 'aws:cdk:codebuild:buildenvironment:certificate',
|
|
94
|
+
COMPUTE_TYPE: 'aws:cdk:codebuild:buildenvironment:computetype',
|
|
95
|
+
DOCKER_SERVER: 'aws:cdk:codebuild:buildenvironment:dockerserver',
|
|
96
|
+
ENVIRONMENT_VARIABLES: 'aws:cdk:codebuild:buildenvironment:environmentvariables',
|
|
97
|
+
FLEET: 'aws:cdk:codebuild:buildenvironment:fleet',
|
|
98
|
+
// ── Network configuration (namespace: ec2:network) ──
|
|
99
|
+
NETWORK_TYPE: 'aws:cdk:ec2:network:type',
|
|
100
|
+
NETWORK_VPC_ID: 'aws:cdk:ec2:network:vpcid',
|
|
101
|
+
NETWORK_SUBNET_IDS: 'aws:cdk:ec2:network:subnetids',
|
|
102
|
+
NETWORK_SUBNET_TYPE: 'aws:cdk:ec2:network:subnettype',
|
|
103
|
+
NETWORK_AVAILABILITY_ZONES: 'aws:cdk:ec2:network:availabilityzones',
|
|
104
|
+
NETWORK_SUBNET_GROUP_NAME: 'aws:cdk:ec2:network:subnetgroupname',
|
|
105
|
+
NETWORK_SECURITY_GROUP_IDS: 'aws:cdk:ec2:network:securitygroupids',
|
|
106
|
+
NETWORK_TAGS: 'aws:cdk:ec2:network:tags',
|
|
107
|
+
NETWORK_VPC_NAME: 'aws:cdk:ec2:network:vpcname',
|
|
108
|
+
NETWORK_REGION: 'aws:cdk:ec2:network:region',
|
|
109
|
+
// ── IAM role configuration (namespace: iam:role) ──
|
|
110
|
+
ROLE_TYPE: 'aws:cdk:iam:role:type',
|
|
111
|
+
ROLE_ARN: 'aws:cdk:iam:role:rolearn',
|
|
112
|
+
ROLE_NAME: 'aws:cdk:iam:role:rolename',
|
|
113
|
+
ROLE_MUTABLE: 'aws:cdk:iam:role:mutable',
|
|
114
|
+
// ── Security group configuration (namespace: ec2:securitygroup) ──
|
|
115
|
+
SECURITY_GROUP_TYPE: 'aws:cdk:ec2:securitygroup:type',
|
|
116
|
+
SECURITY_GROUP_IDS: 'aws:cdk:ec2:securitygroup:securitygroupids',
|
|
117
|
+
SECURITY_GROUP_MUTABLE: 'aws:cdk:ec2:securitygroup:mutable',
|
|
118
|
+
SECURITY_GROUP_NAME: 'aws:cdk:ec2:securitygroup:securitygroupname',
|
|
119
|
+
SECURITY_GROUP_VPC_ID: 'aws:cdk:ec2:securitygroup:vpcid',
|
|
120
|
+
// ── Notifications (namespace: notifications) ──
|
|
121
|
+
NOTIFICATION_TOPIC_ARN: 'aws:cdk:notifications:topic:arn',
|
|
122
|
+
NOTIFICATION_EVENTS: 'aws:cdk:notifications:events',
|
|
123
|
+
// ── Custom build keys (namespace: build — not wired into NAMESPACE_KEY_MAP) ──
|
|
124
|
+
BUILD_PARALLEL: 'aws:cdk:build:parallel',
|
|
125
|
+
BUILD_CACHE: 'aws:cdk:build:cache',
|
|
126
|
+
BUILD_TIMEOUT: 'aws:cdk:build:timeout',
|
|
127
|
+
// ── Pipeline operations ──
|
|
128
|
+
ENABLE_EXECUTION_EVENTS: 'aws:cdk:operations:executionevents',
|
|
129
|
+
ENABLE_METRICS: 'aws:cdk:operations:metrics',
|
|
130
|
+
ARTIFACT_RETENTION_DAYS: 'aws:cdk:operations:artifactretentiondays',
|
|
131
|
+
PIPELINE_VARIABLES: 'aws:cdk:operations:variables',
|
|
132
|
+
KMS_KEY_ARN: 'aws:cdk:encryption:kmskeyarn',
|
|
133
|
+
};
|
|
134
|
+
/**
|
|
135
|
+
* Prefix for AWS CDK metadata keys.
|
|
136
|
+
* Keys with this prefix are handled by the metadata extraction functions
|
|
137
|
+
* (metadataForCodePipeline, etc.) and should NOT be passed as CodeBuild environment variables.
|
|
138
|
+
*/
|
|
139
|
+
exports.CDK_METADATA_PREFIX = 'aws:cdk:';
|
|
140
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtdHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29yZS9waXBlbGluZS10eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7O0FBSXRDLHVEQUF1RDtBQUN2RCx1REFBbUc7QUFBMUYsMEdBQUEsY0FBYyxPQUFBO0FBQUUsdUdBQUEsV0FBVyxPQUFBO0FBQUUsc0dBQUEsVUFBVSxPQUFBO0FBRWhEOzs7OztHQUtHO0FBQ1UsUUFBQSxXQUFXLEdBQUc7SUFDekIsSUFBSSxFQUFFLE1BQU07SUFDWix3R0FBd0c7SUFDeEcsSUFBSSxFQUFFLE1BQU07SUFDWixnR0FBZ0c7SUFDaEcsUUFBUSxFQUFFLFVBQVU7Q0FDWixDQUFDO0FBY1g7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDVSxRQUFBLFlBQVksR0FBRztJQUMxQix5REFBeUQ7SUFDekQsYUFBYSxFQUFFLDZDQUE2QztJQUM1RCxrQkFBa0IsRUFBRSxpREFBaUQ7SUFDckUsZ0NBQWdDLEVBQUUsNkRBQTZEO0lBQy9GLHdCQUF3QixFQUFFLHNEQUFzRDtJQUNoRixtQkFBbUIsRUFBRSxrREFBa0Q7SUFDdkUsMEJBQTBCLEVBQUUsd0RBQXdEO0lBQ3BGLGlDQUFpQyxFQUFFLDhEQUE4RDtJQUNqRyxlQUFlLEVBQUUsOENBQThDO0lBQy9ELDZCQUE2QixFQUFFLDBEQUEwRDtJQUN6RixlQUFlLEVBQUUsK0NBQStDO0lBQ2hFLG9DQUFvQyxFQUFFLGlFQUFpRTtJQUN2RyxzQkFBc0IsRUFBRSxvREFBb0Q7SUFDNUUsV0FBVyxFQUFFLDJDQUEyQztJQUN4RCxtQkFBbUIsRUFBRSxrREFBa0Q7SUFDdkUsYUFBYSxFQUFFLDZDQUE2QztJQUM1RCxnQ0FBZ0MsRUFBRSw4REFBOEQ7SUFDaEcsa0JBQWtCLEVBQUUsa0RBQWtEO0lBQ3RFLGFBQWEsRUFBRSw2Q0FBNkM7SUFDNUQsYUFBYSxFQUFFLDZDQUE2QztJQUM1RCxhQUFhLEVBQUUscUNBQXFDO0lBQ3BELGlDQUFpQyxFQUFFLDhEQUE4RDtJQUNqRyxLQUFLLEVBQUUsc0NBQXNDO0lBQzdDLHlCQUF5QixFQUFFLHVEQUF1RDtJQUVsRiwyREFBMkQ7SUFDM0QsV0FBVyxFQUFFLDRDQUE0QztJQUN6RCxpQkFBaUIsRUFBRSxrREFBa0Q7SUFDckUsaUJBQWlCLEVBQUUsa0RBQWtEO0lBQ3JFLEtBQUssRUFBRSx1Q0FBdUM7SUFDOUMsUUFBUSxFQUFFLDBDQUEwQztJQUNwRCxjQUFjLEVBQUUscUNBQXFDO0lBQ3JELG9CQUFvQixFQUFFLG1EQUFtRDtJQUN6RSxxQkFBcUIsRUFBRSxxREFBcUQ7SUFDNUUsS0FBSyxFQUFFLHVDQUF1QztJQUM5QyxnQkFBZ0IsRUFBRSxpREFBaUQ7SUFDbkUsT0FBTyxFQUFFLHlDQUF5QztJQUNsRCxrQkFBa0IsRUFBRSxrREFBa0Q7SUFDdEUsd0JBQXdCLEVBQUUsd0RBQXdEO0lBQ2xGLFlBQVksRUFBRSw2Q0FBNkM7SUFDM0QsU0FBUyxFQUFFLHNDQUFzQztJQUNqRCxzQkFBc0IsRUFBRSxzREFBc0Q7SUFDOUUsT0FBTyxFQUFFLHlDQUF5QztJQUVsRCxtREFBbUQ7SUFDbkQsdUJBQXVCLEVBQUUsOENBQThDO0lBQ3ZFLGNBQWMsRUFBRSxzQ0FBc0M7SUFDdEQsU0FBUyxFQUFFLGlDQUFpQztJQUM1QywwQkFBMEIsRUFBRSwrQ0FBK0M7SUFDM0UsV0FBVyxFQUFFLG1DQUFtQztJQUNoRCxzQkFBc0IsRUFBRSw2Q0FBNkM7SUFDckUsOEJBQThCLEVBQUUsb0RBQW9EO0lBRXBGLGlFQUFpRTtJQUNqRSxVQUFVLEVBQUUsK0NBQStDO0lBQzNELFdBQVcsRUFBRSwrQ0FBK0M7SUFDNUQsV0FBVyxFQUFFLGdEQUFnRDtJQUM3RCxZQUFZLEVBQUUsZ0RBQWdEO0lBQzlELGFBQWEsRUFBRSxpREFBaUQ7SUFDaEUscUJBQXFCLEVBQUUseURBQXlEO0lBQ2hGLEtBQUssRUFBRSwwQ0FBMEM7SUFFakQsdURBQXVEO0lBQ3ZELFlBQVksRUFBRSwwQkFBMEI7SUFDeEMsY0FBYyxFQUFFLDJCQUEyQjtJQUMzQyxrQkFBa0IsRUFBRSwrQkFBK0I7SUFDbkQsbUJBQW1CLEVBQUUsZ0NBQWdDO0lBQ3JELDBCQUEwQixFQUFFLHVDQUF1QztJQUNuRSx5QkFBeUIsRUFBRSxxQ0FBcUM7SUFDaEUsMEJBQTBCLEVBQUUsc0NBQXNDO0lBQ2xFLFlBQVksRUFBRSwwQkFBMEI7SUFDeEMsZ0JBQWdCLEVBQUUsNkJBQTZCO0lBQy9DLGNBQWMsRUFBRSw0QkFBNEI7SUFFNUMscURBQXFEO0lBQ3JELFNBQVMsRUFBRSx1QkFBdUI7SUFDbEMsUUFBUSxFQUFFLDBCQUEwQjtJQUNwQyxTQUFTLEVBQUUsMkJBQTJCO0lBQ3RDLFlBQVksRUFBRSwwQkFBMEI7SUFFeEMsb0VBQW9FO0lBQ3BFLG1CQUFtQixFQUFFLGdDQUFnQztJQUNyRCxrQkFBa0IsRUFBRSw0Q0FBNEM7SUFDaEUsc0JBQXNCLEVBQUUsbUNBQW1DO0lBQzNELG1CQUFtQixFQUFFLDZDQUE2QztJQUNsRSxxQkFBcUIsRUFBRSxpQ0FBaUM7SUFFeEQsaURBQWlEO0lBQ2pELHNCQUFzQixFQUFFLGlDQUFpQztJQUN6RCxtQkFBbUIsRUFBRSw4QkFBOEI7SUFFbkQsZ0ZBQWdGO0lBQ2hGLGNBQWMsRUFBRSx3QkFBd0I7SUFDeEMsV0FBVyxFQUFFLHFCQUFxQjtJQUNsQyxhQUFhLEVBQUUsdUJBQXVCO0lBRXRDLDRCQUE0QjtJQUM1Qix1QkFBdUIsRUFBRSxvQ0FBb0M7SUFDN0QsY0FBYyxFQUFFLDRCQUE0QjtJQUM1Qyx1QkFBdUIsRUFBRSwwQ0FBMEM7SUFDbkUsa0JBQWtCLEVBQUUsOEJBQThCO0lBQ2xELFdBQVcsRUFBRSw4QkFBOEI7Q0FDbkMsQ0FBQztBQU9YOzs7O0dBSUc7QUFDVSxRQUFBLG1CQUFtQixHQUFHLFVBQVUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IENvZGVDb21taXRTb3VyY2VDb25maWcsIENvZGVTdGFyU291cmNlQ29uZmlnLCBHaXRIdWJTb3VyY2VDb25maWcsIFMzU291cmNlQ29uZmlnIH0gZnJvbSAnLi4vcGlwZWxpbmUvc291cmNlLXR5cGVzJztcblxuLy8gUmUtZXhwb3J0IHNoYXJlZCB0eXBlcyBmcm9tIGFwaS1jb3JlIGZvciBjb252ZW5pZW5jZVxuZXhwb3J0IHsgQWNjZXNzTW9kaWZpZXIsIENvbXB1dGVUeXBlLCBQbHVnaW5UeXBlLCBNZXRhRGF0YVR5cGUgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5cbi8qKlxuICogUGlwZWxpbmUgdHJpZ2dlciBiZWhhdmlvci5cbiAqXG4gKiBAcHJvcGVydHkgTk9ORSAtIE1hbnVhbCB0cmlnZ2VyIG9ubHksIHBpcGVsaW5lIGRvZXMgbm90IHN0YXJ0IGF1dG9tYXRpY2FsbHlcbiAqIEBwcm9wZXJ0eSBBVVRPIC0gQXV0b21hdGljIHRyaWdnZXIgb24gc291cmNlIGNoYW5nZXMgKFMzL0dpdEh1YjogcG9sbGluZywgQ29kZVN0YXI6IHB1c2gtYmFzZWQgd2ViaG9vaylcbiAqL1xuZXhwb3J0IGNvbnN0IFRyaWdnZXJUeXBlID0ge1xuICBOT05FOiAnTk9ORScsXG4gIC8qKiBBdXRvbWF0aWMgdHJpZ2dlciBvbiBzb3VyY2UgY2hhbmdlcy4gVXNlcyBwb2xsaW5nIGZvciBTMy9HaXRIdWIsIHB1c2gtYmFzZWQgd2ViaG9vayBmb3IgQ29kZVN0YXIuICovXG4gIEFVVE86ICdBVVRPJyxcbiAgLyoqIFNjaGVkdWxlZCB0cmlnZ2VyIHZpYSBFdmVudEJyaWRnZSBydWxlLiBSZXF1aXJlcyBhIGNyb24gZXhwcmVzc2lvbiBpbiB0aGUgc291cmNlIG9wdGlvbnMuICovXG4gIFNDSEVEVUxFOiAnU0NIRURVTEUnLFxufSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFRyaWdnZXJUeXBlID0gKHR5cGVvZiBUcmlnZ2VyVHlwZSlba2V5b2YgdHlwZW9mIFRyaWdnZXJUeXBlXTtcblxuLyoqXG4gKiBVbmlvbiB0eXBlIG9mIGFsbCBzdXBwb3J0ZWQgcGlwZWxpbmUgc291cmNlIHR5cGVzXG4gKlxuICogU3VwcG9ydGVkIHNvdXJjZXM6XG4gKiAtIFMzU291cmNlQ29uZmlnOiBTb3VyY2UgY29kZSBmcm9tIFMzIGJ1Y2tldFxuICogLSBHaXRIdWJTb3VyY2VDb25maWc6IFNvdXJjZSBjb2RlIGZyb20gR2l0SHViIHJlcG9zaXRvcnlcbiAqIC0gQ29kZVN0YXJTb3VyY2VDb25maWc6IFNvdXJjZSBjb2RlIHZpYSBDb2RlU3RhciBjb25uZWN0aW9uIChHaXRIdWIsIEJpdGJ1Y2tldCwgR2l0TGFiKVxuICogLSBDb2RlQ29tbWl0U291cmNlQ29uZmlnOiBTb3VyY2UgY29kZSBmcm9tIEFXUyBDb2RlQ29tbWl0IHJlcG9zaXRvcnlcbiAqL1xuZXhwb3J0IHR5cGUgU291cmNlVHlwZSA9IFMzU291cmNlQ29uZmlnIHwgR2l0SHViU291cmNlQ29uZmlnIHwgQ29kZVN0YXJTb3VyY2VDb25maWcgfCBDb2RlQ29tbWl0U291cmNlQ29uZmlnO1xuXG4vKipcbiAqIENvbnN0YW50cyBmb3IgbWV0YWRhdGEga2V5cyB0byBhdm9pZCBzdHJpbmcgdHlwb3MuXG4gKlxuICogS2V5IGZvcm1hdDogYGF3czpjZGs6e25hbWVzcGFjZX06e3Byb3BlcnR5fWAgKGFsbCBsb3dlcmNhc2UpLlxuICogVGhlc2UgbWF0Y2ggdGhlIGtleXMgcHJvZHVjZWQgYnkgYGdldEN1c3RvbUtleShuYW1lc3BhY2UsIHByb3BlcnR5KWBcbiAqIGFuZCBsb29rZWQgdXAgYnkgYGJ1aWxkQ29uZmlnRnJvbU1ldGFkYXRhYC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgbWV0YWRhdGEgPSB7XG4gKiAgIFtNZXRhZGF0YUtleXMuU0VMRl9NVVRBVElPTl06IHRydWUsXG4gKiAgIFtNZXRhZGF0YUtleXMuUFVCTElTSF9BU1NFVFNfSU5fUEFSQUxMRUxdOiB0cnVlXG4gKiB9O1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBNZXRhZGF0YUtleXMgPSB7XG4gIC8vIOKUgOKUgCBDb2RlUGlwZWxpbmUgKG5hbWVzcGFjZTogcGlwZWxpbmVzOmNvZGVwaXBlbGluZSkg4pSA4pSAXG4gIFNFTEZfTVVUQVRJT046ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6c2VsZm11dGF0aW9uJyxcbiAgQ1JPU1NfQUNDT1VOVF9LRVlTOiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZXBpcGVsaW5lOmNyb3NzYWNjb3VudGtleXMnLFxuICBET0NLRVJfRU5BQkxFRF9GT1JfU0VMRl9NVVRBVElPTjogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTpkb2NrZXJlbmFibGVkZm9yc2VsZm11dGF0aW9uJyxcbiAgRE9DS0VSX0VOQUJMRURfRk9SX1NZTlRIOiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZXBpcGVsaW5lOmRvY2tlcmVuYWJsZWRmb3JzeW50aCcsXG4gIEVOQUJMRV9LRVlfUk9UQVRJT046ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6ZW5hYmxla2V5cm90YXRpb24nLFxuICBQVUJMSVNIX0FTU0VUU19JTl9QQVJBTExFTDogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTpwdWJsaXNoYXNzZXRzaW5wYXJhbGxlbCcsXG4gIFJFVVNFX0NST1NTX1JFR0lPTl9TVVBQT1JUX1NUQUNLUzogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTpyZXVzZWNyb3NzcmVnaW9uc3VwcG9ydHN0YWNrcycsXG4gIFVTRV9DSEFOR0VfU0VUUzogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTp1c2VjaGFuZ2VzZXRzJyxcbiAgVVNFX1BJUEVMSU5FX1JPTEVfRk9SX0FDVElPTlM6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6dXNlcGlwZWxpbmVyb2xlZm9yYWN0aW9ucycsXG4gIEFSVElGQUNUX0JVQ0tFVDogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTphcnRpZmFjdGJ1Y2tldCcsXG4gIEFTU0VUX1BVQkxJU0hJTkdfQ09ERV9CVUlMRF9ERUZBVUxUUzogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTphc3NldHB1Ymxpc2hpbmdjb2RlYnVpbGRkZWZhdWx0cycsXG4gIENES19BU1NFVFNfQ0xJX1ZFUlNJT046ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6Y2RrYXNzZXRzY2xpdmVyc2lvbicsXG4gIENMSV9WRVJTSU9OOiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZXBpcGVsaW5lOmNsaXZlcnNpb24nLFxuICBDT0RFX0JVSUxEX0RFRkFVTFRTOiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZXBpcGVsaW5lOmNvZGVidWlsZGRlZmF1bHRzJyxcbiAgQ09ERV9QSVBFTElORTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTpjb2RlcGlwZWxpbmUnLFxuICBDUk9TU19SRUdJT05fUkVQTElDQVRJT05fQlVDS0VUUzogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTpjcm9zc3JlZ2lvbnJlcGxpY2F0aW9uYnVja2V0cycsXG4gIERPQ0tFUl9DUkVERU5USUFMUzogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTpkb2NrZXJjcmVkZW50aWFscycsXG4gIFBJUEVMSU5FX05BTUU6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6cGlwZWxpbmVuYW1lJyxcbiAgUElQRUxJTkVfVFlQRTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTpwaXBlbGluZXR5cGUnLFxuICBQSVBFTElORV9ST0xFOiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZXBpcGVsaW5lOnJvbGUnLFxuICBTRUxGX01VVEFUSU9OX0NPREVfQlVJTERfREVGQVVMVFM6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6c2VsZm11dGF0aW9uY29kZWJ1aWxkZGVmYXVsdHMnLFxuICBTWU5USDogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTpzeW50aCcsXG4gIFNZTlRIX0NPREVfQlVJTERfREVGQVVMVFM6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6c3ludGhjb2RlYnVpbGRkZWZhdWx0cycsXG5cbiAgLy8g4pSA4pSAIENvZGVCdWlsZFN0ZXAgKG5hbWVzcGFjZTogcGlwZWxpbmVzOmNvZGVidWlsZHN0ZXApIOKUgOKUgFxuICBBQ1RJT05fUk9MRTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVidWlsZHN0ZXA6YWN0aW9ucm9sZScsXG4gIEFERElUSU9OQUxfSU5QVVRTOiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZWJ1aWxkc3RlcDphZGRpdGlvbmFsaW5wdXRzJyxcbiAgQlVJTERfRU5WSVJPTk1FTlQ6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOmJ1aWxkZW52aXJvbm1lbnQnLFxuICBDQUNIRTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVidWlsZHN0ZXA6Y2FjaGUnLFxuICBDT01NQU5EUzogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVidWlsZHN0ZXA6Y29tbWFuZHMnLFxuICBDT0RFX0JVSUxEX0VOVjogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVidWlsZHN0ZXA6ZW52JyxcbiAgRU5WX0ZST01fQ0ZOX09VVFBVVFM6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOmVudmZyb21jZm5vdXRwdXRzJyxcbiAgRklMRV9TWVNURU1fTE9DQVRJT05TOiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZWJ1aWxkc3RlcDpmaWxlc3lzdGVtbG9jYXRpb25zJyxcbiAgSU5QVVQ6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOmlucHV0JyxcbiAgSU5TVEFMTF9DT01NQU5EUzogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVidWlsZHN0ZXA6aW5zdGFsbGNvbW1hbmRzJyxcbiAgTE9HR0lORzogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVidWlsZHN0ZXA6bG9nZ2luZycsXG4gIFBBUlRJQUxfQlVJTERfU1BFQzogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVidWlsZHN0ZXA6cGFydGlhbGJ1aWxkc3BlYycsXG4gIFBSSU1BUllfT1VUUFVUX0RJUkVDVE9SWTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVidWlsZHN0ZXA6cHJpbWFyeW91dHB1dGRpcmVjdG9yeScsXG4gIFBST0pFQ1RfTkFNRTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVidWlsZHN0ZXA6cHJvamVjdG5hbWUnLFxuICBTVEVQX1JPTEU6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOnJvbGUnLFxuICBST0xFX1BPTElDWV9TVEFURU1FTlRTOiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZWJ1aWxkc3RlcDpyb2xlcG9saWN5c3RhdGVtZW50cycsXG4gIFRJTUVPVVQ6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOnRpbWVvdXQnLFxuXG4gIC8vIOKUgOKUgCBTaGVsbFN0ZXAgKG5hbWVzcGFjZTogcGlwZWxpbmVzOnNoZWxsc3RlcCkg4pSA4pSAXG4gIFNIRUxMX0FERElUSU9OQUxfSU5QVVRTOiAnYXdzOmNkazpwaXBlbGluZXM6c2hlbGxzdGVwOmFkZGl0aW9uYWxpbnB1dHMnLFxuICBTSEVMTF9DT01NQU5EUzogJ2F3czpjZGs6cGlwZWxpbmVzOnNoZWxsc3RlcDpjb21tYW5kcycsXG4gIFNIRUxMX0VOVjogJ2F3czpjZGs6cGlwZWxpbmVzOnNoZWxsc3RlcDplbnYnLFxuICBTSEVMTF9FTlZfRlJPTV9DRk5fT1VUUFVUUzogJ2F3czpjZGs6cGlwZWxpbmVzOnNoZWxsc3RlcDplbnZmcm9tY2Zub3V0cHV0cycsXG4gIFNIRUxMX0lOUFVUOiAnYXdzOmNkazpwaXBlbGluZXM6c2hlbGxzdGVwOmlucHV0JyxcbiAgU0hFTExfSU5TVEFMTF9DT01NQU5EUzogJ2F3czpjZGs6cGlwZWxpbmVzOnNoZWxsc3RlcDppbnN0YWxsY29tbWFuZHMnLFxuICBTSEVMTF9QUklNQVJZX09VVFBVVF9ESVJFQ1RPUlk6ICdhd3M6Y2RrOnBpcGVsaW5lczpzaGVsbHN0ZXA6cHJpbWFyeW91dHB1dGRpcmVjdG9yeScsXG5cbiAgLy8g4pSA4pSAIEJ1aWxkRW52aXJvbm1lbnQgKG5hbWVzcGFjZTogY29kZWJ1aWxkOmJ1aWxkZW52aXJvbm1lbnQpIOKUgOKUgFxuICBQUklWSUxFR0VEOiAnYXdzOmNkazpjb2RlYnVpbGQ6YnVpbGRlbnZpcm9ubWVudDpwcml2aWxlZ2VkJyxcbiAgQlVJTERfSU1BR0U6ICdhd3M6Y2RrOmNvZGVidWlsZDpidWlsZGVudmlyb25tZW50OmJ1aWxkaW1hZ2UnLFxuICBDRVJUSUZJQ0FURTogJ2F3czpjZGs6Y29kZWJ1aWxkOmJ1aWxkZW52aXJvbm1lbnQ6Y2VydGlmaWNhdGUnLFxuICBDT01QVVRFX1RZUEU6ICdhd3M6Y2RrOmNvZGVidWlsZDpidWlsZGVudmlyb25tZW50OmNvbXB1dGV0eXBlJyxcbiAgRE9DS0VSX1NFUlZFUjogJ2F3czpjZGs6Y29kZWJ1aWxkOmJ1aWxkZW52aXJvbm1lbnQ6ZG9ja2Vyc2VydmVyJyxcbiAgRU5WSVJPTk1FTlRfVkFSSUFCTEVTOiAnYXdzOmNkazpjb2RlYnVpbGQ6YnVpbGRlbnZpcm9ubWVudDplbnZpcm9ubWVudHZhcmlhYmxlcycsXG4gIEZMRUVUOiAnYXdzOmNkazpjb2RlYnVpbGQ6YnVpbGRlbnZpcm9ubWVudDpmbGVldCcsXG5cbiAgLy8g4pSA4pSAIE5ldHdvcmsgY29uZmlndXJhdGlvbiAobmFtZXNwYWNlOiBlYzI6bmV0d29yaykg4pSA4pSAXG4gIE5FVFdPUktfVFlQRTogJ2F3czpjZGs6ZWMyOm5ldHdvcms6dHlwZScsXG4gIE5FVFdPUktfVlBDX0lEOiAnYXdzOmNkazplYzI6bmV0d29yazp2cGNpZCcsXG4gIE5FVFdPUktfU1VCTkVUX0lEUzogJ2F3czpjZGs6ZWMyOm5ldHdvcms6c3VibmV0aWRzJyxcbiAgTkVUV09SS19TVUJORVRfVFlQRTogJ2F3czpjZGs6ZWMyOm5ldHdvcms6c3VibmV0dHlwZScsXG4gIE5FVFdPUktfQVZBSUxBQklMSVRZX1pPTkVTOiAnYXdzOmNkazplYzI6bmV0d29yazphdmFpbGFiaWxpdHl6b25lcycsXG4gIE5FVFdPUktfU1VCTkVUX0dST1VQX05BTUU6ICdhd3M6Y2RrOmVjMjpuZXR3b3JrOnN1Ym5ldGdyb3VwbmFtZScsXG4gIE5FVFdPUktfU0VDVVJJVFlfR1JPVVBfSURTOiAnYXdzOmNkazplYzI6bmV0d29yazpzZWN1cml0eWdyb3VwaWRzJyxcbiAgTkVUV09SS19UQUdTOiAnYXdzOmNkazplYzI6bmV0d29yazp0YWdzJyxcbiAgTkVUV09SS19WUENfTkFNRTogJ2F3czpjZGs6ZWMyOm5ldHdvcms6dnBjbmFtZScsXG4gIE5FVFdPUktfUkVHSU9OOiAnYXdzOmNkazplYzI6bmV0d29yazpyZWdpb24nLFxuXG4gIC8vIOKUgOKUgCBJQU0gcm9sZSBjb25maWd1cmF0aW9uIChuYW1lc3BhY2U6IGlhbTpyb2xlKSDilIDilIBcbiAgUk9MRV9UWVBFOiAnYXdzOmNkazppYW06cm9sZTp0eXBlJyxcbiAgUk9MRV9BUk46ICdhd3M6Y2RrOmlhbTpyb2xlOnJvbGVhcm4nLFxuICBST0xFX05BTUU6ICdhd3M6Y2RrOmlhbTpyb2xlOnJvbGVuYW1lJyxcbiAgUk9MRV9NVVRBQkxFOiAnYXdzOmNkazppYW06cm9sZTptdXRhYmxlJyxcblxuICAvLyDilIDilIAgU2VjdXJpdHkgZ3JvdXAgY29uZmlndXJhdGlvbiAobmFtZXNwYWNlOiBlYzI6c2VjdXJpdHlncm91cCkg4pSA4pSAXG4gIFNFQ1VSSVRZX0dST1VQX1RZUEU6ICdhd3M6Y2RrOmVjMjpzZWN1cml0eWdyb3VwOnR5cGUnLFxuICBTRUNVUklUWV9HUk9VUF9JRFM6ICdhd3M6Y2RrOmVjMjpzZWN1cml0eWdyb3VwOnNlY3VyaXR5Z3JvdXBpZHMnLFxuICBTRUNVUklUWV9HUk9VUF9NVVRBQkxFOiAnYXdzOmNkazplYzI6c2VjdXJpdHlncm91cDptdXRhYmxlJyxcbiAgU0VDVVJJVFlfR1JPVVBfTkFNRTogJ2F3czpjZGs6ZWMyOnNlY3VyaXR5Z3JvdXA6c2VjdXJpdHlncm91cG5hbWUnLFxuICBTRUNVUklUWV9HUk9VUF9WUENfSUQ6ICdhd3M6Y2RrOmVjMjpzZWN1cml0eWdyb3VwOnZwY2lkJyxcblxuICAvLyDilIDilIAgTm90aWZpY2F0aW9ucyAobmFtZXNwYWNlOiBub3RpZmljYXRpb25zKSDilIDilIBcbiAgTk9USUZJQ0FUSU9OX1RPUElDX0FSTjogJ2F3czpjZGs6bm90aWZpY2F0aW9uczp0b3BpYzphcm4nLFxuICBOT1RJRklDQVRJT05fRVZFTlRTOiAnYXdzOmNkazpub3RpZmljYXRpb25zOmV2ZW50cycsXG5cbiAgLy8g4pSA4pSAIEN1c3RvbSBidWlsZCBrZXlzIChuYW1lc3BhY2U6IGJ1aWxkIOKAlCBub3Qgd2lyZWQgaW50byBOQU1FU1BBQ0VfS0VZX01BUCkg4pSA4pSAXG4gIEJVSUxEX1BBUkFMTEVMOiAnYXdzOmNkazpidWlsZDpwYXJhbGxlbCcsXG4gIEJVSUxEX0NBQ0hFOiAnYXdzOmNkazpidWlsZDpjYWNoZScsXG4gIEJVSUxEX1RJTUVPVVQ6ICdhd3M6Y2RrOmJ1aWxkOnRpbWVvdXQnLFxuXG4gIC8vIOKUgOKUgCBQaXBlbGluZSBvcGVyYXRpb25zIOKUgOKUgFxuICBFTkFCTEVfRVhFQ1VUSU9OX0VWRU5UUzogJ2F3czpjZGs6b3BlcmF0aW9uczpleGVjdXRpb25ldmVudHMnLFxuICBFTkFCTEVfTUVUUklDUzogJ2F3czpjZGs6b3BlcmF0aW9uczptZXRyaWNzJyxcbiAgQVJUSUZBQ1RfUkVURU5USU9OX0RBWVM6ICdhd3M6Y2RrOm9wZXJhdGlvbnM6YXJ0aWZhY3RyZXRlbnRpb25kYXlzJyxcbiAgUElQRUxJTkVfVkFSSUFCTEVTOiAnYXdzOmNkazpvcGVyYXRpb25zOnZhcmlhYmxlcycsXG4gIEtNU19LRVlfQVJOOiAnYXdzOmNkazplbmNyeXB0aW9uOmttc2tleWFybicsXG59IGFzIGNvbnN0O1xuXG4vKipcbiAqIFR5cGUgZm9yIE1ldGFkYXRhS2V5cyB2YWx1ZXNcbiAqL1xuZXhwb3J0IHR5cGUgTWV0YWRhdGFLZXkgPSB0eXBlb2YgTWV0YWRhdGFLZXlzW2tleW9mIHR5cGVvZiBNZXRhZGF0YUtleXNdO1xuXG4vKipcbiAqIFByZWZpeCBmb3IgQVdTIENESyBtZXRhZGF0YSBrZXlzLlxuICogS2V5cyB3aXRoIHRoaXMgcHJlZml4IGFyZSBoYW5kbGVkIGJ5IHRoZSBtZXRhZGF0YSBleHRyYWN0aW9uIGZ1bmN0aW9uc1xuICogKG1ldGFkYXRhRm9yQ29kZVBpcGVsaW5lLCBldGMuKSBhbmQgc2hvdWxkIE5PVCBiZSBwYXNzZWQgYXMgQ29kZUJ1aWxkIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IENES19NRVRBREFUQV9QUkVGSVggPSAnYXdzOmNkazonOyJdfQ==
|