@rio-cloud/cdk-v2-constructs 6.2.2 → 6.3.0
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
CHANGED
|
@@ -6140,7 +6140,7 @@
|
|
|
6140
6140
|
"kind": "interface",
|
|
6141
6141
|
"locationInModule": {
|
|
6142
6142
|
"filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
|
|
6143
|
-
"line":
|
|
6143
|
+
"line": 20
|
|
6144
6144
|
},
|
|
6145
6145
|
"name": "GitLabRunnerProps",
|
|
6146
6146
|
"properties": [
|
|
@@ -6152,7 +6152,22 @@
|
|
|
6152
6152
|
"immutable": true,
|
|
6153
6153
|
"locationInModule": {
|
|
6154
6154
|
"filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
|
|
6155
|
-
"line":
|
|
6155
|
+
"line": 24
|
|
6156
|
+
},
|
|
6157
|
+
"name": "cache",
|
|
6158
|
+
"type": {
|
|
6159
|
+
"fqn": "aws-cdk-lib.aws_s3.IBucket"
|
|
6160
|
+
}
|
|
6161
|
+
},
|
|
6162
|
+
{
|
|
6163
|
+
"abstract": true,
|
|
6164
|
+
"docs": {
|
|
6165
|
+
"stability": "stable"
|
|
6166
|
+
},
|
|
6167
|
+
"immutable": true,
|
|
6168
|
+
"locationInModule": {
|
|
6169
|
+
"filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
|
|
6170
|
+
"line": 21
|
|
6156
6171
|
},
|
|
6157
6172
|
"name": "env",
|
|
6158
6173
|
"type": {
|
|
@@ -6167,7 +6182,7 @@
|
|
|
6167
6182
|
"immutable": true,
|
|
6168
6183
|
"locationInModule": {
|
|
6169
6184
|
"filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
|
|
6170
|
-
"line":
|
|
6185
|
+
"line": 23
|
|
6171
6186
|
},
|
|
6172
6187
|
"name": "managerInstanceType",
|
|
6173
6188
|
"optional": true,
|
|
@@ -6183,17 +6198,12 @@
|
|
|
6183
6198
|
"immutable": true,
|
|
6184
6199
|
"locationInModule": {
|
|
6185
6200
|
"filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
|
|
6186
|
-
"line":
|
|
6201
|
+
"line": 22
|
|
6187
6202
|
},
|
|
6188
6203
|
"name": "runnersWorkerProps",
|
|
6189
6204
|
"optional": true,
|
|
6190
6205
|
"type": {
|
|
6191
|
-
"
|
|
6192
|
-
"elementtype": {
|
|
6193
|
-
"fqn": "@rio-cloud/cdk-v2-constructs.GitlabRunnerWorkerProps"
|
|
6194
|
-
},
|
|
6195
|
-
"kind": "array"
|
|
6196
|
-
}
|
|
6206
|
+
"fqn": "@rio-cloud/cdk-v2-constructs.GitlabRunnerWorkerProps"
|
|
6197
6207
|
}
|
|
6198
6208
|
}
|
|
6199
6209
|
],
|
|
@@ -6203,7 +6213,7 @@
|
|
|
6203
6213
|
"assembly": "@rio-cloud/cdk-v2-constructs",
|
|
6204
6214
|
"base": "constructs.Construct",
|
|
6205
6215
|
"docs": {
|
|
6206
|
-
"remarks": "By default, the construct will create a Runner with a manager T3 Micro instance which will be enabled to spawn T3 Large Runner\nworker spot instance. The default runner Role has only the permissions to upload and download from the S3 runner cache.\n\nminimal configuration with runner spot instance:\n```ts\nnew SpotServiceLinkedRole(stack, 'SpotLinkedRole');\nnew GitlabRunner(stack, 'GitLabRunner', {\n env: {account: '123456789012', region: 'eu-west-1'}\n});\n```\nrecommended:\n```ts\nnew SpotServiceLinkedRole(stack, 'SpotLinkedRole');\nconst runnerRoles = new RunnerRoles(stack, 'RunnerRoles', {env: {account: '123456789012', region: 'eu-west-1'}});\nnew GitlabRunner(stack, 'GitLabRunner', {\n env: {account: '123456789012', region: 'eu-west-1'},\n
|
|
6216
|
+
"remarks": "By default, the construct will create a Runner with a manager T3 Micro instance which will be enabled to spawn T3 Large Runner\nworker spot instance. The default runner Role has only the permissions to upload and download from the S3 runner cache.\n\nminimal configuration with runner spot instance:\n```ts\nnew SpotServiceLinkedRole(stack, 'SpotLinkedRole');\nconst myBucket = new Bucket(stack, 'MyShareRunnerCache', {\n enforceSSL: true,\n publicReadAccess: false,\n encryption: BucketEncryption.S3_MANAGED,\n lifecycleRules: [\n {\n enabled: true,\n expiration: Duration.days(30),\n },\n ],\n });\nnew GitlabRunner(stack, 'GitLabRunner', {\n env: {account: '123456789012', region: 'eu-west-1'},\n cache: myBucket // use a S3 bucket without public access and a retention defined, use one cache bucket for all you runners\n});\n```\nrecommended:\n```ts\nnew SpotServiceLinkedRole(stack, 'SpotLinkedRole');\nconst runnerRoles = new RunnerRoles(stack, 'RunnerRoles', {env: {account: '123456789012', region: 'eu-west-1'}});\nconst myBucket = new Bucket(stack, 'MyShareRunnerCache', {\n enforceSSL: true,\n publicReadAccess: false,\n encryption: BucketEncryption.S3_MANAGED,\n lifecycleRules: [\n {\n enabled: true,\n expiration: Duration.days(30),\n },\n ],\n });\nnew GitlabRunner(stack, 'GitLabRunner', {\n env: {account: '123456789012', region: 'eu-west-1'},\n cache: myBucket // // use a S3 bucket without public access and a retention defined, use one cache bucket for all you runners\n runnersWorkerProps: {\n token: myTokenForTaggedRunner1, // with this runner we only want to run jobs that require more power\n gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab\n instanceType: InstanceType.of(InstanceClass.M7I_FLEX, InstanceSize.XLARGE), // exemplary larger runner\n spotPrice: 0.2, // exemplary spot price\n requestSpotPrice: true,\n defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role\n },\n});\n```",
|
|
6207
6217
|
"stability": "stable",
|
|
6208
6218
|
"summary": "The construct create the GitLabRunner Manager instance which will autoscale Runner instances based on the configuration."
|
|
6209
6219
|
},
|
|
@@ -6214,7 +6224,7 @@
|
|
|
6214
6224
|
},
|
|
6215
6225
|
"locationInModule": {
|
|
6216
6226
|
"filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
|
|
6217
|
-
"line":
|
|
6227
|
+
"line": 116
|
|
6218
6228
|
},
|
|
6219
6229
|
"parameters": [
|
|
6220
6230
|
{
|
|
@@ -6240,7 +6250,7 @@
|
|
|
6240
6250
|
"kind": "class",
|
|
6241
6251
|
"locationInModule": {
|
|
6242
6252
|
"filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
|
|
6243
|
-
"line":
|
|
6253
|
+
"line": 111
|
|
6244
6254
|
},
|
|
6245
6255
|
"name": "GitlabRunner",
|
|
6246
6256
|
"symbolId": "src/contributions/smart-route/gitlab-runner/autoscaling-runner:GitlabRunner"
|
|
@@ -6257,7 +6267,7 @@
|
|
|
6257
6267
|
"kind": "interface",
|
|
6258
6268
|
"locationInModule": {
|
|
6259
6269
|
"filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
|
|
6260
|
-
"line":
|
|
6270
|
+
"line": 33
|
|
6261
6271
|
},
|
|
6262
6272
|
"name": "GitlabRunnerWorkerProps",
|
|
6263
6273
|
"properties": [
|
|
@@ -6270,7 +6280,7 @@
|
|
|
6270
6280
|
"immutable": true,
|
|
6271
6281
|
"locationInModule": {
|
|
6272
6282
|
"filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
|
|
6273
|
-
"line":
|
|
6283
|
+
"line": 45
|
|
6274
6284
|
},
|
|
6275
6285
|
"name": "defaultWorkerRole",
|
|
6276
6286
|
"type": {
|
|
@@ -6286,7 +6296,7 @@
|
|
|
6286
6296
|
"immutable": true,
|
|
6287
6297
|
"locationInModule": {
|
|
6288
6298
|
"filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
|
|
6289
|
-
"line":
|
|
6299
|
+
"line": 37
|
|
6290
6300
|
},
|
|
6291
6301
|
"name": "gitInstanceUrl",
|
|
6292
6302
|
"type": {
|
|
@@ -6302,7 +6312,7 @@
|
|
|
6302
6312
|
"immutable": true,
|
|
6303
6313
|
"locationInModule": {
|
|
6304
6314
|
"filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
|
|
6305
|
-
"line":
|
|
6315
|
+
"line": 39
|
|
6306
6316
|
},
|
|
6307
6317
|
"name": "instanceType",
|
|
6308
6318
|
"type": {
|
|
@@ -6318,7 +6328,7 @@
|
|
|
6318
6328
|
"immutable": true,
|
|
6319
6329
|
"locationInModule": {
|
|
6320
6330
|
"filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
|
|
6321
|
-
"line":
|
|
6331
|
+
"line": 43
|
|
6322
6332
|
},
|
|
6323
6333
|
"name": "requestSpotPrice",
|
|
6324
6334
|
"type": {
|
|
@@ -6334,7 +6344,7 @@
|
|
|
6334
6344
|
"immutable": true,
|
|
6335
6345
|
"locationInModule": {
|
|
6336
6346
|
"filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
|
|
6337
|
-
"line":
|
|
6347
|
+
"line": 41
|
|
6338
6348
|
},
|
|
6339
6349
|
"name": "spotPrice",
|
|
6340
6350
|
"type": {
|
|
@@ -6350,7 +6360,7 @@
|
|
|
6350
6360
|
"immutable": true,
|
|
6351
6361
|
"locationInModule": {
|
|
6352
6362
|
"filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
|
|
6353
|
-
"line":
|
|
6363
|
+
"line": 35
|
|
6354
6364
|
},
|
|
6355
6365
|
"name": "token",
|
|
6356
6366
|
"type": {
|
|
@@ -6367,7 +6377,7 @@
|
|
|
6367
6377
|
"immutable": true,
|
|
6368
6378
|
"locationInModule": {
|
|
6369
6379
|
"filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
|
|
6370
|
-
"line":
|
|
6380
|
+
"line": 47
|
|
6371
6381
|
},
|
|
6372
6382
|
"name": "maxBuilds",
|
|
6373
6383
|
"optional": true,
|
|
@@ -6385,7 +6395,7 @@
|
|
|
6385
6395
|
"immutable": true,
|
|
6386
6396
|
"locationInModule": {
|
|
6387
6397
|
"filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
|
|
6388
|
-
"line":
|
|
6398
|
+
"line": 49
|
|
6389
6399
|
},
|
|
6390
6400
|
"name": "maxIdleInstance",
|
|
6391
6401
|
"optional": true,
|
|
@@ -6403,7 +6413,7 @@
|
|
|
6403
6413
|
"immutable": true,
|
|
6404
6414
|
"locationInModule": {
|
|
6405
6415
|
"filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
|
|
6406
|
-
"line":
|
|
6416
|
+
"line": 51
|
|
6407
6417
|
},
|
|
6408
6418
|
"name": "maxIdleTime",
|
|
6409
6419
|
"optional": true,
|
|
@@ -16728,5 +16738,5 @@
|
|
|
16728
16738
|
}
|
|
16729
16739
|
},
|
|
16730
16740
|
"version": "0.0.0",
|
|
16731
|
-
"fingerprint": "
|
|
16741
|
+
"fingerprint": "vkv0ByaY8bMTd8OsR9NHooh1ytKdvwQivH2W8ggVLS4="
|
|
16732
16742
|
}
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
## [6.3.0](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv6.2.2&sourceBranch=refs%2Ftags%2Fv6.3.0) (2024-07-23)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* adjust gitlab runner construct to handle new registration process and change worker props since now one manager can only handle one runner group ([f744213](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/commits/f74421342e21729a4b8732e4913ad31d93f0d818))
|
|
11
|
+
|
|
5
12
|
## [6.2.2](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv6.2.1&sourceBranch=refs%2Ftags%2Fv6.2.2) (2024-07-19)
|
|
6
13
|
|
|
7
14
|
## [6.2.1](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv6.2.0&sourceBranch=refs%2Ftags%2Fv6.2.1) (2024-07-19)
|
package/docs/API.md
CHANGED
|
@@ -2497,34 +2497,48 @@ worker spot instance. The default runner Role has only the permissions to upload
|
|
|
2497
2497
|
minimal configuration with runner spot instance:
|
|
2498
2498
|
```ts
|
|
2499
2499
|
new SpotServiceLinkedRole(stack, 'SpotLinkedRole');
|
|
2500
|
+
const myBucket = new Bucket(stack, 'MyShareRunnerCache', {
|
|
2501
|
+
enforceSSL: true,
|
|
2502
|
+
publicReadAccess: false,
|
|
2503
|
+
encryption: BucketEncryption.S3_MANAGED,
|
|
2504
|
+
lifecycleRules: [
|
|
2505
|
+
{
|
|
2506
|
+
enabled: true,
|
|
2507
|
+
expiration: Duration.days(30),
|
|
2508
|
+
},
|
|
2509
|
+
],
|
|
2510
|
+
});
|
|
2500
2511
|
new GitlabRunner(stack, 'GitLabRunner', {
|
|
2501
|
-
env: {account: '123456789012', region: 'eu-west-1'}
|
|
2512
|
+
env: {account: '123456789012', region: 'eu-west-1'},
|
|
2513
|
+
cache: myBucket // use a S3 bucket without public access and a retention defined, use one cache bucket for all you runners
|
|
2502
2514
|
});
|
|
2503
2515
|
```
|
|
2504
2516
|
recommended:
|
|
2505
2517
|
```ts
|
|
2506
2518
|
new SpotServiceLinkedRole(stack, 'SpotLinkedRole');
|
|
2507
2519
|
const runnerRoles = new RunnerRoles(stack, 'RunnerRoles', {env: {account: '123456789012', region: 'eu-west-1'}});
|
|
2520
|
+
const myBucket = new Bucket(stack, 'MyShareRunnerCache', {
|
|
2521
|
+
enforceSSL: true,
|
|
2522
|
+
publicReadAccess: false,
|
|
2523
|
+
encryption: BucketEncryption.S3_MANAGED,
|
|
2524
|
+
lifecycleRules: [
|
|
2525
|
+
{
|
|
2526
|
+
enabled: true,
|
|
2527
|
+
expiration: Duration.days(30),
|
|
2528
|
+
},
|
|
2529
|
+
],
|
|
2530
|
+
});
|
|
2508
2531
|
new GitlabRunner(stack, 'GitLabRunner', {
|
|
2509
2532
|
env: {account: '123456789012', region: 'eu-west-1'},
|
|
2510
|
-
|
|
2511
|
-
|
|
2512
|
-
|
|
2513
|
-
|
|
2514
|
-
|
|
2515
|
-
|
|
2516
|
-
|
|
2517
|
-
|
|
2518
|
-
|
|
2519
|
-
{
|
|
2520
|
-
token: myTokenForTaggedRunner2, // with this runner we want to run all generic jobs that do not require much processing power
|
|
2521
|
-
gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab
|
|
2522
|
-
instanceType: InstanceType.of(InstanceClass.T3, InstanceSize.MEDIUM), // exemplary smaller runner
|
|
2523
|
-
spotPrice: 0.044, // exemplary spot price
|
|
2524
|
-
requestSpotPrice: true,
|
|
2525
|
-
defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role
|
|
2526
|
-
},
|
|
2527
|
-
],
|
|
2533
|
+
cache: myBucket // // use a S3 bucket without public access and a retention defined, use one cache bucket for all you runners
|
|
2534
|
+
runnersWorkerProps: {
|
|
2535
|
+
token: myTokenForTaggedRunner1, // with this runner we only want to run jobs that require more power
|
|
2536
|
+
gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab
|
|
2537
|
+
instanceType: InstanceType.of(InstanceClass.M7I_FLEX, InstanceSize.XLARGE), // exemplary larger runner
|
|
2538
|
+
spotPrice: 0.2, // exemplary spot price
|
|
2539
|
+
requestSpotPrice: true,
|
|
2540
|
+
defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role
|
|
2541
|
+
},
|
|
2528
2542
|
});
|
|
2529
2543
|
```
|
|
2530
2544
|
|
|
@@ -9959,9 +9973,20 @@ const gitLabRunnerProps: GitLabRunnerProps = { ... }
|
|
|
9959
9973
|
|
|
9960
9974
|
| **Name** | **Type** | **Description** |
|
|
9961
9975
|
| --- | --- | --- |
|
|
9976
|
+
| <code><a href="#@rio-cloud/cdk-v2-constructs.GitLabRunnerProps.property.cache">cache</a></code> | <code>aws-cdk-lib.aws_s3.IBucket</code> | *No description.* |
|
|
9962
9977
|
| <code><a href="#@rio-cloud/cdk-v2-constructs.GitLabRunnerProps.property.env">env</a></code> | <code>aws-cdk-lib.Environment</code> | *No description.* |
|
|
9963
9978
|
| <code><a href="#@rio-cloud/cdk-v2-constructs.GitLabRunnerProps.property.managerInstanceType">managerInstanceType</a></code> | <code>aws-cdk-lib.aws_ec2.InstanceType</code> | *No description.* |
|
|
9964
|
-
| <code><a href="#@rio-cloud/cdk-v2-constructs.GitLabRunnerProps.property.runnersWorkerProps">runnersWorkerProps</a></code> | <code><a href="#@rio-cloud/cdk-v2-constructs.GitlabRunnerWorkerProps">GitlabRunnerWorkerProps</a
|
|
9979
|
+
| <code><a href="#@rio-cloud/cdk-v2-constructs.GitLabRunnerProps.property.runnersWorkerProps">runnersWorkerProps</a></code> | <code><a href="#@rio-cloud/cdk-v2-constructs.GitlabRunnerWorkerProps">GitlabRunnerWorkerProps</a></code> | *No description.* |
|
|
9980
|
+
|
|
9981
|
+
---
|
|
9982
|
+
|
|
9983
|
+
##### `cache`<sup>Required</sup> <a name="cache" id="@rio-cloud/cdk-v2-constructs.GitLabRunnerProps.property.cache"></a>
|
|
9984
|
+
|
|
9985
|
+
```typescript
|
|
9986
|
+
public readonly cache: IBucket;
|
|
9987
|
+
```
|
|
9988
|
+
|
|
9989
|
+
- *Type:* aws-cdk-lib.aws_s3.IBucket
|
|
9965
9990
|
|
|
9966
9991
|
---
|
|
9967
9992
|
|
|
@@ -9988,10 +10013,10 @@ public readonly managerInstanceType: InstanceType;
|
|
|
9988
10013
|
##### `runnersWorkerProps`<sup>Optional</sup> <a name="runnersWorkerProps" id="@rio-cloud/cdk-v2-constructs.GitLabRunnerProps.property.runnersWorkerProps"></a>
|
|
9989
10014
|
|
|
9990
10015
|
```typescript
|
|
9991
|
-
public readonly runnersWorkerProps: GitlabRunnerWorkerProps
|
|
10016
|
+
public readonly runnersWorkerProps: GitlabRunnerWorkerProps;
|
|
9992
10017
|
```
|
|
9993
10018
|
|
|
9994
|
-
- *Type:* <a href="#@rio-cloud/cdk-v2-constructs.GitlabRunnerWorkerProps">GitlabRunnerWorkerProps</a>
|
|
10019
|
+
- *Type:* <a href="#@rio-cloud/cdk-v2-constructs.GitlabRunnerWorkerProps">GitlabRunnerWorkerProps</a>
|
|
9995
10020
|
|
|
9996
10021
|
---
|
|
9997
10022
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Environment, Stack } from 'aws-cdk-lib';
|
|
2
2
|
import { InstanceType } from 'aws-cdk-lib/aws-ec2';
|
|
3
3
|
import { IRole } from 'aws-cdk-lib/aws-iam';
|
|
4
|
+
import { IBucket } from 'aws-cdk-lib/aws-s3';
|
|
4
5
|
import { IStringParameter } from 'aws-cdk-lib/aws-ssm';
|
|
5
6
|
import { Construct } from 'constructs';
|
|
6
7
|
/**
|
|
@@ -10,8 +11,9 @@ import { Construct } from 'constructs';
|
|
|
10
11
|
*/
|
|
11
12
|
export interface GitLabRunnerProps {
|
|
12
13
|
readonly env: Environment;
|
|
13
|
-
readonly runnersWorkerProps?: GitlabRunnerWorkerProps
|
|
14
|
+
readonly runnersWorkerProps?: GitlabRunnerWorkerProps;
|
|
14
15
|
readonly managerInstanceType?: InstanceType;
|
|
16
|
+
readonly cache: IBucket;
|
|
15
17
|
}
|
|
16
18
|
/**
|
|
17
19
|
* The GitlabRunnerWorkerProps interface provides a simplified GitLab Runner worker configuration
|
|
@@ -48,34 +50,48 @@ export type GitlabInstanceUrl = 'https://gitlab.cicd.man' | 'https://gitlab.coll
|
|
|
48
50
|
* minimal configuration with runner spot instance:
|
|
49
51
|
* ```ts
|
|
50
52
|
* new SpotServiceLinkedRole(stack, 'SpotLinkedRole');
|
|
53
|
+
* const myBucket = new Bucket(stack, 'MyShareRunnerCache', {
|
|
54
|
+
* enforceSSL: true,
|
|
55
|
+
* publicReadAccess: false,
|
|
56
|
+
* encryption: BucketEncryption.S3_MANAGED,
|
|
57
|
+
* lifecycleRules: [
|
|
58
|
+
* {
|
|
59
|
+
* enabled: true,
|
|
60
|
+
* expiration: Duration.days(30),
|
|
61
|
+
* },
|
|
62
|
+
* ],
|
|
63
|
+
* });
|
|
51
64
|
* new GitlabRunner(stack, 'GitLabRunner', {
|
|
52
|
-
* env: {account: '123456789012', region: 'eu-west-1'}
|
|
65
|
+
* env: {account: '123456789012', region: 'eu-west-1'},
|
|
66
|
+
* cache: myBucket // use a S3 bucket without public access and a retention defined, use one cache bucket for all you runners
|
|
53
67
|
* });
|
|
54
68
|
*```
|
|
55
69
|
* recommended:
|
|
56
70
|
* ```ts
|
|
57
71
|
* new SpotServiceLinkedRole(stack, 'SpotLinkedRole');
|
|
58
72
|
* const runnerRoles = new RunnerRoles(stack, 'RunnerRoles', {env: {account: '123456789012', region: 'eu-west-1'}});
|
|
73
|
+
* const myBucket = new Bucket(stack, 'MyShareRunnerCache', {
|
|
74
|
+
* enforceSSL: true,
|
|
75
|
+
* publicReadAccess: false,
|
|
76
|
+
* encryption: BucketEncryption.S3_MANAGED,
|
|
77
|
+
* lifecycleRules: [
|
|
78
|
+
* {
|
|
79
|
+
* enabled: true,
|
|
80
|
+
* expiration: Duration.days(30),
|
|
81
|
+
* },
|
|
82
|
+
* ],
|
|
83
|
+
* });
|
|
59
84
|
* new GitlabRunner(stack, 'GitLabRunner', {
|
|
60
85
|
* env: {account: '123456789012', region: 'eu-west-1'},
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
* {
|
|
71
|
-
* token: myTokenForTaggedRunner2, // with this runner we want to run all generic jobs that do not require much processing power
|
|
72
|
-
* gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab
|
|
73
|
-
* instanceType: InstanceType.of(InstanceClass.T3, InstanceSize.MEDIUM), // exemplary smaller runner
|
|
74
|
-
* spotPrice: 0.044, // exemplary spot price
|
|
75
|
-
* requestSpotPrice: true,
|
|
76
|
-
* defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role
|
|
77
|
-
* },
|
|
78
|
-
* ],
|
|
86
|
+
* cache: myBucket // // use a S3 bucket without public access and a retention defined, use one cache bucket for all you runners
|
|
87
|
+
* runnersWorkerProps: {
|
|
88
|
+
* token: myTokenForTaggedRunner1, // with this runner we only want to run jobs that require more power
|
|
89
|
+
* gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab
|
|
90
|
+
* instanceType: InstanceType.of(InstanceClass.M7I_FLEX, InstanceSize.XLARGE), // exemplary larger runner
|
|
91
|
+
* spotPrice: 0.2, // exemplary spot price
|
|
92
|
+
* requestSpotPrice: true,
|
|
93
|
+
* defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role
|
|
94
|
+
* },
|
|
79
95
|
* });
|
|
80
96
|
* ```
|
|
81
97
|
*/
|
|
@@ -17,121 +17,135 @@ const rio_landing_zone_1 = require("../../../rio-landing-zone");
|
|
|
17
17
|
* minimal configuration with runner spot instance:
|
|
18
18
|
* ```ts
|
|
19
19
|
* new SpotServiceLinkedRole(stack, 'SpotLinkedRole');
|
|
20
|
+
* const myBucket = new Bucket(stack, 'MyShareRunnerCache', {
|
|
21
|
+
* enforceSSL: true,
|
|
22
|
+
* publicReadAccess: false,
|
|
23
|
+
* encryption: BucketEncryption.S3_MANAGED,
|
|
24
|
+
* lifecycleRules: [
|
|
25
|
+
* {
|
|
26
|
+
* enabled: true,
|
|
27
|
+
* expiration: Duration.days(30),
|
|
28
|
+
* },
|
|
29
|
+
* ],
|
|
30
|
+
* });
|
|
20
31
|
* new GitlabRunner(stack, 'GitLabRunner', {
|
|
21
|
-
* env: {account: '123456789012', region: 'eu-west-1'}
|
|
32
|
+
* env: {account: '123456789012', region: 'eu-west-1'},
|
|
33
|
+
* cache: myBucket // use a S3 bucket without public access and a retention defined, use one cache bucket for all you runners
|
|
22
34
|
* });
|
|
23
35
|
*```
|
|
24
36
|
* recommended:
|
|
25
37
|
* ```ts
|
|
26
38
|
* new SpotServiceLinkedRole(stack, 'SpotLinkedRole');
|
|
27
39
|
* const runnerRoles = new RunnerRoles(stack, 'RunnerRoles', {env: {account: '123456789012', region: 'eu-west-1'}});
|
|
40
|
+
* const myBucket = new Bucket(stack, 'MyShareRunnerCache', {
|
|
41
|
+
* enforceSSL: true,
|
|
42
|
+
* publicReadAccess: false,
|
|
43
|
+
* encryption: BucketEncryption.S3_MANAGED,
|
|
44
|
+
* lifecycleRules: [
|
|
45
|
+
* {
|
|
46
|
+
* enabled: true,
|
|
47
|
+
* expiration: Duration.days(30),
|
|
48
|
+
* },
|
|
49
|
+
* ],
|
|
50
|
+
* });
|
|
28
51
|
* new GitlabRunner(stack, 'GitLabRunner', {
|
|
29
52
|
* env: {account: '123456789012', region: 'eu-west-1'},
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
* {
|
|
40
|
-
* token: myTokenForTaggedRunner2, // with this runner we want to run all generic jobs that do not require much processing power
|
|
41
|
-
* gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab
|
|
42
|
-
* instanceType: InstanceType.of(InstanceClass.T3, InstanceSize.MEDIUM), // exemplary smaller runner
|
|
43
|
-
* spotPrice: 0.044, // exemplary spot price
|
|
44
|
-
* requestSpotPrice: true,
|
|
45
|
-
* defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role
|
|
46
|
-
* },
|
|
47
|
-
* ],
|
|
53
|
+
* cache: myBucket // // use a S3 bucket without public access and a retention defined, use one cache bucket for all you runners
|
|
54
|
+
* runnersWorkerProps: {
|
|
55
|
+
* token: myTokenForTaggedRunner1, // with this runner we only want to run jobs that require more power
|
|
56
|
+
* gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab
|
|
57
|
+
* instanceType: InstanceType.of(InstanceClass.M7I_FLEX, InstanceSize.XLARGE), // exemplary larger runner
|
|
58
|
+
* spotPrice: 0.2, // exemplary spot price
|
|
59
|
+
* requestSpotPrice: true,
|
|
60
|
+
* defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role
|
|
61
|
+
* },
|
|
48
62
|
* });
|
|
49
63
|
* ```
|
|
50
64
|
*/
|
|
51
65
|
class GitlabRunner extends constructs_1.Construct {
|
|
52
66
|
constructor(scope, id, props) {
|
|
53
67
|
super(scope, id);
|
|
54
|
-
this.autoscalingConfig = [
|
|
55
|
-
|
|
56
|
-
periods: ['* * 7-24 * * mon-fri *'],
|
|
68
|
+
this.autoscalingConfig = [{
|
|
69
|
+
periods: ['* * 7-22 * * mon-fri *'],
|
|
57
70
|
timezone: 'Europe/Berlin',
|
|
58
|
-
}
|
|
59
|
-
];
|
|
71
|
+
}];
|
|
60
72
|
const vpc = rio_landing_zone_1.RioLandingZone.getDefaultVpc(scope);
|
|
61
73
|
const runnerConfig = props.runnersWorkerProps
|
|
62
74
|
? this.createWorkerConfigurations(props.runnersWorkerProps, props.env)
|
|
63
75
|
: this.getDefaultRunnerWorkerConfig(props.env);
|
|
64
76
|
const managerInstance = props.managerInstanceType ??
|
|
65
77
|
aws_ec2_1.InstanceType.of(aws_ec2_1.InstanceClass.T3, aws_ec2_1.InstanceSize.MICRO);
|
|
66
|
-
new cdk_autoscaling_gitlab_runner_1.GitlabRunnerAutoscaling(scope, `GLR${scope.stackName}`, {
|
|
67
|
-
runners: runnerConfig,
|
|
78
|
+
const runner = new cdk_autoscaling_gitlab_runner_1.GitlabRunnerAutoscaling(scope, `GLR${scope.stackName}`, {
|
|
79
|
+
runners: [runnerConfig],
|
|
68
80
|
network: {
|
|
69
81
|
vpc: vpc,
|
|
70
82
|
},
|
|
71
83
|
manager: {
|
|
72
84
|
instanceType: managerInstance,
|
|
73
85
|
},
|
|
86
|
+
cache: { bucket: props.cache },
|
|
74
87
|
checkInterval: 30, // check every 30s for pending jobs
|
|
75
88
|
concurrent: 300, // Global limit of concurrent jobs,
|
|
76
89
|
});
|
|
90
|
+
// due to the new registration process we have to register the runner by running explicit commands on start of the manager
|
|
91
|
+
runner.manager.userData.addCommands('cp /etc/gitlab-runner/config.toml /etc/gitlab-runner/config_back.toml', // avoid toml merge conflicts
|
|
92
|
+
`gitlab-runner register --non-interactive --template-config /etc/gitlab-runner/config_back.toml --token ${props.runnersWorkerProps?.token.stringValue}`, 'gitlab-runner restart');
|
|
77
93
|
}
|
|
78
94
|
createWorkerConfigurations(workerProps, env) {
|
|
79
|
-
return
|
|
80
|
-
token:
|
|
81
|
-
role:
|
|
95
|
+
return {
|
|
96
|
+
token: workerProps.token,
|
|
97
|
+
role: workerProps.defaultWorkerRole,
|
|
82
98
|
configuration: {
|
|
83
|
-
url:
|
|
99
|
+
url: workerProps.gitInstanceUrl,
|
|
84
100
|
machine: {
|
|
85
101
|
autoscaling: this.autoscalingConfig,
|
|
86
|
-
maxBuilds:
|
|
87
|
-
idleCount:
|
|
88
|
-
idleTime:
|
|
102
|
+
maxBuilds: workerProps.maxBuilds ?? 10,
|
|
103
|
+
idleCount: workerProps.maxIdleInstance ?? 5,
|
|
104
|
+
idleTime: workerProps.maxIdleTime ?? 900,
|
|
89
105
|
machineOptions: {
|
|
90
|
-
requestSpotInstance:
|
|
91
|
-
spotPrice:
|
|
106
|
+
requestSpotInstance: workerProps.requestSpotPrice,
|
|
107
|
+
spotPrice: workerProps.spotPrice,
|
|
92
108
|
},
|
|
93
109
|
},
|
|
94
110
|
environment: [
|
|
95
111
|
'DOCKER_DRIVER=overlay2',
|
|
96
112
|
'DOCKER_TLS_DIRCE=/certs',
|
|
97
|
-
`DOCKER_AUTH_CONFIG={"credHelpers": { "public.ecr.aws": "ecr-login", "${env.account}.dkr.ecr
|
|
113
|
+
`DOCKER_AUTH_CONFIG={"credHelpers": { "public.ecr.aws": "ecr-login", "${env.account}.dkr.ecr.${env.region}.amazonaws.com": "ecr-login" } }`,
|
|
98
114
|
],
|
|
99
115
|
},
|
|
100
|
-
instanceType:
|
|
101
|
-
}
|
|
116
|
+
instanceType: workerProps.instanceType,
|
|
117
|
+
};
|
|
102
118
|
}
|
|
103
119
|
getDefaultRunnerWorkerConfig(env) {
|
|
104
120
|
const gitLabRunnerTokenParameter = aws_ssm_1.StringParameter.fromStringParameterAttributes(this, 'RunnerToken', {
|
|
105
121
|
parameterName: '/config/gitlab-runner-cdk/token',
|
|
106
122
|
});
|
|
107
|
-
return
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
spotPrice: 0.09,
|
|
121
|
-
},
|
|
123
|
+
return {
|
|
124
|
+
token: gitLabRunnerTokenParameter,
|
|
125
|
+
configuration: {
|
|
126
|
+
url: 'https://gitlab.cicd.man',
|
|
127
|
+
limit: 0,
|
|
128
|
+
machine: {
|
|
129
|
+
maxBuilds: 10,
|
|
130
|
+
autoscaling: this.autoscalingConfig,
|
|
131
|
+
idleCount: 5,
|
|
132
|
+
idleTime: 900,
|
|
133
|
+
machineOptions: {
|
|
134
|
+
requestSpotInstance: true,
|
|
135
|
+
spotPrice: 0.09,
|
|
122
136
|
},
|
|
123
|
-
environment: [
|
|
124
|
-
'DOCKER_DRIVER=overlay2',
|
|
125
|
-
'DOCKER_TLS_DIRCE=/certs',
|
|
126
|
-
`DOCKER_AUTH_CONFIG={"credHelpers": { "public.ecr.aws": "ecr-login", "${env.account}.dkr.ecr.<region>.amazonaws.com": "ecr-login" } }`,
|
|
127
|
-
],
|
|
128
137
|
},
|
|
129
|
-
|
|
138
|
+
environment: [
|
|
139
|
+
'DOCKER_DRIVER=overlay2',
|
|
140
|
+
'DOCKER_TLS_DIRCE=/certs',
|
|
141
|
+
`DOCKER_AUTH_CONFIG={"credHelpers": { "public.ecr.aws": "ecr-login", "${env.account}.dkr.ecr.${env.region}.amazonaws.com": "ecr-login" } }`,
|
|
142
|
+
],
|
|
130
143
|
},
|
|
131
|
-
|
|
144
|
+
instanceType: aws_ec2_1.InstanceType.of(aws_ec2_1.InstanceClass.T3, aws_ec2_1.InstanceSize.LARGE),
|
|
145
|
+
};
|
|
132
146
|
}
|
|
133
147
|
}
|
|
134
148
|
exports.GitlabRunner = GitlabRunner;
|
|
135
149
|
_a = JSII_RTTI_SYMBOL_1;
|
|
136
150
|
GitlabRunner[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.GitlabRunner", version: "0.0.0" };
|
|
137
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b3NjYWxpbmctcnVubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbnRyaWJ1dGlvbnMvc21hcnQtcm91dGUvZ2l0bGFiLXJ1bm5lci9hdXRvc2NhbGluZy1ydW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2REFBNkQ7QUFDN0QsNEZBSWtEO0FBRWxELGlEQUFnRjtBQUVoRixpREFBd0U7QUFDeEUsMkNBQXVDO0FBQ3ZDLGdFQUEyRDtBQTRDM0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0NHO0FBQ0gsTUFBYSxZQUFhLFNBQVEsc0JBQVM7SUFPekMsWUFBWSxLQUFZLEVBQUUsRUFBVSxFQUFFLEtBQXdCO1FBQzVELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFQWCxzQkFBaUIsR0FBK0I7WUFDdEQ7Z0JBQ0UsT0FBTyxFQUFFLENBQUMsd0JBQXdCLENBQUM7Z0JBQ25DLFFBQVEsRUFBRSxlQUFlO2FBQzFCO1NBQ0YsQ0FBQztRQUlBLE1BQU0sR0FBRyxHQUFHLGlDQUFjLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWhELE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxrQkFBa0I7WUFDM0MsQ0FBQyxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUN0RSxDQUFDLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVqRCxNQUFNLGVBQWUsR0FDbkIsS0FBSyxDQUFDLG1CQUFtQjtZQUN6QixzQkFBWSxDQUFDLEVBQUUsQ0FBQyx1QkFBYSxDQUFDLEVBQUUsRUFBRSxzQkFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXhELElBQUksdURBQXVCLENBQUMsS0FBSyxFQUFFLE1BQU0sS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQzFELE9BQU8sRUFBRSxZQUFZO1lBQ3JCLE9BQU8sRUFBRTtnQkFDUCxHQUFHLEVBQUUsR0FBRzthQUNUO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLFlBQVksRUFBRSxlQUFlO2FBQzlCO1lBQ0QsYUFBYSxFQUFFLEVBQUUsRUFBRSxtQ0FBbUM7WUFDdEQsVUFBVSxFQUFFLEdBQUcsRUFBRSxtQ0FBbUM7U0FDckQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLDBCQUEwQixDQUNoQyxXQUFzQyxFQUN0QyxHQUFnQjtRQUVoQixPQUFPLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDL0IsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO1lBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsaUJBQWlCO1lBQzNCLGFBQWEsRUFBRTtnQkFDYixHQUFHLEVBQUUsR0FBRyxDQUFDLGNBQWM7Z0JBQ3ZCLE9BQU8sRUFBRTtvQkFDUCxXQUFXLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtvQkFDbkMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTLElBQUksRUFBRTtvQkFDOUIsU0FBUyxFQUFFLEdBQUcsQ0FBQyxlQUFlLElBQUksQ0FBQztvQkFDbkMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxXQUFXLElBQUksR0FBRztvQkFDaEMsY0FBYyxFQUFFO3dCQUNkLG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxnQkFBZ0I7d0JBQ3pDLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUztxQkFDekI7aUJBQ0Y7Z0JBQ0QsV0FBVyxFQUFFO29CQUNYLHdCQUF3QjtvQkFDeEIseUJBQXlCO29CQUN6Qix3RUFDRSxHQUFHLENBQUMsT0FDTixtREFBbUQ7aUJBQ3BEO2FBQ0Y7WUFDRCxZQUFZLEVBQUUsR0FBRyxDQUFDLFlBQVk7U0FDL0IsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRU8sNEJBQTRCLENBQ2xDLEdBQWdCO1FBRWhCLE1BQU0sMEJBQTBCLEdBQzlCLHlCQUFlLENBQUMsNkJBQTZCLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtZQUNqRSxhQUFhLEVBQUUsaUNBQWlDO1NBQ2pELENBQUMsQ0FBQztRQUNMLE9BQU87WUFDTDtnQkFDRSxLQUFLLEVBQUUsMEJBQTBCO2dCQUNqQyxhQUFhLEVBQUU7b0JBQ2IsR0FBRyxFQUFFLHlCQUF5QjtvQkFDOUIsS0FBSyxFQUFFLENBQUM7b0JBQ1IsT0FBTyxFQUFFO3dCQUNQLFNBQVMsRUFBRSxFQUFFO3dCQUNiLFdBQVcsRUFBRSxJQUFJLENBQUMsaUJBQWlCO3dCQUNuQyxTQUFTLEVBQUUsQ0FBQzt3QkFDWixRQUFRLEVBQUUsR0FBRzt3QkFDYixjQUFjLEVBQUU7NEJBQ2QsbUJBQW1CLEVBQUUsSUFBSTs0QkFDekIsU0FBUyxFQUFFLElBQUk7eUJBQ2hCO3FCQUNGO29CQUNELFdBQVcsRUFBRTt3QkFDWCx3QkFBd0I7d0JBQ3hCLHlCQUF5Qjt3QkFDekIsd0VBQ0UsR0FBRyxDQUFDLE9BQ04sbURBQW1EO3FCQUNwRDtpQkFDRjtnQkFDRCxZQUFZLEVBQUUsc0JBQVksQ0FBQyxFQUFFLENBQUMsdUJBQWEsQ0FBQyxFQUFFLEVBQUUsc0JBQVksQ0FBQyxLQUFLLENBQUM7YUFDcEU7U0FDRixDQUFDO0lBQ0osQ0FBQzs7QUFsR0gsb0NBbUdDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuaW1wb3J0IHtcbiAgQXV0b3NjYWxpbmdDb25maWd1cmF0aW9uLFxuICBHaXRsYWJSdW5uZXJBdXRvc2NhbGluZyxcbiAgR2l0bGFiUnVubmVyQXV0b3NjYWxpbmdKb2JSdW5uZXJQcm9wcyxcbn0gZnJvbSAnQHBlcHBlcml6ZS9jZGstYXV0b3NjYWxpbmctZ2l0bGFiLXJ1bm5lcic7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCwgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBJbnN0YW5jZUNsYXNzLCBJbnN0YW5jZVNpemUsIEluc3RhbmNlVHlwZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgSVJvbGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IElTdHJpbmdQYXJhbWV0ZXIsIFN0cmluZ1BhcmFtZXRlciB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zc20nO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBSaW9MYW5kaW5nWm9uZSB9IGZyb20gJy4uLy4uLy4uL3Jpby1sYW5kaW5nLXpvbmUnO1xuXG4vKipcbiAqIFRoZSBHaXRMYWJSdW5uZXJQcm9wcyByZXF1aXJlIHRoZSBWUEMgSUQsIGEgZGVmaW5lZCBlbnZpcm9ubWVudCBvZiBhY2NvdW50IGFuZCByZWdpb24sIG9wdGlvbmFsXG4gKiBydW5uZXIgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uYWxseSB0aGUgR2l0TGFiIFJ1bm5lciBNYW5hZ2VyIGluc3RhbmNlIHR5cGUuIEJ5IGRlZmF1bHQsIGEgVDMgTWljcm8gaW5zdGFuY2Ugd2lsbCBiZSB1c2VkLlxuICogRm9yIGxhcmdlciB3b3JrbG9hZHMgYW5kIHZlcnkgYWN0aXZlIHRlYW1zIGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBUMyBTbWFsbCBmb3IgdGhlIG1hbmFnZXIgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHaXRMYWJSdW5uZXJQcm9wcyB7XG4gIHJlYWRvbmx5IGVudjogRW52aXJvbm1lbnQ7XG4gIHJlYWRvbmx5IHJ1bm5lcnNXb3JrZXJQcm9wcz86IEdpdGxhYlJ1bm5lcldvcmtlclByb3BzW107XG4gIHJlYWRvbmx5IG1hbmFnZXJJbnN0YW5jZVR5cGU/OiBJbnN0YW5jZVR5cGU7XG59XG5cbi8qKlxuICogVGhlIEdpdGxhYlJ1bm5lcldvcmtlclByb3BzIGludGVyZmFjZSBwcm92aWRlcyBhIHNpbXBsaWZpZWQgR2l0TGFiIFJ1bm5lciB3b3JrZXIgY29uZmlndXJhdGlvblxuICogcmVxdWlyaW5nIGEgdG9rZW4gYXMgYW4gU1NNIHBhcmFtZXRlciwgb25lIG9mIHRoZSB2YWxpZCBnaXRsYWIgVVJMcywgaW5zdGFuY2Ugb2YgeW91IGNob2ljZSwgdGhlIGRlc2lyZWQgbWF4IHNwb3QgcHJpY2UsXG4gKiB3aGV0aGVyIHRvIHVzZSBzcG90IGluc3RhbmNlIG9yIG5vdCBhbmQgYSBkZWZhdWx0IHJvbGUuXG4gKiBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIFJ1bm5lclJvbGVzIGNvbnN0cnVjdCwgYW5kIGl0J3MgZXhwb3NlZCBkZWZhdWx0IHJ1bm5lciByb2xlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdpdGxhYlJ1bm5lcldvcmtlclByb3BzIHtcbiAgLyoqIFRoZSBTU00gU3RyaW5nUGFyYW1ldGVyIHdpdGggdGhlIHJlZ2lzdGVyZWQgcnVubmVyIHRva2VuICAqL1xuICByZWFkb25seSB0b2tlbjogSVN0cmluZ1BhcmFtZXRlcjtcbiAgLyoqIFRoZSBHaXRMYWIgaW5zdGFuY2UgVVJMLCBlaXRoZXIgaHR0cHM6Ly9naXRsYWIuY2ljZC5tYW4gb3IgaHR0cHM6Ly9naXRsYWIuY29sbGFib3JhdGlvbmxheWVyLXRyYXRvbi5jb20gKi9cbiAgcmVhZG9ubHkgZ2l0SW5zdGFuY2VVcmw6IEdpdGxhYkluc3RhbmNlVXJsO1xuICAvKiogVGhlIGluc3RhbmNlIHR5cGUgZm9yIHRoZSBydW5uZXIgd29ya2VyICovXG4gIHJlYWRvbmx5IGluc3RhbmNlVHlwZTogSW5zdGFuY2VUeXBlO1xuICAvKiogVGhlIGRlc2lyZWQgbWF4IHNwb3QgcHJpY2UgKi9cbiAgcmVhZG9ubHkgc3BvdFByaWNlOiBudW1iZXI7XG4gIC8qKiBXaGV0aGVyIHRvIHVzZSBzcG90IGluc3RhbmNlIG9yIG5vdCwgUmVxdWlyZXMgU2VydmljZUxpbmtlZCBSb2xlIGZvciBFQzIgU3BvdCB0byBiZSBkZXBsb3llZCBpbiB0aGUgYWNjb3VudCAqL1xuICByZWFkb25seSByZXF1ZXN0U3BvdFByaWNlOiBib29sZWFuO1xuICAvKiogVGhlIGRlZmF1bHQgcm9sZSBmb3IgdGhlIHJ1bm5lciB3b3JrZXIgd2hlbiBzcGF3bmVkICovXG4gIHJlYWRvbmx5IGRlZmF1bHRXb3JrZXJSb2xlOiBJUm9sZTtcbiAgLyoqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBidWlsZHMgZm9yIGFuIGluc3RhbmNlIGJlZm9yZSBpdCBoYXMgdG8gYmUgZGVjb21taXNzaW9uZWQuIERlZmF1bHQgMTAgKi9cbiAgcmVhZG9ubHkgbWF4QnVpbGRzPzogbnVtYmVyO1xuICAvKiogVGhlIG1heGltdW0gbnVtYmVyIG9mIGluc3RhbmNlcyB0byBrZWVwIGlkbGUgZm9yIG5ldyBpbmNvbWluZyBqb2JzLiBEZWZhdWx0IDUgKi9cbiAgcmVhZG9ubHkgbWF4SWRsZUluc3RhbmNlPzogbnVtYmVyO1xuICAvKiogVGhlIG1heGltdW0gaWRsZSB0aW1lIHNlY29uZHMgZm9yIGFuIGluc3RhbmNlLiBEZWZhdWx0IDkwMCBzZWNvbmRzICovXG4gIHJlYWRvbmx5IG1heElkbGVUaW1lPzogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBHaXRsYWJJbnN0YW5jZVVybCA9XG4gIHwgJ2h0dHBzOi8vZ2l0bGFiLmNpY2QubWFuJ1xuICB8ICdodHRwczovL2dpdGxhYi5jb2xsYWJvcmF0aW9ubGF5ZXItdHJhdG9uLmNvbSc7XG5cbi8qKlxuICogVGhlIGNvbnN0cnVjdCBjcmVhdGUgdGhlIEdpdExhYlJ1bm5lciBNYW5hZ2VyIGluc3RhbmNlIHdoaWNoIHdpbGwgYXV0b3NjYWxlIFJ1bm5lciBpbnN0YW5jZXMgYmFzZWQgb24gdGhlIGNvbmZpZ3VyYXRpb24uXG4gKiBCeSBkZWZhdWx0LCB0aGUgY29uc3RydWN0IHdpbGwgY3JlYXRlIGEgUnVubmVyIHdpdGggYSBtYW5hZ2VyIFQzIE1pY3JvIGluc3RhbmNlIHdoaWNoIHdpbGwgYmUgZW5hYmxlZCB0byBzcGF3biBUMyBMYXJnZSBSdW5uZXJcbiAqIHdvcmtlciBzcG90IGluc3RhbmNlLiBUaGUgZGVmYXVsdCBydW5uZXIgUm9sZSBoYXMgb25seSB0aGUgcGVybWlzc2lvbnMgdG8gdXBsb2FkIGFuZCBkb3dubG9hZCBmcm9tIHRoZSBTMyBydW5uZXIgY2FjaGUuXG4gKlxuICogbWluaW1hbCBjb25maWd1cmF0aW9uIHdpdGggcnVubmVyIHNwb3QgaW5zdGFuY2U6XG4gKiBgYGB0c1xuICogbmV3IFNwb3RTZXJ2aWNlTGlua2VkUm9sZShzdGFjaywgJ1Nwb3RMaW5rZWRSb2xlJyk7XG4gKiBuZXcgR2l0bGFiUnVubmVyKHN0YWNrLCAnR2l0TGFiUnVubmVyJywge1xuICogIGVudjoge2FjY291bnQ6ICcxMjM0NTY3ODkwMTInLCByZWdpb246ICdldS13ZXN0LTEnfVxuICogfSk7XG4gKmBgYFxuICogcmVjb21tZW5kZWQ6XG4gKiBgYGB0c1xuICogbmV3IFNwb3RTZXJ2aWNlTGlua2VkUm9sZShzdGFjaywgJ1Nwb3RMaW5rZWRSb2xlJyk7XG4gKiBjb25zdCBydW5uZXJSb2xlcyA9IG5ldyBSdW5uZXJSb2xlcyhzdGFjaywgJ1J1bm5lclJvbGVzJywge2Vudjoge2FjY291bnQ6ICcxMjM0NTY3ODkwMTInLCByZWdpb246ICdldS13ZXN0LTEnfX0pO1xuICogbmV3IEdpdGxhYlJ1bm5lcihzdGFjaywgJ0dpdExhYlJ1bm5lcicsIHtcbiAqICBlbnY6IHthY2NvdW50OiAnMTIzNDU2Nzg5MDEyJywgcmVnaW9uOiAnZXUtd2VzdC0xJ30sXG4gKiAgcnVubmVyc1dvcmtlclByb3BzOiBbXG4gKiAgICB7XG4gKiAgICAgIHRva2VuOiBteVRva2VuRm9yVGFnZ2VkUnVubmVyMSwgLy8gd2l0aCB0aGlzIHJ1bm5lciB3ZSBvbmx5IHdhbnQgdG8gcnVuIGpvYnMgdGhhdCByZXF1aXJlIG1vcmUgcG93ZXJcbiAqICAgICAgZ2l0SW5zdGFuY2VVcmw6ICdodHRwczovL2dpdGxhYi5jaWNkLm1hbicsIC8vIG9yIHRoZSBUcmF0b24gR2l0TGFiXG4gKiAgICAgIGluc3RhbmNlVHlwZTogSW5zdGFuY2VUeXBlLm9mKEluc3RhbmNlQ2xhc3MuTTdJX0ZMRVgsIEluc3RhbmNlU2l6ZS5YTEFSR0UpLCAvLyBleGVtcGxhcnkgbGFyZ2VyIHJ1bm5lclxuICogICAgICBzcG90UHJpY2U6IDAuMiwgLy8gZXhlbXBsYXJ5IHNwb3QgcHJpY2VcbiAqICAgICAgcmVxdWVzdFNwb3RQcmljZTogdHJ1ZSxcbiAqICAgICAgZGVmYXVsdFdvcmtlclJvbGU6IHJ1bm5lclJvbGVzLnJ1bm5lckJhc2VSb2xlLCAvLyB1c2UgdGhlIGJhc2Ugcm9sZVxuICogICAgfSxcbiAqICAgIHtcbiAqICAgICAgdG9rZW46IG15VG9rZW5Gb3JUYWdnZWRSdW5uZXIyLCAvLyB3aXRoIHRoaXMgcnVubmVyIHdlIHdhbnQgdG8gcnVuIGFsbCBnZW5lcmljIGpvYnMgdGhhdCBkbyBub3QgcmVxdWlyZSBtdWNoIHByb2Nlc3NpbmcgcG93ZXJcbiAqICAgICAgZ2l0SW5zdGFuY2VVcmw6ICdodHRwczovL2dpdGxhYi5jaWNkLm1hbicsIC8vIG9yIHRoZSBUcmF0b24gR2l0TGFiXG4gKiAgICAgIGluc3RhbmNlVHlwZTogSW5zdGFuY2VUeXBlLm9mKEluc3RhbmNlQ2xhc3MuVDMsIEluc3RhbmNlU2l6ZS5NRURJVU0pLCAvLyBleGVtcGxhcnkgc21hbGxlciBydW5uZXJcbiAqICAgICAgc3BvdFByaWNlOiAwLjA0NCwgLy8gZXhlbXBsYXJ5IHNwb3QgcHJpY2VcbiAqICAgICAgcmVxdWVzdFNwb3RQcmljZTogdHJ1ZSxcbiAqICAgICAgZGVmYXVsdFdvcmtlclJvbGU6IHJ1bm5lclJvbGVzLnJ1bm5lckJhc2VSb2xlLCAvLyB1c2UgdGhlIGJhc2Ugcm9sZVxuICogICAgfSxcbiAqICBdLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIEdpdGxhYlJ1bm5lciBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHByaXZhdGUgYXV0b3NjYWxpbmdDb25maWc6IEF1dG9zY2FsaW5nQ29uZmlndXJhdGlvbltdID0gW1xuICAgIHtcbiAgICAgIHBlcmlvZHM6IFsnKiAqIDctMjQgKiAqIG1vbi1mcmkgKiddLFxuICAgICAgdGltZXpvbmU6ICdFdXJvcGUvQmVybGluJyxcbiAgICB9LFxuICBdO1xuICBjb25zdHJ1Y3RvcihzY29wZTogU3RhY2ssIGlkOiBzdHJpbmcsIHByb3BzOiBHaXRMYWJSdW5uZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCB2cGMgPSBSaW9MYW5kaW5nWm9uZS5nZXREZWZhdWx0VnBjKHNjb3BlKTtcblxuICAgIGNvbnN0IHJ1bm5lckNvbmZpZyA9IHByb3BzLnJ1bm5lcnNXb3JrZXJQcm9wc1xuICAgICAgPyB0aGlzLmNyZWF0ZVdvcmtlckNvbmZpZ3VyYXRpb25zKHByb3BzLnJ1bm5lcnNXb3JrZXJQcm9wcywgcHJvcHMuZW52KVxuICAgICAgOiB0aGlzLmdldERlZmF1bHRSdW5uZXJXb3JrZXJDb25maWcocHJvcHMuZW52KTtcblxuICAgIGNvbnN0IG1hbmFnZXJJbnN0YW5jZSA9XG4gICAgICBwcm9wcy5tYW5hZ2VySW5zdGFuY2VUeXBlID8/XG4gICAgICBJbnN0YW5jZVR5cGUub2YoSW5zdGFuY2VDbGFzcy5UMywgSW5zdGFuY2VTaXplLk1JQ1JPKTtcblxuICAgIG5ldyBHaXRsYWJSdW5uZXJBdXRvc2NhbGluZyhzY29wZSwgYEdMUiR7c2NvcGUuc3RhY2tOYW1lfWAsIHtcbiAgICAgIHJ1bm5lcnM6IHJ1bm5lckNvbmZpZyxcbiAgICAgIG5ldHdvcms6IHtcbiAgICAgICAgdnBjOiB2cGMsXG4gICAgICB9LFxuICAgICAgbWFuYWdlcjoge1xuICAgICAgICBpbnN0YW5jZVR5cGU6IG1hbmFnZXJJbnN0YW5jZSxcbiAgICAgIH0sXG4gICAgICBjaGVja0ludGVydmFsOiAzMCwgLy8gY2hlY2sgZXZlcnkgMzBzIGZvciBwZW5kaW5nIGpvYnNcbiAgICAgIGNvbmN1cnJlbnQ6IDMwMCwgLy8gR2xvYmFsIGxpbWl0IG9mIGNvbmN1cnJlbnQgam9icyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlV29ya2VyQ29uZmlndXJhdGlvbnMoXG4gICAgd29ya2VyUHJvcHM6IEdpdGxhYlJ1bm5lcldvcmtlclByb3BzW10sXG4gICAgZW52OiBFbnZpcm9ubWVudCxcbiAgKTogR2l0bGFiUnVubmVyQXV0b3NjYWxpbmdKb2JSdW5uZXJQcm9wc1tdIHtcbiAgICByZXR1cm4gd29ya2VyUHJvcHMubWFwKCh2YWwpID0+ICh7XG4gICAgICB0b2tlbjogdmFsLnRva2VuLFxuICAgICAgcm9sZTogdmFsLmRlZmF1bHRXb3JrZXJSb2xlLFxuICAgICAgY29uZmlndXJhdGlvbjoge1xuICAgICAgICB1cmw6IHZhbC5naXRJbnN0YW5jZVVybCxcbiAgICAgICAgbWFjaGluZToge1xuICAgICAgICAgIGF1dG9zY2FsaW5nOiB0aGlzLmF1dG9zY2FsaW5nQ29uZmlnLFxuICAgICAgICAgIG1heEJ1aWxkczogdmFsLm1heEJ1aWxkcyA/PyAxMCxcbiAgICAgICAgICBpZGxlQ291bnQ6IHZhbC5tYXhJZGxlSW5zdGFuY2UgPz8gNSxcbiAgICAgICAgICBpZGxlVGltZTogdmFsLm1heElkbGVUaW1lID8/IDkwMCxcbiAgICAgICAgICBtYWNoaW5lT3B0aW9uczoge1xuICAgICAgICAgICAgcmVxdWVzdFNwb3RJbnN0YW5jZTogdmFsLnJlcXVlc3RTcG90UHJpY2UsXG4gICAgICAgICAgICBzcG90UHJpY2U6IHZhbC5zcG90UHJpY2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IFtcbiAgICAgICAgICAnRE9DS0VSX0RSSVZFUj1vdmVybGF5MicsXG4gICAgICAgICAgJ0RPQ0tFUl9UTFNfRElSQ0U9L2NlcnRzJyxcbiAgICAgICAgICBgRE9DS0VSX0FVVEhfQ09ORklHPXtcImNyZWRIZWxwZXJzXCI6IHsgXCJwdWJsaWMuZWNyLmF3c1wiOiBcImVjci1sb2dpblwiLCBcIiR7XG4gICAgICAgICAgICBlbnYuYWNjb3VudFxuICAgICAgICAgIH0uZGtyLmVjci48cmVnaW9uPi5hbWF6b25hd3MuY29tXCI6IFwiZWNyLWxvZ2luXCIgfSB9YCxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBpbnN0YW5jZVR5cGU6IHZhbC5pbnN0YW5jZVR5cGUsXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0UnVubmVyV29ya2VyQ29uZmlnKFxuICAgIGVudjogRW52aXJvbm1lbnQsXG4gICk6IEdpdGxhYlJ1bm5lckF1dG9zY2FsaW5nSm9iUnVubmVyUHJvcHNbXSB7XG4gICAgY29uc3QgZ2l0TGFiUnVubmVyVG9rZW5QYXJhbWV0ZXIgPVxuICAgICAgU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJBdHRyaWJ1dGVzKHRoaXMsICdSdW5uZXJUb2tlbicsIHtcbiAgICAgICAgcGFyYW1ldGVyTmFtZTogJy9jb25maWcvZ2l0bGFiLXJ1bm5lci1jZGsvdG9rZW4nLFxuICAgICAgfSk7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgdG9rZW46IGdpdExhYlJ1bm5lclRva2VuUGFyYW1ldGVyLFxuICAgICAgICBjb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgdXJsOiAnaHR0cHM6Ly9naXRsYWIuY2ljZC5tYW4nLFxuICAgICAgICAgIGxpbWl0OiAwLFxuICAgICAgICAgIG1hY2hpbmU6IHtcbiAgICAgICAgICAgIG1heEJ1aWxkczogMTAsXG4gICAgICAgICAgICBhdXRvc2NhbGluZzogdGhpcy5hdXRvc2NhbGluZ0NvbmZpZyxcbiAgICAgICAgICAgIGlkbGVDb3VudDogNSxcbiAgICAgICAgICAgIGlkbGVUaW1lOiA5MDAsXG4gICAgICAgICAgICBtYWNoaW5lT3B0aW9uczoge1xuICAgICAgICAgICAgICByZXF1ZXN0U3BvdEluc3RhbmNlOiB0cnVlLFxuICAgICAgICAgICAgICBzcG90UHJpY2U6IDAuMDksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZW52aXJvbm1lbnQ6IFtcbiAgICAgICAgICAgICdET0NLRVJfRFJJVkVSPW92ZXJsYXkyJyxcbiAgICAgICAgICAgICdET0NLRVJfVExTX0RJUkNFPS9jZXJ0cycsXG4gICAgICAgICAgICBgRE9DS0VSX0FVVEhfQ09ORklHPXtcImNyZWRIZWxwZXJzXCI6IHsgXCJwdWJsaWMuZWNyLmF3c1wiOiBcImVjci1sb2dpblwiLCBcIiR7XG4gICAgICAgICAgICAgIGVudi5hY2NvdW50XG4gICAgICAgICAgICB9LmRrci5lY3IuPHJlZ2lvbj4uYW1hem9uYXdzLmNvbVwiOiBcImVjci1sb2dpblwiIH0gfWAsXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgaW5zdGFuY2VUeXBlOiBJbnN0YW5jZVR5cGUub2YoSW5zdGFuY2VDbGFzcy5UMywgSW5zdGFuY2VTaXplLkxBUkdFKSxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxufVxuIl19
|
|
151
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b3NjYWxpbmctcnVubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbnRyaWJ1dGlvbnMvc21hcnQtcm91dGUvZ2l0bGFiLXJ1bm5lci9hdXRvc2NhbGluZy1ydW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2REFBNkQ7QUFDN0QsNEZBSWtEO0FBRWxELGlEQUFnRjtBQUdoRixpREFBd0U7QUFDeEUsMkNBQXVDO0FBQ3ZDLGdFQUEyRDtBQTZDM0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvREc7QUFDSCxNQUFhLFlBQWEsU0FBUSxzQkFBUztJQUt6QyxZQUFZLEtBQVksRUFBRSxFQUFXLEVBQUUsS0FBd0I7UUFDN0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUxYLHNCQUFpQixHQUErQixDQUFDO2dCQUN2RCxPQUFPLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztnQkFDbkMsUUFBUSxFQUFFLGVBQWU7YUFDMUIsQ0FBQyxDQUFDO1FBSUQsTUFBTSxHQUFHLEdBQUcsaUNBQWMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFaEQsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLGtCQUFrQjtZQUMzQyxDQUFDLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDO1lBQ3RFLENBQUMsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWpELE1BQU0sZUFBZSxHQUNuQixLQUFLLENBQUMsbUJBQW1CO1lBQ3pCLHNCQUFZLENBQUMsRUFBRSxDQUFDLHVCQUFhLENBQUMsRUFBRSxFQUFFLHNCQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFeEQsTUFBTSxNQUFNLEdBQUcsSUFBSSx1REFBdUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDekUsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO1lBQ3ZCLE9BQU8sRUFBRTtnQkFDUCxHQUFHLEVBQUUsR0FBRzthQUNUO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLFlBQVksRUFBRSxlQUFlO2FBQzlCO1lBQ0QsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUU7WUFDOUIsYUFBYSxFQUFFLEVBQUUsRUFBRSxtQ0FBbUM7WUFDdEQsVUFBVSxFQUFFLEdBQUcsRUFBRSxtQ0FBbUM7U0FDckQsQ0FBQyxDQUFDO1FBQ0gsMEhBQTBIO1FBQzFILE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FDakMseUVBQXlFLEVBQUUsNkJBQTZCO1FBQ3hHLDBHQUEwRyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUN2Six1QkFBdUIsQ0FDeEIsQ0FBQztJQUNKLENBQUM7SUFFTywwQkFBMEIsQ0FBQyxXQUFvQyxFQUFFLEdBQWdCO1FBQ3ZGLE9BQU87WUFDTCxLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUs7WUFDeEIsSUFBSSxFQUFFLFdBQVcsQ0FBQyxpQkFBaUI7WUFDbkMsYUFBYSxFQUFFO2dCQUNiLEdBQUcsRUFBRSxXQUFXLENBQUMsY0FBYztnQkFDL0IsT0FBTyxFQUFFO29CQUNQLFdBQVcsRUFBRSxJQUFJLENBQUMsaUJBQWlCO29CQUNuQyxTQUFTLEVBQUUsV0FBVyxDQUFDLFNBQVMsSUFBSSxFQUFFO29CQUN0QyxTQUFTLEVBQUUsV0FBVyxDQUFDLGVBQWUsSUFBSSxDQUFDO29CQUMzQyxRQUFRLEVBQUUsV0FBVyxDQUFDLFdBQVcsSUFBSSxHQUFHO29CQUN4QyxjQUFjLEVBQUU7d0JBQ2QsbUJBQW1CLEVBQUUsV0FBVyxDQUFDLGdCQUFnQjt3QkFDakQsU0FBUyxFQUFFLFdBQVcsQ0FBQyxTQUFTO3FCQUNqQztpQkFDRjtnQkFDRCxXQUFXLEVBQUU7b0JBQ1gsd0JBQXdCO29CQUN4Qix5QkFBeUI7b0JBQ3pCLHdFQUNFLEdBQUcsQ0FBQyxPQUNOLFlBQVksR0FBRyxDQUFDLE1BQU0sa0NBQWtDO2lCQUN6RDthQUNGO1lBQ0QsWUFBWSxFQUFFLFdBQVcsQ0FBQyxZQUFZO1NBQ3ZDLENBQUM7SUFDSixDQUFDO0lBRU8sNEJBQTRCLENBQ2xDLEdBQWdCO1FBRWhCLE1BQU0sMEJBQTBCLEdBQzlCLHlCQUFlLENBQUMsNkJBQTZCLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtZQUNqRSxhQUFhLEVBQUUsaUNBQWlDO1NBQ2pELENBQUMsQ0FBQztRQUNMLE9BQU87WUFDTCxLQUFLLEVBQUUsMEJBQTBCO1lBQ2pDLGFBQWEsRUFBRTtnQkFDYixHQUFHLEVBQUUseUJBQXlCO2dCQUM5QixLQUFLLEVBQUUsQ0FBQztnQkFDUixPQUFPLEVBQUU7b0JBQ1AsU0FBUyxFQUFFLEVBQUU7b0JBQ2IsV0FBVyxFQUFFLElBQUksQ0FBQyxpQkFBaUI7b0JBQ25DLFNBQVMsRUFBRSxDQUFDO29CQUNaLFFBQVEsRUFBRSxHQUFHO29CQUNiLGNBQWMsRUFBRTt3QkFDZCxtQkFBbUIsRUFBRSxJQUFJO3dCQUN6QixTQUFTLEVBQUUsSUFBSTtxQkFDaEI7aUJBQ0Y7Z0JBQ0QsV0FBVyxFQUFFO29CQUNYLHdCQUF3QjtvQkFDeEIseUJBQXlCO29CQUN6Qix3RUFDRSxHQUFHLENBQUMsT0FDTixZQUFZLEdBQUcsQ0FBQyxNQUFNLGtDQUFrQztpQkFDekQ7YUFDRjtZQUNELFlBQVksRUFBRSxzQkFBWSxDQUFDLEVBQUUsQ0FBQyx1QkFBYSxDQUFDLEVBQUUsRUFBRSxzQkFBWSxDQUFDLEtBQUssQ0FBQztTQUNwRSxDQUFDO0lBQ0osQ0FBQzs7QUFsR0gsb0NBbUdDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuaW1wb3J0IHtcbiAgQXV0b3NjYWxpbmdDb25maWd1cmF0aW9uLFxuICBHaXRsYWJSdW5uZXJBdXRvc2NhbGluZyxcbiAgR2l0bGFiUnVubmVyQXV0b3NjYWxpbmdKb2JSdW5uZXJQcm9wcyxcbn0gZnJvbSAnQHBlcHBlcml6ZS9jZGstYXV0b3NjYWxpbmctZ2l0bGFiLXJ1bm5lcic7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCwgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBJbnN0YW5jZUNsYXNzLCBJbnN0YW5jZVNpemUsIEluc3RhbmNlVHlwZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgSVJvbGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IElCdWNrZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgSVN0cmluZ1BhcmFtZXRlciwgU3RyaW5nUGFyYW1ldGVyIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNzbSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IFJpb0xhbmRpbmdab25lIH0gZnJvbSAnLi4vLi4vLi4vcmlvLWxhbmRpbmctem9uZSc7XG5cbi8qKlxuICogVGhlIEdpdExhYlJ1bm5lclByb3BzIHJlcXVpcmUgdGhlIFZQQyBJRCwgYSBkZWZpbmVkIGVudmlyb25tZW50IG9mIGFjY291bnQgYW5kIHJlZ2lvbiwgb3B0aW9uYWxcbiAqIHJ1bm5lciBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25hbGx5IHRoZSBHaXRMYWIgUnVubmVyIE1hbmFnZXIgaW5zdGFuY2UgdHlwZS4gQnkgZGVmYXVsdCwgYSBUMyBNaWNybyBpbnN0YW5jZSB3aWxsIGJlIHVzZWQuXG4gKiBGb3IgbGFyZ2VyIHdvcmtsb2FkcyBhbmQgdmVyeSBhY3RpdmUgdGVhbXMgaXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIFQzIFNtYWxsIGZvciB0aGUgbWFuYWdlciBpbnN0ZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdpdExhYlJ1bm5lclByb3BzIHtcbiAgcmVhZG9ubHkgZW52OiBFbnZpcm9ubWVudDtcbiAgcmVhZG9ubHkgcnVubmVyc1dvcmtlclByb3BzPzogR2l0bGFiUnVubmVyV29ya2VyUHJvcHM7XG4gIHJlYWRvbmx5IG1hbmFnZXJJbnN0YW5jZVR5cGU/OiBJbnN0YW5jZVR5cGU7XG4gIHJlYWRvbmx5IGNhY2hlOiBJQnVja2V0O1xufVxuXG4vKipcbiAqIFRoZSBHaXRsYWJSdW5uZXJXb3JrZXJQcm9wcyBpbnRlcmZhY2UgcHJvdmlkZXMgYSBzaW1wbGlmaWVkIEdpdExhYiBSdW5uZXIgd29ya2VyIGNvbmZpZ3VyYXRpb25cbiAqIHJlcXVpcmluZyBhIHRva2VuIGFzIGFuIFNTTSBwYXJhbWV0ZXIsIG9uZSBvZiB0aGUgdmFsaWQgZ2l0bGFiIFVSTHMsIGluc3RhbmNlIG9mIHlvdSBjaG9pY2UsIHRoZSBkZXNpcmVkIG1heCBzcG90IHByaWNlLFxuICogd2hldGhlciB0byB1c2Ugc3BvdCBpbnN0YW5jZSBvciBub3QgYW5kIGEgZGVmYXVsdCByb2xlLlxuICogSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBSdW5uZXJSb2xlcyBjb25zdHJ1Y3QsIGFuZCBpdCdzIGV4cG9zZWQgZGVmYXVsdCBydW5uZXIgcm9sZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHaXRsYWJSdW5uZXJXb3JrZXJQcm9wcyB7XG4gIC8qKiBUaGUgU1NNIFN0cmluZ1BhcmFtZXRlciB3aXRoIHRoZSByZWdpc3RlcmVkIHJ1bm5lciB0b2tlbiAgKi9cbiAgcmVhZG9ubHkgdG9rZW46IElTdHJpbmdQYXJhbWV0ZXI7XG4gIC8qKiBUaGUgR2l0TGFiIGluc3RhbmNlIFVSTCwgZWl0aGVyIGh0dHBzOi8vZ2l0bGFiLmNpY2QubWFuIG9yIGh0dHBzOi8vZ2l0bGFiLmNvbGxhYm9yYXRpb25sYXllci10cmF0b24uY29tICovXG4gIHJlYWRvbmx5IGdpdEluc3RhbmNlVXJsOiBHaXRsYWJJbnN0YW5jZVVybDtcbiAgLyoqIFRoZSBpbnN0YW5jZSB0eXBlIGZvciB0aGUgcnVubmVyIHdvcmtlciAqL1xuICByZWFkb25seSBpbnN0YW5jZVR5cGU6IEluc3RhbmNlVHlwZTtcbiAgLyoqIFRoZSBkZXNpcmVkIG1heCBzcG90IHByaWNlICovXG4gIHJlYWRvbmx5IHNwb3RQcmljZTogbnVtYmVyO1xuICAvKiogV2hldGhlciB0byB1c2Ugc3BvdCBpbnN0YW5jZSBvciBub3QsIFJlcXVpcmVzIFNlcnZpY2VMaW5rZWQgUm9sZSBmb3IgRUMyIFNwb3QgdG8gYmUgZGVwbG95ZWQgaW4gdGhlIGFjY291bnQgKi9cbiAgcmVhZG9ubHkgcmVxdWVzdFNwb3RQcmljZTogYm9vbGVhbjtcbiAgLyoqIFRoZSBkZWZhdWx0IHJvbGUgZm9yIHRoZSBydW5uZXIgd29ya2VyIHdoZW4gc3Bhd25lZCAqL1xuICByZWFkb25seSBkZWZhdWx0V29ya2VyUm9sZTogSVJvbGU7XG4gIC8qKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgYnVpbGRzIGZvciBhbiBpbnN0YW5jZSBiZWZvcmUgaXQgaGFzIHRvIGJlIGRlY29tbWlzc2lvbmVkLiBEZWZhdWx0IDEwICovXG4gIHJlYWRvbmx5IG1heEJ1aWxkcz86IG51bWJlcjtcbiAgLyoqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0YW5jZXMgdG8ga2VlcCBpZGxlIGZvciBuZXcgaW5jb21pbmcgam9icy4gRGVmYXVsdCA1ICovXG4gIHJlYWRvbmx5IG1heElkbGVJbnN0YW5jZT86IG51bWJlcjtcbiAgLyoqIFRoZSBtYXhpbXVtIGlkbGUgdGltZSBzZWNvbmRzIGZvciBhbiBpbnN0YW5jZS4gRGVmYXVsdCA5MDAgc2Vjb25kcyAqL1xuICByZWFkb25seSBtYXhJZGxlVGltZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgR2l0bGFiSW5zdGFuY2VVcmwgPVxuICB8ICdodHRwczovL2dpdGxhYi5jaWNkLm1hbidcbiAgfCAnaHR0cHM6Ly9naXRsYWIuY29sbGFib3JhdGlvbmxheWVyLXRyYXRvbi5jb20nO1xuXG4vKipcbiAqIFRoZSBjb25zdHJ1Y3QgY3JlYXRlIHRoZSBHaXRMYWJSdW5uZXIgTWFuYWdlciBpbnN0YW5jZSB3aGljaCB3aWxsIGF1dG9zY2FsZSBSdW5uZXIgaW5zdGFuY2VzIGJhc2VkIG9uIHRoZSBjb25maWd1cmF0aW9uLlxuICogQnkgZGVmYXVsdCwgdGhlIGNvbnN0cnVjdCB3aWxsIGNyZWF0ZSBhIFJ1bm5lciB3aXRoIGEgbWFuYWdlciBUMyBNaWNybyBpbnN0YW5jZSB3aGljaCB3aWxsIGJlIGVuYWJsZWQgdG8gc3Bhd24gVDMgTGFyZ2UgUnVubmVyXG4gKiB3b3JrZXIgc3BvdCBpbnN0YW5jZS4gVGhlIGRlZmF1bHQgcnVubmVyIFJvbGUgaGFzIG9ubHkgdGhlIHBlcm1pc3Npb25zIHRvIHVwbG9hZCBhbmQgZG93bmxvYWQgZnJvbSB0aGUgUzMgcnVubmVyIGNhY2hlLlxuICpcbiAqIG1pbmltYWwgY29uZmlndXJhdGlvbiB3aXRoIHJ1bm5lciBzcG90IGluc3RhbmNlOlxuICogYGBgdHNcbiAqIG5ldyBTcG90U2VydmljZUxpbmtlZFJvbGUoc3RhY2ssICdTcG90TGlua2VkUm9sZScpO1xuICogY29uc3QgbXlCdWNrZXQgPSBuZXcgQnVja2V0KHN0YWNrLCAnTXlTaGFyZVJ1bm5lckNhY2hlJywge1xuICogICAgIGVuZm9yY2VTU0w6IHRydWUsXG4gKiAgICAgcHVibGljUmVhZEFjY2VzczogZmFsc2UsXG4gKiAgICAgZW5jcnlwdGlvbjogQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELFxuICogICAgIGxpZmVjeWNsZVJ1bGVzOiBbXG4gKiAgICAgICB7XG4gKiAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gKiAgICAgICAgIGV4cGlyYXRpb246IER1cmF0aW9uLmRheXMoMzApLFxuICogICAgICAgfSxcbiAqICAgICBdLFxuICogICB9KTtcbiAqIG5ldyBHaXRsYWJSdW5uZXIoc3RhY2ssICdHaXRMYWJSdW5uZXInLCB7XG4gKiAgZW52OiB7YWNjb3VudDogJzEyMzQ1Njc4OTAxMicsIHJlZ2lvbjogJ2V1LXdlc3QtMSd9LFxuICogIGNhY2hlOiBteUJ1Y2tldCAvLyB1c2UgYSBTMyBidWNrZXQgd2l0aG91dCBwdWJsaWMgYWNjZXNzIGFuZCBhIHJldGVudGlvbiBkZWZpbmVkLCB1c2Ugb25lIGNhY2hlIGJ1Y2tldCBmb3IgYWxsIHlvdSBydW5uZXJzXG4gKiB9KTtcbiAqYGBgXG4gKiByZWNvbW1lbmRlZDpcbiAqIGBgYHRzXG4gKiBuZXcgU3BvdFNlcnZpY2VMaW5rZWRSb2xlKHN0YWNrLCAnU3BvdExpbmtlZFJvbGUnKTtcbiAqIGNvbnN0IHJ1bm5lclJvbGVzID0gbmV3IFJ1bm5lclJvbGVzKHN0YWNrLCAnUnVubmVyUm9sZXMnLCB7ZW52OiB7YWNjb3VudDogJzEyMzQ1Njc4OTAxMicsIHJlZ2lvbjogJ2V1LXdlc3QtMSd9fSk7XG4gKiBjb25zdCBteUJ1Y2tldCA9IG5ldyBCdWNrZXQoc3RhY2ssICdNeVNoYXJlUnVubmVyQ2FjaGUnLCB7XG4gKiAgICAgZW5mb3JjZVNTTDogdHJ1ZSxcbiAqICAgICBwdWJsaWNSZWFkQWNjZXNzOiBmYWxzZSxcbiAqICAgICBlbmNyeXB0aW9uOiBCdWNrZXRFbmNyeXB0aW9uLlMzX01BTkFHRUQsXG4gKiAgICAgbGlmZWN5Y2xlUnVsZXM6IFtcbiAqICAgICAgIHtcbiAqICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAqICAgICAgICAgZXhwaXJhdGlvbjogRHVyYXRpb24uZGF5cygzMCksXG4gKiAgICAgICB9LFxuICogICAgIF0sXG4gKiAgIH0pO1xuICogbmV3IEdpdGxhYlJ1bm5lcihzdGFjaywgJ0dpdExhYlJ1bm5lcicsIHtcbiAqICBlbnY6IHthY2NvdW50OiAnMTIzNDU2Nzg5MDEyJywgcmVnaW9uOiAnZXUtd2VzdC0xJ30sXG4gKiAgY2FjaGU6IG15QnVja2V0IC8vIC8vIHVzZSBhIFMzIGJ1Y2tldCB3aXRob3V0IHB1YmxpYyBhY2Nlc3MgYW5kIGEgcmV0ZW50aW9uIGRlZmluZWQsIHVzZSBvbmUgY2FjaGUgYnVja2V0IGZvciBhbGwgeW91IHJ1bm5lcnNcbiAqICBydW5uZXJzV29ya2VyUHJvcHM6IHtcbiAqICAgIHRva2VuOiBteVRva2VuRm9yVGFnZ2VkUnVubmVyMSwgLy8gd2l0aCB0aGlzIHJ1bm5lciB3ZSBvbmx5IHdhbnQgdG8gcnVuIGpvYnMgdGhhdCByZXF1aXJlIG1vcmUgcG93ZXJcbiAqICAgIGdpdEluc3RhbmNlVXJsOiAnaHR0cHM6Ly9naXRsYWIuY2ljZC5tYW4nLCAvLyBvciB0aGUgVHJhdG9uIEdpdExhYlxuICogICAgaW5zdGFuY2VUeXBlOiBJbnN0YW5jZVR5cGUub2YoSW5zdGFuY2VDbGFzcy5NN0lfRkxFWCwgSW5zdGFuY2VTaXplLlhMQVJHRSksIC8vIGV4ZW1wbGFyeSBsYXJnZXIgcnVubmVyXG4gKiAgICBzcG90UHJpY2U6IDAuMiwgLy8gZXhlbXBsYXJ5IHNwb3QgcHJpY2VcbiAqICAgIHJlcXVlc3RTcG90UHJpY2U6IHRydWUsXG4gKiAgICBkZWZhdWx0V29ya2VyUm9sZTogcnVubmVyUm9sZXMucnVubmVyQmFzZVJvbGUsIC8vIHVzZSB0aGUgYmFzZSByb2xlXG4gKiAgfSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBHaXRsYWJSdW5uZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwcml2YXRlIGF1dG9zY2FsaW5nQ29uZmlnOiBBdXRvc2NhbGluZ0NvbmZpZ3VyYXRpb25bXSA9IFt7XG4gICAgcGVyaW9kczogWycqICogNy0yMiAqICogbW9uLWZyaSAqJ10sXG4gICAgdGltZXpvbmU6ICdFdXJvcGUvQmVybGluJyxcbiAgfV07XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBTdGFjaywgaWQgOiBzdHJpbmcsIHByb3BzOiBHaXRMYWJSdW5uZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCB2cGMgPSBSaW9MYW5kaW5nWm9uZS5nZXREZWZhdWx0VnBjKHNjb3BlKTtcblxuICAgIGNvbnN0IHJ1bm5lckNvbmZpZyA9IHByb3BzLnJ1bm5lcnNXb3JrZXJQcm9wc1xuICAgICAgPyB0aGlzLmNyZWF0ZVdvcmtlckNvbmZpZ3VyYXRpb25zKHByb3BzLnJ1bm5lcnNXb3JrZXJQcm9wcywgcHJvcHMuZW52KVxuICAgICAgOiB0aGlzLmdldERlZmF1bHRSdW5uZXJXb3JrZXJDb25maWcocHJvcHMuZW52KTtcblxuICAgIGNvbnN0IG1hbmFnZXJJbnN0YW5jZSA9XG4gICAgICBwcm9wcy5tYW5hZ2VySW5zdGFuY2VUeXBlID8/XG4gICAgICBJbnN0YW5jZVR5cGUub2YoSW5zdGFuY2VDbGFzcy5UMywgSW5zdGFuY2VTaXplLk1JQ1JPKTtcblxuICAgIGNvbnN0IHJ1bm5lciA9IG5ldyBHaXRsYWJSdW5uZXJBdXRvc2NhbGluZyhzY29wZSwgYEdMUiR7c2NvcGUuc3RhY2tOYW1lfWAsIHtcbiAgICAgIHJ1bm5lcnM6IFtydW5uZXJDb25maWddLFxuICAgICAgbmV0d29yazoge1xuICAgICAgICB2cGM6IHZwYyxcbiAgICAgIH0sXG4gICAgICBtYW5hZ2VyOiB7XG4gICAgICAgIGluc3RhbmNlVHlwZTogbWFuYWdlckluc3RhbmNlLFxuICAgICAgfSxcbiAgICAgIGNhY2hlOiB7IGJ1Y2tldDogcHJvcHMuY2FjaGUgfSxcbiAgICAgIGNoZWNrSW50ZXJ2YWw6IDMwLCAvLyBjaGVjayBldmVyeSAzMHMgZm9yIHBlbmRpbmcgam9ic1xuICAgICAgY29uY3VycmVudDogMzAwLCAvLyBHbG9iYWwgbGltaXQgb2YgY29uY3VycmVudCBqb2JzLFxuICAgIH0pO1xuICAgIC8vIGR1ZSB0byB0aGUgbmV3IHJlZ2lzdHJhdGlvbiBwcm9jZXNzIHdlIGhhdmUgdG8gcmVnaXN0ZXIgdGhlIHJ1bm5lciBieSBydW5uaW5nIGV4cGxpY2l0IGNvbW1hbmRzIG9uIHN0YXJ0IG9mIHRoZSBtYW5hZ2VyXG4gICAgcnVubmVyLm1hbmFnZXIudXNlckRhdGEuYWRkQ29tbWFuZHMoXG4gICAgICAnY3AgIC9ldGMvZ2l0bGFiLXJ1bm5lci9jb25maWcudG9tbCAgL2V0Yy9naXRsYWItcnVubmVyL2NvbmZpZ19iYWNrLnRvbWwnLCAvLyBhdm9pZCB0b21sIG1lcmdlIGNvbmZsaWN0c1xuICAgICAgYGdpdGxhYi1ydW5uZXIgcmVnaXN0ZXIgLS1ub24taW50ZXJhY3RpdmUgLS10ZW1wbGF0ZS1jb25maWcgL2V0Yy9naXRsYWItcnVubmVyL2NvbmZpZ19iYWNrLnRvbWwgLS10b2tlbiAke3Byb3BzLnJ1bm5lcnNXb3JrZXJQcm9wcz8udG9rZW4uc3RyaW5nVmFsdWV9YCxcbiAgICAgICdnaXRsYWItcnVubmVyIHJlc3RhcnQnLCAvLyByZXN0YXJ0IHRoZSBydW5uZXIgdG8gZW5zdXJlIHRoZSBjb25maWcgaXMgcGlja2VkIHVwIGNvcnJlY3RseVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVdvcmtlckNvbmZpZ3VyYXRpb25zKHdvcmtlclByb3BzOiBHaXRsYWJSdW5uZXJXb3JrZXJQcm9wcywgZW52OiBFbnZpcm9ubWVudCk6IEdpdGxhYlJ1bm5lckF1dG9zY2FsaW5nSm9iUnVubmVyUHJvcHMge1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbjogd29ya2VyUHJvcHMudG9rZW4sXG4gICAgICByb2xlOiB3b3JrZXJQcm9wcy5kZWZhdWx0V29ya2VyUm9sZSxcbiAgICAgIGNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgdXJsOiB3b3JrZXJQcm9wcy5naXRJbnN0YW5jZVVybCxcbiAgICAgICAgbWFjaGluZToge1xuICAgICAgICAgIGF1dG9zY2FsaW5nOiB0aGlzLmF1dG9zY2FsaW5nQ29uZmlnLFxuICAgICAgICAgIG1heEJ1aWxkczogd29ya2VyUHJvcHMubWF4QnVpbGRzID8/IDEwLFxuICAgICAgICAgIGlkbGVDb3VudDogd29ya2VyUHJvcHMubWF4SWRsZUluc3RhbmNlID8/IDUsXG4gICAgICAgICAgaWRsZVRpbWU6IHdvcmtlclByb3BzLm1heElkbGVUaW1lID8/IDkwMCxcbiAgICAgICAgICBtYWNoaW5lT3B0aW9uczoge1xuICAgICAgICAgICAgcmVxdWVzdFNwb3RJbnN0YW5jZTogd29ya2VyUHJvcHMucmVxdWVzdFNwb3RQcmljZSxcbiAgICAgICAgICAgIHNwb3RQcmljZTogd29ya2VyUHJvcHMuc3BvdFByaWNlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGVudmlyb25tZW50OiBbXG4gICAgICAgICAgJ0RPQ0tFUl9EUklWRVI9b3ZlcmxheTInLFxuICAgICAgICAgICdET0NLRVJfVExTX0RJUkNFPS9jZXJ0cycsXG4gICAgICAgICAgYERPQ0tFUl9BVVRIX0NPTkZJRz17XCJjcmVkSGVscGVyc1wiOiB7IFwicHVibGljLmVjci5hd3NcIjogXCJlY3ItbG9naW5cIiwgXCIke1xuICAgICAgICAgICAgZW52LmFjY291bnRcbiAgICAgICAgICB9LmRrci5lY3IuJHtlbnYucmVnaW9ufS5hbWF6b25hd3MuY29tXCI6IFwiZWNyLWxvZ2luXCIgfSB9YCxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBpbnN0YW5jZVR5cGU6IHdvcmtlclByb3BzLmluc3RhbmNlVHlwZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0UnVubmVyV29ya2VyQ29uZmlnKFxuICAgIGVudjogRW52aXJvbm1lbnQsXG4gICk6IEdpdGxhYlJ1bm5lckF1dG9zY2FsaW5nSm9iUnVubmVyUHJvcHMge1xuICAgIGNvbnN0IGdpdExhYlJ1bm5lclRva2VuUGFyYW1ldGVyID1cbiAgICAgIFN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyQXR0cmlidXRlcyh0aGlzLCAnUnVubmVyVG9rZW4nLCB7XG4gICAgICAgIHBhcmFtZXRlck5hbWU6ICcvY29uZmlnL2dpdGxhYi1ydW5uZXItY2RrL3Rva2VuJyxcbiAgICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbjogZ2l0TGFiUnVubmVyVG9rZW5QYXJhbWV0ZXIsXG4gICAgICBjb25maWd1cmF0aW9uOiB7XG4gICAgICAgIHVybDogJ2h0dHBzOi8vZ2l0bGFiLmNpY2QubWFuJyxcbiAgICAgICAgbGltaXQ6IDAsXG4gICAgICAgIG1hY2hpbmU6IHtcbiAgICAgICAgICBtYXhCdWlsZHM6IDEwLFxuICAgICAgICAgIGF1dG9zY2FsaW5nOiB0aGlzLmF1dG9zY2FsaW5nQ29uZmlnLFxuICAgICAgICAgIGlkbGVDb3VudDogNSxcbiAgICAgICAgICBpZGxlVGltZTogOTAwLFxuICAgICAgICAgIG1hY2hpbmVPcHRpb25zOiB7XG4gICAgICAgICAgICByZXF1ZXN0U3BvdEluc3RhbmNlOiB0cnVlLFxuICAgICAgICAgICAgc3BvdFByaWNlOiAwLjA5LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGVudmlyb25tZW50OiBbXG4gICAgICAgICAgJ0RPQ0tFUl9EUklWRVI9b3ZlcmxheTInLFxuICAgICAgICAgICdET0NLRVJfVExTX0RJUkNFPS9jZXJ0cycsXG4gICAgICAgICAgYERPQ0tFUl9BVVRIX0NPTkZJRz17XCJjcmVkSGVscGVyc1wiOiB7IFwicHVibGljLmVjci5hd3NcIjogXCJlY3ItbG9naW5cIiwgXCIke1xuICAgICAgICAgICAgZW52LmFjY291bnRcbiAgICAgICAgICB9LmRrci5lY3IuJHtlbnYucmVnaW9ufS5hbWF6b25hd3MuY29tXCI6IFwiZWNyLWxvZ2luXCIgfSB9YCxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBpbnN0YW5jZVR5cGU6IEluc3RhbmNlVHlwZS5vZihJbnN0YW5jZUNsYXNzLlQzLCBJbnN0YW5jZVNpemUuTEFSR0UpLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
package/package.json
CHANGED
package/version.json
CHANGED