@bluedynamics/cdk8s-plone 0.1.41 → 0.1.42

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.
Files changed (29) hide show
  1. package/.jsii +28 -20
  2. package/API.md +21 -9
  3. package/CLAUDE.md +1 -1
  4. package/README.md +4 -4
  5. package/documentation/sources/explanation/architecture.md +7 -6
  6. package/documentation/sources/explanation/features.md +9 -7
  7. package/documentation/sources/how-to/{deploy-classic-ui.md → deploy-blicca.md} +43 -39
  8. package/documentation/sources/how-to/deploy-production-volto.md +1 -1
  9. package/documentation/sources/how-to/index.md +1 -1
  10. package/documentation/sources/reference/api/index.md +1 -1
  11. package/documentation/sources/reference/configuration-options.md +16 -10
  12. package/documentation/sources/tutorials/01-quick-start.md +1 -1
  13. package/examples/{classic-ui → blicca}/README.md +24 -25
  14. package/examples/{classic-ui → blicca}/__snapshots__/main.test.ts.snap +3 -3
  15. package/examples/{classic-ui → blicca}/config/varnish.tpl.vcl +1 -1
  16. package/examples/{classic-ui → blicca}/main.test.ts +3 -3
  17. package/examples/{classic-ui → blicca}/main.ts +6 -6
  18. package/examples/{classic-ui → blicca}/package.json +2 -2
  19. package/lib/httpcache.js +1 -1
  20. package/lib/plone.d.ts +13 -5
  21. package/lib/plone.js +14 -6
  22. package/lib/vinylcache.js +1 -1
  23. package/package.json +1 -1
  24. /package/examples/{classic-ui → blicca}/.env.example +0 -0
  25. /package/examples/{classic-ui → blicca}/cdk8s.yaml +0 -0
  26. /package/examples/{classic-ui → blicca}/ingress.ts +0 -0
  27. /package/examples/{classic-ui → blicca}/jest.config.js +0 -0
  28. /package/examples/{classic-ui → blicca}/postgres.bitnami.ts +0 -0
  29. /package/examples/{classic-ui → blicca}/postgres.cloudnativepg.ts +0 -0
@@ -16,13 +16,13 @@ Complete reference for all configuration options in cdk8s-plone.
16
16
  ### `Plone`
17
17
 
18
18
  Main construct for deploying Plone CMS. Supports two variants:
19
- - **VOLTO**: Modern React frontend with REST API backend (default)
20
- - **CLASSICUI**: Traditional server-side rendered Plone
19
+ - **VOLTO**: React single-page frontend talking to the REST API backend (default)
20
+ - **BLICCA**: the Plone backend renders the UI server-side and serves HTML directly
21
21
 
22
22
  **Properties:**
23
23
  - `backendServiceName` - Name of the backend Kubernetes service
24
24
  - `frontendServiceName` - Name of the frontend service (VOLTO only)
25
- - `variant` - Deployment variant (VOLTO or CLASSICUI)
25
+ - `variant` - Deployment variant (VOLTO or BLICCA)
26
26
  - `siteId` - Plone site ID in ZODB (default: 'Plone')
27
27
 
28
28
  **Example:**
@@ -75,7 +75,7 @@ Main configuration interface for the Plone construct.
75
75
  |----------|------|----------|---------|-------------|
76
76
  | `version` | `string` | No | - | Version of your project |
77
77
  | `siteId` | `string` | No | `'Plone'` | Plone site ID in ZODB |
78
- | `variant` | `PloneVariant` | No | `VOLTO` | Deployment variant (VOLTO or CLASSICUI) |
78
+ | `variant` | `PloneVariant` | No | `VOLTO` | Deployment variant (VOLTO or BLICCA) |
79
79
  | `backend` | `PloneBaseOptions` | Yes | - | Backend configuration |
80
80
  | `frontend` | `PloneBaseOptions` | Conditional | - | Frontend configuration (required for VOLTO) |
81
81
  | `imagePullSecrets` | `string[]` | No | - | Image pull secrets for private registries |
@@ -581,18 +581,24 @@ Defines the deployment variant:
581
581
 
582
582
  | Value | Description |
583
583
  |-------|-------------|
584
- | `PloneVariant.VOLTO` | Modern React frontend with REST API backend (default) |
585
- | `PloneVariant.CLASSICUI` | Traditional server-side rendered Plone |
584
+ | `PloneVariant.VOLTO` | React single-page frontend talking to the REST API backend (default) |
585
+ | `PloneVariant.BLICCA` | The Plone backend renders the UI server-side and serves HTML directly |
586
+ | `PloneVariant.CLASSICUI` | Deprecated alias for `PloneVariant.BLICCA`, kept for backward compatibility |
587
+
588
+ `BLICCA` is the new name for the former `CLASSICUI` variant.
589
+ Both select the same backend-only deployment.
590
+ `CLASSICUI` keeps its legacy value (`'classicui'`), so existing configuration using `CLASSICUI` or that literal keeps working unchanged.
591
+ The `CLASSICUI` alias will be removed in a future major release.
586
592
 
587
593
  **Example:**
588
594
  ```typescript
589
595
  import { PloneVariant } from '@bluedynamics/cdk8s-plone';
590
596
 
591
- // Volto (modern)
597
+ // Volto (React single-page frontend)
592
598
  variant: PloneVariant.VOLTO
593
599
 
594
- // Classic UI
595
- variant: PloneVariant.CLASSICUI
600
+ // Blicca (server-side rendered)
601
+ variant: PloneVariant.BLICCA
596
602
  ```
597
603
 
598
604
  ---
@@ -663,7 +669,7 @@ app.synth();
663
669
 
664
670
  - {doc}`/tutorials/01-quick-start` — Get started guide
665
671
  - {doc}`/how-to/deploy-production-volto` — Production-ready Volto deployment
666
- - {doc}`/how-to/deploy-classic-ui` — Classic UI deployment
672
+ - {doc}`/how-to/deploy-blicca` — Blicca deployment
667
673
  - {doc}`/how-to/deploy-with-vinyl-cache` — `PloneVinylCache` walk-through
668
674
  - {doc}`/how-to/enable-prometheus-monitoring` — Wire up `ServiceMonitor`
669
675
  - {doc}`/how-to/configure-security-context` — Harden backend and frontend pods
@@ -147,7 +147,7 @@ Now that you have a basic Plone deployment:
147
147
 
148
148
  - **Configure resources**: See {doc}`/reference/configuration-options` for CPU and memory options.
149
149
  - **Add monitoring**: Follow {doc}`/how-to/enable-prometheus-monitoring`.
150
- - **Explore variants**: Read about Volto and Classic UI in {doc}`/explanation/features`.
150
+ - **Explore variants**: Read about Volto and Blicca in {doc}`/explanation/features`.
151
151
  - **Harden pods**: Apply {doc}`/how-to/configure-security-context`.
152
152
 
153
153
  ## Troubleshooting
@@ -1,29 +1,29 @@
1
- # Classic UI Example
1
+ # Blicca Example
2
2
 
