cdk-ecr-deployment 2.3.2 → 2.4.2
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 +51 -26
- package/API.md +16 -0
- package/README.md +44 -6
- package/changelog.md +1 -6
- package/lambda/go.mod +3 -1
- package/lambda/go.sum +14 -3
- package/lambda/main.go +22 -0
- package/lambda/utils.go +37 -0
- package/lambda/utils_test.go +8 -0
- package/lib/index.d.ts +7 -1
- package/lib/index.js +21 -8
- package/package.json +1 -1
- package/releasetag.txt +1 -1
- package/version.txt +1 -1
package/.jsii
CHANGED
|
@@ -2872,7 +2872,7 @@
|
|
|
2872
2872
|
},
|
|
2873
2873
|
"name": "cdk-ecr-deployment",
|
|
2874
2874
|
"readme": {
|
|
2875
|
-
"markdown": "# cdk-ecr-deployment\n\n[](https://github.com/cdklabs/cdk-ecr-deployment/actions/workflows/release.yml)\n[](https://www.npmjs.com/package/cdk-ecr-deployment)\n[](https://pypi.org/project/cdk-ecr-deployment)\n[](https://www.npmjs.com/package/cdk-ecr-deployment)\n[](https://pypi.org/project/cdk-ecr-deployment)\n\nCDK construct to synchronize single docker image between docker registries.\n\n⚠️ Please use ^1.0.0 for cdk version 1.x.x, use ^2.0.0 for cdk version 2.x.x\n\n## Features\n\n- Copy image from ECR/external registry to (another) ECR/external registry.\n- Copy an archive tarball image from s3 to ECR/external registry.\n- Refer docker registry secret from aws secrets manager.\n\n## Examples\n\n```ts\nimport { DockerImageAsset } from 'aws-cdk-lib/aws-ecr-assets';\nimport * as ecrdeploy from 'cdk-ecr-deployment';\n\nconst image = new DockerImageAsset(this, 'CDKDockerImage', {\n directory: path.join(__dirname, 'docker'),\n});\n\n// Copy from cdk docker image asset to another ECR.\nnew ecrdeploy.ECRDeployment(this, 'DeployDockerImage1', {\n src: new ecrdeploy.DockerImageName(image.imageUri),\n dest: new ecrdeploy.DockerImageName(`${cdk.Aws.ACCOUNT_ID}.dkr.ecr.us-west-2.amazonaws.com/my-nginx:latest`),\n});\n\n// Copy from docker registry to ECR.\nnew ecrdeploy.ECRDeployment(this, 'DeployDockerImage2', {\n src: new ecrdeploy.DockerImageName('nginx:latest'),\n dest: new ecrdeploy.DockerImageName(`${cdk.Aws.ACCOUNT_ID}.dkr.ecr.us-west-2.amazonaws.com/my-nginx2:latest`),\n});\n\n// Copy from private docker registry to ECR.\n// The format of secret in aws secrets manager must be plain text! e.g. <username>:<password>\nnew ecrdeploy.ECRDeployment(this, 'DeployDockerImage3', {\n src: new ecrdeploy.DockerImageName('javacs3/nginx:latest', 'username:password'),\n // src: new ecrdeploy.DockerImageName('javacs3/nginx:latest', 'aws-secrets-manager-secret-name'),\n // src: new ecrdeploy.DockerImageName('javacs3/nginx:latest', 'arn:aws:secretsmanager:us-west-2:000000000000:secret:id'),\n dest: new ecrdeploy.DockerImageName(`${cdk.Aws.ACCOUNT_ID}.dkr.ecr.us-west-2.amazonaws.com/my-nginx3:latest`),\n}).addToPrincipalPolicy(new iam.PolicyStatement({\n effect: iam.Effect.ALLOW,\n actions: [\n 'secretsmanager:GetSecretValue',\n ],\n resources: ['*'],\n}));\n```\n\n## Sample: [test/integ.ecr-deployment.ts](./test/integ.ecr-deployment.ts)\n\n```shell\n# Run the following command to try the sample.\nNO_PREBUILT_LAMBDA=1 npx cdk deploy -a \"npx ts-node -P tsconfig.dev.json --prefer-ts-exts test/integ.ecr-deployment.ts\"\n```\n\n## [API](./API.md)\n\n## Tech Details & Contribution\n\nThe core of this project relies on [containers/image](https://github.com/containers/image) which is used by [Skopeo](https://github.com/containers/skopeo).\nPlease take a look at those projects before contribution.\n\nTo support a new docker image source(like docker tarball in s3), you need to implement [image transport interface](https://github.com/containers/image/blob/master/types/types.go). You could take a look at [docker-archive](https://github.com/containers/image/blob/ccb87a8d0f45cf28846e307eb0ec2b9d38a458c2/docker/archive/transport.go) transport for a good start.\n\nTo test the `lambda` folder, `make test`.\n"
|
|
2876
2876
|
},
|
|
2877
2877
|
"repository": {
|
|
2878
2878
|
"type": "git",
|
|
@@ -2901,7 +2901,7 @@
|
|
|
2901
2901
|
},
|
|
2902
2902
|
"locationInModule": {
|
|
2903
2903
|
"filename": "src/index.ts",
|
|
2904
|
-
"line":
|
|
2904
|
+
"line": 117
|
|
2905
2905
|
},
|
|
2906
2906
|
"parameters": [
|
|
2907
2907
|
{
|
|
@@ -2925,7 +2925,7 @@
|
|
|
2925
2925
|
"kind": "class",
|
|
2926
2926
|
"locationInModule": {
|
|
2927
2927
|
"filename": "src/index.ts",
|
|
2928
|
-
"line":
|
|
2928
|
+
"line": 116
|
|
2929
2929
|
},
|
|
2930
2930
|
"name": "DockerImageName",
|
|
2931
2931
|
"properties": [
|
|
@@ -2938,7 +2938,7 @@
|
|
|
2938
2938
|
"immutable": true,
|
|
2939
2939
|
"locationInModule": {
|
|
2940
2940
|
"filename": "src/index.ts",
|
|
2941
|
-
"line":
|
|
2941
|
+
"line": 118
|
|
2942
2942
|
},
|
|
2943
2943
|
"name": "uri",
|
|
2944
2944
|
"overrides": "cdk-ecr-deployment.IImageName",
|
|
@@ -2952,7 +2952,7 @@
|
|
|
2952
2952
|
},
|
|
2953
2953
|
"locationInModule": {
|
|
2954
2954
|
"filename": "src/index.ts",
|
|
2955
|
-
"line":
|
|
2955
|
+
"line": 117
|
|
2956
2956
|
},
|
|
2957
2957
|
"name": "creds",
|
|
2958
2958
|
"optional": true,
|
|
@@ -2977,7 +2977,7 @@
|
|
|
2977
2977
|
},
|
|
2978
2978
|
"locationInModule": {
|
|
2979
2979
|
"filename": "src/index.ts",
|
|
2980
|
-
"line":
|
|
2980
|
+
"line": 135
|
|
2981
2981
|
},
|
|
2982
2982
|
"parameters": [
|
|
2983
2983
|
{
|
|
@@ -3003,8 +3003,33 @@
|
|
|
3003
3003
|
"kind": "class",
|
|
3004
3004
|
"locationInModule": {
|
|
3005
3005
|
"filename": "src/index.ts",
|
|
3006
|
-
"line":
|
|
3006
|
+
"line": 132
|
|
3007
3007
|
},
|
|
3008
|
+
"methods": [
|
|
3009
|
+
{
|
|
3010
|
+
"docs": {
|
|
3011
|
+
"stability": "stable"
|
|
3012
|
+
},
|
|
3013
|
+
"locationInModule": {
|
|
3014
|
+
"filename": "src/index.ts",
|
|
3015
|
+
"line": 196
|
|
3016
|
+
},
|
|
3017
|
+
"name": "addToPrincipalPolicy",
|
|
3018
|
+
"parameters": [
|
|
3019
|
+
{
|
|
3020
|
+
"name": "statement",
|
|
3021
|
+
"type": {
|
|
3022
|
+
"fqn": "aws-cdk-lib.aws_iam.PolicyStatement"
|
|
3023
|
+
}
|
|
3024
|
+
}
|
|
3025
|
+
],
|
|
3026
|
+
"returns": {
|
|
3027
|
+
"type": {
|
|
3028
|
+
"fqn": "aws-cdk-lib.aws_iam.AddToPrincipalPolicyResult"
|
|
3029
|
+
}
|
|
3030
|
+
}
|
|
3031
|
+
}
|
|
3032
|
+
],
|
|
3008
3033
|
"name": "ECRDeployment",
|
|
3009
3034
|
"symbolId": "src/index:ECRDeployment"
|
|
3010
3035
|
},
|
|
@@ -3018,7 +3043,7 @@
|
|
|
3018
3043
|
"kind": "interface",
|
|
3019
3044
|
"locationInModule": {
|
|
3020
3045
|
"filename": "src/index.ts",
|
|
3021
|
-
"line":
|
|
3046
|
+
"line": 11
|
|
3022
3047
|
},
|
|
3023
3048
|
"name": "ECRDeploymentProps",
|
|
3024
3049
|
"properties": [
|
|
@@ -3031,7 +3056,7 @@
|
|
|
3031
3056
|
"immutable": true,
|
|
3032
3057
|
"locationInModule": {
|
|
3033
3058
|
"filename": "src/index.ts",
|
|
3034
|
-
"line":
|
|
3059
|
+
"line": 31
|
|
3035
3060
|
},
|
|
3036
3061
|
"name": "dest",
|
|
3037
3062
|
"type": {
|
|
@@ -3047,7 +3072,7 @@
|
|
|
3047
3072
|
"immutable": true,
|
|
3048
3073
|
"locationInModule": {
|
|
3049
3074
|
"filename": "src/index.ts",
|
|
3050
|
-
"line":
|
|
3075
|
+
"line": 26
|
|
3051
3076
|
},
|
|
3052
3077
|
"name": "src",
|
|
3053
3078
|
"type": {
|
|
@@ -3065,7 +3090,7 @@
|
|
|
3065
3090
|
"immutable": true,
|
|
3066
3091
|
"locationInModule": {
|
|
3067
3092
|
"filename": "src/index.ts",
|
|
3068
|
-
"line":
|
|
3093
|
+
"line": 22
|
|
3069
3094
|
},
|
|
3070
3095
|
"name": "buildImage",
|
|
3071
3096
|
"optional": true,
|
|
@@ -3082,7 +3107,7 @@
|
|
|
3082
3107
|
"immutable": true,
|
|
3083
3108
|
"locationInModule": {
|
|
3084
3109
|
"filename": "src/index.ts",
|
|
3085
|
-
"line":
|
|
3110
|
+
"line": 69
|
|
3086
3111
|
},
|
|
3087
3112
|
"name": "environment",
|
|
3088
3113
|
"optional": true,
|
|
@@ -3106,7 +3131,7 @@
|
|
|
3106
3131
|
"immutable": true,
|
|
3107
3132
|
"locationInModule": {
|
|
3108
3133
|
"filename": "src/index.ts",
|
|
3109
|
-
"line":
|
|
3134
|
+
"line": 42
|
|
3110
3135
|
},
|
|
3111
3136
|
"name": "memoryLimit",
|
|
3112
3137
|
"optional": true,
|
|
@@ -3124,7 +3149,7 @@
|
|
|
3124
3149
|
"immutable": true,
|
|
3125
3150
|
"locationInModule": {
|
|
3126
3151
|
"filename": "src/index.ts",
|
|
3127
|
-
"line":
|
|
3152
|
+
"line": 49
|
|
3128
3153
|
},
|
|
3129
3154
|
"name": "role",
|
|
3130
3155
|
"optional": true,
|
|
@@ -3142,7 +3167,7 @@
|
|
|
3142
3167
|
"immutable": true,
|
|
3143
3168
|
"locationInModule": {
|
|
3144
3169
|
"filename": "src/index.ts",
|
|
3145
|
-
"line":
|
|
3170
|
+
"line": 56
|
|
3146
3171
|
},
|
|
3147
3172
|
"name": "vpc",
|
|
3148
3173
|
"optional": true,
|
|
@@ -3161,7 +3186,7 @@
|
|
|
3161
3186
|
"immutable": true,
|
|
3162
3187
|
"locationInModule": {
|
|
3163
3188
|
"filename": "src/index.ts",
|
|
3164
|
-
"line":
|
|
3189
|
+
"line": 64
|
|
3165
3190
|
},
|
|
3166
3191
|
"name": "vpcSubnets",
|
|
3167
3192
|
"optional": true,
|
|
@@ -3181,7 +3206,7 @@
|
|
|
3181
3206
|
"kind": "interface",
|
|
3182
3207
|
"locationInModule": {
|
|
3183
3208
|
"filename": "src/index.ts",
|
|
3184
|
-
"line":
|
|
3209
|
+
"line": 72
|
|
3185
3210
|
},
|
|
3186
3211
|
"name": "IImageName",
|
|
3187
3212
|
"properties": [
|
|
@@ -3195,7 +3220,7 @@
|
|
|
3195
3220
|
"immutable": true,
|
|
3196
3221
|
"locationInModule": {
|
|
3197
3222
|
"filename": "src/index.ts",
|
|
3198
|
-
"line":
|
|
3223
|
+
"line": 78
|
|
3199
3224
|
},
|
|
3200
3225
|
"name": "uri",
|
|
3201
3226
|
"type": {
|
|
@@ -3205,13 +3230,13 @@
|
|
|
3205
3230
|
{
|
|
3206
3231
|
"abstract": true,
|
|
3207
3232
|
"docs": {
|
|
3208
|
-
"remarks": "Format `user:
|
|
3233
|
+
"remarks": "Format `user:password` or `AWS Secrets Manager secret arn` or `AWS Secrets Manager secret name`",
|
|
3209
3234
|
"stability": "stable",
|
|
3210
3235
|
"summary": "The credentials of the docker image."
|
|
3211
3236
|
},
|
|
3212
3237
|
"locationInModule": {
|
|
3213
3238
|
"filename": "src/index.ts",
|
|
3214
|
-
"line":
|
|
3239
|
+
"line": 83
|
|
3215
3240
|
},
|
|
3216
3241
|
"name": "creds",
|
|
3217
3242
|
"optional": true,
|
|
@@ -3234,7 +3259,7 @@
|
|
|
3234
3259
|
},
|
|
3235
3260
|
"locationInModule": {
|
|
3236
3261
|
"filename": "src/index.ts",
|
|
3237
|
-
"line":
|
|
3262
|
+
"line": 123
|
|
3238
3263
|
},
|
|
3239
3264
|
"parameters": [
|
|
3240
3265
|
{
|
|
@@ -3265,7 +3290,7 @@
|
|
|
3265
3290
|
"kind": "class",
|
|
3266
3291
|
"locationInModule": {
|
|
3267
3292
|
"filename": "src/index.ts",
|
|
3268
|
-
"line":
|
|
3293
|
+
"line": 121
|
|
3269
3294
|
},
|
|
3270
3295
|
"name": "S3ArchiveName",
|
|
3271
3296
|
"properties": [
|
|
@@ -3278,7 +3303,7 @@
|
|
|
3278
3303
|
"immutable": true,
|
|
3279
3304
|
"locationInModule": {
|
|
3280
3305
|
"filename": "src/index.ts",
|
|
3281
|
-
"line":
|
|
3306
|
+
"line": 129
|
|
3282
3307
|
},
|
|
3283
3308
|
"name": "uri",
|
|
3284
3309
|
"overrides": "cdk-ecr-deployment.IImageName",
|
|
@@ -3292,7 +3317,7 @@
|
|
|
3292
3317
|
},
|
|
3293
3318
|
"locationInModule": {
|
|
3294
3319
|
"filename": "src/index.ts",
|
|
3295
|
-
"line":
|
|
3320
|
+
"line": 123
|
|
3296
3321
|
},
|
|
3297
3322
|
"name": "creds",
|
|
3298
3323
|
"optional": true,
|
|
@@ -3305,6 +3330,6 @@
|
|
|
3305
3330
|
"symbolId": "src/index:S3ArchiveName"
|
|
3306
3331
|
}
|
|
3307
3332
|
},
|
|
3308
|
-
"version": "2.
|
|
3309
|
-
"fingerprint": "
|
|
3333
|
+
"version": "2.4.2",
|
|
3334
|
+
"fingerprint": "JbAV+dwvdoXnK0ddB+JJQL7h72yTWK2wuF26de7at4M="
|
|
3310
3335
|
}
|
package/API.md
CHANGED
|
@@ -83,6 +83,22 @@ new ECRDeployment(scope: Construct, id: string, props: ECRDeploymentProps)
|
|
|
83
83
|
* **vpcSubnets** (<code>[aws_ec2.SubnetSelection](#aws-cdk-lib-aws-ec2-subnetselection)</code>) Where in the VPC to place the deployment lambda handler. __*Default*__: the Vpc default strategy if not specified
|
|
84
84
|
|
|
85
85
|
|
|
86
|
+
### Methods
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
#### addToPrincipalPolicy(statement) <a id="cdk-ecr-deployment-ecrdeployment-addtoprincipalpolicy"></a>
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
```ts
|
|
94
|
+
addToPrincipalPolicy(statement: PolicyStatement): AddToPrincipalPolicyResult
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
* **statement** (<code>[aws_iam.PolicyStatement](#aws-cdk-lib-aws-iam-policystatement)</code>) *No description*
|
|
98
|
+
|
|
99
|
+
__Returns__:
|
|
100
|
+
* <code>[aws_iam.AddToPrincipalPolicyResult](#aws-cdk-lib-aws-iam-addtoprincipalpolicyresult)</code>
|
|
101
|
+
|
|
86
102
|
|
|
87
103
|
|
|
88
104
|
## class S3ArchiveName <a id="cdk-ecr-deployment-s3archivename"></a>
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# cdk-ecr-deployment
|
|
2
2
|
|
|
3
|
-
[](https://github.com/cdklabs/cdk-ecr-deployment/actions/workflows/release.yml)
|
|
4
4
|
[](https://www.npmjs.com/package/cdk-ecr-deployment)
|
|
5
5
|
[](https://pypi.org/project/cdk-ecr-deployment)
|
|
6
6
|
[](https://www.npmjs.com/package/cdk-ecr-deployment)
|
|
@@ -12,19 +12,57 @@ CDK construct to synchronize single docker image between docker registries.
|
|
|
12
12
|
|
|
13
13
|
## Features
|
|
14
14
|
|
|
15
|
-
- Copy image from ECR/external registry to (another) ECR/external registry
|
|
16
|
-
- Copy an archive tarball image from s3 to ECR/external registry
|
|
17
|
-
|
|
18
|
-
⚠️ Currently construct can authenticate to external registry only with basic auth, but credentials are put as plain text to template and logs. See issue [#171](https://github.com/cdklabs/cdk-ecr-deployment/issues/171).
|
|
15
|
+
- Copy image from ECR/external registry to (another) ECR/external registry.
|
|
16
|
+
- Copy an archive tarball image from s3 to ECR/external registry.
|
|
17
|
+
- Refer docker registry secret from aws secrets manager.
|
|
19
18
|
|
|
20
19
|
## Examples
|
|
21
20
|
|
|
22
|
-
|
|
21
|
+
```ts
|
|
22
|
+
import { DockerImageAsset } from 'aws-cdk-lib/aws-ecr-assets';
|
|
23
|
+
import * as ecrdeploy from 'cdk-ecr-deployment';
|
|
24
|
+
|
|
25
|
+
const image = new DockerImageAsset(this, 'CDKDockerImage', {
|
|
26
|
+
directory: path.join(__dirname, 'docker'),
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
// Copy from cdk docker image asset to another ECR.
|
|
30
|
+
new ecrdeploy.ECRDeployment(this, 'DeployDockerImage1', {
|
|
31
|
+
src: new ecrdeploy.DockerImageName(image.imageUri),
|
|
32
|
+
dest: new ecrdeploy.DockerImageName(`${cdk.Aws.ACCOUNT_ID}.dkr.ecr.us-west-2.amazonaws.com/my-nginx:latest`),
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
// Copy from docker registry to ECR.
|
|
36
|
+
new ecrdeploy.ECRDeployment(this, 'DeployDockerImage2', {
|
|
37
|
+
src: new ecrdeploy.DockerImageName('nginx:latest'),
|
|
38
|
+
dest: new ecrdeploy.DockerImageName(`${cdk.Aws.ACCOUNT_ID}.dkr.ecr.us-west-2.amazonaws.com/my-nginx2:latest`),
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
// Copy from private docker registry to ECR.
|
|
42
|
+
// The format of secret in aws secrets manager must be plain text! e.g. <username>:<password>
|
|
43
|
+
new ecrdeploy.ECRDeployment(this, 'DeployDockerImage3', {
|
|
44
|
+
src: new ecrdeploy.DockerImageName('javacs3/nginx:latest', 'username:password'),
|
|
45
|
+
// src: new ecrdeploy.DockerImageName('javacs3/nginx:latest', 'aws-secrets-manager-secret-name'),
|
|
46
|
+
// src: new ecrdeploy.DockerImageName('javacs3/nginx:latest', 'arn:aws:secretsmanager:us-west-2:000000000000:secret:id'),
|
|
47
|
+
dest: new ecrdeploy.DockerImageName(`${cdk.Aws.ACCOUNT_ID}.dkr.ecr.us-west-2.amazonaws.com/my-nginx3:latest`),
|
|
48
|
+
}).addToPrincipalPolicy(new iam.PolicyStatement({
|
|
49
|
+
effect: iam.Effect.ALLOW,
|
|
50
|
+
actions: [
|
|
51
|
+
'secretsmanager:GetSecretValue',
|
|
52
|
+
],
|
|
53
|
+
resources: ['*'],
|
|
54
|
+
}));
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Sample: [test/integ.ecr-deployment.ts](./test/integ.ecr-deployment.ts)
|
|
23
58
|
|
|
24
59
|
```shell
|
|
60
|
+
# Run the following command to try the sample.
|
|
25
61
|
NO_PREBUILT_LAMBDA=1 npx cdk deploy -a "npx ts-node -P tsconfig.dev.json --prefer-ts-exts test/integ.ecr-deployment.ts"
|
|
26
62
|
```
|
|
27
63
|
|
|
64
|
+
## [API](./API.md)
|
|
65
|
+
|
|
28
66
|
## Tech Details & Contribution
|
|
29
67
|
|
|
30
68
|
The core of this project relies on [containers/image](https://github.com/containers/image) which is used by [Skopeo](https://github.com/containers/skopeo).
|
package/changelog.md
CHANGED
|
@@ -1,7 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
### [2.
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
### Bug Fixes
|
|
6
|
-
|
|
7
|
-
* update github.com/containerd/containerd to 1.5.9 ([346a651](https://github.com/cdklabs/cdk-ecr-deployment/commit/346a6516e5c294bbb133f3dfb3ef5d96bf8da087))
|
|
2
|
+
### [2.4.2](https://github.com/cdklabs/cdk-ecr-deployment/compare/v2.4.1...v2.4.2) (2022-03-20)
|
package/lambda/go.mod
CHANGED
|
@@ -7,10 +7,12 @@ require (
|
|
|
7
7
|
github.com/Microsoft/go-winio v0.5.1 // indirect
|
|
8
8
|
github.com/Microsoft/hcsshim v0.9.2 // indirect
|
|
9
9
|
github.com/aws/aws-lambda-go v1.23.0
|
|
10
|
-
github.com/aws/aws-sdk-go-v2 v1.
|
|
10
|
+
github.com/aws/aws-sdk-go-v2 v1.14.0
|
|
11
11
|
github.com/aws/aws-sdk-go-v2/config v1.1.6
|
|
12
|
+
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.6 // indirect
|
|
12
13
|
github.com/aws/aws-sdk-go-v2/service/ecr v1.2.2
|
|
13
14
|
github.com/aws/aws-sdk-go-v2/service/s3 v1.5.0
|
|
15
|
+
github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.14.0
|
|
14
16
|
github.com/cespare/xxhash/v2 v2.1.2 // indirect
|
|
15
17
|
github.com/containerd/cgroups v1.0.3 // indirect
|
|
16
18
|
github.com/containerd/containerd v1.5.10 // indirect
|
package/lambda/go.sum
CHANGED
|
@@ -101,14 +101,21 @@ github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:l
|
|
|
101
101
|
github.com/aws/aws-lambda-go v1.23.0 h1:Vjwow5COkFJp7GePkk9kjAo/DyX36b7wVPKwseQZbRo=
|
|
102
102
|
github.com/aws/aws-lambda-go v1.23.0/go.mod h1:jJmlefzPfGnckuHdXX7/80O3BvUUi12XOkbv4w9SGLU=
|
|
103
103
|
github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0=
|
|
104
|
-
github.com/aws/aws-sdk-go-v2 v1.3.2 h1:RQj8l98yKUm0UV2Wd3w/Ms+TXV9Rs1E6Kr5tRRMfyU4=
|
|
105
104
|
github.com/aws/aws-sdk-go-v2 v1.3.2/go.mod h1:7OaACgj2SX3XGWnrIjGlJM22h6yD6MEWKvm7levnnM8=
|
|
105
|
+
github.com/aws/aws-sdk-go-v2 v1.14.0 h1:IzSYBJHu0ZdUi27kIW6xVrs0eSxI4AzwbenzfXhhVs4=
|
|
106
|
+
github.com/aws/aws-sdk-go-v2 v1.14.0/go.mod h1:ZA3Y8V0LrlWj63MQAnRHgKf/5QB//LSZCPNWlWrNGLU=
|
|
106
107
|
github.com/aws/aws-sdk-go-v2/config v1.1.6 h1:tg8KyxrxDt1CrYmZXWs9lc6IFE1yxtk9kn6eS/v2fdA=
|
|
107
108
|
github.com/aws/aws-sdk-go-v2/config v1.1.6/go.mod h1:Kx90DDOgkMpRfSkzGbF13AVXHHfBNct1liO+95KxXsU=
|
|
108
109
|
github.com/aws/aws-sdk-go-v2/credentials v1.1.6 h1:efaeh6FsO/jzyJ+U4ZxduKC6rRJDrUpu+Z0k5+guqHo=
|
|
109
110
|
github.com/aws/aws-sdk-go-v2/credentials v1.1.6/go.mod h1:q1wQ5jHdFNhc4wnNcOEpnovs4keJA5Ds+qESCnfEsgU=
|
|
110
111
|
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.6 h1:zoOz5V56jO/rGixsCDnrQtAzYRYM2hGA/43U6jVMFbo=
|
|
111
112
|
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.6/go.mod h1:0+fWMitrmIpENiY8/1DyhdYPUCAPvd9UNz9mtCsEoLQ=
|
|
113
|
+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.5 h1:+phazLmKkjBYhFTsGYH9J7jgnA8+Aer2yE4QeS4zn6A=
|
|
114
|
+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.5/go.mod h1:2hXc8ooJqF2nAznsbJQIn+7h851/bu8GVC80OVTTqf8=
|
|
115
|
+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.3.0 h1:PO+HNeJBeRK0yVD9CQZ+VUrYfd5sXqS7YdPYHHcDkR4=
|
|
116
|
+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.3.0/go.mod h1:miRSv9l093jX/t/j+mBCaLqFHo9xKYzJ7DGm1BsGoJM=
|
|
117
|
+
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.6 h1:c8s9EhIPVFMFS+R1+rtEghGrf7v83gSUWbcCYX/OPes=
|
|
118
|
+
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.6/go.mod h1:o1ippSg3yJx5EuT4AOGXJCUcmt5vrcxla1cg6K1Q8Iw=
|
|
112
119
|
github.com/aws/aws-sdk-go-v2/service/ecr v1.2.2 h1:2EY0F1skAOArBsRM6nD9kPo0sdK32IPzT8O7PKocVR8=
|
|
113
120
|
github.com/aws/aws-sdk-go-v2/service/ecr v1.2.2/go.mod h1:XnQfi4PwRBjy+CQD7zqVRRHKWe529+1nTsrWXvsSSJk=
|
|
114
121
|
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.0.4 h1:8yeByqOL6UWBsOOXsHnW93/ukwL66O008tRfxXxnTwA=
|
|
@@ -119,12 +126,15 @@ github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.2.2 h1:aU8H58DoYxNo8R1
|
|
|
119
126
|
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.2.2/go.mod h1:nnutjMLuna0s3GVY/MAkpLX03thyNER06gXvnMAPj5g=
|
|
120
127
|
github.com/aws/aws-sdk-go-v2/service/s3 v1.5.0 h1:VbwXUI3L0hyhVmrFxbDxrs6cBX8TNFX0YxCpooMNjvY=
|
|
121
128
|
github.com/aws/aws-sdk-go-v2/service/s3 v1.5.0/go.mod h1:uwA7gs93Qcss43astPUb1eq4RyceNmYWAQjZFDOAMLo=
|
|
129
|
+
github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.14.0 h1:+k48odl+WiAr+oBzrdQkLzMgttZ5aX8G8vWZYYGgPYU=
|
|
130
|
+
github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.14.0/go.mod h1:h0nVkGJVtorNw3RV5QnwaERSjUWuE3g/gESooXT4qzA=
|
|
122
131
|
github.com/aws/aws-sdk-go-v2/service/sso v1.1.5 h1:B7ec5wE4+3Ldkurmq0C4gfQFtElGTG+/iTpi/YPMzi4=
|
|
123
132
|
github.com/aws/aws-sdk-go-v2/service/sso v1.1.5/go.mod h1:bpGz0tidC4y39sZkQSkpO/J0tzWCMXHbw6FZ0j1GkWM=
|
|
124
133
|
github.com/aws/aws-sdk-go-v2/service/sts v1.3.0 h1:4o69U9waE25xhRbsnXa4jjQac03BFJcNfcZkSedk3e4=
|
|
125
134
|
github.com/aws/aws-sdk-go-v2/service/sts v1.3.0/go.mod h1:ssRzzJ2RZOVuKj2Vx1YE7ypfil/BIlgmQnCSW4DistU=
|
|
126
|
-
github.com/aws/smithy-go v1.3.1 h1:xJFO4pK0y9J8fCl34uGsSJX5KNnGbdARDlA5BPhXnwE=
|
|
127
135
|
github.com/aws/smithy-go v1.3.1/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E=
|
|
136
|
+
github.com/aws/smithy-go v1.11.0 h1:nOfSDwiiH232f90OuevPnAEQO5ZqH+xnn8uGVsvBCw4=
|
|
137
|
+
github.com/aws/smithy-go v1.11.0/go.mod h1:3xHYmszWVx2c0kIwQeEVf9uSm4fYZt67FBJnwub1bgM=
|
|
128
138
|
github.com/beorn7/perks v0.0.0-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
|
129
139
|
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
|
130
140
|
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
|
|
@@ -440,8 +450,9 @@ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
|
|
|
440
450
|
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
|
441
451
|
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
|
442
452
|
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
|
443
|
-
github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
|
|
444
453
|
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
|
454
|
+
github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o=
|
|
455
|
+
github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
|
|
445
456
|
github.com/google/go-containerregistry v0.5.1/go.mod h1:Ct15B4yir3PLOP5jsy0GNeYVaIZs/MK/Jz5any1wFW0=
|
|
446
457
|
github.com/google/go-intervals v0.0.2 h1:FGrVEiUnTRKR8yE04qzXYaJMtnIYqobR5QbblK3ixcM=
|
|
447
458
|
github.com/google/go-intervals v0.0.2/go.mod h1:MkaR3LNRfeKLPmqgJYs4E66z5InYjmCjbbr4TQlcT6Y=
|
package/lambda/main.go
CHANGED
|
@@ -62,6 +62,15 @@ func handler(ctx context.Context, event cfn.Event) (physicalResourceID string, d
|
|
|
62
62
|
return physicalResourceID, data, err
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
+
srcCreds, err = parseCreds(srcCreds)
|
|
66
|
+
if err != nil {
|
|
67
|
+
return physicalResourceID, data, err
|
|
68
|
+
}
|
|
69
|
+
destCreds, err = parseCreds(destCreds)
|
|
70
|
+
if err != nil {
|
|
71
|
+
return physicalResourceID, data, err
|
|
72
|
+
}
|
|
73
|
+
|
|
65
74
|
log.Printf("SrcImage: %v DestImage: %v", srcImage, destImage)
|
|
66
75
|
|
|
67
76
|
srcRef, err := alltransports.ParseImageName(srcImage)
|
|
@@ -144,3 +153,16 @@ func getStrPropsDefault(m map[string]interface{}, k string, d string) (string, e
|
|
|
144
153
|
}
|
|
145
154
|
return "", fmt.Errorf("can't get %v", k)
|
|
146
155
|
}
|
|
156
|
+
|
|
157
|
+
func parseCreds(creds string) (string, error) {
|
|
158
|
+
credsType := GetCredsType(creds)
|
|
159
|
+
if creds == "" {
|
|
160
|
+
return "", nil
|
|
161
|
+
} else if (credsType == SECRET_ARN) || (credsType == SECRET_NAME) {
|
|
162
|
+
secret, err := GetSecret(creds)
|
|
163
|
+
return secret, err
|
|
164
|
+
} else if credsType == SECRET_TEXT {
|
|
165
|
+
return creds, nil
|
|
166
|
+
}
|
|
167
|
+
return "", fmt.Errorf("unkown creds type")
|
|
168
|
+
}
|
package/lambda/utils.go
CHANGED
|
@@ -13,8 +13,10 @@ import (
|
|
|
13
13
|
"strings"
|
|
14
14
|
"time"
|
|
15
15
|
|
|
16
|
+
"github.com/aws/aws-sdk-go-v2/aws"
|
|
16
17
|
"github.com/aws/aws-sdk-go-v2/config"
|
|
17
18
|
"github.com/aws/aws-sdk-go-v2/service/ecr"
|
|
19
|
+
"github.com/aws/aws-sdk-go-v2/service/secretsmanager"
|
|
18
20
|
"github.com/containers/image/v5/types"
|
|
19
21
|
)
|
|
20
22
|
|
|
@@ -147,3 +149,38 @@ func Dumps(v interface{}) string {
|
|
|
147
149
|
}
|
|
148
150
|
return string(bytes)
|
|
149
151
|
}
|
|
152
|
+
|
|
153
|
+
const (
|
|
154
|
+
SECRET_ARN = "SECRET_ARN"
|
|
155
|
+
SECRET_NAME = "SECRET_NAME"
|
|
156
|
+
SECRET_TEXT = "SECRET_TEXT"
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
func GetCredsType(s string) string {
|
|
160
|
+
if strings.HasPrefix(s, "arn:aws") {
|
|
161
|
+
return SECRET_ARN
|
|
162
|
+
} else if strings.Contains(s, ":") {
|
|
163
|
+
return SECRET_TEXT
|
|
164
|
+
} else {
|
|
165
|
+
return SECRET_NAME
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
func GetSecret(secretId string) (secret string, err error) {
|
|
170
|
+
cfg, err := config.LoadDefaultConfig(
|
|
171
|
+
context.TODO(),
|
|
172
|
+
)
|
|
173
|
+
log.Printf("get secret id: %s of region: %s", secretId, cfg.Region)
|
|
174
|
+
if err != nil {
|
|
175
|
+
return "", fmt.Errorf("api client configuration error: %v", err.Error())
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
client := secretsmanager.NewFromConfig(cfg)
|
|
179
|
+
resp, err := client.GetSecretValue(context.TODO(), &secretsmanager.GetSecretValueInput{
|
|
180
|
+
SecretId: aws.String(secretId),
|
|
181
|
+
})
|
|
182
|
+
if err != nil {
|
|
183
|
+
return "", fmt.Errorf("fetch secret value error: %v", err.Error())
|
|
184
|
+
}
|
|
185
|
+
return *resp.SecretString, nil
|
|
186
|
+
}
|
package/lambda/utils_test.go
CHANGED
|
@@ -23,3 +23,11 @@ func TestGetECRRegion(t *testing.T) {
|
|
|
23
23
|
GetECRRegion("docker://1234567890.dkr.ecr.cn-north-1.amazonaws.com/test:ubuntu"),
|
|
24
24
|
)
|
|
25
25
|
}
|
|
26
|
+
|
|
27
|
+
func TestGetCredsType(t *testing.T) {
|
|
28
|
+
assert.Equal(t, SECRET_ARN, GetCredsType("arn:aws:secretsmanager:us-west-2:00000:secret:fake-secret"))
|
|
29
|
+
assert.Equal(t, SECRET_ARN, GetCredsType("arn:aws-cn:secretsmanager:cn-north-1:00000:secret:fake-secret"))
|
|
30
|
+
assert.Equal(t, SECRET_NAME, GetCredsType("fake-secret"))
|
|
31
|
+
assert.Equal(t, SECRET_TEXT, GetCredsType("username:password"))
|
|
32
|
+
assert.Equal(t, SECRET_NAME, GetCredsType(""))
|
|
33
|
+
}
|
package/lib/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { aws_ec2 as ec2, aws_iam as iam } from 'aws-cdk-lib';
|
|
2
|
+
import { PolicyStatement, AddToPrincipalPolicyResult } from 'aws-cdk-lib/aws-iam';
|
|
2
3
|
import { Construct } from 'constructs';
|
|
3
4
|
/**
|
|
4
5
|
* @stability stable
|
|
@@ -84,7 +85,7 @@ export interface IImageName {
|
|
|
84
85
|
/**
|
|
85
86
|
* The credentials of the docker image.
|
|
86
87
|
*
|
|
87
|
-
* Format `user:
|
|
88
|
+
* Format `user:password` or `AWS Secrets Manager secret arn` or `AWS Secrets Manager secret name`
|
|
88
89
|
*
|
|
89
90
|
* @stability stable
|
|
90
91
|
*/
|
|
@@ -132,9 +133,14 @@ export declare class S3ArchiveName implements IImageName {
|
|
|
132
133
|
* @stability stable
|
|
133
134
|
*/
|
|
134
135
|
export declare class ECRDeployment extends Construct {
|
|
136
|
+
private handler;
|
|
135
137
|
/**
|
|
136
138
|
* @stability stable
|
|
137
139
|
*/
|
|
138
140
|
constructor(scope: Construct, id: string, props: ECRDeploymentProps);
|
|
141
|
+
/**
|
|
142
|
+
* @stability stable
|
|
143
|
+
*/
|
|
144
|
+
addToPrincipalPolicy(statement: PolicyStatement): AddToPrincipalPolicyResult;
|
|
139
145
|
private renderSingletonUuid;
|
|
140
146
|
}
|
package/lib/index.js
CHANGED
|
@@ -9,9 +9,12 @@ const child_process = require("child_process");
|
|
|
9
9
|
const path = require("path");
|
|
10
10
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
11
11
|
const constructs_1 = require("constructs");
|
|
12
|
+
const TRUTHY = ['true', true, 1, '1'];
|
|
12
13
|
function getCode(buildImage) {
|
|
13
14
|
const { CI, NO_PREBUILT_LAMBDA } = process.env;
|
|
14
|
-
|
|
15
|
+
const isCI = CI && TRUTHY.includes(CI);
|
|
16
|
+
const isNoPrebuilt = NO_PREBUILT_LAMBDA && TRUTHY.includes(NO_PREBUILT_LAMBDA);
|
|
17
|
+
if (!(isCI || isNoPrebuilt)) {
|
|
15
18
|
try {
|
|
16
19
|
console.log('Try to get prebuilt lambda');
|
|
17
20
|
const installScript = path.join(__dirname, '../lambda/install.js');
|
|
@@ -52,7 +55,7 @@ class DockerImageName {
|
|
|
52
55
|
}
|
|
53
56
|
exports.DockerImageName = DockerImageName;
|
|
54
57
|
_a = JSII_RTTI_SYMBOL_1;
|
|
55
|
-
DockerImageName[_a] = { fqn: "cdk-ecr-deployment.DockerImageName", version: "2.
|
|
58
|
+
DockerImageName[_a] = { fqn: "cdk-ecr-deployment.DockerImageName", version: "2.4.2" };
|
|
56
59
|
/**
|
|
57
60
|
* @stability stable
|
|
58
61
|
*/
|
|
@@ -78,7 +81,7 @@ class S3ArchiveName {
|
|
|
78
81
|
}
|
|
79
82
|
exports.S3ArchiveName = S3ArchiveName;
|
|
80
83
|
_b = JSII_RTTI_SYMBOL_1;
|
|
81
|
-
S3ArchiveName[_b] = { fqn: "cdk-ecr-deployment.S3ArchiveName", version: "2.
|
|
84
|
+
S3ArchiveName[_b] = { fqn: "cdk-ecr-deployment.S3ArchiveName", version: "2.4.2" };
|
|
82
85
|
/**
|
|
83
86
|
* @stability stable
|
|
84
87
|
*/
|
|
@@ -90,7 +93,7 @@ class ECRDeployment extends constructs_1.Construct {
|
|
|
90
93
|
var _d, _e;
|
|
91
94
|
super(scope, id);
|
|
92
95
|
const memoryLimit = (_d = props.memoryLimit) !== null && _d !== void 0 ? _d : 512;
|
|
93
|
-
|
|
96
|
+
this.handler = new aws_cdk_lib_1.aws_lambda.SingletonFunction(this, 'CustomResourceHandler', {
|
|
94
97
|
uuid: this.renderSingletonUuid(memoryLimit),
|
|
95
98
|
code: getCode((_e = props.buildImage) !== null && _e !== void 0 ? _e : 'public.ecr.aws/sam/build-go1.x:latest'),
|
|
96
99
|
runtime: aws_cdk_lib_1.aws_lambda.Runtime.GO_1_X,
|
|
@@ -103,7 +106,7 @@ class ECRDeployment extends constructs_1.Construct {
|
|
|
103
106
|
vpc: props.vpc,
|
|
104
107
|
vpcSubnets: props.vpcSubnets,
|
|
105
108
|
});
|
|
106
|
-
const handlerRole = handler.role;
|
|
109
|
+
const handlerRole = this.handler.role;
|
|
107
110
|
if (!handlerRole) {
|
|
108
111
|
throw new Error('lambda.SingletonFunction should have created a Role');
|
|
109
112
|
}
|
|
@@ -135,7 +138,7 @@ class ECRDeployment extends constructs_1.Construct {
|
|
|
135
138
|
resources: ['*'],
|
|
136
139
|
}));
|
|
137
140
|
new aws_cdk_lib_1.CustomResource(this, 'CustomResource', {
|
|
138
|
-
serviceToken: handler.functionArn,
|
|
141
|
+
serviceToken: this.handler.functionArn,
|
|
139
142
|
resourceType: 'Custom::CDKBucketDeployment',
|
|
140
143
|
properties: {
|
|
141
144
|
SrcImage: props.src.uri,
|
|
@@ -145,6 +148,16 @@ class ECRDeployment extends constructs_1.Construct {
|
|
|
145
148
|
},
|
|
146
149
|
});
|
|
147
150
|
}
|
|
151
|
+
/**
|
|
152
|
+
* @stability stable
|
|
153
|
+
*/
|
|
154
|
+
addToPrincipalPolicy(statement) {
|
|
155
|
+
const handlerRole = this.handler.role;
|
|
156
|
+
if (!handlerRole) {
|
|
157
|
+
throw new Error('lambda.SingletonFunction should have created a Role');
|
|
158
|
+
}
|
|
159
|
+
return handlerRole.addToPrincipalPolicy(statement);
|
|
160
|
+
}
|
|
148
161
|
renderSingletonUuid(memoryLimit) {
|
|
149
162
|
let uuid = 'bd07c930-edb9-4112-a20f-03f096f53666';
|
|
150
163
|
// if user specify a custom memory limit, define another singleton handler
|
|
@@ -161,5 +174,5 @@ class ECRDeployment extends constructs_1.Construct {
|
|
|
161
174
|
}
|
|
162
175
|
exports.ECRDeployment = ECRDeployment;
|
|
163
176
|
_c = JSII_RTTI_SYMBOL_1;
|
|
164
|
-
ECRDeployment[_c] = { fqn: "cdk-ecr-deployment.ECRDeployment", version: "2.
|
|
165
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxRUFBcUU7QUFDckUsc0NBQXNDO0FBR3RDLCtDQUErQztBQUMvQyw2QkFBNkI7QUFDN0IsNkNBQW9IO0FBQ3BILDJDQUF1QztBQW9DdkMsU0FBUyxPQUFPLENBQUMsVUFBa0I7SUFDakMsTUFBTSxFQUFFLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7SUFDL0MsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEVBQUU7UUFDL0gsSUFBSTtZQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUMsQ0FBQztZQUUxQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1lBQ25FLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQzNELGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxJQUFJLGFBQWEsSUFBSSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1lBRTVFLE9BQU8sd0JBQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQzVDO1FBQUMsT0FBTyxHQUFHLEVBQUU7WUFDWixPQUFPLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1NBQ3JEO0tBQ0Y7SUFF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QyxJQUFJLHFCQUFHLENBQUMsZUFBZSxDQUFDO1lBQ3ZELE1BQU0sRUFBRSxxQkFBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLO1lBQ3hCLE9BQU8sRUFBRTtnQkFDUCxjQUFjO2FBQ2Y7WUFDRCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUM7U0FDakIsQ0FBQyxDQUFDLENBQUM7UUFFSixJQUFJLDRCQUFjLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBQ3pDLFlBQVksRUFBRSxPQUFPLENBQUMsV0FBVztZQUNqQyxZQUFZLEVBQUUsNkJBQTZCO1lBQzNDLFVBQVUsRUFBRTtnQkFDVixRQUFRLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHO2dCQUN2QixRQUFRLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLO2dCQUN6QixTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHO2dCQUN6QixTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLO2FBQzVCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLG1CQUFtQixDQUFDLFdBQW9CO1FBQzlDLElBQUksSUFBSSxHQUFHLHNDQUFzQyxDQUFDO1FBRWxELDBFQUEwRTtRQUMxRSwyRUFBMkU7UUFDM0UsNENBQTRDO1FBQzVDLElBQUksV0FBVyxFQUFFO1lBQ2YsSUFBSSxtQkFBSyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxtSEFBbUgsQ0FBQyxDQUFDO2FBQ3RJO1lBRUQsSUFBSSxJQUFJLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUM7U0FDekM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7O0FBN0VILHNDQThFQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuXG5pbXBvcnQgKiBhcyBjaGlsZF9wcm9jZXNzIGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGF3c19lYzIgYXMgZWMyLCBhd3NfaWFtIGFzIGlhbSwgYXdzX2xhbWJkYSBhcyBsYW1iZGEsIER1cmF0aW9uLCBDdXN0b21SZXNvdXJjZSwgVG9rZW4gfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuZXhwb3J0IGludGVyZmFjZSBFQ1JEZXBsb3ltZW50UHJvcHMge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGJ1aWxkSW1hZ2U/OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgc3JjOiBJSW1hZ2VOYW1lO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBkZXN0OiBJSW1hZ2VOYW1lO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBtZW1vcnlMaW1pdD86IG51bWJlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHJvbGU/OiBpYW0uSVJvbGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSB2cGM/OiBlYzIuSVZwYztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgdnBjU3VibmV0cz86IGVjMi5TdWJuZXRTZWxlY3Rpb247XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBlbnZpcm9ubWVudD86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUltYWdlTmFtZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHVyaTogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgY3JlZHM/OiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGdldENvZGUoYnVpbGRJbWFnZTogc3RyaW5nKTogbGFtYmRhLkFzc2V0Q29kZSB7XG4gIGNvbnN0IHsgQ0ksIE5PX1BSRUJVSUxUX0xBTUJEQSB9ID0gcHJvY2Vzcy5lbnY7XG4gIGlmICghKENJICYmIFsndHJ1ZScsIHRydWUsIDEsICcxJ10uaW5jbHVkZXMoQ0kpKSB8fCAoTk9fUFJFQlVJTFRfTEFNQkRBICYmIFsndHJ1ZScsIHRydWUsIDEsICcxJ10uaW5jbHVkZXMoTk9fUFJFQlVJTFRfTEFNQkRBKSkpIHtcbiAgICB0cnkge1xuICAgICAgY29uc29sZS5sb2coJ1RyeSB0byBnZXQgcHJlYnVpbHQgbGFtYmRhJyk7XG5cbiAgICAgIGNvbnN0IGluc3RhbGxTY3JpcHQgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vbGFtYmRhL2luc3RhbGwuanMnKTtcbiAgICAgIGNvbnN0IHByZWJ1aWx0UGF0aCA9IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi9sYW1iZGEvb3V0Jyk7XG4gICAgICBjaGlsZF9wcm9jZXNzLmV4ZWNTeW5jKGAke3Byb2Nlc3MuYXJndjB9ICR7aW5zdGFsbFNjcmlwdH0gJHtwcmVidWlsdFBhdGh9YCk7XG5cbiAgICAgIHJldHVybiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQocHJlYnVpbHRQYXRoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUud2FybihgQ2FuIG5vdCBnZXQgcHJlYnVpbHQgbGFtYmRhOiAke2Vycn1gKTtcbiAgICB9XG4gIH1cblxuICBjb25zb2xlLmxvZygnQnVpbGQgbGFtYmRhIGZyb20gc2NyYXRjaCcpO1xuXG4gIHJldHVybiBsYW1iZGEuQ29kZS5mcm9tRG9ja2VyQnVpbGQocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2xhbWJkYScpLCB7XG4gICAgYnVpbGRBcmdzOiB7XG4gICAgICBidWlsZEltYWdlLFxuICAgIH0sXG4gIH0pO1xufVxuXG5leHBvcnQgY2xhc3MgRG9ja2VySW1hZ2VOYW1lIGltcGxlbWVudHMgSUltYWdlTmFtZSB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIG5hbWU6IHN0cmluZywgcHVibGljIGNyZWRzPzogc3RyaW5nKSB7IH1cbiAgcHVibGljIGdldCB1cmkoKTogc3RyaW5nIHsgcmV0dXJuIGBkb2NrZXI6Ly8ke3RoaXMubmFtZX1gOyB9XG59XG5cbmV4cG9ydCBjbGFzcyBTM0FyY2hpdmVOYW1lIGltcGxlbWVudHMgSUltYWdlTmFtZSB7XG4gIHByaXZhdGUgbmFtZTogc3RyaW5nO1xuICBwdWJsaWMgY29uc3RydWN0b3IocDogc3RyaW5nLCByZWY/OiBzdHJpbmcsIHB1YmxpYyBjcmVkcz86IHN0cmluZykge1xuICAgIHRoaXMubmFtZSA9IHA7XG4gICAgaWYgKHJlZikge1xuICAgICAgdGhpcy5uYW1lICs9ICc6JyArIHJlZjtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCB1cmkoKTogc3RyaW5nIHsgcmV0dXJuIGBzMzovLyR7dGhpcy5uYW1lfWA7IH1cbn1cblxuZXhwb3J0IGNsYXNzIEVDUkRlcGxveW1lbnQgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRUNSRGVwbG95bWVudFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICBjb25zdCBtZW1vcnlMaW1pdCA9IHByb3BzLm1lbW9yeUxpbWl0ID8/IDUxMjtcbiAgICBjb25zdCBoYW5kbGVyID0gbmV3IGxhbWJkYS5TaW5nbGV0b25GdW5jdGlvbih0aGlzLCAnQ3VzdG9tUmVzb3VyY2VIYW5kbGVyJywge1xuICAgICAgdXVpZDogdGhpcy5yZW5kZXJTaW5nbGV0b25VdWlkKG1lbW9yeUxpbWl0KSxcbiAgICAgIGNvZGU6IGdldENvZGUocHJvcHMuYnVpbGRJbWFnZSA/PyAncHVibGljLmVjci5hd3Mvc2FtL2J1aWxkLWdvMS54OmxhdGVzdCcpLFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuR09fMV9YLFxuICAgICAgaGFuZGxlcjogJ21haW4nLFxuICAgICAgZW52aXJvbm1lbnQ6IHByb3BzLmVudmlyb25tZW50LFxuICAgICAgbGFtYmRhUHVycG9zZTogJ0N1c3RvbTo6Q0RLRUNSRGVwbG95bWVudCcsXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDE1KSxcbiAgICAgIHJvbGU6IHByb3BzLnJvbGUsXG4gICAgICBtZW1vcnlTaXplOiBtZW1vcnlMaW1pdCxcbiAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgdnBjU3VibmV0czogcHJvcHMudnBjU3VibmV0cyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGhhbmRsZXJSb2xlID0gaGFuZGxlci5yb2xlO1xuICAgIGlmICghaGFuZGxlclJvbGUpIHsgdGhyb3cgbmV3IEVycm9yKCdsYW1iZGEuU2luZ2xldG9uRnVuY3Rpb24gc2hvdWxkIGhhdmUgY3JlYXRlZCBhIFJvbGUnKTsgfVxuXG4gICAgaGFuZGxlclJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICdlY3I6R2V0QXV0aG9yaXphdGlvblRva2VuJyxcbiAgICAgICAgICAnZWNyOkJhdGNoQ2hlY2tMYXllckF2YWlsYWJpbGl0eScsXG4gICAgICAgICAgJ2VjcjpHZXREb3dubG9hZFVybEZvckxheWVyJyxcbiAgICAgICAgICAnZWNyOkdldFJlcG9zaXRvcnlQb2xpY3knLFxuICAgICAgICAgICdlY3I6RGVzY3JpYmVSZXBvc2l0b3JpZXMnLFxuICAgICAgICAgICdlY3I6TGlzdEltYWdlcycsXG4gICAgICAgICAgJ2VjcjpEZXNjcmliZUltYWdlcycsXG4gICAgICAgICAgJ2VjcjpCYXRjaEdldEltYWdlJyxcbiAgICAgICAgICAnZWNyOkxpc3RUYWdzRm9yUmVzb3VyY2UnLFxuICAgICAgICAgICdlY3I6RGVzY3JpYmVJbWFnZVNjYW5GaW5kaW5ncycsXG4gICAgICAgICAgJ2VjcjpJbml0aWF0ZUxheWVyVXBsb2FkJyxcbiAgICAgICAgICAnZWNyOlVwbG9hZExheWVyUGFydCcsXG4gICAgICAgICAgJ2VjcjpDb21wbGV0ZUxheWVyVXBsb2FkJyxcbiAgICAgICAgICAnZWNyOlB1dEltYWdlJyxcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgIH0pKTtcbiAgICBoYW5kbGVyUm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgICdzMzpHZXRPYmplY3QnLFxuICAgICAgXSxcbiAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgfSkpO1xuXG4gICAgbmV3IEN1c3RvbVJlc291cmNlKHRoaXMsICdDdXN0b21SZXNvdXJjZScsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogaGFuZGxlci5mdW5jdGlvbkFybixcbiAgICAgIHJlc291cmNlVHlwZTogJ0N1c3RvbTo6Q0RLQnVja2V0RGVwbG95bWVudCcsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIFNyY0ltYWdlOiBwcm9wcy5zcmMudXJpLFxuICAgICAgICBTcmNDcmVkczogcHJvcHMuc3JjLmNyZWRzLFxuICAgICAgICBEZXN0SW1hZ2U6IHByb3BzLmRlc3QudXJpLFxuICAgICAgICBEZXN0Q3JlZHM6IHByb3BzLmRlc3QuY3JlZHMsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJTaW5nbGV0b25VdWlkKG1lbW9yeUxpbWl0PzogbnVtYmVyKSB7XG4gICAgbGV0IHV1aWQgPSAnYmQwN2M5MzAtZWRiOS00MTEyLWEyMGYtMDNmMDk2ZjUzNjY2JztcblxuICAgIC8vIGlmIHVzZXIgc3BlY2lmeSBhIGN1c3RvbSBtZW1vcnkgbGltaXQsIGRlZmluZSBhbm90aGVyIHNpbmdsZXRvbiBoYW5kbGVyXG4gICAgLy8gd2l0aCB0aGlzIGNvbmZpZ3VyYXRpb24uIG90aGVyd2lzZSwgaXQgd29uJ3QgYmUgcG9zc2libGUgdG8gdXNlIG11bHRpcGxlXG4gICAgLy8gY29uZmlndXJhdGlvbnMgc2luY2Ugd2UgaGF2ZSBhIHNpbmdsZXRvbi5cbiAgICBpZiAobWVtb3J5TGltaXQpIHtcbiAgICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQobWVtb3J5TGltaXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCB1c2UgdG9rZW5zIHdoZW4gc3BlY2lmeWluZyBcIm1lbW9yeUxpbWl0XCIgc2luY2Ugd2UgdXNlIGl0IHRvIGlkZW50aWZ5IHRoZSBzaW5nbGV0b24gY3VzdG9tIHJlc291cmNlIGhhbmRsZXInKTtcbiAgICAgIH1cblxuICAgICAgdXVpZCArPSBgLSR7bWVtb3J5TGltaXQudG9TdHJpbmcoKX1NaUJgO1xuICAgIH1cblxuICAgIHJldHVybiB1dWlkO1xuICB9XG59XG4iXX0=
|
|
177
|
+
ECRDeployment[_c] = { fqn: "cdk-ecr-deployment.ECRDeployment", version: "2.4.2" };
|
|
178
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxRUFBcUU7QUFDckUsc0NBQXNDO0FBR3RDLCtDQUErQztBQUMvQyw2QkFBNkI7QUFDN0IsNkNBQW9IO0FBRXBILDJDQUF1QztBQW9DdkMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUV0QyxTQUFTLE9BQU8sQ0FBQyxVQUFrQjtJQUNqQyxNQUFNLEVBQUUsRUFBRSxFQUFFLGtCQUFrQixFQUFFLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztJQUMvQyxNQUFNLElBQUksR0FBRyxFQUFFLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2QyxNQUFNLFlBQVksR0FBRyxrQkFBa0IsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFFL0UsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLFlBQVksQ0FBQyxFQUFFO1FBQzNCLElBQUk7WUFDRixPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDLENBQUM7WUFFMUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztZQUNuRSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQztZQUMzRCxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxhQUFhLElBQUksWUFBWSxFQUFFLENBQUMsQ0FBQztZQUU1RSxPQUFPLHdCQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUM1QztRQUFDLE9BQU8sR0FBRyxFQUFFO1lBQ1osT0FBTyxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsR0FBRyxFQUFFLENBQUMsQ0FBQztTQUNyRDtLQUNGO0lBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBRXpDLE9BQU8sd0JBQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxFQUFFO1FBQ3BFLFNBQVMsRUFBRTtZQUNULFVBQVU7U0FDWDtLQUNGLENBQUMsQ0FBQztBQUNMLENBQUM7Ozs7QUFFRCxNQUFhLGVBQWU7Ozs7SUFDMUIsWUFBMkIsSUFBWSxFQUFTLEtBQWM7UUFBbkMsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUFTLFVBQUssR0FBTCxLQUFLLENBQVM7SUFBSSxDQUFDOzs7Ozs7OztJQUNuRSxJQUFXLEdBQUcsS0FBYSxPQUFPLFlBQVksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQzs7QUFGOUQsMENBR0M7Ozs7OztBQUVELE1BQWEsYUFBYTs7OztJQUV4QixZQUFtQixDQUFTLEVBQUUsR0FBWSxFQUFTLEtBQWM7UUFBZCxVQUFLLEdBQUwsS0FBSyxDQUFTO1FBQy9ELElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUMsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7U0FDeEI7SUFDSCxDQUFDOzs7Ozs7OztJQUNELElBQVcsR0FBRyxLQUFhLE9BQU8sUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDOztBQVIxRCxzQ0FTQzs7Ozs7O0FBRUQsTUFBYSxhQUFjLFNBQVEsc0JBQVM7Ozs7SUFHMUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF5Qjs7UUFDakUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixNQUFNLFdBQVcsU0FBRyxLQUFLLENBQUMsV0FBVyxtQ0FBSSxHQUFHLENBQUM7UUFDN0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLHdCQUFNLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLHVCQUF1QixFQUFFO1lBQ3pFLElBQUksRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDO1lBQzNDLElBQUksRUFBRSxPQUFPLE9BQUMsS0FBSyxDQUFDLFVBQVUsbUNBQUksdUNBQXVDLENBQUM7WUFDMUUsT0FBTyxFQUFFLHdCQUFNLENBQUMsT0FBTyxDQUFDLE1BQU07WUFDOUIsT0FBTyxFQUFFLE1BQU07WUFDZixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsYUFBYSxFQUFFLDBCQUEwQjtZQUN6QyxPQUFPLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzdCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtZQUNoQixVQUFVLEVBQUUsV0FBVztZQUN2QixHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7WUFDZCxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7U0FDN0IsQ0FBQyxDQUFDO1FBRUgsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDdEMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQztTQUFFO1FBRTdGLFdBQVcsQ0FBQyxvQkFBb0IsQ0FDOUIsSUFBSSxxQkFBRyxDQUFDLGVBQWUsQ0FBQztZQUN0QixNQUFNLEVBQUUscUJBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSztZQUN4QixPQUFPLEVBQUU7Z0JBQ1AsMkJBQTJCO2dCQUMzQixpQ0FBaUM7Z0JBQ2pDLDRCQUE0QjtnQkFDNUIseUJBQXlCO2dCQUN6QiwwQkFBMEI7Z0JBQzFCLGdCQUFnQjtnQkFDaEIsb0JBQW9CO2dCQUNwQixtQkFBbUI7Z0JBQ25CLHlCQUF5QjtnQkFDekIsK0JBQStCO2dCQUMvQix5QkFBeUI7Z0JBQ3pCLHFCQUFxQjtnQkFDckIseUJBQXlCO2dCQUN6QixjQUFjO2FBQ2Y7WUFDRCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUM7U0FDakIsQ0FBQyxDQUFDLENBQUM7UUFDTixXQUFXLENBQUMsb0JBQW9CLENBQUMsSUFBSSxxQkFBRyxDQUFDLGVBQWUsQ0FBQztZQUN2RCxNQUFNLEVBQUUscUJBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSztZQUN4QixPQUFPLEVBQUU7Z0JBQ1AsY0FBYzthQUNmO1lBQ0QsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDO1NBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBRUosSUFBSSw0QkFBYyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUN6QyxZQUFZLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXO1lBQ3RDLFlBQVksRUFBRSw2QkFBNkI7WUFDM0MsVUFBVSxFQUFFO2dCQUNWLFFBQVEsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUc7Z0JBQ3ZCLFFBQVEsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUs7Z0JBQ3pCLFNBQVMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUc7Z0JBQ3pCLFNBQVMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUs7YUFDNUI7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDOzs7O0lBRU0sb0JBQW9CLENBQUMsU0FBMEI7UUFDcEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDdEMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQztTQUFFO1FBRTdGLE9BQU8sV0FBVyxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxXQUFvQjtRQUM5QyxJQUFJLElBQUksR0FBRyxzQ0FBc0MsQ0FBQztRQUVsRCwwRUFBMEU7UUFDMUUsMkVBQTJFO1FBQzNFLDRDQUE0QztRQUM1QyxJQUFJLFdBQVcsRUFBRTtZQUNmLElBQUksbUJBQUssQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEVBQUU7Z0JBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsbUhBQW1ILENBQUMsQ0FBQzthQUN0STtZQUVELElBQUksSUFBSSxJQUFJLFdBQVcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDO1NBQ3pDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOztBQXRGSCxzQ0F1RkMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cblxuaW1wb3J0ICogYXMgY2hpbGRfcHJvY2VzcyBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBhd3NfZWMyIGFzIGVjMiwgYXdzX2lhbSBhcyBpYW0sIGF3c19sYW1iZGEgYXMgbGFtYmRhLCBEdXJhdGlvbiwgQ3VzdG9tUmVzb3VyY2UsIFRva2VuIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgUG9saWN5U3RhdGVtZW50LCBBZGRUb1ByaW5jaXBhbFBvbGljeVJlc3VsdCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRUNSRGVwbG95bWVudFByb3BzIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBidWlsZEltYWdlPzogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHNyYzogSUltYWdlTmFtZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgZGVzdDogSUltYWdlTmFtZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgbWVtb3J5TGltaXQ/OiBudW1iZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSByb2xlPzogaWFtLklSb2xlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgdnBjPzogZWMyLklWcGM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHZwY1N1Ym5ldHM/OiBlYzIuU3VibmV0U2VsZWN0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElJbWFnZU5hbWUge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSB1cmk6IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgY3JlZHM/OiBzdHJpbmc7XG59XG5cbmNvbnN0IFRSVVRIWSA9IFsndHJ1ZScsIHRydWUsIDEsICcxJ107XG5cbmZ1bmN0aW9uIGdldENvZGUoYnVpbGRJbWFnZTogc3RyaW5nKTogbGFtYmRhLkFzc2V0Q29kZSB7XG4gIGNvbnN0IHsgQ0ksIE5PX1BSRUJVSUxUX0xBTUJEQSB9ID0gcHJvY2Vzcy5lbnY7XG4gIGNvbnN0IGlzQ0kgPSBDSSAmJiBUUlVUSFkuaW5jbHVkZXMoQ0kpO1xuICBjb25zdCBpc05vUHJlYnVpbHQgPSBOT19QUkVCVUlMVF9MQU1CREEgJiYgVFJVVEhZLmluY2x1ZGVzKE5PX1BSRUJVSUxUX0xBTUJEQSk7XG5cbiAgaWYgKCEoaXNDSSB8fCBpc05vUHJlYnVpbHQpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnNvbGUubG9nKCdUcnkgdG8gZ2V0IHByZWJ1aWx0IGxhbWJkYScpO1xuXG4gICAgICBjb25zdCBpbnN0YWxsU2NyaXB0ID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2xhbWJkYS9pbnN0YWxsLmpzJyk7XG4gICAgICBjb25zdCBwcmVidWlsdFBhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vbGFtYmRhL291dCcpO1xuICAgICAgY2hpbGRfcHJvY2Vzcy5leGVjU3luYyhgJHtwcm9jZXNzLmFyZ3YwfSAke2luc3RhbGxTY3JpcHR9ICR7cHJlYnVpbHRQYXRofWApO1xuXG4gICAgICByZXR1cm4gbGFtYmRhLkNvZGUuZnJvbUFzc2V0KHByZWJ1aWx0UGF0aCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLndhcm4oYENhbiBub3QgZ2V0IHByZWJ1aWx0IGxhbWJkYTogJHtlcnJ9YCk7XG4gICAgfVxuICB9XG5cbiAgY29uc29sZS5sb2coJ0J1aWxkIGxhbWJkYSBmcm9tIHNjcmF0Y2gnKTtcblxuICByZXR1cm4gbGFtYmRhLkNvZGUuZnJvbURvY2tlckJ1aWxkKHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi9sYW1iZGEnKSwge1xuICAgIGJ1aWxkQXJnczoge1xuICAgICAgYnVpbGRJbWFnZSxcbiAgICB9LFxuICB9KTtcbn1cblxuZXhwb3J0IGNsYXNzIERvY2tlckltYWdlTmFtZSBpbXBsZW1lbnRzIElJbWFnZU5hbWUge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBuYW1lOiBzdHJpbmcsIHB1YmxpYyBjcmVkcz86IHN0cmluZykgeyB9XG4gIHB1YmxpYyBnZXQgdXJpKCk6IHN0cmluZyB7IHJldHVybiBgZG9ja2VyOi8vJHt0aGlzLm5hbWV9YDsgfVxufVxuXG5leHBvcnQgY2xhc3MgUzNBcmNoaXZlTmFtZSBpbXBsZW1lbnRzIElJbWFnZU5hbWUge1xuICBwcml2YXRlIG5hbWU6IHN0cmluZztcbiAgcHVibGljIGNvbnN0cnVjdG9yKHA6IHN0cmluZywgcmVmPzogc3RyaW5nLCBwdWJsaWMgY3JlZHM/OiBzdHJpbmcpIHtcbiAgICB0aGlzLm5hbWUgPSBwO1xuICAgIGlmIChyZWYpIHtcbiAgICAgIHRoaXMubmFtZSArPSAnOicgKyByZWY7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgdXJpKCk6IHN0cmluZyB7IHJldHVybiBgczM6Ly8ke3RoaXMubmFtZX1gOyB9XG59XG5cbmV4cG9ydCBjbGFzcyBFQ1JEZXBsb3ltZW50IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHJpdmF0ZSBoYW5kbGVyOiBsYW1iZGEuU2luZ2xldG9uRnVuY3Rpb247XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEVDUkRlcGxveW1lbnRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgY29uc3QgbWVtb3J5TGltaXQgPSBwcm9wcy5tZW1vcnlMaW1pdCA/PyA1MTI7XG4gICAgdGhpcy5oYW5kbGVyID0gbmV3IGxhbWJkYS5TaW5nbGV0b25GdW5jdGlvbih0aGlzLCAnQ3VzdG9tUmVzb3VyY2VIYW5kbGVyJywge1xuICAgICAgdXVpZDogdGhpcy5yZW5kZXJTaW5nbGV0b25VdWlkKG1lbW9yeUxpbWl0KSxcbiAgICAgIGNvZGU6IGdldENvZGUocHJvcHMuYnVpbGRJbWFnZSA/PyAncHVibGljLmVjci5hd3Mvc2FtL2J1aWxkLWdvMS54OmxhdGVzdCcpLFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuR09fMV9YLFxuICAgICAgaGFuZGxlcjogJ21haW4nLFxuICAgICAgZW52aXJvbm1lbnQ6IHByb3BzLmVudmlyb25tZW50LFxuICAgICAgbGFtYmRhUHVycG9zZTogJ0N1c3RvbTo6Q0RLRUNSRGVwbG95bWVudCcsXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDE1KSxcbiAgICAgIHJvbGU6IHByb3BzLnJvbGUsXG4gICAgICBtZW1vcnlTaXplOiBtZW1vcnlMaW1pdCxcbiAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgdnBjU3VibmV0czogcHJvcHMudnBjU3VibmV0cyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGhhbmRsZXJSb2xlID0gdGhpcy5oYW5kbGVyLnJvbGU7XG4gICAgaWYgKCFoYW5kbGVyUm9sZSkgeyB0aHJvdyBuZXcgRXJyb3IoJ2xhbWJkYS5TaW5nbGV0b25GdW5jdGlvbiBzaG91bGQgaGF2ZSBjcmVhdGVkIGEgUm9sZScpOyB9XG5cbiAgICBoYW5kbGVyUm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgJ2VjcjpHZXRBdXRob3JpemF0aW9uVG9rZW4nLFxuICAgICAgICAgICdlY3I6QmF0Y2hDaGVja0xheWVyQXZhaWxhYmlsaXR5JyxcbiAgICAgICAgICAnZWNyOkdldERvd25sb2FkVXJsRm9yTGF5ZXInLFxuICAgICAgICAgICdlY3I6R2V0UmVwb3NpdG9yeVBvbGljeScsXG4gICAgICAgICAgJ2VjcjpEZXNjcmliZVJlcG9zaXRvcmllcycsXG4gICAgICAgICAgJ2VjcjpMaXN0SW1hZ2VzJyxcbiAgICAgICAgICAnZWNyOkRlc2NyaWJlSW1hZ2VzJyxcbiAgICAgICAgICAnZWNyOkJhdGNoR2V0SW1hZ2UnLFxuICAgICAgICAgICdlY3I6TGlzdFRhZ3NGb3JSZXNvdXJjZScsXG4gICAgICAgICAgJ2VjcjpEZXNjcmliZUltYWdlU2NhbkZpbmRpbmdzJyxcbiAgICAgICAgICAnZWNyOkluaXRpYXRlTGF5ZXJVcGxvYWQnLFxuICAgICAgICAgICdlY3I6VXBsb2FkTGF5ZXJQYXJ0JyxcbiAgICAgICAgICAnZWNyOkNvbXBsZXRlTGF5ZXJVcGxvYWQnLFxuICAgICAgICAgICdlY3I6UHV0SW1hZ2UnLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgfSkpO1xuICAgIGhhbmRsZXJSb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgJ3MzOkdldE9iamVjdCcsXG4gICAgICBdLFxuICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICB9KSk7XG5cbiAgICBuZXcgQ3VzdG9tUmVzb3VyY2UodGhpcywgJ0N1c3RvbVJlc291cmNlJywge1xuICAgICAgc2VydmljZVRva2VuOiB0aGlzLmhhbmRsZXIuZnVuY3Rpb25Bcm4sXG4gICAgICByZXNvdXJjZVR5cGU6ICdDdXN0b206OkNES0J1Y2tldERlcGxveW1lbnQnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBTcmNJbWFnZTogcHJvcHMuc3JjLnVyaSxcbiAgICAgICAgU3JjQ3JlZHM6IHByb3BzLnNyYy5jcmVkcyxcbiAgICAgICAgRGVzdEltYWdlOiBwcm9wcy5kZXN0LnVyaSxcbiAgICAgICAgRGVzdENyZWRzOiBwcm9wcy5kZXN0LmNyZWRzLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRUb1ByaW5jaXBhbFBvbGljeShzdGF0ZW1lbnQ6IFBvbGljeVN0YXRlbWVudCk6IEFkZFRvUHJpbmNpcGFsUG9saWN5UmVzdWx0IHtcbiAgICBjb25zdCBoYW5kbGVyUm9sZSA9IHRoaXMuaGFuZGxlci5yb2xlO1xuICAgIGlmICghaGFuZGxlclJvbGUpIHsgdGhyb3cgbmV3IEVycm9yKCdsYW1iZGEuU2luZ2xldG9uRnVuY3Rpb24gc2hvdWxkIGhhdmUgY3JlYXRlZCBhIFJvbGUnKTsgfVxuXG4gICAgcmV0dXJuIGhhbmRsZXJSb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KHN0YXRlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlclNpbmdsZXRvblV1aWQobWVtb3J5TGltaXQ/OiBudW1iZXIpIHtcbiAgICBsZXQgdXVpZCA9ICdiZDA3YzkzMC1lZGI5LTQxMTItYTIwZi0wM2YwOTZmNTM2NjYnO1xuXG4gICAgLy8gaWYgdXNlciBzcGVjaWZ5IGEgY3VzdG9tIG1lbW9yeSBsaW1pdCwgZGVmaW5lIGFub3RoZXIgc2luZ2xldG9uIGhhbmRsZXJcbiAgICAvLyB3aXRoIHRoaXMgY29uZmlndXJhdGlvbi4gb3RoZXJ3aXNlLCBpdCB3b24ndCBiZSBwb3NzaWJsZSB0byB1c2UgbXVsdGlwbGVcbiAgICAvLyBjb25maWd1cmF0aW9ucyBzaW5jZSB3ZSBoYXZlIGEgc2luZ2xldG9uLlxuICAgIGlmIChtZW1vcnlMaW1pdCkge1xuICAgICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChtZW1vcnlMaW1pdCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IHVzZSB0b2tlbnMgd2hlbiBzcGVjaWZ5aW5nIFwibWVtb3J5TGltaXRcIiBzaW5jZSB3ZSB1c2UgaXQgdG8gaWRlbnRpZnkgdGhlIHNpbmdsZXRvbiBjdXN0b20gcmVzb3VyY2UgaGFuZGxlcicpO1xuICAgICAgfVxuXG4gICAgICB1dWlkICs9IGAtJHttZW1vcnlMaW1pdC50b1N0cmluZygpfU1pQmA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHV1aWQ7XG4gIH1cbn1cbiJdfQ==
|
package/package.json
CHANGED
package/releasetag.txt
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
v2.
|
|
1
|
+
v2.4.2
|
package/version.txt
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.
|
|
1
|
+
2.4.2
|