terraform-cdk-serverless-github-actions-runner-controller 0.0.1 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +202 -3
- package/API.md +285 -0
- package/biome.jsonc +66 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +3 -1
- package/lib/lib/aws.d.ts +16 -1
- package/lib/lib/aws.js +278 -279
- package/lib/lib/azure.d.ts +1 -1
- package/lib/lib/azure.js +105 -130
- package/lib/lib/gcp.d.ts +1 -1
- package/lib/lib/gcp.js +49 -47
- package/lib/lib/variables.d.ts +3 -2
- package/lib/lib/variables.js +12 -4
- package/lib/tfModules.js +40 -10
- package/modules/azure-container-apps/README.md +3 -2
- package/modules/azure-container-apps/cdk.tf.json +15 -11
- package/modules/elastic-container-service/README.md +26 -25
- package/modules/elastic-container-service/cdk.tf.json +65 -75
- package/modules/google-cloud-run/README.md +19 -18
- package/modules/google-cloud-run/cdk.tf.json +12 -8
- package/package.json +16 -69
- package/renovate.json5 +42 -0
- package/vitest.config.ts +28 -0
- package/lib/__tests__/index-test.d.ts +0 -1
- package/lib/__tests__/index-test.js +0 -26
package/lib/lib/aws.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var _a;
|
|
2
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
4
|
exports.Aws = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
4
6
|
const cloudwatch_log_group_1 = require("@cdktf/provider-aws/lib/cloudwatch-log-group");
|
|
5
7
|
const data_aws_caller_identity_1 = require("@cdktf/provider-aws/lib/data-aws-caller-identity");
|
|
6
8
|
const data_aws_region_1 = require("@cdktf/provider-aws/lib/data-aws-region");
|
|
@@ -9,6 +11,8 @@ const data_aws_subnets_1 = require("@cdktf/provider-aws/lib/data-aws-subnets");
|
|
|
9
11
|
const ecs_cluster_1 = require("@cdktf/provider-aws/lib/ecs-cluster");
|
|
10
12
|
const ecs_service_1 = require("@cdktf/provider-aws/lib/ecs-service");
|
|
11
13
|
const ecs_task_definition_1 = require("@cdktf/provider-aws/lib/ecs-task-definition");
|
|
14
|
+
const efs_file_system_1 = require("@cdktf/provider-aws/lib/efs-file-system");
|
|
15
|
+
const efs_mount_target_1 = require("@cdktf/provider-aws/lib/efs-mount-target");
|
|
12
16
|
const iam_policy_1 = require("@cdktf/provider-aws/lib/iam-policy");
|
|
13
17
|
const iam_role_1 = require("@cdktf/provider-aws/lib/iam-role");
|
|
14
18
|
const iam_role_policy_attachment_1 = require("@cdktf/provider-aws/lib/iam-role-policy-attachment");
|
|
@@ -16,62 +20,67 @@ const provider_1 = require("@cdktf/provider-aws/lib/provider");
|
|
|
16
20
|
const cdktf_1 = require("cdktf");
|
|
17
21
|
const constructs_1 = require("constructs");
|
|
18
22
|
const variables_1 = require("./variables");
|
|
19
|
-
const efs_file_system_1 = require("@cdktf/provider-aws/lib/efs-file-system");
|
|
20
|
-
const efs_mount_target_1 = require("@cdktf/provider-aws/lib/efs-mount-target");
|
|
21
23
|
class Aws extends constructs_1.Construct {
|
|
22
|
-
constructor(scope, id) {
|
|
24
|
+
constructor(scope, id, props) {
|
|
23
25
|
super(scope, id);
|
|
24
26
|
new provider_1.AwsProvider(this, 'aws', {});
|
|
25
27
|
const identity = new data_aws_caller_identity_1.DataAwsCallerIdentity(this, 'Identity', {});
|
|
26
28
|
const region = new data_aws_region_1.DataAwsRegion(this, 'Region', {});
|
|
27
|
-
const { pat, githubConfigUrl } = (0, variables_1.commonVariables)(this);
|
|
29
|
+
const { pat, githubConfigUrl, autoscalerImage } = (0, variables_1.commonVariables)(this);
|
|
28
30
|
const cluster = new ecs_cluster_1.EcsCluster(this, 'Cluster', {
|
|
29
|
-
name:
|
|
31
|
+
name: props.clusterName,
|
|
30
32
|
});
|
|
31
|
-
const
|
|
33
|
+
const subnets = new data_aws_subnets_1.DataAwsSubnets(this, 'Subnets', {
|
|
34
|
+
filter: props.subnetFilters,
|
|
35
|
+
});
|
|
36
|
+
const securityGroups = new data_aws_security_groups_1.DataAwsSecurityGroups(this, 'SecurityGroups', {
|
|
37
|
+
filter: props.securityGroupFilters,
|
|
38
|
+
});
|
|
39
|
+
const autoscalerRole = new iam_role_1.IamRole(this, 'AutoscalerRole', {
|
|
32
40
|
assumeRolePolicy: cdktf_1.Fn.jsonencode({
|
|
33
|
-
|
|
34
|
-
|
|
41
|
+
Version: '2012-10-17',
|
|
42
|
+
Statement: [
|
|
35
43
|
{
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
44
|
+
Effect: 'Allow',
|
|
45
|
+
Principal: {
|
|
46
|
+
Service: 'ecs-tasks.amazonaws.com',
|
|
39
47
|
},
|
|
40
|
-
|
|
41
|
-
}
|
|
42
|
-
]
|
|
43
|
-
})
|
|
48
|
+
Action: 'sts:AssumeRole',
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
}),
|
|
44
52
|
});
|
|
45
|
-
const
|
|
53
|
+
const runnerRole = new iam_role_1.IamRole(this, 'RunnerRole', {
|
|
46
54
|
assumeRolePolicy: cdktf_1.Fn.jsonencode({
|
|
47
|
-
|
|
48
|
-
|
|
55
|
+
Version: '2012-10-17',
|
|
56
|
+
Statement: [
|
|
49
57
|
{
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
58
|
+
Effect: 'Allow',
|
|
59
|
+
Principal: {
|
|
60
|
+
Service: 'ecs-tasks.amazonaws.com',
|
|
53
61
|
},
|
|
54
|
-
|
|
55
|
-
}
|
|
56
|
-
]
|
|
57
|
-
})
|
|
62
|
+
Action: 'sts:AssumeRole',
|
|
63
|
+
},
|
|
64
|
+
],
|
|
65
|
+
}),
|
|
58
66
|
});
|
|
59
67
|
const ecsTaskExecutionRole = new iam_role_1.IamRole(this, 'TaskExecutionRole', {
|
|
60
68
|
assumeRolePolicy: cdktf_1.Fn.jsonencode({
|
|
61
|
-
|
|
62
|
-
|
|
69
|
+
Version: '2012-10-17',
|
|
70
|
+
Statement: [
|
|
63
71
|
{
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
72
|
+
Effect: 'Allow',
|
|
73
|
+
Principal: {
|
|
74
|
+
Service: 'ecs-tasks.amazonaws.com',
|
|
67
75
|
},
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
-
]
|
|
76
|
+
Action: 'sts:AssumeRole',
|
|
77
|
+
},
|
|
78
|
+
],
|
|
71
79
|
}),
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
80
|
+
});
|
|
81
|
+
new iam_role_policy_attachment_1.IamRolePolicyAttachment(this, 'TeskExecutionRoleAttachment', {
|
|
82
|
+
policyArn: 'arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy',
|
|
83
|
+
role: ecsTaskExecutionRole.name,
|
|
75
84
|
});
|
|
76
85
|
const runnerLogGroup = new cloudwatch_log_group_1.CloudwatchLogGroup(this, 'RunnerLogGroup', {
|
|
77
86
|
name: '/ecs/GHA',
|
|
@@ -79,99 +88,152 @@ class Aws extends constructs_1.Construct {
|
|
|
79
88
|
const autoscalerLogGroup = new cloudwatch_log_group_1.CloudwatchLogGroup(this, 'AutoscalerLogGroup', {
|
|
80
89
|
name: '/ecs/Autoscaler',
|
|
81
90
|
});
|
|
82
|
-
const
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
91
|
+
const autoscalerContainerDefinition = {
|
|
92
|
+
name: 'autoscaler',
|
|
93
|
+
image: autoscalerImage.stringValue,
|
|
94
|
+
essential: true,
|
|
95
|
+
environment: [
|
|
96
|
+
{
|
|
97
|
+
name: 'PAT',
|
|
98
|
+
value: pat.value,
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
name: 'GITHUB_CONFIG_URL',
|
|
102
|
+
value: githubConfigUrl.value,
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
name: 'ECS_CLUSTER',
|
|
106
|
+
value: cluster.arn,
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
name: 'ECS_SUBNETS',
|
|
110
|
+
value: cdktf_1.Fn.join(',', subnets.ids),
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
name: 'ECS_SECURITY_GROUPS',
|
|
114
|
+
value: cdktf_1.Fn.join(',', securityGroups.ids),
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
name: 'SCALE_SET_NAME',
|
|
118
|
+
value: 'ecs-runner-set',
|
|
119
|
+
},
|
|
120
|
+
],
|
|
121
|
+
logConfiguration: {
|
|
122
|
+
logDriver: 'awslogs',
|
|
123
|
+
options: {
|
|
124
|
+
'awslogs-group': autoscalerLogGroup.name,
|
|
125
|
+
'awslogs-region': region.name,
|
|
126
|
+
'awslogs-stream-prefix': 'ecs',
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
const runnerVolume = [];
|
|
131
|
+
const runnerContainerDefinition = {
|
|
132
|
+
name: 'runner',
|
|
133
|
+
image: 'ghcr.io/actions/actions-runner:2.323.0',
|
|
134
|
+
essential: true,
|
|
135
|
+
entryPoint: ['/home/runner/run.sh'],
|
|
136
|
+
environment: [
|
|
137
|
+
{
|
|
138
|
+
name: 'ECS_CLUSTER_NAME',
|
|
139
|
+
value: cluster.name,
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
name: 'ACTIONS_RUNNER_POD_NAME',
|
|
143
|
+
value: 'gha-pod',
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
name: 'ECS_SUBNETS',
|
|
147
|
+
value: cdktf_1.Fn.join(',', subnets.ids),
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
name: 'ECS_SECURITY_GROUPS',
|
|
151
|
+
value: cdktf_1.Fn.join(',', securityGroups.ids),
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
name: 'ECS_TASK_ROLE',
|
|
155
|
+
value: runnerRole.arn,
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
name: 'ECS_EXECUTION_ROLE',
|
|
159
|
+
value: ecsTaskExecutionRole.arn,
|
|
160
|
+
},
|
|
161
|
+
],
|
|
162
|
+
mountPoints: [],
|
|
163
|
+
logConfiguration: {
|
|
164
|
+
logDriver: 'awslogs',
|
|
165
|
+
options: {
|
|
166
|
+
'awslogs-group': runnerLogGroup.name,
|
|
167
|
+
'awslogs-region': region.name,
|
|
168
|
+
'awslogs-stream-prefix': 'ecs',
|
|
169
|
+
},
|
|
170
|
+
},
|
|
171
|
+
};
|
|
172
|
+
if (props.containerSupport) {
|
|
173
|
+
// EFS volume to allow sharing data between tasks
|
|
174
|
+
const efs = new efs_file_system_1.EfsFileSystem(this, 'efs', {
|
|
175
|
+
throughputMode: 'elastic',
|
|
176
|
+
tags: {
|
|
177
|
+
Name: 'work',
|
|
178
|
+
},
|
|
179
|
+
});
|
|
180
|
+
const externalsEfs = new efs_file_system_1.EfsFileSystem(this, 'externalsEfs', {
|
|
181
|
+
throughputMode: 'elastic',
|
|
182
|
+
tags: {
|
|
183
|
+
Name: 'externals',
|
|
184
|
+
},
|
|
185
|
+
});
|
|
186
|
+
// Each subnet in VPC are on different AZs, so creating mountpoint to each
|
|
187
|
+
const iterator = cdktf_1.TerraformIterator.fromList(subnets.ids);
|
|
188
|
+
new efs_mount_target_1.EfsMountTarget(this, 'EfsMountTarget', {
|
|
189
|
+
forEach: iterator,
|
|
190
|
+
fileSystemId: efs.id,
|
|
191
|
+
subnetId: iterator.value,
|
|
192
|
+
});
|
|
193
|
+
new efs_mount_target_1.EfsMountTarget(this, 'ExternalsEfsMountTarget', {
|
|
194
|
+
forEach: iterator,
|
|
195
|
+
fileSystemId: externalsEfs.id,
|
|
196
|
+
subnetId: iterator.value,
|
|
197
|
+
});
|
|
198
|
+
const runnerVolumeName = 'work';
|
|
199
|
+
const externalsVolumeName = 'externals';
|
|
200
|
+
runnerVolume.push({
|
|
201
|
+
name: runnerVolumeName,
|
|
202
|
+
efsVolumeConfiguration: {
|
|
203
|
+
fileSystemId: efs.id,
|
|
204
|
+
},
|
|
205
|
+
},
|
|
206
|
+
// This doesn't work with same volume, as volume is initially empty so it can't map to it's "externals" directory
|
|
112
207
|
{
|
|
113
|
-
name:
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
{
|
|
143
|
-
name: 'ECS_SECURITY_GROUPS',
|
|
144
|
-
value: cdktf_1.Fn.join(',', securityGroups.ids)
|
|
145
|
-
},
|
|
146
|
-
{
|
|
147
|
-
name: 'ECS_TASK_ROLE',
|
|
148
|
-
value: runnerRole.arn
|
|
149
|
-
},
|
|
150
|
-
{
|
|
151
|
-
name: 'ECS_EXECUTION_ROLE',
|
|
152
|
-
value: ecsTaskExecutionRole.arn
|
|
153
|
-
}
|
|
154
|
-
],
|
|
155
|
-
mountPoints: [
|
|
156
|
-
{
|
|
157
|
-
sourceVolume: runnerVolumeName,
|
|
158
|
-
containerPath: '/tmp/_work',
|
|
159
|
-
},
|
|
160
|
-
{
|
|
161
|
-
sourceVolume: externalsVolumeName,
|
|
162
|
-
containerPath: '/tmp/externals',
|
|
163
|
-
}
|
|
164
|
-
],
|
|
165
|
-
logConfiguration: {
|
|
166
|
-
logDriver: 'awslogs',
|
|
167
|
-
options: {
|
|
168
|
-
"awslogs-group": runnerLogGroup.name,
|
|
169
|
-
"awslogs-region": region.name,
|
|
170
|
-
"awslogs-stream-prefix": "ecs",
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
];
|
|
208
|
+
name: externalsVolumeName,
|
|
209
|
+
efsVolumeConfiguration: {
|
|
210
|
+
fileSystemId: externalsEfs.id,
|
|
211
|
+
},
|
|
212
|
+
});
|
|
213
|
+
runnerContainerDefinition.mountPoints?.push({
|
|
214
|
+
sourceVolume: runnerVolumeName,
|
|
215
|
+
containerPath: '/tmp/_work',
|
|
216
|
+
}, {
|
|
217
|
+
sourceVolume: externalsVolumeName,
|
|
218
|
+
containerPath: '/tmp/externals',
|
|
219
|
+
});
|
|
220
|
+
runnerContainerDefinition.environment?.push({
|
|
221
|
+
name: 'EFS_ID',
|
|
222
|
+
value: efs.id,
|
|
223
|
+
}, {
|
|
224
|
+
name: 'EXTERNALS_EFS_ID',
|
|
225
|
+
value: externalsEfs.id,
|
|
226
|
+
}, {
|
|
227
|
+
name: 'ACTIONS_RUNNER_REQUIRE_JOB_CONTAINER',
|
|
228
|
+
value: 'false',
|
|
229
|
+
});
|
|
230
|
+
runnerContainerDefinition.command = [
|
|
231
|
+
'/bin/sh',
|
|
232
|
+
'-c',
|
|
233
|
+
'export EXECID=$(cat /proc/sys/kernel/random/uuid) && sudo mkdir -p /tmp/_work/$EXECID && sudo chown runner:runner /tmp/_work/$EXECID && ln -s /tmp/_work/$EXECID _work && sudo chown runner:runner /tmp/externals && /home/runner/run.sh ; sudo rm -r /tmp/_work/$EXECID',
|
|
234
|
+
];
|
|
235
|
+
runnerContainerDefinition.image = 'ghcr.io/hi-fi/actions-runner:ecs';
|
|
236
|
+
}
|
|
175
237
|
// TODO: Images through caching: https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache.html (requires authentication)
|
|
176
238
|
// TODO: Pass Execution role to job task: https://www.ernestchiang.com/en/posts/2021/using-amazon-ecs-exec/#1-grant-permissions-ecs-task-iam-role
|
|
177
239
|
// TODO: Pass Task role to job task
|
|
@@ -179,194 +241,131 @@ class Aws extends constructs_1.Construct {
|
|
|
179
241
|
family: 'GHA',
|
|
180
242
|
taskRoleArn: runnerRole.arn,
|
|
181
243
|
executionRoleArn: ecsTaskExecutionRole.arn,
|
|
182
|
-
containerDefinitions: cdktf_1.Fn.jsonencode(
|
|
244
|
+
containerDefinitions: cdktf_1.Fn.jsonencode([runnerContainerDefinition]),
|
|
183
245
|
cpu: '1024',
|
|
184
246
|
memory: '2048',
|
|
185
|
-
requiresCompatibilities: [
|
|
186
|
-
'FARGATE'
|
|
187
|
-
],
|
|
247
|
+
requiresCompatibilities: ['FARGATE'],
|
|
188
248
|
runtimePlatform: {
|
|
189
249
|
cpuArchitecture: 'X86_64',
|
|
190
|
-
operatingSystemFamily: 'LINUX'
|
|
250
|
+
operatingSystemFamily: 'LINUX',
|
|
191
251
|
},
|
|
192
252
|
networkMode: 'awsvpc',
|
|
193
|
-
volume:
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
},
|
|
199
|
-
},
|
|
200
|
-
// This doesn't work with same volume, as volume is initially empty so it can't map to it's "externals" directory
|
|
201
|
-
{
|
|
202
|
-
name: externalsVolumeName,
|
|
203
|
-
efsVolumeConfiguration: {
|
|
204
|
-
fileSystemId: externalsEfs.id,
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
]
|
|
253
|
+
volume: runnerVolume,
|
|
254
|
+
});
|
|
255
|
+
autoscalerContainerDefinition.environment?.push({
|
|
256
|
+
name: 'TASK_DEFINITION_ARN',
|
|
257
|
+
value: runnerTaskDefinition.arn,
|
|
208
258
|
});
|
|
209
259
|
const autoscalerTaskDefinition = new ecs_task_definition_1.EcsTaskDefinition(this, 'AutoscalerTaskDefinition', {
|
|
210
260
|
family: 'Autoscaler',
|
|
211
261
|
taskRoleArn: autoscalerRole.arn,
|
|
212
262
|
executionRoleArn: ecsTaskExecutionRole.arn,
|
|
213
|
-
containerDefinitions: cdktf_1.Fn.jsonencode([
|
|
214
|
-
{
|
|
215
|
-
name: 'autoscaler',
|
|
216
|
-
image: 'ghcr.io/hi-fi/gha-runners-on-managed-env:test',
|
|
217
|
-
essential: true,
|
|
218
|
-
environment: [
|
|
219
|
-
{
|
|
220
|
-
name: 'PAT',
|
|
221
|
-
value: pat.value
|
|
222
|
-
},
|
|
223
|
-
{
|
|
224
|
-
name: 'GITHUB_CONFIG_URL',
|
|
225
|
-
value: githubConfigUrl.value
|
|
226
|
-
},
|
|
227
|
-
{
|
|
228
|
-
name: 'TASK_DEFINITION_ARN',
|
|
229
|
-
value: runnerTaskDefinition.arn
|
|
230
|
-
},
|
|
231
|
-
{
|
|
232
|
-
name: 'ECS_CLUSTER',
|
|
233
|
-
value: cluster.arn
|
|
234
|
-
},
|
|
235
|
-
{
|
|
236
|
-
name: 'ECS_SUBNETS',
|
|
237
|
-
value: cdktf_1.Fn.join(',', subnets.ids)
|
|
238
|
-
},
|
|
239
|
-
{
|
|
240
|
-
name: 'ECS_SECURITY_GROUPS',
|
|
241
|
-
value: cdktf_1.Fn.join(',', securityGroups.ids)
|
|
242
|
-
},
|
|
243
|
-
{
|
|
244
|
-
name: 'SCALE_SET_NAME',
|
|
245
|
-
value: 'ecs-runner-set'
|
|
246
|
-
},
|
|
247
|
-
],
|
|
248
|
-
logConfiguration: {
|
|
249
|
-
logDriver: 'awslogs',
|
|
250
|
-
options: {
|
|
251
|
-
"awslogs-group": autoscalerLogGroup.name,
|
|
252
|
-
"awslogs-region": region.name,
|
|
253
|
-
"awslogs-stream-prefix": "ecs",
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
]),
|
|
263
|
+
containerDefinitions: cdktf_1.Fn.jsonencode([autoscalerContainerDefinition]),
|
|
258
264
|
cpu: '256',
|
|
259
265
|
memory: '512',
|
|
260
|
-
requiresCompatibilities: [
|
|
261
|
-
'FARGATE'
|
|
262
|
-
],
|
|
266
|
+
requiresCompatibilities: ['FARGATE'],
|
|
263
267
|
runtimePlatform: {
|
|
264
268
|
cpuArchitecture: 'X86_64',
|
|
265
|
-
operatingSystemFamily: 'LINUX'
|
|
269
|
+
operatingSystemFamily: 'LINUX',
|
|
266
270
|
},
|
|
267
271
|
networkMode: 'awsvpc',
|
|
268
272
|
});
|
|
273
|
+
const runnerPolicyDefinition = {
|
|
274
|
+
Version: '2012-10-17',
|
|
275
|
+
Statement: [
|
|
276
|
+
{
|
|
277
|
+
Sid: 'StartandMonitorTask',
|
|
278
|
+
Effect: 'Allow',
|
|
279
|
+
Action: [
|
|
280
|
+
'ecs:RunTask',
|
|
281
|
+
'ecs:TagResource',
|
|
282
|
+
'ecs:ListTaskDefinitions',
|
|
283
|
+
'ecs:ListTasks',
|
|
284
|
+
'ecs:StopTask',
|
|
285
|
+
'ecs:RegisterTaskDefinition',
|
|
286
|
+
'ecs:DescribeTaskDefinition',
|
|
287
|
+
'ecs:DeregisterTaskDefinition',
|
|
288
|
+
'ecs:DeleteTaskDefinitions',
|
|
289
|
+
'ecs:ExecuteCommand',
|
|
290
|
+
// Needed for waiting
|
|
291
|
+
'ecs:DescribeTasks',
|
|
292
|
+
'logs:GetLogEvents',
|
|
293
|
+
'iam:PassRole',
|
|
294
|
+
'logs:StartLiveTail',
|
|
295
|
+
'logs:CreateLogStream',
|
|
296
|
+
],
|
|
297
|
+
Resource: [
|
|
298
|
+
`arn:aws:ecs:${region.name}:${identity.accountId}:task-definition/gha-pod-workflow:*`,
|
|
299
|
+
cluster.arn,
|
|
300
|
+
// Triggerer has to be allowed to pass both task and task execution role
|
|
301
|
+
ecsTaskExecutionRole.arn,
|
|
302
|
+
runnerRole.arn,
|
|
303
|
+
`arn:aws:ecs:${region.name}:${identity.accountId}:task/${cluster.name}/*`,
|
|
304
|
+
//TODO: reorder rights so that listing is only one with star
|
|
305
|
+
'*',
|
|
306
|
+
],
|
|
307
|
+
},
|
|
308
|
+
{
|
|
309
|
+
Sid: 'GetVpcInfo',
|
|
310
|
+
Effect: 'Allow',
|
|
311
|
+
Action: ['ec2:DescribeSubnets', 'ec2:DescribeSecurityGroups'],
|
|
312
|
+
Resource: '*',
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
Sid: 'ExecCommands',
|
|
316
|
+
Effect: 'Allow',
|
|
317
|
+
Action: [
|
|
318
|
+
'ssmmessages:CreateControlChannel',
|
|
319
|
+
'ssmmessages:CreateDataChannel',
|
|
320
|
+
'ssmmessages:OpenControlChannel',
|
|
321
|
+
'ssmmessages:OpenDataChannel',
|
|
322
|
+
],
|
|
323
|
+
Resource: '*',
|
|
324
|
+
},
|
|
325
|
+
],
|
|
326
|
+
};
|
|
269
327
|
const runnerPolicy = new iam_policy_1.IamPolicy(this, 'RunnerPolicy', {
|
|
270
|
-
policy: cdktf_1.Fn.jsonencode(
|
|
271
|
-
'Version': '2012-10-17',
|
|
272
|
-
'Statement': [
|
|
273
|
-
{
|
|
274
|
-
'Sid': 'StartandMonitorTask',
|
|
275
|
-
'Effect': 'Allow',
|
|
276
|
-
'Action': [
|
|
277
|
-
'ecs:RunTask',
|
|
278
|
-
'ecs:TagResource',
|
|
279
|
-
'ecs:ListTaskDefinitions',
|
|
280
|
-
'ecs:ListTasks',
|
|
281
|
-
'ecs:StopTask',
|
|
282
|
-
'ecs:RegisterTaskDefinition',
|
|
283
|
-
'ecs:DescribeTaskDefinition',
|
|
284
|
-
'ecs:DeregisterTaskDefinition',
|
|
285
|
-
'ecs:DeleteTaskDefinitions',
|
|
286
|
-
'ecs:ExecuteCommand',
|
|
287
|
-
// Needed for waiting
|
|
288
|
-
'ecs:DescribeTasks',
|
|
289
|
-
'logs:GetLogEvents',
|
|
290
|
-
'iam:PassRole',
|
|
291
|
-
'logs:StartLiveTail',
|
|
292
|
-
'logs:CreateLogStream',
|
|
293
|
-
],
|
|
294
|
-
'Resource': [
|
|
295
|
-
`arn:aws:ecs:${region.name}:${identity.accountId}:task-definition/gha-pod-workflow:*`,
|
|
296
|
-
cluster.arn,
|
|
297
|
-
// Triggerer has to be allowed to pass both task and task execution role
|
|
298
|
-
ecsTaskExecutionRole.arn,
|
|
299
|
-
runnerRole.arn,
|
|
300
|
-
`arn:aws:ecs:${region.name}:${identity.accountId}:task/${cluster.name}/*`,
|
|
301
|
-
//TODO: reorder rights so that listing is only one with star
|
|
302
|
-
'*'
|
|
303
|
-
]
|
|
304
|
-
},
|
|
305
|
-
{
|
|
306
|
-
'Sid': 'GetVpcInfo',
|
|
307
|
-
'Effect': 'Allow',
|
|
308
|
-
'Action': [
|
|
309
|
-
'ec2:DescribeSubnets',
|
|
310
|
-
'ec2:DescribeSecurityGroups'
|
|
311
|
-
],
|
|
312
|
-
'Resource': '*'
|
|
313
|
-
},
|
|
314
|
-
{
|
|
315
|
-
'Sid': 'ExecCommands',
|
|
316
|
-
'Effect': 'Allow',
|
|
317
|
-
'Action': [
|
|
318
|
-
'ssmmessages:CreateControlChannel',
|
|
319
|
-
'ssmmessages:CreateDataChannel',
|
|
320
|
-
'ssmmessages:OpenControlChannel',
|
|
321
|
-
'ssmmessages:OpenDataChannel'
|
|
322
|
-
],
|
|
323
|
-
'Resource': '*'
|
|
324
|
-
}
|
|
325
|
-
]
|
|
326
|
-
})
|
|
328
|
+
policy: cdktf_1.Fn.jsonencode(runnerPolicyDefinition),
|
|
327
329
|
});
|
|
328
330
|
new iam_role_policy_attachment_1.IamRolePolicyAttachment(this, 'RunnerPolicyAttachment', {
|
|
329
331
|
policyArn: runnerPolicy.arn,
|
|
330
|
-
role: runnerRole.name
|
|
332
|
+
role: runnerRole.name,
|
|
331
333
|
});
|
|
332
334
|
const autoscalerPolicy = new iam_policy_1.IamPolicy(this, 'AutoscalerPolicy', {
|
|
333
335
|
policy: cdktf_1.Fn.jsonencode({
|
|
334
|
-
|
|
335
|
-
|
|
336
|
+
Version: '2012-10-17',
|
|
337
|
+
Statement: [
|
|
336
338
|
{
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
339
|
+
Sid: 'StartandMonitorTask',
|
|
340
|
+
Effect: 'Allow',
|
|
341
|
+
Action: [
|
|
340
342
|
'ecs:RunTask',
|
|
341
343
|
// Needed for waiting
|
|
342
344
|
'ecs:DescribeTasks',
|
|
343
345
|
'logs:GetLogEvents',
|
|
344
346
|
'iam:PassRole',
|
|
345
347
|
],
|
|
346
|
-
|
|
348
|
+
Resource: [
|
|
347
349
|
`${runnerTaskDefinition.arnWithoutRevision}:*`,
|
|
348
350
|
// Triggerer has to be allowed to pass both task and task execution role
|
|
349
351
|
ecsTaskExecutionRole.arn,
|
|
350
352
|
runnerRole.arn,
|
|
351
353
|
`arn:aws:ecs:${region.name}:${identity.accountId}:task/${cluster.name}/*`,
|
|
352
354
|
`${runnerLogGroup.arn}:log-stream:*`,
|
|
353
|
-
]
|
|
355
|
+
],
|
|
354
356
|
},
|
|
355
357
|
{
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
}
|
|
364
|
-
]
|
|
365
|
-
})
|
|
358
|
+
Sid: 'GetVpcInfo',
|
|
359
|
+
Effect: 'Allow',
|
|
360
|
+
Action: ['ec2:DescribeSubnets', 'ec2:DescribeSecurityGroups'],
|
|
361
|
+
Resource: '*',
|
|
362
|
+
},
|
|
363
|
+
],
|
|
364
|
+
}),
|
|
366
365
|
});
|
|
367
366
|
new iam_role_policy_attachment_1.IamRolePolicyAttachment(this, 'AutoscalerPolicyAttachment', {
|
|
368
367
|
policyArn: autoscalerPolicy.arn,
|
|
369
|
-
role: autoscalerRole.name
|
|
368
|
+
role: autoscalerRole.name,
|
|
370
369
|
});
|
|
371
370
|
new ecs_service_1.EcsService(this, 'AutoscalerService', {
|
|
372
371
|
cluster: cluster.arn,
|
|
@@ -377,15 +376,15 @@ class Aws extends constructs_1.Construct {
|
|
|
377
376
|
networkConfiguration: {
|
|
378
377
|
assignPublicIp: true,
|
|
379
378
|
subnets: subnets.ids,
|
|
380
|
-
securityGroups: securityGroups.ids
|
|
379
|
+
securityGroups: securityGroups.ids,
|
|
381
380
|
},
|
|
382
381
|
lifecycle: {
|
|
383
|
-
ignoreChanges: [
|
|
384
|
-
|
|
385
|
-
]
|
|
386
|
-
}
|
|
382
|
+
ignoreChanges: ['desired_count'],
|
|
383
|
+
},
|
|
387
384
|
});
|
|
388
385
|
}
|
|
389
386
|
}
|
|
390
387
|
exports.Aws = Aws;
|
|
391
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9hd3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdUZBQWtGO0FBQ2xGLCtGQUF5RjtBQUN6Riw2RUFBd0U7QUFDeEUsK0ZBQXlGO0FBQ3pGLCtFQUEwRTtBQUMxRSxxRUFBaUU7QUFDakUscUVBQWlFO0FBQ2pFLHFGQUFnRjtBQUNoRixtRUFBK0Q7QUFDL0QsK0RBQTJEO0FBQzNELG1HQUE2RjtBQUM3RiwrREFBK0Q7QUFDL0QsaUNBQThDO0FBQzlDLDJDQUF1QztBQUN2QywyQ0FBOEM7QUFDOUMsNkVBQXdFO0FBRXhFLCtFQUEwRTtBQUUxRSxNQUFhLEdBQUksU0FBUSxzQkFBUztJQUM5QixZQUFZLEtBQWdCLEVBQUUsRUFBVTtRQUNwQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksc0JBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBRTVCLENBQUMsQ0FBQztRQUVILE1BQU0sUUFBUSxHQUFHLElBQUksZ0RBQXFCLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqRSxNQUFNLE1BQU0sR0FBRyxJQUFJLCtCQUFhLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUVwRCxNQUFNLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxHQUFHLElBQUEsMkJBQWUsRUFBQyxJQUFJLENBQUMsQ0FBQztRQUV2RCxNQUFNLE9BQU8sR0FBRyxJQUFJLHdCQUFVLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRTtZQUM1QyxJQUFJLEVBQUUsb0JBQW9CO1NBQzdCLENBQUMsQ0FBQztRQUVILE1BQU0sVUFBVSxHQUFHLElBQUksa0JBQU8sQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFO1lBQy9DLGdCQUFnQixFQUFFLFVBQUUsQ0FBQyxVQUFVLENBQUM7Z0JBQzVCLFNBQVMsRUFB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R0FBRyxjQUFjLENBQUMsR0FBRyxlQUFlO3lCQUN2QztxQkFDSjtvQkFDRDt3QkFDSSxLQUFLLEVBQUUsWUFBWTt3QkFDbkIsUUFBUSxFQUFFLE9BQU87d0JBQ2pCLFFBQVEsRUFBRTs0QkFDTixxQkFBcUI7NEJBQ3JCLDRCQUE0Qjt5QkFDL0I7d0JBQ0QsVUFBVSxFQUFFLEdBQUc7cUJBQ2xCO2lCQUNKO2FBQ0osQ0FFQTtTQUNKLENBQUMsQ0FBQTtRQUNGLElBQUksb0RBQXVCLENBQUMsSUFBSSxFQUFFLDRCQUE0QixFQUFFO1lBQzVELFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHO1lBQy9CLElBQUksRUFBRSxjQUFjLENBQUMsSUFBSTtTQUM1QixDQUFDLENBQUE7UUFFRixJQUFJLHdCQUFVLENBQUMsSUFBSSxFQUFFLG1CQUFtQixFQUFFO1lBQ3RDLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRztZQUNwQixJQUFJLEVBQUUsb0JBQW9CO1lBQzFCLFlBQVksRUFBRSxDQUFDO1lBQ2YsVUFBVSxFQUFFLFNBQVM7WUFDckIsY0FBYyxFQUFFLHdCQUF3QixDQUFDLGtCQUFrQjtZQUMzRCxvQkFBb0IsRUFBRTtnQkFDbEIsY0FBYyxFQUFFLElBQUk7Z0JBQ3BCLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRztnQkFDcEIsY0FBYyxFQUFFLGNBQWMsQ0FBQyxHQUFHO2FBQ3JDO1lBQ0QsU0FBUyxFQUFFO2dCQUNQLGFBQWEsRUFBRTtvQkFDWCxlQUFlO2lCQUNsQjthQUNKO1NBQ0osQ0FBQyxDQUFBO0lBQ04sQ0FBQztDQUNKO0FBN1lELGtCQTZZQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENsb3Vkd2F0Y2hMb2dHcm91cCB9IGZyb20gJ0BjZGt0Zi9wcm92aWRlci1hd3MvbGliL2Nsb3Vkd2F0Y2gtbG9nLWdyb3VwJztcbmltcG9ydCB7IERhdGFBd3NDYWxsZXJJZGVudGl0eSB9IGZyb20gJ0BjZGt0Zi9wcm92aWRlci1hd3MvbGliL2RhdGEtYXdzLWNhbGxlci1pZGVudGl0eSc7XG5pbXBvcnQgeyBEYXRhQXdzUmVnaW9uIH0gZnJvbSAnQGNka3RmL3Byb3ZpZGVyLWF3cy9saWIvZGF0YS1hd3MtcmVnaW9uJztcbmltcG9ydCB7IERhdGFBd3NTZWN1cml0eUdyb3VwcyB9IGZyb20gJ0BjZGt0Zi9wcm92aWRlci1hd3MvbGliL2RhdGEtYXdzLXNlY3VyaXR5LWdyb3Vwcyc7XG5pbXBvcnQgeyBEYXRhQXdzU3VibmV0cyB9IGZyb20gJ0BjZGt0Zi9wcm92aWRlci1hd3MvbGliL2RhdGEtYXdzLXN1Ym5ldHMnO1xuaW1wb3J0IHsgRWNzQ2x1c3RlciB9IGZyb20gJ0BjZGt0Zi9wcm92aWRlci1hd3MvbGliL2Vjcy1jbHVzdGVyJztcbmltcG9ydCB7IEVjc1NlcnZpY2UgfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9lY3Mtc2VydmljZSc7XG5pbXBvcnQgeyBFY3NUYXNrRGVmaW5pdGlvbiB9IGZyb20gJ0BjZGt0Zi9wcm92aWRlci1hd3MvbGliL2Vjcy10YXNrLWRlZmluaXRpb24nO1xuaW1wb3J0IHsgSWFtUG9saWN5IH0gZnJvbSAnQGNka3RmL3Byb3ZpZGVyLWF3cy9saWIvaWFtLXBvbGljeSc7XG5pbXBvcnQgeyBJYW1Sb2xlIH0gZnJvbSAnQGNka3RmL3Byb3ZpZGVyLWF3cy9saWIvaWFtLXJvbGUnO1xuaW1wb3J0IHsgSWFtUm9sZVBvbGljeUF0dGFjaG1lbnQgfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9pYW0tcm9sZS1wb2xpY3ktYXR0YWNobWVudCc7XG5pbXBvcnQgeyBBd3NQcm92aWRlciB9IGZyb20gJ0BjZGt0Zi9wcm92aWRlci1hd3MvbGliL3Byb3ZpZGVyJztcbmltcG9ydCB7IEZuLCBUZXJyYWZvcm1JdGVyYXRvciB9IGZyb20gJ2Nka3RmJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgY29tbW9uVmFyaWFibGVzIH0gZnJvbSAnLi92YXJpYWJsZXMnO1xuaW1wb3J0IHsgRWZzRmlsZVN5c3RlbSB9IGZyb20gJ0BjZGt0Zi9wcm92aWRlci1hd3MvbGliL2Vmcy1maWxlLXN5c3RlbSc7XG5pbXBvcnQgeyB0eXBlIENvbnRhaW5lckRlZmluaXRpb24gfSBmcm9tICdAYXdzLXNkay9jbGllbnQtZWNzJ1xuaW1wb3J0IHsgRWZzTW91bnRUYXJnZXQgfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9lZnMtbW91bnQtdGFyZ2V0JztcblxuZXhwb3J0IGNsYXNzIEF3cyBleHRlbmRzIENvbnN0cnVjdCB7XG4gICAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZykge1xuICAgICAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgICAgIG5ldyBBd3NQcm92aWRlcih0aGlzLCAnYXdzJywge1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGlkZW50aXR5ID0gbmV3IERhdGFBd3NDYWxsZXJJZGVudGl0eSh0aGlzLCAnSWRlbnRpdHknLCB7fSk7XG5cbiAgICAgICAgY29uc3QgcmVnaW9uID0gbmV3IERhdGFBd3NSZWdpb24odGhpcywgJ1JlZ2lvbicsIHt9KVxuXG4gICAgICAgIGNvbnN0IHsgcGF0LCBnaXRodWJDb25maWdVcmwgfSA9IGNvbW1vblZhcmlhYmxlcyh0aGlzKTtcblxuICAgICAgICBjb25zdCBjbHVzdGVyID0gbmV3IEVjc0NsdXN0ZXIodGhpcywgJ0NsdXN0ZXInLCB7XG4gICAgICAgICAgICBuYW1lOiAnZ2hhLXJ1bm5lci1jbHVzdGVyJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcnVubmVyUm9sZSA9IG5ldyBJYW1Sb2xlKHRoaXMsICdSdW5uZXJSb2xlJywge1xuICAgICAgICAgICAgYXNzdW1lUm9sZVBvbGljeTogRm4uanNvbmVuY29kZSh7XG4gICAgICAgICAgICAgICAgJ1ZlcnNpb24nOiAnMjAxMi0xMC0xNycsXG4gICAgICAgICAgICAgICAgJ1N0YXRlbWVudCc6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0VmZmVjdCc6ICdBbGxvdycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnUHJpbmNpcGFsJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTZXJ2aWNlJzogJ2Vjcy10YXNrcy5hbWF6b25hd3MuY29tJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdBY3Rpb24nOiAnc3RzOkFzc3VtZVJvbGUnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IGF1dG9zY2FsZXJSb2xlID0gbmV3IElhbVJvbGUodGhpcywgJ0F1dG9zY2FsZXJSb2xlJywge1xuICAgICAgICAgICAgYXNzdW1lUm9sZVBvbGljeTogRm4uanNvbmVuY29kZSh7XG4gICAgICAgICAgICAgICAgJ1ZlcnNpb24nOiAnMjAxMi0xMC0xNycsXG4gICAgICAgICAgICAgICAgJ1N0YXRlbWVudCc6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0VmZmVjdCc6ICdBbGxvdycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnUHJpbmNpcGFsJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTZXJ2aWNlJzogJ2Vjcy10YXNrcy5hbWF6b25hd3MuY29tJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdBY3Rpb24nOiAnc3RzOkFzc3VtZVJvbGUnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IGVjc1Rhc2tFeGVjdXRpb25Sb2xlID0gbmV3IElhbVJvbGUodGhpcywgJ1Rhc2tFeGVjdXRpb25Sb2xlJywge1xuICAgICAgICAgICAgYXNzdW1lUm9sZVBvbGljeTogRm4uanNvbmVuY29kZSh7XG4gICAgICAgICAgICAgICAgJ1ZlcnNpb24nOiAnMjAxMi0xMC0xNycsXG4gICAgICAgICAgICAgICAgJ1N0YXRlbWVudCc6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0VmZmVjdCc6ICdBbGxvdycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnUHJpbmNpcGFsJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTZXJ2aWNlJzogJ2Vjcy10YXNrcy5hbWF6b25hd3MuY29tJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdBY3Rpb24nOiAnc3RzOkFzc3VtZVJvbGUnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1hbmFnZWRQb2xpY3lBcm5zOiBbXG4gICAgICAgICAgICAgICAgJ2Fybjphd3M6aWFtOjphd3M6cG9saWN5L3NlcnZpY2Utcm9sZS9BbWF6b25FQ1NUYXNrRXhlY3V0aW9uUm9sZVBvbGljeSdcbiAgICAgICAgICAgIF1cbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCBydW5uZXJMb2dHcm91cCA9IG5ldyBDbG91ZHdhdGNoTG9nR3JvdXAodGhpcywgJ1J1bm5lckxvZ0dyb3VwJywge1xuICAgICAgICAgICAgbmFtZTogJy9lY3MvR0hBJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgYXV0b3NjYWxlckxvZ0dyb3VwID0gbmV3IENsb3Vkd2F0Y2hMb2dHcm91cCh0aGlzLCAnQXV0b3NjYWxlckxvZ0dyb3VwJywge1xuICAgICAgICAgICAgbmFtZTogJy9lY3MvQXV0b3NjYWxlcicsXG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgY29uc3Qgc3VibmV0cyA9IG5ldyBEYXRhQXdzU3VibmV0cyh0aGlzLCAnU3VibmV0cycsIHt9KTtcblxuICAgICAgICBjb25zdCBzZWN1cml0eUdyb3VwcyA9IG5ldyBEYXRhQXdzU2VjdXJpdHlHcm91cHModGhpcywgJ1NlY3VyaXR5R3JvdXBzJyk7XG5cbiAgICAgICAgLy8gRUZTIHZvbHVtZSB0byBhbGxvdyBzaGFyaW5nIGRhdGEgYmV0d2VlbiB0YXNrc1xuICAgICAgICBjb25zdCBlZnMgPSBuZXcgRWZzRmlsZVN5c3RlbSh0aGlzLCAnZWZzJywge1xuICAgICAgICAgICAgdGhyb3VnaHB1dE1vZGU6ICdlbGFzdGljJyxcbiAgICAgICAgICAgIHRhZ3M6IHtcbiAgICAgICAgICAgICAgICBOYW1lOiAnd29yaydcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCBleHRlcm5hbHNFZnMgPSBuZXcgRWZzRmlsZVN5c3RlbSh0aGlzLCAnZXh0ZXJuYWxzRWZzJywge1xuICAgICAgICAgICAgdGhyb3VnaHB1dE1vZGU6ICdlbGFzdGljJyxcbiAgICAgICAgICAgIHRhZ3M6IHtcbiAgICAgICAgICAgICAgICBOYW1lOiAnZXh0ZXJuYWxzJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIC8vIEVhY2ggc3VibmV0IGluIFZQQyBhcmUgb24gZGlmZmVyZW50IEFacywgc28gY3JlYXRpbmcgbW91bnRwb2ludCB0byBlYWNoXG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yID0gVGVycmFmb3JtSXRlcmF0b3IuZnJvbUxpc3Qoc3VibmV0cy5pZHMpXG5cbiAgICAgICAgbmV3IEVmc01vdW50VGFyZ2V0KHRoaXMsICdFZnNNb3VudFRhcmdldCcsIHtcbiAgICAgICAgICAgIGZvckVhY2g6IGl0ZXJhdG9yLFxuICAgICAgICAgICAgZmlsZVN5c3RlbUlkOiBlZnMuaWQsXG4gICAgICAgICAgICBzdWJuZXRJZDogaXRlcmF0b3IudmFsdWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbmV3IEVmc01vdW50VGFyZ2V0KHRoaXMsICdFeHRlcm5hbHNFZnNNb3VudFRhcmdldCcsIHtcbiAgICAgICAgICAgIGZvckVhY2g6IGl0ZXJhdG9yLFxuICAgICAgICAgICAgZmlsZVN5c3RlbUlkOiBleHRlcm5hbHNFZnMuaWQsXG4gICAgICAgICAgICBzdWJuZXRJZDogaXRlcmF0b3IudmFsdWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcnVubmVyVm9sdW1lTmFtZSA9ICd3b3JrJztcbiAgICAgICAgY29uc3QgZXh0ZXJuYWxzVm9sdW1lTmFtZSA9ICdleHRlcm5hbHMnO1xuICAgICAgICBjb25zdCBydW5uZXJDb250YWluZXJEZWZpbml0aW9uczogQ29udGFpbmVyRGVmaW5pdGlvbltdID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ3J1bm5lcicsXG4gICAgICAgICAgICBpbWFnZTogJ2doY3IuaW8vaGktZmkvYWN0aW9ucy1ydW5uZXI6ZWNzJyxcbiAgICAgICAgICAgIGNvbW1hbmQ6IFsnL2Jpbi9zaCcsICctYycsICdleHBvcnQgRVhFQ0lEPSQoY2F0IC9wcm9jL3N5cy9rZXJuZWwvcmFuZG9tL3V1aWQpICYmIHN1ZG8gbWtkaXIgLXAgL3RtcC9fd29yay8kRVhFQ0lEICYmIHN1ZG8gY2hvd24gcnVubmVyOnJ1bm5lciAvdG1wL193b3JrLyRFWEVDSUQgJiYgbG4gLXMgL3RtcC9fd29yay8kRVhFQ0lEIF93b3JrICYmIHN1ZG8gY2hvd24gcnVubmVyOnJ1bm5lciAvdG1wL2V4dGVybmFscyAmJiAvaG9tZS9ydW5uZXIvcnVuLnNoIDsgc3VkbyBybSAtciAvdG1wL193b3JrLyRFWEVDSUQnXSxcbiAgICAgICAgICAgIGVzc2VudGlhbDogdHJ1ZSxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnRUZTX0lEJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGVmcy5pZFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnRVhURVJOQUxTX0VGU19JRCcsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBleHRlcm5hbHNFZnMuaWRcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0VDU19DTFVTVEVSX05BTUUnLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY2x1c3Rlci5uYW1lXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdBQ1RJT05TX1JVTk5FUl9QT0RfTkFNRScsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnZ2hhLXBvZCdcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0FDVElPTlNfUlVOTkVSX1JFUVVJUkVfSk9CX0NPTlRBSU5FUicsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnZmFsc2UnXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdFQ1NfU1VCTkVUUycsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBGbi5qb2luKCcsJywgc3VibmV0cy5pZHMpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdFQ1NfU0VDVVJJVFlfR1JPVVBTJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IEZuLmpvaW4oJywnLCBzZWN1cml0eUdyb3Vwcy5pZHMpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdFQ1NfVEFTS19ST0xFJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHJ1bm5lclJvbGUuYXJuXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdFQ1NfRVhFQ1VUSU9OX1JPTEUnLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZWNzVGFza0V4ZWN1dGlvblJvbGUuYXJuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIG1vdW50UG9pbnRzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2VWb2x1bWU6IHJ1bm5lclZvbHVtZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lclBhdGg6ICcvdG1wL193b3JrJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlVm9sdW1lOiBleHRlcm5hbHNWb2x1bWVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJQYXRoOiAnL3RtcC9leHRlcm5hbHMnLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBsb2dDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgbG9nRHJpdmVyOiAnYXdzbG9ncycsXG4gICAgICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBcImF3c2xvZ3MtZ3JvdXBcIjogcnVubmVyTG9nR3JvdXAubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgXCJhd3Nsb2dzLXJlZ2lvblwiOiByZWdpb24ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgXCJhd3Nsb2dzLXN0cmVhbS1wcmVmaXhcIjogXCJlY3NcIixcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1dXG4gICAgICAgIC8vIFRPRE86IEltYWdlcyB0aHJvdWdoIGNhY2hpbmc6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1IvbGF0ZXN0L3VzZXJndWlkZS9wdWxsLXRocm91Z2gtY2FjaGUuaHRtbCAocmVxdWlyZXMgYXV0aGVudGljYXRpb24pXG4gICAgICAgIC8vIFRPRE86IFBhc3MgRXhlY3V0aW9uIHJvbGUgdG8gam9iIHRhc2s6IGh0dHBzOi8vd3d3LmVybmVzdGNoaWFuZy5jb20vZW4vcG9zdHMvMjAyMS91c2luZy1hbWF6b24tZWNzLWV4ZWMvIzEtZ3JhbnQtcGVybWlzc2lvbnMtZWNzLXRhc2staWFtLXJvbGVcbiAgICAgICAgLy8gVE9ETzogUGFzcyBUYXNrIHJvbGUgdG8gam9iIHRhc2tcbiAgICAgICAgY29uc3QgcnVubmVyVGFza0RlZmluaXRpb24gPSBuZXcgRWNzVGFza0RlZmluaXRpb24odGhpcywgJ1J1bm5lclRhc2tEZWZpbml0aW9uJywge1xuICAgICAgICAgICAgZmFtaWx5OiAnR0hBJyxcbiAgICAgICAgICAgIHRhc2tSb2xlQXJuOiBydW5uZXJSb2xlLmFybixcbiAgICAgICAgICAgIGV4ZWN1dGlvblJvbGVBcm46IGVjc1Rhc2tFeGVjdXRpb25Sb2xlLmFybixcbiAgICAgICAgICAgIGNvbnRhaW5lckRlZmluaXRpb25zOiBGbi5qc29uZW5jb2RlKHJ1bm5lckNvbnRhaW5lckRlZmluaXRpb25zKSxcbiAgICAgICAgICAgIGNwdTogJzEwMjQnLFxuICAgICAgICAgICAgbWVtb3J5OiAnMjA0OCcsXG4gICAgICAgICAgICByZXF1aXJlc0NvbXBhdGliaWxpdGllczogW1xuICAgICAgICAgICAgICAgICdGQVJHQVRFJ1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHJ1bnRpbWVQbGF0Zm9ybToge1xuICAgICAgICAgICAgICAgIGNwdUFyY2hpdGVjdHVyZTogJ1g4Nl82NCcsXG4gICAgICAgICAgICAgICAgb3BlcmF0aW5nU3lzdGVtRmFtaWx5OiAnTElOVVgnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV0d29ya01vZGU6ICdhd3N2cGMnLFxuICAgICAgICAgICAgdm9sdW1lOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBydW5uZXJWb2x1bWVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBlZnNWb2x1bWVDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlU3lzdGVtSWQ6IGVmcy5pZCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC8vIFRoaXMgZG9lc24ndCB3b3JrIHdpdGggc2FtZSB2b2x1bWUsIGFzIHZvbHVtZSBpcyBpbml0aWFsbHkgZW1wdHkgc28gaXQgY2FuJ3QgbWFwIHRvIGl0J3MgXCJleHRlcm5hbHNcIiBkaXJlY3RvcnlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGV4dGVybmFsc1ZvbHVtZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGVmc1ZvbHVtZUNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVTeXN0ZW1JZDogZXh0ZXJuYWxzRWZzLmlkLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IGF1dG9zY2FsZXJUYXNrRGVmaW5pdGlvbiA9IG5ldyBFY3NUYXNrRGVmaW5pdGlvbih0aGlzLCAnQXV0b3NjYWxlclRhc2tEZWZpbml0aW9uJywge1xuICAgICAgICAgICAgZmFtaWx5OiAnQXV0b3NjYWxlcicsXG4gICAgICAgICAgICB0YXNrUm9sZUFybjogYXV0b3NjYWxlclJvbGUuYXJuLFxuICAgICAgICAgICAgZXhlY3V0aW9uUm9sZUFybjogZWNzVGFza0V4ZWN1dGlvblJvbGUuYXJuLFxuICAgICAgICAgICAgY29udGFpbmVyRGVmaW5pdGlvbnM6IEZuLmpzb25lbmNvZGUoW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2F1dG9zY2FsZXInLFxuICAgICAgICAgICAgICAgICAgICBpbWFnZTogJ2doY3IuaW8vaGktZmkvZ2hhLXJ1bm5lcnMtb24tbWFuYWdlZC1lbnY6dGVzdCcsXG4gICAgICAgICAgICAgICAgICAgIGVzc2VudGlhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQ6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnUEFUJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcGF0LnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdHSVRIVUJfQ09ORklHX1VSTCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGdpdGh1YkNvbmZpZ1VybC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnVEFTS19ERUZJTklUSU9OX0FSTicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHJ1bm5lclRhc2tEZWZpbml0aW9uLmFyblxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnRUNTX0NMVVNURVInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjbHVzdGVyLmFyblxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnRUNTX1NVQk5FVFMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBGbi5qb2luKCcsJywgc3VibmV0cy5pZHMpXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdFQ1NfU0VDVVJJVFlfR1JPVVBTJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogRm4uam9pbignLCcsIHNlY3VyaXR5R3JvdXBzLmlkcylcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ1NDQUxFX1NFVF9OQU1FJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJ2Vjcy1ydW5uZXItc2V0J1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgbG9nQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nRHJpdmVyOiAnYXdzbG9ncycsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhd3Nsb2dzLWdyb3VwXCI6IGF1dG9zY2FsZXJMb2dHcm91cC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYXdzbG9ncy1yZWdpb25cIjogcmVnaW9uLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhd3Nsb2dzLXN0cmVhbS1wcmVmaXhcIjogXCJlY3NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgY3B1OiAnMjU2JyxcbiAgICAgICAgICAgIG1lbW9yeTogJzUxMicsXG4gICAgICAgICAgICByZXF1aXJlc0NvbXBhdGliaWxpdGllczogW1xuICAgICAgICAgICAgICAgICdGQVJHQVRFJ1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHJ1bnRpbWVQbGF0Zm9ybToge1xuICAgICAgICAgICAgICAgIGNwdUFyY2hpdGVjdHVyZTogJ1g4Nl82NCcsXG4gICAgICAgICAgICAgICAgb3BlcmF0aW5nU3lzdGVtRmFtaWx5OiAnTElOVVgnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV0d29ya01vZGU6ICdhd3N2cGMnLFxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IHJ1bm5lclBvbGljeSA9IG5ldyBJYW1Qb2xpY3kodGhpcywgJ1J1bm5lclBvbGljeScsIHtcbiAgICAgICAgICAgIHBvbGljeTogRm4uanNvbmVuY29kZSh7XG4gICAgICAgICAgICAgICAgJ1ZlcnNpb24nOiAnMjAxMi0xMC0xNycsXG4gICAgICAgICAgICAgICAgJ1N0YXRlbWVudCc6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1NpZCc6ICdTdGFydGFuZE1vbml0b3JUYXNrJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdFZmZlY3QnOiAnQWxsb3cnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0FjdGlvbic6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWNzOlJ1blRhc2snLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlY3M6VGFnUmVzb3VyY2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlY3M6TGlzdFRhc2tEZWZpbml0aW9ucycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VjczpMaXN0VGFza3MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlY3M6U3RvcFRhc2snLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlY3M6UmVnaXN0ZXJUYXNrRGVmaW5pdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VjczpEZXNjcmliZVRhc2tEZWZpbml0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWNzOkRlcmVnaXN0ZXJUYXNrRGVmaW5pdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VjczpEZWxldGVUYXNrRGVmaW5pdGlvbnMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlY3M6RXhlY3V0ZUNvbW1hbmQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5lZWRlZCBmb3Igd2FpdGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlY3M6RGVzY3JpYmVUYXNrcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xvZ3M6R2V0TG9nRXZlbnRzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWFtOlBhc3NSb2xlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbG9nczpTdGFydExpdmVUYWlsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbG9nczpDcmVhdGVMb2dTdHJlYW0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdSZXNvdXJjZSc6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYXJuOmF3czplY3M6JHtyZWdpb24ubmFtZX06JHtpZGVudGl0eS5hY2NvdW50SWR9OnRhc2stZGVmaW5pdGlvbi9naGEtcG9kLXdvcmtmbG93OipgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXIuYXJuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyaWdnZXJlciBoYXMgdG8gYmUgYWxsb3dlZCB0byBwYXNzIGJvdGggdGFzayBhbmQgdGFzayBleGVjdXRpb24gcm9sZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjc1Rhc2tFeGVjdXRpb25Sb2xlLmFybixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5uZXJSb2xlLmFybixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYXJuOmF3czplY3M6JHtyZWdpb24ubmFtZX06JHtpZGVudGl0eS5hY2NvdW50SWR9OnRhc2svJHtjbHVzdGVyLm5hbWV9LypgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vVE9ETzogcmVvcmRlciByaWdodHMgc28gdGhhdCBsaXN0aW5nIGlzIG9ubHkgb25lIHdpdGggc3RhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqJ1xuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnU2lkJzogJ0dldFZwY0luZm8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0VmZmVjdCc6ICdBbGxvdycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnQWN0aW9uJzogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlYzI6RGVzY3JpYmVTdWJuZXRzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWMyOkRlc2NyaWJlU2VjdXJpdHlHcm91cHMnXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1Jlc291cmNlJzogJyonXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdTaWQnOiAnRXhlY0NvbW1hbmRzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdFZmZlY3QnOiAnQWxsb3cnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0FjdGlvbic6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3NtbWVzc2FnZXM6Q3JlYXRlQ29udHJvbENoYW5uZWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzc21tZXNzYWdlczpDcmVhdGVEYXRhQ2hhbm5lbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NzbW1lc3NhZ2VzOk9wZW5Db250cm9sQ2hhbm5lbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NzbW1lc3NhZ2VzOk9wZW5EYXRhQ2hhbm5lbCdcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAnUmVzb3VyY2UnOiAnKidcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgKVxuICAgICAgICB9KVxuXG4gICAgICAgIG5ldyBJYW1Sb2xlUG9saWN5QXR0YWNobWVudCh0aGlzLCAnUnVubmVyUG9saWN5QXR0YWNobWVudCcsIHtcbiAgICAgICAgICAgIHBvbGljeUFybjogcnVubmVyUG9saWN5LmFybixcbiAgICAgICAgICAgIHJvbGU6IHJ1bm5lclJvbGUubmFtZVxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IGF1dG9zY2FsZXJQb2xpY3kgPSBuZXcgSWFtUG9saWN5KHRoaXMsICdBdXRvc2NhbGVyUG9saWN5Jywge1xuICAgICAgICAgICAgcG9saWN5OiBGbi5qc29uZW5jb2RlKHtcbiAgICAgICAgICAgICAgICAnVmVyc2lvbic6ICcyMDEyLTEwLTE3JyxcbiAgICAgICAgICAgICAgICAnU3RhdGVtZW50JzogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnU2lkJzogJ1N0YXJ0YW5kTW9uaXRvclRhc2snLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0VmZmVjdCc6ICdBbGxvdycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnQWN0aW9uJzogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlY3M6UnVuVGFzaycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmVlZGVkIGZvciB3YWl0aW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VjczpEZXNjcmliZVRhc2tzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbG9nczpHZXRMb2dFdmVudHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpYW06UGFzc1JvbGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdSZXNvdXJjZSc6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtydW5uZXJUYXNrRGVmaW5pdGlvbi5hcm5XaXRob3V0UmV2aXNpb259OipgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyaWdnZXJlciBoYXMgdG8gYmUgYWxsb3dlZCB0byBwYXNzIGJvdGggdGFzayBhbmQgdGFzayBleGVjdXRpb24gcm9sZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjc1Rhc2tFeGVjdXRpb25Sb2xlLmFybixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5uZXJSb2xlLmFybixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYXJuOmF3czplY3M6JHtyZWdpb24ubmFtZX06JHtpZGVudGl0eS5hY2NvdW50SWR9OnRhc2svJHtjbHVzdGVyLm5hbWV9LypgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke3J1bm5lckxvZ0dyb3VwLmFybn06bG9nLXN0cmVhbToqYCxcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1NpZCc6ICdHZXRWcGNJbmZvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdFZmZlY3QnOiAnQWxsb3cnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0FjdGlvbic6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWMyOkRlc2NyaWJlU3VibmV0cycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VjMjpEZXNjcmliZVNlY3VyaXR5R3JvdXBzJ1xuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdSZXNvdXJjZSc6ICcqJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICApXG4gICAgICAgIH0pXG4gICAgICAgIG5ldyBJYW1Sb2xlUG9saWN5QXR0YWNobWVudCh0aGlzLCAnQXV0b3NjYWxlclBvbGljeUF0dGFjaG1lbnQnLCB7XG4gICAgICAgICAgICBwb2xpY3lBcm46IGF1dG9zY2FsZXJQb2xpY3kuYXJuLFxuICAgICAgICAgICAgcm9sZTogYXV0b3NjYWxlclJvbGUubmFtZVxuICAgICAgICB9KVxuXG4gICAgICAgIG5ldyBFY3NTZXJ2aWNlKHRoaXMsICdBdXRvc2NhbGVyU2VydmljZScsIHtcbiAgICAgICAgICAgIGNsdXN0ZXI6IGNsdXN0ZXIuYXJuLFxuICAgICAgICAgICAgbmFtZTogJ2F1dG9zY2FsZXItc2VydmljZScsXG4gICAgICAgICAgICBkZXNpcmVkQ291bnQ6IDEsXG4gICAgICAgICAgICBsYXVuY2hUeXBlOiAnRkFSR0FURScsXG4gICAgICAgICAgICB0YXNrRGVmaW5pdGlvbjogYXV0b3NjYWxlclRhc2tEZWZpbml0aW9uLmFybldpdGhvdXRSZXZpc2lvbixcbiAgICAgICAgICAgIG5ldHdvcmtDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgYXNzaWduUHVibGljSXA6IHRydWUsXG4gICAgICAgICAgICAgICAgc3VibmV0czogc3VibmV0cy5pZHMsXG4gICAgICAgICAgICAgICAgc2VjdXJpdHlHcm91cHM6IHNlY3VyaXR5R3JvdXBzLmlkc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxpZmVjeWNsZToge1xuICAgICAgICAgICAgICAgIGlnbm9yZUNoYW5nZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgJ2Rlc2lyZWRfY291bnQnXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cbn1cbiJdfQ==
|
|
388
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
389
|
+
Aws[_a] = { fqn: "terraform-cdk-serverless-github-actions-runner-controller.Aws", version: "0.0.3" };
|
|
390
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9hd3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSx1RkFBaUY7QUFDakYsK0ZBQXdGO0FBQ3hGLDZFQUF1RTtBQUN2RSwrRkFHeUQ7QUFDekQsK0VBR2lEO0FBQ2pELHFFQUFnRTtBQUNoRSxxRUFBZ0U7QUFDaEUscUZBR29EO0FBQ3BELDZFQUF1RTtBQUN2RSwrRUFBeUU7QUFDekUsbUVBQThEO0FBQzlELCtEQUEwRDtBQUMxRCxtR0FBNEY7QUFDNUYsK0RBQThEO0FBQzlELGlDQUEwRDtBQUMxRCwyQ0FBc0M7QUFDdEMsMkNBQTZDO0FBaUI3QyxNQUFhLEdBQUksU0FBUSxzQkFBUztJQUNoQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWU7UUFDdkQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUVoQixJQUFJLHNCQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUVoQyxNQUFNLFFBQVEsR0FBRyxJQUFJLGdEQUFxQixDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFFaEUsTUFBTSxNQUFNLEdBQUcsSUFBSSwrQkFBYSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFFcEQsTUFBTSxFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLEdBQUcsSUFBQSwyQkFBZSxFQUFDLElBQUksQ0FBQyxDQUFBO1FBRXZFLE1BQU0sT0FBTyxHQUFHLElBQUksd0JBQVUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFO1lBQzlDLElBQUksRUFBRSxLQUFLLENBQUMsV0FBVztTQUN4QixDQUFDLENBQUE7UUFFRixNQUFNLE9BQU8sR0FBRyxJQUFJLGlDQUFjLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRTtZQUNsRCxNQUFNLEVBQUUsS0FBSyxD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RSxtQkFBbUIsRUFBRTtZQUN4QyxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUc7WUFDcEIsSUFBSSxFQUFFLG9CQUFvQjtZQUMxQixZQUFZLEVBQUUsQ0FBQztZQUNmLFVBQVUsRUFBRSxTQUFTO1lBQ3JCLGNBQWMsRUFBRSx3QkFBd0IsQ0FBQyxrQkFBa0I7WUFDM0Qsb0JBQW9CLEVBQUU7Z0JBQ3BCLGNBQWMsRUFBRSxJQUFJO2dCQUNwQixPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUc7Z0JBQ3BCLGNBQWMsRUFBRSxjQUFjLENBQUMsR0FBRzthQUNuQztZQUNELFNBQVMsRUFBRTtnQkFDVCxhQUFhLEVBQUUsQ0FBQyxlQUFlLENBQUM7YUFDakM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDOztBQWxhSCxrQkFtYUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIENvbnRhaW5lckRlZmluaXRpb24gfSBmcm9tICdAYXdzLXNkay9jbGllbnQtZWNzJ1xuaW1wb3J0IHsgQ2xvdWR3YXRjaExvZ0dyb3VwIH0gZnJvbSAnQGNka3RmL3Byb3ZpZGVyLWF3cy9saWIvY2xvdWR3YXRjaC1sb2ctZ3JvdXAnXG5pbXBvcnQgeyBEYXRhQXdzQ2FsbGVySWRlbnRpdHkgfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9kYXRhLWF3cy1jYWxsZXItaWRlbnRpdHknXG5pbXBvcnQgeyBEYXRhQXdzUmVnaW9uIH0gZnJvbSAnQGNka3RmL3Byb3ZpZGVyLWF3cy9saWIvZGF0YS1hd3MtcmVnaW9uJ1xuaW1wb3J0IHtcbiAgRGF0YUF3c1NlY3VyaXR5R3JvdXBzLFxuICBEYXRhQXdzU2VjdXJpdHlHcm91cHNGaWx0ZXIsXG59IGZyb20gJ0BjZGt0Zi9wcm92aWRlci1hd3MvbGliL2RhdGEtYXdzLXNlY3VyaXR5LWdyb3VwcydcbmltcG9ydCB7XG4gIERhdGFBd3NTdWJuZXRzLFxuICBEYXRhQXdzU3VibmV0c0ZpbHRlcixcbn0gZnJvbSAnQGNka3RmL3Byb3ZpZGVyLWF3cy9saWIvZGF0YS1hd3Mtc3VibmV0cydcbmltcG9ydCB7IEVjc0NsdXN0ZXIgfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9lY3MtY2x1c3RlcidcbmltcG9ydCB7IEVjc1NlcnZpY2UgfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9lY3Mtc2VydmljZSdcbmltcG9ydCB7XG4gIEVjc1Rhc2tEZWZpbml0aW9uLFxuICBFY3NUYXNrRGVmaW5pdGlvblZvbHVtZSxcbn0gZnJvbSAnQGNka3RmL3Byb3ZpZGVyLWF3cy9saWIvZWNzLXRhc2stZGVmaW5pdGlvbidcbmltcG9ydCB7IEVmc0ZpbGVTeXN0ZW0gfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9lZnMtZmlsZS1zeXN0ZW0nXG5pbXBvcnQgeyBFZnNNb3VudFRhcmdldCB9IGZyb20gJ0BjZGt0Zi9wcm92aWRlci1hd3MvbGliL2Vmcy1tb3VudC10YXJnZXQnXG5pbXBvcnQgeyBJYW1Qb2xpY3kgfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9pYW0tcG9saWN5J1xuaW1wb3J0IHsgSWFtUm9sZSB9IGZyb20gJ0BjZGt0Zi9wcm92aWRlci1hd3MvbGliL2lhbS1yb2xlJ1xuaW1wb3J0IHsgSWFtUm9sZVBvbGljeUF0dGFjaG1lbnQgfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9pYW0tcm9sZS1wb2xpY3ktYXR0YWNobWVudCdcbmltcG9ydCB7IEF3c1Byb3ZpZGVyIH0gZnJvbSAnQGNka3RmL3Byb3ZpZGVyLWF3cy9saWIvcHJvdmlkZXInXG5pbXBvcnQgeyBGbiwgSVJlc29sdmFibGUsIFRlcnJhZm9ybUl0ZXJhdG9yIH0gZnJvbSAnY2RrdGYnXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJ1xuaW1wb3J0IHsgY29tbW9uVmFyaWFibGVzIH0gZnJvbSAnLi92YXJpYWJsZXMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQXdzUHJvcHMge1xuICAvLyBOYW1lIG9mIHRoZSBFQ1MgY2x1c3RlciB0byBjcmVhdGUgYW5kIHVzZS5cbiAgcmVhZG9ubHkgY2x1c3Rlck5hbWU6IHN0cmluZ1xuICAvLyBVdGlsaXplIHJ1bm5lci1jb250YWluZXItaG9va3MgdG8gYWxsb3cgc3VwcG9ydCBmb3Igc2VydmljZSBhbmQgYnVpbGQgY29udGFpbmVyIGFzIHdlbGwgYXMgY29udGFpbmVyIGFjdGlvbnMgYW5kIHN0ZXBzLlxuICByZWFkb25seSBjb250YWluZXJTdXBwb3J0OiBib29sZWFuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfRGVzY3JpYmVTdWJuZXRzLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IHN1Ym5ldEZpbHRlcnM/OiBEYXRhQXdzU3VibmV0c0ZpbHRlcltdIHwgSVJlc29sdmFibGVcbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsaS9sYXRlc3QvcmVmZXJlbmNlL2VjMi9kZXNjcmliZS1zZWN1cml0eS1ncm91cHMuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cEZpbHRlcnM/OiBEYXRhQXdzU2VjdXJpdHlHcm91cHNGaWx0ZXJbXSB8IElSZXNvbHZhYmxlXG59XG5cbmV4cG9ydCBjbGFzcyBBd3MgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQXdzUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpXG5cbiAgICBuZXcgQXdzUHJvdmlkZXIodGhpcywgJ2F3cycsIHt9KVxuXG4gICAgY29uc3QgaWRlbnRpdHkgPSBuZXcgRGF0YUF3c0NhbGxlcklkZW50aXR5KHRoaXMsICdJZGVudGl0eScsIHt9KVxuXG4gICAgY29uc3QgcmVnaW9uID0gbmV3IERhdGFBd3NSZWdpb24odGhpcywgJ1JlZ2lvbicsIHt9KVxuXG4gICAgY29uc3QgeyBwYXQsIGdpdGh1YkNvbmZpZ1VybCwgYXV0b3NjYWxlckltYWdlIH0gPSBjb21tb25WYXJpYWJsZXModGhpcylcblxuICAgIGNvbnN0IGNsdXN0ZXIgPSBuZXcgRWNzQ2x1c3Rlcih0aGlzLCAnQ2x1c3RlcicsIHtcbiAgICAgIG5hbWU6IHByb3BzLmNsdXN0ZXJOYW1lLFxuICAgIH0pXG5cbiAgICBjb25zdCBzdWJuZXRzID0gbmV3IERhdGFBd3NTdWJuZXRzKHRoaXMsICdTdWJuZXRzJywge1xuICAgICAgZmlsdGVyOiBwcm9wcy5zdWJuZXRGaWx0ZXJzLFxuICAgIH0pXG5cbiAgICBjb25zdCBzZWN1cml0eUdyb3VwcyA9IG5ldyBEYXRhQXdzU2VjdXJpdHlHcm91cHModGhpcywgJ1NlY3VyaXR5R3JvdXBzJywge1xuICAgICAgZmlsdGVyOiBwcm9wcy5zZWN1cml0eUdyb3VwRmlsdGVycyxcbiAgICB9KVxuXG4gICAgY29uc3QgYXV0b3NjYWxlclJvbGUgPSBuZXcgSWFtUm9sZSh0aGlzLCAnQXV0b3NjYWxlclJvbGUnLCB7XG4gICAgICBhc3N1bWVSb2xlUG9saWN5OiBGbi5qc29uZW5jb2RlKHtcbiAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnLFxuICAgICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgICBQcmluY2lwYWw6IHtcbiAgICAgICAgICAgICAgU2VydmljZTogJ2Vjcy10YXNrcy5hbWF6b25hd3MuY29tJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBBY3Rpb246ICdzdHM6QXNzdW1lUm9sZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgIH0pXG5cbiAgICBjb25zdCBydW5uZXJSb2xlID0gbmV3IElhbVJvbGUodGhpcywgJ1J1bm5lclJvbGUnLCB7XG4gICAgICBhc3N1bWVSb2xlUG9saWN5OiBGbi5qc29uZW5jb2RlKHtcbiAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnLFxuICAgICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgICBQcmluY2lwYWw6IHtcbiAgICAgICAgICAgICAgU2VydmljZTogJ2Vjcy10YXNrcy5hbWF6b25hd3MuY29tJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBBY3Rpb246ICdzdHM6QXNzdW1lUm9sZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgIH0pXG5cbiAgICBjb25zdCBlY3NUYXNrRXhlY3V0aW9uUm9sZSA9IG5ldyBJYW1Sb2xlKHRoaXMsICdUYXNrRXhlY3V0aW9uUm9sZScsIHtcbiAgICAgIGFzc3VtZVJvbGVQb2xpY3k6IEZuLmpzb25lbmNvZGUoe1xuICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNycsXG4gICAgICAgIFN0YXRlbWVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgIFByaW5jaXBhbDoge1xuICAgICAgICAgICAgICBTZXJ2aWNlOiAnZWNzLXRhc2tzLmFtYXpvbmF3cy5jb20nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEFjdGlvbjogJ3N0czpBc3N1bWVSb2xlJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgfSlcblxuICAgIG5ldyBJYW1Sb2xlUG9saWN5QXR0YWNobWVudCh0aGlzLCAnVGVza0V4ZWN1dGlvblJvbGVBdHRhY2htZW50Jywge1xuICAgICAgcG9saWN5QXJuOlxuICAgICAgICAnYXJuOmF3czppYW06OmF3czpwb2xpY3kvc2VydmljZS1yb2xlL0FtYXpvbkVDU1Rhc2tFeGVjdXRpb25Sb2xlUG9saWN5JyxcbiAgICAgIHJvbGU6IGVjc1Rhc2tFeGVjdXRpb25Sb2xlLm5hbWUsXG4gICAgfSlcblxuICAgIGNvbnN0IHJ1bm5lckxvZ0dyb3VwID0gbmV3IENsb3Vkd2F0Y2hMb2dHcm91cCh0aGlzLCAnUnVubmVyTG9nR3JvdXAnLCB7XG4gICAgICBuYW1lOiAnL2Vjcy9HSEEnLFxuICAgIH0pXG5cbiAgICBjb25zdCBhdXRvc2NhbGVyTG9nR3JvdXAgPSBuZXcgQ2xvdWR3YXRjaExvZ0dyb3VwKFxuICAgICAgdGhpcyxcbiAgICAgICdBdXRvc2NhbGVyTG9nR3JvdXAnLFxuICAgICAge1xuICAgICAgICBuYW1lOiAnL2Vjcy9BdXRvc2NhbGVyJyxcbiAgICAgIH0sXG4gICAgKVxuXG4gICAgY29uc3QgYXV0b3NjYWxlckNvbnRhaW5lckRlZmluaXRpb246IENvbnRhaW5lckRlZmluaXRpb24gPSB7XG4gICAgICBuYW1lOiAnYXV0b3NjYWxlcicsXG4gICAgICBpbWFnZTogYXV0b3NjYWxlckltYWdlLnN0cmluZ1ZhbHVlLFxuICAgICAgZXNzZW50aWFsOiB0cnVlLFxuICAgICAgZW52aXJvbm1lbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdQQVQnLFxuICAgICAgICAgIHZhbHVlOiBwYXQudmFsdWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnR0lUSFVCX0NPTkZJR19VUkwnLFxuICAgICAgICAgIHZhbHVlOiBnaXRodWJDb25maWdVcmwudmFsdWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnRUNTX0NMVVNURVInLFxuICAgICAgICAgIHZhbHVlOiBjbHVzdGVyLmFybixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdFQ1NfU1VCTkVUUycsXG4gICAgICAgICAgdmFsdWU6IEZuLmpvaW4oJywnLCBzdWJuZXRzLmlkcyksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnRUNTX1NFQ1VSSVRZX0dST1VQUycsXG4gICAgICAgICAgdmFsdWU6IEZuLmpvaW4oJywnLCBzZWN1cml0eUdyb3Vwcy5pZHMpLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ1NDQUxFX1NFVF9OQU1FJyxcbiAgICAgICAgICB2YWx1ZTogJ2Vjcy1ydW5uZXItc2V0JyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBsb2dDb25maWd1cmF0aW9uOiB7XG4gICAgICAgIGxvZ0RyaXZlcjogJ2F3c2xvZ3MnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgJ2F3c2xvZ3MtZ3JvdXAnOiBhdXRvc2NhbGVyTG9nR3JvdXAubmFtZSxcbiAgICAgICAgICAnYXdzbG9ncy1yZWdpb24nOiByZWdpb24ubmFtZSxcbiAgICAgICAgICAnYXdzbG9ncy1zdHJlYW0tcHJlZml4JzogJ2VjcycsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1cblxuICAgIGNvbnN0IHJ1bm5lclZvbHVtZTogRWNzVGFza0RlZmluaXRpb25Wb2x1bWVbXSA9IFtdXG5cbiAgICBjb25zdCBydW5uZXJDb250YWluZXJEZWZpbml0aW9uOiBDb250YWluZXJEZWZpbml0aW9uID0ge1xuICAgICAgbmFtZTogJ3J1bm5lcicsXG4gICAgICBpbWFnZTogJ2doY3IuaW8vYWN0aW9ucy9hY3Rpb25zLXJ1bm5lcjoyLjMyMy4wJyxcbiAgICAgIGVzc2VudGlhbDogdHJ1ZSxcbiAgICAgIGVudHJ5UG9pbnQ6IFsnL2hvbWUvcnVubmVyL3J1bi5zaCddLFxuICAgICAgZW52aXJvbm1lbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdFQ1NfQ0xVU1RFUl9OQU1FJyxcbiAgICAgICAgICB2YWx1ZTogY2x1c3Rlci5uYW1lLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0FDVElPTlNfUlVOTkVSX1BPRF9OQU1FJyxcbiAgICAgICAgICB2YWx1ZTogJ2doYS1wb2QnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0VDU19TVUJORVRTJyxcbiAgICAgICAgICB2YWx1ZTogRm4uam9pbignLCcsIHN1Ym5ldHMuaWRzKSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdFQ1NfU0VDVVJJVFlfR1JPVVBTJyxcbiAgICAgICAgICB2YWx1ZTogRm4uam9pbignLCcsIHNlY3VyaXR5R3JvdXBzLmlkcyksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnRUNTX1RBU0tfUk9MRScsXG4gICAgICAgICAgdmFsdWU6IHJ1bm5lclJvbGUuYXJuLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0VDU19FWEVDVVRJT05fUk9MRScsXG4gICAgICAgICAgdmFsdWU6IGVjc1Rhc2tFeGVjdXRpb25Sb2xlLmFybixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBtb3VudFBvaW50czogW10sXG4gICAgICBsb2dDb25maWd1cmF0aW9uOiB7XG4gICAgICAgIGxvZ0RyaXZlcjogJ2F3c2xvZ3MnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgJ2F3c2xvZ3MtZ3JvdXAnOiBydW5uZXJMb2dHcm91cC5uYW1lLFxuICAgICAgICAgICdhd3Nsb2dzLXJlZ2lvbic6IHJlZ2lvbi5uYW1lLFxuICAgICAgICAgICdhd3Nsb2dzLXN0cmVhbS1wcmVmaXgnOiAnZWNzJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmNvbnRhaW5lclN1cHBvcnQpIHtcbiAgICAgIC8vIEVGUyB2b2x1bWUgdG8gYWxsb3cgc2hhcmluZyBkYXRhIGJldHdlZW4gdGFza3NcbiAgICAgIGNvbnN0IGVmcyA9IG5ldyBFZnNGaWxlU3lzdGVtKHRoaXMsICdlZnMnLCB7XG4gICAgICAgIHRocm91Z2hwdXRNb2RlOiAnZWxhc3RpYycsXG4gICAgICAgIHRhZ3M6IHtcbiAgICAgICAgICBOYW1lOiAnd29yaycsXG4gICAgICAgIH0sXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBleHRlcm5hbHNFZnMgPSBuZXcgRWZzRmlsZVN5c3RlbSh0aGlzLCAnZXh0ZXJuYWxzRWZzJywge1xuICAgICAgICB0aHJvdWdocHV0TW9kZTogJ2VsYXN0aWMnLFxuICAgICAgICB0YWdzOiB7XG4gICAgICAgICAgTmFtZTogJ2V4dGVybmFscycsXG4gICAgICAgIH0sXG4gICAgICB9KVxuXG4gICAgICAvLyBFYWNoIHN1Ym5ldCBpbiBWUEMgYXJlIG9uIGRpZmZlcmVudCBBWnMsIHNvIGNyZWF0aW5nIG1vdW50cG9pbnQgdG8gZWFjaFxuICAgICAgY29uc3QgaXRlcmF0b3IgPSBUZXJyYWZvcm1JdGVyYXRvci5mcm9tTGlzdChzdWJuZXRzLmlkcylcblxuICAgICAgbmV3IEVmc01vdW50VGFyZ2V0KHRoaXMsICdFZnNNb3VudFRhcmdldCcsIHtcbiAgICAgICAgZm9yRWFjaDogaXRlcmF0b3IsXG4gICAgICAgIGZpbGVTeXN0ZW1JZDogZWZzLmlkLFxuICAgICAgICBzdWJuZXRJZDogaXRlcmF0b3IudmFsdWUsXG4gICAgICB9KVxuXG4gICAgICBuZXcgRWZzTW91bnRUYXJnZXQodGhpcywgJ0V4dGVybmFsc0Vmc01vdW50VGFyZ2V0Jywge1xuICAgICAgICBmb3JFYWNoOiBpdGVyYXRvcixcbiAgICAgICAgZmlsZVN5c3RlbUlkOiBleHRlcm5hbHNFZnMuaWQsXG4gICAgICAgIHN1Ym5ldElkOiBpdGVyYXRvci52YWx1ZSxcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IHJ1bm5lclZvbHVtZU5hbWUgPSAnd29yaydcbiAgICAgIGNvbnN0IGV4dGVybmFsc1ZvbHVtZU5hbWUgPSAnZXh0ZXJuYWxzJ1xuXG4gICAgICBydW5uZXJWb2x1bWUucHVzaChcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IHJ1bm5lclZvbHVtZU5hbWUsXG4gICAgICAgICAgZWZzVm9sdW1lQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgZmlsZVN5c3RlbUlkOiBlZnMuaWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gVGhpcyBkb2Vzbid0IHdvcmsgd2l0aCBzYW1lIHZvbHVtZSwgYXMgdm9sdW1lIGlzIGluaXRpYWxseSBlbXB0eSBzbyBpdCBjYW4ndCBtYXAgdG8gaXQncyBcImV4dGVybmFsc1wiIGRpcmVjdG9yeVxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogZXh0ZXJuYWxzVm9sdW1lTmFtZSxcbiAgICAgICAgICBlZnNWb2x1bWVDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICBmaWxlU3lzdGVtSWQ6IGV4dGVybmFsc0Vmcy5pZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgKVxuXG4gICAgICBydW5uZXJDb250YWluZXJEZWZpbml0aW9uLm1vdW50UG9pbnRzPy5wdXNoKFxuICAgICAgICB7XG4gICAgICAgICAgc291cmNlVm9sdW1lOiBydW5uZXJWb2x1bWVOYW1lLFxuICAgICAgICAgIGNvbnRhaW5lclBhdGg6ICcvdG1wL193b3JrJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZVZvbHVtZTogZXh0ZXJuYWxzVm9sdW1lTmFtZSxcbiAgICAgICAgICBjb250YWluZXJQYXRoOiAnL3RtcC9leHRlcm5hbHMnLFxuICAgICAgICB9LFxuICAgICAgKVxuXG4gICAgICBydW5uZXJDb250YWluZXJEZWZpbml0aW9uLmVudmlyb25tZW50Py5wdXNoKFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0VGU19JRCcsXG4gICAgICAgICAgdmFsdWU6IGVmcy5pZCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdFWFRFUk5BTFNfRUZTX0lEJyxcbiAgICAgICAgICB2YWx1ZTogZXh0ZXJuYWxzRWZzLmlkLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0FDVElPTlNfUlVOTkVSX1JFUVVJUkVfSk9CX0NPTlRBSU5FUicsXG4gICAgICAgICAgdmFsdWU6ICdmYWxzZScsXG4gICAgICAgIH0sXG4gICAgICApXG5cbiAgICAgIHJ1bm5lckNvbnRhaW5lckRlZmluaXRpb24uY29tbWFuZCA9IFtcbiAgICAgICAgJy9iaW4vc2gnLFxuICAgICAgICAnLWMnLFxuICAgICAgICAnZXhwb3J0IEVYRUNJRD0kKGNhdCAvcHJvYy9zeXMva2VybmVsL3JhbmRvbS91dWlkKSAmJiBzdWRvIG1rZGlyIC1wIC90bXAvX3dvcmsvJEVYRUNJRCAmJiBzdWRvIGNob3duIHJ1bm5lcjpydW5uZXIgL3RtcC9fd29yay8kRVhFQ0lEICYmIGxuIC1zIC90bXAvX3dvcmsvJEVYRUNJRCBfd29yayAmJiBzdWRvIGNob3duIHJ1bm5lcjpydW5uZXIgL3RtcC9leHRlcm5hbHMgJiYgL2hvbWUvcnVubmVyL3J1bi5zaCA7IHN1ZG8gcm0gLXIgL3RtcC9fd29yay8kRVhFQ0lEJyxcbiAgICAgIF1cbiAgICAgIHJ1bm5lckNvbnRhaW5lckRlZmluaXRpb24uaW1hZ2UgPSAnZ2hjci5pby9oaS1maS9hY3Rpb25zLXJ1bm5lcjplY3MnXG4gICAgfVxuXG4gICAgLy8gVE9ETzogSW1hZ2VzIHRocm91Z2ggY2FjaGluZzogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUi9sYXRlc3QvdXNlcmd1aWRlL3B1bGwtdGhyb3VnaC1jYWNoZS5odG1sIChyZXF1aXJlcyBhdXRoZW50aWNhdGlvbilcbiAgICAvLyBUT0RPOiBQYXNzIEV4ZWN1dGlvbiByb2xlIHRvIGpvYiB0YXNrOiBodHRwczovL3d3dy5lcm5lc3RjaGlhbmcuY29tL2VuL3Bvc3RzLzIwMjEvdXNpbmctYW1hem9uLWVjcy1leGVjLyMxLWdyYW50LXBlcm1pc3Npb25zLWVjcy10YXNrLWlhbS1yb2xlXG4gICAgLy8gVE9ETzogUGFzcyBUYXNrIHJvbGUgdG8gam9iIHRhc2tcbiAgICBjb25zdCBydW5uZXJUYXNrRGVmaW5pdGlvbiA9IG5ldyBFY3NUYXNrRGVmaW5pdGlvbihcbiAgICAgIHRoaXMsXG4gICAgICAnUnVubmVyVGFza0RlZmluaXRpb24nLFxuICAgICAge1xuICAgICAgICBmYW1pbHk6ICdHSEEnLFxuICAgICAgICB0YXNrUm9sZUFybjogcnVubmVyUm9sZS5hcm4sXG4gICAgICAgIGV4ZWN1dGlvblJvbGVBcm46IGVjc1Rhc2tFeGVjdXRpb25Sb2xlLmFybixcbiAgICAgICAgY29udGFpbmVyRGVmaW5pdGlvbnM6IEZuLmpzb25lbmNvZGUoW3J1bm5lckNvbnRhaW5lckRlZmluaXRpb25dKSxcbiAgICAgICAgY3B1OiAnMTAyNCcsXG4gICAgICAgIG1lbW9yeTogJzIwNDgnLFxuICAgICAgICByZXF1aXJlc0NvbXBhdGliaWxpdGllczogWydGQVJHQVRFJ10sXG4gICAgICAgIHJ1bnRpbWVQbGF0Zm9ybToge1xuICAgICAgICAgIGNwdUFyY2hpdGVjdHVyZTogJ1g4Nl82NCcsXG4gICAgICAgICAgb3BlcmF0aW5nU3lzdGVtRmFtaWx5OiAnTElOVVgnLFxuICAgICAgICB9LFxuICAgICAgICBuZXR3b3JrTW9kZTogJ2F3c3ZwYycsXG4gICAgICAgIHZvbHVtZTogcnVubmVyVm9sdW1lLFxuICAgICAgfSxcbiAgICApXG5cbiAgICBhdXRvc2NhbGVyQ29udGFpbmVyRGVmaW5pdGlvbi5lbnZpcm9ubWVudD8ucHVzaCh7XG4gICAgICBuYW1lOiAnVEFTS19ERUZJTklUSU9OX0FSTicsXG4gICAgICB2YWx1ZTogcnVubmVyVGFza0RlZmluaXRpb24uYXJuLFxuICAgIH0pXG5cbiAgICBjb25zdCBhdXRvc2NhbGVyVGFza0RlZmluaXRpb24gPSBuZXcgRWNzVGFza0RlZmluaXRpb24oXG4gICAgICB0aGlzLFxuICAgICAgJ0F1dG9zY2FsZXJUYXNrRGVmaW5pdGlvbicsXG4gICAgICB7XG4gICAgICAgIGZhbWlseTogJ0F1dG9zY2FsZXInLFxuICAgICAgICB0YXNrUm9sZUFybjogYXV0b3NjYWxlclJvbGUuYXJuLFxuICAgICAgICBleGVjdXRpb25Sb2xlQXJuOiBlY3NUYXNrRXhlY3V0aW9uUm9sZS5hcm4sXG4gICAgICAgIGNvbnRhaW5lckRlZmluaXRpb25zOiBGbi5qc29uZW5jb2RlKFthdXRvc2NhbGVyQ29udGFpbmVyRGVmaW5pdGlvbl0pLFxuICAgICAgICBjcHU6ICcyNTYnLFxuICAgICAgICBtZW1vcnk6ICc1MTInLFxuICAgICAgICByZXF1aXJlc0NvbXBhdGliaWxpdGllczogWydGQVJHQVRFJ10sXG4gICAgICAgIHJ1bnRpbWVQbGF0Zm9ybToge1xuICAgICAgICAgIGNwdUFyY2hpdGVjdHVyZTogJ1g4Nl82NCcsXG4gICAgICAgICAgb3BlcmF0aW5nU3lzdGVtRmFtaWx5OiAnTElOVVgnLFxuICAgICAgICB9LFxuICAgICAgICBuZXR3b3JrTW9kZTogJ2F3c3ZwYycsXG4gICAgICB9LFxuICAgIClcblxuICAgIGNvbnN0IHJ1bm5lclBvbGljeURlZmluaXRpb24gPSB7XG4gICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNycsXG4gICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIFNpZDogJ1N0YXJ0YW5kTW9uaXRvclRhc2snLFxuICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICBBY3Rpb246IFtcbiAgICAgICAgICAgICdlY3M6UnVuVGFzaycsXG4gICAgICAgICAgICAnZWNzOlRhZ1Jlc291cmNlJyxcbiAgICAgICAgICAgICdlY3M6TGlzdFRhc2tEZWZpbml0aW9ucycsXG4gICAgICAgICAgICAnZWNzOkxpc3RUYXNrcycsXG4gICAgICAgICAgICAnZWNzOlN0b3BUYXNrJyxcbiAgICAgICAgICAgICdlY3M6UmVnaXN0ZXJUYXNrRGVmaW5pdGlvbicsXG4gICAgICAgICAgICAnZWNzOkRlc2NyaWJlVGFza0RlZmluaXRpb24nLFxuICAgICAgICAgICAgJ2VjczpEZXJlZ2lzdGVyVGFza0RlZmluaXRpb24nLFxuICAgICAgICAgICAgJ2VjczpEZWxldGVUYXNrRGVmaW5pdGlvbnMnLFxuICAgICAgICAgICAgJ2VjczpFeGVjdXRlQ29tbWFuZCcsXG4gICAgICAgICAgICAvLyBOZWVkZWQgZm9yIHdhaXRpbmdcbiAgICAgICAgICAgICdlY3M6RGVzY3JpYmVUYXNrcycsXG4gICAgICAgICAgICAnbG9nczpHZXRMb2dFdmVudHMnLFxuICAgICAgICAgICAgJ2lhbTpQYXNzUm9sZScsXG4gICAgICAgICAgICAnbG9nczpTdGFydExpdmVUYWlsJyxcbiAgICAgICAgICAgICdsb2dzOkNyZWF0ZUxvZ1N0cmVhbScsXG4gICAgICAgICAgXSxcbiAgICAgICAgICBSZXNvdXJjZTogW1xuICAgICAgICAgICAgYGFybjphd3M6ZWNzOiR7cmVnaW9uLm5hbWV9OiR7aWRlbnRpdHkuYWNjb3VudElkfTp0YXNrLWRlZmluaXRpb24vZ2hhLXBvZC13b3JrZmxvdzoqYCxcbiAgICAgICAgICAgIGNsdXN0ZXIuYXJuLFxuICAgICAgICAgICAgLy8gVHJpZ2dlcmVyIGhhcyB0byBiZSBhbGxvd2VkIHRvIHBhc3MgYm90aCB0YXNrIGFuZCB0YXNrIGV4ZWN1dGlvbiByb2xlXG4gICAgICAgICAgICBlY3NUYXNrRXhlY3V0aW9uUm9sZS5hcm4sXG4gICAgICAgICAgICBydW5uZXJSb2xlLmFybixcbiAgICAgICAgICAgIGBhcm46YXdzOmVjczoke3JlZ2lvbi5uYW1lfToke2lkZW50aXR5LmFjY291bnRJZH06dGFzay8ke2NsdXN0ZXIubmFtZX0vKmAsXG4gICAgICAgICAgICAvL1RPRE86IHJlb3JkZXIgcmlnaHRzIHNvIHRoYXQgbGlzdGluZyBpcyBvbmx5IG9uZSB3aXRoIHN0YXJcbiAgICAgICAgICAgICcqJyxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgU2lkOiAnR2V0VnBjSW5mbycsXG4gICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgIEFjdGlvbjogWydlYzI6RGVzY3JpYmVTdWJuZXRzJywgJ2VjMjpEZXNjcmliZVNlY3VyaXR5R3JvdXBzJ10sXG4gICAgICAgICAgUmVzb3VyY2U6ICcqJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFNpZDogJ0V4ZWNDb21tYW5kcycsXG4gICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgIEFjdGlvbjogW1xuICAgICAgICAgICAgJ3NzbW1lc3NhZ2VzOkNyZWF0ZUNvbnRyb2xDaGFubmVsJyxcbiAgICAgICAgICAgICdzc21tZXNzYWdlczpDcmVhdGVEYXRhQ2hhbm5lbCcsXG4gICAgICAgICAgICAnc3NtbWVzc2FnZXM6T3BlbkNvbnRyb2xDaGFubmVsJyxcbiAgICAgICAgICAgICdzc21tZXNzYWdlczpPcGVuRGF0YUNoYW5uZWwnLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgUmVzb3VyY2U6ICcqJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfVxuXG4gICAgY29uc3QgcnVubmVyUG9saWN5ID0gbmV3IElhbVBvbGljeSh0aGlzLCAnUnVubmVyUG9saWN5Jywge1xuICAgICAgcG9saWN5OiBGbi5qc29uZW5jb2RlKHJ1bm5lclBvbGljeURlZmluaXRpb24pLFxuICAgIH0pXG5cbiAgICBuZXcgSWFtUm9sZVBvbGljeUF0dGFjaG1lbnQodGhpcywgJ1J1bm5lclBvbGljeUF0dGFjaG1lbnQnLCB7XG4gICAgICBwb2xpY3lBcm46IHJ1bm5lclBvbGljeS5hcm4sXG4gICAgICByb2xlOiBydW5uZXJSb2xlLm5hbWUsXG4gICAgfSlcblxuICAgIGNvbnN0IGF1dG9zY2FsZXJQb2xpY3kgPSBuZXcgSWFtUG9saWN5KHRoaXMsICdBdXRvc2NhbGVyUG9saWN5Jywge1xuICAgICAgcG9saWN5OiBGbi5qc29uZW5jb2RlKHtcbiAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnLFxuICAgICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBTaWQ6ICdTdGFydGFuZE1vbml0b3JUYXNrJyxcbiAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgIEFjdGlvbjogW1xuICAgICAgICAgICAgICAnZWNzOlJ1blRhc2snLFxuICAgICAgICAgICAgICAvLyBOZWVkZWQgZm9yIHdhaXRpbmdcbiAgICAgICAgICAgICAgJ2VjczpEZXNjcmliZVRhc2tzJyxcbiAgICAgICAgICAgICAgJ2xvZ3M6R2V0TG9nRXZlbnRzJyxcbiAgICAgICAgICAgICAgJ2lhbTpQYXNzUm9sZScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgUmVzb3VyY2U6IFtcbiAgICAgICAgICAgICAgYCR7cnVubmVyVGFza0RlZmluaXRpb24uYXJuV2l0aG91dFJldmlzaW9ufToqYCxcbiAgICAgICAgICAgICAgLy8gVHJpZ2dlcmVyIGhhcyB0byBiZSBhbGxvd2VkIHRvIHBhc3MgYm90aCB0YXNrIGFuZCB0YXNrIGV4ZWN1dGlvbiByb2xlXG4gICAgICAgICAgICAgIGVjc1Rhc2tFeGVjdXRpb25Sb2xlLmFybixcbiAgICAgICAgICAgICAgcnVubmVyUm9sZS5hcm4sXG4gICAgICAgICAgICAgIGBhcm46YXdzOmVjczoke3JlZ2lvbi5uYW1lfToke2lkZW50aXR5LmFjY291bnRJZH06dGFzay8ke2NsdXN0ZXIubmFtZX0vKmAsXG4gICAgICAgICAgICAgIGAke3J1bm5lckxvZ0dyb3VwLmFybn06bG9nLXN0cmVhbToqYCxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBTaWQ6ICdHZXRWcGNJbmZvJyxcbiAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgIEFjdGlvbjogWydlYzI6RGVzY3JpYmVTdWJuZXRzJywgJ2VjMjpEZXNjcmliZVNlY3VyaXR5R3JvdXBzJ10sXG4gICAgICAgICAgICBSZXNvdXJjZTogJyonLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICB9KVxuICAgIG5ldyBJYW1Sb2xlUG9saWN5QXR0YWNobWVudCh0aGlzLCAnQXV0b3NjYWxlclBvbGljeUF0dGFjaG1lbnQnLCB7XG4gICAgICBwb2xpY3lBcm46IGF1dG9zY2FsZXJQb2xpY3kuYXJuLFxuICAgICAgcm9sZTogYXV0b3NjYWxlclJvbGUubmFtZSxcbiAgICB9KVxuXG4gICAgbmV3IEVjc1NlcnZpY2UodGhpcywgJ0F1dG9zY2FsZXJTZXJ2aWNlJywge1xuICAgICAgY2x1c3RlcjogY2x1c3Rlci5hcm4sXG4gICAgICBuYW1lOiAnYXV0b3NjYWxlci1zZXJ2aWNlJyxcbiAgICAgIGRlc2lyZWRDb3VudDogMSxcbiAgICAgIGxhdW5jaFR5cGU6ICdGQVJHQVRFJyxcbiAgICAgIHRhc2tEZWZpbml0aW9uOiBhdXRvc2NhbGVyVGFza0RlZmluaXRpb24uYXJuV2l0aG91dFJldmlzaW9uLFxuICAgICAgbmV0d29ya0NvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgYXNzaWduUHVibGljSXA6IHRydWUsXG4gICAgICAgIHN1Ym5ldHM6IHN1Ym5ldHMuaWRzLFxuICAgICAgICBzZWN1cml0eUdyb3Vwczogc2VjdXJpdHlHcm91cHMuaWRzLFxuICAgICAgfSxcbiAgICAgIGxpZmVjeWNsZToge1xuICAgICAgICBpZ25vcmVDaGFuZ2VzOiBbJ2Rlc2lyZWRfY291bnQnXSxcbiAgICAgIH0sXG4gICAgfSlcbiAgfVxufVxuIl19
|