3
- This example demonstrates a **production-ready Plone Classic UI deployment** using the [@bluedynamics/cdk8s-plone](https://www.npmjs.com/package/@bluedynamics/cdk8s-plone) TypeScript package.
3
+ This example demonstrates a **production-ready Plone Blicca deployment** using the [@bluedynamics/cdk8s-plone](https://www.npmjs.com/package/@bluedynamics/cdk8s-plone) TypeScript package.
4
4
 
5
- ## What is Plone Classic UI?
5
+ > **Note:** Blicca is the new name for what was formerly called Plone "Classic UI".
6
6
 
7
- Plone Classic UI is the traditional server-side rendered interface for Plone CMS. Unlike Volto (which uses a separate React frontend), Classic UI is served directly from the Plone backend, providing:
7
+ ## What is Plone Blicca?
8
8
 
9
- - **Traditional server-side rendering** - All pages rendered by Plone/Zope
9
+ Blicca is the server-side rendered UI of Plone CMS: the Plone backend renders the HTML and serves it directly. Unlike Volto (a separate React single-page frontend talking to the REST API), Blicca needs no separate frontend service:
10
+
11
+ - **Server-side rendering** - All pages rendered by Plone/Zope
10
12
  - **Simpler architecture** - Single backend service (no separate frontend)
11
- - **Familiar interface** - Classic Plone user interface many users know
12
13
  - **Full Plone features** - Complete access to all Plone functionality
13
14
 
14
- **When to use Classic UI:**
15
- - Migration from older Plone versions (maintaining familiar UX)
16
- - Internal tools and intranets where modern UI isn't required
17
- - Projects requiring specific Classic UI add-ons
18
- - Environments where simpler deployment is preferred
15
+ **When to use Blicca:**
16
+ - You want a single backend service without a separate frontend deployment
17
+ - Migration from older Plone versions (keeping the familiar server-rendered UX)
18
+ - Projects requiring Blicca-specific add-ons
19
19
 
20
- **When to use Volto instead:** See the [production-volto](../production-volto/) example for modern React-based UI with better performance and UX.
20
+ **When to use Volto instead:** See the [production-volto](../production-volto/) example for the React single-page frontend approach.
21
21
 
22
22
  ## Features
23
23
 
24
24
  This example includes:
25
25
 
26
- - **Plone 6.1 with Classic UI** (traditional server-side rendering)
26
+ - **Plone 6.1 with Blicca** (server-side rendering)
27
27
  - **PostgreSQL with RelStorage** - Choose between:
28
28
  - [CloudNativePG](https://cloudnative-pg.io/) (CNCF project, production-ready with HA)
29
29
  - [Bitnami PostgreSQL](https://github.com/bitnami/charts/tree/main/bitnami/postgresql) Helm chart (simple, for dev/testing)
@@ -115,30 +115,29 @@ DATABASE=cloudnativepg
115
115
  npm run synth
116
116
  ```
117
117
 
118
- This generates `dist/plone-classic.k8s.yaml` with all Kubernetes resources.
118
+ This generates `dist/plone-blicca.k8s.yaml` with all Kubernetes resources.
119
119
 
120
120
  ### 4. Deploy to Kubernetes
121
121
 
122
122
  ```bash
123
- kubectl apply -f dist/plone-classic.k8s.yaml
123
+ kubectl apply -f dist/plone-blicca.k8s.yaml
124
124
  ```
125
125
 
126
126
  Or deploy to a specific namespace:
127
127
  ```bash
128
- kubectl apply -f dist/plone-classic.k8s.yaml -n plone
128
+ kubectl apply -f dist/plone-blicca.k8s.yaml -n plone
129
129
  ```
130
130
 
131
- ## Classic UI vs Volto
131
+ ## Blicca vs Volto
132
132
 
133
- | Feature | Classic UI | Volto |
133
+ | Feature | Blicca | Volto |
134
134
  |---------|-----------|-------|
135
135
  | **Architecture** | Single backend service | Separate frontend + backend |
136
136
  | **Rendering** | Server-side (Zope) | Client-side (React) |
137
137
  | **Performance** | Good with caching | Excellent (SPA) |
138
- | **UX** | Traditional | Modern |
139
138
  | **Deployment** | Simpler | More complex |
140
- | **Add-ons** | Full classic support | Volto-specific needed |
141
- | **Best for** | Migrations, intranets | New projects, public sites |
139
+ | **Add-ons** | Full Blicca support | Volto-specific needed |
140
+ | **Best for** | Single-service setups, migrations | API-first projects, SPA frontends |
142
141
 
143
142
  ## Architecture
144
143
 
@@ -157,7 +156,7 @@ kubectl apply -f dist/plone-classic.k8s.yaml -n plone
157
156
  │ │
158
157
  ┌─────────▼─────────┐ ┌─────────▼─────────┐
159
158
  │ HTTP Cache │ │ Plone Backend │
160
- │ (Varnish) │ │ (Classic UI)
159
+ │ (Varnish) │ │ (Blicca)
161
160
  └─────────┬─────────┘ │ │
162
161
  │ └─────────┬─────────┘
163
162
  │ │
@@ -255,7 +254,7 @@ Edit [ingress.ts](ingress.ts) to:
255
254
 
256
255
  ## Accessing Your Plone Site
257
256
 
258
- After deployment, you can access your Plone Classic UI site at:
257
+ After deployment, you can access your Plone Blicca site at:
259
258
 
260
259
  - **Cached (public)**: https://plone.example.com (via Varnish)
261
260
  - **Uncached (testing)**: https://plone-test.example.com (direct to backend)
@@ -319,7 +318,7 @@ kubectl get secret -l app.kubernetes.io/part-of=plone
319
318
  kubectl get all -l app.kubernetes.io/part-of=plone
320
319
  ```
321
320
 
322
- ## Migrating from Classic UI to Volto
321
+ ## Migrating from Blicca to Volto
323
322
 
324
323
  If you later want to migrate to Volto:
325
324
 
@@ -333,7 +332,7 @@ If you later want to migrate to Volto:
333
332
 
334
333
  - [cdk8s-plone Documentation](https://bluedynamics.github.io/cdk8s-plone/)
335
334
  - [Plone 6 Documentation](https://6.docs.plone.org/)
336
- - [Plone Classic UI Guide](https://6.docs.plone.org/classic-ui/)
335
+ - [Plone Classic UI Guide](https://6.docs.plone.org/classic-ui/) (upstream docs; Blicca is the new name for Classic UI)
337
336
  - [CloudNativePG Documentation](https://cloudnative-pg.io/documentation/)
338
337
  - [CDK8S Documentation](https://cdk8s.io/)
339
338
  - [Varnish Documentation](https://varnish-cache.org/docs/)
@@ -1,6 +1,6 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
- exports[`Classic UI Example Synthesizes correctly 1`] = `
3
+ exports[`Blicca Example Synthesizes correctly 1`] = `
4
4
  [
5
5
  {
6
6
  "apiVersion": "networking.k8s.io/v1",
@@ -486,7 +486,7 @@ exports[`Classic UI Example Synthesizes correctly 1`] = `
486
486
  "app.kubernetes.io/managed-by": "cdk8s-plone",
487
487
  "app.kubernetes.io/name": "plone-backend",
488
488
  "app.kubernetes.io/part-of": "plone",
489
- "app.kubernetes.io/version": "classic.version",
489
+ "app.kubernetes.io/version": "blicca.version",
490
490
  },
491
491
  },
492
492
  "spec": {
@@ -729,7 +729,7 @@ sub vcl_recv {
729
729
  # Annotate request with x-auth indicating if request is authenticated or not
730
730
  call detect_auth;
731
731
 
732
- # Routing: All traffic goes to Plone backend for Classic UI
732
+ # Routing: All traffic goes to Plone backend for Blicca
733
733
  set req.backend_hint = lbPloneBackend.backend();
734
734
 
735
735
  # short cut authenticated requests to pass
@@ -58,7 +58,7 @@ sub vcl_recv {
58
58
  # Annotate request with x-auth indicating if request is authenticated or not
59
59
  call detect_auth;
60
60
 
61
- # Routing: All traffic goes to Plone backend for Classic UI
61
+ # Routing: All traffic goes to Plone backend for Blicca
62
62
  set req.backend_hint = lbPloneBackend.backend();
63
63
 
64
64
  # short cut authenticated requests to pass
@@ -1,10 +1,10 @@
1
- import { ClassicUIChart } from './main';
1
+ import { BliccaChart } from './main';
2
2
  import { Testing } from 'cdk8s';
3
3
 
4
- describe('Classic UI Example', () => {
4
+ describe('Blicca Example', () => {
5
5
  test('Synthesizes correctly', () => {
6
6
  const app = Testing.app();
7
- const chart = new ClassicUIChart(app, 'test-chart');
7
+ const chart = new BliccaChart(app, 'test-chart');
8
8
  const results = Testing.synth(chart);
9
9
  expect(results).toMatchSnapshot();
10
10
  });
@@ -9,7 +9,7 @@ import { PGBitnamiChart } from './postgres.bitnami';
9
9
  import { PGCloudNativePGChart } from './postgres.cloudnativepg';
10
10
 
11
11
 
12
- export class ClassicUIChart extends Chart {
12
+ export class BliccaChart extends Chart {
13
13
  constructor(scope: Construct, id: string, props: ChartProps = {}) {
14
14
  super(scope, id, props);
15
15
 
@@ -36,7 +36,7 @@ export class ClassicUIChart extends Chart {
36
36
  }
37
37
 
38
38
  // ================================================================================================================
39
- // Plone Classic UI
39
+ // Plone Blicca
40
40
 
41
41
  // prepare the environment variables for the plone deployment
42
42
  const dbMDName = db.dbServiceName
@@ -55,10 +55,10 @@ export class ClassicUIChart extends Chart {
55
55
  },
56
56
  );
57
57
 
58
- // create the plone deployment with Classic UI variant
58
+ // create the plone deployment with Blicca variant
59
59
  const plone = new Plone(this, 'plone', {
60
- version: 'classic.version',
61
- variant: PloneVariant.CLASSICUI,
60
+ version: 'blicca.version',
61
+ variant: PloneVariant.BLICCA,
62
62
  backend: {
63
63
  image: process.env.PLONE_BACKEND_IMAGE ?? 'plone/plone-backend:6.1.3',
64
64
  environment: env,
@@ -96,5 +96,5 @@ export class ClassicUIChart extends Chart {
96
96
 
97
97
 
98
98
  const app = new App();
99
- new ClassicUIChart(app, 'plone-classic');
99
+ new BliccaChart(app, 'plone-blicca');
100
100
  app.synth();
@@ -1,7 +1,7 @@
1
1
  {
2
- "name": "cdk8s-plone-example-classic-ui",
2
+ "name": "cdk8s-plone-example-blicca",
3
3
  "version": "1.0.0",
4
- "description": "Classic UI Plone deployment example using cdk8s-plone",
4
+ "description": "Blicca Plone deployment example using cdk8s-plone",
5
5
  "main": "main.js",
6
6
  "types": "main.ts",
7
7
  "license": "Apache-2.0",
package/lib/httpcache.js CHANGED
@@ -118,5 +118,5 @@ class PloneHttpcache extends constructs_1.Construct {
118
118
  }
119
119
  exports.PloneHttpcache = PloneHttpcache;
120
120
  _a = JSII_RTTI_SYMBOL_1;
121
- PloneHttpcache[_a] = { fqn: "@bluedynamics/cdk8s-plone.PloneHttpcache", version: "0.1.41" };
121
+ PloneHttpcache[_a] = { fqn: "@bluedynamics/cdk8s-plone.PloneHttpcache", version: "0.1.42" };
122
122
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cGNhY2hlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2h0dHBjYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IsaUNBQTZCO0FBQzdCLDJDQUF1QztBQXdKdkM7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBYSxjQUFlLFNBQVEsc0JBQVM7SUFPM0MsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxPQUE4QjtRQUN0RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLElBQUksVUFBa0IsQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3hCLElBQUksT0FBZSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQzVCLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztZQUM5RCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUM7WUFDbkMsQ0FBQztZQUNELFVBQVUsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNoRCxDQUFDO2FBQU0sQ0FBQztZQUNOLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBQ2xDLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFDNUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxZQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRTtZQUM1Qyx1REFBdUQ7WUFDdkQsSUFBSSxFQUFFLDBCQUEwQjtZQUNoQyxLQUFLLEVBQUUsZ0JBQWdCO1lBQ3ZCLE9BQU8sRUFBRSxPQUFPLENBQUMsWUFBWTtZQUM3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QUFJLGdCQUFnQixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLG9CQUFvQixHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQztJQUNwRCxDQUFDOztBQS9GSCx3Q0FnR0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgSGVsbSB9IGZyb20gJ2NkazhzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgUGxvbmUgfSBmcm9tICcuL3Bsb25lJztcblxuLyoqXG4gKiBBbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBwYXNzIHRvIHRoZSBrdWJlLWh0dHBjYWNoZSBjb250YWluZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSHR0cGNhY2hlRW52VmFyIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBLdWJlcm5ldGVzIHRvbGVyYXRpb24gZm9yIHRoZSBWYXJuaXNoIHBvZHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSHR0cGNhY2hlVG9sZXJhdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgdGFpbnQga2V5IHRvIHRvbGVyYXRlLlxuICAgKi9cbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvcGVyYXRvciAoRXF1YWwgb3IgRXhpc3RzKS5cbiAgICogQGRlZmF1bHQgJ0VxdWFsJ1xuICAgKi9cbiAgcmVhZG9ubHkgb3BlcmF0b3I/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0YWludCB2YWx1ZSB0byBtYXRjaCAod2hlbiBvcGVyYXRvciBpcyBFcXVhbCkuXG4gICAqIEBkZWZhdWx0IC0gbm8gdmFsdWVcbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGFpbnQgZWZmZWN0IHRvIHRvbGVyYXRlIChOb1NjaGVkdWxlLCBQcmVmZXJOb1NjaGVkdWxlLCBOb0V4ZWN1dGUpLlxuICAgKiBAZGVmYXVsdCAtIHRvbGVyYXRlIGFsbCBlZmZlY3RzXG4gICAqL1xuICByZWFkb25seSBlZmZlY3Q/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBQbG9uZUh0dHBjYWNoZSAoVmFybmlzaCBjYWNoaW5nIGxheWVyKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbG9uZUh0dHBjYWNoZU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIFBsb25lIGNvbnN0cnVjdCB0byBhdHRhY2ggdGhlIEhUVFAgY2FjaGUgdG8uXG4gICAqIFRoZSBjYWNoZSB3aWxsIGF1dG9tYXRpY2FsbHkgY29ubmVjdCB0byB0aGUgYmFja2VuZCBhbmQgZnJvbnRlbmQgc2VydmljZXMuXG4gICAqL1xuICByZWFkb25seSBwbG9uZTogUGxvbmU7XG5cbiAgLyoqXG4gICAqIFZhcm5pc2ggVkNMIGNvbmZpZ3VyYXRpb24gYXMgYSBzdHJpbmcuXG4gICAqIElmIHByb3ZpZGVkLCB0aGlzIHRha2VzIHByZWNlZGVuY2Ugb3ZlciB2YXJuaXNoVmNsRmlsZS5cbiAgICogQGRlZmF1bHQgLSBsb2FkZWQgZnJvbSB2YXJuaXNoVmNsRmlsZSBvciBkZWZhdWx0IGNvbmZpZyBmaWxlXG4gICAqL1xuICByZWFkb25seSB2YXJuaXNoVmNsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIGEgVmFybmlzaCBWQ0wgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHVzZXMgdGhlIGRlZmF1bHQgVkNMIGZpbGUgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkuXG4gICAqIEBkZWZhdWx0IC0gdXNlcyBkZWZhdWx0IGNvbmZpZy92YXJuaXNoLnRwbC52Y2xcbiAgICovXG4gIHJlYWRvbmx5IHZhcm5pc2hWY2xGaWxlPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIGFuIGV4aXN0aW5nIEt1YmVybmV0ZXMgc2VjcmV0IGNvbnRhaW5pbmcgVmFybmlzaCBhZG1pbiBjcmVkZW50aWFscy5cbiAgICogVGhlIHNlY3JldCBzaG91bGQgYmUgY3JlYXRlZCBzZXBhcmF0ZWx5IGluIHRoZSBzYW1lIG5hbWVzcGFjZS5cbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWQgKG5vIGV4aXN0aW5nIHNlY3JldClcbiAgICovXG4gIHJlYWRvbmx5IGV4aXN0aW5nU2VjcmV0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDUFUgbGltaXQgZm9yIFZhcm5pc2ggcG9kcy5cbiAgICogQGRlZmF1bHQgJzUwMG0nXG4gICAqL1xuICByZWFkb25seSBsaW1pdENwdT86IHN0cmluZztcblxuICAvKipcbiAgICogTWVtb3J5IGxpbWl0IGZvciBWYXJuaXNoIHBvZHMuXG4gICAqIEBkZWZhdWx0ICc1MDBNaSdcbiAgICovXG4gIHJlYWRvbmx5IGxpbWl0TWVtb3J5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDUFUgcmVxdWVzdCBmb3IgVmFybmlzaCBwb2RzLlxuICAgKiBAZGVmYXVsdCAnMTAwbSdcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVlc3RDcHU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1lbW9yeSByZXF1ZXN0IGZvciBWYXJuaXNoIHBvZHMuXG4gICAqIEBkZWZhdWx0ICcxMDBNaSdcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVlc3RNZW1vcnk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBQcm9tZXRoZXVzIFNlcnZpY2VNb25pdG9yIGZvciBtZXRyaWNzIGNvbGxlY3Rpb24uXG4gICAqIFJlcXVpcmVzIFByb21ldGhldXMgT3BlcmF0b3IgdG8gYmUgaW5zdGFsbGVkIGluIHRoZSBjbHVzdGVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZW1vbml0b3I/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgdGhlIFByb21ldGhldXMgZXhwb3J0ZXIgZm9yIFZhcm5pc2ggbWV0cmljcy5cbiAgICogV2hlbiBlbmFibGVkLCB0aGUgZXhwb3J0ZXIgc2lkZWNhciBjb250YWluZXIgd2lsbCBiZSBkZXBsb3llZCBhbG9uZ3NpZGUgVmFybmlzaC5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZXhwb3J0ZXJFbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVmVyc2lvbiBvZiB0aGUga3ViZS1odHRwY2FjaGUgSGVsbSBjaGFydCB0byB1c2UuXG4gICAqIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBsYXRlc3QgdmVyc2lvbiBmcm9tIHRoZSByZXBvc2l0b3J5IHdpbGwgYmUgdXNlZC5cbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkIChsYXRlc3QpXG4gICAqL1xuICByZWFkb25seSBjaGFydFZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZlcnNpb24gb2YgdGhlIGt1YmUtaHR0cGNhY2hlIENvbnRhaW5lciBJbWFnZSB0byB1c2UuXG4gICAqIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBsYXRlc3QgdmVyc2lvbiBmcm9tIHRoZSByZXBvc2l0b3J5IHdpbGwgYmUgdXNlZC5cbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkIChjaGFydFZlcnNpb24gPSB3aXRoIGVhY2ggY2hhcnQgcmVsZWFzZSB0aGVyZSBpcyBhbiBpbWFnZSByZWxlYXNlIHRvbyApXG4gICAqL1xuICByZWFkb25seSBhcHBWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgVmFybmlzaCBwb2QgcmVwbGljYXMgdG8gcnVuLlxuICAgKiBAZGVmYXVsdCAyXG4gICAqL1xuICByZWFkb25seSByZXBsaWNhcz86IG51bWJlcjtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gcGFzcyB0byB0aGUga3ViZS1odHRwY2FjaGUgY29udGFpbmVyLlxuICAgKiBUaGVzZSBhcmUgYXBwZW5kZWQgdG8gdGhlIGJ1aWx0LWluIGVudiB2YXJzIChCQUNLRU5EX1NFUlZJQ0VfTkFNRSwgZXRjLilcbiAgICogYW5kIGNhbiBiZSByZWZlcmVuY2VkIGluIFZDTCB0ZW1wbGF0ZXMgdXNpbmcgR28gdGVtcGxhdGUgc3ludGF4OiB7eyAuRW52LlZBUl9OQU1FIH19XG4gICAqIEBkZWZhdWx0IC0gbm8gYWRkaXRpb25hbCBlbnYgdmFyc1xuICAgKi9cbiAgcmVhZG9ubHkgZXh0cmFFbnZWYXJzPzogSHR0cGNhY2hlRW52VmFyW107XG5cbiAgLyoqXG4gICAqIFRvbGVyYXRpb25zIGZvciB0aGUgVmFybmlzaCBwb2RzLlxuICAgKiBVc2UgdGhpcyB0byBhbGxvdyBzY2hlZHVsaW5nIG9uIG5vZGVzIHdpdGggc3BlY2lmaWMgdGFpbnRzLFxuICAgKiBlLmcuIG5vZGVzIHRhaW50ZWQgd2l0aCBrdWJlcm5ldGVzLmlvL2FyY2g9YW1kNjQ6Tm9TY2hlZHVsZS5cbiAgICogQGRlZmF1bHQgLSBubyB0b2xlcmF0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgdG9sZXJhdGlvbnM/OiBIdHRwY2FjaGVUb2xlcmF0aW9uW107XG59XG5cbi8qKlxuICogUGxvbmVIdHRwY2FjaGUgY29uc3RydWN0IGZvciBkZXBsb3lpbmcgVmFybmlzaCBIVFRQIGNhY2hpbmcgbGF5ZXIuXG4gKlxuICogVXNlcyB0aGUgbWl0dHdhbGQva3ViZS1odHRwY2FjaGUgSGVsbSBjaGFydCB0byBkZXBsb3kgVmFybmlzaCBhcyBhXG4gKiBjYWNoaW5nIHByb3h5IGluIGZyb250IG9mIFBsb25lIGJhY2tlbmQgYW5kL29yIGZyb250ZW5kIHNlcnZpY2VzLlxuICpcbiAqIFRoZSBjYWNoZSBhdXRvbWF0aWNhbGx5IGNvbm5lY3RzIHRvIHRoZSBQbG9uZSBzZXJ2aWNlcyBhbmQgcHJvdmlkZXNcbiAqIEhUVFAgY2FjaGUgaW52YWxpZGF0aW9uIGNhcGFiaWxpdGllcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgcGxvbmUgPSBuZXcgUGxvbmUoY2hhcnQsICdwbG9uZScpO1xuICogY29uc3QgY2FjaGUgPSBuZXcgUGxvbmVIdHRwY2FjaGUoY2hhcnQsICdjYWNoZScsIHtcbiAqICAgcGxvbmU6IHBsb25lLFxuICogICBleGlzdGluZ1NlY3JldDogJ3Zhcm5pc2gtc2VjcmV0JyxcbiAqIH0pO1xuICovXG5leHBvcnQgY2xhc3MgUGxvbmVIdHRwY2FjaGUgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgVmFybmlzaCBzZXJ2aWNlIGNyZWF0ZWQgYnkgdGhlIEhlbG0gY2hhcnQuXG4gICAqIFVzZSB0aGlzIHRvIHJlZmVyZW5jZSB0aGUgY2FjaGUgc2VydmljZSBmcm9tIGluZ3Jlc3Mgb3Igb3RoZXIgY29uc3RydWN0cy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBodHRwY2FjaGVTZXJ2aWNlTmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIG9wdGlvbnM6IFBsb25lSHR0cGNhY2hlT3B0aW9ucykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgbGV0IHZhcm5pc2hWY2w6IHN0cmluZztcbiAgICBpZiAoIW9wdGlvbnMudmFybmlzaFZjbCkge1xuICAgICAgbGV0IHZjbFBhdGg6IHN0cmluZztcbiAgICAgIGlmICghb3B0aW9ucy52YXJuaXNoVmNsRmlsZSkge1xuICAgICAgICB2Y2xQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJ2NvbmZpZycsICd2YXJuaXNoLnRwbC52Y2wnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZjbFBhdGggPSBvcHRpb25zLnZhcm5pc2hWY2xGaWxlO1xuICAgICAgfVxuICAgICAgdmFybmlzaFZjbCA9IGZzLnJlYWRGaWxlU3luYyh2Y2xQYXRoLCAndXRmOCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXJuaXNoVmNsID0gb3B0aW9ucy52YXJuaXNoVmNsO1xuICAgIH1cbiAgICBjb25zdCBpbWFnZVRhZyA9IG9wdGlvbnMuYXBwVmVyc2lvbiA/PyBvcHRpb25zLmNoYXJ0VmVyc2lvbjtcbiAgICBjb25zdCBodHRwY2FjaGUgPSBuZXcgSGVsbSh0aGlzLCAnaHR0cGNhY2hlJywge1xuICAgICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9taXR0d2FsZC9rdWJlLWh0dHBjYWNoZS9jaGFydFxuICAgICAgcmVwbzogJ2h0dHBzOi8vaGVsbS5taXR0d2FsZC5kZScsXG4gICAgICBjaGFydDogJ2t1YmUtaHR0cGNhY2hlJyxcbiAgICAgIHZlcnNpb246IG9wdGlvbnMuY2hhcnRWZXJzaW9uLFxuICAgICAgdmFsdWVzOiB7XG4gICAgICAgIHJlcGxpY2FDb3VudDogb3B0aW9ucy5yZXBsaWNhcyA/PyAyLFxuICAgICAgICAuLi4oaW1hZ2VUYWcgJiYgeyBpbWFnZTogeyB0YWc6IGltYWdlVGFnIH0gfSksXG4gICAgICAgIGNhY2hlOiB7XG4gICAgICAgICAgYmFja2VuZFNlcnZpY2U6IG9wdGlvbnMucGxvbmUuYmFja2VuZFNlcnZpY2VOYW1lLFxuICAgICAgICAgIGZyb250ZW5kV2F0Y2g6IGZhbHNlLFxuICAgICAgICAgIGJhY2tlbmRXYXRjaDogdHJ1ZSxcbiAgICAgICAgICBleGlzdGluZ1NlY3JldDogb3B0aW9ucy5leGlzdGluZ1NlY3JldCA/PyB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICAgIC8vIFdvcmthcm91bmQ6IHVwc3RyZWFtIGNoYXJ0IGFjY2VwdHMgYmFja2VuZFBvcnROYW1lIGJ1dCBuZXZlclxuICAgICAgICAvLyByZW5kZXJzIGl0IGFzIENMSSBhcmcuIFBhc3MgdmlhIGNhY2hlRXh0cmFBcmdzIGluc3RlYWQuXG4gICAgICAgIGNhY2hlRXh0cmFBcmdzOiAnLSAtYmFja2VuZC1wb3J0bmFtZT1iYWNrZW5kLWh0dHAnLFxuICAgICAgICB2Y2xUZW1wbGF0ZTogdmFybmlzaFZjbCxcbiAgICAgICAgZXh0cmFFbnZWYXJzOiBbXG4gICAgICAgICAgeyBuYW1lOiAnQkFDS0VORF9TRVJWSUNFX05BTUUnLCB2YWx1ZTogb3B0aW9ucy5wbG9uZS5iYWNrZW5kU2VydmljZU5hbWUgfSxcbiAgICAgICAgICB7IG5hbWU6ICdCQUNLRU5EX1NFUlZJQ0VfUE9SVCcsIHZhbHVlOiAnODA4MCcgfSxcbiAgICAgICAgICB7IG5hbWU6ICdCQUNLRU5EX1NJVEVfSUQnLCB2YWx1ZTogb3B0aW9ucy5wbG9uZS5zaXRlSWQgfSxcbiAgICAgICAgICB7IG5hbWU6ICdGUk9OVEVORF9TRVJWSUNFX05BTUUnLCB2YWx1ZTogb3B0aW9ucy5wbG9uZS5mcm9udGVuZFNlcnZpY2VOYW1lIH0sXG4gICAgICAgICAgeyBuYW1lOiAnRlJPTlRFTkRfU0VSVklDRV9QT1JUJywgdmFsdWU6ICczMDAwJyB9LFxuICAgICAgICAgIC4uLihvcHRpb25zLmV4dHJhRW52VmFycyA/PyBbXSksXG4gICAgICAgIF0sXG4gICAgICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbWl0dHdhbGQva3ViZS1odHRwY2FjaGUvaXNzdWVzLzI1M1xuICAgICAgICBub2RlU2VsZWN0b3I6IHtcbiAgICAgICAgICAna3ViZXJuZXRlcy5pby9hcmNoJzogJ2FtZDY0JyxcbiAgICAgICAgfSxcbiAgICAgICAgLi4uKG9wdGlvbnMudG9sZXJhdGlvbnMgJiYgeyB0b2xlcmF0aW9uczogb3B0aW9ucy50b2xlcmF0aW9ucyB9KSxcbiAgICAgICAgcmVzb3VyY2VzOiB7XG4gICAgICAgICAgbGltaXRzOiB7XG4gICAgICAgICAgICBjcHU6IG9wdGlvbnMubGltaXRDcHUgfHwgJzUwMG0nLFxuICAgICAgICAgICAgbWVtb3J5OiBvcHRpb25zLmxpbWl0TWVtb3J5IHx8ICc1MDBNaScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXF1ZXN0czoge1xuICAgICAgICAgICAgY3B1OiBvcHRpb25zLnJlcXVlc3RDcHUgfHwgJzEwMG0nLFxuICAgICAgICAgICAgbWVtb3J5OiBvcHRpb25zLnJlcXVlc3RNZW1vcnkgfHwgJzEwME1pJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICByYmFjOiB7XG4gICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZXhwb3J0ZXI6IHtcbiAgICAgICAgICBlbmFibGVkOiBvcHRpb25zLmV4cG9ydGVyRW5hYmxlZCA/PyB0cnVlLFxuICAgICAgICAgIHJlc291cmNlczoge1xuICAgICAgICAgICAgbGltaXRzOiB7XG4gICAgICAgICAgICAgIGNwdTogJzEwMG0nLFxuICAgICAgICAgICAgICBtZW1vcnk6ICcxMDBNaScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdHM6IHtcbiAgICAgICAgICAgICAgY3B1OiAnMTBtJyxcbiAgICAgICAgICAgICAgbWVtb3J5OiAnNTBNaScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNlcnZpY2VNb25pdG9yOiB7XG4gICAgICAgICAgZW5hYmxlZDogb3B0aW9ucy5zZXJ2aWNlbW9uaXRvciB8fCBmYWxzZSxcbiAgICAgICAgICBzY3JhcGVTaWduYWxsZXI6IG9wdGlvbnMuc2VydmljZW1vbml0b3IgfHwgZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IGh0dHBjYWNoZVNlcnZpY2UgPSBodHRwY2FjaGUuYXBpT2JqZWN0cy5maW5kKChjb25zdHJ1Y3QpID0+IHtcbiAgICAgIGlmICgoY29uc3RydWN0LmtpbmQgPT09ICdTZXJ2aWNlJykgJiYgKGNvbnN0cnVjdC5tZXRhZGF0YS5uYW1lPy5lbmRzV2l0aCgna3ViZS1odHRwY2FjaGUnKSkpIHtcbiAgICAgICAgcmV0dXJuIGNvbnN0cnVjdC5uYW1lO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgICBpZiAoaHR0cGNhY2hlU2VydmljZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIGh0dHBjYWNoZSBzZXJ2aWNlJyk7XG4gICAgfVxuICAgIHRoaXMuaHR0cGNhY2hlU2VydmljZU5hbWUgPSBodHRwY2FjaGVTZXJ2aWNlLm5hbWU7XG4gIH1cbn0iXX0=
package/lib/plone.d.ts CHANGED
@@ -263,14 +263,22 @@ export interface PloneBaseOptions {
263
263
  */
264
264
  export declare enum PloneVariant {
265
265
  /**
266
- * Volto variant: ReactJS frontend (Volto) with REST API backend.
266
+ * Volto variant: ReactJS single-page frontend (Volto) talking to the Plone REST API.
267
267
  * Deploys both frontend and backend services.
268
268
  */
269
269
  VOLTO = "volto",
270
270
  /**
271
- * Classic UI variant: Traditional Plone with server-side rendering.
271
+ * Blicca variant: the Plone backend renders the UI server-side and serves the HTML directly.
272
272
  * Deploys only the backend service.
273
273
  */
274
+ BLICCA = "blicca",
275
+ /**
276
+ * Deprecated alias for the Blicca variant (formerly "Classic UI").
277
+ *
278
+ * @deprecated Renamed to {@link BLICCA}. Kept for backward compatibility and selects the
279
+ * same backend-only deployment. Existing configuration using `CLASSICUI` (or the literal
280
+ * value `'classicui'`) keeps working unchanged. Will be removed in a future major release.
281
+ */
274
282
  CLASSICUI = "classicui"
275
283
  }
276
284
  /**
@@ -322,8 +330,8 @@ export interface PloneOptions {
322
330
  * - Optional PodDisruptionBudget for high availability
323
331
  *
324
332
  * Supports two deployment variants:
325
- * - VOLTO: Modern React frontend with REST API backend (default)
326
- * - CLASSICUI: Traditional server-side rendered Plone
333
+ * - VOLTO: React single-page frontend talking to the REST API backend (default)
334
+ * - BLICCA: the Plone backend renders the UI server-side and serves HTML directly
327
335
  *
328
336
  * @example
329
337
  * new Plone(chart, 'my-plone', {
@@ -349,7 +357,7 @@ export declare class Plone extends Construct {
349
357
  */
350
358
  readonly frontendServiceName: string | undefined;
351
359
  /**
352
- * The deployment variant being used (VOLTO or CLASSICUI).
360
+ * The deployment variant being used (VOLTO or BLICCA).
353
361
  */
354
362
  readonly variant: PloneVariant;
355
363
  /**
package/lib/plone.js CHANGED
@@ -16,14 +16,22 @@ const service_1 = require("./service");
16
16
  var PloneVariant;
17
17
  (function (PloneVariant) {
18
18
  /**
19
- * Volto variant: ReactJS frontend (Volto) with REST API backend.
19
+ * Volto variant: ReactJS single-page frontend (Volto) talking to the Plone REST API.
20
20
  * Deploys both frontend and backend services.
21
21
  */
22
22
  PloneVariant["VOLTO"] = "volto";
23
23
  /**
24
- * Classic UI variant: Traditional Plone with server-side rendering.
24
+ * Blicca variant: the Plone backend renders the UI server-side and serves the HTML directly.
25
25
  * Deploys only the backend service.
26
26
  */
27
+ PloneVariant["BLICCA"] = "blicca";
28
+ /**
29
+ * Deprecated alias for the Blicca variant (formerly "Classic UI").
30
+ *
31
+ * @deprecated Renamed to {@link BLICCA}. Kept for backward compatibility and selects the
32
+ * same backend-only deployment. Existing configuration using `CLASSICUI` (or the literal
33
+ * value `'classicui'`) keeps working unchanged. Will be removed in a future major release.
34
+ */
27
35
  PloneVariant["CLASSICUI"] = "classicui";
28
36
  })(PloneVariant || (exports.PloneVariant = PloneVariant = {}));
29
37
  /**
@@ -35,8 +43,8 @@ var PloneVariant;
35
43
  * - Optional PodDisruptionBudget for high availability
36
44
  *
37
45
  * Supports two deployment variants:
38
- * - VOLTO: Modern React frontend with REST API backend (default)
39
- * - CLASSICUI: Traditional server-side rendered Plone
46
+ * - VOLTO: React single-page frontend talking to the REST API backend (default)
47
+ * - BLICCA: the Plone backend renders the UI server-side and serves HTML directly
40
48
  *
41
49
  * @example
42
50
  * new Plone(chart, 'my-plone', {
@@ -268,5 +276,5 @@ class Plone extends constructs_1.Construct {
268
276
  }
269
277
  exports.Plone = Plone;
270
278
  _a = JSII_RTTI_SYMBOL_1;
271
- Plone[_a] = { fqn: "@bluedynamics/cdk8s-plone.Plone", version: "0.1.41" };
272
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxvbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcGxvbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxpQ0FBOEI7QUFDOUIsdUNBQXVDO0FBQ3ZDLDJDQUF1QztBQUN2Qyw2Q0FBdUU7QUFDdkUsdUNBQTRDO0FBRTVDLDJFQUF3RztBQUN4Ryx1Q0FBMkQ7QUFrUzNEOztHQUVHO0FBQ0gsSUFBWSxZQVlYO0FBWkQsV0FBWSxZQUFZO0lBQ3RCOzs7T0FHRztJQUNILCtCQUFlLENBQUE7SUFFZjs7O09BR0c7SUFDSCx1Q0FBdUIsQ0FBQTtBQUN6QixDQUFDLEVBWlcsWUFBWSw0QkFBWixZQUFZLFFBWXZCO0FBZ0REOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILE1BQWEsS0FBTSxTQUFRLHNCQUFTO0lBdUJsQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLFVBQXdCLEVBQUU7UUFDbEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsU0FBUyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUM7UUFDeEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUM7UUFFckQsMkVBQTJFO1FBQzNFLFVBQVU7UUFDVixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUN0QyxNQUFNLGFBQWEsR0FBRztZQUNwQix3QkFBd0IsRUFBRSxlQUFlO1lBQ3pDLDZCQUE2QixFQUFFLFNBQVM7WUFDeEMsMkJBQTJCLEVBQUUsT0FBTyxDQUFDLE9BQU8sSUFBSSxXQUFXO1NBQzVELENBQUM7UUFDRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFFekIsVUFBVTtRQUNWLElBQUksY0FBYyxHQUEyQjtZQUMz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QkFBa0IsRUFBRSxFQUFFLEVBQUU7WUFDL0MsUUFBUSxFQUFFO2dCQUNSLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLFVBQVU7Z0JBQy9CLE1BQU0sRUFBRTtvQkFDTix3QkFBd0IsRUFBRSxPQUFPLENBQUMsSUFBSTtvQkFDdEMsNkJBQTZCLEVBQUUsZ0JBQWdCO2lCQUNoRDthQUNGO1lBQ0QsSUFBSSxFQUFFO2dCQUNKLFFBQVEsRUFBRTtvQkFDUixXQUFXLEVBQUU7d0JBQ1gsd0JBQXdCLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQztxQkFDbkU7aUJBQ0Y7Z0JBQ0QsU0FBUyxFQUFFO29CQUNUO3dCQUNFLEdBQUcsQ0FBQyxRQUFRLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7d0JBQ25DLEdBQUcsQ0FBQyxVQUFVLElBQUksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQUM7d0JBQzdDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTt3QkFDakIsUUFBUSxFQUFFLEtBQUs7cUJBQ2hCO2lCQUNGO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDOztBQS9QSCxzQkFnUUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOYW1lcyB9IGZyb20gJ2NkazhzJztcbmltcG9ydCAqIGFzIGtwbHVzIGZyb20gJ2NkazhzLXBsdXMtMzAnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBQbG9uZURlcGxveW1lbnQsIFBsb25lRGVwbG95bWVudE9wdGlvbnMgfSBmcm9tICcuL2RlcGxveW1lbnQnO1xuaW1wb3J0IHsgSW50T3JTdHJpbmcgfSBmcm9tICcuL2ltcG9ydHMvazhzJztcbmltcG9ydCAqIGFzIGs4cyBmcm9tICcuL2ltcG9ydHMvazhzJztcbmltcG9ydCB7IFNlcnZpY2VNb25pdG9yLCBTZXJ2aWNlTW9uaXRvclNwZWNFbmRwb2ludHNUYXJnZXRQb3J0IH0gZnJvbSAnLi9pbXBvcnRzL21vbml0b3JpbmcuY29yZW9zLmNvbSc7XG5pbXBvcnQgeyBQbG9uZVNlcnZpY2UsIFBsb25lU2VydmljZVNwZWMgfSBmcm9tICcuL3NlcnZpY2UnO1xuXG4vKipcbiAqIExpbnV4IGNhcGFiaWxpdGllcyB0byBhZGQgb3IgZHJvcCBvbiBhIGNvbnRhaW5lci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbG9uZUNhcGFiaWxpdGllcyB7XG4gIC8qKlxuICAgKiBDYXBhYmlsaXRpZXMgdG8gYWRkIChlLmcuICdTWVNfUFRSQUNFJywgJ05FVF9BRE1JTicpLlxuICAgKiBAZGVmYXVsdCAtIG5vIGNhcGFiaWxpdGllcyBhZGRlZFxuICAgKi9cbiAgcmVhZG9ubHkgYWRkPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIENhcGFiaWxpdGllcyB0byBkcm9wIChlLmcuICdBTEwnLCAnTkVUX1JBVycpLlxuICAgKiBAZGVmYXVsdCAtIG5vIGNhcGFiaWxpdGllcyBkcm9wcGVkXG4gICAqL1xuICByZWFkb25seSBkcm9wPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogU2VjdXJpdHkgY29udGV4dCBmb3IgYSBQbG9uZSBjb250YWluZXIuXG4gKiBDb250cm9scyBwcml2aWxlZ2UgYW5kIGFjY2VzcyBzZXR0aW5ncy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbG9uZVNlY3VyaXR5Q29udGV4dCB7XG4gIC8qKlxuICAgKiBMaW51eCBjYXBhYmlsaXRpZXMgdG8gYWRkIG9yIGRyb3AuXG4gICAqIEBleGFtcGxlIHsgYWRkOiBbJ1NZU19QVFJBQ0UnXSB9XG4gICAqIEBkZWZhdWx0IC0gbm8gY2FwYWJpbGl0eSBjaGFuZ2VzXG4gICAqL1xuICByZWFkb25seSBjYXBhYmlsaXRpZXM/OiBQbG9uZUNhcGFiaWxpdGllcztcblxuICAvKipcbiAgICogUnVuIHRoZSBjb250YWluZXIgYXMgYSBzcGVjaWZpYyB1c2VyIElELlxuICAgKiBAZGVmYXVsdCAtIGNvbnRhaW5lciBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBydW5Bc1VzZXI/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFJ1biB0aGUgY29udGFpbmVyIGFzIGEgc3BlY2lmaWMgZ3JvdXAgSUQuXG4gICAqIEBkZWZhdWx0IC0gY29udGFpbmVyIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IHJ1bkFzR3JvdXA/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFJlcXVpcmUgdGhlIGNvbnRhaW5lciB0byBydW4gYXMgbm9uLXJvb3QuXG4gICAqIEBkZWZhdWx0IC0gdW5kZWZpbmVkXG4gICAqL1xuICByZWFkb25seSBydW5Bc05vblJvb3Q/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBNb3VudCB0aGUgcm9vdCBmaWxlc3lzdGVtIGFzIHJlYWQtb25seS5cbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IHJlYWRPbmx5Um9vdEZpbGVzeXN0ZW0/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBbGxvdyBwcml2aWxlZ2UgZXNjYWxhdGlvbiBmb3IgdGhlIGNvbnRhaW5lciBwcm9jZXNzLlxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dQcml2aWxlZ2VFc2NhbGF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUnVuIHRoZSBjb250YWluZXIgaW4gcHJpdmlsZWdlZCBtb2RlLlxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmlsZWdlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQmFzZSBvcHRpb25zIGZvciBQbG9uZSBiYWNrZW5kIG9yIGZyb250ZW5kIGNvbmZpZ3VyYXRpb24uXG4gKiBUaGVzZSBvcHRpb25zIGNvbnRyb2wgY29udGFpbmVyIGltYWdlLCByZXBsaWNhIGNvdW50LCByZXNvdXJjZSBsaW1pdHMsXG4gKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIGFuZCBoZWFsdGggcHJvYmVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsb25lQmFzZU9wdGlvbnMge1xuICAvKipcbiAgICogQ29udGFpbmVyIGltYWdlIHRvIHVzZSBmb3IgdGhlIGRlcGxveW1lbnQuXG4gICAqIEBleGFtcGxlICdwbG9uZS9wbG9uZS1iYWNrZW5kOjYuMC4xMCcgb3IgJ3Bsb25lL3Bsb25lLWZyb250ZW5kOjE2LjAuMCdcbiAgICogQGRlZmF1bHQgLSAncGxvbmUvcGxvbmUtYmFja2VuZDpsYXRlc3QnIGZvciBiYWNrZW5kLCAncGxvbmUvcGxvbmUtZnJvbnRlbmQ6bGF0ZXN0JyBmb3IgZnJvbnRlbmRcbiAgICovXG4gIHJlYWRvbmx5IGltYWdlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbWFnZSBwdWxsIHBvbGljeSBmb3IgdGhlIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgJ0lmTm90UHJlc2VudCdcbiAgICovXG4gIHJlYWRvbmx5IGltYWdlUHVsbFBvbGljeT86IHN0cmluZztcblxuICAvKipcbiAgICogTnVtYmVyIG9mIHBvZCByZXBsaWNhcyB0byBydW4uXG4gICAqIEBkZWZhdWx0IDJcbiAgICovXG4gIHJlYWRvbmx5IHJlcGxpY2FzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiBwb2RzIHRoYXQgY2FuIGJlIHVuYXZhaWxhYmxlIGR1cmluZyB1cGRhdGVzLlxuICAgKiBDYW4gYmUgYW4gYWJzb2x1dGUgbnVtYmVyIChlLmcuLCAxKSBvciBhIHBlcmNlbnRhZ2UgKGUuZy4sICc1MCUnKS5cbiAgICogVXNlZCBpbiBQb2REaXNydXB0aW9uQnVkZ2V0IGlmIHNwZWNpZmllZC5cbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWQgKG5vdCBzZXQpXG4gICAqL1xuICByZWFkb25seSBtYXhVbmF2YWlsYWJsZT86IG51bWJlciB8IHN0cmluZztcblxuICAvKipcbiAgICogTWluaW11bSBudW1iZXIgb2YgcG9kcyB0aGF0IG11c3QgYmUgYXZhaWxhYmxlIGR1cmluZyB1cGRhdGVzLlxuICAgKiBDYW4gYmUgYW4gYWJzb2x1dGUgbnVtYmVyIChlLmcuLCAxKSBvciBhIHBlcmNlbnRhZ2UgKGUuZy4sICc1MCUnKS5cbiAgICogVXNlZCBpbiBQb2REaXNydXB0aW9uQnVkZ2V0IGlmIHNwZWNpZmllZC5cbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWQgKG5vdCBzZXQpXG4gICAqL1xuICByZWFkb25seSBtaW5BdmFpbGFibGU/OiBudW1iZXIgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENQVSBsaW1pdCBmb3IgdGhlIGNvbnRhaW5lci5cbiAgICogQGV4YW1wbGUgJzUwMG0nIG9yICcxJyBvciAnMjAwMG0nXG4gICAqIEBkZWZhdWx0ICc1MDBtJyBmb3IgYm90aCBiYWNrZW5kIGFuZCBmcm9udGVuZFxuICAgKi9cbiAgcmVhZG9ubHkgbGltaXRDcHU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1lbW9yeSBsaW1pdCBmb3IgdGhlIGNvbnRhaW5lci5cbiAgICogQGV4YW1wbGUgJzUxMk1pJyBvciAnMUdpJ1xuICAgKiBAZGVmYXVsdCAnNTEyTWknIGZvciBiYWNrZW5kLCAnMUdpJyBmb3IgZnJvbnRlbmRcbiAgICovXG4gIHJlYWRvbmx5IGxpbWl0TWVtb3J5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDUFUgcmVxdWVzdCBmb3IgdGhlIGNvbnRhaW5lci5cbiAgICogQGV4YW1wbGUgJzIwMG0nIG9yICcwLjUnXG4gICAqIEBkZWZhdWx0ICcyMDBtJ1xuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWVzdENwdT86IHN0cmluZztcblxuICAvKipcbiAgICogTWVtb3J5IHJlcXVlc3QgZm9yIHRoZSBjb250YWluZXIuXG4gICAqIEBleGFtcGxlICcyNTZNaScgb3IgJzUxMk1pJ1xuICAgKiBAZGVmYXVsdCAnMjU2TWknXG4gICAqL1xuICByZWFkb25seSByZXF1ZXN0TWVtb3J5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0IGluIHRoZSBjb250YWluZXIuXG4gICAqIFVzZSBjZGs4cy1wbHVzLTMwIEVudiBjbGFzcyB0byBkZWZpbmUgdmFyaWFibGVzIGFuZCBzb3VyY2VzLlxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZCAobm8gYWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMpXG4gICAqL1xuICByZWFkb25seSBlbnZpcm9ubWVudD86IGtwbHVzLkVudjtcblxuICAvKipcbiAgICogRW5hYmxlIHJlYWRpbmVzcyBwcm9iZSBmb3IgdGhlIGNvbnRhaW5lci5cbiAgICogUmVhZGluZXNzIHByb2JlcyBkZXRlcm1pbmUgd2hlbiBhIGNvbnRhaW5lciBpcyByZWFkeSB0byBhY2NlcHQgdHJhZmZpYy5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVhZGluZXNzRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiBzZWNvbmRzIGFmdGVyIGNvbnRhaW5lciBzdGFydCBiZWZvcmUgcmVhZGluZXNzIHByb2JlIGlzIGluaXRpYXRlZC5cbiAgICogQGRlZmF1bHQgMTBcbiAgICovXG4gIHJlYWRvbmx5IHJlYWRpbmVzc0luaXRpYWxEZWxheVNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiBzZWNvbmRzIGFmdGVyIHdoaWNoIHRoZSByZWFkaW5lc3MgcHJvYmUgdGltZXMgb3V0LlxuICAgKiBAZGVmYXVsdCAxNVxuICAgKi9cbiAgcmVhZG9ubHkgcmVhZGluZXNzVGltZW91dFNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEhvdyBvZnRlbiAoaW4gc2Vjb25kcykgdG8gcGVyZm9ybSB0aGUgcmVhZGluZXNzIHByb2JlLlxuICAgKiBAZGVmYXVsdCAxMFxuICAgKi9cbiAgcmVhZG9ubHkgcmVhZGluZXNzUGVyaW9kU2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogTWluaW11bSBjb25zZWN1dGl2ZSBzdWNjZXNzZXMgZm9yIHRoZSByZWFkaW5lc3MgcHJvYmUgdG8gYmUgY29uc2lkZXJlZCBzdWNjZXNzZnVsLlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICByZWFkb25seSByZWFkaW5lc3NTdWNjZXNzVGhyZXNob2xkPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBNaW5pbXVtIGNvbnNlY3V0aXZlIGZhaWx1cmVzIGZvciB0aGUgcmVhZGluZXNzIHByb2JlIHRvIGJlIGNvbnNpZGVyZWQgZmFpbGVkLlxuICAgKiBAZGVmYXVsdCAzXG4gICAqL1xuICByZWFkb25seSByZWFkaW5lc3NGYWlsdXJlVGhyZXNob2xkPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgbGl2ZW5lc3MgcHJvYmUgZm9yIHRoZSBjb250YWluZXIuXG4gICAqIExpdmVuZXNzIHByb2JlcyBkZXRlcm1pbmUgd2hlbiB0byByZXN0YXJ0IGEgY29udGFpbmVyLlxuICAgKiBSZWNvbW1lbmRlZDogdHJ1ZSBmb3IgZnJvbnRlbmQsIGZhbHNlIGZvciBiYWNrZW5kIChab3BlIGhhcyBpdHMgb3duIHJlY292ZXJ5KS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxpdmVuZXNzRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiBzZWNvbmRzIGFmdGVyIGNvbnRhaW5lciBzdGFydCBiZWZvcmUgbGl2ZW5lc3MgcHJvYmUgaXMgaW5pdGlhdGVkLlxuICAgKiBAZGVmYXVsdCAzMFxuICAgKi9cbiAgcmVhZG9ubHkgbGl2ZW5lc3NJbml0aWFsRGVsYXlTZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygc2Vjb25kcyBhZnRlciB3aGljaCB0aGUgbGl2ZW5lc3MgcHJvYmUgdGltZXMgb3V0LlxuICAgKiBAZGVmYXVsdCA1XG4gICAqL1xuICByZWFkb25seSBsaXZlbmVzc1RpbWVvdXRTZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBIb3cgb2Z0ZW4gKGluIHNlY29uZHMpIHRvIHBlcmZvcm0gdGhlIGxpdmVuZXNzIHByb2JlLlxuICAgKiBAZGVmYXVsdCAxMFxuICAgKi9cbiAgcmVhZG9ubHkgbGl2ZW5lc3NQZXJpb2RTZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBNaW5pbXVtIGNvbnNlY3V0aXZlIHN1Y2Nlc3NlcyBmb3IgdGhlIGxpdmVuZXNzIHByb2JlIHRvIGJlIGNvbnNpZGVyZWQgc3VjY2Vzc2Z1bC5cbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgcmVhZG9ubHkgbGl2ZW5lc3NTdWNjZXNzVGhyZXNob2xkPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBNaW5pbXVtIGNvbnNlY3V0aXZlIGZhaWx1cmVzIGZvciB0aGUgbGl2ZW5lc3MgcHJvYmUgdG8gYmUgY29uc2lkZXJlZCBmYWlsZWQuXG4gICAqIEBkZWZhdWx0IDNcbiAgICovXG4gIHJlYWRvbmx5IGxpdmVuZXNzRmFpbHVyZVRocmVzaG9sZD86IG51bWJlcjtcblxuICAvKipcbiAgICogQW5ub3RhdGlvbnMgdG8gYWRkIHRvIHRoZSBEZXBsb3ltZW50IG1ldGFkYXRhLlxuICAgKiBAZXhhbXBsZSB7ICdkZXBsb3ltZW50Lmt1YmVybmV0ZXMuaW8vcmV2aXNpb24nOiAnMScgfVxuICAgKiBAZGVmYXVsdCAtIG5vIGFkZGl0aW9uYWwgYW5ub3RhdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGFubm90YXRpb25zPzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIEFubm90YXRpb25zIHRvIGFkZCB0byB0aGUgUG9kIHRlbXBsYXRlIG1ldGFkYXRhLlxuICAgKiBDb21tb24gZm9yIFByb21ldGhldXMsIElzdGlvLCBiYWNrdXAgcG9saWNpZXMsIGV0Yy5cbiAgICogQGV4YW1wbGUgeyAncHJvbWV0aGV1cy5pby9zY3JhcGUnOiAndHJ1ZScsICdwcm9tZXRoZXVzLmlvL3BvcnQnOiAnODA4MCcgfVxuICAgKiBAZGVmYXVsdCAtIG5vIGFkZGl0aW9uYWwgYW5ub3RhdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IHBvZEFubm90YXRpb25zPzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIEFubm90YXRpb25zIHRvIGFkZCB0byB0aGUgU2VydmljZSBtZXRhZGF0YS5cbiAgICogQ29tbW9uIGZvciBleHRlcm5hbC1kbnMsIGxvYWQgYmFsYW5jZXJzLCBzZXJ2aWNlIG1lc2gsIGV0Yy5cbiAgICogQGV4YW1wbGUgeyAnZXh0ZXJuYWwtZG5zLmFscGhhLmt1YmVybmV0ZXMuaW8vaG9zdG5hbWUnOiAncGxvbmUuZXhhbXBsZS5jb20nIH1cbiAgICogQGRlcHJlY2F0ZWQgdXNlIGBzZXJ2aWNlLmFubm90YXRpb25zYCBpbnN0ZWFkXG4gICAqIEBkZWZhdWx0IC0gbm8gYWRkaXRpb25hbCBhbm5vdGF0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZUFubm90YXRpb25zPzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIFNlcnZpY2UgY29uZmlndXJhdGlvbjogdHlwZSwgdHJhZmZpY0Rpc3RyaWJ1dGlvbiwgc2Vzc2lvbkFmZmluaXR5LFxuICAgKiBhbm5vdGF0aW9ucy9sYWJlbHMsIGFuZCBhIHJhdyBgb3ZlcnJpZGVzYCBlc2NhcGUgaGF0Y2ggZm9yIGFueSBvdGhlclxuICAgKiBTZXJ2aWNlU3BlYyBmaWVsZC4gQXBwbGllcyB0byB0aGlzIGNvbXBvbmVudCdzIFNlcnZpY2UuXG4gICAqIEBleGFtcGxlIHsgdHlwZTogJ0xvYWRCYWxhbmNlcicsIHRyYWZmaWNEaXN0cmlidXRpb246ICdQcmVmZXJDbG9zZScgfVxuICAgKiBAZGVmYXVsdCAtIGNvbnN0cnVjdC1tYW5hZ2VkIGRlZmF1bHRzIG9ubHlcbiAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2U/OiBQbG9uZVNlcnZpY2VTcGVjO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgUHJvbWV0aGV1cyBTZXJ2aWNlTW9uaXRvciBmb3IgbWV0cmljcyBjb2xsZWN0aW9uLlxuICAgKiBSZXF1aXJlcyBQcm9tZXRoZXVzIE9wZXJhdG9yIHRvIGJlIGluc3RhbGxlZCBpbiB0aGUgY2x1c3Rlci5cbiAgICogV2hlbiBlbmFibGVkLCBhIFNlcnZpY2VNb25pdG9yIHJlc291cmNlIHdpbGwgYmUgY3JlYXRlZCB0byBzY3JhcGUgbWV0cmljcy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2Vtb25pdG9yPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUG9ydCBuYW1lIG9yIG51bWJlciB0byBzY3JhcGUgbWV0cmljcyBmcm9tLlxuICAgKiBPbmx5IHVzZWQgd2hlbiBzZXJ2aWNlbW9uaXRvciBpcyBlbmFibGVkLlxuICAgKiBAZGVmYXVsdCAtIHVzZXMgdGhlIG1haW4gc2VydmljZSBwb3J0XG4gICAqL1xuICByZWFkb25seSBtZXRyaWNzUG9ydD86IHN0cmluZyB8IG51bWJlcjtcblxuICAvKipcbiAgICogUGF0aCB0byBzY3JhcGUgbWV0cmljcyBmcm9tLlxuICAgKiBPbmx5IHVzZWQgd2hlbiBzZXJ2aWNlbW9uaXRvciBpcyBlbmFibGVkLlxuICAgKiBAZGVmYXVsdCAnL21ldHJpY3MnXG4gICAqL1xuICByZWFkb25seSBtZXRyaWNzUGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogTm9kZSBzZWxlY3RvciBsYWJlbHMgZm9yIHBvZCBzY2hlZHVsaW5nLlxuICAgKiBVc2UgdG8gY29uc3RyYWluIHBvZHMgdG8gbm9kZXMgd2l0aCBtYXRjaGluZyBsYWJlbHMsIGUuZy4gZm9yIHJlZ2lvbiBhZmZpbml0eS5cbiAgICogQGV4YW1wbGUgeyAndG9wb2xvZ3kua3ViZXJuZXRlcy5pby9yZWdpb24nOiAnZnNuMScgfVxuICAgKiBAZGVmYXVsdCAtIG5vIG5vZGUgc2VsZWN0b3JcbiAgICovXG4gIHJlYWRvbmx5IG5vZGVTZWxlY3Rvcj86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIFNlY3VyaXR5IGNvbnRleHQgZm9yIHRoZSBjb250YWluZXIuXG4gICAqIFVzZSB0byBzZXQgY2FwYWJpbGl0aWVzLCBydW4gYXMgbm9uLXJvb3QsIHJlYWQtb25seSBmaWxlc3lzdGVtLCBldGMuXG4gICAqIEBleGFtcGxlIHsgY2FwYWJpbGl0aWVzOiB7IGFkZDogWydTWVNfUFRSQUNFJ10gfSB9XG4gICAqIEBkZWZhdWx0IC0gbm8gc2VjdXJpdHkgY29udGV4dFxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlDb250ZXh0PzogUGxvbmVTZWN1cml0eUNvbnRleHQ7XG59XG4vKipcbiAqIFBsb25lIGRlcGxveW1lbnQgdmFyaWFudHMuXG4gKi9cbmV4cG9ydCBlbnVtIFBsb25lVmFyaWFudCB7XG4gIC8qKlxuICAgKiBWb2x0byB2YXJpYW50OiBSZWFjdEpTIGZyb250ZW5kIChWb2x0bykgd2l0aCBSRVNUIEFQSSBiYWNrZW5kLlxuICAgKiBEZXBsb3lzIGJvdGggZnJvbnRlbmQgYW5kIGJhY2tlbmQgc2VydmljZXMuXG4gICAqL1xuICBWT0xUTyA9ICd2b2x0bycsXG5cbiAgLyoqXG4gICAqIENsYXNzaWMgVUkgdmFyaWFudDogVHJhZGl0aW9uYWwgUGxvbmUgd2l0aCBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuXG4gICAqIERlcGxveXMgb25seSB0aGUgYmFja2VuZCBzZXJ2aWNlLlxuICAgKi9cbiAgQ0xBU1NJQ1VJID0gJ2NsYXNzaWN1aScsXG59XG5cbi8qKlxuICogTWFpbiBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFBsb25lIGRlcGxveW1lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxvbmVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFZlcnNpb24gc3RyaW5nIGZvciBsYWJlbGluZyB0aGUgZGVwbG95bWVudC5cbiAgICogVGhpcyBpcyB1c2VkIGluIEt1YmVybmV0ZXMgbGFiZWxzIGFuZCBkb2Vzbid0IGFmZmVjdCB0aGUgYWN0dWFsIGltYWdlIHZlcnNpb25zLlxuICAgKiBAZGVmYXVsdCAndW5kZWZpbmVkJ1xuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogUGxvbmUgc2l0ZSBJRCBpbiB0aGUgWk9EQi5cbiAgICogVGhpcyBpcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgaW50ZXJuYWwgQVBJIHBhdGggZm9yIFZvbHRvIGZyb250ZW5kLlxuICAgKiBAZGVmYXVsdCAnUGxvbmUnXG4gICAqL1xuICByZWFkb25seSBzaXRlSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBsb25lIGRlcGxveW1lbnQgdmFyaWFudCB0byB1c2UuXG4gICAqIEBkZWZhdWx0IFBsb25lVmFyaWFudC5WT0xUT1xuICAgKi9cbiAgcmVhZG9ubHkgdmFyaWFudD86IFBsb25lVmFyaWFudDtcblxuICAvKipcbiAgICogQmFja2VuZCAoUGxvbmUgQVBJKSBjb25maWd1cmF0aW9uLlxuICAgKiBAZGVmYXVsdCB7fSAodXNlcyBkZWZhdWx0IHZhbHVlcyBmcm9tIFBsb25lQmFzZU9wdGlvbnMpXG4gICAqL1xuICByZWFkb25seSBiYWNrZW5kPzogUGxvbmVCYXNlT3B0aW9ucztcblxuICAvKipcbiAgICogRnJvbnRlbmQgKFZvbHRvKSBjb25maWd1cmF0aW9uLlxuICAgKiBPbmx5IHVzZWQgd2hlbiB2YXJpYW50IGlzIFBsb25lVmFyaWFudC5WT0xUTy5cbiAgICogQGRlZmF1bHQge30gKHVzZXMgZGVmYXVsdCB2YWx1ZXMgZnJvbSBQbG9uZUJhc2VPcHRpb25zKVxuICAgKi9cbiAgcmVhZG9ubHkgZnJvbnRlbmQ/OiBQbG9uZUJhc2VPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBOYW1lcyBvZiBLdWJlcm5ldGVzIHNlY3JldHMgdG8gdXNlIGZvciBwdWxsaW5nIHByaXZhdGUgY29udGFpbmVyIGltYWdlcy5cbiAgICogVGhlc2Ugc2VjcmV0cyBtdXN0IGV4aXN0IGluIHRoZSBzYW1lIG5hbWVzcGFjZSBhcyB0aGUgZGVwbG95bWVudC5cbiAgICogQGV4YW1wbGUgWydteS1yZWdpc3RyeS1zZWNyZXQnXVxuICAgKiBAZGVmYXVsdCBbXSAobm8gaW1hZ2UgcHVsbCBzZWNyZXRzKVxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VQdWxsU2VjcmV0cz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFBsb25lIGNvbnN0cnVjdCBmb3IgZGVwbG95aW5nIFBsb25lIENNUyB0byBLdWJlcm5ldGVzLlxuICpcbiAqIFRoaXMgY29uc3RydWN0IGNyZWF0ZXMgYWxsIG5lY2Vzc2FyeSBLdWJlcm5ldGVzIHJlc291cmNlcyBmb3IgcnVubmluZyBQbG9uZTpcbiAqIC0gRGVwbG95bWVudChzKSBmb3IgYmFja2VuZCAoYW5kIG9wdGlvbmFsbHkgZnJvbnRlbmQpXG4gKiAtIFNlcnZpY2UocykgZm9yIG5ldHdvcmsgYWNjZXNzXG4gKiAtIE9wdGlvbmFsIFBvZERpc3J1cHRpb25CdWRnZXQgZm9yIGhpZ2ggYXZhaWxhYmlsaXR5XG4gKlxuICogU3VwcG9ydHMgdHdvIGRlcGxveW1lbnQgdmFyaWFudHM6XG4gKiAtIFZPTFRPOiBNb2Rlcm4gUmVhY3QgZnJvbnRlbmQgd2l0aCBSRVNUIEFQSSBiYWNrZW5kIChkZWZhdWx0KVxuICogLSBDTEFTU0lDVUk6IFRyYWRpdGlvbmFsIHNlcnZlci1zaWRlIHJlbmRlcmVkIFBsb25lXG4gKlxuICogQGV4YW1wbGVcbiAqIG5ldyBQbG9uZShjaGFydCwgJ215LXBsb25lJywge1xuICogICB2YXJpYW50OiBQbG9uZVZhcmlhbnQuVk9MVE8sXG4gKiAgIGJhY2tlbmQ6IHtcbiAqICAgICBpbWFnZTogJ3Bsb25lL3Bsb25lLWJhY2tlbmQ6Ni4wLjEwJyxcbiAqICAgICByZXBsaWNhczogMyxcbiAqICAgfSxcbiAqICAgZnJvbnRlbmQ6IHtcbiAqICAgICBpbWFnZTogJ3Bsb25lL3Bsb25lLWZyb250ZW5kOjE2LjAuMCcsXG4gKiAgIH0sXG4gKiB9KTtcbiAqL1xuZXhwb3J0IGNsYXNzIFBsb25lIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIGJhY2tlbmQgS3ViZXJuZXRlcyBzZXJ2aWNlLlxuICAgKiBVc2UgdGhpcyB0byByZWZlcmVuY2UgdGhlIGJhY2tlbmQgc2VydmljZSBmcm9tIG90aGVyIGNvbnN0cnVjdHMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYmFja2VuZFNlcnZpY2VOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIGZyb250ZW5kIEt1YmVybmV0ZXMgc2VydmljZS5cbiAgICogT25seSBzZXQgd2hlbiB2YXJpYW50IGlzIFZPTFRPLCBvdGhlcndpc2UgdW5kZWZpbmVkLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGZyb250ZW5kU2VydmljZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGRlcGxveW1lbnQgdmFyaWFudCBiZWluZyB1c2VkIChWT0xUTyBvciBDTEFTU0lDVUkpLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhcmlhbnQ6IFBsb25lVmFyaWFudDtcblxuICAvKipcbiAgICogVGhlIFBsb25lIHNpdGUgSUQgaW4gWk9EQi5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzaXRlSWQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBvcHRpb25zOiBQbG9uZU9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5mcm9udGVuZFNlcnZpY2VOYW1lID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuc2l0ZUlkID0gb3B0aW9ucy5zaXRlSWQgPz8gJ1Bsb25lJztcbiAgICB0aGlzLnZhcmlhbnQgPSBvcHRpb25zLnZhcmlhbnQgPz8gUGxvbmVWYXJpYW50LlZPTFRPO1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQmFja2VuZFxuICAgIGNvbnN0IGJhY2tlbmQgPSBvcHRpb25zLmJhY2tlbmQgPz8ge307XG4gICAgY29uc3QgYmFja2VuZExhYmVscyA9IHtcbiAgICAgICdhcHAua3ViZXJuZXRlcy5pby9uYW1lJzogJ3Bsb25lLWJhY2tlbmQnLFxuICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL2NvbXBvbmVudCc6ICdiYWNrZW5kJyxcbiAgICAgICdhcHAua3ViZXJuZXRlcy5pby92ZXJzaW9uJzogb3B0aW9ucy52ZXJzaW9uID8/ICd1bmRlZmluZWQnLFxuICAgIH07XG4gICAgY29uc3QgYmFja2VuZFBvcnQgPSA4MDgwO1xuXG4gICAgLy8gT3B0aW9uc1xuICAgIHZhciBiYWNrZW5kT3B0aW9uczogUGxvbmVEZXBsb3ltZW50T3B0aW9ucyA9IHtcbiAgICAgIGxhYmVsczogYmFja2VuZExhYmVscyxcbiAgICAgIGltYWdlOiB7XG4gICAgICAgIGltYWdlOiBiYWNrZW5kLmltYWdlID8/ICdwbG9uZS9wbG9uZS1iYWNrZW5kOmxhdGVzdCcsXG4gICAgICAgIGltYWdlUHVsbFNlY3JldHM6IG9wdGlvbnMuaW1hZ2VQdWxsU2VjcmV0cyA/PyBbXSxcbiAgICAgICAgaW1hZ2VQdWxsUG9saWN5OiBiYWNrZW5kLmltYWdlUHVsbFBvbGljeSA/PyAnSWZOb3RQcmVzZW50JyxcbiAgICAgIH0sXG4gICAgICByZXBsaWNhczogYmFja2VuZC5yZXBsaWNhcyxcbiAgICAgIGxpbWl0Q3B1OiBiYWNrZW5kLmxpbWl0Q3B1ID8/ICc1MDBtJyxcbiAgICAgIGxpbWl0TWVtb3J5OiBiYWNrZW5kLmxpbWl0TWVtb3J5ID8/ICc1MTJNaScsXG4gICAgICByZXF1ZXN0Q3B1OiBiYWNrZW5kLnJlcXVlc3RDcHUgPz8gJzIwMG0nLFxuICAgICAgcmVxdWVzdE1lbW9yeTogYmFja2VuZC5yZXF1ZXN0TWVtb3J5ID8/ICcyNTZNaScsXG4gICAgICBwZGI6IHtcbiAgICAgICAgbWF4VW5hdmFpbGFibGU6IGJhY2tlbmQubWF4VW5hdmFpbGFibGUgPz8gdW5kZWZpbmVkLFxuICAgICAgICBtaW5BdmFpbGFibGU6IGJhY2tlbmQubWluQXZhaWxhYmxlID8/IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgICBwb3J0OiBiYWNrZW5kUG9ydCxcbiAgICAgIGVudmlyb25tZW50OiBiYWNrZW5kLmVudmlyb25tZW50LFxuICAgICAgYW5ub3RhdGlvbnM6IGJhY2tlbmQuYW5ub3RhdGlvbnMsXG4gICAgICBwb2RBbm5vdGF0aW9uczogYmFja2VuZC5wb2RBbm5vdGF0aW9ucyxcbiAgICAgIG5vZGVTZWxlY3RvcjogYmFja2VuZC5ub2RlU2VsZWN0b3IsXG4gICAgICBzZWN1cml0eUNvbnRleHQ6IGJhY2tlbmQuc2VjdXJpdHlDb250ZXh0IGFzIGs4cy5TZWN1cml0eUNvbnRleHQsXG4gICAgfTtcblxuICAgIC8vIFByb2JpbmdcbiAgICBjb25zdCBiYWNrZW5kQWN0aW9uSHR0cEdldDogazhzLkh0dHBHZXRBY3Rpb24gPSB7XG4gICAgICBwYXRoOiAnLycsXG4gICAgICBwb3J0OiBJbnRPclN0cmluZy5mcm9tTnVtYmVyKGJhY2tlbmRQb3J0KSxcbiAgICB9O1xuICAgIGlmIChiYWNrZW5kLmxpdmVuZXNzRW5hYmxlZCA/PyBmYWxzZSkge1xuICAgICAgYmFja2VuZE9wdGlvbnMubGl2ZW5lc3NQcm9iZSA9IHtcbiAgICAgICAgaHR0cEdldDogYmFja2VuZEFjdGlvbkh0dHBHZXQsXG4gICAgICAgIGluaXRpYWxEZWxheVNlY29uZHM6IGJhY2tlbmQubGl2ZW5lc3NJbml0aWFsRGVsYXlTZWNvbmRzID8/IDMwLFxuICAgICAgICB0aW1lb3V0U2Vjb25kczogYmFja2VuZC5saXZlbmVzc1RpbWVvdXRTZWNvbmRzID8/IDUsXG4gICAgICAgIHBlcmlvZFNlY29uZHM6IGJhY2tlbmQubGl2ZW5lc3NQZXJpb2RTZWNvbmRzID8/IDEwLFxuICAgICAgICBzdWNjZXNzVGhyZXNob2xkOiBiYWNrZW5kLmxpdmVuZXNzU3VjY2Vzc1RocmVzaG9sZCA/PyAxLFxuICAgICAgICBmYWlsdXJlVGhyZXNob2xkOiBiYWNrZW5kLmxpdmVuZXNzRmFpbHVyZVRocmVzaG9sZCA/PyAzLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGJhY2tlbmQucmVhZGluZXNzRW5hYmxlZCA/PyB0cnVlKSB7XG4gICAgICBiYWNrZW5kT3B0aW9ucy5yZWFkaW5lc3NQcm9iZSA9IHtcbiAgICAgICAgaHR0cEdldDogYmFja2VuZEFjdGlvbkh0dHBHZXQsXG4gICAgICAgIGluaXRpYWxEZWxheVNlY29uZHM6IGJhY2tlbmQucmVhZGluZXNzSW5pdGlhbERlbGF5U2Vjb25kcyA/PyAxMCxcbiAgICAgICAgdGltZW91dFNlY29uZHM6IGJhY2tlbmQucmVhZGluZXNzVGltZW91dFNlY29uZHMgPz8gMTUsXG4gICAgICAgIHBlcmlvZFNlY29uZHM6IGJhY2tlbmQucmVhZGluZXNzUGVyaW9kU2Vjb25kcyA/PyAxMCxcbiAgICAgICAgc3VjY2Vzc1RocmVzaG9sZDogYmFja2VuZC5yZWFkaW5lc3NTdWNjZXNzVGhyZXNob2xkID8/IDEsXG4gICAgICAgIGZhaWx1cmVUaHJlc2hvbGQ6IGJhY2tlbmQucmVhZGluZXNzRmFpbHVyZVRocmVzaG9sZCA/PyAzLFxuICAgICAgfTtcbiAgICB9XG4gICAgLy8gRGVwbG95bWVudFxuICAgIHZhciBiYWNrZW5kRGVwbG95bWVudCA9IG5ldyBQbG9uZURlcGxveW1lbnQodGhpcywgJ2JhY2tlbmQnLCBiYWNrZW5kT3B0aW9ucyk7XG5cbiAgICAvLyBTZXJ2aWNlXG4gICAgY29uc3QgYmFja2VuZFNlcnZpY2UgPSBuZXcgUGxvbmVTZXJ2aWNlKGJhY2tlbmREZXBsb3ltZW50LCAnc2VydmljZScsIHtcbiAgICAgIGxhYmVsczoge1xuICAgICAgICAnYXBwLmt1YmVybmV0ZXMuaW8vbmFtZSc6ICdwbG9uZS1iYWNrZW5kLXNlcnZpY2UnLFxuICAgICAgICAnYXBwLmt1YmVybmV0ZXMuaW8vY29tcG9uZW50JzogJ3NlcnZpY2UnLFxuICAgICAgfSxcbiAgICAgIHRhcmdldFBvcnQ6IGJhY2tlbmRQb3J0LFxuICAgICAgc2VsZWN0b3JMYWJlbDogeyBhcHA6IE5hbWVzLnRvTGFiZWxWYWx1ZShiYWNrZW5kRGVwbG95bWVudCkgfSxcbiAgICAgIHBvcnROYW1lOiAnYmFja2VuZC1odHRwJyxcbiAgICAgIHNwZWM6IHtcbiAgICAgICAgLi4uYmFja2VuZC5zZXJ2aWNlLFxuICAgICAgICBhbm5vdGF0aW9uczogeyAuLi5iYWNrZW5kLnNlcnZpY2VBbm5vdGF0aW9ucywgLi4uYmFja2VuZC5zZXJ2aWNlPy5hbm5vdGF0aW9ucyB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLmJhY2tlbmRTZXJ2aWNlTmFtZSA9IGJhY2tlbmRTZXJ2aWNlLm5hbWU7XG5cbiAgICAvLyBTZXJ2aWNlTW9uaXRvciBmb3IgYmFja2VuZFxuICAgIGlmIChiYWNrZW5kLnNlcnZpY2Vtb25pdG9yKSB7XG4gICAgICB0aGlzLmNyZWF0ZVNlcnZpY2VNb25pdG9yKGJhY2tlbmRTZXJ2aWNlLCAnYmFja2VuZCcsIHtcbiAgICAgICAgcG9ydDogYmFja2VuZC5tZXRyaWNzUG9ydCA/PyAnYmFja2VuZC1odHRwJyxcbiAgICAgICAgcGF0aDogYmFja2VuZC5tZXRyaWNzUGF0aCA/PyAnL21ldHJpY3MnLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gRnJvbnRlbmRcbiAgICBpZiAodGhpcy52YXJpYW50ID09IFBsb25lVmFyaWFudC5WT0xUTykge1xuICAgICAgY29uc3QgZnJvbnRlbmQgPSBvcHRpb25zLmZyb250ZW5kID8/IHt9O1xuICAgICAgY29uc3QgZnJvbnRlbmRQb3J0ID0gMzAwMDtcbiAgICAgIGNvbnN0IGZyb250ZW5kTGFiZWxzID0ge1xuICAgICAgICAnYXBwLmt1YmVybmV0ZXMuaW8vbmFtZSc6ICdwbG9uZS1mcm9udGVuZCcsXG4gICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnQnOiAnZnJvbnRlbmQnLFxuICAgICAgICAnYXBwLmt1YmVybmV0ZXMuaW8vdmVyc2lvbic6IG9wdGlvbnMudmVyc2lvbiA/PyAndW5kZWZpbmVkJyxcbiAgICAgIH07XG5cbiAgICAgIC8vIEVudmlyb25tZW50IGZvciBSQVpaTEVcbiAgICAgIHZhciBmcm9udGVuZEVudmlyb25tZW50ID0gZnJvbnRlbmQuZW52aXJvbm1lbnQgPz8gbmV3IGtwbHVzLkVudihbXSwge30pO1xuICAgICAgaWYgKGZyb250ZW5kRW52aXJvbm1lbnQudmFyaWFibGVzLlJBWlpMRV9JTlRFUk5BTF9BUElfUEFUSCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIGNvbm5lY3Qgd2l0aCBiYWNrZW5kIHNlcnZpY2VcbiAgICAgICAgZnJvbnRlbmRFbnZpcm9ubWVudD8uYWRkVmFyaWFibGUoJ1JBWlpMRV9JTlRFUk5BTF9BUElfUEFUSCcsIGtwbHVzLkVudlZhbHVlLmZyb21WYWx1ZShgaHR0cDovLyR7YmFja2VuZFNlcnZpY2UubmFtZX06JHtiYWNrZW5kUG9ydH0vJHt0aGlzLnNpdGVJZH1gKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIE9wdGlvbnNcbiAgICAgIHZhciBmcm9udGVuZE9wdGlvbnM6IFBsb25lRGVwbG95bWVudE9wdGlvbnMgPSB7XG4gICAgICAgIGxhYmVsczogZnJvbnRlbmRMYWJlbHMsXG4gICAgICAgIGltYWdlOiB7XG4gICAgICAgICAgaW1hZ2U6IGZyb250ZW5kLmltYWdlID8/ICdwbG9uZS9wbG9uZS1mcm9udGVuZDpsYXRlc3QnLFxuICAgICAgICAgIGltYWdlUHVsbFNlY3JldHM6IG9wdGlvbnMuaW1hZ2VQdWxsU2VjcmV0cyA/PyBbXSxcbiAgICAgICAgICBpbWFnZVB1bGxQb2xpY3k6IGZyb250ZW5kLmltYWdlUHVsbFBvbGljeSA/PyAnSWZOb3RQcmVzZW50JyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVwbGljYXM6IGZyb250ZW5kLnJlcGxpY2FzLFxuICAgICAgICBsaW1pdENwdTogZnJvbnRlbmQubGltaXRDcHUgPz8gJzUwMG0nLFxuICAgICAgICBsaW1pdE1lbW9yeTogZnJvbnRlbmQubGltaXRNZW1vcnkgPz8gJzFHaScsXG4gICAgICAgIHJlcXVlc3RDcHU6IGZyb250ZW5kLnJlcXVlc3RDcHUgPz8gJzIwMG0nLFxuICAgICAgICByZXF1ZXN0TWVtb3J5OiBmcm9udGVuZC5yZXF1ZXN0TWVtb3J5ID8/ICcyNTZNaScsXG5cbiAgICAgICAgcGRiOiB7XG4gICAgICAgICAgbWF4VW5hdmFpbGFibGU6IGZyb250ZW5kLm1heFVuYXZhaWxhYmxlID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICBtaW5BdmFpbGFibGU6IGZyb250ZW5kLm1pbkF2YWlsYWJsZSA/PyB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICAgIHBvcnQ6IGZyb250ZW5kUG9ydCxcbiAgICAgICAgZW52aXJvbm1lbnQ6IGZyb250ZW5kRW52aXJvbm1lbnQsXG4gICAgICAgIGFubm90YXRpb25zOiBmcm9udGVuZC5hbm5vdGF0aW9ucyxcbiAgICAgICAgcG9kQW5ub3RhdGlvbnM6IGZyb250ZW5kLnBvZEFubm90YXRpb25zLFxuICAgICAgICBub2RlU2VsZWN0b3I6IGZyb250ZW5kLm5vZGVTZWxlY3RvcixcbiAgICAgICAgc2VjdXJpdHlDb250ZXh0OiBmcm9udGVuZC5zZWN1cml0eUNvbnRleHQgYXMgazhzLlNlY3VyaXR5Q29udGV4dCxcbiAgICAgIH07XG5cbiAgICAgIC8vIFByb2JpbmdcbiAgICAgIGNvbnN0IGZyb250ZW5kQWN0aW9uSHR0cEdldDogazhzLkh0dHBHZXRBY3Rpb24gPSB7XG4gICAgICAgIHBhdGg6ICcvJyxcbiAgICAgICAgcG9ydDogSW50T3JTdHJpbmcuZnJvbU51bWJlcihmcm9udGVuZFBvcnQpLFxuICAgICAgfTtcbiAgICAgIGlmIChmcm9udGVuZC5saXZlbmVzc0VuYWJsZWQgPz8gZmFsc2UpIHtcbiAgICAgICAgZnJvbnRlbmRPcHRpb25zLmxpdmVuZXNzUHJvYmUgPSB7XG4gICAgICAgICAgaHR0cEdldDogZnJvbnRlbmRBY3Rpb25IdHRwR2V0LFxuICAgICAgICAgIGluaXRpYWxEZWxheVNlY29uZHM6IGZyb250ZW5kLmxpdmVuZXNzSW5pdGlhbERlbGF5U2Vjb25kcyA/PyAzMCxcbiAgICAgICAgICB0aW1lb3V0U2Vjb25kczogZnJvbnRlbmQubGl2ZW5lc3NUaW1lb3V0U2Vjb25kcyA/PyA1LFxuICAgICAgICAgIHBlcmlvZFNlY29uZHM6IGZyb250ZW5kLmxpdmVuZXNzUGVyaW9kU2Vjb25kcyA/PyAxMCxcbiAgICAgICAgICBzdWNjZXNzVGhyZXNob2xkOiBmcm9udGVuZC5saXZlbmVzc1N1Y2Nlc3NUaHJlc2hvbGQgPz8gMSxcbiAgICAgICAgICBmYWlsdXJlVGhyZXNob2xkOiBmcm9udGVuZC5saXZlbmVzc0ZhaWx1cmVUaHJlc2hvbGQgPz8gMyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChmcm9udGVuZC5yZWFkaW5lc3NFbmFibGVkID8/IHRydWUpIHtcbiAgICAgICAgZnJvbnRlbmRPcHRpb25zLnJlYWRpbmVzc1Byb2JlID0ge1xuICAgICAgICAgIGh0dHBHZXQ6IGZyb250ZW5kQWN0aW9uSHR0cEdldCxcbiAgICAgICAgICBpbml0aWFsRGVsYXlTZWNvbmRzOiBmcm9udGVuZC5yZWFkaW5lc3NJbml0aWFsRGVsYXlTZWNvbmRzID8/IDEwLFxuICAgICAgICAgIHRpbWVvdXRTZWNvbmRzOiBmcm9udGVuZC5yZWFkaW5lc3NUaW1lb3V0U2Vjb25kcyA/PyAxNSxcbiAgICAgICAgICBwZXJpb2RTZWNvbmRzOiBmcm9udGVuZC5yZWFkaW5lc3NQZXJpb2RTZWNvbmRzID8/IDEwLFxuICAgICAgICAgIHN1Y2Nlc3NUaHJlc2hvbGQ6IGZyb250ZW5kLnJlYWRpbmVzc1N1Y2Nlc3NUaHJlc2hvbGQgPz8gMSxcbiAgICAgICAgICBmYWlsdXJlVGhyZXNob2xkOiBmcm9udGVuZC5yZWFkaW5lc3NGYWlsdXJlVGhyZXNob2xkID8/IDMsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIERlcGxveW1lbnRcbiAgICAgIGNvbnN0IGZyb250ZW5kRGVwbG95bWVudCA9IG5ldyBQbG9uZURlcGxveW1lbnQodGhpcywgJ2Zyb250ZW5kJywgZnJvbnRlbmRPcHRpb25zKTtcblxuICAgICAgLy8gU2VydmljZVxuICAgICAgY29uc3QgZnJvbnRlbmRTZXJ2aWNlID0gbmV3IFBsb25lU2VydmljZShmcm9udGVuZERlcGxveW1lbnQsICdzZXJ2aWNlJywge1xuICAgICAgICBsYWJlbHM6IHtcbiAgICAgICAgICAnYXBwLmt1YmVybmV0ZXMuaW8vbmFtZSc6ICdwbG9uZS1mcm9udGVuZC1zZXJ2aWNlJyxcbiAgICAgICAgICAnYXBwLmt1YmVybmV0ZXMuaW8vY29tcG9uZW50JzogJ3NlcnZpY2UnLFxuICAgICAgICB9LFxuICAgICAgICB0YXJnZXRQb3J0OiBmcm9udGVuZFBvcnQsXG4gICAgICAgIHNlbGVjdG9yTGFiZWw6IHsgYXBwOiBOYW1lcy50b0xhYmVsVmFsdWUoZnJvbnRlbmREZXBsb3ltZW50KSB9LFxuICAgICAgICBwb3J0TmFtZTogJ2Zyb250ZW5kLWh0dHAnLFxuICAgICAgICBzcGVjOiB7XG4gICAgICAgICAgLi4uZnJvbnRlbmQuc2VydmljZSxcbiAgICAgICAgICBhbm5vdGF0aW9uczogeyAuLi5mcm9udGVuZC5zZXJ2aWNlQW5ub3RhdGlvbnMsIC4uLmZyb250ZW5kLnNlcnZpY2U/LmFubm90YXRpb25zIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZnJvbnRlbmRTZXJ2aWNlTmFtZSA9IGZyb250ZW5kU2VydmljZS5uYW1lO1xuXG4gICAgICAvLyBTZXJ2aWNlTW9uaXRvciBmb3IgZnJvbnRlbmRcbiAgICAgIGlmIChmcm9udGVuZC5zZXJ2aWNlbW9uaXRvcikge1xuICAgICAgICB0aGlzLmNyZWF0ZVNlcnZpY2VNb25pdG9yKGZyb250ZW5kU2VydmljZSwgJ2Zyb250ZW5kJywge1xuICAgICAgICAgIHBvcnQ6IGZyb250ZW5kLm1ldHJpY3NQb3J0ID8/ICdmcm9udGVuZC1odHRwJyxcbiAgICAgICAgICBwYXRoOiBmcm9udGVuZC5tZXRyaWNzUGF0aCA/PyAnL21ldHJpY3MnLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIFByb21ldGhldXMgU2VydmljZU1vbml0b3IgcmVzb3VyY2UgZm9yIHRoZSBnaXZlbiBzZXJ2aWNlLlxuICAgKiBAcGFyYW0gc2VydmljZSBUaGUgUGxvbmVTZXJ2aWNlIHRvIG1vbml0b3JcbiAgICogQHBhcmFtIGlkIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgU2VydmljZU1vbml0b3JcbiAgICogQHBhcmFtIGNvbmZpZyBDb25maWd1cmF0aW9uIGZvciB0aGUgU2VydmljZU1vbml0b3JcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlU2VydmljZU1vbml0b3IoXG4gICAgc2VydmljZTogUGxvbmVTZXJ2aWNlLFxuICAgIGlkOiBzdHJpbmcsXG4gICAgY29uZmlnOiB7IHBvcnQ6IHN0cmluZyB8IG51bWJlcjsgcGF0aDogc3RyaW5nIH0sXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHBvcnROYW1lID0gdHlwZW9mIGNvbmZpZy5wb3J0ID09PSAnc3RyaW5nJyA/IGNvbmZpZy5wb3J0IDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHBvcnROdW1iZXIgPSB0eXBlb2YgY29uZmlnLnBvcnQgPT09ICdudW1iZXInXG4gICAgICA/IFNlcnZpY2VNb25pdG9yU3BlY0VuZHBvaW50c1RhcmdldFBvcnQuZnJvbU51bWJlcihjb25maWcucG9ydClcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgbmV3IFNlcnZpY2VNb25pdG9yKHRoaXMsIGBzZXJ2aWNlbW9uaXRvci0ke2lkfWAsIHtcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIG5hbWU6IGAke3NlcnZpY2UubmFtZX0tbW9uaXRvcmAsXG4gICAgICAgIGxhYmVsczoge1xuICAgICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9uYW1lJzogc2VydmljZS5uYW1lLFxuICAgICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnQnOiAnc2VydmljZW1vbml0b3InLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHNwZWM6IHtcbiAgICAgICAgc2VsZWN0b3I6IHtcbiAgICAgICAgICBtYXRjaExhYmVsczoge1xuICAgICAgICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL25hbWUnOiBzZXJ2aWNlLmxhYmVsc1snYXBwLmt1YmVybmV0ZXMuaW8vbmFtZSddLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGVuZHBvaW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLihwb3J0TmFtZSAmJiB7IHBvcnQ6IHBvcnROYW1lIH0pLFxuICAgICAgICAgICAgLi4uKHBvcnROdW1iZXIgJiYgeyB0YXJnZXRQb3J0OiBwb3J0TnVtYmVyIH0pLFxuICAgICAgICAgICAgcGF0aDogY29uZmlnLnBhdGgsXG4gICAgICAgICAgICBpbnRlcnZhbDogJzMwcycsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn0iXX0=
279
+ Plone[_a] = { fqn: "@bluedynamics/cdk8s-plone.Plone", version: "0.1.42" };
280
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxvbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcGxvbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxpQ0FBOEI7QUFDOUIsdUNBQXVDO0FBQ3ZDLDJDQUF1QztBQUN2Qyw2Q0FBdUU7QUFDdkUsdUNBQTRDO0FBRTVDLDJFQUF3RztBQUN4Ryx1Q0FBMkQ7QUFrUzNEOztHQUVHO0FBQ0gsSUFBWSxZQXFCWDtBQXJCRCxXQUFZLFlBQVk7SUFDdEI7OztPQUdHO0lBQ0gsK0JBQWUsQ0FBQTtJQUVmOzs7T0FHRztJQUNILGlDQUFpQixDQUFBO0lBRWpCOzs7Ozs7T0FNRztJQUNILHVDQUF1QixDQUFBO0FBQ3pCLENBQUMsRUFyQlcsWUFBWSw0QkFBWixZQUFZLFFBcUJ2QjtBQWdERDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSCxNQUFhLEtBQU0sU0FBUSxzQkFBUztJQXVCbEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxVQUF3QixFQUFFO1FBQ2xFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBQztRQUNyQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDO1FBRXJELDJFQUEyRTtRQUMzRSxVQUFVO1FBQ1YsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDdEMsTUFBTSxhQUFhLEdBQUc7WUFDcEIsd0JBQXdCLEVBQUUsZUFBZTtZQUN6Qyw2QkFBNkIsRUFBRSxTQUFTO1lBQ3hDLDJCQUEyQixFQUFFLE9BQU8sQ0FBQyxPQUFPLElBQUksV0FBVztTQUM1RCxDQUFDO1FBQ0YsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFD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Q0FBQztRQUVkLElBQUksc0NBQWMsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxFQUFFO1lBQy9DLFFBQVEsRUFBRTtnQkFDUixJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxVQUFVO2dCQUMvQixNQUFNLEVBQUU7b0JBQ04sd0JBQXdCLEVBQUUsT0FBTyxDQUFDLElBQUk7b0JBQ3RDLDZCQUE2QixFQUFFLGdCQUFnQjtpQkFDaEQ7YUFDRjtZQUNELElBQUksRUFBRTtnQkFDSixRQUFRLEVBQUU7b0JBQ1IsV0FBVyxFQUFFO3dCQUNYLHdCQUF3QixFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUM7cUJBQ25FO2lCQUNGO2dCQUNELFNBQVMsRUFBRTtvQkFDVDt3QkFDRSxHQUFHLENBQUMsUUFBUSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO3dCQUNuQyxHQUFHLENBQUMsVUFBVSxJQUFJLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxDQUFDO3dCQUM3QyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7d0JBQ2pCLFFBQVEsRUFBRSxLQUFLO3FCQUNoQjtpQkFDRjthQUNGO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUEvUEgsc0JBZ1FDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmFtZXMgfSBmcm9tICdjZGs4cyc7XG5pbXBvcnQgKiBhcyBrcGx1cyBmcm9tICdjZGs4cy1wbHVzLTMwJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgUGxvbmVEZXBsb3ltZW50LCBQbG9uZURlcGxveW1lbnRPcHRpb25zIH0gZnJvbSAnLi9kZXBsb3ltZW50JztcbmltcG9ydCB7IEludE9yU3RyaW5nIH0gZnJvbSAnLi9pbXBvcnRzL2s4cyc7XG5pbXBvcnQgKiBhcyBrOHMgZnJvbSAnLi9pbXBvcnRzL2s4cyc7XG5pbXBvcnQgeyBTZXJ2aWNlTW9uaXRvciwgU2VydmljZU1vbml0b3JTcGVjRW5kcG9pbnRzVGFyZ2V0UG9ydCB9IGZyb20gJy4vaW1wb3J0cy9tb25pdG9yaW5nLmNvcmVvcy5jb20nO1xuaW1wb3J0IHsgUGxvbmVTZXJ2aWNlLCBQbG9uZVNlcnZpY2VTcGVjIH0gZnJvbSAnLi9zZXJ2aWNlJztcblxuLyoqXG4gKiBMaW51eCBjYXBhYmlsaXRpZXMgdG8gYWRkIG9yIGRyb3Agb24gYSBjb250YWluZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxvbmVDYXBhYmlsaXRpZXMge1xuICAvKipcbiAgICogQ2FwYWJpbGl0aWVzIHRvIGFkZCAoZS5nLiAnU1lTX1BUUkFDRScsICdORVRfQURNSU4nKS5cbiAgICogQGRlZmF1bHQgLSBubyBjYXBhYmlsaXRpZXMgYWRkZWRcbiAgICovXG4gIHJlYWRvbmx5IGFkZD86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBDYXBhYmlsaXRpZXMgdG8gZHJvcCAoZS5nLiAnQUxMJywgJ05FVF9SQVcnKS5cbiAgICogQGRlZmF1bHQgLSBubyBjYXBhYmlsaXRpZXMgZHJvcHBlZFxuICAgKi9cbiAgcmVhZG9ubHkgZHJvcD86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFNlY3VyaXR5IGNvbnRleHQgZm9yIGEgUGxvbmUgY29udGFpbmVyLlxuICogQ29udHJvbHMgcHJpdmlsZWdlIGFuZCBhY2Nlc3Mgc2V0dGluZ3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxvbmVTZWN1cml0eUNvbnRleHQge1xuICAvKipcbiAgICogTGludXggY2FwYWJpbGl0aWVzIHRvIGFkZCBvciBkcm9wLlxuICAgKiBAZXhhbXBsZSB7IGFkZDogWydTWVNfUFRSQUNFJ10gfVxuICAgKiBAZGVmYXVsdCAtIG5vIGNhcGFiaWxpdHkgY2hhbmdlc1xuICAgKi9cbiAgcmVhZG9ubHkgY2FwYWJpbGl0aWVzPzogUGxvbmVDYXBhYmlsaXRpZXM7XG5cbiAgLyoqXG4gICAqIFJ1biB0aGUgY29udGFpbmVyIGFzIGEgc3BlY2lmaWMgdXNlciBJRC5cbiAgICogQGRlZmF1bHQgLSBjb250YWluZXIgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgcnVuQXNVc2VyPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBSdW4gdGhlIGNvbnRhaW5lciBhcyBhIHNwZWNpZmljIGdyb3VwIElELlxuICAgKiBAZGVmYXVsdCAtIGNvbnRhaW5lciBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBydW5Bc0dyb3VwPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBSZXF1aXJlIHRoZSBjb250YWluZXIgdG8gcnVuIGFzIG5vbi1yb290LlxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgcnVuQXNOb25Sb290PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTW91bnQgdGhlIHJvb3QgZmlsZXN5c3RlbSBhcyByZWFkLW9ubHkuXG4gICAqIEBkZWZhdWx0IC0gdW5kZWZpbmVkXG4gICAqL1xuICByZWFkb25seSByZWFkT25seVJvb3RGaWxlc3lzdGVtPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQWxsb3cgcHJpdmlsZWdlIGVzY2FsYXRpb24gZm9yIHRoZSBjb250YWluZXIgcHJvY2Vzcy5cbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93UHJpdmlsZWdlRXNjYWxhdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJ1biB0aGUgY29udGFpbmVyIGluIHByaXZpbGVnZWQgbW9kZS5cbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IHByaXZpbGVnZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEJhc2Ugb3B0aW9ucyBmb3IgUGxvbmUgYmFja2VuZCBvciBmcm9udGVuZCBjb25maWd1cmF0aW9uLlxuICogVGhlc2Ugb3B0aW9ucyBjb250cm9sIGNvbnRhaW5lciBpbWFnZSwgcmVwbGljYSBjb3VudCwgcmVzb3VyY2UgbGltaXRzLFxuICogZW52aXJvbm1lbnQgdmFyaWFibGVzLCBhbmQgaGVhbHRoIHByb2Jlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbG9uZUJhc2VPcHRpb25zIHtcbiAgLyoqXG4gICAqIENvbnRhaW5lciBpbWFnZSB0byB1c2UgZm9yIHRoZSBkZXBsb3ltZW50LlxuICAgKiBAZXhhbXBsZSAncGxvbmUvcGxvbmUtYmFja2VuZDo2LjAuMTAnIG9yICdwbG9uZS9wbG9uZS1mcm9udGVuZDoxNi4wLjAnXG4gICAqIEBkZWZhdWx0IC0gJ3Bsb25lL3Bsb25lLWJhY2tlbmQ6bGF0ZXN0JyBmb3IgYmFja2VuZCwgJ3Bsb25lL3Bsb25lLWZyb250ZW5kOmxhdGVzdCcgZm9yIGZyb250ZW5kXG4gICAqL1xuICByZWFkb25seSBpbWFnZT86IHN0cmluZztcblxuICAvKipcbiAgICogSW1hZ2UgcHVsbCBwb2xpY3kgZm9yIHRoZSBjb250YWluZXIuXG4gICAqIEBkZWZhdWx0ICdJZk5vdFByZXNlbnQnXG4gICAqL1xuICByZWFkb25seSBpbWFnZVB1bGxQb2xpY3k/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiBwb2QgcmVwbGljYXMgdG8gcnVuLlxuICAgKiBAZGVmYXVsdCAyXG4gICAqL1xuICByZWFkb25seSByZXBsaWNhcz86IG51bWJlcjtcblxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2YgcG9kcyB0aGF0IGNhbiBiZSB1bmF2YWlsYWJsZSBkdXJpbmcgdXBkYXRlcy5cbiAgICogQ2FuIGJlIGFuIGFic29sdXRlIG51bWJlciAoZS5nLiwgMSkgb3IgYSBwZXJjZW50YWdlIChlLmcuLCAnNTAlJykuXG4gICAqIFVzZWQgaW4gUG9kRGlzcnVwdGlvbkJ1ZGdldCBpZiBzcGVjaWZpZWQuXG4gICAqIEBkZWZhdWx0IC0gdW5kZWZpbmVkIChub3Qgc2V0KVxuICAgKi9cbiAgcmVhZG9ubHkgbWF4VW5hdmFpbGFibGU/OiBudW1iZXIgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1pbmltdW0gbnVtYmVyIG9mIHBvZHMgdGhhdCBtdXN0IGJlIGF2YWlsYWJsZSBkdXJpbmcgdXBkYXRlcy5cbiAgICogQ2FuIGJlIGFuIGFic29sdXRlIG51bWJlciAoZS5nLiwgMSkgb3IgYSBwZXJjZW50YWdlIChlLmcuLCAnNTAlJykuXG4gICAqIFVzZWQgaW4gUG9kRGlzcnVwdGlvbkJ1ZGdldCBpZiBzcGVjaWZpZWQuXG4gICAqIEBkZWZhdWx0IC0gdW5kZWZpbmVkIChub3Qgc2V0KVxuICAgKi9cbiAgcmVhZG9ubHkgbWluQXZhaWxhYmxlPzogbnVtYmVyIHwgc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDUFUgbGltaXQgZm9yIHRoZSBjb250YWluZXIuXG4gICAqIEBleGFtcGxlICc1MDBtJyBvciAnMScgb3IgJzIwMDBtJ1xuICAgKiBAZGVmYXVsdCAnNTAwbScgZm9yIGJvdGggYmFja2VuZCBhbmQgZnJvbnRlbmRcbiAgICovXG4gIHJlYWRvbmx5IGxpbWl0Q3B1Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNZW1vcnkgbGltaXQgZm9yIHRoZSBjb250YWluZXIuXG4gICAqIEBleGFtcGxlICc1MTJNaScgb3IgJzFHaSdcbiAgICogQGRlZmF1bHQgJzUxMk1pJyBmb3IgYmFja2VuZCwgJzFHaScgZm9yIGZyb250ZW5kXG4gICAqL1xuICByZWFkb25seSBsaW1pdE1lbW9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogQ1BVIHJlcXVlc3QgZm9yIHRoZSBjb250YWluZXIuXG4gICAqIEBleGFtcGxlICcyMDBtJyBvciAnMC41J1xuICAgKiBAZGVmYXVsdCAnMjAwbSdcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVlc3RDcHU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1lbW9yeSByZXF1ZXN0IGZvciB0aGUgY29udGFpbmVyLlxuICAgKiBAZXhhbXBsZSAnMjU2TWknIG9yICc1MTJNaSdcbiAgICogQGRlZmF1bHQgJzI1Nk1pJ1xuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWVzdE1lbW9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCBpbiB0aGUgY29udGFpbmVyLlxuICAgKiBVc2UgY2RrOHMtcGx1cy0zMCBFbnYgY2xhc3MgdG8gZGVmaW5lIHZhcmlhYmxlcyBhbmQgc291cmNlcy5cbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWQgKG5vIGFkZGl0aW9uYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzKVxuICAgKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ/OiBrcGx1cy5FbnY7XG5cbiAgLyoqXG4gICAqIEVuYWJsZSByZWFkaW5lc3MgcHJvYmUgZm9yIHRoZSBjb250YWluZXIuXG4gICAqIFJlYWRpbmVzcyBwcm9iZXMgZGV0ZXJtaW5lIHdoZW4gYSBjb250YWluZXIgaXMgcmVhZHkgdG8gYWNjZXB0IHRyYWZmaWMuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHJlYWRpbmVzc0VuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygc2Vjb25kcyBhZnRlciBjb250YWluZXIgc3RhcnQgYmVmb3JlIHJlYWRpbmVzcyBwcm9iZSBpcyBpbml0aWF0ZWQuXG4gICAqIEBkZWZhdWx0IDEwXG4gICAqL1xuICByZWFkb25seSByZWFkaW5lc3NJbml0aWFsRGVsYXlTZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygc2Vjb25kcyBhZnRlciB3aGljaCB0aGUgcmVhZGluZXNzIHByb2JlIHRpbWVzIG91dC5cbiAgICogQGRlZmF1bHQgMTVcbiAgICovXG4gIHJlYWRvbmx5IHJlYWRpbmVzc1RpbWVvdXRTZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBIb3cgb2Z0ZW4gKGluIHNlY29uZHMpIHRvIHBlcmZvcm0gdGhlIHJlYWRpbmVzcyBwcm9iZS5cbiAgICogQGRlZmF1bHQgMTBcbiAgICovXG4gIHJlYWRvbmx5IHJlYWRpbmVzc1BlcmlvZFNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE1pbmltdW0gY29uc2VjdXRpdmUgc3VjY2Vzc2VzIGZvciB0aGUgcmVhZGluZXNzIHByb2JlIHRvIGJlIGNvbnNpZGVyZWQgc3VjY2Vzc2Z1bC5cbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgcmVhZG9ubHkgcmVhZGluZXNzU3VjY2Vzc1RocmVzaG9sZD86IG51bWJlcjtcblxuICAvKipcbiAgICogTWluaW11bSBjb25zZWN1dGl2ZSBmYWlsdXJlcyBmb3IgdGhlIHJlYWRpbmVzcyBwcm9iZSB0byBiZSBjb25zaWRlcmVkIGZhaWxlZC5cbiAgICogQGRlZmF1bHQgM1xuICAgKi9cbiAgcmVhZG9ubHkgcmVhZGluZXNzRmFpbHVyZVRocmVzaG9sZD86IG51bWJlcjtcblxuICAvKipcbiAgICogRW5hYmxlIGxpdmVuZXNzIHByb2JlIGZvciB0aGUgY29udGFpbmVyLlxuICAgKiBMaXZlbmVzcyBwcm9iZXMgZGV0ZXJtaW5lIHdoZW4gdG8gcmVzdGFydCBhIGNvbnRhaW5lci5cbiAgICogUmVjb21tZW5kZWQ6IHRydWUgZm9yIGZyb250ZW5kLCBmYWxzZSBmb3IgYmFja2VuZCAoWm9wZSBoYXMgaXRzIG93biByZWNvdmVyeSkuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBsaXZlbmVzc0VuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygc2Vjb25kcyBhZnRlciBjb250YWluZXIgc3RhcnQgYmVmb3JlIGxpdmVuZXNzIHByb2JlIGlzIGluaXRpYXRlZC5cbiAgICogQGRlZmF1bHQgMzBcbiAgICovXG4gIHJlYWRvbmx5IGxpdmVuZXNzSW5pdGlhbERlbGF5U2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogTnVtYmVyIG9mIHNlY29uZHMgYWZ0ZXIgd2hpY2ggdGhlIGxpdmVuZXNzIHByb2JlIHRpbWVzIG91dC5cbiAgICogQGRlZmF1bHQgNVxuICAgKi9cbiAgcmVhZG9ubHkgbGl2ZW5lc3NUaW1lb3V0U2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogSG93IG9mdGVuIChpbiBzZWNvbmRzKSB0byBwZXJmb3JtIHRoZSBsaXZlbmVzcyBwcm9iZS5cbiAgICogQGRlZmF1bHQgMTBcbiAgICovXG4gIHJlYWRvbmx5IGxpdmVuZXNzUGVyaW9kU2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogTWluaW11bSBjb25zZWN1dGl2ZSBzdWNjZXNzZXMgZm9yIHRoZSBsaXZlbmVzcyBwcm9iZSB0byBiZSBjb25zaWRlcmVkIHN1Y2Nlc3NmdWwuXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIHJlYWRvbmx5IGxpdmVuZXNzU3VjY2Vzc1RocmVzaG9sZD86IG51bWJlcjtcblxuICAvKipcbiAgICogTWluaW11bSBjb25zZWN1dGl2ZSBmYWlsdXJlcyBmb3IgdGhlIGxpdmVuZXNzIHByb2JlIHRvIGJlIGNvbnNpZGVyZWQgZmFpbGVkLlxuICAgKiBAZGVmYXVsdCAzXG4gICAqL1xuICByZWFkb25seSBsaXZlbmVzc0ZhaWx1cmVUaHJlc2hvbGQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEFubm90YXRpb25zIHRvIGFkZCB0byB0aGUgRGVwbG95bWVudCBtZXRhZGF0YS5cbiAgICogQGV4YW1wbGUgeyAnZGVwbG95bWVudC5rdWJlcm5ldGVzLmlvL3JldmlzaW9uJzogJzEnIH1cbiAgICogQGRlZmF1bHQgLSBubyBhZGRpdGlvbmFsIGFubm90YXRpb25zXG4gICAqL1xuICByZWFkb25seSBhbm5vdGF0aW9ucz86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBBbm5vdGF0aW9ucyB0byBhZGQgdG8gdGhlIFBvZCB0ZW1wbGF0ZSBtZXRhZGF0YS5cbiAgICogQ29tbW9uIGZvciBQcm9tZXRoZXVzLCBJc3RpbywgYmFja3VwIHBvbGljaWVzLCBldGMuXG4gICAqIEBleGFtcGxlIHsgJ3Byb21ldGhldXMuaW8vc2NyYXBlJzogJ3RydWUnLCAncHJvbWV0aGV1cy5pby9wb3J0JzogJzgwODAnIH1cbiAgICogQGRlZmF1bHQgLSBubyBhZGRpdGlvbmFsIGFubm90YXRpb25zXG4gICAqL1xuICByZWFkb25seSBwb2RBbm5vdGF0aW9ucz86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBBbm5vdGF0aW9ucyB0byBhZGQgdG8gdGhlIFNlcnZpY2UgbWV0YWRhdGEuXG4gICAqIENvbW1vbiBmb3IgZXh0ZXJuYWwtZG5zLCBsb2FkIGJhbGFuY2Vycywgc2VydmljZSBtZXNoLCBldGMuXG4gICAqIEBleGFtcGxlIHsgJ2V4dGVybmFsLWRucy5hbHBoYS5rdWJlcm5ldGVzLmlvL2hvc3RuYW1lJzogJ3Bsb25lLmV4YW1wbGUuY29tJyB9XG4gICAqIEBkZXByZWNhdGVkIHVzZSBgc2VydmljZS5hbm5vdGF0aW9uc2AgaW5zdGVhZFxuICAgKiBAZGVmYXVsdCAtIG5vIGFkZGl0aW9uYWwgYW5ub3RhdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2VBbm5vdGF0aW9ucz86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBTZXJ2aWNlIGNvbmZpZ3VyYXRpb246IHR5cGUsIHRyYWZmaWNEaXN0cmlidXRpb24sIHNlc3Npb25BZmZpbml0eSxcbiAgICogYW5ub3RhdGlvbnMvbGFiZWxzLCBhbmQgYSByYXcgYG92ZXJyaWRlc2AgZXNjYXBlIGhhdGNoIGZvciBhbnkgb3RoZXJcbiAgICogU2VydmljZVNwZWMgZmllbGQuIEFwcGxpZXMgdG8gdGhpcyBjb21wb25lbnQncyBTZXJ2aWNlLlxuICAgKiBAZXhhbXBsZSB7IHR5cGU6ICdMb2FkQmFsYW5jZXInLCB0cmFmZmljRGlzdHJpYnV0aW9uOiAnUHJlZmVyQ2xvc2UnIH1cbiAgICogQGRlZmF1bHQgLSBjb25zdHJ1Y3QtbWFuYWdlZCBkZWZhdWx0cyBvbmx5XG4gICAqL1xuICByZWFkb25seSBzZXJ2aWNlPzogUGxvbmVTZXJ2aWNlU3BlYztcblxuICAvKipcbiAgICogRW5hYmxlIFByb21ldGhldXMgU2VydmljZU1vbml0b3IgZm9yIG1ldHJpY3MgY29sbGVjdGlvbi5cbiAgICogUmVxdWlyZXMgUHJvbWV0aGV1cyBPcGVyYXRvciB0byBiZSBpbnN0YWxsZWQgaW4gdGhlIGNsdXN0ZXIuXG4gICAqIFdoZW4gZW5hYmxlZCwgYSBTZXJ2aWNlTW9uaXRvciByZXNvdXJjZSB3aWxsIGJlIGNyZWF0ZWQgdG8gc2NyYXBlIG1ldHJpY3MuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBzZXJ2aWNlbW9uaXRvcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFBvcnQgbmFtZSBvciBudW1iZXIgdG8gc2NyYXBlIG1ldHJpY3MgZnJvbS5cbiAgICogT25seSB1c2VkIHdoZW4gc2VydmljZW1vbml0b3IgaXMgZW5hYmxlZC5cbiAgICogQGRlZmF1bHQgLSB1c2VzIHRoZSBtYWluIHNlcnZpY2UgcG9ydFxuICAgKi9cbiAgcmVhZG9ubHkgbWV0cmljc1BvcnQ/OiBzdHJpbmcgfCBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gc2NyYXBlIG1ldHJpY3MgZnJvbS5cbiAgICogT25seSB1c2VkIHdoZW4gc2VydmljZW1vbml0b3IgaXMgZW5hYmxlZC5cbiAgICogQGRlZmF1bHQgJy9tZXRyaWNzJ1xuICAgKi9cbiAgcmVhZG9ubHkgbWV0cmljc1BhdGg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5vZGUgc2VsZWN0b3IgbGFiZWxzIGZvciBwb2Qgc2NoZWR1bGluZy5cbiAgICogVXNlIHRvIGNvbnN0cmFpbiBwb2RzIHRvIG5vZGVzIHdpdGggbWF0Y2hpbmcgbGFiZWxzLCBlLmcuIGZvciByZWdpb24gYWZmaW5pdHkuXG4gICAqIEBleGFtcGxlIHsgJ3RvcG9sb2d5Lmt1YmVybmV0ZXMuaW8vcmVnaW9uJzogJ2ZzbjEnIH1cbiAgICogQGRlZmF1bHQgLSBubyBub2RlIHNlbGVjdG9yXG4gICAqL1xuICByZWFkb25seSBub2RlU2VsZWN0b3I/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBTZWN1cml0eSBjb250ZXh0IGZvciB0aGUgY29udGFpbmVyLlxuICAgKiBVc2UgdG8gc2V0IGNhcGFiaWxpdGllcywgcnVuIGFzIG5vbi1yb290LCByZWFkLW9ubHkgZmlsZXN5c3RlbSwgZXRjLlxuICAgKiBAZXhhbXBsZSB7IGNhcGFiaWxpdGllczogeyBhZGQ6IFsnU1lTX1BUUkFDRSddIH0gfVxuICAgKiBAZGVmYXVsdCAtIG5vIHNlY3VyaXR5IGNvbnRleHRcbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5Q29udGV4dD86IFBsb25lU2VjdXJpdHlDb250ZXh0O1xufVxuLyoqXG4gKiBQbG9uZSBkZXBsb3ltZW50IHZhcmlhbnRzLlxuICovXG5leHBvcnQgZW51bSBQbG9uZVZhcmlhbnQge1xuICAvKipcbiAgICogVm9sdG8gdmFyaWFudDogUmVhY3RKUyBzaW5nbGUtcGFnZSBmcm9udGVuZCAoVm9sdG8pIHRhbGtpbmcgdG8gdGhlIFBsb25lIFJFU1QgQVBJLlxuICAgKiBEZXBsb3lzIGJvdGggZnJvbnRlbmQgYW5kIGJhY2tlbmQgc2VydmljZXMuXG4gICAqL1xuICBWT0xUTyA9ICd2b2x0bycsXG5cbiAgLyoqXG4gICAqIEJsaWNjYSB2YXJpYW50OiB0aGUgUGxvbmUgYmFja2VuZCByZW5kZXJzIHRoZSBVSSBzZXJ2ZXItc2lkZSBhbmQgc2VydmVzIHRoZSBIVE1MIGRpcmVjdGx5LlxuICAgKiBEZXBsb3lzIG9ubHkgdGhlIGJhY2tlbmQgc2VydmljZS5cbiAgICovXG4gIEJMSUNDQSA9ICdibGljY2EnLFxuXG4gIC8qKlxuICAgKiBEZXByZWNhdGVkIGFsaWFzIGZvciB0aGUgQmxpY2NhIHZhcmlhbnQgKGZvcm1lcmx5IFwiQ2xhc3NpYyBVSVwiKS5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgUmVuYW1lZCB0byB7QGxpbmsgQkxJQ0NBfS4gS2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhbmQgc2VsZWN0cyB0aGVcbiAgICogc2FtZSBiYWNrZW5kLW9ubHkgZGVwbG95bWVudC4gRXhpc3RpbmcgY29uZmlndXJhdGlvbiB1c2luZyBgQ0xBU1NJQ1VJYCAob3IgdGhlIGxpdGVyYWxcbiAgICogdmFsdWUgYCdjbGFzc2ljdWknYCkga2VlcHMgd29ya2luZyB1bmNoYW5nZWQuIFdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBtYWpvciByZWxlYXNlLlxuICAgKi9cbiAgQ0xBU1NJQ1VJID0gJ2NsYXNzaWN1aScsXG59XG5cbi8qKlxuICogTWFpbiBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFBsb25lIGRlcGxveW1lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxvbmVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFZlcnNpb24gc3RyaW5nIGZvciBsYWJlbGluZyB0aGUgZGVwbG95bWVudC5cbiAgICogVGhpcyBpcyB1c2VkIGluIEt1YmVybmV0ZXMgbGFiZWxzIGFuZCBkb2Vzbid0IGFmZmVjdCB0aGUgYWN0dWFsIGltYWdlIHZlcnNpb25zLlxuICAgKiBAZGVmYXVsdCAndW5kZWZpbmVkJ1xuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogUGxvbmUgc2l0ZSBJRCBpbiB0aGUgWk9EQi5cbiAgICogVGhpcyBpcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgaW50ZXJuYWwgQVBJIHBhdGggZm9yIFZvbHRvIGZyb250ZW5kLlxuICAgKiBAZGVmYXVsdCAnUGxvbmUnXG4gICAqL1xuICByZWFkb25seSBzaXRlSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBsb25lIGRlcGxveW1lbnQgdmFyaWFudCB0byB1c2UuXG4gICAqIEBkZWZhdWx0IFBsb25lVmFyaWFudC5WT0xUT1xuICAgKi9cbiAgcmVhZG9ubHkgdmFyaWFudD86IFBsb25lVmFyaWFudDtcblxuICAvKipcbiAgICogQmFja2VuZCAoUGxvbmUgQVBJKSBjb25maWd1cmF0aW9uLlxuICAgKiBAZGVmYXVsdCB7fSAodXNlcyBkZWZhdWx0IHZhbHVlcyBmcm9tIFBsb25lQmFzZU9wdGlvbnMpXG4gICAqL1xuICByZWFkb25seSBiYWNrZW5kPzogUGxvbmVCYXNlT3B0aW9ucztcblxuICAvKipcbiAgICogRnJvbnRlbmQgKFZvbHRvKSBjb25maWd1cmF0aW9uLlxuICAgKiBPbmx5IHVzZWQgd2hlbiB2YXJpYW50IGlzIFBsb25lVmFyaWFudC5WT0xUTy5cbiAgICogQGRlZmF1bHQge30gKHVzZXMgZGVmYXVsdCB2YWx1ZXMgZnJvbSBQbG9uZUJhc2VPcHRpb25zKVxuICAgKi9cbiAgcmVhZG9ubHkgZnJvbnRlbmQ/OiBQbG9uZUJhc2VPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBOYW1lcyBvZiBLdWJlcm5ldGVzIHNlY3JldHMgdG8gdXNlIGZvciBwdWxsaW5nIHByaXZhdGUgY29udGFpbmVyIGltYWdlcy5cbiAgICogVGhlc2Ugc2VjcmV0cyBtdXN0IGV4aXN0IGluIHRoZSBzYW1lIG5hbWVzcGFjZSBhcyB0aGUgZGVwbG95bWVudC5cbiAgICogQGV4YW1wbGUgWydteS1yZWdpc3RyeS1zZWNyZXQnXVxuICAgKiBAZGVmYXVsdCBbXSAobm8gaW1hZ2UgcHVsbCBzZWNyZXRzKVxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VQdWxsU2VjcmV0cz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFBsb25lIGNvbnN0cnVjdCBmb3IgZGVwbG95aW5nIFBsb25lIENNUyB0byBLdWJlcm5ldGVzLlxuICpcbiAqIFRoaXMgY29uc3RydWN0IGNyZWF0ZXMgYWxsIG5lY2Vzc2FyeSBLdWJlcm5ldGVzIHJlc291cmNlcyBmb3IgcnVubmluZyBQbG9uZTpcbiAqIC0gRGVwbG95bWVudChzKSBmb3IgYmFja2VuZCAoYW5kIG9wdGlvbmFsbHkgZnJvbnRlbmQpXG4gKiAtIFNlcnZpY2UocykgZm9yIG5ldHdvcmsgYWNjZXNzXG4gKiAtIE9wdGlvbmFsIFBvZERpc3J1cHRpb25CdWRnZXQgZm9yIGhpZ2ggYXZhaWxhYmlsaXR5XG4gKlxuICogU3VwcG9ydHMgdHdvIGRlcGxveW1lbnQgdmFyaWFudHM6XG4gKiAtIFZPTFRPOiBSZWFjdCBzaW5nbGUtcGFnZSBmcm9udGVuZCB0YWxraW5nIHRvIHRoZSBSRVNUIEFQSSBiYWNrZW5kIChkZWZhdWx0KVxuICogLSBCTElDQ0E6IHRoZSBQbG9uZSBiYWNrZW5kIHJlbmRlcnMgdGhlIFVJIHNlcnZlci1zaWRlIGFuZCBzZXJ2ZXMgSFRNTCBkaXJlY3RseVxuICpcbiAqIEBleGFtcGxlXG4gKiBuZXcgUGxvbmUoY2hhcnQsICdteS1wbG9uZScsIHtcbiAqICAgdmFyaWFudDogUGxvbmVWYXJpYW50LlZPTFRPLFxuICogICBiYWNrZW5kOiB7XG4gKiAgICAgaW1hZ2U6ICdwbG9uZS9wbG9uZS1iYWNrZW5kOjYuMC4xMCcsXG4gKiAgICAgcmVwbGljYXM6IDMsXG4gKiAgIH0sXG4gKiAgIGZyb250ZW5kOiB7XG4gKiAgICAgaW1hZ2U6ICdwbG9uZS9wbG9uZS1mcm9udGVuZDoxNi4wLjAnLFxuICogICB9LFxuICogfSk7XG4gKi9cbmV4cG9ydCBjbGFzcyBQbG9uZSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBiYWNrZW5kIEt1YmVybmV0ZXMgc2VydmljZS5cbiAgICogVXNlIHRoaXMgdG8gcmVmZXJlbmNlIHRoZSBiYWNrZW5kIHNlcnZpY2UgZnJvbSBvdGhlciBjb25zdHJ1Y3RzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGJhY2tlbmRTZXJ2aWNlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBmcm9udGVuZCBLdWJlcm5ldGVzIHNlcnZpY2UuXG4gICAqIE9ubHkgc2V0IHdoZW4gdmFyaWFudCBpcyBWT0xUTywgb3RoZXJ3aXNlIHVuZGVmaW5lZC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBmcm9udGVuZFNlcnZpY2VOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXBsb3ltZW50IHZhcmlhbnQgYmVpbmcgdXNlZCAoVk9MVE8gb3IgQkxJQ0NBKS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2YXJpYW50OiBQbG9uZVZhcmlhbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBQbG9uZSBzaXRlIElEIGluIFpPREIuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2l0ZUlkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgb3B0aW9uczogUGxvbmVPcHRpb25zID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMuZnJvbnRlbmRTZXJ2aWNlTmFtZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnNpdGVJZCA9IG9wdGlvbnMuc2l0ZUlkID8/ICdQbG9uZSc7XG4gICAgdGhpcy52YXJpYW50ID0gb3B0aW9ucy52YXJpYW50ID8/IFBsb25lVmFyaWFudC5WT0xUTztcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEJhY2tlbmRcbiAgICBjb25zdCBiYWNrZW5kID0gb3B0aW9ucy5iYWNrZW5kID8/IHt9O1xuICAgIGNvbnN0IGJhY2tlbmRMYWJlbHMgPSB7XG4gICAgICAnYXBwLmt1YmVybmV0ZXMuaW8vbmFtZSc6ICdwbG9uZS1iYWNrZW5kJyxcbiAgICAgICdhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnQnOiAnYmFja2VuZCcsXG4gICAgICAnYXBwLmt1YmVybmV0ZXMuaW8vdmVyc2lvbic6IG9wdGlvbnMudmVyc2lvbiA/PyAndW5kZWZpbmVkJyxcbiAgICB9O1xuICAgIGNvbnN0IGJhY2tlbmRQb3J0ID0gODA4MDtcblxuICAgIC8vIE9wdGlvbnNcbiAgICB2YXIgYmFja2VuZE9wdGlvbnM6IFBsb25lRGVwbG95bWVudE9wdGlvbnMgPSB7XG4gICAgICBsYWJlbHM6IGJhY2tlbmRMYWJlbHMsXG4gICAgICBpbWFnZToge1xuICAgICAgICBpbWFnZTogYmFja2VuZC5pbWFnZSA/PyAncGxvbmUvcGxvbmUtYmFja2VuZDpsYXRlc3QnLFxuICAgICAgICBpbWFnZVB1bGxTZWNyZXRzOiBvcHRpb25zLmltYWdlUHVsbFNlY3JldHMgPz8gW10sXG4gICAgICAgIGltYWdlUHVsbFBvbGljeTogYmFja2VuZC5pbWFnZVB1bGxQb2xpY3kgPz8gJ0lmTm90UHJlc2VudCcsXG4gICAgICB9LFxuICAgICAgcmVwbGljYXM6IGJhY2tlbmQucmVwbGljYXMsXG4gICAgICBsaW1pdENwdTogYmFja2VuZC5saW1pdENwdSA/PyAnNTAwbScsXG4gICAgICBsaW1pdE1lbW9yeTogYmFja2VuZC5saW1pdE1lbW9yeSA/PyAnNTEyTWknLFxuICAgICAgcmVxdWVzdENwdTogYmFja2VuZC5yZXF1ZXN0Q3B1ID8/ICcyMDBtJyxcbiAgICAgIHJlcXVlc3RNZW1vcnk6IGJhY2tlbmQucmVxdWVzdE1lbW9yeSA/PyAnMjU2TWknLFxuICAgICAgcGRiOiB7XG4gICAgICAgIG1heFVuYXZhaWxhYmxlOiBiYWNrZW5kLm1heFVuYXZhaWxhYmxlID8/IHVuZGVmaW5lZCxcbiAgICAgICAgbWluQXZhaWxhYmxlOiBiYWNrZW5kLm1pbkF2YWlsYWJsZSA/PyB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICAgcG9ydDogYmFja2VuZFBvcnQsXG4gICAgICBlbnZpcm9ubWVudDogYmFja2VuZC5lbnZpcm9ubWVudCxcbiAgICAgIGFubm90YXRpb25zOiBiYWNrZW5kLmFubm90YXRpb25zLFxuICAgICAgcG9kQW5ub3RhdGlvbnM6IGJhY2tlbmQucG9kQW5ub3RhdGlvbnMsXG4gICAgICBub2RlU2VsZWN0b3I6IGJhY2tlbmQubm9kZVNlbGVjdG9yLFxuICAgICAgc2VjdXJpdHlDb250ZXh0OiBiYWNrZW5kLnNlY3VyaXR5Q29udGV4dCBhcyBrOHMuU2VjdXJpdHlDb250ZXh0LFxuICAgIH07XG5cbiAgICAvLyBQcm9iaW5nXG4gICAgY29uc3QgYmFja2VuZEFjdGlvbkh0dHBHZXQ6IGs4cy5IdHRwR2V0QWN0aW9uID0ge1xuICAgICAgcGF0aDogJy8nLFxuICAgICAgcG9ydDogSW50T3JTdHJpbmcuZnJvbU51bWJlcihiYWNrZW5kUG9ydCksXG4gICAgfTtcbiAgICBpZiAoYmFja2VuZC5saXZlbmVzc0VuYWJsZWQgPz8gZmFsc2UpIHtcbiAgICAgIGJhY2tlbmRPcHRpb25zLmxpdmVuZXNzUHJvYmUgPSB7XG4gICAgICAgIGh0dHBHZXQ6IGJhY2tlbmRBY3Rpb25IdHRwR2V0LFxuICAgICAgICBpbml0aWFsRGVsYXlTZWNvbmRzOiBiYWNrZW5kLmxpdmVuZXNzSW5pdGlhbERlbGF5U2Vjb25kcyA/PyAzMCxcbiAgICAgICAgdGltZW91dFNlY29uZHM6IGJhY2tlbmQubGl2ZW5lc3NUaW1lb3V0U2Vjb25kcyA/PyA1LFxuICAgICAgICBwZXJpb2RTZWNvbmRzOiBiYWNrZW5kLmxpdmVuZXNzUGVyaW9kU2Vjb25kcyA/PyAxMCxcbiAgICAgICAgc3VjY2Vzc1RocmVzaG9sZDogYmFja2VuZC5saXZlbmVzc1N1Y2Nlc3NUaHJlc2hvbGQgPz8gMSxcbiAgICAgICAgZmFpbHVyZVRocmVzaG9sZDogYmFja2VuZC5saXZlbmVzc0ZhaWx1cmVUaHJlc2hvbGQgPz8gMyxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChiYWNrZW5kLnJlYWRpbmVzc0VuYWJsZWQgPz8gdHJ1ZSkge1xuICAgICAgYmFja2VuZE9wdGlvbnMucmVhZGluZXNzUHJvYmUgPSB7XG4gICAgICAgIGh0dHBHZXQ6IGJhY2tlbmRBY3Rpb25IdHRwR2V0LFxuICAgICAgICBpbml0aWFsRGVsYXlTZWNvbmRzOiBiYWNrZW5kLnJlYWRpbmVzc0luaXRpYWxEZWxheVNlY29uZHMgPz8gMTAsXG4gICAgICAgIHRpbWVvdXRTZWNvbmRzOiBiYWNrZW5kLnJlYWRpbmVzc1RpbWVvdXRTZWNvbmRzID8/IDE1LFxuICAgICAgICBwZXJpb2RTZWNvbmRzOiBiYWNrZW5kLnJlYWRpbmVzc1BlcmlvZFNlY29uZHMgPz8gMTAsXG4gICAgICAgIHN1Y2Nlc3NUaHJlc2hvbGQ6IGJhY2tlbmQucmVhZGluZXNzU3VjY2Vzc1RocmVzaG9sZCA/PyAxLFxuICAgICAgICBmYWlsdXJlVGhyZXNob2xkOiBiYWNrZW5kLnJlYWRpbmVzc0ZhaWx1cmVUaHJlc2hvbGQgPz8gMyxcbiAgICAgIH07XG4gICAgfVxuICAgIC8vIERlcGxveW1lbnRcbiAgICB2YXIgYmFja2VuZERlcGxveW1lbnQgPSBuZXcgUGxvbmVEZXBsb3ltZW50KHRoaXMsICdiYWNrZW5kJywgYmFja2VuZE9wdGlvbnMpO1xuXG4gICAgLy8gU2VydmljZVxuICAgIGNvbnN0IGJhY2tlbmRTZXJ2aWNlID0gbmV3IFBsb25lU2VydmljZShiYWNrZW5kRGVwbG95bWVudCwgJ3NlcnZpY2UnLCB7XG4gICAgICBsYWJlbHM6IHtcbiAgICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL25hbWUnOiAncGxvbmUtYmFja2VuZC1zZXJ2aWNlJyxcbiAgICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL2NvbXBvbmVudCc6ICdzZXJ2aWNlJyxcbiAgICAgIH0sXG4gICAgICB0YXJnZXRQb3J0OiBiYWNrZW5kUG9ydCxcbiAgICAgIHNlbGVjdG9yTGFiZWw6IHsgYXBwOiBOYW1lcy50b0xhYmVsVmFsdWUoYmFja2VuZERlcGxveW1lbnQpIH0sXG4gICAgICBwb3J0TmFtZTogJ2JhY2tlbmQtaHR0cCcsXG4gICAgICBzcGVjOiB7XG4gICAgICAgIC4uLmJhY2tlbmQuc2VydmljZSxcbiAgICAgICAgYW5ub3RhdGlvbnM6IHsgLi4uYmFja2VuZC5zZXJ2aWNlQW5ub3RhdGlvbnMsIC4uLmJhY2tlbmQuc2VydmljZT8uYW5ub3RhdGlvbnMgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgdGhpcy5iYWNrZW5kU2VydmljZU5hbWUgPSBiYWNrZW5kU2VydmljZS5uYW1lO1xuXG4gICAgLy8gU2VydmljZU1vbml0b3IgZm9yIGJhY2tlbmRcbiAgICBpZiAoYmFja2VuZC5zZXJ2aWNlbW9uaXRvcikge1xuICAgICAgdGhpcy5jcmVhdGVTZXJ2aWNlTW9uaXRvcihiYWNrZW5kU2VydmljZSwgJ2JhY2tlbmQnLCB7XG4gICAgICAgIHBvcnQ6IGJhY2tlbmQubWV0cmljc1BvcnQgPz8gJ2JhY2tlbmQtaHR0cCcsXG4gICAgICAgIHBhdGg6IGJhY2tlbmQubWV0cmljc1BhdGggPz8gJy9tZXRyaWNzJyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEZyb250ZW5kXG4gICAgaWYgKHRoaXMudmFyaWFudCA9PSBQbG9uZVZhcmlhbnQuVk9MVE8pIHtcbiAgICAgIGNvbnN0IGZyb250ZW5kID0gb3B0aW9ucy5mcm9udGVuZCA/PyB7fTtcbiAgICAgIGNvbnN0IGZyb250ZW5kUG9ydCA9IDMwMDA7XG4gICAgICBjb25zdCBmcm9udGVuZExhYmVscyA9IHtcbiAgICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL25hbWUnOiAncGxvbmUtZnJvbnRlbmQnLFxuICAgICAgICAnYXBwLmt1YmVybmV0ZXMuaW8vY29tcG9uZW50JzogJ2Zyb250ZW5kJyxcbiAgICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL3ZlcnNpb24nOiBvcHRpb25zLnZlcnNpb24gPz8gJ3VuZGVmaW5lZCcsXG4gICAgICB9O1xuXG4gICAgICAvLyBFbnZpcm9ubWVudCBmb3IgUkFaWkxFXG4gICAgICB2YXIgZnJvbnRlbmRFbnZpcm9ubWVudCA9IGZyb250ZW5kLmVudmlyb25tZW50ID8/IG5ldyBrcGx1cy5FbnYoW10sIHt9KTtcbiAgICAgIGlmIChmcm9udGVuZEVudmlyb25tZW50LnZhcmlhYmxlcy5SQVpaTEVfSU5URVJOQUxfQVBJX1BBVEggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBjb25uZWN0IHdpdGggYmFja2VuZCBzZXJ2aWNlXG4gICAgICAgIGZyb250ZW5kRW52aXJvbm1lbnQ/LmFkZFZhcmlhYmxlKCdSQVpaTEVfSU5URVJOQUxfQVBJX1BBVEgnLCBrcGx1cy5FbnZWYWx1ZS5mcm9tVmFsdWUoYGh0dHA6Ly8ke2JhY2tlbmRTZXJ2aWNlLm5hbWV9OiR7YmFja2VuZFBvcnR9LyR7dGhpcy5zaXRlSWR9YCkpO1xuICAgICAgfVxuXG4gICAgICAvLyBPcHRpb25zXG4gICAgICB2YXIgZnJvbnRlbmRPcHRpb25zOiBQbG9uZURlcGxveW1lbnRPcHRpb25zID0ge1xuICAgICAgICBsYWJlbHM6IGZyb250ZW5kTGFiZWxzLFxuICAgICAgICBpbWFnZToge1xuICAgICAgICAgIGltYWdlOiBmcm9udGVuZC5pbWFnZSA/PyAncGxvbmUvcGxvbmUtZnJvbnRlbmQ6bGF0ZXN0JyxcbiAgICAgICAgICBpbWFnZVB1bGxTZWNyZXRzOiBvcHRpb25zLmltYWdlUHVsbFNlY3JldHMgPz8gW10sXG4gICAgICAgICAgaW1hZ2VQdWxsUG9saWN5OiBmcm9udGVuZC5pbWFnZVB1bGxQb2xpY3kgPz8gJ0lmTm90UHJlc2VudCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlcGxpY2FzOiBmcm9udGVuZC5yZXBsaWNhcyxcbiAgICAgICAgbGltaXRDcHU6IGZyb250ZW5kLmxpbWl0Q3B1ID8/ICc1MDBtJyxcbiAgICAgICAgbGltaXRNZW1vcnk6IGZyb250ZW5kLmxpbWl0TWVtb3J5ID8/ICcxR2knLFxuICAgICAgICByZXF1ZXN0Q3B1OiBmcm9udGVuZC5yZXF1ZXN0Q3B1ID8/ICcyMDBtJyxcbiAgICAgICAgcmVxdWVzdE1lbW9yeTogZnJvbnRlbmQucmVxdWVzdE1lbW9yeSA/PyAnMjU2TWknLFxuXG4gICAgICAgIHBkYjoge1xuICAgICAgICAgIG1heFVuYXZhaWxhYmxlOiBmcm9udGVuZC5tYXhVbmF2YWlsYWJsZSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgbWluQXZhaWxhYmxlOiBmcm9udGVuZC5taW5BdmFpbGFibGUgPz8gdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgICBwb3J0OiBmcm9udGVuZFBvcnQsXG4gICAgICAgIGVudmlyb25tZW50OiBmcm9udGVuZEVudmlyb25tZW50LFxuICAgICAgICBhbm5vdGF0aW9uczogZnJvbnRlbmQuYW5ub3RhdGlvbnMsXG4gICAgICAgIHBvZEFubm90YXRpb25zOiBmcm9udGVuZC5wb2RBbm5vdGF0aW9ucyxcbiAgICAgICAgbm9kZVNlbGVjdG9yOiBmcm9udGVuZC5ub2RlU2VsZWN0b3IsXG4gICAgICAgIHNlY3VyaXR5Q29udGV4dDogZnJvbnRlbmQuc2VjdXJpdHlDb250ZXh0IGFzIGs4cy5TZWN1cml0eUNvbnRleHQsXG4gICAgICB9O1xuXG4gICAgICAvLyBQcm9iaW5nXG4gICAgICBjb25zdCBmcm9udGVuZEFjdGlvbkh0dHBHZXQ6IGs4cy5IdHRwR2V0QWN0aW9uID0ge1xuICAgICAgICBwYXRoOiAnLycsXG4gICAgICAgIHBvcnQ6IEludE9yU3RyaW5nLmZyb21OdW1iZXIoZnJvbnRlbmRQb3J0KSxcbiAgICAgIH07XG4gICAgICBpZiAoZnJvbnRlbmQubGl2ZW5lc3NFbmFibGVkID8/IGZhbHNlKSB7XG4gICAgICAgIGZyb250ZW5kT3B0aW9ucy5saXZlbmVzc1Byb2JlID0ge1xuICAgICAgICAgIGh0dHBHZXQ6IGZyb250ZW5kQWN0aW9uSHR0cEdldCxcbiAgICAgICAgICBpbml0aWFsRGVsYXlTZWNvbmRzOiBmcm9udGVuZC5saXZlbmVzc0luaXRpYWxEZWxheVNlY29uZHMgPz8gMzAsXG4gICAgICAgICAgdGltZW91dFNlY29uZHM6IGZyb250ZW5kLmxpdmVuZXNzVGltZW91dFNlY29uZHMgPz8gNSxcbiAgICAgICAgICBwZXJpb2RTZWNvbmRzOiBmcm9udGVuZC5saXZlbmVzc1BlcmlvZFNlY29uZHMgPz8gMTAsXG4gICAgICAgICAgc3VjY2Vzc1RocmVzaG9sZDogZnJvbnRlbmQubGl2ZW5lc3NTdWNjZXNzVGhyZXNob2xkID8/IDEsXG4gICAgICAgICAgZmFpbHVyZVRocmVzaG9sZDogZnJvbnRlbmQubGl2ZW5lc3NGYWlsdXJlVGhyZXNob2xkID8/IDMsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoZnJvbnRlbmQucmVhZGluZXNzRW5hYmxlZCA/PyB0cnVlKSB7XG4gICAgICAgIGZyb250ZW5kT3B0aW9ucy5yZWFkaW5lc3NQcm9iZSA9IHtcbiAgICAgICAgICBodHRwR2V0OiBmcm9udGVuZEFjdGlvbkh0dHBHZXQsXG4gICAgICAgICAgaW5pdGlhbERlbGF5U2Vjb25kczogZnJvbnRlbmQucmVhZGluZXNzSW5pdGlhbERlbGF5U2Vjb25kcyA/PyAxMCxcbiAgICAgICAgICB0aW1lb3V0U2Vjb25kczogZnJvbnRlbmQucmVhZGluZXNzVGltZW91dFNlY29uZHMgPz8gMTUsXG4gICAgICAgICAgcGVyaW9kU2Vjb25kczogZnJvbnRlbmQucmVhZGluZXNzUGVyaW9kU2Vjb25kcyA/PyAxMCxcbiAgICAgICAgICBzdWNjZXNzVGhyZXNob2xkOiBmcm9udGVuZC5yZWFkaW5lc3NTdWNjZXNzVGhyZXNob2xkID8/IDEsXG4gICAgICAgICAgZmFpbHVyZVRocmVzaG9sZDogZnJvbnRlbmQucmVhZGluZXNzRmFpbHVyZVRocmVzaG9sZCA/PyAzLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBEZXBsb3ltZW50XG4gICAgICBjb25zdCBmcm9udGVuZERlcGxveW1lbnQgPSBuZXcgUGxvbmVEZXBsb3ltZW50KHRoaXMsICdmcm9udGVuZCcsIGZyb250ZW5kT3B0aW9ucyk7XG5cbiAgICAgIC8vIFNlcnZpY2VcbiAgICAgIGNvbnN0IGZyb250ZW5kU2VydmljZSA9IG5ldyBQbG9uZVNlcnZpY2UoZnJvbnRlbmREZXBsb3ltZW50LCAnc2VydmljZScsIHtcbiAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL25hbWUnOiAncGxvbmUtZnJvbnRlbmQtc2VydmljZScsXG4gICAgICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL2NvbXBvbmVudCc6ICdzZXJ2aWNlJyxcbiAgICAgICAgfSxcbiAgICAgICAgdGFyZ2V0UG9ydDogZnJvbnRlbmRQb3J0LFxuICAgICAgICBzZWxlY3RvckxhYmVsOiB7IGFwcDogTmFtZXMudG9MYWJlbFZhbHVlKGZyb250ZW5kRGVwbG95bWVudCkgfSxcbiAgICAgICAgcG9ydE5hbWU6ICdmcm9udGVuZC1odHRwJyxcbiAgICAgICAgc3BlYzoge1xuICAgICAgICAgIC4uLmZyb250ZW5kLnNlcnZpY2UsXG4gICAgICAgICAgYW5ub3RhdGlvbnM6IHsgLi4uZnJvbnRlbmQuc2VydmljZUFubm90YXRpb25zLCAuLi5mcm9udGVuZC5zZXJ2aWNlPy5hbm5vdGF0aW9ucyB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICB0aGlzLmZyb250ZW5kU2VydmljZU5hbWUgPSBmcm9udGVuZFNlcnZpY2UubmFtZTtcblxuICAgICAgLy8gU2VydmljZU1vbml0b3IgZm9yIGZyb250ZW5kXG4gICAgICBpZiAoZnJvbnRlbmQuc2VydmljZW1vbml0b3IpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVTZXJ2aWNlTW9uaXRvcihmcm9udGVuZFNlcnZpY2UsICdmcm9udGVuZCcsIHtcbiAgICAgICAgICBwb3J0OiBmcm9udGVuZC5tZXRyaWNzUG9ydCA/PyAnZnJvbnRlbmQtaHR0cCcsXG4gICAgICAgICAgcGF0aDogZnJvbnRlbmQubWV0cmljc1BhdGggPz8gJy9tZXRyaWNzJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBQcm9tZXRoZXVzIFNlcnZpY2VNb25pdG9yIHJlc291cmNlIGZvciB0aGUgZ2l2ZW4gc2VydmljZS5cbiAgICogQHBhcmFtIHNlcnZpY2UgVGhlIFBsb25lU2VydmljZSB0byBtb25pdG9yXG4gICAqIEBwYXJhbSBpZCBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIFNlcnZpY2VNb25pdG9yXG4gICAqIEBwYXJhbSBjb25maWcgQ29uZmlndXJhdGlvbiBmb3IgdGhlIFNlcnZpY2VNb25pdG9yXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZVNlcnZpY2VNb25pdG9yKFxuICAgIHNlcnZpY2U6IFBsb25lU2VydmljZSxcbiAgICBpZDogc3RyaW5nLFxuICAgIGNvbmZpZzogeyBwb3J0OiBzdHJpbmcgfCBudW1iZXI7IHBhdGg6IHN0cmluZyB9LFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBwb3J0TmFtZSA9IHR5cGVvZiBjb25maWcucG9ydCA9PT0gJ3N0cmluZycgPyBjb25maWcucG9ydCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwb3J0TnVtYmVyID0gdHlwZW9mIGNvbmZpZy5wb3J0ID09PSAnbnVtYmVyJ1xuICAgICAgPyBTZXJ2aWNlTW9uaXRvclNwZWNFbmRwb2ludHNUYXJnZXRQb3J0LmZyb21OdW1iZXIoY29uZmlnLnBvcnQpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIG5ldyBTZXJ2aWNlTW9uaXRvcih0aGlzLCBgc2VydmljZW1vbml0b3ItJHtpZH1gLCB7XG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICBuYW1lOiBgJHtzZXJ2aWNlLm5hbWV9LW1vbml0b3JgLFxuICAgICAgICBsYWJlbHM6IHtcbiAgICAgICAgICAnYXBwLmt1YmVybmV0ZXMuaW8vbmFtZSc6IHNlcnZpY2UubmFtZSxcbiAgICAgICAgICAnYXBwLmt1YmVybmV0ZXMuaW8vY29tcG9uZW50JzogJ3NlcnZpY2Vtb25pdG9yJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBzcGVjOiB7XG4gICAgICAgIHNlbGVjdG9yOiB7XG4gICAgICAgICAgbWF0Y2hMYWJlbHM6IHtcbiAgICAgICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9uYW1lJzogc2VydmljZS5sYWJlbHNbJ2FwcC5rdWJlcm5ldGVzLmlvL25hbWUnXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBlbmRwb2ludHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICAuLi4ocG9ydE5hbWUgJiYgeyBwb3J0OiBwb3J0TmFtZSB9KSxcbiAgICAgICAgICAgIC4uLihwb3J0TnVtYmVyICYmIHsgdGFyZ2V0UG9ydDogcG9ydE51bWJlciB9KSxcbiAgICAgICAgICAgIHBhdGg6IGNvbmZpZy5wYXRoLFxuICAgICAgICAgICAgaW50ZXJ2YWw6ICczMHMnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59Il19