@fjall/components-infrastructure 0.1.10 → 0.1.16
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/dist/lib/app.d.ts +2 -1
- package/dist/lib/app.js +4 -2
- package/dist/lib/config/aws/accountId.d.ts +6 -0
- package/dist/lib/config/aws/accountId.js +33 -0
- package/dist/lib/config/aws/cloudTrail.d.ts +10 -0
- package/dist/lib/config/aws/cloudTrail.js +22 -0
- package/dist/lib/config/aws/costAllocationTags.d.ts +2 -3
- package/dist/lib/config/aws/costAllocationTags.js +6 -5
- package/dist/lib/config/aws/ecrDefaultImage.d.ts +11 -0
- package/dist/lib/config/aws/ecrDefaultImage.js +127 -0
- package/dist/lib/config/aws/eventBus.d.ts +7 -0
- package/dist/lib/config/aws/eventBus.js +24 -0
- package/dist/lib/config/aws/identityCenter.d.ts +11 -3
- package/dist/lib/config/aws/identityCenter.js +24 -29
- package/dist/lib/config/aws/identityCenterUser.d.ts +16 -0
- package/dist/lib/config/aws/identityCenterUser.js +125 -0
- package/dist/lib/config/aws/index.d.ts +8 -4
- package/dist/lib/config/aws/index.js +9 -5
- package/dist/lib/config/aws/ipam.d.ts +2 -2
- package/dist/lib/config/aws/ipam.js +25 -7
- package/dist/lib/config/aws/ipamDelegateAdmin.d.ts +4 -5
- package/dist/lib/config/aws/ipamDelegateAdmin.js +9 -13
- package/dist/lib/config/aws/ipamPoolId.d.ts +10 -0
- package/dist/lib/config/aws/ipamPoolId.js +38 -0
- package/dist/lib/config/aws/organisation.d.ts +28 -0
- package/dist/lib/config/aws/organisation.js +112 -0
- package/dist/lib/config/aws/organisationId.d.ts +4 -2
- package/dist/lib/config/aws/organisationId.js +13 -7
- package/dist/lib/config/aws/ramSharing.d.ts +4 -0
- package/dist/lib/config/aws/ramSharing.js +35 -0
- package/dist/lib/patterns/aws/basicApp.d.ts +5 -4
- package/dist/lib/patterns/aws/basicApp.js +18 -18
- package/dist/lib/patterns/aws/buildkite.d.ts +40 -31
- package/dist/lib/patterns/aws/buildkite.js +74 -46
- package/dist/lib/patterns/aws/freeTierApp.d.ts +47 -0
- package/dist/lib/patterns/aws/freeTierApp.js +95 -0
- package/dist/lib/patterns/aws/hostedZone.d.ts +11 -0
- package/dist/lib/patterns/aws/hostedZone.js +73 -0
- package/dist/lib/patterns/aws/index.d.ts +3 -0
- package/dist/lib/patterns/aws/index.js +4 -1
- package/dist/lib/patterns/aws/managedAccount.d.ts +13 -0
- package/dist/lib/patterns/aws/managedAccount.js +40 -0
- package/dist/lib/patterns/aws/managedOrganisation.d.ts +14 -24
- package/dist/lib/patterns/aws/managedOrganisation.js +39 -146
- package/dist/lib/patterns/aws/managedPlatform.d.ts +13 -0
- package/dist/lib/patterns/aws/managedPlatform.js +22 -0
- package/dist/lib/patterns/aws/spotInstanceApp.d.ts +47 -0
- package/dist/lib/patterns/aws/spotInstanceApp.js +95 -0
- package/dist/lib/patterns/aws/subdomainHostedZone.d.ts +9 -0
- package/dist/lib/patterns/aws/subdomainHostedZone.js +39 -0
- package/dist/lib/resources/aws/awsStack.d.ts +2 -2
- package/dist/lib/resources/aws/awsStack.js +3 -3
- package/dist/lib/resources/aws/compute/ecs.d.ts +2 -4
- package/dist/lib/resources/aws/compute/ecs.js +10 -6
- package/dist/lib/resources/aws/compute/ecsFreeTier.d.ts +76 -0
- package/dist/lib/resources/aws/compute/ecsFreeTier.js +352 -0
- package/dist/lib/resources/aws/compute/ecsSpot.d.ts +76 -0
- package/dist/lib/resources/aws/compute/ecsSpot.js +334 -0
- package/dist/lib/resources/aws/compute/index.d.ts +2 -0
- package/dist/lib/resources/aws/compute/index.js +19 -0
- package/dist/lib/resources/aws/compute/lambda.d.ts +7 -7
- package/dist/lib/resources/aws/compute/lambda.js +8 -7
- package/dist/lib/resources/aws/database/database.d.ts +16 -0
- package/dist/lib/resources/aws/database/database.js +30 -0
- package/dist/lib/resources/aws/database/databaseFreeTier.d.ts +17 -0
- package/dist/lib/resources/aws/database/databaseFreeTier.js +31 -0
- package/dist/lib/resources/aws/database/databaseInstance.d.ts +17 -0
- package/dist/lib/resources/aws/database/databaseInstance.js +32 -0
- package/dist/lib/resources/aws/database/index.d.ts +2 -0
- package/dist/lib/resources/aws/database/index.js +19 -0
- package/dist/lib/resources/aws/database/rds.d.ts +23 -0
- package/dist/lib/resources/aws/database/rds.js +130 -0
- package/dist/lib/resources/aws/database/rdsFreeTier.d.ts +36 -0
- package/dist/lib/resources/aws/database/rdsFreeTier.js +80 -0
- package/dist/lib/resources/aws/database/rdsInstance.d.ts +42 -0
- package/dist/lib/resources/aws/database/rdsInstance.js +173 -0
- package/dist/lib/resources/aws/logging/cloudTrail.d.ts +18 -0
- package/dist/lib/resources/aws/logging/cloudTrail.js +46 -0
- package/dist/lib/resources/aws/logging/logGroup.d.ts +3 -3
- package/dist/lib/resources/aws/logging/logGroup.js +3 -3
- package/dist/lib/resources/aws/networking/index.d.ts +1 -1
- package/dist/lib/resources/aws/networking/index.js +2 -2
- package/dist/lib/resources/aws/networking/ipamPool.d.ts +16 -3
- package/dist/lib/resources/aws/networking/ipamPool.js +78 -6
- package/dist/lib/resources/aws/networking/vpc.d.ts +29 -0
- package/dist/lib/resources/aws/networking/vpc.js +66 -0
- package/dist/lib/resources/aws/secrets/alias.d.ts +5 -0
- package/dist/lib/resources/aws/secrets/alias.js +13 -0
- package/dist/lib/resources/aws/secrets/index.d.ts +5 -0
- package/dist/lib/resources/aws/secrets/index.js +22 -0
- package/dist/lib/resources/aws/secrets/kms.d.ts +14 -0
- package/dist/lib/resources/aws/secrets/kms.js +34 -0
- package/dist/lib/resources/aws/secrets/parameter.d.ts +26 -0
- package/dist/lib/resources/aws/secrets/parameter.js +100 -0
- package/dist/lib/resources/aws/secrets/secret.d.ts +24 -0
- package/dist/lib/resources/aws/secrets/secret.js +53 -0
- package/dist/lib/resources/aws/storage/ecr.d.ts +12 -0
- package/dist/lib/resources/aws/storage/ecr.js +31 -0
- package/dist/lib/resources/aws/storage/index.d.ts +2 -0
- package/dist/lib/resources/aws/storage/index.js +19 -0
- package/dist/lib/resources/aws/storage/s3.d.ts +11 -0
- package/dist/lib/resources/aws/storage/s3.js +44 -0
- package/dist/lib/resources/aws/utilities/codeBuild.d.ts +15 -0
- package/dist/lib/resources/aws/utilities/codeBuild.js +28 -0
- package/dist/lib/resources/aws/utilities/customResource.js +2 -2
- package/dist/lib/types.d.ts +3 -0
- package/dist/lib/types.js +3 -0
- package/dist/lib/utils/capitalizeString.d.ts +1 -0
- package/dist/lib/utils/capitalizeString.js +8 -0
- package/dist/lib/utils/getAccountId.d.ts +1 -1
- package/dist/lib/utils/getAccountId.js +7 -5
- package/dist/lib/utils/getAsync.d.ts +10 -0
- package/dist/lib/utils/getAsync.js +37 -0
- package/dist/lib/utils/getCidr.d.ts +8 -0
- package/dist/lib/utils/getCidr.js +42 -0
- package/dist/lib/utils/getConfig.d.ts +6 -3
- package/dist/lib/utils/getConfig.js +32 -14
- package/dist/lib/utils/stripAndCamelCase.d.ts +1 -0
- package/dist/lib/utils/stripAndCamelCase.js +17 -0
- package/dist/lib/utils/usersConfig.d.ts +7 -0
- package/dist/lib/utils/usersConfig.js +18 -0
- package/package.json +7 -3
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.BuildkiteDefaultProps = void 0;
|
|
3
|
+
exports.Buildkite = exports.BuildkiteDefaultProps = void 0;
|
|
4
4
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
5
|
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
|
|
6
6
|
const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
|
|
@@ -8,9 +8,10 @@ const aws_autoscaling_1 = require("aws-cdk-lib/aws-autoscaling");
|
|
|
8
8
|
const aws_sam_1 = require("aws-cdk-lib/aws-sam");
|
|
9
9
|
const custom_resources_1 = require("aws-cdk-lib/custom-resources");
|
|
10
10
|
const aws_s3_deployment_1 = require("aws-cdk-lib/aws-s3-deployment");
|
|
11
|
-
const vpc_1 = require("../../resources/aws/
|
|
11
|
+
const vpc_1 = require("../../resources/aws/networking/vpc");
|
|
12
12
|
const iam_1 = require("../../resources/aws/iam");
|
|
13
|
-
const
|
|
13
|
+
const storage_1 = require("../../resources/aws/storage");
|
|
14
|
+
const secrets_1 = require("../../resources/aws/secrets");
|
|
14
15
|
const awsCustomResource_1 = require("../../resources/aws/utilities/awsCustomResource");
|
|
15
16
|
const tagResource_1 = require("../../utils/tagResource");
|
|
16
17
|
var agentRelease;
|
|
@@ -20,44 +21,64 @@ var agentRelease;
|
|
|
20
21
|
agentRelease["EDGE"] = "edge";
|
|
21
22
|
})(agentRelease || (agentRelease = {}));
|
|
22
23
|
exports.BuildkiteDefaultProps = {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
// Buildkite Agent Configuration
|
|
25
|
+
elasticStackVersion: "v6.30.0",
|
|
26
|
+
keyName: "",
|
|
27
|
+
buildkiteAgentRelease: agentRelease.STABLE,
|
|
28
|
+
buildkiteAgentTags: "",
|
|
29
|
+
buildkiteAgentTimestampLines: false,
|
|
30
|
+
buildkiteAgentExperiments: "",
|
|
31
|
+
buildkiteAgentScalerVersion: "1.8.0",
|
|
32
|
+
logRetentionDays: 1,
|
|
33
|
+
buildkiteAgentTracingBackend: "",
|
|
34
|
+
buildkiteAgentCancelGracePeriod: 60,
|
|
35
|
+
buildkiteTerminateInstanceAfterJob: false,
|
|
36
|
+
buildkiteAdditionalSudoPermissions: "",
|
|
37
|
+
buildkiteQueue: "default",
|
|
38
|
+
agentsPerInstance: 1,
|
|
39
|
+
bootstrapScriptUrl: "",
|
|
40
|
+
agentEnvFileUrl: "",
|
|
41
|
+
authorizedUsersUrl: "",
|
|
42
|
+
// Infrastructure
|
|
43
|
+
agentInstanceType: aws_ec2_1.InstanceType.of(aws_ec2_1.InstanceClass.M5, aws_ec2_1.InstanceSize.LARGE),
|
|
27
44
|
agentMinInstances: 0,
|
|
28
45
|
agentMaxInstances: 10,
|
|
29
|
-
|
|
30
|
-
|
|
46
|
+
agentVolumeSize: 250,
|
|
47
|
+
scalerEventSchedulePeriod: "1 minute",
|
|
48
|
+
scalerMinPollInterval: "10s",
|
|
31
49
|
spotCapacityPercentage: 75,
|
|
32
|
-
scaleInPeriod: 600,
|
|
33
|
-
instanceStorage: false,
|
|
34
|
-
instanceTerminationAfterJob: false,
|
|
35
|
-
dockerUserNamespaceRemap: true,
|
|
36
|
-
dockerExperimental: false,
|
|
37
|
-
secretsPluginEnabled: true,
|
|
38
|
-
ecrPluginEnabled: true,
|
|
39
|
-
dockerLoginPluginEnabled: true,
|
|
40
|
-
timestampLines: false,
|
|
41
|
-
gitMirrors: false,
|
|
42
50
|
scaleOutFactor: "1.0",
|
|
51
|
+
scaleInIdlePeriod: 600,
|
|
43
52
|
scaleOutWaitingForJobs: false,
|
|
44
|
-
eventScheduledPeriod: "1 minute",
|
|
45
|
-
minPollInterval: "10s",
|
|
46
|
-
agentTags: "",
|
|
47
|
-
experiments: "",
|
|
48
|
-
tracingBackend: "",
|
|
49
|
-
bootstrapScript: "",
|
|
50
|
-
envFileUrl: "",
|
|
51
|
-
authorizedUsersUrl: "",
|
|
52
53
|
ecrAccessPolicy: "",
|
|
53
|
-
|
|
54
|
+
dockerNetworkingProtocol: "ipv4",
|
|
55
|
+
enableSecretsPlugin: true,
|
|
56
|
+
enableEcrPlugin: true,
|
|
57
|
+
enableDockerLoginPlugin: true,
|
|
58
|
+
enableDockerUserNamespaceRemap: true,
|
|
59
|
+
enableDockerExperimental: false,
|
|
60
|
+
enableInstanceStorage: false,
|
|
61
|
+
mountTmpfsAtTmp: true,
|
|
62
|
+
buildkiteAgentEnableGitMirrors: false,
|
|
63
|
+
pipelineSigningKMSKey: "",
|
|
64
|
+
pipelineSigningVerificationFailureBehavior: "block",
|
|
65
|
+
// Tags
|
|
66
|
+
environment: "platform",
|
|
67
|
+
owner: "engineer"
|
|
54
68
|
};
|
|
55
69
|
class Buildkite extends aws_cdk_lib_1.Stack {
|
|
56
70
|
constructor(scope, id, props) {
|
|
57
71
|
super(scope, id, props);
|
|
72
|
+
// TODO: Make this immutable and enforce the tags being set
|
|
73
|
+
const tags = {
|
|
74
|
+
...props.tags,
|
|
75
|
+
"fjall:costAllocation:environment": props.environment || "platform",
|
|
76
|
+
"fjall:costAllocation:service": "buildkite",
|
|
77
|
+
"fjall:costAllocation:owner": props.owner || "engineer" // TODO: this will have to be the platform account name?
|
|
78
|
+
};
|
|
58
79
|
// VPC
|
|
59
80
|
const vpc = new vpc_1.Vpc(this, "buildkite", {
|
|
60
|
-
|
|
81
|
+
accountName: props.accountName,
|
|
61
82
|
tags: props.tags,
|
|
62
83
|
subnetConfiguration: [
|
|
63
84
|
{
|
|
@@ -67,9 +88,9 @@ class Buildkite extends aws_cdk_lib_1.Stack {
|
|
|
67
88
|
]
|
|
68
89
|
});
|
|
69
90
|
// Artifacts Bucket
|
|
70
|
-
const artifactBucket = new
|
|
91
|
+
const artifactBucket = new storage_1.S3Bucket(this, "artifactBucket");
|
|
71
92
|
// Managed Secrets
|
|
72
|
-
const managedSecretsBucket = new
|
|
93
|
+
const managedSecretsBucket = new storage_1.S3Bucket(this, "managedSecretsBucket");
|
|
73
94
|
if (process.env.BUILDKITE_PRIVATE_SSH_KEY) {
|
|
74
95
|
new aws_s3_deployment_1.BucketDeployment(this, "buildkiteSshKey", {
|
|
75
96
|
sources: [
|
|
@@ -82,12 +103,12 @@ class Buildkite extends aws_cdk_lib_1.Stack {
|
|
|
82
103
|
console.warn("WARN:'BUILDKITE_PRIVATE_SSH_KEY' environment variable not declared. Skipping upload of private SSH key");
|
|
83
104
|
}
|
|
84
105
|
// Encrypted Buildkite Agent Token
|
|
85
|
-
const agentToken = new
|
|
106
|
+
const agentToken = new secrets_1.SecureStringParameter(this, "agentToken", {
|
|
86
107
|
name: `/buildkite/agentToken`,
|
|
87
108
|
aliasName: `buildkiteAgentToken`,
|
|
88
109
|
value: process.env.BUILDKITE_AGENT_TOKEN,
|
|
89
110
|
overwrite: process.env.BUILDKITE_AGENT_TOKEN ? true : false,
|
|
90
|
-
tags:
|
|
111
|
+
tags: tags,
|
|
91
112
|
accountId: this.account,
|
|
92
113
|
region: this.region
|
|
93
114
|
});
|
|
@@ -210,18 +231,18 @@ class Buildkite extends aws_cdk_lib_1.Stack {
|
|
|
210
231
|
const mountStorageUserData = aws_ec2_1.UserData.forLinux({
|
|
211
232
|
shebang: "#!/bin/bash -v"
|
|
212
233
|
});
|
|
213
|
-
mountStorageUserData.addCommands(`BUILDKITE_ENABLE_INSTANCE_STORAGE='${props.
|
|
234
|
+
mountStorageUserData.addCommands(`BUILDKITE_ENABLE_INSTANCE_STORAGE='${props.enableInstanceStorage}' \\`, `BUILDKITE_MOUNT_TMPFS_AT_TMP='${props.mountTmpfsAtTmp}' \\`, "/usr/local/bin/bk-mount-instance-storage.sh");
|
|
214
235
|
multipartUserData.addPart(aws_ec2_1.MultipartBody.fromUserData(mountStorageUserData, "text/x-shellscript; charset='us-ascii'"));
|
|
215
236
|
// Configure Docker
|
|
216
237
|
const configureDockerUserData = aws_ec2_1.UserData.forLinux({
|
|
217
238
|
shebang: "#!/bin/bash -v"
|
|
218
239
|
});
|
|
219
|
-
configureDockerUserData.addCommands(`DOCKER_USERNS_REMAP='${props.
|
|
240
|
+
configureDockerUserData.addCommands(`DOCKER_USERNS_REMAP='${props.enableDockerUserNamespaceRemap}' \\`, `DOCKER_EXPERIMENTAL='${props.enableDockerExperimental}' \\`, `DOCKER_NETWORKING_PROTOCOL='${props.dockerNetworkingProtocol}' \\`, `BUILDKITE_ENABLE_INSTANCE_STORAGE='${props.enableInstanceStorage}' \\`, "/usr/local/bin/bk-configure-docker.sh");
|
|
220
241
|
multipartUserData.addPart(aws_ec2_1.MultipartBody.fromUserData(configureDockerUserData, "text/x-shellscript; charset='us-ascii'"));
|
|
221
242
|
const installElasticStackUserData = aws_ec2_1.UserData.forLinux({
|
|
222
243
|
shebang: "#!/bin/bash -v"
|
|
223
244
|
});
|
|
224
|
-
installElasticStackUserData.addCommands(`BUILDKITE_STACK_NAME='${id}' \\`, `BUILDKITE_STACK_VERSION='${props.elasticStackVersion}' \\`, `BUILDKITE_SCALE_IN_IDLE_PERIOD='${props.
|
|
245
|
+
installElasticStackUserData.addCommands(`BUILDKITE_STACK_NAME='${id}' \\`, `BUILDKITE_STACK_VERSION='${props.elasticStackVersion}' \\`, `BUILDKITE_SCALE_IN_IDLE_PERIOD='${props.scaleInIdlePeriod}' \\`, `BUILDKITE_SECRETS_BUCKET='${managedSecretsBucket.bucketName}' \\`, `BUILDKITE_SECRETS_BUCKET_REGION='${props.env?.region}' \\`, `BUILDKITE_AGENT_TOKEN_PATH='${agentToken.name}' \\`, `BUILDKITE_AGENTS_PER_INSTANCE='${props.agentsPerInstance}' \\`, `BUILDKITE_AGENT_TAGS='${props.buildkiteAgentTags}' \\`, `BUILDKITE_AGENT_TIMESTAMP_LINES='${props.buildkiteAgentTimestampLines}' \\`, `BUILDKITE_AGENT_EXPERIMENTS='${props.buildkiteAgentExperiments}' \\`, `BUILDKITE_AGENT_TRACING_BACKEND='${props.buildkiteAgentTracingBackend}' \\`, `BUILDKITE_AGENT_RELEASE='${props.buildkiteAgentRelease}' \\`, `BUILDKITE_AGENT_CANCEL_GRACE_PERIOD='${props.buildkiteAgentCancelGracePeriod}' \\`, `BUILDKITE_AGENT_SIGNING_KMS_KEY='${props.pipelineSigningKMSKey}' \\`, `BUILDKITE_AGENT_SIGNING_FAILURE_BEHAVIOR='${props.pipelineSigningVerificationFailureBehavior}' \\`, `BUILDKITE_QUEUE='${props.buildkiteQueue}' \\`, `BUILDKITE_AGENT_ENABLE_GIT_MIRRORS='${props.buildkiteAgentEnableGitMirrors}' \\`, `BUILDKITE_ELASTIC_BOOTSTRAP_SCRIPT='${props.bootstrapScriptUrl}' \\`, `BUILDKITE_ENV_FILE_URL='${props.agentEnvFileUrl}' \\`, `BUILDKITE_ENABLE_INSTANCE_STORAGE='${props.enableInstanceStorage}' \\`, `BUILDKITE_AUTHORIZED_USERS_URL='${props.authorizedUsersUrl}' \\`, `BUILDKITE_ECR_POLICY='${props.ecrAccessPolicy}' \\`, `BUILDKITE_TERMINATE_INSTANCE_AFTER_JOB='${props.buildkiteTerminateInstanceAfterJob}' \\`, `BUILDKITE_ADDITIONAL_SUDO_PERMISSIONS='${props.buildkiteAdditionalSudoPermissions}' \\`, `AWS_DEFAULT_REGION='${props.env?.region}' \\`, `SECRETS_PLUGIN_ENABLED='${props.enableSecretsPlugin}' \\`, `ECR_PLUGIN_ENABLED='${props.enableEcrPlugin}' \\`, `DOCKER_LOGIN_PLUGIN_ENABLED='${props.enableDockerLoginPlugin}' \\`, `DOCKER_EXPERIMENTAL='${props.enableDockerExperimental}' \\`, `DOCKER_USERNS_REMAP='${props.enableDockerUserNamespaceRemap}' \\`, `AWS_REGION='${props.env?.region}' \\`, "/usr/local/bin/bk-install-elastic-stack.sh");
|
|
225
246
|
// Merge User Data
|
|
226
247
|
multipartUserData.addPart(aws_ec2_1.MultipartBody.fromUserData(installElasticStackUserData, "text/x-shellscript; charset='us-ascii'"));
|
|
227
248
|
// Launch Template
|
|
@@ -252,10 +273,10 @@ class Buildkite extends aws_cdk_lib_1.Stack {
|
|
|
252
273
|
(0, tagResource_1.default)(launchTemplate, {
|
|
253
274
|
"fjall:costAllocation:environment": props.environment,
|
|
254
275
|
"fjall:costAllocation:service": "buildkite",
|
|
255
|
-
"fjall:costAllocation:owner": "
|
|
276
|
+
"fjall:costAllocation:owner": props.owner || "engineer",
|
|
256
277
|
Role: "buildkiteAgent",
|
|
257
278
|
BuildkiteAgentRelease: agentRelease.STABLE,
|
|
258
|
-
BuildkiteQueue: props.
|
|
279
|
+
BuildkiteQueue: props.buildkiteQueue
|
|
259
280
|
});
|
|
260
281
|
// Autoscaling Group
|
|
261
282
|
const autoScalingGroup = new aws_autoscaling_1.AutoScalingGroup(this, "agentAutoScalingGroup", {
|
|
@@ -265,7 +286,12 @@ class Buildkite extends aws_cdk_lib_1.Stack {
|
|
|
265
286
|
instancesDistribution: {
|
|
266
287
|
onDemandPercentageAboveBaseCapacity: props.spotCapacityPercentage,
|
|
267
288
|
spotAllocationStrategy: aws_autoscaling_1.SpotAllocationStrategy.CAPACITY_OPTIMIZED
|
|
268
|
-
}
|
|
289
|
+
},
|
|
290
|
+
launchTemplateOverrides: [
|
|
291
|
+
{
|
|
292
|
+
instanceType: props.agentInstanceType
|
|
293
|
+
}
|
|
294
|
+
]
|
|
269
295
|
},
|
|
270
296
|
minCapacity: props.agentMinInstances,
|
|
271
297
|
maxCapacity: props.agentMaxInstances,
|
|
@@ -293,7 +319,7 @@ class Buildkite extends aws_cdk_lib_1.Stack {
|
|
|
293
319
|
(0, tagResource_1.default)(autoScalingGroup, {
|
|
294
320
|
"fjall:costAllocation:environment": props.environment,
|
|
295
321
|
"fjall:costAllocation:service": "buildkite",
|
|
296
|
-
"fjall:costAllocation:owner": "
|
|
322
|
+
"fjall:costAllocation:owner": props.owner || "engineer"
|
|
297
323
|
});
|
|
298
324
|
// Buildkite Suspend Austoscaling Group Custom Resource
|
|
299
325
|
new awsCustomResource_1.AwsCustomResource(this, "suspendAutoscalingProcess", {
|
|
@@ -321,24 +347,26 @@ class Buildkite extends aws_cdk_lib_1.Stack {
|
|
|
321
347
|
new aws_sam_1.CfnApplication(this, "agentScaler", {
|
|
322
348
|
location: {
|
|
323
349
|
applicationId: "arn:aws:serverlessrepo:us-east-1:172840064832:applications/buildkite-agent-scaler",
|
|
324
|
-
semanticVersion: props.
|
|
350
|
+
semanticVersion: props.buildkiteAgentScalerVersion
|
|
325
351
|
},
|
|
326
352
|
parameters: {
|
|
327
353
|
BuildkiteAgentTokenParameter: `${agentToken.name}`,
|
|
328
|
-
BuildkiteAgentTokenParameterStoreKMSKey: agentToken.cmk.key.
|
|
354
|
+
BuildkiteAgentTokenParameterStoreKMSKey: agentToken.cmk.key.keyId,
|
|
329
355
|
RolePermissionsBoundaryARN: "",
|
|
330
|
-
BuildkiteQueue: props.
|
|
356
|
+
BuildkiteQueue: props.buildkiteQueue,
|
|
331
357
|
AgentsPerInstance: `${props.agentsPerInstance}`,
|
|
332
358
|
MinSize: `${props.agentMinInstances}`,
|
|
333
359
|
MaxSize: `${props.agentMaxInstances}`,
|
|
334
360
|
AgentAutoScaleGroup: autoScalingGroup.autoScalingGroupName,
|
|
335
361
|
ScaleOutFactor: props.scaleOutFactor,
|
|
336
362
|
ScaleOutForWaitingJobs: `${props.scaleOutWaitingForJobs}`,
|
|
337
|
-
EventSchedulePeriod: props.
|
|
338
|
-
MinPollInterval: props.
|
|
363
|
+
EventSchedulePeriod: props.scalerEventSchedulePeriod,
|
|
364
|
+
MinPollInterval: props.scalerMinPollInterval,
|
|
365
|
+
LogRetentionDays: `${props.logRetentionDays}`
|
|
339
366
|
}
|
|
340
367
|
});
|
|
341
368
|
}
|
|
342
369
|
}
|
|
370
|
+
exports.Buildkite = Buildkite;
|
|
343
371
|
exports.default = Buildkite;
|
|
344
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRraXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL3BhdHRlcm5zL2F3cy9idWlsZGtpdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQTBEO0FBQzFELGlEQUs2QjtBQUM3QixpREFZNkI7QUFDN0IsaUVBTXFDO0FBQ3JDLGlEQUFxRDtBQUNyRCxtRUFBa0U7QUFDbEUscUVBQXlFO0FBRXpFLDBEQUF1RDtBQUN2RCxpREFBdUQ7QUFDdkQscURBQTRFO0FBQzVFLHVGQUFvRjtBQUNwRix5REFBa0Q7QUFHbEQsSUFBSyxZQUlKO0FBSkQsV0FBSyxZQUFZO0lBQ2YsaUNBQWlCLENBQUE7SUFDakIsNkJBQWEsQ0FBQTtJQUNiLDZCQUFhLENBQUE7QUFDZixDQUFDLEVBSkksWUFBWSxLQUFaLFlBQVksUUFJaEI7QUF1Q1ksUUFBQSxxQkFBcUIsR0FpQzlCO0lBQ0YsbUJBQW1CLEVBQUUsUUFBUTtJQUM3QixrQkFBa0IsRUFBRSxPQUFPO0lBQzNCLGlCQUFpQixFQUFFLHNCQUFZLENBQUMsRUFBRSxDQUFDLHVCQUFhLENBQUMsRUFBRSxFQUFFLHNCQUFZLENBQUMsS0FBSyxDQUFDO0lBQ3hFLGVBQWUsRUFBRSxHQUFHO0lBQ3BCLGlCQUFpQixFQUFFLENBQUM7SUFDcEIsaUJBQWlCLEVBQUUsRUFBRTtJQUNyQixpQkFBaUIsRUFBRSxDQUFDO0lBQ3BCLFlBQVksRUFBRSxZQUFZLENBQUMsTUFBTTtJQUNqQyxzQkFBc0IsRUFBRSxFQUFFO0lBQzFCLGFBQWEsRUFBRSxHQUFHO0lBQ2xCLGVBQWUsRUFBRSxLQUFLO0lBQ3RCLDJCQUEyQixFQUFFLEtBQUs7SUFDbEMsd0JBQXdCLEVBQUUsSUFBSTtJQUM5QixrQkFBa0IsRUFBRSxLQUFLO0lBQ3pCLG9CQUFvQixFQUFFLElBQUk7SUFDMUIsZ0JBQWdCLEVBQUUsSUFBSTtJQUN0Qix3QkFBd0IsRUFBRSxJQUFJO0lBQzlCLGNBQWMsRUFBRSxLQUFL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LDBCQUEwQixFQUFFLEVBQUU7Z0JBQzlCLGNBQWMsRUFBRSxLQUFLLENBQUMsU0FBUztnQkFDL0IsaUJBQWlCLEVBQUUsR0FBRyxLQUFLLENBQUMsaUJBQWlCLEVBQUU7Z0JBQy9DLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtnQkFDckMsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixFQUFFO2dCQUNyQyxtQkFBbUIsRUFBRSxnQkFBZ0IsQ0FBQyxvQkFBb0I7Z0JBQzFELGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYztnQkFDcEMsc0JBQXNCLEVBQUUsR0FBRyxLQUFLLENBQUMsc0JBQXNCLEVBQUU7Z0JBQ3pELG1CQUFtQixFQUFFLEtBQUssQ0FBQyxvQkFBb0I7Z0JBQy9DLGVBQWUsRUFBRSxLQUFLLENBQUMsZUFBZTthQUN2QztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQTVYRCw0QkE0WEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEdXJhdGlvbiwgU3RhY2tQcm9wcywgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7XG4gIENvbXBvc2l0ZVByaW5jaXBhbCxcbiAgU2VydmljZVByaW5jaXBhbCxcbiAgUG9saWN5RG9jdW1lbnQsXG4gIFBvbGljeVN0YXRlbWVudFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHtcbiAgQmxvY2tEZXZpY2VWb2x1bWUsXG4gIEluc3RhbmNlQ2xhc3MsXG4gIEluc3RhbmNlU2l6ZSxcbiAgSW5zdGFuY2VUeXBlLFxuICBMYXVuY2hUZW1wbGF0ZSxcbiAgTGF1bmNoVGVtcGxhdGVIdHRwVG9rZW5zLFxuICBNYWNoaW5lSW1hZ2UsXG4gIE11bHRpcGFydEJvZHksXG4gIE11bHRpcGFydFVzZXJEYXRhLFxuICBTdWJuZXRUeXBlLFxuICBVc2VyRGF0YVxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHtcbiAgQXV0b1NjYWxpbmdHcm91cCxcbiAgR3JvdXBNZXRyaWNzLFxuICBTcG90QWxsb2NhdGlvblN0cmF0ZWd5LFxuICBUZXJtaW5hdGlvblBvbGljeSxcbiAgVXBkYXRlUG9saWN5XG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYXV0b3NjYWxpbmdcIjtcbmltcG9ydCB7IENmbkFwcGxpY2F0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zYW1cIjtcbmltcG9ydCB7IFBoeXNpY2FsUmVzb3VyY2VJZCB9IGZyb20gXCJhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzXCI7XG5pbXBvcnQgeyBCdWNrZXREZXBsb3ltZW50LCBTb3VyY2UgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzLWRlcGxveW1lbnRcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBWcGMgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9jb25zdGFudC92cGNcIjtcbmltcG9ydCB7IFBvbGljeSwgUm9sZSB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2lhbVwiO1xuaW1wb3J0IHsgUzNCdWNrZXQsIFNlY3VyZVN0cmluZ1BhcmFtZXRlciB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL3N0b3JlXCI7XG5pbXBvcnQgeyBBd3NDdXN0b21SZXNvdXJjZSB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL3V0aWxpdGllcy9hd3NDdXN0b21SZXNvdXJjZVwiO1xuaW1wb3J0IHRhZ1Jlc291cmNlIGZyb20gXCIuLi8uLi91dGlscy90YWdSZXNvdXJjZVwiO1xuaW1wb3J0IHsgS2V5VmFsdWUgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9jb21wdXRlL2Vjc1wiO1xuXG5lbnVtIGFnZW50UmVsZWFzZSB7XG4gIFNUQUJMRSA9IFwic3RhYmxlXCIsXG4gIEJFVEEgPSBcImJldGFcIixcbiAgRURHRSA9IFwiZWRnZVwiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRraXRlUHJvcHMgZXh0ZW5kcyBTdGFja1Byb3BzIHtcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgZWxhc3RpY1N0YWNrVmVyc2lvbjogc3RyaW5nO1xuICBhZ2VudFNjYWxlclZlcnNpb246IHN0cmluZztcbiAgcXVldWVOYW1lOiBzdHJpbmc7XG4gIHNwb3RDYXBhY2l0eVBlcmNlbnRhZ2U6IG51bWJlcjtcbiAgYWdlbnRJbnN0YW5jZVR5cGU6IEluc3RhbmNlVHlwZTtcbiAgYWdlbnRWb2x1bWVTaXplOiBudW1iZXI7XG4gIGFnZW50TWluSW5zdGFuY2VzOiBudW1iZXI7XG4gIGFnZW50TWF4SW5zdGFuY2VzOiBudW1iZXI7XG4gIGluc3RhbmNlU3RvcmFnZTogYm9vbGVhbjtcbiAgZG9ja2VyVXNlck5hbWVzcGFjZVJlbWFwOiBib29sZWFuO1xuICBkb2NrZXJFeHBlcmltZW50YWw6IGJvb2xlYW47XG4gIHNjYWxlSW5QZXJpb2Q6IG51bWJlcjtcbiAgYWdlbnRzUGVySW5zdGFuY2U6IG51bWJlcjtcbiAgYWdlbnRUYWdzOiBzdHJpbmc7XG4gIHRpbWVzdGFtcExpbmVzOiBib29sZWFuO1xuICBleHBlcmltZW50czogc3RyaW5nO1xuICB0cmFjaW5nQmFja2VuZDogc3RyaW5nO1xuICBhZ2VudFJlbGVhc2U6IGFnZW50UmVsZWFzZTtcbiAgZ2l0TWlycm9yczogYm9vbGVhbjtcbiAgYm9vdHN0cmFwU2NyaXB0OiBzdHJpbmc7XG4gIGVudkZpbGVVcmw6IHN0cmluZztcbiAgYXV0aG9yaXplZFVzZXJzVXJsOiBzdHJpbmc7XG4gIGVjckFjY2Vzc1BvbGljeTogc3RyaW5nO1xuICBpbnN0YW5jZVRlcm1pbmF0aW9uQWZ0ZXJKb2I6IGJvb2xlYW47XG4gIHN1ZG9QZXJtaXNzaW9uczogc3RyaW5nO1xuICB0YWdzOiBLZXlWYWx1ZTtcbiAgc2VjcmV0c1BsdWdpbkVuYWJsZWQ6IGJvb2xlYW47XG4gIGVjclBsdWdpbkVuYWJsZWQ6IGJvb2xlYW47XG4gIGRvY2tlckxvZ2luUGx1Z2luRW5hYmxlZDogYm9vbGVhbjtcbiAgc2NhbGVPdXRGYWN0b3I6IHN0cmluZztcbiAgc2NhbGVPdXRXYWl0aW5nRm9ySm9iczogYm9vbGVhbjtcbiAgZXZlbnRTY2hlZHVsZWRQZXJpb2Q6IHN0cmluZztcbiAgbWluUG9sbEludGVydmFsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBCdWlsZGtpdGVEZWZhdWx0UHJvcHM6IFBpY2s8XG4gIEJ1aWxka2l0ZVByb3BzLFxuICB8IFwiZWxhc3RpY1N0YWNrVmVyc2lvblwiXG4gIHwgXCJhZ2VudFNjYWxlclZlcnNpb25cIlxuICB8IFwic3BvdENhcGFjaXR5UGVyY2VudGFnZVwiXG4gIHwgXCJhZ2VudEluc3RhbmNlVHlwZVwiXG4gIHwgXCJhZ2VudFZvbHVtZVNpemVcIlxuICB8IFwiYWdlbnRNaW5JbnN0YW5jZXNcIlxuICB8IFwiYWdlbnRNYXhJbnN0YW5jZXNcIlxuICB8IFwiaW5zdGFuY2VTdG9yYWdlXCJcbiAgfCBcImRvY2tlclVzZXJOYW1lc3BhY2VSZW1hcFwiXG4gIHwgXCJkb2NrZXJFeHBlcmltZW50YWxcIlxuICB8IFwic2NhbGVJblBlcmlvZFwiXG4gIHwgXCJhZ2VudHNQZXJJbnN0YW5jZVwiXG4gIHwgXCJhZ2VudFRhZ3NcIlxuICB8IFwidGltZXN0YW1wTGluZXNcIlxuICB8IFwiZXhwZXJpbWVudHNcIlxuICB8IFwidHJhY2luZ0JhY2tlbmRcIlxuICB8IFwiYWdlbnRSZWxlYXNlXCJcbiAgfCBcImdpdE1pcnJvcnNcIlxuICB8IFwiYm9vdHN0cmFwU2NyaXB0XCJcbiAgfCBcImVudkZpbGVVcmxcIlxuICB8IFwiYXV0aG9yaXplZFVzZXJzVXJsXCJcbiAgfCBcImVjckFjY2Vzc1BvbGljeVwiXG4gIHwgXCJpbnN0YW5jZVRlcm1pbmF0aW9uQWZ0ZXJKb2JcIlxuICB8IFwic3Vkb1Blcm1pc3Npb25zXCJcbiAgfCBcInNlY3JldHNQbHVnaW5FbmFibGVkXCJcbiAgfCBcImVjclBsdWdpbkVuYWJsZWRcIlxuICB8IFwiZG9ja2VyTG9naW5QbHVnaW5FbmFibGVkXCJcbiAgfCBcInNjYWxlT3V0RmFjdG9yXCJcbiAgfCBcInNjYWxlT3V0V2FpdGluZ0ZvckpvYnNcIlxuICB8IFwiZXZlbnRTY2hlZHVsZWRQZXJpb2RcIlxuICB8IFwibWluUG9sbEludGVydmFsXCJcbj4gPSB7XG4gIGVsYXN0aWNTdGFja1ZlcnNpb246IFwidjYuNy4xXCIsXG4gIGFnZW50U2NhbGVyVmVyc2lvbjogXCIxLjYuMFwiLFxuICBhZ2VudEluc3RhbmNlVHlwZTogSW5zdGFuY2VUeXBlLm9mKEluc3RhbmNlQ2xhc3MuTTQsIEluc3RhbmNlU2l6ZS5MQVJHRSksXG4gIGFnZW50Vm9sdW1lU2l6ZTogMjUwLFxuICBhZ2VudE1pbkluc3RhbmNlczogMCxcbiAgYWdlbnRNYXhJbnN0YW5jZXM6IDEwLFxuICBhZ2VudHNQZXJJbnN0YW5jZTogMSxcbiAgYWdlbnRSZWxlYXNlOiBhZ2VudFJlbGVhc2UuU1RBQkxFLFxuICBzcG90Q2FwYWNpdHlQZXJjZW50YWdlOiA3NSxcbiAgc2NhbGVJblBlcmlvZDogNjAwLFxuICBpbnN0YW5jZVN0b3JhZ2U6IGZhbHNlLFxuICBpbnN0YW5jZVRlcm1pbmF0aW9uQWZ0ZXJKb2I6IGZhbHNlLFxuICBkb2NrZXJVc2VyTmFtZXNwYWNlUmVtYXA6IHRydWUsXG4gIGRvY2tlckV4cGVyaW1lbnRhbDogZmFsc2UsXG4gIHNlY3JldHNQbHVnaW5FbmFibGVkOiB0cnVlLFxuICBlY3JQbHVnaW5FbmFibGVkOiB0cnVlLFxuICBkb2NrZXJMb2dpblBsdWdpbkVuYWJsZWQ6IHRydWUsXG4gIHRpbWVzdGFtcExpbmVzOiBmYWxzZSxcbiAgZ2l0TWlycm9yczogZmFsc2UsXG4gIHNjYWxlT3V0RmFjdG9yOiBcIjEuMFwiLFxuICBzY2FsZU91dFdhaXRpbmdGb3JKb2JzOiBmYWxzZSxcbiAgZXZlbnRTY2hlZHVsZWRQZXJpb2Q6IFwiMSBtaW51dGVcIixcbiAgbWluUG9sbEludGVydmFsOiBcIjEwc1wiLFxuICBhZ2VudFRhZ3M6IFwiXCIsXG4gIGV4cGVyaW1lbnRzOiBcIlwiLFxuICB0cmFjaW5nQmFja2VuZDogXCJcIixcbiAgYm9vdHN0cmFwU2NyaXB0OiBcIlwiLFxuICBlbnZGaWxlVXJsOiBcIlwiLFxuICBhdXRob3JpemVkVXNlcnNVcmw6IFwiXCIsXG4gIGVjckFjY2Vzc1BvbGljeTogXCJcIixcbiAgc3Vkb1Blcm1pc3Npb25zOiBcIlwiXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCdWlsZGtpdGUgZXh0ZW5kcyBTdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBCdWlsZGtpdGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgLy8gVlBDXG4gICAgY29uc3QgdnBjID0gbmV3IFZwYyh0aGlzLCBcImJ1aWxka2l0ZVwiLCB7XG4gICAgICBlbnZpcm9ubWVudDogcHJvcHMuZW52aXJvbm1lbnQsXG4gICAgICB0YWdzOiBwcm9wcy50YWdzLFxuICAgICAgc3VibmV0Q29uZmlndXJhdGlvbjogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogYCR7aWR9YCxcbiAgICAgICAgICBzdWJuZXRUeXBlOiBTdWJuZXRUeXBlLlBVQkxJQ1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICAvLyBBcnRpZmFjdHMgQnVja2V0XG4gICAgY29uc3QgYXJ0aWZhY3RCdWNrZXQgPSBuZXcgUzNCdWNrZXQodGhpcywgXCJhcnRpZmFjdEJ1Y2tldFwiKTtcblxuICAgIC8vIE1hbmFnZWQgU2VjcmV0c1xuICAgIGNvbnN0IG1hbmFnZWRTZWNyZXRzQnVja2V0ID0gbmV3IFMzQnVja2V0KHRoaXMsIFwibWFuYWdlZFNlY3JldHNCdWNrZXRcIik7XG4gICAgaWYgKHByb2Nlc3MuZW52LkJVSUxES0lURV9QUklWQVRFX1NTSF9LRVkpIHtcbiAgICAgIG5ldyBCdWNrZXREZXBsb3ltZW50KHRoaXMsIFwiYnVpbGRraXRlU3NoS2V5XCIsIHtcbiAgICAgICAgc291cmNlczogW1xuICAgICAgICAgIFNvdXJjZS5kYXRhKFwicHJpdmF0ZV9zc2hfa2V5XCIsIHByb2Nlc3MuZW52LkJVSUxES0lURV9QUklWQVRFX1NTSF9LRVkpXG4gICAgICAgIF0sXG4gICAgICAgIGRlc3RpbmF0aW9uQnVja2V0OiBtYW5hZ2VkU2VjcmV0c0J1Y2tldFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJXQVJOOidCVUlMREtJVEVfUFJJVkFURV9TU0hfS0VZJyBlbnZpcm9ubWVudCB2YXJpYWJsZSBub3QgZGVjbGFyZWQuIFNraXBwaW5nIHVwbG9hZCBvZiBwcml2YXRlIFNTSCBrZXlcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBFbmNyeXB0ZWQgQnVpbGRraXRlIEFnZW50IFRva2VuXG4gICAgY29uc3QgYWdlbnRUb2tlbiA9IG5ldyBTZWN1cmVTdHJpbmdQYXJhbWV0ZXIodGhpcywgXCJhZ2VudFRva2VuXCIsIHtcbiAgICAgIG5hbWU6IGAvYnVpbGRraXRlL2FnZW50VG9rZW5gLFxuICAgICAgYWxpYXNOYW1lOiBgYnVpbGRraXRlQWdlbnRUb2tlbmAsXG4gICAgICB2YWx1ZTogcHJvY2Vzcy5lbnYuQlVJTERLSVRFX0FHRU5UX1RPS0VOLFxuICAgICAgb3ZlcndyaXRlOiBwcm9jZXNzLmVudi5CVUlMREtJVEVfQUdFTlRfVE9LRU4gPyB0cnVlIDogZmFsc2UsXG4gICAgICB0YWdzOiBwcm9wcy50YWdzLFxuICAgICAgYWNjb3VudElkOiB0aGlzLmFjY291bnQsXG4gICAgICByZWdpb246IHRoaXMucmVnaW9uXG4gICAgfSk7XG5cbiAgICAvLyBCdWlsZGtpdGUgQWdlbnQgRXhlY3V0aW9uIFJvbGVcbiAgICBjb25zdCBhZ2VudFJvbGUgPSBuZXcgUm9sZSh0aGlzLCBcImFnZW50SWFtUm9sZVwiLCB7XG4gICAgICByb2xlTmFtZTogYCR7aWR9QWdlbnRSb2xlYCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkJ1aWxka2l0ZSBBZ2VudCBJQU0gUm9sZVwiLFxuICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgW1wiZGVjcnlwdEJ1aWxka2l0ZUFnZW50VG9rZW5cIl06IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcImttczpEZWNyeXB0XCJdLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFthZ2VudFRva2VuLmNtay5rZXkua2V5QXJuXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIH0pLFxuICAgICAgICBbXCJyZWFkQnVpbGRraXRlQWdlbnRUb2tlblwiXTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgYWN0aW9uczogW1wic3NtOkdldFBhcmFtZXRlclwiXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgYGFybjphd3M6c3NtOiR7cHJvcHMuZW52Py5yZWdpb259OiR7cHJvcHMuZW52Py5hY2NvdW50fTpwYXJhbWV0ZXIke2FnZW50VG9rZW4ubmFtZX1gXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICB9KSxcbiAgICAgICAgW1wicmVhZE1hbmFnZWRTZWNyZXRzQnVja2V0XCJdOiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBhY3Rpb25zOiBbXCJzMzpHZXQqXCIsIFwiczM6TGlzdCpcIl0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgICAgIG1hbmFnZWRTZWNyZXRzQnVja2V0LmJ1Y2tldEFybixcbiAgICAgICAgICAgICAgICBgJHttYW5hZ2VkU2VjcmV0c0J1Y2tldC5idWNrZXRBcm59LypgXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICB9KSxcbiAgICAgICAgW1wid3JpdGVBcnRpZmFjdEJ1Y2tldFwiXTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgIFwiczM6R2V0T2JqZWN0XCIsXG4gICAgICAgICAgICAgICAgXCJzMzpHZXRPYmplY3RBY2xcIixcbiAgICAgICAgICAgICAgICBcInMzOkdldE9iamVjdFZlcnNpb25cIixcbiAgICAgICAgICAgICAgICBcInMzOkdldE9iamVjdFZlcnNpb25BY2xcIixcbiAgICAgICAgICAgICAgICBcInMzOkxpc3RCdWNrZXRcIixcbiAgICAgICAgICAgICAgICBcInMzOlB1dE9iamVjdFwiLFxuICAgICAgICAgICAgICAgIFwiczM6UHV0T2JqZWN0QWNsXCIsXG4gICAgICAgICAgICAgICAgXCJzMzpQdXRPYmplY3RWZXJzaW9uQWNsXCJcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgYXJ0aWZhY3RCdWNrZXQuYnVja2V0QXJuLFxuICAgICAgICAgICAgICAgIGAke2FydGlmYWN0QnVja2V0LmJ1Y2tldEFybn0vKmBcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIH0pLFxuICAgICAgICBbXCJkZXNjcmliZUluc3RhbmNlXCJdOiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgXCJhdXRvc2NhbGluZzpEZXNjcmliZUF1dG9TY2FsaW5nSW5zdGFuY2VzXCIsXG4gICAgICAgICAgICAgICAgXCJjbG91ZHdhdGNoOlB1dE1ldHJpY0RhdGFcIixcbiAgICAgICAgICAgICAgICBcImNsb3VkZm9ybWF0aW9uOkRlc2NyaWJlU3RhY2tSZXNvdXJjZVwiLFxuICAgICAgICAgICAgICAgIFwiZWMyOkRlc2NyaWJlVGFnc1wiXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIH0pLFxuICAgICAgICBbXCJsb2dnaW5nXCJdOiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgXCJsb2dzOkNyZWF0ZUxvZ0dyb3VwXCIsXG4gICAgICAgICAgICAgICAgXCJsb2dzOkNyZWF0ZUxvZ1N0cmVhbVwiLFxuICAgICAgICAgICAgICAgIFwibG9nczpQdXRMb2dFdmVudHNcIixcbiAgICAgICAgICAgICAgICBcImxvZ3M6RGVzY3JpYmVMb2dHcm91cHNcIixcbiAgICAgICAgICAgICAgICBcImxvZ3M6RGVzY3JpYmVMb2dTdHJlYW1zXCJcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgfSksXG4gICAgICAgIFtcInNzbVwiXTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgIFwic3NtOkRlc2NyaWJlSW5zdGFuY2VQcm9wZXJ0aWVzXCIsXG4gICAgICAgICAgICAgICAgXCJzc206TGlzdEFzc29jaWF0aW9uc1wiLFxuICAgICAgICAgICAgICAgIFwic3NtOlB1dEludmVudG9yeVwiLFxuICAgICAgICAgICAgICAgIFwic3NtOlVwZGF0ZUluc3RhbmNlSW5mb3JtYXRpb25cIixcbiAgICAgICAgICAgICAgICBcInNzbW1lc3NhZ2VzOkNyZWF0ZUNvbnRyb2xDaGFubmVsXCIsXG4gICAgICAgICAgICAgICAgXCJzc21tZXNzYWdlczpDcmVhdGVEYXRhQ2hhbm5lbFwiLFxuICAgICAgICAgICAgICAgIFwic3NtbWVzc2FnZXM6T3BlbkNvbnRyb2xDaGFubmVsXCIsXG4gICAgICAgICAgICAgICAgXCJzc21tZXNzYWdlczpPcGVuRGF0YUNoYW5uZWxcIixcbiAgICAgICAgICAgICAgICBcImVjMm1lc3NhZ2VzOkFja25vd2xlZGdlTWVzc2FnZVwiLFxuICAgICAgICAgICAgICAgIFwiZWMybWVzc2FnZXM6RGVsZXRlTWVzc2FnZVwiLFxuICAgICAgICAgICAgICAgIFwiZWMybWVzc2FnZXM6RmFpbE1lc3NhZ2VcIixcbiAgICAgICAgICAgICAgICBcImVjMm1lc3NhZ2VzOkdldEVuZHBvaW50XCIsXG4gICAgICAgICAgICAgICAgXCJlYzJtZXNzYWdlczpHZXRNZXNzYWdlc1wiLFxuICAgICAgICAgICAgICAgIFwiZWMybWVzc2FnZXM6U2VuZFJlcGx5XCJcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICBhc3N1bWVkQnk6IG5ldyBDb21wb3NpdGVQcmluY2lwYWwoXG4gICAgICAgIG5ldyBTZXJ2aWNlUHJpbmNpcGFsKFwiYXV0b3NjYWxpbmcuYW1hem9uYXdzLmNvbVwiKSxcbiAgICAgICAgbmV3IFNlcnZpY2VQcmluY2lwYWwoXCJlYzIuYW1hem9uYXdzLmNvbVwiKVxuICAgICAgKVxuICAgIH0pO1xuXG4gICAgLy8gQnVpbGRraXRlIEFnZW50IEVDMiBVc2VyIERhdGFcbiAgICBjb25zdCBtdWx0aXBhcnRVc2VyRGF0YSA9IG5ldyBNdWx0aXBhcnRVc2VyRGF0YSgpO1xuXG4gICAgLy8gQ2xvdWQgQ29uZmlnXG4gICAgY29uc3QgY2xvdWRDb25maWdVc2VyRGF0YSA9IFVzZXJEYXRhLmZvckxpbnV4KHtcbiAgICAgIHNoZWJhbmc6IFwiI2Nsb3VkLWNvbmZpZ1wiXG4gICAgfSk7XG4gICAgY2xvdWRDb25maWdVc2VyRGF0YS5hZGRDb21tYW5kcyhcbiAgICAgIFwiY2xvdWRfZmluYWxfbW9kdWxlczpcIixcbiAgICAgIFwiICAtIFtzY3JpcHRzLXVzZXIsIGFsd2F5c11cIlxuICAgICk7XG4gICAgbXVsdGlwYXJ0VXNlckRhdGEuYWRkUGFydChcbiAgICAgIE11bHRpcGFydEJvZHkuZnJvbVVzZXJEYXRhKFxuICAgICAgICBjbG91ZENvbmZpZ1VzZXJEYXRhLFxuICAgICAgICBcInRleHQvY2xvdWQtY29uZmlnOyBjaGFyc2V0PSd1cy1hc2NpaSdcIlxuICAgICAgKVxuICAgICk7XG5cbiAgICAvLyBNb3VudCBTdG9yYWdlXG4gICAgY29uc3QgbW91bnRTdG9yYWdlVXNlckRhdGEgPSBVc2VyRGF0YS5mb3JMaW51eCh7XG4gICAgICBzaGViYW5nOiBcIiMhL2Jpbi9iYXNoIC12XCJcbiAgICB9KTtcbiAgICBtb3VudFN0b3JhZ2VVc2VyRGF0YS5hZGRDb21tYW5kcyhcbiAgICAgIGBCVUlMREtJVEVfRU5BQkxFX0lOU1RBTkNFX1NUT1JBR0U9JyR7cHJvcHMuaW5zdGFuY2VTdG9yYWdlfScgXFxcXGAsXG4gICAgICBcIi91c3IvbG9jYWwvYmluL2JrLW1vdW50LWluc3RhbmNlLXN0b3JhZ2Uuc2hcIlxuICAgICk7XG4gICAgbXVsdGlwYXJ0VXNlckRhdGEuYWRkUGFydChcbiAgICAgIE11bHRpcGFydEJvZHkuZnJvbVVzZXJEYXRhKFxuICAgICAgICBtb3VudFN0b3JhZ2VVc2VyRGF0YSxcbiAgICAgICAgXCJ0ZXh0L3gtc2hlbGxzY3JpcHQ7IGNoYXJzZXQ9J3VzLWFzY2lpJ1wiXG4gICAgICApXG4gICAgKTtcblxuICAgIC8vIENvbmZpZ3VyZSBEb2NrZXJcbiAgICBjb25zdCBjb25maWd1cmVEb2NrZXJVc2VyRGF0YSA9IFVzZXJEYXRhLmZvckxpbnV4KHtcbiAgICAgIHNoZWJhbmc6IFwiIyEvYmluL2Jhc2ggLXZcIlxuICAgIH0pO1xuICAgIGNvbmZpZ3VyZURvY2tlclVzZXJEYXRhLmFkZENvbW1hbmRzKFxuICAgICAgYERPQ0tFUl9VU0VSTlNfUkVNQVA9JyR7cHJvcHMuZG9ja2VyVXNlck5hbWVzcGFjZVJlbWFwfScgXFxcXGAsXG4gICAgICBgRE9DS0VSX0VYUEVSSU1FTlRBTD0nJHtwcm9wcy5kb2NrZXJFeHBlcmltZW50YWx9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfRU5BQkxFX0lOU1RBTkNFX1NUT1JBR0U9JyR7cHJvcHMuaW5zdGFuY2VTdG9yYWdlfScgXFxcXGAsXG4gICAgICBcIi91c3IvbG9jYWwvYmluL2JrLWNvbmZpZ3VyZS1kb2NrZXIuc2hcIlxuICAgICk7XG4gICAgbXVsdGlwYXJ0VXNlckRhdGEuYWRkUGFydChcbiAgICAgIE11bHRpcGFydEJvZHkuZnJvbVVzZXJEYXRhKFxuICAgICAgICBjb25maWd1cmVEb2NrZXJVc2VyRGF0YSxcbiAgICAgICAgXCJ0ZXh0L3gtc2hlbGxzY3JpcHQ7IGNoYXJzZXQ9J3VzLWFzY2lpJ1wiXG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IGluc3RhbGxFbGFzdGljU3RhY2tVc2VyRGF0YSA9IFVzZXJEYXRhLmZvckxpbnV4KHtcbiAgICAgIHNoZWJhbmc6IFwiIyEvYmluL2Jhc2ggLXZcIlxuICAgIH0pO1xuICAgIGluc3RhbGxFbGFzdGljU3RhY2tVc2VyRGF0YS5hZGRDb21tYW5kcyhcbiAgICAgIGBCVUlMREtJVEVfU1RBQ0tfTkFNRT0nJHtpZH0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9TVEFDS19WRVJTSU9OPScke3Byb3BzLmVsYXN0aWNTdGFja1ZlcnNpb259JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfU0NBTEVfSU5fSURMRV9QRVJJT0Q9JyR7cHJvcHMuc2NhbGVJblBlcmlvZH0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9TRUNSRVRTX0JVQ0tFVD0nJHttYW5hZ2VkU2VjcmV0c0J1Y2tldC5idWNrZXROYW1lfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX1NFQ1JFVFNfQlVDS0VUX1JFR0lPTj0nJHtwcm9wcy5lbnY/LnJlZ2lvbn0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVF9UT0tFTl9QQVRIPScke2FnZW50VG9rZW4ubmFtZX0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVFNfUEVSX0lOU1RBTkNFPScke3Byb3BzLmFnZW50c1Blckluc3RhbmNlfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FHRU5UX1RBR1M9JyR7cHJvcHMuYWdlbnRUYWdzfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FHRU5UX1RJTUVTVEFNUF9MSU5FUz0nJHtwcm9wcy50aW1lc3RhbXBMaW5lc30nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVF9FWFBFUklNRU5UUz0nJHtwcm9wcy5leHBlcmltZW50c30nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVF9UUkFDSU5HX0JBQ0tFTkQ9JyR7cHJvcHMudHJhY2luZ0JhY2tlbmR9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQUdFTlRfUkVMRUFTRT0nJHtwcm9wcy5hZ2VudFJlbGVhc2V9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfUVVFVUU9JyR7cHJvcHMucXVldWVOYW1lfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FHRU5UX0VOQUJMRV9HSVRfTUlSUk9SUz0nJHtwcm9wcy5naXRNaXJyb3JzfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0VMQVNUSUNfQk9PVFNUUkFQX1NDUklQVD0nJHtwcm9wcy5ib290c3RyYXBTY3JpcHR9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfRU5WX0ZJTEVfVVJMPScke3Byb3BzLmVudkZpbGVVcmx9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfRU5BQkxFX0lOU1RBTkNFX1NUT1JBR0U9JyR7cHJvcHMuaW5zdGFuY2VTdG9yYWdlfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FVVEhPUklaRURfVVNFUlNfVVJMPScke3Byb3BzLmF1dGhvcml6ZWRVc2Vyc1VybH0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9FQ1JfUE9MSUNZPScke3Byb3BzLmVjckFjY2Vzc1BvbGljeX0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9URVJNSU5BVEVfSU5TVEFOQ0VfQUZURVJfSk9CPScke3Byb3BzLmluc3RhbmNlVGVybWluYXRpb25BZnRlckpvYn0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BRERJVElPTkFMX1NVRE9fUEVSTUlTU0lPTlM9JyR7cHJvcHMuc3Vkb1Blcm1pc3Npb25zfScgXFxcXGAsXG4gICAgICBgQVdTX0RFRkFVTFRfUkVHSU9OPScke3Byb3BzLmVudj8ucmVnaW9ufScgXFxcXGAsXG4gICAgICBgU0VDUkVUU19QTFVHSU5fRU5BQkxFRD0nJHtwcm9wcy5zZWNyZXRzUGx1Z2luRW5hYmxlZH0nIFxcXFxgLFxuICAgICAgYEVDUl9QTFVHSU5fRU5BQkxFRD0nJHtwcm9wcy5lY3JQbHVnaW5FbmFibGVkfScgXFxcXGAsXG4gICAgICBgRE9DS0VSX0xPR0lOX1BMVUdJTl9FTkFCTEVEPScke3Byb3BzLmRvY2tlckxvZ2luUGx1Z2luRW5hYmxlZH0nIFxcXFxgLFxuICAgICAgYERPQ0tFUl9FWFBFUklNRU5UQUw9JyR7cHJvcHMuZG9ja2VyRXhwZXJpbWVudGFsfScgXFxcXGAsXG4gICAgICBgQVdTX1JFR0lPTj0nJHtwcm9wcy5lbnY/LnJlZ2lvbn0nIFxcXFxgLFxuICAgICAgXCIvdXNyL2xvY2FsL2Jpbi9iay1pbnN0YWxsLWVsYXN0aWMtc3RhY2suc2hcIlxuICAgICk7XG5cbiAgICAvLyBNZXJnZSBVc2VyIERhdGFcbiAgICBtdWx0aXBhcnRVc2VyRGF0YS5hZGRQYXJ0KFxuICAgICAgTXVsdGlwYXJ0Qm9keS5mcm9tVXNlckRhdGEoXG4gICAgICAgIGluc3RhbGxFbGFzdGljU3RhY2tVc2VyRGF0YSxcbiAgICAgICAgXCJ0ZXh0L3gtc2hlbGxzY3JpcHQ7IGNoYXJzZXQ9J3VzLWFzY2lpJ1wiXG4gICAgICApXG4gICAgKTtcblxuICAgIC8vIExhdW5jaCBUZW1wbGF0ZVxuICAgIGNvbnN0IGxhdW5jaFRlbXBsYXRlID0gbmV3IExhdW5jaFRlbXBsYXRlKHRoaXMsIFwiYWdlbnRMYXVuY2hUZW1wbGF0ZVwiLCB7XG4gICAgICBsYXVuY2hUZW1wbGF0ZU5hbWU6IGBidWlsZGtpdGVMYXVuY2hUZW1wbGF0ZWAsXG4gICAgICBpbnN0YW5jZVR5cGU6IHByb3BzLmFnZW50SW5zdGFuY2VUeXBlLFxuICAgICAgbWFjaGluZUltYWdlOiBNYWNoaW5lSW1hZ2UubG9va3VwKHtcbiAgICAgICAgbmFtZTogXCJidWlsZGtpdGUtc3RhY2stbGludXgteDg2XzY0LSpcIixcbiAgICAgICAgb3duZXJzOiBbXCIxNzI4NDAwNjQ4MzJcIl0sXG4gICAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgICBbXCJibG9jay1kZXZpY2UtbWFwcGluZy52b2x1bWUtdHlwZVwiXTogW1wiZ3AzXCJdXG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgdXNlckRhdGE6IG11bHRpcGFydFVzZXJEYXRhLFxuICAgICAgcm9sZTogYWdlbnRSb2xlLFxuICAgICAgYmxvY2tEZXZpY2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBkZXZpY2VOYW1lOiBcIi9kZXYveHZkYVwiLFxuICAgICAgICAgIHZvbHVtZTogQmxvY2tEZXZpY2VWb2x1bWUuZWJzKHByb3BzLmFnZW50Vm9sdW1lU2l6ZSlcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGRldGFpbGVkTW9uaXRvcmluZzogdHJ1ZSxcbiAgICAgIHJlcXVpcmVJbWRzdjI6IGZhbHNlLFxuICAgICAgaHR0cFB1dFJlc3BvbnNlSG9wTGltaXQ6IDIsXG4gICAgICBodHRwVG9rZW5zOiBMYXVuY2hUZW1wbGF0ZUh0dHBUb2tlbnMuUkVRVUlSRUQsXG4gICAgICBpbnN0YW5jZU1ldGFkYXRhVGFnczogdHJ1ZVxuICAgIH0pO1xuXG4gICAgdGFnUmVzb3VyY2UobGF1bmNoVGVtcGxhdGUsIHtcbiAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246ZW52aXJvbm1lbnRcIjogcHJvcHMuZW52aXJvbm1lbnQsXG4gICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOnNlcnZpY2VcIjogXCJidWlsZGtpdGVcIixcbiAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246b3duZXJcIjogXCJwbGF0Zm9ybVwiLFxuICAgICAgUm9sZTogXCJidWlsZGtpdGVBZ2VudFwiLFxuICAgICAgQnVpbGRraXRlQWdlbnRSZWxlYXNlOiBhZ2VudFJlbGVhc2UuU1RBQkxFLFxuICAgICAgQnVpbGRraXRlUXVldWU6IHByb3BzLnF1ZXVlTmFtZVxuICAgIH0pO1xuXG4gICAgLy8gQXV0b3NjYWxpbmcgR3JvdXBcbiAgICBjb25zdCBhdXRvU2NhbGluZ0dyb3VwID0gbmV3IEF1dG9TY2FsaW5nR3JvdXAoXG4gICAgICB0aGlzLFxuICAgICAgXCJhZ2VudEF1dG9TY2FsaW5nR3JvdXBcIixcbiAgICAgIHtcbiAgICAgICAgdnBjOiB2cGMsXG4gICAgICAgIG1peGVkSW5zdGFuY2VzUG9saWN5OiB7XG4gICAgICAgICAgbGF1bmNoVGVtcGxhdGU6IGxhdW5jaFRlbXBsYXRlLFxuICAgICAgICAgIGluc3RhbmNlc0Rpc3RyaWJ1dGlvbjoge1xuICAgICAgICAgICAgb25EZW1hbmRQZXJjZW50YWdlQWJvdmVCYXNlQ2FwYWNpdHk6IHByb3BzLnNwb3RDYXBhY2l0eVBlcmNlbnRhZ2UsXG4gICAgICAgICAgICBzcG90QWxsb2NhdGlvblN0cmF0ZWd5OiBTcG90QWxsb2NhdGlvblN0cmF0ZWd5LkNBUEFDSVRZX09QVElNSVpFRFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWluQ2FwYWNpdHk6IHByb3BzLmFnZW50TWluSW5zdGFuY2VzLFxuICAgICAgICBtYXhDYXBhY2l0eTogcHJvcHMuYWdlbnRNYXhJbnN0YW5jZXMsXG4gICAgICAgIGNvb2xkb3duOiBEdXJhdGlvbi5zZWNvbmRzKDYwKSxcbiAgICAgICAgZ3JvdXBNZXRyaWNzOiBbR3JvdXBNZXRyaWNzLmFsbCgpXSxcbiAgICAgICAgdXBkYXRlUG9saWN5OiBVcGRhdGVQb2xpY3kucmVwbGFjaW5nVXBkYXRlKCksXG4gICAgICAgIG5ld0luc3RhbmNlc1Byb3RlY3RlZEZyb21TY2FsZUluOiB0cnVlLFxuICAgICAgICB0ZXJtaW5hdGlvblBvbGljaWVzOiBbXG4gICAgICAgICAgVGVybWluYXRpb25Qb2xpY3kuT0xERVNUX0xBVU5DSF9DT05GSUdVUkFUSU9OLFxuICAgICAgICAgIFRlcm1pbmF0aW9uUG9saWN5LkNMT1NFU1RfVE9fTkVYVF9JTlNUQU5DRV9IT1VSXG4gICAgICAgIF0sXG4gICAgICAgIHNzbVNlc3Npb25QZXJtaXNzaW9uczogdHJ1ZVxuICAgICAgfVxuICAgICk7XG5cbiAgICBhZ2VudFJvbGUuYXR0YWNoSW5saW5lUG9saWN5KFxuICAgICAgbmV3IFBvbGljeSh0aGlzLCBcInVwZGF0ZUF1dG9TY2FsaW5nR3JvdXBcIiwge1xuICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgIFwiYXV0b3NjYWxpbmc6U2V0SW5zdGFuY2VIZWFsdGhcIixcbiAgICAgICAgICAgICAgXCJhdXRvc2NhbGluZzpUZXJtaW5hdGVJbnN0YW5jZUluQXV0b1NjYWxpbmdHcm91cFwiXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgcmVzb3VyY2VzOiBbYCR7YXV0b1NjYWxpbmdHcm91cC5hdXRvU2NhbGluZ0dyb3VwQXJufWBdXG4gICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGFnUmVzb3VyY2UoYXV0b1NjYWxpbmdHcm91cCwge1xuICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjplbnZpcm9ubWVudFwiOiBwcm9wcy5lbnZpcm9ubWVudCxcbiAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246c2VydmljZVwiOiBcImJ1aWxka2l0ZVwiLFxuICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjpvd25lclwiOiBcInBsYXRmb3JtXCJcbiAgICB9KTtcblxuICAgIC8vIEJ1aWxka2l0ZSBTdXNwZW5kIEF1c3Rvc2NhbGluZyBHcm91cCBDdXN0b20gUmVzb3VyY2VcbiAgICBuZXcgQXdzQ3VzdG9tUmVzb3VyY2UodGhpcywgXCJzdXNwZW5kQXV0b3NjYWxpbmdQcm9jZXNzXCIsIHtcbiAgICAgIGZ1bmN0aW9uTmFtZTogXCJzdXNwZW5kQXV0b1NjYWxpbmdQcm9jZXNzZXNzXCIsXG4gICAgICBvbkNyZWF0ZToge1xuICAgICAgICBzZXJ2aWNlOiBcIkF1dG9TY2FsaW5nXCIsXG4gICAgICAgIGFjdGlvbjogXCJzdXNwZW5kUHJvY2Vzc2VzXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBBdXRvU2NhbGluZ0dyb3VwTmFtZTogYXV0b1NjYWxpbmdHcm91cC5hdXRvU2NhbGluZ0dyb3VwTmFtZSxcbiAgICAgICAgICBTY2FsaW5nUHJvY2Vzc2VzOiBbXCJBWlJlYmFsYW5jZVwiXVxuICAgICAgICB9LFxuICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IFBoeXNpY2FsUmVzb3VyY2VJZC5vZihcbiAgICAgICAgICBcInN1c3BlbmRBdXRvU2NhbGluZ1Byb2Nlc3Nlc3NcIlxuICAgICAgICApXG4gICAgICB9LFxuICAgICAgb25VcGRhdGU6IHtcbiAgICAgICAgc2VydmljZTogXCJBdXRvU2NhbGluZ1wiLFxuICAgICAgICBhY3Rpb246IFwic3VzcGVuZFByb2Nlc3Nlc1wiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgQXV0b1NjYWxpbmdHcm91cE5hbWU6IGF1dG9TY2FsaW5nR3JvdXAuYXV0b1NjYWxpbmdHcm91cE5hbWUsXG4gICAgICAgICAgU2NhbGluZ1Byb2Nlc3NlczogW1wiQVpSZWJhbGFuY2VcIl1cbiAgICAgICAgfSxcbiAgICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkOiBQaHlzaWNhbFJlc291cmNlSWQub2YoXG4gICAgICAgICAgXCJzdXNwZW5kQXV0b1NjYWxpbmdQcm9jZXNzZXNzXCJcbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIHJlc291cmNlVHlwZTogXCJDdXN0b206OmJ1aWxka2l0ZVN1c3BlbmRBdXRvc2NhbGluZ1wiXG4gICAgfSk7XG5cbiAgICBuZXcgQ2ZuQXBwbGljYXRpb24odGhpcywgXCJhZ2VudFNjYWxlclwiLCB7XG4gICAgICBsb2NhdGlvbjoge1xuICAgICAgICBhcHBsaWNhdGlvbklkOlxuICAgICAgICAgIFwiYXJuOmF3czpzZXJ2ZXJsZXNzcmVwbzp1cy1lYXN0LTE6MTcyODQwMDY0ODMyOmFwcGxpY2F0aW9ucy9idWlsZGtpdGUtYWdlbnQtc2NhbGVyXCIsXG4gICAgICAgIHNlbWFudGljVmVyc2lvbjogcHJvcHMuYWdlbnRTY2FsZXJWZXJzaW9uXG4gICAgICB9LFxuICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICBCdWlsZGtpdGVBZ2VudFRva2VuUGFyYW1ldGVyOiBgJHthZ2VudFRva2VuLm5hbWV9YCxcbiAgICAgICAgQnVpbGRraXRlQWdlbnRUb2tlblBhcmFtZXRlclN0b3JlS01TS2V5OiBhZ2VudFRva2VuLmNtay5rZXkua2V5QXJuLFxuICAgICAgICBSb2xlUGVybWlzc2lvbnNCb3VuZGFyeUFSTjogXCJcIixcbiAgICAgICAgQnVpbGRraXRlUXVldWU6IHByb3BzLnF1ZXVlTmFtZSxcbiAgICAgICAgQWdlbnRzUGVySW5zdGFuY2U6IGAke3Byb3BzLmFnZW50c1Blckluc3RhbmNlfWAsXG4gICAgICAgIE1pblNpemU6IGAke3Byb3BzLmFnZW50TWluSW5zdGFuY2VzfWAsXG4gICAgICAgIE1heFNpemU6IGAke3Byb3BzLmFnZW50TWF4SW5zdGFuY2VzfWAsXG4gICAgICAgIEFnZW50QXV0b1NjYWxlR3JvdXA6IGF1dG9TY2FsaW5nR3JvdXAuYXV0b1NjYWxpbmdHcm91cE5hbWUsXG4gICAgICAgIFNjYWxlT3V0RmFjdG9yOiBwcm9wcy5zY2FsZU91dEZhY3RvcixcbiAgICAgICAgU2NhbGVPdXRGb3JXYWl0aW5nSm9iczogYCR7cHJvcHMuc2NhbGVPdXRXYWl0aW5nRm9ySm9ic31gLFxuICAgICAgICBFdmVudFNjaGVkdWxlUGVyaW9kOiBwcm9wcy5ldmVudFNjaGVkdWxlZFBlcmlvZCxcbiAgICAgICAgTWluUG9sbEludGVydmFsOiBwcm9wcy5taW5Qb2xsSW50ZXJ2YWxcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
372
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRraXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL3BhdHRlcm5zL2F3cy9idWlsZGtpdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQTBEO0FBQzFELGlEQUs2QjtBQUM3QixpREFZNkI7QUFDN0IsaUVBTXFDO0FBQ3JDLGlEQUFxRDtBQUNyRCxtRUFBa0U7QUFDbEUscUVBQXlFO0FBRXpFLDREQUF5RDtBQUN6RCxpREFBdUQ7QUFDdkQseURBQXVEO0FBQ3ZELHlEQUFvRTtBQUNwRSx1RkFBb0Y7QUFDcEYseURBQWtEO0FBR2xELElBQUssWUFJSjtBQUpELFdBQUssWUFBWTtJQUNmLGlDQUFpQixDQUFBO0lBQ2pCLDZCQUFhLENBQUE7SUFDYiw2QkFBYSxDQUFBO0FBQ2YsQ0FBQyxFQUpJLFlBQVksS0FBWixZQUFZLFFBSWhCO0FBbURZLFFBQUEscUJBQXFCLEdBOEM5QjtJQUNGLGdDQUFnQztJQUNoQyxtQkFBbUIsRUFBRSxTQUFTO0lBQzlCLE9BQU8sRUFBRSxFQUFFO0lBQ1gscUJBQXFCLEVBQUUsWUFBWSxDQUFDLE1BQU07SUFDMUMsa0JBQWtCLEVBQUUsRUFBRTtJQUN0Qiw0QkFBNEIsRUFBRSxLQUFLO0lBQ25DLHlCQUF5QixFQUFFLEVBQUU7SUFDN0IsMkJBQTJCLEVBQUUsT0FBTztJQUNwQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ25CLDRCQUE0QixFQUFFLEVBQUU7SUFDaEMsK0JBQStCLEVBQUUsRUFBRTtJQUNuQyxrQ0FBa0MsRUFBRSxLQUFLO0lBQ3pDLGtDQUFrQyxFQUFFLEVBQUU7SUFDdEMsY0FBYyxFQUFFLFNBQVM7SUFDekIsaUJBQWlCLEVBQUUsQ0FBQztJQUNwQixrQkFBa0IsRUFBRSxFQUFFO0lBQ3RCLGVBQWUsRUFBRSxFQUFFO0lBQ25CLGtCQUFrQixFQUFFLEVBQUU7SUFDdEIsaUJBQWlCO0lBQ2pCLGlCQUFpQixFQUFFLHNCQUFZLENBQUMsRUFBRSxDQUFD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RUFBRTtnQkFDL0MsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixFQUFFO2dCQUNyQyxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ3JDLG1CQUFtQixFQUFFLGdCQUFnQixDQUFDLG9CQUFvQjtnQkFDMUQsY0FBYyxFQUFFLEtBQUssQ0FBQyxjQUFjO2dCQUNwQyxzQkFBc0IsRUFBRSxHQUFHLEtBQUssQ0FBQyxzQkFBc0IsRUFBRTtnQkFDekQsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLHlCQUF5QjtnQkFDcEQsZUFBZSxFQUFFLEtBQUssQ0FBQyxxQkFBcUI7Z0JBQzVDLGdCQUFnQixFQUFFLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixFQUFFO2FBQzlDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBaFpELDhCQWdaQztBQUVELGtCQUFlLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cmF0aW9uLCBTdGFja1Byb3BzLCBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgQ29tcG9zaXRlUHJpbmNpcGFsLFxuICBTZXJ2aWNlUHJpbmNpcGFsLFxuICBQb2xpY3lEb2N1bWVudCxcbiAgUG9saWN5U3RhdGVtZW50XG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQge1xuICBCbG9ja0RldmljZVZvbHVtZSxcbiAgSW5zdGFuY2VDbGFzcyxcbiAgSW5zdGFuY2VTaXplLFxuICBJbnN0YW5jZVR5cGUsXG4gIExhdW5jaFRlbXBsYXRlLFxuICBMYXVuY2hUZW1wbGF0ZUh0dHBUb2tlbnMsXG4gIE1hY2hpbmVJbWFnZSxcbiAgTXVsdGlwYXJ0Qm9keSxcbiAgTXVsdGlwYXJ0VXNlckRhdGEsXG4gIFN1Ym5ldFR5cGUsXG4gIFVzZXJEYXRhXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQge1xuICBBdXRvU2NhbGluZ0dyb3VwLFxuICBHcm91cE1ldHJpY3MsXG4gIFNwb3RBbGxvY2F0aW9uU3RyYXRlZ3ksXG4gIFRlcm1pbmF0aW9uUG9saWN5LFxuICBVcGRhdGVQb2xpY3lcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1hdXRvc2NhbGluZ1wiO1xuaW1wb3J0IHsgQ2ZuQXBwbGljYXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNhbVwiO1xuaW1wb3J0IHsgUGh5c2ljYWxSZXNvdXJjZUlkIH0gZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IEJ1Y2tldERlcGxveW1lbnQsIFNvdXJjZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczMtZGVwbG95bWVudFwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFZwYyB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL25ldHdvcmtpbmcvdnBjXCI7XG5pbXBvcnQgeyBQb2xpY3ksIFJvbGUgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9pYW1cIjtcbmltcG9ydCB7IFMzQnVja2V0IH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3Mvc3RvcmFnZVwiO1xuaW1wb3J0IHsgU2VjdXJlU3RyaW5nUGFyYW1ldGVyIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3Mvc2VjcmV0c1wiO1xuaW1wb3J0IHsgQXdzQ3VzdG9tUmVzb3VyY2UgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy91dGlsaXRpZXMvYXdzQ3VzdG9tUmVzb3VyY2VcIjtcbmltcG9ydCB0YWdSZXNvdXJjZSBmcm9tIFwiLi4vLi4vdXRpbHMvdGFnUmVzb3VyY2VcIjtcbmltcG9ydCB7IEtleVZhbHVlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmVudW0gYWdlbnRSZWxlYXNlIHtcbiAgU1RBQkxFID0gXCJzdGFibGVcIixcbiAgQkVUQSA9IFwiYmV0YVwiLFxuICBFREdFID0gXCJlZGdlXCJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZGtpdGVQcm9wcyBleHRlbmRzIFN0YWNrUHJvcHMge1xuICBhY2NvdW50TmFtZTogc3RyaW5nO1xuICBlbGFzdGljU3RhY2tWZXJzaW9uOiBzdHJpbmc7XG4gIGtleU5hbWU6IHN0cmluZztcbiAgYnVpbGRraXRlQWdlbnRSZWxlYXNlOiBhZ2VudFJlbGVhc2U7XG4gIGJ1aWxka2l0ZUFnZW50VGFnczogc3RyaW5nO1xuICBidWlsZGtpdGVBZ2VudFRpbWVzdGFtcExpbmVzOiBib29sZWFuO1xuICBidWlsZGtpdGVBZ2VudEV4cGVyaW1lbnRzOiBzdHJpbmc7XG4gIGJ1aWxka2l0ZUFnZW50U2NhbGVyVmVyc2lvbjogc3RyaW5nO1xuICBsb2dSZXRlbnRpb25EYXlzOiBudW1iZXI7XG4gIGJ1aWxka2l0ZUFnZW50VHJhY2luZ0JhY2tlbmQ6IFwiXCIgfCBcImRhdGFkb2dcIiB8IFwib3BlbnRlbGVtZXRyeVwiO1xuICBidWlsZGtpdGVBZ2VudENhbmNlbEdyYWNlUGVyaW9kOiBudW1iZXI7XG4gIGJ1aWxka2l0ZVRlcm1pbmF0ZUluc3RhbmNlQWZ0ZXJKb2I6IGJvb2xlYW47XG4gIGJ1aWxka2l0ZUFkZGl0aW9uYWxTdWRvUGVybWlzc2lvbnM6IHN0cmluZztcbiAgYnVpbGRraXRlUXVldWU6IHN0cmluZztcbiAgYWdlbnRzUGVySW5zdGFuY2U6IG51bWJlcjtcbiAgYm9vdHN0cmFwU2NyaXB0VXJsOiBzdHJpbmc7XG4gIGFnZW50RW52RmlsZVVybDogc3RyaW5nO1xuICBhdXRob3JpemVkVXNlcnNVcmw6IHN0cmluZztcbiAgLy8gSW5mcmFzdHJ1Y3R1cmVcbiAgYWdlbnRJbnN0YW5jZVR5cGU6IEluc3RhbmNlVHlwZTtcbiAgYWdlbnRWb2x1bWVTaXplOiBudW1iZXI7XG4gIGFnZW50TWluSW5zdGFuY2VzOiBudW1iZXI7XG4gIGFnZW50TWF4SW5zdGFuY2VzOiBudW1iZXI7XG4gIHNjYWxlckV2ZW50U2NoZWR1bGVQZXJpb2Q6IHN0cmluZztcbiAgc2NhbGVyTWluUG9sbEludGVydmFsOiBzdHJpbmc7XG4gIHNwb3RDYXBhY2l0eVBlcmNlbnRhZ2U6IG51bWJlcjtcbiAgc2NhbGVPdXRGYWN0b3I6IHN0cmluZztcbiAgZWNyQWNjZXNzUG9saWN5OiBzdHJpbmc7XG4gIHNjYWxlSW5JZGxlUGVyaW9kOiBudW1iZXI7XG4gIHNjYWxlT3V0V2FpdGluZ0ZvckpvYnM6IGJvb2xlYW47XG4gIGRvY2tlck5ldHdvcmtpbmdQcm90b2NvbDogXCJpcHY0XCIgfCBcImR1YWxzdGFja1wiO1xuICBlbmFibGVTZWNyZXRzUGx1Z2luOiBib29sZWFuO1xuICBlbmFibGVFY3JQbHVnaW46IGJvb2xlYW47XG4gIGVuYWJsZURvY2tlckxvZ2luUGx1Z2luOiBib29sZWFuO1xuICBlbmFibGVEb2NrZXJVc2VyTmFtZXNwYWNlUmVtYXA6IGJvb2xlYW47XG4gIGVuYWJsZURvY2tlckV4cGVyaW1lbnRhbDogYm9vbGVhbjtcbiAgZW5hYmxlSW5zdGFuY2VTdG9yYWdlOiBib29sZWFuO1xuICBtb3VudFRtcGZzQXRUbXA6IGJvb2xlYW47XG4gIGJ1aWxka2l0ZUFnZW50RW5hYmxlR2l0TWlycm9yczogYm9vbGVhbjtcbiAgcGlwZWxpbmVTaWduaW5nS01TS2V5OiBzdHJpbmc7XG4gIHBpcGVsaW5lU2lnbmluZ1ZlcmlmaWNhdGlvbkZhaWx1cmVCZWhhdmlvcjogXCJibG9ja1wiIHwgXCJ3YXJuXCI7XG4gIC8vIFRhZ3NcbiAgLy8gVE9ETzogTW92ZSB0aGVzZSBpbnRvIGEgc2luZ2xlIHRhZ3Mgb2JqZWN0XG4gIHRhZ3M6IEtleVZhbHVlO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICBvd25lcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IEJ1aWxka2l0ZURlZmF1bHRQcm9wczogUGljazxcbiAgQnVpbGRraXRlUHJvcHMsXG4gIC8vIEJ1aWxka2l0ZSBBZ2VudCBDb25maWd1cmF0aW9uXG4gIHwgXCJlbGFzdGljU3RhY2tWZXJzaW9uXCJcbiAgfCBcImtleU5hbWVcIlxuICB8IFwiYnVpbGRraXRlQWdlbnRSZWxlYXNlXCJcbiAgfCBcImJ1aWxka2l0ZUFnZW50VGFnc1wiXG4gIHwgXCJidWlsZGtpdGVBZ2VudFRpbWVzdGFtcExpbmVzXCJcbiAgfCBcImJ1aWxka2l0ZUFnZW50RXhwZXJpbWVudHNcIlxuICB8IFwiYnVpbGRraXRlQWdlbnRTY2FsZXJWZXJzaW9uXCJcbiAgfCBcImxvZ1JldGVudGlvbkRheXNcIlxuICB8IFwiYnVpbGRraXRlQWdlbnRUcmFjaW5nQmFja2VuZFwiXG4gIHwgXCJidWlsZGtpdGVBZ2VudENhbmNlbEdyYWNlUGVyaW9kXCJcbiAgfCBcImJ1aWxka2l0ZVRlcm1pbmF0ZUluc3RhbmNlQWZ0ZXJKb2JcIlxuICB8IFwiYnVpbGRraXRlQWRkaXRpb25hbFN1ZG9QZXJtaXNzaW9uc1wiXG4gIHwgXCJidWlsZGtpdGVRdWV1ZVwiXG4gIHwgXCJhZ2VudHNQZXJJbnN0YW5jZVwiXG4gIHwgXCJib290c3RyYXBTY3JpcHRVcmxcIlxuICB8IFwiYWdlbnRFbnZGaWxlVXJsXCJcbiAgfCBcImF1dGhvcml6ZWRVc2Vyc1VybFwiXG4gIC8vIEluZnJhc3RydWN0dXJlXG4gIHwgXCJhZ2VudEluc3RhbmNlVHlwZVwiXG4gIHwgXCJhZ2VudFZvbHVtZVNpemVcIlxuICB8IFwiYWdlbnRNaW5JbnN0YW5jZXNcIlxuICB8IFwiYWdlbnRNYXhJbnN0YW5jZXNcIlxuICB8IFwic2NhbGVyRXZlbnRTY2hlZHVsZVBlcmlvZFwiXG4gIHwgXCJzY2FsZXJNaW5Qb2xsSW50ZXJ2YWxcIlxuICB8IFwic3BvdENhcGFjaXR5UGVyY2VudGFnZVwiXG4gIHwgXCJzY2FsZU91dEZhY3RvclwiXG4gIHwgXCJzY2FsZUluSWRsZVBlcmlvZFwiXG4gIHwgXCJzY2FsZU91dFdhaXRpbmdGb3JKb2JzXCJcbiAgfCBcImVjckFjY2Vzc1BvbGljeVwiXG4gIHwgXCJkb2NrZXJOZXR3b3JraW5nUHJvdG9jb2xcIlxuICB8IFwiZW5hYmxlU2VjcmV0c1BsdWdpblwiXG4gIHwgXCJlbmFibGVFY3JQbHVnaW5cIlxuICB8IFwiZW5hYmxlRG9ja2VyTG9naW5QbHVnaW5cIlxuICB8IFwiZW5hYmxlRG9ja2VyVXNlck5hbWVzcGFjZVJlbWFwXCJcbiAgfCBcImVuYWJsZURvY2tlckV4cGVyaW1lbnRhbFwiXG4gIHwgXCJlbmFibGVJbnN0YW5jZVN0b3JhZ2VcIlxuICB8IFwibW91bnRUbXBmc0F0VG1wXCJcbiAgfCBcImJ1aWxka2l0ZUFnZW50RW5hYmxlR2l0TWlycm9yc1wiXG4gIHwgXCJwaXBlbGluZVNpZ25pbmdLTVNLZXlcIlxuICB8IFwicGlwZWxpbmVTaWduaW5nVmVyaWZpY2F0aW9uRmFpbHVyZUJlaGF2aW9yXCJcbiAgLy8gVGFnc1xuICB8IFwiZW52aXJvbm1lbnRcIlxuICB8IFwib3duZXJcIlxuPiA9IHtcbiAgLy8gQnVpbGRraXRlIEFnZW50IENvbmZpZ3VyYXRpb25cbiAgZWxhc3RpY1N0YWNrVmVyc2lvbjogXCJ2Ni4zMC4wXCIsXG4gIGtleU5hbWU6IFwiXCIsXG4gIGJ1aWxka2l0ZUFnZW50UmVsZWFzZTogYWdlbnRSZWxlYXNlLlNUQUJMRSxcbiAgYnVpbGRraXRlQWdlbnRUYWdzOiBcIlwiLFxuICBidWlsZGtpdGVBZ2VudFRpbWVzdGFtcExpbmVzOiBmYWxzZSxcbiAgYnVpbGRraXRlQWdlbnRFeHBlcmltZW50czogXCJcIixcbiAgYnVpbGRraXRlQWdlbnRTY2FsZXJWZXJzaW9uOiBcIjEuOC4wXCIsXG4gIGxvZ1JldGVudGlvbkRheXM6IDEsXG4gIGJ1aWxka2l0ZUFnZW50VHJhY2luZ0JhY2tlbmQ6IFwiXCIsXG4gIGJ1aWxka2l0ZUFnZW50Q2FuY2VsR3JhY2VQZXJpb2Q6IDYwLFxuICBidWlsZGtpdGVUZXJtaW5hdGVJbnN0YW5jZUFmdGVySm9iOiBmYWxzZSxcbiAgYnVpbGRraXRlQWRkaXRpb25hbFN1ZG9QZXJtaXNzaW9uczogXCJcIixcbiAgYnVpbGRraXRlUXVldWU6IFwiZGVmYXVsdFwiLFxuICBhZ2VudHNQZXJJbnN0YW5jZTogMSxcbiAgYm9vdHN0cmFwU2NyaXB0VXJsOiBcIlwiLFxuICBhZ2VudEVudkZpbGVVcmw6IFwiXCIsXG4gIGF1dGhvcml6ZWRVc2Vyc1VybDogXCJcIixcbiAgLy8gSW5mcmFzdHJ1Y3R1cmVcbiAgYWdlbnRJbnN0YW5jZVR5cGU6IEluc3RhbmNlVHlwZS5vZihJbnN0YW5jZUNsYXNzLk01LCBJbnN0YW5jZVNpemUuTEFSR0UpLFxuICBhZ2VudE1pbkluc3RhbmNlczogMCxcbiAgYWdlbnRNYXhJbnN0YW5jZXM6IDEwLFxuICBhZ2VudFZvbHVtZVNpemU6IDI1MCxcbiAgc2NhbGVyRXZlbnRTY2hlZHVsZVBlcmlvZDogXCIxIG1pbnV0ZVwiLFxuICBzY2FsZXJNaW5Qb2xsSW50ZXJ2YWw6IFwiMTBzXCIsXG4gIHNwb3RDYXBhY2l0eVBlcmNlbnRhZ2U6IDc1LFxuICBzY2FsZU91dEZhY3RvcjogXCIxLjBcIixcbiAgc2NhbGVJbklkbGVQZXJpb2Q6IDYwMCxcbiAgc2NhbGVPdXRXYWl0aW5nRm9ySm9iczogZmFsc2UsXG4gIGVjckFjY2Vzc1BvbGljeTogXCJcIixcbiAgZG9ja2VyTmV0d29ya2luZ1Byb3RvY29sOiBcImlwdjRcIixcbiAgZW5hYmxlU2VjcmV0c1BsdWdpbjogdHJ1ZSxcbiAgZW5hYmxlRWNyUGx1Z2luOiB0cnVlLFxuICBlbmFibGVEb2NrZXJMb2dpblBsdWdpbjogdHJ1ZSxcbiAgZW5hYmxlRG9ja2VyVXNlck5hbWVzcGFjZVJlbWFwOiB0cnVlLFxuICBlbmFibGVEb2NrZXJFeHBlcmltZW50YWw6IGZhbHNlLFxuICBlbmFibGVJbnN0YW5jZVN0b3JhZ2U6IGZhbHNlLFxuICBtb3VudFRtcGZzQXRUbXA6IHRydWUsXG4gIGJ1aWxka2l0ZUFnZW50RW5hYmxlR2l0TWlycm9yczogZmFsc2UsXG4gIHBpcGVsaW5lU2lnbmluZ0tNU0tleTogXCJcIixcbiAgcGlwZWxpbmVTaWduaW5nVmVyaWZpY2F0aW9uRmFpbHVyZUJlaGF2aW9yOiBcImJsb2NrXCIsXG4gIC8vIFRhZ3NcbiAgZW52aXJvbm1lbnQ6IFwicGxhdGZvcm1cIixcbiAgb3duZXI6IFwiZW5naW5lZXJcIlxufTtcblxuZXhwb3J0IGNsYXNzIEJ1aWxka2l0ZSBleHRlbmRzIFN0YWNrIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEJ1aWxka2l0ZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICAvLyBUT0RPOiBNYWtlIHRoaXMgaW1tdXRhYmxlIGFuZCBlbmZvcmNlIHRoZSB0YWdzIGJlaW5nIHNldFxuICAgIGNvbnN0IHRhZ3MgPSB7XG4gICAgICAuLi5wcm9wcy50YWdzLFxuICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjplbnZpcm9ubWVudFwiOiBwcm9wcy5lbnZpcm9ubWVudCB8fCBcInBsYXRmb3JtXCIsXG4gICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOnNlcnZpY2VcIjogXCJidWlsZGtpdGVcIixcbiAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246b3duZXJcIjogcHJvcHMub3duZXIgfHwgXCJlbmdpbmVlclwiIC8vIFRPRE86IHRoaXMgd2lsbCBoYXZlIHRvIGJlIHRoZSBwbGF0Zm9ybSBhY2NvdW50IG5hbWU/XG4gICAgfTtcblxuICAgIC8vIFZQQ1xuICAgIGNvbnN0IHZwYyA9IG5ldyBWcGModGhpcywgXCJidWlsZGtpdGVcIiwge1xuICAgICAgYWNjb3VudE5hbWU6IHByb3BzLmFjY291bnROYW1lLFxuICAgICAgdGFnczogcHJvcHMudGFncyxcbiAgICAgIHN1Ym5ldENvbmZpZ3VyYXRpb246IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IGAke2lkfWAsXG4gICAgICAgICAgc3VibmV0VHlwZTogU3VibmV0VHlwZS5QVUJMSUNcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgLy8gQXJ0aWZhY3RzIEJ1Y2tldFxuICAgIGNvbnN0IGFydGlmYWN0QnVja2V0ID0gbmV3IFMzQnVja2V0KHRoaXMsIFwiYXJ0aWZhY3RCdWNrZXRcIik7XG5cbiAgICAvLyBNYW5hZ2VkIFNlY3JldHNcbiAgICBjb25zdCBtYW5hZ2VkU2VjcmV0c0J1Y2tldCA9IG5ldyBTM0J1Y2tldCh0aGlzLCBcIm1hbmFnZWRTZWNyZXRzQnVja2V0XCIpO1xuICAgIGlmIChwcm9jZXNzLmVudi5CVUlMREtJVEVfUFJJVkFURV9TU0hfS0VZKSB7XG4gICAgICBuZXcgQnVja2V0RGVwbG95bWVudCh0aGlzLCBcImJ1aWxka2l0ZVNzaEtleVwiLCB7XG4gICAgICAgIHNvdXJjZXM6IFtcbiAgICAgICAgICBTb3VyY2UuZGF0YShcInByaXZhdGVfc3NoX2tleVwiLCBwcm9jZXNzLmVudi5CVUlMREtJVEVfUFJJVkFURV9TU0hfS0VZKVxuICAgICAgICBdLFxuICAgICAgICBkZXN0aW5hdGlvbkJ1Y2tldDogbWFuYWdlZFNlY3JldHNCdWNrZXRcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiV0FSTjonQlVJTERLSVRFX1BSSVZBVEVfU1NIX0tFWScgZW52aXJvbm1lbnQgdmFyaWFibGUgbm90IGRlY2xhcmVkLiBTa2lwcGluZyB1cGxvYWQgb2YgcHJpdmF0ZSBTU0gga2V5XCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRW5jcnlwdGVkIEJ1aWxka2l0ZSBBZ2VudCBUb2tlblxuICAgIGNvbnN0IGFnZW50VG9rZW4gPSBuZXcgU2VjdXJlU3RyaW5nUGFyYW1ldGVyKHRoaXMsIFwiYWdlbnRUb2tlblwiLCB7XG4gICAgICBuYW1lOiBgL2J1aWxka2l0ZS9hZ2VudFRva2VuYCxcbiAgICAgIGFsaWFzTmFtZTogYGJ1aWxka2l0ZUFnZW50VG9rZW5gLFxuICAgICAgdmFsdWU6IHByb2Nlc3MuZW52LkJVSUxES0lURV9BR0VOVF9UT0tFTixcbiAgICAgIG92ZXJ3cml0ZTogcHJvY2Vzcy5lbnYuQlVJTERLSVRFX0FHRU5UX1RPS0VOID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgdGFnczogdGFncyxcbiAgICAgIGFjY291bnRJZDogdGhpcy5hY2NvdW50LFxuICAgICAgcmVnaW9uOiB0aGlzLnJlZ2lvblxuICAgIH0pO1xuXG4gICAgLy8gQnVpbGRraXRlIEFnZW50IEV4ZWN1dGlvbiBSb2xlXG4gICAgY29uc3QgYWdlbnRSb2xlID0gbmV3IFJvbGUodGhpcywgXCJhZ2VudElhbVJvbGVcIiwge1xuICAgICAgcm9sZU5hbWU6IGAke2lkfUFnZW50Um9sZWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJCdWlsZGtpdGUgQWdlbnQgSUFNIFJvbGVcIixcbiAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgIFtcImRlY3J5cHRCdWlsZGtpdGVBZ2VudFRva2VuXCJdOiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBhY3Rpb25zOiBbXCJrbXM6RGVjcnlwdFwiXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbYWdlbnRUb2tlbi5jbWsua2V5LmtleUFybl1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICB9KSxcbiAgICAgICAgW1wicmVhZEJ1aWxka2l0ZUFnZW50VG9rZW5cIl06IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcInNzbTpHZXRQYXJhbWV0ZXJcIl0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgICAgIGBhcm46YXdzOnNzbToke3Byb3BzLmVudj8ucmVnaW9ufToke3Byb3BzLmVudj8uYWNjb3VudH06cGFyYW1ldGVyJHthZ2VudFRva2VuLm5hbWV9YFxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgfSksXG4gICAgICAgIFtcInJlYWRNYW5hZ2VkU2VjcmV0c0J1Y2tldFwiXTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgYWN0aW9uczogW1wiczM6R2V0KlwiLCBcInMzOkxpc3QqXCJdLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICAgICAgICBtYW5hZ2VkU2VjcmV0c0J1Y2tldC5idWNrZXRBcm4sXG4gICAgICAgICAgICAgICAgYCR7bWFuYWdlZFNlY3JldHNCdWNrZXQuYnVja2V0QXJufS8qYFxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgfSksXG4gICAgICAgIFtcIndyaXRlQXJ0aWZhY3RCdWNrZXRcIl06IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICBcInMzOkdldE9iamVjdFwiLFxuICAgICAgICAgICAgICAgIFwiczM6R2V0T2JqZWN0QWNsXCIsXG4gICAgICAgICAgICAgICAgXCJzMzpHZXRPYmplY3RWZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgXCJzMzpHZXRPYmplY3RWZXJzaW9uQWNsXCIsXG4gICAgICAgICAgICAgICAgXCJzMzpMaXN0QnVja2V0XCIsXG4gICAgICAgICAgICAgICAgXCJzMzpQdXRPYmplY3RcIixcbiAgICAgICAgICAgICAgICBcInMzOlB1dE9iamVjdEFjbFwiLFxuICAgICAgICAgICAgICAgIFwiczM6UHV0T2JqZWN0VmVyc2lvbkFjbFwiXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgICAgIGFydGlmYWN0QnVja2V0LmJ1Y2tldEFybixcbiAgICAgICAgICAgICAgICBgJHthcnRpZmFjdEJ1Y2tldC5idWNrZXRBcm59LypgXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICB9KSxcbiAgICAgICAgW1wiZGVzY3JpYmVJbnN0YW5jZVwiXTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgIFwiYXV0b3NjYWxpbmc6RGVzY3JpYmVBdXRvU2NhbGluZ0luc3RhbmNlc1wiLFxuICAgICAgICAgICAgICAgIFwiY2xvdWR3YXRjaDpQdXRNZXRyaWNEYXRhXCIsXG4gICAgICAgICAgICAgICAgXCJjbG91ZGZvcm1hdGlvbjpEZXNjcmliZVN0YWNrUmVzb3VyY2VcIixcbiAgICAgICAgICAgICAgICBcImVjMjpEZXNjcmliZVRhZ3NcIlxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcIipcIl1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICB9KSxcbiAgICAgICAgW1wibG9nZ2luZ1wiXTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgIFwibG9nczpDcmVhdGVMb2dHcm91cFwiLFxuICAgICAgICAgICAgICAgIFwibG9nczpDcmVhdGVMb2dTdHJlYW1cIixcbiAgICAgICAgICAgICAgICBcImxvZ3M6UHV0TG9nRXZlbnRzXCIsXG4gICAgICAgICAgICAgICAgXCJsb2dzOkRlc2NyaWJlTG9nR3JvdXBzXCIsXG4gICAgICAgICAgICAgICAgXCJsb2dzOkRlc2NyaWJlTG9nU3RyZWFtc1wiXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIH0pLFxuICAgICAgICBbXCJzc21cIl06IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICBcInNzbTpEZXNjcmliZUluc3RhbmNlUHJvcGVydGllc1wiLFxuICAgICAgICAgICAgICAgIFwic3NtOkxpc3RBc3NvY2lhdGlvbnNcIixcbiAgICAgICAgICAgICAgICBcInNzbTpQdXRJbnZlbnRvcnlcIixcbiAgICAgICAgICAgICAgICBcInNzbTpVcGRhdGVJbnN0YW5jZUluZm9ybWF0aW9uXCIsXG4gICAgICAgICAgICAgICAgXCJzc21tZXNzYWdlczpDcmVhdGVDb250cm9sQ2hhbm5lbFwiLFxuICAgICAgICAgICAgICAgIFwic3NtbWVzc2FnZXM6Q3JlYXRlRGF0YUNoYW5uZWxcIixcbiAgICAgICAgICAgICAgICBcInNzbW1lc3NhZ2VzOk9wZW5Db250cm9sQ2hhbm5lbFwiLFxuICAgICAgICAgICAgICAgIFwic3NtbWVzc2FnZXM6T3BlbkRhdGFDaGFubmVsXCIsXG4gICAgICAgICAgICAgICAgXCJlYzJtZXNzYWdlczpBY2tub3dsZWRnZU1lc3NhZ2VcIixcbiAgICAgICAgICAgICAgICBcImVjMm1lc3NhZ2VzOkRlbGV0ZU1lc3NhZ2VcIixcbiAgICAgICAgICAgICAgICBcImVjMm1lc3NhZ2VzOkZhaWxNZXNzYWdlXCIsXG4gICAgICAgICAgICAgICAgXCJlYzJtZXNzYWdlczpHZXRFbmRwb2ludFwiLFxuICAgICAgICAgICAgICAgIFwiZWMybWVzc2FnZXM6R2V0TWVzc2FnZXNcIixcbiAgICAgICAgICAgICAgICBcImVjMm1lc3NhZ2VzOlNlbmRSZXBseVwiXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIH0pXG4gICAgICB9LFxuICAgICAgYXNzdW1lZEJ5OiBuZXcgQ29tcG9zaXRlUHJpbmNpcGFsKFxuICAgICAgICBuZXcgU2VydmljZVByaW5jaXBhbChcImF1dG9zY2FsaW5nLmFtYXpvbmF3cy5jb21cIiksXG4gICAgICAgIG5ldyBTZXJ2aWNlUHJpbmNpcGFsKFwiZWMyLmFtYXpvbmF3cy5jb21cIilcbiAgICAgIClcbiAgICB9KTtcblxuICAgIC8vIEJ1aWxka2l0ZSBBZ2VudCBFQzIgVXNlciBEYXRhXG4gICAgY29uc3QgbXVsdGlwYXJ0VXNlckRhdGEgPSBuZXcgTXVsdGlwYXJ0VXNlckRhdGEoKTtcblxuICAgIC8vIENsb3VkIENvbmZpZ1xuICAgIGNvbnN0IGNsb3VkQ29uZmlnVXNlckRhdGEgPSBVc2VyRGF0YS5mb3JMaW51eCh7XG4gICAgICBzaGViYW5nOiBcIiNjbG91ZC1jb25maWdcIlxuICAgIH0pO1xuICAgIGNsb3VkQ29uZmlnVXNlckRhdGEuYWRkQ29tbWFuZHMoXG4gICAgICBcImNsb3VkX2ZpbmFsX21vZHVsZXM6XCIsXG4gICAgICBcIiAgLSBbc2NyaXB0cy11c2VyLCBhbHdheXNdXCJcbiAgICApO1xuICAgIG11bHRpcGFydFVzZXJEYXRhLmFkZFBhcnQoXG4gICAgICBNdWx0aXBhcnRCb2R5LmZyb21Vc2VyRGF0YShcbiAgICAgICAgY2xvdWRDb25maWdVc2VyRGF0YSxcbiAgICAgICAgXCJ0ZXh0L2Nsb3VkLWNvbmZpZzsgY2hhcnNldD0ndXMtYXNjaWknXCJcbiAgICAgIClcbiAgICApO1xuXG4gICAgLy8gTW91bnQgU3RvcmFnZVxuICAgIGNvbnN0IG1vdW50U3RvcmFnZVVzZXJEYXRhID0gVXNlckRhdGEuZm9yTGludXgoe1xuICAgICAgc2hlYmFuZzogXCIjIS9iaW4vYmFzaCAtdlwiXG4gICAgfSk7XG4gICAgbW91bnRTdG9yYWdlVXNlckRhdGEuYWRkQ29tbWFuZHMoXG4gICAgICBgQlVJTERLSVRFX0VOQUJMRV9JTlNUQU5DRV9TVE9SQUdFPScke3Byb3BzLmVuYWJsZUluc3RhbmNlU3RvcmFnZX0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9NT1VOVF9UTVBGU19BVF9UTVA9JyR7cHJvcHMubW91bnRUbXBmc0F0VG1wfScgXFxcXGAsXG4gICAgICBcIi91c3IvbG9jYWwvYmluL2JrLW1vdW50LWluc3RhbmNlLXN0b3JhZ2Uuc2hcIlxuICAgICk7XG4gICAgbXVsdGlwYXJ0VXNlckRhdGEuYWRkUGFydChcbiAgICAgIE11bHRpcGFydEJvZHkuZnJvbVVzZXJEYXRhKFxuICAgICAgICBtb3VudFN0b3JhZ2VVc2VyRGF0YSxcbiAgICAgICAgXCJ0ZXh0L3gtc2hlbGxzY3JpcHQ7IGNoYXJzZXQ9J3VzLWFzY2lpJ1wiXG4gICAgICApXG4gICAgKTtcblxuICAgIC8vIENvbmZpZ3VyZSBEb2NrZXJcbiAgICBjb25zdCBjb25maWd1cmVEb2NrZXJVc2VyRGF0YSA9IFVzZXJEYXRhLmZvckxpbnV4KHtcbiAgICAgIHNoZWJhbmc6IFwiIyEvYmluL2Jhc2ggLXZcIlxuICAgIH0pO1xuICAgIGNvbmZpZ3VyZURvY2tlclVzZXJEYXRhLmFkZENvbW1hbmRzKFxuICAgICAgYERPQ0tFUl9VU0VSTlNfUkVNQVA9JyR7cHJvcHMuZW5hYmxlRG9ja2VyVXNlck5hbWVzcGFjZVJlbWFwfScgXFxcXGAsXG4gICAgICBgRE9DS0VSX0VYUEVSSU1FTlRBTD0nJHtwcm9wcy5lbmFibGVEb2NrZXJFeHBlcmltZW50YWx9JyBcXFxcYCxcbiAgICAgIGBET0NLRVJfTkVUV09SS0lOR19QUk9UT0NPTD0nJHtwcm9wcy5kb2NrZXJOZXR3b3JraW5nUHJvdG9jb2x9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfRU5BQkxFX0lOU1RBTkNFX1NUT1JBR0U9JyR7cHJvcHMuZW5hYmxlSW5zdGFuY2VTdG9yYWdlfScgXFxcXGAsXG4gICAgICBcIi91c3IvbG9jYWwvYmluL2JrLWNvbmZpZ3VyZS1kb2NrZXIuc2hcIlxuICAgICk7XG4gICAgbXVsdGlwYXJ0VXNlckRhdGEuYWRkUGFydChcbiAgICAgIE11bHRpcGFydEJvZHkuZnJvbVVzZXJEYXRhKFxuICAgICAgICBjb25maWd1cmVEb2NrZXJVc2VyRGF0YSxcbiAgICAgICAgXCJ0ZXh0L3gtc2hlbGxzY3JpcHQ7IGNoYXJzZXQ9J3VzLWFzY2lpJ1wiXG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IGluc3RhbGxFbGFzdGljU3RhY2tVc2VyRGF0YSA9IFVzZXJEYXRhLmZvckxpbnV4KHtcbiAgICAgIHNoZWJhbmc6IFwiIyEvYmluL2Jhc2ggLXZcIlxuICAgIH0pO1xuICAgIGluc3RhbGxFbGFzdGljU3RhY2tVc2VyRGF0YS5hZGRDb21tYW5kcyhcbiAgICAgIGBCVUlMREtJVEVfU1RBQ0tfTkFNRT0nJHtpZH0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9TVEFDS19WRVJTSU9OPScke3Byb3BzLmVsYXN0aWNTdGFja1ZlcnNpb259JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfU0NBTEVfSU5fSURMRV9QRVJJT0Q9JyR7cHJvcHMuc2NhbGVJbklkbGVQZXJpb2R9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfU0VDUkVUU19CVUNLRVQ9JyR7bWFuYWdlZFNlY3JldHNCdWNrZXQuYnVja2V0TmFtZX0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9TRUNSRVRTX0JVQ0tFVF9SRUdJT049JyR7cHJvcHMuZW52Py5yZWdpb259JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQUdFTlRfVE9LRU5fUEFUSD0nJHthZ2VudFRva2VuLm5hbWV9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQUdFTlRTX1BFUl9JTlNUQU5DRT0nJHtwcm9wcy5hZ2VudHNQZXJJbnN0YW5jZX0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVF9UQUdTPScke3Byb3BzLmJ1aWxka2l0ZUFnZW50VGFnc30nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVF9USU1FU1RBTVBfTElORVM9JyR7cHJvcHMuYnVpbGRraXRlQWdlbnRUaW1lc3RhbXBMaW5lc30nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVF9FWFBFUklNRU5UUz0nJHtwcm9wcy5idWlsZGtpdGVBZ2VudEV4cGVyaW1lbnRzfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FHRU5UX1RSQUNJTkdfQkFDS0VORD0nJHtwcm9wcy5idWlsZGtpdGVBZ2VudFRyYWNpbmdCYWNrZW5kfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FHRU5UX1JFTEVBU0U9JyR7cHJvcHMuYnVpbGRraXRlQWdlbnRSZWxlYXNlfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FHRU5UX0NBTkNFTF9HUkFDRV9QRVJJT0Q9JyR7cHJvcHMuYnVpbGRraXRlQWdlbnRDYW5jZWxHcmFjZVBlcmlvZH0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVF9TSUdOSU5HX0tNU19LRVk9JyR7cHJvcHMucGlwZWxpbmVTaWduaW5nS01TS2V5fScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FHRU5UX1NJR05JTkdfRkFJTFVSRV9CRUhBVklPUj0nJHtwcm9wcy5waXBlbGluZVNpZ25pbmdWZXJpZmljYXRpb25GYWlsdXJlQmVoYXZpb3J9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfUVVFVUU9JyR7cHJvcHMuYnVpbGRraXRlUXVldWV9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQUdFTlRfRU5BQkxFX0dJVF9NSVJST1JTPScke3Byb3BzLmJ1aWxka2l0ZUFnZW50RW5hYmxlR2l0TWlycm9yc30nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9FTEFTVElDX0JPT1RTVFJBUF9TQ1JJUFQ9JyR7cHJvcHMuYm9vdHN0cmFwU2NyaXB0VXJsfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0VOVl9GSUxFX1VSTD0nJHtwcm9wcy5hZ2VudEVudkZpbGVVcmx9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfRU5BQkxFX0lOU1RBTkNFX1NUT1JBR0U9JyR7cHJvcHMuZW5hYmxlSW5zdGFuY2VTdG9yYWdlfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FVVEhPUklaRURfVVNFUlNfVVJMPScke3Byb3BzLmF1dGhvcml6ZWRVc2Vyc1VybH0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9FQ1JfUE9MSUNZPScke3Byb3BzLmVjckFjY2Vzc1BvbGljeX0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9URVJNSU5BVEVfSU5TVEFOQ0VfQUZURVJfSk9CPScke3Byb3BzLmJ1aWxka2l0ZVRlcm1pbmF0ZUluc3RhbmNlQWZ0ZXJKb2J9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQURESVRJT05BTF9TVURPX1BFUk1JU1NJT05TPScke3Byb3BzLmJ1aWxka2l0ZUFkZGl0aW9uYWxTdWRvUGVybWlzc2lvbnN9JyBcXFxcYCxcbiAgICAgIGBBV1NfREVGQVVMVF9SRUdJT049JyR7cHJvcHMuZW52Py5yZWdpb259JyBcXFxcYCxcbiAgICAgIGBTRUNSRVRTX1BMVUdJTl9FTkFCTEVEPScke3Byb3BzLmVuYWJsZVNlY3JldHNQbHVnaW59JyBcXFxcYCxcbiAgICAgIGBFQ1JfUExVR0lOX0VOQUJMRUQ9JyR7cHJvcHMuZW5hYmxlRWNyUGx1Z2lufScgXFxcXGAsXG4gICAgICBgRE9DS0VSX0xPR0lOX1BMVUdJTl9FTkFCTEVEPScke3Byb3BzLmVuYWJsZURvY2tlckxvZ2luUGx1Z2lufScgXFxcXGAsXG4gICAgICBgRE9DS0VSX0VYUEVSSU1FTlRBTD0nJHtwcm9wcy5lbmFibGVEb2NrZXJFeHBlcmltZW50YWx9JyBcXFxcYCxcbiAgICAgIGBET0NLRVJfVVNFUk5TX1JFTUFQPScke3Byb3BzLmVuYWJsZURvY2tlclVzZXJOYW1lc3BhY2VSZW1hcH0nIFxcXFxgLFxuICAgICAgYEFXU19SRUdJT049JyR7cHJvcHMuZW52Py5yZWdpb259JyBcXFxcYCxcbiAgICAgIFwiL3Vzci9sb2NhbC9iaW4vYmstaW5zdGFsbC1lbGFzdGljLXN0YWNrLnNoXCJcbiAgICApO1xuXG4gICAgLy8gTWVyZ2UgVXNlciBEYXRhXG4gICAgbXVsdGlwYXJ0VXNlckRhdGEuYWRkUGFydChcbiAgICAgIE11bHRpcGFydEJvZHkuZnJvbVVzZXJEYXRhKFxuICAgICAgICBpbnN0YWxsRWxhc3RpY1N0YWNrVXNlckRhdGEsXG4gICAgICAgIFwidGV4dC94LXNoZWxsc2NyaXB0OyBjaGFyc2V0PSd1cy1hc2NpaSdcIlxuICAgICAgKVxuICAgICk7XG5cbiAgICAvLyBMYXVuY2ggVGVtcGxhdGVcbiAgICBjb25zdCBsYXVuY2hUZW1wbGF0ZSA9IG5ldyBMYXVuY2hUZW1wbGF0ZSh0aGlzLCBcImFnZW50TGF1bmNoVGVtcGxhdGVcIiwge1xuICAgICAgbGF1bmNoVGVtcGxhdGVOYW1lOiBgYnVpbGRraXRlTGF1bmNoVGVtcGxhdGVgLFxuICAgICAgaW5zdGFuY2VUeXBlOiBwcm9wcy5hZ2VudEluc3RhbmNlVHlwZSxcbiAgICAgIG1hY2hpbmVJbWFnZTogTWFjaGluZUltYWdlLmxvb2t1cCh7XG4gICAgICAgIG5hbWU6IFwiYnVpbGRraXRlLXN0YWNrLWxpbnV4LXg4Nl82NC0qXCIsXG4gICAgICAgIG93bmVyczogW1wiMTcyODQwMDY0ODMyXCJdLFxuICAgICAgICBmaWx0ZXJzOiB7XG4gICAgICAgICAgW1wiYmxvY2stZGV2aWNlLW1hcHBpbmcudm9sdW1lLXR5cGVcIl06IFtcImdwM1wiXVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHVzZXJEYXRhOiBtdWx0aXBhcnRVc2VyRGF0YSxcbiAgICAgIHJvbGU6IGFnZW50Um9sZSxcbiAgICAgIGJsb2NrRGV2aWNlczogW1xuICAgICAgICB7XG4gICAgICAgICAgZGV2aWNlTmFtZTogXCIvZGV2L3h2ZGFcIixcbiAgICAgICAgICB2b2x1bWU6IEJsb2NrRGV2aWNlVm9sdW1lLmVicyhwcm9wcy5hZ2VudFZvbHVtZVNpemUpXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBkZXRhaWxlZE1vbml0b3Jpbmc6IHRydWUsXG4gICAgICByZXF1aXJlSW1kc3YyOiBmYWxzZSxcbiAgICAgIGh0dHBQdXRSZXNwb25zZUhvcExpbWl0OiAyLFxuICAgICAgaHR0cFRva2VuczogTGF1bmNoVGVtcGxhdGVIdHRwVG9rZW5zLlJFUVVJUkVELFxuICAgICAgaW5zdGFuY2VNZXRhZGF0YVRhZ3M6IHRydWVcbiAgICB9KTtcblxuICAgIHRhZ1Jlc291cmNlKGxhdW5jaFRlbXBsYXRlLCB7XG4gICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOmVudmlyb25tZW50XCI6IHByb3BzLmVudmlyb25tZW50LFxuICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjpzZXJ2aWNlXCI6IFwiYnVpbGRraXRlXCIsXG4gICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOm93bmVyXCI6IHByb3BzLm93bmVyIHx8IFwiZW5naW5lZXJcIixcbiAgICAgIFJvbGU6IFwiYnVpbGRraXRlQWdlbnRcIixcbiAgICAgIEJ1aWxka2l0ZUFnZW50UmVsZWFzZTogYWdlbnRSZWxlYXNlLlNUQUJMRSxcbiAgICAgIEJ1aWxka2l0ZVF1ZXVlOiBwcm9wcy5idWlsZGtpdGVRdWV1ZVxuICAgIH0pO1xuXG4gICAgLy8gQXV0b3NjYWxpbmcgR3JvdXBcbiAgICBjb25zdCBhdXRvU2NhbGluZ0dyb3VwID0gbmV3IEF1dG9TY2FsaW5nR3JvdXAoXG4gICAgICB0aGlzLFxuICAgICAgXCJhZ2VudEF1dG9TY2FsaW5nR3JvdXBcIixcbiAgICAgIHtcbiAgICAgICAgdnBjOiB2cGMsXG4gICAgICAgIG1peGVkSW5zdGFuY2VzUG9saWN5OiB7XG4gICAgICAgICAgbGF1bmNoVGVtcGxhdGU6IGxhdW5jaFRlbXBsYXRlLFxuICAgICAgICAgIGluc3RhbmNlc0Rpc3RyaWJ1dGlvbjoge1xuICAgICAgICAgICAgb25EZW1hbmRQZXJjZW50YWdlQWJvdmVCYXNlQ2FwYWNpdHk6IHByb3BzLnNwb3RDYXBhY2l0eVBlcmNlbnRhZ2UsXG4gICAgICAgICAgICBzcG90QWxsb2NhdGlvblN0cmF0ZWd5OiBTcG90QWxsb2NhdGlvblN0cmF0ZWd5LkNBUEFDSVRZX09QVElNSVpFRFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbGF1bmNoVGVtcGxhdGVPdmVycmlkZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaW5zdGFuY2VUeXBlOiBwcm9wcy5hZ2VudEluc3RhbmNlVHlwZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgbWluQ2FwYWNpdHk6IHByb3BzLmFnZW50TWluSW5zdGFuY2VzLFxuICAgICAgICBtYXhDYXBhY2l0eTogcHJvcHMuYWdlbnRNYXhJbnN0YW5jZXMsXG4gICAgICAgIGNvb2xkb3duOiBEdXJhdGlvbi5zZWNvbmRzKDYwKSxcbiAgICAgICAgZ3JvdXBNZXRyaWNzOiBbR3JvdXBNZXRyaWNzLmFsbCgpXSxcbiAgICAgICAgdXBkYXRlUG9saWN5OiBVcGRhdGVQb2xpY3kucmVwbGFjaW5nVXBkYXRlKCksXG4gICAgICAgIG5ld0luc3RhbmNlc1Byb3RlY3RlZEZyb21TY2FsZUluOiB0cnVlLFxuICAgICAgICB0ZXJtaW5hdGlvblBvbGljaWVzOiBbXG4gICAgICAgICAgVGVybWluYXRpb25Qb2xpY3kuT0xERVNUX0xBVU5DSF9DT05GSUdVUkFUSU9OLFxuICAgICAgICAgIFRlcm1pbmF0aW9uUG9saWN5LkNMT1NFU1RfVE9fTkVYVF9JTlNUQU5DRV9IT1VSXG4gICAgICAgIF0sXG4gICAgICAgIHNzbVNlc3Npb25QZXJtaXNzaW9uczogdHJ1ZVxuICAgICAgfVxuICAgICk7XG5cbiAgICBhZ2VudFJvbGUuYXR0YWNoSW5saW5lUG9saWN5KFxuICAgICAgbmV3IFBvbGljeSh0aGlzLCBcInVwZGF0ZUF1dG9TY2FsaW5nR3JvdXBcIiwge1xuICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgIFwiYXV0b3NjYWxpbmc6U2V0SW5zdGFuY2VIZWFsdGhcIixcbiAgICAgICAgICAgICAgXCJhdXRvc2NhbGluZzpUZXJtaW5hdGVJbnN0YW5jZUluQXV0b1NjYWxpbmdHcm91cFwiXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgcmVzb3VyY2VzOiBbYCR7YXV0b1NjYWxpbmdHcm91cC5hdXRvU2NhbGluZ0dyb3VwQXJufWBdXG4gICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGFnUmVzb3VyY2UoYXV0b1NjYWxpbmdHcm91cCwge1xuICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjplbnZpcm9ubWVudFwiOiBwcm9wcy5lbnZpcm9ubWVudCxcbiAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246c2VydmljZVwiOiBcImJ1aWxka2l0ZVwiLFxuICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjpvd25lclwiOiBwcm9wcy5vd25lciB8fCBcImVuZ2luZWVyXCJcbiAgICB9KTtcblxuICAgIC8vIEJ1aWxka2l0ZSBTdXNwZW5kIEF1c3Rvc2NhbGluZyBHcm91cCBDdXN0b20gUmVzb3VyY2VcbiAgICBuZXcgQXdzQ3VzdG9tUmVzb3VyY2UodGhpcywgXCJzdXNwZW5kQXV0b3NjYWxpbmdQcm9jZXNzXCIsIHtcbiAgICAgIGZ1bmN0aW9uTmFtZTogXCJzdXNwZW5kQXV0b1NjYWxpbmdQcm9jZXNzZXNzXCIsXG4gICAgICBvbkNyZWF0ZToge1xuICAgICAgICBzZXJ2aWNlOiBcIkF1dG9TY2FsaW5nXCIsXG4gICAgICAgIGFjdGlvbjogXCJzdXNwZW5kUHJvY2Vzc2VzXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBBdXRvU2NhbGluZ0dyb3VwTmFtZTogYXV0b1NjYWxpbmdHcm91cC5hdXRvU2NhbGluZ0dyb3VwTmFtZSxcbiAgICAgICAgICBTY2FsaW5nUHJvY2Vzc2VzOiBbXCJBWlJlYmFsYW5jZVwiXVxuICAgICAgICB9LFxuICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IFBoeXNpY2FsUmVzb3VyY2VJZC5vZihcbiAgICAgICAgICBcInN1c3BlbmRBdXRvU2NhbGluZ1Byb2Nlc3Nlc3NcIlxuICAgICAgICApXG4gICAgICB9LFxuICAgICAgb25VcGRhdGU6IHtcbiAgICAgICAgc2VydmljZTogXCJBdXRvU2NhbGluZ1wiLFxuICAgICAgICBhY3Rpb246IFwic3VzcGVuZFByb2Nlc3Nlc1wiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgQXV0b1NjYWxpbmdHcm91cE5hbWU6IGF1dG9TY2FsaW5nR3JvdXAuYXV0b1NjYWxpbmdHcm91cE5hbWUsXG4gICAgICAgICAgU2NhbGluZ1Byb2Nlc3NlczogW1wiQVpSZWJhbGFuY2VcIl1cbiAgICAgICAgfSxcbiAgICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkOiBQaHlzaWNhbFJlc291cmNlSWQub2YoXG4gICAgICAgICAgXCJzdXNwZW5kQXV0b1NjYWxpbmdQcm9jZXNzZXNzXCJcbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIHJlc291cmNlVHlwZTogXCJDdXN0b206OmJ1aWxka2l0ZVN1c3BlbmRBdXRvc2NhbGluZ1wiXG4gICAgfSk7XG5cbiAgICBuZXcgQ2ZuQXBwbGljYXRpb24odGhpcywgXCJhZ2VudFNjYWxlclwiLCB7XG4gICAgICBsb2NhdGlvbjoge1xuICAgICAgICBhcHBsaWNhdGlvbklkOlxuICAgICAgICAgIFwiYXJuOmF3czpzZXJ2ZXJsZXNzcmVwbzp1cy1lYXN0LTE6MTcyODQwMDY0ODMyOmFwcGxpY2F0aW9ucy9idWlsZGtpdGUtYWdlbnQtc2NhbGVyXCIsXG4gICAgICAgIHNlbWFudGljVmVyc2lvbjogcHJvcHMuYnVpbGRraXRlQWdlbnRTY2FsZXJWZXJzaW9uXG4gICAgICB9LFxuICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICBCdWlsZGtpdGVBZ2VudFRva2VuUGFyYW1ldGVyOiBgJHthZ2VudFRva2VuLm5hbWV9YCxcbiAgICAgICAgQnVpbGRraXRlQWdlbnRUb2tlblBhcmFtZXRlclN0b3JlS01TS2V5OiBhZ2VudFRva2VuLmNtay5rZXkua2V5SWQsXG4gICAgICAgIFJvbGVQZXJtaXNzaW9uc0JvdW5kYXJ5QVJOOiBcIlwiLFxuICAgICAgICBCdWlsZGtpdGVRdWV1ZTogcHJvcHMuYnVpbGRraXRlUXVldWUsXG4gICAgICAgIEFnZW50c1Blckluc3RhbmNlOiBgJHtwcm9wcy5hZ2VudHNQZXJJbnN0YW5jZX1gLFxuICAgICAgICBNaW5TaXplOiBgJHtwcm9wcy5hZ2VudE1pbkluc3RhbmNlc31gLFxuICAgICAgICBNYXhTaXplOiBgJHtwcm9wcy5hZ2VudE1heEluc3RhbmNlc31gLFxuICAgICAgICBBZ2VudEF1dG9TY2FsZUdyb3VwOiBhdXRvU2NhbGluZ0dyb3VwLmF1dG9TY2FsaW5nR3JvdXBOYW1lLFxuICAgICAgICBTY2FsZU91dEZhY3RvcjogcHJvcHMuc2NhbGVPdXRGYWN0b3IsXG4gICAgICAgIFNjYWxlT3V0Rm9yV2FpdGluZ0pvYnM6IGAke3Byb3BzLnNjYWxlT3V0V2FpdGluZ0ZvckpvYnN9YCxcbiAgICAgICAgRXZlbnRTY2hlZHVsZVBlcmlvZDogcHJvcHMuc2NhbGVyRXZlbnRTY2hlZHVsZVBlcmlvZCxcbiAgICAgICAgTWluUG9sbEludGVydmFsOiBwcm9wcy5zY2FsZXJNaW5Qb2xsSW50ZXJ2YWwsXG4gICAgICAgIExvZ1JldGVudGlvbkRheXM6IGAke3Byb3BzLmxvZ1JldGVudGlvbkRheXN9YFxuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1aWxka2l0ZTtcbiJdfQ==
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { AwsStackProps } from "../../resources/aws/awsStack";
|
|
2
|
+
import { ScalingType } from "../../resources/aws/compute/ecs";
|
|
3
|
+
import { IManagedPolicy, PolicyDocument } from "aws-cdk-lib/aws-iam";
|
|
4
|
+
import { KeyValue } from "../../types";
|
|
5
|
+
/**
|
|
6
|
+
* Intersected with BasicAppProps in the getProps method. This allows the BasicApp construct
|
|
7
|
+
* to treat these as required properties and avoid constant null checking.
|
|
8
|
+
*/
|
|
9
|
+
export interface BasicAppPropDefaults {
|
|
10
|
+
tags: KeyValue;
|
|
11
|
+
serviceName: string;
|
|
12
|
+
clusterName: string;
|
|
13
|
+
scalingType: ScalingType;
|
|
14
|
+
containerPort: number;
|
|
15
|
+
}
|
|
16
|
+
export interface BasicAppProps {
|
|
17
|
+
account?: string;
|
|
18
|
+
clusterName?: string;
|
|
19
|
+
containerEntryPoint?: string[];
|
|
20
|
+
containerCommand?: string[];
|
|
21
|
+
containerEnvironment?: KeyValue;
|
|
22
|
+
containerPort?: number;
|
|
23
|
+
containerSecrets?: string[];
|
|
24
|
+
environment?: string;
|
|
25
|
+
owner?: string;
|
|
26
|
+
parentDomain?: string;
|
|
27
|
+
accountName: string;
|
|
28
|
+
listenerPort?: number;
|
|
29
|
+
region?: string;
|
|
30
|
+
scalingType?: ScalingType;
|
|
31
|
+
serviceName?: string;
|
|
32
|
+
taskRoleInlinePolicies?: {
|
|
33
|
+
[name: string]: PolicyDocument;
|
|
34
|
+
};
|
|
35
|
+
taskRoleManagedPolicies?: IManagedPolicy[];
|
|
36
|
+
tags?: KeyValue;
|
|
37
|
+
}
|
|
38
|
+
export declare class BasicApp {
|
|
39
|
+
private vpcStack;
|
|
40
|
+
private databaseStack;
|
|
41
|
+
private secretStack;
|
|
42
|
+
private computeStack;
|
|
43
|
+
constructor(id: string, rawProps: BasicAppProps);
|
|
44
|
+
getStackProps(props: BasicAppProps): AwsStackProps | undefined;
|
|
45
|
+
getProps(id: string, rawProps: BasicAppProps): BasicAppProps & BasicAppPropDefaults;
|
|
46
|
+
}
|
|
47
|
+
export default BasicApp;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BasicApp = void 0;
|
|
4
|
+
const awsStack_1 = require("../../resources/aws/awsStack");
|
|
5
|
+
const vpc_1 = require("../../resources/aws/networking/vpc");
|
|
6
|
+
const ecs_1 = require("../../resources/aws/compute/ecs");
|
|
7
|
+
const ecsFreeTier_1 = require("../../resources/aws/compute/ecsFreeTier");
|
|
8
|
+
const secrets_1 = require("../../resources/aws/secrets");
|
|
9
|
+
const storage_1 = require("../../resources/aws/storage");
|
|
10
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
11
|
+
const databaseFreeTier_1 = require("../../resources/aws/database/databaseFreeTier");
|
|
12
|
+
class BasicApp {
|
|
13
|
+
constructor(id, rawProps) {
|
|
14
|
+
const props = this.getProps(id, rawProps);
|
|
15
|
+
const stackProps = this.getStackProps(props);
|
|
16
|
+
this.vpcStack = new awsStack_1.default(`${id}Network`, [], stackProps)
|
|
17
|
+
.addNetwork(vpc_1.Vpc.build(`${id}Vpc`, {
|
|
18
|
+
accountName: props.accountName,
|
|
19
|
+
region: props.region,
|
|
20
|
+
tags: props.tags
|
|
21
|
+
}))
|
|
22
|
+
.addContainerRegistry(storage_1.Ecr.build(`${id}Ecr`));
|
|
23
|
+
this.databaseStack = new awsStack_1.default(`${id}Database`, this.vpcStack, stackProps)
|
|
24
|
+
.addNetwork(this.vpcStack.getNetwork())
|
|
25
|
+
.addResource(databaseFreeTier_1.default.build(`${id}Database`, {
|
|
26
|
+
tags: props.tags
|
|
27
|
+
}));
|
|
28
|
+
// Fetches the dbResource from the databaseStack
|
|
29
|
+
const dbResource = this.databaseStack.getResource(`${id}Database`);
|
|
30
|
+
const secretObjectValue = {};
|
|
31
|
+
if (props.containerSecrets) {
|
|
32
|
+
for (const secretObject of props.containerSecrets) {
|
|
33
|
+
secretObjectValue[secretObject] = aws_cdk_lib_1.SecretValue.unsafePlainText("");
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
this.secretStack = new awsStack_1.default(`${id}Secret`, [], stackProps).addResource(secrets_1.Secret.build(`${id}Secret`, {
|
|
37
|
+
secretName: `/${props.clusterName}/${props.serviceName}`,
|
|
38
|
+
secretObjectValue: secretObjectValue,
|
|
39
|
+
tags: props.tags
|
|
40
|
+
}));
|
|
41
|
+
this.computeStack = new awsStack_1.default(`${id}Compute`, [this.vpcStack, this.databaseStack, this.secretStack], stackProps)
|
|
42
|
+
.addNetwork(this.vpcStack.getNetwork())
|
|
43
|
+
.addResource(ecsFreeTier_1.default.build(`${id}Fargate`, {
|
|
44
|
+
clusterName: props.clusterName,
|
|
45
|
+
//TODO: This should work via line 124, but doesn't work (at least on update)
|
|
46
|
+
databaseConnection: dbResource.databaseSecurityGroup.connections,
|
|
47
|
+
containerEntryPoint: props.containerEntryPoint,
|
|
48
|
+
containerCommand: props.containerCommand,
|
|
49
|
+
containerEnvironment: props.containerEnvironment,
|
|
50
|
+
containerPort: props.containerPort,
|
|
51
|
+
containerSecrets: secretObjectValue,
|
|
52
|
+
ecrRepository: this.vpcStack.getContainerRegistry(),
|
|
53
|
+
parentDomain: props.parentDomain?.toLowerCase(),
|
|
54
|
+
listenerPort: props.listenerPort,
|
|
55
|
+
serviceName: props.serviceName,
|
|
56
|
+
taskRoleInlinePolicies: props.taskRoleInlinePolicies,
|
|
57
|
+
taskRoleManagedPolicies: props.taskRoleManagedPolicies,
|
|
58
|
+
tags: props.tags
|
|
59
|
+
}))
|
|
60
|
+
.connect(`${id}Fargate`, `${id}Database`, 5432);
|
|
61
|
+
}
|
|
62
|
+
getStackProps(props) {
|
|
63
|
+
if (!props)
|
|
64
|
+
return;
|
|
65
|
+
return {
|
|
66
|
+
accountId: props.account,
|
|
67
|
+
region: props.region,
|
|
68
|
+
accountName: props.accountName
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
getProps(id, rawProps) {
|
|
72
|
+
const defaultProps = {
|
|
73
|
+
tags: {
|
|
74
|
+
"fjall:costAllocation:service": "app",
|
|
75
|
+
"fjall:costAllocation:environment": rawProps.environment || "production",
|
|
76
|
+
"fjall:costAllocation:owner": rawProps.owner || "engineer"
|
|
77
|
+
},
|
|
78
|
+
scalingType: ecs_1.ScalingType.CPU,
|
|
79
|
+
containerPort: rawProps.containerPort || 3000,
|
|
80
|
+
serviceName: `${id}Service`,
|
|
81
|
+
clusterName: `${id}Cluster`,
|
|
82
|
+
containerEntryPoint: ["node", "main.js"],
|
|
83
|
+
containerCommand: rawProps.containerPort
|
|
84
|
+
? [`${rawProps.containerPort}`]
|
|
85
|
+
: [`3000`]
|
|
86
|
+
};
|
|
87
|
+
return {
|
|
88
|
+
...defaultProps,
|
|
89
|
+
...rawProps
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
exports.BasicApp = BasicApp;
|
|
94
|
+
exports.default = BasicApp;
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJlZVRpZXJBcHAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvcGF0dGVybnMvYXdzL2ZyZWVUaWVyQXBwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJEQUF1RTtBQUN2RSw0REFBeUQ7QUFDekQseURBQStFO0FBQy9FLHlFQUFpRTtBQUNqRSx5REFBcUQ7QUFDckQseURBQWtEO0FBQ2xELDZDQUEwQztBQUcxQyxvRkFBcUU7QUFzQ3JFLE1BQWEsUUFBUTtJQU1uQixZQUFZLEVBQVUsRUFBRSxRQUF1QjtRQUM3QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMxQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTdDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxrQkFBUSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLFVBQVUsQ0FBQzthQUN6RCxVQUFVLENBQ1QsU0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFO1lBQ3BCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztZQUM5QixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1NBQ2pCLENBQUMsQ0FDSDthQUNBLG9CQUFvQixDQUFDLGFBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFL0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGtCQUFRLENBQy9CLEdBQUcsRUFBRSxVQUFVLEVBQ2YsSUFBSSxDQUFDLFFBQVEsRUFDYixVQUFVLENBQ1g7YUFDRSxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQzthQUN0QyxXQUFXLENBQ1YsMEJBQVEsQ0FBQyxLQUFLLENBQUMs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QUN0Qyw0QkFBNEIsRUFBRSxRQUFRLENBQUMsS0FBSyxJQUFJLFVBQVU7YUFDM0Q7WUFDRCxXQUFXLEVBQUUsaUJBQVcsQ0FBQyxHQUFHO1lBQzVCLGFBQWEsRUFBRSxRQUFRLENBQUMsYUFBYSxJQUFJLElBQUk7WUFDN0MsV0FBVyxFQUFFLEdBQUcsRUFBRSxTQUFTO1lBQzNCLFdBQVcsRUFBRSxHQUFHLEVBQUUsU0FBUztZQUMzQixtQkFBbUIsRUFBRSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUM7WUFDeEMsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLGFBQWE7Z0JBQ3RDLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUMvQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7U0FDYixDQUFDO1FBRUYsT0FBTztZQUNMLEdBQUcsWUFBWTtZQUNmLEdBQUcsUUFBUTtTQUNaLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFwSEQsNEJBb0hDO0FBQ0Qsa0JBQWUsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEF3c1N0YWNrLCB7IEF3c1N0YWNrUHJvcHMgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9hd3NTdGFja1wiO1xuaW1wb3J0IHsgVnBjIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvbmV0d29ya2luZy92cGNcIjtcbmltcG9ydCB7IENvbnRhaW5lclNlY3JldCwgU2NhbGluZ1R5cGUgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9jb21wdXRlL2Vjc1wiO1xuaW1wb3J0IEVjMkNsdXN0ZXIgZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvY29tcHV0ZS9lY3NGcmVlVGllclwiO1xuaW1wb3J0IHsgU2VjcmV0IH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3Mvc2VjcmV0c1wiO1xuaW1wb3J0IHsgRWNyIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3Mvc3RvcmFnZVwiO1xuaW1wb3J0IHsgU2VjcmV0VmFsdWUgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IElNYW5hZ2VkUG9saWN5LCBQb2xpY3lEb2N1bWVudCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgeyBLZXlWYWx1ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IERhdGFiYXNlIGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2RhdGFiYXNlL2RhdGFiYXNlRnJlZVRpZXJcIjtcblxuLyoqXG4gKiBJbnRlcnNlY3RlZCB3aXRoIEJhc2ljQXBwUHJvcHMgaW4gdGhlIGdldFByb3BzIG1ldGhvZC4gVGhpcyBhbGxvd3MgdGhlIEJhc2ljQXBwIGNvbnN0cnVjdFxuICogdG8gdHJlYXQgdGhlc2UgYXMgcmVxdWlyZWQgcHJvcGVydGllcyBhbmQgYXZvaWQgY29uc3RhbnQgbnVsbCBjaGVja2luZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNpY0FwcFByb3BEZWZhdWx0cyB7XG4gIHRhZ3M6IEtleVZhbHVlO1xuICBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuICBjbHVzdGVyTmFtZTogc3RyaW5nO1xuICBzY2FsaW5nVHlwZTogU2NhbGluZ1R5cGU7XG4gIGNvbnRhaW5lclBvcnQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNpY0FwcFByb3BzIHtcbiAgYWNjb3VudD86IHN0cmluZztcbiAgY2x1c3Rlck5hbWU/OiBzdHJpbmc7XG4gIGNvbnRhaW5lckVudHJ5UG9pbnQ/OiBzdHJpbmdbXTtcbiAgY29udGFpbmVyQ29tbWFuZD86IHN0cmluZ1tdO1xuICBjb250YWluZXJFbnZpcm9ubWVudD86IEtleVZhbHVlO1xuICBjb250YWluZXJQb3J0PzogbnVtYmVyO1xuICBjb250YWluZXJTZWNyZXRzPzogc3RyaW5nW107XG4gIGVudmlyb25tZW50Pzogc3RyaW5nO1xuICAvLyBUaGUgdGVhbS9kb21haW4vYnVzaW5lc3MtdW5pdCB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGlzIHNlcnZpY2VcbiAgb3duZXI/OiBzdHJpbmc7XG4gIHBhcmVudERvbWFpbj86IHN0cmluZzsgLy8gRml4IHRvIG1ha2UgYSBkZXBlbmRlbmN5IG9mIHByb3RvY29sXG4gIGFjY291bnROYW1lOiBzdHJpbmc7XG4gIGxpc3RlbmVyUG9ydD86IG51bWJlcjtcbiAgcmVnaW9uPzogc3RyaW5nO1xuICBzY2FsaW5nVHlwZT86IFNjYWxpbmdUeXBlO1xuICBzZXJ2aWNlTmFtZT86IHN0cmluZztcbiAgdGFza1JvbGVJbmxpbmVQb2xpY2llcz86IHtcbiAgICBbbmFtZTogc3RyaW5nXTogUG9saWN5RG9jdW1lbnQ7XG4gIH07XG4gIHRhc2tSb2xlTWFuYWdlZFBvbGljaWVzPzogSU1hbmFnZWRQb2xpY3lbXTtcbiAgdGFncz86IEtleVZhbHVlO1xufVxuXG5leHBvcnQgY2xhc3MgQmFzaWNBcHAge1xuICBwcml2YXRlIHZwY1N0YWNrOiBBd3NTdGFjaztcbiAgcHJpdmF0ZSBkYXRhYmFzZVN0YWNrOiBBd3NTdGFjaztcbiAgcHJpdmF0ZSBzZWNyZXRTdGFjazogQXdzU3RhY2s7XG4gIHByaXZhdGUgY29tcHV0ZVN0YWNrOiBBd3NTdGFjaztcblxuICBjb25zdHJ1Y3RvcihpZDogc3RyaW5nLCByYXdQcm9wczogQmFzaWNBcHBQcm9wcykge1xuICAgIGNvbnN0IHByb3BzID0gdGhpcy5nZXRQcm9wcyhpZCwgcmF3UHJvcHMpO1xuICAgIGNvbnN0IHN0YWNrUHJvcHMgPSB0aGlzLmdldFN0YWNrUHJvcHMocHJvcHMpO1xuXG4gICAgdGhpcy52cGNTdGFjayA9IG5ldyBBd3NTdGFjayhgJHtpZH1OZXR3b3JrYCwgW10sIHN0YWNrUHJvcHMpXG4gICAgICAuYWRkTmV0d29yayhcbiAgICAgICAgVnBjLmJ1aWxkKGAke2lkfVZwY2AsIHtcbiAgICAgICAgICBhY2NvdW50TmFtZTogcHJvcHMuYWNjb3VudE5hbWUsXG4gICAgICAgICAgcmVnaW9uOiBwcm9wcy5yZWdpb24sXG4gICAgICAgICAgdGFnczogcHJvcHMudGFnc1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLmFkZENvbnRhaW5lclJlZ2lzdHJ5KEVjci5idWlsZChgJHtpZH1FY3JgKSk7XG5cbiAgICB0aGlzLmRhdGFiYXNlU3RhY2sgPSBuZXcgQXdzU3RhY2soXG4gICAgICBgJHtpZH1EYXRhYmFzZWAsXG4gICAgICB0aGlzLnZwY1N0YWNrLFxuICAgICAgc3RhY2tQcm9wc1xuICAgIClcbiAgICAgIC5hZGROZXR3b3JrKHRoaXMudnBjU3RhY2suZ2V0TmV0d29yaygpKVxuICAgICAgLmFkZFJlc291cmNlKFxuICAgICAgICBEYXRhYmFzZS5idWlsZChgJHtpZH1EYXRhYmFzZWAsIHtcbiAgICAgICAgICB0YWdzOiBwcm9wcy50YWdzXG4gICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgLy8gRmV0Y2hlcyB0aGUgZGJSZXNvdXJjZSBmcm9tIHRoZSBkYXRhYmFzZVN0YWNrXG4gICAgY29uc3QgZGJSZXNvdXJjZSA9IHRoaXMuZGF0YWJhc2VTdGFjay5nZXRSZXNvdXJjZShcbiAgICAgIGAke2lkfURhdGFiYXNlYFxuICAgICkgYXMgRGF0YWJhc2U7XG5cbiAgICBjb25zdCBzZWNyZXRPYmplY3RWYWx1ZTogQ29udGFpbmVyU2VjcmV0ID0ge307XG4gICAgaWYgKHByb3BzLmNvbnRhaW5lclNlY3JldHMpIHtcbiAgICAgIGZvciAoY29uc3Qgc2VjcmV0T2JqZWN0IG9mIHByb3BzLmNvbnRhaW5lclNlY3JldHMpIHtcbiAgICAgICAgc2VjcmV0T2JqZWN0VmFsdWVbc2VjcmV0T2JqZWN0XSA9IFNlY3JldFZhbHVlLnVuc2FmZVBsYWluVGV4dChcIlwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNlY3JldFN0YWNrID0gbmV3IEF3c1N0YWNrKGAke2lkfVNlY3JldGAsIFtdLCBzdGFja1Byb3BzKS5hZGRSZXNvdXJjZShcbiAgICAgIFNlY3JldC5idWlsZChgJHtpZH1TZWNyZXRgLCB7XG4gICAgICAgIHNlY3JldE5hbWU6IGAvJHtwcm9wcy5jbHVzdGVyTmFtZX0vJHtwcm9wcy5zZXJ2aWNlTmFtZX1gLFxuICAgICAgICBzZWNyZXRPYmplY3RWYWx1ZTogc2VjcmV0T2JqZWN0VmFsdWUsXG4gICAgICAgIHRhZ3M6IHByb3BzLnRhZ3NcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuY29tcHV0ZVN0YWNrID0gbmV3IEF3c1N0YWNrKFxuICAgICAgYCR7aWR9Q29tcHV0ZWAsXG4gICAgICBbdGhpcy52cGNTdGFjaywgdGhpcy5kYXRhYmFzZVN0YWNrLCB0aGlzLnNlY3JldFN0YWNrXSxcbiAgICAgIHN0YWNrUHJvcHNcbiAgICApXG4gICAgICAuYWRkTmV0d29yayh0aGlzLnZwY1N0YWNrLmdldE5ldHdvcmsoKSlcbiAgICAgIC5hZGRSZXNvdXJjZShcbiAgICAgICAgRWMyQ2x1c3Rlci5idWlsZChgJHtpZH1GYXJnYXRlYCwge1xuICAgICAgICAgIGNsdXN0ZXJOYW1lOiBwcm9wcy5jbHVzdGVyTmFtZSxcbiAgICAgICAgICAvL1RPRE86IFRoaXMgc2hvdWxkIHdvcmsgdmlhIGxpbmUgMTI0LCBidXQgZG9lc24ndCB3b3JrIChhdCBsZWFzdCBvbiB1cGRhdGUpXG4gICAgICAgICAgZGF0YWJhc2VDb25uZWN0aW9uOiBkYlJlc291cmNlLmRhdGFiYXNlU2VjdXJpdHlHcm91cC5jb25uZWN0aW9ucyxcbiAgICAgICAgICBjb250YWluZXJFbnRyeVBvaW50OiBwcm9wcy5jb250YWluZXJFbnRyeVBvaW50LFxuICAgICAgICAgIGNvbnRhaW5lckNvbW1hbmQ6IHByb3BzLmNvbnRhaW5lckNvbW1hbmQsXG4gICAgICAgICAgY29udGFpbmVyRW52aXJvbm1lbnQ6IHByb3BzLmNvbnRhaW5lckVudmlyb25tZW50LFxuICAgICAgICAgIGNvbnRhaW5lclBvcnQ6IHByb3BzLmNvbnRhaW5lclBvcnQsXG4gICAgICAgICAgY29udGFpbmVyU2VjcmV0czogc2VjcmV0T2JqZWN0VmFsdWUsXG4gICAgICAgICAgZWNyUmVwb3NpdG9yeTogdGhpcy52cGNTdGFjay5nZXRDb250YWluZXJSZWdpc3RyeSgpLFxuICAgICAgICAgIHBhcmVudERvbWFpbjogcHJvcHMucGFyZW50RG9tYWluPy50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgIGxpc3RlbmVyUG9ydDogcHJvcHMubGlzdGVuZXJQb3J0LFxuICAgICAgICAgIHNlcnZpY2VOYW1lOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgICAgICB0YXNrUm9sZUlubGluZVBvbGljaWVzOiBwcm9wcy50YXNrUm9sZUlubGluZVBvbGljaWVzLFxuICAgICAgICAgIHRhc2tSb2xlTWFuYWdlZFBvbGljaWVzOiBwcm9wcy50YXNrUm9sZU1hbmFnZWRQb2xpY2llcyxcbiAgICAgICAgICB0YWdzOiBwcm9wcy50YWdzXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuY29ubmVjdChgJHtpZH1GYXJnYXRlYCwgYCR7aWR9RGF0YWJhc2VgLCA1NDMyKTtcbiAgfVxuXG4gIGdldFN0YWNrUHJvcHMocHJvcHM6IEJhc2ljQXBwUHJvcHMpOiBBd3NTdGFja1Byb3BzIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXByb3BzKSByZXR1cm47XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWNjb3VudElkOiBwcm9wcy5hY2NvdW50LFxuICAgICAgcmVnaW9uOiBwcm9wcy5yZWdpb24sXG4gICAgICBhY2NvdW50TmFtZTogcHJvcHMuYWNjb3VudE5hbWVcbiAgICB9O1xuICB9XG5cbiAgZ2V0UHJvcHMoXG4gICAgaWQ6IHN0cmluZyxcbiAgICByYXdQcm9wczogQmFzaWNBcHBQcm9wc1xuICApOiBCYXNpY0FwcFByb3BzICYgQmFzaWNBcHBQcm9wRGVmYXVsdHMge1xuICAgIGNvbnN0IGRlZmF1bHRQcm9wcyA9IHtcbiAgICAgIHRhZ3M6IHtcbiAgICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjpzZXJ2aWNlXCI6IFwiYXBwXCIsXG4gICAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246ZW52aXJvbm1lbnRcIjpcbiAgICAgICAgICByYXdQcm9wcy5lbnZpcm9ubWVudCB8fCBcInByb2R1Y3Rpb25cIixcbiAgICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjpvd25lclwiOiByYXdQcm9wcy5vd25lciB8fCBcImVuZ2luZWVyXCJcbiAgICAgIH0sXG4gICAgICBzY2FsaW5nVHlwZTogU2NhbGluZ1R5cGUuQ1BVLFxuICAgICAgY29udGFpbmVyUG9ydDogcmF3UHJvcHMuY29udGFpbmVyUG9ydCB8fCAzMDAwLFxuICAgICAgc2VydmljZU5hbWU6IGAke2lkfVNlcnZpY2VgLFxuICAgICAgY2x1c3Rlck5hbWU6IGAke2lkfUNsdXN0ZXJgLFxuICAgICAgY29udGFpbmVyRW50cnlQb2ludDogW1wibm9kZVwiLCBcIm1haW4uanNcIl0sXG4gICAgICBjb250YWluZXJDb21tYW5kOiByYXdQcm9wcy5jb250YWluZXJQb3J0XG4gICAgICAgID8gW2Ake3Jhd1Byb3BzLmNvbnRhaW5lclBvcnR9YF1cbiAgICAgICAgOiBbYDMwMDBgXVxuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZGVmYXVsdFByb3BzLFxuICAgICAgLi4ucmF3UHJvcHNcbiAgICB9O1xuICB9XG59XG5leHBvcnQgZGVmYXVsdCBCYXNpY0FwcDtcbiJdfQ==
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Construct } from "constructs";
|
|
2
|
+
import { Stack } from "aws-cdk-lib";
|
|
3
|
+
export interface hostedZoneProps {
|
|
4
|
+
zoneName: string;
|
|
5
|
+
importExisting?: boolean;
|
|
6
|
+
importedHostedZoneId?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare class HostedZone extends Stack {
|
|
9
|
+
private hostedZone;
|
|
10
|
+
constructor(scope: Construct, id: string, props: hostedZoneProps);
|
|
11
|
+
}
|