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