@xpertss/projen-types 0.0.15 → 0.0.17
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 +10 -10
- package/API.md +3 -3
- package/lib/actions/action-build-workflow.js +12 -6
- package/lib/actions/action-dogfood-workflow.js +1 -1
- package/lib/actions/action-sonar-workflow.js +1 -1
- package/lib/actions/github-action-project.js +1 -1
- package/lib/cdk/app-runtime-scaffold.js +1 -1
- package/lib/cdk/cdk-app-project.js +1 -1
- package/lib/cdk/cdk-infra-project.js +1 -1
- package/lib/cdk/cdk-typescript-base.js +1 -1
- package/lib/cdk/components/ecr-ecs-constructs.js +1 -1
- package/lib/cdk/components/edge-networking-constructs.js +1 -1
- package/lib/cdk/database-component.js +1 -1
- package/lib/common/ci-steps.d.ts +3 -1
- package/lib/common/ci-steps.js +5 -3
- package/lib/common/projen-drift-check-workflow.d.ts +4 -2
- package/lib/common/projen-drift-check-workflow.js +3 -3
- package/lib/common/workflow-change-notice-workflow.js +1 -1
- package/lib/java/components/cdk-deploy-hook.js +1 -1
- package/lib/java/components/code-index-workflow.js +1 -1
- package/lib/java/components/docker-publish.js +1 -1
- package/lib/java/components/flyway-migration.js +1 -1
- package/lib/java/components/github-packages-publish.js +1 -1
- package/lib/java/components/maven-central-publish.js +1 -1
- package/lib/java/components/maven-upgrade-report.js +1 -1
- package/lib/java/java-app-project.js +1 -1
- package/lib/java/java-library-project.js +1 -1
- package/lib/java/java-maven-base.js +6 -6
- package/lib/java/java-service-project.js +1 -1
- package/lib/java/java-spring-boot-project.js +3 -3
- package/lib/java/java-versions.js +2 -2
- package/lib/java/maven/maven-module.js +1 -1
- package/lib/java/maven/maven-pom.d.ts +7 -0
- package/lib/java/maven/maven-pom.js +29 -15
- package/package.json +1 -1
package/.jsii
CHANGED
|
@@ -4253,7 +4253,7 @@
|
|
|
4253
4253
|
},
|
|
4254
4254
|
"locationInModule": {
|
|
4255
4255
|
"filename": "src/common/projen-drift-check-workflow.ts",
|
|
4256
|
-
"line":
|
|
4256
|
+
"line": 44
|
|
4257
4257
|
},
|
|
4258
4258
|
"parameters": [
|
|
4259
4259
|
{
|
|
@@ -4274,7 +4274,7 @@
|
|
|
4274
4274
|
"kind": "class",
|
|
4275
4275
|
"locationInModule": {
|
|
4276
4276
|
"filename": "src/common/projen-drift-check-workflow.ts",
|
|
4277
|
-
"line":
|
|
4277
|
+
"line": 41
|
|
4278
4278
|
},
|
|
4279
4279
|
"name": "ProjenDriftCheckWorkflow",
|
|
4280
4280
|
"properties": [
|
|
@@ -4285,7 +4285,7 @@
|
|
|
4285
4285
|
"immutable": true,
|
|
4286
4286
|
"locationInModule": {
|
|
4287
4287
|
"filename": "src/common/projen-drift-check-workflow.ts",
|
|
4288
|
-
"line":
|
|
4288
|
+
"line": 42
|
|
4289
4289
|
},
|
|
4290
4290
|
"name": "workflow",
|
|
4291
4291
|
"type": {
|
|
@@ -4322,7 +4322,7 @@
|
|
|
4322
4322
|
"immutable": true,
|
|
4323
4323
|
"locationInModule": {
|
|
4324
4324
|
"filename": "src/common/projen-drift-check-workflow.ts",
|
|
4325
|
-
"line":
|
|
4325
|
+
"line": 35
|
|
4326
4326
|
},
|
|
4327
4327
|
"name": "gheTokenSecret",
|
|
4328
4328
|
"optional": true,
|
|
@@ -4333,14 +4333,14 @@
|
|
|
4333
4333
|
{
|
|
4334
4334
|
"abstract": true,
|
|
4335
4335
|
"docs": {
|
|
4336
|
-
"default": "\"
|
|
4336
|
+
"default": "\"./node_modules/.bin/projen\"",
|
|
4337
4337
|
"stability": "experimental",
|
|
4338
|
-
"summary": "The command that regenerates the project from `.projenrc.ts`."
|
|
4338
|
+
"summary": "The command that regenerates the project from `.projenrc.ts`. The default runs the projen that `npm ci` just installed (exact version from `package-lock.json`) rather than `npx`, which can install on demand."
|
|
4339
4339
|
},
|
|
4340
4340
|
"immutable": true,
|
|
4341
4341
|
"locationInModule": {
|
|
4342
4342
|
"filename": "src/common/projen-drift-check-workflow.ts",
|
|
4343
|
-
"line":
|
|
4343
|
+
"line": 26
|
|
4344
4344
|
},
|
|
4345
4345
|
"name": "projenCommand",
|
|
4346
4346
|
"optional": true,
|
|
@@ -4357,7 +4357,7 @@
|
|
|
4357
4357
|
"immutable": true,
|
|
4358
4358
|
"locationInModule": {
|
|
4359
4359
|
"filename": "src/common/projen-drift-check-workflow.ts",
|
|
4360
|
-
"line":
|
|
4360
|
+
"line": 38
|
|
4361
4361
|
},
|
|
4362
4362
|
"name": "workflowName",
|
|
4363
4363
|
"optional": true,
|
|
@@ -4483,6 +4483,6 @@
|
|
|
4483
4483
|
"symbolId": "src/common/workflow-change-notice-workflow:WorkflowChangeNoticeWorkflowOptions"
|
|
4484
4484
|
}
|
|
4485
4485
|
},
|
|
4486
|
-
"version": "0.0.
|
|
4487
|
-
"fingerprint": "
|
|
4486
|
+
"version": "0.0.17",
|
|
4487
|
+
"fingerprint": "Ezxs+RHKOMYGbDs43hj50p8S4BfisJneuNo29Qaax7o="
|
|
4488
4488
|
}
|
package/API.md
CHANGED
|
@@ -18820,7 +18820,7 @@ const projenDriftCheckWorkflowOptions: ProjenDriftCheckWorkflowOptions = { ... }
|
|
|
18820
18820
|
| **Name** | **Type** | **Description** |
|
|
18821
18821
|
| --- | --- | --- |
|
|
18822
18822
|
| <code><a href="#@xpertss/projen-types.ProjenDriftCheckWorkflowOptions.property.gheTokenSecret">gheTokenSecret</a></code> | <code>string</code> | GitHub secret holding a token with permission to comment on PRs, used for the best-effort drift report comment. |
|
|
18823
|
-
| <code><a href="#@xpertss/projen-types.ProjenDriftCheckWorkflowOptions.property.projenCommand">projenCommand</a></code> | <code>string</code> | The command that regenerates the project from `.projenrc.ts`. |
|
|
18823
|
+
| <code><a href="#@xpertss/projen-types.ProjenDriftCheckWorkflowOptions.property.projenCommand">projenCommand</a></code> | <code>string</code> | The command that regenerates the project from `.projenrc.ts`. The default runs the projen that `npm ci` just installed (exact version from `package-lock.json`) rather than `npx`, which can install on demand. |
|
|
18824
18824
|
| <code><a href="#@xpertss/projen-types.ProjenDriftCheckWorkflowOptions.property.workflowName">workflowName</a></code> | <code>string</code> | *No description.* |
|
|
18825
18825
|
|
|
18826
18826
|
---
|
|
@@ -18849,9 +18849,9 @@ public readonly projenCommand: string;
|
|
|
18849
18849
|
```
|
|
18850
18850
|
|
|
18851
18851
|
- *Type:* string
|
|
18852
|
-
- *Default:* "
|
|
18852
|
+
- *Default:* "./node_modules/.bin/projen"
|
|
18853
18853
|
|
|
18854
|
-
The command that regenerates the project from `.projenrc.ts`.
|
|
18854
|
+
The command that regenerates the project from `.projenrc.ts`. The default runs the projen that `npm ci` just installed (exact version from `package-lock.json`) rather than `npx`, which can install on demand.
|
|
18855
18855
|
|
|
18856
18856
|
---
|
|
18857
18857
|
|
|
@@ -20,7 +20,7 @@ const ACTIONLINT_SHA256 = '8aca8db96f1b94770f1b0d72b6dddcb1ebb8123cb3712530b08cc
|
|
|
20
20
|
* the release build job, so the lint commands exist in exactly one place.
|
|
21
21
|
*/
|
|
22
22
|
class ActionBuildWorkflow extends projen_1.Component {
|
|
23
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.ActionBuildWorkflow", version: "0.0.
|
|
23
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.ActionBuildWorkflow", version: "0.0.17" };
|
|
24
24
|
task;
|
|
25
25
|
workflow;
|
|
26
26
|
constructor(scope) {
|
|
@@ -33,12 +33,18 @@ class ActionBuildWorkflow extends projen_1.Component {
|
|
|
33
33
|
description: 'Lint the action (shellcheck, yamllint, actionlint)',
|
|
34
34
|
});
|
|
35
35
|
this.task.exec('sudo apt-get update -y && sudo apt-get install -y shellcheck yamllint');
|
|
36
|
-
this.task.exec(`curl -fsSL -o /tmp/actionlint.tar.gz "https://github.com/rhysd/actionlint/releases/download/v${ACTIONLINT_VERSION}/actionlint_${ACTIONLINT_VERSION}_linux_amd64.tar.gz"`);
|
|
37
|
-
this.task.exec(`echo "${ACTIONLINT_SHA256} /tmp/actionlint.tar.gz" | sha256sum -c -`);
|
|
38
|
-
this.task.exec('tar -xzf /tmp/actionlint.tar.gz -C /tmp actionlint');
|
|
39
36
|
this.task.exec('find . -path ./node_modules -prune -o -name "*.sh" -print0 | xargs -0 -r shellcheck');
|
|
40
37
|
this.task.exec('yamllint -c .yamllint action.yml .github/workflows/*.yml');
|
|
41
|
-
|
|
38
|
+
// One step, so the private `mktemp -d` dir carries from download through
|
|
39
|
+
// execution - never the world-writable shared /tmp, where another local
|
|
40
|
+
// user could plant the binary that gets run.
|
|
41
|
+
this.task.exec([
|
|
42
|
+
'TMP="$(mktemp -d)"',
|
|
43
|
+
`curl -fsSL -o "$TMP/actionlint.tar.gz" "https://github.com/rhysd/actionlint/releases/download/v${ACTIONLINT_VERSION}/actionlint_${ACTIONLINT_VERSION}_linux_amd64.tar.gz"`,
|
|
44
|
+
`echo "${ACTIONLINT_SHA256} $TMP/actionlint.tar.gz" | sha256sum -c -`,
|
|
45
|
+
'tar -xzf "$TMP/actionlint.tar.gz" -C "$TMP" actionlint',
|
|
46
|
+
'"$TMP/actionlint" action.yml .github/workflows/*.yml',
|
|
47
|
+
].join(' && '));
|
|
42
48
|
this.workflow = new projen_1.github.TaskWorkflow(gh, {
|
|
43
49
|
name: 'build',
|
|
44
50
|
jobId: 'build',
|
|
@@ -51,4 +57,4 @@ class ActionBuildWorkflow extends projen_1.Component {
|
|
|
51
57
|
}
|
|
52
58
|
}
|
|
53
59
|
exports.ActionBuildWorkflow = ActionBuildWorkflow;
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWJ1aWxkLXdvcmtmbG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FjdGlvbnMvYWN0aW9uLWJ1aWxkLXdvcmtmbG93LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxtQ0FBaUQ7QUFDakQsaUVBQWlFO0FBRWpFLDBFQUEwRTtBQUMxRSw0REFBNEQ7QUFDNUQsTUFBTSxrQkFBa0IsR0FBRyxRQUFRLENBQUM7QUFDcEMsTUFBTSxpQkFBaUIsR0FDckIsa0VBQWtFLENBQUM7QUFFckU7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQWEsbUJBQW9CLFNBQVEsa0JBQVM7O0lBQ2hDLElBQUksQ0FBTztJQUNYLFFBQVEsQ0FBc0I7SUFFOUMsWUFBWSxLQUEyQjtRQUNyQyxLQUFLLENBQUMsS0FBSyxFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFFcEMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUN4QixJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDUixNQUFNLElBQUksS0FBSyxDQUNiLCtEQUErRCxDQUNoRSxDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDaEMsV0FBVyxFQUFFLG9EQUFvRDtTQUNsRSxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDWix1RUFBdUUsQ0FDeEUsQ0FBQztRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNaLHFGQUFxRixDQUN0RixDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsMERBQTBELENBQUMsQ0FBQztRQUMzRSx5RUFBeUU7UUFDekUsd0VBQXdFO1FBQ3hFLDZDQUE2QztRQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDWjtZQUNFLG9CQUFvQjtZQUNwQixrR0FBa0csa0JBQWtCLGVBQWUsa0JBQWtCLHNCQUFzQjtZQUMzSyxTQUFTLGlCQUFpQiw0Q0FBNEM7WUFDdEUsd0RBQXdEO1lBQ3hELHNEQUFzRDtTQUN2RCxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FDZixDQUFDO1FBRUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGVBQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFO1lBQzFDLElBQUksRUFBRSxPQUFPO1lBQ2IsS0FBSyxFQUFFLE9BQU87WUFDZCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUU7WUFDM0QsV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLGVBQU0sQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRTtZQUM5RCxhQUFhLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxzQkFBc0IsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUM7U0FDakUsQ0FBQyxDQUFDO1FBQ0gsSUFBQSxzQ0FBbUIsRUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQ2xCLDhEQUE4RCxDQUMvRCxDQUFDO0lBQ0osQ0FBQzs7QUFqREgsa0RBa0RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBUYXNrLCBnaXRodWIgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgbm90ZVdvcmtmbG93UHVycG9zZSB9IGZyb20gJy4uL2NvbW1vbi93b3JrZmxvdy1wdXJwb3NlJztcblxuLy8gUGlubmVkIHJlbGVhc2UgKyB2ZXJpZmllZCBTSEEtMjU2IChsaW51eF9hbWQ2NCkgLSB1cGdyYWRlIGlzIGEgcmV2aWV3ZWRcbi8vIGRpZmYgb2YgdGhpcyBjb25zdGFudCwgbmV2ZXIgYSBmbG9hdGluZyB2ZXJzaW9uIChBRC0wMDEpLlxuY29uc3QgQUNUSU9OTElOVF9WRVJTSU9OID0gJzEuNy4xMic7XG5jb25zdCBBQ1RJT05MSU5UX1NIQTI1NiA9XG4gICc4YWNhOGRiOTZmMWI5NDc3MGYxYjBkNzJiNmRkZGNiMWViYjgxMjNjYjM3MTI1MzBiMDhjYzM4N2IzNDlhM2Q4JztcblxuLyoqXG4gKiBUaGUgQUQtMDAxIExheWVyLTEgbGludCBnYXRlIGZvciBhIGNvbXBvc2l0ZS1hY3Rpb24gcmVwbzogc2hlbGxjaGVjayxcbiAqIHlhbWxsaW50LCBhbmQgYSBwaW5uZWQgYGFjdGlvbmxpbnRgIHJlbGVhc2UgYmluYXJ5ICh2ZXJpZmllZCBieSBTSEEtMjU2LFxuICogbmV2ZXIgYSBtYXJrZXRwbGFjZSBhY3Rpb24gLSBvcmcgcG9saWN5KS4gQ3JlYXRlcyBhIGRlZGljYXRlZCBgbGludGAgdGFza1xuICogKG5hbWVkIHRvIGF2b2lkIGNvbGxpZGluZyB3aXRoIHByb2plbidzIG93biByZXNlcnZlZCBgYnVpbGRgIHRhc2ssIHdoaWNoXG4gKiBzcGF3bnMgdGhlIHVucmVsYXRlZCBkZWZhdWx0L3ByZS1jb21waWxlL2NvbXBpbGUvcG9zdC1jb21waWxlL3Rlc3QvcGFja2FnZVxuICogY2hhaW4gLSBpbmNsdWRpbmcgYGRlZmF1bHRgLCBpLmUuIHJlLXJ1bm5pbmcgYC5wcm9qZW5yYy50c2AsIHdoaWNoIGlzIG5vdFxuICogd2hhdCB0aGlzIGdhdGUgaXMgZm9yKSBhbmQgd3JhcHMgaXQgaW4gYSBgVGFza1dvcmtmbG93YCAoYGJ1aWxkLnltbGApXG4gKiB0cmlnZ2VyZWQgb24gcHVzaC10by1gbWFpbmAgYW5kIGBwdWxsX3JlcXVlc3RgLiBUaGUgc2FtZSB0YXNrIGlzIHJldXNlZCBieVxuICogdGhlIHJlbGVhc2UgYnVpbGQgam9iLCBzbyB0aGUgbGludCBjb21tYW5kcyBleGlzdCBpbiBleGFjdGx5IG9uZSBwbGFjZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEFjdGlvbkJ1aWxkV29ya2Zsb3cgZXh0ZW5kcyBDb21wb25lbnQge1xuICBwdWJsaWMgcmVhZG9ubHkgdGFzazogVGFzaztcbiAgcHVibGljIHJlYWRvbmx5IHdvcmtmbG93OiBnaXRodWIuVGFza1dvcmtmbG93O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBnaXRodWIuR2l0SHViUHJvamVjdCkge1xuICAgIHN1cGVyKHNjb3BlLCAnQWN0aW9uQnVpbGRXb3JrZmxvdycpO1xuXG4gICAgY29uc3QgZ2ggPSBzY29wZS5naXRodWI7XG4gICAgaWYgKCFnaCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQWN0aW9uQnVpbGRXb3JrZmxvdyByZXF1aXJlcyBHaXRIdWIgaW50ZWdyYXRpb24gdG8gYmUgZW5hYmxlZCcsXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMudGFzayA9IHNjb3BlLmFkZFRhc2soJ2xpbnQnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ0xpbnQgdGhlIGFjdGlvbiAoc2hlbGxjaGVjaywgeWFtbGxpbnQsIGFjdGlvbmxpbnQpJyxcbiAgICB9KTtcbiAgICB0aGlzLnRhc2suZXhlYyhcbiAgICAgICdzdWRvIGFwdC1nZXQgdXBkYXRlIC15ICYmIHN1ZG8gYXB0LWdldCBpbnN0YWxsIC15IHNoZWxsY2hlY2sgeWFtbGxpbnQnLFxuICAgICk7XG4gICAgdGhpcy50YXNrLmV4ZWMoXG4gICAgICAnZmluZCAuIC1wYXRoIC4vbm9kZV9tb2R1bGVzIC1wcnVuZSAtbyAtbmFtZSBcIiouc2hcIiAtcHJpbnQwIHwgeGFyZ3MgLTAgLXIgc2hlbGxjaGVjaycsXG4gICAgKTtcbiAgICB0aGlzLnRhc2suZXhlYygneWFtbGxpbnQgLWMgLnlhbWxsaW50IGFjdGlvbi55bWwgLmdpdGh1Yi93b3JrZmxvd3MvKi55bWwnKTtcbiAgICAvLyBPbmUgc3RlcCwgc28gdGhlIHByaXZhdGUgYG1rdGVtcCAtZGAgZGlyIGNhcnJpZXMgZnJvbSBkb3dubG9hZCB0aHJvdWdoXG4gICAgLy8gZXhlY3V0aW9uIC0gbmV2ZXIgdGhlIHdvcmxkLXdyaXRhYmxlIHNoYXJlZCAvdG1wLCB3aGVyZSBhbm90aGVyIGxvY2FsXG4gICAgLy8gdXNlciBjb3VsZCBwbGFudCB0aGUgYmluYXJ5IHRoYXQgZ2V0cyBydW4uXG4gICAgdGhpcy50YXNrLmV4ZWMoXG4gICAgICBbXG4gICAgICAgICdUTVA9XCIkKG1rdGVtcCAtZClcIicsXG4gICAgICAgIGBjdXJsIC1mc1NMIC1vIFwiJFRNUC9hY3Rpb25saW50LnRhci5nelwiIFwiaHR0cHM6Ly9naXRodWIuY29tL3JoeXNkL2FjdGlvbmxpbnQvcmVsZWFzZXMvZG93bmxvYWQvdiR7QUNUSU9OTElOVF9WRVJTSU9OfS9hY3Rpb25saW50XyR7QUNUSU9OTElOVF9WRVJTSU9OfV9saW51eF9hbWQ2NC50YXIuZ3pcImAsXG4gICAgICAgIGBlY2hvIFwiJHtBQ1RJT05MSU5UX1NIQTI1Nn0gICRUTVAvYWN0aW9ubGludC50YXIuZ3pcIiB8IHNoYTI1NnN1bSAtYyAtYCxcbiAgICAgICAgJ3RhciAteHpmIFwiJFRNUC9hY3Rpb25saW50LnRhci5nelwiIC1DIFwiJFRNUFwiIGFjdGlvbmxpbnQnLFxuICAgICAgICAnXCIkVE1QL2FjdGlvbmxpbnRcIiBhY3Rpb24ueW1sIC5naXRodWIvd29ya2Zsb3dzLyoueW1sJyxcbiAgICAgIF0uam9pbignICYmICcpLFxuICAgICk7XG5cbiAgICB0aGlzLndvcmtmbG93ID0gbmV3IGdpdGh1Yi5UYXNrV29ya2Zsb3coZ2gsIHtcbiAgICAgIG5hbWU6ICdidWlsZCcsXG4gICAgICBqb2JJZDogJ2J1aWxkJyxcbiAgICAgIHRhc2s6IHRoaXMudGFzayxcbiAgICAgIHRyaWdnZXJzOiB7IHB1c2g6IHsgYnJhbmNoZXM6IFsnbWFpbiddIH0sIHB1bGxSZXF1ZXN0OiB7fSB9LFxuICAgICAgcGVybWlzc2lvbnM6IHsgY29udGVudHM6IGdpdGh1Yi53b3JrZmxvd3MuSm9iUGVybWlzc2lvbi5SRUFEIH0sXG4gICAgICBwcmVCdWlsZFN0ZXBzOiBbeyBuYW1lOiAnSW5zdGFsbCBkZXBlbmRlbmNpZXMnLCBydW46ICducG0gY2knIH1dLFxuICAgIH0pO1xuICAgIG5vdGVXb3JrZmxvd1B1cnBvc2UoXG4gICAgICB0aGlzLndvcmtmbG93LmZpbGUsXG4gICAgICAnTGludCBnYXRlIGZvciB0aGUgYWN0aW9uIChzaGVsbGNoZWNrLCB5YW1sbGludCwgYWN0aW9ubGludCkuJyxcbiAgICApO1xuICB9XG59XG4iXX0=
|
|
@@ -41,7 +41,7 @@ const UNCONFIGURED_STEPS = [
|
|
|
41
41
|
* error: if you wrote a scenario by hand, you can write its cleanup too.
|
|
42
42
|
*/
|
|
43
43
|
class ActionDogfoodWorkflow extends projen_1.Component {
|
|
44
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.ActionDogfoodWorkflow", version: "0.0.
|
|
44
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.ActionDogfoodWorkflow", version: "0.0.17" };
|
|
45
45
|
workflow;
|
|
46
46
|
constructor(scope, options) {
|
|
47
47
|
super(scope, 'ActionDogfoodWorkflow');
|
|
@@ -15,7 +15,7 @@ const SONAR_SCANNER_SHA256 = 'bb8f709f9cb73352f8d1260a3b3c506c0f41146754bc630762
|
|
|
15
15
|
* inclusions may skip `action.yml` outside `.github/`.
|
|
16
16
|
*/
|
|
17
17
|
class ActionSonarWorkflow extends projen_1.Component {
|
|
18
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.ActionSonarWorkflow", version: "0.0.
|
|
18
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.ActionSonarWorkflow", version: "0.0.17" };
|
|
19
19
|
workflow;
|
|
20
20
|
constructor(scope, options) {
|
|
21
21
|
super(scope, 'ActionSonarWorkflow');
|
|
@@ -63,7 +63,7 @@ hand-committed.
|
|
|
63
63
|
* per the action's own F### spec - this type only lints it.
|
|
64
64
|
*/
|
|
65
65
|
class GitHubActionProject extends projen_1.github.GitHubProject {
|
|
66
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.GitHubActionProject", version: "0.0.
|
|
66
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.GitHubActionProject", version: "0.0.17" };
|
|
67
67
|
buildWorkflow;
|
|
68
68
|
dogfoodWorkflow;
|
|
69
69
|
sonarWorkflow;
|
|
@@ -8,7 +8,7 @@ const projen_1 = require("projen");
|
|
|
8
8
|
* layered on top of `CdkTypescriptProject`'s pure-infra scaffold.
|
|
9
9
|
*/
|
|
10
10
|
class AppRuntimeScaffold extends projen_1.Component {
|
|
11
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.AppRuntimeScaffold", version: "0.0.
|
|
11
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.AppRuntimeScaffold", version: "0.0.17" };
|
|
12
12
|
constructor(project, appEntryPoint = 'src/app.ts') {
|
|
13
13
|
super(project, 'AppRuntimeScaffold');
|
|
14
14
|
const app = new projen_1.SourceCode(project, appEntryPoint);
|
|
@@ -13,7 +13,7 @@ const workflow_purpose_1 = require("../common/workflow-purpose");
|
|
|
13
13
|
* application source, a database, and an app-level build/test workflow.
|
|
14
14
|
*/
|
|
15
15
|
class CdkAppProject extends cdk_infra_project_1.CdkInfraProject {
|
|
16
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.CdkAppProject", version: "0.0.
|
|
16
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.CdkAppProject", version: "0.0.17" };
|
|
17
17
|
constructor(options) {
|
|
18
18
|
super(options);
|
|
19
19
|
new app_runtime_scaffold_1.AppRuntimeScaffold(this, options.appEntryPoint ?? 'src/app.ts');
|
|
@@ -11,7 +11,7 @@ const edge_networking_constructs_1 = require("./components/edge-networking-const
|
|
|
11
11
|
* externally-built images). Reference example: SimulcastAVDelivery.
|
|
12
12
|
*/
|
|
13
13
|
class CdkInfraProject extends cdk_typescript_base_1.CdkTypescriptProject {
|
|
14
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.CdkInfraProject", version: "0.0.
|
|
14
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.CdkInfraProject", version: "0.0.17" };
|
|
15
15
|
constructor(options) {
|
|
16
16
|
super(options);
|
|
17
17
|
if (options.ecrEcs?.enabled) {
|
|
@@ -23,7 +23,7 @@ const PROJEN_TYPES_VERSION = require('../../package.json').version;
|
|
|
23
23
|
* `ManualDeployWorkflow` when `environments` is provided.
|
|
24
24
|
*/
|
|
25
25
|
class CdkTypescriptProject extends projen_1.awscdk.AwsCdkTypeScriptApp {
|
|
26
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.CdkTypescriptProject", version: "0.0.
|
|
26
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.CdkTypescriptProject", version: "0.0.17" };
|
|
27
27
|
constructor(options) {
|
|
28
28
|
super({
|
|
29
29
|
// Spread first, overrides after: forwarding the caller's options is
|
|
@@ -10,7 +10,7 @@ const projen_1 = require("projen");
|
|
|
10
10
|
* built from this project's own source (app projects).
|
|
11
11
|
*/
|
|
12
12
|
class EcrEcsConstructs extends projen_1.Component {
|
|
13
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.EcrEcsConstructs", version: "0.0.
|
|
13
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.EcrEcsConstructs", version: "0.0.17" };
|
|
14
14
|
constructor(project, options = {}) {
|
|
15
15
|
super(project, 'EcrEcsConstructs');
|
|
16
16
|
const externalImageSource = options.externalImageSource ?? true;
|
|
@@ -42,7 +42,7 @@ const HELPERS = {
|
|
|
42
42
|
* to whichever `edgeResources` the consuming project type opts into.
|
|
43
43
|
*/
|
|
44
44
|
class EdgeNetworkingConstructs extends projen_1.Component {
|
|
45
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.EdgeNetworkingConstructs", version: "0.0.
|
|
45
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.EdgeNetworkingConstructs", version: "0.0.17" };
|
|
46
46
|
constructor(project, resources) {
|
|
47
47
|
super(project, 'EdgeNetworkingConstructs');
|
|
48
48
|
if (resources.length === 0) {
|
|
@@ -10,7 +10,7 @@ const projen_1 = require("projen");
|
|
|
10
10
|
* the consuming team to wire up; no opinionated default is imposed.
|
|
11
11
|
*/
|
|
12
12
|
class DatabaseComponent extends projen_1.Component {
|
|
13
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.DatabaseComponent", version: "0.0.
|
|
13
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.DatabaseComponent", version: "0.0.17" };
|
|
14
14
|
constructor(project, options = {}) {
|
|
15
15
|
super(project, 'DatabaseComponent');
|
|
16
16
|
const engine = options.engine ?? 'postgres';
|
package/lib/common/ci-steps.d.ts
CHANGED
|
@@ -9,6 +9,8 @@ export declare const SETUP_NODE_STEP: github.workflows.JobStep;
|
|
|
9
9
|
/**
|
|
10
10
|
* `npm ci`, which needs a committed `package-lock.json`. Without one, `npm
|
|
11
11
|
* ci` fails with a message that doesn't say what to do, so the missing
|
|
12
|
-
* lockfile is reported first, as an annotation.
|
|
12
|
+
* lockfile is reported first, as an annotation. `--ignore-scripts` keeps
|
|
13
|
+
* dependency lifecycle scripts from running on PR code; projen synth
|
|
14
|
+
* doesn't need them.
|
|
13
15
|
*/
|
|
14
16
|
export declare const NPM_CI_STEP: github.workflows.JobStep;
|
package/lib/common/ci-steps.js
CHANGED
|
@@ -15,7 +15,9 @@ exports.SETUP_NODE_STEP = {
|
|
|
15
15
|
/**
|
|
16
16
|
* `npm ci`, which needs a committed `package-lock.json`. Without one, `npm
|
|
17
17
|
* ci` fails with a message that doesn't say what to do, so the missing
|
|
18
|
-
* lockfile is reported first, as an annotation.
|
|
18
|
+
* lockfile is reported first, as an annotation. `--ignore-scripts` keeps
|
|
19
|
+
* dependency lifecycle scripts from running on PR code; projen synth
|
|
20
|
+
* doesn't need them.
|
|
19
21
|
*/
|
|
20
22
|
exports.NPM_CI_STEP = {
|
|
21
23
|
name: 'Install dependencies',
|
|
@@ -24,7 +26,7 @@ exports.NPM_CI_STEP = {
|
|
|
24
26
|
' echo "::error file=package.json::package-lock.json is not committed. Run npm install, commit package-lock.json, and push."',
|
|
25
27
|
' exit 1',
|
|
26
28
|
'fi',
|
|
27
|
-
'npm ci',
|
|
29
|
+
'npm ci --ignore-scripts',
|
|
28
30
|
].join('\n'),
|
|
29
31
|
};
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2ktc3RlcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbW9uL2NpLXN0ZXBzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBOzs7OztHQUtHO0FBQ1UsUUFBQSxlQUFlLEdBQTZCO0lBQ3ZELElBQUksRUFBRSxZQUFZO0lBQ2xCLElBQUksRUFBRSx1QkFBdUI7SUFDN0IsSUFBSSxFQUFFLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRTtDQUMvQixDQUFDO0FBRUY7Ozs7OztHQU1HO0FBQ1UsUUFBQSxXQUFXLEdBQTZCO0lBQ25ELElBQUksRUFBRSxzQkFBc0I7SUFDNUIsR0FBRyxFQUFFO1FBQ0gscUNBQXFDO1FBQ3JDLDhIQUE4SDtRQUM5SCxVQUFVO1FBQ1YsSUFBSTtRQUNKLHlCQUF5QjtLQUMxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7Q0FDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2l0aHViIH0gZnJvbSAncHJvamVuJztcblxuLyoqXG4gKiBOb2RlIHNldHVwIGZvciB3b3JrZmxvd3MgdGhhdCBydW4gYG5weCBwcm9qZW5gLiBQaW5uZWQsIG5vdCBgbHRzLypgIC0gYVxuICogZmxvYXRpbmcgdmVyc2lvbiBjYW4gcmVzb2x2ZSBhIGRpZmZlcmVudCBucG0gdGhhbiB3aGF0ZXZlciBnZW5lcmF0ZWQgdGhlXG4gKiBjb21taXR0ZWQgcGFja2FnZS1sb2NrLmpzb24sIGFuZCBgbnBtIGNpYCB0aGVuIGZhaWxzIG9uIG9wdGlvbmFsLVxuICogZGVwZW5kZW5jeSBkcmlmdCB0aGF0IGlzbid0IGEgcmVhbCBkZXBlbmRlbmN5IGJ1Zy5cbiAqL1xuZXhwb3J0IGNvbnN0IFNFVFVQX05PREVfU1RFUDogZ2l0aHViLndvcmtmbG93cy5Kb2JTdGVwID0ge1xuICBuYW1lOiAnU2V0dXAgTm9kZScsXG4gIHVzZXM6ICdhY3Rpb25zL3NldHVwLW5vZGVAdjcnLFxuICB3aXRoOiB7ICdub2RlLXZlcnNpb24nOiAnMjQnIH0sXG59O1xuXG4vKipcbiAqIGBucG0gY2lgLCB3aGljaCBuZWVkcyBhIGNvbW1pdHRlZCBgcGFja2FnZS1sb2NrLmpzb25gLiBXaXRob3V0IG9uZSwgYG5wbVxuICogY2lgIGZhaWxzIHdpdGggYSBtZXNzYWdlIHRoYXQgZG9lc24ndCBzYXkgd2hhdCB0byBkbywgc28gdGhlIG1pc3NpbmdcbiAqIGxvY2tmaWxlIGlzIHJlcG9ydGVkIGZpcnN0LCBhcyBhbiBhbm5vdGF0aW9uLiBgLS1pZ25vcmUtc2NyaXB0c2Aga2VlcHNcbiAqIGRlcGVuZGVuY3kgbGlmZWN5Y2xlIHNjcmlwdHMgZnJvbSBydW5uaW5nIG9uIFBSIGNvZGU7IHByb2plbiBzeW50aFxuICogZG9lc24ndCBuZWVkIHRoZW0uXG4gKi9cbmV4cG9ydCBjb25zdCBOUE1fQ0lfU1RFUDogZ2l0aHViLndvcmtmbG93cy5Kb2JTdGVwID0ge1xuICBuYW1lOiAnSW5zdGFsbCBkZXBlbmRlbmNpZXMnLFxuICBydW46IFtcbiAgICAnaWYgWyAhIC1mIHBhY2thZ2UtbG9jay5qc29uIF07IHRoZW4nLFxuICAgICcgIGVjaG8gXCI6OmVycm9yIGZpbGU9cGFja2FnZS5qc29uOjpwYWNrYWdlLWxvY2suanNvbiBpcyBub3QgY29tbWl0dGVkLiBSdW4gbnBtIGluc3RhbGwsIGNvbW1pdCBwYWNrYWdlLWxvY2suanNvbiwgYW5kIHB1c2guXCInLFxuICAgICcgIGV4aXQgMScsXG4gICAgJ2ZpJyxcbiAgICAnbnBtIGNpIC0taWdub3JlLXNjcmlwdHMnLFxuICBdLmpvaW4oJ1xcbicpLFxufTtcbiJdfQ==
|
|
@@ -15,8 +15,10 @@ import { Component, github } from 'projen';
|
|
|
15
15
|
*/
|
|
16
16
|
export interface ProjenDriftCheckWorkflowOptions {
|
|
17
17
|
/**
|
|
18
|
-
* The command that regenerates the project from `.projenrc.ts`.
|
|
19
|
-
*
|
|
18
|
+
* The command that regenerates the project from `.projenrc.ts`. The
|
|
19
|
+
* default runs the projen that `npm ci` just installed (exact version from
|
|
20
|
+
* `package-lock.json`) rather than `npx`, which can install on demand.
|
|
21
|
+
* @default "./node_modules/.bin/projen"
|
|
20
22
|
*/
|
|
21
23
|
readonly projenCommand?: string;
|
|
22
24
|
/**
|
|
@@ -6,7 +6,7 @@ const projen_1 = require("projen");
|
|
|
6
6
|
const ci_steps_1 = require("./ci-steps");
|
|
7
7
|
const workflow_purpose_1 = require("./workflow-purpose");
|
|
8
8
|
class ProjenDriftCheckWorkflow extends projen_1.Component {
|
|
9
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.ProjenDriftCheckWorkflow", version: "0.0.
|
|
9
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.ProjenDriftCheckWorkflow", version: "0.0.17" };
|
|
10
10
|
workflow;
|
|
11
11
|
constructor(scope, options = {}) {
|
|
12
12
|
super(scope, 'ProjenDriftCheckWorkflow');
|
|
@@ -14,7 +14,7 @@ class ProjenDriftCheckWorkflow extends projen_1.Component {
|
|
|
14
14
|
if (!gh) {
|
|
15
15
|
throw new Error('ProjenDriftCheckWorkflow requires GitHub integration to be enabled');
|
|
16
16
|
}
|
|
17
|
-
const projenCommand = options.projenCommand ?? '
|
|
17
|
+
const projenCommand = options.projenCommand ?? './node_modules/.bin/projen';
|
|
18
18
|
const gheTokenSecret = options.gheTokenSecret ?? 'PROJEN_GITHUB_TOKEN';
|
|
19
19
|
this.workflow = new projen_1.github.GithubWorkflow(gh, options.workflowName ?? 'projen-drift-check');
|
|
20
20
|
(0, workflow_purpose_1.noteWorkflowPurpose)(this.workflow.file, 'Fail a PR when a projen-generated file has been edited by hand instead of through the projenrc.');
|
|
@@ -67,4 +67,4 @@ fi
|
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
exports.ProjenDriftCheckWorkflow = ProjenDriftCheckWorkflow;
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVuLWRyaWZ0LWNoZWNrLXdvcmtmbG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1vbi9wcm9qZW4tZHJpZnQtY2hlY2std29ya2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLG1DQUEyQztBQUMzQyx5Q0FBMEQ7QUFDMUQseURBQXlEO0FBc0N6RCxNQUFhLHdCQUF5QixTQUFRLGtCQUFTOztJQUNyQyxRQUFRLENBQXdCO0lBRWhELFlBQ0UsS0FBMkIsRUFDM0IsVUFBMkMsRUFBRTtRQUU3QyxLQUFLLENBQUMsS0FBSyxFQUFFLDBCQUEwQixDQUFDLENBQUM7UUFFekMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUN4QixJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDUixNQUFNLElBQUksS0FBSyxDQUNiLG9FQUFvRSxDQUNyRSxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLElBQUksNEJBQTRCLENBQUM7UUFDNUUsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLGNBQWMsSUFBSSxxQkFBcUIsQ0FBQztRQUV2RSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksZUFBTSxDQUFDLGNBQWMsQ0FDdkMsRUFBRSxFQUNGLE9BQU8sQ0FBQyxZQUFZLElBQUksb0JBQW9CLENBQzdDLENBQUM7UUFDRixJQUFBLHNDQUFtQixFQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFDbEIsaUdBQWlHLENBQ2xHLENBQUM7UUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtZQUM1QixJQUFJLEVBQUUsb0JBQW9CO1lBQzFCLE1BQU0sRUFBRSxDQUFDLGVBQWUsQ0FBQztZQUN6QixXQUFXLEVBQUUsRUFBRSxRQUFRLEVBQUUsZUFBTSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFO1lBQzlELEdBQUcsRUFBRSxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsY0FBYyxLQUFLLEVBQUU7WUFDdEQsS0FBSyxFQUFFO2dCQUNMO29CQUNFLElBQUksRUFBRSxVQUFVO29CQUNoQixJQUFJLEVBQUUscUJBQXFCO29CQUMzQixJQUFJLEVBQUU7d0JBQ0osR0FBRyxFQUFFLDJDQUEyQzt3QkFDaEQsVUFBVSxFQUFFLHNEQUFzRDtxQkFDbkU7aUJBQ0Y7Z0JBQ0QsMEJBQWU7Z0JBQ2Ysc0JBQVc7Z0JBQ1g7b0JBQ0UsSUFBSSxFQUFFLHdCQUF3QjtvQkFDOUIsR0FBRyxFQUFFO0VBQ2IsYUFBYTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXNCZDtpQkFDUTthQUNGO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUF6RUgsNERBMEVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBnaXRodWIgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgTlBNX0NJX1NURVAsIFNFVFVQX05PREVfU1RFUCB9IGZyb20gJy4vY2ktc3RlcHMnO1xuaW1wb3J0IHsgbm90ZVdvcmtmbG93UHVycG9zZSB9IGZyb20gJy4vd29ya2Zsb3ctcHVycG9zZSc7XG5cbi8qKlxuICogUFItdHJpZ2dlcmVkIGNoZWNrIHRoYXQgcmVqZWN0cyBkaXJlY3QgZWRpdHMgdG8gcHJvamVuLW1hbmFnZWQgZmlsZXMuXG4gKlxuICogUmUtcnVucyB0aGUgcHJvamVjdCdzIHN5bnRoIGNvbW1hbmQgb24gdGhlIFBSIGhlYWQgYW5kIGZhaWxzIGlmIHRoZVxuICogcmVnZW5lcmF0ZWQgb3V0cHV0IG5vIGxvbmdlciBtYXRjaGVzIHdoYXQncyBjb21taXR0ZWQgLSBpLmUuIHNvbWVvbmVcbiAqIGhhbmQtZWRpdGVkIGEgZ2VuZXJhdGVkIGZpbGUgKHBhY2thZ2UuanNvbiAvIHBvbS54bWwgL1xuICogLmdpdGh1Yi93b3JrZmxvd3MvKi55bWwgLyAuLi4pIGluc3RlYWQgb2YgZ29pbmcgdGhyb3VnaCBgLnByb2plbnJjLnRzYC5cbiAqXG4gKiBSdW5zIG9uIGBwdWxsX3JlcXVlc3RgIHNvIGl0IGdlbnVpbmVseSBleGVjdXRlcyB0aGUgUFIncyBvd24gY29kZSAodGhlXG4gKiBvbmx5IHdheSB0byBkZXRlY3QgZHJpZnQpIC0gYW5kIHRoZXJlZm9yZSwgYnkgbmVjZXNzaXR5LCBhIFBSIGF1dGhvciBjYW5cbiAqIGRpc2FibGUgaXQgd2l0aGluIHRoZWlyIG93biBQUi4gVGhhdCByZXNpZHVhbCBleHBvc3VyZSBpcyBib3VuZGVkIGJ5XG4gKiBgV29ya2Zsb3dDaGFuZ2VOb3RpY2VXb3JrZmxvd2AgKENoZWNrIDIpLCB3aGljaCBpcyB0YW1wZXItcHJvb2YgYW5kIGZsYWdzXG4gKiBhbnkgdG91Y2ggdG8gYC5naXRodWIvd29ya2Zsb3dzLyoqYC4gU2VlIHRoZSBGMDAzIHNwZWMncyBTZWN1cml0eSBzZWN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb2plbkRyaWZ0Q2hlY2tXb3JrZmxvd09wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGNvbW1hbmQgdGhhdCByZWdlbmVyYXRlcyB0aGUgcHJvamVjdCBmcm9tIGAucHJvamVucmMudHNgLiBUaGVcbiAgICogZGVmYXVsdCBydW5zIHRoZSBwcm9qZW4gdGhhdCBgbnBtIGNpYCBqdXN0IGluc3RhbGxlZCAoZXhhY3QgdmVyc2lvbiBmcm9tXG4gICAqIGBwYWNrYWdlLWxvY2suanNvbmApIHJhdGhlciB0aGFuIGBucHhgLCB3aGljaCBjYW4gaW5zdGFsbCBvbiBkZW1hbmQuXG4gICAqIEBkZWZhdWx0IFwiLi9ub2RlX21vZHVsZXMvLmJpbi9wcm9qZW5cIlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVuQ29tbWFuZD86IHN0cmluZztcblxuICAvKipcbiAgICogR2l0SHViIHNlY3JldCBob2xkaW5nIGEgdG9rZW4gd2l0aCBwZXJtaXNzaW9uIHRvIGNvbW1lbnQgb24gUFJzLCB1c2VkXG4gICAqIGZvciB0aGUgYmVzdC1lZmZvcnQgZHJpZnQgcmVwb3J0IGNvbW1lbnQuIFRoZSBjaGVjayBzdGlsbCBmYWlscyAoYW5kXG4gICAqIGVtaXRzIGA6OmVycm9yOjpgIGFubm90YXRpb25zKSB3aXRob3V0IGl0LCBzbyBmb3JrIFBScyAtIHdoaWNoIGdldCBub1xuICAgKiBzZWNyZXRzIC0gYXJlIG9ubHkgbWlzc2luZyB0aGUgZXh0cmEgY29tbWVudC5cbiAgICogQGRlZmF1bHQgXCJQUk9KRU5fR0lUSFVCX1RPS0VOXCJcbiAgICovXG4gIHJlYWRvbmx5IGdoZVRva2VuU2VjcmV0Pzogc3RyaW5nO1xuXG4gIC8qKiBAZGVmYXVsdCBcInByb2plbi1kcmlmdC1jaGVja1wiICovXG4gIHJlYWRvbmx5IHdvcmtmbG93TmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFByb2plbkRyaWZ0Q2hlY2tXb3JrZmxvdyBleHRlbmRzIENvbXBvbmVudCB7XG4gIHB1YmxpYyByZWFkb25seSB3b3JrZmxvdzogZ2l0aHViLkdpdGh1YldvcmtmbG93O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBnaXRodWIuR2l0SHViUHJvamVjdCxcbiAgICBvcHRpb25zOiBQcm9qZW5EcmlmdENoZWNrV29ya2Zsb3dPcHRpb25zID0ge30sXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCAnUHJvamVuRHJpZnRDaGVja1dvcmtmbG93Jyk7XG5cbiAgICBjb25zdCBnaCA9IHNjb3BlLmdpdGh1YjtcbiAgICBpZiAoIWdoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdQcm9qZW5EcmlmdENoZWNrV29ya2Zsb3cgcmVxdWlyZXMgR2l0SHViIGludGVncmF0aW9uIHRvIGJlIGVuYWJsZWQnLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9qZW5Db21tYW5kID0gb3B0aW9ucy5wcm9qZW5Db21tYW5kID8/ICcuL25vZGVfbW9kdWxlcy8uYmluL3Byb2plbic7XG4gICAgY29uc3QgZ2hlVG9rZW5TZWNyZXQgPSBvcHRpb25zLmdoZVRva2VuU2VjcmV0ID8/ICdQUk9KRU5fR0lUSFVCX1RPS0VOJztcblxuICAgIHRoaXMud29ya2Zsb3cgPSBuZXcgZ2l0aHViLkdpdGh1YldvcmtmbG93KFxuICAgICAgZ2gsXG4gICAgICBvcHRpb25zLndvcmtmbG93TmFtZSA/PyAncHJvamVuLWRyaWZ0LWNoZWNrJyxcbiAgICApO1xuICAgIG5vdGVXb3JrZmxvd1B1cnBvc2UoXG4gICAgICB0aGlzLndvcmtmbG93LmZpbGUsXG4gICAgICAnRmFpbCBhIFBSIHdoZW4gYSBwcm9qZW4tZ2VuZXJhdGVkIGZpbGUgaGFzIGJlZW4gZWRpdGVkIGJ5IGhhbmQgaW5zdGVhZCBvZiB0aHJvdWdoIHRoZSBwcm9qZW5yYy4nLFxuICAgICk7XG4gICAgdGhpcy53b3JrZmxvdy5vbih7IHB1bGxSZXF1ZXN0OiB7fSB9KTtcbiAgICB0aGlzLndvcmtmbG93LmFkZEpvYignY2hlY2snLCB7XG4gICAgICBuYW1lOiAnUHJvamVuIGRyaWZ0IGNoZWNrJyxcbiAgICAgIHJ1bnNPbjogWyd1YnVudHUtbGF0ZXN0J10sXG4gICAgICBwZXJtaXNzaW9uczogeyBjb250ZW50czogZ2l0aHViLndvcmtmbG93cy5Kb2JQZXJtaXNzaW9uLlJFQUQgfSxcbiAgICAgIGVudjogeyBHSF9UT0tFTjogYFxcJHt7IHNlY3JldHMuJHtnaGVUb2tlblNlY3JldH0gfX1gIH0sXG4gICAgICBzdGVwczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0NoZWNrb3V0JyxcbiAgICAgICAgICB1c2VzOiAnYWN0aW9ucy9jaGVja291dEB2NycsXG4gICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgcmVmOiAnJHt7IGdpdGh1Yi5ldmVudC5wdWxsX3JlcXVlc3QuaGVhZC5yZWYgfX0nLFxuICAgICAgICAgICAgcmVwb3NpdG9yeTogJyR7eyBnaXRodWIuZXZlbnQucHVsbF9yZXF1ZXN0LmhlYWQucmVwby5mdWxsX25hbWUgfX0nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIFNFVFVQX05PREVfU1RFUCxcbiAgICAgICAgTlBNX0NJX1NURVAsXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnQ2hlY2sgZm9yIHByb2plbiBkcmlmdCcsXG4gICAgICAgICAgcnVuOiBgc2V0IC1ldW8gcGlwZWZhaWxcbiR7cHJvamVuQ29tbWFuZH1cbmRyaWZ0ZWQ9XCIkKGdpdCBkaWZmIC0tbmFtZS1vbmx5KVwiXG5pZiBbIC1uIFwiJGRyaWZ0ZWRcIiBdOyB0aGVuXG4gIHdoaWxlIElGUz0gcmVhZCAtciBmOyBkb1xuICAgIGVjaG8gXCI6OmVycm9yIGZpbGU9JGY6OnByb2plbi1tYW5hZ2VkIGZpbGUgd2FzIGVkaXRlZCBkaXJlY3RseTsgbWFrZSB0aGUgY2hhbmdlIGluIC5wcm9qZW5yYy50cyBhbmQgcmUtcnVuIG5weCBwcm9qZW5cIlxuICBkb25lIDw8PCBcIiRkcmlmdGVkXCJcbiAgaWYgWyAtbiBcIiRHSF9UT0tFTlwiIF0gJiYgWyAtbiBcIiRHSVRIVUJfRVZFTlRfUEFUSFwiIF07IHRoZW5cbiAgICBwcl9udW1iZXI9XCIkKGpxIC1yIFwiLnB1bGxfcmVxdWVzdC5udW1iZXIgLy8gZW1wdHlcIiBcIiRHSVRIVUJfRVZFTlRfUEFUSFwiIDI+L2Rldi9udWxsIHx8IHRydWUpXCJcbiAgICBpZiBbIC1uIFwiJHByX251bWJlclwiIF07IHRoZW5cbiAgICAgIHtcbiAgICAgICAgZWNobyBcIuKdjCBwcm9qZW4gZHJpZnQgZGV0ZWN0ZWRcIlxuICAgICAgICBlY2hvIFwiXCJcbiAgICAgICAgZWNobyBcIlRoZXNlIGZpbGVzIGFyZSBtYW5hZ2VkIGJ5IHByb2plbiBhbmQgd2VyZSBlZGl0ZWQgZGlyZWN0bHkuIERpcmVjdCBlZGl0cyBhcmUgc2lsZW50bHkgb3ZlcndyaXR0ZW4gYnkgdGhlIG5leHQgbnB4IHByb2plbiBydW4sIHNvIHRoZXkgY2Fubm90IGJlIG1lcmdlZCBhcy1pczpcIlxuICAgICAgICBlY2hvIFwiXCJcbiAgICAgICAgd2hpbGUgSUZTPSByZWFkIC1yIGY7IGRvIGVjaG8gXCIgIC0gJGZcIjsgZG9uZSA8PDwgXCIkZHJpZnRlZFwiXG4gICAgICAgIGVjaG8gXCJcIlxuICAgICAgICBlY2hvIFwiVG8gZml4OiByZXZlcnQgdGhlIGRpcmVjdCBlZGl0cyBhYm92ZSwgbWFrZSB0aGUgZXF1aXZhbGVudCBjaGFuZ2UgaW4gLnByb2plbnJjLnRzLCB0aGVuIHJ1biBucHggcHJvamVuIGFuZCBjb21taXQgdGhlIHJlZ2VuZXJhdGVkIG91dHB1dC5cIlxuICAgICAgfSB8IGdoIHByIGNvbW1lbnQgXCIkcHJfbnVtYmVyXCIgLS1ib2R5LWZpbGUgLSB8fCBlY2hvIFwiOjp3YXJuaW5nOjpjb3VsZCBub3QgcG9zdCBQUiBjb21tZW50IChmb3JrIFBSIG9yIG1pc3NpbmcgdG9rZW4pXCJcbiAgICBmaVxuICBmaVxuICBleGl0IDFcbmZpXG5gLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -5,7 +5,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
|
5
5
|
const projen_1 = require("projen");
|
|
6
6
|
const workflow_purpose_1 = require("./workflow-purpose");
|
|
7
7
|
class WorkflowChangeNoticeWorkflow extends projen_1.Component {
|
|
8
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.WorkflowChangeNoticeWorkflow", version: "0.0.
|
|
8
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.WorkflowChangeNoticeWorkflow", version: "0.0.17" };
|
|
9
9
|
workflow;
|
|
10
10
|
constructor(scope, options = {}) {
|
|
11
11
|
super(scope, 'WorkflowChangeNoticeWorkflow');
|
|
@@ -18,7 +18,7 @@ const manual_deploy_workflow_1 = require("../../common/manual-deploy-workflow");
|
|
|
18
18
|
* which is exactly when "this repo has no deploy target" needs saying.
|
|
19
19
|
*/
|
|
20
20
|
class CdkDeployHook extends projen_1.Component {
|
|
21
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.CdkDeployHook", version: "0.0.
|
|
21
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.CdkDeployHook", version: "0.0.17" };
|
|
22
22
|
constructor(project, environments, options = {}) {
|
|
23
23
|
super(project, 'CdkDeployHook');
|
|
24
24
|
const targetRepo = options.targetRepo;
|
|
@@ -6,7 +6,7 @@ const projen_1 = require("projen");
|
|
|
6
6
|
const workflow_purpose_1 = require("../../common/workflow-purpose");
|
|
7
7
|
/** Generates a code index and publishes it to `.cai/` on checkin. */
|
|
8
8
|
class CodeIndexWorkflow extends projen_1.Component {
|
|
9
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.CodeIndexWorkflow", version: "0.0.
|
|
9
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.CodeIndexWorkflow", version: "0.0.17" };
|
|
10
10
|
constructor(project) {
|
|
11
11
|
super(project, 'CodeIndexWorkflow');
|
|
12
12
|
const gh = project.github;
|
|
@@ -6,7 +6,7 @@ const projen_1 = require("projen");
|
|
|
6
6
|
const workflow_purpose_1 = require("../../common/workflow-purpose");
|
|
7
7
|
/** On-demand build+push of a Docker image, defaulting to Docker Hub. */
|
|
8
8
|
class DockerPublish extends projen_1.Component {
|
|
9
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.DockerPublish", version: "0.0.
|
|
9
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.DockerPublish", version: "0.0.17" };
|
|
10
10
|
constructor(project, options = {}) {
|
|
11
11
|
super(project, 'DockerPublish');
|
|
12
12
|
const gh = project.github;
|
|
@@ -11,7 +11,7 @@ const java_versions_1 = require("../java-versions");
|
|
|
11
11
|
* plugin (which Boot's BOM does not manage) is pinned for the Java line.
|
|
12
12
|
*/
|
|
13
13
|
class FlywayMigration extends projen_1.Component {
|
|
14
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.FlywayMigration", version: "0.0.
|
|
14
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.FlywayMigration", version: "0.0.17" };
|
|
15
15
|
constructor(project) {
|
|
16
16
|
super(project, 'FlywayMigration');
|
|
17
17
|
project.addPlugin(`${java_versions_1.FLYWAY_MAVEN_PLUGIN}@${project.pinnedVersion(java_versions_1.FLYWAY_MAVEN_PLUGIN)}`);
|
|
@@ -6,7 +6,7 @@ const projen_1 = require("projen");
|
|
|
6
6
|
const workflow_purpose_1 = require("../../common/workflow-purpose");
|
|
7
7
|
/** On-demand publish to GitHub Packages. */
|
|
8
8
|
class GitHubPackagesPublish extends projen_1.Component {
|
|
9
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.GitHubPackagesPublish", version: "0.0.
|
|
9
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.GitHubPackagesPublish", version: "0.0.17" };
|
|
10
10
|
constructor(project, options = {}) {
|
|
11
11
|
super(project, 'GitHubPackagesPublish');
|
|
12
12
|
const gh = project.github;
|
|
@@ -9,7 +9,7 @@ const workflow_purpose_1 = require("../../common/workflow-purpose");
|
|
|
9
9
|
* or OIDC trusted publishing.
|
|
10
10
|
*/
|
|
11
11
|
class MavenCentralPublish extends projen_1.Component {
|
|
12
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.MavenCentralPublish", version: "0.0.
|
|
12
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.MavenCentralPublish", version: "0.0.17" };
|
|
13
13
|
constructor(project, options = {}) {
|
|
14
14
|
super(project, 'MavenCentralPublish');
|
|
15
15
|
const gh = project.github;
|
|
@@ -17,7 +17,7 @@ const workflow_purpose_1 = require("../../common/workflow-purpose");
|
|
|
17
17
|
* check. Apply an update by changing the version in `.projenrc.ts`.
|
|
18
18
|
*/
|
|
19
19
|
class MavenUpgradeReport extends projen_1.Component {
|
|
20
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.MavenUpgradeReport", version: "0.0.
|
|
20
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.MavenUpgradeReport", version: "0.0.17" };
|
|
21
21
|
workflow;
|
|
22
22
|
constructor(scope, options) {
|
|
23
23
|
super(scope, 'MavenUpgradeReport');
|
|
@@ -9,7 +9,7 @@ const java_maven_base_1 = require("./java-maven-base");
|
|
|
9
9
|
* explicitly excludes Maven Central, Docker, and CDK deploy hooks.
|
|
10
10
|
*/
|
|
11
11
|
class JavaAppProject extends java_maven_base_1.JavaMavenProject {
|
|
12
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.JavaAppProject", version: "0.0.
|
|
12
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.JavaAppProject", version: "0.0.17" };
|
|
13
13
|
constructor(options) {
|
|
14
14
|
super(options);
|
|
15
15
|
new github_packages_publish_1.GitHubPackagesPublish(this, {
|
|
@@ -12,7 +12,7 @@ const java_versions_1 = require("./java-versions");
|
|
|
12
12
|
* reactor, every module inherits them).
|
|
13
13
|
*/
|
|
14
14
|
class JavaLibraryProject extends java_maven_base_1.JavaMavenProject {
|
|
15
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.JavaLibraryProject", version: "0.0.
|
|
15
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.JavaLibraryProject", version: "0.0.17" };
|
|
16
16
|
constructor(options) {
|
|
17
17
|
super(options);
|
|
18
18
|
this.addPlugin(`${java_versions_1.MAVEN_SOURCE_PLUGIN}@${this.pinnedVersion(java_versions_1.MAVEN_SOURCE_PLUGIN)}`, {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.JavaMavenProject = void 0;
|
|
4
4
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
5
|
-
const
|
|
5
|
+
const node_path_1 = require("node:path");
|
|
6
6
|
const projen_1 = require("projen");
|
|
7
7
|
const maven_upgrade_report_1 = require("./components/maven-upgrade-report");
|
|
8
8
|
const java_versions_1 = require("./java-versions");
|
|
@@ -43,7 +43,7 @@ const PROJEN_TYPES_VERSION = require('../../package.json').version;
|
|
|
43
43
|
* check, and a nightly report-only update check.
|
|
44
44
|
*/
|
|
45
45
|
class JavaMavenProject extends projen_1.github.GitHubProject {
|
|
46
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.JavaMavenProject", version: "0.0.
|
|
46
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.JavaMavenProject", version: "0.0.17" };
|
|
47
47
|
/** The root `pom.xml`. */
|
|
48
48
|
pom;
|
|
49
49
|
/** The canonical Java line the build targets (`1.8`, `17`, `21`, `25`). */
|
|
@@ -333,7 +333,7 @@ class JavaMavenProject extends projen_1.github.GitHubProject {
|
|
|
333
333
|
addSample() {
|
|
334
334
|
const pkg = this.groupId.replace(/[^A-Za-z0-9_.]/g, '_');
|
|
335
335
|
const path = pkg.split('.');
|
|
336
|
-
new projen_1.SampleDir(this,
|
|
336
|
+
new projen_1.SampleDir(this, node_path_1.posix.join('src/main/java', ...path), {
|
|
337
337
|
files: {
|
|
338
338
|
'Main.java': [
|
|
339
339
|
`package ${pkg};`,
|
|
@@ -347,7 +347,7 @@ class JavaMavenProject extends projen_1.github.GitHubProject {
|
|
|
347
347
|
].join('\n'),
|
|
348
348
|
},
|
|
349
349
|
});
|
|
350
|
-
new projen_1.SampleDir(this,
|
|
350
|
+
new projen_1.SampleDir(this, node_path_1.posix.join('src/test/java', ...path), {
|
|
351
351
|
files: {
|
|
352
352
|
'MainTest.java': [
|
|
353
353
|
`package ${pkg};`,
|
|
@@ -397,10 +397,10 @@ function normalizeModuleDir(dir) {
|
|
|
397
397
|
if (unix.startsWith('/') || /^[A-Za-z]:/.test(unix)) {
|
|
398
398
|
throw new Error(`Module dir "${dir}" must be relative to the repo root.`);
|
|
399
399
|
}
|
|
400
|
-
const normalized =
|
|
400
|
+
const normalized = node_path_1.posix.normalize(unix).replace(/\/+$/, '');
|
|
401
401
|
if (normalized === '.' || normalized === '' || normalized.split('/').includes('..')) {
|
|
402
402
|
throw new Error(`Module dir "${dir}" must be a subdirectory of the repo root.`);
|
|
403
403
|
}
|
|
404
404
|
return normalized;
|
|
405
405
|
}
|
|
406
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YS1tYXZlbi1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2phdmEvamF2YS1tYXZlbi1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSwrQkFBNkI7QUFDN0IsbUNBQTBFO0FBQzFFLDRFQUF1RTtBQUN2RSxtREFXeUI7QUFDekIsdURBQW1EO0FBQ25ELGlEQUFpRTtBQUVqRSxpREFBa0U7QUFDbEUsbURBQStEO0FBQy9ELHlEQUF5RDtBQUN6RCxpRUFBMEU7QUFDMUUsdUZBQWlGO0FBQ2pGLHVEQUFpRTtBQUNqRSwrRkFBeUY7QUFDekYsaUVBQWlFO0FBRWpFLDJFQUEyRTtBQUMzRSx3RUFBd0U7QUFDeEUseURBQXlEO0FBQ3pELDBCQUEwQjtBQUMxQixpRUFBaUU7QUFDakUsTUFBTSxjQUFjLEdBQVcsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ3RFLGlFQUFpRTtBQUNqRSxNQUFNLG9CQUFvQixHQUFXLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUUzRTs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxNQUFhLGdCQUFpQixTQUFRLGVBQU0sQ0FBQyxhQUFhOztJQUN4RCwwQkFBMEI7SUFDVixHQUFHLENBQVc7SUFFOUIsMkVBQTJFO0lBQzNELFdBQVcsQ0FBUztJQUVwQyx5RUFBeUU7SUFDekQsV0FBVyxDQUFPO0lBRWxDOzs7O09BSUc7SUFDYSxtQkFBbUIsQ0FBc0I7SUFFekQ7OztPQUdHO0lBQ2EsWUFBWSxDQUE2QjtJQUV4QyxRQUFRLENBQWtCO0lBQzFCLGFBQWEsQ0FBVTtJQUN2QixPQUFPLENBQVM7SUFDaEIsTUFBTSxDQUFVO0lBQ2hCLFlBQVksR0FBa0IsRUFBRSxDQUFDO0lBRWxELFlBQVksT0FBZ0M7UUFDMUMsS0FBSyxDQUFDO1lBQ0osb0VBQW9FO1lBQ3BFLHNFQUFzRTtZQUN0RSxpRUFBaUU7WUFDakUsd0RBQXdEO1lB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QUM3RCxJQUFJLFVBQVUsS0FBSyxHQUFHLElBQUksVUFBVSxLQUFLLEVBQUUsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3BGLE1BQU0sSUFBSSxLQUFLLENBQUMsZUFBZSxHQUFHLDRDQUE0QyxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwb3NpeCB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgSnNvbkZpbGUsIExpY2Vuc2UsIFNhbXBsZURpciwgVGFzaywgZ2l0aHViLCBqYXZhIH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IE1hdmVuVXBncmFkZVJlcG9ydCB9IGZyb20gJy4vY29tcG9uZW50cy9tYXZlbi11cGdyYWRlLXJlcG9ydCc7XG5pbXBvcnQge1xuICBERUZBVUxUX01JTl9NQVZFTl9WRVJTSU9OLFxuICBKVU5JVF9CT00sXG4gIEphdmFMaW5lUHJvZmlsZSxcbiAgTUFWRU5fQ09NUElMRVJfUExVR0lOLFxuICBNQVZFTl9FTkZPUkNFUl9QTFVHSU4sXG4gIE1BVkVOX0ZBSUxTQUZFX1BMVUdJTixcbiAgTUFWRU5fSkFSX1BMVUdJTixcbiAgTUFWRU5fU1VSRUZJUkVfUExVR0lOLFxuICBWRVJTSU9OU19NQVZFTl9QTFVHSU4sXG4gIHJlc29sdmVKYXZhTGluZSxcbn0gZnJvbSAnLi9qYXZhLXZlcnNpb25zJztcbmltcG9ydCB7IE1hdmVuTW9kdWxlIH0gZnJvbSAnLi9tYXZlbi9tYXZlbi1tb2R1bGUnO1xuaW1wb3J0IHsgTWF2ZW5Qb20sIGFzc2VydEV4YWN0VmVyc2lvbiB9IGZyb20gJy4vbWF2ZW4vbWF2ZW4tcG9tJztcbmltcG9ydCB7IEphdmFNYXZlblByb2plY3RPcHRpb25zLCBNYXZlbk1vZHVsZU9wdGlvbnMgfSBmcm9tICcuL29wdGlvbnMnO1xuaW1wb3J0IHsgTlBNX0NJX1NURVAsIFNFVFVQX05PREVfU1RFUCB9IGZyb20gJy4uL2NvbW1vbi9jaS1zdGVwcyc7XG5pbXBvcnQgeyBERUZBVUxUX0dIRV9UT0tFTl9TRUNSRVQgfSBmcm9tICcuLi9jb21tb24vY29uc3RhbnRzJztcbmltcG9ydCB7IGFkZEVkaXRvckNvbmZpZyB9IGZyb20gJy4uL2NvbW1vbi9lZGl0b3Jjb25maWcnO1xuaW1wb3J0IHsgYXBwbHlJbnRlcm5hbEFjdGlvbk92ZXJyaWRlcyB9IGZyb20gJy4uL2NvbW1vbi9pbnRlcm5hbC1hY3Rpb25zJztcbmltcG9ydCB7IFByb2plbkRyaWZ0Q2hlY2tXb3JrZmxvdyB9IGZyb20gJy4uL2NvbW1vbi9wcm9qZW4tZHJpZnQtY2hlY2std29ya2Zsb3cnO1xuaW1wb3J0IHsgYXR0YWNoVHlwZVNjcmlwdFByb2plbnJjIH0gZnJvbSAnLi4vY29tbW9uL3Byb2plbnJjLXRzJztcbmltcG9ydCB7IFdvcmtmbG93Q2hhbmdlTm90aWNlV29ya2Zsb3cgfSBmcm9tICcuLi9jb21tb24vd29ya2Zsb3ctY2hhbmdlLW5vdGljZS13b3JrZmxvdyc7XG5pbXBvcnQgeyBub3RlV29ya2Zsb3dQdXJwb3NlIH0gZnJvbSAnLi4vY29tbW9uL3dvcmtmbG93LXB1cnBvc2UnO1xuXG4vLyBgcmVxdWlyZSguLi4pYCByZXNvbHZlcyB0aHJvdWdoIE5vZGUncyBub3JtYWwgbW9kdWxlIHJlc29sdXRpb24sIHNvIGluIGFcbi8vICpwdWJsaXNoZWQqIHBhY2thZ2UgdGhlc2UgYXJlIHRoZSB2ZXJzaW9ucyBpbnN0YWxsZWQgaW4gdGhlIGNvbnN1bWluZ1xuLy8gcmVwbyAtIGV4YWN0bHkgd2hhdCBpdHMgcGFja2FnZS5qc29uIG11c3QgcGluIChzYW1lIGFzXG4vLyBgR2l0SHViQWN0aW9uUHJvamVjdGApLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbmNvbnN0IFBST0pFTl9WRVJTSU9OOiBzdHJpbmcgPSByZXF1aXJlKCdwcm9qZW4vcGFja2FnZS5qc29uJykudmVyc2lvbjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG5jb25zdCBQUk9KRU5fVFlQRVNfVkVSU0lPTjogc3RyaW5nID0gcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJykudmVyc2lvbjtcblxuLyoqXG4gKiBCYXNlbGluZSBNYXZlbiBwcm9qZWN0LCBzaW5nbGUtIG9yIG11bHRpLW1vZHVsZSwgd2l0aCBubyBmcmFtZXdvcmtcbiAqIGFzc3VtcHRpb25zLiBJdCBpcyB0aGUgYmFzZSBvZiBldmVyeSBKYXZhIHR5cGUgaW4gdGhpcyBwYWNrYWdlIGFuZCBpc1xuICogdXNhYmxlIG9uIGl0cyBvd24gKGBwcm9qZW4gbmV3IC4uLiBqYXZhX21hdmVuYCkuXG4gKlxuICogLSBUaGUgcG9tIGlzIHdyaXR0ZW4gYnkgdGhpcyBwYWNrYWdlIChgTWF2ZW5Qb21gKSwgbm90IHByb2plbidzXG4gKiAgIGBqYXZhLlBvbWA6IGV4YWN0IHZlcnNpb25zIG9ubHksIEJPTSBpbXBvcnRzLCBgPG1vZHVsZXM+YCxcbiAqICAgYDxkZXBlbmRlbmN5TWFuYWdlbWVudD5gLCBgPHBsdWdpbk1hbmFnZW1lbnQ+YC5cbiAqIC0gRXZlcnl0aGluZyBKYXZhLXZlcnNpb24tZGVwZW5kZW50IChjb21waWxlciBsZXZlbCwgZW5mb3JjZXIgcnVsZSwgSlVuaXRcbiAqICAgbGluZSwgQ0kgSkRLKSBmb2xsb3dzIGBqYXZhVmVyc2lvbmAuXG4gKiAtIFdpdGggbm8gYGFkZE1vZHVsZSgpYCBjYWxscyB0aGUgcm9vdCBwb20gaXMgdGhlIGFydGlmYWN0LiBBZnRlciB0aGVcbiAqICAgZmlyc3QgYGFkZE1vZHVsZSgpYCBpdCBpcyBhIGBwb21gLXBhY2thZ2VkIHJlYWN0b3IgcGFyZW50IGFuZCB0aGVcbiAqICAgbW9kdWxlcyBpbmhlcml0IGl0cyBwbHVnaW5zIGFuZCB0ZXN0IGRlcGVuZGVuY2llcy5cbiAqIC0gYG5weCBwcm9qZW4gYnVpbGRgIHN5bnRoZXNpemVzLCB0aGVuIHJ1bnMgTWF2ZW4gb25jZTogYG12biAtQiB2ZXJpZnlgXG4gKiAgICh1bml0IHRlc3RzIHZpYSBzdXJlZmlyZSwgYCpJVGAgdGVzdHMgdmlhIGZhaWxzYWZlKS5cbiAqIC0gQ0k6IGEgUFIgYnVpbGQgKHdpdGggYW4gb3B0aW9uYWwgU29uYXJRdWJlIHNjYW4pLCB0aGUgcHJvamVuIGRyaWZ0XG4gKiAgIGNoZWNrLCBhbmQgYSBuaWdodGx5IHJlcG9ydC1vbmx5IHVwZGF0ZSBjaGVjay5cbiAqL1xuZXhwb3J0IGNsYXNzIEphdmFNYXZlblByb2plY3QgZXh0ZW5kcyBnaXRodWIuR2l0SHViUHJvamVjdCB7XG4gIC8qKiBUaGUgcm9vdCBgcG9tLnhtbGAuICovXG4gIHB1YmxpYyByZWFkb25seSBwb206IE1hdmVuUG9tO1xuXG4gIC8qKiBUaGUgY2Fub25pY2FsIEphdmEgbGluZSB0aGUgYnVpbGQgdGFyZ2V0cyAoYDEuOGAsIGAxN2AsIGAyMWAsIGAyNWApLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgamF2YVZlcnNpb246IHN0cmluZztcblxuICAvKiogUHJpbnRzIGF2YWlsYWJsZSBkZXBlbmRlbmN5L3BsdWdpbiB1cGRhdGVzIChgbnB4IHByb2plbiB1cGdyYWRlYCkuICovXG4gIHB1YmxpYyByZWFkb25seSB1cGdyYWRlVGFzazogVGFzaztcblxuICAvKipcbiAgICogVGhlIFBSIGJ1aWxkIHdvcmtmbG93IChgYnVpbGQueW1sYCkuIEFkZCBqb2JzIHRvIGl0IHdpdGhcbiAgICogYGJ1aWxkVmVyaWZ5V29ya2Zsb3cuYWRkSm9iKGlkLCBqb2IpYDsgdXNlIGBjaVNldHVwU3RlcHNgIGZvciBhIGpvYiB0aGF0XG4gICAqIG5lZWRzIE5vZGUsIHRoZSBwcm9qZW4gdG9vbGNoYWluLCBhbmQgdGhlIEpESy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBidWlsZFZlcmlmeVdvcmtmbG93OiBnaXRodWIuVGFza1dvcmtmbG93O1xuXG4gIC8qKlxuICAgKiBTdGVwcyB0aGF0IGluc3RhbGwgTm9kZSAocGlubmVkKSwgYG5wbSBjaWAsIGFuZCB0aGUgcHJvamVjdCdzIEpESyB3aXRoIGFcbiAgICogTWF2ZW4gY2FjaGUgLSB0aGUgc2V0dXAgZXZlcnkgTWF2ZW4gQ0kgam9iIGluIHRoaXMgcmVwbyBuZWVkcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjaVNldHVwU3RlcHM6IGdpdGh1Yi53b3JrZmxvd3MuSm9iU3RlcFtdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgamF2YUxpbmU6IEphdmFMaW5lUHJvZmlsZTtcbiAgcHJpdmF0ZSByZWFkb25seSByb290UGFja2FnaW5nPzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGdyb3VwSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBzYW1wbGU6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgbWF2ZW5Nb2R1bGVzOiBNYXZlbk1vZHVsZVtdID0gW107XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogSmF2YU1hdmVuUHJvamVjdE9wdGlvbnMpIHtcbiAgICBzdXBlcih7XG4gICAgICAvLyBTcHJlYWQgZmlyc3QsIG92ZXJyaWRlcyBhZnRlcjogZm9yd2FyZGluZyB0aGUgY2FsbGVyJ3Mgb3B0aW9ucyBpc1xuICAgICAgLy8gd2hhdCBsZXRzIGBwcm9qZW4gbmV3IC0tZnJvbSBAeHBlcnRzcy9wcm9qZW4tdHlwZXMgamF2YV9tYXZlbmAgd29ya1xuICAgICAgLy8gLSBwcm9qZW4gc211Z2dsZXMgaXRzIGJvb3RzdHJhcCBtYXJrZXIgKGBfX25ld19fYCkgdGhyb3VnaCB0aGVcbiAgICAgIC8vIG9wdGlvbnMgb2JqZWN0LCBhbmQgaXQgaXMgdGhhdCBtYXJrZXIgd2hpY2ggbWFrZXMgdGhlXG4gICAgICAvLyBgUHJvamVucmNGaWxlYCBjb21wb25lbnQgd3JpdGUgdGhlIGluaXRpYWwgYC5wcm9qZW5yYy50c2AuIERyb3AgaXRcbiAgICAgIC8vIGFuZCBgcHJvamVuIG5ld2Agc2NhZmZvbGRzIGEgcmVwbyB3aXRoIG5vIHByb2plbnJjIGF0IGFsbC5cbiAgICAgIC4uLnN0cmluZ2lmeVByb2plbk5ld0FyZ3Mob3B0aW9ucyksXG4gICAgICBuYW1lOiBvcHRpb25zLm5hbWUsXG4gICAgICAvLyBQUiB0aXRsZXMgYXJlIG5vdCBnYXRlZDogYGZlYXQ6YC9gZml4OmAgbWF0dGVyIG9ubHkgYmVjYXVzZSB0aGV5IGRyaXZlXG4gICAgICAvLyB0aGUgcmVsZWFzZSB3b3JrZmxvdyAodmlhIGByZWxlYXNhYmxlQ29tbWl0c2ApLCBub3QgUFIgY2hlY2tzLiBUaGVcbiAgICAgIC8vIGNvbnZlbnRpb25hbC1jb21taXQgUFItdGl0bGUgbGludCBpcyBhZGRlZCBieSB0aGUgYEdpdEh1YmAgY29tcG9uZW50XG4gICAgICAvLyB1bmxlc3MgYGdpdGh1Yk9wdGlvbnMucHVsbFJlcXVlc3RMaW50YCBpcyBgZmFsc2VgIChpdCBkZWZhdWx0cyB0cnVlKS5cbiAgICAgIGdpdGh1Yk9wdGlvbnM6IHsgcHVsbFJlcXVlc3RMaW50OiBmYWxzZSB9LFxuICAgICAgcHJvamVuQ3JlZGVudGlhbHM6IGdpdGh1Yi5HaXRodWJDcmVkZW50aWFscy5mcm9tUGVyc29uYWxBY2Nlc3NUb2tlbih7XG4gICAgICAgIHNlY3JldDogb3B0aW9ucy5naGVUb2tlblNlY3JldCA/PyBERUZBVUxUX0dIRV9UT0tFTl9TRUNSRVQsXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIGZvciAoY29uc3QgdmVyc2lvbiBvZiBPYmplY3QudmFsdWVzKG9wdGlvbnMucGx1Z2luVmVyc2lvbnMgPz8ge30pKSB7XG4gICAgICBhc3NlcnRFeGFjdFZlcnNpb24odmVyc2lvbiwgJ3BsdWdpblZlcnNpb25zJyk7XG4gICAgfVxuICAgIHRoaXMuamF2YUxpbmUgPSByZXNvbHZlSmF2YUxpbmUob3B0aW9ucy5qYXZhVmVyc2lvbiwgb3B0aW9ucy5wbHVnaW5WZXJzaW9ucyk7XG4gICAgdGhpcy5qYXZhVmVyc2lvbiA9IHRoaXMuamF2YUxpbmUubGluZTtcbiAgICB0aGlzLnJvb3RQYWNrYWdpbmcgPSBvcHRpb25zLnBhY2thZ2luZztcbiAgICB0aGlzLmdyb3VwSWQgPSBvcHRpb25zLmdyb3VwSWQ7XG4gICAgdGhpcy5zYW1wbGUgPSBvcHRpb25zLnNhbXBsZSA/PyBmYWxzZTtcblxuICAgIC8vIGAucHJvamVucmMudHNgICsgYG5weCBwcm9qZW5gLCBzYW1lIGFzIGV2ZXJ5IG90aGVyIHR5cGUgaGVyZS4gVGhlXG4gICAgLy8gTWF2ZW4gcmVwbyBuZWVkcyBubyBUeXBlU2NyaXB0IHRvb2xjaGFpbiBvZiBpdHMgb3duIC0gdGhlIHJ1bm5lciBpc1xuICAgIC8vIGZldGNoZWQgKHBpbm5lZCkgYnkgbnB4IGF0IHN5bnRoIHRpbWUuXG4gICAgYXR0YWNoVHlwZVNjcmlwdFByb2plbnJjKHRoaXMpO1xuXG4gICAgLy8gVGhlIHByb2plbiB0b29sY2hhaW4gYG5weCBwcm9qZW5gIHJ1bnMsIHBpbm5lZCBleGFjdGx5IHNvIGV2ZXJ5XG4gICAgLy8gbWFjaGluZSBhbmQgQ0kgcmVzb2x2ZSB0aGUgc2FtZSBnZW5lcmF0b3IuIE93bmVyLXdyaXRhYmxlIG9uIGRpc2sgc29cbiAgICAvLyB0aGUgZG9jdW1lbnRlZCB1cGRhdGUgZmxvdyAoYG5wbSBpIC1EIC1FIEB4cGVydHNzL3Byb2plbi10eXBlc0A8dj5gKVxuICAgIC8vIGNhbiByZXdyaXRlIGl0OyBoYW5kLWVkaXRzIGFyZSBzdGlsbCBjYXVnaHQgYnkgdGhlIGRyaWZ0IGNoZWNrLlxuICAgIG5ldyBKc29uRmlsZSh0aGlzLCAncGFja2FnZS5qc29uJywge1xuICAgICAgb2JqOiB7XG4gICAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcbiAgICAgICAgdmVyc2lvbjogJzAuMC4wJyxcbiAgICAgICAgcHJpdmF0ZTogdHJ1ZSxcbiAgICAgICAgZGV2RGVwZW5kZW5jaWVzOiB7XG4gICAgICAgICAgJ3Byb2plbic6IFBST0pFTl9WRVJTSU9OLFxuICAgICAgICAgICdAeHBlcnRzcy9wcm9qZW4tdHlwZXMnOiBQUk9KRU5fVFlQRVNfVkVSU0lPTixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICByZWFkb25seTogZmFsc2UsXG4gICAgfSk7XG5cbiAgICAvLyBKZXRCcmFpbnMgSURFIHN0YXRlICguaWRlYS8pIGlzIG5ldmVyIHRyYWNrZWQgaW4gZ2VuZXJhdGVkIHJlcG9zLCBhbmRcbiAgICAvLyBuZWl0aGVyIGlzIC9zcGVjLyAobG9jYWwgcGxhbnMgYW5kIHNwZWNzOyB0aGUgcGF0dGVybiBjb3ZlcnMgZXZlcnlcbiAgICAvLyBzdWJkaXJlY3RvcnkpLlxuICAgIHRoaXMuYWRkR2l0SWdub3JlKCcvLmlkZWEvKicpO1xuICAgIHRoaXMuYWRkR2l0SWdub3JlKCcvc3BlYy8nKTtcbiAgICB0aGlzLmFkZEdpdElnbm9yZSgndGFyZ2V0LycpO1xuICAgIHRoaXMuYWRkR2l0SWdub3JlKCcuY2xhc3NwYXRoJyk7XG4gICAgdGhpcy5hZGRHaXRJZ25vcmUoJy5wcm9qZWN0Jyk7XG4gICAgdGhpcy5hZGRHaXRJZ25vcmUoJy5zZXR0aW5ncycpO1xuXG4gICAgaWYgKG9wdGlvbnMubGljZW5zZWQgPz8gdHJ1ZSkge1xuICAgICAgbmV3IExpY2Vuc2UodGhpcywge1xuICAgICAgICBzcGR4OiBvcHRpb25zLmxpY2Vuc2UgPz8gJ01JVCcsXG4gICAgICAgIGNvcHlyaWdodE93bmVyOiBvcHRpb25zLmNvcHlyaWdodE93bmVyID8/ICd4cGVydHNzJyxcbiAgICAgICAgY29weXJpZ2h0UGVyaW9kOiBvcHRpb25zLmNvcHlyaWdodFBlcmlvZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5lZGl0b3Jjb25maWcgPz8gdHJ1ZSkge1xuICAgICAgYWRkRWRpdG9yQ29uZmlnKHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMucG9tID0gbmV3IE1hdmVuUG9tKHRoaXMsIHtcbiAgICAgIGdyb3VwSWQ6IG9wdGlvbnMuZ3JvdXBJZCxcbiAgICAgIGFydGlmYWN0SWQ6IG9wdGlvbnMuYXJ0aWZhY3RJZCxcbiAgICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbiA/PyAnMC4xLjAnLFxuICAgICAgcGFja2FnaW5nOiB0aGlzLnJvb3RQYWNrYWdpbmcgPz8gJ2phcicsXG4gICAgICBuYW1lOiBvcHRpb25zLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogb3B0aW9ucy5kZXNjcmlwdGlvbixcbiAgICAgIHVybDogb3B0aW9ucy51cmwsXG4gICAgfSk7XG4gICAgdGhpcy5jb25maWd1cmVCdWlsZChvcHRpb25zKTtcblxuICAgIC8vIE9uZSBNYXZlbiBydW4gcGVyIGJ1aWxkOiBgdmVyaWZ5YCBydW5zIGV2ZXJ5IGVhcmxpZXIgcGhhc2UgKGNvbXBpbGUsXG4gICAgLy8gdW5pdCB0ZXN0cywgcGFja2FnZSkgcGx1cyBpbnRlZ3JhdGlvbiB0ZXN0cy4gTm90aGluZyBkZXBsb3lzLlxuICAgIHRoaXMudGVzdFRhc2suZXhlYygnbXZuIC1CIHZlcmlmeScpO1xuXG4gICAgY29uc3QgZ2ggPSB0aGlzLmdpdGh1YjtcbiAgICBpZiAoIWdoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0phdmFNYXZlblByb2plY3QgcmVxdWlyZXMgR2l0SHViIGludGVncmF0aW9uJyk7XG4gICAgfVxuICAgIGFwcGx5SW50ZXJuYWxBY3Rpb25PdmVycmlkZXMoZ2gpO1xuXG4gICAgbmV3IFByb2plbkRyaWZ0Q2hlY2tXb3JrZmxvdyh0aGlzLCB7XG4gICAgICBnaGVUb2tlblNlY3JldDogb3B0aW9ucy5naGVUb2tlblNlY3JldCA/PyBERUZBVUxUX0dIRV9UT0tFTl9TRUNSRVQsXG4gICAgfSk7XG4gICAgbmV3IFdvcmtmbG93Q2hhbmdlTm90aWNlV29ya2Zsb3codGhpcyk7XG5cbiAgICB0aGlzLmNpU2V0dXBTdGVwcyA9IFtcbiAgICAgIFNFVFVQX05PREVfU1RFUCxcbiAgICAgIE5QTV9DSV9TVEVQLFxuICAgICAge1xuICAgICAgICBuYW1lOiAnU2V0dXAgSmF2YScsXG4gICAgICAgIHVzZXM6ICdhY3Rpb25zL3NldHVwLWphdmFAdjYnLFxuICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgJ2Rpc3RyaWJ1dGlvbic6IG9wdGlvbnMuamF2YURpc3RyaWJ1dGlvbiA/PyAndGVtdXJpbicsXG4gICAgICAgICAgJ2phdmEtdmVyc2lvbic6IHRoaXMuamF2YUxpbmUuc2V0dXBKYXZhVmVyc2lvbixcbiAgICAgICAgICAnY2FjaGUnOiAnbWF2ZW4nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgY29uc3QgcG9zdEJ1aWxkU3RlcHM6IGdpdGh1Yi53b3JrZmxvd3MuSm9iU3RlcFtdID0gW107XG4gICAgaWYgKG9wdGlvbnMuc29uYXJQcm9qZWN0S2V5KSB7XG4gICAgICBwb3N0QnVpbGRTdGVwcy5wdXNoKHtcbiAgICAgICAgbmFtZTogJ1NvbmFyUXViZSBzY2FuJyxcbiAgICAgICAgcnVuOiBgbXZuIC1CIHNvbmFyOnNvbmFyIC1Ec29uYXIucHJvamVjdEtleT0ke29wdGlvbnMuc29uYXJQcm9qZWN0S2V5fWAsXG4gICAgICAgIGVudjogeyBTT05BUl9UT0tFTjogJyR7eyBzZWNyZXRzLlNPTkFSX1RPS0VOIH19JyB9LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5idWlsZFZlcmlmeVdvcmtmbG93ID0gbmV3IGdpdGh1Yi5UYXNrV29ya2Zsb3coZ2gsIHtcbiAgICAgIG5hbWU6ICdidWlsZCcsXG4gICAgICBqb2JJZDogJ2J1aWxkJyxcbiAgICAgIHRhc2s6IHRoaXMuYnVpbGRUYXNrLFxuICAgICAgdHJpZ2dlcnM6IHsgcHVsbFJlcXVlc3Q6IHt9LCB3b3JrZmxvd0Rpc3BhdGNoOiB7fSB9LFxuICAgICAgcGVybWlzc2lvbnM6IHsgY29udGVudHM6IGdpdGh1Yi53b3JrZmxvd3MuSm9iUGVybWlzc2lvbi5SRUFEIH0sXG4gICAgICBwcmVCdWlsZFN0ZXBzOiB0aGlzLmNpU2V0dXBTdGVwcyxcbiAgICAgIHBvc3RCdWlsZFN0ZXBzLFxuICAgIH0pO1xuICAgIG5vdGVXb3JrZmxvd1B1cnBvc2UoXG4gICAgICB0aGlzLmJ1aWxkVmVyaWZ5V29ya2Zsb3cuZmlsZSxcbiAgICAgICdCdWlsZCBhbmQgdGVzdCB0aGUgTWF2ZW4gcHJvamVjdCBvbiBwdWxsIHJlcXVlc3RzLCB3aXRoIGFuIG9wdGlvbmFsIFNvbmFyUXViZSBzY2FuLicsXG4gICAgKTtcblxuICAgIGNvbnN0IHZlcnNpb25zUGx1Z2luID0gYG9yZy5jb2RlaGF1cy5tb2pvOnZlcnNpb25zLW1hdmVuLXBsdWdpbjoke3RoaXMucGlubmVkVmVyc2lvbihWRVJTSU9OU19NQVZFTl9QTFVHSU4pfWA7XG4gICAgdGhpcy51cGdyYWRlVGFzayA9IHRoaXMuYWRkVGFzaygndXBncmFkZScsIHtcbiAgICAgIGV4ZWM6IGBtdm4gLUIgJHt2ZXJzaW9uc1BsdWdpbn06ZGlzcGxheS1kZXBlbmRlbmN5LXVwZGF0ZXMgJHt2ZXJzaW9uc1BsdWdpbn06ZGlzcGxheS1wbHVnaW4tdXBkYXRlc2AsXG4gICAgfSk7XG4gICAgaWYgKG9wdGlvbnMudXBncmFkZVdvcmtmbG93ID8/IHRydWUpIHtcbiAgICAgIG5ldyBNYXZlblVwZ3JhZGVSZXBvcnQodGhpcywge1xuICAgICAgICB0YXNrOiB0aGlzLnVwZ3JhZGVUYXNrLFxuICAgICAgICBzZXR1cFN0ZXBzOiB0aGlzLmNpU2V0dXBTdGVwcyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBUaGUgbW9kdWxlcyBhZGRlZCB3aXRoIGBhZGRNb2R1bGUoKWAsIGluIG9yZGVyLiAqL1xuICBwdWJsaWMgZ2V0IG1vZHVsZXMoKTogTWF2ZW5Nb2R1bGVbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLm1hdmVuTW9kdWxlc107XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIE1hdmVuIG1vZHVsZSBpbiBgZGlyYCAocmVsYXRpdmUgdG8gdGhlIHJlcG8gcm9vdDsgbWF5IGJlIG5lc3RlZCxcbiAgICogZS5nLiBgdG9vbHMvc3R1Yi1tb2RlbGApIGFuZCB0dXJucyB0aGUgcm9vdCBwb20gaW50byB0aGUgcmVhY3RvciBwYXJlbnRcbiAgICogKGBwYWNrYWdpbmc9cG9tYCwgYDxtb2R1bGVzPmAgaW4gdGhlIG9yZGVyIGFkZGVkKS4gVGhlIHBhcmVudCBtYW5hZ2VzXG4gICAqIGV2ZXJ5IG1vZHVsZSBhdCBgJHtwcm9qZWN0LnZlcnNpb259YCwgc28gbW9kdWxlcyBkZXBlbmQgb24gZWFjaCBvdGhlclxuICAgKiB3aXRoIGBhZGRNb2R1bGVEZXBlbmRlbmN5KClgLCB2ZXJzaW9ubGVzcy5cbiAgICovXG4gIHB1YmxpYyBhZGRNb2R1bGUob3B0aW9uczogTWF2ZW5Nb2R1bGVPcHRpb25zKTogTWF2ZW5Nb2R1bGUge1xuICAgIGlmICh0aGlzLnJvb3RQYWNrYWdpbmcgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnJvb3RQYWNrYWdpbmcgIT09ICdwb20nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBBIG11bHRpLW1vZHVsZSBwcm9qZWN0J3Mgcm9vdCBwb20gaXMgcGFja2FnZWQgYXMgXCJwb21cIjsgcmVtb3ZlIHBhY2thZ2luZzogXCIke3RoaXMucm9vdFBhY2thZ2luZ31cIi5gLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgZGlyID0gbm9ybWFsaXplTW9kdWxlRGlyKG9wdGlvbnMuZGlyKTtcbiAgICBmb3IgKGNvbnN0IG0gb2YgdGhpcy5tYXZlbk1vZHVsZXMpIHtcbiAgICAgIGlmIChtLmFydGlmYWN0SWQgPT09IG9wdGlvbnMuYXJ0aWZhY3RJZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYER1cGxpY2F0ZSBtb2R1bGUgYXJ0aWZhY3RJZCBcIiR7b3B0aW9ucy5hcnRpZmFjdElkfVwiIChkaXJzIFwiJHttLmRpcn1cIiBhbmQgXCIke2Rpcn1cIikuYCk7XG4gICAgICB9XG4gICAgICBpZiAobS5kaXIgPT09IGRpciB8fCBkaXIuc3RhcnRzV2l0aChgJHttLmRpcn0vYCkgfHwgbS5kaXIuc3RhcnRzV2l0aChgJHtkaXJ9L2ApKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTW9kdWxlIGRpciBcIiR7ZGlyfVwiIG92ZXJsYXBzIG1vZHVsZSBkaXIgXCIke20uZGlyfVwiOiBtb2R1bGUgZGlycyBtdXN0IGJlIGRpc3RpbmN0IGFuZCBub3QgbmVzdGVkLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBNYXZlbk1vZHVsZSh0aGlzLCB0aGlzLnBvbSwgeyAuLi5vcHRpb25zLCBkaXIgfSk7XG4gICAgdGhpcy5tYXZlbk1vZHVsZXMucHVzaChtb2R1bGUpO1xuICAgIHRoaXMucG9tLnBhY2thZ2luZyA9ICdwb20nO1xuICAgIHRoaXMucG9tLm1hbmFnZVBsdWdpblZlcnNpb25zID0gdHJ1ZTtcbiAgICB0aGlzLnBvbS5hZGRNb2R1bGUoZGlyKTtcbiAgICB0aGlzLnBvbS5hZGRNYW5hZ2VkRGVwZW5kZW5jeShgJHt0aGlzLmdyb3VwSWR9LyR7b3B0aW9ucy5hcnRpZmFjdElkfUBcXCR7cHJvamVjdC52ZXJzaW9ufWApO1xuICAgIHJldHVybiBtb2R1bGU7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0cyBhIEJPTSBpbnRvIHRoZSByb290IGA8ZGVwZW5kZW5jeU1hbmFnZW1lbnQ+YCAoYHR5cGU9cG9tYCxcbiAgICogYHNjb3BlPWltcG9ydGApLlxuICAgKlxuICAgKiBAcGFyYW0gc3BlYyBgZ3JvdXBJZC9hcnRpZmFjdElkQHZlcnNpb25gXG4gICAqL1xuICBwdWJsaWMgYWRkQm9tKHNwZWM6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucG9tLmFkZEJvbShzcGVjKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQaW5zIGEgdmVyc2lvbiBpbiB0aGUgcm9vdCBgPGRlcGVuZGVuY3lNYW5hZ2VtZW50PmAgd2l0aG91dCBhZGRpbmcgdGhlXG4gICAqIGRlcGVuZGVuY3ksIHNvIG1vZHVsZXMgKG9yIHRoZSByb290KSBjYW4gdXNlIGl0IHZlcnNpb25sZXNzLlxuICAgKlxuICAgKiBAcGFyYW0gc3BlYyBgZ3JvdXBJZC9hcnRpZmFjdElkQHZlcnNpb25gXG4gICAqL1xuICBwdWJsaWMgYWRkTWFuYWdlZERlcGVuZGVuY3koc3BlYzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wb20uYWRkTWFuYWdlZERlcGVuZGVuY3koc3BlYyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGNvbXBpbGUtc2NvcGUgZGVwZW5kZW5jeSB0byB0aGUgcm9vdCBwb20uIEluIGEgbXVsdGktbW9kdWxlXG4gICAqIHByb2plY3QgZXZlcnkgbW9kdWxlIGluaGVyaXRzIGl0OyB1c2UgYE1hdmVuTW9kdWxlLmFkZERlcGVuZGVuY3lgIGZvclxuICAgKiBvbmUgbW9kdWxlLlxuICAgKlxuICAgKiBAcGFyYW0gc3BlYyBgZ3JvdXBJZC9hcnRpZmFjdElkW0B2ZXJzaW9uXWAgLSBleGFjdCB2ZXJzaW9uLCBvciBub25lIHdoZW5cbiAgICogYSBCT00gbWFuYWdlcyBpdFxuICAgKi9cbiAgcHVibGljIGFkZERlcGVuZGVuY3koc3BlYzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wb20uYWRkRGVwZW5kZW5jeShzcGVjKTtcbiAgfVxuXG4gIC8qKiBBZGRzIGEgdGVzdC1zY29wZSBkZXBlbmRlbmN5IHRvIHRoZSByb290IHBvbSAoaW5oZXJpdGVkIGJ5IGV2ZXJ5IG1vZHVsZSkuICovXG4gIHB1YmxpYyBhZGRUZXN0RGVwZW5kZW5jeShzcGVjOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnBvbS5hZGRUZXN0RGVwZW5kZW5jeShzcGVjKTtcbiAgfVxuXG4gIC8qKiBBZGRzIGEgYnVpbGQgcGx1Z2luIHRvIHRoZSByb290IHBvbSAoaW5oZXJpdGVkIGJ5IGV2ZXJ5IG1vZHVsZSkuICovXG4gIHB1YmxpYyBhZGRQbHVnaW4oc3BlYzogc3RyaW5nLCBvcHRpb25zOiBqYXZhLlBsdWdpbk9wdGlvbnMgPSB7fSk6IHZvaWQge1xuICAgIHRoaXMucG9tLmFkZFBsdWdpbihzcGVjLCBvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBwcmVTeW50aGVzaXplKCk6IHZvaWQge1xuICAgIHN1cGVyLnByZVN5bnRoZXNpemUoKTtcbiAgICBpZiAodGhpcy5zYW1wbGUgJiYgdGhpcy5tYXZlbk1vZHVsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmFkZFNhbXBsZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZXhhY3QgdmVyc2lvbiB0aGlzIHByb2plY3QgdXNlcyBmb3IgYSBgZ3JvdXBJZC9hcnRpZmFjdElkYCBpdCBwaW5zXG4gICAqIGJ5IGRlZmF1bHQ6IHRoZSBgcGx1Z2luVmVyc2lvbnNgIG92ZXJyaWRlIGlmIHNldCwgb3RoZXJ3aXNlIHRoZVxuICAgKiBkZWZhdWx0IGZvciBgamF2YVZlcnNpb25gLlxuICAgKi9cbiAgcHVibGljIHBpbm5lZFZlcnNpb24oY29vcmRpbmF0ZXM6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdmVyc2lvbiA9IHRoaXMuamF2YUxpbmUudmVyc2lvbnNbY29vcmRpbmF0ZXNdO1xuICAgIGlmICghdmVyc2lvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBkZWZhdWx0IHZlcnNpb24gZm9yICR7Y29vcmRpbmF0ZXN9LmApO1xuICAgIH1cbiAgICByZXR1cm4gdmVyc2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbmV3ZXN0IFNwcmluZyBCb290IG1ham9yIHZlcnNpb24gYGphdmFWZXJzaW9uYCBzdXBwb3J0cywgb3JcbiAgICogdW5kZWZpbmVkIHdoZW4gdGhpcyBwYWNrYWdlIGtub3dzIG9mIG5vIGNhcC5cbiAgICovXG4gIHByb3RlY3RlZCBtYXhTcHJpbmdCb290TWFqb3IoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5qYXZhTGluZS5tYXhTcHJpbmdCb290TWFqb3I7XG4gIH1cblxuICBwcml2YXRlIGNvbmZpZ3VyZUJ1aWxkKG9wdGlvbnM6IEphdmFNYXZlblByb2plY3RPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5wb20uYWRkUHJvcGVydHkoJ3Byb2plY3QuYnVpbGQuc291cmNlRW5jb2RpbmcnLCAnVVRGLTgnKTtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5qYXZhTGluZS5jb21waWxlclByb3BlcnRpZXMpKSB7XG4gICAgICB0aGlzLnBvbS5hZGRQcm9wZXJ0eShuYW1lLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gSlVuaXQncyB2ZXJzaW9uIGNvbWVzIGZyb20gaXRzIEJPTSAob3IgZnJvbSBhIGZyYW1ld29yayBCT00gdGhhdFxuICAgIC8vIG1hbmFnZXMgaXQgLSBzZWUgSmF2YVNwcmluZ0Jvb3RQcm9qZWN0KSwgbmV2ZXIgZnJvbSBhIGRlcGVuZGVuY3kuXG4gICAgdGhpcy5wb20uYWRkQm9tKGAke0pVTklUX0JPTX1AJHt0aGlzLnBpbm5lZFZlcnNpb24oSlVOSVRfQk9NKX1gKTtcbiAgICB0aGlzLnBvbS5hZGRUZXN0RGVwZW5kZW5jeSgnb3JnLmp1bml0Lmp1cGl0ZXIvanVuaXQtanVwaXRlcicpO1xuXG4gICAgdGhpcy5hZGRQbHVnaW4oYCR7TUFWRU5fQ09NUElMRVJfUExVR0lOfUAke3RoaXMucGlubmVkVmVyc2lvbihNQVZFTl9DT01QSUxFUl9QTFVHSU4pfWApO1xuICAgIHRoaXMuYWRkUGx1Z2luKGAke01BVkVOX1NVUkVGSVJFX1BMVUdJTn1AJHt0aGlzLnBpbm5lZFZlcnNpb24oTUFWRU5fU1VSRUZJUkVfUExVR0lOKX1gKTtcbiAgICAvLyBmYWlsc2FmZSBoYXMgbm8gZGVmYXVsdCBsaWZlY3ljbGUgYmluZGluZzsgYmluZCBpdCBzbyBgKklUYCB0ZXN0cyBydW5cbiAgICAvLyBpbiBgbXZuIHZlcmlmeWAuXG4gICAgdGhpcy5hZGRQbHVnaW4oYCR7TUFWRU5fRkFJTFNBRkVfUExVR0lOfUAke3RoaXMucGlubmVkVmVyc2lvbihNQVZFTl9GQUlMU0FGRV9QTFVHSU4pfWAsIHtcbiAgICAgIGV4ZWN1dGlvbnM6IFt7IGlkOiAnaW50ZWdyYXRpb24tdGVzdHMnLCBnb2FsczogWydpbnRlZ3JhdGlvbi10ZXN0JywgJ3ZlcmlmeSddIH1dLFxuICAgIH0pO1xuICAgIHRoaXMuYWRkUGx1Z2luKGAke01BVkVOX0pBUl9QTFVHSU59QCR7dGhpcy5waW5uZWRWZXJzaW9uKE1BVkVOX0pBUl9QTFVHSU4pfWAsIHtcbiAgICAgIGNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgYXJjaGl2ZToge1xuICAgICAgICAgIG1hbmlmZXN0OiB7XG4gICAgICAgICAgICBhZGREZWZhdWx0SW1wbGVtZW50YXRpb25FbnRyaWVzOiB0cnVlLFxuICAgICAgICAgICAgYWRkRGVmYXVsdFNwZWNpZmljYXRpb25FbnRyaWVzOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgaWYgKG9wdGlvbnMuZW5mb3JjZXIgPz8gdHJ1ZSkge1xuICAgICAgY29uc3QgbWluTWF2ZW4gPSBvcHRpb25zLm1pbk1hdmVuVmVyc2lvbiA/PyBERUZBVUxUX01JTl9NQVZFTl9WRVJTSU9OO1xuICAgICAgYXNzZXJ0RXhhY3RWZXJzaW9uKG1pbk1hdmVuLCAnbWluTWF2ZW5WZXJzaW9uJyk7XG4gICAgICB0aGlzLmFkZFBsdWdpbihgJHtNQVZFTl9FTkZPUkNFUl9QTFVHSU59QCR7dGhpcy5waW5uZWRWZXJzaW9uKE1BVkVOX0VORk9SQ0VSX1BMVUdJTil9YCwge1xuICAgICAgICBleGVjdXRpb25zOiBbeyBpZDogJ2VuZm9yY2UtdmVyc2lvbnMnLCBnb2FsczogWydlbmZvcmNlJ10gfV0sXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBydWxlczoge1xuICAgICAgICAgICAgcmVxdWlyZU1hdmVuVmVyc2lvbjogeyB2ZXJzaW9uOiBgWyR7bWluTWF2ZW59LClgIH0sXG4gICAgICAgICAgICByZXF1aXJlSmF2YVZlcnNpb246IHsgdmVyc2lvbjogdGhpcy5qYXZhTGluZS5lbmZvcmNlckphdmFSYW5nZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZFNhbXBsZSgpOiB2b2lkIHtcbiAgICBjb25zdCBwa2cgPSB0aGlzLmdyb3VwSWQucmVwbGFjZSgvW15BLVphLXowLTlfLl0vZywgJ18nKTtcbiAgICBjb25zdCBwYXRoID0gcGtnLnNwbGl0KCcuJyk7XG4gICAgbmV3IFNhbXBsZURpcih0aGlzLCBwb3NpeC5qb2luKCdzcmMvbWFpbi9qYXZhJywgLi4ucGF0aCksIHtcbiAgICAgIGZpbGVzOiB7XG4gICAgICAgICdNYWluLmphdmEnOiBbXG4gICAgICAgICAgYHBhY2thZ2UgJHtwa2d9O2AsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJ3B1YmxpYyBjbGFzcyBNYWluIHsnLFxuICAgICAgICAgICcgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeycsXG4gICAgICAgICAgJyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFwiSGVsbG8sIHdvcmxkIVwiKTsnLFxuICAgICAgICAgICcgICAgfScsXG4gICAgICAgICAgJ30nLFxuICAgICAgICAgICcnLFxuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBuZXcgU2FtcGxlRGlyKHRoaXMsIHBvc2l4LmpvaW4oJ3NyYy90ZXN0L2phdmEnLCAuLi5wYXRoKSwge1xuICAgICAgZmlsZXM6IHtcbiAgICAgICAgJ01haW5UZXN0LmphdmEnOiBbXG4gICAgICAgICAgYHBhY2thZ2UgJHtwa2d9O2AsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJ2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuVGVzdDsnLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICdjbGFzcyBNYWluVGVzdCB7JyxcbiAgICAgICAgICAnICAgIEBUZXN0JyxcbiAgICAgICAgICAnICAgIHZvaWQgcnVucygpIHsnLFxuICAgICAgICAgICcgICAgICAgIE1haW4ubWFpbihuZXcgU3RyaW5nWzBdKTsnLFxuICAgICAgICAgICcgICAgfScsXG4gICAgICAgICAgJ30nLFxuICAgICAgICAgICcnLFxuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIGBwcm9qZW4gbmV3IC4uLiAtLWphdmEtdmVyc2lvbiAyMWAgKG9yIGAxLjhgLCBvciBgLS1taW4tbWF2ZW4tdmVyc2lvbiAzLjlgKVxuICogcmVhY2hlcyB0aGUgb3B0aW9ucyBhcyBhICpudW1iZXIqOiB5YXJncyBwYXJzZXMgbnVtZXJpYy1sb29raW5nIGZsYWdzLCBhbmRcbiAqIHByb2plbiBwYXNzZXMgc3RyaW5nLXR5cGVkIG9wdGlvbnMgdGhyb3VnaCB1bmNoYW5nZWQuIFRoZSBpbml0aWFsXG4gKiBgLnByb2plbnJjLnRzYCBpcyByZW5kZXJlZCBmcm9tIHRoZSBzYW1lIGFyZ3MsIHNvIGl0IHdvdWxkIHJlYWRcbiAqIGBqYXZhVmVyc2lvbjogMjFgIGFuZCBmYWlsIHRvIHR5cGUtY2hlY2suIE5vIEphdmEgb3B0aW9uIGlzIG51bWJlci10eXBlZCxcbiAqIHNvIGV2ZXJ5IG51bWVyaWMgYXJnIGlzIHR1cm5lZCBiYWNrIGludG8gdGhlIHN0cmluZyB0aGUgdXNlciB0eXBlZC4gVGhpc1xuICogcnVucyBiZWZvcmUgdGhlIFByb2plY3QgY29uc3RydWN0b3IsIHdoaWNoIGlzIHdoZXJlIHByb2plbiBjYXB0dXJlcyB0aGVcbiAqIGFyZ3MgaXQgcmVuZGVycy4gT3B0aW9ucyBmcm9tIGEgaGFuZC13cml0dGVuIHByb2plbnJjIGFyZSBuZXZlciBudW1iZXJzXG4gKiAodGhleSB0eXBlLWNoZWNrIGFzIHN0cmluZ3MpIGFuZCBhcmUgbGVmdCBhbG9uZS5cbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5UHJvamVuTmV3QXJnczxUIGV4dGVuZHMgb2JqZWN0PihvcHRpb25zOiBUKTogVCB7XG4gIGNvbnN0IG1hcmtlciA9IChvcHRpb25zIGFzIGFueSkuX19uZXdfXztcbiAgaWYgKCFtYXJrZXI/LmFyZ3MpIHtcbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfVxuICBmb3IgKGNvbnN0IHRhcmdldCBvZiBbb3B0aW9ucyBhcyBhbnksIG1hcmtlci5hcmdzXSkge1xuICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0YXJnZXQpKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSBTdHJpbmcodmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gb3B0aW9ucztcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplTW9kdWxlRGlyKGRpcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgdW5peCA9IGRpci5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gIGlmICh1bml4LnN0YXJ0c1dpdGgoJy8nKSB8fCAvXltBLVphLXpdOi8udGVzdCh1bml4KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTW9kdWxlIGRpciBcIiR7ZGlyfVwiIG11c3QgYmUgcmVsYXRpdmUgdG8gdGhlIHJlcG8gcm9vdC5gKTtcbiAgfVxuICBjb25zdCBub3JtYWxpemVkID0gcG9zaXgubm9ybWFsaXplKHVuaXgpLnJlcGxhY2UoL1xcLyskLywgJycpO1xuICBpZiAobm9ybWFsaXplZCA9PT0gJy4nIHx8IG5vcm1hbGl6ZWQgPT09ICcnIHx8IG5vcm1hbGl6ZWQuc3BsaXQoJy8nKS5pbmNsdWRlcygnLi4nKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTW9kdWxlIGRpciBcIiR7ZGlyfVwiIG11c3QgYmUgYSBzdWJkaXJlY3Rvcnkgb2YgdGhlIHJlcG8gcm9vdC5gKTtcbiAgfVxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cbiJdfQ==
|
|
406
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YS1tYXZlbi1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2phdmEvamF2YS1tYXZlbi1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSx5Q0FBa0M7QUFDbEMsbUNBQTBFO0FBQzFFLDRFQUF1RTtBQUN2RSxtREFXeUI7QUFDekIsdURBQW1EO0FBQ25ELGlEQUFpRTtBQUVqRSxpREFBa0U7QUFDbEUsbURBQStEO0FBQy9ELHlEQUF5RDtBQUN6RCxpRUFBMEU7QUFDMUUsdUZBQWlGO0FBQ2pGLHVEQUFpRTtBQUNqRSwrRkFBeUY7QUFDekYsaUVBQWlFO0FBRWpFLDJFQUEyRTtBQUMzRSx3RUFBd0U7QUFDeEUseURBQXlEO0FBQ3pELDBCQUEwQjtBQUMxQixpRUFBaUU7QUFDakUsTUFBTSxjQUFjLEdBQVcsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ3RFLGlFQUFpRTtBQUNqRSxNQUFNLG9CQUFvQixHQUFXLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUUzRTs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxNQUFhLGdCQUFpQixTQUFRLGVBQU0sQ0FBQyxhQUFhOztJQUN4RCwwQkFBMEI7SUFDVixHQUFHLENBQVc7SUFFOUIsMkVBQTJFO0lBQzNELFdBQVcsQ0FBUztJQUVwQyx5RUFBeUU7SUFDekQsV0FBVyxDQUFPO0lBRWxDOzs7O09BSUc7SUFDYSxtQkFBbUIsQ0FBc0I7SUFFekQ7OztPQUdHO0lBQ2EsWUFBWSxDQUE2QjtJQUV4QyxRQUFRLENBQWtCO0lBQzFCLGFBQWEsQ0FBVTtJQUN2QixPQUFPLENBQVM7SUFDaEIsTUFBTSxDQUFVO0lBQ2hCLFlBQVksR0FBa0IsRUFBRSxDQUFDO0lBRWxELFlBQVksT0FBZ0M7UUFDMUMsS0FBSyxDQUFDO1lBQ0osb0VBQW9FO1lBQ3BFLHNFQUFzRTtZQUN0RSxpRUFBaUU7WUFDakUsd0RBQXdEO1lB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QztJQUM3RCxJQUFJLFVBQVUsS0FBSyxHQUFHLElBQUksVUFBVSxLQUFLLEVBQUUsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3BGLE1BQU0sSUFBSSxLQUFLLENBQUMsZUFBZSxHQUFHLDRDQUE0QyxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwb3NpeCB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBKc29uRmlsZSwgTGljZW5zZSwgU2FtcGxlRGlyLCBUYXNrLCBnaXRodWIsIGphdmEgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgTWF2ZW5VcGdyYWRlUmVwb3J0IH0gZnJvbSAnLi9jb21wb25lbnRzL21hdmVuLXVwZ3JhZGUtcmVwb3J0JztcbmltcG9ydCB7XG4gIERFRkFVTFRfTUlOX01BVkVOX1ZFUlNJT04sXG4gIEpVTklUX0JPTSxcbiAgSmF2YUxpbmVQcm9maWxlLFxuICBNQVZFTl9DT01QSUxFUl9QTFVHSU4sXG4gIE1BVkVOX0VORk9SQ0VSX1BMVUdJTixcbiAgTUFWRU5fRkFJTFNBRkVfUExVR0lOLFxuICBNQVZFTl9KQVJfUExVR0lOLFxuICBNQVZFTl9TVVJFRklSRV9QTFVHSU4sXG4gIFZFUlNJT05TX01BVkVOX1BMVUdJTixcbiAgcmVzb2x2ZUphdmFMaW5lLFxufSBmcm9tICcuL2phdmEtdmVyc2lvbnMnO1xuaW1wb3J0IHsgTWF2ZW5Nb2R1bGUgfSBmcm9tICcuL21hdmVuL21hdmVuLW1vZHVsZSc7XG5pbXBvcnQgeyBNYXZlblBvbSwgYXNzZXJ0RXhhY3RWZXJzaW9uIH0gZnJvbSAnLi9tYXZlbi9tYXZlbi1wb20nO1xuaW1wb3J0IHsgSmF2YU1hdmVuUHJvamVjdE9wdGlvbnMsIE1hdmVuTW9kdWxlT3B0aW9ucyB9IGZyb20gJy4vb3B0aW9ucyc7XG5pbXBvcnQgeyBOUE1fQ0lfU1RFUCwgU0VUVVBfTk9ERV9TVEVQIH0gZnJvbSAnLi4vY29tbW9uL2NpLXN0ZXBzJztcbmltcG9ydCB7IERFRkFVTFRfR0hFX1RPS0VOX1NFQ1JFVCB9IGZyb20gJy4uL2NvbW1vbi9jb25zdGFudHMnO1xuaW1wb3J0IHsgYWRkRWRpdG9yQ29uZmlnIH0gZnJvbSAnLi4vY29tbW9uL2VkaXRvcmNvbmZpZyc7XG5pbXBvcnQgeyBhcHBseUludGVybmFsQWN0aW9uT3ZlcnJpZGVzIH0gZnJvbSAnLi4vY29tbW9uL2ludGVybmFsLWFjdGlvbnMnO1xuaW1wb3J0IHsgUHJvamVuRHJpZnRDaGVja1dvcmtmbG93IH0gZnJvbSAnLi4vY29tbW9uL3Byb2plbi1kcmlmdC1jaGVjay13b3JrZmxvdyc7XG5pbXBvcnQgeyBhdHRhY2hUeXBlU2NyaXB0UHJvamVucmMgfSBmcm9tICcuLi9jb21tb24vcHJvamVucmMtdHMnO1xuaW1wb3J0IHsgV29ya2Zsb3dDaGFuZ2VOb3RpY2VXb3JrZmxvdyB9IGZyb20gJy4uL2NvbW1vbi93b3JrZmxvdy1jaGFuZ2Utbm90aWNlLXdvcmtmbG93JztcbmltcG9ydCB7IG5vdGVXb3JrZmxvd1B1cnBvc2UgfSBmcm9tICcuLi9jb21tb24vd29ya2Zsb3ctcHVycG9zZSc7XG5cbi8vIGByZXF1aXJlKC4uLilgIHJlc29sdmVzIHRocm91Z2ggTm9kZSdzIG5vcm1hbCBtb2R1bGUgcmVzb2x1dGlvbiwgc28gaW4gYVxuLy8gKnB1Ymxpc2hlZCogcGFja2FnZSB0aGVzZSBhcmUgdGhlIHZlcnNpb25zIGluc3RhbGxlZCBpbiB0aGUgY29uc3VtaW5nXG4vLyByZXBvIC0gZXhhY3RseSB3aGF0IGl0cyBwYWNrYWdlLmpzb24gbXVzdCBwaW4gKHNhbWUgYXNcbi8vIGBHaXRIdWJBY3Rpb25Qcm9qZWN0YCkuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuY29uc3QgUFJPSkVOX1ZFUlNJT046IHN0cmluZyA9IHJlcXVpcmUoJ3Byb2plbi9wYWNrYWdlLmpzb24nKS52ZXJzaW9uO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbmNvbnN0IFBST0pFTl9UWVBFU19WRVJTSU9OOiBzdHJpbmcgPSByZXF1aXJlKCcuLi8uLi9wYWNrYWdlLmpzb24nKS52ZXJzaW9uO1xuXG4vKipcbiAqIEJhc2VsaW5lIE1hdmVuIHByb2plY3QsIHNpbmdsZS0gb3IgbXVsdGktbW9kdWxlLCB3aXRoIG5vIGZyYW1ld29ya1xuICogYXNzdW1wdGlvbnMuIEl0IGlzIHRoZSBiYXNlIG9mIGV2ZXJ5IEphdmEgdHlwZSBpbiB0aGlzIHBhY2thZ2UgYW5kIGlzXG4gKiB1c2FibGUgb24gaXRzIG93biAoYHByb2plbiBuZXcgLi4uIGphdmFfbWF2ZW5gKS5cbiAqXG4gKiAtIFRoZSBwb20gaXMgd3JpdHRlbiBieSB0aGlzIHBhY2thZ2UgKGBNYXZlblBvbWApLCBub3QgcHJvamVuJ3NcbiAqICAgYGphdmEuUG9tYDogZXhhY3QgdmVyc2lvbnMgb25seSwgQk9NIGltcG9ydHMsIGA8bW9kdWxlcz5gLFxuICogICBgPGRlcGVuZGVuY3lNYW5hZ2VtZW50PmAsIGA8cGx1Z2luTWFuYWdlbWVudD5gLlxuICogLSBFdmVyeXRoaW5nIEphdmEtdmVyc2lvbi1kZXBlbmRlbnQgKGNvbXBpbGVyIGxldmVsLCBlbmZvcmNlciBydWxlLCBKVW5pdFxuICogICBsaW5lLCBDSSBKREspIGZvbGxvd3MgYGphdmFWZXJzaW9uYC5cbiAqIC0gV2l0aCBubyBgYWRkTW9kdWxlKClgIGNhbGxzIHRoZSByb290IHBvbSBpcyB0aGUgYXJ0aWZhY3QuIEFmdGVyIHRoZVxuICogICBmaXJzdCBgYWRkTW9kdWxlKClgIGl0IGlzIGEgYHBvbWAtcGFja2FnZWQgcmVhY3RvciBwYXJlbnQgYW5kIHRoZVxuICogICBtb2R1bGVzIGluaGVyaXQgaXRzIHBsdWdpbnMgYW5kIHRlc3QgZGVwZW5kZW5jaWVzLlxuICogLSBgbnB4IHByb2plbiBidWlsZGAgc3ludGhlc2l6ZXMsIHRoZW4gcnVucyBNYXZlbiBvbmNlOiBgbXZuIC1CIHZlcmlmeWBcbiAqICAgKHVuaXQgdGVzdHMgdmlhIHN1cmVmaXJlLCBgKklUYCB0ZXN0cyB2aWEgZmFpbHNhZmUpLlxuICogLSBDSTogYSBQUiBidWlsZCAod2l0aCBhbiBvcHRpb25hbCBTb25hclF1YmUgc2NhbiksIHRoZSBwcm9qZW4gZHJpZnRcbiAqICAgY2hlY2ssIGFuZCBhIG5pZ2h0bHkgcmVwb3J0LW9ubHkgdXBkYXRlIGNoZWNrLlxuICovXG5leHBvcnQgY2xhc3MgSmF2YU1hdmVuUHJvamVjdCBleHRlbmRzIGdpdGh1Yi5HaXRIdWJQcm9qZWN0IHtcbiAgLyoqIFRoZSByb290IGBwb20ueG1sYC4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHBvbTogTWF2ZW5Qb207XG5cbiAgLyoqIFRoZSBjYW5vbmljYWwgSmF2YSBsaW5lIHRoZSBidWlsZCB0YXJnZXRzIChgMS44YCwgYDE3YCwgYDIxYCwgYDI1YCkuICovXG4gIHB1YmxpYyByZWFkb25seSBqYXZhVmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKiBQcmludHMgYXZhaWxhYmxlIGRlcGVuZGVuY3kvcGx1Z2luIHVwZGF0ZXMgKGBucHggcHJvamVuIHVwZ3JhZGVgKS4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHVwZ3JhZGVUYXNrOiBUYXNrO1xuXG4gIC8qKlxuICAgKiBUaGUgUFIgYnVpbGQgd29ya2Zsb3cgKGBidWlsZC55bWxgKS4gQWRkIGpvYnMgdG8gaXQgd2l0aFxuICAgKiBgYnVpbGRWZXJpZnlXb3JrZmxvdy5hZGRKb2IoaWQsIGpvYilgOyB1c2UgYGNpU2V0dXBTdGVwc2AgZm9yIGEgam9iIHRoYXRcbiAgICogbmVlZHMgTm9kZSwgdGhlIHByb2plbiB0b29sY2hhaW4sIGFuZCB0aGUgSkRLLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGJ1aWxkVmVyaWZ5V29ya2Zsb3c6IGdpdGh1Yi5UYXNrV29ya2Zsb3c7XG5cbiAgLyoqXG4gICAqIFN0ZXBzIHRoYXQgaW5zdGFsbCBOb2RlIChwaW5uZWQpLCBgbnBtIGNpYCwgYW5kIHRoZSBwcm9qZWN0J3MgSkRLIHdpdGggYVxuICAgKiBNYXZlbiBjYWNoZSAtIHRoZSBzZXR1cCBldmVyeSBNYXZlbiBDSSBqb2IgaW4gdGhpcyByZXBvIG5lZWRzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNpU2V0dXBTdGVwczogZ2l0aHViLndvcmtmbG93cy5Kb2JTdGVwW107XG5cbiAgcHJpdmF0ZSByZWFkb25seSBqYXZhTGluZTogSmF2YUxpbmVQcm9maWxlO1xuICBwcml2YXRlIHJlYWRvbmx5IHJvb3RQYWNrYWdpbmc/OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgZ3JvdXBJZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHNhbXBsZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBtYXZlbk1vZHVsZXM6IE1hdmVuTW9kdWxlW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBKYXZhTWF2ZW5Qcm9qZWN0T3B0aW9ucykge1xuICAgIHN1cGVyKHtcbiAgICAgIC8vIFNwcmVhZCBmaXJzdCwgb3ZlcnJpZGVzIGFmdGVyOiBmb3J3YXJkaW5nIHRoZSBjYWxsZXIncyBvcHRpb25zIGlzXG4gICAgICAvLyB3aGF0IGxldHMgYHByb2plbiBuZXcgLS1mcm9tIEB4cGVydHNzL3Byb2plbi10eXBlcyBqYXZhX21hdmVuYCB3b3JrXG4gICAgICAvLyAtIHByb2plbiBzbXVnZ2xlcyBpdHMgYm9vdHN0cmFwIG1hcmtlciAoYF9fbmV3X19gKSB0aHJvdWdoIHRoZVxuICAgICAgLy8gb3B0aW9ucyBvYmplY3QsIGFuZCBpdCBpcyB0aGF0IG1hcmtlciB3aGljaCBtYWtlcyB0aGVcbiAgICAgIC8vIGBQcm9qZW5yY0ZpbGVgIGNvbXBvbmVudCB3cml0ZSB0aGUgaW5pdGlhbCBgLnByb2plbnJjLnRzYC4gRHJvcCBpdFxuICAgICAgLy8gYW5kIGBwcm9qZW4gbmV3YCBzY2FmZm9sZHMgYSByZXBvIHdpdGggbm8gcHJvamVucmMgYXQgYWxsLlxuICAgICAgLi4uc3RyaW5naWZ5UHJvamVuTmV3QXJncyhvcHRpb25zKSxcbiAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcbiAgICAgIC8vIFBSIHRpdGxlcyBhcmUgbm90IGdhdGVkOiBgZmVhdDpgL2BmaXg6YCBtYXR0ZXIgb25seSBiZWNhdXNlIHRoZXkgZHJpdmVcbiAgICAgIC8vIHRoZSByZWxlYXNlIHdvcmtmbG93ICh2aWEgYHJlbGVhc2FibGVDb21taXRzYCksIG5vdCBQUiBjaGVja3MuIFRoZVxuICAgICAgLy8gY29udmVudGlvbmFsLWNvbW1pdCBQUi10aXRsZSBsaW50IGlzIGFkZGVkIGJ5IHRoZSBgR2l0SHViYCBjb21wb25lbnRcbiAgICAgIC8vIHVubGVzcyBgZ2l0aHViT3B0aW9ucy5wdWxsUmVxdWVzdExpbnRgIGlzIGBmYWxzZWAgKGl0IGRlZmF1bHRzIHRydWUpLlxuICAgICAgZ2l0aHViT3B0aW9uczogeyBwdWxsUmVxdWVzdExpbnQ6IGZhbHNlIH0sXG4gICAgICBwcm9qZW5DcmVkZW50aWFsczogZ2l0aHViLkdpdGh1YkNyZWRlbnRpYWxzLmZyb21QZXJzb25hbEFjY2Vzc1Rva2VuKHtcbiAgICAgICAgc2VjcmV0OiBvcHRpb25zLmdoZVRva2VuU2VjcmV0ID8/IERFRkFVTFRfR0hFX1RPS0VOX1NFQ1JFVCxcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCB2ZXJzaW9uIG9mIE9iamVjdC52YWx1ZXMob3B0aW9ucy5wbHVnaW5WZXJzaW9ucyA/PyB7fSkpIHtcbiAgICAgIGFzc2VydEV4YWN0VmVyc2lvbih2ZXJzaW9uLCAncGx1Z2luVmVyc2lvbnMnKTtcbiAgICB9XG4gICAgdGhpcy5qYXZhTGluZSA9IHJlc29sdmVKYXZhTGluZShvcHRpb25zLmphdmFWZXJzaW9uLCBvcHRpb25zLnBsdWdpblZlcnNpb25zKTtcbiAgICB0aGlzLmphdmFWZXJzaW9uID0gdGhpcy5qYXZhTGluZS5saW5lO1xuICAgIHRoaXMucm9vdFBhY2thZ2luZyA9IG9wdGlvbnMucGFja2FnaW5nO1xuICAgIHRoaXMuZ3JvdXBJZCA9IG9wdGlvbnMuZ3JvdXBJZDtcbiAgICB0aGlzLnNhbXBsZSA9IG9wdGlvbnMuc2FtcGxlID8/IGZhbHNlO1xuXG4gICAgLy8gYC5wcm9qZW5yYy50c2AgKyBgbnB4IHByb2plbmAsIHNhbWUgYXMgZXZlcnkgb3RoZXIgdHlwZSBoZXJlLiBUaGVcbiAgICAvLyBNYXZlbiByZXBvIG5lZWRzIG5vIFR5cGVTY3JpcHQgdG9vbGNoYWluIG9mIGl0cyBvd24gLSB0aGUgcnVubmVyIGlzXG4gICAgLy8gZmV0Y2hlZCAocGlubmVkKSBieSBucHggYXQgc3ludGggdGltZS5cbiAgICBhdHRhY2hUeXBlU2NyaXB0UHJvamVucmModGhpcyk7XG5cbiAgICAvLyBUaGUgcHJvamVuIHRvb2xjaGFpbiBgbnB4IHByb2plbmAgcnVucywgcGlubmVkIGV4YWN0bHkgc28gZXZlcnlcbiAgICAvLyBtYWNoaW5lIGFuZCBDSSByZXNvbHZlIHRoZSBzYW1lIGdlbmVyYXRvci4gT3duZXItd3JpdGFibGUgb24gZGlzayBzb1xuICAgIC8vIHRoZSBkb2N1bWVudGVkIHVwZGF0ZSBmbG93IChgbnBtIGkgLUQgLUUgQHhwZXJ0c3MvcHJvamVuLXR5cGVzQDx2PmApXG4gICAgLy8gY2FuIHJld3JpdGUgaXQ7IGhhbmQtZWRpdHMgYXJlIHN0aWxsIGNhdWdodCBieSB0aGUgZHJpZnQgY2hlY2suXG4gICAgbmV3IEpzb25GaWxlKHRoaXMsICdwYWNrYWdlLmpzb24nLCB7XG4gICAgICBvYmo6IHtcbiAgICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgICB2ZXJzaW9uOiAnMC4wLjAnLFxuICAgICAgICBwcml2YXRlOiB0cnVlLFxuICAgICAgICBkZXZEZXBlbmRlbmNpZXM6IHtcbiAgICAgICAgICAncHJvamVuJzogUFJPSkVOX1ZFUlNJT04sXG4gICAgICAgICAgJ0B4cGVydHNzL3Byb2plbi10eXBlcyc6IFBST0pFTl9UWVBFU19WRVJTSU9OLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHJlYWRvbmx5OiBmYWxzZSxcbiAgICB9KTtcblxuICAgIC8vIEpldEJyYWlucyBJREUgc3RhdGUgKC5pZGVhLykgaXMgbmV2ZXIgdHJhY2tlZCBpbiBnZW5lcmF0ZWQgcmVwb3MsIGFuZFxuICAgIC8vIG5laXRoZXIgaXMgL3NwZWMvIChsb2NhbCBwbGFucyBhbmQgc3BlY3M7IHRoZSBwYXR0ZXJuIGNvdmVycyBldmVyeVxuICAgIC8vIHN1YmRpcmVjdG9yeSkuXG4gICAgdGhpcy5hZGRHaXRJZ25vcmUoJy8uaWRlYS8qJyk7XG4gICAgdGhpcy5hZGRHaXRJZ25vcmUoJy9zcGVjLycpO1xuICAgIHRoaXMuYWRkR2l0SWdub3JlKCd0YXJnZXQvJyk7XG4gICAgdGhpcy5hZGRHaXRJZ25vcmUoJy5jbGFzc3BhdGgnKTtcbiAgICB0aGlzLmFkZEdpdElnbm9yZSgnLnByb2plY3QnKTtcbiAgICB0aGlzLmFkZEdpdElnbm9yZSgnLnNldHRpbmdzJyk7XG5cbiAgICBpZiAob3B0aW9ucy5saWNlbnNlZCA/PyB0cnVlKSB7XG4gICAgICBuZXcgTGljZW5zZSh0aGlzLCB7XG4gICAgICAgIHNwZHg6IG9wdGlvbnMubGljZW5zZSA/PyAnTUlUJyxcbiAgICAgICAgY29weXJpZ2h0T3duZXI6IG9wdGlvbnMuY29weXJpZ2h0T3duZXIgPz8gJ3hwZXJ0c3MnLFxuICAgICAgICBjb3B5cmlnaHRQZXJpb2Q6IG9wdGlvbnMuY29weXJpZ2h0UGVyaW9kLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmVkaXRvcmNvbmZpZyA/PyB0cnVlKSB7XG4gICAgICBhZGRFZGl0b3JDb25maWcodGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5wb20gPSBuZXcgTWF2ZW5Qb20odGhpcywge1xuICAgICAgZ3JvdXBJZDogb3B0aW9ucy5ncm91cElkLFxuICAgICAgYXJ0aWZhY3RJZDogb3B0aW9ucy5hcnRpZmFjdElkLFxuICAgICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uID8/ICcwLjEuMCcsXG4gICAgICBwYWNrYWdpbmc6IHRoaXMucm9vdFBhY2thZ2luZyA/PyAnamFyJyxcbiAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBvcHRpb25zLmRlc2NyaXB0aW9uLFxuICAgICAgdXJsOiBvcHRpb25zLnVybCxcbiAgICB9KTtcbiAgICB0aGlzLmNvbmZpZ3VyZUJ1aWxkKG9wdGlvbnMpO1xuXG4gICAgLy8gT25lIE1hdmVuIHJ1biBwZXIgYnVpbGQ6IGB2ZXJpZnlgIHJ1bnMgZXZlcnkgZWFybGllciBwaGFzZSAoY29tcGlsZSxcbiAgICAvLyB1bml0IHRlc3RzLCBwYWNrYWdlKSBwbHVzIGludGVncmF0aW9uIHRlc3RzLiBOb3RoaW5nIGRlcGxveXMuXG4gICAgdGhpcy50ZXN0VGFzay5leGVjKCdtdm4gLUIgdmVyaWZ5Jyk7XG5cbiAgICBjb25zdCBnaCA9IHRoaXMuZ2l0aHViO1xuICAgIGlmICghZ2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSmF2YU1hdmVuUHJvamVjdCByZXF1aXJlcyBHaXRIdWIgaW50ZWdyYXRpb24nKTtcbiAgICB9XG4gICAgYXBwbHlJbnRlcm5hbEFjdGlvbk92ZXJyaWRlcyhnaCk7XG5cbiAgICBuZXcgUHJvamVuRHJpZnRDaGVja1dvcmtmbG93KHRoaXMsIHtcbiAgICAgIGdoZVRva2VuU2VjcmV0OiBvcHRpb25zLmdoZVRva2VuU2VjcmV0ID8/IERFRkFVTFRfR0hFX1RPS0VOX1NFQ1JFVCxcbiAgICB9KTtcbiAgICBuZXcgV29ya2Zsb3dDaGFuZ2VOb3RpY2VXb3JrZmxvdyh0aGlzKTtcblxuICAgIHRoaXMuY2lTZXR1cFN0ZXBzID0gW1xuICAgICAgU0VUVVBfTk9ERV9TVEVQLFxuICAgICAgTlBNX0NJX1NURVAsXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdTZXR1cCBKYXZhJyxcbiAgICAgICAgdXNlczogJ2FjdGlvbnMvc2V0dXAtamF2YUB2NicsXG4gICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAnZGlzdHJpYnV0aW9uJzogb3B0aW9ucy5qYXZhRGlzdHJpYnV0aW9uID8/ICd0ZW11cmluJyxcbiAgICAgICAgICAnamF2YS12ZXJzaW9uJzogdGhpcy5qYXZhTGluZS5zZXR1cEphdmFWZXJzaW9uLFxuICAgICAgICAgICdjYWNoZSc6ICdtYXZlbicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF07XG5cbiAgICBjb25zdCBwb3N0QnVpbGRTdGVwczogZ2l0aHViLndvcmtmbG93cy5Kb2JTdGVwW10gPSBbXTtcbiAgICBpZiAob3B0aW9ucy5zb25hclByb2plY3RLZXkpIHtcbiAgICAgIHBvc3RCdWlsZFN0ZXBzLnB1c2goe1xuICAgICAgICBuYW1lOiAnU29uYXJRdWJlIHNjYW4nLFxuICAgICAgICBydW46IGBtdm4gLUIgc29uYXI6c29uYXIgLURzb25hci5wcm9qZWN0S2V5PSR7b3B0aW9ucy5zb25hclByb2plY3RLZXl9YCxcbiAgICAgICAgZW52OiB7IFNPTkFSX1RPS0VOOiAnJHt7IHNlY3JldHMuU09OQVJfVE9LRU4gfX0nIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmJ1aWxkVmVyaWZ5V29ya2Zsb3cgPSBuZXcgZ2l0aHViLlRhc2tXb3JrZmxvdyhnaCwge1xuICAgICAgbmFtZTogJ2J1aWxkJyxcbiAgICAgIGpvYklkOiAnYnVpbGQnLFxuICAgICAgdGFzazogdGhpcy5idWlsZFRhc2ssXG4gICAgICB0cmlnZ2VyczogeyBwdWxsUmVxdWVzdDoge30sIHdvcmtmbG93RGlzcGF0Y2g6IHt9IH0sXG4gICAgICBwZXJtaXNzaW9uczogeyBjb250ZW50czogZ2l0aHViLndvcmtmbG93cy5Kb2JQZXJtaXNzaW9uLlJFQUQgfSxcbiAgICAgIHByZUJ1aWxkU3RlcHM6IHRoaXMuY2lTZXR1cFN0ZXBzLFxuICAgICAgcG9zdEJ1aWxkU3RlcHMsXG4gICAgfSk7XG4gICAgbm90ZVdvcmtmbG93UHVycG9zZShcbiAgICAgIHRoaXMuYnVpbGRWZXJpZnlXb3JrZmxvdy5maWxlLFxuICAgICAgJ0J1aWxkIGFuZCB0ZXN0IHRoZSBNYXZlbiBwcm9qZWN0IG9uIHB1bGwgcmVxdWVzdHMsIHdpdGggYW4gb3B0aW9uYWwgU29uYXJRdWJlIHNjYW4uJyxcbiAgICApO1xuXG4gICAgY29uc3QgdmVyc2lvbnNQbHVnaW4gPSBgb3JnLmNvZGVoYXVzLm1vam86dmVyc2lvbnMtbWF2ZW4tcGx1Z2luOiR7dGhpcy5waW5uZWRWZXJzaW9uKFZFUlNJT05TX01BVkVOX1BMVUdJTil9YDtcbiAgICB0aGlzLnVwZ3JhZGVUYXNrID0gdGhpcy5hZGRUYXNrKCd1cGdyYWRlJywge1xuICAgICAgZXhlYzogYG12biAtQiAke3ZlcnNpb25zUGx1Z2lufTpkaXNwbGF5LWRlcGVuZGVuY3ktdXBkYXRlcyAke3ZlcnNpb25zUGx1Z2lufTpkaXNwbGF5LXBsdWdpbi11cGRhdGVzYCxcbiAgICB9KTtcbiAgICBpZiAob3B0aW9ucy51cGdyYWRlV29ya2Zsb3cgPz8gdHJ1ZSkge1xuICAgICAgbmV3IE1hdmVuVXBncmFkZVJlcG9ydCh0aGlzLCB7XG4gICAgICAgIHRhc2s6IHRoaXMudXBncmFkZVRhc2ssXG4gICAgICAgIHNldHVwU3RlcHM6IHRoaXMuY2lTZXR1cFN0ZXBzLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFRoZSBtb2R1bGVzIGFkZGVkIHdpdGggYGFkZE1vZHVsZSgpYCwgaW4gb3JkZXIuICovXG4gIHB1YmxpYyBnZXQgbW9kdWxlcygpOiBNYXZlbk1vZHVsZVtdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMubWF2ZW5Nb2R1bGVzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgTWF2ZW4gbW9kdWxlIGluIGBkaXJgIChyZWxhdGl2ZSB0byB0aGUgcmVwbyByb290OyBtYXkgYmUgbmVzdGVkLFxuICAgKiBlLmcuIGB0b29scy9zdHViLW1vZGVsYCkgYW5kIHR1cm5zIHRoZSByb290IHBvbSBpbnRvIHRoZSByZWFjdG9yIHBhcmVudFxuICAgKiAoYHBhY2thZ2luZz1wb21gLCBgPG1vZHVsZXM+YCBpbiB0aGUgb3JkZXIgYWRkZWQpLiBUaGUgcGFyZW50IG1hbmFnZXNcbiAgICogZXZlcnkgbW9kdWxlIGF0IGAke3Byb2plY3QudmVyc2lvbn1gLCBzbyBtb2R1bGVzIGRlcGVuZCBvbiBlYWNoIG90aGVyXG4gICAqIHdpdGggYGFkZE1vZHVsZURlcGVuZGVuY3koKWAsIHZlcnNpb25sZXNzLlxuICAgKi9cbiAgcHVibGljIGFkZE1vZHVsZShvcHRpb25zOiBNYXZlbk1vZHVsZU9wdGlvbnMpOiBNYXZlbk1vZHVsZSB7XG4gICAgaWYgKHRoaXMucm9vdFBhY2thZ2luZyAhPT0gdW5kZWZpbmVkICYmIHRoaXMucm9vdFBhY2thZ2luZyAhPT0gJ3BvbScpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEEgbXVsdGktbW9kdWxlIHByb2plY3QncyByb290IHBvbSBpcyBwYWNrYWdlZCBhcyBcInBvbVwiOyByZW1vdmUgcGFja2FnaW5nOiBcIiR7dGhpcy5yb290UGFja2FnaW5nfVwiLmAsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBkaXIgPSBub3JtYWxpemVNb2R1bGVEaXIob3B0aW9ucy5kaXIpO1xuICAgIGZvciAoY29uc3QgbSBvZiB0aGlzLm1hdmVuTW9kdWxlcykge1xuICAgICAgaWYgKG0uYXJ0aWZhY3RJZCA9PT0gb3B0aW9ucy5hcnRpZmFjdElkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlIG1vZHVsZSBhcnRpZmFjdElkIFwiJHtvcHRpb25zLmFydGlmYWN0SWR9XCIgKGRpcnMgXCIke20uZGlyfVwiIGFuZCBcIiR7ZGlyfVwiKS5gKTtcbiAgICAgIH1cbiAgICAgIGlmIChtLmRpciA9PT0gZGlyIHx8IGRpci5zdGFydHNXaXRoKGAke20uZGlyfS9gKSB8fCBtLmRpci5zdGFydHNXaXRoKGAke2Rpcn0vYCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNb2R1bGUgZGlyIFwiJHtkaXJ9XCIgb3ZlcmxhcHMgbW9kdWxlIGRpciBcIiR7bS5kaXJ9XCI6IG1vZHVsZSBkaXJzIG11c3QgYmUgZGlzdGluY3QgYW5kIG5vdCBuZXN0ZWQuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbW9kdWxlID0gbmV3IE1hdmVuTW9kdWxlKHRoaXMsIHRoaXMucG9tLCB7IC4uLm9wdGlvbnMsIGRpciB9KTtcbiAgICB0aGlzLm1hdmVuTW9kdWxlcy5wdXNoKG1vZHVsZSk7XG4gICAgdGhpcy5wb20ucGFja2FnaW5nID0gJ3BvbSc7XG4gICAgdGhpcy5wb20ubWFuYWdlUGx1Z2luVmVyc2lvbnMgPSB0cnVlO1xuICAgIHRoaXMucG9tLmFkZE1vZHVsZShkaXIpO1xuICAgIHRoaXMucG9tLmFkZE1hbmFnZWREZXBlbmRlbmN5KGAke3RoaXMuZ3JvdXBJZH0vJHtvcHRpb25zLmFydGlmYWN0SWR9QFxcJHtwcm9qZWN0LnZlcnNpb259YCk7XG4gICAgcmV0dXJuIG1vZHVsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnRzIGEgQk9NIGludG8gdGhlIHJvb3QgYDxkZXBlbmRlbmN5TWFuYWdlbWVudD5gIChgdHlwZT1wb21gLFxuICAgKiBgc2NvcGU9aW1wb3J0YCkuXG4gICAqXG4gICAqIEBwYXJhbSBzcGVjIGBncm91cElkL2FydGlmYWN0SWRAdmVyc2lvbmBcbiAgICovXG4gIHB1YmxpYyBhZGRCb20oc3BlYzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wb20uYWRkQm9tKHNwZWMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBpbnMgYSB2ZXJzaW9uIGluIHRoZSByb290IGA8ZGVwZW5kZW5jeU1hbmFnZW1lbnQ+YCB3aXRob3V0IGFkZGluZyB0aGVcbiAgICogZGVwZW5kZW5jeSwgc28gbW9kdWxlcyAob3IgdGhlIHJvb3QpIGNhbiB1c2UgaXQgdmVyc2lvbmxlc3MuXG4gICAqXG4gICAqIEBwYXJhbSBzcGVjIGBncm91cElkL2FydGlmYWN0SWRAdmVyc2lvbmBcbiAgICovXG4gIHB1YmxpYyBhZGRNYW5hZ2VkRGVwZW5kZW5jeShzcGVjOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnBvbS5hZGRNYW5hZ2VkRGVwZW5kZW5jeShzcGVjKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgY29tcGlsZS1zY29wZSBkZXBlbmRlbmN5IHRvIHRoZSByb290IHBvbS4gSW4gYSBtdWx0aS1tb2R1bGVcbiAgICogcHJvamVjdCBldmVyeSBtb2R1bGUgaW5oZXJpdHMgaXQ7IHVzZSBgTWF2ZW5Nb2R1bGUuYWRkRGVwZW5kZW5jeWAgZm9yXG4gICAqIG9uZSBtb2R1bGUuXG4gICAqXG4gICAqIEBwYXJhbSBzcGVjIGBncm91cElkL2FydGlmYWN0SWRbQHZlcnNpb25dYCAtIGV4YWN0IHZlcnNpb24sIG9yIG5vbmUgd2hlblxuICAgKiBhIEJPTSBtYW5hZ2VzIGl0XG4gICAqL1xuICBwdWJsaWMgYWRkRGVwZW5kZW5jeShzcGVjOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnBvbS5hZGREZXBlbmRlbmN5KHNwZWMpO1xuICB9XG5cbiAgLyoqIEFkZHMgYSB0ZXN0LXNjb3BlIGRlcGVuZGVuY3kgdG8gdGhlIHJvb3QgcG9tIChpbmhlcml0ZWQgYnkgZXZlcnkgbW9kdWxlKS4gKi9cbiAgcHVibGljIGFkZFRlc3REZXBlbmRlbmN5KHNwZWM6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucG9tLmFkZFRlc3REZXBlbmRlbmN5KHNwZWMpO1xuICB9XG5cbiAgLyoqIEFkZHMgYSBidWlsZCBwbHVnaW4gdG8gdGhlIHJvb3QgcG9tIChpbmhlcml0ZWQgYnkgZXZlcnkgbW9kdWxlKS4gKi9cbiAgcHVibGljIGFkZFBsdWdpbihzcGVjOiBzdHJpbmcsIG9wdGlvbnM6IGphdmEuUGx1Z2luT3B0aW9ucyA9IHt9KTogdm9pZCB7XG4gICAgdGhpcy5wb20uYWRkUGx1Z2luKHNwZWMsIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIHByZVN5bnRoZXNpemUoKTogdm9pZCB7XG4gICAgc3VwZXIucHJlU3ludGhlc2l6ZSgpO1xuICAgIGlmICh0aGlzLnNhbXBsZSAmJiB0aGlzLm1hdmVuTW9kdWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuYWRkU2FtcGxlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBleGFjdCB2ZXJzaW9uIHRoaXMgcHJvamVjdCB1c2VzIGZvciBhIGBncm91cElkL2FydGlmYWN0SWRgIGl0IHBpbnNcbiAgICogYnkgZGVmYXVsdDogdGhlIGBwbHVnaW5WZXJzaW9uc2Agb3ZlcnJpZGUgaWYgc2V0LCBvdGhlcndpc2UgdGhlXG4gICAqIGRlZmF1bHQgZm9yIGBqYXZhVmVyc2lvbmAuXG4gICAqL1xuICBwdWJsaWMgcGlubmVkVmVyc2lvbihjb29yZGluYXRlczogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5qYXZhTGluZS52ZXJzaW9uc1tjb29yZGluYXRlc107XG4gICAgaWYgKCF2ZXJzaW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGRlZmF1bHQgdmVyc2lvbiBmb3IgJHtjb29yZGluYXRlc30uYCk7XG4gICAgfVxuICAgIHJldHVybiB2ZXJzaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBuZXdlc3QgU3ByaW5nIEJvb3QgbWFqb3IgdmVyc2lvbiBgamF2YVZlcnNpb25gIHN1cHBvcnRzLCBvclxuICAgKiB1bmRlZmluZWQgd2hlbiB0aGlzIHBhY2thZ2Uga25vd3Mgb2Ygbm8gY2FwLlxuICAgKi9cbiAgcHJvdGVjdGVkIG1heFNwcmluZ0Jvb3RNYWpvcigpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmphdmFMaW5lLm1heFNwcmluZ0Jvb3RNYWpvcjtcbiAgfVxuXG4gIHByaXZhdGUgY29uZmlndXJlQnVpbGQob3B0aW9uczogSmF2YU1hdmVuUHJvamVjdE9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLnBvbS5hZGRQcm9wZXJ0eSgncHJvamVjdC5idWlsZC5zb3VyY2VFbmNvZGluZycsICdVVEYtOCcpO1xuICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmphdmFMaW5lLmNvbXBpbGVyUHJvcGVydGllcykpIHtcbiAgICAgIHRoaXMucG9tLmFkZFByb3BlcnR5KG5hbWUsIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBKVW5pdCdzIHZlcnNpb24gY29tZXMgZnJvbSBpdHMgQk9NIChvciBmcm9tIGEgZnJhbWV3b3JrIEJPTSB0aGF0XG4gICAgLy8gbWFuYWdlcyBpdCAtIHNlZSBKYXZhU3ByaW5nQm9vdFByb2plY3QpLCBuZXZlciBmcm9tIGEgZGVwZW5kZW5jeS5cbiAgICB0aGlzLnBvbS5hZGRCb20oYCR7SlVOSVRfQk9NfUAke3RoaXMucGlubmVkVmVyc2lvbihKVU5JVF9CT00pfWApO1xuICAgIHRoaXMucG9tLmFkZFRlc3REZXBlbmRlbmN5KCdvcmcuanVuaXQuanVwaXRlci9qdW5pdC1qdXBpdGVyJyk7XG5cbiAgICB0aGlzLmFkZFBsdWdpbihgJHtNQVZFTl9DT01QSUxFUl9QTFVHSU59QCR7dGhpcy5waW5uZWRWZXJzaW9uKE1BVkVOX0NPTVBJTEVSX1BMVUdJTil9YCk7XG4gICAgdGhpcy5hZGRQbHVnaW4oYCR7TUFWRU5fU1VSRUZJUkVfUExVR0lOfUAke3RoaXMucGlubmVkVmVyc2lvbihNQVZFTl9TVVJFRklSRV9QTFVHSU4pfWApO1xuICAgIC8vIGZhaWxzYWZlIGhhcyBubyBkZWZhdWx0IGxpZmVjeWNsZSBiaW5kaW5nOyBiaW5kIGl0IHNvIGAqSVRgIHRlc3RzIHJ1blxuICAgIC8vIGluIGBtdm4gdmVyaWZ5YC5cbiAgICB0aGlzLmFkZFBsdWdpbihgJHtNQVZFTl9GQUlMU0FGRV9QTFVHSU59QCR7dGhpcy5waW5uZWRWZXJzaW9uKE1BVkVOX0ZBSUxTQUZFX1BMVUdJTil9YCwge1xuICAgICAgZXhlY3V0aW9uczogW3sgaWQ6ICdpbnRlZ3JhdGlvbi10ZXN0cycsIGdvYWxzOiBbJ2ludGVncmF0aW9uLXRlc3QnLCAndmVyaWZ5J10gfV0sXG4gICAgfSk7XG4gICAgdGhpcy5hZGRQbHVnaW4oYCR7TUFWRU5fSkFSX1BMVUdJTn1AJHt0aGlzLnBpbm5lZFZlcnNpb24oTUFWRU5fSkFSX1BMVUdJTil9YCwge1xuICAgICAgY29uZmlndXJhdGlvbjoge1xuICAgICAgICBhcmNoaXZlOiB7XG4gICAgICAgICAgbWFuaWZlc3Q6IHtcbiAgICAgICAgICAgIGFkZERlZmF1bHRJbXBsZW1lbnRhdGlvbkVudHJpZXM6IHRydWUsXG4gICAgICAgICAgICBhZGREZWZhdWx0U3BlY2lmaWNhdGlvbkVudHJpZXM6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBpZiAob3B0aW9ucy5lbmZvcmNlciA/PyB0cnVlKSB7XG4gICAgICBjb25zdCBtaW5NYXZlbiA9IG9wdGlvbnMubWluTWF2ZW5WZXJzaW9uID8/IERFRkFVTFRfTUlOX01BVkVOX1ZFUlNJT047XG4gICAgICBhc3NlcnRFeGFjdFZlcnNpb24obWluTWF2ZW4sICdtaW5NYXZlblZlcnNpb24nKTtcbiAgICAgIHRoaXMuYWRkUGx1Z2luKGAke01BVkVOX0VORk9SQ0VSX1BMVUdJTn1AJHt0aGlzLnBpbm5lZFZlcnNpb24oTUFWRU5fRU5GT1JDRVJfUExVR0lOKX1gLCB7XG4gICAgICAgIGV4ZWN1dGlvbnM6IFt7IGlkOiAnZW5mb3JjZS12ZXJzaW9ucycsIGdvYWxzOiBbJ2VuZm9yY2UnXSB9XSxcbiAgICAgICAgY29uZmlndXJhdGlvbjoge1xuICAgICAgICAgIHJ1bGVzOiB7XG4gICAgICAgICAgICByZXF1aXJlTWF2ZW5WZXJzaW9uOiB7IHZlcnNpb246IGBbJHttaW5NYXZlbn0sKWAgfSxcbiAgICAgICAgICAgIHJlcXVpcmVKYXZhVmVyc2lvbjogeyB2ZXJzaW9uOiB0aGlzLmphdmFMaW5lLmVuZm9yY2VySmF2YVJhbmdlIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkU2FtcGxlKCk6IHZvaWQge1xuICAgIGNvbnN0IHBrZyA9IHRoaXMuZ3JvdXBJZC5yZXBsYWNlKC9bXkEtWmEtejAtOV8uXS9nLCAnXycpO1xuICAgIGNvbnN0IHBhdGggPSBwa2cuc3BsaXQoJy4nKTtcbiAgICBuZXcgU2FtcGxlRGlyKHRoaXMsIHBvc2l4LmpvaW4oJ3NyYy9tYWluL2phdmEnLCAuLi5wYXRoKSwge1xuICAgICAgZmlsZXM6IHtcbiAgICAgICAgJ01haW4uamF2YSc6IFtcbiAgICAgICAgICBgcGFja2FnZSAke3BrZ307YCxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAncHVibGljIGNsYXNzIE1haW4geycsXG4gICAgICAgICAgJyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7JyxcbiAgICAgICAgICAnICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oXCJIZWxsbywgd29ybGQhXCIpOycsXG4gICAgICAgICAgJyAgICB9JyxcbiAgICAgICAgICAnfScsXG4gICAgICAgICAgJycsXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICB9LFxuICAgIH0pO1xuICAgIG5ldyBTYW1wbGVEaXIodGhpcywgcG9zaXguam9pbignc3JjL3Rlc3QvamF2YScsIC4uLnBhdGgpLCB7XG4gICAgICBmaWxlczoge1xuICAgICAgICAnTWFpblRlc3QuamF2YSc6IFtcbiAgICAgICAgICBgcGFja2FnZSAke3BrZ307YCxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5UZXN0OycsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJ2NsYXNzIE1haW5UZXN0IHsnLFxuICAgICAgICAgICcgICAgQFRlc3QnLFxuICAgICAgICAgICcgICAgdm9pZCBydW5zKCkgeycsXG4gICAgICAgICAgJyAgICAgICAgTWFpbi5tYWluKG5ldyBTdHJpbmdbMF0pOycsXG4gICAgICAgICAgJyAgICB9JyxcbiAgICAgICAgICAnfScsXG4gICAgICAgICAgJycsXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogYHByb2plbiBuZXcgLi4uIC0tamF2YS12ZXJzaW9uIDIxYCAob3IgYDEuOGAsIG9yIGAtLW1pbi1tYXZlbi12ZXJzaW9uIDMuOWApXG4gKiByZWFjaGVzIHRoZSBvcHRpb25zIGFzIGEgKm51bWJlcio6IHlhcmdzIHBhcnNlcyBudW1lcmljLWxvb2tpbmcgZmxhZ3MsIGFuZFxuICogcHJvamVuIHBhc3NlcyBzdHJpbmctdHlwZWQgb3B0aW9ucyB0aHJvdWdoIHVuY2hhbmdlZC4gVGhlIGluaXRpYWxcbiAqIGAucHJvamVucmMudHNgIGlzIHJlbmRlcmVkIGZyb20gdGhlIHNhbWUgYXJncywgc28gaXQgd291bGQgcmVhZFxuICogYGphdmFWZXJzaW9uOiAyMWAgYW5kIGZhaWwgdG8gdHlwZS1jaGVjay4gTm8gSmF2YSBvcHRpb24gaXMgbnVtYmVyLXR5cGVkLFxuICogc28gZXZlcnkgbnVtZXJpYyBhcmcgaXMgdHVybmVkIGJhY2sgaW50byB0aGUgc3RyaW5nIHRoZSB1c2VyIHR5cGVkLiBUaGlzXG4gKiBydW5zIGJlZm9yZSB0aGUgUHJvamVjdCBjb25zdHJ1Y3Rvciwgd2hpY2ggaXMgd2hlcmUgcHJvamVuIGNhcHR1cmVzIHRoZVxuICogYXJncyBpdCByZW5kZXJzLiBPcHRpb25zIGZyb20gYSBoYW5kLXdyaXR0ZW4gcHJvamVucmMgYXJlIG5ldmVyIG51bWJlcnNcbiAqICh0aGV5IHR5cGUtY2hlY2sgYXMgc3RyaW5ncykgYW5kIGFyZSBsZWZ0IGFsb25lLlxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnlQcm9qZW5OZXdBcmdzPFQgZXh0ZW5kcyBvYmplY3Q+KG9wdGlvbnM6IFQpOiBUIHtcbiAgY29uc3QgbWFya2VyID0gKG9wdGlvbnMgYXMgYW55KS5fX25ld19fO1xuICBpZiAoIW1hcmtlcj8uYXJncykge1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG4gIGZvciAoY29uc3QgdGFyZ2V0IG9mIFtvcHRpb25zIGFzIGFueSwgbWFya2VyLmFyZ3NdKSB7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRhcmdldCkpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHRhcmdldFtuYW1lXSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBvcHRpb25zO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVNb2R1bGVEaXIoZGlyOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB1bml4ID0gZGlyLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgaWYgKHVuaXguc3RhcnRzV2l0aCgnLycpIHx8IC9eW0EtWmEtel06Ly50ZXN0KHVuaXgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNb2R1bGUgZGlyIFwiJHtkaXJ9XCIgbXVzdCBiZSByZWxhdGl2ZSB0byB0aGUgcmVwbyByb290LmApO1xuICB9XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBwb3NpeC5ub3JtYWxpemUodW5peCkucmVwbGFjZSgvXFwvKyQvLCAnJyk7XG4gIGlmIChub3JtYWxpemVkID09PSAnLicgfHwgbm9ybWFsaXplZCA9PT0gJycgfHwgbm9ybWFsaXplZC5zcGxpdCgnLycpLmluY2x1ZGVzKCcuLicpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNb2R1bGUgZGlyIFwiJHtkaXJ9XCIgbXVzdCBiZSBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgcmVwbyByb290LmApO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuIl19
|
|
@@ -17,7 +17,7 @@ const java_spring_boot_project_1 = require("./java-spring-boot-project");
|
|
|
17
17
|
* repo use `JavaSpringBootProject`.
|
|
18
18
|
*/
|
|
19
19
|
class JavaServiceProject extends java_spring_boot_project_1.JavaSpringBootProject {
|
|
20
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.JavaServiceProject", version: "0.0.
|
|
20
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.JavaServiceProject", version: "0.0.17" };
|
|
21
21
|
constructor(options) {
|
|
22
22
|
super(options);
|
|
23
23
|
this.addDependency('org.springframework.boot/spring-boot-starter-web');
|
|
@@ -22,14 +22,14 @@ const REPACKAGE = { executions: [{ id: 'repackage', goals: ['repackage'] }] };
|
|
|
22
22
|
* and a CDK deploy hook.
|
|
23
23
|
*/
|
|
24
24
|
class JavaSpringBootProject extends java_maven_base_1.JavaMavenProject {
|
|
25
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.JavaSpringBootProject", version: "0.0.
|
|
25
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.JavaSpringBootProject", version: "0.0.17" };
|
|
26
26
|
/** The Spring Boot version (BOM and Maven plugin). */
|
|
27
27
|
springBootVersion;
|
|
28
28
|
constructor(options) {
|
|
29
29
|
super(options);
|
|
30
30
|
const version = options.springBootVersion ?? this.pinnedVersion(java_versions_1.SPRING_BOOT_BOM);
|
|
31
31
|
(0, maven_pom_1.assertExactVersion)(version, 'springBootVersion');
|
|
32
|
-
const major = parseInt(version.split('.')[0], 10);
|
|
32
|
+
const major = Number.parseInt(version.split('.')[0], 10);
|
|
33
33
|
const maxMajor = this.maxSpringBootMajor();
|
|
34
34
|
if (maxMajor !== undefined && major > maxMajor) {
|
|
35
35
|
throw new Error(`Spring Boot ${version} does not run on javaVersion ${this.javaVersion} (the newest Spring Boot line for it is ${maxMajor}.x). Use a ${maxMajor}.x springBootVersion, or a newer javaVersion.`);
|
|
@@ -65,4 +65,4 @@ class JavaSpringBootProject extends java_maven_base_1.JavaMavenProject {
|
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
67
|
exports.JavaSpringBootProject = JavaSpringBootProject;
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YS1zcHJpbmctYm9vdC1wcm9qZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2phdmEvamF2YS1zcHJpbmctYm9vdC1wcm9qZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSx1REFBcUQ7QUFDckQsbURBS3lCO0FBRXpCLGlEQUF1RDtBQUd2RCxNQUFNLFNBQVMsR0FBRyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUU5RTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQWEscUJBQXNCLFNBQVEsa0NBQWdCOztJQUN6RCxzREFBc0Q7SUFDdEMsaUJBQWlCLENBQVM7SUFFMUMsWUFBWSxPQUFxQztRQUMvQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFZixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQywrQkFBZSxDQUFDLENBQUM7UUFDakYsSUFBQSw4QkFBa0IsRUFBQyxPQUFPLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUNqRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDekQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDM0MsSUFBSSxRQUFRLEtBQUssU0FBUyxJQUFJLEtBQUssR0FBRyxRQUFRLEVBQUUsQ0FBQztZQUMvQyxNQUFNLElBQUksS0FBSyxDQUNiLGVBQWUsT0FBTyxnQ0FBZ0MsSUFBSSxDQUFDLFdBQVcsMkNBQTJDLFFBQVEsY0FBYyxRQUFRLCtDQUErQyxDQUMvTCxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUM7UUFFakMsb0VBQW9FO1FBQ3BFLG1CQUFtQjtRQUNuQixJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyx5QkFBUyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRywrQkFBZSxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLHdDQUF3QixJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDcEUsc0VBQXNFO1FBQ3RFLHVFQUF1RTtRQUN2RSx3QkFBd0I7UUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxxQ0FBcUIsRUFBRTtZQUNwQyxhQUFhLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxrQ0FBa0MsRUFBRTtTQUN4RSxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLG1CQUFtQixDQUFDLE9BQTJCO1FBQ3BELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkMsTUFBTSxDQUFDLFNBQVMsQ0FBQyx3Q0FBd0IsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN0RCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRU0sYUFBYTtRQUNsQixLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdEIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyx3Q0FBd0IsQ0FBQyxFQUFFLENBQUM7WUFDL0UsSUFBSSxDQUFDLFNBQVMsQ0FBQyx3Q0FBd0IsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN0RCxDQUFDO0lBQ0gsQ0FBQzs7QUEvQ0gsc0RBZ0RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSmF2YU1hdmVuUHJvamVjdCB9IGZyb20gJy4vamF2YS1tYXZlbi1iYXNlJztcbmltcG9ydCB7XG4gIEpVTklUX0JPTSxcbiAgTUFWRU5fRkFJTFNBRkVfUExVR0lOLFxuICBTUFJJTkdfQk9PVF9CT00sXG4gIFNQUklOR19CT09UX01BVkVOX1BMVUdJTixcbn0gZnJvbSAnLi9qYXZhLXZlcnNpb25zJztcbmltcG9ydCB7IE1hdmVuTW9kdWxlIH0gZnJvbSAnLi9tYXZlbi9tYXZlbi1tb2R1bGUnO1xuaW1wb3J0IHsgYXNzZXJ0RXhhY3RWZXJzaW9uIH0gZnJvbSAnLi9tYXZlbi9tYXZlbi1wb20nO1xuaW1wb3J0IHsgSmF2YVNwcmluZ0Jvb3RQcm9qZWN0T3B0aW9ucywgTWF2ZW5Nb2R1bGVPcHRpb25zIH0gZnJvbSAnLi9vcHRpb25zJztcblxuY29uc3QgUkVQQUNLQUdFID0geyBleGVjdXRpb25zOiBbeyBpZDogJ3JlcGFja2FnZScsIGdvYWxzOiBbJ3JlcGFja2FnZSddIH1dIH07XG5cbi8qKlxuICogU3ByaW5nIEJvb3Qgb24gTWF2ZW4sIHNpbmdsZS0gb3IgbXVsdGktbW9kdWxlLCB3aXRoIG5vIERvY2tlciwgRmx5d2F5IG9yXG4gKiBDREsgLSBgSmF2YU1hdmVuUHJvamVjdGAgcGx1cyBTcHJpbmcgQm9vdCBkZXBlbmRlbmN5IG1hbmFnZW1lbnQuXG4gKlxuICogLSBgc3ByaW5nLWJvb3QtZGVwZW5kZW5jaWVzYCBpcyBpbXBvcnRlZCBhcyB0aGUgZmlyc3QgQk9NLCBzbyBzdGFydGVycyBhbmRcbiAqICAgdGhlIGxpYnJhcmllcyBCb290IG1hbmFnZXMgKEpVbml0IGluY2x1ZGVkKSBhcmUgYWRkZWQgdmVyc2lvbmxlc3MuXG4gKiAtIGBzcHJpbmctYm9vdC1tYXZlbi1wbHVnaW5gIGlzIHZlcnNpb25lZCBpbiBgPHBsdWdpbk1hbmFnZW1lbnQ+YC4gQVxuICogICBzaW5nbGUtbW9kdWxlIHByb2plY3QgcmVwYWNrYWdlcyBpdHMgcm9vdCBqYXIgaW50byBhbiBleGVjdXRhYmxlIG9uZS5cbiAqICAgSW4gYSBtdWx0aS1tb2R1bGUgcHJvamVjdCBvbmx5IG1vZHVsZXMgYWRkZWQgd2l0aFxuICogICBgYWRkU3ByaW5nQm9vdE1vZHVsZSgpYCBhcmUgcmVwYWNrYWdlZDsgYGFkZE1vZHVsZSgpYCBtb2R1bGVzIHN0YXkgcGxhaW5cbiAqICAgamFycyAoc2hhcmVkIGxpYnJhcmllcywgY2xpZW50cywgLi4uKS5cbiAqXG4gKiBgSmF2YVNlcnZpY2VQcm9qZWN0YCBidWlsZHMgb24gdGhpcyBhbmQgYWRkcyBEb2NrZXIgcHVibGlzaGluZywgRmx5d2F5LFxuICogYW5kIGEgQ0RLIGRlcGxveSBob29rLlxuICovXG5leHBvcnQgY2xhc3MgSmF2YVNwcmluZ0Jvb3RQcm9qZWN0IGV4dGVuZHMgSmF2YU1hdmVuUHJvamVjdCB7XG4gIC8qKiBUaGUgU3ByaW5nIEJvb3QgdmVyc2lvbiAoQk9NIGFuZCBNYXZlbiBwbHVnaW4pLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3ByaW5nQm9vdFZlcnNpb246IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBKYXZhU3ByaW5nQm9vdFByb2plY3RPcHRpb25zKSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG5cbiAgICBjb25zdCB2ZXJzaW9uID0gb3B0aW9ucy5zcHJpbmdCb290VmVyc2lvbiA/PyB0aGlzLnBpbm5lZFZlcnNpb24oU1BSSU5HX0JPT1RfQk9NKTtcbiAgICBhc3NlcnRFeGFjdFZlcnNpb24odmVyc2lvbiwgJ3NwcmluZ0Jvb3RWZXJzaW9uJyk7XG4gICAgY29uc3QgbWFqb3IgPSBOdW1iZXIucGFyc2VJbnQodmVyc2lvbi5zcGxpdCgnLicpWzBdLCAxMCk7XG4gICAgY29uc3QgbWF4TWFqb3IgPSB0aGlzLm1heFNwcmluZ0Jvb3RNYWpvcigpO1xuICAgIGlmIChtYXhNYWpvciAhPT0gdW5kZWZpbmVkICYmIG1ham9yID4gbWF4TWFqb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFNwcmluZyBCb290ICR7dmVyc2lvbn0gZG9lcyBub3QgcnVuIG9uIGphdmFWZXJzaW9uICR7dGhpcy5qYXZhVmVyc2lvbn0gKHRoZSBuZXdlc3QgU3ByaW5nIEJvb3QgbGluZSBmb3IgaXQgaXMgJHttYXhNYWpvcn0ueCkuIFVzZSBhICR7bWF4TWFqb3J9Lnggc3ByaW5nQm9vdFZlcnNpb24sIG9yIGEgbmV3ZXIgamF2YVZlcnNpb24uYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuc3ByaW5nQm9vdFZlcnNpb24gPSB2ZXJzaW9uO1xuXG4gICAgLy8gQm9vdCdzIEJPTSBtYW5hZ2VzIEpVbml0LCBzbyB0aGUgYmFzZSB0eXBlJ3MganVuaXQtYm9tIHdvdWxkIG9ubHlcbiAgICAvLyBjb21wZXRlIHdpdGggaXQuXG4gICAgdGhpcy5wb20ucmVtb3ZlQm9tKEpVTklUX0JPTSk7XG4gICAgdGhpcy5wb20uYWRkQm9tKGAke1NQUklOR19CT09UX0JPTX1AJHt2ZXJzaW9ufWApO1xuICAgIHRoaXMucG9tLmFkZE1hbmFnZWRQbHVnaW4oYCR7U1BSSU5HX0JPT1RfTUFWRU5fUExVR0lOfUAke3ZlcnNpb259YCk7XG4gICAgLy8gQSByZXBhY2thZ2VkIGphciBubyBsb25nZXIgZXhwb3NlcyBpdHMgY2xhc3NlcyBhdCB0aGUgdG9wIGxldmVsLCBzb1xuICAgIC8vIGZhaWxzYWZlIHRlc3RzIGFnYWluc3QgdGhlIGNvbXBpbGVkIGNsYXNzZXMsIGFzIHNwcmluZy1ib290LXN0YXJ0ZXItXG4gICAgLy8gcGFyZW50IGNvbmZpZ3VyZXMgaXQuXG4gICAgdGhpcy5hZGRQbHVnaW4oTUFWRU5fRkFJTFNBRkVfUExVR0lOLCB7XG4gICAgICBjb25maWd1cmF0aW9uOiB7IGNsYXNzZXNEaXJlY3Rvcnk6ICcke3Byb2plY3QuYnVpbGQub3V0cHV0RGlyZWN0b3J5fScgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbW9kdWxlIHRoYXQgaXMgYSBTcHJpbmcgQm9vdCBhcHBsaWNhdGlvbjogbGlrZSBgYWRkTW9kdWxlKClgLCBwbHVzXG4gICAqIGBzcHJpbmctYm9vdC1tYXZlbi1wbHVnaW5gJ3MgYHJlcGFja2FnZWAsIHdoaWNoIHR1cm5zIHRoZSBtb2R1bGUncyBqYXJcbiAgICogaW50byBhbiBleGVjdXRhYmxlIG9uZS5cbiAgICovXG4gIHB1YmxpYyBhZGRTcHJpbmdCb290TW9kdWxlKG9wdGlvbnM6IE1hdmVuTW9kdWxlT3B0aW9ucyk6IE1hdmVuTW9kdWxlIHtcbiAgICBjb25zdCBtb2R1bGUgPSB0aGlzLmFkZE1vZHVsZShvcHRpb25zKTtcbiAgICBtb2R1bGUuYWRkUGx1Z2luKFNQUklOR19CT09UX01BVkVOX1BMVUdJTiwgUkVQQUNLQUdFKTtcbiAgICByZXR1cm4gbW9kdWxlO1xuICB9XG5cbiAgcHVibGljIHByZVN5bnRoZXNpemUoKTogdm9pZCB7XG4gICAgc3VwZXIucHJlU3ludGhlc2l6ZSgpO1xuICAgIGlmICh0aGlzLm1vZHVsZXMubGVuZ3RoID09PSAwICYmICF0aGlzLnBvbS5oYXNQbHVnaW4oU1BSSU5HX0JPT1RfTUFWRU5fUExVR0lOKSkge1xuICAgICAgdGhpcy5hZGRQbHVnaW4oU1BSSU5HX0JPT1RfTUFWRU5fUExVR0lOLCBSRVBBQ0tBR0UpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -84,7 +84,7 @@ const ALIASES = { 8: '1.8' };
|
|
|
84
84
|
/** The Java lines `javaVersion` accepts, in ascending order. */
|
|
85
85
|
function supportedJavaVersions() {
|
|
86
86
|
// Integer-like keys ('17') enumerate before '1.8', so sort explicitly.
|
|
87
|
-
return Object.keys(JAVA_LINES).sort((a, b) => parseFloat(a) - parseFloat(b));
|
|
87
|
+
return Object.keys(JAVA_LINES).sort((a, b) => Number.parseFloat(a) - Number.parseFloat(b));
|
|
88
88
|
}
|
|
89
89
|
/**
|
|
90
90
|
* Resolves a `javaVersion` option to its line profile, applying
|
|
@@ -103,4 +103,4 @@ function resolveJavaLine(javaVersion, versionOverrides = {}) {
|
|
|
103
103
|
versions: { ...profile.versions, ...versionOverrides },
|
|
104
104
|
};
|
|
105
105
|
}
|
|
106
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YS12ZXJzaW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9qYXZhL2phdmEtdmVyc2lvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDZFQUE2RTtBQUM3RSx1RUFBdUU7QUFDdkUsMkVBQTJFO0FBQzNFLHlFQUF5RTtBQUN6RSw2RUFBNkU7QUFDN0UsbURBQW1EOzs7QUFtR25ELHNEQUdDO0FBT0QsMENBZ0JDO0FBM0hELCtFQUErRTtBQUNsRSxRQUFBLHFCQUFxQixHQUFHLGdEQUFnRCxDQUFDO0FBQ3pFLFFBQUEscUJBQXFCLEdBQUcsZ0RBQWdELENBQUM7QUFDekUsUUFBQSxxQkFBcUIsR0FBRyxnREFBZ0QsQ0FBQztBQUN6RSxRQUFBLGdCQUFnQixHQUFHLDJDQUEyQyxDQUFDO0FBQy9ELFFBQUEscUJBQXFCLEdBQUcsZ0RBQWdELENBQUM7QUFDekUsUUFBQSxvQkFBb0IsR0FBRywrQ0FBK0MsQ0FBQztBQUN2RSxRQUFBLG1CQUFtQixHQUFHLDhDQUE4QyxDQUFDO0FBQ3JFLFFBQUEsU0FBUyxHQUFHLHFCQUFxQixDQUFDO0FBQ2xDLFFBQUEsZUFBZSxHQUFHLG1EQUFtRCxDQUFDO0FBQ3RFLFFBQUEsd0JBQXdCLEdBQUcsbURBQW1ELENBQUM7QUFDL0UsUUFBQSxtQkFBbUIsR0FBRyxrQ0FBa0MsQ0FBQztBQUN6RCxRQUFBLHFCQUFxQixHQUFHLHlDQUF5QyxDQUFDO0FBRS9FLCtEQUErRDtBQUNsRCxRQUFBLG9CQUFvQixHQUFHLElBQUksQ0FBQztBQUV6QyxrRUFBa0U7QUFDckQsUUFBQSx5QkFBeUIsR0FBRyxLQUFLLENBQUM7QUFFL0MsMEVBQTBFO0FBQzFFLHdEQUF3RDtBQUN4RCxNQUFNLHNCQUFzQixHQUEyQjtJQUNyRCxDQUFDLDZCQUFxQixDQUFDLEVBQUUsUUFBUTtJQUNqQyxDQUFDLDZCQUFxQixDQUFDLEVBQUUsT0FBTztJQUNoQyxDQUFDLDZCQUFxQixDQUFDLEVBQUUsT0FBTztJ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IE1hdmVuIGJ1aWxkIHVzZXMgbGl2ZXMgaW4gdGhpc1xuLy8gZmlsZSwgZ3JvdXBlZCBieSBKYXZhIGxpbmUgKEYwMTMgwqc0KS4gTm90aGluZyBlbHNlIGluIGBzcmMvamF2YWAgbWF5XG4vLyBoYXJkLWNvZGUgYSBKYXZhIHZlcnNpb24gb3IgYSBkZWZhdWx0IHBsdWdpbi9CT00gdmVyc2lvbiAtIGFkZGluZyBhIEphdmFcbi8vIGxpbmUgaXMgb25lIG5ldyBlbnRyeSBpbiBKQVZBX0xJTkVTLiBWZXJzaW9ucyBhcmUgZXhhY3QgcGlucywgdmVyaWZpZWRcbi8vIGFnYWluc3QgTWF2ZW4gQ2VudHJhbCAoYW5kLCBmb3IgcGx1Z2lucywgcnVuIG9uIHRoZSBvbGRlc3QgSkRLIG9mIHRoZSBsaW5lXG4vLyB0aGV5IGFyZSBsaXN0ZWQgZm9yKSB3aGVuIHRoZXkgd2VyZSBsYXN0IGJ1bXBlZC5cblxuLyoqIGBncm91cElkL2FydGlmYWN0SWRgIGtleXMgZm9yIHRoZSB2ZXJzaW9ucyB0aGlzIHBhY2thZ2UgcGlucyBieSBkZWZhdWx0LiAqL1xuZXhwb3J0IGNvbnN0IE1BVkVOX0NPTVBJTEVSX1BMVUdJTiA9ICdvcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnMvbWF2ZW4tY29tcGlsZXItcGx1Z2luJztcbmV4cG9ydCBjb25zdCBNQVZFTl9TVVJFRklSRV9QTFVHSU4gPSAnb3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zL21hdmVuLXN1cmVmaXJlLXBsdWdpbic7XG5leHBvcnQgY29uc3QgTUFWRU5fRkFJTFNBRkVfUExVR0lOID0gJ29yZy5hcGFjaGUubWF2ZW4ucGx1Z2lucy9tYXZlbi1mYWlsc2FmZS1wbHVnaW4nO1xuZXhwb3J0IGNvbnN0IE1BVkVOX0pBUl9QTFVHSU4gPSAnb3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zL21hdmVuLWphci1wbHVnaW4nO1xuZXhwb3J0IGNvbnN0IE1BVkVOX0VORk9SQ0VSX1BMVUdJTiA9ICdvcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnMvbWF2ZW4tZW5mb3JjZXItcGx1Z2luJztcbmV4cG9ydCBjb25zdCBNQVZFTl9KQVZBRE9DX1BMVUdJTiA9ICdvcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnMvbWF2ZW4tamF2YWRvYy1wbHVnaW4nO1xuZXhwb3J0IGNvbnN0IE1BVkVOX1NPVVJDRV9QTFVHSU4gPSAnb3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zL21hdmVuLXNvdXJjZS1wbHVnaW4nO1xuZXhwb3J0IGNvbnN0IEpVTklUX0JPTSA9ICdvcmcuanVuaXQvanVuaXQtYm9tJztcbmV4cG9ydCBjb25zdCBTUFJJTkdfQk9PVF9CT00gPSAnb3JnLnNwcmluZ2ZyYW1ld29yay5ib290L3NwcmluZy1ib290LWRlcGVuZGVuY2llcyc7XG5leHBvcnQgY29uc3QgU1BSSU5HX0JPT1RfTUFWRU5fUExVR0lOID0gJ29yZy5zcHJpbmdmcmFtZXdvcmsuYm9vdC9zcHJpbmctYm9vdC1tYXZlbi1wbHVnaW4nO1xuZXhwb3J0IGNvbnN0IEZMWVdBWV9NQVZFTl9QTFVHSU4gPSAnb3JnLmZseXdheWRiL2ZseXdheS1tYXZlbi1wbHVnaW4nO1xuZXhwb3J0IGNvbnN0IFZFUlNJT05TX01BVkVOX1BMVUdJTiA9ICdvcmcuY29kZWhhdXMubW9qby92ZXJzaW9ucy1tYXZlbi1wbHVnaW4nO1xuXG4vKiogVGhlIEphdmEgbGluZSB1c2VkIHdoZW4gYSBwcm9qZWN0IHNldHMgbm8gYGphdmFWZXJzaW9uYC4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0pBVkFfVkVSU0lPTiA9ICcyMSc7XG5cbi8qKiBUaGUgbWluaW11bSBNYXZlbiB2ZXJzaW9uIHRoZSBlbmZvcmNlciByZXF1aXJlcyBieSBkZWZhdWx0LiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUlOX01BVkVOX1ZFUlNJT04gPSAnMy45JztcblxuLy8gTWF2ZW4gcGx1Z2lucyB0aGF0IHJ1biBvbiBldmVyeSBzdXBwb3J0ZWQgSkRLIChhbGwgb2YgdGhlbSByZXF1aXJlIG9ubHlcbi8vIEphdmEgOCBhdCBydW50aW1lKSwgc28gdGhleSBhcmUgc2hhcmVkIGJ5IGV2ZXJ5IGxpbmUuXG5jb25zdCBTSEFSRURfUExVR0lOX1ZFUlNJT05TOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBbTUFWRU5fQ09NUElMRVJfUExVR0lOXTogJzMuMTYuMCcsXG4gIFtNQVZFTl9TVVJFRklSRV9QTFVHSU5dOiAnMy42LjAnLFxuICBbTUFWRU5fRkFJTFNBRkVfUExVR0lOXTogJzMuNi4wJyxcbiAgW01BVkVOX0pBUl9QTFVHSU5dOiAnMy41LjEnLFxuICBbTUFWRU5fRU5GT1JDRVJfUExVR0lOXTogJzMuNi4zJyxcbiAgW01BVkVOX0pBVkFET0NfUExVR0lOXTogJzMuMTIuMCcsXG4gIFtNQVZFTl9TT1VSQ0VfUExVR0lOXTogJzMuNC4wJyxcbiAgW1ZFUlNJT05TX01BVkVOX1BMVUdJTl06ICcyLjIyLjAnLFxufTtcblxuLy8gTGlicmFyaWVzIHdob3NlIGN1cnJlbnQgbWFqb3IgbmVlZHMgSmF2YSAxNzogSlVuaXQgNiwgU3ByaW5nIEJvb3QgMysvNCxcbi8vIEZseXdheSAxMCsuIFRoZSBKYXZhIDggbGluZSBzdGF5cyBvbiB0aGUgbGFzdCBtYWpvciB0aGF0IHN1cHBvcnRzIGl0LlxuY29uc3QgTU9ERVJOX1ZFUlNJT05TOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAuLi5TSEFSRURfUExVR0lOX1ZFUlNJT05TLFxuICBbSlVOSVRfQk9NXTogJzYuMS4zJyxcbiAgW1NQUklOR19CT09UX0JPTV06ICc0LjEuMScsXG4gIFtGTFlXQVlfTUFWRU5fUExVR0lOXTogJzEzLjkuMCcsXG59O1xuXG4vKiogRXZlcnl0aGluZyBhIGdlbmVyYXRlZCBidWlsZCBkZXJpdmVzIGZyb20gaXRzIEphdmEgbGluZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSmF2YUxpbmVQcm9maWxlIHtcbiAgLyoqIENhbm9uaWNhbCBsaW5lIGlkLCBhcyB3cml0dGVuIGluIGBqYXZhVmVyc2lvbmAgKGAxLjhgLCBgMTdgLCAuLi4pLiAqL1xuICByZWFkb25seSBsaW5lOiBzdHJpbmc7XG4gIC8qKiBgPHByb3BlcnRpZXM+YCB0aGF0IHNldCB0aGUgY29tcGlsZXIgbGV2ZWwuICovXG4gIHJlYWRvbmx5IGNvbXBpbGVyUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIFRoZSBlbmZvcmNlcidzIGByZXF1aXJlSmF2YVZlcnNpb25gIHJhbmdlLiAqL1xuICByZWFkb25seSBlbmZvcmNlckphdmFSYW5nZTogc3RyaW5nO1xuICAvKiogYGFjdGlvbnMvc2V0dXAtamF2YWAncyBgamF2YS12ZXJzaW9uYCBpbnB1dC4gKi9cbiAgcmVhZG9ubHkgc2V0dXBKYXZhVmVyc2lvbjogc3RyaW5nO1xuICAvKiogRGVmYXVsdCBleGFjdCB2ZXJzaW9ucywga2V5ZWQgYnkgYGdyb3VwSWQvYXJ0aWZhY3RJZGAuICovXG4gIHJlYWRvbmx5IHZlcnNpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogTmV3ZXN0IFNwcmluZyBCb290IG1ham9yIHRoYXQgcnVucyBvbiB0aGlzIGxpbmUsIGlmIGl0IGlzIGNhcHBlZC4gKi9cbiAgcmVhZG9ubHkgbWF4U3ByaW5nQm9vdE1ham9yPzogbnVtYmVyO1xufVxuXG5jb25zdCBKQVZBX0xJTkVTOiBSZWNvcmQ8c3RyaW5nLCBKYXZhTGluZVByb2ZpbGU+ID0ge1xuICAxLjg6IHtcbiAgICBsaW5lOiAnMS44JyxcbiAgICAvLyBqYXZhYyA4IGhhcyBubyAtLXJlbGVhc2UgZmxhZzsgc291cmNlL3RhcmdldCBpcyB0aGUgb25seSBvcHRpb24uXG4gICAgY29tcGlsZXJQcm9wZXJ0aWVzOiB7XG4gICAgICAnbWF2ZW4uY29tcGlsZXIuc291cmNlJzogJzEuOCcsXG4gICAgICAnbWF2ZW4uY29tcGlsZXIudGFyZ2V0JzogJzEuOCcsXG4gICAgfSxcbiAgICBlbmZvcmNlckphdmFSYW5nZTogJ1sxLjgsKScsXG4gICAgc2V0dXBKYXZhVmVyc2lvbjogJzgnLFxuICAgIC8vIFNwcmluZyBCb290IDMrIG5lZWRzIEphdmEgMTcuXG4gICAgbWF4U3ByaW5nQm9vdE1ham9yOiAyLFxuICAgIHZlcnNpb25zOiB7XG4gICAgICAuLi5TSEFSRURfUExVR0lOX1ZFUlNJT05TLFxuICAgICAgW0pVTklUX0JPTV06ICc1LjE0LjQnLFxuICAgICAgW1NQUklOR19CT09UX0JPTV06ICcyLjcuMTgnLFxuICAgICAgW0ZMWVdBWV9NQVZFTl9QTFVHSU5dOiAnOS4yMi4zJyxcbiAgICB9LFxuICB9LFxuICAuLi5tb2Rlcm5MaW5lKCcxNycpLFxuICAuLi5tb2Rlcm5MaW5lKCcyMScpLFxuICAuLi5tb2Rlcm5MaW5lKCcyNScpLFxufTtcblxuZnVuY3Rpb24gbW9kZXJuTGluZShsaW5lOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBKYXZhTGluZVByb2ZpbGU+IHtcbiAgcmV0dXJuIHtcbiAgICBbbGluZV06IHtcbiAgICAgIGxpbmUsXG4gICAgICBjb21waWxlclByb3BlcnRpZXM6IHsgJ21hdmVuLmNvbXBpbGVyLnJlbGVhc2UnOiBsaW5lIH0sXG4gICAgICBlbmZvcmNlckphdmFSYW5nZTogYFske2xpbmV9LClgLFxuICAgICAgc2V0dXBKYXZhVmVyc2lvbjogbGluZSxcbiAgICAgIHZlcnNpb25zOiBNT0RFUk5fVkVSU0lPTlMsXG4gICAgfSxcbiAgfTtcbn1cblxuY29uc3QgQUxJQVNFUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsgODogJzEuOCcgfTtcblxuLyoqIFRoZSBKYXZhIGxpbmVzIGBqYXZhVmVyc2lvbmAgYWNjZXB0cywgaW4gYXNjZW5kaW5nIG9yZGVyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvcnRlZEphdmFWZXJzaW9ucygpOiBzdHJpbmdbXSB7XG4gIC8vIEludGVnZXItbGlrZSBrZXlzICgnMTcnKSBlbnVtZXJhdGUgYmVmb3JlICcxLjgnLCBzbyBzb3J0IGV4cGxpY2l0bHkuXG4gIHJldHVybiBPYmplY3Qua2V5cyhKQVZBX0xJTkVTKS5zb3J0KChhLCBiKSA9PiBwYXJzZUZsb2F0KGEpIC0gcGFyc2VGbG9hdChiKSk7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgYSBgamF2YVZlcnNpb25gIG9wdGlvbiB0byBpdHMgbGluZSBwcm9maWxlLCBhcHBseWluZ1xuICogYHZlcnNpb25PdmVycmlkZXNgIChgZ3JvdXBJZC9hcnRpZmFjdElkYCAtPiBleGFjdCB2ZXJzaW9uKSBvbiB0b3Agb2YgdGhlXG4gKiBsaW5lJ3MgZGVmYXVsdHMuIFRocm93cywgbGlzdGluZyB0aGUgc3VwcG9ydGVkIGxpbmVzLCBvbiBhbiB1bmtub3duIGxpbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlSmF2YUxpbmUoXG4gIGphdmFWZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHZlcnNpb25PdmVycmlkZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fSxcbik6IEphdmFMaW5lUHJvZmlsZSB7XG4gIGNvbnN0IHJlcXVlc3RlZCA9IGphdmFWZXJzaW9uID8/IERFRkFVTFRfSkFWQV9WRVJTSU9OO1xuICBjb25zdCBrZXkgPSBBTElBU0VTW3JlcXVlc3RlZF0gPz8gcmVxdWVzdGVkO1xuICBjb25zdCBwcm9maWxlID0gSkFWQV9MSU5FU1trZXldO1xuICBpZiAoIXByb2ZpbGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVW5zdXBwb3J0ZWQgamF2YVZlcnNpb24gXCIke3JlcXVlc3RlZH1cIi4gU3VwcG9ydGVkOiAke3N1cHBvcnRlZEphdmFWZXJzaW9ucygpLmpvaW4oJywgJyl9LmAsXG4gICAgKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnByb2ZpbGUsXG4gICAgdmVyc2lvbnM6IHsgLi4ucHJvZmlsZS52ZXJzaW9ucywgLi4udmVyc2lvbk92ZXJyaWRlcyB9LFxuICB9O1xufVxuIl19
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YS12ZXJzaW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9qYXZhL2phdmEtdmVyc2lvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDZFQUE2RTtBQUM3RSx1RUFBdUU7QUFDdkUsMkVBQTJFO0FBQzNFLHlFQUF5RTtBQUN6RSw2RUFBNkU7QUFDN0UsbURBQW1EOzs7QUFtR25ELHNEQUdDO0FBT0QsMENBZ0JDO0FBM0hELCtFQUErRTtBQUNsRSxRQUFBLHFCQUFxQixHQUFHLGdEQUFnRCxDQUFDO0FBQ3pFLFFBQUEscUJBQXFCLEdBQUcsZ0RBQWdELENBQUM7QUFDekUsUUFBQSxxQkFBcUIsR0FBRyxnREFBZ0QsQ0FBQztBQUN6RSxRQUFBLGdCQUFnQixHQUFHLDJDQUEyQyxDQUFDO0FBQy9ELFFBQUEscUJBQXFCLEdBQUcsZ0RBQWdELENBQUM7QUFDekUsUUFBQSxvQkFBb0IsR0FBRywrQ0FBK0MsQ0FBQztBQUN2RSxRQUFBLG1CQUFtQixHQUFHLDhDQUE4QyxDQUFDO0FBQ3JFLFFBQUEsU0FBUyxHQUFHLHFCQUFxQixDQUFDO0FBQ2xDLFFBQUEsZUFBZSxHQUFHLG1EQUFtRCxDQUFDO0FBQ3RFLFFBQUEsd0JBQXdCLEdBQUcsbURBQW1ELENBQUM7QUFDL0UsUUFBQSxtQkFBbUIsR0FBRyxrQ0FBa0MsQ0FBQztBQUN6RCxRQUFBLHFCQUFxQixHQUFHLHlDQUF5QyxDQUFDO0FBRS9FLCtEQUErRDtBQUNsRCxRQUFBLG9CQUFvQixHQUFHLElBQUksQ0FBQztBQUV6QyxrRUFBa0U7QUFDckQsUUFBQSx5QkFBeUIsR0FBRyxLQUFLLENBQUM7QUFFL0MsMEVBQTBFO0FBQzFFLHdEQUF3RDtBQUN4RCxNQUFNLHNCQUFzQixHQUEyQjtJQUNyRCxDQUFDLDZCQUFxQixDQUFDLEVBQUUsUUFBUTtJQUNqQyxDQUFDLDZCQUFxQixDQUFDLEVBQUUsT0FBTztJQUNoQyxDQUFDLDZCQUFxQixDQUFDLEVBQUUsT0FBTztJ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bnQgdmFsdWUgYSBnZW5lcmF0ZWQgTWF2ZW4gYnVpbGQgdXNlcyBsaXZlcyBpbiB0aGlzXG4vLyBmaWxlLCBncm91cGVkIGJ5IEphdmEgbGluZSAoRjAxMyDCpzQpLiBOb3RoaW5nIGVsc2UgaW4gYHNyYy9qYXZhYCBtYXlcbi8vIGhhcmQtY29kZSBhIEphdmEgdmVyc2lvbiBvciBhIGRlZmF1bHQgcGx1Z2luL0JPTSB2ZXJzaW9uIC0gYWRkaW5nIGEgSmF2YVxuLy8gbGluZSBpcyBvbmUgbmV3IGVudHJ5IGluIEpBVkFfTElORVMuIFZlcnNpb25zIGFyZSBleGFjdCBwaW5zLCB2ZXJpZmllZFxuLy8gYWdhaW5zdCBNYXZlbiBDZW50cmFsIChhbmQsIGZvciBwbHVnaW5zLCBydW4gb24gdGhlIG9sZGVzdCBKREsgb2YgdGhlIGxpbmVcbi8vIHRoZXkgYXJlIGxpc3RlZCBmb3IpIHdoZW4gdGhleSB3ZXJlIGxhc3QgYnVtcGVkLlxuXG4vKiogYGdyb3VwSWQvYXJ0aWZhY3RJZGAga2V5cyBmb3IgdGhlIHZlcnNpb25zIHRoaXMgcGFja2FnZSBwaW5zIGJ5IGRlZmF1bHQuICovXG5leHBvcnQgY29uc3QgTUFWRU5fQ09NUElMRVJfUExVR0lOID0gJ29yZy5hcGFjaGUubWF2ZW4ucGx1Z2lucy9tYXZlbi1jb21waWxlci1wbHVnaW4nO1xuZXhwb3J0IGNvbnN0IE1BVkVOX1NVUkVGSVJFX1BMVUdJTiA9ICdvcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnMvbWF2ZW4tc3VyZWZpcmUtcGx1Z2luJztcbmV4cG9ydCBjb25zdCBNQVZFTl9GQUlMU0FGRV9QTFVHSU4gPSAnb3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zL21hdmVuLWZhaWxzYWZlLXBsdWdpbic7XG5leHBvcnQgY29uc3QgTUFWRU5fSkFSX1BMVUdJTiA9ICdvcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnMvbWF2ZW4tamFyLXBsdWdpbic7XG5leHBvcnQgY29uc3QgTUFWRU5fRU5GT1JDRVJfUExVR0lOID0gJ29yZy5hcGFjaGUubWF2ZW4ucGx1Z2lucy9tYXZlbi1lbmZvcmNlci1wbHVnaW4nO1xuZXhwb3J0IGNvbnN0IE1BVkVOX0pBVkFET0NfUExVR0lOID0gJ29yZy5hcGFjaGUubWF2ZW4ucGx1Z2lucy9tYXZlbi1qYXZhZG9jLXBsdWdpbic7XG5leHBvcnQgY29uc3QgTUFWRU5fU09VUkNFX1BMVUdJTiA9ICdvcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnMvbWF2ZW4tc291cmNlLXBsdWdpbic7XG5leHBvcnQgY29uc3QgSlVOSVRfQk9NID0gJ29yZy5qdW5pdC9qdW5pdC1ib20nO1xuZXhwb3J0IGNvbnN0IFNQUklOR19CT09UX0JPTSA9ICdvcmcuc3ByaW5nZnJhbWV3b3JrLmJvb3Qvc3ByaW5nLWJvb3QtZGVwZW5kZW5jaWVzJztcbmV4cG9ydCBjb25zdCBTUFJJTkdfQk9PVF9NQVZFTl9QTFVHSU4gPSAnb3JnLnNwcmluZ2ZyYW1ld29yay5ib290L3NwcmluZy1ib290LW1hdmVuLXBsdWdpbic7XG5leHBvcnQgY29uc3QgRkxZV0FZX01BVkVOX1BMVUdJTiA9ICdvcmcuZmx5d2F5ZGIvZmx5d2F5LW1hdmVuLXBsdWdpbic7XG5leHBvcnQgY29uc3QgVkVSU0lPTlNfTUFWRU5fUExVR0lOID0gJ29yZy5jb2RlaGF1cy5tb2pvL3ZlcnNpb25zLW1hdmVuLXBsdWdpbic7XG5cbi8qKiBUaGUgSmF2YSBsaW5lIHVzZWQgd2hlbiBhIHByb2plY3Qgc2V0cyBubyBgamF2YVZlcnNpb25gLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSkFWQV9WRVJTSU9OID0gJzIxJztcblxuLyoqIFRoZSBtaW5pbXVtIE1hdmVuIHZlcnNpb24gdGhlIGVuZm9yY2VyIHJlcXVpcmVzIGJ5IGRlZmF1bHQuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9NSU5fTUFWRU5fVkVSU0lPTiA9ICczLjknO1xuXG4vLyBNYXZlbiBwbHVnaW5zIHRoYXQgcnVuIG9uIGV2ZXJ5IHN1cHBvcnRlZCBKREsgKGFsbCBvZiB0aGVtIHJlcXVpcmUgb25seVxuLy8gSmF2YSA4IGF0IHJ1bnRpbWUpLCBzbyB0aGV5IGFyZSBzaGFyZWQgYnkgZXZlcnkgbGluZS5cbmNvbnN0IFNIQVJFRF9QTFVHSU5fVkVSU0lPTlM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIFtNQVZFTl9DT01QSUxFUl9QTFVHSU5dOiAnMy4xNi4wJyxcbiAgW01BVkVOX1NVUkVGSVJFX1BMVUdJTl06ICczLjYuMCcsXG4gIFtNQVZFTl9GQUlMU0FGRV9QTFVHSU5dOiAnMy42LjAnLFxuICBbTUFWRU5fSkFSX1BMVUdJTl06ICczLjUuMScsXG4gIFtNQVZFTl9FTkZPUkNFUl9QTFVHSU5dOiAnMy42LjMnLFxuICBbTUFWRU5fSkFWQURPQ19QTFVHSU5dOiAnMy4xMi4wJyxcbiAgW01BVkVOX1NPVVJDRV9QTFVHSU5dOiAnMy40LjAnLFxuICBbVkVSU0lPTlNfTUFWRU5fUExVR0lOXTogJzIuMjIuMCcsXG59O1xuXG4vLyBMaWJyYXJpZXMgd2hvc2UgY3VycmVudCBtYWpvciBuZWVkcyBKYXZhIDE3OiBKVW5pdCA2LCBTcHJpbmcgQm9vdCAzKy80LFxuLy8gRmx5d2F5IDEwKy4gVGhlIEphdmEgOCBsaW5lIHN0YXlzIG9uIHRoZSBsYXN0IG1ham9yIHRoYXQgc3VwcG9ydHMgaXQuXG5jb25zdCBNT0RFUk5fVkVSU0lPTlM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIC4uLlNIQVJFRF9QTFVHSU5fVkVSU0lPTlMsXG4gIFtKVU5JVF9CT01dOiAnNi4xLjMnLFxuICBbU1BSSU5HX0JPT1RfQk9NXTogJzQuMS4xJyxcbiAgW0ZMWVdBWV9NQVZFTl9QTFVHSU5dOiAnMTMuOS4wJyxcbn07XG5cbi8qKiBFdmVyeXRoaW5nIGEgZ2VuZXJhdGVkIGJ1aWxkIGRlcml2ZXMgZnJvbSBpdHMgSmF2YSBsaW5lLiAqL1xuZXhwb3J0IGludGVyZmFjZSBKYXZhTGluZVByb2ZpbGUge1xuICAvKiogQ2Fub25pY2FsIGxpbmUgaWQsIGFzIHdyaXR0ZW4gaW4gYGphdmFWZXJzaW9uYCAoYDEuOGAsIGAxN2AsIC4uLikuICovXG4gIHJlYWRvbmx5IGxpbmU6IHN0cmluZztcbiAgLyoqIGA8cHJvcGVydGllcz5gIHRoYXQgc2V0IHRoZSBjb21waWxlciBsZXZlbC4gKi9cbiAgcmVhZG9ubHkgY29tcGlsZXJQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogVGhlIGVuZm9yY2VyJ3MgYHJlcXVpcmVKYXZhVmVyc2lvbmAgcmFuZ2UuICovXG4gIHJlYWRvbmx5IGVuZm9yY2VySmF2YVJhbmdlOiBzdHJpbmc7XG4gIC8qKiBgYWN0aW9ucy9zZXR1cC1qYXZhYCdzIGBqYXZhLXZlcnNpb25gIGlucHV0LiAqL1xuICByZWFkb25seSBzZXR1cEphdmFWZXJzaW9uOiBzdHJpbmc7XG4gIC8qKiBEZWZhdWx0IGV4YWN0IHZlcnNpb25zLCBrZXllZCBieSBgZ3JvdXBJZC9hcnRpZmFjdElkYC4gKi9cbiAgcmVhZG9ubHkgdmVyc2lvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBOZXdlc3QgU3ByaW5nIEJvb3QgbWFqb3IgdGhhdCBydW5zIG9uIHRoaXMgbGluZSwgaWYgaXQgaXMgY2FwcGVkLiAqL1xuICByZWFkb25seSBtYXhTcHJpbmdCb290TWFqb3I/OiBudW1iZXI7XG59XG5cbmNvbnN0IEpBVkFfTElORVM6IFJlY29yZDxzdHJpbmcsIEphdmFMaW5lUHJvZmlsZT4gPSB7XG4gIDEuODoge1xuICAgIGxpbmU6ICcxLjgnLFxuICAgIC8vIGphdmFjIDggaGFzIG5vIC0tcmVsZWFzZSBmbGFnOyBzb3VyY2UvdGFyZ2V0IGlzIHRoZSBvbmx5IG9wdGlvbi5cbiAgICBjb21waWxlclByb3BlcnRpZXM6IHtcbiAgICAgICdtYXZlbi5jb21waWxlci5zb3VyY2UnOiAnMS44JyxcbiAgICAgICdtYXZlbi5jb21waWxlci50YXJnZXQnOiAnMS44JyxcbiAgICB9LFxuICAgIGVuZm9yY2VySmF2YVJhbmdlOiAnWzEuOCwpJyxcbiAgICBzZXR1cEphdmFWZXJzaW9uOiAnOCcsXG4gICAgLy8gU3ByaW5nIEJvb3QgMysgbmVlZHMgSmF2YSAxNy5cbiAgICBtYXhTcHJpbmdCb290TWFqb3I6IDIsXG4gICAgdmVyc2lvbnM6IHtcbiAgICAgIC4uLlNIQVJFRF9QTFVHSU5fVkVSU0lPTlMsXG4gICAgICBbSlVOSVRfQk9NXTogJzUuMTQuNCcsXG4gICAgICBbU1BSSU5HX0JPT1RfQk9NXTogJzIuNy4xOCcsXG4gICAgICBbRkxZV0FZX01BVkVOX1BMVUdJTl06ICc5LjIyLjMnLFxuICAgIH0sXG4gIH0sXG4gIC4uLm1vZGVybkxpbmUoJzE3JyksXG4gIC4uLm1vZGVybkxpbmUoJzIxJyksXG4gIC4uLm1vZGVybkxpbmUoJzI1JyksXG59O1xuXG5mdW5jdGlvbiBtb2Rlcm5MaW5lKGxpbmU6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIEphdmFMaW5lUHJvZmlsZT4ge1xuICByZXR1cm4ge1xuICAgIFtsaW5lXToge1xuICAgICAgbGluZSxcbiAgICAgIGNvbXBpbGVyUHJvcGVydGllczogeyAnbWF2ZW4uY29tcGlsZXIucmVsZWFzZSc6IGxpbmUgfSxcbiAgICAgIGVuZm9yY2VySmF2YVJhbmdlOiBgWyR7bGluZX0sKWAsXG4gICAgICBzZXR1cEphdmFWZXJzaW9uOiBsaW5lLFxuICAgICAgdmVyc2lvbnM6IE1PREVSTl9WRVJTSU9OUyxcbiAgICB9LFxuICB9O1xufVxuXG5jb25zdCBBTElBU0VTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyA4OiAnMS44JyB9O1xuXG4vKiogVGhlIEphdmEgbGluZXMgYGphdmFWZXJzaW9uYCBhY2NlcHRzLCBpbiBhc2NlbmRpbmcgb3JkZXIuICovXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9ydGVkSmF2YVZlcnNpb25zKCk6IHN0cmluZ1tdIHtcbiAgLy8gSW50ZWdlci1saWtlIGtleXMgKCcxNycpIGVudW1lcmF0ZSBiZWZvcmUgJzEuOCcsIHNvIHNvcnQgZXhwbGljaXRseS5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKEpBVkFfTElORVMpLnNvcnQoKGEsIGIpID0+IE51bWJlci5wYXJzZUZsb2F0KGEpIC0gTnVtYmVyLnBhcnNlRmxvYXQoYikpO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgYGphdmFWZXJzaW9uYCBvcHRpb24gdG8gaXRzIGxpbmUgcHJvZmlsZSwgYXBwbHlpbmdcbiAqIGB2ZXJzaW9uT3ZlcnJpZGVzYCAoYGdyb3VwSWQvYXJ0aWZhY3RJZGAgLT4gZXhhY3QgdmVyc2lvbikgb24gdG9wIG9mIHRoZVxuICogbGluZSdzIGRlZmF1bHRzLiBUaHJvd3MsIGxpc3RpbmcgdGhlIHN1cHBvcnRlZCBsaW5lcywgb24gYW4gdW5rbm93biBsaW5lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUphdmFMaW5lKFxuICBqYXZhVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICB2ZXJzaW9uT3ZlcnJpZGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge30sXG4pOiBKYXZhTGluZVByb2ZpbGUge1xuICBjb25zdCByZXF1ZXN0ZWQgPSBqYXZhVmVyc2lvbiA/PyBERUZBVUxUX0pBVkFfVkVSU0lPTjtcbiAgY29uc3Qga2V5ID0gQUxJQVNFU1tyZXF1ZXN0ZWRdID8/IHJlcXVlc3RlZDtcbiAgY29uc3QgcHJvZmlsZSA9IEpBVkFfTElORVNba2V5XTtcbiAgaWYgKCFwcm9maWxlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFVuc3VwcG9ydGVkIGphdmFWZXJzaW9uIFwiJHtyZXF1ZXN0ZWR9XCIuIFN1cHBvcnRlZDogJHtzdXBwb3J0ZWRKYXZhVmVyc2lvbnMoKS5qb2luKCcsICcpfS5gLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5wcm9maWxlLFxuICAgIHZlcnNpb25zOiB7IC4uLnByb2ZpbGUudmVyc2lvbnMsIC4uLnZlcnNpb25PdmVycmlkZXMgfSxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -16,7 +16,7 @@ const maven_pom_1 = require("./maven-pom");
|
|
|
16
16
|
* an artifact gets the same version.
|
|
17
17
|
*/
|
|
18
18
|
class MavenModule extends projen_1.Component {
|
|
19
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.MavenModule", version: "0.0.
|
|
19
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.MavenModule", version: "0.0.17" };
|
|
20
20
|
/** Module directory, relative to the repo root. */
|
|
21
21
|
dir;
|
|
22
22
|
artifactId;
|
|
@@ -139,5 +139,12 @@ export declare class MavenPom extends Component {
|
|
|
139
139
|
addPluginRepository(repository: java.MavenRepository): void;
|
|
140
140
|
private mergeDependency;
|
|
141
141
|
private mergePlugin;
|
|
142
|
+
/**
|
|
143
|
+
* Renders `<plugins>` and `<pluginManagement>`. With `managePluginVersions`,
|
|
144
|
+
* a versioned plugin's version moves into `<pluginManagement>` (unless one
|
|
145
|
+
* is already managed there) and the plugin itself is rendered versionless.
|
|
146
|
+
*/
|
|
147
|
+
private renderPlugins;
|
|
148
|
+
private renderDependencyManagement;
|
|
142
149
|
private synthPom;
|
|
143
150
|
}
|
|
@@ -58,7 +58,7 @@ function key(c) {
|
|
|
58
58
|
* `executions` and `dependencies` appended.
|
|
59
59
|
*/
|
|
60
60
|
class MavenPom extends projen_1.Component {
|
|
61
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.MavenPom", version: "0.0.
|
|
61
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.MavenPom", version: "0.0.17" };
|
|
62
62
|
/** Path of the pom, relative to the project root. */
|
|
63
63
|
filePath;
|
|
64
64
|
groupId;
|
|
@@ -241,7 +241,12 @@ class MavenPom extends projen_1.Component {
|
|
|
241
241
|
},
|
|
242
242
|
});
|
|
243
243
|
}
|
|
244
|
-
|
|
244
|
+
/**
|
|
245
|
+
* Renders `<plugins>` and `<pluginManagement>`. With `managePluginVersions`,
|
|
246
|
+
* a versioned plugin's version moves into `<pluginManagement>` (unless one
|
|
247
|
+
* is already managed there) and the plugin itself is rendered versionless.
|
|
248
|
+
*/
|
|
249
|
+
renderPlugins() {
|
|
245
250
|
const managedPlugins = new Map(this.managedPlugins);
|
|
246
251
|
const plugins = [];
|
|
247
252
|
for (const p of this.plugins.values()) {
|
|
@@ -256,11 +261,18 @@ class MavenPom extends projen_1.Component {
|
|
|
256
261
|
plugins.push(renderPlugin(p.coords, p.options));
|
|
257
262
|
}
|
|
258
263
|
}
|
|
264
|
+
const pluginManagement = [...managedPlugins.values()].map((p) => renderPlugin(p.coords, p.options));
|
|
265
|
+
return { plugins, pluginManagement };
|
|
266
|
+
}
|
|
267
|
+
renderDependencyManagement() {
|
|
259
268
|
const managed = [
|
|
260
269
|
...this.boms.map((b) => ({ ...renderCoords(b), type: 'pom', scope: 'import' })),
|
|
261
270
|
...[...this.managedDeps.values()].map(renderDependency),
|
|
262
271
|
];
|
|
263
|
-
|
|
272
|
+
return managed.length ? { dependencies: { dependency: managed } } : undefined;
|
|
273
|
+
}
|
|
274
|
+
synthPom() {
|
|
275
|
+
const { plugins, pluginManagement } = this.renderPlugins();
|
|
264
276
|
// JSON round-trip drops every `undefined` field, so absent sections are
|
|
265
277
|
// omitted rather than written as empty elements.
|
|
266
278
|
return JSON.parse(JSON.stringify({
|
|
@@ -284,25 +296,27 @@ class MavenPom extends projen_1.Component {
|
|
|
284
296
|
pluginRepositories: this.pluginRepositories.length
|
|
285
297
|
? { pluginRepository: this.pluginRepositories }
|
|
286
298
|
: undefined,
|
|
287
|
-
dependencyManagement:
|
|
288
|
-
? { dependencies: { dependency: managed } }
|
|
289
|
-
: undefined,
|
|
299
|
+
dependencyManagement: this.renderDependencyManagement(),
|
|
290
300
|
dependencies: this.deps.size
|
|
291
301
|
? { dependency: [...this.deps.values()].map(renderDependency) }
|
|
292
302
|
: undefined,
|
|
293
|
-
build: plugins
|
|
294
|
-
? {
|
|
295
|
-
pluginManagement: pluginManagement.length
|
|
296
|
-
? { plugins: { plugin: pluginManagement } }
|
|
297
|
-
: undefined,
|
|
298
|
-
plugins: plugins.length ? { plugin: plugins } : undefined,
|
|
299
|
-
}
|
|
300
|
-
: undefined,
|
|
303
|
+
build: renderBuild(plugins, pluginManagement),
|
|
301
304
|
},
|
|
302
305
|
}));
|
|
303
306
|
}
|
|
304
307
|
}
|
|
305
308
|
exports.MavenPom = MavenPom;
|
|
309
|
+
function renderBuild(plugins, pluginManagement) {
|
|
310
|
+
if (!plugins.length && !pluginManagement.length) {
|
|
311
|
+
return undefined;
|
|
312
|
+
}
|
|
313
|
+
return {
|
|
314
|
+
pluginManagement: pluginManagement.length
|
|
315
|
+
? { plugins: { plugin: pluginManagement } }
|
|
316
|
+
: undefined,
|
|
317
|
+
plugins: plugins.length ? { plugin: plugins } : undefined,
|
|
318
|
+
};
|
|
319
|
+
}
|
|
306
320
|
function mergeVersion(existing, added, section) {
|
|
307
321
|
if (existing.version && added.version && existing.version !== added.version) {
|
|
308
322
|
throw new Error(`${key(added)} is pinned at two different versions in ${section} (${existing.version} and ${added.version}). Pin it once.`);
|
|
@@ -334,4 +348,4 @@ function renderPlugin(c, options) {
|
|
|
334
348
|
: undefined,
|
|
335
349
|
};
|
|
336
350
|
}
|
|
337
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF2ZW4tcG9tLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2phdmEvbWF2ZW4vbWF2ZW4tcG9tLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTJCQSx3Q0FjQztBQUdELGdEQU1DOztBQWxERCxtQ0FBMkQ7QUFFM0QsTUFBTSxhQUFhLEdBQUc7SUFDcEIscUJBQXFCLEVBQ25CLCtFQUErRTtJQUNqRixRQUFRLEVBQUUsbUNBQW1DO0lBQzdDLFlBQVksRUFBRSwyQ0FBMkM7Q0FDMUQsQ0FBQztBQUVGLDRFQUE0RTtBQUM1RSwwRUFBMEU7QUFDMUUsZ0VBQWdFO0FBQ2hFLE1BQU0saUJBQWlCLEdBQUcsa0NBQWtDLENBQUM7QUFTN0Q7Ozs7O0dBS0c7QUFDSCxTQUFnQixjQUFjLENBQUMsSUFBWTtJQUN6QyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLE1BQU0sSUFBSSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNsRCxNQUFNLE9BQU8sR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM5QixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDakQsTUFBTSxJQUFJLEtBQUssQ0FDYix1QkFBdUIsSUFBSSxtRkFBbUYsQ0FDL0csQ0FBQztJ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b3J0IHsgQ29tcG9uZW50LCBQcm9qZWN0LCBYbWxGaWxlLCBqYXZhIH0gZnJvbSAncHJvamVuJztcblxuY29uc3QgUE9NX1hNTF9BVFRSUyA9IHtcbiAgJ0B4c2k6c2NoZW1hTG9jYXRpb24nOlxuICAgICdodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCcsXG4gICdAeG1sbnMnOiAnaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wJyxcbiAgJ0B4bWxuczp4c2knOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UnLFxufTtcblxuLy8gQ2hhcmFjdGVycyB0aGF0IG1ha2UgYSB2ZXJzaW9uIGEgcmFuZ2Ugb3IgYSBzZW12ZXIgZXhwcmVzc2lvbiByYXRoZXIgdGhhblxuLy8gb25lIGV4YWN0IHZlcnNpb24uIE1hdmVuIHJhbmdlcyBtYWtlIGJ1aWxkcyBub24tcmVwcm9kdWNpYmxlLCBzbyBhIHNwZWNcbi8vIGNhcnJ5aW5nIG9uZSBpcyByZWplY3RlZCBvdXRyaWdodCBpbnN0ZWFkIG9mIGJlaW5nIGNvbnZlcnRlZC5cbmNvbnN0IE5PTl9FWEFDVF9WRVJTSU9OID0gL1tcXF5+KlxcW1xcXSgpLDw+XFxzXXxeeCR8XFwueChcXC58JCkvaTtcblxuLyoqIFBhcnNlZCBgZ3JvdXBJZC9hcnRpZmFjdElkW0B2ZXJzaW9uXWAgc3BlYy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWF2ZW5Db29yZGluYXRlcyB7XG4gIHJlYWRvbmx5IGdyb3VwSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgYXJ0aWZhY3RJZDogc3RyaW5nO1xuICByZWFkb25seSB2ZXJzaW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcnNlcyBgZ3JvdXBJZC9hcnRpZmFjdElkW0B2ZXJzaW9uXWAuIFRoZSB2ZXJzaW9uLCB3aGVuIHByZXNlbnQsIG11c3QgYmVcbiAqIG9uZSBleGFjdCB2ZXJzaW9uIC0gYSByYW5nZSAoYFsxLDIpYCksIGEgc2VtdmVyIHJhbmdlIChgXjFgLCBgfjEuMmApLCBvciBhXG4gKiB3aWxkY2FyZCB0aHJvd3MsIGJlY2F1c2UgYSByYW5nZSByZXNvbHZlcyBkaWZmZXJlbnRseSBvdmVyIHRpbWUgYW5kIG1ha2VzXG4gKiB0aGUgYnVpbGQgbm9uLXJlcHJvZHVjaWJsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTWF2ZW5TcGVjKHNwZWM6IHN0cmluZyk6IE1hdmVuQ29vcmRpbmF0ZXMge1xuICBjb25zdCBhdCA9IHNwZWMuaW5kZXhPZignQCcpO1xuICBjb25zdCBuYW1lID0gYXQgPT09IC0xID8gc3BlYyA6IHNwZWMuc2xpY2UoMCwgYXQpO1xuICBjb25zdCB2ZXJzaW9uID0gYXQgPT09IC0xID8gdW5kZWZpbmVkIDogc3BlYy5zbGljZShhdCArIDEpO1xuICBjb25zdCBwYXJ0cyA9IG5hbWUuc3BsaXQoJy8nKTtcbiAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMiB8fCAhcGFydHNbMF0gfHwgIXBhcnRzWzFdKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgTWF2ZW4gc3BlYyBcIiR7c3BlY31cIi4gRm9ybWF0IGlzIFwiPGdyb3VwSWQ+LzxhcnRpZmFjdElkPltAPHZlcnNpb24+XVwiLCBlLmcuIFwib3JnLnlhbWwvc25ha2V5YW1sQDIuNFwiLmAsXG4gICAgKTtcbiAgfVxuICBpZiAodmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgYXNzZXJ0RXhhY3RWZXJzaW9uKHZlcnNpb24sIHNwZWMpO1xuICB9XG4gIHJldHVybiB7IGdyb3VwSWQ6IHBhcnRzWzBdLCBhcnRpZmFjdElkOiBwYXJ0c1sxXSwgdmVyc2lvbiB9O1xufVxuXG4vKiogVGhyb3dzIHVubGVzcyBgdmVyc2lvbmAgaXMgb25lIGV4YWN0IHZlcnNpb24gKG5vIHJhbmdlLCBubyB3aWxkY2FyZCkuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0RXhhY3RWZXJzaW9uKHZlcnNpb246IHN0cmluZywgY29udGV4dDogc3RyaW5nKTogdm9pZCB7XG4gIGlmICghdmVyc2lvbiB8fCBOT05fRVhBQ1RfVkVSU0lPTi50ZXN0KHZlcnNpb24pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFwiJHtjb250ZXh0fVwiIHVzZXMgdmVyc2lvbiBcIiR7dmVyc2lvbn1cIiwgd2hpY2ggaXMgbm90IGFuIGV4YWN0IHZlcnNpb24uIEdlbmVyYXRlZCBwb21zIG5ldmVyIGNvbnRhaW4gdmVyc2lvbiByYW5nZXM6IHBpbiBvbmUgZXhhY3QgdmVyc2lvbiAoZS5nLiBcIjEuMi4zXCIpLCBvciBvbWl0IHRoZSB2ZXJzaW9uIHdoZW4gYSBCT00gbWFuYWdlcyBpdC5gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqIE9wdGlvbnMgZm9yIGBNYXZlblBvbWAuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hdmVuUG9tT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBQYXRoIG9mIHRoZSBwb20sIHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0IHJvb3QuXG4gICAqIEBkZWZhdWx0IFwicG9tLnhtbFwiXG4gICAqL1xuICByZWFkb25seSBmaWxlUGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogYGdyb3VwSWRgLiBPbWl0IGluIGEgbW9kdWxlIHBvbSB0byBpbmhlcml0IGl0IGZyb20gYDxwYXJlbnQ+YC5cbiAgICogQGRlZmF1bHQgLSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50XG4gICAqL1xuICByZWFkb25seSBncm91cElkPzogc3RyaW5nO1xuXG4gIHJlYWRvbmx5IGFydGlmYWN0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogYHZlcnNpb25gLiBPbWl0IGluIGEgbW9kdWxlIHBvbSB0byBpbmhlcml0IGl0IGZyb20gYDxwYXJlbnQ+YC5cbiAgICogQGRlZmF1bHQgLSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50XG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKiBAZGVmYXVsdCBcImphclwiICovXG4gIHJlYWRvbmx5IHBhY2thZ2luZz86IHN0cmluZztcblxuICAvKiogQGRlZmF1bHQgLSBub25lICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqIEBkZWZhdWx0IC0gbm9uZSAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKiogQGRlZmF1bHQgLSBub25lICovXG4gIHJlYWRvbmx5IHVybD86IHN0cmluZztcblxuICAvKiogQGRlZmF1bHQgLSBubyBwYXJlbnQgKi9cbiAgcmVhZG9ubHkgcGFyZW50PzogamF2YS5QYXJlbnRQb207XG59XG5cbmludGVyZmFjZSBEZXBlbmRlbmN5RW50cnkge1xuICByZWFkb25seSBjb29yZHM6IE1hdmVuQ29vcmRpbmF0ZXM7XG4gIHJlYWRvbmx5IHNjb3BlPzogc3RyaW5nO1xuICByZWFkb25seSB0eXBlPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUGx1Z2luRW50cnkge1xuICByZWFkb25seSBjb29yZHM6IE1hdmVuQ29vcmRpbmF0ZXM7XG4gIHJlYWRvbmx5IG9wdGlvbnM6IGphdmEuUGx1Z2luT3B0aW9ucztcbn1cblxuZnVuY3Rpb24ga2V5KGM6IE1hdmVuQ29vcmRpbmF0ZXMpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7Yy5ncm91cElkfS8ke2MuYXJ0aWZhY3RJZH1gO1xufVxuXG4vKipcbiAqIEEgYHBvbS54bWxgIHdyaXR0ZW4gYnkgdGhpcyBwYWNrYWdlIChyYXRoZXIgdGhhbiBwcm9qZW4ncyBgamF2YS5Qb21gKS5cbiAqXG4gKiBTdXBwb3J0cyBgPG1vZHVsZXM+YCwgYDxkZXBlbmRlbmN5TWFuYWdlbWVudD5gIChpbmNsdWRpbmcgQk9NIGltcG9ydHMpLFxuICogYDxwbHVnaW5NYW5hZ2VtZW50PmAsIGFuZCB2ZXJzaW9ubGVzcyBkZXBlbmRlbmNpZXMvcGx1Z2lucyAtIHdoYXQgYSBNYXZlblxuICogcmVhY3RvciBuZWVkcyBhbmQgYGphdmEuUG9tYCBjYW5ub3QgZXhwcmVzcy4gRXZlcnkgdmVyc2lvbiBpdCB3cml0ZXMgaXNcbiAqIGV4YWN0OyBhIHNwZWMgY2FycnlpbmcgYSByYW5nZSB0aHJvd3MuIFBsdWdpbiBleGVjdXRpb25zIHJlbmRlciBvbmVcbiAqIGA8Z29hbHM+YCBlbGVtZW50IHBlciBleGVjdXRpb24gKHByb2plbidzIGBqYXZhLlBvbWAgcmVwZWF0cyBgPGdvYWxzPmAsXG4gKiB3aGljaCBNYXZlbiAzLjkgcmVqZWN0cyBhcyBub24tcGFyc2VhYmxlKS5cbiAqXG4gKiBBZGRpbmcgdGhlIHNhbWUgYGdyb3VwSWQvYXJ0aWZhY3RJZGAgdHdpY2UgbWVyZ2VzOiBhIGxhdGVyIHZlcnNpb25cbiAqIHJlcGxhY2VzIGFuIGVhcmxpZXIgb25lIG9ubHkgaWYgdGhlIGVhcmxpZXIgaGFkIG5vbmUgKHR3byBkaWZmZXJlbnRcbiAqIHZlcnNpb25zIHRocm93KSwgYW5kIHBsdWdpbiBvcHRpb25zIGFyZSBtZXJnZWQgLSBgY29uZmlndXJhdGlvbmAgc2hhbGxvd2x5LFxuICogYGV4ZWN1dGlvbnNgIGFuZCBgZGVwZW5kZW5jaWVzYCBhcHBlbmRlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIE1hdmVuUG9tIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqIFBhdGggb2YgdGhlIHBvbSwgcmVsYXRpdmUgdG8gdGhlIHByb2plY3Qgcm9vdC4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGZpbGVQYXRoOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBncm91cElkPzogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgYXJ0aWZhY3RJZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgdmVyc2lvbj86IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHVybD86IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHBhcmVudD86IGphdmEuUGFyZW50UG9tO1xuXG4gIC8qKiBNYXZlbiBwYWNrYWdpbmcgKGBqYXJgLCBgcG9tYCwgLi4uKS4gKi9cbiAgcHVibGljIHBhY2thZ2luZzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIHRoZSB2ZXJzaW9ucyBvZiBgPHBsdWdpbnM+YCBlbnRyaWVzIGFyZSB3cml0dGVuIGludG9cbiAgICogYDxwbHVnaW5NYW5hZ2VtZW50PmAgYW5kIHRoZSBgPHBsdWdpbnM+YCBlbnRyaWVzIHN0YXkgdmVyc2lvbmxlc3MgLSB0aGVcbiAgICogc2hhcGUgYSByZWFjdG9yIHBhcmVudCB3YW50cywgc28gbW9kdWxlcyBjYW4gcmVkZWNsYXJlIGEgcGx1Z2luIHdpdGhvdXRcbiAgICogcmVwZWF0aW5nIGl0cyB2ZXJzaW9uLlxuICAgKi9cbiAgcHVibGljIG1hbmFnZVBsdWdpblZlcnNpb25zID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIHByaXZhdGUgcmVhZG9ubHkgbW9kdWxlczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBib21zOiBNYXZlbkNvb3JkaW5hdGVzW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBtYW5hZ2VkRGVwcyA9IG5ldyBNYXA8c3RyaW5nLCBEZXBlbmRlbmN5RW50cnk+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVwcyA9IG5ldyBNYXA8c3RyaW5nLCBEZXBlbmRlbmN5RW50cnk+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWFuYWdlZFBsdWdpbnMgPSBuZXcgTWFwPHN0cmluZywgUGx1Z2luRW50cnk+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2lucyA9IG5ldyBNYXA8c3RyaW5nLCBQbHVnaW5FbnRyeT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSByZXBvc2l0b3JpZXM6IGphdmEuTWF2ZW5SZXBvc2l0b3J5W10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5SZXBvc2l0b3JpZXM6IGphdmEuTWF2ZW5SZXBvc2l0b3J5W10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBvcHRpb25zOiBNYXZlblBvbU9wdGlvbnMpIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcbiAgICB0aGlzLmZpbGVQYXRoID0gb3B0aW9ucy5maWxlUGF0aCA/PyAncG9tLnhtbCc7XG4gICAgdGhpcy5ncm91cElkID0gb3B0aW9ucy5ncm91cElkO1xuICAgIHRoaXMuYXJ0aWZhY3RJZCA9IG9wdGlvbnMuYXJ0aWZhY3RJZDtcbiAgICB0aGlzLnZlcnNpb24gPSBvcHRpb25zLnZlcnNpb247XG4gICAgdGhpcy5wYWNrYWdpbmcgPSBvcHRpb25zLnBhY2thZ2luZyA/PyAnamFyJztcbiAgICB0aGlzLm5hbWUgPSBvcHRpb25zLm5hbWU7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IG9wdGlvbnMuZGVzY3JpcHRpb247XG4gICAgdGhpcy51cmwgPSBvcHRpb25zLnVybDtcbiAgICB0aGlzLnBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuICAgIGlmICh0aGlzLnZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgYXNzZXJ0RXhhY3RWZXJzaW9uKHRoaXMudmVyc2lvbiwgYCR7dGhpcy5hcnRpZmFjdElkfSB2ZXJzaW9uYCk7XG4gICAgfVxuXG4gICAgbmV3IFhtbEZpbGUocHJvamVjdCwgdGhpcy5maWxlUGF0aCwgeyBvYmo6ICgpID0+IHRoaXMuc3ludGhQb20oKSB9KTtcbiAgfVxuXG4gIC8qKiBTZXRzIGEgYDxwcm9wZXJ0aWVzPmAgZW50cnkuICovXG4gIHB1YmxpYyBhZGRQcm9wZXJ0eShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnByb3BlcnRpZXNbbmFtZV0gPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKiBBZGRzIGEgYDxtb2R1bGU+YCAoYSBwYXRoIHJlbGF0aXZlIHRvIHRoaXMgcG9tJ3MgZGlyZWN0b3J5KS4gKi9cbiAgcHVibGljIGFkZE1vZHVsZShwYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubW9kdWxlcy5pbmNsdWRlcyhwYXRoKSkge1xuICAgICAgdGhpcy5tb2R1bGVzLnB1c2gocGF0aCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydHMgYSBCT00gaW50byBgPGRlcGVuZGVuY3lNYW5hZ2VtZW50PmAgKGB0eXBlPXBvbWAsXG4gICAqIGBzY29wZT1pbXBvcnRgKS4gQk9NcyBhcmUgd3JpdHRlbiBpbiB0aGUgb3JkZXIgYWRkZWQsIGJlZm9yZSBldmVyeSBvdGhlclxuICAgKiBtYW5hZ2VkIGRlcGVuZGVuY3kuXG4gICAqXG4gICAqIEBwYXJhbSBzcGVjIGBncm91cElkL2FydGlmYWN0SWRAdmVyc2lvbmAgLSB0aGUgdmVyc2lvbiBpcyByZXF1aXJlZFxuICAgKi9cbiAgcHVibGljIGFkZEJvbShzcGVjOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjb29yZHMgPSBwYXJzZU1hdmVuU3BlYyhzcGVjKTtcbiAgICBpZiAoIWNvb3Jkcy52ZXJzaW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEJPTSBcIiR7c3BlY31cIiBuZWVkcyBhIHZlcnNpb246IGEgQk9NIGltcG9ydCBjYW5ub3QgYmUgdmVyc2lvbmxlc3MuYCk7XG4gICAgfVxuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5ib21zLmZpbmRJbmRleCgoYikgPT4ga2V5KGIpID09PSBrZXkoY29vcmRzKSk7XG4gICAgaWYgKGV4aXN0aW5nICE9PSAtMSkge1xuICAgICAgdGhpcy5ib21zW2V4aXN0aW5nXSA9IGNvb3JkcztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ib21zLnB1c2goY29vcmRzKTtcbiAgICB9XG4gIH1cblxuICAvKiogUmVtb3ZlcyBhIEJPTSBpbXBvcnQgYWRkZWQgYnkgYGFkZEJvbWAsIGlmIHByZXNlbnQuICovXG4gIHB1YmxpYyByZW1vdmVCb20oY29vcmRpbmF0ZXM6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5ib21zLmZpbmRJbmRleCgoYikgPT4ga2V5KGIpID09PSBjb29yZGluYXRlcyk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5ib21zLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBpbnMgYSB2ZXJzaW9uIGluIGA8ZGVwZW5kZW5jeU1hbmFnZW1lbnQ+YCB3aXRob3V0IGFkZGluZyB0aGVcbiAgICogZGVwZW5kZW5jeSBpdHNlbGYuXG4gICAqXG4gICAqIEBwYXJhbSBzcGVjIGBncm91cElkL2FydGlmYWN0SWRAdmVyc2lvbmAgLSB0aGUgdmVyc2lvbiBpcyByZXF1aXJlZFxuICAgKi9cbiAgcHVibGljIGFkZE1hbmFnZWREZXBlbmRlbmN5KHNwZWM6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGNvb3JkcyA9IHBhcnNlTWF2ZW5TcGVjKHNwZWMpO1xuICAgIGlmICghY29vcmRzLnZlcnNpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWFuYWdlZCBkZXBlbmRlbmN5IFwiJHtzcGVjfVwiIG5lZWRzIGEgdmVyc2lvbi5gKTtcbiAgICB9XG4gICAgdGhpcy5tZXJnZURlcGVuZGVuY3kodGhpcy5tYW5hZ2VkRGVwcywgeyBjb29yZHMgfSwgJ2RlcGVuZGVuY3lNYW5hZ2VtZW50Jyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGRlcGVuZGVuY3kgKGNvbXBpbGUgc2NvcGUgdW5sZXNzIGBzY29wZWAgaXMgZ2l2ZW4pLlxuICAgKlxuICAgKiBAcGFyYW0gc3BlYyBgZ3JvdXBJZC9hcnRpZmFjdElkW0B2ZXJzaW9uXWAgLSBvbWl0IHRoZSB2ZXJzaW9uIHdoZW4gYSBCT01cbiAgICogb3IgdGhlIHBhcmVudCdzIGA8ZGVwZW5kZW5jeU1hbmFnZW1lbnQ+YCBtYW5hZ2VzIGl0XG4gICAqIEBwYXJhbSBzY29wZSBNYXZlbiBzY29wZSAoYHRlc3RgLCBgcHJvdmlkZWRgLCBgcnVudGltZWAsIC4uLilcbiAgICovXG4gIHB1YmxpYyBhZGREZXBlbmRlbmN5KHNwZWM6IHN0cmluZywgc2NvcGU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm1lcmdlRGVwZW5kZW5jeShcbiAgICAgIHRoaXMuZGVwcyxcbiAgICAgIHsgY29vcmRzOiBwYXJzZU1hdmVuU3BlYyhzcGVjKSwgc2NvcGUgfSxcbiAgICAgICdkZXBlbmRlbmNpZXMnLFxuICAgICk7XG4gIH1cblxuICAvKiogQWRkcyBhIGB0ZXN0YC1zY29wZWQgZGVwZW5kZW5jeS4gKi9cbiAgcHVibGljIGFkZFRlc3REZXBlbmRlbmN5KHNwZWM6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuYWRkRGVwZW5kZW5jeShzcGVjLCAndGVzdCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBidWlsZCBwbHVnaW4gdG8gYDxidWlsZD48cGx1Z2lucz5gLlxuICAgKlxuICAgKiBAcGFyYW0gc3BlYyBgZ3JvdXBJZC9hcnRpZmFjdElkW0B2ZXJzaW9uXWAgLSBvbWl0IHRoZSB2ZXJzaW9uIHdoZW5cbiAgICogYDxwbHVnaW5NYW5hZ2VtZW50PmAgKGhlcmUgb3IgaW4gdGhlIHBhcmVudCkgbWFuYWdlcyBpdFxuICAgKi9cbiAgcHVibGljIGFkZFBsdWdpbihzcGVjOiBzdHJpbmcsIG9wdGlvbnM6IGphdmEuUGx1Z2luT3B0aW9ucyA9IHt9KTogdm9pZCB7XG4gICAgdGhpcy5tZXJnZVBsdWdpbih0aGlzLnBsdWdpbnMsIHBhcnNlTWF2ZW5TcGVjKHNwZWMpLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcGx1Z2luIHRvIGA8YnVpbGQ+PHBsdWdpbk1hbmFnZW1lbnQ+YCBvbmx5OiBpdCBwaW5zIHRoZSB2ZXJzaW9uXG4gICAqIChhbmQgb3B0aW9uYWwgZGVmYXVsdCBjb25maWd1cmF0aW9uKSBmb3IgdGhpcyBwb20gYW5kIGl0cyBtb2R1bGVzXG4gICAqIHdpdGhvdXQgcnVubmluZyB0aGUgcGx1Z2luIGhlcmUuXG4gICAqL1xuICBwdWJsaWMgYWRkTWFuYWdlZFBsdWdpbihzcGVjOiBzdHJpbmcsIG9wdGlvbnM6IGphdmEuUGx1Z2luT3B0aW9ucyA9IHt9KTogdm9pZCB7XG4gICAgdGhpcy5tZXJnZVBsdWdpbih0aGlzLm1hbmFnZWRQbHVnaW5zLCBwYXJzZU1hdmVuU3BlYyhzcGVjKSwgb3B0aW9ucyk7XG4gIH1cblxuICAvKiogVHJ1ZSBpZiBhIHBsdWdpbiB3aXRoIHRoZXNlIGBncm91cElkL2FydGlmYWN0SWRgIGNvb3JkaW5hdGVzIGlzIGluIGA8cGx1Z2lucz5gLiAqL1xuICBwdWJsaWMgaGFzUGx1Z2luKGNvb3JkaW5hdGVzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wbHVnaW5zLmhhcyhjb29yZGluYXRlcyk7XG4gIH1cblxuICAvKiogQWRkcyBhIGA8cmVwb3NpdG9yeT5gLiAqL1xuICBwdWJsaWMgYWRkUmVwb3NpdG9yeShyZXBvc2l0b3J5OiBqYXZhLk1hdmVuUmVwb3NpdG9yeSk6IHZvaWQge1xuICAgIHRoaXMucmVwb3NpdG9yaWVzLnB1c2gocmVwb3NpdG9yeSk7XG4gIH1cblxuICAvKiogQWRkcyBhIGA8cGx1Z2luUmVwb3NpdG9yeT5gLiAqL1xuICBwdWJsaWMgYWRkUGx1Z2luUmVwb3NpdG9yeShyZXBvc2l0b3J5OiBqYXZhLk1hdmVuUmVwb3NpdG9yeSk6IHZvaWQge1xuICAgIHRoaXMucGx1Z2luUmVwb3NpdG9yaWVzLnB1c2gocmVwb3NpdG9yeSk7XG4gIH1cblxuICBwcml2YXRlIG1lcmdlRGVwZW5kZW5jeShcbiAgICB0YXJnZXQ6IE1hcDxzdHJpbmcsIERlcGVuZGVuY3lFbnRyeT4sXG4gICAgZW50cnk6IERlcGVuZGVuY3lFbnRyeSxcbiAgICBzZWN0aW9uOiBzdHJpbmcsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGsgPSBrZXkoZW50cnkuY29vcmRzKTtcbiAgICBjb25zdCBleGlzdGluZyA9IHRhcmdldC5nZXQoayk7XG4gICAgaWYgKCFleGlzdGluZykge1xuICAgICAgdGFyZ2V0LnNldChrLCBlbnRyeSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHZlcnNpb24gPSBtZXJnZVZlcnNpb24oZXhpc3RpbmcuY29vcmRzLCBlbnRyeS5jb29yZHMsIHNlY3Rpb24pO1xuICAgIHRhcmdldC5zZXQoaywge1xuICAgICAgY29vcmRzOiB7IC4uLmVudHJ5LmNvb3JkcywgdmVyc2lvbiB9LFxuICAgICAgc2NvcGU6IGVudHJ5LnNjb3BlID8/IGV4aXN0aW5nLnNjb3BlLFxuICAgICAgdHlwZTogZW50cnkudHlwZSA/PyBleGlzdGluZy50eXBlLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBtZXJnZVBsdWdpbihcbiAgICB0YXJnZXQ6IE1hcDxzdHJpbmcsIFBsdWdpbkVudHJ5PixcbiAgICBjb29yZHM6IE1hdmVuQ29vcmRpbmF0ZXMsXG4gICAgb3B0aW9uczogamF2YS5QbHVnaW5PcHRpb25zLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBrID0ga2V5KGNvb3Jkcyk7XG4gICAgY29uc3QgZXhpc3RpbmcgPSB0YXJnZXQuZ2V0KGspO1xuICAgIGlmICghZXhpc3RpbmcpIHtcbiAgICAgIHRhcmdldC5zZXQoaywgeyBjb29yZHMsIG9wdGlvbnMgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHZlcnNpb24gPSBtZXJnZVZlcnNpb24oZXhpc3RpbmcuY29vcmRzLCBjb29yZHMsICdwbHVnaW5zJyk7XG4gICAgY29uc3QgZXhlY3V0aW9ucyA9IFsuLi4oZXhpc3Rpbmcub3B0aW9ucy5leGVjdXRpb25zID8/IFtdKV07XG4gICAgZm9yIChjb25zdCBlIG9mIG9wdGlvbnMuZXhlY3V0aW9ucyA/PyBbXSkge1xuICAgICAgY29uc3QgaSA9IGV4ZWN1dGlvbnMuZmluZEluZGV4KCh4KSA9PiB4LmlkID09PSBlLmlkKTtcbiAgICAgIGlmIChpID09PSAtMSkge1xuICAgICAgICBleGVjdXRpb25zLnB1c2goZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBleGVjdXRpb25zW2ldID0gZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGFyZ2V0LnNldChrLCB7XG4gICAgICBjb29yZHM6IHsgLi4uY29vcmRzLCB2ZXJzaW9uIH0sXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGNvbmZpZ3VyYXRpb246XG4gICAgICAgICAgZXhpc3Rpbmcub3B0aW9ucy5jb25maWd1cmF0aW9uIHx8IG9wdGlvbnMuY29uZmlndXJhdGlvblxuICAgICAgICAgICAgPyB7IC4uLmV4aXN0aW5nLm9wdGlvbnMuY29uZmlndXJhdGlvbiwgLi4ub3B0aW9ucy5jb25maWd1cmF0aW9uIH1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBleGVjdXRpb25zOiBleGVjdXRpb25zLmxlbmd0aCA/IGV4ZWN1dGlvbnMgOiB1bmRlZmluZWQsXG4gICAgICAgIGRlcGVuZGVuY2llczogW1xuICAgICAgICAgIC4uLihleGlzdGluZy5vcHRpb25zLmRlcGVuZGVuY2llcyA/PyBbXSksXG4gICAgICAgICAgLi4uKG9wdGlvbnMuZGVwZW5kZW5jaWVzID8/IFtdKSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHN5bnRoUG9tKCk6IGFueSB7XG4gICAgY29uc3QgbWFuYWdlZFBsdWdpbnMgPSBuZXcgTWFwKHRoaXMubWFuYWdlZFBsdWdpbnMpO1xuICAgIGNvbnN0IHBsdWdpbnM6IGFueVtdID0gW107XG4gICAgZm9yIChjb25zdCBwIG9mIHRoaXMucGx1Z2lucy52YWx1ZXMoKSkge1xuICAgICAgaWYgKHRoaXMubWFuYWdlUGx1Z2luVmVyc2lvbnMgJiYgcC5jb29yZHMudmVyc2lvbikge1xuICAgICAgICBjb25zdCBrID0ga2V5KHAuY29vcmRzKTtcbiAgICAgICAgaWYgKCFtYW5hZ2VkUGx1Z2lucy5oYXMoaykpIHtcbiAgICAgICAgICBtYW5hZ2VkUGx1Z2lucy5zZXQoaywgeyBjb29yZHM6IHAuY29vcmRzLCBvcHRpb25zOiB7fSB9KTtcbiAgICAgICAgfVxuICAgICAgICBwbHVnaW5zLnB1c2gocmVuZGVyUGx1Z2luKHsgLi4ucC5jb29yZHMsIHZlcnNpb246IHVuZGVmaW5lZCB9LCBwLm9wdGlvbnMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBsdWdpbnMucHVzaChyZW5kZXJQbHVnaW4ocC5jb29yZHMsIHAub3B0aW9ucykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1hbmFnZWQgPSBbXG4gICAgICAuLi50aGlzLmJvbXMubWFwKChiKSA9PiAoeyAuLi5yZW5kZXJDb29yZHMoYiksIHR5cGU6ICdwb20nLCBzY29wZTogJ2ltcG9ydCcgfSkpLFxuICAgICAgLi4uWy4uLnRoaXMubWFuYWdlZERlcHMudmFsdWVzKCldLm1hcChyZW5kZXJEZXBlbmRlbmN5KSxcbiAgICBdO1xuXG4gICAgY29uc3QgcGx1Z2luTWFuYWdlbWVudCA9IFsuLi5tYW5hZ2VkUGx1Z2lucy52YWx1ZXMoKV0ubWFwKChwKSA9PlxuICAgICAgcmVuZGVyUGx1Z2luKHAuY29vcmRzLCBwLm9wdGlvbnMpLFxuICAgICk7XG5cbiAgICAvLyBKU09OIHJvdW5kLXRyaXAgZHJvcHMgZXZlcnkgYHVuZGVmaW5lZGAgZmllbGQsIHNvIGFic2VudCBzZWN0aW9ucyBhcmVcbiAgICAvLyBvbWl0dGVkIHJhdGhlciB0aGFuIHdyaXR0ZW4gYXMgZW1wdHkgZWxlbWVudHMuXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgcHJvamVjdDoge1xuICAgICAgICAuLi5QT01fWE1MX0FUVFJTLFxuICAgICAgICBtb2RlbFZlcnNpb246ICc0LjAuMCcsXG4gICAgICAgIHBhcmVudDogdGhpcy5wYXJlbnQsXG4gICAgICAgIGdyb3VwSWQ6IHRoaXMuZ3JvdXBJZCxcbiAgICAgICAgYXJ0aWZhY3RJZDogdGhpcy5hcnRpZmFjdElkLFxuICAgICAgICB2ZXJzaW9uOiB0aGlzLnZlcnNpb24sXG4gICAgICAgIC8vIGBqYXJgIGlzIE1hdmVuJ3MgZGVmYXVsdCBhbmQgaXMgbGVmdCBpbXBsaWNpdC5cbiAgICAgICAgcGFja2FnaW5nOiB0aGlzLnBhY2thZ2luZyA9PT0gJ2phcicgPyB1bmRlZmluZWQgOiB0aGlzLnBhY2thZ2luZyxcbiAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgICAgdXJsOiB0aGlzLnVybCxcbiAgICAgICAgbW9kdWxlczogdGhpcy5tb2R1bGVzLmxlbmd0aCA/IHsgbW9kdWxlOiB0aGlzLm1vZHVsZXMgfSA6IHVuZGVmaW5lZCxcbiAgICAgICAgcHJvcGVydGllczogT2JqZWN0LmtleXModGhpcy5wcm9wZXJ0aWVzKS5sZW5ndGggPyB0aGlzLnByb3BlcnRpZXMgOiB1bmRlZmluZWQsXG4gICAgICAgIHJlcG9zaXRvcmllczogdGhpcy5yZXBvc2l0b3JpZXMubGVuZ3RoXG4gICAgICAgICAgPyB7IHJlcG9zaXRvcnk6IHRoaXMucmVwb3NpdG9yaWVzIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgcGx1Z2luUmVwb3NpdG9yaWVzOiB0aGlzLnBsdWdpblJlcG9zaXRvcmllcy5sZW5ndGhcbiAgICAgICAgICA/IHsgcGx1Z2luUmVwb3NpdG9yeTogdGhpcy5wbHVnaW5SZXBvc2l0b3JpZXMgfVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBkZXBlbmRlbmN5TWFuYWdlbWVudDogbWFuYWdlZC5sZW5ndGhcbiAgICAgICAgICA/IHsgZGVwZW5kZW5jaWVzOiB7IGRlcGVuZGVuY3k6IG1hbmFnZWQgfSB9XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGRlcGVuZGVuY2llczogdGhpcy5kZXBzLnNpemVcbiAgICAgICAgICA/IHsgZGVwZW5kZW5jeTogWy4uLnRoaXMuZGVwcy52YWx1ZXMoKV0ubWFwKHJlbmRlckRlcGVuZGVuY3kpIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgYnVpbGQ6XG4gICAgICAgICAgcGx1Z2lucy5sZW5ndGggfHwgcGx1Z2luTWFuYWdlbWVudC5sZW5ndGhcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBwbHVnaW5NYW5hZ2VtZW50OiBwbHVnaW5NYW5hZ2VtZW50Lmxlbmd0aFxuICAgICAgICAgICAgICAgID8geyBwbHVnaW5zOiB7IHBsdWdpbjogcGx1Z2luTWFuYWdlbWVudCB9IH1cbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgcGx1Z2luczogcGx1Z2lucy5sZW5ndGggPyB7IHBsdWdpbjogcGx1Z2lucyB9IDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgIH0pKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtZXJnZVZlcnNpb24oXG4gIGV4aXN0aW5nOiBNYXZlbkNvb3JkaW5hdGVzLFxuICBhZGRlZDogTWF2ZW5Db29yZGluYXRlcyxcbiAgc2VjdGlvbjogc3RyaW5nLFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGV4aXN0aW5nLnZlcnNpb24gJiYgYWRkZWQudmVyc2lvbiAmJiBleGlzdGluZy52ZXJzaW9uICE9PSBhZGRlZC52ZXJzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYCR7a2V5KGFkZGVkKX0gaXMgcGlubmVkIGF0IHR3byBkaWZmZXJlbnQgdmVyc2lvbnMgaW4gJHtzZWN0aW9ufSAoJHtleGlzdGluZy52ZXJzaW9ufSBhbmQgJHthZGRlZC52ZXJzaW9ufSkuIFBpbiBpdCBvbmNlLmAsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gYWRkZWQudmVyc2lvbiA/PyBleGlzdGluZy52ZXJzaW9uO1xufVxuXG5mdW5jdGlvbiByZW5kZXJDb29yZHMoYzogTWF2ZW5Db29yZGluYXRlcyk6IGFueSB7XG4gIHJldHVybiB7IGdyb3VwSWQ6IGMuZ3JvdXBJZCwgYXJ0aWZhY3RJZDogYy5hcnRpZmFjdElkLCB2ZXJzaW9uOiBjLnZlcnNpb24gfTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyRGVwZW5kZW5jeShkOiBEZXBlbmRlbmN5RW50cnkpOiBhbnkge1xuICByZXR1cm4geyAuLi5yZW5kZXJDb29yZHMoZC5jb29yZHMpLCB0eXBlOiBkLnR5cGUsIHNjb3BlOiBkLnNjb3BlIH07XG59XG5cbmZ1bmN0aW9uIHJlbmRlclBsdWdpbihjOiBNYXZlbkNvb3JkaW5hdGVzLCBvcHRpb25zOiBqYXZhLlBsdWdpbk9wdGlvbnMpOiBhbnkge1xuICBjb25zdCBkZXBzID0gKG9wdGlvbnMuZGVwZW5kZW5jaWVzID8/IFtdKS5tYXAoKGQpID0+IHJlbmRlckNvb3JkcyhwYXJzZU1hdmVuU3BlYyhkKSkpO1xuICByZXR1cm4ge1xuICAgIC4uLnJlbmRlckNvb3JkcyhjKSxcbiAgICBjb25maWd1cmF0aW9uOiBvcHRpb25zLmNvbmZpZ3VyYXRpb24sXG4gICAgZGVwZW5kZW5jaWVzOiBkZXBzLmxlbmd0aCA/IHsgZGVwZW5kZW5jeTogZGVwcyB9IDogdW5kZWZpbmVkLFxuICAgIGV4ZWN1dGlvbnM6IG9wdGlvbnMuZXhlY3V0aW9ucz8ubGVuZ3RoXG4gICAgICA/IHtcbiAgICAgICAgZXhlY3V0aW9uOiBvcHRpb25zLmV4ZWN1dGlvbnMubWFwKChlKSA9PiAoe1xuICAgICAgICAgIGlkOiBlLmlkLFxuICAgICAgICAgIHBoYXNlOiBlLnBoYXNlLFxuICAgICAgICAgIC8vIE9uZSA8Z29hbHM+IGhvbGRpbmcgZXZlcnkgPGdvYWw+IC0gbm90IG9uZSA8Z29hbHM+IHBlciBnb2FsLlxuICAgICAgICAgIGdvYWxzOiB7IGdvYWw6IGUuZ29hbHMgfSxcbiAgICAgICAgICBjb25maWd1cmF0aW9uOiBlLmNvbmZpZ3VyYXRpb24sXG4gICAgICAgIH0pKSxcbiAgICAgIH1cbiAgICAgIDogdW5kZWZpbmVkLFxuICB9O1xufVxuIl19
|
|
351
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF2ZW4tcG9tLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2phdmEvbWF2ZW4vbWF2ZW4tcG9tLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTJCQSx3Q0FjQztBQUdELGdEQU1DOztBQWxERCxtQ0FBMkQ7QUFFM0QsTUFBTSxhQUFhLEdBQUc7SUFDcEIscUJBQXFCLEVBQ25CLCtFQUErRTtJQUNqRixRQUFRLEVBQUUsbUNBQW1DO0lBQzdDLFlBQVksRUFBRSwyQ0FBMkM7Q0FDMUQsQ0FBQztBQUVGLDRFQUE0RTtBQUM1RSwwRUFBMEU7QUFDMUUsZ0VBQWdFO0FBQ2hFLE1BQU0saUJBQWlCLEdBQUcsa0NBQWtDLENBQUM7QUFTN0Q7Ozs7O0dBS0c7QUFDSCxTQUFnQixjQUFjLENBQUMsSUFBWTtJQUN6QyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLE1BQU0sSUFBSSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNsRCxNQUFNLE9BQU8sR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM5QixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDakQsTUFBTSxJQUFJLEtBQUssQ0FDYix1QkFBdUIsSUFBSSxtRkFBbUYsQ0FDL0csQ0FBQztJ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QSxTQUFTLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ3hDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRTtvQkFDUixLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUs7b0JBQ2QsK0RBQStEO29CQUMvRCxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRTtvQkFDeEIsYUFBYSxFQUFFLENBQUMsQ0FBQyxhQUFhO2lCQUMvQixDQUFDLENBQUM7YUFDSjtZQUNELENBQUMsQ0FBQyxTQUFTO0tBQ2QsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFByb2plY3QsIFhtbEZpbGUsIGphdmEgfSBmcm9tICdwcm9qZW4nO1xuXG5jb25zdCBQT01fWE1MX0FUVFJTID0ge1xuICAnQHhzaTpzY2hlbWFMb2NhdGlvbic6XG4gICAgJ2h0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkJyxcbiAgJ0B4bWxucyc6ICdodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAnLFxuICAnQHhtbG5zOnhzaSc6ICdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZScsXG59O1xuXG4vLyBDaGFyYWN0ZXJzIHRoYXQgbWFrZSBhIHZlcnNpb24gYSByYW5nZSBvciBhIHNlbXZlciBleHByZXNzaW9uIHJhdGhlciB0aGFuXG4vLyBvbmUgZXhhY3QgdmVyc2lvbi4gTWF2ZW4gcmFuZ2VzIG1ha2UgYnVpbGRzIG5vbi1yZXByb2R1Y2libGUsIHNvIGEgc3BlY1xuLy8gY2Fycnlpbmcgb25lIGlzIHJlamVjdGVkIG91dHJpZ2h0IGluc3RlYWQgb2YgYmVpbmcgY29udmVydGVkLlxuY29uc3QgTk9OX0VYQUNUX1ZFUlNJT04gPSAvW1xcXn4qXFxbXFxdKCksPD5cXHNdfF54JHxcXC54KFxcLnwkKS9pO1xuXG4vKiogUGFyc2VkIGBncm91cElkL2FydGlmYWN0SWRbQHZlcnNpb25dYCBzcGVjLiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXZlbkNvb3JkaW5hdGVzIHtcbiAgcmVhZG9ubHkgZ3JvdXBJZDogc3RyaW5nO1xuICByZWFkb25seSBhcnRpZmFjdElkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZlcnNpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyc2VzIGBncm91cElkL2FydGlmYWN0SWRbQHZlcnNpb25dYC4gVGhlIHZlcnNpb24sIHdoZW4gcHJlc2VudCwgbXVzdCBiZVxuICogb25lIGV4YWN0IHZlcnNpb24gLSBhIHJhbmdlIChgWzEsMilgKSwgYSBzZW12ZXIgcmFuZ2UgKGBeMWAsIGB+MS4yYCksIG9yIGFcbiAqIHdpbGRjYXJkIHRocm93cywgYmVjYXVzZSBhIHJhbmdlIHJlc29sdmVzIGRpZmZlcmVudGx5IG92ZXIgdGltZSBhbmQgbWFrZXNcbiAqIHRoZSBidWlsZCBub24tcmVwcm9kdWNpYmxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VNYXZlblNwZWMoc3BlYzogc3RyaW5nKTogTWF2ZW5Db29yZGluYXRlcyB7XG4gIGNvbnN0IGF0ID0gc3BlYy5pbmRleE9mKCdAJyk7XG4gIGNvbnN0IG5hbWUgPSBhdCA9PT0gLTEgPyBzcGVjIDogc3BlYy5zbGljZSgwLCBhdCk7XG4gIGNvbnN0IHZlcnNpb24gPSBhdCA9PT0gLTEgPyB1bmRlZmluZWQgOiBzcGVjLnNsaWNlKGF0ICsgMSk7XG4gIGNvbnN0IHBhcnRzID0gbmFtZS5zcGxpdCgnLycpO1xuICBpZiAocGFydHMubGVuZ3RoICE9PSAyIHx8ICFwYXJ0c1swXSB8fCAhcGFydHNbMV0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBNYXZlbiBzcGVjIFwiJHtzcGVjfVwiLiBGb3JtYXQgaXMgXCI8Z3JvdXBJZD4vPGFydGlmYWN0SWQ+W0A8dmVyc2lvbj5dXCIsIGUuZy4gXCJvcmcueWFtbC9zbmFrZXlhbWxAMi40XCIuYCxcbiAgICApO1xuICB9XG4gIGlmICh2ZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICBhc3NlcnRFeGFjdFZlcnNpb24odmVyc2lvbiwgc3BlYyk7XG4gIH1cbiAgcmV0dXJuIHsgZ3JvdXBJZDogcGFydHNbMF0sIGFydGlmYWN0SWQ6IHBhcnRzWzFdLCB2ZXJzaW9uIH07XG59XG5cbi8qKiBUaHJvd3MgdW5sZXNzIGB2ZXJzaW9uYCBpcyBvbmUgZXhhY3QgdmVyc2lvbiAobm8gcmFuZ2UsIG5vIHdpbGRjYXJkKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRFeGFjdFZlcnNpb24odmVyc2lvbjogc3RyaW5nLCBjb250ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKCF2ZXJzaW9uIHx8IE5PTl9FWEFDVF9WRVJTSU9OLnRlc3QodmVyc2lvbikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgXCIke2NvbnRleHR9XCIgdXNlcyB2ZXJzaW9uIFwiJHt2ZXJzaW9ufVwiLCB3aGljaCBpcyBub3QgYW4gZXhhY3QgdmVyc2lvbi4gR2VuZXJhdGVkIHBvbXMgbmV2ZXIgY29udGFpbiB2ZXJzaW9uIHJhbmdlczogcGluIG9uZSBleGFjdCB2ZXJzaW9uIChlLmcuIFwiMS4yLjNcIiksIG9yIG9taXQgdGhlIHZlcnNpb24gd2hlbiBhIEJPTSBtYW5hZ2VzIGl0LmAsXG4gICAgKTtcbiAgfVxufVxuXG4vKiogT3B0aW9ucyBmb3IgYE1hdmVuUG9tYC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWF2ZW5Qb21PcHRpb25zIHtcbiAgLyoqXG4gICAqIFBhdGggb2YgdGhlIHBvbSwgcmVsYXRpdmUgdG8gdGhlIHByb2plY3Qgcm9vdC5cbiAgICogQGRlZmF1bHQgXCJwb20ueG1sXCJcbiAgICovXG4gIHJlYWRvbmx5IGZpbGVQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBgZ3JvdXBJZGAuIE9taXQgaW4gYSBtb2R1bGUgcG9tIHRvIGluaGVyaXQgaXQgZnJvbSBgPHBhcmVudD5gLlxuICAgKiBAZGVmYXVsdCAtIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnRcbiAgICovXG4gIHJlYWRvbmx5IGdyb3VwSWQ/OiBzdHJpbmc7XG5cbiAgcmVhZG9ubHkgYXJ0aWZhY3RJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBgdmVyc2lvbmAuIE9taXQgaW4gYSBtb2R1bGUgcG9tIHRvIGluaGVyaXQgaXQgZnJvbSBgPHBhcmVudD5gLlxuICAgKiBAZGVmYXVsdCAtIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnRcbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqIEBkZWZhdWx0IFwiamFyXCIgKi9cbiAgcmVhZG9ubHkgcGFja2FnaW5nPzogc3RyaW5nO1xuXG4gIC8qKiBAZGVmYXVsdCAtIG5vbmUgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKiogQGRlZmF1bHQgLSBub25lICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKiBAZGVmYXVsdCAtIG5vbmUgKi9cbiAgcmVhZG9ubHkgdXJsPzogc3RyaW5nO1xuXG4gIC8qKiBAZGVmYXVsdCAtIG5vIHBhcmVudCAqL1xuICByZWFkb25seSBwYXJlbnQ/OiBqYXZhLlBhcmVudFBvbTtcbn1cblxuaW50ZXJmYWNlIERlcGVuZGVuY3lFbnRyeSB7XG4gIHJlYWRvbmx5IGNvb3JkczogTWF2ZW5Db29yZGluYXRlcztcbiAgcmVhZG9ubHkgc2NvcGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHR5cGU/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBQbHVnaW5FbnRyeSB7XG4gIHJlYWRvbmx5IGNvb3JkczogTWF2ZW5Db29yZGluYXRlcztcbiAgcmVhZG9ubHkgb3B0aW9uczogamF2YS5QbHVnaW5PcHRpb25zO1xufVxuXG5mdW5jdGlvbiBrZXkoYzogTWF2ZW5Db29yZGluYXRlcyk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtjLmdyb3VwSWR9LyR7Yy5hcnRpZmFjdElkfWA7XG59XG5cbi8qKlxuICogQSBgcG9tLnhtbGAgd3JpdHRlbiBieSB0aGlzIHBhY2thZ2UgKHJhdGhlciB0aGFuIHByb2plbidzIGBqYXZhLlBvbWApLlxuICpcbiAqIFN1cHBvcnRzIGA8bW9kdWxlcz5gLCBgPGRlcGVuZGVuY3lNYW5hZ2VtZW50PmAgKGluY2x1ZGluZyBCT00gaW1wb3J0cyksXG4gKiBgPHBsdWdpbk1hbmFnZW1lbnQ+YCwgYW5kIHZlcnNpb25sZXNzIGRlcGVuZGVuY2llcy9wbHVnaW5zIC0gd2hhdCBhIE1hdmVuXG4gKiByZWFjdG9yIG5lZWRzIGFuZCBgamF2YS5Qb21gIGNhbm5vdCBleHByZXNzLiBFdmVyeSB2ZXJzaW9uIGl0IHdyaXRlcyBpc1xuICogZXhhY3Q7IGEgc3BlYyBjYXJyeWluZyBhIHJhbmdlIHRocm93cy4gUGx1Z2luIGV4ZWN1dGlvbnMgcmVuZGVyIG9uZVxuICogYDxnb2Fscz5gIGVsZW1lbnQgcGVyIGV4ZWN1dGlvbiAocHJvamVuJ3MgYGphdmEuUG9tYCByZXBlYXRzIGA8Z29hbHM+YCxcbiAqIHdoaWNoIE1hdmVuIDMuOSByZWplY3RzIGFzIG5vbi1wYXJzZWFibGUpLlxuICpcbiAqIEFkZGluZyB0aGUgc2FtZSBgZ3JvdXBJZC9hcnRpZmFjdElkYCB0d2ljZSBtZXJnZXM6IGEgbGF0ZXIgdmVyc2lvblxuICogcmVwbGFjZXMgYW4gZWFybGllciBvbmUgb25seSBpZiB0aGUgZWFybGllciBoYWQgbm9uZSAodHdvIGRpZmZlcmVudFxuICogdmVyc2lvbnMgdGhyb3cpLCBhbmQgcGx1Z2luIG9wdGlvbnMgYXJlIG1lcmdlZCAtIGBjb25maWd1cmF0aW9uYCBzaGFsbG93bHksXG4gKiBgZXhlY3V0aW9uc2AgYW5kIGBkZXBlbmRlbmNpZXNgIGFwcGVuZGVkLlxuICovXG5leHBvcnQgY2xhc3MgTWF2ZW5Qb20gZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKiogUGF0aCBvZiB0aGUgcG9tLCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCByb290LiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZmlsZVBhdGg6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGdyb3VwSWQ/OiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBhcnRpZmFjdElkOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSB2ZXJzaW9uPzogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgdXJsPzogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgcGFyZW50PzogamF2YS5QYXJlbnRQb207XG5cbiAgLyoqIE1hdmVuIHBhY2thZ2luZyAoYGphcmAsIGBwb21gLCAuLi4pLiAqL1xuICBwdWJsaWMgcGFja2FnaW5nOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgdGhlIHZlcnNpb25zIG9mIGA8cGx1Z2lucz5gIGVudHJpZXMgYXJlIHdyaXR0ZW4gaW50b1xuICAgKiBgPHBsdWdpbk1hbmFnZW1lbnQ+YCBhbmQgdGhlIGA8cGx1Z2lucz5gIGVudHJpZXMgc3RheSB2ZXJzaW9ubGVzcyAtIHRoZVxuICAgKiBzaGFwZSBhIHJlYWN0b3IgcGFyZW50IHdhbnRzLCBzbyBtb2R1bGVzIGNhbiByZWRlY2xhcmUgYSBwbHVnaW4gd2l0aG91dFxuICAgKiByZXBlYXRpbmcgaXRzIHZlcnNpb24uXG4gICAqL1xuICBwdWJsaWMgbWFuYWdlUGx1Z2luVmVyc2lvbnMgPSBmYWxzZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgcHJpdmF0ZSByZWFkb25seSBtb2R1bGVzOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IGJvbXM6IE1hdmVuQ29vcmRpbmF0ZXNbXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IG1hbmFnZWREZXBzID0gbmV3IE1hcDxzdHJpbmcsIERlcGVuZGVuY3lFbnRyeT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXBzID0gbmV3IE1hcDxzdHJpbmcsIERlcGVuZGVuY3lFbnRyeT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBtYW5hZ2VkUGx1Z2lucyA9IG5ldyBNYXA8c3RyaW5nLCBQbHVnaW5FbnRyeT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5zID0gbmV3IE1hcDxzdHJpbmcsIFBsdWdpbkVudHJ5PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlcG9zaXRvcmllczogamF2YS5NYXZlblJlcG9zaXRvcnlbXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpblJlcG9zaXRvcmllczogamF2YS5NYXZlblJlcG9zaXRvcnlbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIG9wdGlvbnM6IE1hdmVuUG9tT3B0aW9ucykge1xuICAgIHN1cGVyKHByb2plY3QpO1xuICAgIHRoaXMuZmlsZVBhdGggPSBvcHRpb25zLmZpbGVQYXRoID8/ICdwb20ueG1sJztcbiAgICB0aGlzLmdyb3VwSWQgPSBvcHRpb25zLmdyb3VwSWQ7XG4gICAgdGhpcy5hcnRpZmFjdElkID0gb3B0aW9ucy5hcnRpZmFjdElkO1xuICAgIHRoaXMudmVyc2lvbiA9IG9wdGlvbnMudmVyc2lvbjtcbiAgICB0aGlzLnBhY2thZ2luZyA9IG9wdGlvbnMucGFja2FnaW5nID8/ICdqYXInO1xuICAgIHRoaXMubmFtZSA9IG9wdGlvbnMubmFtZTtcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gb3B0aW9ucy5kZXNjcmlwdGlvbjtcbiAgICB0aGlzLnVybCA9IG9wdGlvbnMudXJsO1xuICAgIHRoaXMucGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG4gICAgaWYgKHRoaXMudmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhc3NlcnRFeGFjdFZlcnNpb24odGhpcy52ZXJzaW9uLCBgJHt0aGlzLmFydGlmYWN0SWR9IHZlcnNpb25gKTtcbiAgICB9XG5cbiAgICBuZXcgWG1sRmlsZShwcm9qZWN0LCB0aGlzLmZpbGVQYXRoLCB7IG9iajogKCkgPT4gdGhpcy5zeW50aFBvbSgpIH0pO1xuICB9XG5cbiAgLyoqIFNldHMgYSBgPHByb3BlcnRpZXM+YCBlbnRyeS4gKi9cbiAgcHVibGljIGFkZFByb3BlcnR5KG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucHJvcGVydGllc1tuYW1lXSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqIEFkZHMgYSBgPG1vZHVsZT5gIChhIHBhdGggcmVsYXRpdmUgdG8gdGhpcyBwb20ncyBkaXJlY3RvcnkpLiAqL1xuICBwdWJsaWMgYWRkTW9kdWxlKHBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5tb2R1bGVzLmluY2x1ZGVzKHBhdGgpKSB7XG4gICAgICB0aGlzLm1vZHVsZXMucHVzaChwYXRoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0cyBhIEJPTSBpbnRvIGA8ZGVwZW5kZW5jeU1hbmFnZW1lbnQ+YCAoYHR5cGU9cG9tYCxcbiAgICogYHNjb3BlPWltcG9ydGApLiBCT01zIGFyZSB3cml0dGVuIGluIHRoZSBvcmRlciBhZGRlZCwgYmVmb3JlIGV2ZXJ5IG90aGVyXG4gICAqIG1hbmFnZWQgZGVwZW5kZW5jeS5cbiAgICpcbiAgICogQHBhcmFtIHNwZWMgYGdyb3VwSWQvYXJ0aWZhY3RJZEB2ZXJzaW9uYCAtIHRoZSB2ZXJzaW9uIGlzIHJlcXVpcmVkXG4gICAqL1xuICBwdWJsaWMgYWRkQm9tKHNwZWM6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGNvb3JkcyA9IHBhcnNlTWF2ZW5TcGVjKHNwZWMpO1xuICAgIGlmICghY29vcmRzLnZlcnNpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQk9NIFwiJHtzcGVjfVwiIG5lZWRzIGEgdmVyc2lvbjogYSBCT00gaW1wb3J0IGNhbm5vdCBiZSB2ZXJzaW9ubGVzcy5gKTtcbiAgICB9XG4gICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmJvbXMuZmluZEluZGV4KChiKSA9PiBrZXkoYikgPT09IGtleShjb29yZHMpKTtcbiAgICBpZiAoZXhpc3RpbmcgIT09IC0xKSB7XG4gICAgICB0aGlzLmJvbXNbZXhpc3RpbmddID0gY29vcmRzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJvbXMucHVzaChjb29yZHMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZW1vdmVzIGEgQk9NIGltcG9ydCBhZGRlZCBieSBgYWRkQm9tYCwgaWYgcHJlc2VudC4gKi9cbiAgcHVibGljIHJlbW92ZUJvbShjb29yZGluYXRlczogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmJvbXMuZmluZEluZGV4KChiKSA9PiBrZXkoYikgPT09IGNvb3JkaW5hdGVzKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLmJvbXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGlucyBhIHZlcnNpb24gaW4gYDxkZXBlbmRlbmN5TWFuYWdlbWVudD5gIHdpdGhvdXQgYWRkaW5nIHRoZVxuICAgKiBkZXBlbmRlbmN5IGl0c2VsZi5cbiAgICpcbiAgICogQHBhcmFtIHNwZWMgYGdyb3VwSWQvYXJ0aWZhY3RJZEB2ZXJzaW9uYCAtIHRoZSB2ZXJzaW9uIGlzIHJlcXVpcmVkXG4gICAqL1xuICBwdWJsaWMgYWRkTWFuYWdlZERlcGVuZGVuY3koc3BlYzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY29vcmRzID0gcGFyc2VNYXZlblNwZWMoc3BlYyk7XG4gICAgaWYgKCFjb29yZHMudmVyc2lvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNYW5hZ2VkIGRlcGVuZGVuY3kgXCIke3NwZWN9XCIgbmVlZHMgYSB2ZXJzaW9uLmApO1xuICAgIH1cbiAgICB0aGlzLm1lcmdlRGVwZW5kZW5jeSh0aGlzLm1hbmFnZWREZXBzLCB7IGNvb3JkcyB9LCAnZGVwZW5kZW5jeU1hbmFnZW1lbnQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgZGVwZW5kZW5jeSAoY29tcGlsZSBzY29wZSB1bmxlc3MgYHNjb3BlYCBpcyBnaXZlbikuXG4gICAqXG4gICAqIEBwYXJhbSBzcGVjIGBncm91cElkL2FydGlmYWN0SWRbQHZlcnNpb25dYCAtIG9taXQgdGhlIHZlcnNpb24gd2hlbiBhIEJPTVxuICAgKiBvciB0aGUgcGFyZW50J3MgYDxkZXBlbmRlbmN5TWFuYWdlbWVudD5gIG1hbmFnZXMgaXRcbiAgICogQHBhcmFtIHNjb3BlIE1hdmVuIHNjb3BlIChgdGVzdGAsIGBwcm92aWRlZGAsIGBydW50aW1lYCwgLi4uKVxuICAgKi9cbiAgcHVibGljIGFkZERlcGVuZGVuY3koc3BlYzogc3RyaW5nLCBzY29wZT86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMubWVyZ2VEZXBlbmRlbmN5KFxuICAgICAgdGhpcy5kZXBzLFxuICAgICAgeyBjb29yZHM6IHBhcnNlTWF2ZW5TcGVjKHNwZWMpLCBzY29wZSB9LFxuICAgICAgJ2RlcGVuZGVuY2llcycsXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBBZGRzIGEgYHRlc3RgLXNjb3BlZCBkZXBlbmRlbmN5LiAqL1xuICBwdWJsaWMgYWRkVGVzdERlcGVuZGVuY3koc3BlYzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5hZGREZXBlbmRlbmN5KHNwZWMsICd0ZXN0Jyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGJ1aWxkIHBsdWdpbiB0byBgPGJ1aWxkPjxwbHVnaW5zPmAuXG4gICAqXG4gICAqIEBwYXJhbSBzcGVjIGBncm91cElkL2FydGlmYWN0SWRbQHZlcnNpb25dYCAtIG9taXQgdGhlIHZlcnNpb24gd2hlblxuICAgKiBgPHBsdWdpbk1hbmFnZW1lbnQ+YCAoaGVyZSBvciBpbiB0aGUgcGFyZW50KSBtYW5hZ2VzIGl0XG4gICAqL1xuICBwdWJsaWMgYWRkUGx1Z2luKHNwZWM6IHN0cmluZywgb3B0aW9uczogamF2YS5QbHVnaW5PcHRpb25zID0ge30pOiB2b2lkIHtcbiAgICB0aGlzLm1lcmdlUGx1Z2luKHRoaXMucGx1Z2lucywgcGFyc2VNYXZlblNwZWMoc3BlYyksIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBwbHVnaW4gdG8gYDxidWlsZD48cGx1Z2luTWFuYWdlbWVudD5gIG9ubHk6IGl0IHBpbnMgdGhlIHZlcnNpb25cbiAgICogKGFuZCBvcHRpb25hbCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24pIGZvciB0aGlzIHBvbSBhbmQgaXRzIG1vZHVsZXNcbiAgICogd2l0aG91dCBydW5uaW5nIHRoZSBwbHVnaW4gaGVyZS5cbiAgICovXG4gIHB1YmxpYyBhZGRNYW5hZ2VkUGx1Z2luKHNwZWM6IHN0cmluZywgb3B0aW9uczogamF2YS5QbHVnaW5PcHRpb25zID0ge30pOiB2b2lkIHtcbiAgICB0aGlzLm1lcmdlUGx1Z2luKHRoaXMubWFuYWdlZFBsdWdpbnMsIHBhcnNlTWF2ZW5TcGVjKHNwZWMpLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKiBUcnVlIGlmIGEgcGx1Z2luIHdpdGggdGhlc2UgYGdyb3VwSWQvYXJ0aWZhY3RJZGAgY29vcmRpbmF0ZXMgaXMgaW4gYDxwbHVnaW5zPmAuICovXG4gIHB1YmxpYyBoYXNQbHVnaW4oY29vcmRpbmF0ZXM6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBsdWdpbnMuaGFzKGNvb3JkaW5hdGVzKTtcbiAgfVxuXG4gIC8qKiBBZGRzIGEgYDxyZXBvc2l0b3J5PmAuICovXG4gIHB1YmxpYyBhZGRSZXBvc2l0b3J5KHJlcG9zaXRvcnk6IGphdmEuTWF2ZW5SZXBvc2l0b3J5KTogdm9pZCB7XG4gICAgdGhpcy5yZXBvc2l0b3JpZXMucHVzaChyZXBvc2l0b3J5KTtcbiAgfVxuXG4gIC8qKiBBZGRzIGEgYDxwbHVnaW5SZXBvc2l0b3J5PmAuICovXG4gIHB1YmxpYyBhZGRQbHVnaW5SZXBvc2l0b3J5KHJlcG9zaXRvcnk6IGphdmEuTWF2ZW5SZXBvc2l0b3J5KTogdm9pZCB7XG4gICAgdGhpcy5wbHVnaW5SZXBvc2l0b3JpZXMucHVzaChyZXBvc2l0b3J5KTtcbiAgfVxuXG4gIHByaXZhdGUgbWVyZ2VEZXBlbmRlbmN5KFxuICAgIHRhcmdldDogTWFwPHN0cmluZywgRGVwZW5kZW5jeUVudHJ5PixcbiAgICBlbnRyeTogRGVwZW5kZW5jeUVudHJ5LFxuICAgIHNlY3Rpb246IHN0cmluZyxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgayA9IGtleShlbnRyeS5jb29yZHMpO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gdGFyZ2V0LmdldChrKTtcbiAgICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgICB0YXJnZXQuc2V0KGssIGVudHJ5KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdmVyc2lvbiA9IG1lcmdlVmVyc2lvbihleGlzdGluZy5jb29yZHMsIGVudHJ5LmNvb3Jkcywgc2VjdGlvbik7XG4gICAgdGFyZ2V0LnNldChrLCB7XG4gICAgICBjb29yZHM6IHsgLi4uZW50cnkuY29vcmRzLCB2ZXJzaW9uIH0sXG4gICAgICBzY29wZTogZW50cnkuc2NvcGUgPz8gZXhpc3Rpbmcuc2NvcGUsXG4gICAgICB0eXBlOiBlbnRyeS50eXBlID8/IGV4aXN0aW5nLnR5cGUsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG1lcmdlUGx1Z2luKFxuICAgIHRhcmdldDogTWFwPHN0cmluZywgUGx1Z2luRW50cnk+LFxuICAgIGNvb3JkczogTWF2ZW5Db29yZGluYXRlcyxcbiAgICBvcHRpb25zOiBqYXZhLlBsdWdpbk9wdGlvbnMsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGsgPSBrZXkoY29vcmRzKTtcbiAgICBjb25zdCBleGlzdGluZyA9IHRhcmdldC5nZXQoayk7XG4gICAgaWYgKCFleGlzdGluZykge1xuICAgICAgdGFyZ2V0LnNldChrLCB7IGNvb3Jkcywgb3B0aW9ucyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdmVyc2lvbiA9IG1lcmdlVmVyc2lvbihleGlzdGluZy5jb29yZHMsIGNvb3JkcywgJ3BsdWdpbnMnKTtcbiAgICBjb25zdCBleGVjdXRpb25zID0gWy4uLihleGlzdGluZy5vcHRpb25zLmV4ZWN1dGlvbnMgPz8gW10pXTtcbiAgICBmb3IgKGNvbnN0IGUgb2Ygb3B0aW9ucy5leGVjdXRpb25zID8/IFtdKSB7XG4gICAgICBjb25zdCBpID0gZXhlY3V0aW9ucy5maW5kSW5kZXgoKHgpID0+IHguaWQgPT09IGUuaWQpO1xuICAgICAgaWYgKGkgPT09IC0xKSB7XG4gICAgICAgIGV4ZWN1dGlvbnMucHVzaChlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4ZWN1dGlvbnNbaV0gPSBlO1xuICAgICAgfVxuICAgIH1cbiAgICB0YXJnZXQuc2V0KGssIHtcbiAgICAgIGNvb3JkczogeyAuLi5jb29yZHMsIHZlcnNpb24gfSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgY29uZmlndXJhdGlvbjpcbiAgICAgICAgICBleGlzdGluZy5vcHRpb25zLmNvbmZpZ3VyYXRpb24gfHwgb3B0aW9ucy5jb25maWd1cmF0aW9uXG4gICAgICAgICAgICA/IHsgLi4uZXhpc3Rpbmcub3B0aW9ucy5jb25maWd1cmF0aW9uLCAuLi5vcHRpb25zLmNvbmZpZ3VyYXRpb24gfVxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGV4ZWN1dGlvbnM6IGV4ZWN1dGlvbnMubGVuZ3RoID8gZXhlY3V0aW9ucyA6IHVuZGVmaW5lZCxcbiAgICAgICAgZGVwZW5kZW5jaWVzOiBbXG4gICAgICAgICAgLi4uKGV4aXN0aW5nLm9wdGlvbnMuZGVwZW5kZW5jaWVzID8/IFtdKSxcbiAgICAgICAgICAuLi4ob3B0aW9ucy5kZXBlbmRlbmNpZXMgPz8gW10pLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGA8cGx1Z2lucz5gIGFuZCBgPHBsdWdpbk1hbmFnZW1lbnQ+YC4gV2l0aCBgbWFuYWdlUGx1Z2luVmVyc2lvbnNgLFxuICAgKiBhIHZlcnNpb25lZCBwbHVnaW4ncyB2ZXJzaW9uIG1vdmVzIGludG8gYDxwbHVnaW5NYW5hZ2VtZW50PmAgKHVubGVzcyBvbmVcbiAgICogaXMgYWxyZWFkeSBtYW5hZ2VkIHRoZXJlKSBhbmQgdGhlIHBsdWdpbiBpdHNlbGYgaXMgcmVuZGVyZWQgdmVyc2lvbmxlc3MuXG4gICAqL1xuICBwcml2YXRlIHJlbmRlclBsdWdpbnMoKTogeyBwbHVnaW5zOiBhbnlbXTsgcGx1Z2luTWFuYWdlbWVudDogYW55W10gfSB7XG4gICAgY29uc3QgbWFuYWdlZFBsdWdpbnMgPSBuZXcgTWFwKHRoaXMubWFuYWdlZFBsdWdpbnMpO1xuICAgIGNvbnN0IHBsdWdpbnM6IGFueVtdID0gW107XG4gICAgZm9yIChjb25zdCBwIG9mIHRoaXMucGx1Z2lucy52YWx1ZXMoKSkge1xuICAgICAgaWYgKHRoaXMubWFuYWdlUGx1Z2luVmVyc2lvbnMgJiYgcC5jb29yZHMudmVyc2lvbikge1xuICAgICAgICBjb25zdCBrID0ga2V5KHAuY29vcmRzKTtcbiAgICAgICAgaWYgKCFtYW5hZ2VkUGx1Z2lucy5oYXMoaykpIHtcbiAgICAgICAgICBtYW5hZ2VkUGx1Z2lucy5zZXQoaywgeyBjb29yZHM6IHAuY29vcmRzLCBvcHRpb25zOiB7fSB9KTtcbiAgICAgICAgfVxuICAgICAgICBwbHVnaW5zLnB1c2gocmVuZGVyUGx1Z2luKHsgLi4ucC5jb29yZHMsIHZlcnNpb246IHVuZGVmaW5lZCB9LCBwLm9wdGlvbnMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBsdWdpbnMucHVzaChyZW5kZXJQbHVnaW4ocC5jb29yZHMsIHAub3B0aW9ucykpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBwbHVnaW5NYW5hZ2VtZW50ID0gWy4uLm1hbmFnZWRQbHVnaW5zLnZhbHVlcygpXS5tYXAoKHApID0+XG4gICAgICByZW5kZXJQbHVnaW4ocC5jb29yZHMsIHAub3B0aW9ucyksXG4gICAgKTtcbiAgICByZXR1cm4geyBwbHVnaW5zLCBwbHVnaW5NYW5hZ2VtZW50IH07XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckRlcGVuZGVuY3lNYW5hZ2VtZW50KCk6IGFueSB7XG4gICAgY29uc3QgbWFuYWdlZCA9IFtcbiAgICAgIC4uLnRoaXMuYm9tcy5tYXAoKGIpID0+ICh7IC4uLnJlbmRlckNvb3JkcyhiKSwgdHlwZTogJ3BvbScsIHNjb3BlOiAnaW1wb3J0JyB9KSksXG4gICAgICAuLi5bLi4udGhpcy5tYW5hZ2VkRGVwcy52YWx1ZXMoKV0ubWFwKHJlbmRlckRlcGVuZGVuY3kpLFxuICAgIF07XG4gICAgcmV0dXJuIG1hbmFnZWQubGVuZ3RoID8geyBkZXBlbmRlbmNpZXM6IHsgZGVwZW5kZW5jeTogbWFuYWdlZCB9IH0gOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIHN5bnRoUG9tKCk6IGFueSB7XG4gICAgY29uc3QgeyBwbHVnaW5zLCBwbHVnaW5NYW5hZ2VtZW50IH0gPSB0aGlzLnJlbmRlclBsdWdpbnMoKTtcblxuICAgIC8vIEpTT04gcm91bmQtdHJpcCBkcm9wcyBldmVyeSBgdW5kZWZpbmVkYCBmaWVsZCwgc28gYWJzZW50IHNlY3Rpb25zIGFyZVxuICAgIC8vIG9taXR0ZWQgcmF0aGVyIHRoYW4gd3JpdHRlbiBhcyBlbXB0eSBlbGVtZW50cy5cbiAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh7XG4gICAgICBwcm9qZWN0OiB7XG4gICAgICAgIC4uLlBPTV9YTUxfQVRUUlMsXG4gICAgICAgIG1vZGVsVmVyc2lvbjogJzQuMC4wJyxcbiAgICAgICAgcGFyZW50OiB0aGlzLnBhcmVudCxcbiAgICAgICAgZ3JvdXBJZDogdGhpcy5ncm91cElkLFxuICAgICAgICBhcnRpZmFjdElkOiB0aGlzLmFydGlmYWN0SWQsXG4gICAgICAgIHZlcnNpb246IHRoaXMudmVyc2lvbixcbiAgICAgICAgLy8gYGphcmAgaXMgTWF2ZW4ncyBkZWZhdWx0IGFuZCBpcyBsZWZ0IGltcGxpY2l0LlxuICAgICAgICBwYWNrYWdpbmc6IHRoaXMucGFja2FnaW5nID09PSAnamFyJyA/IHVuZGVmaW5lZCA6IHRoaXMucGFja2FnaW5nLFxuICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgICB1cmw6IHRoaXMudXJsLFxuICAgICAgICBtb2R1bGVzOiB0aGlzLm1vZHVsZXMubGVuZ3RoID8geyBtb2R1bGU6IHRoaXMubW9kdWxlcyB9IDogdW5kZWZpbmVkLFxuICAgICAgICBwcm9wZXJ0aWVzOiBPYmplY3Qua2V5cyh0aGlzLnByb3BlcnRpZXMpLmxlbmd0aCA/IHRoaXMucHJvcGVydGllcyA6IHVuZGVmaW5lZCxcbiAgICAgICAgcmVwb3NpdG9yaWVzOiB0aGlzLnJlcG9zaXRvcmllcy5sZW5ndGhcbiAgICAgICAgICA/IHsgcmVwb3NpdG9yeTogdGhpcy5yZXBvc2l0b3JpZXMgfVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBwbHVnaW5SZXBvc2l0b3JpZXM6IHRoaXMucGx1Z2luUmVwb3NpdG9yaWVzLmxlbmd0aFxuICAgICAgICAgID8geyBwbHVnaW5SZXBvc2l0b3J5OiB0aGlzLnBsdWdpblJlcG9zaXRvcmllcyB9XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGRlcGVuZGVuY3lNYW5hZ2VtZW50OiB0aGlzLnJlbmRlckRlcGVuZGVuY3lNYW5hZ2VtZW50KCksXG4gICAgICAgIGRlcGVuZGVuY2llczogdGhpcy5kZXBzLnNpemVcbiAgICAgICAgICA/IHsgZGVwZW5kZW5jeTogWy4uLnRoaXMuZGVwcy52YWx1ZXMoKV0ubWFwKHJlbmRlckRlcGVuZGVuY3kpIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgYnVpbGQ6IHJlbmRlckJ1aWxkKHBsdWdpbnMsIHBsdWdpbk1hbmFnZW1lbnQpLFxuICAgICAgfSxcbiAgICB9KSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyQnVpbGQocGx1Z2luczogYW55W10sIHBsdWdpbk1hbmFnZW1lbnQ6IGFueVtdKTogYW55IHtcbiAgaWYgKCFwbHVnaW5zLmxlbmd0aCAmJiAhcGx1Z2luTWFuYWdlbWVudC5sZW5ndGgpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiB7XG4gICAgcGx1Z2luTWFuYWdlbWVudDogcGx1Z2luTWFuYWdlbWVudC5sZW5ndGhcbiAgICAgID8geyBwbHVnaW5zOiB7IHBsdWdpbjogcGx1Z2luTWFuYWdlbWVudCB9IH1cbiAgICAgIDogdW5kZWZpbmVkLFxuICAgIHBsdWdpbnM6IHBsdWdpbnMubGVuZ3RoID8geyBwbHVnaW46IHBsdWdpbnMgfSA6IHVuZGVmaW5lZCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VWZXJzaW9uKFxuICBleGlzdGluZzogTWF2ZW5Db29yZGluYXRlcyxcbiAgYWRkZWQ6IE1hdmVuQ29vcmRpbmF0ZXMsXG4gIHNlY3Rpb246IHN0cmluZyxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChleGlzdGluZy52ZXJzaW9uICYmIGFkZGVkLnZlcnNpb24gJiYgZXhpc3RpbmcudmVyc2lvbiAhPT0gYWRkZWQudmVyc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGAke2tleShhZGRlZCl9IGlzIHBpbm5lZCBhdCB0d28gZGlmZmVyZW50IHZlcnNpb25zIGluICR7c2VjdGlvbn0gKCR7ZXhpc3RpbmcudmVyc2lvbn0gYW5kICR7YWRkZWQudmVyc2lvbn0pLiBQaW4gaXQgb25jZS5gLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGFkZGVkLnZlcnNpb24gPz8gZXhpc3RpbmcudmVyc2lvbjtcbn1cblxuZnVuY3Rpb24gcmVuZGVyQ29vcmRzKGM6IE1hdmVuQ29vcmRpbmF0ZXMpOiBhbnkge1xuICByZXR1cm4geyBncm91cElkOiBjLmdyb3VwSWQsIGFydGlmYWN0SWQ6IGMuYXJ0aWZhY3RJZCwgdmVyc2lvbjogYy52ZXJzaW9uIH07XG59XG5cbmZ1bmN0aW9uIHJlbmRlckRlcGVuZGVuY3koZDogRGVwZW5kZW5jeUVudHJ5KTogYW55IHtcbiAgcmV0dXJuIHsgLi4ucmVuZGVyQ29vcmRzKGQuY29vcmRzKSwgdHlwZTogZC50eXBlLCBzY29wZTogZC5zY29wZSB9O1xufVxuXG5mdW5jdGlvbiByZW5kZXJQbHVnaW4oYzogTWF2ZW5Db29yZGluYXRlcywgb3B0aW9uczogamF2YS5QbHVnaW5PcHRpb25zKTogYW55IHtcbiAgY29uc3QgZGVwcyA9IChvcHRpb25zLmRlcGVuZGVuY2llcyA/PyBbXSkubWFwKChkKSA9PiByZW5kZXJDb29yZHMocGFyc2VNYXZlblNwZWMoZCkpKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5yZW5kZXJDb29yZHMoYyksXG4gICAgY29uZmlndXJhdGlvbjogb3B0aW9ucy5jb25maWd1cmF0aW9uLFxuICAgIGRlcGVuZGVuY2llczogZGVwcy5sZW5ndGggPyB7IGRlcGVuZGVuY3k6IGRlcHMgfSA6IHVuZGVmaW5lZCxcbiAgICBleGVjdXRpb25zOiBvcHRpb25zLmV4ZWN1dGlvbnM/Lmxlbmd0aFxuICAgICAgPyB7XG4gICAgICAgIGV4ZWN1dGlvbjogb3B0aW9ucy5leGVjdXRpb25zLm1hcCgoZSkgPT4gKHtcbiAgICAgICAgICBpZDogZS5pZCxcbiAgICAgICAgICBwaGFzZTogZS5waGFzZSxcbiAgICAgICAgICAvLyBPbmUgPGdvYWxzPiBob2xkaW5nIGV2ZXJ5IDxnb2FsPiAtIG5vdCBvbmUgPGdvYWxzPiBwZXIgZ29hbC5cbiAgICAgICAgICBnb2FsczogeyBnb2FsOiBlLmdvYWxzIH0sXG4gICAgICAgICAgY29uZmlndXJhdGlvbjogZS5jb25maWd1cmF0aW9uLFxuICAgICAgICB9KSksXG4gICAgICB9XG4gICAgICA6IHVuZGVmaW5lZCxcbiAgfTtcbn1cbiJdfQ==
|