@mavogel/mvc-projen 0.0.34 → 0.0.35
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 +8 -8
- package/README.md +17 -18
- package/assets/cdk-construct/src_crd-example.lambda.ts +5 -8
- package/assets/common/github_readme_cta.md +14 -14
- package/lib/projects/cdk-construct.js +82 -6
- package/mavogelmvcprojen/go.mod +1 -1
- package/mavogelmvcprojen/jsii/jsii.go +2 -2
- package/mavogelmvcprojen/version +1 -1
- package/package.json +1 -1
package/.jsii
CHANGED
|
@@ -105,7 +105,7 @@
|
|
|
105
105
|
},
|
|
106
106
|
"name": "@mavogel/mvc-projen",
|
|
107
107
|
"readme": {
|
|
108
|
-
"markdown": "\n[](https://github.com/mavogel/mvc-projen/actions/workflows/build.yml)\n[](https://eslint.org)\n[](https://github.com/mavogel/mvc-projen/releases)\n\n[](https://www.npmjs.com/package/@mavogel/mvc-projen)\n[](https://www.npmjs.com/package/@mavogel/mvc-projen)\n\n# mvc-projen\n\nThe [projen](https://projen.io/) baseline for all [MV Consulting](https://manuel-vogel.de/) projects.\n\n## Table of Contents\n\n- [Features](#features)\n- [Usage](#usage)\n- [Inspiration](#inspiration)\n\n## Features\n- 📏 **Best Practice and unified Setup**: All the scaffolders we need are in one place and tested. From `cdk-constructs` to later `clis` with [golang](https://go.dev/)\n- 🏗️ **Extensibility**: Pass in customized options for the scaffolder templates\n\n## Usage\n\n```bash\n# 1. create a new project directory\nmkdir my-new-construct && cd my-new-construct\n\n# 2. set up the project using the projen new command\nnpx projen new
|
|
108
|
+
"markdown": "\n[](https://github.com/mavogel/mvc-projen/actions/workflows/build.yml)\n[](https://eslint.org)\n[](https://github.com/mavogel/mvc-projen/releases)\n\n[](https://www.npmjs.com/package/@mavogel/mvc-projen)\n[](https://www.npmjs.com/package/@mavogel/mvc-projen)\n\n# mvc-projen\n\nThe [projen](https://projen.io/) baseline for all [MV Consulting](https://manuel-vogel.de/) projects.\n\n## Table of Contents\n\n- [Features](#features)\n- [Usage](#usage)\n- [Inspiration](#inspiration)\n\n## Features\n- 📏 **Best Practice and unified Setup**: All the scaffolders we need are in one place and tested. From `cdk-constructs` to later `clis` with [golang](https://go.dev/)\n- 🏗️ **Extensibility**: Pass in customized options for the scaffolder templates\n\n## Usage\n\n```bash\n# 1. create a new project directory\nmkdir my-new-construct && cd my-new-construct\n\n# 2. set up the project using the projen new command\nnpx projen new --from @mavogel/mvc-projen@~0\n```\n\nBy default this uses npm and a recent AWS CDK version; pass `--cdkVersion=x.y.z` or `--package-manager=<pnpm|yarn|...>` to override either.\n\n## Inspiration\nThis project was created based on the following inspiration\n- [taimos-projen](https://github.com/taimos/taimos-projen): code from [Thorsten Höger](https://www.taimos.de/) has always been an inspiration for my `cdk` and [projen](https://projen.io/) projects.\n- [projen-cdk-hugo-pipeline](https://github.com/MV-Consulting/projen-cdk-hugo-pipeline/): a previous projen baseline we built, during which we learned a lot about the internal of projen. We could build up on this knowledge.\n\n## Unlock the Full Potential of Your AWS Cloud Infrastructure\n\nHi, I’m Manuel, an AWS expert passionate about empowering businesses with **scalable, resilient, and cost-optimized cloud solutions**. I specialize in crafting **tailored AWS architectures** and **DevOps-driven workflows** that not only meet your current needs but grow with you.\n\n---\n\n### Why Work With Me?\n\n✔️ **Tailored AWS Solutions:** Every business is unique, so I design custom solutions that fit your goals and challenges.\n✔️ **Well-Architected Designs:** From scalability to security, my solutions align with AWS Well-Architected Framework.\n✔️ **Cloud-Native Focus:** I specialize in modern, cloud-native systems that embrace the full potential of AWS.\n✔️ **Business-Driven Tech:** Technology should serve your business, not the other way around.\n\n---\n\n### What I Bring to the Table\n\n**AWS Certifications**\nI’m **AWS Certified Solutions Architect and DevOps – Professional** and hold numerous additional certifications, so you can trust I’ll bring industry best practices to your projects. Feel free to explose by [badges](https://www.credly.com/users/manuel-vogel)\n\n**Infrastructure as Code (IaC)**\nWith deep expertise in **AWS CDK** and **Terraform**, I ensure your infrastructure is automated, maintainable, and scalable.\n\n**DevOps Expertise**\nFrom CI/CD pipelines with **GitHub Actions** and **GitLab CI** to container orchestration **Kubernetes** and others, I deliver workflows that are smooth and efficient.\n\n**Hands-On Experience**\nWith over **8 years of AWS experience** and a decade in the tech world, I’ve delivered solutions for companies large and small. My open-source contributions showcase my commitment to transparency and innovation. Feel free to explore my [GitHub profile](https://github.com/mavogel)\n\n---\n\n### Let’s Build Something Great Together\n\nI know that choosing the right partner is critical to your success. When you work with me, you’re not just contracting an engineer – you’re gaining a trusted advisor and hands-on expert who cares about your business as much as you do.\n\n✔️ **Direct Collaboration**: No middlemen or red tape – you work with me directly.\n✔️ **Transparent Process**: Expect open communication, clear timelines, and visible results.\n✔️ **Real Value**: My solutions focus on delivering measurable impact for your business.\n\n\n<a href=\"https://calendar.app.google/7aahUfGifBUvgX62A\"><img alt=\"Schedule your call\" src=\"https://img.shields.io/badge/schedule%20your%20call-success.svg?style=for-the-badge\"/></a>\n\n---\n\n## Acknowledgements\n\nBig shoutout to the amazing team behind [Projen](https://github.com/projen/projen)!\nTheir groundbreaking work simplifies cloud infrastructure projects and inspires us every day. 💡\n\n## Author\n\n[Manuel Vogel-Johnson](https://vogel-johnson.com/about/)\n\n[](https://www.linkedin.com/in/manuel-vogel-johnson)\n[](https://github.com/mavogel)"
|
|
109
109
|
},
|
|
110
110
|
"repository": {
|
|
111
111
|
"type": "git",
|
|
@@ -142,7 +142,7 @@
|
|
|
142
142
|
},
|
|
143
143
|
"locationInModule": {
|
|
144
144
|
"filename": "src/projects/cdk-construct.ts",
|
|
145
|
-
"line":
|
|
145
|
+
"line": 66
|
|
146
146
|
},
|
|
147
147
|
"parameters": [
|
|
148
148
|
{
|
|
@@ -156,7 +156,7 @@
|
|
|
156
156
|
"kind": "class",
|
|
157
157
|
"locationInModule": {
|
|
158
158
|
"filename": "src/projects/cdk-construct.ts",
|
|
159
|
-
"line":
|
|
159
|
+
"line": 64
|
|
160
160
|
},
|
|
161
161
|
"name": "MvcCdkConstructLibrary",
|
|
162
162
|
"symbolId": "src/projects/cdk-construct:MvcCdkConstructLibrary"
|
|
@@ -175,7 +175,7 @@
|
|
|
175
175
|
"kind": "interface",
|
|
176
176
|
"locationInModule": {
|
|
177
177
|
"filename": "src/projects/cdk-construct.ts",
|
|
178
|
-
"line":
|
|
178
|
+
"line": 43
|
|
179
179
|
},
|
|
180
180
|
"name": "MvcCdkConstructLibraryOptions",
|
|
181
181
|
"properties": [
|
|
@@ -189,7 +189,7 @@
|
|
|
189
189
|
"immutable": true,
|
|
190
190
|
"locationInModule": {
|
|
191
191
|
"filename": "src/projects/cdk-construct.ts",
|
|
192
|
-
"line":
|
|
192
|
+
"line": 49
|
|
193
193
|
},
|
|
194
194
|
"name": "baseAssetsDirectory",
|
|
195
195
|
"optional": true,
|
|
@@ -207,7 +207,7 @@
|
|
|
207
207
|
"immutable": true,
|
|
208
208
|
"locationInModule": {
|
|
209
209
|
"filename": "src/projects/cdk-construct.ts",
|
|
210
|
-
"line":
|
|
210
|
+
"line": 56
|
|
211
211
|
},
|
|
212
212
|
"name": "integTestRegions",
|
|
213
213
|
"optional": true,
|
|
@@ -224,6 +224,6 @@
|
|
|
224
224
|
"symbolId": "src/projects/cdk-construct:MvcCdkConstructLibraryOptions"
|
|
225
225
|
}
|
|
226
226
|
},
|
|
227
|
-
"version": "0.0.
|
|
228
|
-
"fingerprint": "
|
|
227
|
+
"version": "0.0.35",
|
|
228
|
+
"fingerprint": "92/HpNqbFi5a9BNHDFI7eHa8H9HkA89N4NQu/IqkvG4="
|
|
229
229
|
}
|
package/README.md
CHANGED
|
@@ -27,24 +27,23 @@ The [projen](https://projen.io/) baseline for all [MV Consulting](https://manuel
|
|
|
27
27
|
mkdir my-new-construct && cd my-new-construct
|
|
28
28
|
|
|
29
29
|
# 2. set up the project using the projen new command
|
|
30
|
-
npx projen new
|
|
31
|
-
--from @mavogel/mvc-projen@~0 \
|
|
32
|
-
--cdkVersion=2.261.0 \
|
|
33
|
-
--package-manager=npm
|
|
30
|
+
npx projen new --from @mavogel/mvc-projen@~0
|
|
34
31
|
```
|
|
35
32
|
|
|
33
|
+
By default this uses npm and a recent AWS CDK version; pass `--cdkVersion=x.y.z` or `--package-manager=<pnpm|yarn|...>` to override either.
|
|
34
|
+
|
|
36
35
|
## Inspiration
|
|
37
36
|
This project was created based on the following inspiration
|
|
38
37
|
- [taimos-projen](https://github.com/taimos/taimos-projen): code from [Thorsten Höger](https://www.taimos.de/) has always been an inspiration for my `cdk` and [projen](https://projen.io/) projects.
|
|
39
38
|
- [projen-cdk-hugo-pipeline](https://github.com/MV-Consulting/projen-cdk-hugo-pipeline/): a previous projen baseline we built, during which we learned a lot about the internal of projen. We could build up on this knowledge.
|
|
40
39
|
|
|
41
|
-
##
|
|
40
|
+
## Unlock the Full Potential of Your AWS Cloud Infrastructure
|
|
42
41
|
|
|
43
|
-
Hi, I’m Manuel, an AWS expert passionate about empowering businesses with **scalable, resilient, and cost-optimized cloud solutions**.
|
|
42
|
+
Hi, I’m Manuel, an AWS expert passionate about empowering businesses with **scalable, resilient, and cost-optimized cloud solutions**. I specialize in crafting **tailored AWS architectures** and **DevOps-driven workflows** that not only meet your current needs but grow with you.
|
|
44
43
|
|
|
45
44
|
---
|
|
46
45
|
|
|
47
|
-
###
|
|
46
|
+
### Why Work With Me?
|
|
48
47
|
|
|
49
48
|
✔️ **Tailored AWS Solutions:** Every business is unique, so I design custom solutions that fit your goals and challenges.
|
|
50
49
|
✔️ **Well-Architected Designs:** From scalability to security, my solutions align with AWS Well-Architected Framework.
|
|
@@ -53,23 +52,23 @@ Hi, I’m Manuel, an AWS expert passionate about empowering businesses with **sc
|
|
|
53
52
|
|
|
54
53
|
---
|
|
55
54
|
|
|
56
|
-
###
|
|
55
|
+
### What I Bring to the Table
|
|
57
56
|
|
|
58
|
-
|
|
57
|
+
**AWS Certifications**
|
|
59
58
|
I’m **AWS Certified Solutions Architect and DevOps – Professional** and hold numerous additional certifications, so you can trust I’ll bring industry best practices to your projects. Feel free to explose by [badges](https://www.credly.com/users/manuel-vogel)
|
|
60
59
|
|
|
61
|
-
|
|
60
|
+
**Infrastructure as Code (IaC)**
|
|
62
61
|
With deep expertise in **AWS CDK** and **Terraform**, I ensure your infrastructure is automated, maintainable, and scalable.
|
|
63
62
|
|
|
64
|
-
|
|
63
|
+
**DevOps Expertise**
|
|
65
64
|
From CI/CD pipelines with **GitHub Actions** and **GitLab CI** to container orchestration **Kubernetes** and others, I deliver workflows that are smooth and efficient.
|
|
66
65
|
|
|
67
|
-
|
|
68
|
-
With over **
|
|
66
|
+
**Hands-On Experience**
|
|
67
|
+
With over **8 years of AWS experience** and a decade in the tech world, I’ve delivered solutions for companies large and small. My open-source contributions showcase my commitment to transparency and innovation. Feel free to explore my [GitHub profile](https://github.com/mavogel)
|
|
69
68
|
|
|
70
69
|
---
|
|
71
70
|
|
|
72
|
-
###
|
|
71
|
+
### Let’s Build Something Great Together
|
|
73
72
|
|
|
74
73
|
I know that choosing the right partner is critical to your success. When you work with me, you’re not just contracting an engineer – you’re gaining a trusted advisor and hands-on expert who cares about your business as much as you do.
|
|
75
74
|
|
|
@@ -78,18 +77,18 @@ I know that choosing the right partner is critical to your success. When you wor
|
|
|
78
77
|
✔️ **Real Value**: My solutions focus on delivering measurable impact for your business.
|
|
79
78
|
|
|
80
79
|
|
|
81
|
-
<a href="https://
|
|
80
|
+
<a href="https://calendar.app.google/7aahUfGifBUvgX62A"><img alt="Schedule your call" src="https://img.shields.io/badge/schedule%20your%20call-success.svg?style=for-the-badge"/></a>
|
|
82
81
|
|
|
83
82
|
---
|
|
84
83
|
|
|
85
|
-
##
|
|
84
|
+
## Acknowledgements
|
|
86
85
|
|
|
87
86
|
Big shoutout to the amazing team behind [Projen](https://github.com/projen/projen)!
|
|
88
87
|
Their groundbreaking work simplifies cloud infrastructure projects and inspires us every day. 💡
|
|
89
88
|
|
|
90
89
|
## Author
|
|
91
90
|
|
|
92
|
-
[Manuel Vogel](https://
|
|
91
|
+
[Manuel Vogel-Johnson](https://vogel-johnson.com/about/)
|
|
93
92
|
|
|
94
|
-
[](https://www.linkedin.com/in/manuel-vogel)
|
|
93
|
+
[](https://www.linkedin.com/in/manuel-vogel-johnson)
|
|
95
94
|
[](https://github.com/mavogel)
|
|
@@ -1,16 +1,13 @@
|
|
|
1
1
|
// import { SecretsManager } from "@aws-sdk/client-secrets-manager"; <- UNCOMMENT
|
|
2
|
-
// @ts-ignore
|
|
3
|
-
import type {
|
|
4
|
-
OnEventRequest,
|
|
5
|
-
OnEventResponse,
|
|
6
|
-
} from 'aws-cdk-lib/custom-resources/lib/provider-framework/types';
|
|
7
2
|
// import { Secret } from "./crd-example"; // <- UNCOMMENT
|
|
8
3
|
|
|
9
4
|
// const secretsManager = new SecretsManager(); <- UNCOMMENT
|
|
10
5
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
6
|
+
// aws-cdk-lib's OnEventRequest/OnEventResponse (custom-resources/lib/provider-framework/types)
|
|
7
|
+
// aren't part of its public exports map, so they can't be imported directly -
|
|
8
|
+
// see https://github.com/aws/aws-cdk/blob/main/packages/aws-cdk-lib/package.json.
|
|
9
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
10
|
+
export const handler = async (event: any): Promise<any> => {
|
|
14
11
|
console.log('Event: %j', { ...event, ResponseURL: '...' });
|
|
15
12
|
|
|
16
13
|
if (event.RequestType === 'Delete') {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
##
|
|
1
|
+
## Unlock the Full Potential of Your AWS Cloud Infrastructure
|
|
2
2
|
|
|
3
|
-
Hi, I’m Manuel, an AWS expert passionate about empowering businesses with **scalable, resilient, and cost-optimized cloud solutions**.
|
|
3
|
+
Hi, I’m Manuel, an AWS expert passionate about empowering businesses with **scalable, resilient, and cost-optimized cloud solutions**. I specialize in crafting **tailored AWS architectures** and **DevOps-driven workflows** that not only meet your current needs but grow with you.
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
###
|
|
7
|
+
### Why Work With Me?
|
|
8
8
|
|
|
9
9
|
✔️ **Tailored AWS Solutions:** Every business is unique, so I design custom solutions that fit your goals and challenges.
|
|
10
10
|
✔️ **Well-Architected Designs:** From scalability to security, my solutions align with AWS Well-Architected Framework.
|
|
@@ -13,23 +13,23 @@ Hi, I’m Manuel, an AWS expert passionate about empowering businesses with **sc
|
|
|
13
13
|
|
|
14
14
|
---
|
|
15
15
|
|
|
16
|
-
###
|
|
16
|
+
### What I Bring to the Table
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
**AWS Certifications**
|
|
19
19
|
I’m **AWS Certified Solutions Architect and DevOps – Professional** and hold numerous additional certifications, so you can trust I’ll bring industry best practices to your projects. Feel free to explose by [badges](https://www.credly.com/users/manuel-vogel)
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
**Infrastructure as Code (IaC)**
|
|
22
22
|
With deep expertise in **AWS CDK** and **Terraform**, I ensure your infrastructure is automated, maintainable, and scalable.
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
**DevOps Expertise**
|
|
25
25
|
From CI/CD pipelines with **GitHub Actions** and **GitLab CI** to container orchestration **Kubernetes** and others, I deliver workflows that are smooth and efficient.
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
With over **
|
|
27
|
+
**Hands-On Experience**
|
|
28
|
+
With over **8 years of AWS experience** and a decade in the tech world, I’ve delivered solutions for companies large and small. My open-source contributions showcase my commitment to transparency and innovation. Feel free to explore my [GitHub profile](https://github.com/mavogel)
|
|
29
29
|
|
|
30
30
|
---
|
|
31
31
|
|
|
32
|
-
###
|
|
32
|
+
### Let’s Build Something Great Together
|
|
33
33
|
|
|
34
34
|
I know that choosing the right partner is critical to your success. When you work with me, you’re not just contracting an engineer – you’re gaining a trusted advisor and hands-on expert who cares about your business as much as you do.
|
|
35
35
|
|
|
@@ -38,18 +38,18 @@ I know that choosing the right partner is critical to your success. When you wor
|
|
|
38
38
|
✔️ **Real Value**: My solutions focus on delivering measurable impact for your business.
|
|
39
39
|
|
|
40
40
|
|
|
41
|
-
<a href="https://
|
|
41
|
+
<a href="https://calendar.app.google/7aahUfGifBUvgX62A"><img alt="Schedule your call" src="https://img.shields.io/badge/schedule%20your%20call-success.svg?style=for-the-badge"/></a>
|
|
42
42
|
|
|
43
43
|
---
|
|
44
44
|
|
|
45
|
-
##
|
|
45
|
+
## Acknowledgements
|
|
46
46
|
|
|
47
47
|
Big shoutout to the amazing team behind [Projen](https://github.com/projen/projen)!
|
|
48
48
|
Their groundbreaking work simplifies cloud infrastructure projects and inspires us every day. 💡
|
|
49
49
|
|
|
50
50
|
## Author
|
|
51
51
|
|
|
52
|
-
[Manuel Vogel](https://
|
|
52
|
+
[Manuel Vogel-Johnson](https://vogel-johnson.com/about/)
|
|
53
53
|
|
|
54
|
-
[](https://www.linkedin.com/in/manuel-vogel)
|
|
54
|
+
[](https://www.linkedin.com/in/manuel-vogel-johnson)
|
|
55
55
|
[](https://github.com/mavogel)
|
|
@@ -51,16 +51,65 @@ const lambdaNodeVersion = awscdk_1.LambdaRuntime.NODEJS_24_X;
|
|
|
51
51
|
// `npm view @aws-cdk/integ-runner versions --json` and bump this if aws-cdk-lib
|
|
52
52
|
// has released newer versions than this one.
|
|
53
53
|
const LAST_INTEG_RUNNER_VERSION = '2.203.0';
|
|
54
|
+
// AwsCdkConstructLibraryOptions.cdkVersion's own upstream `@default`
|
|
55
|
+
// (node_modules/projen/lib/awscdk/awscdk-deps.d.ts) - what `projen new`
|
|
56
|
+
// fills in when `--cdkVersion` is omitted. jsii forbids a derived options
|
|
57
|
+
// interface from re-declaring an inherited member (JSII5015: "results in
|
|
58
|
+
// invalid C#"), so we can't override the `@default` doc the CLI reflects
|
|
59
|
+
// on to change that. Detecting this exact value below and substituting our
|
|
60
|
+
// own default is the only remaining lever.
|
|
61
|
+
const UPSTREAM_DEFAULT_CDK_VERSION = '2.189.1';
|
|
62
|
+
// Our default `cdkVersion` when the caller (or `projen new`) doesn't pass
|
|
63
|
+
// one. Must stay >= 2.257.0: cdk-nag v3 (forced below via addDeps) requires
|
|
64
|
+
// it as a peer, and the upstream default above fails `npm install` with an
|
|
65
|
+
// ERESOLVE conflict on a fresh scaffold.
|
|
66
|
+
// SHORTCUT: both hardcoded versions require manual re-verification -- run
|
|
67
|
+
// `npm view aws-cdk-lib version` and re-check awscdk-deps.d.ts's `@default`
|
|
68
|
+
// periodically (it may drift on a projen upgrade).
|
|
69
|
+
const DEFAULT_CDK_VERSION = '2.261.0';
|
|
54
70
|
/**
|
|
55
71
|
* TypeScript library
|
|
56
72
|
*
|
|
57
73
|
* @pjid mvc-awscdk-construct
|
|
58
74
|
*/
|
|
59
75
|
class MvcCdkConstructLibrary extends awscdk_1.AwsCdkConstructLibrary {
|
|
60
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@mavogel/mvc-projen.MvcCdkConstructLibrary", version: "0.0.
|
|
76
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@mavogel/mvc-projen.MvcCdkConstructLibrary", version: "0.0.35" };
|
|
61
77
|
constructor(options) {
|
|
62
78
|
const baseAssetsDirectory = options.baseAssetsDirectory ?? `${process.cwd()}/node_modules/@mavogel/mvc-projen/assets`;
|
|
63
79
|
const integTestRegions = options.integTestRegions ?? ['eu-west-1', 'eu-west-2'];
|
|
80
|
+
// `options.cdkVersion` is typed as required, but `projen new` always
|
|
81
|
+
// supplies a value via jsii reflection - either a real user override,
|
|
82
|
+
// or (if --cdkVersion was omitted) the upstream `@default` literal
|
|
83
|
+
// itself. Substitute ours only in the latter case, verified below.
|
|
84
|
+
const cdkVersion = (!options.cdkVersion || options.cdkVersion === UPSTREAM_DEFAULT_CDK_VERSION)
|
|
85
|
+
? DEFAULT_CDK_VERSION
|
|
86
|
+
: options.cdkVersion;
|
|
87
|
+
// AwsCdkConstructLibrary's `super()` call below wires up an AutoDiscover
|
|
88
|
+
// component whose constructor synchronously globs `srcdir` for
|
|
89
|
+
// `*.lambda.ts` entrypoints - it never re-scans later. SampleCode (added
|
|
90
|
+
// at the end of this constructor) writes the sample crd-example.lambda.ts
|
|
91
|
+
// during the project's synthesize() phase, which runs after every
|
|
92
|
+
// component's constructor, including AutoDiscover's - so the file never
|
|
93
|
+
// existed for AutoDiscover to find, no LambdaFunction/Bundler ever got
|
|
94
|
+
// created for it, and the generated crd-example.ts was left importing a
|
|
95
|
+
// './crd-example-function' construct file that no one wrote, breaking
|
|
96
|
+
// eslint on every scaffold. Write just this one file early enough for
|
|
97
|
+
// AutoDiscover to see it; SampleCode still owns everything else.
|
|
98
|
+
// Skip under Jest (NODE_ENV=test, matching projen's own IS_TEST_RUN
|
|
99
|
+
// check): when options.outdir is unset (true for every test in this
|
|
100
|
+
// repo), projen's base Project class - constructed via super() below -
|
|
101
|
+
// redirects the *real* outdir to a fresh temp directory instead of cwd.
|
|
102
|
+
// This early write runs before that redirect exists, so without this
|
|
103
|
+
// guard it would write straight into this repo's own working tree
|
|
104
|
+
// instead of the test's temp dir.
|
|
105
|
+
if ((options.sampleCode ?? true) && process.env.NODE_ENV !== 'test') {
|
|
106
|
+
const outdir = path.resolve(options.outdir ?? '.');
|
|
107
|
+
const lambdaEntrypoint = path.join(outdir, 'src', 'crd-example', 'crd-example.lambda.ts');
|
|
108
|
+
if (!fs.existsSync(lambdaEntrypoint)) {
|
|
109
|
+
fs.mkdirSync(path.dirname(lambdaEntrypoint), { recursive: true });
|
|
110
|
+
fs.writeFileSync(lambdaEntrypoint, fs.readFileSync(`${baseAssetsDirectory}/cdk-construct/src_crd-example.lambda.ts`).toString());
|
|
111
|
+
}
|
|
112
|
+
}
|
|
64
113
|
super({
|
|
65
114
|
authorOrganization: true,
|
|
66
115
|
copyrightOwner: 'MV Consulting GmbH',
|
|
@@ -78,12 +127,18 @@ class MvcCdkConstructLibrary extends awscdk_1.AwsCdkConstructLibrary {
|
|
|
78
127
|
awsSdkConnectionReuse: false, // doesn't exist in AWS SDK JS v3
|
|
79
128
|
},
|
|
80
129
|
autoApproveOptions: {
|
|
130
|
+
// 'mvc-bot' (the PROJEN_GITHUB_TOKEN identity) is deliberately
|
|
131
|
+
// excluded: GitHub rejects a PR review from the same account that
|
|
132
|
+
// authored the PR ("Can not approve your own pull request"), and
|
|
133
|
+
// this token can also author PRs against generated projects (e.g.
|
|
134
|
+
// scaffolder-driven automation). Those PRs are auto-approved via
|
|
135
|
+
// Mergify instead, below, which posts the review as the Mergify
|
|
136
|
+
// app - a different actor. See mavogel/mvc-projen#74.
|
|
81
137
|
allowedUsernames: [
|
|
82
138
|
'dependabot',
|
|
83
139
|
'dependabot[bot]',
|
|
84
140
|
'github-bot',
|
|
85
141
|
'github-actions[bot]',
|
|
86
|
-
'mvc-bot',
|
|
87
142
|
],
|
|
88
143
|
// The name of the secret that has the GitHub PAT for auto-approving PRs with permissions repo, workflow, write:packages
|
|
89
144
|
// Generate a new PAT (https://github.com/settings/tokens/new) and add it to your repo's secrets
|
|
@@ -253,6 +308,9 @@ add tools or links which inspired you
|
|
|
253
308
|
},
|
|
254
309
|
// NOTE: keep all the passed in options which can override the existing ones!
|
|
255
310
|
...options,
|
|
311
|
+
// applied after ...options so the DEFAULT_CDK_VERSION fallback above
|
|
312
|
+
// always wins over an undefined options.cdkVersion
|
|
313
|
+
cdkVersion,
|
|
256
314
|
});
|
|
257
315
|
// TypeScript 6 no longer auto-discovers @types/* packages
|
|
258
316
|
this.tsconfigDev.file.addOverride('compilerOptions.types', ['node', 'jest']);
|
|
@@ -262,6 +320,23 @@ add tools or links which inspired you
|
|
|
262
320
|
// delete head branches on merge (renovate/dependabot manage their own).
|
|
263
321
|
// see https://github.com/MV-Consulting/cdk-vscode-server/pull/112
|
|
264
322
|
this.tryFindObjectFile('.mergify.yml')?.addDeletionOverride('pull_request_rules.0.actions.delete_head_branch');
|
|
323
|
+
// Auto-approve PRs authored by 'mvc-bot' itself (see the
|
|
324
|
+
// autoApproveOptions comment above for why this can't go through the
|
|
325
|
+
// GitHub Actions auto-approve path) via Mergify instead: it posts the
|
|
326
|
+
// review as the Mergify app, a different actor. See mavogel/mvc-projen#74.
|
|
327
|
+
this.tryFindObjectFile('.mergify.yml')?.addOverride('pull_request_rules.1', {
|
|
328
|
+
name: 'Auto-approve self-authored mvc-bot PRs',
|
|
329
|
+
conditions: [
|
|
330
|
+
'author=mvc-bot',
|
|
331
|
+
'label=auto-approve',
|
|
332
|
+
],
|
|
333
|
+
actions: {
|
|
334
|
+
review: {
|
|
335
|
+
type: 'APPROVE',
|
|
336
|
+
message: 'Automatically approved: self-authored automation PR.',
|
|
337
|
+
},
|
|
338
|
+
},
|
|
339
|
+
});
|
|
265
340
|
// gitignore
|
|
266
341
|
const filesPatternToGitignore = [
|
|
267
342
|
'tmp',
|
|
@@ -351,8 +426,7 @@ class SampleCode extends projen_1.Component {
|
|
|
351
426
|
synthesize() {
|
|
352
427
|
const outdir = this.project.outdir;
|
|
353
428
|
const srcdir = path.join(outdir, this.library.srcdir);
|
|
354
|
-
if (fs.existsSync(srcdir) &&
|
|
355
|
-
fs.readdirSync(srcdir).filter((x) => x.endsWith('.ts')) &&
|
|
429
|
+
if (fs.existsSync(`${srcdir}/index.ts`) &&
|
|
356
430
|
!fs.readFileSync(`${srcdir}/index.ts`).toString().includes('export class Hello') // Note: from parent
|
|
357
431
|
) {
|
|
358
432
|
return;
|
|
@@ -361,9 +435,11 @@ class SampleCode extends projen_1.Component {
|
|
|
361
435
|
fs.writeFileSync(path.join(srcdir, 'index.ts'), fs.readFileSync(`${this.options.baseAssetsDirectory}/cdk-construct/src_index.ts`).toString());
|
|
362
436
|
fs.writeFileSync(path.join(srcdir, 'placeholder.ts'), fs.readFileSync(`${this.options.baseAssetsDirectory}/cdk-construct/src_placeholder.ts`).toString());
|
|
363
437
|
// crd with lambda generation
|
|
438
|
+
// Note: crd-example.lambda.ts is written earlier, before `super()`, so
|
|
439
|
+
// AutoDiscover's constructor-time glob can find it - see the comment in
|
|
440
|
+
// the constructor above.
|
|
364
441
|
fs.mkdirSync(`${srcdir}/crd-example`, { recursive: true });
|
|
365
442
|
fs.writeFileSync(path.join(`${srcdir}/crd-example`, 'crd-example.ts'), fs.readFileSync(`${this.options.baseAssetsDirectory}/cdk-construct/src_crd-example.ts`).toString());
|
|
366
|
-
fs.writeFileSync(path.join(`${srcdir}/crd-example`, 'crd-example.lambda.ts'), fs.readFileSync(`${this.options.baseAssetsDirectory}/cdk-construct/src_crd-example.lambda.ts`).toString());
|
|
367
443
|
const testdir = path.join(outdir, this.library.testdir);
|
|
368
444
|
if (fs.existsSync(testdir) &&
|
|
369
445
|
fs.readdirSync(testdir).filter((x) => x.endsWith('.ts')) &&
|
|
@@ -408,4 +484,4 @@ class SampleCode extends projen_1.Component {
|
|
|
408
484
|
fs.writeFileSync(path.join(examplesdir, 'main.ts'), fs.readFileSync(`${this.options.baseAssetsDirectory}/cdk-construct/examples_simple_main.ts`).toString());
|
|
409
485
|
}
|
|
410
486
|
}
|
|
411
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWNvbnN0cnVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9qZWN0cy9jZGstY29uc3RydWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1Q0FBeUI7QUFDekIsMkNBQTZCO0FBRTdCLG1DQUFzRjtBQUN0Riw4Q0FBeUc7QUFDekcsOENBQStEO0FBRy9ELDJFQUEyRTtBQUMzRSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFDM0IsTUFBTSxpQkFBaUIsR0FBRyxzQkFBYSxDQUFDLFdBQVcsQ0FBQztBQUVwRCxvRkFBb0Y7QUFDcEYsb0ZBQW9GO0FBQ3BGLG1FQUFtRTtBQUNuRSxxRkFBcUY7QUFDckYsaUVBQWlFO0FBQ2pFLGdGQUFnRjtBQUNoRiw2Q0FBNkM7QUFDN0MsTUFBTSx5QkFBeUIsR0FBRyxTQUFTLENBQUM7QUFxQjVDOzs7O0dBSUc7QUFDSCxNQUFhLHNCQUF1QixTQUFRLCtCQUFzQjs7SUFFaEUsWUFBWSxPQUFzQztRQUNoRCxNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsMENBQTBDLENBQUM7UUFDdEgsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFaEYsS0FBSyxDQUFDO1lBQ0osa0JBQWtCLEVBQUUsSUFBSTtZQUN4QixjQUFjLEVBQUUsb0JBQW9CO1lBQ3BDLE9BQU8sRUFBRSxZQUFZO1lBQ3JCLFdBQVcsRUFBRSxRQUFRO1lBQ3JCLGlCQUFpQixFQUFFLFFBQVE7WUFDM0IsY0FBYyxFQUFFLFdBQVc7WUFDM0IsbUJBQW1CLEVBQUUsV0FBVztZQUNoQyxTQUFTLEVBQUUsY0FBYztZQUN6QixZQUFZLEVBQUUsSUFBSTtZQUNsQixjQUFjLEVBQUUsbUJBQVUsQ0FBQyxr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LElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLGlDQUFpQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUU3SixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDNUQsSUFDRSxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQztZQUMxQixFQUFFLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUNoRSxDQUFDO1lBQ0QsT0FBTztRQUNULENBQUM7UUFDRCxFQUFFLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLHdDQUF3QyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMvSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIGphdmFzY3JpcHQsIFJlbGVhc2FibGVDb21taXRzLCBUZXh0RmlsZSwgWWFtbEZpbGUgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgQXdzQ2RrQ29uc3RydWN0TGlicmFyeSwgQXdzQ2RrQ29uc3RydWN0TGlicmFyeU9wdGlvbnMsIExhbWJkYVJ1bnRpbWUgfSBmcm9tICdwcm9qZW4vbGliL2F3c2Nkayc7XG5pbXBvcnQgeyBEZXBlbmRhYm90U2NoZWR1bGVJbnRlcnZhbCB9IGZyb20gJ3Byb2plbi9saWIvZ2l0aHViJztcbmltcG9ydCB7IEpvYlN0ZXAgfSBmcm9tICdwcm9qZW4vbGliL2dpdGh1Yi93b3JrZmxvd3MtbW9kZWwnO1xuXG4vLyBTZXQgdGhlIG1pbmltdW0gbm9kZSB2ZXJzaW9uIGZvciBBV1MgQ0RLIGFuZCB0aGUgR2l0SHViIGFjdGlvbnMgd29ya2Zsb3dcbmNvbnN0IG5vZGVWZXJzaW9uID0gJzI0LngnO1xuY29uc3QgbGFtYmRhTm9kZVZlcnNpb24gPSBMYW1iZGFSdW50aW1lLk5PREVKU18yNF9YO1xuXG4vLyBUaGUgbGFzdCBAYXdzLWNkay9pbnRlZy1ydW5uZXIgdmVyc2lvbiB2ZXJpZmllZCBhZ2FpbnN0IG5wbSAoY2hlY2tlZCAyMDI2LTA3LTIxKS5cbi8vIGludGVnLXJ1bm5lciB1c2VzIHBsYWluIHZlcnNpb25zIChubyAtYWxwaGEuMCBzdWZmaXgpIGFuZCBoYXMgaGlzdG9yaWNhbGx5IGxhZ2dlZFxuLy8gb3Igc3RvcHBlZCB0cmFja2luZyBhd3MtY2RrLWxpYidzIHZlcnNpb24gZm9yIHN0cmV0Y2hlcyBvZiB0aW1lLlxuLy8gQGF3cy1jZGsvaW50ZWctdGVzdHMtYWxwaGEgYW5kIGF3c2xpbnQgY29udGludWUgdG8gcHVibGlzaCBhbmQgdHJhY2sgQ0RLIHZlcnNpb25zLlxuLy8gU0hPUlRDVVQ6IGhhcmRjb2RlZCBjYXAgcmVxdWlyZXMgbWFudWFsIHJlLXZlcmlmaWNhdGlvbiAtLSBydW5cbi8vIGBucG0gdmlldyBAYXdzLWNkay9pbnRlZy1ydW5uZXIgdmVyc2lvbnMgLS1qc29uYCBhbmQgYnVtcCB0aGlzIGlmIGF3cy1jZGstbGliXG4vLyBoYXMgcmVsZWFzZWQgbmV3ZXIgdmVyc2lvbnMgdGhhbiB0aGlzIG9uZS5cbmNvbnN0IExBU1RfSU5URUdfUlVOTkVSX1ZFUlNJT04gPSAnMi4yMDMuMCc7XG5cbi8qKlxuICogVGhlIG9wdGlvbnMgZm9yIHRoZSBjb25zdHJ1Y3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNdmNDZGtDb25zdHJ1Y3RMaWJyYXJ5T3B0aW9ucyBleHRlbmRzIEF3c0Nka0NvbnN0cnVjdExpYnJhcnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIEJhc2UgZGlyZWN0b3J5IGZvciB0aGUgYXNzZXRzXG4gICAqXG4gICAqIEBkZWZhdWx0ICR7cHJvY2Vzcy5jd2QoKX0vbm9kZV9tb2R1bGVzL212Yy1wcm9qZW4vYXNzZXRzXG4gICAqL1xuICByZWFkb25seSBiYXNlQXNzZXRzRGlyZWN0b3J5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVnaW9ucyB0byBydW4gdGhlIGludGVnIHRlc3RzIGluXG4gICAqXG4gICAqIEBkZWZhdWx0IGV1LXdlc3QtMSBhbmQgZXUtd2VzdC0yXG4gICAqL1xuICByZWFkb25seSBpbnRlZ1Rlc3RSZWdpb25zPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogVHlwZVNjcmlwdCBsaWJyYXJ5XG4gKlxuICogQHBqaWQgbXZjLWF3c2Nkay1jb25zdHJ1Y3RcbiAqL1xuZXhwb3J0IGNsYXNzIE12Y0Nka0NvbnN0cnVjdExpYnJhcnkgZXh0ZW5kcyBBd3NDZGtDb25zdHJ1Y3RMaWJyYXJ5IHtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBNdmNDZGtDb25zdHJ1Y3RMaWJyYXJ5T3B0aW9ucykge1xuICAgIGNvbnN0IGJhc2VBc3NldHNEaXJlY3RvcnkgPSBvcHRpb25zLmJhc2VBc3NldHNEaXJlY3RvcnkgPz8gYCR7cHJvY2Vzcy5jd2QoKX0vbm9kZV9tb2R1bGVzL0BtYXZvZ2VsL212Yy1wcm9qZW4vYXNzZXRzYDtcbiAgICBjb25zdCBpbnRlZ1Rlc3RSZWdpb25zID0gb3B0aW9ucy5pbnRlZ1Rlc3RSZWdpb25zID8/IFsnZXUtd2VzdC0xJywgJ2V1LXdlc3QtMiddO1xuXG4gICAgc3VwZXIoe1xuICAgICAgYXV0aG9yT3JnYW5pemF0aW9uOiB0cnVlLFxuICAgICAgY29weXJpZ2h0T3duZXI6ICdNViBDb25zdWx0aW5nIEdtYkgnLFxuICAgICAgbGljZW5zZTogJ0FwYWNoZS0yLjAnLFxuICAgICAganNpaVZlcnNpb246ICd+Ni4wLjAnLFxuICAgICAgdHlwZXNjcmlwdFZlcnNpb246ICdeNi4wLjInLFxuICAgICAgbWluTm9kZVZlcnNpb246IG5vZGVWZXJzaW9uLFxuICAgICAgd29ya2Zsb3dOb2RlVmVyc2lvbjogbm9kZVZlcnNpb24sXG4gICAgICBzdGFiaWxpdHk6ICdleHBlcmltZW50YWwnLFxuICAgICAgcmVsZWFzZVRvTnBtOiB0cnVlLFxuICAgICAgcGFja2FnZU1hbmFnZXI6IGphdmFzY3JpcHQuTm9kZVBhY2thZ2VNYW5hZ2VyLk5QTSxcbiAgICAgIG5wbUFjY2VzczogamF2YXNjcmlwdC5OcG1BY2Nlc3MuUFVCTElDLFxuICAgICAgbGFtYmRhT3B0aW9uczoge1xuICAgICAgICBydW50aW1lOiBsYW1iZGFOb2RlVmVyc2lvbixcbiAgICAgICAgYXdzU2RrQ29ubmVjdGlvblJldXNlOiBmYWxzZSwgLy8gZG9lc24ndCBleGlzdCBpbiBBV1MgU0RLIEpTIHYzXG4gICAgICB9LFxuICAgICAgYXV0b0FwcHJvdmVPcHRpb25zOiB7XG4gICAgICAgIGFsbG93ZWRVc2VybmFtZXM6IFtcbiAgICAgICAgICAnZGVwZW5kYWJvdCcsXG4gICAgICAgICAgJ2RlcGVuZGFib3RbYm90XScsXG4gICAgICAgICAgJ2dpdGh1Yi1ib3QnLFxuICAgICAgICAgICdnaXRodWItYWN0aW9uc1tib3RdJyxcbiAgICAgICAgICAnbXZjLWJvdCcsXG4gICAgICAgIF0sXG4gICAgICAgIC8vIFRoZSBuYW1lIG9mIHRoZSBzZWNyZXQgdGhhdCBoYXMgdGhlIEdpdEh1YiBQQVQgZm9yIGF1dG8tYXBwcm92aW5nIFBScyB3aXRoIHBlcm1pc3Npb25zIHJlcG8sIHdvcmtmbG93LCB3cml0ZTpwYWNrYWdlc1xuICAgICAgICAvLyBHZW5lcmF0ZSBhIG5ldyBQQVQgKGh0dHBzOi8vZ2l0aHViLmNvbS9zZXR0aW5ncy90b2tlbnMvbmV3KSBhbmQgYWRkIGl0IHRvIHlvdXIgcmVwbydzIHNlY3JldHNcbiAgICAgICAgLy8gTk9URTogY29tZXMgZnJvbSBNVi1Db25zdWx0aW5nIE9yZ1xuICAgICAgICBzZWNyZXQ6ICdQUk9KRU5fR0lUSFVCX1RPS0VOJyxcbiAgICAgIH0sXG4gICAgICBkZXBlbmRhYm90OiB0cnVlLFxuICAgICAgZGVwZW5kYWJvdE9wdGlvbnM6IHtcbiAgICAgICAgc2NoZWR1bGVJbnRlcnZhbDogRGVwZW5kYWJvdFNjaGVkdWxlSW50ZXJ2YWwuV0VFS0xZLFxuICAgICAgICBsYWJlbHM6IFsnZGVwZW5kZW5jaWVzJywgJ2F1dG8tYXBwcm92ZSddLFxuICAgICAgICBncm91cHM6IHtcbiAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBwYXR0ZXJuczogWycqJ10sXG4gICAgICAgICAgICBleGNsdWRlUGF0dGVybnM6IFsnYXdzLWNkayonLCAncHJvamVuJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgaWdub3JlOiBbeyBkZXBlbmRlbmN5TmFtZTogJ2F3cy1jZGstbGliJyB9LCB7IGRlcGVuZGVuY3lOYW1lOiAnYXdzLWNkaycgfV0sXG4gICAgICB9LFxuICAgICAgLy8gLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm9qZW4vcHJvamVuL2Rpc2N1c3Npb25zLzQwNDAjZGlzY3Vzc2lvbmNvbW1lbnQtMTE5MDU2MjhcbiAgICAgIHJlbGVhc2FibGVDb21taXRzOiBSZWxlYXNhYmxlQ29tbWl0cy5vZlR5cGUoW1xuICAgICAgICAnZmVhdCcsXG4gICAgICAgICdmaXgnLFxuICAgICAgICAnY2hvcmUnLFxuICAgICAgICAncmVmYWN0b3InLFxuICAgICAgICAncGVyZicsXG4gICAgICBdKSxcbiAgICAgIGdpdGh1Yk9wdGlvbnM6IHtcbiAgICAgICAgcHVsbFJlcXVlc3RMaW50T3B0aW9uczoge1xuICAgICAgICAgIHNlbWFudGljVGl0bGVPcHRpb25zOiB7XG4gICAgICAgICAgICAvLyBzZWUgY29tbWl0IHR5cGVzIGhlcmU6IGh0dHBzOi8vd3d3LmNvbnZlbnRpb25hbGNvbW1pdHMub3JnL2VuL3YxLjAuMC8jc3VtbWFyeVxuICAgICAgICAgICAgdHlwZXM6IFtcbiAgICAgICAgICAgICAgJ2ZlYXQnLFxuICAgICAgICAgICAgICAnZml4JyxcbiAgICAgICAgICAgICAgJ2Nob3JlJyxcbiAgICAgICAgICAgICAgJ3JlZmFjdG9yJyxcbiAgICAgICAgICAgICAgJ3BlcmYnLFxuICAgICAgICAgICAgICAnZG9jcycsXG4gICAgICAgICAgICAgICdzdHlsZScsXG4gICAgICAgICAgICAgICd0ZXN0JyxcbiAgICAgICAgICAgICAgJ2J1aWxkJyxcbiAgICAgICAgICAgICAgJ2NpJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB2ZXJzaW9ucmNPcHRpb25zOiB7XG4gICAgICAgIHR5cGVzOiBbXG4gICAgICAgICAgeyB0eXBlOiAnZmVhdCcsIHNlY3Rpb246ICdGZWF0dXJlcycgfSxcbiAgICAgICAgICB7IHR5cGU6ICdmaXgnLCBzZWN0aW9uOiAnQnVnIEZpeGVzJyB9LFxuICAgICAgICAgIHsgdHlwZTogJ2Nob3JlJywgc2VjdGlvbjogJ0Nob3JlcycgfSxcbiAgICAgICAgICB7IHR5cGU6ICdkb2NzJywgc2VjdGlvbjogJ0RvY3MnIH0sXG4gICAgICAgICAgeyB0eXBlOiAnc3R5bGUnLCBoaWRkZW46IHRydWUgfSxcbiAgICAgICAgICB7IHR5cGU6ICdyZWZhY3RvcicsIGhpZGRlbjogdHJ1ZSB9LFxuICAgICAgICAgIHsgdHlwZTogJ3BlcmYnLCBzZWN0aW9uOiAnUGVyZm9ybWFuY2UnIH0sXG4gICAgICAgICAgeyB0eXBlOiAndGVzdCcsIGhpZGRlbjogdHJ1ZSB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIGVzbGludE9wdGlvbnM6IHtcbiAgICAgICAgcHJldHRpZXI6IGZhbHNlLFxuICAgICAgICBkaXJzOiBbJ3NyYyddLFxuICAgICAgICBpZ25vcmVQYXR0ZXJuczogWycqKi8qLWZ1bmN0aW9uLnRzJywgJ2V4YW1wbGVzLyddLFxuICAgICAgfSxcbiAgICAgIC8vIGV4cGVyaW1lbnRhbEludGVnUnVubmVyOiB0cnVlLFxuICAgICAgLy8gbWFudWFsIGludGVnIHRlc3Qgc2V0dXBcbiAgICAgIHRzY29uZmlnRGV2OiB7XG4gICAgICAgIGNvbXBpbGVyT3B0aW9uczoge1xuICAgICAgICAgIHR5cGVzOiBbJ25vZGUnLCAnamVzdCddLFxuICAgICAgICB9LFxuICAgICAgICBpbmNsdWRlOiBbJ2ludGVnLXRlc3RzLyoqLyoudHMnXSxcbiAgICAgIH0sXG4gICAgICBwdWxsUmVxdWVzdFRlbXBsYXRlQ29udGVudHM6IFtmcy5yZWFkRmlsZVN5bmMoYCR7YmFzZUFzc2V0c0RpcmVjdG9yeX0vY29tbW9uL2dpdGh1Yl9wdWxsX3JlcXVlc3QubWRgKS50b1N0cmluZygpXSxcbiAgICAgIC8vIE5PVEU6IGlzc3VlIHRlbXBsYXRlcyBhcmUgbm90IHN1cHBvcnRlZCB5ZXQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcHJvamVuL3Byb2plbi9wdWxsLzM2NDhcbiAgICAgIC8vIGlzc3VlVGVtcGxhdGVzOiB7fVxuICAgICAgcmVhZG1lOiB7XG4gICAgICAgIGNvbnRlbnRzOiBbXG4gICAgICAgICAgYFxuIVtTb3VyY2VdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZ2l0aHViL3N0YXJzL01WLUNvbnN1bHRpbmcvJHtvcHRpb25zLm5hbWV9P2xvZ289Z2l0aHViJmxhYmVsPUdpdEh1YiUyMFN0YXJzKVxuWyFbQnVpbGQgU3RhdHVzXShodHRwczovL2dpdGh1Yi5jb20vTVYtQ29uc3VsdGluZy8ke29wdGlvbnMubmFtZX0vYWN0aW9ucy93b3JrZmxvd3MvYnVpbGQueW1sL2JhZGdlLnN2ZyldKGh0dHBzOi8vZ2l0aHViLmNvbS9NVi1Db25zdWx0aW5nLyR7b3B0aW9ucy5uYW1lfS9hY3Rpb25zL3dvcmtmbG93cy9idWlsZC55bWwpXG5bIVtFU0xpbnQgQ29kZSBGb3JtYXR0aW5nXShodHRwczovL2ltZy5zaGllbGRzLmlvL2JhZGdlL2NvZGVfc3R5bGUtZXNsaW50LWJyaWdodGdyZWVuLnN2ZyldKGh0dHBzOi8vZXNsaW50Lm9yZylcblshW0xhdGVzdCByZWxlYXNlXShodHRwczovL2ltZy5zaGllbGRzLmlvL2dpdGh1Yi9yZWxlYXNlL01WLUNvbnN1bHRpbmcvJHtvcHRpb25zLm5hbWV9LnN2ZyldKGh0dHBzOi8vZ2l0aHViLmNvbS9NVi1Db25zdWx0aW5nLyR7b3B0aW9ucy5uYW1lfS9yZWxlYXNlcylcbiFbR2l0SHViXShodHRwczovL2ltZy5zaGllbGRzLmlvL2dpdGh1Yi9saWNlbnNlL01WLUNvbnN1bHRpbmcvJHtvcHRpb25zLm5hbWV9KVxuWyFbbnBtXShodHRwczovL2ltZy5zaGllbGRzLmlvL25wbS9kdC9AbWF2b2dlbC8ke29wdGlvbnMubmFtZX0/bGFiZWw9bnBtJmNvbG9yPW9yYW5nZSldKGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL0BtYXZvZ2VsLyR7b3B0aW9ucy5uYW1lfSlcblshW3R5cGVzY3JpcHRdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2UvanNpaS10eXBlc2NyaXB0LWJsdWV2aW9sZXQuc3ZnKV0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvQG1hdm9nZWwvJHtvcHRpb25zLm5hbWV9KVxuICAgICAgICAgIGAsXG4gICAgICAgICAgYCMgJHtvcHRpb25zLm5hbWV9YCxcbiAgICAgICAgICAnTXkgYXdlc29tZSBkZXNjcmlwdGlvbi4uLicsXG4gICAgICAgICAgYFxuIyMgVGFibGUgb2YgQ29udGVudHNcblxuLSBbRmVhdHVyZXNdKCNmZWF0dXJlcylcbi0gW1VzYWdlXSgjdXNhZ2UpXG4tIFtTb2x1dGlvbiBEZXNpZ25dKCNzb2x1dGlvbi1kZXNpZ24pXG4tIFtJbnNwaXJhdGlvbl0oI2luc3BpcmF0aW9uKVxuXG4jIyBGZWF0dXJlc1xuXG4tIOKaoSAqKlF1aWNrIFNldHVwKio6IFRCRFxuLSDwn5OPICoqQmVzdCBQcmFjdGljZSBTZXR1cCoqOiBUQkRcbi0g8J+kueKAjeKZgu+4jyAqKlByZS1pbnN0YWxsZWQgcGFja2FnZXMqKjogVEJEXG4tIPCfj5fvuI8gKipFeHRlbnNpYmlsaXR5Kio6IFRCRFxuXG4jIyBVc2FnZVxuVGhlIGZvbGxvd2luZyBzdGVwcyBnZXQgeW91IHN0YXJ0ZWQ6XG5cbjEuIENyZWF0ZSBhIG5ldyBcXGBhd3NjZGstYXBwXFxgIHZpYVxuXFxgXFxgXFxgYmFzaFxubnB4IHByb2plbiBuZXcgYXdzY2RrLWFwcC10cyAtLWNka1ZlcnNpb249Mi4yNjEuMCAtLXBhY2thZ2UtbWFuYWdlcj1ucG1cblxcYFxcYFxcYFxuMy4gQWRkIFxcYEBtYXZvZ2VsLyR7b3B0aW9ucy5uYW1lfVxcYCBhcyBhIGRlcGVuZGVuY3kgdG8geW91ciBwcm9qZWN0IGluIHRoZSBcXGAucHJvamVucmMudHNcXGAgZmlsZVxuNC4gUnVuIFxcYG5weCBwcm9qZW5cXGAgdG8gaW5zdGFsbCBpdFxuNS4gQWRkIHRoZSBmb2xsb3dpbmcgdG8gdGhlIFxcYHNyYy9tYWluLnRzXFxgIGZpbGU6XG5cXGBcXGBcXGB0c1xuaW1wb3J0IHsgQXBwLCBTdGFjaywgU3RhY2tQcm9wcyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgUGxhY2Vob2xkZXIgfSBmcm9tICdAbWF2b2dlbC8ke29wdGlvbnMubmFtZX0nO1xuXG5leHBvcnQgY2xhc3MgTXlTdGFjayBleHRlbmRzIFN0YWNrIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFN0YWNrUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgbmV3IFBsYWNlaG9sZGVyKHRoaXMsICdwbGFjZWhvbGRlcicsIHtcbiAgICAgIC8vIGFuZCBtb3JlLi4uIPCfkqFcbiAgICB9KTtcbiAgfVxufVxuXG5jb25zdCBlbnYgPSB7XG4gIGFjY291bnQ6ICcxMjM0NTY3ODk5MTInLFxuICByZWdpb246ICdldS1jZW50cmFsLTEnLFxufTtcblxuY29uc3QgYXBwID0gbmV3IEFwcCgpO1xubmV3IE15U3RhY2soYXBwLCAncGxhY2Vob2xkZXInLCB7IGVudiB9KTtcbmFwcC5zeW50aCgpO1xuXFxgXFxgXFxgXG5cbmFuZCBkZXBsb3kgaXRcblxcYFxcYFxcYGJhc2hcbm5weCBwcm9qZW4gYnVpbGRcbm5weCBwcm9qZW4gZGVwbG95XG5cXGBcXGBcXGBcblxud2l0aCB0aGUgb3V0cHV0XG5cXGBcXGBcXGBjb25zb2xlXG5UQkRcblxcYFxcYFxcYFxuXG5TZWUgdGhlIFtleGFtcGxlc10oLi9leGFtcGxlcykgZm9sZGVyIGZvciBtb3JlIGluc3BpcmF0aW9uLlxuXG4jIyBTb2x1dGlvbiBEZXNpZ25cblxuPGRldGFpbHM+XG4gIDxzdW1tYXJ5Pi4uLiBpZiB5b3UncmUgY3VyaW91cyBhYm91dCBjbGljayBoZXJlIGZvciB0aGUgZGV0YWlsczwvc3VtbWFyeT5cblxuIVtwbGFjZWhvbGRlcl0oZG9jcy9pbWcvcGxhY2Vob2xkZXIuZHJhd2lvLW1pbi5wbmcpXG5cbjwvZGV0YWlscz5cblxuIyMgSW5zcGlyYXRpb25cblxuYWRkIHRvb2xzIG9yIGxpbmtzIHdoaWNoIGluc3BpcmVkIHlvdVxuICAgICAgICAgIGAsXG4gICAgICAgICAgZnMucmVhZEZpbGVTeW5jKGAke2Jhc2VBc3NldHNEaXJlY3Rvcnl9L2NvbW1vbi9naXRodWJfcmVhZG1lX2N0YS5tZGApLnRvU3RyaW5nKCksXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICB9LFxuICAgICAgLy8gTk9URToga2VlcCBhbGwgdGhlIHBhc3NlZCBpbiBvcHRpb25zIHdoaWNoIGNhbiBvdmVycmlkZSB0aGUgZXhpc3Rpbmcgb25lcyFcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG5cbiAgICAvLyBUeXBlU2NyaXB0IDYgbm8gbG9uZ2VyIGF1dG8tZGlzY292ZXJzIEB0eXBlcy8qIHBhY2thZ2VzXG4gICAgdGhpcy50c2NvbmZpZ0Rldi5maWxlLmFkZE92ZXJyaWRlKCdjb21waWxlck9wdGlvbnMudHlwZXMnLCBbJ25vZGUnLCAnamVzdCddKTtcbiAgICB0aGlzLnRzY29uZmlnPy5maWxlLmFkZE92ZXJyaWRlKCdjb21waWxlck9wdGlvbnMudHlwZXMnLCBbJ25vZGUnXSk7XG5cbiAgICAvLyBwcm9qZW4ncyBBdXRvTWVyZ2UgY29tcG9uZW50IGhhcmRjb2RlcyBgZGVsZXRlX2hlYWRfYnJhbmNoOiB7fWAgaW4gdGhlXG4gICAgLy8gbWVyZ2lmeSBydWxlIHdpdGggbm8gb3B0aW9uIHRvIGRpc2FibGUgaXQuIFN0cmlwIGl0IHNvIE1lcmdpZnkgZG9lcyBub3RcbiAgICAvLyBkZWxldGUgaGVhZCBicmFuY2hlcyBvbiBtZXJnZSAocmVub3ZhdGUvZGVwZW5kYWJvdCBtYW5hZ2UgdGhlaXIgb3duKS5cbiAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL01WLUNvbnN1bHRpbmcvY2RrLXZzY29kZS1zZXJ2ZXIvcHVsbC8xMTJcbiAgICB0aGlzLnRyeUZpbmRPYmplY3RGaWxlKCcubWVyZ2lmeS55bWwnKT8uYWRkRGVsZXRpb25PdmVycmlkZShcbiAgICAgICdwdWxsX3JlcXVlc3RfcnVsZXMuMC5hY3Rpb25zLmRlbGV0ZV9oZWFkX2JyYW5jaCcsXG4gICAgKTtcblxuICAgIC8vIGdpdGlnbm9yZVxuICAgIGNvbnN0IGZpbGVzUGF0dGVyblRvR2l0aWdub3JlID0gW1xuICAgICAgJ3RtcCcsXG4gICAgICAnLmNvZGVncHQnLFxuICAgIF07XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzUGF0dGVyblRvR2l0aWdub3JlKSB7XG4gICAgICB0aGlzLmdpdGlnbm9yZS5leGNsdWRlKGZpbGUpO1xuICAgIH1cbiAgICB0aGlzLmFkZERlcHMoXG4gICAgICAvLyBjZGstbmFnIHYzIHJlcXVpcmVzIGF3cy1jZGstbGliID49IDIuMjU3LjAgKHNlZSBjZGstbmFnIE1JR1JBVElPTi5tZClcbiAgICAgICdjZGstbmFnQF4zLjAuMScsXG4gICAgKTtcbiAgICAvLyBDYXAgaW50ZWctcnVubmVyIGF0IExBU1RfSU5URUdfUlVOTkVSX1ZFUlNJT04gc2luY2UgaXQgc3RvcHBlZCBwdWJsaXNoaW5nIGFmdGVyIHRoYXQgdmVyc2lvbi5cbiAgICAvLyBpbnRlZy1ydW5uZXIgdXNlcyBwbGFpbiB2ZXJzaW9ucyAobm8gLWFscGhhLjAgc3VmZml4KS5cbiAgICAvLyBpbnRlZy10ZXN0cy1hbHBoYSBhbmQgYXdzbGludCBvbmx5IHB1Ymxpc2ggYXQgbWlub3IgdmVyc2lvbnMgKGUuZy4gMi4xOTcuMC1hbHBoYS4wLCBub3QgMi4xOTcuNC1hbHBoYS4wKS5cbiAgICBjb25zdCByYXdDZGtWZXJzaW9uID0gdGhpcy5jZGtWZXJzaW9uLnJlcGxhY2UoL1tcXF5+XS8sICcnKTtcbiAgICBjb25zdCBpbnRlZ1J1bm5lclZlcnNpb24gPSByYXdDZGtWZXJzaW9uLmxvY2FsZUNvbXBhcmUoTEFTVF9JTlRFR19SVU5ORVJfVkVSU0lPTiwgdW5kZWZpbmVkLCB7IG51bWVyaWM6IHRydWUsIHNlbnNpdGl2aXR5OiAnYmFzZScgfSkgPiAwXG4gICAgICA/IExBU1RfSU5URUdfUlVOTkVSX1ZFUlNJT05cbiAgICAgIDogcmF3Q2RrVmVyc2lvbjtcbiAgICAvLyBBbHBoYSBwYWNrYWdlcyBvbmx5IHB1Ymxpc2ggYXQgLjAgcGF0Y2ggdmVyc2lvbnMg4oCUIG5vcm1hbGl6ZSB0byBtaW5vciB2ZXJzaW9uXG4gICAgY29uc3QgW21ham9yLCBtaW5vcl0gPSByYXdDZGtWZXJzaW9uLnNwbGl0KCcuJyk7XG4gICAgY29uc3QgYWxwaGFWZXJzaW9uID0gYCR7bWFqb3J9LiR7bWlub3J9LjBgO1xuICAgIHRoaXMuYWRkRGV2RGVwcyhcbiAgICAgIGBAYXdzLWNkay9pbnRlZy1ydW5uZXJAJHtpbnRlZ1J1bm5lclZlcnNpb259YCxcbiAgICAgIGBAYXdzLWNkay9pbnRlZy10ZXN0cy1hbHBoYUAke2FscGhhVmVyc2lvbn0tYWxwaGEuMGAsXG4gICAgICAnQGNvbW1pdGxpbnQvY2xpQF4yMC4xLjAnLFxuICAgICAgJ0Bjb21taXRsaW50L2NvbmZpZy1jb252ZW50aW9uYWxAXjIwLjAuMCcsXG4gICAgICBgYXdzbGludEAke2FscGhhVmVyc2lvbn0tYWxwaGEuMGAsXG4gICAgICAnaHVza3lAXjkuMS43JyxcbiAgICApO1xuXG4gICAgdGhpcy5wYWNrYWdlLnNldFNjcmlwdCgncHJlcGFyZScsICdodXNreScpO1xuICAgIG5ldyBUZXh0RmlsZSh0aGlzLCAnLmNvbW1pdGxpbnRyYy5qcycsIHtcbiAgICAgIGxpbmVzOiBbXG4gICAgICAgICdtb2R1bGUuZXhwb3J0cyA9IHsgZXh0ZW5kczogW1xcJ0Bjb21taXRsaW50L2NvbmZpZy1jb252ZW50aW9uYWxcXCddIH07JyxcbiAgICAgIF0sXG4gICAgICBtYXJrZXI6IHRydWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLnBhY2thZ2Uuc2V0U2NyaXB0KCdhd3NsaW50JywgJ2F3c2xpbnQnKTtcbiAgICAvLyAuZ2l0aHViL3dvcmtmbG93cy9idWlsZC55bWxcbiAgICBjb25zdCBidWlsZFdvcmtmbG93ID0gdGhpcy5naXRodWI/LnRyeUZpbmRXb3JrZmxvdygnYnVpbGQnKTtcbiAgICBpZiAoIWJ1aWxkV29ya2Zsb3cpIHJldHVybjtcbiAgICBjb25zdCBidWlsZEpvYiA9IGJ1aWxkV29ya2Zsb3cuZ2V0Sm9iKCdidWlsZCcpO1xuICAgIGlmICghYnVpbGRKb2IgfHwgISgnc3RlcHMnIGluIGJ1aWxkSm9iKSkgcmV0dXJuO1xuICAgIC8vIFRPRE86IGZpZ3VyZSBvdXQgd2h5IHdyb25nIHR5cGVzXG4gICAgY29uc3QgZ2V0QnVpbGRTdGVwcyA9IGJ1aWxkSm9iLnN0ZXBzIGFzIHVua25vd24gYXMgKCkgPT4gSm9iU3RlcFtdO1xuICAgIGNvbnN0IGJ1aWxkSm9iU3RlcHMgPSBnZXRCdWlsZFN0ZXBzKCk7XG4gICAgYnVpbGRXb3JrZmxvdy51cGRhdGVKb2IoJ2J1aWxkJywge1xuICAgICAgLi4uYnVpbGRKb2IsXG4gICAgICBzdGVwczogW1xuICAgICAgICAuLi5idWlsZEpvYlN0ZXBzLnNsaWNlKDAsIDQpLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ1J1biBhd3NsaW50JyxcbiAgICAgICAgICBydW46ICducG0gcnVuIGF3c2xpbnQnLFxuICAgICAgICB9LFxuICAgICAgICAuLi5idWlsZEpvYlN0ZXBzLnNsaWNlKDQpLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIHRoaXMucGFja2FnZS5zZXRTY3JpcHQoXG4gICAgICAnaW50ZWctdGVzdCcsXG4gICAgICBgaW50ZWctcnVubmVyIC0tZGlyZWN0b3J5IC4vaW50ZWctdGVzdHMgJHtpbnRlZ1Rlc3RSZWdpb25zPy5tYXAocmVnaW9uID0+IGAtLXBhcmFsbGVsLXJlZ2lvbnMgJHtyZWdpb259YCkuam9pbignICcpfSAtLXVwZGF0ZS1vbi1mYWlsZWRgLFxuICAgICk7XG5cbiAgICBuZXcgVGV4dEZpbGUodGhpcywgJy5naXRodWIvSVNTVUVfVEVNUExBVEUvYnVnX3JlcG9ydC5tZCcsIHtcbiAgICAgIGxpbmVzOiBbZnMucmVhZEZpbGVTeW5jKGAke2Jhc2VBc3NldHNEaXJlY3Rvcnl9L2NvbW1vbi9naXRodWJfYnVnX3JlcG9ydC5tZGApLnRvU3RyaW5nKCldLFxuICAgIH0pO1xuXG4gICAgbmV3IFRleHRGaWxlKHRoaXMsICcuZ2l0aHViL0lTU1VFX1RFTVBMQVRFL2ZlYXR1cmVfcmVxdWVzdC5tZCcsIHtcbiAgICAgIGxpbmVzOiBbZnMucmVhZEZpbGVTeW5jKGAke2Jhc2VBc3NldHNEaXJlY3Rvcnl9L2NvbW1vbi9naXRodWJfZmVhdHVyZV9yZXF1ZXN0Lm1kYCkudG9TdHJpbmcoKV0sXG4gICAgfSk7XG5cbiAgICBuZXcgWWFtbEZpbGUodGhpcywgJy5naXRodWIvRlVORElORy55YW1sJywge1xuICAgICAgb2JqOiB7XG4gICAgICAgIGdpdGh1YjogJ21hdm9nZWwnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIG5ldyBUZXh0RmlsZSh0aGlzLCAnQ09OVFJJQlVUSU5HLm1kJywge1xuICAgICAgbGluZXM6IFtmcy5yZWFkRmlsZVN5bmMoYCR7YmFzZUFzc2V0c0RpcmVjdG9yeX0vY29tbW9uL2NvbnRyaWJ1dGluZy5tZGApLnRvU3RyaW5nKCldLFxuICAgIH0pO1xuXG4gICAgbmV3IFRleHRGaWxlKHRoaXMsICcucHJldHRpZXJyYycsIHtcbiAgICAgIGxpbmVzOiBbZnMucmVhZEZpbGVTeW5jKGAke2Jhc2VBc3NldHNEaXJlY3Rvcnl9L2NvbW1vbi9wcmV0dGllcnJjYCkudG9TdHJpbmcoKV0sXG4gICAgfSk7XG5cbiAgICAvLyB3cml0ZSBzYW1wbGUgY29kZSB0byBtYWluLnRzICYgdG8gbWFpbi50ZXN0LnRzXG4gICAgaWYgKG9wdGlvbnMuc2FtcGxlQ29kZSA/PyB0cnVlKSB7XG4gICAgICBuZXcgU2FtcGxlQ29kZSh0aGlzLCB7XG4gICAgICAgIGJhc2VBc3NldHNEaXJlY3RvcnksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuaW50ZXJmYWNlIFNhbXBsZUNvZGVPcHRpb25zIHtcbiAgcmVhZG9ubHkgYmFzZUFzc2V0c0RpcmVjdG9yeT86IHN0cmluZztcbn1cblxuY2xhc3MgU2FtcGxlQ29kZSBleHRlbmRzIENvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbGlicmFyeTogQXdzQ2RrQ29uc3RydWN0TGlicmFyeTtcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBTYW1wbGVDb2RlT3B0aW9ucztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBsaWJyYXJ5OiBBd3NDZGtDb25zdHJ1Y3RMaWJyYXJ5LFxuICAgIG9wdGlvbnM6IFNhbXBsZUNvZGVPcHRpb25zLFxuICApIHtcbiAgICBzdXBlcihsaWJyYXJ5KTtcbiAgICB0aGlzLmxpYnJhcnkgPSBsaWJyYXJ5O1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBwdWJsaWMgc3ludGhlc2l6ZSgpIHtcbiAgICBjb25zdCBvdXRkaXIgPSB0aGlzLnByb2plY3Qub3V0ZGlyO1xuICAgIGNvbnN0IHNyY2RpciA9IHBhdGguam9pbihvdXRkaXIsIHRoaXMubGlicmFyeS5zcmNkaXIpO1xuICAgIGlmIChcbiAgICAgIGZzLmV4aXN0c1N5bmMoc3JjZGlyKSAmJlxuICAgICAgZnMucmVhZGRpclN5bmMoc3JjZGlyKS5maWx0ZXIoKHgpID0+IHguZW5kc1dpdGgoJy50cycpKSAmJlxuICAgICAgIWZzLnJlYWRGaWxlU3luYyhgJHtzcmNkaXJ9L2luZGV4LnRzYCkudG9TdHJpbmcoKS5pbmNsdWRlcygnZXhwb3J0IGNsYXNzIEhlbGxvJykgLy8gTm90ZTogZnJvbSBwYXJlbnRcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmcy5ta2RpclN5bmMoc3JjZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihzcmNkaXIsICdpbmRleC50cycpLCBmcy5yZWFkRmlsZVN5bmMoYCR7dGhpcy5vcHRpb25zLmJhc2VBc3NldHNEaXJlY3Rvcnl9L2Nkay1jb25zdHJ1Y3Qvc3JjX2luZGV4LnRzYCkudG9TdHJpbmcoKSk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4oc3JjZGlyLCAncGxhY2Vob2xkZXIudHMnKSwgZnMucmVhZEZpbGVTeW5jKGAke3RoaXMub3B0aW9ucy5iYXNlQXNzZXRzRGlyZWN0b3J5fS9jZGstY29uc3RydWN0L3NyY19wbGFjZWhvbGRlci50c2ApLnRvU3RyaW5nKCkpO1xuICAgIC8vIGNyZCB3aXRoIGxhbWJkYSBnZW5lcmF0aW9uXG4gICAgZnMubWtkaXJTeW5jKGAke3NyY2Rpcn0vY3JkLWV4YW1wbGVgLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihgJHtzcmNkaXJ9L2NyZC1leGFtcGxlYCwgJ2NyZC1leGFtcGxlLnRzJyksIGZzLnJlYWRGaWxlU3luYyhgJHt0aGlzLm9wdGlvbnMuYmFzZUFzc2V0c0RpcmVjdG9yeX0vY2RrLWNvbnN0cnVjdC9zcmNfY3JkLWV4YW1wbGUudHNgKS50b1N0cmluZygpKTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihgJHtzcmNkaXJ9L2NyZC1leGFtcGxlYCwgJ2NyZC1leGFtcGxlLmxhbWJkYS50cycpLCBmcy5yZWFkRmlsZVN5bmMoYCR7dGhpcy5vcHRpb25zLmJhc2VBc3NldHNEaXJlY3Rvcnl9L2Nkay1jb25zdHJ1Y3Qvc3JjX2NyZC1leGFtcGxlLmxhbWJkYS50c2ApLnRvU3RyaW5nKCkpO1xuXG5cbiAgICBjb25zdCB0ZXN0ZGlyID0gcGF0aC5qb2luKG91dGRpciwgdGhpcy5saWJyYXJ5LnRlc3RkaXIpO1xuICAgIGlmIChcbiAgICAgIGZzLmV4aXN0c1N5bmModGVzdGRpcikgJiZcbiAgICAgIGZzLnJlYWRkaXJTeW5jKHRlc3RkaXIpLmZpbHRlcigoeCkgPT4geC5lbmRzV2l0aCgnLnRzJykpICYmXG4gICAgICAhZnMuZXhpc3RzU3luYyhgJHt0ZXN0ZGlyfS9oZWxsby50ZXN0LnRzYCkgLy8gTm90ZTogZnJvbSBwYXJlbnRcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gcmVtb3ZlICR7dGVzdGRpcn0vaGVsbG8udGVzdC50cyBmaWxlLiBPbiB0aGUgb3RoZXIgaGFuZCwgd2Ugb3ZlcnJpZGUgaW5kZXgudHNcbiAgICBmcy51bmxpbmtTeW5jKGAke3Rlc3RkaXJ9L2hlbGxvLnRlc3QudHNgKTtcbiAgICBmcy5ta2RpclN5bmModGVzdGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4odGVzdGRpciwgJ2luZGV4LnRlc3QudHMnKSwgZnMucmVhZEZpbGVTeW5jKGAke3RoaXMub3B0aW9ucy5iYXNlQXNzZXRzRGlyZWN0b3J5fS9jZGstY29uc3RydWN0L3Rlc3RfaW5kZXgudGVzdC50c2ApLnRvU3RyaW5nKCkpO1xuICAgIC8vIGxhbWJkYSB0ZXN0cyB3aXRoIGplc3Qgc3R1YnNcbiAgICBmcy5ta2RpclN5bmMoYCR7dGVzdGRpcn0vY3JkLWV4YW1wbGVgLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihgJHt0ZXN0ZGlyfS9jcmQtZXhhbXBsZWAsICdjcmQtZXhhbXBsZS50ZXN0LnRzJyksIGZzLnJlYWRGaWxlU3luYyhgJHt0aGlzLm9wdGlvbnMuYmFzZUFzc2V0c0RpcmVjdG9yeX0vY2RrLWNvbnN0cnVjdC90ZXN0X2NyZC1leGFtcGxlLnRlc3QudHNgKS50b1N0cmluZygpKTtcblxuXG4gICAgY29uc3QgaW50ZWdUZXN0ZGlyID0gcGF0aC5qb2luKG91dGRpciwgJ2ludGVnLXRlc3RzJyk7XG4gICAgaWYgKFxuICAgICAgZnMuZXhpc3RzU3luYyhpbnRlZ1Rlc3RkaXIpICYmXG4gICAgICBmcy5yZWFkZGlyU3luYyhpbnRlZ1Rlc3RkaXIpLmZpbHRlcigoeCkgPT4geC5lbmRzV2l0aCgnLnRzJykpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZzLm1rZGlyU3luYyhpbnRlZ1Rlc3RkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKGludGVnVGVzdGRpciwgJ2ludGVnLnBsYWNlaG9sZGVyLnRzJyksIGZzLnJlYWRGaWxlU3luYyhgJHt0aGlzLm9wdGlvbnMuYmFzZUFzc2V0c0RpcmVjdG9yeX0vY2RrLWNvbnN0cnVjdC9pbnRlZ19pbnRlZy5wbGFjZWhvbGRlci50c2ApLnRvU3RyaW5nKCkpO1xuXG4gICAgY29uc3QgaW50ZWdUZXN0RnVuY3Rpb25zZGlyID0gcGF0aC5qb2luKGludGVnVGVzdGRpciwgJ2Z1bmN0aW9ucycpO1xuICAgIGlmIChcbiAgICAgIGZzLmV4aXN0c1N5bmMoaW50ZWdUZXN0RnVuY3Rpb25zZGlyKSAmJlxuICAgICAgZnMucmVhZGRpclN5bmMoaW50ZWdUZXN0RnVuY3Rpb25zZGlyKS5maWx0ZXIoKHgpID0+IHguZW5kc1dpdGgoJy50cycpKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmcy5ta2RpclN5bmMoaW50ZWdUZXN0RnVuY3Rpb25zZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihpbnRlZ1Rlc3RGdW5jdGlvbnNkaXIsICd0ZXN0LWhhbmRsZXIudHMnKSwgZnMucmVhZEZpbGVTeW5jKGAke3RoaXMub3B0aW9ucy5iYXNlQXNzZXRzRGlyZWN0b3J5fS9jZGstY29uc3RydWN0L2ludGVnX3Rlc3QtaGFuZGxlci50c2ApLnRvU3RyaW5nKCkpO1xuXG4gICAgY29uc3QgZG9jc2RpciA9IHBhdGguam9pbihvdXRkaXIsICdkb2NzJyk7XG4gICAgaWYgKFxuICAgICAgZnMuZXhpc3RzU3luYyhkb2NzZGlyKSAmJlxuICAgICAgZnMucmVhZGRpclN5bmMoZG9jc2RpcikuZmlsdGVyKCh4KSA9PiB4LmVuZHNXaXRoKCcuZHJhd2lvJykpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZzLm1rZGlyU3luYyhkb2NzZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihkb2NzZGlyLCAncGxhY2Vob2xkZXIuZHJhd2lvJyksIGZzLnJlYWRGaWxlU3luYyhgJHt0aGlzLm9wdGlvbnMuYmFzZUFzc2V0c0RpcmVjdG9yeX0vY29tbW9uL2RvY3NfcGxhY2Vob2xkZXIuZHJhd2lvYCkudG9TdHJpbmcoKSk7XG5cbiAgICBjb25zdCBleGFtcGxlc2RpciA9IHBhdGguam9pbihvdXRkaXIsICdleGFtcGxlcycsICdzaW1wbGUnKTtcbiAgICBpZiAoXG4gICAgICBmcy5leGlzdHNTeW5jKGV4YW1wbGVzZGlyKSAmJlxuICAgICAgZnMucmVhZGRpclN5bmMoZXhhbXBsZXNkaXIpLmZpbHRlcigoeCkgPT4geC5lbmRzV2l0aCgnLmRyYXdpbycpKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmcy5ta2RpclN5bmMoZXhhbXBsZXNkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKGV4YW1wbGVzZGlyLCAnbWFpbi50cycpLCBmcy5yZWFkRmlsZVN5bmMoYCR7dGhpcy5vcHRpb25zLmJhc2VBc3NldHNEaXJlY3Rvcnl9L2Nkay1jb25zdHJ1Y3QvZXhhbXBsZXNfc2ltcGxlX21haW4udHNgKS50b1N0cmluZygpKTtcbiAgfVxufSJdfQ==
|
|
487
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWNvbnN0cnVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9qZWN0cy9jZGstY29uc3RydWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1Q0FBeUI7QUFDekIsMkNBQTZCO0FBRTdCLG1DQUFzRjtBQUN0Riw4Q0FBeUc7QUFDekcsOENBQStEO0FBRy9ELDJFQUEyRTtBQUMzRSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFDM0IsTUFBTSxpQkFBaUIsR0FBRyxzQkFBYSxDQUFDLFdBQVcsQ0FBQztBQUVwRCxvRkFBb0Y7QUFDcEYsb0ZBQW9GO0FBQ3BGLG1FQUFtRTtBQUNuRSxxRkFBcUY7QUFDckYsaUVBQWlFO0FBQ2pFLGdGQUFnRjtBQUNoRiw2Q0FBNkM7QUFDN0MsTUFBTSx5QkFBeUIsR0FBRyxTQUFTLENBQUM7QUFFNUMscUVBQXFFO0FBQ3JFLHdFQUF3RTtBQUN4RSwwRUFBMEU7QUFDMUUseUVBQXlFO0FBQ3pFLHlFQUF5RTtBQUN6RSwyRUFBMkU7QUFDM0UsMkNBQTJDO0FBQzNDLE1BQU0sNEJBQTRCLEdBQUcsU0FBUyxDQUFDO0FBRS9DLDBFQUEwRTtBQUMxRSw0RUFBNEU7QUFDNUUsMkVBQTJFO0FBQzNFLHlDQUF5QztBQUN6QywwRUFBMEU7QUFDMUUsNEVBQTRFO0FBQzVFLG1EQUFtRDtBQUNuRCxNQUFNLG1CQUFtQixHQUFHLFNBQVMsQ0FBQztBQXFCdEM7Ozs7R0FJRztBQUNILE1BQWEsc0JBQXVCLFNBQVEsK0JBQXNCOztJQUVoRSxZQUFZLE9BQXNDO1FBQ2hELE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSwwQ0FBMEMsQ0FBQztRQUN0SCxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLENB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L0MsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsd0NBQXdDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQy9KLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7IENvbXBvbmVudCwgamF2YXNjcmlwdCwgUmVsZWFzYWJsZUNvbW1pdHMsIFRleHRGaWxlLCBZYW1sRmlsZSB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBBd3NDZGtDb25zdHJ1Y3RMaWJyYXJ5LCBBd3NDZGtDb25zdHJ1Y3RMaWJyYXJ5T3B0aW9ucywgTGFtYmRhUnVudGltZSB9IGZyb20gJ3Byb2plbi9saWIvYXdzY2RrJztcbmltcG9ydCB7IERlcGVuZGFib3RTY2hlZHVsZUludGVydmFsIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWInO1xuaW1wb3J0IHsgSm9iU3RlcCB9IGZyb20gJ3Byb2plbi9saWIvZ2l0aHViL3dvcmtmbG93cy1tb2RlbCc7XG5cbi8vIFNldCB0aGUgbWluaW11bSBub2RlIHZlcnNpb24gZm9yIEFXUyBDREsgYW5kIHRoZSBHaXRIdWIgYWN0aW9ucyB3b3JrZmxvd1xuY29uc3Qgbm9kZVZlcnNpb24gPSAnMjQueCc7XG5jb25zdCBsYW1iZGFOb2RlVmVyc2lvbiA9IExhbWJkYVJ1bnRpbWUuTk9ERUpTXzI0X1g7XG5cbi8vIFRoZSBsYXN0IEBhd3MtY2RrL2ludGVnLXJ1bm5lciB2ZXJzaW9uIHZlcmlmaWVkIGFnYWluc3QgbnBtIChjaGVja2VkIDIwMjYtMDctMjEpLlxuLy8gaW50ZWctcnVubmVyIHVzZXMgcGxhaW4gdmVyc2lvbnMgKG5vIC1hbHBoYS4wIHN1ZmZpeCkgYW5kIGhhcyBoaXN0b3JpY2FsbHkgbGFnZ2VkXG4vLyBvciBzdG9wcGVkIHRyYWNraW5nIGF3cy1jZGstbGliJ3MgdmVyc2lvbiBmb3Igc3RyZXRjaGVzIG9mIHRpbWUuXG4vLyBAYXdzLWNkay9pbnRlZy10ZXN0cy1hbHBoYSBhbmQgYXdzbGludCBjb250aW51ZSB0byBwdWJsaXNoIGFuZCB0cmFjayBDREsgdmVyc2lvbnMuXG4vLyBTSE9SVENVVDogaGFyZGNvZGVkIGNhcCByZXF1aXJlcyBtYW51YWwgcmUtdmVyaWZpY2F0aW9uIC0tIHJ1blxuLy8gYG5wbSB2aWV3IEBhd3MtY2RrL2ludGVnLXJ1bm5lciB2ZXJzaW9ucyAtLWpzb25gIGFuZCBidW1wIHRoaXMgaWYgYXdzLWNkay1saWJcbi8vIGhhcyByZWxlYXNlZCBuZXdlciB2ZXJzaW9ucyB0aGFuIHRoaXMgb25lLlxuY29uc3QgTEFTVF9JTlRFR19SVU5ORVJfVkVSU0lPTiA9ICcyLjIwMy4wJztcblxuLy8gQXdzQ2RrQ29uc3RydWN0TGlicmFyeU9wdGlvbnMuY2RrVmVyc2lvbidzIG93biB1cHN0cmVhbSBgQGRlZmF1bHRgXG4vLyAobm9kZV9tb2R1bGVzL3Byb2plbi9saWIvYXdzY2RrL2F3c2Nkay1kZXBzLmQudHMpIC0gd2hhdCBgcHJvamVuIG5ld2Bcbi8vIGZpbGxzIGluIHdoZW4gYC0tY2RrVmVyc2lvbmAgaXMgb21pdHRlZC4ganNpaSBmb3JiaWRzIGEgZGVyaXZlZCBvcHRpb25zXG4vLyBpbnRlcmZhY2UgZnJvbSByZS1kZWNsYXJpbmcgYW4gaW5oZXJpdGVkIG1lbWJlciAoSlNJSTUwMTU6IFwicmVzdWx0cyBpblxuLy8gaW52YWxpZCBDI1wiKSwgc28gd2UgY2FuJ3Qgb3ZlcnJpZGUgdGhlIGBAZGVmYXVsdGAgZG9jIHRoZSBDTEkgcmVmbGVjdHNcbi8vIG9uIHRvIGNoYW5nZSB0aGF0LiBEZXRlY3RpbmcgdGhpcyBleGFjdCB2YWx1ZSBiZWxvdyBhbmQgc3Vic3RpdHV0aW5nIG91clxuLy8gb3duIGRlZmF1bHQgaXMgdGhlIG9ubHkgcmVtYWluaW5nIGxldmVyLlxuY29uc3QgVVBTVFJFQU1fREVGQVVMVF9DREtfVkVSU0lPTiA9ICcyLjE4OS4xJztcblxuLy8gT3VyIGRlZmF1bHQgYGNka1ZlcnNpb25gIHdoZW4gdGhlIGNhbGxlciAob3IgYHByb2plbiBuZXdgKSBkb2Vzbid0IHBhc3Ncbi8vIG9uZS4gTXVzdCBzdGF5ID49IDIuMjU3LjA6IGNkay1uYWcgdjMgKGZvcmNlZCBiZWxvdyB2aWEgYWRkRGVwcykgcmVxdWlyZXNcbi8vIGl0IGFzIGEgcGVlciwgYW5kIHRoZSB1cHN0cmVhbSBkZWZhdWx0IGFib3ZlIGZhaWxzIGBucG0gaW5zdGFsbGAgd2l0aCBhblxuLy8gRVJFU09MVkUgY29uZmxpY3Qgb24gYSBmcmVzaCBzY2FmZm9sZC5cbi8vIFNIT1JUQ1VUOiBib3RoIGhhcmRjb2RlZCB2ZXJzaW9ucyByZXF1aXJlIG1hbnVhbCByZS12ZXJpZmljYXRpb24gLS0gcnVuXG4vLyBgbnBtIHZpZXcgYXdzLWNkay1saWIgdmVyc2lvbmAgYW5kIHJlLWNoZWNrIGF3c2Nkay1kZXBzLmQudHMncyBgQGRlZmF1bHRgXG4vLyBwZXJpb2RpY2FsbHkgKGl0IG1heSBkcmlmdCBvbiBhIHByb2plbiB1cGdyYWRlKS5cbmNvbnN0IERFRkFVTFRfQ0RLX1ZFUlNJT04gPSAnMi4yNjEuMCc7XG5cbi8qKlxuICogVGhlIG9wdGlvbnMgZm9yIHRoZSBjb25zdHJ1Y3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNdmNDZGtDb25zdHJ1Y3RMaWJyYXJ5T3B0aW9ucyBleHRlbmRzIEF3c0Nka0NvbnN0cnVjdExpYnJhcnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIEJhc2UgZGlyZWN0b3J5IGZvciB0aGUgYXNzZXRzXG4gICAqXG4gICAqIEBkZWZhdWx0ICR7cHJvY2Vzcy5jd2QoKX0vbm9kZV9tb2R1bGVzL212Yy1wcm9qZW4vYXNzZXRzXG4gICAqL1xuICByZWFkb25seSBiYXNlQXNzZXRzRGlyZWN0b3J5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVnaW9ucyB0byBydW4gdGhlIGludGVnIHRlc3RzIGluXG4gICAqXG4gICAqIEBkZWZhdWx0IGV1LXdlc3QtMSBhbmQgZXUtd2VzdC0yXG4gICAqL1xuICByZWFkb25seSBpbnRlZ1Rlc3RSZWdpb25zPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogVHlwZVNjcmlwdCBsaWJyYXJ5XG4gKlxuICogQHBqaWQgbXZjLWF3c2Nkay1jb25zdHJ1Y3RcbiAqL1xuZXhwb3J0IGNsYXNzIE12Y0Nka0NvbnN0cnVjdExpYnJhcnkgZXh0ZW5kcyBBd3NDZGtDb25zdHJ1Y3RMaWJyYXJ5IHtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBNdmNDZGtDb25zdHJ1Y3RMaWJyYXJ5T3B0aW9ucykge1xuICAgIGNvbnN0IGJhc2VBc3NldHNEaXJlY3RvcnkgPSBvcHRpb25zLmJhc2VBc3NldHNEaXJlY3RvcnkgPz8gYCR7cHJvY2Vzcy5jd2QoKX0vbm9kZV9tb2R1bGVzL0BtYXZvZ2VsL212Yy1wcm9qZW4vYXNzZXRzYDtcbiAgICBjb25zdCBpbnRlZ1Rlc3RSZWdpb25zID0gb3B0aW9ucy5pbnRlZ1Rlc3RSZWdpb25zID8/IFsnZXUtd2VzdC0xJywgJ2V1LXdlc3QtMiddO1xuICAgIC8vIGBvcHRpb25zLmNka1ZlcnNpb25gIGlzIHR5cGVkIGFzIHJlcXVpcmVkLCBidXQgYHByb2plbiBuZXdgIGFsd2F5c1xuICAgIC8vIHN1cHBsaWVzIGEgdmFsdWUgdmlhIGpzaWkgcmVmbGVjdGlvbiAtIGVpdGhlciBhIHJlYWwgdXNlciBvdmVycmlkZSxcbiAgICAvLyBvciAoaWYgLS1jZGtWZXJzaW9uIHdhcyBvbWl0dGVkKSB0aGUgdXBzdHJlYW0gYEBkZWZhdWx0YCBsaXRlcmFsXG4gICAgLy8gaXRzZWxmLiBTdWJzdGl0dXRlIG91cnMgb25seSBpbiB0aGUgbGF0dGVyIGNhc2UsIHZlcmlmaWVkIGJlbG93LlxuICAgIGNvbnN0IGNka1ZlcnNpb24gPSAoIW9wdGlvbnMuY2RrVmVyc2lvbiB8fCBvcHRpb25zLmNka1ZlcnNpb24gPT09IFVQU1RSRUFNX0RFRkFVTFRfQ0RLX1ZFUlNJT04pXG4gICAgICA/IERFRkFVTFRfQ0RLX1ZFUlNJT05cbiAgICAgIDogb3B0aW9ucy5jZGtWZXJzaW9uO1xuXG4gICAgLy8gQXdzQ2RrQ29uc3RydWN0TGlicmFyeSdzIGBzdXBlcigpYCBjYWxsIGJlbG93IHdpcmVzIHVwIGFuIEF1dG9EaXNjb3ZlclxuICAgIC8vIGNvbXBvbmVudCB3aG9zZSBjb25zdHJ1Y3RvciBzeW5jaHJvbm91c2x5IGdsb2JzIGBzcmNkaXJgIGZvclxuICAgIC8vIGAqLmxhbWJkYS50c2AgZW50cnlwb2ludHMgLSBpdCBuZXZlciByZS1zY2FucyBsYXRlci4gU2FtcGxlQ29kZSAoYWRkZWRcbiAgICAvLyBhdCB0aGUgZW5kIG9mIHRoaXMgY29uc3RydWN0b3IpIHdyaXRlcyB0aGUgc2FtcGxlIGNyZC1leGFtcGxlLmxhbWJkYS50c1xuICAgIC8vIGR1cmluZyB0aGUgcHJvamVjdCdzIHN5bnRoZXNpemUoKSBwaGFzZSwgd2hpY2ggcnVucyBhZnRlciBldmVyeVxuICAgIC8vIGNvbXBvbmVudCdzIGNvbnN0cnVjdG9yLCBpbmNsdWRpbmcgQXV0b0Rpc2NvdmVyJ3MgLSBzbyB0aGUgZmlsZSBuZXZlclxuICAgIC8vIGV4aXN0ZWQgZm9yIEF1dG9EaXNjb3ZlciB0byBmaW5kLCBubyBMYW1iZGFGdW5jdGlvbi9CdW5kbGVyIGV2ZXIgZ290XG4gICAgLy8gY3JlYXRlZCBmb3IgaXQsIGFuZCB0aGUgZ2VuZXJhdGVkIGNyZC1leGFtcGxlLnRzIHdhcyBsZWZ0IGltcG9ydGluZyBhXG4gICAgLy8gJy4vY3JkLWV4YW1wbGUtZnVuY3Rpb24nIGNvbnN0cnVjdCBmaWxlIHRoYXQgbm8gb25lIHdyb3RlLCBicmVha2luZ1xuICAgIC8vIGVzbGludCBvbiBldmVyeSBzY2FmZm9sZC4gV3JpdGUganVzdCB0aGlzIG9uZSBmaWxlIGVhcmx5IGVub3VnaCBmb3JcbiAgICAvLyBBdXRvRGlzY292ZXIgdG8gc2VlIGl0OyBTYW1wbGVDb2RlIHN0aWxsIG93bnMgZXZlcnl0aGluZyBlbHNlLlxuICAgIC8vIFNraXAgdW5kZXIgSmVzdCAoTk9ERV9FTlY9dGVzdCwgbWF0Y2hpbmcgcHJvamVuJ3Mgb3duIElTX1RFU1RfUlVOXG4gICAgLy8gY2hlY2spOiB3aGVuIG9wdGlvbnMub3V0ZGlyIGlzIHVuc2V0ICh0cnVlIGZvciBldmVyeSB0ZXN0IGluIHRoaXNcbiAgICAvLyByZXBvKSwgcHJvamVuJ3MgYmFzZSBQcm9qZWN0IGNsYXNzIC0gY29uc3RydWN0ZWQgdmlhIHN1cGVyKCkgYmVsb3cgLVxuICAgIC8vIHJlZGlyZWN0cyB0aGUgKnJlYWwqIG91dGRpciB0byBhIGZyZXNoIHRlbXAgZGlyZWN0b3J5IGluc3RlYWQgb2YgY3dkLlxuICAgIC8vIFRoaXMgZWFybHkgd3JpdGUgcnVucyBiZWZvcmUgdGhhdCByZWRpcmVjdCBleGlzdHMsIHNvIHdpdGhvdXQgdGhpc1xuICAgIC8vIGd1YXJkIGl0IHdvdWxkIHdyaXRlIHN0cmFpZ2h0IGludG8gdGhpcyByZXBvJ3Mgb3duIHdvcmtpbmcgdHJlZVxuICAgIC8vIGluc3RlYWQgb2YgdGhlIHRlc3QncyB0ZW1wIGRpci5cbiAgICBpZiAoKG9wdGlvbnMuc2FtcGxlQ29kZSA/PyB0cnVlKSAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Rlc3QnKSB7XG4gICAgICBjb25zdCBvdXRkaXIgPSBwYXRoLnJlc29sdmUob3B0aW9ucy5vdXRkaXIgPz8gJy4nKTtcbiAgICAgIGNvbnN0IGxhbWJkYUVudHJ5cG9pbnQgPSBwYXRoLmpvaW4ob3V0ZGlyLCAnc3JjJywgJ2NyZC1leGFtcGxlJywgJ2NyZC1leGFtcGxlLmxhbWJkYS50cycpO1xuICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGxhbWJkYUVudHJ5cG9pbnQpKSB7XG4gICAgICAgIGZzLm1rZGlyU3luYyhwYXRoLmRpcm5hbWUobGFtYmRhRW50cnlwb2ludCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGxhbWJkYUVudHJ5cG9pbnQsIGZzLnJlYWRGaWxlU3luYyhgJHtiYXNlQXNzZXRzRGlyZWN0b3J5fS9jZGstY29uc3RydWN0L3NyY19jcmQtZXhhbXBsZS5sYW1iZGEudHNgKS50b1N0cmluZygpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdXBlcih7XG4gICAgICBhdXRob3JPcmdhbml6YXRpb246IHRydWUsXG4gICAgICBjb3B5cmlnaHRPd25lcjogJ01WIENvbnN1bHRpbmcgR21iSCcsXG4gICAgICBsaWNlbnNlOiAnQXBhY2hlLTIuMCcsXG4gICAgICBqc2lpVmVyc2lvbjogJ342LjAuMCcsXG4gICAgICB0eXBlc2NyaXB0VmVyc2lvbjogJ142LjAuMicsXG4gICAgICBtaW5Ob2RlVmVyc2lvbjogbm9kZVZlcnNpb24sXG4gICAgICB3b3JrZmxvd05vZGVWZXJzaW9uOiBub2RlVmVyc2lvbixcbiAgICAgIHN0YWJpbGl0eTogJ2V4cGVyaW1lbnRhbCcsXG4gICAgICByZWxlYXNlVG9OcG06IHRydWUsXG4gICAgICBwYWNrYWdlTWFuYWdlcjogamF2YXNjcmlwdC5Ob2RlUGFja2FnZU1hbmFnZXIuTlBNLFxuICAgICAgbnBtQWNjZXNzOiBqYXZhc2NyaXB0Lk5wbUFjY2Vzcy5QVUJMSUMsXG4gICAgICBsYW1iZGFPcHRpb25zOiB7XG4gICAgICAgIHJ1bnRpbWU6IGxhbWJkYU5vZGVWZXJzaW9uLFxuICAgICAgICBhd3NTZGtDb25uZWN0aW9uUmV1c2U6IGZhbHNlLCAvLyBkb2Vzbid0IGV4aXN0IGluIEFXUyBTREsgSlMgdjNcbiAgICAgIH0sXG4gICAgICBhdXRvQXBwcm92ZU9wdGlvbnM6IHtcbiAgICAgICAgLy8gJ212Yy1ib3QnICh0aGUgUFJPSkVOX0dJVEhVQl9UT0tFTiBpZGVudGl0eSkgaXMgZGVsaWJlcmF0ZWx5XG4gICAgICAgIC8vIGV4Y2x1ZGVkOiBHaXRIdWIgcmVqZWN0cyBhIFBSIHJldmlldyBmcm9tIHRoZSBzYW1lIGFjY291bnQgdGhhdFxuICAgICAgICAvLyBhdXRob3JlZCB0aGUgUFIgKFwiQ2FuIG5vdCBhcHByb3ZlIHlvdXIgb3duIHB1bGwgcmVxdWVzdFwiKSwgYW5kXG4gICAgICAgIC8vIHRoaXMgdG9rZW4gY2FuIGFsc28gYXV0aG9yIFBScyBhZ2FpbnN0IGdlbmVyYXRlZCBwcm9qZWN0cyAoZS5nLlxuICAgICAgICAvLyBzY2FmZm9sZGVyLWRyaXZlbiBhdXRvbWF0aW9uKS4gVGhvc2UgUFJzIGFyZSBhdXRvLWFwcHJvdmVkIHZpYVxuICAgICAgICAvLyBNZXJnaWZ5IGluc3RlYWQsIGJlbG93LCB3aGljaCBwb3N0cyB0aGUgcmV2aWV3IGFzIHRoZSBNZXJnaWZ5XG4gICAgICAgIC8vIGFwcCAtIGEgZGlmZmVyZW50IGFjdG9yLiBTZWUgbWF2b2dlbC9tdmMtcHJvamVuIzc0LlxuICAgICAgICBhbGxvd2VkVXNlcm5hbWVzOiBbXG4gICAgICAgICAgJ2RlcGVuZGFib3QnLFxuICAgICAgICAgICdkZXBlbmRhYm90W2JvdF0nLFxuICAgICAgICAgICdnaXRodWItYm90JyxcbiAgICAgICAgICAnZ2l0aHViLWFjdGlvbnNbYm90XScsXG4gICAgICAgIF0sXG4gICAgICAgIC8vIFRoZSBuYW1lIG9mIHRoZSBzZWNyZXQgdGhhdCBoYXMgdGhlIEdpdEh1YiBQQVQgZm9yIGF1dG8tYXBwcm92aW5nIFBScyB3aXRoIHBlcm1pc3Npb25zIHJlcG8sIHdvcmtmbG93LCB3cml0ZTpwYWNrYWdlc1xuICAgICAgICAvLyBHZW5lcmF0ZSBhIG5ldyBQQVQgKGh0dHBzOi8vZ2l0aHViLmNvbS9zZXR0aW5ncy90b2tlbnMvbmV3KSBhbmQgYWRkIGl0IHRvIHlvdXIgcmVwbydzIHNlY3JldHNcbiAgICAgICAgLy8gTk9URTogY29tZXMgZnJvbSBNVi1Db25zdWx0aW5nIE9yZ1xuICAgICAgICBzZWNyZXQ6ICdQUk9KRU5fR0lUSFVCX1RPS0VOJyxcbiAgICAgIH0sXG4gICAgICBkZXBlbmRhYm90OiB0cnVlLFxuICAgICAgZGVwZW5kYWJvdE9wdGlvbnM6IHtcbiAgICAgICAgc2NoZWR1bGVJbnRlcnZhbDogRGVwZW5kYWJvdFNjaGVkdWxlSW50ZXJ2YWwuV0VFS0xZLFxuICAgICAgICBsYWJlbHM6IFsnZGVwZW5kZW5jaWVzJywgJ2F1dG8tYXBwcm92ZSddLFxuICAgICAgICBncm91cHM6IHtcbiAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBwYXR0ZXJuczogWycqJ10sXG4gICAgICAgICAgICBleGNsdWRlUGF0dGVybnM6IFsnYXdzLWNkayonLCAncHJvamVuJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgaWdub3JlOiBbeyBkZXBlbmRlbmN5TmFtZTogJ2F3cy1jZGstbGliJyB9LCB7IGRlcGVuZGVuY3lOYW1lOiAnYXdzLWNkaycgfV0sXG4gICAgICB9LFxuICAgICAgLy8gLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm9qZW4vcHJvamVuL2Rpc2N1c3Npb25zLzQwNDAjZGlzY3Vzc2lvbmNvbW1lbnQtMTE5MDU2MjhcbiAgICAgIHJlbGVhc2FibGVDb21taXRzOiBSZWxlYXNhYmxlQ29tbWl0cy5vZlR5cGUoW1xuICAgICAgICAnZmVhdCcsXG4gICAgICAgICdmaXgnLFxuICAgICAgICAnY2hvcmUnLFxuICAgICAgICAncmVmYWN0b3InLFxuICAgICAgICAncGVyZicsXG4gICAgICBdKSxcbiAgICAgIGdpdGh1Yk9wdGlvbnM6IHtcbiAgICAgICAgcHVsbFJlcXVlc3RMaW50T3B0aW9uczoge1xuICAgICAgICAgIHNlbWFudGljVGl0bGVPcHRpb25zOiB7XG4gICAgICAgICAgICAvLyBzZWUgY29tbWl0IHR5cGVzIGhlcmU6IGh0dHBzOi8vd3d3LmNvbnZlbnRpb25hbGNvbW1pdHMub3JnL2VuL3YxLjAuMC8jc3VtbWFyeVxuICAgICAgICAgICAgdHlwZXM6IFtcbiAgICAgICAgICAgICAgJ2ZlYXQnLFxuICAgICAgICAgICAgICAnZml4JyxcbiAgICAgICAgICAgICAgJ2Nob3JlJyxcbiAgICAgICAgICAgICAgJ3JlZmFjdG9yJyxcbiAgICAgICAgICAgICAgJ3BlcmYnLFxuICAgICAgICAgICAgICAnZG9jcycsXG4gICAgICAgICAgICAgICdzdHlsZScsXG4gICAgICAgICAgICAgICd0ZXN0JyxcbiAgICAgICAgICAgICAgJ2J1aWxkJyxcbiAgICAgICAgICAgICAgJ2NpJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB2ZXJzaW9ucmNPcHRpb25zOiB7XG4gICAgICAgIHR5cGVzOiBbXG4gICAgICAgICAgeyB0eXBlOiAnZmVhdCcsIHNlY3Rpb246ICdGZWF0dXJlcycgfSxcbiAgICAgICAgICB7IHR5cGU6ICdmaXgnLCBzZWN0aW9uOiAnQnVnIEZpeGVzJyB9LFxuICAgICAgICAgIHsgdHlwZTogJ2Nob3JlJywgc2VjdGlvbjogJ0Nob3JlcycgfSxcbiAgICAgICAgICB7IHR5cGU6ICdkb2NzJywgc2VjdGlvbjogJ0RvY3MnIH0sXG4gICAgICAgICAgeyB0eXBlOiAnc3R5bGUnLCBoaWRkZW46IHRydWUgfSxcbiAgICAgICAgICB7IHR5cGU6ICdyZWZhY3RvcicsIGhpZGRlbjogdHJ1ZSB9LFxuICAgICAgICAgIHsgdHlwZTogJ3BlcmYnLCBzZWN0aW9uOiAnUGVyZm9ybWFuY2UnIH0sXG4gICAgICAgICAgeyB0eXBlOiAndGVzdCcsIGhpZGRlbjogdHJ1ZSB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIGVzbGludE9wdGlvbnM6IHtcbiAgICAgICAgcHJldHRpZXI6IGZhbHNlLFxuICAgICAgICBkaXJzOiBbJ3NyYyddLFxuICAgICAgICBpZ25vcmVQYXR0ZXJuczogWycqKi8qLWZ1bmN0aW9uLnRzJywgJ2V4YW1wbGVzLyddLFxuICAgICAgfSxcbiAgICAgIC8vIGV4cGVyaW1lbnRhbEludGVnUnVubmVyOiB0cnVlLFxuICAgICAgLy8gbWFudWFsIGludGVnIHRlc3Qgc2V0dXBcbiAgICAgIHRzY29uZmlnRGV2OiB7XG4gICAgICAgIGNvbXBpbGVyT3B0aW9uczoge1xuICAgICAgICAgIHR5cGVzOiBbJ25vZGUnLCAnamVzdCddLFxuICAgICAgICB9LFxuICAgICAgICBpbmNsdWRlOiBbJ2ludGVnLXRlc3RzLyoqLyoudHMnXSxcbiAgICAgIH0sXG4gICAgICBwdWxsUmVxdWVzdFRlbXBsYXRlQ29udGVudHM6IFtmcy5yZWFkRmlsZVN5bmMoYCR7YmFzZUFzc2V0c0RpcmVjdG9yeX0vY29tbW9uL2dpdGh1Yl9wdWxsX3JlcXVlc3QubWRgKS50b1N0cmluZygpXSxcbiAgICAgIC8vIE5PVEU6IGlzc3VlIHRlbXBsYXRlcyBhcmUgbm90IHN1cHBvcnRlZCB5ZXQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcHJvamVuL3Byb2plbi9wdWxsLzM2NDhcbiAgICAgIC8vIGlzc3VlVGVtcGxhdGVzOiB7fVxuICAgICAgcmVhZG1lOiB7XG4gICAgICAgIGNvbnRlbnRzOiBbXG4gICAgICAgICAgYFxuIVtTb3VyY2VdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZ2l0aHViL3N0YXJzL01WLUNvbnN1bHRpbmcvJHtvcHRpb25zLm5hbWV9P2xvZ289Z2l0aHViJmxhYmVsPUdpdEh1YiUyMFN0YXJzKVxuWyFbQnVpbGQgU3RhdHVzXShodHRwczovL2dpdGh1Yi5jb20vTVYtQ29uc3VsdGluZy8ke29wdGlvbnMubmFtZX0vYWN0aW9ucy93b3JrZmxvd3MvYnVpbGQueW1sL2JhZGdlLnN2ZyldKGh0dHBzOi8vZ2l0aHViLmNvbS9NVi1Db25zdWx0aW5nLyR7b3B0aW9ucy5uYW1lfS9hY3Rpb25zL3dvcmtmbG93cy9idWlsZC55bWwpXG5bIVtFU0xpbnQgQ29kZSBGb3JtYXR0aW5nXShodHRwczovL2ltZy5zaGllbGRzLmlvL2JhZGdlL2NvZGVfc3R5bGUtZXNsaW50LWJyaWdodGdyZWVuLnN2ZyldKGh0dHBzOi8vZXNsaW50Lm9yZylcblshW0xhdGVzdCByZWxlYXNlXShodHRwczovL2ltZy5zaGllbGRzLmlvL2dpdGh1Yi9yZWxlYXNlL01WLUNvbnN1bHRpbmcvJHtvcHRpb25zLm5hbWV9LnN2ZyldKGh0dHBzOi8vZ2l0aHViLmNvbS9NVi1Db25zdWx0aW5nLyR7b3B0aW9ucy5uYW1lfS9yZWxlYXNlcylcbiFbR2l0SHViXShodHRwczovL2ltZy5zaGllbGRzLmlvL2dpdGh1Yi9saWNlbnNlL01WLUNvbnN1bHRpbmcvJHtvcHRpb25zLm5hbWV9KVxuWyFbbnBtXShodHRwczovL2ltZy5zaGllbGRzLmlvL25wbS9kdC9AbWF2b2dlbC8ke29wdGlvbnMubmFtZX0/bGFiZWw9bnBtJmNvbG9yPW9yYW5nZSldKGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL0BtYXZvZ2VsLyR7b3B0aW9ucy5uYW1lfSlcblshW3R5cGVzY3JpcHRdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2UvanNpaS10eXBlc2NyaXB0LWJsdWV2aW9sZXQuc3ZnKV0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvQG1hdm9nZWwvJHtvcHRpb25zLm5hbWV9KVxuICAgICAgICAgIGAsXG4gICAgICAgICAgYCMgJHtvcHRpb25zLm5hbWV9YCxcbiAgICAgICAgICAnTXkgYXdlc29tZSBkZXNjcmlwdGlvbi4uLicsXG4gICAgICAgICAgYFxuIyMgVGFibGUgb2YgQ29udGVudHNcblxuLSBbRmVhdHVyZXNdKCNmZWF0dXJlcylcbi0gW1VzYWdlXSgjdXNhZ2UpXG4tIFtTb2x1dGlvbiBEZXNpZ25dKCNzb2x1dGlvbi1kZXNpZ24pXG4tIFtJbnNwaXJhdGlvbl0oI2luc3BpcmF0aW9uKVxuXG4jIyBGZWF0dXJlc1xuXG4tIOKaoSAqKlF1aWNrIFNldHVwKio6IFRCRFxuLSDwn5OPICoqQmVzdCBQcmFjdGljZSBTZXR1cCoqOiBUQkRcbi0g8J+kueKAjeKZgu+4jyAqKlByZS1pbnN0YWxsZWQgcGFja2FnZXMqKjogVEJEXG4tIPCfj5fvuI8gKipFeHRlbnNpYmlsaXR5Kio6IFRCRFxuXG4jIyBVc2FnZVxuVGhlIGZvbGxvd2luZyBzdGVwcyBnZXQgeW91IHN0YXJ0ZWQ6XG5cbjEuIENyZWF0ZSBhIG5ldyBcXGBhd3NjZGstYXBwXFxgIHZpYVxuXFxgXFxgXFxgYmFzaFxubnB4IHByb2plbiBuZXcgYXdzY2RrLWFwcC10cyAtLWNka1ZlcnNpb249Mi4yNjEuMCAtLXBhY2thZ2UtbWFuYWdlcj1ucG1cblxcYFxcYFxcYFxuMy4gQWRkIFxcYEBtYXZvZ2VsLyR7b3B0aW9ucy5uYW1lfVxcYCBhcyBhIGRlcGVuZGVuY3kgdG8geW91ciBwcm9qZWN0IGluIHRoZSBcXGAucHJvamVucmMudHNcXGAgZmlsZVxuNC4gUnVuIFxcYG5weCBwcm9qZW5cXGAgdG8gaW5zdGFsbCBpdFxuNS4gQWRkIHRoZSBmb2xsb3dpbmcgdG8gdGhlIFxcYHNyYy9tYWluLnRzXFxgIGZpbGU6XG5cXGBcXGBcXGB0c1xuaW1wb3J0IHsgQXBwLCBTdGFjaywgU3RhY2tQcm9wcyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgUGxhY2Vob2xkZXIgfSBmcm9tICdAbWF2b2dlbC8ke29wdGlvbnMubmFtZX0nO1xuXG5leHBvcnQgY2xhc3MgTXlTdGFjayBleHRlbmRzIFN0YWNrIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFN0YWNrUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgbmV3IFBsYWNlaG9sZGVyKHRoaXMsICdwbGFjZWhvbGRlcicsIHtcbiAgICAgIC8vIGFuZCBtb3JlLi4uIPCfkqFcbiAgICB9KTtcbiAgfVxufVxuXG5jb25zdCBlbnYgPSB7XG4gIGFjY291bnQ6ICcxMjM0NTY3ODk5MTInLFxuICByZWdpb246ICdldS1jZW50cmFsLTEnLFxufTtcblxuY29uc3QgYXBwID0gbmV3IEFwcCgpO1xubmV3IE15U3RhY2soYXBwLCAncGxhY2Vob2xkZXInLCB7IGVudiB9KTtcbmFwcC5zeW50aCgpO1xuXFxgXFxgXFxgXG5cbmFuZCBkZXBsb3kgaXRcblxcYFxcYFxcYGJhc2hcbm5weCBwcm9qZW4gYnVpbGRcbm5weCBwcm9qZW4gZGVwbG95XG5cXGBcXGBcXGBcblxud2l0aCB0aGUgb3V0cHV0XG5cXGBcXGBcXGBjb25zb2xlXG5UQkRcblxcYFxcYFxcYFxuXG5TZWUgdGhlIFtleGFtcGxlc10oLi9leGFtcGxlcykgZm9sZGVyIGZvciBtb3JlIGluc3BpcmF0aW9uLlxuXG4jIyBTb2x1dGlvbiBEZXNpZ25cblxuPGRldGFpbHM+XG4gIDxzdW1tYXJ5Pi4uLiBpZiB5b3UncmUgY3VyaW91cyBhYm91dCBjbGljayBoZXJlIGZvciB0aGUgZGV0YWlsczwvc3VtbWFyeT5cblxuIVtwbGFjZWhvbGRlcl0oZG9jcy9pbWcvcGxhY2Vob2xkZXIuZHJhd2lvLW1pbi5wbmcpXG5cbjwvZGV0YWlscz5cblxuIyMgSW5zcGlyYXRpb25cblxuYWRkIHRvb2xzIG9yIGxpbmtzIHdoaWNoIGluc3BpcmVkIHlvdVxuICAgICAgICAgIGAsXG4gICAgICAgICAgZnMucmVhZEZpbGVTeW5jKGAke2Jhc2VBc3NldHNEaXJlY3Rvcnl9L2NvbW1vbi9naXRodWJfcmVhZG1lX2N0YS5tZGApLnRvU3RyaW5nKCksXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICB9LFxuICAgICAgLy8gTk9URToga2VlcCBhbGwgdGhlIHBhc3NlZCBpbiBvcHRpb25zIHdoaWNoIGNhbiBvdmVycmlkZSB0aGUgZXhpc3Rpbmcgb25lcyFcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAvLyBhcHBsaWVkIGFmdGVyIC4uLm9wdGlvbnMgc28gdGhlIERFRkFVTFRfQ0RLX1ZFUlNJT04gZmFsbGJhY2sgYWJvdmVcbiAgICAgIC8vIGFsd2F5cyB3aW5zIG92ZXIgYW4gdW5kZWZpbmVkIG9wdGlvbnMuY2RrVmVyc2lvblxuICAgICAgY2RrVmVyc2lvbixcbiAgICB9KTtcblxuICAgIC8vIFR5cGVTY3JpcHQgNiBubyBsb25nZXIgYXV0by1kaXNjb3ZlcnMgQHR5cGVzLyogcGFja2FnZXNcbiAgICB0aGlzLnRzY29uZmlnRGV2LmZpbGUuYWRkT3ZlcnJpZGUoJ2NvbXBpbGVyT3B0aW9ucy50eXBlcycsIFsnbm9kZScsICdqZXN0J10pO1xuICAgIHRoaXMudHNjb25maWc/LmZpbGUuYWRkT3ZlcnJpZGUoJ2NvbXBpbGVyT3B0aW9ucy50eXBlcycsIFsnbm9kZSddKTtcblxuICAgIC8vIHByb2plbidzIEF1dG9NZXJnZSBjb21wb25lbnQgaGFyZGNvZGVzIGBkZWxldGVfaGVhZF9icmFuY2g6IHt9YCBpbiB0aGVcbiAgICAvLyBtZXJnaWZ5IHJ1bGUgd2l0aCBubyBvcHRpb24gdG8gZGlzYWJsZSBpdC4gU3RyaXAgaXQgc28gTWVyZ2lmeSBkb2VzIG5vdFxuICAgIC8vIGRlbGV0ZSBoZWFkIGJyYW5jaGVzIG9uIG1lcmdlIChyZW5vdmF0ZS9kZXBlbmRhYm90IG1hbmFnZSB0aGVpciBvd24pLlxuICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vTVYtQ29uc3VsdGluZy9jZGstdnNjb2RlLXNlcnZlci9wdWxsLzExMlxuICAgIHRoaXMudHJ5RmluZE9iamVjdEZpbGUoJy5tZXJnaWZ5LnltbCcpPy5hZGREZWxldGlvbk92ZXJyaWRlKFxuICAgICAgJ3B1bGxfcmVxdWVzdF9ydWxlcy4wLmFjdGlvbnMuZGVsZXRlX2hlYWRfYnJhbmNoJyxcbiAgICApO1xuXG4gICAgLy8gQXV0by1hcHByb3ZlIFBScyBhdXRob3JlZCBieSAnbXZjLWJvdCcgaXRzZWxmIChzZWUgdGhlXG4gICAgLy8gYXV0b0FwcHJvdmVPcHRpb25zIGNvbW1lbnQgYWJvdmUgZm9yIHdoeSB0aGlzIGNhbid0IGdvIHRocm91Z2ggdGhlXG4gICAgLy8gR2l0SHViIEFjdGlvbnMgYXV0by1hcHByb3ZlIHBhdGgpIHZpYSBNZXJnaWZ5IGluc3RlYWQ6IGl0IHBvc3RzIHRoZVxuICAgIC8vIHJldmlldyBhcyB0aGUgTWVyZ2lmeSBhcHAsIGEgZGlmZmVyZW50IGFjdG9yLiBTZWUgbWF2b2dlbC9tdmMtcHJvamVuIzc0LlxuICAgIHRoaXMudHJ5RmluZE9iamVjdEZpbGUoJy5tZXJnaWZ5LnltbCcpPy5hZGRPdmVycmlkZShcbiAgICAgICdwdWxsX3JlcXVlc3RfcnVsZXMuMScsXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdBdXRvLWFwcHJvdmUgc2VsZi1hdXRob3JlZCBtdmMtYm90IFBScycsXG4gICAgICAgIGNvbmRpdGlvbnM6IFtcbiAgICAgICAgICAnYXV0aG9yPW12Yy1ib3QnLFxuICAgICAgICAgICdsYWJlbD1hdXRvLWFwcHJvdmUnLFxuICAgICAgICBdLFxuICAgICAgICBhY3Rpb25zOiB7XG4gICAgICAgICAgcmV2aWV3OiB7XG4gICAgICAgICAgICB0eXBlOiAnQVBQUk9WRScsXG4gICAgICAgICAgICBtZXNzYWdlOiAnQXV0b21hdGljYWxseSBhcHByb3ZlZDogc2VsZi1hdXRob3JlZCBhdXRvbWF0aW9uIFBSLicsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8vIGdpdGlnbm9yZVxuICAgIGNvbnN0IGZpbGVzUGF0dGVyblRvR2l0aWdub3JlID0gW1xuICAgICAgJ3RtcCcsXG4gICAgICAnLmNvZGVncHQnLFxuICAgIF07XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzUGF0dGVyblRvR2l0aWdub3JlKSB7XG4gICAgICB0aGlzLmdpdGlnbm9yZS5leGNsdWRlKGZpbGUpO1xuICAgIH1cbiAgICB0aGlzLmFkZERlcHMoXG4gICAgICAvLyBjZGstbmFnIHYzIHJlcXVpcmVzIGF3cy1jZGstbGliID49IDIuMjU3LjAgKHNlZSBjZGstbmFnIE1JR1JBVElPTi5tZClcbiAgICAgICdjZGstbmFnQF4zLjAuMScsXG4gICAgKTtcbiAgICAvLyBDYXAgaW50ZWctcnVubmVyIGF0IExBU1RfSU5URUdfUlVOTkVSX1ZFUlNJT04gc2luY2UgaXQgc3RvcHBlZCBwdWJsaXNoaW5nIGFmdGVyIHRoYXQgdmVyc2lvbi5cbiAgICAvLyBpbnRlZy1ydW5uZXIgdXNlcyBwbGFpbiB2ZXJzaW9ucyAobm8gLWFscGhhLjAgc3VmZml4KS5cbiAgICAvLyBpbnRlZy10ZXN0cy1hbHBoYSBhbmQgYXdzbGludCBvbmx5IHB1Ymxpc2ggYXQgbWlub3IgdmVyc2lvbnMgKGUuZy4gMi4xOTcuMC1hbHBoYS4wLCBub3QgMi4xOTcuNC1hbHBoYS4wKS5cbiAgICBjb25zdCByYXdDZGtWZXJzaW9uID0gdGhpcy5jZGtWZXJzaW9uLnJlcGxhY2UoL1tcXF5+XS8sICcnKTtcbiAgICBjb25zdCBpbnRlZ1J1bm5lclZlcnNpb24gPSByYXdDZGtWZXJzaW9uLmxvY2FsZUNvbXBhcmUoTEFTVF9JTlRFR19SVU5ORVJfVkVSU0lPTiwgdW5kZWZpbmVkLCB7IG51bWVyaWM6IHRydWUsIHNlbnNpdGl2aXR5OiAnYmFzZScgfSkgPiAwXG4gICAgICA/IExBU1RfSU5URUdfUlVOTkVSX1ZFUlNJT05cbiAgICAgIDogcmF3Q2RrVmVyc2lvbjtcbiAgICAvLyBBbHBoYSBwYWNrYWdlcyBvbmx5IHB1Ymxpc2ggYXQgLjAgcGF0Y2ggdmVyc2lvbnMg4oCUIG5vcm1hbGl6ZSB0byBtaW5vciB2ZXJzaW9uXG4gICAgY29uc3QgW21ham9yLCBtaW5vcl0gPSByYXdDZGtWZXJzaW9uLnNwbGl0KCcuJyk7XG4gICAgY29uc3QgYWxwaGFWZXJzaW9uID0gYCR7bWFqb3J9LiR7bWlub3J9LjBgO1xuICAgIHRoaXMuYWRkRGV2RGVwcyhcbiAgICAgIGBAYXdzLWNkay9pbnRlZy1ydW5uZXJAJHtpbnRlZ1J1bm5lclZlcnNpb259YCxcbiAgICAgIGBAYXdzLWNkay9pbnRlZy10ZXN0cy1hbHBoYUAke2FscGhhVmVyc2lvbn0tYWxwaGEuMGAsXG4gICAgICAnQGNvbW1pdGxpbnQvY2xpQF4yMC4xLjAnLFxuICAgICAgJ0Bjb21taXRsaW50L2NvbmZpZy1jb252ZW50aW9uYWxAXjIwLjAuMCcsXG4gICAgICBgYXdzbGludEAke2FscGhhVmVyc2lvbn0tYWxwaGEuMGAsXG4gICAgICAnaHVza3lAXjkuMS43JyxcbiAgICApO1xuXG4gICAgdGhpcy5wYWNrYWdlLnNldFNjcmlwdCgncHJlcGFyZScsICdodXNreScpO1xuICAgIG5ldyBUZXh0RmlsZSh0aGlzLCAnLmNvbW1pdGxpbnRyYy5qcycsIHtcbiAgICAgIGxpbmVzOiBbXG4gICAgICAgICdtb2R1bGUuZXhwb3J0cyA9IHsgZXh0ZW5kczogW1xcJ0Bjb21taXRsaW50L2NvbmZpZy1jb252ZW50aW9uYWxcXCddIH07JyxcbiAgICAgIF0sXG4gICAgICBtYXJrZXI6IHRydWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLnBhY2thZ2Uuc2V0U2NyaXB0KCdhd3NsaW50JywgJ2F3c2xpbnQnKTtcbiAgICAvLyAuZ2l0aHViL3dvcmtmbG93cy9idWlsZC55bWxcbiAgICBjb25zdCBidWlsZFdvcmtmbG93ID0gdGhpcy5naXRodWI/LnRyeUZpbmRXb3JrZmxvdygnYnVpbGQnKTtcbiAgICBpZiAoIWJ1aWxkV29ya2Zsb3cpIHJldHVybjtcbiAgICBjb25zdCBidWlsZEpvYiA9IGJ1aWxkV29ya2Zsb3cuZ2V0Sm9iKCdidWlsZCcpO1xuICAgIGlmICghYnVpbGRKb2IgfHwgISgnc3RlcHMnIGluIGJ1aWxkSm9iKSkgcmV0dXJuO1xuICAgIC8vIFRPRE86IGZpZ3VyZSBvdXQgd2h5IHdyb25nIHR5cGVzXG4gICAgY29uc3QgZ2V0QnVpbGRTdGVwcyA9IGJ1aWxkSm9iLnN0ZXBzIGFzIHVua25vd24gYXMgKCkgPT4gSm9iU3RlcFtdO1xuICAgIGNvbnN0IGJ1aWxkSm9iU3RlcHMgPSBnZXRCdWlsZFN0ZXBzKCk7XG4gICAgYnVpbGRXb3JrZmxvdy51cGRhdGVKb2IoJ2J1aWxkJywge1xuICAgICAgLi4uYnVpbGRKb2IsXG4gICAgICBzdGVwczogW1xuICAgICAgICAuLi5idWlsZEpvYlN0ZXBzLnNsaWNlKDAsIDQpLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ1J1biBhd3NsaW50JyxcbiAgICAgICAgICBydW46ICducG0gcnVuIGF3c2xpbnQnLFxuICAgICAgICB9LFxuICAgICAgICAuLi5idWlsZEpvYlN0ZXBzLnNsaWNlKDQpLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIHRoaXMucGFja2FnZS5zZXRTY3JpcHQoXG4gICAgICAnaW50ZWctdGVzdCcsXG4gICAgICBgaW50ZWctcnVubmVyIC0tZGlyZWN0b3J5IC4vaW50ZWctdGVzdHMgJHtpbnRlZ1Rlc3RSZWdpb25zPy5tYXAocmVnaW9uID0+IGAtLXBhcmFsbGVsLXJlZ2lvbnMgJHtyZWdpb259YCkuam9pbignICcpfSAtLXVwZGF0ZS1vbi1mYWlsZWRgLFxuICAgICk7XG5cbiAgICBuZXcgVGV4dEZpbGUodGhpcywgJy5naXRodWIvSVNTVUVfVEVNUExBVEUvYnVnX3JlcG9ydC5tZCcsIHtcbiAgICAgIGxpbmVzOiBbZnMucmVhZEZpbGVTeW5jKGAke2Jhc2VBc3NldHNEaXJlY3Rvcnl9L2NvbW1vbi9naXRodWJfYnVnX3JlcG9ydC5tZGApLnRvU3RyaW5nKCldLFxuICAgIH0pO1xuXG4gICAgbmV3IFRleHRGaWxlKHRoaXMsICcuZ2l0aHViL0lTU1VFX1RFTVBMQVRFL2ZlYXR1cmVfcmVxdWVzdC5tZCcsIHtcbiAgICAgIGxpbmVzOiBbZnMucmVhZEZpbGVTeW5jKGAke2Jhc2VBc3NldHNEaXJlY3Rvcnl9L2NvbW1vbi9naXRodWJfZmVhdHVyZV9yZXF1ZXN0Lm1kYCkudG9TdHJpbmcoKV0sXG4gICAgfSk7XG5cbiAgICBuZXcgWWFtbEZpbGUodGhpcywgJy5naXRodWIvRlVORElORy55YW1sJywge1xuICAgICAgb2JqOiB7XG4gICAgICAgIGdpdGh1YjogJ21hdm9nZWwnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIG5ldyBUZXh0RmlsZSh0aGlzLCAnQ09OVFJJQlVUSU5HLm1kJywge1xuICAgICAgbGluZXM6IFtmcy5yZWFkRmlsZVN5bmMoYCR7YmFzZUFzc2V0c0RpcmVjdG9yeX0vY29tbW9uL2NvbnRyaWJ1dGluZy5tZGApLnRvU3RyaW5nKCldLFxuICAgIH0pO1xuXG4gICAgbmV3IFRleHRGaWxlKHRoaXMsICcucHJldHRpZXJyYycsIHtcbiAgICAgIGxpbmVzOiBbZnMucmVhZEZpbGVTeW5jKGAke2Jhc2VBc3NldHNEaXJlY3Rvcnl9L2NvbW1vbi9wcmV0dGllcnJjYCkudG9TdHJpbmcoKV0sXG4gICAgfSk7XG5cbiAgICAvLyB3cml0ZSBzYW1wbGUgY29kZSB0byBtYWluLnRzICYgdG8gbWFpbi50ZXN0LnRzXG4gICAgaWYgKG9wdGlvbnMuc2FtcGxlQ29kZSA/PyB0cnVlKSB7XG4gICAgICBuZXcgU2FtcGxlQ29kZSh0aGlzLCB7XG4gICAgICAgIGJhc2VBc3NldHNEaXJlY3RvcnksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuaW50ZXJmYWNlIFNhbXBsZUNvZGVPcHRpb25zIHtcbiAgcmVhZG9ubHkgYmFzZUFzc2V0c0RpcmVjdG9yeT86IHN0cmluZztcbn1cblxuY2xhc3MgU2FtcGxlQ29kZSBleHRlbmRzIENvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbGlicmFyeTogQXdzQ2RrQ29uc3RydWN0TGlicmFyeTtcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBTYW1wbGVDb2RlT3B0aW9ucztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBsaWJyYXJ5OiBBd3NDZGtDb25zdHJ1Y3RMaWJyYXJ5LFxuICAgIG9wdGlvbnM6IFNhbXBsZUNvZGVPcHRpb25zLFxuICApIHtcbiAgICBzdXBlcihsaWJyYXJ5KTtcbiAgICB0aGlzLmxpYnJhcnkgPSBsaWJyYXJ5O1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBwdWJsaWMgc3ludGhlc2l6ZSgpIHtcbiAgICBjb25zdCBvdXRkaXIgPSB0aGlzLnByb2plY3Qub3V0ZGlyO1xuICAgIGNvbnN0IHNyY2RpciA9IHBhdGguam9pbihvdXRkaXIsIHRoaXMubGlicmFyeS5zcmNkaXIpO1xuICAgIGlmIChcbiAgICAgIGZzLmV4aXN0c1N5bmMoYCR7c3JjZGlyfS9pbmRleC50c2ApICYmXG4gICAgICAhZnMucmVhZEZpbGVTeW5jKGAke3NyY2Rpcn0vaW5kZXgudHNgKS50b1N0cmluZygpLmluY2x1ZGVzKCdleHBvcnQgY2xhc3MgSGVsbG8nKSAvLyBOb3RlOiBmcm9tIHBhcmVudFxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZzLm1rZGlyU3luYyhzcmNkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKHNyY2RpciwgJ2luZGV4LnRzJyksIGZzLnJlYWRGaWxlU3luYyhgJHt0aGlzLm9wdGlvbnMuYmFzZUFzc2V0c0RpcmVjdG9yeX0vY2RrLWNvbnN0cnVjdC9zcmNfaW5kZXgudHNgKS50b1N0cmluZygpKTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihzcmNkaXIsICdwbGFjZWhvbGRlci50cycpLCBmcy5yZWFkRmlsZVN5bmMoYCR7dGhpcy5vcHRpb25zLmJhc2VBc3NldHNEaXJlY3Rvcnl9L2Nkay1jb25zdHJ1Y3Qvc3JjX3BsYWNlaG9sZGVyLnRzYCkudG9TdHJpbmcoKSk7XG4gICAgLy8gY3JkIHdpdGggbGFtYmRhIGdlbmVyYXRpb25cbiAgICAvLyBOb3RlOiBjcmQtZXhhbXBsZS5sYW1iZGEudHMgaXMgd3JpdHRlbiBlYXJsaWVyLCBiZWZvcmUgYHN1cGVyKClgLCBzb1xuICAgIC8vIEF1dG9EaXNjb3ZlcidzIGNvbnN0cnVjdG9yLXRpbWUgZ2xvYiBjYW4gZmluZCBpdCAtIHNlZSB0aGUgY29tbWVudCBpblxuICAgIC8vIHRoZSBjb25zdHJ1Y3RvciBhYm92ZS5cbiAgICBmcy5ta2RpclN5bmMoYCR7c3JjZGlyfS9jcmQtZXhhbXBsZWAsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKGAke3NyY2Rpcn0vY3JkLWV4YW1wbGVgLCAnY3JkLWV4YW1wbGUudHMnKSwgZnMucmVhZEZpbGVTeW5jKGAke3RoaXMub3B0aW9ucy5iYXNlQXNzZXRzRGlyZWN0b3J5fS9jZGstY29uc3RydWN0L3NyY19jcmQtZXhhbXBsZS50c2ApLnRvU3RyaW5nKCkpO1xuXG5cbiAgICBjb25zdCB0ZXN0ZGlyID0gcGF0aC5qb2luKG91dGRpciwgdGhpcy5saWJyYXJ5LnRlc3RkaXIpO1xuICAgIGlmIChcbiAgICAgIGZzLmV4aXN0c1N5bmModGVzdGRpcikgJiZcbiAgICAgIGZzLnJlYWRkaXJTeW5jKHRlc3RkaXIpLmZpbHRlcigoeCkgPT4geC5lbmRzV2l0aCgnLnRzJykpICYmXG4gICAgICAhZnMuZXhpc3RzU3luYyhgJHt0ZXN0ZGlyfS9oZWxsby50ZXN0LnRzYCkgLy8gTm90ZTogZnJvbSBwYXJlbnRcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gcmVtb3ZlICR7dGVzdGRpcn0vaGVsbG8udGVzdC50cyBmaWxlLiBPbiB0aGUgb3RoZXIgaGFuZCwgd2Ugb3ZlcnJpZGUgaW5kZXgudHNcbiAgICBmcy51bmxpbmtTeW5jKGAke3Rlc3RkaXJ9L2hlbGxvLnRlc3QudHNgKTtcbiAgICBmcy5ta2RpclN5bmModGVzdGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4odGVzdGRpciwgJ2luZGV4LnRlc3QudHMnKSwgZnMucmVhZEZpbGVTeW5jKGAke3RoaXMub3B0aW9ucy5iYXNlQXNzZXRzRGlyZWN0b3J5fS9jZGstY29uc3RydWN0L3Rlc3RfaW5kZXgudGVzdC50c2ApLnRvU3RyaW5nKCkpO1xuICAgIC8vIGxhbWJkYSB0ZXN0cyB3aXRoIGplc3Qgc3R1YnNcbiAgICBmcy5ta2RpclN5bmMoYCR7dGVzdGRpcn0vY3JkLWV4YW1wbGVgLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihgJHt0ZXN0ZGlyfS9jcmQtZXhhbXBsZWAsICdjcmQtZXhhbXBsZS50ZXN0LnRzJyksIGZzLnJlYWRGaWxlU3luYyhgJHt0aGlzLm9wdGlvbnMuYmFzZUFzc2V0c0RpcmVjdG9yeX0vY2RrLWNvbnN0cnVjdC90ZXN0X2NyZC1leGFtcGxlLnRlc3QudHNgKS50b1N0cmluZygpKTtcblxuXG4gICAgY29uc3QgaW50ZWdUZXN0ZGlyID0gcGF0aC5qb2luKG91dGRpciwgJ2ludGVnLXRlc3RzJyk7XG4gICAgaWYgKFxuICAgICAgZnMuZXhpc3RzU3luYyhpbnRlZ1Rlc3RkaXIpICYmXG4gICAgICBmcy5yZWFkZGlyU3luYyhpbnRlZ1Rlc3RkaXIpLmZpbHRlcigoeCkgPT4geC5lbmRzV2l0aCgnLnRzJykpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZzLm1rZGlyU3luYyhpbnRlZ1Rlc3RkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKGludGVnVGVzdGRpciwgJ2ludGVnLnBsYWNlaG9sZGVyLnRzJyksIGZzLnJlYWRGaWxlU3luYyhgJHt0aGlzLm9wdGlvbnMuYmFzZUFzc2V0c0RpcmVjdG9yeX0vY2RrLWNvbnN0cnVjdC9pbnRlZ19pbnRlZy5wbGFjZWhvbGRlci50c2ApLnRvU3RyaW5nKCkpO1xuXG4gICAgY29uc3QgaW50ZWdUZXN0RnVuY3Rpb25zZGlyID0gcGF0aC5qb2luKGludGVnVGVzdGRpciwgJ2Z1bmN0aW9ucycpO1xuICAgIGlmIChcbiAgICAgIGZzLmV4aXN0c1N5bmMoaW50ZWdUZXN0RnVuY3Rpb25zZGlyKSAmJlxuICAgICAgZnMucmVhZGRpclN5bmMoaW50ZWdUZXN0RnVuY3Rpb25zZGlyKS5maWx0ZXIoKHgpID0+IHguZW5kc1dpdGgoJy50cycpKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmcy5ta2RpclN5bmMoaW50ZWdUZXN0RnVuY3Rpb25zZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihpbnRlZ1Rlc3RGdW5jdGlvbnNkaXIsICd0ZXN0LWhhbmRsZXIudHMnKSwgZnMucmVhZEZpbGVTeW5jKGAke3RoaXMub3B0aW9ucy5iYXNlQXNzZXRzRGlyZWN0b3J5fS9jZGstY29uc3RydWN0L2ludGVnX3Rlc3QtaGFuZGxlci50c2ApLnRvU3RyaW5nKCkpO1xuXG4gICAgY29uc3QgZG9jc2RpciA9IHBhdGguam9pbihvdXRkaXIsICdkb2NzJyk7XG4gICAgaWYgKFxuICAgICAgZnMuZXhpc3RzU3luYyhkb2NzZGlyKSAmJlxuICAgICAgZnMucmVhZGRpclN5bmMoZG9jc2RpcikuZmlsdGVyKCh4KSA9PiB4LmVuZHNXaXRoKCcuZHJhd2lvJykpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZzLm1rZGlyU3luYyhkb2NzZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihkb2NzZGlyLCAncGxhY2Vob2xkZXIuZHJhd2lvJyksIGZzLnJlYWRGaWxlU3luYyhgJHt0aGlzLm9wdGlvbnMuYmFzZUFzc2V0c0RpcmVjdG9yeX0vY29tbW9uL2RvY3NfcGxhY2Vob2xkZXIuZHJhd2lvYCkudG9TdHJpbmcoKSk7XG5cbiAgICBjb25zdCBleGFtcGxlc2RpciA9IHBhdGguam9pbihvdXRkaXIsICdleGFtcGxlcycsICdzaW1wbGUnKTtcbiAgICBpZiAoXG4gICAgICBmcy5leGlzdHNTeW5jKGV4YW1wbGVzZGlyKSAmJlxuICAgICAgZnMucmVhZGRpclN5bmMoZXhhbXBsZXNkaXIpLmZpbHRlcigoeCkgPT4geC5lbmRzV2l0aCgnLmRyYXdpbycpKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmcy5ta2RpclN5bmMoZXhhbXBsZXNkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKGV4YW1wbGVzZGlyLCAnbWFpbi50cycpLCBmcy5yZWFkRmlsZVN5bmMoYCR7dGhpcy5vcHRpb25zLmJhc2VBc3NldHNEaXJlY3Rvcnl9L2Nkay1jb25zdHJ1Y3QvZXhhbXBsZXNfc2ltcGxlX21haW4udHNgKS50b1N0cmluZygpKTtcbiAgfVxufSJdfQ==
|
package/mavogelmvcprojen/go.mod
CHANGED
|
@@ -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.34.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.34", tarball)
|
|
28
28
|
}
|
package/mavogelmvcprojen/version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.0.
|
|
1
|
+
0.0.34
|