@wbce/projen-d9 0.1.0 → 0.1.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 +54 -23
- package/API.md +38 -0
- package/CHANGELOG.md +12 -0
- package/docs/D9-plumbing.md +7 -2
- package/lib/cli/commands/save/apply-snapshot.d.ts +2 -7
- package/lib/cli/commands/save/apply-snapshot.js +6 -5
- package/lib/cli/commands/save/env.d.ts +4 -0
- package/lib/cli/commands/save/env.js +3 -1
- package/lib/cli/commands/save/save-snapshot.d.ts +2 -7
- package/lib/cli/commands/save/save-snapshot.js +6 -5
- package/lib/cli/commands/save/transfer.js +2 -1
- package/lib/cli/index.js +4 -2
- package/lib/cli/plumbing-config.d.ts +1 -0
- package/lib/cli/plumbing-config.js +1 -1
- package/lib/index.d.ts +7 -1
- package/lib/index.js +23 -7
- package/package.json +1 -1
package/.jsii
CHANGED
|
@@ -151,7 +151,7 @@
|
|
|
151
151
|
},
|
|
152
152
|
"locationInModule": {
|
|
153
153
|
"filename": "src/index.ts",
|
|
154
|
-
"line":
|
|
154
|
+
"line": 87
|
|
155
155
|
},
|
|
156
156
|
"parameters": [
|
|
157
157
|
{
|
|
@@ -165,7 +165,7 @@
|
|
|
165
165
|
"kind": "class",
|
|
166
166
|
"locationInModule": {
|
|
167
167
|
"filename": "src/index.ts",
|
|
168
|
-
"line":
|
|
168
|
+
"line": 73
|
|
169
169
|
},
|
|
170
170
|
"methods": [
|
|
171
171
|
{
|
|
@@ -174,7 +174,7 @@
|
|
|
174
174
|
},
|
|
175
175
|
"locationInModule": {
|
|
176
176
|
"filename": "src/index.ts",
|
|
177
|
-
"line":
|
|
177
|
+
"line": 202
|
|
178
178
|
},
|
|
179
179
|
"name": "addExtension",
|
|
180
180
|
"parameters": [
|
|
@@ -215,7 +215,7 @@
|
|
|
215
215
|
},
|
|
216
216
|
"locationInModule": {
|
|
217
217
|
"filename": "src/index.ts",
|
|
218
|
-
"line":
|
|
218
|
+
"line": 206
|
|
219
219
|
},
|
|
220
220
|
"name": "configurePlumbing",
|
|
221
221
|
"parameters": [
|
|
@@ -237,7 +237,7 @@
|
|
|
237
237
|
"immutable": true,
|
|
238
238
|
"locationInModule": {
|
|
239
239
|
"filename": "src/index.ts",
|
|
240
|
-
"line":
|
|
240
|
+
"line": 75
|
|
241
241
|
},
|
|
242
242
|
"name": "githubConfig",
|
|
243
243
|
"optional": true,
|
|
@@ -251,7 +251,7 @@
|
|
|
251
251
|
},
|
|
252
252
|
"locationInModule": {
|
|
253
253
|
"filename": "src/index.ts",
|
|
254
|
-
"line":
|
|
254
|
+
"line": 78
|
|
255
255
|
},
|
|
256
256
|
"name": "buildExtensionTask",
|
|
257
257
|
"type": {
|
|
@@ -264,7 +264,7 @@
|
|
|
264
264
|
},
|
|
265
265
|
"locationInModule": {
|
|
266
266
|
"filename": "src/index.ts",
|
|
267
|
-
"line":
|
|
267
|
+
"line": 84
|
|
268
268
|
},
|
|
269
269
|
"name": "cacheService",
|
|
270
270
|
"type": {
|
|
@@ -277,7 +277,7 @@
|
|
|
277
277
|
},
|
|
278
278
|
"locationInModule": {
|
|
279
279
|
"filename": "src/index.ts",
|
|
280
|
-
"line":
|
|
280
|
+
"line": 82
|
|
281
281
|
},
|
|
282
282
|
"name": "d9Service",
|
|
283
283
|
"type": {
|
|
@@ -290,7 +290,7 @@
|
|
|
290
290
|
},
|
|
291
291
|
"locationInModule": {
|
|
292
292
|
"filename": "src/index.ts",
|
|
293
|
-
"line":
|
|
293
|
+
"line": 83
|
|
294
294
|
},
|
|
295
295
|
"name": "databaseService",
|
|
296
296
|
"type": {
|
|
@@ -303,7 +303,7 @@
|
|
|
303
303
|
},
|
|
304
304
|
"locationInModule": {
|
|
305
305
|
"filename": "src/index.ts",
|
|
306
|
-
"line":
|
|
306
|
+
"line": 81
|
|
307
307
|
},
|
|
308
308
|
"name": "dockerComposeFile",
|
|
309
309
|
"type": {
|
|
@@ -316,7 +316,7 @@
|
|
|
316
316
|
},
|
|
317
317
|
"locationInModule": {
|
|
318
318
|
"filename": "src/index.ts",
|
|
319
|
-
"line":
|
|
319
|
+
"line": 79
|
|
320
320
|
},
|
|
321
321
|
"name": "dockerfile",
|
|
322
322
|
"type": {
|
|
@@ -329,7 +329,20 @@
|
|
|
329
329
|
},
|
|
330
330
|
"locationInModule": {
|
|
331
331
|
"filename": "src/index.ts",
|
|
332
|
-
"line":
|
|
332
|
+
"line": 80
|
|
333
|
+
},
|
|
334
|
+
"name": "dockerignore",
|
|
335
|
+
"type": {
|
|
336
|
+
"fqn": "projen.IgnoreFile"
|
|
337
|
+
}
|
|
338
|
+
},
|
|
339
|
+
{
|
|
340
|
+
"docs": {
|
|
341
|
+
"stability": "stable"
|
|
342
|
+
},
|
|
343
|
+
"locationInModule": {
|
|
344
|
+
"filename": "src/index.ts",
|
|
345
|
+
"line": 77
|
|
333
346
|
},
|
|
334
347
|
"name": "extensionFolder",
|
|
335
348
|
"type": {
|
|
@@ -342,7 +355,7 @@
|
|
|
342
355
|
},
|
|
343
356
|
"locationInModule": {
|
|
344
357
|
"filename": "src/index.ts",
|
|
345
|
-
"line":
|
|
358
|
+
"line": 76
|
|
346
359
|
},
|
|
347
360
|
"name": "extensions",
|
|
348
361
|
"type": {
|
|
@@ -355,7 +368,7 @@
|
|
|
355
368
|
},
|
|
356
369
|
"locationInModule": {
|
|
357
370
|
"filename": "src/index.ts",
|
|
358
|
-
"line":
|
|
371
|
+
"line": 87
|
|
359
372
|
},
|
|
360
373
|
"name": "options",
|
|
361
374
|
"protected": true,
|
|
@@ -379,7 +392,7 @@
|
|
|
379
392
|
"kind": "interface",
|
|
380
393
|
"locationInModule": {
|
|
381
394
|
"filename": "src/index.ts",
|
|
382
|
-
"line":
|
|
395
|
+
"line": 57
|
|
383
396
|
},
|
|
384
397
|
"name": "D9ProjectOptions",
|
|
385
398
|
"properties": [
|
|
@@ -393,7 +406,7 @@
|
|
|
393
406
|
"immutable": true,
|
|
394
407
|
"locationInModule": {
|
|
395
408
|
"filename": "src/index.ts",
|
|
396
|
-
"line":
|
|
409
|
+
"line": 69
|
|
397
410
|
},
|
|
398
411
|
"name": "extensionsFolderName",
|
|
399
412
|
"optional": true,
|
|
@@ -412,7 +425,7 @@
|
|
|
412
425
|
"immutable": true,
|
|
413
426
|
"locationInModule": {
|
|
414
427
|
"filename": "src/index.ts",
|
|
415
|
-
"line":
|
|
428
|
+
"line": 63
|
|
416
429
|
},
|
|
417
430
|
"name": "githubConfig",
|
|
418
431
|
"optional": true,
|
|
@@ -437,7 +450,7 @@
|
|
|
437
450
|
"immutable": true,
|
|
438
451
|
"locationInModule": {
|
|
439
452
|
"filename": "src/index.ts",
|
|
440
|
-
"line":
|
|
453
|
+
"line": 70
|
|
441
454
|
},
|
|
442
455
|
"name": "packageVersions",
|
|
443
456
|
"optional": true,
|
|
@@ -462,7 +475,7 @@
|
|
|
462
475
|
},
|
|
463
476
|
"locationInModule": {
|
|
464
477
|
"filename": "src/index.ts",
|
|
465
|
-
"line":
|
|
478
|
+
"line": 87
|
|
466
479
|
},
|
|
467
480
|
"parameters": [
|
|
468
481
|
{
|
|
@@ -476,7 +489,7 @@
|
|
|
476
489
|
"kind": "class",
|
|
477
490
|
"locationInModule": {
|
|
478
491
|
"filename": "src/index.ts",
|
|
479
|
-
"line":
|
|
492
|
+
"line": 455
|
|
480
493
|
},
|
|
481
494
|
"name": "DirectusProject",
|
|
482
495
|
"symbolId": "src/index:DirectusProject"
|
|
@@ -495,7 +508,7 @@
|
|
|
495
508
|
"kind": "interface",
|
|
496
509
|
"locationInModule": {
|
|
497
510
|
"filename": "src/index.ts",
|
|
498
|
-
"line":
|
|
511
|
+
"line": 450
|
|
499
512
|
},
|
|
500
513
|
"name": "DirectusProjectOptions",
|
|
501
514
|
"symbolId": "src/index:DirectusProjectOptions"
|
|
@@ -646,6 +659,24 @@
|
|
|
646
659
|
},
|
|
647
660
|
"name": "PlumbingOptions",
|
|
648
661
|
"properties": [
|
|
662
|
+
{
|
|
663
|
+
"abstract": true,
|
|
664
|
+
"docs": {
|
|
665
|
+
"default": "\"d9-plumbing-common\"",
|
|
666
|
+
"stability": "stable",
|
|
667
|
+
"summary": "Name of the d9 folder kept in the snapshot, overridden by the COMMON_FOLDER_NAME environment variable."
|
|
668
|
+
},
|
|
669
|
+
"immutable": true,
|
|
670
|
+
"locationInModule": {
|
|
671
|
+
"filename": "src/index.ts",
|
|
672
|
+
"line": 54
|
|
673
|
+
},
|
|
674
|
+
"name": "commonFolderName",
|
|
675
|
+
"optional": true,
|
|
676
|
+
"type": {
|
|
677
|
+
"primitive": "string"
|
|
678
|
+
}
|
|
679
|
+
},
|
|
649
680
|
{
|
|
650
681
|
"abstract": true,
|
|
651
682
|
"docs": {
|
|
@@ -686,6 +717,6 @@
|
|
|
686
717
|
"symbolId": "src/index:PlumbingOptions"
|
|
687
718
|
}
|
|
688
719
|
},
|
|
689
|
-
"version": "0.1.
|
|
690
|
-
"fingerprint": "
|
|
720
|
+
"version": "0.1.2",
|
|
721
|
+
"fingerprint": "FSBM+slCKoKnL0rktLGMWPDJiNR44qYVLz7LfhrhRQQ="
|
|
691
722
|
}
|
package/API.md
CHANGED
|
@@ -778,6 +778,7 @@ When given a project, this it the project itself.
|
|
|
778
778
|
| <code><a href="#@wbce/projen-d9.D9Project.property.databaseService">databaseService</a></code> | <code>projen.DockerComposeService</code> | *No description.* |
|
|
779
779
|
| <code><a href="#@wbce/projen-d9.D9Project.property.dockerComposeFile">dockerComposeFile</a></code> | <code>projen.DockerCompose</code> | *No description.* |
|
|
780
780
|
| <code><a href="#@wbce/projen-d9.D9Project.property.dockerfile">dockerfile</a></code> | <code>@wbce/projen-shared.Dockerfile</code> | *No description.* |
|
|
781
|
+
| <code><a href="#@wbce/projen-d9.D9Project.property.dockerignore">dockerignore</a></code> | <code>projen.IgnoreFile</code> | *No description.* |
|
|
781
782
|
| <code><a href="#@wbce/projen-d9.D9Project.property.extensionFolder">extensionFolder</a></code> | <code>string</code> | *No description.* |
|
|
782
783
|
| <code><a href="#@wbce/projen-d9.D9Project.property.extensions">extensions</a></code> | <code>@wbce/projen-d9-extension.ExtensionFolder</code> | *No description.* |
|
|
783
784
|
|
|
@@ -1503,6 +1504,16 @@ public readonly dockerfile: Dockerfile;
|
|
|
1503
1504
|
|
|
1504
1505
|
---
|
|
1505
1506
|
|
|
1507
|
+
##### `dockerignore`<sup>Required</sup> <a name="dockerignore" id="@wbce/projen-d9.D9Project.property.dockerignore"></a>
|
|
1508
|
+
|
|
1509
|
+
```typescript
|
|
1510
|
+
public readonly dockerignore: IgnoreFile;
|
|
1511
|
+
```
|
|
1512
|
+
|
|
1513
|
+
- *Type:* projen.IgnoreFile
|
|
1514
|
+
|
|
1515
|
+
---
|
|
1516
|
+
|
|
1506
1517
|
##### `extensionFolder`<sup>Required</sup> <a name="extensionFolder" id="@wbce/projen-d9.D9Project.property.extensionFolder"></a>
|
|
1507
1518
|
|
|
1508
1519
|
```typescript
|
|
@@ -2322,6 +2333,7 @@ When given a project, this it the project itself.
|
|
|
2322
2333
|
| <code><a href="#@wbce/projen-d9.DirectusProject.property.databaseService">databaseService</a></code> | <code>projen.DockerComposeService</code> | *No description.* |
|
|
2323
2334
|
| <code><a href="#@wbce/projen-d9.DirectusProject.property.dockerComposeFile">dockerComposeFile</a></code> | <code>projen.DockerCompose</code> | *No description.* |
|
|
2324
2335
|
| <code><a href="#@wbce/projen-d9.DirectusProject.property.dockerfile">dockerfile</a></code> | <code>@wbce/projen-shared.Dockerfile</code> | *No description.* |
|
|
2336
|
+
| <code><a href="#@wbce/projen-d9.DirectusProject.property.dockerignore">dockerignore</a></code> | <code>projen.IgnoreFile</code> | *No description.* |
|
|
2325
2337
|
| <code><a href="#@wbce/projen-d9.DirectusProject.property.extensionFolder">extensionFolder</a></code> | <code>string</code> | *No description.* |
|
|
2326
2338
|
| <code><a href="#@wbce/projen-d9.DirectusProject.property.extensions">extensions</a></code> | <code>@wbce/projen-d9-extension.ExtensionFolder</code> | *No description.* |
|
|
2327
2339
|
|
|
@@ -3157,6 +3169,18 @@ public readonly dockerfile: Dockerfile;
|
|
|
3157
3169
|
|
|
3158
3170
|
---
|
|
3159
3171
|
|
|
3172
|
+
##### ~~`dockerignore`~~<sup>Required</sup> <a name="dockerignore" id="@wbce/projen-d9.DirectusProject.property.dockerignore"></a>
|
|
3173
|
+
|
|
3174
|
+
- *Deprecated:* Use {@link D9Project } instead. The package was renamed to `@wbce/projen-d9` to reflect that it targets the d9 fork, not upstream Directus.
|
|
3175
|
+
|
|
3176
|
+
```typescript
|
|
3177
|
+
public readonly dockerignore: IgnoreFile;
|
|
3178
|
+
```
|
|
3179
|
+
|
|
3180
|
+
- *Type:* projen.IgnoreFile
|
|
3181
|
+
|
|
3182
|
+
---
|
|
3183
|
+
|
|
3160
3184
|
##### ~~`extensionFolder`~~<sup>Required</sup> <a name="extensionFolder" id="@wbce/projen-d9.DirectusProject.property.extensionFolder"></a>
|
|
3161
3185
|
|
|
3162
3186
|
- *Deprecated:* Use {@link D9Project } instead. The package was renamed to `@wbce/projen-d9` to reflect that it targets the d9 fork, not upstream Directus.
|
|
@@ -8553,11 +8577,25 @@ const plumbingOptions: PlumbingOptions = { ... }
|
|
|
8553
8577
|
|
|
8554
8578
|
| **Name** | **Type** | **Description** |
|
|
8555
8579
|
| --- | --- | --- |
|
|
8580
|
+
| <code><a href="#@wbce/projen-d9.PlumbingOptions.property.commonFolderName">commonFolderName</a></code> | <code>string</code> | Name of the d9 folder kept in the snapshot, overridden by the COMMON_FOLDER_NAME environment variable. |
|
|
8556
8581
|
| <code><a href="#@wbce/projen-d9.PlumbingOptions.property.intermediateStorage">intermediateStorage</a></code> | <code><a href="#@wbce/projen-d9.IntermediateStorageOptions">IntermediateStorageOptions</a></code> | Storage shared between environments. |
|
|
8557
8582
|
| <code><a href="#@wbce/projen-d9.PlumbingOptions.property.logLevel">logLevel</a></code> | <code>string</code> | Default log level of the CLI, overridden by the LOG_LEVEL environment variable. |
|
|
8558
8583
|
|
|
8559
8584
|
---
|
|
8560
8585
|
|
|
8586
|
+
##### `commonFolderName`<sup>Optional</sup> <a name="commonFolderName" id="@wbce/projen-d9.PlumbingOptions.property.commonFolderName"></a>
|
|
8587
|
+
|
|
8588
|
+
```typescript
|
|
8589
|
+
public readonly commonFolderName: string;
|
|
8590
|
+
```
|
|
8591
|
+
|
|
8592
|
+
- *Type:* string
|
|
8593
|
+
- *Default:* "d9-plumbing-common"
|
|
8594
|
+
|
|
8595
|
+
Name of the d9 folder kept in the snapshot, overridden by the COMMON_FOLDER_NAME environment variable.
|
|
8596
|
+
|
|
8597
|
+
---
|
|
8598
|
+
|
|
8561
8599
|
##### `intermediateStorage`<sup>Optional</sup> <a name="intermediateStorage" id="@wbce/projen-d9.PlumbingOptions.property.intermediateStorage"></a>
|
|
8562
8600
|
|
|
8563
8601
|
```typescript
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @wbce/projen-directus
|
|
2
2
|
|
|
3
|
+
## 0.1.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 1700a54: Build extensions in a multi-stage Dockerfile with the locked projen version, and generate a `.dockerignore`.
|
|
8
|
+
|
|
9
|
+
## 0.1.1
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- 5e5ccc8: d9-plumbing: configurable common folder (`commonFolderName`, `COMMON_FOLDER_NAME`, `--common-folder`) and database port (`DB_PORT`, `--port`)
|
|
14
|
+
|
|
3
15
|
## 0.1.0
|
|
4
16
|
|
|
5
17
|
### Minor Changes
|
package/docs/D9-plumbing.md
CHANGED
|
@@ -31,6 +31,7 @@ The d9 environment (`.env`, environment variables) is read through `@wbce-d9/api
|
|
|
31
31
|
| Flag | Fallback |
|
|
32
32
|
| --- | --- |
|
|
33
33
|
| `--host <host>` | `DB_HOST` |
|
|
34
|
+
| `--port <port>` | `DB_PORT`, else `5432` |
|
|
34
35
|
| `--user <user>` | `DB_USER` |
|
|
35
36
|
| `--password <password>` | `DB_PASSWORD` |
|
|
36
37
|
| `--database <database>` | `DB_DATABASE` |
|
|
@@ -50,6 +51,10 @@ A storage shared between environments, used to transfer the files referenced by
|
|
|
50
51
|
|
|
51
52
|
`save`, `apply-schema` and `first-import` skip the file sync when no intermediate storage is configured, or when it is disabled with `--no-files` or `SKIP_FILE_SYNC=true`.
|
|
52
53
|
|
|
54
|
+
### Common folder
|
|
55
|
+
|
|
56
|
+
The d9 folder whose files are saved and transferred (see [`push-files` / `pull-files`](#push-files--pull-files)) is `--common-folder <name>`, else `COMMON_FOLDER_NAME`, else `commonFolderName` in `d9-plumbing.json` (`project.configurePlumbing({ commonFolderName })`), else `d9-plumbing-common`.
|
|
57
|
+
|
|
53
58
|
### Logging
|
|
54
59
|
|
|
55
60
|
The log level is `LOG_LEVEL`, else `logLevel` in `d9-plumbing.json` (`project.configurePlumbing({ logLevel })`), else `debug`.
|
|
@@ -65,7 +70,7 @@ The schema is dumped and diffed with [Atlas](https://atlasgo.io/) Community Edit
|
|
|
65
70
|
Saves the current d9 into the repository, then pushes its files to the intermediate storage.
|
|
66
71
|
|
|
67
72
|
1. Dumps the schema into `sql/schema.sql`.
|
|
68
|
-
2. Empties `sql/data` and dumps one CSV per table: every `directus_*` table except `directus_users`, `directus_sessions`, `directus_revisions`, `directus_activity` and `directus_presets`, plus the tables of `sql/tables_to_dump.txt`, minus those of `sql/tables_not_to_dump.txt`. Columns referencing a user are replaced by a fixed CI user. `directus_files` and `directus_folders` are limited to the `d9-plumbing-common`
|
|
73
|
+
2. Empties `sql/data` and dumps one CSV per table: every `directus_*` table except `directus_users`, `directus_sessions`, `directus_revisions`, `directus_activity` and `directus_presets`, plus the tables of `sql/tables_to_dump.txt`, minus those of `sql/tables_not_to_dump.txt`. Columns referencing a user are replaced by a fixed CI user. `directus_files` and `directus_folders` are limited to the common folder (`d9-plumbing-common` by default) and its subfolders.
|
|
69
74
|
3. Regenerates the Cedar policies in `permissions/` (see [`d9-to-cedar`](#d9-to-cedar)).
|
|
70
75
|
4. Pushes the files to the intermediate storage (see [`push-files`](#push-files--pull-files)), unless the [file sync is skipped](#intermediate-storage).
|
|
71
76
|
|
|
@@ -122,7 +127,7 @@ npx d9-plumbing check-unsaved --last-save 1b3387a
|
|
|
122
127
|
|
|
123
128
|
Syncs the files listed in `sql/data/directus_files.csv` from the current storage to the intermediate storage (`push-files`), or the other way (`pull-files`). Run by `save` and `apply-schema`.
|
|
124
129
|
|
|
125
|
-
Only the files of the d9 folder
|
|
130
|
+
Only the files of the common d9 folder (`d9-plumbing-common` by default, see [Common folder](#common-folder)) and its subfolders are saved and transferred: `save` dumps only those rows of `directus_files` and `directus_folders`, so everything else stays local to its environment. Put the files shared by all environments (logos, default images...) in it.
|
|
126
131
|
|
|
127
132
|
Options: [storage](#current-storage), [intermediate storage](#intermediate-storage).
|
|
128
133
|
|
|
@@ -1,7 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
user: string;
|
|
4
|
-
pwd: string;
|
|
5
|
-
database: string;
|
|
6
|
-
ssl?: boolean;
|
|
7
|
-
}): Promise<void>;
|
|
1
|
+
import { DbConfig } from './env';
|
|
2
|
+
export declare function applySQLSnapshot(dbConfig: DbConfig): Promise<void>;
|
|
@@ -17,6 +17,7 @@ async function applySQLSnapshot(dbConfig) {
|
|
|
17
17
|
const connectionProps = {
|
|
18
18
|
user: dbConfig.user,
|
|
19
19
|
host: dbConfig.host,
|
|
20
|
+
port: dbConfig.port,
|
|
20
21
|
password: dbConfig.pwd,
|
|
21
22
|
database: 'postgres',
|
|
22
23
|
...(dbConfig.ssl ? { ssl: { rejectUnauthorized: false } } : {}),
|
|
@@ -94,9 +95,9 @@ async function applySQLSnapshot(dbConfig) {
|
|
|
94
95
|
'schema',
|
|
95
96
|
'diff',
|
|
96
97
|
'--from',
|
|
97
|
-
`postgres://${encodeURIComponent(dbConfig.user)}:${encodeURIComponent(dbConfig.pwd)}@${dbConfig.host}/${dbConfig.database}?sslmode=${dbConfig.ssl ? 'require' : 'disable'}`,
|
|
98
|
+
`postgres://${encodeURIComponent(dbConfig.user)}:${encodeURIComponent(dbConfig.pwd)}@${dbConfig.host}:${dbConfig.port}/${dbConfig.database}?sslmode=${dbConfig.ssl ? 'require' : 'disable'}`,
|
|
98
99
|
'--to',
|
|
99
|
-
`postgres://${encodeURIComponent(dbConfig.user)}:${encodeURIComponent(dbConfig.pwd)}@${dbConfig.host}/${dbConfig.database}_tmp_bis?sslmode=${dbConfig.ssl ? 'require' : 'disable'}`,
|
|
100
|
+
`postgres://${encodeURIComponent(dbConfig.user)}:${encodeURIComponent(dbConfig.pwd)}@${dbConfig.host}:${dbConfig.port}/${dbConfig.database}_tmp_bis?sslmode=${dbConfig.ssl ? 'require' : 'disable'}`,
|
|
100
101
|
], {
|
|
101
102
|
env: {
|
|
102
103
|
...process.env,
|
|
@@ -165,7 +166,7 @@ async function applySQLSnapshot(dbConfig) {
|
|
|
165
166
|
let existingRowsCanCauseConflict = false;
|
|
166
167
|
if (['directus_files', 'directus_folders'].includes(nonParsedTableName)) {
|
|
167
168
|
//delete all files and folders that are inside the "d9-plumbing-common" folder
|
|
168
|
-
const commonFolderName =
|
|
169
|
+
const commonFolderName = pg.escapeLiteral(dbConfig.commonFolderName);
|
|
169
170
|
const folderKey = {
|
|
170
171
|
directus_files: 'folder',
|
|
171
172
|
directus_folders: 'parent',
|
|
@@ -175,7 +176,7 @@ async function applySQLSnapshot(dbConfig) {
|
|
|
175
176
|
-- Anchor: the "d9-plumbing-common" folder
|
|
176
177
|
SELECT id
|
|
177
178
|
FROM directus_folders
|
|
178
|
-
WHERE name =
|
|
179
|
+
WHERE name = ${commonFolderName}
|
|
179
180
|
UNION
|
|
180
181
|
-- Recursive step: find subfolders
|
|
181
182
|
SELECT f.id
|
|
@@ -284,4 +285,4 @@ async function applySQLSnapshot(dbConfig) {
|
|
|
284
285
|
//flows, operations and webhooks are loaded in memory at startup and only reloaded by their own services: a restart is needed.
|
|
285
286
|
logger_1.logger.warn('Purge the d9 cache (POST /utils/cache/clear) to take the new schema (and permissions, if CACHE_ENABLED) into account. If flows, operations or webhooks changed, also restart d9.');
|
|
286
287
|
}
|
|
287
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbHktc25hcHNob3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY2xpL2NvbW1hbmRzL3NhdmUvYXBwbHktc25hcHNob3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFjQSw0Q0FrVEM7QUFoVUQseUJBQXlCO0FBQ3pCLG1DQUE4RDtBQUM5RCwrQkFBaUM7QUFDakMseUJBQXlCO0FBQ3pCLHFEQUFtRDtBQUNuRCwrQkFBNEI7QUFDNUIsbUNBQThDO0FBQzlDLHVDQUEwQztBQUMxQyx5Q0FBc0M7QUFFdEMsTUFBTSxPQUFPLEdBQUcsSUFBQSxnQkFBUyxFQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN0QyxNQUFNLFFBQVEsR0FBRyxJQUFBLGdCQUFTLEVBQUMsaUJBQWMsQ0FBQyxDQUFDO0FBR3BDLEtBQUssVUFBVSxnQkFBZ0IsQ0FBQyxRQU10QztJQUNDLElBQUksUUFBbUIsQ0FBQztJQUN4QixNQUFNLGVBQWUsR0FBb0I7UUFDdkMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJO1FBQ25CLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtRQUNuQixRQUFRLEVBQUUsUUFBUSxDQUFDLEdBQUc7UUFDdEIsUUFBUSxFQUFFLFVBQVU7UUFDcEIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ2hFLENBQUM7SUFDQSxRQUFRO0lBQ1IsMEJBQTBCO0lBQzFCLGdDQUFnQztJQUNoQywwQkFBMEI7SUFDNUIsUUFBUSxHQUFHLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMxQyxlQUFNLENBQUMsSUFBSSxDQUFDLG1DQUFtQyxRQUFRLENBQUMsUUFBUSxVQUFVLENBQUMsQ0FBQztJQUM1RSxNQUFNLFFBQVEsQ0FBQyxP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SSxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFFdkMsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCxlQUFNLENBQUMsS0FBSyxDQUFDLGlFQUFpRSxDQUFDLENBQUM7UUFDaEYsTUFBTSxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRWpDLE1BQU0sQ0FBQyxDQUFDO0lBQ1YsQ0FBQztZQUFTLENBQUM7UUFDVCxNQUFNLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNyQixNQUFNLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBQ0Qsa0lBQWtJO0lBQ2xJLDhIQUE4SDtJQUM5SCxlQUFNLENBQUMsSUFBSSxDQUFDLGtMQUFrTCxDQUFDLENBQUM7QUFDbE0sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCB7IHBpcGVsaW5lIGFzIHN0cmVhbVBpcGVsaW5lLCBXcml0YWJsZSB9IGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgeyBwcm9taXNpZnkgfSBmcm9tICd1dGlsJztcbmltcG9ydCAqIGFzIHBnIGZyb20gJ3BnJztcbmltcG9ydCB7IGZyb20gYXMgY29weUZyb20gfSBmcm9tICdwZy1jb3B5LXN0cmVhbXMnO1xuaW1wb3J0IHsgQ2xpIH0gZnJvbSAnLi9jbGknO1xuaW1wb3J0IHsgcmVhZEZpcnN0TGluZU9mRmlsZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgZW5zdXJlQXRsYXMgfSBmcm9tICcuLi8uLi9hdGxhcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi9sb2dnZXInO1xuXG5jb25zdCByZWFkZGlyID0gcHJvbWlzaWZ5KGZzLnJlYWRkaXIpO1xuY29uc3QgcGlwZWxpbmUgPSBwcm9taXNpZnkoc3RyZWFtUGlwZWxpbmUpO1xuXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhcHBseVNRTFNuYXBzaG90KGRiQ29uZmlnOiB7XG4gIGhvc3Q6IHN0cmluZztcbiAgdXNlcjogc3RyaW5nO1xuICBwd2Q6IHN0cmluZztcbiAgZGF0YWJhc2U6IHN0cmluZztcbiAgc3NsPzogYm9vbGVhbjtcbn0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgbGV0IHBnQ2xpZW50OiBwZy5DbGllbnQ7XG4gIGNvbnN0IGNvbm5lY3Rpb25Qcm9wczogcGcuQ2xpZW50Q29uZmlnID0ge1xuICAgIHVzZXI6IGRiQ29uZmlnLnVzZXIsXG4gICAgaG9zdDogZGJDb25maWcuaG9zdCxcbiAgICBwYXNzd29yZDogZGJDb25maWcucHdkLFxuICAgIGRhdGFiYXNlOiAncG9zdGdyZXMnLFxuICAgIC4uLihkYkNvbmZpZy5zc2wgPyB7IHNzbDogeyByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlIH0gfSA6IHt9KSxcbiAgfTtcbiAgICAvL1NDSEVNQVxuICAgIC8vMS4gd2UgY3JlYXRlIGFuIGVtcHR5IGRiXG4gICAgLy8yLiB3ZSBwb3B1bGF0ZSB3aXRoIHRoZSBzY2hlbWFcbiAgICAvLzMuIHdlIGNhbGN1bGF0ZSB0aGUgZGlmZlxuICBwZ0NsaWVudCA9IG5ldyBwZy5DbGllbnQoY29ubmVjdGlvblByb3BzKTtcbiAgbG9nZ2VyLmluZm8oYENyZWF0aW5nIHRoZSB0ZW1wb3JhcnkgZGF0YWJhc2UgJHtkYkNvbmZpZy5kYXRhYmFzZX1fdG1wX2Jpc2ApO1xuICBhd2FpdCBwZ0NsaWVudC5jb25uZWN0KCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgcGdDbGllbnQucXVlcnkoYERST1AgREFUQUJBU0UgSUYgRVhJU1RTICR7ZGJDb25maWcuZGF0YWJhc2V9X3RtcF9iaXNgKTtcbiAgICBhd2FpdCBwZ0NsaWVudC5xdWVyeShgQ1JFQVRFIERBVEFCQVNFICR7ZGJDb25maWcuZGF0YWJhc2V9X3RtcF9iaXM7YCk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgcGdDbGllbnQuZW5kKCk7XG4gIH1cbiAgY29ubmVjdGlvblByb3BzLmRhdGFiYXNlID0gYCR7ZGJDb25maWcuZGF0YWJhc2V9X3RtcF9iaXNgO1xuICBwZ0NsaWVudCA9IG5ldyBwZy5DbGllbnQoY29ubmVjdGlvblByb3BzKTtcblxuICBjb25zdCBlbmREYkNsaWVudCA9IG5ldyBwZy5DbGllbnQoe1xuICAgIC4uLmNvbm5lY3Rpb25Qcm9wcyxcbiAgICBkYXRhYmFzZTogZGJDb25maWcuZGF0YWJhc2UsXG4gIH0pO1xuXG4gIGF3YWl0IFByb21pc2UuYWxsKFtwZ0NsaWVudC5jb25uZWN0KCksIGVuZERiQ2xpZW50LmNvbm5lY3QoKV0pO1xuXG4gIGxldCBzcWxNaWdyYXRpb24gPSAnJztcbiAgdHJ5IHtcbiAgICBsb2dnZXIuaW5mbygnTG9hZGluZyB0aGUgdGFyZ2V0IHNjaGVtYSBpbnRvIHRoZSB0ZW1wb3JhcnkgZGF0YWJhc2UnKTtcbiAgICAvL3dlIG1hbnVhbGx5IGluc3RhbGwgcG9zdGdpcyBhbmQgc29tZSBleHRlbnNpb25zLiBXZSBzaG91bGQgZG8gYSBkdW1wIG9mIHNxbCBleHRlbnNpb25zIGJ1dCB3ZSBhcmUgd2FpdGluZyBmb3IgYXRsYXNnbyB0byBzdXBwb3J0IHRoaXMgKHRpbWUgb2Ygd3JpdGluZyA6IDE5LzAzIC0gYXRsYXNnbyByZWxlYXNlZCBleHRlbnNpb25zIHN1cHBvcnQgYnV0IG5vdCBpbiB0aGUgY29tbXVuaXR5IHZlcnNpb24pXG4gICAgbGV0IGV4dGVuc2lvblF1ZXJ5ID0gYFxuICAgICAgICAgICAgY3JlYXRlIGV4dGVuc2lvbiBpZiBub3QgZXhpc3RzIHBvc3RnaXM7XG4gICAgICAgICAgICBjcmVhdGUgZXh0ZW5zaW9uIGlmIG5vdCBleGlzdHMgZnV6enlzdHJtYXRjaDtcbiAgICAgICAgICAgIGNyZWF0ZSBleHRlbnNpb24gaWYgbm90IGV4aXN0cyBwb3N0Z2lzX3RpZ2VyX2dlb2NvZGVyIDtcbiAgICAgICAgICAgIGNyZWF0ZSBleHRlbnNpb24gaWYgbm90IGV4aXN0cyBwb3N0Z2lzX3Jhc3RlciA7XG4gICAgICAgICAgICBjcmVhdGUgZXh0ZW5zaW9uIGlmIG5vdCBleGlzdHMgcG9zdGdpc190b3BvbG9neSA7XG4gICAgICAgICAgICBjcmVhdGUgZXh0ZW5zaW9uIGlmIG5vdCBleGlzdHMgYWRkcmVzc19zdGFuZGFyZGl6ZXIgO1xuICAgICAgICBgO1xuICAgIC8vdGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggdGhlIGR1bXAgaW4gYXRsYXMgOiBzY2hlbWEgYXJlIGNyZWF0ZWQgd2l0aCBDUkVBVEUgYW5kIG5vdCBjcmVhdGUgaWYgbm90IGV4aXRzLi4uXG4gICAgLy9zbyB3ZSBpbnNlcnQgZXh0ZW5zaW9uIGNyZWF0aW9uIGFmdGVyIHNjaGVtYSBjcmVhdGlvbiBpbiBvcmRlciB0byBhdm9pZCBnZXR0aW5nIFwic2NoZW1hIGFscmVhZHkgZXhpc3RzXCJcbiAgICBjb25zdCBzcWxTY2hlbWEgPSBmcy5yZWFkRmlsZVN5bmMoJy4vc3FsL3NjaGVtYS5zcWwnKS50b1N0cmluZygpO1xuICAgIGNvbnN0IHNxbFNjaGVtYVdpdGhFeHRlbnNpb24gPSBzcWxTY2hlbWFcbiAgICAgIC5yZXBsYWNlKFxuICAgICAgICAnQ1JFQVRFIFRBQkxFJyxcbiAgICAgICAgYCR7ZXh0ZW5zaW9uUXVlcnl9XG4gICAgICAgICAgICBDUkVBVEUgVEFCTEVgLFxuICAgICAgKSAvL29ubHkgZmlyc3Qgb2NjdXJyZW5jZSB3aWxsIGJlIHJlcGxhY2VkXG4gICAgICAucmVwbGFjZSgvQ1JFQVRFIFNDSEVNQSBJRiBOT1QgRVhJU1RTL2csICdDUkVBVEUgU0NIRU1BJylcbiAgICAgIC5yZXBsYWNlKC9DUkVBVEUgU0NIRU1BL2csICdDUkVBVEUgU0NIRU1BIElGIE5PVCBFWElTVFMnKTsgLy9lbnN1cmUgYWxsIGNyZWF0ZSBzY2hlbWEgdXNlIFwiaWYgbm90IGV4aXN0c1wiXG4gICAgLy9pZiB0YXJnZXQgZGF0YWJhc2UgZG9lcyBub3QgY29udGFpbiBhbnkgZDkgdGFibGVzIHdlIGp1c3QgbmVlZCB0byBwb3B1bGF0ZSB0aGUgYmFzZSBzY2hlbWEuXG4gICAgY29uc3QgY291bnRUYWJsZXNSZXEgPSBgXG4gICAgICAgICAgICBTRUxFQ1QgQ09VTlQoKikgXG4gICAgICAgICAgICBGUk9NIGluZm9ybWF0aW9uX3NjaGVtYS50YWJsZXMgXG4gICAgICAgICAgICBXSEVSRSB0YWJsZV9zY2hlbWEgPSAncHVibGljJyBBTkQgdGFibGVfbmFtZSBMSUtFICdkaXJlY3R1c18lJztcbiAgICAgICAgYDtcbiAgICBjb25zdCBjb3VudFRhYmxlcyA9IGF3YWl0IGVuZERiQ2xpZW50LnF1ZXJ5KGNvdW50VGFibGVzUmVxKTtcbiAgICBpZiAoTnVtYmVyKGNvdW50VGFibGVzLnJvd3NbMF0uY291bnQpID09PSAwKSB7XG4gICAgICAvL3dlIGRyb3AgdGhlIGV4dGVuc2lvbiBhbmQgcmVhcHBseSB0aGUgc2NoZW1hIHdpdGggZDlcbiAgICAgIGxvZ2dlci5pbmZvKCdUYXJnZXQgZGF0YWJhc2UgaGFzIG5vIGQ5IHRhYmxlczogY3JlYXRpbmcgdGhlIHNjaGVtYSBkaXJlY3RseScpO1xuICAgICAgLy9ub3RlIHRoYXQgZmluYWxseSBibG9jayB3aWxsIGJlIGV4ZWN1dGVkLCBldmVuIGlmIHdlIHJldHVyblxuICAgICAgYXdhaXQgZW5kRGJDbGllbnQucXVlcnkoc3FsU2NoZW1hV2l0aEV4dGVuc2lvbik7XG4gICAgfVxuXG4gICAgYXdhaXQgcGdDbGllbnQucXVlcnkoc3FsU2NoZW1hV2l0aEV4dGVuc2lvbik7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgcGdDbGllbnQuZW5kKCk7XG4gICAgYXdhaXQgZW5kRGJDbGllbnQuZW5kKCk7XG4gIH1cblxuICAvL3dlIGNhbGN1bGF0ZSB0aGUgZGlmZlxuICBjb25zdCBtaWdyYXRpb25TdHJlYW0gPSBuZXcgV3JpdGFibGUoe1xuICAgIHdyaXRlOiAoY2h1bmssIF9lbmNvZGluZywgbmV4dCkgPT4ge1xuICAgICAgc3FsTWlncmF0aW9uICs9IGNodW5rLnRvU3RyaW5nKCk7XG4gICAgICBuZXh0KCk7XG4gICAgfSxcbiAgfSk7XG4gIGxvZ2dlci5pbmZvKCdDb21wdXRpbmcgdGhlIHNjaGVtYSBkaWZmIHdpdGggYXRsYXMnKTtcbiAgY29uc3QgY2xpID0gbmV3IENsaSgpO1xuICBhd2FpdCBjbGkuY29tbWFuZChcbiAgICBhd2FpdCBlbnN1cmVBdGxhcygpLFxuICAgIFtcbiAgICAgICdzY2hlbWEnLFxuICAgICAgJ2RpZmYnLFxuICAgICAgJy0tZnJvbScsXG4gICAgICBgcG9zdGdyZXM6Ly8ke2VuY29kZVVSSUNvbXBvbmVudChkYkNvbmZpZy51c2VyKX06JHtlbmNvZGVVUklDb21wb25lbnQoZGJDb25maWcucHdkKX1AJHtkYkNvbmZpZy5ob3N0fS8ke2RiQ29uZmlnLmRhdGFiYXNlfT9zc2xtb2RlPSR7ZGJDb25maWcuc3NsID8gJ3JlcXVpcmUnIDogJ2Rpc2FibGUnfWAsXG4gICAgICAnLS10bycsXG4gICAgICBgcG9zdGdyZXM6Ly8ke2VuY29kZVVSSUNvbXBvbmVudChkYkNvbmZpZy51c2VyKX06JHtlbmNvZGVVUklDb21wb25lbnQoZGJDb25maWcucHdkKX1AJHtkYkNvbmZpZy5ob3N0fS8ke2RiQ29uZmlnLmRhdGFiYXNlfV90bXBfYmlzP3NzbG1vZGU9JHtkYkNvbmZpZy5zc2wgPyAncmVxdWlyZScgOiAnZGlzYWJsZSd9YCxcbiAgICBdLFxuICAgIHtcbiAgICAgIGVudjoge1xuICAgICAgICAuLi5wcm9jZXNzLmVudixcbiAgICAgICAgQVRMQVNfTk9fVVBEQVRFX05PVElGSUVSOiAndHJ1ZScsIC8vaWYgbm90IHNldCwgYXRsYXMgZW5kIGEgZmluYWwgbGluZSB3aXRoIFwiYSBuZXcgdmVyc2lvbiBvZiBhdGxhcyBpcyBhdmFpbGFibGVcIlxuICAgICAgfSxcbiAgICAgIHN0ZG91dDogbWlncmF0aW9uU3RyZWFtLFxuICAgIH0sXG4gICk7XG4gIGlmIChzcWxNaWdyYXRpb24uaW5jbHVkZXMoJ25vIGNoYW5nZXMgdG8gYmUgbWFkZScpKSB7XG4gICAgc3FsTWlncmF0aW9uID0gJyc7XG4gIH1cbiAgaWYgKHNxbE1pZ3JhdGlvbi50cmltKCkpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRzID0gc3FsTWlncmF0aW9uLnNwbGl0KCdcXG4nKS5maWx0ZXIoKGxpbmUpID0+IGxpbmUudHJpbSgpLmVuZHNXaXRoKCc7JykpLmxlbmd0aDtcbiAgICBsb2dnZXIuaW5mbyhgU2NoZW1hIG1pZ3JhdGlvbjogJHtzdGF0ZW1lbnRzfSBzdGF0ZW1lbnRzYCk7XG4gICAgbG9nZ2VyLmRlYnVnKHNxbE1pZ3JhdGlvbik7XG4gIH0gZWxzZSB7XG4gICAgbG9nZ2VyLmluZm8oJ1NjaGVtYSBpcyB1cCB0byBkYXRlJyk7XG4gIH1cbiAgLy93ZSBhcHBseSB0aGUgZGlmZnMgaW4gc2NoZW1hIGFuZCBkYXRhIGluIG9uZSB0cmFuc2FjdGlvblxuICBjb25zdCBwZ1RtcENsaWVudCA9IG5ldyBwZy5DbGllbnQoY29ubmVjdGlvblByb3BzKTtcbiAgY29ubmVjdGlvblByb3BzLmRhdGFiYXNlID0gZGJDb25maWcuZGF0YWJhc2U7XG4gIHBnQ2xpZW50ID0gbmV3IHBnLkNsaWVudChjb25uZWN0aW9uUHJvcHMpO1xuICBhd2FpdCBQcm9taXNlLmFsbChbcGdDbGllbnQuY29ubmVjdCgpLCBwZ1RtcENsaWVudC5jb25uZWN0KCldKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBwZ0NsaWVudC5xdWVyeSgnQkVHSU4nKTtcbiAgICBsb2dnZXIuaW5mbygnQXBwbHlpbmcgdGhlIHNjaGVtYSBtaWdyYXRpb24nKTtcbiAgICBhd2FpdCBwZ0NsaWVudC5xdWVyeShzcWxNaWdyYXRpb24pO1xuICAgIC8vc3RyYXRlZ3kgdG8gYXBwbHkgZGF0YSA6XG4gICAgLy8tIHJlbW92ZSB0aGUgY29uc3RyYWludFxuICAgIC8vLSB1cHNlcnQgdGhlIGRhdGFcbiAgICAvLy0gYXBwbHkgdGhlIGNvbnN0cmFpbnRcblxuICAgIC8vYWx3YXlzIGJlIHN1cmUgdGhlIGNpIHVzZXIgZXhpc3RzXG4gICAgYXdhaXQgcGdDbGllbnQucXVlcnkoYFxuICAgICAgICAgICAgSU5TRVJUIElOVE8gcHVibGljLmRpcmVjdHVzX3VzZXJzIChpZCwgZmlyc3RfbmFtZSwgbGFzdF9uYW1lLCBlbWFpbClcbiAgICAgICAgICAgIFZBTFVFUyAoJzQ5YmNkZTVkLTkwYWEtNGJlOC1hYjEwLWY5YWUxYTA3NTQ2ZicsICdDSScsICdEOS1wbHVtYmluZycsICdkOUB3ZWJjYXBzdWxlLmlvJylcbiAgICAgICAgICAgIE9OIENPTkZMSUNUIERPIE5PVEhJTkdcbiAgICAgICAgYCk7XG5cbiAgICAvL2ZvciBjb25zdHJhaW50cyBzZWUgdGhpcyA6XG4gICAgLy9odHRwczovL2NvbmZsdWVuY2UuYXRsYXNzaWFuLmNvbS9rYi9ob3ctdG8tZHJvcC1hbmQtcmVjcmVhdGUtdGhlLWRhdGFiYXNlLWNvbnN0cmFpbnRzLW9uLXBvc3RncmVzcWwtNzc2ODEyNDUwLmh0bWxcbiAgICAvL3dlIGdldCBhbGwgdGhlIGNvbnN0cmFpbnRzIGV4Y2VwdCB0aGUgcHJpbWFyeSBrZXlzXG4gICAgY29uc3QgY29uc3RyYWludHMgPSBhd2FpdCBwZ0NsaWVudC5xdWVyeShgXG4gICAgICAgICAgICBTRUxFQ1QgbnNwbmFtZSwgcmVsbmFtZSwgY29ubmFtZSwgcGdfZ2V0X2NvbnN0cmFpbnRkZWYocGdfY29uc3RyYWludC5vaWQpXG4gICAgICAgICAgICBGUk9NIHBnX2NvbnN0cmFpbnRcbiAgICAgICAgICAgIElOTkVSIEpPSU4gcGdfY2xhc3MgT04gY29ucmVsaWQ9cGdfY2xhc3Mub2lkXG4gICAgICAgICAgICBJTk5FUiBKT0lOIHBnX25hbWVzcGFjZSBPTiBwZ19uYW1lc3BhY2Uub2lkPXBnX2NsYXNzLnJlbG5hbWVzcGFjZVxuICAgICAgICAgICAgV0hFUkUgTk9UIG5zcG5hbWUgPSAncGdfY2F0YWxvZycgQU5EIE5PVCBjb250eXBlID0gJ3AnXG4gICAgICAgICAgICBPUkRFUiBCWSBDQVNFIFdIRU4gY29udHlwZT0nZicgVEhFTiAwIEVMU0UgMSBFTkQgREVTQyxjb250eXBlIERFU0MsbnNwbmFtZSBERVNDLHJlbG5hbWUgREVTQyxjb25uYW1lIERFU0NcbiAgICAgICAgYCk7XG5cbiAgICAvL3JlbW92ZSB0aGUgY29uc3RyYWludHNcbiAgICBsb2dnZXIuaW5mbyhgRHJvcHBpbmcgJHtjb25zdHJhaW50cy5yb3dzLmxlbmd0aH0gY29uc3RyYWludHNgKTtcbiAgICAvL3RoZSBxdWVyeSBhYm92ZSBpcyBib3RoIGZvciBhZGRpbmcgb3IgZHJvcHBpbmcgb3JkZXIuIEZvciBkcm9wcGluZywgd2UgbmVlZCB0byByZXZlcnNlIHRoZSBvcmRlclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uc3RyYWludHMucm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY29uc3RyYWludCA9IGNvbnN0cmFpbnRzLnJvd3NbY29uc3RyYWludHMucm93cy5sZW5ndGggLSAxIC0gaV07XG4gICAgICBhd2FpdCBwZ0NsaWVudC5xdWVyeShgXG4gICAgICAgICAgICAgICAgQUxURVIgVEFCTEUgJHtjb25zdHJhaW50Lm5zcG5hbWV9LlwiJHtjb25zdHJhaW50LnJlbG5hbWV9XCIgRFJPUCBDT05TVFJBSU5UIFwiJHtjb25zdHJhaW50LmNvbm5hbWV9XCJcbiAgICAgICAgICAgIGApO1xuICAgIH1cblxuICAgIC8vcmVwbGFjZSBkYXRhXG4gICAgY29uc3QgY3N2RmlsZXMgPSBhd2FpdCByZWFkZGlyKCcuL3NxbC9kYXRhJyk7XG4gICAgbG9nZ2VyLmluZm8oYEltcG9ydGluZyAke2NzdkZpbGVzLmZpbHRlcigoZmlsZSkgPT4gZmlsZS5lbmRzV2l0aCgnLmNzdicpKS5sZW5ndGh9IENTViBmaWxlcyBmcm9tIC4vc3FsL2RhdGFgKTtcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgY3N2RmlsZXMpIHtcbiAgICAgIGlmIChmaWxlLmVuZHNXaXRoKCcuY3N2JykpIHtcbiAgICAgICAgY29uc3Qgbm9uUGFyc2VkVGFibGVOYW1lID0gZmlsZS5zbGljZSgwLCAtNCk7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsVGFibGVOYW1lID0gcGcuZXNjYXBlSWRlbnRpZmllcihub25QYXJzZWRUYWJsZU5hbWUpO1xuICAgICAgICBsZXQgY29weVRhYmxlTmFtZSA9IG9yaWdpbmFsVGFibGVOYW1lO1xuICAgICAgICBsZXQgZXhpc3RpbmdSb3dzQ2FuQ2F1c2VDb25mbGljdCA9IGZhbHNlO1xuICAgICAgICBpZiAoWydkaXJlY3R1c19maWxlcycsICdkaXJlY3R1c19mb2xkZXJzJ10uaW5jbHVkZXMobm9uUGFyc2VkVGFibGVOYW1lKSkge1xuICAgICAgICAgIC8vZGVsZXRlIGFsbCBmaWxlcyBhbmQgZm9sZGVycyB0aGF0IGFyZSBpbnNpZGUgdGhlIFwiZDktcGx1bWJpbmctY29tbW9uXCIgZm9sZGVyXG4gICAgICAgICAgY29uc3QgY29tbW9uRm9sZGVyTmFtZSA9ICdkOS1wbHVtYmluZy1jb21tb24nO1xuICAgICAgICAgIGNvbnN0IGZvbGRlcktleTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICAgICAgIGRpcmVjdHVzX2ZpbGVzOiAnZm9sZGVyJyxcbiAgICAgICAgICAgIGRpcmVjdHVzX2ZvbGRlcnM6ICdwYXJlbnQnLFxuICAgICAgICAgIH07XG4gICAgICAgICAgYXdhaXQgcGdDbGllbnQucXVlcnkoYCBcbiAgICAgICAgICAgICAgICAgICAgICAgIFdJVEggUkVDVVJTSVZFIGZvbGRlcl90cmVlIEFTIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIEFuY2hvcjogdGhlIFwiZDktcGx1bWJpbmctY29tbW9uXCIgZm9sZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VMRUNUIGlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlJPTSBkaXJlY3R1c19mb2xkZXJzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0hFUkUgbmFtZSA9ICcke2NvbW1vbkZvbGRlck5hbWV9J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5JT05cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBSZWN1cnNpdmUgc3RlcDogZmluZCBzdWJmb2xkZXJzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VMRUNUIGYuaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGUk9NIGRpcmVjdHVzX2ZvbGRlcnMgZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpPSU4gZm9sZGVyX3RyZWUgZnQgT04gZi5wYXJlbnQgPSBmdC5pZFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgREVMRVRFIEZST00gcHVibGljLiR7Y29weVRhYmxlTmFtZX0gQVMgdFxuICAgICAgICAgICAgICAgICAgICAgICAgV0hFUkUgdC4ke2ZvbGRlcktleVtub25QYXJzZWRUYWJsZU5hbWVdfSBJTiAoU0VMRUNUIGlkIEZST00gZm9sZGVyX3RyZWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYCk7XG4gICAgICAgICAgaWYgKG5vblBhcnNlZFRhYmxlTmFtZSA9PT0gJ2RpcmVjdHVzX2ZvbGRlcnMnKSB7XG4gICAgICAgICAgICBleGlzdGluZ1Jvd3NDYW5DYXVzZUNvbmZsaWN0ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXdhaXQgcGdDbGllbnQucXVlcnkoYERFTEVURSBGUk9NIHB1YmxpYy4ke2NvcHlUYWJsZU5hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4aXN0aW5nUm93c0NhbkNhdXNlQ29uZmxpY3QpIHtcbiAgICAgICAgICAvL3dlIHdpbGwgaW1wb3J0IGRhdGEgaW4gYSB0ZW1wb3JhcnkgdGFibGUsIHRoZW4gZG8gdGhlIGluc2VydFxuICAgICAgICAgIGNvcHlUYWJsZU5hbWUgPSBwZy5lc2NhcGVJZGVudGlmaWVyKGAke25vblBhcnNlZFRhYmxlTmFtZX1fd2JjZV90bXBgKTtcbiAgICAgICAgICBhd2FpdCBwZ0NsaWVudC5xdWVyeShcbiAgICAgICAgICAgIGBDUkVBVEUgVEVNUCBUQUJMRSAke2NvcHlUYWJsZU5hbWV9IE9OIENPTU1JVCBEUk9QIEFTIFNFTEVDVCAqIEZST00gcHVibGljLiR7b3JpZ2luYWxUYWJsZU5hbWV9IFdJVEggTk8gREFUQWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICAvL3JlYWQgZmlyc3QgbGluZVxuICAgICAgICBsZXQgZmlyc3RMaW5lID0gYXdhaXQgcmVhZEZpcnN0TGluZU9mRmlsZShgLi9zcWwvZGF0YS8ke2ZpbGV9YCk7XG4gICAgICAgIGZpcnN0TGluZSA9IGZpcnN0TGluZVxuICAgICAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAgICAgLm1hcCgoYykgPT4gYFwiJHtjfVwiYClcbiAgICAgICAgICAuam9pbignLCcpO1xuICAgICAgICBjb25zdCBpbmdlc3RTdHJlYW0gPSBwZ0NsaWVudC5xdWVyeShcbiAgICAgICAgICBjb3B5RnJvbShcbiAgICAgICAgICAgIGBDT1BZICR7Y29weVRhYmxlTmFtZX0gKCR7Zmlyc3RMaW5lfSkgIEZST00gU1RESU4gIERFTElNSVRFUiAnLCcgQ1NWIEhFQURFUmAsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgc291cmNlU3RyZWFtID0gZnMuY3JlYXRlUmVhZFN0cmVhbShgLi9zcWwvZGF0YS8ke2ZpbGV9YCk7XG4gICAgICAgIGluZ2VzdFN0cmVhbS5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKGBpbmdlc3RlZCAke2ZpbGV9YCk7XG4gICAgICAgIH0pO1xuICAgICAgICBsb2dnZXIuZGVidWcoYGluZ2VzdGluZyAke2ZpbGV9YCk7XG5cbiAgICAgICAgYXdhaXQgcGlwZWxpbmUoc291cmNlU3RyZWFtLCBpbmdlc3RTdHJlYW0pO1xuICAgICAgICBpZiAoZXhpc3RpbmdSb3dzQ2FuQ2F1c2VDb25mbGljdCkge1xuICAgICAgICAgIGF3YWl0IHBnQ2xpZW50LnF1ZXJ5KGBcblx0XHRcdFx0XHRcdFx0REVMRVRFIEZST00gcHVibGljLiR7b3JpZ2luYWxUYWJsZU5hbWV9XG5cdFx0XHRcdFx0XHRcdFdIRVJFIGlkIElOIChTRUxFQ1QgaWQgRlJPTSAke2NvcHlUYWJsZU5hbWV9KTtcblx0XHRcdFx0XHRcdGApO1xuICAgICAgICAgIGF3YWl0IHBnQ2xpZW50LnF1ZXJ5KGBcblx0XHRcdFx0XHRcdFx0SU5TRVJUIElOVE8gcHVibGljLiR7b3JpZ2luYWxUYWJsZU5hbWV9XG5cdFx0XHRcdFx0XHRcdFNFTEVDVCAqIEZST00gJHtjb3B5VGFibGVOYW1lfTtcblx0XHRcdFx0XHRcdGApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy9yZWVzdGFibGlzaCB0aGUgY29uc3RyYWludHNcbiAgICBsb2dnZXIuaW5mbyhgUmVzdG9yaW5nICR7Y29uc3RyYWludHMucm93cy5sZW5ndGh9IGNvbnN0cmFpbnRzYCk7XG4gICAgZm9yIChjb25zdCBjb25zdHJhaW50IG9mIGNvbnN0cmFpbnRzLnJvd3MpIHtcbiAgICAgIGF3YWl0IHBnQ2xpZW50LnF1ZXJ5KGBcbiAgICAgICAgICAgICAgICBBTFRFUiBUQUJMRSAke2NvbnN0cmFpbnQubnNwbmFtZX0uXCIke2NvbnN0cmFpbnQucmVsbmFtZX1cIiBBREQgQ09OU1RSQUlOVCBcIiR7Y29uc3RyYWludC5jb25uYW1lfVwiICAke2NvbnN0cmFpbnQucGdfZ2V0X2NvbnN0cmFpbnRkZWZ9XG4gICAgICAgICAgICBgKTtcbiAgICB9XG5cbiAgICAvL3VwZGF0ZSB0aGUgc2VxdWVuY2VzXG4gICAgLy93aGVuIGFkZGluZyB3aXRoIENPUFksIGFsbCBzZXF1ZW5jZXMgYXJlIG5vdCB1cCB0byBkYXRlXG4gICAgLy93ZSBuZWVkIHRvIGZpbmQgYWxsIHNlcXVlbmNlcyBhbmQgdGhlbiB0byBmaW5kIHRoZSBtYXggb24gdGhlIG1hbmFnZWQgY29sdW1uIGFuZCB0aGVuIHRvIHVwZGF0ZSB0aGUgc2VxdWVuY2VcblxuICAgIGNvbnN0IHNlcXVlbmNlcyA9IGF3YWl0IHBnQ2xpZW50LnF1ZXJ5KGBcbiAgICAgICAgICAgIFNFTEVDVCBuLm5zcG5hbWUgYXMgXCJzY2hlbWFcIixcbiAgICAgICAgICAgICAgICBjLnJlbG5hbWUgYXMgXCJuYW1lXCIsXG4gICAgICAgICAgICAgICAgQ0FTRSBjLnJlbGtpbmQgV0hFTiAncicgVEhFTiAndGFibGUnIFdIRU4gJ3YnIFRIRU4gJ3ZpZXcnIFdIRU4gJ20nIFRIRU4gJ21hdGVyaWFsaXplZCB2aWV3JyBXSEVOICdpJyBUSEVOICdpbmRleCcgV0hFTiAnUycgVEhFTiAnc2VxdWVuY2UnIFdIRU4gJ3MnIFRIRU4gJ3NwZWNpYWwnIFdIRU4gJ3QnIFRIRU4gJ1RPQVNUIHRhYmxlJyBXSEVOICdmJyBUSEVOICdmb3JlaWduIHRhYmxlJyBXSEVOICdwJyBUSEVOICdwYXJ0aXRpb25lZCB0YWJsZScgV0hFTiAnSScgVEhFTiAncGFydGl0aW9uZWQgaW5kZXgnIEVORCBhcyBcIlR5cGVcIixcbiAgICAgICAgICAgICAgICBwZ19jYXRhbG9nLnBnX2dldF91c2VyYnlpZChjLnJlbG93bmVyKSBhcyBcIk93bmVyXCJcbiAgICAgICAgICAgIEZST00gcGdfY2F0YWxvZy5wZ19jbGFzcyBjXG4gICAgICAgICAgICAgICAgTEVGVCBKT0lOIHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIG4gT04gbi5vaWQgPSBjLnJlbG5hbWVzcGFjZVxuICAgICAgICAgICAgV0hFUkUgYy5yZWxraW5kIElOICgnUycsJycpXG4gICAgICAgICAgICAgICAgQU5EIG4ubnNwbmFtZSA8PiAncGdfY2F0YWxvZydcbiAgICAgICAgICAgICAgICBBTkQgbi5uc3BuYW1lICF+ICdecGdfdG9hc3QnXG4gICAgICAgICAgICAgICAgQU5EIG4ubnNwbmFtZSA8PiAnaW5mb3JtYXRpb25fc2NoZW1hJ1xuICAgICAgICAgICAgQU5EIHBnX2NhdGFsb2cucGdfdGFibGVfaXNfdmlzaWJsZShjLm9pZClcbiAgICAgICAgICAgIE9SREVSIEJZIDEsMjtcbiAgICAgICAgYCk7XG5cbiAgICBsb2dnZXIuaW5mbyhgUmVzZXR0aW5nICR7c2VxdWVuY2VzLnJvd3MubGVuZ3RofSBzZXF1ZW5jZXNgKTtcbiAgICBmb3IgKGNvbnN0IHNlcSBvZiBzZXF1ZW5jZXMucm93cykge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBmaW5kIGNvbHVtbiBtYW5hZ2VkIGJ5ICR7c2VxLm5hbWV9YCk7XG4gICAgICBjb25zdCByZWxhdGlvbiA9IGF3YWl0IHBnQ2xpZW50LnF1ZXJ5KGBcbiAgICAgICAgICAgICAgICBTRUxFQ1QgZC5yZWZvYmppZDo6cmVnY2xhc3MgYXMgXCJ0YWJsZVwiLCBhLmF0dG5hbWUgYXMgXCJmaWVsZFwiXG4gICAgICAgICAgICAgICAgRlJPTSAgIHBnX2RlcGVuZCAgICBkXG4gICAgICAgICAgICAgICAgSk9JTiAgIHBnX2F0dHJpYnV0ZSBhIE9OIGEuYXR0cmVsaWQgPSBkLnJlZm9iamlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTkQgYS5hdHRudW0gICA9IGQucmVmb2Jqc3ViaWRcbiAgICAgICAgICAgICAgICBXSEVSRSAgZC5vYmppZCA9ICcke3NlcS5zY2hlbWF9LlwiJHtzZXEubmFtZX1cIic6OnJlZ2NsYXNzXG4gICAgICAgICAgICAgICAgQU5EICAgIGQucmVmb2Jqc3ViaWQgPiAwXG4gICAgICAgICAgICAgICAgQU5EICAgIGQuY2xhc3NpZCA9ICdwZ19jbGFzcyc6OnJlZ2NsYXNzO1xuICAgICAgICAgICAgYCk7XG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBmaW5kIG1heCBvZiAke3JlbGF0aW9uLnJvd3NbMF0udGFibGV9ICR7cmVsYXRpb24ucm93c1swXS5maWVsZH1gLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IG1heCA9IGF3YWl0IHBnQ2xpZW50LnF1ZXJ5KGBcbiAgICAgICAgICAgICAgICBTRUxFQ1QgTUFYKCR7cmVsYXRpb24ucm93c1swXS5maWVsZH0pXG4gICAgICAgICAgICAgICAgRlJPTSAke3JlbGF0aW9uLnJvd3NbMF0udGFibGV9XG4gICAgICAgICAgICBgKTtcblxuICAgICAgaWYgKG1heC5yb3dzWzBdLm1heCAhPT0gbnVsbCkge1xuICAgICAgICBsb2dnZXIuZGVidWcoYHJlc3RhcnQgJHtzZXEubmFtZX0gYXQgJHttYXgucm93c1swXS5tYXggKyAxfWApO1xuICAgICAgICBhd2FpdCBwZ0NsaWVudC5xdWVyeShcbiAgICAgICAgICBgYWx0ZXIgc2VxdWVuY2UgJHtzZXEuc2NoZW1hfS5cIiR7c2VxLm5hbWV9XCIgcmVzdGFydCB3aXRoICR7bWF4LnJvd3NbMF0ubWF4ICsgMX07YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCBwZ0NsaWVudC5xdWVyeSgnQ09NTUlUJyk7XG4gICAgbG9nZ2VyLmluZm8oJ1RyYW5zYWN0aW9uIGNvbW1pdHRlZCcpO1xuXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIHdoaWxlIGFwcGx5aW5nIHRoZSBzbmFwc2hvdCwgcm9sbGluZyBiYWNrIHRoZSB0cmFuc2FjdGlvbicpO1xuICAgIGF3YWl0IHBnQ2xpZW50LnF1ZXJ5KCdST0xMQkFDSycpO1xuXG4gICAgdGhyb3cgZTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBwZ0NsaWVudC5lbmQoKTtcbiAgICBhd2FpdCBwZ1RtcENsaWVudC5lbmQoKTtcbiAgfVxuICAvL3NjaGVtYSAoY29sbGVjdGlvbnMsIGZpZWxkcywgcmVsYXRpb25zKSBpcyBhbHdheXMgY2FjaGVkIChDQUNIRV9TQ0hFTUEpLCBwZXJtaXNzaW9ucyBvbmx5IHdoZW4gQ0FDSEVfRU5BQkxFRDogYSBwdXJnZSBpcyBlbm91Z2guXG4gIC8vZmxvd3MsIG9wZXJhdGlvbnMgYW5kIHdlYmhvb2tzIGFyZSBsb2FkZWQgaW4gbWVtb3J5IGF0IHN0YXJ0dXAgYW5kIG9ubHkgcmVsb2FkZWQgYnkgdGhlaXIgb3duIHNlcnZpY2VzOiBhIHJlc3RhcnQgaXMgbmVlZGVkLlxuICBsb2dnZXIud2FybignUHVyZ2UgdGhlIGQ5IGNhY2hlIChQT1NUIC91dGlscy9jYWNoZS9jbGVhcikgdG8gdGFrZSB0aGUgbmV3IHNjaGVtYSAoYW5kIHBlcm1pc3Npb25zLCBpZiBDQUNIRV9FTkFCTEVEKSBpbnRvIGFjY291bnQuIElmIGZsb3dzLCBvcGVyYXRpb25zIG9yIHdlYmhvb2tzIGNoYW5nZWQsIGFsc28gcmVzdGFydCBkOS4nKTtcbn1cblxuIl19
|
|
288
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbHktc25hcHNob3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY2xpL2NvbW1hbmRzL3NhdmUvYXBwbHktc25hcHNob3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFlQSw0Q0E2U0M7QUE1VEQseUJBQXlCO0FBQ3pCLG1DQUE4RDtBQUM5RCwrQkFBaUM7QUFDakMseUJBQXlCO0FBQ3pCLHFEQUFtRDtBQUNuRCwrQkFBNEI7QUFFNUIsbUNBQThDO0FBQzlDLHVDQUEwQztBQUMxQyx5Q0FBc0M7QUFFdEMsTUFBTSxPQUFPLEdBQUcsSUFBQSxnQkFBUyxFQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN0QyxNQUFNLFFBQVEsR0FBRyxJQUFBLGdCQUFTLEVBQUMsaUJBQWMsQ0FBQyxDQUFDO0FBR3BDLEtBQUssVUFBVSxnQkFBZ0IsQ0FBQyxRQUFrQjtJQUN2RCxJQUFJLFFBQW1CLENBQUM7SUFDeEIsTUFBTSxlQUFlLEdBQW9CO1FBQ3ZDLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtRQUNuQixJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUk7UUFDbkIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJO1FBQ25CLFFBQVEsRUFBRSxRQUFRLENBQUMsR0FBRztRQUN0QixRQUFRLEVBQUUsVUFBVTtRQUNwQixHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDaEUsQ0FBQztJQUNBLFFBQVE7SUFDUiwwQkFBMEI7SUFDMUIsZ0NBQWdDO0lBQ2hDLDBCQUEwQjtJQUM1QixRQUFRLEdBQUcsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzFDLGVBQU0sQ0FBQyxJQUFJLENBQUMsbUNBQW1DLFFBQVEsQ0FBQyxRQUFRLFVBQVUsQ0FBQyxDQUFDO0lBQzVFLE1BQU0sUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3pCLElBQUksQ0FBQztRQUNILE1BQU0sUUFBUSxDQUFDLEtBQUssQ0FBQywyQkFBMkIsUUFBUSxDQUFDLFFBQVEsVUFBVSxDQUFDLENBQUM7UUFDN0UsTUFBTSxRQUFRLENBQUMsS0FBSyxDQUFDLG1CQUFtQixRQUFRLENBQUMsUUFBUSxXQUFXLENBQUMsQ0FBQztJQUN4RSxDQUFDO1lBQVMsQ0FBQztRQUNULE1BQU0sUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxlQUFlLENBQUMsUUFBUSxHQUFHLEdBQUcsUUFBUSxDQUFDLFFBQVEsVUFBVSxDQUFDO0lBQzFELFFBQVEsR0FBRyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7SUFFMUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ2hDLEdBQUcsZUFBZTtRQUNsQixRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVE7S0FDNUIsQ0FBQyxDQUFDO0lBRUgsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxFQUFFLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFL0QsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLElBQUksQ0FBQztRQUNILGVBQU0sQ0FBQyxJQUFJLENBQUMsdURBQXVELENBQUMsQ0FBQztRQUNyRSx3T0FBd087UUFDeE8sSUFBSSxjQUFjLEdBQUc7Ozs7Ozs7U0FPaEIsQ0FBQztRQUNOLDJHQUEyRztRQUMzRyx5R0FBeUc7UUFDekcsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pFLE1BQU0sc0JBQXNCLEdBQUcsU0FBUzthQUNyQyxPQUFPLENBQ04sY0FBYyxFQUNkLEdBQUcsY0FBYzt5QkFDQSxDQUNsQixDQUFDLHdDQUF3QzthQUN6QyxPQUFPLENBQUMsOEJBQThCLEVBQUUsZUFBZSxDQUFDO2FBQ3hELE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsOENBQThDO1FBQzNHLDZGQUE2RjtRQUM3RixNQUFNLGNBQWMsR0FBRzs7OztTQUlsQixDQUFDO1FBQ04sTUFBTSxXQUFXLEdBQUcsTUFBTSxXQUFXLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzVELElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDNUMsc0RBQXNEO1lBQ3RELGVBQU0sQ0FBQyxJQUFJLENBQUMsZ0VBQWdFLENBQUMsQ0FBQztZQUM5RSw2REFBNkQ7WUFDN0QsTUFBTSxXQUFXLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUVELE1BQU0sUUFBUSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQy9DLENBQUM7WUFBUyxDQUFDO1FBQ1QsTUFBTSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDckIsTUFBTSxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELHVCQUF1QjtJQUN2QixNQUFNLGVBQWUsR0FBRyxJQUFJLGlCQUFRLENBQUM7UUFDbkMsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUNoQyxZQUFZLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2pDLElBQUksRUFBRSxDQUFDO1FBQ1QsQ0FBQztLQUNGLENBQUMsQ0FBQztJQUNILGVBQU0sQ0FBQyxJQUFJLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUNwRCxNQUFNLEdBQUcsR0FBRyxJQUFJLFNBQUcsRUFBRSxDQUFDO0lBQ3RCLE1BQU0sR0FBRyxDQUFDLE9BQU8sQ0FDZixNQUFNLElBQUEsbUJBQVcsR0FBRSxFQUNuQjtRQUNFLFFBQVE7UUFDUixNQUFNO1FBQ04sUUFBUTtRQUNSLGNBQWMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLFFBQVEsWUFBWSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRTtRQUM1TCxNQUFNO1FBQ04sY0FBYyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksa0JBQWtCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsUUFBUSxvQkFBb0IsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUU7S0FDck0sRUFDRDtRQUNFLEdBQUcsRUFBRTtZQUNILEdBQUcsT0FBTyxDQUFDLEdBQUc7WUFDZCx3QkFBd0IsRUFBRSxNQUFNLEVBQUUsK0VBQStFO1NBQ2xIO1FBQ0QsTUFBTSxFQUFFLGVBQWU7S0FDeEIsQ0FDRixDQUFDO0lBQ0YsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQztRQUNuRCxZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFDRCxJQUFJLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQy9GLGVBQU0sQ0FBQyxJQUFJLENBQUMscUJBQXFCLFVBQVUsYUFBYSxDQUFDLENBQUM7UUFDMUQsZUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM3QixDQUFDO1NBQU0sQ0FBQztRQUNOLGVBQU0sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBQ0QsMERBQTBEO0lBQzFELE1BQU0sV0FBVyxHQUFHLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNuRCxlQUFlLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7SUFDN0MsUUFBUSxHQUFHLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMxQyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQUUsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMvRCxJQUFJLENBQUM7UUFDSCxNQUFNLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUIsZUFBTSxDQUFDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sUUFBUSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNuQywwQkFBMEI7UUFDMUIseUJBQXlCO1FBQ3pCLG1CQUFtQjtRQUNuQix3QkFBd0I7UUFFeEIsbUNBQW1DO1FBQ25DLE1BQU0sUUFBUSxDQUFDLEtBQUssQ0FBQzs7OztTQUloQixDQUFDLENBQUM7UUFFUCw0QkFBNEI7UUFDNUIsb0hBQW9IO1FBQ3BILG9EQUFvRDtRQUNwRCxNQUFNLFdBQVcsR0FBRyxNQUFNLFFBQVEsQ0FBQyxLQUFLLENBQUM7Ozs7Ozs7U0FPcEMsQ0FBQyxDQUFDO1FBRVAsd0JBQXdCO1FBQ3hCLGVBQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sY0FBYyxDQUFDLENBQUM7UUFDL0Qsa0dBQWtHO1FBQ2xHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pELE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3JFLE1BQU0sUUFBUSxDQUFDLEtBQUssQ0FBQzs4QkFDRyxVQUFVLENBQUMsT0FBTyxLQUFLLFVBQVUsQ0FBQyxPQUFPLHNCQUFzQixVQUFVLENBQUMsT0FBTzthQUNsRyxDQUFDLENBQUM7UUFDWCxDQUFDO1FBRUQsY0FBYztRQUNkLE1BQU0sUUFBUSxHQUFHLE1BQU0sT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdDLGVBQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSw0QkFBNEIsQ0FBQyxDQUFDO1FBQzlHLEtBQUssTUFBTSxJQUFJLElBQUksUUFBUSxFQUFFLENBQUM7WUFDNUIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDN0MsTUFBTSxpQkFBaUIsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFDbEUsSUFBSSxhQUFhLEdBQUcsaUJBQWlCLENBQUM7Z0JBQ3RDLElBQUksNEJBQTRCLEdBQUcsS0FBSyxDQUFDO2dCQUN6QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDO29CQUN4RSw4RUFBOEU7b0JBQzlFLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztvQkFDckUsTUFBTSxTQUFTLEdBQTJCO3dCQUN4QyxjQUFjLEVBQUUsUUFBUTt3QkFDeEIsZ0JBQWdCLEVBQUUsUUFBUTtxQkFDM0IsQ0FBQztvQkFDRixNQUFNLFFBQVEsQ0FBQyxLQUFLLENBQUM7Ozs7O2lEQUtrQixnQkFBZ0I7Ozs7Ozs7NkNBT3BCLGFBQWE7a0NBQ3hCLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQzt5QkFDdEMsQ0FBQyxDQUFDO29CQUNqQixJQUFJLGtCQUFrQixLQUFLLGtCQUFrQixFQUFFLENBQUM7d0JBQzlDLDRCQUE0QixHQUFHLElBQUksQ0FBQztvQkFDdEMsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxRQUFRLENBQUMsS0FBSyxDQUFDLHNCQUFzQixhQUFhLEVBQUUsQ0FBQyxDQUFDO2dCQUM5RCxDQUFDO2dCQUNELElBQUksNEJBQTRCLEVBQUUsQ0FBQztvQkFDakMsOERBQThEO29CQUM5RCxhQUFhLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsa0JBQWtCLFdBQVcsQ0FBQyxDQUFDO29CQUN0RSxNQUFNLFFBQVEsQ0FBQyxLQUFLLENBQ2xCLHFCQUFxQixhQUFhLDJDQUEyQyxpQkFBaUIsZUFBZSxDQUM5RyxDQUFDO2dCQUNKLENBQUM7Z0JBQ0QsaUJBQWlCO2dCQUNqQixJQUFJLFNBQVMsR0FBRyxNQUFNLElBQUEsMkJBQW1CLEVBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUNoRSxTQUFTLEdBQUcsU0FBUztxQkFDbEIsS0FBSyxDQUFDLEdBQUcsQ0FBQztxQkFDVixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7cUJBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDYixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUNqQyxJQUFBLHNCQUFRLEVBQ04sUUFBUSxhQUFhLEtBQUssU0FBUyx5Q0FBeUMsQ0FDN0UsQ0FDRixDQUFDO2dCQUNGLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQy9ELFlBQVksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtvQkFDNUIsZUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ25DLENBQUMsQ0FBQyxDQUFDO2dCQUNILGVBQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUVsQyxNQUFNLFFBQVEsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBQzNDLElBQUksNEJBQTRCLEVBQUUsQ0FBQztvQkFDakMsTUFBTSxRQUFRLENBQUMsS0FBSyxDQUFDOzRCQUNILGlCQUFpQjtxQ0FDUixhQUFhO09BQzNDLENBQUMsQ0FBQztvQkFDQyxNQUFNLFFBQVEsQ0FBQyxLQUFLLENBQUM7NEJBQ0gsaUJBQWlCO3VCQUN0QixhQUFhO09BQzdCLENBQUMsQ0FBQztnQkFDRCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCw2QkFBNkI7UUFDN0IsZUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxjQUFjLENBQUMsQ0FBQztRQUNoRSxLQUFLLE1BQU0sVUFBVSxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMxQyxNQUFNLFFBQVEsQ0FBQyxLQUFLLENBQUM7OEJBQ0csVUFBVSxDQUFDLE9BQU8sS0FBSyxVQUFVLENBQUMsT0FBTyxxQkFBcUIsVUFBVSxDQUFDLE9BQU8sTUFBTSxVQUFVLENBQUMsb0JBQW9CO2FBQ3RJLENBQUMsQ0FBQztRQUNYLENBQUM7UUFFRCxzQkFBc0I7UUFDdEIseURBQXlEO1FBQ3pELDhHQUE4RztRQUU5RyxNQUFNLFNBQVMsR0FBRyxNQUFNLFFBQVEsQ0FBQyxLQUFLLENBQUM7Ozs7Ozs7Ozs7Ozs7U0FhbEMsQ0FBQyxDQUFDO1FBRVAsZUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxZQUFZLENBQUMsQ0FBQztRQUM1RCxLQUFLLE1BQU0sR0FBRyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNqQyxlQUFNLENBQUMsS0FBSyxDQUFDLDBCQUEwQixHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNuRCxNQUFNLFFBQVEsR0FBRyxNQUFNLFFBQVEsQ0FBQyxLQUFLLENBQUM7Ozs7O29DQUtSLEdBQUcsQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDLElBQUk7OzthQUc5QyxDQUFDLENBQUM7WUFDVCxlQUFNLENBQUMsS0FBSyxDQUNWLGVBQWUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FDbEUsQ0FBQztZQUNGLE1BQU0sR0FBRyxHQUFHLE1BQU0sUUFBUSxDQUFDLEtBQUssQ0FBQzs2QkFDVixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7dUJBQzVCLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSzthQUNoQyxDQUFDLENBQUM7WUFFVCxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUM3QixlQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLElBQUksT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUM5RCxNQUFNLFFBQVEsQ0FBQyxLQUFLLENBQ2xCLGtCQUFrQixHQUFHLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUFJLGtCQUFrQixHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FDbEYsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9CLGVBQU0sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUV2QyxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLGVBQU0sQ0FBQyxLQUFLLENBQUMsaUVBQWlFLENBQUMsQ0FBQztRQUNoRixNQUFNLFFBQVEsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFakMsTUFBTSxDQUFDLENBQUM7SUFDVixDQUFDO1lBQVMsQ0FBQztRQUNULE1BQU0sUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLE1BQU0sV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFDRCxrSUFBa0k7SUFDbEksOEhBQThIO0lBQzlILGVBQU0sQ0FBQyxJQUFJLENBQUMsa0xBQWtMLENBQUMsQ0FBQztBQUNsTSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHsgcGlwZWxpbmUgYXMgc3RyZWFtUGlwZWxpbmUsIFdyaXRhYmxlIH0gZnJvbSAnc3RyZWFtJztcbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0ICogYXMgcGcgZnJvbSAncGcnO1xuaW1wb3J0IHsgZnJvbSBhcyBjb3B5RnJvbSB9IGZyb20gJ3BnLWNvcHktc3RyZWFtcyc7XG5pbXBvcnQgeyBDbGkgfSBmcm9tICcuL2NsaSc7XG5pbXBvcnQgeyBEYkNvbmZpZyB9IGZyb20gJy4vZW52JztcbmltcG9ydCB7IHJlYWRGaXJzdExpbmVPZkZpbGUgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IGVuc3VyZUF0bGFzIH0gZnJvbSAnLi4vLi4vYXRsYXMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vbG9nZ2VyJztcblxuY29uc3QgcmVhZGRpciA9IHByb21pc2lmeShmcy5yZWFkZGlyKTtcbmNvbnN0IHBpcGVsaW5lID0gcHJvbWlzaWZ5KHN0cmVhbVBpcGVsaW5lKTtcblxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBwbHlTUUxTbmFwc2hvdChkYkNvbmZpZzogRGJDb25maWcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgbGV0IHBnQ2xpZW50OiBwZy5DbGllbnQ7XG4gIGNvbnN0IGNvbm5lY3Rpb25Qcm9wczogcGcuQ2xpZW50Q29uZmlnID0ge1xuICAgIHVzZXI6IGRiQ29uZmlnLnVzZXIsXG4gICAgaG9zdDogZGJDb25maWcuaG9zdCxcbiAgICBwb3J0OiBkYkNvbmZpZy5wb3J0LFxuICAgIHBhc3N3b3JkOiBkYkNvbmZpZy5wd2QsXG4gICAgZGF0YWJhc2U6ICdwb3N0Z3JlcycsXG4gICAgLi4uKGRiQ29uZmlnLnNzbCA/IHsgc3NsOiB7IHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2UgfSB9IDoge30pLFxuICB9O1xuICAgIC8vU0NIRU1BXG4gICAgLy8xLiB3ZSBjcmVhdGUgYW4gZW1wdHkgZGJcbiAgICAvLzIuIHdlIHBvcHVsYXRlIHdpdGggdGhlIHNjaGVtYVxuICAgIC8vMy4gd2UgY2FsY3VsYXRlIHRoZSBkaWZmXG4gIHBnQ2xpZW50ID0gbmV3IHBnLkNsaWVudChjb25uZWN0aW9uUHJvcHMpO1xuICBsb2dnZXIuaW5mbyhgQ3JlYXRpbmcgdGhlIHRlbXBvcmFyeSBkYXRhYmFzZSAke2RiQ29uZmlnLmRhdGFiYXNlfV90bXBfYmlzYCk7XG4gIGF3YWl0IHBnQ2xpZW50LmNvbm5lY3QoKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBwZ0NsaWVudC5xdWVyeShgRFJPUCBEQVRBQkFTRSBJRiBFWElTVFMgJHtkYkNvbmZpZy5kYXRhYmFzZX1fdG1wX2Jpc2ApO1xuICAgIGF3YWl0IHBnQ2xpZW50LnF1ZXJ5KGBDUkVBVEUgREFUQUJBU0UgJHtkYkNvbmZpZy5kYXRhYmFzZX1fdG1wX2JpcztgKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBwZ0NsaWVudC5lbmQoKTtcbiAgfVxuICBjb25uZWN0aW9uUHJvcHMuZGF0YWJhc2UgPSBgJHtkYkNvbmZpZy5kYXRhYmFzZX1fdG1wX2Jpc2A7XG4gIHBnQ2xpZW50ID0gbmV3IHBnLkNsaWVudChjb25uZWN0aW9uUHJvcHMpO1xuXG4gIGNvbnN0IGVuZERiQ2xpZW50ID0gbmV3IHBnLkNsaWVudCh7XG4gICAgLi4uY29ubmVjdGlvblByb3BzLFxuICAgIGRhdGFiYXNlOiBkYkNvbmZpZy5kYXRhYmFzZSxcbiAgfSk7XG5cbiAgYXdhaXQgUHJvbWlzZS5hbGwoW3BnQ2xpZW50LmNvbm5lY3QoKSwgZW5kRGJDbGllbnQuY29ubmVjdCgpXSk7XG5cbiAgbGV0IHNxbE1pZ3JhdGlvbiA9ICcnO1xuICB0cnkge1xuICAgIGxvZ2dlci5pbmZvKCdMb2FkaW5nIHRoZSB0YXJnZXQgc2NoZW1hIGludG8gdGhlIHRlbXBvcmFyeSBkYXRhYmFzZScpO1xuICAgIC8vd2UgbWFudWFsbHkgaW5zdGFsbCBwb3N0Z2lzIGFuZCBzb21lIGV4dGVuc2lvbnMuIFdlIHNob3VsZCBkbyBhIGR1bXAgb2Ygc3FsIGV4dGVuc2lvbnMgYnV0IHdlIGFyZSB3YWl0aW5nIGZvciBhdGxhc2dvIHRvIHN1cHBvcnQgdGhpcyAodGltZSBvZiB3cml0aW5nIDogMTkvMDMgLSBhdGxhc2dvIHJlbGVhc2VkIGV4dGVuc2lvbnMgc3VwcG9ydCBidXQgbm90IGluIHRoZSBjb21tdW5pdHkgdmVyc2lvbilcbiAgICBsZXQgZXh0ZW5zaW9uUXVlcnkgPSBgXG4gICAgICAgICAgICBjcmVhdGUgZXh0ZW5zaW9uIGlmIG5vdCBleGlzdHMgcG9zdGdpcztcbiAgICAgICAgICAgIGNyZWF0ZSBleHRlbnNpb24gaWYgbm90IGV4aXN0cyBmdXp6eXN0cm1hdGNoO1xuICAgICAgICAgICAgY3JlYXRlIGV4dGVuc2lvbiBpZiBub3QgZXhpc3RzIHBvc3RnaXNfdGlnZXJfZ2VvY29kZXIgO1xuICAgICAgICAgICAgY3JlYXRlIGV4dGVuc2lvbiBpZiBub3QgZXhpc3RzIHBvc3RnaXNfcmFzdGVyIDtcbiAgICAgICAgICAgIGNyZWF0ZSBleHRlbnNpb24gaWYgbm90IGV4aXN0cyBwb3N0Z2lzX3RvcG9sb2d5IDtcbiAgICAgICAgICAgIGNyZWF0ZSBleHRlbnNpb24gaWYgbm90IGV4aXN0cyBhZGRyZXNzX3N0YW5kYXJkaXplciA7XG4gICAgICAgIGA7XG4gICAgLy90aGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aGUgZHVtcCBpbiBhdGxhcyA6IHNjaGVtYSBhcmUgY3JlYXRlZCB3aXRoIENSRUFURSBhbmQgbm90IGNyZWF0ZSBpZiBub3QgZXhpdHMuLi5cbiAgICAvL3NvIHdlIGluc2VydCBleHRlbnNpb24gY3JlYXRpb24gYWZ0ZXIgc2NoZW1hIGNyZWF0aW9uIGluIG9yZGVyIHRvIGF2b2lkIGdldHRpbmcgXCJzY2hlbWEgYWxyZWFkeSBleGlzdHNcIlxuICAgIGNvbnN0IHNxbFNjaGVtYSA9IGZzLnJlYWRGaWxlU3luYygnLi9zcWwvc2NoZW1hLnNxbCcpLnRvU3RyaW5nKCk7XG4gICAgY29uc3Qgc3FsU2NoZW1hV2l0aEV4dGVuc2lvbiA9IHNxbFNjaGVtYVxuICAgICAgLnJlcGxhY2UoXG4gICAgICAgICdDUkVBVEUgVEFCTEUnLFxuICAgICAgICBgJHtleHRlbnNpb25RdWVyeX1cbiAgICAgICAgICAgIENSRUFURSBUQUJMRWAsXG4gICAgICApIC8vb25seSBmaXJzdCBvY2N1cnJlbmNlIHdpbGwgYmUgcmVwbGFjZWRcbiAgICAgIC5yZXBsYWNlKC9DUkVBVEUgU0NIRU1BIElGIE5PVCBFWElTVFMvZywgJ0NSRUFURSBTQ0hFTUEnKVxuICAgICAgLnJlcGxhY2UoL0NSRUFURSBTQ0hFTUEvZywgJ0NSRUFURSBTQ0hFTUEgSUYgTk9UIEVYSVNUUycpOyAvL2Vuc3VyZSBhbGwgY3JlYXRlIHNjaGVtYSB1c2UgXCJpZiBub3QgZXhpc3RzXCJcbiAgICAvL2lmIHRhcmdldCBkYXRhYmFzZSBkb2VzIG5vdCBjb250YWluIGFueSBkOSB0YWJsZXMgd2UganVzdCBuZWVkIHRvIHBvcHVsYXRlIHRoZSBiYXNlIHNjaGVtYS5cbiAgICBjb25zdCBjb3VudFRhYmxlc1JlcSA9IGBcbiAgICAgICAgICAgIFNFTEVDVCBDT1VOVCgqKSBcbiAgICAgICAgICAgIEZST00gaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlcyBcbiAgICAgICAgICAgIFdIRVJFIHRhYmxlX3NjaGVtYSA9ICdwdWJsaWMnIEFORCB0YWJsZV9uYW1lIExJS0UgJ2RpcmVjdHVzXyUnO1xuICAgICAgICBgO1xuICAgIGNvbnN0IGNvdW50VGFibGVzID0gYXdhaXQgZW5kRGJDbGllbnQucXVlcnkoY291bnRUYWJsZXNSZXEpO1xuICAgIGlmIChOdW1iZXIoY291bnRUYWJsZXMucm93c1swXS5jb3VudCkgPT09IDApIHtcbiAgICAgIC8vd2UgZHJvcCB0aGUgZXh0ZW5zaW9uIGFuZCByZWFwcGx5IHRoZSBzY2hlbWEgd2l0aCBkOVxuICAgICAgbG9nZ2VyLmluZm8oJ1RhcmdldCBkYXRhYmFzZSBoYXMgbm8gZDkgdGFibGVzOiBjcmVhdGluZyB0aGUgc2NoZW1hIGRpcmVjdGx5Jyk7XG4gICAgICAvL25vdGUgdGhhdCBmaW5hbGx5IGJsb2NrIHdpbGwgYmUgZXhlY3V0ZWQsIGV2ZW4gaWYgd2UgcmV0dXJuXG4gICAgICBhd2FpdCBlbmREYkNsaWVudC5xdWVyeShzcWxTY2hlbWFXaXRoRXh0ZW5zaW9uKTtcbiAgICB9XG5cbiAgICBhd2FpdCBwZ0NsaWVudC5xdWVyeShzcWxTY2hlbWFXaXRoRXh0ZW5zaW9uKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBwZ0NsaWVudC5lbmQoKTtcbiAgICBhd2FpdCBlbmREYkNsaWVudC5lbmQoKTtcbiAgfVxuXG4gIC8vd2UgY2FsY3VsYXRlIHRoZSBkaWZmXG4gIGNvbnN0IG1pZ3JhdGlvblN0cmVhbSA9IG5ldyBXcml0YWJsZSh7XG4gICAgd3JpdGU6IChjaHVuaywgX2VuY29kaW5nLCBuZXh0KSA9PiB7XG4gICAgICBzcWxNaWdyYXRpb24gKz0gY2h1bmsudG9TdHJpbmcoKTtcbiAgICAgIG5leHQoKTtcbiAgICB9LFxuICB9KTtcbiAgbG9nZ2VyLmluZm8oJ0NvbXB1dGluZyB0aGUgc2NoZW1hIGRpZmYgd2l0aCBhdGxhcycpO1xuICBjb25zdCBjbGkgPSBuZXcgQ2xpKCk7XG4gIGF3YWl0IGNsaS5jb21tYW5kKFxuICAgIGF3YWl0IGVuc3VyZUF0bGFzKCksXG4gICAgW1xuICAgICAgJ3NjaGVtYScsXG4gICAgICAnZGlmZicsXG4gICAgICAnLS1mcm9tJyxcbiAgICAgIGBwb3N0Z3JlczovLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGRiQ29uZmlnLnVzZXIpfToke2VuY29kZVVSSUNvbXBvbmVudChkYkNvbmZpZy5wd2QpfUAke2RiQ29uZmlnLmhvc3R9OiR7ZGJDb25maWcucG9ydH0vJHtkYkNvbmZpZy5kYXRhYmFzZX0/c3NsbW9kZT0ke2RiQ29uZmlnLnNzbCA/ICdyZXF1aXJlJyA6ICdkaXNhYmxlJ31gLFxuICAgICAgJy0tdG8nLFxuICAgICAgYHBvc3RncmVzOi8vJHtlbmNvZGVVUklDb21wb25lbnQoZGJDb25maWcudXNlcil9OiR7ZW5jb2RlVVJJQ29tcG9uZW50KGRiQ29uZmlnLnB3ZCl9QCR7ZGJDb25maWcuaG9zdH06JHtkYkNvbmZpZy5wb3J0fS8ke2RiQ29uZmlnLmRhdGFiYXNlfV90bXBfYmlzP3NzbG1vZGU9JHtkYkNvbmZpZy5zc2wgPyAncmVxdWlyZScgOiAnZGlzYWJsZSd9YCxcbiAgICBdLFxuICAgIHtcbiAgICAgIGVudjoge1xuICAgICAgICAuLi5wcm9jZXNzLmVudixcbiAgICAgICAgQVRMQVNfTk9fVVBEQVRFX05PVElGSUVSOiAndHJ1ZScsIC8vaWYgbm90IHNldCwgYXRsYXMgZW5kIGEgZmluYWwgbGluZSB3aXRoIFwiYSBuZXcgdmVyc2lvbiBvZiBhdGxhcyBpcyBhdmFpbGFibGVcIlxuICAgICAgfSxcbiAgICAgIHN0ZG91dDogbWlncmF0aW9uU3RyZWFtLFxuICAgIH0sXG4gICk7XG4gIGlmIChzcWxNaWdyYXRpb24uaW5jbHVkZXMoJ25vIGNoYW5nZXMgdG8gYmUgbWFkZScpKSB7XG4gICAgc3FsTWlncmF0aW9uID0gJyc7XG4gIH1cbiAgaWYgKHNxbE1pZ3JhdGlvbi50cmltKCkpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRzID0gc3FsTWlncmF0aW9uLnNwbGl0KCdcXG4nKS5maWx0ZXIoKGxpbmUpID0+IGxpbmUudHJpbSgpLmVuZHNXaXRoKCc7JykpLmxlbmd0aDtcbiAgICBsb2dnZXIuaW5mbyhgU2NoZW1hIG1pZ3JhdGlvbjogJHtzdGF0ZW1lbnRzfSBzdGF0ZW1lbnRzYCk7XG4gICAgbG9nZ2VyLmRlYnVnKHNxbE1pZ3JhdGlvbik7XG4gIH0gZWxzZSB7XG4gICAgbG9nZ2VyLmluZm8oJ1NjaGVtYSBpcyB1cCB0byBkYXRlJyk7XG4gIH1cbiAgLy93ZSBhcHBseSB0aGUgZGlmZnMgaW4gc2NoZW1hIGFuZCBkYXRhIGluIG9uZSB0cmFuc2FjdGlvblxuICBjb25zdCBwZ1RtcENsaWVudCA9IG5ldyBwZy5DbGllbnQoY29ubmVjdGlvblByb3BzKTtcbiAgY29ubmVjdGlvblByb3BzLmRhdGFiYXNlID0gZGJDb25maWcuZGF0YWJhc2U7XG4gIHBnQ2xpZW50ID0gbmV3IHBnLkNsaWVudChjb25uZWN0aW9uUHJvcHMpO1xuICBhd2FpdCBQcm9taXNlLmFsbChbcGdDbGllbnQuY29ubmVjdCgpLCBwZ1RtcENsaWVudC5jb25uZWN0KCldKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBwZ0NsaWVudC5xdWVyeSgnQkVHSU4nKTtcbiAgICBsb2dnZXIuaW5mbygnQXBwbHlpbmcgdGhlIHNjaGVtYSBtaWdyYXRpb24nKTtcbiAgICBhd2FpdCBwZ0NsaWVudC5xdWVyeShzcWxNaWdyYXRpb24pO1xuICAgIC8vc3RyYXRlZ3kgdG8gYXBwbHkgZGF0YSA6XG4gICAgLy8tIHJlbW92ZSB0aGUgY29uc3RyYWludFxuICAgIC8vLSB1cHNlcnQgdGhlIGRhdGFcbiAgICAvLy0gYXBwbHkgdGhlIGNvbnN0cmFpbnRcblxuICAgIC8vYWx3YXlzIGJlIHN1cmUgdGhlIGNpIHVzZXIgZXhpc3RzXG4gICAgYXdhaXQgcGdDbGllbnQucXVlcnkoYFxuICAgICAgICAgICAgSU5TRVJUIElOVE8gcHVibGljLmRpcmVjdHVzX3VzZXJzIChpZCwgZmlyc3RfbmFtZSwgbGFzdF9uYW1lLCBlbWFpbClcbiAgICAgICAgICAgIFZBTFVFUyAoJzQ5YmNkZTVkLTkwYWEtNGJlOC1hYjEwLWY5YWUxYTA3NTQ2ZicsICdDSScsICdEOS1wbHVtYmluZycsICdkOUB3ZWJjYXBzdWxlLmlvJylcbiAgICAgICAgICAgIE9OIENPTkZMSUNUIERPIE5PVEhJTkdcbiAgICAgICAgYCk7XG5cbiAgICAvL2ZvciBjb25zdHJhaW50cyBzZWUgdGhpcyA6XG4gICAgLy9odHRwczovL2NvbmZsdWVuY2UuYXRsYXNzaWFuLmNvbS9rYi9ob3ctdG8tZHJvcC1hbmQtcmVjcmVhdGUtdGhlLWRhdGFiYXNlLWNvbnN0cmFpbnRzLW9uLXBvc3RncmVzcWwtNzc2ODEyNDUwLmh0bWxcbiAgICAvL3dlIGdldCBhbGwgdGhlIGNvbnN0cmFpbnRzIGV4Y2VwdCB0aGUgcHJpbWFyeSBrZXlzXG4gICAgY29uc3QgY29uc3RyYWludHMgPSBhd2FpdCBwZ0NsaWVudC5xdWVyeShgXG4gICAgICAgICAgICBTRUxFQ1QgbnNwbmFtZSwgcmVsbmFtZSwgY29ubmFtZSwgcGdfZ2V0X2NvbnN0cmFpbnRkZWYocGdfY29uc3RyYWludC5vaWQpXG4gICAgICAgICAgICBGUk9NIHBnX2NvbnN0cmFpbnRcbiAgICAgICAgICAgIElOTkVSIEpPSU4gcGdfY2xhc3MgT04gY29ucmVsaWQ9cGdfY2xhc3Mub2lkXG4gICAgICAgICAgICBJTk5FUiBKT0lOIHBnX25hbWVzcGFjZSBPTiBwZ19uYW1lc3BhY2Uub2lkPXBnX2NsYXNzLnJlbG5hbWVzcGFjZVxuICAgICAgICAgICAgV0hFUkUgTk9UIG5zcG5hbWUgPSAncGdfY2F0YWxvZycgQU5EIE5PVCBjb250eXBlID0gJ3AnXG4gICAgICAgICAgICBPUkRFUiBCWSBDQVNFIFdIRU4gY29udHlwZT0nZicgVEhFTiAwIEVMU0UgMSBFTkQgREVTQyxjb250eXBlIERFU0MsbnNwbmFtZSBERVNDLHJlbG5hbWUgREVTQyxjb25uYW1lIERFU0NcbiAgICAgICAgYCk7XG5cbiAgICAvL3JlbW92ZSB0aGUgY29uc3RyYWludHNcbiAgICBsb2dnZXIuaW5mbyhgRHJvcHBpbmcgJHtjb25zdHJhaW50cy5yb3dzLmxlbmd0aH0gY29uc3RyYWludHNgKTtcbiAgICAvL3RoZSBxdWVyeSBhYm92ZSBpcyBib3RoIGZvciBhZGRpbmcgb3IgZHJvcHBpbmcgb3JkZXIuIEZvciBkcm9wcGluZywgd2UgbmVlZCB0byByZXZlcnNlIHRoZSBvcmRlclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uc3RyYWludHMucm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY29uc3RyYWludCA9IGNvbnN0cmFpbnRzLnJvd3NbY29uc3RyYWludHMucm93cy5sZW5ndGggLSAxIC0gaV07XG4gICAgICBhd2FpdCBwZ0NsaWVudC5xdWVyeShgXG4gICAgICAgICAgICAgICAgQUxURVIgVEFCTEUgJHtjb25zdHJhaW50Lm5zcG5hbWV9LlwiJHtjb25zdHJhaW50LnJlbG5hbWV9XCIgRFJPUCBDT05TVFJBSU5UIFwiJHtjb25zdHJhaW50LmNvbm5hbWV9XCJcbiAgICAgICAgICAgIGApO1xuICAgIH1cblxuICAgIC8vcmVwbGFjZSBkYXRhXG4gICAgY29uc3QgY3N2RmlsZXMgPSBhd2FpdCByZWFkZGlyKCcuL3NxbC9kYXRhJyk7XG4gICAgbG9nZ2VyLmluZm8oYEltcG9ydGluZyAke2NzdkZpbGVzLmZpbHRlcigoZmlsZSkgPT4gZmlsZS5lbmRzV2l0aCgnLmNzdicpKS5sZW5ndGh9IENTViBmaWxlcyBmcm9tIC4vc3FsL2RhdGFgKTtcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgY3N2RmlsZXMpIHtcbiAgICAgIGlmIChmaWxlLmVuZHNXaXRoKCcuY3N2JykpIHtcbiAgICAgICAgY29uc3Qgbm9uUGFyc2VkVGFibGVOYW1lID0gZmlsZS5zbGljZSgwLCAtNCk7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsVGFibGVOYW1lID0gcGcuZXNjYXBlSWRlbnRpZmllcihub25QYXJzZWRUYWJsZU5hbWUpO1xuICAgICAgICBsZXQgY29weVRhYmxlTmFtZSA9IG9yaWdpbmFsVGFibGVOYW1lO1xuICAgICAgICBsZXQgZXhpc3RpbmdSb3dzQ2FuQ2F1c2VDb25mbGljdCA9IGZhbHNlO1xuICAgICAgICBpZiAoWydkaXJlY3R1c19maWxlcycsICdkaXJlY3R1c19mb2xkZXJzJ10uaW5jbHVkZXMobm9uUGFyc2VkVGFibGVOYW1lKSkge1xuICAgICAgICAgIC8vZGVsZXRlIGFsbCBmaWxlcyBhbmQgZm9sZGVycyB0aGF0IGFyZSBpbnNpZGUgdGhlIFwiZDktcGx1bWJpbmctY29tbW9uXCIgZm9sZGVyXG4gICAgICAgICAgY29uc3QgY29tbW9uRm9sZGVyTmFtZSA9IHBnLmVzY2FwZUxpdGVyYWwoZGJDb25maWcuY29tbW9uRm9sZGVyTmFtZSk7XG4gICAgICAgICAgY29uc3QgZm9sZGVyS2V5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgICAgICAgZGlyZWN0dXNfZmlsZXM6ICdmb2xkZXInLFxuICAgICAgICAgICAgZGlyZWN0dXNfZm9sZGVyczogJ3BhcmVudCcsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBhd2FpdCBwZ0NsaWVudC5xdWVyeShgIFxuICAgICAgICAgICAgICAgICAgICAgICAgV0lUSCBSRUNVUlNJVkUgZm9sZGVyX3RyZWUgQVMgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gQW5jaG9yOiB0aGUgXCJkOS1wbHVtYmluZy1jb21tb25cIiBmb2xkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRUxFQ1QgaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGUk9NIGRpcmVjdHVzX2ZvbGRlcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXSEVSRSBuYW1lID0gJHtjb21tb25Gb2xkZXJOYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5JT05cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBSZWN1cnNpdmUgc3RlcDogZmluZCBzdWJmb2xkZXJzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VMRUNUIGYuaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGUk9NIGRpcmVjdHVzX2ZvbGRlcnMgZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpPSU4gZm9sZGVyX3RyZWUgZnQgT04gZi5wYXJlbnQgPSBmdC5pZFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgREVMRVRFIEZST00gcHVibGljLiR7Y29weVRhYmxlTmFtZX0gQVMgdFxuICAgICAgICAgICAgICAgICAgICAgICAgV0hFUkUgdC4ke2ZvbGRlcktleVtub25QYXJzZWRUYWJsZU5hbWVdfSBJTiAoU0VMRUNUIGlkIEZST00gZm9sZGVyX3RyZWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYCk7XG4gICAgICAgICAgaWYgKG5vblBhcnNlZFRhYmxlTmFtZSA9PT0gJ2RpcmVjdHVzX2ZvbGRlcnMnKSB7XG4gICAgICAgICAgICBleGlzdGluZ1Jvd3NDYW5DYXVzZUNvbmZsaWN0ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXdhaXQgcGdDbGllbnQucXVlcnkoYERFTEVURSBGUk9NIHB1YmxpYy4ke2NvcHlUYWJsZU5hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4aXN0aW5nUm93c0NhbkNhdXNlQ29uZmxpY3QpIHtcbiAgICAgICAgICAvL3dlIHdpbGwgaW1wb3J0IGRhdGEgaW4gYSB0ZW1wb3JhcnkgdGFibGUsIHRoZW4gZG8gdGhlIGluc2VydFxuICAgICAgICAgIGNvcHlUYWJsZU5hbWUgPSBwZy5lc2NhcGVJZGVudGlmaWVyKGAke25vblBhcnNlZFRhYmxlTmFtZX1fd2JjZV90bXBgKTtcbiAgICAgICAgICBhd2FpdCBwZ0NsaWVudC5xdWVyeShcbiAgICAgICAgICAgIGBDUkVBVEUgVEVNUCBUQUJMRSAke2NvcHlUYWJsZU5hbWV9IE9OIENPTU1JVCBEUk9QIEFTIFNFTEVDVCAqIEZST00gcHVibGljLiR7b3JpZ2luYWxUYWJsZU5hbWV9IFdJVEggTk8gREFUQWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICAvL3JlYWQgZmlyc3QgbGluZVxuICAgICAgICBsZXQgZmlyc3RMaW5lID0gYXdhaXQgcmVhZEZpcnN0TGluZU9mRmlsZShgLi9zcWwvZGF0YS8ke2ZpbGV9YCk7XG4gICAgICAgIGZpcnN0TGluZSA9IGZpcnN0TGluZVxuICAgICAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAgICAgLm1hcCgoYykgPT4gYFwiJHtjfVwiYClcbiAgICAgICAgICAuam9pbignLCcpO1xuICAgICAgICBjb25zdCBpbmdlc3RTdHJlYW0gPSBwZ0NsaWVudC5xdWVyeShcbiAgICAgICAgICBjb3B5RnJvbShcbiAgICAgICAgICAgIGBDT1BZICR7Y29weVRhYmxlTmFtZX0gKCR7Zmlyc3RMaW5lfSkgIEZST00gU1RESU4gIERFTElNSVRFUiAnLCcgQ1NWIEhFQURFUmAsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgc291cmNlU3RyZWFtID0gZnMuY3JlYXRlUmVhZFN0cmVhbShgLi9zcWwvZGF0YS8ke2ZpbGV9YCk7XG4gICAgICAgIGluZ2VzdFN0cmVhbS5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKGBpbmdlc3RlZCAke2ZpbGV9YCk7XG4gICAgICAgIH0pO1xuICAgICAgICBsb2dnZXIuZGVidWcoYGluZ2VzdGluZyAke2ZpbGV9YCk7XG5cbiAgICAgICAgYXdhaXQgcGlwZWxpbmUoc291cmNlU3RyZWFtLCBpbmdlc3RTdHJlYW0pO1xuICAgICAgICBpZiAoZXhpc3RpbmdSb3dzQ2FuQ2F1c2VDb25mbGljdCkge1xuICAgICAgICAgIGF3YWl0IHBnQ2xpZW50LnF1ZXJ5KGBcblx0XHRcdFx0XHRcdFx0REVMRVRFIEZST00gcHVibGljLiR7b3JpZ2luYWxUYWJsZU5hbWV9XG5cdFx0XHRcdFx0XHRcdFdIRVJFIGlkIElOIChTRUxFQ1QgaWQgRlJPTSAke2NvcHlUYWJsZU5hbWV9KTtcblx0XHRcdFx0XHRcdGApO1xuICAgICAgICAgIGF3YWl0IHBnQ2xpZW50LnF1ZXJ5KGBcblx0XHRcdFx0XHRcdFx0SU5TRVJUIElOVE8gcHVibGljLiR7b3JpZ2luYWxUYWJsZU5hbWV9XG5cdFx0XHRcdFx0XHRcdFNFTEVDVCAqIEZST00gJHtjb3B5VGFibGVOYW1lfTtcblx0XHRcdFx0XHRcdGApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy9yZWVzdGFibGlzaCB0aGUgY29uc3RyYWludHNcbiAgICBsb2dnZXIuaW5mbyhgUmVzdG9yaW5nICR7Y29uc3RyYWludHMucm93cy5sZW5ndGh9IGNvbnN0cmFpbnRzYCk7XG4gICAgZm9yIChjb25zdCBjb25zdHJhaW50IG9mIGNvbnN0cmFpbnRzLnJvd3MpIHtcbiAgICAgIGF3YWl0IHBnQ2xpZW50LnF1ZXJ5KGBcbiAgICAgICAgICAgICAgICBBTFRFUiBUQUJMRSAke2NvbnN0cmFpbnQubnNwbmFtZX0uXCIke2NvbnN0cmFpbnQucmVsbmFtZX1cIiBBREQgQ09OU1RSQUlOVCBcIiR7Y29uc3RyYWludC5jb25uYW1lfVwiICAke2NvbnN0cmFpbnQucGdfZ2V0X2NvbnN0cmFpbnRkZWZ9XG4gICAgICAgICAgICBgKTtcbiAgICB9XG5cbiAgICAvL3VwZGF0ZSB0aGUgc2VxdWVuY2VzXG4gICAgLy93aGVuIGFkZGluZyB3aXRoIENPUFksIGFsbCBzZXF1ZW5jZXMgYXJlIG5vdCB1cCB0byBkYXRlXG4gICAgLy93ZSBuZWVkIHRvIGZpbmQgYWxsIHNlcXVlbmNlcyBhbmQgdGhlbiB0byBmaW5kIHRoZSBtYXggb24gdGhlIG1hbmFnZWQgY29sdW1uIGFuZCB0aGVuIHRvIHVwZGF0ZSB0aGUgc2VxdWVuY2VcblxuICAgIGNvbnN0IHNlcXVlbmNlcyA9IGF3YWl0IHBnQ2xpZW50LnF1ZXJ5KGBcbiAgICAgICAgICAgIFNFTEVDVCBuLm5zcG5hbWUgYXMgXCJzY2hlbWFcIixcbiAgICAgICAgICAgICAgICBjLnJlbG5hbWUgYXMgXCJuYW1lXCIsXG4gICAgICAgICAgICAgICAgQ0FTRSBjLnJlbGtpbmQgV0hFTiAncicgVEhFTiAndGFibGUnIFdIRU4gJ3YnIFRIRU4gJ3ZpZXcnIFdIRU4gJ20nIFRIRU4gJ21hdGVyaWFsaXplZCB2aWV3JyBXSEVOICdpJyBUSEVOICdpbmRleCcgV0hFTiAnUycgVEhFTiAnc2VxdWVuY2UnIFdIRU4gJ3MnIFRIRU4gJ3NwZWNpYWwnIFdIRU4gJ3QnIFRIRU4gJ1RPQVNUIHRhYmxlJyBXSEVOICdmJyBUSEVOICdmb3JlaWduIHRhYmxlJyBXSEVOICdwJyBUSEVOICdwYXJ0aXRpb25lZCB0YWJsZScgV0hFTiAnSScgVEhFTiAncGFydGl0aW9uZWQgaW5kZXgnIEVORCBhcyBcIlR5cGVcIixcbiAgICAgICAgICAgICAgICBwZ19jYXRhbG9nLnBnX2dldF91c2VyYnlpZChjLnJlbG93bmVyKSBhcyBcIk93bmVyXCJcbiAgICAgICAgICAgIEZST00gcGdfY2F0YWxvZy5wZ19jbGFzcyBjXG4gICAgICAgICAgICAgICAgTEVGVCBKT0lOIHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIG4gT04gbi5vaWQgPSBjLnJlbG5hbWVzcGFjZVxuICAgICAgICAgICAgV0hFUkUgYy5yZWxraW5kIElOICgnUycsJycpXG4gICAgICAgICAgICAgICAgQU5EIG4ubnNwbmFtZSA8PiAncGdfY2F0YWxvZydcbiAgICAgICAgICAgICAgICBBTkQgbi5uc3BuYW1lICF+ICdecGdfdG9hc3QnXG4gICAgICAgICAgICAgICAgQU5EIG4ubnNwbmFtZSA8PiAnaW5mb3JtYXRpb25fc2NoZW1hJ1xuICAgICAgICAgICAgQU5EIHBnX2NhdGFsb2cucGdfdGFibGVfaXNfdmlzaWJsZShjLm9pZClcbiAgICAgICAgICAgIE9SREVSIEJZIDEsMjtcbiAgICAgICAgYCk7XG5cbiAgICBsb2dnZXIuaW5mbyhgUmVzZXR0aW5nICR7c2VxdWVuY2VzLnJvd3MubGVuZ3RofSBzZXF1ZW5jZXNgKTtcbiAgICBmb3IgKGNvbnN0IHNlcSBvZiBzZXF1ZW5jZXMucm93cykge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBmaW5kIGNvbHVtbiBtYW5hZ2VkIGJ5ICR7c2VxLm5hbWV9YCk7XG4gICAgICBjb25zdCByZWxhdGlvbiA9IGF3YWl0IHBnQ2xpZW50LnF1ZXJ5KGBcbiAgICAgICAgICAgICAgICBTRUxFQ1QgZC5yZWZvYmppZDo6cmVnY2xhc3MgYXMgXCJ0YWJsZVwiLCBhLmF0dG5hbWUgYXMgXCJmaWVsZFwiXG4gICAgICAgICAgICAgICAgRlJPTSAgIHBnX2RlcGVuZCAgICBkXG4gICAgICAgICAgICAgICAgSk9JTiAgIHBnX2F0dHJpYnV0ZSBhIE9OIGEuYXR0cmVsaWQgPSBkLnJlZm9iamlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTkQgYS5hdHRudW0gICA9IGQucmVmb2Jqc3ViaWRcbiAgICAgICAgICAgICAgICBXSEVSRSAgZC5vYmppZCA9ICcke3NlcS5zY2hlbWF9LlwiJHtzZXEubmFtZX1cIic6OnJlZ2NsYXNzXG4gICAgICAgICAgICAgICAgQU5EICAgIGQucmVmb2Jqc3ViaWQgPiAwXG4gICAgICAgICAgICAgICAgQU5EICAgIGQuY2xhc3NpZCA9ICdwZ19jbGFzcyc6OnJlZ2NsYXNzO1xuICAgICAgICAgICAgYCk7XG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBmaW5kIG1heCBvZiAke3JlbGF0aW9uLnJvd3NbMF0udGFibGV9ICR7cmVsYXRpb24ucm93c1swXS5maWVsZH1gLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IG1heCA9IGF3YWl0IHBnQ2xpZW50LnF1ZXJ5KGBcbiAgICAgICAgICAgICAgICBTRUxFQ1QgTUFYKCR7cmVsYXRpb24ucm93c1swXS5maWVsZH0pXG4gICAgICAgICAgICAgICAgRlJPTSAke3JlbGF0aW9uLnJvd3NbMF0udGFibGV9XG4gICAgICAgICAgICBgKTtcblxuICAgICAgaWYgKG1heC5yb3dzWzBdLm1heCAhPT0gbnVsbCkge1xuICAgICAgICBsb2dnZXIuZGVidWcoYHJlc3RhcnQgJHtzZXEubmFtZX0gYXQgJHttYXgucm93c1swXS5tYXggKyAxfWApO1xuICAgICAgICBhd2FpdCBwZ0NsaWVudC5xdWVyeShcbiAgICAgICAgICBgYWx0ZXIgc2VxdWVuY2UgJHtzZXEuc2NoZW1hfS5cIiR7c2VxLm5hbWV9XCIgcmVzdGFydCB3aXRoICR7bWF4LnJvd3NbMF0ubWF4ICsgMX07YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCBwZ0NsaWVudC5xdWVyeSgnQ09NTUlUJyk7XG4gICAgbG9nZ2VyLmluZm8oJ1RyYW5zYWN0aW9uIGNvbW1pdHRlZCcpO1xuXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIHdoaWxlIGFwcGx5aW5nIHRoZSBzbmFwc2hvdCwgcm9sbGluZyBiYWNrIHRoZSB0cmFuc2FjdGlvbicpO1xuICAgIGF3YWl0IHBnQ2xpZW50LnF1ZXJ5KCdST0xMQkFDSycpO1xuXG4gICAgdGhyb3cgZTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBwZ0NsaWVudC5lbmQoKTtcbiAgICBhd2FpdCBwZ1RtcENsaWVudC5lbmQoKTtcbiAgfVxuICAvL3NjaGVtYSAoY29sbGVjdGlvbnMsIGZpZWxkcywgcmVsYXRpb25zKSBpcyBhbHdheXMgY2FjaGVkIChDQUNIRV9TQ0hFTUEpLCBwZXJtaXNzaW9ucyBvbmx5IHdoZW4gQ0FDSEVfRU5BQkxFRDogYSBwdXJnZSBpcyBlbm91Z2guXG4gIC8vZmxvd3MsIG9wZXJhdGlvbnMgYW5kIHdlYmhvb2tzIGFyZSBsb2FkZWQgaW4gbWVtb3J5IGF0IHN0YXJ0dXAgYW5kIG9ubHkgcmVsb2FkZWQgYnkgdGhlaXIgb3duIHNlcnZpY2VzOiBhIHJlc3RhcnQgaXMgbmVlZGVkLlxuICBsb2dnZXIud2FybignUHVyZ2UgdGhlIGQ5IGNhY2hlIChQT1NUIC91dGlscy9jYWNoZS9jbGVhcikgdG8gdGFrZSB0aGUgbmV3IHNjaGVtYSAoYW5kIHBlcm1pc3Npb25zLCBpZiBDQUNIRV9FTkFCTEVEKSBpbnRvIGFjY291bnQuIElmIGZsb3dzLCBvcGVyYXRpb25zIG9yIHdlYmhvb2tzIGNoYW5nZWQsIGFsc28gcmVzdGFydCBkOS4nKTtcbn1cblxuIl19
|
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
import type { DriverConfig } from '@wbce-d9/storage';
|
|
2
2
|
export interface DbConfig {
|
|
3
3
|
host: string;
|
|
4
|
+
port: number;
|
|
4
5
|
user: string;
|
|
5
6
|
pwd: string;
|
|
6
7
|
database: string;
|
|
7
8
|
ssl?: boolean;
|
|
9
|
+
commonFolderName: string;
|
|
8
10
|
}
|
|
9
11
|
export interface DbFlags {
|
|
10
12
|
host?: string;
|
|
13
|
+
port?: string;
|
|
11
14
|
user?: string;
|
|
12
15
|
password?: string;
|
|
13
16
|
database?: string;
|
|
14
17
|
ssl?: boolean;
|
|
18
|
+
commonFolder?: string;
|
|
15
19
|
}
|
|
16
20
|
export interface StorageFlags {
|
|
17
21
|
storageConfig?: string[];
|