@mavogel/mvc-projen 0.0.13 → 0.0.15
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 +12 -11
- package/API.md +74 -6
- package/lib/projects/cdk-construct.js +12 -4
- package/mavogelmvcprojen/MvcCdkConstructLibrary.go +35 -8
- package/mavogelmvcprojen/MvcCdkConstructLibraryOptions.go +24 -5
- package/mavogelmvcprojen/MvcCdkConstructLibrary__checks.go +6 -6
- package/mavogelmvcprojen/MvcCdkConstructLibrary__no_checks.go +2 -2
- package/mavogelmvcprojen/go.mod +4 -4
- package/mavogelmvcprojen/jsii/jsii.go +2 -2
- package/mavogelmvcprojen/main.go +1 -0
- package/mavogelmvcprojen/version +1 -1
- package/package.json +20 -20
package/.jsii
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
]
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"constructs": "^10.
|
|
11
|
-
"projen": "0.
|
|
10
|
+
"constructs": "^10.5.1",
|
|
11
|
+
"projen": "^0.99.19"
|
|
12
12
|
},
|
|
13
13
|
"dependencyClosure": {
|
|
14
14
|
"constructs": {
|
|
@@ -51,6 +51,7 @@
|
|
|
51
51
|
"projen.javascript": {},
|
|
52
52
|
"projen.javascript.biome_config": {},
|
|
53
53
|
"projen.python": {},
|
|
54
|
+
"projen.python.uvConfig": {},
|
|
54
55
|
"projen.release": {},
|
|
55
56
|
"projen.typescript": {},
|
|
56
57
|
"projen.vscode": {},
|
|
@@ -82,7 +83,7 @@
|
|
|
82
83
|
"stability": "stable"
|
|
83
84
|
},
|
|
84
85
|
"homepage": "https://github.com/MV-Consulting/mvc-projen",
|
|
85
|
-
"jsiiVersion": "5.9.
|
|
86
|
+
"jsiiVersion": "5.9.32 (build ac92fbd)",
|
|
86
87
|
"keywords": [
|
|
87
88
|
"aws",
|
|
88
89
|
"cdk",
|
|
@@ -116,7 +117,7 @@
|
|
|
116
117
|
},
|
|
117
118
|
"python": {
|
|
118
119
|
"distName": "mvc-projen",
|
|
119
|
-
"module": "
|
|
120
|
+
"module": "mvc_projen"
|
|
120
121
|
}
|
|
121
122
|
},
|
|
122
123
|
"types": {
|
|
@@ -137,7 +138,7 @@
|
|
|
137
138
|
},
|
|
138
139
|
"locationInModule": {
|
|
139
140
|
"filename": "src/projects/cdk-construct.ts",
|
|
140
|
-
"line":
|
|
141
|
+
"line": 43
|
|
141
142
|
},
|
|
142
143
|
"parameters": [
|
|
143
144
|
{
|
|
@@ -151,7 +152,7 @@
|
|
|
151
152
|
"kind": "class",
|
|
152
153
|
"locationInModule": {
|
|
153
154
|
"filename": "src/projects/cdk-construct.ts",
|
|
154
|
-
"line":
|
|
155
|
+
"line": 41
|
|
155
156
|
},
|
|
156
157
|
"name": "MvcCdkConstructLibrary",
|
|
157
158
|
"symbolId": "src/projects/cdk-construct:MvcCdkConstructLibrary"
|
|
@@ -170,7 +171,7 @@
|
|
|
170
171
|
"kind": "interface",
|
|
171
172
|
"locationInModule": {
|
|
172
173
|
"filename": "src/projects/cdk-construct.ts",
|
|
173
|
-
"line":
|
|
174
|
+
"line": 20
|
|
174
175
|
},
|
|
175
176
|
"name": "MvcCdkConstructLibraryOptions",
|
|
176
177
|
"properties": [
|
|
@@ -184,7 +185,7 @@
|
|
|
184
185
|
"immutable": true,
|
|
185
186
|
"locationInModule": {
|
|
186
187
|
"filename": "src/projects/cdk-construct.ts",
|
|
187
|
-
"line":
|
|
188
|
+
"line": 26
|
|
188
189
|
},
|
|
189
190
|
"name": "baseAssetsDirectory",
|
|
190
191
|
"optional": true,
|
|
@@ -202,7 +203,7 @@
|
|
|
202
203
|
"immutable": true,
|
|
203
204
|
"locationInModule": {
|
|
204
205
|
"filename": "src/projects/cdk-construct.ts",
|
|
205
|
-
"line":
|
|
206
|
+
"line": 33
|
|
206
207
|
},
|
|
207
208
|
"name": "integTestRegions",
|
|
208
209
|
"optional": true,
|
|
@@ -219,6 +220,6 @@
|
|
|
219
220
|
"symbolId": "src/projects/cdk-construct:MvcCdkConstructLibraryOptions"
|
|
220
221
|
}
|
|
221
222
|
},
|
|
222
|
-
"version": "0.0.
|
|
223
|
-
"fingerprint": "
|
|
223
|
+
"version": "0.0.15",
|
|
224
|
+
"fingerprint": "q8AwJEAZfRxe/zWOi77S2m588lr/tXl5GOE2RtaL9Gs="
|
|
224
225
|
}
|
package/API.md
CHANGED
|
@@ -31,6 +31,7 @@ new MvcCdkConstructLibrary(options: MvcCdkConstructLibraryOptions)
|
|
|
31
31
|
| **Name** | **Description** |
|
|
32
32
|
| --- | --- |
|
|
33
33
|
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibrary.toString">toString</a></code> | Returns a string representation of this construct. |
|
|
34
|
+
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibrary.with">with</a></code> | Applies one or more mixins to this construct. |
|
|
34
35
|
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibrary.addExcludeFromCleanup">addExcludeFromCleanup</a></code> | Exclude the matching files from pre-synth cleanup. |
|
|
35
36
|
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibrary.addGitIgnore">addGitIgnore</a></code> | Adds a .gitignore pattern. |
|
|
36
37
|
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibrary.addPackageIgnore">addPackageIgnore</a></code> | Adds patterns to be ignored by npm. |
|
|
@@ -73,6 +74,27 @@ public toString(): string
|
|
|
73
74
|
|
|
74
75
|
Returns a string representation of this construct.
|
|
75
76
|
|
|
77
|
+
##### `with` <a name="with" id="@mavogel/mvc-projen.MvcCdkConstructLibrary.with"></a>
|
|
78
|
+
|
|
79
|
+
```typescript
|
|
80
|
+
public with(mixins: ...IMixin[]): IConstruct
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Applies one or more mixins to this construct.
|
|
84
|
+
|
|
85
|
+
Mixins are applied in order. The list of constructs is captured at the
|
|
86
|
+
start of the call, so constructs added by a mixin will not be visited.
|
|
87
|
+
Use multiple `with()` calls if subsequent mixins should apply to added
|
|
88
|
+
constructs.
|
|
89
|
+
|
|
90
|
+
###### `mixins`<sup>Required</sup> <a name="mixins" id="@mavogel/mvc-projen.MvcCdkConstructLibrary.with.parameter.mixins"></a>
|
|
91
|
+
|
|
92
|
+
- *Type:* ...constructs.IMixin[]
|
|
93
|
+
|
|
94
|
+
The mixins to apply.
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
76
98
|
##### `addExcludeFromCleanup` <a name="addExcludeFromCleanup" id="@mavogel/mvc-projen.MvcCdkConstructLibrary.addExcludeFromCleanup"></a>
|
|
77
99
|
|
|
78
100
|
```typescript
|
|
@@ -1618,6 +1640,7 @@ const mvcCdkConstructLibraryOptions: MvcCdkConstructLibraryOptions = { ... }
|
|
|
1618
1640
|
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.logging">logging</a></code> | <code>projen.LoggerOptions</code> | Configure logging options such as verbosity. |
|
|
1619
1641
|
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.outdir">outdir</a></code> | <code>string</code> | The root directory of the project. |
|
|
1620
1642
|
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.parent">parent</a></code> | <code>projen.Project</code> | The parent project, if this project is part of a bigger project. |
|
|
1643
|
+
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.projectTree">projectTree</a></code> | <code>boolean</code> | Generate a project tree file (`.projen/tree.json`) that shows all components and their relationships. Useful for understanding your project structure and debugging. |
|
|
1621
1644
|
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.projenCommand">projenCommand</a></code> | <code>string</code> | The shell command to use in order to run the projen CLI. |
|
|
1622
1645
|
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.projenrcJson">projenrcJson</a></code> | <code>boolean</code> | Generate (once) .projenrc.json (in JSON). Set to `false` in order to disable .projenrc.json generation. |
|
|
1623
1646
|
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.projenrcJsonOptions">projenrcJsonOptions</a></code> | <code>projen.ProjenrcJsonOptions</code> | Options for .projenrc.json. |
|
|
@@ -1707,7 +1730,9 @@ const mvcCdkConstructLibraryOptions: MvcCdkConstructLibraryOptions = { ... }
|
|
|
1707
1730
|
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.workflowRunsOnGroup">workflowRunsOnGroup</a></code> | <code>projen.GroupRunnerOptions</code> | Github Runner Group selection options. |
|
|
1708
1731
|
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.defaultReleaseBranch">defaultReleaseBranch</a></code> | <code>string</code> | The name of the main release branch. |
|
|
1709
1732
|
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.artifactsDirectory">artifactsDirectory</a></code> | <code>string</code> | A directory which will contain build artifacts. |
|
|
1710
|
-
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.
|
|
1733
|
+
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.auditDeps">auditDeps</a></code> | <code>boolean</code> | Run security audit on dependencies. |
|
|
1734
|
+
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.auditDepsOptions">auditDepsOptions</a></code> | <code>projen.javascript.AuditOptions</code> | Security audit options. |
|
|
1735
|
+
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.autoApproveUpgrades">autoApproveUpgrades</a></code> | <code>boolean</code> | Automatically approve deps upgrade PRs, allowing them to be merged by mergify (if configured). |
|
|
1711
1736
|
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.biome">biome</a></code> | <code>boolean</code> | Setup Biome. |
|
|
1712
1737
|
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.biomeOptions">biomeOptions</a></code> | <code>projen.javascript.BiomeOptions</code> | Biome options. |
|
|
1713
1738
|
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.buildWorkflow">buildWorkflow</a></code> | <code>boolean</code> | Define a GitHub workflow for building PRs. |
|
|
@@ -1895,6 +1920,19 @@ The parent project, if this project is part of a bigger project.
|
|
|
1895
1920
|
|
|
1896
1921
|
---
|
|
1897
1922
|
|
|
1923
|
+
##### `projectTree`<sup>Optional</sup> <a name="projectTree" id="@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.projectTree"></a>
|
|
1924
|
+
|
|
1925
|
+
```typescript
|
|
1926
|
+
public readonly projectTree: boolean;
|
|
1927
|
+
```
|
|
1928
|
+
|
|
1929
|
+
- *Type:* boolean
|
|
1930
|
+
- *Default:* false
|
|
1931
|
+
|
|
1932
|
+
Generate a project tree file (`.projen/tree.json`) that shows all components and their relationships. Useful for understanding your project structure and debugging.
|
|
1933
|
+
|
|
1934
|
+
---
|
|
1935
|
+
|
|
1898
1936
|
##### `projenCommand`<sup>Optional</sup> <a name="projenCommand" id="@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.projenCommand"></a>
|
|
1899
1937
|
|
|
1900
1938
|
```typescript
|
|
@@ -3241,6 +3279,36 @@ A directory which will contain build artifacts.
|
|
|
3241
3279
|
|
|
3242
3280
|
---
|
|
3243
3281
|
|
|
3282
|
+
##### `auditDeps`<sup>Optional</sup> <a name="auditDeps" id="@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.auditDeps"></a>
|
|
3283
|
+
|
|
3284
|
+
```typescript
|
|
3285
|
+
public readonly auditDeps: boolean;
|
|
3286
|
+
```
|
|
3287
|
+
|
|
3288
|
+
- *Type:* boolean
|
|
3289
|
+
- *Default:* false
|
|
3290
|
+
|
|
3291
|
+
Run security audit on dependencies.
|
|
3292
|
+
|
|
3293
|
+
When enabled, creates an "audit" task that checks for known security vulnerabilities
|
|
3294
|
+
in dependencies. By default, runs during every build and checks for "high" severity
|
|
3295
|
+
vulnerabilities or above in all dependencies (including dev dependencies).
|
|
3296
|
+
|
|
3297
|
+
---
|
|
3298
|
+
|
|
3299
|
+
##### `auditDepsOptions`<sup>Optional</sup> <a name="auditDepsOptions" id="@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.auditDepsOptions"></a>
|
|
3300
|
+
|
|
3301
|
+
```typescript
|
|
3302
|
+
public readonly auditDepsOptions: AuditOptions;
|
|
3303
|
+
```
|
|
3304
|
+
|
|
3305
|
+
- *Type:* projen.javascript.AuditOptions
|
|
3306
|
+
- *Default:* default options
|
|
3307
|
+
|
|
3308
|
+
Security audit options.
|
|
3309
|
+
|
|
3310
|
+
---
|
|
3311
|
+
|
|
3244
3312
|
##### `autoApproveUpgrades`<sup>Optional</sup> <a name="autoApproveUpgrades" id="@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.autoApproveUpgrades"></a>
|
|
3245
3313
|
|
|
3246
3314
|
```typescript
|
|
@@ -3250,7 +3318,7 @@ public readonly autoApproveUpgrades: boolean;
|
|
|
3250
3318
|
- *Type:* boolean
|
|
3251
3319
|
- *Default:* true
|
|
3252
3320
|
|
|
3253
|
-
Automatically approve deps upgrade PRs, allowing them to be merged by mergify (if
|
|
3321
|
+
Automatically approve deps upgrade PRs, allowing them to be merged by mergify (if configured).
|
|
3254
3322
|
|
|
3255
3323
|
Throw if set to true but `autoApproveOptions` are not defined.
|
|
3256
3324
|
|
|
@@ -3436,7 +3504,7 @@ public readonly depsUpgrade: boolean;
|
|
|
3436
3504
|
```
|
|
3437
3505
|
|
|
3438
3506
|
- *Type:* boolean
|
|
3439
|
-
- *Default:* true
|
|
3507
|
+
- *Default:* `true` for root projects, `false` for subprojects
|
|
3440
3508
|
|
|
3441
3509
|
Use tasks and github workflows to handle dependency upgrades.
|
|
3442
3510
|
|
|
@@ -4138,7 +4206,7 @@ public readonly jsiiVersion: string;
|
|
|
4138
4206
|
```
|
|
4139
4207
|
|
|
4140
4208
|
- *Type:* string
|
|
4141
|
-
- *Default:* "~5.
|
|
4209
|
+
- *Default:* "~5.9.0"
|
|
4142
4210
|
|
|
4143
4211
|
Version of the jsii compiler to use.
|
|
4144
4212
|
|
|
@@ -4257,7 +4325,7 @@ public readonly cdkVersion: string;
|
|
|
4257
4325
|
```
|
|
4258
4326
|
|
|
4259
4327
|
- *Type:* string
|
|
4260
|
-
- *Default:* "2.1
|
|
4328
|
+
- *Default:* "2.189.1"
|
|
4261
4329
|
|
|
4262
4330
|
Minimum version of the AWS CDK to depend on.
|
|
4263
4331
|
|
|
@@ -4386,7 +4454,7 @@ public readonly constructsVersion: string;
|
|
|
4386
4454
|
```
|
|
4387
4455
|
|
|
4388
4456
|
- *Type:* string
|
|
4389
|
-
- *Default:* for CDK 1.x the default is "3.2.27", for CDK 2.x the default is "10.
|
|
4457
|
+
- *Default:* for CDK 1.x the default is "3.2.27", for CDK 2.x the default is "10.5.1".
|
|
4390
4458
|
|
|
4391
4459
|
Minimum version of the `constructs` library to depend on.
|
|
4392
4460
|
|
|
@@ -12,6 +12,9 @@ const github_1 = require("projen/lib/github");
|
|
|
12
12
|
// Set the minimum node version for AWS CDK and the GitHub actions workflow
|
|
13
13
|
const nodeVersion = '22.x';
|
|
14
14
|
const lambdaNodeVersion = awscdk_1.LambdaRuntime.NODEJS_22_X;
|
|
15
|
+
// The last CDK version for which @aws-cdk/integ-runner, @aws-cdk/integ-tests-alpha,
|
|
16
|
+
// and awslint alpha packages were published.
|
|
17
|
+
const LAST_CDK_ALPHA_VERSION = '2.197.4';
|
|
15
18
|
/**
|
|
16
19
|
* TypeScript library
|
|
17
20
|
*
|
|
@@ -221,8 +224,13 @@ add tools or links which inspired you
|
|
|
221
224
|
this.gitignore.exclude(file);
|
|
222
225
|
}
|
|
223
226
|
this.addDeps('cdk-nag@^2.37.55');
|
|
224
|
-
|
|
225
|
-
|
|
227
|
+
// Cap alpha package versions at LAST_CDK_ALPHA_VERSION since these packages
|
|
228
|
+
// stopped publishing after that version.
|
|
229
|
+
const rawCdkVersion = this.cdkVersion.replace(/[\^~]/, '');
|
|
230
|
+
const alphaVersion = rawCdkVersion.localeCompare(LAST_CDK_ALPHA_VERSION, undefined, { numeric: true, sensitivity: 'base' }) > 0
|
|
231
|
+
? LAST_CDK_ALPHA_VERSION
|
|
232
|
+
: rawCdkVersion;
|
|
233
|
+
this.addDevDeps(`@aws-cdk/integ-runner@${alphaVersion}-alpha.0`, `@aws-cdk/integ-tests-alpha@${alphaVersion}-alpha.0`, '@commitlint/cli@^20.1.0', '@commitlint/config-conventional@^20.0.0', `awslint@${alphaVersion}-alpha.0`, 'husky@^9.1.7');
|
|
226
234
|
this.package.setScript('prepare', 'husky');
|
|
227
235
|
new projen_1.TextFile(this, '.commitlintrc.js', {
|
|
228
236
|
lines: [
|
|
@@ -280,7 +288,7 @@ add tools or links which inspired you
|
|
|
280
288
|
}
|
|
281
289
|
exports.MvcCdkConstructLibrary = MvcCdkConstructLibrary;
|
|
282
290
|
_a = JSII_RTTI_SYMBOL_1;
|
|
283
|
-
MvcCdkConstructLibrary[_a] = { fqn: "@mavogel/mvc-projen.MvcCdkConstructLibrary", version: "0.0.
|
|
291
|
+
MvcCdkConstructLibrary[_a] = { fqn: "@mavogel/mvc-projen.MvcCdkConstructLibrary", version: "0.0.15" };
|
|
284
292
|
class SampleCode extends projen_1.Component {
|
|
285
293
|
constructor(library, options) {
|
|
286
294
|
super(library);
|
|
@@ -347,4 +355,4 @@ class SampleCode extends projen_1.Component {
|
|
|
347
355
|
fs.writeFileSync(path.join(examplesdir, 'main.ts'), fs.readFileSync(`${this.options.baseAssetsDirectory}/cdk-construct/examples_simple_main.ts`).toString());
|
|
348
356
|
}
|
|
349
357
|
}
|
|
350
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWNvbnN0cnVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9qZWN0cy9jZGstY29uc3RydWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QixxQ0FBOEI7QUFDOUIsbUNBQXNGO0FBQ3RGLDhDQUF5RztBQUN6Ryw4Q0FBK0Q7QUFHL0QsMkVBQTJFO0FBQzNFLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUMzQixNQUFNLGlCQUFpQixHQUFHLHNCQUFhLENBQUMsV0FBVyxDQUFDO0FBcUJwRDs7OztHQUlHO0FBQ0gsTUFBYSxzQkFBdUIsU0FBUSwrQkFBc0I7SUFFaEUsWUFBWSxPQUFzQztRQUNoRCxNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsSUFBSSxHQUFHLElBQUEsYUFBRyxHQUFFLDBDQUEwQyxDQUFDO1FBQzlHLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixJQUFJLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRWhGLEtBQUssQ0FBQztZQUNKLGtCQUFrQixFQUFFLElBQUk7WUFDeEIsY0FBYyxFQUFFLG9CQUFvQjtZQUNwQyxlQUFlLEVBQUUsTUFBTTtZQUN2QixPQUFPLEVBQUUsWUFBWTtZQUNyQixXQUFXLEVBQUUsUUFBUTtZQUNyQixjQUFjLEVBQUUsV0FBVztZQUMzQixtQkFBbUIsRUFBRSxXQUFXO1lBQ2hDLFNBQVMsRUFBRSxjQUFjO1lBQ3pCLFlBQVksRUFBRSxJQUFJO1lBQ2xCLGNBQWMsRUFBRSxtQkFBVSxDQUFDLGtCQUFrQixDQUFDLEdBQUc7WUFDakQsU0FBUyxFQUFFLG1CQUFVLENBQUMsU0FBUyxDQUFDLE1BQU07WUFDdEMsYUFBYSxFQUFFO2dCQUNiLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLHFCQUFxQixFQUFFLEtBQUssRUFBRSxpQ0FBaUM7YUFDaEU7WUFDRCxrQkFBa0IsRUFBRTtnQkFDbEIsZ0JBQWdCLEVBQUU7b0JBQ2hCLFlBQVk7b0JBQ1osaUJBQWlCO29CQUNqQixZQUFZO29CQUNaLHFCQUFxQjtvQkFDckIsU0FBUztpQkFDVjtnQkFDRCx3SEFBd0g7Z0JBQ3hILGdHQUFnRztnQkFDaEcscUNBQXFDO2dCQUNyQyxNQUFNLEVBQUUscUJBQXFCO2FBQzlCO1lBQ0QsVUFBVSxFQUFFLElBQUk7WUFDaEIsaUJBQWlCLEVBQUU7Z0JBQ2pCLGdCQUFnQixFQUFFLG1DQUEwQixDQUFDLE1BQU07Z0JBQ25ELE1BQU0sRUFBRSxDQUFDLGNBQWMsRUFBRSxjQUFjLENBQUM7Z0JBQ3hDLE1BQU0sRUFBRTtvQkFDTixPQUFPLEVBQUU7d0JBQ1AsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDO3dCQUNmLGVBQWUsRUFBRSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUM7cUJBQ3hDO2lCQUNGO2dCQUNELE1BQU0sRUFBRSxDQUFDLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxDQUFDO2FBQzNFO1lBQ0Qsc0ZBQXNGO1lBQ3RGLGlCQUFpQixFQUFFLDBCQUFpQixDQUFDLE1BQU0sQ0FBQztnQkFDMUMsTUFBTTtnQkFDTixLQUFLO2dCQUNMLE9BQU87Z0JBQ1AsVUFBVTtnQkFDVixNQUFNO2FBQ1AsQ0FBQztZQUNGLGFBQWEsRUFBRTtnQkFDYixzQkFBc0IsRUFBRTtvQkFDdEIsb0JBQW9CLEVBQUU7d0JBQ3BCLGdGQUFnRjt3QkFDaEYsS0FBSyxFQUFFOzRCQUNMLE1BQU07NEJBQ04sS0FBSzs0QkFDTCxPQUFPOzRCQUNQLFVBQVU7NEJBQ1YsTUFBTTs0QkFDTixNQUFNOzRCQUNOLE9BQU87NEJBQ1AsTUFBTTs0QkFDTixPQUFPOzRCQUNQLElBQUk7eUJBQ0w7cUJBQ0Y7aUJBQ0Y7YUFDRjtZQUNELGdCQUFnQixFQUFFO2dCQUNoQixLQUFLLEVBQUU7b0JBQ0wsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUU7b0JBQ3JDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFO29CQUNyQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRTtvQkFDcEMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUU7b0JBQ2pDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO29CQUMvQixFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtvQkFDbEMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUU7b0JBQ3hDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2lCQUMvQjthQUNGO1lBQ0QsYUFBYSxFQUFFO2dCQUNiLFFBQVEsRUFBRSxLQUFLO2dCQUNmLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQztnQkFDYixjQUFjLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxXQUFXLENBQUM7YUFDbEQ7WUFDRCxpQ0FBaUM7WUFDakMsMEJBQTBCO1lBQzFCLFdBQVcsRUFBRTtnQkFDWCxlQUFlLEVBQUUsRUFBRTtnQkFDbkIsT0FBTyxFQUFFLENBQUMscUJBQXFCLENBQUM7YUFDakM7WUFDRCwyQkFBMkIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxtQkFBbUIsZ0NBQWdDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNqSCw4RkFBOEY7WUFDOUYscUJBQXFCO1lBQ3JCLE1BQU0sRUFBRTtnQkFDTixRQUFRLEVBQUU7b0JBQ1I7OERBQ29ELE9BQU8sQ0FBQyxJQUFJO29EQUN0QixPQUFPLENBQUMsSUFBSSw2RUFBNkUsT0FBTyxDQUFDLElBQUk7O3lFQUVoRixPQUFPLENBQUMsSUFBSSwyQ0FBMkMsT0FBTyxDQUFDLElBQUk7Z0VBQzVFLE9BQU8sQ0FBQyxJQUFJO2lEQUMzQixPQUFPLENBQUMsSUFBSSxvRUFBb0UsT0FBTyxDQUFDLElBQUk7c0hBQ3ZCLE9BQU8sQ0FBQyxJQUFJO1dBQ3ZIO29CQUNELEtBQUssT0FBTyxDQUFDLElBQUksRUFBRTtvQkFDbkIsMkJBQTJCO29CQUMzQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFzQlUsT0FBTyxDQUFDLElBQUk7Ozs7Ozs7O3dDQVFRLE9BQU8sQ0FBQyxJQUFJOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztXQStDekM7b0JBQ0QsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLG1CQUFtQiw4QkFBOEIsQ0FBQyxDQUFDLFFBQVEsRUFBRTtpQkFDakYsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2FBQ2I7WUFDRCw2RUFBNkU7WUFDN0UsR0FBRyxPQUFPO1NBQ1gsQ0FBQyxDQUFDO1FBRUgsWUFBWTtRQUNaLE1BQU0sdUJBQXVCLEdBQUc7WUFDOUIsS0FBSztZQUNMLFVBQVU7U0FDWCxDQUFDO1FBQ0YsS0FBSyxNQUFNLElBQUksSUFBSSx1QkFBdUIsRUFBRSxDQUFDO1lBQzNDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUNWLGtCQUFrQixDQUNuQixDQUFDO1FBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FDYix5QkFBeUIsSUFBSSxDQUFDLFVBQVUsVUFBVSxFQUFFLHFDQUFxQztRQUN6Riw4QkFBOEIsSUFBSSxDQUFDLFVBQVUsVUFBVSxFQUN2RCx5QkFBeUIsRUFDekIseUNBQXlDLEVBQ3pDLFdBQVcsSUFBSSxDQUFDLFVBQVUsVUFBVSxFQUNwQyxjQUFjLENBQ2YsQ0FBQztRQUVGLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMzQyxJQUFJLGlCQUFRLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFO1lBQ3JDLEtBQUssRUFBRTtnQkFDTCxzRUFBc0U7YUFDdkU7WUFDRCxNQUFNLEVBQUUsSUFBSTtTQUNiLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM3Qyw4QkFBOEI7UUFDOUIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLGFBQWE7WUFBRSxPQUFPO1FBQzNCLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLFFBQVEsQ0FBQztZQUFFLE9BQU87UUFDaEQsbUNBQW1DO1FBQ25DLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxLQUFtQyxDQUFDO1FBQ25FLE1BQU0sYUFBYSxHQUFHLGFBQWEsRUFBRSxDQUFDO1FBQ3RDLGFBQWEsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFO1lBQy9CLEdBQUcsUUFBUTtZQUNYLEtBQUssRUFBRTtnQkFDTCxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDNUI7b0JBQ0UsSUFBSSxFQUFFLGFBQWE7b0JBQ25CLEdBQUcsRUFBRSxpQkFBaUI7aUJBQ3ZCO2dCQUNELEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDMUI7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FDcEIsWUFBWSxFQUNaLDBDQUEwQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxzQkFBc0IsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUN6SSxDQUFDO1FBRUYsSUFBSSxpQkFBUSxDQUFDLElBQUksRUFBRSxzQ0FBc0MsRUFBRTtZQUN6RCxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsbUJBQW1CLDhCQUE4QixDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDMUYsQ0FBQyxDQUFDO1FBRUgsSUFBSSxpQkFBUSxDQUFDLElBQUksRUFBRSwyQ0FBMkMsRUFBRTtZQUM5RCxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsbUJBQW1CLG1DQUFtQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDL0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxpQkFBUSxDQUFDLElBQUksRUFBRSxzQkFBc0IsRUFBRTtZQUN6QyxHQUFHLEVBQUU7Z0JBQ0gsTUFBTSxFQUFFLFNBQVM7YUFDbEI7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLGlCQUFRLENBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFO1lBQ3BDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxtQkFBbUIseUJBQXlCLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNyRixDQUFDLENBQUM7UUFFSCxJQUFJLGlCQUFRLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtZQUNoQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsbUJBQW1CLG9CQUFvQixDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDaEYsQ0FBQyxDQUFDO1FBRUgsaURBQWlEO1FBQ2pELElBQUksT0FBTyxDQUFDLFVBQVUsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUMvQixJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUU7Z0JBQ25CLG1CQUFtQjthQUNwQixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzs7QUF4Ukgsd0RBeVJDOzs7QUFNRCxNQUFNLFVBQVcsU0FBUSxrQkFBUztJQUloQyxZQUNFLE9BQStCLEVBQy9CLE9BQTBCO1FBRTFCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3pCLENBQUM7SUFFTSxVQUFVO1FBQ2YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDbkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0RCxJQUNFLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQ3JCLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZELENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sV0FBVyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUMsb0JBQW9CO1VBQ3JHLENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUVELEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDMUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsNkJBQTZCLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzlJLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsbUNBQW1DLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzFKLDZCQUE2QjtRQUM3QixFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxjQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMzRCxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLGNBQWMsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixtQ0FBbUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDM0ssRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxjQUFjLEVBQUUsdUJBQXVCLENBQUMsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsMENBQTBDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBR3pMLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEQsSUFDRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQztZQUN0QixFQUFFLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4RCxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxPQUFPLGdCQUFnQixDQUFDLENBQUMsb0JBQW9CO1VBQy9ELENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUNELGdGQUFnRjtRQUNoRixFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsT0FBTyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDM0MsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxlQUFlLENBQUMsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsbUNBQW1DLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzFKLCtCQUErQjtRQUMvQixFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsT0FBTyxjQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM1RCxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLGNBQWMsRUFBRSxxQkFBcUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQix5Q0FBeUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFHdkwsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDdEQsSUFDRSxFQUFFLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQztZQUMzQixFQUFFLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUM3RCxDQUFDO1lBQ0QsT0FBTztRQUNULENBQUM7UUFDRCxFQUFFLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsc0JBQXNCLENBQUMsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsMkNBQTJDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRTlLLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDbkUsSUFDRSxFQUFFLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDO1lBQ3BDLEVBQUUsQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDdEUsQ0FBQztZQUNELE9BQU87UUFDVCxDQUFDO1FBQ0QsRUFBRSxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixzQ0FBc0MsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFFN0ssTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDMUMsSUFDRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQztZQUN0QixFQUFFLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUM1RCxDQUFDO1lBQ0QsT0FBTztRQUNULENBQUM7UUFDRCxFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsb0JBQW9CLENBQUMsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsaUNBQWlDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRTdKLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM1RCxJQUNFLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO1lBQzFCLEVBQUUsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQ2hFLENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUNELEVBQUUsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDL0MsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsd0NBQXdDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQy9KLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBjd2QgfSBmcm9tICdwcm9jZXNzJztcbmltcG9ydCB7IENvbXBvbmVudCwgamF2YXNjcmlwdCwgUmVsZWFzYWJsZUNvbW1pdHMsIFRleHRGaWxlLCBZYW1sRmlsZSB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBBd3NDZGtDb25zdHJ1Y3RMaWJyYXJ5LCBBd3NDZGtDb25zdHJ1Y3RMaWJyYXJ5T3B0aW9ucywgTGFtYmRhUnVudGltZSB9IGZyb20gJ3Byb2plbi9saWIvYXdzY2RrJztcbmltcG9ydCB7IERlcGVuZGFib3RTY2hlZHVsZUludGVydmFsIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWInO1xuaW1wb3J0IHsgSm9iU3RlcCB9IGZyb20gJ3Byb2plbi9saWIvZ2l0aHViL3dvcmtmbG93cy1tb2RlbCc7XG5cbi8vIFNldCB0aGUgbWluaW11bSBub2RlIHZlcnNpb24gZm9yIEFXUyBDREsgYW5kIHRoZSBHaXRIdWIgYWN0aW9ucyB3b3JrZmxvd1xuY29uc3Qgbm9kZVZlcnNpb24gPSAnMjIueCc7XG5jb25zdCBsYW1iZGFOb2RlVmVyc2lvbiA9IExhbWJkYVJ1bnRpbWUuTk9ERUpTXzIyX1g7XG5cbi8qKlxuICogVGhlIG9wdGlvbnMgZm9yIHRoZSBjb25zdHJ1Y3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNdmNDZGtDb25zdHJ1Y3RMaWJyYXJ5T3B0aW9ucyBleHRlbmRzIEF3c0Nka0NvbnN0cnVjdExpYnJhcnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIEJhc2UgZGlyZWN0b3J5IGZvciB0aGUgYXNzZXRzXG4gICAqXG4gICAqIEBkZWZhdWx0ICR7Y3dkKCl9L25vZGVfbW9kdWxlcy9tdmMtcHJvamVuL2Fzc2V0c1xuICAgKi9cbiAgcmVhZG9ubHkgYmFzZUFzc2V0c0RpcmVjdG9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJlZ2lvbnMgdG8gcnVuIHRoZSBpbnRlZyB0ZXN0cyBpblxuICAgKlxuICAgKiBAZGVmYXVsdCBldS13ZXN0LTEgYW5kIGV1LXdlc3QtMlxuICAgKi9cbiAgcmVhZG9ubHkgaW50ZWdUZXN0UmVnaW9ucz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFR5cGVTY3JpcHQgbGlicmFyeVxuICpcbiAqIEBwamlkIG12Yy1hd3NjZGstY29uc3RydWN0XG4gKi9cbmV4cG9ydCBjbGFzcyBNdmNDZGtDb25zdHJ1Y3RMaWJyYXJ5IGV4dGVuZHMgQXdzQ2RrQ29uc3RydWN0TGlicmFyeSB7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogTXZjQ2RrQ29uc3RydWN0TGlicmFyeU9wdGlvbnMpIHtcbiAgICBjb25zdCBiYXNlQXNzZXRzRGlyZWN0b3J5ID0gb3B0aW9ucy5iYXNlQXNzZXRzRGlyZWN0b3J5ID8/IGAke2N3ZCgpfS9ub2RlX21vZHVsZXMvQG1hdm9nZWwvbXZjLXByb2plbi9hc3NldHNgO1xuICAgIGNvbnN0IGludGVnVGVzdFJlZ2lvbnMgPSBvcHRpb25zLmludGVnVGVzdFJlZ2lvbnMgPz8gWydldS13ZXN0LTEnLCAnZXUtd2VzdC0yJ107XG5cbiAgICBzdXBlcih7XG4gICAgICBhdXRob3JPcmdhbml6YXRpb246IHRydWUsXG4gICAgICBjb3B5cmlnaHRPd25lcjogJ01WIENvbnN1bHRpbmcgR21iSCcsXG4gICAgICBjb3B5cmlnaHRQZXJpb2Q6ICcyMDI1JyxcbiAgICAgIGxpY2Vuc2U6ICdBcGFjaGUtMi4wJyxcbiAgICAgIGpzaWlWZXJzaW9uOiAnfjUuOS4wJyxcbiAgICAgIG1pbk5vZGVWZXJzaW9uOiBub2RlVmVyc2lvbixcbiAgICAgIHdvcmtmbG93Tm9kZVZlcnNpb246IG5vZGVWZXJzaW9uLFxuICAgICAgc3RhYmlsaXR5OiAnZXhwZXJpbWVudGFsJyxcbiAgICAgIHJlbGVhc2VUb05wbTogdHJ1ZSxcbiAgICAgIHBhY2thZ2VNYW5hZ2VyOiBqYXZhc2NyaXB0Lk5vZGVQYWNrYWdlTWFuYWdlci5OUE0sXG4gICAgICBucG1BY2Nlc3M6IGphdmFzY3JpcHQuTnBtQWNjZXNzLlBVQkxJQyxcbiAgICAgIGxhbWJkYU9wdGlvbnM6IHtcbiAgICAgICAgcnVudGltZTogbGFtYmRhTm9kZVZlcnNpb24sXG4gICAgICAgIGF3c1Nka0Nvbm5lY3Rpb25SZXVzZTogZmFsc2UsIC8vIGRvZXNuJ3QgZXhpc3QgaW4gQVdTIFNESyBKUyB2M1xuICAgICAgfSxcbiAgICAgIGF1dG9BcHByb3ZlT3B0aW9uczoge1xuICAgICAgICBhbGxvd2VkVXNlcm5hbWVzOiBbXG4gICAgICAgICAgJ2RlcGVuZGFib3QnLFxuICAgICAgICAgICdkZXBlbmRhYm90W2JvdF0nLFxuICAgICAgICAgICdnaXRodWItYm90JyxcbiAgICAgICAgICAnZ2l0aHViLWFjdGlvbnNbYm90XScsXG4gICAgICAgICAgJ212Yy1ib3QnLFxuICAgICAgICBdLFxuICAgICAgICAvLyBUaGUgbmFtZSBvZiB0aGUgc2VjcmV0IHRoYXQgaGFzIHRoZSBHaXRIdWIgUEFUIGZvciBhdXRvLWFwcHJvdmluZyBQUnMgd2l0aCBwZXJtaXNzaW9ucyByZXBvLCB3b3JrZmxvdywgd3JpdGU6cGFja2FnZXNcbiAgICAgICAgLy8gR2VuZXJhdGUgYSBuZXcgUEFUIChodHRwczovL2dpdGh1Yi5jb20vc2V0dGluZ3MvdG9rZW5zL25ldykgYW5kIGFkZCBpdCB0byB5b3VyIHJlcG8ncyBzZWNyZXRzXG4gICAgICAgIC8vIE5PVEU6IGNvbWVzIGZyb20gTVYtQ29uc3VsdGluZyBPcmdcbiAgICAgICAgc2VjcmV0OiAnUFJPSkVOX0dJVEhVQl9UT0tFTicsXG4gICAgICB9LFxuICAgICAgZGVwZW5kYWJvdDogdHJ1ZSxcbiAgICAgIGRlcGVuZGFib3RPcHRpb25zOiB7XG4gICAgICAgIHNjaGVkdWxlSW50ZXJ2YWw6IERlcGVuZGFib3RTY2hlZHVsZUludGVydmFsLldFRUtMWSxcbiAgICAgICAgbGFiZWxzOiBbJ2RlcGVuZGVuY2llcycsICdhdXRvLWFwcHJvdmUnXSxcbiAgICAgICAgZ3JvdXBzOiB7XG4gICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgcGF0dGVybnM6IFsnKiddLFxuICAgICAgICAgICAgZXhjbHVkZVBhdHRlcm5zOiBbJ2F3cy1jZGsqJywgJ3Byb2plbiddLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGlnbm9yZTogW3sgZGVwZW5kZW5jeU5hbWU6ICdhd3MtY2RrLWxpYicgfSwgeyBkZXBlbmRlbmN5TmFtZTogJ2F3cy1jZGsnIH1dLFxuICAgICAgfSxcbiAgICAgIC8vIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcHJvamVuL3Byb2plbi9kaXNjdXNzaW9ucy80MDQwI2Rpc2N1c3Npb25jb21tZW50LTExOTA1NjI4XG4gICAgICByZWxlYXNhYmxlQ29tbWl0czogUmVsZWFzYWJsZUNvbW1pdHMub2ZUeXBlKFtcbiAgICAgICAgJ2ZlYXQnLFxuICAgICAgICAnZml4JyxcbiAgICAgICAgJ2Nob3JlJyxcbiAgICAgICAgJ3JlZmFjdG9yJyxcbiAgICAgICAgJ3BlcmYnLFxuICAgICAgXSksXG4gICAgICBnaXRodWJPcHRpb25zOiB7XG4gICAgICAgIHB1bGxSZXF1ZXN0TGludE9wdGlvbnM6IHtcbiAgICAgICAgICBzZW1hbnRpY1RpdGxlT3B0aW9uczoge1xuICAgICAgICAgICAgLy8gc2VlIGNvbW1pdCB0eXBlcyBoZXJlOiBodHRwczovL3d3dy5jb252ZW50aW9uYWxjb21taXRzLm9yZy9lbi92MS4wLjAvI3N1bW1hcnlcbiAgICAgICAgICAgIHR5cGVzOiBbXG4gICAgICAgICAgICAgICdmZWF0JyxcbiAgICAgICAgICAgICAgJ2ZpeCcsXG4gICAgICAgICAgICAgICdjaG9yZScsXG4gICAgICAgICAgICAgICdyZWZhY3RvcicsXG4gICAgICAgICAgICAgICdwZXJmJyxcbiAgICAgICAgICAgICAgJ2RvY3MnLFxuICAgICAgICAgICAgICAnc3R5bGUnLFxuICAgICAgICAgICAgICAndGVzdCcsXG4gICAgICAgICAgICAgICdidWlsZCcsXG4gICAgICAgICAgICAgICdjaScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdmVyc2lvbnJjT3B0aW9uczoge1xuICAgICAgICB0eXBlczogW1xuICAgICAgICAgIHsgdHlwZTogJ2ZlYXQnLCBzZWN0aW9uOiAnRmVhdHVyZXMnIH0sXG4gICAgICAgICAgeyB0eXBlOiAnZml4Jywgc2VjdGlvbjogJ0J1ZyBGaXhlcycgfSxcbiAgICAgICAgICB7IHR5cGU6ICdjaG9yZScsIHNlY3Rpb246ICdDaG9yZXMnIH0sXG4gICAgICAgICAgeyB0eXBlOiAnZG9jcycsIHNlY3Rpb246ICdEb2NzJyB9LFxuICAgICAgICAgIHsgdHlwZTogJ3N0eWxlJywgaGlkZGVuOiB0cnVlIH0sXG4gICAgICAgICAgeyB0eXBlOiAncmVmYWN0b3InLCBoaWRkZW46IHRydWUgfSxcbiAgICAgICAgICB7IHR5cGU6ICdwZXJmJywgc2VjdGlvbjogJ1BlcmZvcm1hbmNlJyB9LFxuICAgICAgICAgIHsgdHlwZTogJ3Rlc3QnLCBoaWRkZW46IHRydWUgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBlc2xpbnRPcHRpb25zOiB7XG4gICAgICAgIHByZXR0aWVyOiBmYWxzZSxcbiAgICAgICAgZGlyczogWydzcmMnXSxcbiAgICAgICAgaWdub3JlUGF0dGVybnM6IFsnKiovKi1mdW5jdGlvbi50cycsICdleGFtcGxlcy8nXSxcbiAgICAgIH0sXG4gICAgICAvLyBleHBlcmltZW50YWxJbnRlZ1J1bm5lcjogdHJ1ZSxcbiAgICAgIC8vIG1hbnVhbCBpbnRlZyB0ZXN0IHNldHVwXG4gICAgICB0c2NvbmZpZ0Rldjoge1xuICAgICAgICBjb21waWxlck9wdGlvbnM6IHt9LFxuICAgICAgICBpbmNsdWRlOiBbJ2ludGVnLXRlc3RzLyoqLyoudHMnXSxcbiAgICAgIH0sXG4gICAgICBwdWxsUmVxdWVzdFRlbXBsYXRlQ29udGVudHM6IFtmcy5yZWFkRmlsZVN5bmMoYCR7YmFzZUFzc2V0c0RpcmVjdG9yeX0vY29tbW9uL2dpdGh1Yl9wdWxsX3JlcXVlc3QubWRgKS50b1N0cmluZygpXSxcbiAgICAgIC8vIE5PVEU6IGlzc3VlIHRlbXBsYXRlcyBhcmUgbm90IHN1cHBvcnRlZCB5ZXQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcHJvamVuL3Byb2plbi9wdWxsLzM2NDhcbiAgICAgIC8vIGlzc3VlVGVtcGxhdGVzOiB7fVxuICAgICAgcmVhZG1lOiB7XG4gICAgICAgIGNvbnRlbnRzOiBbXG4gICAgICAgICAgYFxuIVtTb3VyY2VdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZ2l0aHViL3N0YXJzL01WLUNvbnN1bHRpbmcvJHtvcHRpb25zLm5hbWV9P2xvZ289Z2l0aHViJmxhYmVsPUdpdEh1YiUyMFN0YXJzKVxuWyFbQnVpbGQgU3RhdHVzXShodHRwczovL2dpdGh1Yi5jb20vTVYtQ29uc3VsdGluZy8ke29wdGlvbnMubmFtZX0vYWN0aW9ucy93b3JrZmxvd3MvYnVpbGQueW1sL2JhZGdlLnN2ZyldKGh0dHBzOi8vZ2l0aHViLmNvbS9NVi1Db25zdWx0aW5nLyR7b3B0aW9ucy5uYW1lfS9hY3Rpb25zL3dvcmtmbG93cy9idWlsZC55bWwpXG5bIVtFU0xpbnQgQ29kZSBGb3JtYXR0aW5nXShodHRwczovL2ltZy5zaGllbGRzLmlvL2JhZGdlL2NvZGVfc3R5bGUtZXNsaW50LWJyaWdodGdyZWVuLnN2ZyldKGh0dHBzOi8vZXNsaW50Lm9yZylcblshW0xhdGVzdCByZWxlYXNlXShodHRwczovL2ltZy5zaGllbGRzLmlvL2dpdGh1Yi9yZWxlYXNlL01WLUNvbnN1bHRpbmcvJHtvcHRpb25zLm5hbWV9LnN2ZyldKGh0dHBzOi8vZ2l0aHViLmNvbS9NVi1Db25zdWx0aW5nLyR7b3B0aW9ucy5uYW1lfS9yZWxlYXNlcylcbiFbR2l0SHViXShodHRwczovL2ltZy5zaGllbGRzLmlvL2dpdGh1Yi9saWNlbnNlL01WLUNvbnN1bHRpbmcvJHtvcHRpb25zLm5hbWV9KVxuWyFbbnBtXShodHRwczovL2ltZy5zaGllbGRzLmlvL25wbS9kdC9AbWF2b2dlbC8ke29wdGlvbnMubmFtZX0/bGFiZWw9bnBtJmNvbG9yPW9yYW5nZSldKGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL0BtYXZvZ2VsLyR7b3B0aW9ucy5uYW1lfSlcblshW3R5cGVzY3JpcHRdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2UvanNpaS10eXBlc2NyaXB0LWJsdWV2aW9sZXQuc3ZnKV0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvQG1hdm9nZWwvJHtvcHRpb25zLm5hbWV9KVxuICAgICAgICAgIGAsXG4gICAgICAgICAgYCMgJHtvcHRpb25zLm5hbWV9YCxcbiAgICAgICAgICAnTXkgYXdlc29tZSBkZXNjcmlwdGlvbi4uLicsXG4gICAgICAgICAgYFxuIyMgVGFibGUgb2YgQ29udGVudHNcblxuLSBbRmVhdHVyZXNdKCNmZWF0dXJlcylcbi0gW1VzYWdlXSgjdXNhZ2UpXG4tIFtTb2x1dGlvbiBEZXNpZ25dKCNzb2x1dGlvbi1kZXNpZ24pXG4tIFtJbnNwaXJhdGlvbl0oI2luc3BpcmF0aW9uKVxuXG4jIyBGZWF0dXJlc1xuXG4tIOKaoSAqKlF1aWNrIFNldHVwKio6IFRCRFxuLSDwn5OPICoqQmVzdCBQcmFjdGljZSBTZXR1cCoqOiBUQkRcbi0g8J+kueKAjeKZgu+4jyAqKlByZS1pbnN0YWxsZWQgcGFja2FnZXMqKjogVEJEXG4tIPCfj5fvuI8gKipFeHRlbnNpYmlsaXR5Kio6IFRCRFxuXG4jIyBVc2FnZVxuVGhlIGZvbGxvd2luZyBzdGVwcyBnZXQgeW91IHN0YXJ0ZWQ6XG5cbjEuIENyZWF0ZSBhIG5ldyBcXGBhd3NjZGstYXBwXFxgIHZpYVxuXFxgXFxgXFxgYmFzaFxubnB4IHByb2plbiBuZXcgYXdzY2RrLWFwcC10cyAtLWNka1ZlcnNpb249Mi4xNzcuMCAtLXBhY2thZ2UtbWFuYWdlcj1ucG1cblxcYFxcYFxcYFxuMy4gQWRkIFxcYEBtYXZvZ2VsLyR7b3B0aW9ucy5uYW1lfVxcYCBhcyBhIGRlcGVuZGVuY3kgdG8geW91ciBwcm9qZWN0IGluIHRoZSBcXGAucHJvamVucmMudHNcXGAgZmlsZVxuNC4gUnVuIFxcYG5weCBwcm9qZW5cXGAgdG8gaW5zdGFsbCBpdFxuNS4gQWRkIHRoZSBmb2xsb3dpbmcgdG8gdGhlIFxcYHNyYy9tYWluLnRzXFxgIGZpbGU6XG5cXGBcXGBcXGB0c1xuaW1wb3J0IHsgQXBwLCBTdGFjaywgU3RhY2tQcm9wcyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgUGxhY2Vob2xkZXIgfSBmcm9tICdAbWF2b2dlbC8ke29wdGlvbnMubmFtZX0nO1xuXG5leHBvcnQgY2xhc3MgTXlTdGFjayBleHRlbmRzIFN0YWNrIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFN0YWNrUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgbmV3IFBsYWNlaG9sZGVyKHRoaXMsICdwbGFjZWhvbGRlcicsIHtcbiAgICAgIC8vIGFuZCBtb3JlLi4uIPCfkqFcbiAgICB9KTtcbiAgfVxufVxuXG5jb25zdCBlbnYgPSB7XG4gIGFjY291bnQ6ICcxMjM0NTY3ODk5MTInLFxuICByZWdpb246ICdldS1jZW50cmFsLTEnLFxufTtcblxuY29uc3QgYXBwID0gbmV3IEFwcCgpO1xubmV3IE15U3RhY2soYXBwLCAncGxhY2Vob2xkZXInLCB7IGVudiB9KTtcbmFwcC5zeW50aCgpO1xuXFxgXFxgXFxgXG5cbmFuZCBkZXBsb3kgaXRcblxcYFxcYFxcYGJhc2hcbm5weCBwcm9qZW4gYnVpbGRcbm5weCBwcm9qZW4gZGVwbG95XG5cXGBcXGBcXGBcblxud2l0aCB0aGUgb3V0cHV0XG5cXGBcXGBcXGBjb25zb2xlXG5UQkRcblxcYFxcYFxcYFxuXG5TZWUgdGhlIFtleGFtcGxlc10oLi9leGFtcGxlcykgZm9sZGVyIGZvciBtb3JlIGluc3BpcmF0aW9uLlxuXG4jIyBTb2x1dGlvbiBEZXNpZ25cblxuPGRldGFpbHM+XG4gIDxzdW1tYXJ5Pi4uLiBpZiB5b3UncmUgY3VyaW91cyBhYm91dCBjbGljayBoZXJlIGZvciB0aGUgZGV0YWlsczwvc3VtbWFyeT5cblxuIVtwbGFjZWhvbGRlcl0oZG9jcy9pbWcvcGxhY2Vob2xkZXIuZHJhd2lvLW1pbi5wbmcpXG5cbjwvZGV0YWlscz5cblxuIyMgSW5zcGlyYXRpb25cblxuYWRkIHRvb2xzIG9yIGxpbmtzIHdoaWNoIGluc3BpcmVkIHlvdVxuICAgICAgICAgIGAsXG4gICAgICAgICAgZnMucmVhZEZpbGVTeW5jKGAke2Jhc2VBc3NldHNEaXJlY3Rvcnl9L2NvbW1vbi9naXRodWJfcmVhZG1lX2N0YS5tZGApLnRvU3RyaW5nKCksXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICB9LFxuICAgICAgLy8gTk9URToga2VlcCBhbGwgdGhlIHBhc3NlZCBpbiBvcHRpb25zIHdoaWNoIGNhbiBvdmVycmlkZSB0aGUgZXhpc3Rpbmcgb25lcyFcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG5cbiAgICAvLyBnaXRpZ25vcmVcbiAgICBjb25zdCBmaWxlc1BhdHRlcm5Ub0dpdGlnbm9yZSA9IFtcbiAgICAgICd0bXAnLFxuICAgICAgJy5jb2RlZ3B0JyxcbiAgICBdO1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlc1BhdHRlcm5Ub0dpdGlnbm9yZSkge1xuICAgICAgdGhpcy5naXRpZ25vcmUuZXhjbHVkZShmaWxlKTtcbiAgICB9XG4gICAgdGhpcy5hZGREZXBzKFxuICAgICAgJ2Nkay1uYWdAXjIuMzcuNTUnLFxuICAgICk7XG4gICAgdGhpcy5hZGREZXZEZXBzKFxuICAgICAgYEBhd3MtY2RrL2ludGVnLXJ1bm5lckAke3RoaXMuY2RrVmVyc2lvbn0tYWxwaGEuMGAsIC8vIE5PVEU6IGtlZXAgaW4gc3luYyB3aXRoIGNka3ZlcnNpb25cbiAgICAgIGBAYXdzLWNkay9pbnRlZy10ZXN0cy1hbHBoYUAke3RoaXMuY2RrVmVyc2lvbn0tYWxwaGEuMGAsXG4gICAgICAnQGNvbW1pdGxpbnQvY2xpQF4yMC4xLjAnLFxuICAgICAgJ0Bjb21taXRsaW50L2NvbmZpZy1jb252ZW50aW9uYWxAXjIwLjAuMCcsXG4gICAgICBgYXdzbGludEAke3RoaXMuY2RrVmVyc2lvbn0tYWxwaGEuMGAsXG4gICAgICAnaHVza3lAXjkuMS43JyxcbiAgICApO1xuXG4gICAgdGhpcy5wYWNrYWdlLnNldFNjcmlwdCgncHJlcGFyZScsICdodXNreScpO1xuICAgIG5ldyBUZXh0RmlsZSh0aGlzLCAnLmNvbW1pdGxpbnRyYy5qcycsIHtcbiAgICAgIGxpbmVzOiBbXG4gICAgICAgICdtb2R1bGUuZXhwb3J0cyA9IHsgZXh0ZW5kczogW1xcJ0Bjb21taXRsaW50L2NvbmZpZy1jb252ZW50aW9uYWxcXCddIH07JyxcbiAgICAgIF0sXG4gICAgICBtYXJrZXI6IHRydWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLnBhY2thZ2Uuc2V0U2NyaXB0KCdhd3NsaW50JywgJ2F3c2xpbnQnKTtcbiAgICAvLyAuZ2l0aHViL3dvcmtmbG93cy9idWlsZC55bWxcbiAgICBjb25zdCBidWlsZFdvcmtmbG93ID0gdGhpcy5naXRodWI/LnRyeUZpbmRXb3JrZmxvdygnYnVpbGQnKTtcbiAgICBpZiAoIWJ1aWxkV29ya2Zsb3cpIHJldHVybjtcbiAgICBjb25zdCBidWlsZEpvYiA9IGJ1aWxkV29ya2Zsb3cuZ2V0Sm9iKCdidWlsZCcpO1xuICAgIGlmICghYnVpbGRKb2IgfHwgISgnc3RlcHMnIGluIGJ1aWxkSm9iKSkgcmV0dXJuO1xuICAgIC8vIFRPRE86IGZpZ3VyZSBvdXQgd2h5IHdyb25nIHR5cGVzXG4gICAgY29uc3QgZ2V0QnVpbGRTdGVwcyA9IGJ1aWxkSm9iLnN0ZXBzIGFzIHVua25vd24gYXMgKCkgPT4gSm9iU3RlcFtdO1xuICAgIGNvbnN0IGJ1aWxkSm9iU3RlcHMgPSBnZXRCdWlsZFN0ZXBzKCk7XG4gICAgYnVpbGRXb3JrZmxvdy51cGRhdGVKb2IoJ2J1aWxkJywge1xuICAgICAgLi4uYnVpbGRKb2IsXG4gICAgICBzdGVwczogW1xuICAgICAgICAuLi5idWlsZEpvYlN0ZXBzLnNsaWNlKDAsIDQpLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ1J1biBhd3NsaW50JyxcbiAgICAgICAgICBydW46ICducG0gcnVuIGF3c2xpbnQnLFxuICAgICAgICB9LFxuICAgICAgICAuLi5idWlsZEpvYlN0ZXBzLnNsaWNlKDQpLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIHRoaXMucGFja2FnZS5zZXRTY3JpcHQoXG4gICAgICAnaW50ZWctdGVzdCcsXG4gICAgICBgaW50ZWctcnVubmVyIC0tZGlyZWN0b3J5IC4vaW50ZWctdGVzdHMgJHtpbnRlZ1Rlc3RSZWdpb25zPy5tYXAocmVnaW9uID0+IGAtLXBhcmFsbGVsLXJlZ2lvbnMgJHtyZWdpb259YCkuam9pbignICcpfSAtLXVwZGF0ZS1vbi1mYWlsZWRgLFxuICAgICk7XG5cbiAgICBuZXcgVGV4dEZpbGUodGhpcywgJy5naXRodWIvSVNTVUVfVEVNUExBVEUvYnVnX3JlcG9ydC5tZCcsIHtcbiAgICAgIGxpbmVzOiBbZnMucmVhZEZpbGVTeW5jKGAke2Jhc2VBc3NldHNEaXJlY3Rvcnl9L2NvbW1vbi9naXRodWJfYnVnX3JlcG9ydC5tZGApLnRvU3RyaW5nKCldLFxuICAgIH0pO1xuXG4gICAgbmV3IFRleHRGaWxlKHRoaXMsICcuZ2l0aHViL0lTU1VFX1RFTVBMQVRFL2ZlYXR1cmVfcmVxdWVzdC5tZCcsIHtcbiAgICAgIGxpbmVzOiBbZnMucmVhZEZpbGVTeW5jKGAke2Jhc2VBc3NldHNEaXJlY3Rvcnl9L2NvbW1vbi9naXRodWJfZmVhdHVyZV9yZXF1ZXN0Lm1kYCkudG9TdHJpbmcoKV0sXG4gICAgfSk7XG5cbiAgICBuZXcgWWFtbEZpbGUodGhpcywgJy5naXRodWIvRlVORElORy55YW1sJywge1xuICAgICAgb2JqOiB7XG4gICAgICAgIGdpdGh1YjogJ21hdm9nZWwnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIG5ldyBUZXh0RmlsZSh0aGlzLCAnQ09OVFJJQlVUSU5HLm1kJywge1xuICAgICAgbGluZXM6IFtmcy5yZWFkRmlsZVN5bmMoYCR7YmFzZUFzc2V0c0RpcmVjdG9yeX0vY29tbW9uL2NvbnRyaWJ1dGluZy5tZGApLnRvU3RyaW5nKCldLFxuICAgIH0pO1xuXG4gICAgbmV3IFRleHRGaWxlKHRoaXMsICcucHJldHRpZXJyYycsIHtcbiAgICAgIGxpbmVzOiBbZnMucmVhZEZpbGVTeW5jKGAke2Jhc2VBc3NldHNEaXJlY3Rvcnl9L2NvbW1vbi9wcmV0dGllcnJjYCkudG9TdHJpbmcoKV0sXG4gICAgfSk7XG5cbiAgICAvLyB3cml0ZSBzYW1wbGUgY29kZSB0byBtYWluLnRzICYgdG8gbWFpbi50ZXN0LnRzXG4gICAgaWYgKG9wdGlvbnMuc2FtcGxlQ29kZSA/PyB0cnVlKSB7XG4gICAgICBuZXcgU2FtcGxlQ29kZSh0aGlzLCB7XG4gICAgICAgIGJhc2VBc3NldHNEaXJlY3RvcnksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuaW50ZXJmYWNlIFNhbXBsZUNvZGVPcHRpb25zIHtcbiAgcmVhZG9ubHkgYmFzZUFzc2V0c0RpcmVjdG9yeT86IHN0cmluZztcbn1cblxuY2xhc3MgU2FtcGxlQ29kZSBleHRlbmRzIENvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbGlicmFyeTogQXdzQ2RrQ29uc3RydWN0TGlicmFyeTtcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBTYW1wbGVDb2RlT3B0aW9ucztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBsaWJyYXJ5OiBBd3NDZGtDb25zdHJ1Y3RMaWJyYXJ5LFxuICAgIG9wdGlvbnM6IFNhbXBsZUNvZGVPcHRpb25zLFxuICApIHtcbiAgICBzdXBlcihsaWJyYXJ5KTtcbiAgICB0aGlzLmxpYnJhcnkgPSBsaWJyYXJ5O1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBwdWJsaWMgc3ludGhlc2l6ZSgpIHtcbiAgICBjb25zdCBvdXRkaXIgPSB0aGlzLnByb2plY3Qub3V0ZGlyO1xuICAgIGNvbnN0IHNyY2RpciA9IHBhdGguam9pbihvdXRkaXIsIHRoaXMubGlicmFyeS5zcmNkaXIpO1xuICAgIGlmIChcbiAgICAgIGZzLmV4aXN0c1N5bmMoc3JjZGlyKSAmJlxuICAgICAgZnMucmVhZGRpclN5bmMoc3JjZGlyKS5maWx0ZXIoKHgpID0+IHguZW5kc1dpdGgoJy50cycpKSAmJlxuICAgICAgIWZzLnJlYWRGaWxlU3luYyhgJHtzcmNkaXJ9L2luZGV4LnRzYCkudG9TdHJpbmcoKS5pbmNsdWRlcygnZXhwb3J0IGNsYXNzIEhlbGxvJykgLy8gTm90ZTogZnJvbSBwYXJlbnRcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmcy5ta2RpclN5bmMoc3JjZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihzcmNkaXIsICdpbmRleC50cycpLCBmcy5yZWFkRmlsZVN5bmMoYCR7dGhpcy5vcHRpb25zLmJhc2VBc3NldHNEaXJlY3Rvcnl9L2Nkay1jb25zdHJ1Y3Qvc3JjX2luZGV4LnRzYCkudG9TdHJpbmcoKSk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4oc3JjZGlyLCAncGxhY2Vob2xkZXIudHMnKSwgZnMucmVhZEZpbGVTeW5jKGAke3RoaXMub3B0aW9ucy5iYXNlQXNzZXRzRGlyZWN0b3J5fS9jZGstY29uc3RydWN0L3NyY19wbGFjZWhvbGRlci50c2ApLnRvU3RyaW5nKCkpO1xuICAgIC8vIGNyZCB3aXRoIGxhbWJkYSBnZW5lcmF0aW9uXG4gICAgZnMubWtkaXJTeW5jKGAke3NyY2Rpcn0vY3JkLWV4YW1wbGVgLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihgJHtzcmNkaXJ9L2NyZC1leGFtcGxlYCwgJ2NyZC1leGFtcGxlLnRzJyksIGZzLnJlYWRGaWxlU3luYyhgJHt0aGlzLm9wdGlvbnMuYmFzZUFzc2V0c0RpcmVjdG9yeX0vY2RrLWNvbnN0cnVjdC9zcmNfY3JkLWV4YW1wbGUudHNgKS50b1N0cmluZygpKTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihgJHtzcmNkaXJ9L2NyZC1leGFtcGxlYCwgJ2NyZC1leGFtcGxlLmxhbWJkYS50cycpLCBmcy5yZWFkRmlsZVN5bmMoYCR7dGhpcy5vcHRpb25zLmJhc2VBc3NldHNEaXJlY3Rvcnl9L2Nkay1jb25zdHJ1Y3Qvc3JjX2NyZC1leGFtcGxlLmxhbWJkYS50c2ApLnRvU3RyaW5nKCkpO1xuXG5cbiAgICBjb25zdCB0ZXN0ZGlyID0gcGF0aC5qb2luKG91dGRpciwgdGhpcy5saWJyYXJ5LnRlc3RkaXIpO1xuICAgIGlmIChcbiAgICAgIGZzLmV4aXN0c1N5bmModGVzdGRpcikgJiZcbiAgICAgIGZzLnJlYWRkaXJTeW5jKHRlc3RkaXIpLmZpbHRlcigoeCkgPT4geC5lbmRzV2l0aCgnLnRzJykpICYmXG4gICAgICAhZnMuZXhpc3RzU3luYyhgJHt0ZXN0ZGlyfS9oZWxsby50ZXN0LnRzYCkgLy8gTm90ZTogZnJvbSBwYXJlbnRcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gcmVtb3ZlICR7dGVzdGRpcn0vaGVsbG8udGVzdC50cyBmaWxlLiBPbiB0aGUgb3RoZXIgaGFuZCwgd2Ugb3ZlcnJpZGUgaW5kZXgudHNcbiAgICBmcy51bmxpbmtTeW5jKGAke3Rlc3RkaXJ9L2hlbGxvLnRlc3QudHNgKTtcbiAgICBmcy5ta2RpclN5bmModGVzdGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4odGVzdGRpciwgJ2luZGV4LnRlc3QudHMnKSwgZnMucmVhZEZpbGVTeW5jKGAke3RoaXMub3B0aW9ucy5iYXNlQXNzZXRzRGlyZWN0b3J5fS9jZGstY29uc3RydWN0L3Rlc3RfaW5kZXgudGVzdC50c2ApLnRvU3RyaW5nKCkpO1xuICAgIC8vIGxhbWJkYSB0ZXN0cyB3aXRoIGplc3Qgc3R1YnNcbiAgICBmcy5ta2RpclN5bmMoYCR7dGVzdGRpcn0vY3JkLWV4YW1wbGVgLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihgJHt0ZXN0ZGlyfS9jcmQtZXhhbXBsZWAsICdjcmQtZXhhbXBsZS50ZXN0LnRzJyksIGZzLnJlYWRGaWxlU3luYyhgJHt0aGlzLm9wdGlvbnMuYmFzZUFzc2V0c0RpcmVjdG9yeX0vY2RrLWNvbnN0cnVjdC90ZXN0X2NyZC1leGFtcGxlLnRlc3QudHNgKS50b1N0cmluZygpKTtcblxuXG4gICAgY29uc3QgaW50ZWdUZXN0ZGlyID0gcGF0aC5qb2luKG91dGRpciwgJ2ludGVnLXRlc3RzJyk7XG4gICAgaWYgKFxuICAgICAgZnMuZXhpc3RzU3luYyhpbnRlZ1Rlc3RkaXIpICYmXG4gICAgICBmcy5yZWFkZGlyU3luYyhpbnRlZ1Rlc3RkaXIpLmZpbHRlcigoeCkgPT4geC5lbmRzV2l0aCgnLnRzJykpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZzLm1rZGlyU3luYyhpbnRlZ1Rlc3RkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKGludGVnVGVzdGRpciwgJ2ludGVnLnBsYWNlaG9sZGVyLnRzJyksIGZzLnJlYWRGaWxlU3luYyhgJHt0aGlzLm9wdGlvbnMuYmFzZUFzc2V0c0RpcmVjdG9yeX0vY2RrLWNvbnN0cnVjdC9pbnRlZ19pbnRlZy5wbGFjZWhvbGRlci50c2ApLnRvU3RyaW5nKCkpO1xuXG4gICAgY29uc3QgaW50ZWdUZXN0RnVuY3Rpb25zZGlyID0gcGF0aC5qb2luKGludGVnVGVzdGRpciwgJ2Z1bmN0aW9ucycpO1xuICAgIGlmIChcbiAgICAgIGZzLmV4aXN0c1N5bmMoaW50ZWdUZXN0RnVuY3Rpb25zZGlyKSAmJlxuICAgICAgZnMucmVhZGRpclN5bmMoaW50ZWdUZXN0RnVuY3Rpb25zZGlyKS5maWx0ZXIoKHgpID0+IHguZW5kc1dpdGgoJy50cycpKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmcy5ta2RpclN5bmMoaW50ZWdUZXN0RnVuY3Rpb25zZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihpbnRlZ1Rlc3RGdW5jdGlvbnNkaXIsICd0ZXN0LWhhbmRsZXIudHMnKSwgZnMucmVhZEZpbGVTeW5jKGAke3RoaXMub3B0aW9ucy5iYXNlQXNzZXRzRGlyZWN0b3J5fS9jZGstY29uc3RydWN0L2ludGVnX3Rlc3QtaGFuZGxlci50c2ApLnRvU3RyaW5nKCkpO1xuXG4gICAgY29uc3QgZG9jc2RpciA9IHBhdGguam9pbihvdXRkaXIsICdkb2NzJyk7XG4gICAgaWYgKFxuICAgICAgZnMuZXhpc3RzU3luYyhkb2NzZGlyKSAmJlxuICAgICAgZnMucmVhZGRpclN5bmMoZG9jc2RpcikuZmlsdGVyKCh4KSA9PiB4LmVuZHNXaXRoKCcuZHJhd2lvJykpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZzLm1rZGlyU3luYyhkb2NzZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihkb2NzZGlyLCAncGxhY2Vob2xkZXIuZHJhd2lvJyksIGZzLnJlYWRGaWxlU3luYyhgJHt0aGlzLm9wdGlvbnMuYmFzZUFzc2V0c0RpcmVjdG9yeX0vY29tbW9uL2RvY3NfcGxhY2Vob2xkZXIuZHJhd2lvYCkudG9TdHJpbmcoKSk7XG5cbiAgICBjb25zdCBleGFtcGxlc2RpciA9IHBhdGguam9pbihvdXRkaXIsICdleGFtcGxlcycsICdzaW1wbGUnKTtcbiAgICBpZiAoXG4gICAgICBmcy5leGlzdHNTeW5jKGV4YW1wbGVzZGlyKSAmJlxuICAgICAgZnMucmVhZGRpclN5bmMoZXhhbXBsZXNkaXIpLmZpbHRlcigoeCkgPT4geC5lbmRzV2l0aCgnLmRyYXdpbycpKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmcy5ta2RpclN5bmMoZXhhbXBsZXNkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKGV4YW1wbGVzZGlyLCAnbWFpbi50cycpLCBmcy5yZWFkRmlsZVN5bmMoYCR7dGhpcy5vcHRpb25zLmJhc2VBc3NldHNEaXJlY3Rvcnl9L2Nkay1jb25zdHJ1Y3QvZXhhbXBsZXNfc2ltcGxlX21haW4udHNgKS50b1N0cmluZygpKTtcbiAgfVxufSJdfQ==
|
|
358
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWNvbnN0cnVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9qZWN0cy9jZGstY29uc3RydWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QixxQ0FBOEI7QUFDOUIsbUNBQXNGO0FBQ3RGLDhDQUF5RztBQUN6Ryw4Q0FBK0Q7QUFHL0QsMkVBQTJFO0FBQzNFLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUMzQixNQUFNLGlCQUFpQixHQUFHLHNCQUFhLENBQUMsV0FBVyxDQUFDO0FBRXBELG9GQUFvRjtBQUNwRiw2Q0FBNkM7QUFDN0MsTUFBTSxzQkFBc0IsR0FBRyxTQUFTLENBQUM7QUFxQnpDOzs7O0dBSUc7QUFDSCxNQUFhLHNCQUF1QixTQUFRLCtCQUFzQjtJQUVoRSxZQUFZLE9BQXNDO1FBQ2hELE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixJQUFJLEdBQUcsSUFBQSxhQUFHLEdBQUUsMENBQTBDLENBQUM7UUFDOUcsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFaEYsS0FBSyxDQUFDO1lBQ0osa0JBQWtCLEVBQUUsSUFBSTtZQUN4QixjQUFjLEVBQUUsb0JBQW9CO1lBQ3BDLGVBQWUsRUFBRSxNQUFNO1lBQ3ZCLE9BQU8sRUFBRSxZQUFZO1lBQ3JCLFdBQVcsRUFBRSxRQUFRO1lBQ3JCLGNBQWMsRUFBRSxXQUFXO1lBQzNCLG1CQUFtQixFQUFFLFdBQVc7WUFDaEMsU0FBUyxFQUFFLGNBQWM7WUFDekIsWUFBWSxFQUFFLElBQUk7WUFDbEIsY0FBYyxFQUFFLG1CQUFVLENBQUMsa0JBQWtCLENBQUMsR0FBRztZQUNqRCxTQUFTLEVBQUUsbUJBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTTtZQUN0QyxhQUFhLEVBQUU7Z0JBQ2IsT0FBTyxFQUFFLGlC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QUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUM1RCxDQUFDO1lBQ0QsT0FBTztRQUNULENBQUM7UUFDRCxFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsb0JBQW9CLENBQUMsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsaUNBQWlDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRTdKLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM1RCxJQUNFLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO1lBQzFCLEVBQUUsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQ2hFLENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUNELEVBQUUsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDL0MsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsd0NBQXdDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQy9KLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBjd2QgfSBmcm9tICdwcm9jZXNzJztcbmltcG9ydCB7IENvbXBvbmVudCwgamF2YXNjcmlwdCwgUmVsZWFzYWJsZUNvbW1pdHMsIFRleHRGaWxlLCBZYW1sRmlsZSB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBBd3NDZGtDb25zdHJ1Y3RMaWJyYXJ5LCBBd3NDZGtDb25zdHJ1Y3RMaWJyYXJ5T3B0aW9ucywgTGFtYmRhUnVudGltZSB9IGZyb20gJ3Byb2plbi9saWIvYXdzY2RrJztcbmltcG9ydCB7IERlcGVuZGFib3RTY2hlZHVsZUludGVydmFsIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWInO1xuaW1wb3J0IHsgSm9iU3RlcCB9IGZyb20gJ3Byb2plbi9saWIvZ2l0aHViL3dvcmtmbG93cy1tb2RlbCc7XG5cbi8vIFNldCB0aGUgbWluaW11bSBub2RlIHZlcnNpb24gZm9yIEFXUyBDREsgYW5kIHRoZSBHaXRIdWIgYWN0aW9ucyB3b3JrZmxvd1xuY29uc3Qgbm9kZVZlcnNpb24gPSAnMjIueCc7XG5jb25zdCBsYW1iZGFOb2RlVmVyc2lvbiA9IExhbWJkYVJ1bnRpbWUuTk9ERUpTXzIyX1g7XG5cbi8vIFRoZSBsYXN0IENESyB2ZXJzaW9uIGZvciB3aGljaCBAYXdzLWNkay9pbnRlZy1ydW5uZXIsIEBhd3MtY2RrL2ludGVnLXRlc3RzLWFscGhhLFxuLy8gYW5kIGF3c2xpbnQgYWxwaGEgcGFja2FnZXMgd2VyZSBwdWJsaXNoZWQuXG5jb25zdCBMQVNUX0NES19BTFBIQV9WRVJTSU9OID0gJzIuMTk3LjQnO1xuXG4vKipcbiAqIFRoZSBvcHRpb25zIGZvciB0aGUgY29uc3RydWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTXZjQ2RrQ29uc3RydWN0TGlicmFyeU9wdGlvbnMgZXh0ZW5kcyBBd3NDZGtDb25zdHJ1Y3RMaWJyYXJ5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBCYXNlIGRpcmVjdG9yeSBmb3IgdGhlIGFzc2V0c1xuICAgKlxuICAgKiBAZGVmYXVsdCAke2N3ZCgpfS9ub2RlX21vZHVsZXMvbXZjLXByb2plbi9hc3NldHNcbiAgICovXG4gIHJlYWRvbmx5IGJhc2VBc3NldHNEaXJlY3Rvcnk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZWdpb25zIHRvIHJ1biB0aGUgaW50ZWcgdGVzdHMgaW5cbiAgICpcbiAgICogQGRlZmF1bHQgZXUtd2VzdC0xIGFuZCBldS13ZXN0LTJcbiAgICovXG4gIHJlYWRvbmx5IGludGVnVGVzdFJlZ2lvbnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBUeXBlU2NyaXB0IGxpYnJhcnlcbiAqXG4gKiBAcGppZCBtdmMtYXdzY2RrLWNvbnN0cnVjdFxuICovXG5leHBvcnQgY2xhc3MgTXZjQ2RrQ29uc3RydWN0TGlicmFyeSBleHRlbmRzIEF3c0Nka0NvbnN0cnVjdExpYnJhcnkge1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE12Y0Nka0NvbnN0cnVjdExpYnJhcnlPcHRpb25zKSB7XG4gICAgY29uc3QgYmFzZUFzc2V0c0RpcmVjdG9yeSA9IG9wdGlvbnMuYmFzZUFzc2V0c0RpcmVjdG9yeSA/PyBgJHtjd2QoKX0vbm9kZV9tb2R1bGVzL0BtYXZvZ2VsL212Yy1wcm9qZW4vYXNzZXRzYDtcbiAgICBjb25zdCBpbnRlZ1Rlc3RSZWdpb25zID0gb3B0aW9ucy5pbnRlZ1Rlc3RSZWdpb25zID8/IFsnZXUtd2VzdC0xJywgJ2V1LXdlc3QtMiddO1xuXG4gICAgc3VwZXIoe1xuICAgICAgYXV0aG9yT3JnYW5pemF0aW9uOiB0cnVlLFxuICAgICAgY29weXJpZ2h0T3duZXI6ICdNViBDb25zdWx0aW5nIEdtYkgnLFxuICAgICAgY29weXJpZ2h0UGVyaW9kOiAnMjAyNScsXG4gICAgICBsaWNlbnNlOiAnQXBhY2hlLTIuMCcsXG4gICAgICBqc2lpVmVyc2lvbjogJ341LjkuMCcsXG4gICAgICBtaW5Ob2RlVmVyc2lvbjogbm9kZVZlcnNpb24sXG4gICAgICB3b3JrZmxvd05vZGVWZXJzaW9uOiBub2RlVmVyc2lvbixcbiAgICAgIHN0YWJpbGl0eTogJ2V4cGVyaW1lbnRhbCcsXG4gICAgICByZWxlYXNlVG9OcG06IHRydWUsXG4gICAgICBwYWNrYWdlTWFuYWdlcjogamF2YXNjcmlwdC5Ob2RlUGFja2FnZU1hbmFnZXIuTlBNLFxuICAgICAgbnBtQWNjZXNzOiBqYXZhc2NyaXB0Lk5wbUFjY2Vzcy5QVUJMSUMsXG4gICAgICBsYW1iZGFPcHRpb25zOiB7XG4gICAgICAgIHJ1bnRpbWU6IGxhbWJkYU5vZGVWZXJzaW9uLFxuICAgICAgICBhd3NTZGtDb25uZWN0aW9uUmV1c2U6IGZhbHNlLCAvLyBkb2Vzbid0IGV4aXN0IGluIEFXUyBTREsgSlMgdjNcbiAgICAgIH0sXG4gICAgICBhdXRvQXBwcm92ZU9wdGlvbnM6IHtcbiAgICAgICAgYWxsb3dlZFVzZXJuYW1lczogW1xuICAgICAgICAgICdkZXBlbmRhYm90JyxcbiAgICAgICAgICAnZGVwZW5kYWJvdFtib3RdJyxcbiAgICAgICAgICAnZ2l0aHViLWJvdCcsXG4gICAgICAgICAgJ2dpdGh1Yi1hY3Rpb25zW2JvdF0nLFxuICAgICAgICAgICdtdmMtYm90JyxcbiAgICAgICAgXSxcbiAgICAgICAgLy8gVGhlIG5hbWUgb2YgdGhlIHNlY3JldCB0aGF0IGhhcyB0aGUgR2l0SHViIFBBVCBmb3IgYXV0by1hcHByb3ZpbmcgUFJzIHdpdGggcGVybWlzc2lvbnMgcmVwbywgd29ya2Zsb3csIHdyaXRlOnBhY2thZ2VzXG4gICAgICAgIC8vIEdlbmVyYXRlIGEgbmV3IFBBVCAoaHR0cHM6Ly9naXRodWIuY29tL3NldHRpbmdzL3Rva2Vucy9uZXcpIGFuZCBhZGQgaXQgdG8geW91ciByZXBvJ3Mgc2VjcmV0c1xuICAgICAgICAvLyBOT1RFOiBjb21lcyBmcm9tIE1WLUNvbnN1bHRpbmcgT3JnXG4gICAgICAgIHNlY3JldDogJ1BST0pFTl9HSVRIVUJfVE9LRU4nLFxuICAgICAgfSxcbiAgICAgIGRlcGVuZGFib3Q6IHRydWUsXG4gICAgICBkZXBlbmRhYm90T3B0aW9uczoge1xuICAgICAgICBzY2hlZHVsZUludGVydmFsOiBEZXBlbmRhYm90U2NoZWR1bGVJbnRlcnZhbC5XRUVLTFksXG4gICAgICAgIGxhYmVsczogWydkZXBlbmRlbmNpZXMnLCAnYXV0by1hcHByb3ZlJ10sXG4gICAgICAgIGdyb3Vwczoge1xuICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIHBhdHRlcm5zOiBbJyonXSxcbiAgICAgICAgICAgIGV4Y2x1ZGVQYXR0ZXJuczogWydhd3MtY2RrKicsICdwcm9qZW4nXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBpZ25vcmU6IFt7IGRlcGVuZGVuY3lOYW1lOiAnYXdzLWNkay1saWInIH0sIHsgZGVwZW5kZW5jeU5hbWU6ICdhd3MtY2RrJyB9XSxcbiAgICAgIH0sXG4gICAgICAvLyAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3Byb2plbi9wcm9qZW4vZGlzY3Vzc2lvbnMvNDA0MCNkaXNjdXNzaW9uY29tbWVudC0xMTkwNTYyOFxuICAgICAgcmVsZWFzYWJsZUNvbW1pdHM6IFJlbGVhc2FibGVDb21taXRzLm9mVHlwZShbXG4gICAgICAgICdmZWF0JyxcbiAgICAgICAgJ2ZpeCcsXG4gICAgICAgICdjaG9yZScsXG4gICAgICAgICdyZWZhY3RvcicsXG4gICAgICAgICdwZXJmJyxcbiAgICAgIF0pLFxuICAgICAgZ2l0aHViT3B0aW9uczoge1xuICAgICAgICBwdWxsUmVxdWVzdExpbnRPcHRpb25zOiB7XG4gICAgICAgICAgc2VtYW50aWNUaXRsZU9wdGlvbnM6IHtcbiAgICAgICAgICAgIC8vIHNlZSBjb21taXQgdHlwZXMgaGVyZTogaHR0cHM6Ly93d3cuY29udmVudGlvbmFsY29tbWl0cy5vcmcvZW4vdjEuMC4wLyNzdW1tYXJ5XG4gICAgICAgICAgICB0eXBlczogW1xuICAgICAgICAgICAgICAnZmVhdCcsXG4gICAgICAgICAgICAgICdmaXgnLFxuICAgICAgICAgICAgICAnY2hvcmUnLFxuICAgICAgICAgICAgICAncmVmYWN0b3InLFxuICAgICAgICAgICAgICAncGVyZicsXG4gICAgICAgICAgICAgICdkb2NzJyxcbiAgICAgICAgICAgICAgJ3N0eWxlJyxcbiAgICAgICAgICAgICAgJ3Rlc3QnLFxuICAgICAgICAgICAgICAnYnVpbGQnLFxuICAgICAgICAgICAgICAnY2knLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHZlcnNpb25yY09wdGlvbnM6IHtcbiAgICAgICAgdHlwZXM6IFtcbiAgICAgICAgICB7IHR5cGU6ICdmZWF0Jywgc2VjdGlvbjogJ0ZlYXR1cmVzJyB9LFxuICAgICAgICAgIHsgdHlwZTogJ2ZpeCcsIHNlY3Rpb246ICdCdWcgRml4ZXMnIH0sXG4gICAgICAgICAgeyB0eXBlOiAnY2hvcmUnLCBzZWN0aW9uOiAnQ2hvcmVzJyB9LFxuICAgICAgICAgIHsgdHlwZTogJ2RvY3MnLCBzZWN0aW9uOiAnRG9jcycgfSxcbiAgICAgICAgICB7IHR5cGU6ICdzdHlsZScsIGhpZGRlbjogdHJ1ZSB9LFxuICAgICAgICAgIHsgdHlwZTogJ3JlZmFjdG9yJywgaGlkZGVuOiB0cnVlIH0sXG4gICAgICAgICAgeyB0eXBlOiAncGVyZicsIHNlY3Rpb246ICdQZXJmb3JtYW5jZScgfSxcbiAgICAgICAgICB7IHR5cGU6ICd0ZXN0JywgaGlkZGVuOiB0cnVlIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAgZXNsaW50T3B0aW9uczoge1xuICAgICAgICBwcmV0dGllcjogZmFsc2UsXG4gICAgICAgIGRpcnM6IFsnc3JjJ10sXG4gICAgICAgIGlnbm9yZVBhdHRlcm5zOiBbJyoqLyotZnVuY3Rpb24udHMnLCAnZXhhbXBsZXMvJ10sXG4gICAgICB9LFxuICAgICAgLy8gZXhwZXJpbWVudGFsSW50ZWdSdW5uZXI6IHRydWUsXG4gICAgICAvLyBtYW51YWwgaW50ZWcgdGVzdCBzZXR1cFxuICAgICAgdHNjb25maWdEZXY6IHtcbiAgICAgICAgY29tcGlsZXJPcHRpb25zOiB7fSxcbiAgICAgICAgaW5jbHVkZTogWydpbnRlZy10ZXN0cy8qKi8qLnRzJ10sXG4gICAgICB9LFxuICAgICAgcHVsbFJlcXVlc3RUZW1wbGF0ZUNvbnRlbnRzOiBbZnMucmVhZEZpbGVTeW5jKGAke2Jhc2VBc3NldHNEaXJlY3Rvcnl9L2NvbW1vbi9naXRodWJfcHVsbF9yZXF1ZXN0Lm1kYCkudG9TdHJpbmcoKV0sXG4gICAgICAvLyBOT1RFOiBpc3N1ZSB0ZW1wbGF0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQgeWV0LiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3Byb2plbi9wcm9qZW4vcHVsbC8zNjQ4XG4gICAgICAvLyBpc3N1ZVRlbXBsYXRlczoge31cbiAgICAgIHJlYWRtZToge1xuICAgICAgICBjb250ZW50czogW1xuICAgICAgICAgIGBcbiFbU291cmNlXShodHRwczovL2ltZy5zaGllbGRzLmlvL2dpdGh1Yi9zdGFycy9NVi1Db25zdWx0aW5nLyR7b3B0aW9ucy5uYW1lfT9sb2dvPWdpdGh1YiZsYWJlbD1HaXRIdWIlMjBTdGFycylcblshW0J1aWxkIFN0YXR1c10oaHR0cHM6Ly9naXRodWIuY29tL01WLUNvbnN1bHRpbmcvJHtvcHRpb25zLm5hbWV9L2FjdGlvbnMvd29ya2Zsb3dzL2J1aWxkLnltbC9iYWRnZS5zdmcpXShodHRwczovL2dpdGh1Yi5jb20vTVYtQ29uc3VsdGluZy8ke29wdGlvbnMubmFtZX0vYWN0aW9ucy93b3JrZmxvd3MvYnVpbGQueW1sKVxuWyFbRVNMaW50IENvZGUgRm9ybWF0dGluZ10oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9iYWRnZS9jb2RlX3N0eWxlLWVzbGludC1icmlnaHRncmVlbi5zdmcpXShodHRwczovL2VzbGludC5vcmcpXG5bIVtMYXRlc3QgcmVsZWFzZV0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9naXRodWIvcmVsZWFzZS9NVi1Db25zdWx0aW5nLyR7b3B0aW9ucy5uYW1lfS5zdmcpXShodHRwczovL2dpdGh1Yi5jb20vTVYtQ29uc3VsdGluZy8ke29wdGlvbnMubmFtZX0vcmVsZWFzZXMpXG4hW0dpdEh1Yl0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9naXRodWIvbGljZW5zZS9NVi1Db25zdWx0aW5nLyR7b3B0aW9ucy5uYW1lfSlcblshW25wbV0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9ucG0vZHQvQG1hdm9nZWwvJHtvcHRpb25zLm5hbWV9P2xhYmVsPW5wbSZjb2xvcj1vcmFuZ2UpXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9AbWF2b2dlbC8ke29wdGlvbnMubmFtZX0pXG5bIVt0eXBlc2NyaXB0XShodHRwczovL2ltZy5zaGllbGRzLmlvL2JhZGdlL2pzaWktdHlwZXNjcmlwdC1ibHVldmlvbGV0LnN2ZyldKGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL0BtYXZvZ2VsLyR7b3B0aW9ucy5uYW1lfSlcbiAgICAgICAgICBgLFxuICAgICAgICAgIGAjICR7b3B0aW9ucy5uYW1lfWAsXG4gICAgICAgICAgJ015IGF3ZXNvbWUgZGVzY3JpcHRpb24uLi4nLFxuICAgICAgICAgIGBcbiMjIFRhYmxlIG9mIENvbnRlbnRzXG5cbi0gW0ZlYXR1cmVzXSgjZmVhdHVyZXMpXG4tIFtVc2FnZV0oI3VzYWdlKVxuLSBbU29sdXRpb24gRGVzaWduXSgjc29sdXRpb24tZGVzaWduKVxuLSBbSW5zcGlyYXRpb25dKCNpbnNwaXJhdGlvbilcblxuIyMgRmVhdHVyZXNcblxuLSDimqEgKipRdWljayBTZXR1cCoqOiBUQkRcbi0g8J+TjyAqKkJlc3QgUHJhY3RpY2UgU2V0dXAqKjogVEJEXG4tIPCfpLnigI3imYLvuI8gKipQcmUtaW5zdGFsbGVkIHBhY2thZ2VzKio6IFRCRFxuLSDwn4+X77iPICoqRXh0ZW5zaWJpbGl0eSoqOiBUQkRcblxuIyMgVXNhZ2VcblRoZSBmb2xsb3dpbmcgc3RlcHMgZ2V0IHlvdSBzdGFydGVkOlxuXG4xLiBDcmVhdGUgYSBuZXcgXFxgYXdzY2RrLWFwcFxcYCB2aWFcblxcYFxcYFxcYGJhc2hcbm5weCBwcm9qZW4gbmV3IGF3c2Nkay1hcHAtdHMgLS1jZGtWZXJzaW9uPTIuMTc3LjAgLS1wYWNrYWdlLW1hbmFnZXI9bnBtXG5cXGBcXGBcXGBcbjMuIEFkZCBcXGBAbWF2b2dlbC8ke29wdGlvbnMubmFtZX1cXGAgYXMgYSBkZXBlbmRlbmN5IHRvIHlvdXIgcHJvamVjdCBpbiB0aGUgXFxgLnByb2plbnJjLnRzXFxgIGZpbGVcbjQuIFJ1biBcXGBucHggcHJvamVuXFxgIHRvIGluc3RhbGwgaXRcbjUuIEFkZCB0aGUgZm9sbG93aW5nIHRvIHRoZSBcXGBzcmMvbWFpbi50c1xcYCBmaWxlOlxuXFxgXFxgXFxgdHNcbmltcG9ydCB7IEFwcCwgU3RhY2ssIFN0YWNrUHJvcHMgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBlYzIgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IFBsYWNlaG9sZGVyIH0gZnJvbSAnQG1hdm9nZWwvJHtvcHRpb25zLm5hbWV9JztcblxuZXhwb3J0IGNsYXNzIE15U3RhY2sgZXh0ZW5kcyBTdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTdGFja1Byb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIG5ldyBQbGFjZWhvbGRlcih0aGlzLCAncGxhY2Vob2xkZXInLCB7XG4gICAgICAvLyBhbmQgbW9yZS4uLiDwn5KhXG4gICAgfSk7XG4gIH1cbn1cblxuY29uc3QgZW52ID0ge1xuICBhY2NvdW50OiAnMTIzNDU2Nzg5OTEyJyxcbiAgcmVnaW9uOiAnZXUtY2VudHJhbC0xJyxcbn07XG5cbmNvbnN0IGFwcCA9IG5ldyBBcHAoKTtcbm5ldyBNeVN0YWNrKGFwcCwgJ3BsYWNlaG9sZGVyJywgeyBlbnYgfSk7XG5hcHAuc3ludGgoKTtcblxcYFxcYFxcYFxuXG5hbmQgZGVwbG95IGl0XG5cXGBcXGBcXGBiYXNoXG5ucHggcHJvamVuIGJ1aWxkXG5ucHggcHJvamVuIGRlcGxveVxuXFxgXFxgXFxgXG5cbndpdGggdGhlIG91dHB1dFxuXFxgXFxgXFxgY29uc29sZVxuVEJEXG5cXGBcXGBcXGBcblxuU2VlIHRoZSBbZXhhbXBsZXNdKC4vZXhhbXBsZXMpIGZvbGRlciBmb3IgbW9yZSBpbnNwaXJhdGlvbi5cblxuIyMgU29sdXRpb24gRGVzaWduXG5cbjxkZXRhaWxzPlxuICA8c3VtbWFyeT4uLi4gaWYgeW91J3JlIGN1cmlvdXMgYWJvdXQgY2xpY2sgaGVyZSBmb3IgdGhlIGRldGFpbHM8L3N1bW1hcnk+XG5cbiFbcGxhY2Vob2xkZXJdKGRvY3MvaW1nL3BsYWNlaG9sZGVyLmRyYXdpby1taW4ucG5nKVxuXG48L2RldGFpbHM+XG5cbiMjIEluc3BpcmF0aW9uXG5cbmFkZCB0b29scyBvciBsaW5rcyB3aGljaCBpbnNwaXJlZCB5b3VcbiAgICAgICAgICBgLFxuICAgICAgICAgIGZzLnJlYWRGaWxlU3luYyhgJHtiYXNlQXNzZXRzRGlyZWN0b3J5fS9jb21tb24vZ2l0aHViX3JlYWRtZV9jdGEubWRgKS50b1N0cmluZygpLFxuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgfSxcbiAgICAgIC8vIE5PVEU6IGtlZXAgYWxsIHRoZSBwYXNzZWQgaW4gb3B0aW9ucyB3aGljaCBjYW4gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIG9uZXMhXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuXG4gICAgLy8gZ2l0aWdub3JlXG4gICAgY29uc3QgZmlsZXNQYXR0ZXJuVG9HaXRpZ25vcmUgPSBbXG4gICAgICAndG1wJyxcbiAgICAgICcuY29kZWdwdCcsXG4gICAgXTtcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXNQYXR0ZXJuVG9HaXRpZ25vcmUpIHtcbiAgICAgIHRoaXMuZ2l0aWdub3JlLmV4Y2x1ZGUoZmlsZSk7XG4gICAgfVxuICAgIHRoaXMuYWRkRGVwcyhcbiAgICAgICdjZGstbmFnQF4yLjM3LjU1JyxcbiAgICApO1xuICAgIC8vIENhcCBhbHBoYSBwYWNrYWdlIHZlcnNpb25zIGF0IExBU1RfQ0RLX0FMUEhBX1ZFUlNJT04gc2luY2UgdGhlc2UgcGFja2FnZXNcbiAgICAvLyBzdG9wcGVkIHB1Ymxpc2hpbmcgYWZ0ZXIgdGhhdCB2ZXJzaW9uLlxuICAgIGNvbnN0IHJhd0Nka1ZlcnNpb24gPSB0aGlzLmNka1ZlcnNpb24ucmVwbGFjZSgvW1xcXn5dLywgJycpO1xuICAgIGNvbnN0IGFscGhhVmVyc2lvbiA9IHJhd0Nka1ZlcnNpb24ubG9jYWxlQ29tcGFyZShMQVNUX0NES19BTFBIQV9WRVJTSU9OLCB1bmRlZmluZWQsIHsgbnVtZXJpYzogdHJ1ZSwgc2Vuc2l0aXZpdHk6ICdiYXNlJyB9KSA+IDBcbiAgICAgID8gTEFTVF9DREtfQUxQSEFfVkVSU0lPTlxuICAgICAgOiByYXdDZGtWZXJzaW9uO1xuICAgIHRoaXMuYWRkRGV2RGVwcyhcbiAgICAgIGBAYXdzLWNkay9pbnRlZy1ydW5uZXJAJHthbHBoYVZlcnNpb259LWFscGhhLjBgLFxuICAgICAgYEBhd3MtY2RrL2ludGVnLXRlc3RzLWFscGhhQCR7YWxwaGFWZXJzaW9ufS1hbHBoYS4wYCxcbiAgICAgICdAY29tbWl0bGludC9jbGlAXjIwLjEuMCcsXG4gICAgICAnQGNvbW1pdGxpbnQvY29uZmlnLWNvbnZlbnRpb25hbEBeMjAuMC4wJyxcbiAgICAgIGBhd3NsaW50QCR7YWxwaGFWZXJzaW9ufS1hbHBoYS4wYCxcbiAgICAgICdodXNreUBeOS4xLjcnLFxuICAgICk7XG5cbiAgICB0aGlzLnBhY2thZ2Uuc2V0U2NyaXB0KCdwcmVwYXJlJywgJ2h1c2t5Jyk7XG4gICAgbmV3IFRleHRGaWxlKHRoaXMsICcuY29tbWl0bGludHJjLmpzJywge1xuICAgICAgbGluZXM6IFtcbiAgICAgICAgJ21vZHVsZS5leHBvcnRzID0geyBleHRlbmRzOiBbXFwnQGNvbW1pdGxpbnQvY29uZmlnLWNvbnZlbnRpb25hbFxcJ10gfTsnLFxuICAgICAgXSxcbiAgICAgIG1hcmtlcjogdHJ1ZSxcbiAgICB9KTtcblxuICAgIHRoaXMucGFja2FnZS5zZXRTY3JpcHQoJ2F3c2xpbnQnLCAnYXdzbGludCcpO1xuICAgIC8vIC5naXRodWIvd29ya2Zsb3dzL2J1aWxkLnltbFxuICAgIGNvbnN0IGJ1aWxkV29ya2Zsb3cgPSB0aGlzLmdpdGh1Yj8udHJ5RmluZFdvcmtmbG93KCdidWlsZCcpO1xuICAgIGlmICghYnVpbGRXb3JrZmxvdykgcmV0dXJuO1xuICAgIGNvbnN0IGJ1aWxkSm9iID0gYnVpbGRXb3JrZmxvdy5nZXRKb2IoJ2J1aWxkJyk7XG4gICAgaWYgKCFidWlsZEpvYiB8fCAhKCdzdGVwcycgaW4gYnVpbGRKb2IpKSByZXR1cm47XG4gICAgLy8gVE9ETzogZmlndXJlIG91dCB3aHkgd3JvbmcgdHlwZXNcbiAgICBjb25zdCBnZXRCdWlsZFN0ZXBzID0gYnVpbGRKb2Iuc3RlcHMgYXMgdW5rbm93biBhcyAoKSA9PiBKb2JTdGVwW107XG4gICAgY29uc3QgYnVpbGRKb2JTdGVwcyA9IGdldEJ1aWxkU3RlcHMoKTtcbiAgICBidWlsZFdvcmtmbG93LnVwZGF0ZUpvYignYnVpbGQnLCB7XG4gICAgICAuLi5idWlsZEpvYixcbiAgICAgIHN0ZXBzOiBbXG4gICAgICAgIC4uLmJ1aWxkSm9iU3RlcHMuc2xpY2UoMCwgNCksXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnUnVuIGF3c2xpbnQnLFxuICAgICAgICAgIHJ1bjogJ25wbSBydW4gYXdzbGludCcsXG4gICAgICAgIH0sXG4gICAgICAgIC4uLmJ1aWxkSm9iU3RlcHMuc2xpY2UoNCksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgdGhpcy5wYWNrYWdlLnNldFNjcmlwdChcbiAgICAgICdpbnRlZy10ZXN0JyxcbiAgICAgIGBpbnRlZy1ydW5uZXIgLS1kaXJlY3RvcnkgLi9pbnRlZy10ZXN0cyAke2ludGVnVGVzdFJlZ2lvbnM/Lm1hcChyZWdpb24gPT4gYC0tcGFyYWxsZWwtcmVnaW9ucyAke3JlZ2lvbn1gKS5qb2luKCcgJyl9IC0tdXBkYXRlLW9uLWZhaWxlZGAsXG4gICAgKTtcblxuICAgIG5ldyBUZXh0RmlsZSh0aGlzLCAnLmdpdGh1Yi9JU1NVRV9URU1QTEFURS9idWdfcmVwb3J0Lm1kJywge1xuICAgICAgbGluZXM6IFtmcy5yZWFkRmlsZVN5bmMoYCR7YmFzZUFzc2V0c0RpcmVjdG9yeX0vY29tbW9uL2dpdGh1Yl9idWdfcmVwb3J0Lm1kYCkudG9TdHJpbmcoKV0sXG4gICAgfSk7XG5cbiAgICBuZXcgVGV4dEZpbGUodGhpcywgJy5naXRodWIvSVNTVUVfVEVNUExBVEUvZmVhdHVyZV9yZXF1ZXN0Lm1kJywge1xuICAgICAgbGluZXM6IFtmcy5yZWFkRmlsZVN5bmMoYCR7YmFzZUFzc2V0c0RpcmVjdG9yeX0vY29tbW9uL2dpdGh1Yl9mZWF0dXJlX3JlcXVlc3QubWRgKS50b1N0cmluZygpXSxcbiAgICB9KTtcblxuICAgIG5ldyBZYW1sRmlsZSh0aGlzLCAnLmdpdGh1Yi9GVU5ESU5HLnlhbWwnLCB7XG4gICAgICBvYmo6IHtcbiAgICAgICAgZ2l0aHViOiAnbWF2b2dlbCcsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgbmV3IFRleHRGaWxlKHRoaXMsICdDT05UUklCVVRJTkcubWQnLCB7XG4gICAgICBsaW5lczogW2ZzLnJlYWRGaWxlU3luYyhgJHtiYXNlQXNzZXRzRGlyZWN0b3J5fS9jb21tb24vY29udHJpYnV0aW5nLm1kYCkudG9TdHJpbmcoKV0sXG4gICAgfSk7XG5cbiAgICBuZXcgVGV4dEZpbGUodGhpcywgJy5wcmV0dGllcnJjJywge1xuICAgICAgbGluZXM6IFtmcy5yZWFkRmlsZVN5bmMoYCR7YmFzZUFzc2V0c0RpcmVjdG9yeX0vY29tbW9uL3ByZXR0aWVycmNgKS50b1N0cmluZygpXSxcbiAgICB9KTtcblxuICAgIC8vIHdyaXRlIHNhbXBsZSBjb2RlIHRvIG1haW4udHMgJiB0byBtYWluLnRlc3QudHNcbiAgICBpZiAob3B0aW9ucy5zYW1wbGVDb2RlID8/IHRydWUpIHtcbiAgICAgIG5ldyBTYW1wbGVDb2RlKHRoaXMsIHtcbiAgICAgICAgYmFzZUFzc2V0c0RpcmVjdG9yeSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5pbnRlcmZhY2UgU2FtcGxlQ29kZU9wdGlvbnMge1xuICByZWFkb25seSBiYXNlQXNzZXRzRGlyZWN0b3J5Pzogc3RyaW5nO1xufVxuXG5jbGFzcyBTYW1wbGVDb2RlIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBsaWJyYXJ5OiBBd3NDZGtDb25zdHJ1Y3RMaWJyYXJ5O1xuICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IFNhbXBsZUNvZGVPcHRpb25zO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGxpYnJhcnk6IEF3c0Nka0NvbnN0cnVjdExpYnJhcnksXG4gICAgb3B0aW9uczogU2FtcGxlQ29kZU9wdGlvbnMsXG4gICkge1xuICAgIHN1cGVyKGxpYnJhcnkpO1xuICAgIHRoaXMubGlicmFyeSA9IGxpYnJhcnk7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIHB1YmxpYyBzeW50aGVzaXplKCkge1xuICAgIGNvbnN0IG91dGRpciA9IHRoaXMucHJvamVjdC5vdXRkaXI7XG4gICAgY29uc3Qgc3JjZGlyID0gcGF0aC5qb2luKG91dGRpciwgdGhpcy5saWJyYXJ5LnNyY2Rpcik7XG4gICAgaWYgKFxuICAgICAgZnMuZXhpc3RzU3luYyhzcmNkaXIpICYmXG4gICAgICBmcy5yZWFkZGlyU3luYyhzcmNkaXIpLmZpbHRlcigoeCkgPT4geC5lbmRzV2l0aCgnLnRzJykpICYmXG4gICAgICAhZnMucmVhZEZpbGVTeW5jKGAke3NyY2Rpcn0vaW5kZXgudHNgKS50b1N0cmluZygpLmluY2x1ZGVzKCdleHBvcnQgY2xhc3MgSGVsbG8nKSAvLyBOb3RlOiBmcm9tIHBhcmVudFxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZzLm1rZGlyU3luYyhzcmNkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKHNyY2RpciwgJ2luZGV4LnRzJyksIGZzLnJlYWRGaWxlU3luYyhgJHt0aGlzLm9wdGlvbnMuYmFzZUFzc2V0c0RpcmVjdG9yeX0vY2RrLWNvbnN0cnVjdC9zcmNfaW5kZXgudHNgKS50b1N0cmluZygpKTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihzcmNkaXIsICdwbGFjZWhvbGRlci50cycpLCBmcy5yZWFkRmlsZVN5bmMoYCR7dGhpcy5vcHRpb25zLmJhc2VBc3NldHNEaXJlY3Rvcnl9L2Nkay1jb25zdHJ1Y3Qvc3JjX3BsYWNlaG9sZGVyLnRzYCkudG9TdHJpbmcoKSk7XG4gICAgLy8gY3JkIHdpdGggbGFtYmRhIGdlbmVyYXRpb25cbiAgICBmcy5ta2RpclN5bmMoYCR7c3JjZGlyfS9jcmQtZXhhbXBsZWAsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKGAke3NyY2Rpcn0vY3JkLWV4YW1wbGVgLCAnY3JkLWV4YW1wbGUudHMnKSwgZnMucmVhZEZpbGVTeW5jKGAke3RoaXMub3B0aW9ucy5iYXNlQXNzZXRzRGlyZWN0b3J5fS9jZGstY29uc3RydWN0L3NyY19jcmQtZXhhbXBsZS50c2ApLnRvU3RyaW5nKCkpO1xuICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKGAke3NyY2Rpcn0vY3JkLWV4YW1wbGVgLCAnY3JkLWV4YW1wbGUubGFtYmRhLnRzJyksIGZzLnJlYWRGaWxlU3luYyhgJHt0aGlzLm9wdGlvbnMuYmFzZUFzc2V0c0RpcmVjdG9yeX0vY2RrLWNvbnN0cnVjdC9zcmNfY3JkLWV4YW1wbGUubGFtYmRhLnRzYCkudG9TdHJpbmcoKSk7XG5cblxuICAgIGNvbnN0IHRlc3RkaXIgPSBwYXRoLmpvaW4ob3V0ZGlyLCB0aGlzLmxpYnJhcnkudGVzdGRpcik7XG4gICAgaWYgKFxuICAgICAgZnMuZXhpc3RzU3luYyh0ZXN0ZGlyKSAmJlxuICAgICAgZnMucmVhZGRpclN5bmModGVzdGRpcikuZmlsdGVyKCh4KSA9PiB4LmVuZHNXaXRoKCcudHMnKSkgJiZcbiAgICAgICFmcy5leGlzdHNTeW5jKGAke3Rlc3RkaXJ9L2hlbGxvLnRlc3QudHNgKSAvLyBOb3RlOiBmcm9tIHBhcmVudFxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyByZW1vdmUgJHt0ZXN0ZGlyfS9oZWxsby50ZXN0LnRzIGZpbGUuIE9uIHRoZSBvdGhlciBoYW5kLCB3ZSBvdmVycmlkZSBpbmRleC50c1xuICAgIGZzLnVubGlua1N5bmMoYCR7dGVzdGRpcn0vaGVsbG8udGVzdC50c2ApO1xuICAgIGZzLm1rZGlyU3luYyh0ZXN0ZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbih0ZXN0ZGlyLCAnaW5kZXgudGVzdC50cycpLCBmcy5yZWFkRmlsZVN5bmMoYCR7dGhpcy5vcHRpb25zLmJhc2VBc3NldHNEaXJlY3Rvcnl9L2Nkay1jb25zdHJ1Y3QvdGVzdF9pbmRleC50ZXN0LnRzYCkudG9TdHJpbmcoKSk7XG4gICAgLy8gbGFtYmRhIHRlc3RzIHdpdGggamVzdCBzdHVic1xuICAgIGZzLm1rZGlyU3luYyhgJHt0ZXN0ZGlyfS9jcmQtZXhhbXBsZWAsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKGAke3Rlc3RkaXJ9L2NyZC1leGFtcGxlYCwgJ2NyZC1leGFtcGxlLnRlc3QudHMnKSwgZnMucmVhZEZpbGVTeW5jKGAke3RoaXMub3B0aW9ucy5iYXNlQXNzZXRzRGlyZWN0b3J5fS9jZGstY29uc3RydWN0L3Rlc3RfY3JkLWV4YW1wbGUudGVzdC50c2ApLnRvU3RyaW5nKCkpO1xuXG5cbiAgICBjb25zdCBpbnRlZ1Rlc3RkaXIgPSBwYXRoLmpvaW4ob3V0ZGlyLCAnaW50ZWctdGVzdHMnKTtcbiAgICBpZiAoXG4gICAgICBmcy5leGlzdHNTeW5jKGludGVnVGVzdGRpcikgJiZcbiAgICAgIGZzLnJlYWRkaXJTeW5jKGludGVnVGVzdGRpcikuZmlsdGVyKCh4KSA9PiB4LmVuZHNXaXRoKCcudHMnKSlcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZnMubWtkaXJTeW5jKGludGVnVGVzdGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4oaW50ZWdUZXN0ZGlyLCAnaW50ZWcucGxhY2Vob2xkZXIudHMnKSwgZnMucmVhZEZpbGVTeW5jKGAke3RoaXMub3B0aW9ucy5iYXNlQXNzZXRzRGlyZWN0b3J5fS9jZGstY29uc3RydWN0L2ludGVnX2ludGVnLnBsYWNlaG9sZGVyLnRzYCkudG9TdHJpbmcoKSk7XG5cbiAgICBjb25zdCBpbnRlZ1Rlc3RGdW5jdGlvbnNkaXIgPSBwYXRoLmpvaW4oaW50ZWdUZXN0ZGlyLCAnZnVuY3Rpb25zJyk7XG4gICAgaWYgKFxuICAgICAgZnMuZXhpc3RzU3luYyhpbnRlZ1Rlc3RGdW5jdGlvbnNkaXIpICYmXG4gICAgICBmcy5yZWFkZGlyU3luYyhpbnRlZ1Rlc3RGdW5jdGlvbnNkaXIpLmZpbHRlcigoeCkgPT4geC5lbmRzV2l0aCgnLnRzJykpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZzLm1rZGlyU3luYyhpbnRlZ1Rlc3RGdW5jdGlvbnNkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKGludGVnVGVzdEZ1bmN0aW9uc2RpciwgJ3Rlc3QtaGFuZGxlci50cycpLCBmcy5yZWFkRmlsZVN5bmMoYCR7dGhpcy5vcHRpb25zLmJhc2VBc3NldHNEaXJlY3Rvcnl9L2Nkay1jb25zdHJ1Y3QvaW50ZWdfdGVzdC1oYW5kbGVyLnRzYCkudG9TdHJpbmcoKSk7XG5cbiAgICBjb25zdCBkb2NzZGlyID0gcGF0aC5qb2luKG91dGRpciwgJ2RvY3MnKTtcbiAgICBpZiAoXG4gICAgICBmcy5leGlzdHNTeW5jKGRvY3NkaXIpICYmXG4gICAgICBmcy5yZWFkZGlyU3luYyhkb2NzZGlyKS5maWx0ZXIoKHgpID0+IHguZW5kc1dpdGgoJy5kcmF3aW8nKSlcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZnMubWtkaXJTeW5jKGRvY3NkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKGRvY3NkaXIsICdwbGFjZWhvbGRlci5kcmF3aW8nKSwgZnMucmVhZEZpbGVTeW5jKGAke3RoaXMub3B0aW9ucy5iYXNlQXNzZXRzRGlyZWN0b3J5fS9jb21tb24vZG9jc19wbGFjZWhvbGRlci5kcmF3aW9gKS50b1N0cmluZygpKTtcblxuICAgIGNvbnN0IGV4YW1wbGVzZGlyID0gcGF0aC5qb2luKG91dGRpciwgJ2V4YW1wbGVzJywgJ3NpbXBsZScpO1xuICAgIGlmIChcbiAgICAgIGZzLmV4aXN0c1N5bmMoZXhhbXBsZXNkaXIpICYmXG4gICAgICBmcy5yZWFkZGlyU3luYyhleGFtcGxlc2RpcikuZmlsdGVyKCh4KSA9PiB4LmVuZHNXaXRoKCcuZHJhd2lvJykpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZzLm1rZGlyU3luYyhleGFtcGxlc2RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4oZXhhbXBsZXNkaXIsICdtYWluLnRzJyksIGZzLnJlYWRGaWxlU3luYyhgJHt0aGlzLm9wdGlvbnMuYmFzZUFzc2V0c0RpcmVjdG9yeX0vY2RrLWNvbnN0cnVjdC9leGFtcGxlc19zaW1wbGVfbWFpbi50c2ApLnRvU3RyaW5nKCkpO1xuICB9XG59Il19
|
|
@@ -274,7 +274,7 @@ type MvcCdkConstructLibrary interface {
|
|
|
274
274
|
AddKeywords(keywords ...*string)
|
|
275
275
|
// Adds patterns to be ignored by npm.
|
|
276
276
|
// Experimental.
|
|
277
|
-
AddPackageIgnore(
|
|
277
|
+
AddPackageIgnore(_pattern *string)
|
|
278
278
|
// Defines peer dependencies.
|
|
279
279
|
//
|
|
280
280
|
// When adding peer dependencies, a devDependency will also be added on the
|
|
@@ -305,7 +305,7 @@ type MvcCdkConstructLibrary interface {
|
|
|
305
305
|
// See: https://github.com/github/linguist/blob/master/docs/overrides.md
|
|
306
306
|
//
|
|
307
307
|
// Deprecated.
|
|
308
|
-
AnnotateGenerated(
|
|
308
|
+
AnnotateGenerated(_glob *string)
|
|
309
309
|
// Projen default Typescript compiler options.
|
|
310
310
|
// Experimental.
|
|
311
311
|
DefaultTypeScriptCompilerOptions() *javascript.TypeScriptCompilerOptions
|
|
@@ -371,6 +371,15 @@ type MvcCdkConstructLibrary interface {
|
|
|
371
371
|
// the file was not found.
|
|
372
372
|
// Experimental.
|
|
373
373
|
TryRemoveFile(filePath *string) projen.FileBase
|
|
374
|
+
// Applies one or more mixins to this construct.
|
|
375
|
+
//
|
|
376
|
+
// Mixins are applied in order. The list of constructs is captured at the
|
|
377
|
+
// start of the call, so constructs added by a mixin will not be visited.
|
|
378
|
+
// Use multiple `with()` calls if subsequent mixins should apply to added
|
|
379
|
+
// constructs.
|
|
380
|
+
//
|
|
381
|
+
// Returns: This construct for chaining.
|
|
382
|
+
With(mixins ...constructs.IMixin) constructs.IConstruct
|
|
374
383
|
}
|
|
375
384
|
|
|
376
385
|
// The jsii proxy struct for MvcCdkConstructLibrary
|
|
@@ -1332,14 +1341,14 @@ func (m *jsiiProxy_MvcCdkConstructLibrary) AddKeywords(keywords ...*string) {
|
|
|
1332
1341
|
)
|
|
1333
1342
|
}
|
|
1334
1343
|
|
|
1335
|
-
func (m *jsiiProxy_MvcCdkConstructLibrary) AddPackageIgnore(
|
|
1336
|
-
if err := m.validateAddPackageIgnoreParameters(
|
|
1344
|
+
func (m *jsiiProxy_MvcCdkConstructLibrary) AddPackageIgnore(_pattern *string) {
|
|
1345
|
+
if err := m.validateAddPackageIgnoreParameters(_pattern); err != nil {
|
|
1337
1346
|
panic(err)
|
|
1338
1347
|
}
|
|
1339
1348
|
_jsii_.InvokeVoid(
|
|
1340
1349
|
m,
|
|
1341
1350
|
"addPackageIgnore",
|
|
1342
|
-
[]interface{}{
|
|
1351
|
+
[]interface{}{_pattern},
|
|
1343
1352
|
)
|
|
1344
1353
|
}
|
|
1345
1354
|
|
|
@@ -1407,14 +1416,14 @@ func (m *jsiiProxy_MvcCdkConstructLibrary) AddTip(message *string) {
|
|
|
1407
1416
|
)
|
|
1408
1417
|
}
|
|
1409
1418
|
|
|
1410
|
-
func (m *jsiiProxy_MvcCdkConstructLibrary) AnnotateGenerated(
|
|
1411
|
-
if err := m.validateAnnotateGeneratedParameters(
|
|
1419
|
+
func (m *jsiiProxy_MvcCdkConstructLibrary) AnnotateGenerated(_glob *string) {
|
|
1420
|
+
if err := m.validateAnnotateGeneratedParameters(_glob); err != nil {
|
|
1412
1421
|
panic(err)
|
|
1413
1422
|
}
|
|
1414
1423
|
_jsii_.InvokeVoid(
|
|
1415
1424
|
m,
|
|
1416
1425
|
"annotateGenerated",
|
|
1417
|
-
[]interface{}{
|
|
1426
|
+
[]interface{}{_glob},
|
|
1418
1427
|
)
|
|
1419
1428
|
}
|
|
1420
1429
|
|
|
@@ -1618,3 +1627,21 @@ func (m *jsiiProxy_MvcCdkConstructLibrary) TryRemoveFile(filePath *string) proje
|
|
|
1618
1627
|
return returns
|
|
1619
1628
|
}
|
|
1620
1629
|
|
|
1630
|
+
func (m *jsiiProxy_MvcCdkConstructLibrary) With(mixins ...constructs.IMixin) constructs.IConstruct {
|
|
1631
|
+
args := []interface{}{}
|
|
1632
|
+
for _, a := range mixins {
|
|
1633
|
+
args = append(args, a)
|
|
1634
|
+
}
|
|
1635
|
+
|
|
1636
|
+
var returns constructs.IConstruct
|
|
1637
|
+
|
|
1638
|
+
_jsii_.Invoke(
|
|
1639
|
+
m,
|
|
1640
|
+
"with",
|
|
1641
|
+
args,
|
|
1642
|
+
&returns,
|
|
1643
|
+
)
|
|
1644
|
+
|
|
1645
|
+
return returns
|
|
1646
|
+
}
|
|
1647
|
+
|
|
@@ -48,6 +48,11 @@ type MvcCdkConstructLibraryOptions struct {
|
|
|
48
48
|
// The parent project, if this project is part of a bigger project.
|
|
49
49
|
// Experimental.
|
|
50
50
|
Parent projen.Project `field:"optional" json:"parent" yaml:"parent"`
|
|
51
|
+
// Generate a project tree file (`.projen/tree.json`) that shows all components and their relationships. Useful for understanding your project structure and debugging.
|
|
52
|
+
// Default: false.
|
|
53
|
+
//
|
|
54
|
+
// Experimental.
|
|
55
|
+
ProjectTree *bool `field:"optional" json:"projectTree" yaml:"projectTree"`
|
|
51
56
|
// The shell command to use in order to run the projen CLI.
|
|
52
57
|
//
|
|
53
58
|
// Can be used to customize in special environments.
|
|
@@ -642,7 +647,21 @@ type MvcCdkConstructLibraryOptions struct {
|
|
|
642
647
|
//
|
|
643
648
|
// Experimental.
|
|
644
649
|
ArtifactsDirectory *string `field:"optional" json:"artifactsDirectory" yaml:"artifactsDirectory"`
|
|
645
|
-
//
|
|
650
|
+
// Run security audit on dependencies.
|
|
651
|
+
//
|
|
652
|
+
// When enabled, creates an "audit" task that checks for known security vulnerabilities
|
|
653
|
+
// in dependencies. By default, runs during every build and checks for "high" severity
|
|
654
|
+
// vulnerabilities or above in all dependencies (including dev dependencies).
|
|
655
|
+
// Default: false.
|
|
656
|
+
//
|
|
657
|
+
// Experimental.
|
|
658
|
+
AuditDeps *bool `field:"optional" json:"auditDeps" yaml:"auditDeps"`
|
|
659
|
+
// Security audit options.
|
|
660
|
+
// Default: - default options.
|
|
661
|
+
//
|
|
662
|
+
// Experimental.
|
|
663
|
+
AuditDepsOptions *javascript.AuditOptions `field:"optional" json:"auditDepsOptions" yaml:"auditDepsOptions"`
|
|
664
|
+
// Automatically approve deps upgrade PRs, allowing them to be merged by mergify (if configured).
|
|
646
665
|
//
|
|
647
666
|
// Throw if set to true but `autoApproveOptions` are not defined.
|
|
648
667
|
// Default: - true.
|
|
@@ -717,7 +736,7 @@ type MvcCdkConstructLibraryOptions struct {
|
|
|
717
736
|
// Use tasks and github workflows to handle dependency upgrades.
|
|
718
737
|
//
|
|
719
738
|
// Cannot be used in conjunction with `dependabot`.
|
|
720
|
-
// Default: true.
|
|
739
|
+
// Default: - `true` for root projects, `false` for subprojects.
|
|
721
740
|
//
|
|
722
741
|
// Experimental.
|
|
723
742
|
DepsUpgrade *bool `field:"optional" json:"depsUpgrade" yaml:"depsUpgrade"`
|
|
@@ -994,7 +1013,7 @@ type MvcCdkConstructLibraryOptions struct {
|
|
|
994
1013
|
// NOTE: The jsii compiler releases since 5.0.0 are not semantically versioned
|
|
995
1014
|
// and should remain on the same minor, so we recommend using a `~` dependency
|
|
996
1015
|
// (e.g. `~5.0.0`).
|
|
997
|
-
// Default: "~5.
|
|
1016
|
+
// Default: "~5.9.0"
|
|
998
1017
|
//
|
|
999
1018
|
// Experimental.
|
|
1000
1019
|
JsiiVersion *string `field:"optional" json:"jsiiVersion" yaml:"jsiiVersion"`
|
|
@@ -1041,7 +1060,7 @@ type MvcCdkConstructLibraryOptions struct {
|
|
|
1041
1060
|
// Experimental.
|
|
1042
1061
|
Catalog *cdk.Catalog `field:"optional" json:"catalog" yaml:"catalog"`
|
|
1043
1062
|
// Minimum version of the AWS CDK to depend on.
|
|
1044
|
-
// Default: "2.1
|
|
1063
|
+
// Default: "2.189.1"
|
|
1045
1064
|
//
|
|
1046
1065
|
// Experimental.
|
|
1047
1066
|
CdkVersion *string `field:"required" json:"cdkVersion" yaml:"cdkVersion"`
|
|
@@ -1096,7 +1115,7 @@ type MvcCdkConstructLibraryOptions struct {
|
|
|
1096
1115
|
CdkVersionPinning *bool `field:"optional" json:"cdkVersionPinning" yaml:"cdkVersionPinning"`
|
|
1097
1116
|
// Minimum version of the `constructs` library to depend on.
|
|
1098
1117
|
// Default: - for CDK 1.x the default is "3.2.27", for CDK 2.x the default is
|
|
1099
|
-
// "10.
|
|
1118
|
+
// "10.5.1".
|
|
1100
1119
|
//
|
|
1101
1120
|
// Experimental.
|
|
1102
1121
|
ConstructsVersion *string `field:"optional" json:"constructsVersion" yaml:"constructsVersion"`
|
|
@@ -36,9 +36,9 @@ func (m *jsiiProxy_MvcCdkConstructLibrary) validateAddGitIgnoreParameters(patter
|
|
|
36
36
|
return nil
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
func (m *jsiiProxy_MvcCdkConstructLibrary) validateAddPackageIgnoreParameters(
|
|
40
|
-
if
|
|
41
|
-
return fmt.Errorf("parameter
|
|
39
|
+
func (m *jsiiProxy_MvcCdkConstructLibrary) validateAddPackageIgnoreParameters(_pattern *string) error {
|
|
40
|
+
if _pattern == nil {
|
|
41
|
+
return fmt.Errorf("parameter _pattern is required, but nil was provided")
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
return nil
|
|
@@ -72,9 +72,9 @@ func (m *jsiiProxy_MvcCdkConstructLibrary) validateAddTipParameters(message *str
|
|
|
72
72
|
return nil
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
-
func (m *jsiiProxy_MvcCdkConstructLibrary) validateAnnotateGeneratedParameters(
|
|
76
|
-
if
|
|
77
|
-
return fmt.Errorf("parameter
|
|
75
|
+
func (m *jsiiProxy_MvcCdkConstructLibrary) validateAnnotateGeneratedParameters(_glob *string) error {
|
|
76
|
+
if _glob == nil {
|
|
77
|
+
return fmt.Errorf("parameter _glob is required, but nil was provided")
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
return nil
|
|
@@ -16,7 +16,7 @@ func (m *jsiiProxy_MvcCdkConstructLibrary) validateAddGitIgnoreParameters(patter
|
|
|
16
16
|
return nil
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
func (m *jsiiProxy_MvcCdkConstructLibrary) validateAddPackageIgnoreParameters(
|
|
19
|
+
func (m *jsiiProxy_MvcCdkConstructLibrary) validateAddPackageIgnoreParameters(_pattern *string) error {
|
|
20
20
|
return nil
|
|
21
21
|
}
|
|
22
22
|
|
|
@@ -32,7 +32,7 @@ func (m *jsiiProxy_MvcCdkConstructLibrary) validateAddTipParameters(message *str
|
|
|
32
32
|
return nil
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
func (m *jsiiProxy_MvcCdkConstructLibrary) validateAnnotateGeneratedParameters(
|
|
35
|
+
func (m *jsiiProxy_MvcCdkConstructLibrary) validateAnnotateGeneratedParameters(_glob *string) error {
|
|
36
36
|
return nil
|
|
37
37
|
}
|
|
38
38
|
|
package/mavogelmvcprojen/go.mod
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
module github.com/MV-Consulting/mvc-projen/mavogelmvcprojen
|
|
2
2
|
|
|
3
|
-
go 1.
|
|
3
|
+
go 1.25
|
|
4
4
|
|
|
5
5
|
require (
|
|
6
|
-
github.com/aws/jsii-runtime-go v1.
|
|
7
|
-
github.com/aws/constructs-go/constructs/v10 v10.
|
|
8
|
-
github.com/projen/projen-go/projen v0.
|
|
6
|
+
github.com/aws/jsii-runtime-go v1.127.0
|
|
7
|
+
github.com/aws/constructs-go/constructs/v10 v10.5.1
|
|
8
|
+
github.com/projen/projen-go/projen v0.99.19
|
|
9
9
|
)
|
|
@@ -13,7 +13,7 @@ import (
|
|
|
13
13
|
projen "github.com/projen/projen-go/projen/jsii"
|
|
14
14
|
)
|
|
15
15
|
|
|
16
|
-
//go:embed mavogel-mvc-projen-0.0.
|
|
16
|
+
//go:embed mavogel-mvc-projen-0.0.14.tgz
|
|
17
17
|
var tarball []byte
|
|
18
18
|
|
|
19
19
|
// Initialize loads the necessary packages in the @jsii/kernel to support the enclosing module.
|
|
@@ -24,5 +24,5 @@ func Initialize() {
|
|
|
24
24
|
projen.Initialize()
|
|
25
25
|
|
|
26
26
|
// Load this library into the kernel
|
|
27
|
-
_jsii_.Load("@mavogel/mvc-projen", "0.0.
|
|
27
|
+
_jsii_.Load("@mavogel/mvc-projen", "0.0.14", tarball)
|
|
28
28
|
}
|
package/mavogelmvcprojen/main.go
CHANGED
|
@@ -112,6 +112,7 @@ func init() {
|
|
|
112
112
|
_jsii_.MemberProperty{JsiiProperty: "version", GoGetter: "Version"},
|
|
113
113
|
_jsii_.MemberProperty{JsiiProperty: "vscode", GoGetter: "Vscode"},
|
|
114
114
|
_jsii_.MemberProperty{JsiiProperty: "watchTask", GoGetter: "WatchTask"},
|
|
115
|
+
_jsii_.MemberMethod{JsiiMethod: "with", GoMethod: "With"},
|
|
115
116
|
_jsii_.MemberProperty{JsiiProperty: "workflowBootstrapSteps", GoGetter: "WorkflowBootstrapSteps"},
|
|
116
117
|
_jsii_.MemberProperty{JsiiProperty: "workflowPackageCache", GoGetter: "WorkflowPackageCache"},
|
|
117
118
|
},
|
package/mavogelmvcprojen/version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.0.
|
|
1
|
+
0.0.14
|
package/package.json
CHANGED
|
@@ -36,38 +36,38 @@
|
|
|
36
36
|
"organization": false
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@commitlint/cli": "^
|
|
40
|
-
"@commitlint/config-conventional": "^
|
|
39
|
+
"@commitlint/cli": "^20.4.2",
|
|
40
|
+
"@commitlint/config-conventional": "^20.4.2",
|
|
41
41
|
"@stylistic/eslint-plugin": "^2",
|
|
42
|
-
"@types/jest": "^
|
|
43
|
-
"@types/node": "^
|
|
42
|
+
"@types/jest": "^30.0.0",
|
|
43
|
+
"@types/node": "^25",
|
|
44
44
|
"@typescript-eslint/eslint-plugin": "^8",
|
|
45
45
|
"@typescript-eslint/parser": "^8",
|
|
46
46
|
"commit-and-tag-version": "^12",
|
|
47
|
-
"constructs": "10.
|
|
47
|
+
"constructs": "10.5.1",
|
|
48
48
|
"eslint": "^9",
|
|
49
|
-
"eslint-import-resolver-typescript": "^
|
|
50
|
-
"eslint-plugin-import": "^2.
|
|
49
|
+
"eslint-import-resolver-typescript": "^4.4.4",
|
|
50
|
+
"eslint-plugin-import": "^2.32.0",
|
|
51
51
|
"husky": "^9.1.7",
|
|
52
|
-
"jest": "^
|
|
52
|
+
"jest": "^30.2.0",
|
|
53
53
|
"jest-junit": "^16",
|
|
54
54
|
"jsii": "~5.9.0",
|
|
55
|
-
"jsii-diff": "^1.
|
|
55
|
+
"jsii-diff": "^1.127.0",
|
|
56
56
|
"jsii-docgen": "^10.5.0",
|
|
57
|
-
"jsii-pacmak": "^1.
|
|
57
|
+
"jsii-pacmak": "^1.127.0",
|
|
58
58
|
"jsii-rosetta": "~5.9.0",
|
|
59
|
-
"projen": "0.
|
|
60
|
-
"ts-jest": "^29.
|
|
61
|
-
"ts-node": "^
|
|
62
|
-
"typescript": "^5.
|
|
59
|
+
"projen": "0.99.19",
|
|
60
|
+
"ts-jest": "^29.4.6",
|
|
61
|
+
"ts-node": "^10",
|
|
62
|
+
"typescript": "^5.9.3"
|
|
63
63
|
},
|
|
64
64
|
"peerDependencies": {
|
|
65
|
-
"constructs": "^10.
|
|
66
|
-
"projen": "0.
|
|
65
|
+
"constructs": "^10.5.1",
|
|
66
|
+
"projen": "^0.99.19"
|
|
67
67
|
},
|
|
68
68
|
"dependencies": {
|
|
69
|
-
"constructs": "^10.
|
|
70
|
-
"projen": "0.
|
|
69
|
+
"constructs": "^10.5.1",
|
|
70
|
+
"projen": "^0.99.19"
|
|
71
71
|
},
|
|
72
72
|
"keywords": [
|
|
73
73
|
"aws",
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
"publishConfig": {
|
|
81
81
|
"access": "public"
|
|
82
82
|
},
|
|
83
|
-
"version": "0.0.
|
|
83
|
+
"version": "0.0.15",
|
|
84
84
|
"jest": {
|
|
85
85
|
"coverageProvider": "v8",
|
|
86
86
|
"testMatch": [
|
|
@@ -133,7 +133,7 @@
|
|
|
133
133
|
"targets": {
|
|
134
134
|
"python": {
|
|
135
135
|
"distName": "mvc-projen",
|
|
136
|
-
"module": "
|
|
136
|
+
"module": "mvc_projen"
|
|
137
137
|
},
|
|
138
138
|
"go": {
|
|
139
139
|
"moduleName": "github.com/MV-Consulting/mvc-projen"
|