aws-delivlib 13.4.2 → 13.4.6
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/cdk.out/{asset.e12c7af9b638ac5f6e69012fdab4a414bd0c107b6a233304e64b443a621ecd20 → asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451}/create-release.js +0 -0
- package/cdk.out/{asset.e12c7af9b638ac5f6e69012fdab4a414bd0c107b6a233304e64b443a621ecd20 → asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451}/package-lock.json +100 -95
- package/cdk.out/{asset.e12c7af9b638ac5f6e69012fdab4a414bd0c107b6a233304e64b443a621ecd20 → asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451}/package.json +0 -0
- package/cdk.out/{asset.e12c7af9b638ac5f6e69012fdab4a414bd0c107b6a233304e64b443a621ecd20 → asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451}/publish.sh +0 -0
- package/cdk.out/{asset.e12c7af9b638ac5f6e69012fdab4a414bd0c107b6a233304e64b443a621ecd20 → asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451}/sign-files.sh +0 -0
- package/cdk.out/{asset.e12c7af9b638ac5f6e69012fdab4a414bd0c107b6a233304e64b443a621ecd20 → asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451}/with-signing-key.sh +0 -0
- package/cdk.out/{asset.dc2e98009b027861f34e56eebb81faa5a3951ed9da80ce4a903a45de04268238 → asset.3044256b9586ecb8a7709713aaca30ceb34f699e3f93c8858f633aaf2f0c7140}/index.js +17 -11
- package/cdk.out/delivlib-test.assets.json +8 -8
- package/cdk.out/delivlib-test.template.json +32 -27
- package/cdk.out/manifest.json +272 -272
- package/cdk.out/tree.json +442 -437
- package/lib/custom-resource-handlers/src/certificate-signing-request.tsbuildinfo +1 -1
- package/lib/custom-resource-handlers/src/pgp-secret.tsbuildinfo +1 -1
- package/lib/custom-resource-handlers/src/private-key.tsbuildinfo +1 -1
- package/lib/publishing/github/package-lock.json +100 -95
- package/package.json +17 -18
- package/lib/__tests__/auto-build.test.d.ts +0 -1
- package/lib/__tests__/auto-build.test.js +0 -119
- package/lib/__tests__/build-spec.test.d.ts +0 -1
- package/lib/__tests__/build-spec.test.js +0 -82
- package/lib/__tests__/bump.test.d.ts +0 -1
- package/lib/__tests__/bump.test.js +0 -284
- package/lib/__tests__/canary.test.d.ts +0 -1
- package/lib/__tests__/canary.test.js +0 -144
- package/lib/__tests__/change-control-lambda/disable-transition.test.d.ts +0 -1
- package/lib/__tests__/change-control-lambda/disable-transition.test.js +0 -64
- package/lib/__tests__/change-control-lambda/handler.test.d.ts +0 -1
- package/lib/__tests__/change-control-lambda/handler.test.js +0 -143
- package/lib/__tests__/change-control-lambda/time-window.test.d.ts +0 -1
- package/lib/__tests__/change-control-lambda/time-window.test.js +0 -131
- package/lib/__tests__/chime-notifier.test.d.ts +0 -6
- package/lib/__tests__/chime-notifier.test.js +0 -138
- package/lib/__tests__/code-signing-cert.test.d.ts +0 -1
- package/lib/__tests__/code-signing-cert.test.js +0 -72
- package/lib/__tests__/custom-resource-handlers/_cloud-formation.test.d.ts +0 -1
- package/lib/__tests__/custom-resource-handlers/_cloud-formation.test.js +0 -100
- package/lib/__tests__/custom-resource-handlers/_exec.test.d.ts +0 -1
- package/lib/__tests__/custom-resource-handlers/_exec.test.js +0 -9
- package/lib/__tests__/custom-resource-handlers/_rmrf.test.d.ts +0 -1
- package/lib/__tests__/custom-resource-handlers/_rmrf.test.js +0 -13
- package/lib/__tests__/custom-resource-handlers/certificate-signing-request.test.d.ts +0 -1
- package/lib/__tests__/custom-resource-handlers/certificate-signing-request.test.js +0 -171
- package/lib/__tests__/custom-resource-handlers/pgp-secret.test.d.ts +0 -1
- package/lib/__tests__/custom-resource-handlers/pgp-secret.test.js +0 -169
- package/lib/__tests__/custom-resource-handlers/private-key.test.d.ts +0 -1
- package/lib/__tests__/custom-resource-handlers/private-key.test.js +0 -164
- package/lib/__tests__/integ.delivlib.d.ts +0 -1
- package/lib/__tests__/integ.delivlib.js +0 -33
- package/lib/__tests__/open-pgp-key-pair.test.d.ts +0 -1
- package/lib/__tests__/open-pgp-key-pair.test.js +0 -130
- package/lib/__tests__/pipeline-notifications/chime.test.d.ts +0 -1
- package/lib/__tests__/pipeline-notifications/chime.test.js +0 -69
- package/lib/__tests__/pipeline-notifications/slack.test.d.ts +0 -1
- package/lib/__tests__/pipeline-notifications/slack.test.js +0 -82
- package/lib/__tests__/pipeline.test.d.ts +0 -1
- package/lib/__tests__/pipeline.test.js +0 -362
- package/lib/__tests__/pr.test.d.ts +0 -3
- package/lib/__tests__/pr.test.js +0 -88
- package/lib/__tests__/publishing.test.d.ts +0 -1
- package/lib/__tests__/publishing.test.js +0 -89
- package/lib/__tests__/registry-sync/ecr-mirror.test.d.ts +0 -1
- package/lib/__tests__/registry-sync/ecr-mirror.test.js +0 -313
- package/lib/__tests__/registry-sync/mirror-source.test.d.ts +0 -1
- package/lib/__tests__/registry-sync/mirror-source.test.js +0 -225
- package/lib/__tests__/shellable.test.d.ts +0 -1
- package/lib/__tests__/shellable.test.js +0 -479
- package/lib/__tests__/test-stack.d.ts +0 -4
- package/lib/__tests__/test-stack.js +0 -184
- package/lib/__tests__/watcher-handler.test.d.ts +0 -1
- package/lib/__tests__/watcher-handler.test.js +0 -190
- package/lib/__tests__/watcher.test.d.ts +0 -1
- package/lib/__tests__/watcher.test.js +0 -78
|
@@ -1,479 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
-
}) : (function(o, m, k, k2) {
|
|
6
|
-
if (k2 === undefined) k2 = k;
|
|
7
|
-
o[k2] = m[k];
|
|
8
|
-
}));
|
|
9
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
-
}) : function(o, v) {
|
|
12
|
-
o["default"] = v;
|
|
13
|
-
});
|
|
14
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
-
if (mod && mod.__esModule) return mod;
|
|
16
|
-
var result = {};
|
|
17
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
-
__setModuleDefault(result, mod);
|
|
19
|
-
return result;
|
|
20
|
-
};
|
|
21
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
const path = __importStar(require("path"));
|
|
23
|
-
const assert_1 = require("@monocdk-experiment/assert");
|
|
24
|
-
const cdk = __importStar(require("monocdk"));
|
|
25
|
-
const lib_1 = require("../../lib");
|
|
26
|
-
// tslint:disable:max-line-length
|
|
27
|
-
test('can assume a refreshable role', () => {
|
|
28
|
-
const stack = new cdk.Stack(new cdk.App(), 'TestStack');
|
|
29
|
-
new lib_1.Shellable(stack, 'MyShellable', {
|
|
30
|
-
scriptDirectory: path.join(__dirname, 'delivlib-tests/linux'),
|
|
31
|
-
entrypoint: 'test.sh',
|
|
32
|
-
assumeRole: {
|
|
33
|
-
profileName: 'profile',
|
|
34
|
-
roleArn: 'arn',
|
|
35
|
-
sessionName: 'session',
|
|
36
|
-
refresh: true,
|
|
37
|
-
},
|
|
38
|
-
});
|
|
39
|
-
const template = (0, assert_1.expect)(stack).value;
|
|
40
|
-
expect(JSON.parse(template.Resources.MyShellableB2FFD397.Properties.Source.BuildSpec).phases.pre_build.commands).toEqual([
|
|
41
|
-
'echo "Downloading scripts from s3://${SCRIPT_S3_BUCKET}/${SCRIPT_S3_KEY}"',
|
|
42
|
-
'aws s3 cp s3://${SCRIPT_S3_BUCKET}/${SCRIPT_S3_KEY} /tmp',
|
|
43
|
-
'mkdir -p /tmp/scriptdir',
|
|
44
|
-
'unzip /tmp/$(basename $SCRIPT_S3_KEY) -d /tmp/scriptdir',
|
|
45
|
-
'mkdir -p ~/.aws',
|
|
46
|
-
'touch ~/.aws/credentials',
|
|
47
|
-
'config=~/.aws/config',
|
|
48
|
-
'echo [profile profile]>> ${config}',
|
|
49
|
-
'echo credential_source = EcsContainer >> ${config}',
|
|
50
|
-
'echo role_session_name = session >> ${config}',
|
|
51
|
-
'echo role_arn = arn >> $config',
|
|
52
|
-
'export AWS_PROFILE=profile',
|
|
53
|
-
'export AWS_SDK_LOAD_CONFIG=1',
|
|
54
|
-
]);
|
|
55
|
-
});
|
|
56
|
-
test('minimal configuration', () => {
|
|
57
|
-
const stack = new cdk.Stack(new cdk.App(), 'TestStack');
|
|
58
|
-
new lib_1.Shellable(stack, 'MyShellable', {
|
|
59
|
-
scriptDirectory: path.join(__dirname, 'delivlib-tests/linux'),
|
|
60
|
-
entrypoint: 'test.sh',
|
|
61
|
-
});
|
|
62
|
-
(0, assert_1.expect)(stack).to((0, assert_1.haveResource)('AWS::CodeBuild::Project'));
|
|
63
|
-
});
|
|
64
|
-
test('assume role', () => {
|
|
65
|
-
const stack = new cdk.Stack(new cdk.App(), 'TestStack');
|
|
66
|
-
new lib_1.Shellable(stack, 'MyShellable', {
|
|
67
|
-
scriptDirectory: path.join(__dirname, 'delivlib-tests/linux'),
|
|
68
|
-
entrypoint: 'test.sh',
|
|
69
|
-
assumeRole: {
|
|
70
|
-
roleArn: 'arn:aws:role:to:assume',
|
|
71
|
-
sessionName: 'my-session-name',
|
|
72
|
-
},
|
|
73
|
-
});
|
|
74
|
-
const template = assert_1.SynthUtils.synthesize(stack).template;
|
|
75
|
-
const buildSpec = JSON.parse(template.Resources.MyShellableB2FFD397.Properties.Source.BuildSpec);
|
|
76
|
-
expect(buildSpec.phases.pre_build.commands)
|
|
77
|
-
.toContain('AWS_STS_REGIONAL_ENDPOINTS=legacy aws sts assume-role --role-arn \"arn:aws:role:to:assume\" --role-session-name \"my-session-name\" > $creds');
|
|
78
|
-
});
|
|
79
|
-
test('assume role with external-id', () => {
|
|
80
|
-
const stack = new cdk.Stack(new cdk.App(), 'TestStack');
|
|
81
|
-
new lib_1.Shellable(stack, 'MyShellable', {
|
|
82
|
-
scriptDirectory: path.join(__dirname, 'delivlib-tests/linux'),
|
|
83
|
-
entrypoint: 'test.sh',
|
|
84
|
-
assumeRole: {
|
|
85
|
-
roleArn: 'arn:aws:role:to:assume',
|
|
86
|
-
sessionName: 'my-session-name',
|
|
87
|
-
externalId: 'my-externa-id',
|
|
88
|
-
},
|
|
89
|
-
});
|
|
90
|
-
const template = assert_1.SynthUtils.synthesize(stack).template;
|
|
91
|
-
const buildSpec = JSON.parse(template.Resources.MyShellableB2FFD397.Properties.Source.BuildSpec);
|
|
92
|
-
expect(buildSpec.phases.pre_build.commands)
|
|
93
|
-
.toContain('AWS_STS_REGIONAL_ENDPOINTS=legacy aws sts assume-role --role-arn \"arn:aws:role:to:assume\" --role-session-name \"my-session-name\" --external-id \"my-externa-id\" > $creds');
|
|
94
|
-
});
|
|
95
|
-
test('assume role with regional endpoints', () => {
|
|
96
|
-
const stack = new cdk.Stack(new cdk.App(), 'TestStack');
|
|
97
|
-
new lib_1.Shellable(stack, 'MyShellable', {
|
|
98
|
-
scriptDirectory: path.join(__dirname, 'delivlib-tests/linux'),
|
|
99
|
-
entrypoint: 'test.sh',
|
|
100
|
-
assumeRole: {
|
|
101
|
-
roleArn: 'arn:aws:role:to:assume',
|
|
102
|
-
sessionName: 'my-session-name',
|
|
103
|
-
},
|
|
104
|
-
useRegionalStsEndpoints: true,
|
|
105
|
-
});
|
|
106
|
-
const template = assert_1.SynthUtils.synthesize(stack).template;
|
|
107
|
-
const buildSpec = JSON.parse(template.Resources.MyShellableB2FFD397.Properties.Source.BuildSpec);
|
|
108
|
-
expect(buildSpec.phases.pre_build.commands)
|
|
109
|
-
.toContain('AWS_STS_REGIONAL_ENDPOINTS=regional aws sts assume-role --role-arn \"arn:aws:role:to:assume\" --role-session-name \"my-session-name\" > $creds');
|
|
110
|
-
});
|
|
111
|
-
test('assume role with global endpoints', () => {
|
|
112
|
-
const stack = new cdk.Stack(new cdk.App(), 'TestStack');
|
|
113
|
-
new lib_1.Shellable(stack, 'MyShellable', {
|
|
114
|
-
scriptDirectory: path.join(__dirname, 'delivlib-tests/linux'),
|
|
115
|
-
entrypoint: 'test.sh',
|
|
116
|
-
assumeRole: {
|
|
117
|
-
roleArn: 'arn:aws:role:to:assume',
|
|
118
|
-
sessionName: 'my-session-name',
|
|
119
|
-
},
|
|
120
|
-
useRegionalStsEndpoints: false,
|
|
121
|
-
});
|
|
122
|
-
const template = assert_1.SynthUtils.synthesize(stack).template;
|
|
123
|
-
const buildSpec = JSON.parse(template.Resources.MyShellableB2FFD397.Properties.Source.BuildSpec);
|
|
124
|
-
expect(buildSpec.phases.pre_build.commands)
|
|
125
|
-
.toContain('AWS_STS_REGIONAL_ENDPOINTS=legacy aws sts assume-role --role-arn \"arn:aws:role:to:assume\" --role-session-name \"my-session-name\" > $creds');
|
|
126
|
-
});
|
|
127
|
-
test('assume role not supported on windows', () => {
|
|
128
|
-
const stack = new cdk.Stack(new cdk.App(), 'TestStack');
|
|
129
|
-
expect(() => new lib_1.Shellable(stack, 'MyShellable', {
|
|
130
|
-
scriptDirectory: path.join(__dirname, 'delivlib-tests/linux'),
|
|
131
|
-
platform: lib_1.ShellPlatform.Windows,
|
|
132
|
-
entrypoint: 'test.sh',
|
|
133
|
-
assumeRole: {
|
|
134
|
-
roleArn: 'arn:aws:role:to:assume',
|
|
135
|
-
sessionName: 'my-session-name',
|
|
136
|
-
},
|
|
137
|
-
})).toThrow('assumeRole is not supported on Windows');
|
|
138
|
-
});
|
|
139
|
-
test('alarm options - defaults', () => {
|
|
140
|
-
const stack = new cdk.Stack(new cdk.App(), 'TestStack');
|
|
141
|
-
new lib_1.Shellable(stack, 'MyShellable', {
|
|
142
|
-
scriptDirectory: path.join(__dirname, 'delivlib-tests/linux'),
|
|
143
|
-
entrypoint: 'test.sh',
|
|
144
|
-
});
|
|
145
|
-
(0, assert_1.expect)(stack).to((0, assert_1.haveResource)('AWS::CloudWatch::Alarm', {
|
|
146
|
-
EvaluationPeriods: 1,
|
|
147
|
-
Threshold: 1,
|
|
148
|
-
Period: 300,
|
|
149
|
-
}));
|
|
150
|
-
});
|
|
151
|
-
test('alarm options - custom', () => {
|
|
152
|
-
const stack = new cdk.Stack(new cdk.App(), 'TestStack');
|
|
153
|
-
new lib_1.Shellable(stack, 'MyShellable', {
|
|
154
|
-
scriptDirectory: path.join(__dirname, 'delivlib-tests/linux'),
|
|
155
|
-
entrypoint: 'test.sh',
|
|
156
|
-
alarmEvaluationPeriods: 2,
|
|
157
|
-
alarmThreshold: 5,
|
|
158
|
-
alarmPeriod: cdk.Duration.minutes(60),
|
|
159
|
-
});
|
|
160
|
-
(0, assert_1.expect)(stack).to((0, assert_1.haveResource)('AWS::CloudWatch::Alarm', {
|
|
161
|
-
EvaluationPeriods: 2,
|
|
162
|
-
Threshold: 5,
|
|
163
|
-
Period: 3600,
|
|
164
|
-
}));
|
|
165
|
-
});
|
|
166
|
-
test('privileged mode', () => {
|
|
167
|
-
const stack = new cdk.Stack(new cdk.App(), 'TestStack');
|
|
168
|
-
new lib_1.Shellable(stack, 'AllowDocker', {
|
|
169
|
-
scriptDirectory: path.join(__dirname, 'delivlib-tests/linux'),
|
|
170
|
-
entrypoint: 'test.sh',
|
|
171
|
-
privileged: true,
|
|
172
|
-
});
|
|
173
|
-
(0, assert_1.expect)(stack).to((0, assert_1.haveResource)('AWS::CodeBuild::Project', {
|
|
174
|
-
Environment: {
|
|
175
|
-
PrivilegedMode: true,
|
|
176
|
-
},
|
|
177
|
-
}, assert_1.ResourcePart.Properties, true));
|
|
178
|
-
});
|
|
179
|
-
test('environment variables', () => {
|
|
180
|
-
const stack = new cdk.Stack(new cdk.App(), 'TestStack');
|
|
181
|
-
new lib_1.Shellable(stack, 'EnvironmentVariables', {
|
|
182
|
-
scriptDirectory: path.join(__dirname, 'delivlib-tests/linux'),
|
|
183
|
-
entrypoint: 'test.sh',
|
|
184
|
-
environment: {
|
|
185
|
-
ENV_VAR: 'env-var-value',
|
|
186
|
-
UNDEFINED_VAR: undefined,
|
|
187
|
-
EMPTY_STRING: '',
|
|
188
|
-
},
|
|
189
|
-
environmentSecrets: {
|
|
190
|
-
ENV_VAR_SECRET: 'arn:test:secretsmanager:region:000000000000:secret:env-var-secret-name-abc123',
|
|
191
|
-
},
|
|
192
|
-
environmentParameters: {
|
|
193
|
-
ENV_VAR_PARAMETER: 'env-var-parameter-name',
|
|
194
|
-
},
|
|
195
|
-
});
|
|
196
|
-
(0, assert_1.expect)(stack).to((0, assert_1.haveResource)('AWS::CodeBuild::Project', {
|
|
197
|
-
Environment: {
|
|
198
|
-
EnvironmentVariables: [
|
|
199
|
-
{
|
|
200
|
-
Name: 'SCRIPT_S3_BUCKET',
|
|
201
|
-
Type: 'PLAINTEXT',
|
|
202
|
-
Value: {
|
|
203
|
-
Ref: 'AssetParameters3d34b07ba871989d030649c646b3096ba7c78ca531897bcdb0670774d2f9d3e4S3BucketDA91EFBC',
|
|
204
|
-
},
|
|
205
|
-
},
|
|
206
|
-
{
|
|
207
|
-
Name: 'SCRIPT_S3_KEY',
|
|
208
|
-
Type: 'PLAINTEXT',
|
|
209
|
-
Value: {
|
|
210
|
-
'Fn::Join': ['', [{
|
|
211
|
-
'Fn::Select': [0, {
|
|
212
|
-
'Fn::Split': ['||', {
|
|
213
|
-
Ref: 'AssetParameters3d34b07ba871989d030649c646b3096ba7c78ca531897bcdb0670774d2f9d3e4S3VersionKeyF3F83F76',
|
|
214
|
-
}],
|
|
215
|
-
}],
|
|
216
|
-
}, {
|
|
217
|
-
'Fn::Select': [1, {
|
|
218
|
-
'Fn::Split': ['||', {
|
|
219
|
-
Ref: 'AssetParameters3d34b07ba871989d030649c646b3096ba7c78ca531897bcdb0670774d2f9d3e4S3VersionKeyF3F83F76',
|
|
220
|
-
}],
|
|
221
|
-
}],
|
|
222
|
-
}]],
|
|
223
|
-
},
|
|
224
|
-
},
|
|
225
|
-
{
|
|
226
|
-
Name: 'ENV_VAR',
|
|
227
|
-
Type: 'PLAINTEXT',
|
|
228
|
-
Value: 'env-var-value',
|
|
229
|
-
},
|
|
230
|
-
{
|
|
231
|
-
Name: 'EMPTY_STRING',
|
|
232
|
-
Type: 'PLAINTEXT',
|
|
233
|
-
Value: '',
|
|
234
|
-
},
|
|
235
|
-
{
|
|
236
|
-
Name: 'ENV_VAR_SECRET',
|
|
237
|
-
Type: 'SECRETS_MANAGER',
|
|
238
|
-
Value: 'env-var-secret-name',
|
|
239
|
-
},
|
|
240
|
-
{
|
|
241
|
-
Name: 'ENV_VAR_PARAMETER',
|
|
242
|
-
Type: 'PARAMETER_STORE',
|
|
243
|
-
Value: 'env-var-parameter-name',
|
|
244
|
-
},
|
|
245
|
-
],
|
|
246
|
-
},
|
|
247
|
-
}, assert_1.ResourcePart.Properties, true));
|
|
248
|
-
(0, assert_1.expect)(stack).to((0, assert_1.haveResource)('AWS::IAM::Policy', {
|
|
249
|
-
PolicyDocument: {
|
|
250
|
-
Statement: [
|
|
251
|
-
{
|
|
252
|
-
Action: 'ssm:GetParameters',
|
|
253
|
-
Effect: 'Allow',
|
|
254
|
-
Resource: {
|
|
255
|
-
'Fn::Join': [
|
|
256
|
-
'',
|
|
257
|
-
[
|
|
258
|
-
'arn:',
|
|
259
|
-
{
|
|
260
|
-
Ref: 'AWS::Partition',
|
|
261
|
-
},
|
|
262
|
-
':ssm:',
|
|
263
|
-
{
|
|
264
|
-
Ref: 'AWS::Region',
|
|
265
|
-
},
|
|
266
|
-
':',
|
|
267
|
-
{
|
|
268
|
-
Ref: 'AWS::AccountId',
|
|
269
|
-
},
|
|
270
|
-
':parameter/env-var-parameter-name',
|
|
271
|
-
],
|
|
272
|
-
],
|
|
273
|
-
},
|
|
274
|
-
},
|
|
275
|
-
{
|
|
276
|
-
Action: 'secretsmanager:GetSecretValue',
|
|
277
|
-
Effect: 'Allow',
|
|
278
|
-
Resource: {
|
|
279
|
-
'Fn::Join': [
|
|
280
|
-
'',
|
|
281
|
-
[
|
|
282
|
-
'arn:',
|
|
283
|
-
{
|
|
284
|
-
Ref: 'AWS::Partition',
|
|
285
|
-
},
|
|
286
|
-
':secretsmanager:',
|
|
287
|
-
{
|
|
288
|
-
Ref: 'AWS::Region',
|
|
289
|
-
},
|
|
290
|
-
':',
|
|
291
|
-
{
|
|
292
|
-
Ref: 'AWS::AccountId',
|
|
293
|
-
},
|
|
294
|
-
':secret:env-var-secret-name-??????',
|
|
295
|
-
],
|
|
296
|
-
],
|
|
297
|
-
},
|
|
298
|
-
},
|
|
299
|
-
{
|
|
300
|
-
Action: [
|
|
301
|
-
'logs:CreateLogGroup',
|
|
302
|
-
'logs:CreateLogStream',
|
|
303
|
-
'logs:PutLogEvents',
|
|
304
|
-
],
|
|
305
|
-
Effect: 'Allow',
|
|
306
|
-
Resource: [
|
|
307
|
-
{
|
|
308
|
-
'Fn::Join': [
|
|
309
|
-
'',
|
|
310
|
-
[
|
|
311
|
-
'arn:',
|
|
312
|
-
{
|
|
313
|
-
Ref: 'AWS::Partition',
|
|
314
|
-
},
|
|
315
|
-
':logs:',
|
|
316
|
-
{
|
|
317
|
-
Ref: 'AWS::Region',
|
|
318
|
-
},
|
|
319
|
-
':',
|
|
320
|
-
{
|
|
321
|
-
Ref: 'AWS::AccountId',
|
|
322
|
-
},
|
|
323
|
-
':log-group:/aws/codebuild/',
|
|
324
|
-
{
|
|
325
|
-
Ref: 'EnvironmentVariablesD266B682',
|
|
326
|
-
},
|
|
327
|
-
],
|
|
328
|
-
],
|
|
329
|
-
},
|
|
330
|
-
{
|
|
331
|
-
'Fn::Join': [
|
|
332
|
-
'',
|
|
333
|
-
[
|
|
334
|
-
'arn:',
|
|
335
|
-
{
|
|
336
|
-
Ref: 'AWS::Partition',
|
|
337
|
-
},
|
|
338
|
-
':logs:',
|
|
339
|
-
{
|
|
340
|
-
Ref: 'AWS::Region',
|
|
341
|
-
},
|
|
342
|
-
':',
|
|
343
|
-
{
|
|
344
|
-
Ref: 'AWS::AccountId',
|
|
345
|
-
},
|
|
346
|
-
':log-group:/aws/codebuild/',
|
|
347
|
-
{
|
|
348
|
-
Ref: 'EnvironmentVariablesD266B682',
|
|
349
|
-
},
|
|
350
|
-
':*',
|
|
351
|
-
],
|
|
352
|
-
],
|
|
353
|
-
},
|
|
354
|
-
],
|
|
355
|
-
},
|
|
356
|
-
{
|
|
357
|
-
Action: [
|
|
358
|
-
'codebuild:CreateReportGroup',
|
|
359
|
-
'codebuild:CreateReport',
|
|
360
|
-
'codebuild:UpdateReport',
|
|
361
|
-
'codebuild:BatchPutTestCases',
|
|
362
|
-
'codebuild:BatchPutCodeCoverages',
|
|
363
|
-
],
|
|
364
|
-
Effect: 'Allow',
|
|
365
|
-
Resource: {
|
|
366
|
-
'Fn::Join': [
|
|
367
|
-
'',
|
|
368
|
-
[
|
|
369
|
-
'arn:',
|
|
370
|
-
{
|
|
371
|
-
Ref: 'AWS::Partition',
|
|
372
|
-
},
|
|
373
|
-
':codebuild:',
|
|
374
|
-
{
|
|
375
|
-
Ref: 'AWS::Region',
|
|
376
|
-
},
|
|
377
|
-
':',
|
|
378
|
-
{
|
|
379
|
-
Ref: 'AWS::AccountId',
|
|
380
|
-
},
|
|
381
|
-
':report-group/',
|
|
382
|
-
{
|
|
383
|
-
Ref: 'EnvironmentVariablesD266B682',
|
|
384
|
-
},
|
|
385
|
-
'-*',
|
|
386
|
-
],
|
|
387
|
-
],
|
|
388
|
-
},
|
|
389
|
-
},
|
|
390
|
-
{
|
|
391
|
-
Action: [
|
|
392
|
-
's3:GetObject*',
|
|
393
|
-
's3:GetBucket*',
|
|
394
|
-
's3:List*',
|
|
395
|
-
],
|
|
396
|
-
Effect: 'Allow',
|
|
397
|
-
Resource: [
|
|
398
|
-
{
|
|
399
|
-
'Fn::Join': [
|
|
400
|
-
'',
|
|
401
|
-
[
|
|
402
|
-
'arn:',
|
|
403
|
-
{
|
|
404
|
-
Ref: 'AWS::Partition',
|
|
405
|
-
},
|
|
406
|
-
':s3:::',
|
|
407
|
-
{
|
|
408
|
-
Ref: 'AssetParameters3d34b07ba871989d030649c646b3096ba7c78ca531897bcdb0670774d2f9d3e4S3BucketDA91EFBC',
|
|
409
|
-
},
|
|
410
|
-
],
|
|
411
|
-
],
|
|
412
|
-
},
|
|
413
|
-
{
|
|
414
|
-
'Fn::Join': [
|
|
415
|
-
'',
|
|
416
|
-
[
|
|
417
|
-
'arn:',
|
|
418
|
-
{
|
|
419
|
-
Ref: 'AWS::Partition',
|
|
420
|
-
},
|
|
421
|
-
':s3:::',
|
|
422
|
-
{
|
|
423
|
-
Ref: 'AssetParameters3d34b07ba871989d030649c646b3096ba7c78ca531897bcdb0670774d2f9d3e4S3BucketDA91EFBC',
|
|
424
|
-
},
|
|
425
|
-
'/*',
|
|
426
|
-
],
|
|
427
|
-
],
|
|
428
|
-
},
|
|
429
|
-
],
|
|
430
|
-
},
|
|
431
|
-
{
|
|
432
|
-
Action: [
|
|
433
|
-
'secretsmanager:GetSecretValue',
|
|
434
|
-
'secretsmanager:DescribeSecret',
|
|
435
|
-
],
|
|
436
|
-
Effect: 'Allow',
|
|
437
|
-
Resource: 'arn:test:secretsmanager:region:000000000000:secret:env-var-secret-name-abc123',
|
|
438
|
-
},
|
|
439
|
-
{
|
|
440
|
-
Action: [
|
|
441
|
-
'ssm:DescribeParameters',
|
|
442
|
-
'ssm:GetParameters',
|
|
443
|
-
'ssm:GetParameter',
|
|
444
|
-
'ssm:GetParameterHistory',
|
|
445
|
-
],
|
|
446
|
-
Effect: 'Allow',
|
|
447
|
-
Resource: {
|
|
448
|
-
'Fn::Join': [
|
|
449
|
-
'',
|
|
450
|
-
[
|
|
451
|
-
'arn:',
|
|
452
|
-
{
|
|
453
|
-
Ref: 'AWS::Partition',
|
|
454
|
-
},
|
|
455
|
-
':ssm:',
|
|
456
|
-
{
|
|
457
|
-
Ref: 'AWS::Region',
|
|
458
|
-
},
|
|
459
|
-
':',
|
|
460
|
-
{
|
|
461
|
-
Ref: 'AWS::AccountId',
|
|
462
|
-
},
|
|
463
|
-
':parameter/env-var-parameter-name',
|
|
464
|
-
],
|
|
465
|
-
],
|
|
466
|
-
},
|
|
467
|
-
},
|
|
468
|
-
],
|
|
469
|
-
Version: '2012-10-17',
|
|
470
|
-
},
|
|
471
|
-
PolicyName: 'EnvironmentVariablesRoleDefaultPolicy1BCDD5D0',
|
|
472
|
-
Roles: [
|
|
473
|
-
{
|
|
474
|
-
Ref: 'EnvironmentVariablesRole93B5CD9F',
|
|
475
|
-
},
|
|
476
|
-
],
|
|
477
|
-
}));
|
|
478
|
-
});
|
|
479
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGxhYmxlLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzaGVsbGFibGUudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBNkI7QUFDN0IsdURBQXNHO0FBQ3RHLDZDQUErQjtBQUMvQixtQ0FBcUQ7QUFHckQsaUNBQWlDO0FBRWpDLElBQUksQ0FBQywrQkFBK0IsRUFBRSxHQUFHLEVBQUU7SUFDekMsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBRXhELElBQUksZUFBUyxDQUFDLEtBQUssRUFBRSxhQUFhLEVBQUU7UUFDbEMsZUFBZSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLHNCQUFzQixDQUFDO1FBQzdELFVBQVUsRUFBRSxTQUFTO1FBQ3JCLFVBQVUsRUFBRTtZQUNWLFdBQVcsRUFBRSxTQUFTO1lBQ3RCLE9BQU8sRUFBRSxLQUFLO1lBQ2QsV0FBVyxFQUFFLFNBQVM7WUFDdEIsT0FBTyxFQUFFLElBQUk7U0FDZDtLQUNGLENBQUMsQ0FBQztJQUVILE1BQU0sUUFBUSxHQUFHLElBQUEsZUFBTSxFQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUVyQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDdkgsMkVBQTJFO1FBQzNFLDBEQUEwRDtRQUMxRCx5QkFBeUI7UUFDekIseURBQXlEO1FBQ3pELGlCQUFpQjtRQUNqQiwwQkFBMEI7UUFDMUIsc0JBQXNCO1FBQ3RCLG9DQUFvQztRQUNwQyxvREFBb0Q7UUFDcEQsK0NBQStD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IHsgZXhwZWN0IGFzIGFzc2VydCwgaGF2ZVJlc291cmNlLCBSZXNvdXJjZVBhcnQsIFN5bnRoVXRpbHMgfSBmcm9tICdAbW9ub2Nkay1leHBlcmltZW50L2Fzc2VydCc7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnbW9ub2Nkayc7XG5pbXBvcnQgeyBTaGVsbGFibGUsIFNoZWxsUGxhdGZvcm0gfSBmcm9tICcuLi8uLi9saWInO1xuXG5cbi8vIHRzbGludDpkaXNhYmxlOm1heC1saW5lLWxlbmd0aFxuXG50ZXN0KCdjYW4gYXNzdW1lIGEgcmVmcmVzaGFibGUgcm9sZScsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKG5ldyBjZGsuQXBwKCksICdUZXN0U3RhY2snKTtcblxuICBuZXcgU2hlbGxhYmxlKHN0YWNrLCAnTXlTaGVsbGFibGUnLCB7XG4gICAgc2NyaXB0RGlyZWN0b3J5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnZGVsaXZsaWItdGVzdHMvbGludXgnKSxcbiAgICBlbnRyeXBvaW50OiAndGVzdC5zaCcsXG4gICAgYXNzdW1lUm9sZToge1xuICAgICAgcHJvZmlsZU5hbWU6ICdwcm9maWxlJyxcbiAgICAgIHJvbGVBcm46ICdhcm4nLFxuICAgICAgc2Vzc2lvbk5hbWU6ICdzZXNzaW9uJyxcbiAgICAgIHJlZnJlc2g6IHRydWUsXG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBhc3NlcnQoc3RhY2spLnZhbHVlO1xuXG4gIGV4cGVjdChKU09OLnBhcnNlKHRlbXBsYXRlLlJlc291cmNlcy5NeVNoZWxsYWJsZUIyRkZEMzk3LlByb3BlcnRpZXMuU291cmNlLkJ1aWxkU3BlYykucGhhc2VzLnByZV9idWlsZC5jb21tYW5kcykudG9FcXVhbChbXG4gICAgJ2VjaG8gXCJEb3dubG9hZGluZyBzY3JpcHRzIGZyb20gczM6Ly8ke1NDUklQVF9TM19CVUNLRVR9LyR7U0NSSVBUX1MzX0tFWX1cIicsXG4gICAgJ2F3cyBzMyBjcCBzMzovLyR7U0NSSVBUX1MzX0JVQ0tFVH0vJHtTQ1JJUFRfUzNfS0VZfSAvdG1wJyxcbiAgICAnbWtkaXIgLXAgL3RtcC9zY3JpcHRkaXInLFxuICAgICd1bnppcCAvdG1wLyQoYmFzZW5hbWUgJFNDUklQVF9TM19LRVkpIC1kIC90bXAvc2NyaXB0ZGlyJyxcbiAgICAnbWtkaXIgLXAgfi8uYXdzJyxcbiAgICAndG91Y2ggfi8uYXdzL2NyZWRlbnRpYWxzJyxcbiAgICAnY29uZmlnPX4vLmF3cy9jb25maWcnLFxuICAgICdlY2hvIFtwcm9maWxlIHByb2ZpbGVdPj4gJHtjb25maWd9JyxcbiAgICAnZWNobyBjcmVkZW50aWFsX3NvdXJjZSA9IEVjc0NvbnRhaW5lciA+PiAke2NvbmZpZ30nLFxuICAgICdlY2hvIHJvbGVfc2Vzc2lvbl9uYW1lID0gc2Vzc2lvbiA+PiAke2NvbmZpZ30nLFxuICAgICdlY2hvIHJvbGVfYXJuID0gYXJuID4+ICRjb25maWcnLFxuICAgICdleHBvcnQgQVdTX1BST0ZJTEU9cHJvZmlsZScsXG4gICAgJ2V4cG9ydCBBV1NfU0RLX0xPQURfQ09ORklHPTEnLFxuICBdKTtcbn0pO1xuXG50ZXN0KCdtaW5pbWFsIGNvbmZpZ3VyYXRpb24nLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjayhuZXcgY2RrLkFwcCgpLCAnVGVzdFN0YWNrJyk7XG5cbiAgbmV3IFNoZWxsYWJsZShzdGFjaywgJ015U2hlbGxhYmxlJywge1xuICAgIHNjcmlwdERpcmVjdG9yeTogcGF0aC5qb2luKF9fZGlybmFtZSwgJ2RlbGl2bGliLXRlc3RzL2xpbnV4JyksXG4gICAgZW50cnlwb2ludDogJ3Rlc3Quc2gnLFxuICB9KTtcblxuICBhc3NlcnQoc3RhY2spLnRvKGhhdmVSZXNvdXJjZSgnQVdTOjpDb2RlQnVpbGQ6OlByb2plY3QnKSk7XG59KTtcblxudGVzdCgnYXNzdW1lIHJvbGUnLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjayhuZXcgY2RrLkFwcCgpLCAnVGVzdFN0YWNrJyk7XG5cbiAgbmV3IFNoZWxsYWJsZShzdGFjaywgJ015U2hlbGxhYmxlJywge1xuICAgIHNjcmlwdERpcmVjdG9yeTogcGF0aC5qb2luKF9fZGlybmFtZSwgJ2RlbGl2bGliLXRlc3RzL2xpbnV4JyksXG4gICAgZW50cnlwb2ludDogJ3Rlc3Quc2gnLFxuICAgIGFzc3VtZVJvbGU6IHtcbiAgICAgIHJvbGVBcm46ICdhcm46YXdzOnJvbGU6dG86YXNzdW1lJyxcbiAgICAgIHNlc3Npb25OYW1lOiAnbXktc2Vzc2lvbi1uYW1lJyxcbiAgICB9LFxuICB9KTtcblxuICBjb25zdCB0ZW1wbGF0ZSA9IFN5bnRoVXRpbHMuc3ludGhlc2l6ZShzdGFjaykudGVtcGxhdGU7XG4gIGNvbnN0IGJ1aWxkU3BlYyA9IEpTT04ucGFyc2UodGVtcGxhdGUuUmVzb3VyY2VzLk15U2hlbGxhYmxlQjJGRkQzOTcuUHJvcGVydGllcy5Tb3VyY2UuQnVpbGRTcGVjKTtcblxuICBleHBlY3QoYnVpbGRTcGVjLnBoYXNlcy5wcmVfYnVpbGQuY29tbWFuZHMpXG4gICAgLnRvQ29udGFpbignQVdTX1NUU19SRUdJT05BTF9FTkRQT0lOVFM9bGVnYWN5IGF3cyBzdHMgYXNzdW1lLXJvbGUgLS1yb2xlLWFybiBcXFwiYXJuOmF3czpyb2xlOnRvOmFzc3VtZVxcXCIgLS1yb2xlLXNlc3Npb24tbmFtZSBcXFwibXktc2Vzc2lvbi1uYW1lXFxcIiAgPiAkY3JlZHMnKTtcbn0pO1xuXG50ZXN0KCdhc3N1bWUgcm9sZSB3aXRoIGV4dGVybmFsLWlkJywgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBjZGsuU3RhY2sobmV3IGNkay5BcHAoKSwgJ1Rlc3RTdGFjaycpO1xuXG4gIG5ldyBTaGVsbGFibGUoc3RhY2ssICdNeVNoZWxsYWJsZScsIHtcbiAgICBzY3JpcHREaXJlY3Rvcnk6IHBhdGguam9pbihfX2Rpcm5hbWUsICdkZWxpdmxpYi10ZXN0cy9saW51eCcpLFxuICAgIGVudHJ5cG9pbnQ6ICd0ZXN0LnNoJyxcbiAgICBhc3N1bWVSb2xlOiB7XG4gICAgICByb2xlQXJuOiAnYXJuOmF3czpyb2xlOnRvOmFzc3VtZScsXG4gICAgICBzZXNzaW9uTmFtZTogJ215LXNlc3Npb24tbmFtZScsXG4gICAgICBleHRlcm5hbElkOiAnbXktZXh0ZXJuYS1pZCcsXG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBTeW50aFV0aWxzLnN5bnRoZXNpemUoc3RhY2spLnRlbXBsYXRlO1xuICBjb25zdCBidWlsZFNwZWMgPSBKU09OLnBhcnNlKHRlbXBsYXRlLlJlc291cmNlcy5NeVNoZWxsYWJsZUIyRkZEMzk3LlByb3BlcnRpZXMuU291cmNlLkJ1aWxkU3BlYyk7XG5cbiAgZXhwZWN0KGJ1aWxkU3BlYy5waGFzZXMucHJlX2J1aWxkLmNvbW1hbmRzKVxuICAgIC50b0NvbnRhaW4oJ0FXU19TVFNfUkVHSU9OQUxfRU5EUE9JTlRTPWxlZ2FjeSBhd3Mgc3RzIGFzc3VtZS1yb2xlIC0tcm9sZS1hcm4gXFxcImFybjphd3M6cm9sZTp0bzphc3N1bWVcXFwiIC0tcm9sZS1zZXNzaW9uLW5hbWUgXFxcIm15LXNlc3Npb24tbmFtZVxcXCIgLS1leHRlcm5hbC1pZCBcXFwibXktZXh0ZXJuYS1pZFxcXCIgPiAkY3JlZHMnKTtcbn0pO1xuXG50ZXN0KCdhc3N1bWUgcm9sZSB3aXRoIHJlZ2lvbmFsIGVuZHBvaW50cycsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKG5ldyBjZGsuQXBwKCksICdUZXN0U3RhY2snKTtcblxuICBuZXcgU2hlbGxhYmxlKHN0YWNrLCAnTXlTaGVsbGFibGUnLCB7XG4gICAgc2NyaXB0RGlyZWN0b3J5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnZGVsaXZsaWItdGVzdHMvbGludXgnKSxcbiAgICBlbnRyeXBvaW50OiAndGVzdC5zaCcsXG4gICAgYXNzdW1lUm9sZToge1xuICAgICAgcm9sZUFybjogJ2Fybjphd3M6cm9sZTp0bzphc3N1bWUnLFxuICAgICAgc2Vzc2lvbk5hbWU6ICdteS1zZXNzaW9uLW5hbWUnLFxuICAgIH0sXG4gICAgdXNlUmVnaW9uYWxTdHNFbmRwb2ludHM6IHRydWUsXG4gIH0pO1xuXG4gIGNvbnN0IHRlbXBsYXRlID0gU3ludGhVdGlscy5zeW50aGVzaXplKHN0YWNrKS50ZW1wbGF0ZTtcbiAgY29uc3QgYnVpbGRTcGVjID0gSlNPTi5wYXJzZSh0ZW1wbGF0ZS5SZXNvdXJjZXMuTXlTaGVsbGFibGVCMkZGRDM5Ny5Qcm9wZXJ0aWVzLlNvdXJjZS5CdWlsZFNwZWMpO1xuXG4gIGV4cGVjdChidWlsZFNwZWMucGhhc2VzLnByZV9idWlsZC5jb21tYW5kcylcbiAgICAudG9Db250YWluKCdBV1NfU1RTX1JFR0lPTkFMX0VORFBPSU5UUz1yZWdpb25hbCBhd3Mgc3RzIGFzc3VtZS1yb2xlIC0tcm9sZS1hcm4gXFxcImFybjphd3M6cm9sZTp0bzphc3N1bWVcXFwiIC0tcm9sZS1zZXNzaW9uLW5hbWUgXFxcIm15LXNlc3Npb24tbmFtZVxcXCIgID4gJGNyZWRzJyk7XG59KTtcblxudGVzdCgnYXNzdW1lIHJvbGUgd2l0aCBnbG9iYWwgZW5kcG9pbnRzJywgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBjZGsuU3RhY2sobmV3IGNkay5BcHAoKSwgJ1Rlc3RTdGFjaycpO1xuXG4gIG5ldyBTaGVsbGFibGUoc3RhY2ssICdNeVNoZWxsYWJsZScsIHtcbiAgICBzY3JpcHREaXJlY3Rvcnk6IHBhdGguam9pbihfX2Rpcm5hbWUsICdkZWxpdmxpYi10ZXN0cy9saW51eCcpLFxuICAgIGVudHJ5cG9pbnQ6ICd0ZXN0LnNoJyxcbiAgICBhc3N1bWVSb2xlOiB7XG4gICAgICByb2xlQXJuOiAnYXJuOmF3czpyb2xlOnRvOmFzc3VtZScsXG4gICAgICBzZXNzaW9uTmFtZTogJ215LXNlc3Npb24tbmFtZScsXG4gICAgfSxcbiAgICB1c2VSZWdpb25hbFN0c0VuZHBvaW50czogZmFsc2UsXG4gIH0pO1xuXG4gIGNvbnN0IHRlbXBsYXRlID0gU3ludGhVdGlscy5zeW50aGVzaXplKHN0YWNrKS50ZW1wbGF0ZTtcbiAgY29uc3QgYnVpbGRTcGVjID0gSlNPTi5wYXJzZSh0ZW1wbGF0ZS5SZXNvdXJjZXMuTXlTaGVsbGFibGVCMkZGRDM5Ny5Qcm9wZXJ0aWVzLlNvdXJjZS5CdWlsZFNwZWMpO1xuXG4gIGV4cGVjdChidWlsZFNwZWMucGhhc2VzLnByZV9idWlsZC5jb21tYW5kcylcbiAgICAudG9Db250YWluKCdBV1NfU1RTX1JFR0lPTkFMX0VORFBPSU5UUz1sZWdhY3kgYXdzIHN0cyBhc3N1bWUtcm9sZSAtLXJvbGUtYXJuIFxcXCJhcm46YXdzOnJvbGU6dG86YXNzdW1lXFxcIiAtLXJvbGUtc2Vzc2lvbi1uYW1lIFxcXCJteS1zZXNzaW9uLW5hbWVcXFwiICA+ICRjcmVkcycpO1xufSk7XG5cbnRlc3QoJ2Fzc3VtZSByb2xlIG5vdCBzdXBwb3J0ZWQgb24gd2luZG93cycsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKG5ldyBjZGsuQXBwKCksICdUZXN0U3RhY2snKTtcblxuICBleHBlY3QoKCkgPT4gbmV3IFNoZWxsYWJsZShzdGFjaywgJ015U2hlbGxhYmxlJywge1xuICAgIHNjcmlwdERpcmVjdG9yeTogcGF0aC5qb2luKF9fZGlybmFtZSwgJ2RlbGl2bGliLXRlc3RzL2xpbnV4JyksXG4gICAgcGxhdGZvcm06IFNoZWxsUGxhdGZvcm0uV2luZG93cyxcbiAgICBlbnRyeXBvaW50OiAndGVzdC5zaCcsXG4gICAgYXNzdW1lUm9sZToge1xuICAgICAgcm9sZUFybjogJ2Fybjphd3M6cm9sZTp0bzphc3N1bWUnLFxuICAgICAgc2Vzc2lvbk5hbWU6ICdteS1zZXNzaW9uLW5hbWUnLFxuICAgIH0sXG4gIH0pKS50b1Rocm93KCdhc3N1bWVSb2xlIGlzIG5vdCBzdXBwb3J0ZWQgb24gV2luZG93cycpO1xufSk7XG5cbnRlc3QoJ2FsYXJtIG9wdGlvbnMgLSBkZWZhdWx0cycsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKG5ldyBjZGsuQXBwKCksICdUZXN0U3RhY2snKTtcblxuICBuZXcgU2hlbGxhYmxlKHN0YWNrLCAnTXlTaGVsbGFibGUnLCB7XG4gICAgc2NyaXB0RGlyZWN0b3J5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnZGVsaXZsaWItdGVzdHMvbGludXgnKSxcbiAgICBlbnRyeXBvaW50OiAndGVzdC5zaCcsXG4gIH0pO1xuXG4gIGFzc2VydChzdGFjaykudG8oaGF2ZVJlc291cmNlKCdBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtJywge1xuICAgIEV2YWx1YXRpb25QZXJpb2RzOiAxLFxuICAgIFRocmVzaG9sZDogMSxcbiAgICBQZXJpb2Q6IDMwMCxcbiAgfSkpO1xufSk7XG5cbnRlc3QoJ2FsYXJtIG9wdGlvbnMgLSBjdXN0b20nLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjayhuZXcgY2RrLkFwcCgpLCAnVGVzdFN0YWNrJyk7XG5cbiAgbmV3IFNoZWxsYWJsZShzdGFjaywgJ015U2hlbGxhYmxlJywge1xuICAgIHNjcmlwdERpcmVjdG9yeTogcGF0aC5qb2luKF9fZGlybmFtZSwgJ2RlbGl2bGliLXRlc3RzL2xpbnV4JyksXG4gICAgZW50cnlwb2ludDogJ3Rlc3Quc2gnLFxuICAgIGFsYXJtRXZhbHVhdGlvblBlcmlvZHM6IDIsXG4gICAgYWxhcm1UaHJlc2hvbGQ6IDUsXG4gICAgYWxhcm1QZXJpb2Q6IGNkay5EdXJhdGlvbi5taW51dGVzKDYwKSxcbiAgfSk7XG5cbiAgYXNzZXJ0KHN0YWNrKS50byhoYXZlUmVzb3VyY2UoJ0FXUzo6Q2xvdWRXYXRjaDo6QWxhcm0nLCB7XG4gICAgRXZhbHVhdGlvblBlcmlvZHM6IDIsXG4gICAgVGhyZXNob2xkOiA1LFxuICAgIFBlcmlvZDogMzYwMCxcbiAgfSkpO1xufSk7XG5cbnRlc3QoJ3ByaXZpbGVnZWQgbW9kZScsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKG5ldyBjZGsuQXBwKCksICdUZXN0U3RhY2snKTtcblxuICBuZXcgU2hlbGxhYmxlKHN0YWNrLCAnQWxsb3dEb2NrZXInLCB7XG4gICAgc2NyaXB0RGlyZWN0b3J5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnZGVsaXZsaWItdGVzdHMvbGludXgnKSxcbiAgICBlbnRyeXBvaW50OiAndGVzdC5zaCcsXG4gICAgcHJpdmlsZWdlZDogdHJ1ZSxcbiAgfSk7XG5cbiAgYXNzZXJ0KHN0YWNrKS50byhoYXZlUmVzb3VyY2UoJ0FXUzo6Q29kZUJ1aWxkOjpQcm9qZWN0Jywge1xuICAgIEVudmlyb25tZW50OiB7XG4gICAgICBQcml2aWxlZ2VkTW9kZTogdHJ1ZSxcbiAgICB9LFxuICB9LCBSZXNvdXJjZVBhcnQuUHJvcGVydGllcywgdHJ1ZSkpO1xufSk7XG5cbnRlc3QoJ2Vudmlyb25tZW50IHZhcmlhYmxlcycsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKG5ldyBjZGsuQXBwKCksICdUZXN0U3RhY2snKTtcblxuICBuZXcgU2hlbGxhYmxlKHN0YWNrLCAnRW52aXJvbm1lbnRWYXJpYWJsZXMnLCB7XG4gICAgc2NyaXB0RGlyZWN0b3J5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnZGVsaXZsaWItdGVzdHMvbGludXgnKSxcbiAgICBlbnRyeXBvaW50OiAndGVzdC5zaCcsXG4gICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgIEVOVl9WQVI6ICdlbnYtdmFyLXZhbHVlJyxcbiAgICAgIFVOREVGSU5FRF9WQVI6IHVuZGVmaW5lZCxcbiAgICAgIEVNUFRZX1NUUklORzogJycsXG4gICAgfSxcbiAgICBlbnZpcm9ubWVudFNlY3JldHM6IHtcbiAgICAgIEVOVl9WQVJfU0VDUkVUOiAnYXJuOnRlc3Q6c2VjcmV0c21hbmFnZXI6cmVnaW9uOjAwMDAwMDAwMDAwMDpzZWNyZXQ6ZW52LXZhci1zZWNyZXQtbmFtZS1hYmMxMjMnLFxuICAgIH0sXG4gICAgZW52aXJvbm1lbnRQYXJhbWV0ZXJzOiB7XG4gICAgICBFTlZfVkFSX1BBUkFNRVRFUjogJ2Vudi12YXItcGFyYW1ldGVyLW5hbWUnLFxuICAgIH0sXG4gIH0pO1xuXG4gIGFzc2VydChzdGFjaykudG8oaGF2ZVJlc291cmNlKCdBV1M6OkNvZGVCdWlsZDo6UHJvamVjdCcsIHtcbiAgICBFbnZpcm9ubWVudDoge1xuICAgICAgRW52aXJvbm1lbnRWYXJpYWJsZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIE5hbWU6ICdTQ1JJUFRfUzNfQlVDS0VUJyxcbiAgICAgICAgICBUeXBlOiAnUExBSU5URVhUJyxcbiAgICAgICAgICBWYWx1ZToge1xuICAgICAgICAgICAgUmVmOiAnQXNzZXRQYXJhbWV0ZXJzM2QzNGIwN2JhODcxOTg5ZDAzMDY0OWM2NDZiMzA5NmJhN2M3OGNhNTMxODk3YmNkYjA2NzA3NzRkMmY5ZDNlNFMzQnVja2V0REE5MUVGQkMnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBOYW1lOiAnU0NSSVBUX1MzX0tFWScsXG4gICAgICAgICAgVHlwZTogJ1BMQUlOVEVYVCcsXG4gICAgICAgICAgVmFsdWU6IHtcbiAgICAgICAgICAgICdGbjo6Sm9pbic6IFsnJywgW3tcbiAgICAgICAgICAgICAgJ0ZuOjpTZWxlY3QnOiBbMCwge1xuICAgICAgICAgICAgICAgICdGbjo6U3BsaXQnOiBbJ3x8Jywge1xuICAgICAgICAgICAgICAgICAgUmVmOiAnQXNzZXRQYXJhbWV0ZXJzM2QzNGIwN2JhODcxOTg5ZDAzMDY0OWM2NDZiMzA5NmJhN2M3OGNhNTMxODk3YmNkYjA2NzA3NzRkMmY5ZDNlNFMzVmVyc2lvbktleUYzRjgzRjc2JyxcbiAgICAgICAgICAgICAgICB9XSxcbiAgICAgICAgICAgICAgfV0sXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICdGbjo6U2VsZWN0JzogWzEsIHtcbiAgICAgICAgICAgICAgICAnRm46OlNwbGl0JzogWyd8fCcsIHtcbiAgICAgICAgICAgICAgICAgIFJlZjogJ0Fzc2V0UGFyYW1ldGVyczNkMzRiMDdiYTg3MTk4OWQwMzA2NDljNjQ2YjMwOTZiYTdjNzhjYTUzMTg5N2JjZGIwNjcwNzc0ZDJmOWQzZTRTM1ZlcnNpb25LZXlGM0Y4M0Y3NicsXG4gICAgICAgICAgICAgICAgfV0sXG4gICAgICAgICAgICAgIH1dLFxuICAgICAgICAgICAgfV1dLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBOYW1lOiAnRU5WX1ZBUicsXG4gICAgICAgICAgVHlwZTogJ1BMQUlOVEVYVCcsXG4gICAgICAgICAgVmFsdWU6ICdlbnYtdmFyLXZhbHVlJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIE5hbWU6ICdFTVBUWV9TVFJJTkcnLFxuICAgICAgICAgIFR5cGU6ICdQTEFJTlRFWFQnLFxuICAgICAgICAgIFZhbHVlOiAnJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIE5hbWU6ICdFTlZfVkFSX1NFQ1JFVCcsXG4gICAgICAgICAgVHlwZTogJ1NFQ1JFVFNfTUFOQUdFUicsXG4gICAgICAgICAgVmFsdWU6ICdlbnYtdmFyLXNlY3JldC1uYW1lJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIE5hbWU6ICdFTlZfVkFSX1BBUkFNRVRFUicsXG4gICAgICAgICAgVHlwZTogJ1BBUkFNRVRFUl9TVE9SRScsXG4gICAgICAgICAgVmFsdWU6ICdlbnYtdmFyLXBhcmFtZXRlci1uYW1lJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfSwgUmVzb3VyY2VQYXJ0LlByb3BlcnRpZXMsIHRydWUpKTtcblxuICBhc3NlcnQoc3RhY2spLnRvKGhhdmVSZXNvdXJjZSgnQVdTOjpJQU06OlBvbGljeScsIHtcbiAgICBQb2xpY3lEb2N1bWVudDoge1xuICAgICAgU3RhdGVtZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICBBY3Rpb246ICdzc206R2V0UGFyYW1ldGVycycsXG4gICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgIFJlc291cmNlOiB7XG4gICAgICAgICAgICAnRm46OkpvaW4nOiBbXG4gICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgJ2FybjonLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIFJlZjogJ0FXUzo6UGFydGl0aW9uJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICc6c3NtOicsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgUmVmOiAnQVdTOjpSZWdpb24nLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJzonLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIFJlZjogJ0FXUzo6QWNjb3VudElkJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICc6cGFyYW1ldGVyL2Vudi12YXItcGFyYW1ldGVyLW5hbWUnLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgQWN0aW9uOiAnc2VjcmV0c21hbmFnZXI6R2V0U2VjcmV0VmFsdWUnLFxuICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICBSZXNvdXJjZToge1xuICAgICAgICAgICAgJ0ZuOjpKb2luJzogW1xuICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICdhcm46JyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBSZWY6ICdBV1M6OlBhcnRpdGlvbicsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAnOnNlY3JldHNtYW5hZ2VyOicsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgUmVmOiAnQVdTOjpSZWdpb24nLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJzonLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIFJlZjogJ0FXUzo6QWNjb3VudElkJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICc6c2VjcmV0OmVudi12YXItc2VjcmV0LW5hbWUtPz8/Pz8/JyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIEFjdGlvbjogW1xuICAgICAgICAgICAgJ2xvZ3M6Q3JlYXRlTG9nR3JvdXAnLFxuICAgICAgICAgICAgJ2xvZ3M6Q3JlYXRlTG9nU3RyZWFtJyxcbiAgICAgICAgICAgICdsb2dzOlB1dExvZ0V2ZW50cycsXG4gICAgICAgICAgXSxcbiAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgUmVzb3VyY2U6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgJ0ZuOjpKb2luJzogW1xuICAgICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICdhcm46JyxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgUmVmOiAnQVdTOjpQYXJ0aXRpb24nLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICc6bG9nczonLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBSZWY6ICdBV1M6OlJlZ2lvbicsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgJzonLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBSZWY6ICdBV1M6OkFjY291bnRJZCcsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgJzpsb2ctZ3JvdXA6L2F3cy9jb2RlYnVpbGQvJyxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgUmVmOiAnRW52aXJvbm1lbnRWYXJpYWJsZXNEMjY2QjY4MicsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAnRm46OkpvaW4nOiBbXG4gICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgJ2FybjonLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBSZWY6ICdBV1M6OlBhcnRpdGlvbicsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgJzpsb2dzOicsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFJlZjogJ0FXUzo6UmVnaW9uJyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAnOicsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFJlZjogJ0FXUzo6QWNjb3VudElkJyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAnOmxvZy1ncm91cDovYXdzL2NvZGVidWlsZC8nLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBSZWY6ICdFbnZpcm9ubWVudFZhcmlhYmxlc0QyNjZCNjgyJyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAnOionLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBBY3Rpb246IFtcbiAgICAgICAgICAgICdjb2RlYnVpbGQ6Q3JlYXRlUmVwb3J0R3JvdXAnLFxuICAgICAgICAgICAgJ2NvZGVidWlsZDpDcmVhdGVSZXBvcnQnLFxuICAgICAgICAgICAgJ2NvZGVidWlsZDpVcGRhdGVSZXBvcnQnLFxuICAgICAgICAgICAgJ2NvZGVidWlsZDpCYXRjaFB1dFRlc3RDYXNlcycsXG4gICAgICAgICAgICAnY29kZWJ1aWxkOkJhdGNoUHV0Q29kZUNvdmVyYWdlcycsXG4gICAgICAgICAgXSxcbiAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgUmVzb3VyY2U6IHtcbiAgICAgICAgICAgICdGbjo6Sm9pbic6IFtcbiAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAnYXJuOicsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgUmVmOiAnQVdTOjpQYXJ0aXRpb24nLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJzpjb2RlYnVpbGQ6JyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBSZWY6ICdBV1M6OlJlZ2lvbicsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAnOicsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgUmVmOiAnQVdTOjpBY2NvdW50SWQnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJzpyZXBvcnQtZ3JvdXAvJyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBSZWY6ICdFbnZpcm9ubWVudFZhcmlhYmxlc0QyNjZCNjgyJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICctKicsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBBY3Rpb246IFtcbiAgICAgICAgICAgICdzMzpHZXRPYmplY3QqJyxcbiAgICAgICAgICAgICdzMzpHZXRCdWNrZXQqJyxcbiAgICAgICAgICAgICdzMzpMaXN0KicsXG4gICAgICAgICAgXSxcbiAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgUmVzb3VyY2U6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgJ0ZuOjpKb2luJzogW1xuICAgICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICdhcm46JyxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgUmVmOiAnQVdTOjpQYXJ0aXRpb24nLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICc6czM6OjonLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBSZWY6ICdBc3NldFBhcmFtZXRlcnMzZDM0YjA3YmE4NzE5ODlkMDMwNjQ5YzY0NmIzMDk2YmE3Yzc4Y2E1MzE4OTdiY2RiMDY3MDc3NGQyZjlkM2U0UzNCdWNrZXREQTkxRUZCQycsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAnRm46OkpvaW4nOiBbXG4gICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgJ2FybjonLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBSZWY6ICdBV1M6OlBhcnRpdGlvbicsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgJzpzMzo6OicsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFJlZjogJ0Fzc2V0UGFyYW1ldGVyczNkMzRiMDdiYTg3MTk4OWQwMzA2NDljNjQ2YjMwOTZiYTdjNzhjYTUzMTg5N2JjZGIwNjcwNzc0ZDJmOWQzZTRTM0J1Y2tldERBOTFFRkJDJyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAnLyonLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBBY3Rpb246IFtcbiAgICAgICAgICAgICdzZWNyZXRzbWFuYWdlcjpHZXRTZWNyZXRWYWx1ZScsXG4gICAgICAgICAgICAnc2VjcmV0c21hbmFnZXI6RGVzY3JpYmVTZWNyZXQnLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgIFJlc291cmNlOiAnYXJuOnRlc3Q6c2VjcmV0c21hbmFnZXI6cmVnaW9uOjAwMDAwMDAwMDAwMDpzZWNyZXQ6ZW52LXZhci1zZWNyZXQtbmFtZS1hYmMxMjMnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgQWN0aW9uOiBbXG4gICAgICAgICAgICAnc3NtOkRlc2NyaWJlUGFyYW1ldGVycycsXG4gICAgICAgICAgICAnc3NtOkdldFBhcmFtZXRlcnMnLFxuICAgICAgICAgICAgJ3NzbTpHZXRQYXJhbWV0ZXInLFxuICAgICAgICAgICAgJ3NzbTpHZXRQYXJhbWV0ZXJIaXN0b3J5JyxcbiAgICAgICAgICBdLFxuICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICBSZXNvdXJjZToge1xuICAgICAgICAgICAgJ0ZuOjpKb2luJzogW1xuICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICdhcm46JyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBSZWY6ICdBV1M6OlBhcnRpdGlvbicsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAnOnNzbTonLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIFJlZjogJ0FXUzo6UmVnaW9uJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICc6JyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBSZWY6ICdBV1M6OkFjY291bnRJZCcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAnOnBhcmFtZXRlci9lbnYtdmFyLXBhcmFtZXRlci1uYW1lJyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNycsXG4gICAgfSxcbiAgICBQb2xpY3lOYW1lOiAnRW52aXJvbm1lbnRWYXJpYWJsZXNSb2xlRGVmYXVsdFBvbGljeTFCQ0RENUQwJyxcbiAgICBSb2xlczogW1xuICAgICAge1xuICAgICAgICBSZWY6ICdFbnZpcm9ubWVudFZhcmlhYmxlc1JvbGU5M0I1Q0Q5RicsXG4gICAgICB9LFxuICAgIF0sXG4gIH0pKTtcbn0pO1xuIl19
|