@bluedynamics/cdk8s-plone 0.1.40 → 0.1.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +281 -23
- package/API.md +204 -1
- package/docs/superpowers/plans/2026-06-12-configurable-service-spec.md +608 -0
- package/docs/superpowers/specs/2026-06-12-configurable-service-spec-design.md +192 -0
- package/documentation/sources/reference/configuration-options.md +39 -1
- package/lib/httpcache.js +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -1
- package/lib/plone.d.ts +10 -0
- package/lib/plone.js +10 -4
- package/lib/service.d.ts +81 -0
- package/lib/service.js +24 -6
- package/lib/vinylcache.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
# Design: Generisch steuerbare Service-Resourcen
|
|
2
|
+
|
|
3
|
+
**Datum:** 2026-06-12
|
|
4
|
+
**Branch:** `feat/configurable-service-spec`
|
|
5
|
+
**Status:** Approved (Design)
|
|
6
|
+
|
|
7
|
+
## Problem
|
|
8
|
+
|
|
9
|
+
Die von cdk8s-plone generierten Kubernetes-`Service`-Resourcen sind schlecht
|
|
10
|
+
steuerbar. Konkreter Anlass: Es soll `spec.trafficDistribution` gesetzt werden
|
|
11
|
+
können — das geht aktuell nicht. Generell ist die `Service`-Spec faktisch
|
|
12
|
+
hartcodiert: In [`src/service.ts`](../../../src/service.ts) baut `PloneService`
|
|
13
|
+
über das rohe `k8s.KubeService` nur `spec.ports` + `spec.selector`. Alle anderen
|
|
14
|
+
Felder (`type`, `sessionAffinity`, `externalTrafficPolicy`,
|
|
15
|
+
`internalTrafficPolicy`, `publishNotReadyAddresses`, `loadBalancerClass`,
|
|
16
|
+
`trafficDistribution`, …) sind nicht durchgereicht.
|
|
17
|
+
|
|
18
|
+
Zusätzlich ist das Plumbing nicht wartbar: Nach oben (in
|
|
19
|
+
[`src/plone.ts`](../../../src/plone.ts)) wird pro Feld einzeln geplumbt — aktuell
|
|
20
|
+
nur `serviceAnnotations`. Jedes neue Feld bräuchte Änderungen an mehreren Stellen.
|
|
21
|
+
|
|
22
|
+
## Ziel
|
|
23
|
+
|
|
24
|
+
Service-Spec-Felder konfigurierbar machen — möglichst generisch, mit wenig
|
|
25
|
+
Pflegeaufwand pro Feld, JSII-/Python-kompatibel, ohne Breaking Change.
|
|
26
|
+
|
|
27
|
+
## Designentscheidungen (bestätigt)
|
|
28
|
+
|
|
29
|
+
- **Hybrid-Ansatz:** Kuratierte typisierte Props für die häufigen Felder PLUS
|
|
30
|
+
ein generischer Escape-Hatch für alles Übrige.
|
|
31
|
+
- **Gruppiertes Plumbing:** Ein einziges `service`-Objekt in `PloneBaseOptions`
|
|
32
|
+
statt flacher Einzel-Props. Neue Felder ändern nur den Config-Typ.
|
|
33
|
+
- **`overrides`-Präzedenz:** `overrides` darf *alles* überschreiben (auch
|
|
34
|
+
`ports`/`selector`) — volle Kontrolle für Power-User, dokumentiert.
|
|
35
|
+
|
|
36
|
+
## Lösung
|
|
37
|
+
|
|
38
|
+
### 1. Neuer Config-Typ `PloneServiceSpec` (in `src/service.ts`)
|
|
39
|
+
|
|
40
|
+
```typescript
|
|
41
|
+
export interface PloneServiceSpec {
|
|
42
|
+
// Kuratierte, häufig gebrauchte Felder (alle optional, typisiert, dokumentiert):
|
|
43
|
+
readonly type?: string; // ClusterIP | NodePort | LoadBalancer | ExternalName
|
|
44
|
+
readonly trafficDistribution?: string; // z.B. 'PreferClose'
|
|
45
|
+
readonly sessionAffinity?: string; // 'ClientIP' | 'None'
|
|
46
|
+
readonly externalTrafficPolicy?: string; // 'Cluster' | 'Local'
|
|
47
|
+
readonly internalTrafficPolicy?: string; // 'Cluster' | 'Local'
|
|
48
|
+
readonly publishNotReadyAddresses?: boolean;
|
|
49
|
+
readonly loadBalancerClass?: string;
|
|
50
|
+
readonly loadBalancerSourceRanges?: string[];
|
|
51
|
+
readonly annotations?: { [name: string]: string }; // ersetzt serviceAnnotations
|
|
52
|
+
readonly labels?: { [name: string]: string };
|
|
53
|
+
|
|
54
|
+
// Escape-Hatch für alles Übrige (ipFamilyPolicy, clusterIP, ...):
|
|
55
|
+
readonly overrides?: { [key: string]: any };
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Der `overrides`-Typ ist ein freiform-Record `{ [key: string]: any }` — deckt
|
|
60
|
+
jedes aktuelle und künftige k8s-Service-Feld ab, ohne dass Code angefasst werden
|
|
61
|
+
muss.
|
|
62
|
+
|
|
63
|
+
> **JSII-Constraint (entdeckt bei der Umsetzung):** Ursprünglich war
|
|
64
|
+
> `overrides?: k8s.ServiceSpec` geplant. JSII lehnt das ab
|
|
65
|
+
> (`JSII3000: Exported APIs cannot use un-exported type`), weil die generierten
|
|
66
|
+
> Typen aus `src/imports/k8s.ts` nicht Teil der JSII-Assembly sind. Den gesamten
|
|
67
|
+
> k8s-Import zu re-exportieren würde die öffentliche API mit der kompletten
|
|
68
|
+
> Kubernetes-API zumüllen. Ein freiform-Record ist die idiomatische, voll
|
|
69
|
+
> JSII-/Python-fähige (Python: `dict`) Lösung für einen generischen Escape-Hatch
|
|
70
|
+
> und bleibt „für alles" offen. Die kuratierten Felder bleiben typisiert.
|
|
71
|
+
|
|
72
|
+
### 2. `PloneServiceOptions` erweitern
|
|
73
|
+
|
|
74
|
+
`PloneServiceOptions` (das interne Interface von `PloneService`) bekommt ein
|
|
75
|
+
optionales `spec?: PloneServiceSpec`. Die bestehenden Pflichtfelder
|
|
76
|
+
(`targetPort`, `selectorLabel`, `portName`) bleiben unverändert. Das bestehende
|
|
77
|
+
`annotations` und `labels` auf `PloneServiceOptions` bleiben erhalten
|
|
78
|
+
(construct-managed Defaults), werden aber mit den Werten aus `spec` zusammen-
|
|
79
|
+
geführt (siehe Merge-Regeln).
|
|
80
|
+
|
|
81
|
+
### 3. Merge-Reihenfolge in `PloneService`
|
|
82
|
+
|
|
83
|
+
Vorhersagbar, shallow (ServiceSpec-Felder sind weitgehend flach):
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
finalSpec = { ...generatedBase, ...curatedFields, ...overrides }
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Präzedenz steigend:
|
|
90
|
+
|
|
91
|
+
1. **Construct-Basis:** `ports`, `selector` (aus `targetPort`/`portName`/`selectorLabel`).
|
|
92
|
+
2. **Kuratierte Felder:** alle gesetzten Felder aus `spec` (außer `annotations`,
|
|
93
|
+
`labels`, `overrides`).
|
|
94
|
+
3. **`overrides`:** `k8s.ServiceSpec`-Partial — höchste Präzedenz, überschreibt
|
|
95
|
+
auch `ports`/`selector`. Dokumentiert als „at your own risk".
|
|
96
|
+
|
|
97
|
+
`annotations` und `labels` aus `spec` fließen in `metadata` (nicht in `spec`):
|
|
98
|
+
- `metadata.labels = { ...spec.labels, ...constructManagedLabels }`
|
|
99
|
+
(construct-managed `part-of`/`managed-by` gewinnen — wie bisher).
|
|
100
|
+
- `metadata.annotations = { ...serviceAnnotations (deprecated), ...spec.annotations }`
|
|
101
|
+
(neue `spec.annotations` gewinnen bei Konflikt).
|
|
102
|
+
|
|
103
|
+
### 4. Plumbing: ein Punkt in `PloneBaseOptions` (`src/plone.ts`)
|
|
104
|
+
|
|
105
|
+
```typescript
|
|
106
|
+
/**
|
|
107
|
+
* Service configuration (type, trafficDistribution, sessionAffinity,
|
|
108
|
+
* annotations, raw spec overrides, ...). Applies to the component's Service.
|
|
109
|
+
*/
|
|
110
|
+
readonly service?: PloneServiceSpec;
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* @deprecated use `service.annotations` instead
|
|
114
|
+
*/
|
|
115
|
+
readonly serviceAnnotations?: { [name: string]: string };
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
`backend`/`frontend` erben beide aus `PloneBaseOptions`, daher gilt die
|
|
119
|
+
`service`-Config automatisch für beide Services an genau einer Stelle.
|
|
120
|
+
|
|
121
|
+
In `plone.ts` (Backend-Service ~Z. 468, Frontend-Service ~Z. 570) wird
|
|
122
|
+
`spec` durchgereicht und die deprecated `serviceAnnotations` weiter unterstützt:
|
|
123
|
+
|
|
124
|
+
```typescript
|
|
125
|
+
new PloneService(backendDeployment, 'service', {
|
|
126
|
+
// ... unverändert: labels, targetPort, selectorLabel, portName ...
|
|
127
|
+
spec: {
|
|
128
|
+
...backend.service,
|
|
129
|
+
annotations: { ...backend.serviceAnnotations, ...backend.service?.annotations },
|
|
130
|
+
},
|
|
131
|
+
});
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### 5. Backward-Compatibility
|
|
135
|
+
|
|
136
|
+
`serviceAnnotations` bleibt funktionsfähig, wird als `@deprecated` markiert und
|
|
137
|
+
mit `service.annotations` zusammengeführt (neue Variante gewinnt). Kein Breaking
|
|
138
|
+
Change. Bestehende Snapshots ohne `service` bleiben unverändert (alle neuen
|
|
139
|
+
Felder sind optional, ungesetzt → keine Spec-Änderung).
|
|
140
|
+
|
|
141
|
+
### 6. Tests (`test/service.test.ts`)
|
|
142
|
+
|
|
143
|
+
Neue Snapshot-/Assertion-Fälle:
|
|
144
|
+
|
|
145
|
+
- `trafficDistribution: 'PreferClose'` → erscheint in `spec`.
|
|
146
|
+
- `type: 'LoadBalancer'` + `loadBalancerSourceRanges` → erscheinen in `spec`.
|
|
147
|
+
- `sessionAffinity` / `externalTrafficPolicy` gesetzt.
|
|
148
|
+
- `overrides` (z.B. `ipFamilyPolicy`) → erscheint in `spec`.
|
|
149
|
+
- Präzedenz: `overrides` schlägt kuratiertes Feld (z.B. beide setzen `type`,
|
|
150
|
+
`overrides` gewinnt).
|
|
151
|
+
- Backward-Compat: nur `serviceAnnotations` gesetzt → unverändertes Verhalten;
|
|
152
|
+
`serviceAnnotations` + `service.annotations` → korrekt gemergt.
|
|
153
|
+
|
|
154
|
+
Snapshots aktualisieren via `npx projen test -- -u`.
|
|
155
|
+
|
|
156
|
+
### 7. Dokumentation
|
|
157
|
+
|
|
158
|
+
Beim Schreiben/Editieren der Doku den Skill **`plone-doc-style:author`**
|
|
159
|
+
verwenden (Diataxis-Quadranten-Zuordnung, MyST-Markup, Style-Enforcement),
|
|
160
|
+
soweit es sinnvoll ist — d.h. für die handgeschriebenen Seiten unter
|
|
161
|
+
`documentation/sources/` (Reference + How-to). Nicht für auto-generierte
|
|
162
|
+
Artefakte (`API.md`).
|
|
163
|
+
|
|
164
|
+
- **`API.md`** ist auto-generiert (`npx projen docgen`) — kein manuelles Edit,
|
|
165
|
+
aber nach Implementierung neu generieren.
|
|
166
|
+
- **`documentation/sources/reference/configuration-options.md`:** Den Abschnitt
|
|
167
|
+
„Annotations" (~Z. 200) zu einem Abschnitt „Service" erweitern bzw. einen
|
|
168
|
+
neuen Abschnitt für `PloneServiceSpec` ergänzen: Tabelle der kuratierten
|
|
169
|
+
Felder + `overrides`, mit Beispiel (`trafficDistribution`, `LoadBalancer`).
|
|
170
|
+
`serviceAnnotations` als deprecated kennzeichnen und auf `service.annotations`
|
|
171
|
+
verweisen.
|
|
172
|
+
- **`documentation/sources/how-to/`:** In `deploy-production-volto.md` ein
|
|
173
|
+
kurzes Beispiel ergänzen (z.B. `trafficDistribution: 'PreferClose'` für
|
|
174
|
+
topologie-nahes Routing), falls thematisch passend.
|
|
175
|
+
- Doku-Build prüfen: `cd documentation && make docs`.
|
|
176
|
+
|
|
177
|
+
## Betroffene Dateien
|
|
178
|
+
|
|
179
|
+
- `src/service.ts` — neuer `PloneServiceSpec`-Typ, erweiterte `PloneServiceOptions`, Merge-Logik.
|
|
180
|
+
- `src/plone.ts` — `service`-Prop in `PloneBaseOptions`, Plumbing in Backend/Frontend, `serviceAnnotations` deprecaten.
|
|
181
|
+
- `test/service.test.ts` (+ Snapshots) — neue Testfälle.
|
|
182
|
+
- `documentation/sources/reference/configuration-options.md` — Service-Config dokumentieren.
|
|
183
|
+
- `documentation/sources/how-to/deploy-production-volto.md` — optionales Beispiel.
|
|
184
|
+
- `API.md` — regenerieren via `npx projen docgen`.
|
|
185
|
+
|
|
186
|
+
## Nicht im Scope (YAGNI)
|
|
187
|
+
|
|
188
|
+
- Multi-Port-Services (mehrere `ports`-Einträge) — über `overrides` möglich,
|
|
189
|
+
aber kein kuratiertes Feature.
|
|
190
|
+
- Eigene Validierung der Enum-Strings (`type`, `sessionAffinity`, …) — k8s
|
|
191
|
+
validiert serverseitig; wir bilden die Strings 1:1 ab.
|
|
192
|
+
- Separate Service-Configs pro Service jenseits von backend/frontend.
|
|
@@ -212,7 +212,7 @@ frontend: {
|
|
|
212
212
|
|----------|------|-------------|
|
|
213
213
|
| `annotations` | `Record<string, string>` | Deployment metadata annotations |
|
|
214
214
|
| `podAnnotations` | `Record<string, string>` | Pod template annotations (e.g., for Prometheus) |
|
|
215
|
-
| `serviceAnnotations` | `Record<string, string>` | Service annotations (e.g., for external-dns) |
|
|
215
|
+
| `serviceAnnotations` | `Record<string, string>` | **Deprecated.** Use `service.annotations` instead. Service annotations (e.g., for external-dns) |
|
|
216
216
|
|
|
217
217
|
**Example:**
|
|
218
218
|
```typescript
|
|
@@ -228,6 +228,44 @@ backend: {
|
|
|
228
228
|
}
|
|
229
229
|
```
|
|
230
230
|
|
|
231
|
+
#### Service
|
|
232
|
+
|
|
233
|
+
Configure the generated Kubernetes `Service` through the grouped `service` option.
|
|
234
|
+
The `service` option is available on both `backend` and `frontend`.
|
|
235
|
+
Curated fields cover the common cases.
|
|
236
|
+
The `overrides` field is an escape hatch for any other `ServiceSpec` field, and it has the highest precedence.
|
|
237
|
+
|
|
238
|
+
| Property | Type | Description |
|
|
239
|
+
|----------|------|-------------|
|
|
240
|
+
| `service.type` | `string` | Service type: `ClusterIP` (default), `NodePort`, `LoadBalancer`, or `ExternalName` |
|
|
241
|
+
| `service.trafficDistribution` | `string` | Traffic distribution preference, for example `PreferClose` |
|
|
242
|
+
| `service.sessionAffinity` | `string` | Session affinity: `ClientIP` or `None` |
|
|
243
|
+
| `service.externalTrafficPolicy` | `string` | External traffic policy: `Cluster` or `Local` |
|
|
244
|
+
| `service.internalTrafficPolicy` | `string` | Internal traffic policy: `Cluster` or `Local` |
|
|
245
|
+
| `service.publishNotReadyAddresses` | `boolean` | Publish not-ready addresses |
|
|
246
|
+
| `service.loadBalancerClass` | `string` | Load balancer implementation class |
|
|
247
|
+
| `service.loadBalancerSourceRanges` | `string[]` | Allowed source IP ranges for a `LoadBalancer` service |
|
|
248
|
+
| `service.annotations` | `Record<string, string>` | Service metadata annotations (replaces `serviceAnnotations`) |
|
|
249
|
+
| `service.labels` | `Record<string, string>` | Extra Service metadata labels |
|
|
250
|
+
| `service.overrides` | `Record<string, any>` | Raw `ServiceSpec` overrides as a free-form map, with the highest precedence |
|
|
251
|
+
|
|
252
|
+
**Example:**
|
|
253
|
+
```typescript
|
|
254
|
+
backend: {
|
|
255
|
+
service: {
|
|
256
|
+
type: 'LoadBalancer',
|
|
257
|
+
trafficDistribution: 'PreferClose',
|
|
258
|
+
loadBalancerSourceRanges: ['10.0.0.0/8'],
|
|
259
|
+
annotations: {
|
|
260
|
+
'external-dns.alpha.kubernetes.io/hostname': 'backend.example.com',
|
|
261
|
+
},
|
|
262
|
+
overrides: {
|
|
263
|
+
ipFamilyPolicy: 'PreferDualStack',
|
|
264
|
+
},
|
|
265
|
+
},
|
|
266
|
+
}
|
|
267
|
+
```
|
|
268
|
+
|
|
231
269
|
(monitoring)=
|
|
232
270
|
|
|
233
271
|
#### Prometheus monitoring
|
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.
|
|
121
|
+
PloneHttpcache[_a] = { fqn: "@bluedynamics/cdk8s-plone.PloneHttpcache", version: "0.1.41" };
|
|
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/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export { Plone, PloneOptions, PloneBaseOptions, PloneVariant, PloneSecurityContext, PloneCapabilities } from './plone';
|
|
2
|
+
export { PloneServiceSpec } from './service';
|
|
2
3
|
export { PloneHttpcache, PloneHttpcacheOptions, HttpcacheEnvVar, HttpcacheToleration } from './httpcache';
|
|
3
4
|
export { PloneVinylCache, PloneVinylCacheOptions, VinylCacheToleration, VinylCacheBackend, VinylCacheBackendProbe, VinylCacheStorage } from './vinylcache';
|
package/lib/index.js
CHANGED
|
@@ -8,4 +8,4 @@ var httpcache_1 = require("./httpcache");
|
|
|
8
8
|
Object.defineProperty(exports, "PloneHttpcache", { enumerable: true, get: function () { return httpcache_1.PloneHttpcache; } });
|
|
9
9
|
var vinylcache_1 = require("./vinylcache");
|
|
10
10
|
Object.defineProperty(exports, "PloneVinylCache", { enumerable: true, get: function () { return vinylcache_1.PloneVinylCache; } });
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQXVIO0FBQTlHLDhGQUFBLEtBQUssT0FBQTtBQUFrQyxxR0FBQSxZQUFZLE9BQUE7QUFFNUQseUNBQTBHO0FBQWpHLDJHQUFBLGNBQWMsT0FBQTtBQUN2QiwyQ0FBMko7QUFBbEosNkdBQUEsZUFBZSxPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgUGxvbmUsIFBsb25lT3B0aW9ucywgUGxvbmVCYXNlT3B0aW9ucywgUGxvbmVWYXJpYW50LCBQbG9uZVNlY3VyaXR5Q29udGV4dCwgUGxvbmVDYXBhYmlsaXRpZXMgfSBmcm9tICcuL3Bsb25lJztcbmV4cG9ydCB7IFBsb25lU2VydmljZVNwZWMgfSBmcm9tICcuL3NlcnZpY2UnO1xuZXhwb3J0IHsgUGxvbmVIdHRwY2FjaGUsIFBsb25lSHR0cGNhY2hlT3B0aW9ucywgSHR0cGNhY2hlRW52VmFyLCBIdHRwY2FjaGVUb2xlcmF0aW9uIH0gZnJvbSAnLi9odHRwY2FjaGUnO1xuZXhwb3J0IHsgUGxvbmVWaW55bENhY2hlLCBQbG9uZVZpbnlsQ2FjaGVPcHRpb25zLCBWaW55bENhY2hlVG9sZXJhdGlvbiwgVmlueWxDYWNoZUJhY2tlbmQsIFZpbnlsQ2FjaGVCYWNrZW5kUHJvYmUsIFZpbnlsQ2FjaGVTdG9yYWdlIH0gZnJvbSAnLi92aW55bGNhY2hlJztcbiJdfQ==
|
package/lib/plone.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as kplus from 'cdk8s-plus-30';
|
|
2
2
|
import { Construct } from 'constructs';
|
|
3
|
+
import { PloneServiceSpec } from './service';
|
|
3
4
|
/**
|
|
4
5
|
* Linux capabilities to add or drop on a container.
|
|
5
6
|
*/
|
|
@@ -207,11 +208,20 @@ export interface PloneBaseOptions {
|
|
|
207
208
|
* Annotations to add to the Service metadata.
|
|
208
209
|
* Common for external-dns, load balancers, service mesh, etc.
|
|
209
210
|
* @example { 'external-dns.alpha.kubernetes.io/hostname': 'plone.example.com' }
|
|
211
|
+
* @deprecated use `service.annotations` instead
|
|
210
212
|
* @default - no additional annotations
|
|
211
213
|
*/
|
|
212
214
|
readonly serviceAnnotations?: {
|
|
213
215
|
[name: string]: string;
|
|
214
216
|
};
|
|
217
|
+
/**
|
|
218
|
+
* Service configuration: type, trafficDistribution, sessionAffinity,
|
|
219
|
+
* annotations/labels, and a raw `overrides` escape hatch for any other
|
|
220
|
+
* ServiceSpec field. Applies to this component's Service.
|
|
221
|
+
* @example { type: 'LoadBalancer', trafficDistribution: 'PreferClose' }
|
|
222
|
+
* @default - construct-managed defaults only
|
|
223
|
+
*/
|
|
224
|
+
readonly service?: PloneServiceSpec;
|
|
215
225
|
/**
|
|
216
226
|
* Enable Prometheus ServiceMonitor for metrics collection.
|
|
217
227
|
* Requires Prometheus Operator to be installed in the cluster.
|
package/lib/plone.js
CHANGED
|
@@ -125,7 +125,10 @@ class Plone extends constructs_1.Construct {
|
|
|
125
125
|
targetPort: backendPort,
|
|
126
126
|
selectorLabel: { app: cdk8s_1.Names.toLabelValue(backendDeployment) },
|
|
127
127
|
portName: 'backend-http',
|
|
128
|
-
|
|
128
|
+
spec: {
|
|
129
|
+
...backend.service,
|
|
130
|
+
annotations: { ...backend.serviceAnnotations, ...backend.service?.annotations },
|
|
131
|
+
},
|
|
129
132
|
});
|
|
130
133
|
this.backendServiceName = backendService.name;
|
|
131
134
|
// ServiceMonitor for backend
|
|
@@ -211,7 +214,10 @@ class Plone extends constructs_1.Construct {
|
|
|
211
214
|
targetPort: frontendPort,
|
|
212
215
|
selectorLabel: { app: cdk8s_1.Names.toLabelValue(frontendDeployment) },
|
|
213
216
|
portName: 'frontend-http',
|
|
214
|
-
|
|
217
|
+
spec: {
|
|
218
|
+
...frontend.service,
|
|
219
|
+
annotations: { ...frontend.serviceAnnotations, ...frontend.service?.annotations },
|
|
220
|
+
},
|
|
215
221
|
});
|
|
216
222
|
this.frontendServiceName = frontendService.name;
|
|
217
223
|
// ServiceMonitor for frontend
|
|
@@ -262,5 +268,5 @@ class Plone extends constructs_1.Construct {
|
|
|
262
268
|
}
|
|
263
269
|
exports.Plone = Plone;
|
|
264
270
|
_a = JSII_RTTI_SYMBOL_1;
|
|
265
|
-
Plone[_a] = { fqn: "@bluedynamics/cdk8s-plone.Plone", version: "0.1.
|
|
266
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxvbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcGxvbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxpQ0FBOEI7QUFDOUIsdUNBQXVDO0FBQ3ZDLDJDQUF1QztBQUN2Qyw2Q0FBdUU7QUFDdkUsdUNBQTRDO0FBRTVDLDJFQUF3RztBQUN4Ryx1Q0FBeUM7QUF3UnpDOztHQUVHO0FBQ0gsSUFBWSxZQVlYO0FBWkQsV0FBWSxZQUFZO0lBQ3RCOzs7T0FHRztJQUNILCtCQUFlLENBQUE7SUFFZjs7O09BR0c7SUFDSCx1Q0FBdUIsQ0FBQTtBQUN6QixDQUFDLEVBWlcsWUFBWSw0QkFBWixZQUFZLFFBWXZCO0FBZ0REOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILE1BQWEsS0FBTSxTQUFRLHNCQUFTO0lBdUJsQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLFVBQXdCLEVBQUU7UUFDbEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsU0FBUyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUM7UUFDeEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUM7UUFFckQsMkVBQTJFO1FBQzNFLFVBQVU7UUFDVixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUN0QyxNQUFNLGFBQWEsR0FBRztZQUNwQix3QkFBd0IsRUFBRSxlQUFlO1lBQ3pDLDZCQUE2QixFQUFFLFNBQVM7WUFDeEMsMkJBQTJCLEVBQUUsT0FBTyxDQUFDLE9BQU8sSUFBSSxXQUFXO1NBQzVELENBQUM7UUFDRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFFekIsVUFBVTtRQUNWLElBQUksY0FBYyxHQUEyQjtZQUMzQyxNQUFNLEVBQUUsYUFBYTtZQUNyQixLQUFLLEVBQUU7Z0JBQ0wsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLElBQUksNEJBQTRCO2dCQUNwRCxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsZ0JBQWdCLElBQUksRUFBRTtnQkFDaEQsZUFBZSxFQUFFLE9BQU8sQ0FBQyxlQUFlLElBQUksY0FBYzthQUMzRDtZQUNELFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtZQUMxQixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsSUFBSSxNQUFNO1lBQ3BDLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVyxJQUFJLE9BQU87WUFDM0MsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLElBQUksTUFBTTtZQUN4QyxhQUFhLEVBQUUsT0FBTyxDQUFDLGFBQWEsSUFBSSxPQUFPO1lBQy9DLEdBQUcsRUFBRTtnQkFDSCxjQUFjLEVBQUUsT0FBTyxDQUFDLGNBQWMsSUFBSSxTQUFTO2dCQUNuRCxZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVksSUFBSSxTQUFTO2FBQ2hEO1lBQ0QsSUFBSSxFQUFFLFdBQVc7WUFDakIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1lBQ2hDLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztZQUNoQyxjQUFjLEVBQUUsT0FBTyxDQUFDLGNBQWM7WUFDdEMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZO1lBQ2xDLGVBQWUsRUFBRSxPQUFPLENBQUMsZUFBc0M7U0FDaEUsQ0FBQztRQUVGLFVBQVU7UUFDVixNQUFNLG9CQUFvQixHQUFzQjtZQUM5QyxJQUFJLEVBQUUsR0FBRztZQUNULElBQUksRUFBRSxpQkFBVyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7U0FDMUMsQ0FBQztRQUNGLElBQUksT0FBTyxDQUFDLGVBQWUsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNyQyxjQUFjLENBQUMsYUFBYSxHQUFHO2dCQUM3QixPQUFPLEVBQUUsb0JBQW9CO2dCQUM3QixtQkFBbUIsRUFBRSxPQUFPLENBQUMsMkJBQTJCLElBQUksRUFBRTtnQkFDOUQsY0FBYyxFQUFFLE9BQU8sQ0FBQyxzQkFBc0IsSUFBSSxDQUFDO2dCQUNuRCxhQUFhLEVBQUUsT0FBTyxDQUFDLHFCQUFxQixJQUFJLEVBQUU7Z0JBQ2xELGdCQUFnQixFQUFFLE9BQU8sQ0FBQyx3QkFBd0IsSUFBSSxDQUFDO2dCQUN2RCxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsd0JBQXdCLElBQUksQ0FBQzthQUN4RCxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLGdCQUFnQixJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3JDLGNBQWMsQ0FBQyxjQUFjLEdBQUc7Z0JBQzlCLE9BQU8sRUFBRSxvQkFBb0I7Z0JBQzdCLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyw0QkFBNEIsSUFBSSxFQUFFO2dCQUMvRCxjQUFjLEVBQUUsT0FBTyxDQUFDLHVCQUF1QixJQUFJLEVBQUU7Z0JBQ3JELGFBQWEsRUFBRSxPQUFPLENBQUMsc0JBQXNCLElBQUksRUFBRTtnQkFDbkQsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLHlCQUF5QixJQUFJLENBQUM7Z0JBQ3hELGdCQUFnQixFQUFFLE9BQU8sQ0FBQyx5QkFBeUIsSUFBSSxDQUFDO2FBQ3pELENBQUM7UUFDSixDQUFDO1FBQ0QsYUFBYTtRQUNiLElBQUksaUJBQWlCLEdBQUcsSUFBSSw0QkFBZSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFFN0UsVUFBVTtRQUNWLE1BQU0sY0FBYyxHQUFHLElBQUksc0JBQVksQ0FBQyxpQkFBaUIsRUFBRSxTQUFTLEVBQUU7WUFDcEUsTUFBTSxFQUFFO2dCQUNOLHdCQUF3QixFQUFFLHVCQUF1QjtnQkFDakQsNkJBQTZCLEVBQUUsU0FBUzthQUN6QztZQUNELFVBQVUsRUFBRSxXQUFXO1lBQ3ZCLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxhQUFLLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLEVBQUU7WUFDN0QsUUFBUSxFQUFFLGNBQWM7WUFDeEIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxrQkFBa0I7U0FDeEMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUM7UUFFOUMsNkJBQTZCO1FBQzdCLElBQUksT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLEVBQUUsU0FBUyxFQUFFO2dCQUNuRCxJQUFJLEVBQUUsT0FBTyxDQUFDLFdBQVcsSUFBSSxjQUFjO2dCQUMzQyxJQUFJLEVBQUUsT0FBTyxDQUFDLFdBQVcsSUFBSSxVQUFVO2FBQ3hDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCwyRUFBMkU7UUFDM0UsV0FBVztRQUNYLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdkMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDeEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQzFCLE1BQU0sY0FBYyxHQUFHO2dCQUNyQix3QkFBd0IsRUFBRSxnQkFBZ0I7Z0JBQzFDLDZCQUE2QixFQUFFLFVBQVU7Z0JBQ3pDLDJCQUEyQixFQUFFLE9BQU8sQ0FBQyxPQUFPLElBQUksV0FBVzthQUM1RCxDQUFDO1lBRUYseUJBQXlCO1lBQ3pCLElBQUksbUJBQW1CLEdBQUcsUUFBUSxDQUFDLFdBQVcsSUFBSSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3hFLElBQUksbUJBQW1CLENBQUMsU0FBUyxDQUFDLHdCQUF3QixLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUN6RSwrQkFBK0I7Z0JBQy9CLG1CQUFtQixFQUFFLFdBQVcsQ0FBQywwQkFBMEIsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLGNBQWMsQ0FBQyxJQUFJLElBQUksV0FBVyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDeEosQ0FBQztZQUVELFVBQVU7WUFDVixJQUFJLGVBQWUsR0FBMkI7Z0JBQzVDLE1BQU0sRUFBRSxjQUFjO2dCQUN0QixLQUFLLEVBQUU7b0JBQ0wsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLElBQUksNkJBQTZCO29CQUN0RCxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsZ0JBQWdCLElBQUksRUFBRTtvQkFDaEQsZUFBZSxFQUFFLFFBQVEsQ0FBQyxlQUFlLElBQUksY0FBYztpQkFDNUQ7Z0JBQ0QsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRO2dCQUMzQixRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVEsSUFBSSxNQUFNO2dCQUNyQyxXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVcsSUFBSSxLQUFLO2dCQUMxQyxVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVUsSUFBSSxNQUFNO2dCQUN6QyxhQUFhLEVBQUUsUUFBUSxDQUFDLGFBQWEsSUFBSSxPQUFPO2dCQUVoRCxHQUFHLEVBQUU7b0JBQ0gsY0FBYyxFQUFFLFFBQVEsQ0FBQyxjQUFjLElBQUksU0FBUztvQkFDcEQsWUFBWSxFQUFFLFFBQVEsQ0FBQyxZQUFZLElBQUksU0FBUztpQkFDakQ7Z0JBQ0QsSUFBSSxFQUFFLFlBQVk7Z0JBQ2xCLFdBQVcsRUFBRSxtQkFBbUI7Z0JBQ2hDLFdBQVcsRUFBRSxRQUFRLENBQUMsV0FBVztnQkFDakMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxjQUFjO2dCQUN2QyxZQUFZLEVBQUUsUUFBUSxDQUFDLFlBQVk7Z0JBQ25DLGVBQWUsRUFBRSxRQUFRLENBQUMsZUFBc0M7YUFDakUsQ0FBQztZQUVGLFVBQVU7WUFDVixNQUFNLHFCQUFxQixHQUFzQjtnQkFDL0MsSUFBSSxFQUFFLEdBQUc7Z0JBQ1QsSUFBSSxFQUFFLGlCQUFXLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQzthQUMzQyxDQUFDO1lBQ0YsSUFBSSxRQUFRLENBQUMsZUFBZSxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUN0QyxlQUFlLENBQUMsYUFBYSxHQUFHO29CQUM5QixPQUFPLEVBQUUscUJBQXFCO29CQUM5QixtQkFBbUIsRUFBRSxRQUFRLENBQUMsMkJBQTJCLElBQUksRUFBRTtvQkFDL0QsY0FBYyxFQUFFLFFBQVEsQ0FBQyxzQkFBc0IsSUFBSSxDQUFDO29CQUNwRCxhQUFhLEVBQUUsUUFBUSxDQUFDLHFCQUFxQixJQUFJLEVBQUU7b0JBQ25ELGdCQUFnQixFQUFFLFFBQVEsQ0FBQyx3QkFBd0IsSUFBSSxDQUFDO29CQUN4RCxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsd0JBQXdCLElBQUksQ0FBQztpQkFDekQsQ0FBQztZQUNKLENBQUM7WUFDRCxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDdEMsZUFBZSxDQUFDLGNBQWMsR0FBRztvQkFDL0IsT0FBTyxFQUFFLHFCQUFxQjtvQkFDOUIsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLDRCQUE0QixJQUFJLEVBQUU7b0JBQ2hFLGNBQWMsRUFBRSxRQUFRLENBQUMsdUJBQXVCLElBQUksRUFBRTtvQkFDdEQsYUFBYSxFQUFFLFFBQVEsQ0FBQyxzQkFBc0IsSUFBSSxFQUFFO29CQUNwRCxnQkFBZ0IsRUFBRSxRQUFRLENBQUMseUJBQXlCLElBQUksQ0FBQztvQkFDekQsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLHlCQUF5QixJQUFJLENBQUM7aUJBQzFELENBQUM7WUFDSixDQUFDO1lBRUQsYUFBYTtZQUNiLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSw0QkFBZSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFFbEYsVUFBVTtZQUNWLE1BQU0sZUFBZSxHQUFHLElBQUksc0JBQVksQ0FBQyxrQkFBa0IsRUFBRSxTQUFTLEVBQUU7Z0JBQ3RFLE1BQU0sRUFBRTtvQkFDTix3QkFBd0IsRUFBRSx3QkFBd0I7b0JBQ2xELDZCQUE2QixFQUFFLFNBQVM7aUJBQ3pDO2dCQUNELFVBQVUsRUFBRSxZQUFZO2dCQUN4QixhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsYUFBSyxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO2dCQUM5RCxRQUFRLEVBQUUsZUFBZTtnQkFDekIsV0FBVyxFQUFFLFFBQVEsQ0FBQyxrQkFBa0I7YUFDekMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLG1CQUFtQixHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUM7WUFFaEQsOEJBQThCO1lBQzlCLElBQUksUUFBUSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUM1QixJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxFQUFFLFVBQVUsRUFBRTtvQkFDckQsSUFBSSxFQUFFLFFBQVEsQ0FBQyxXQUFXLElBQUksZUFBZTtvQkFDN0MsSUFBSSxFQUFFLFFBQVEsQ0FBQyxXQUFXLElBQUksVUFBVTtpQkFDekMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxvQkFBb0IsQ0FDMUIsT0FBcUIsRUFDckIsRUFBVSxFQUNWLE1BQStDO1FBRS9DLE1BQU0sUUFBUSxHQUFHLE9BQU8sTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUMzRSxNQUFNLFVBQVUsR0FBRyxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUTtZQUNoRCxDQUFDLENBQUMsNkRBQXFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDL0QsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUVkLElBQUksc0NBQWMsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxFQUFFO1lBQy9DLFFBQVEsRUFBRTtnQkFDUixJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxVQUFVO2dCQUMvQixNQUFNLEVBQUU7b0JBQ04sd0JBQXdCLEVBQUUsT0FBTyxDQUFDLElBQUk7b0JBQ3RDLDZCQUE2QixFQUFFLGdCQUFnQjtpQkFDaEQ7YUFDRjtZQUNELElBQUksRUFBRTtnQkFDSixRQUFRLEVBQUU7b0JBQ1IsV0FBVyxFQUFFO3dCQUNYLHdCQUF3QixFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUM7cUJBQ25FO2lCQUNGO2dCQUNELFNBQVMsRUFBRTtvQkFDVDt3QkFDRSxHQUFHLENBQUMsUUFBUSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO3dCQUNuQyxHQUFHLENBQUMsVUFBVSxJQUFJLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxDQUFDO3dCQUM3QyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7d0JBQ2pCLFFBQVEsRUFBRSxLQUFLO3FCQUNoQjtpQkFDRjthQUNGO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUF6UEgsc0JBMFBDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmFtZXMgfSBmcm9tICdjZGs4cyc7XG5pbXBvcnQgKiBhcyBrcGx1cyBmcm9tICdjZGs4cy1wbHVzLTMwJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgUGxvbmVEZXBsb3ltZW50LCBQbG9uZURlcGxveW1lbnRPcHRpb25zIH0gZnJvbSAnLi9kZXBsb3ltZW50JztcbmltcG9ydCB7IEludE9yU3RyaW5nIH0gZnJvbSAnLi9pbXBvcnRzL2s4cyc7XG5pbXBvcnQgKiBhcyBrOHMgZnJvbSAnLi9pbXBvcnRzL2s4cyc7XG5pbXBvcnQgeyBTZXJ2aWNlTW9uaXRvciwgU2VydmljZU1vbml0b3JTcGVjRW5kcG9pbnRzVGFyZ2V0UG9ydCB9IGZyb20gJy4vaW1wb3J0cy9tb25pdG9yaW5nLmNvcmVvcy5jb20nO1xuaW1wb3J0IHsgUGxvbmVTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlJztcblxuLyoqXG4gKiBMaW51eCBjYXBhYmlsaXRpZXMgdG8gYWRkIG9yIGRyb3Agb24gYSBjb250YWluZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxvbmVDYXBhYmlsaXRpZXMge1xuICAvKipcbiAgICogQ2FwYWJpbGl0aWVzIHRvIGFkZCAoZS5nLiAnU1lTX1BUUkFDRScsICdORVRfQURNSU4nKS5cbiAgICogQGRlZmF1bHQgLSBubyBjYXBhYmlsaXRpZXMgYWRkZWRcbiAgICovXG4gIHJlYWRvbmx5IGFkZD86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBDYXBhYmlsaXRpZXMgdG8gZHJvcCAoZS5nLiAnQUxMJywgJ05FVF9SQVcnKS5cbiAgICogQGRlZmF1bHQgLSBubyBjYXBhYmlsaXRpZXMgZHJvcHBlZFxuICAgKi9cbiAgcmVhZG9ubHkgZHJvcD86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFNlY3VyaXR5IGNvbnRleHQgZm9yIGEgUGxvbmUgY29udGFpbmVyLlxuICogQ29udHJvbHMgcHJpdmlsZWdlIGFuZCBhY2Nlc3Mgc2V0dGluZ3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxvbmVTZWN1cml0eUNvbnRleHQge1xuICAvKipcbiAgICogTGludXggY2FwYWJpbGl0aWVzIHRvIGFkZCBvciBkcm9wLlxuICAgKiBAZXhhbXBsZSB7IGFkZDogWydTWVNfUFRSQUNFJ10gfVxuICAgKiBAZGVmYXVsdCAtIG5vIGNhcGFiaWxpdHkgY2hhbmdlc1xuICAgKi9cbiAgcmVhZG9ubHkgY2FwYWJpbGl0aWVzPzogUGxvbmVDYXBhYmlsaXRpZXM7XG5cbiAgLyoqXG4gICAqIFJ1biB0aGUgY29udGFpbmVyIGFzIGEgc3BlY2lmaWMgdXNlciBJRC5cbiAgICogQGRlZmF1bHQgLSBjb250YWluZXIgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgcnVuQXNVc2VyPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBSdW4gdGhlIGNvbnRhaW5lciBhcyBhIHNwZWNpZmljIGdyb3VwIElELlxuICAgKiBAZGVmYXVsdCAtIGNvbnRhaW5lciBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBydW5Bc0dyb3VwPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBSZXF1aXJlIHRoZSBjb250YWluZXIgdG8gcnVuIGFzIG5vbi1yb290LlxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgcnVuQXNOb25Sb290PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTW91bnQgdGhlIHJvb3QgZmlsZXN5c3RlbSBhcyByZWFkLW9ubHkuXG4gICAqIEBkZWZhdWx0IC0gdW5kZWZpbmVkXG4gICAqL1xuICByZWFkb25seSByZWFkT25seVJvb3RGaWxlc3lzdGVtPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQWxsb3cgcHJpdmlsZWdlIGVzY2FsYXRpb24gZm9yIHRoZSBjb250YWluZXIgcHJvY2Vzcy5cbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93UHJpdmlsZWdlRXNjYWxhdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJ1biB0aGUgY29udGFpbmVyIGluIHByaXZpbGVnZWQgbW9kZS5cbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IHByaXZpbGVnZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEJhc2Ugb3B0aW9ucyBmb3IgUGxvbmUgYmFja2VuZCBvciBmcm9udGVuZCBjb25maWd1cmF0aW9uLlxuICogVGhlc2Ugb3B0aW9ucyBjb250cm9sIGNvbnRhaW5lciBpbWFnZSwgcmVwbGljYSBjb3VudCwgcmVzb3VyY2UgbGltaXRzLFxuICogZW52aXJvbm1lbnQgdmFyaWFibGVzLCBhbmQgaGVhbHRoIHByb2Jlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbG9uZUJhc2VPcHRpb25zIHtcbiAgLyoqXG4gICAqIENvbnRhaW5lciBpbWFnZSB0byB1c2UgZm9yIHRoZSBkZXBsb3ltZW50LlxuICAgKiBAZXhhbXBsZSAncGxvbmUvcGxvbmUtYmFja2VuZDo2LjAuMTAnIG9yICdwbG9uZS9wbG9uZS1mcm9udGVuZDoxNi4wLjAnXG4gICAqIEBkZWZhdWx0IC0gJ3Bsb25lL3Bsb25lLWJhY2tlbmQ6bGF0ZXN0JyBmb3IgYmFja2VuZCwgJ3Bsb25lL3Bsb25lLWZyb250ZW5kOmxhdGVzdCcgZm9yIGZyb250ZW5kXG4gICAqL1xuICByZWFkb25seSBpbWFnZT86IHN0cmluZztcblxuICAvKipcbiAgICogSW1hZ2UgcHVsbCBwb2xpY3kgZm9yIHRoZSBjb250YWluZXIuXG4gICAqIEBkZWZhdWx0ICdJZk5vdFByZXNlbnQnXG4gICAqL1xuICByZWFkb25seSBpbWFnZVB1bGxQb2xpY3k/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiBwb2QgcmVwbGljYXMgdG8gcnVuLlxuICAgKiBAZGVmYXVsdCAyXG4gICAqL1xuICByZWFkb25seSByZXBsaWNhcz86IG51bWJlcjtcblxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2YgcG9kcyB0aGF0IGNhbiBiZSB1bmF2YWlsYWJsZSBkdXJpbmcgdXBkYXRlcy5cbiAgICogQ2FuIGJlIGFuIGFic29sdXRlIG51bWJlciAoZS5nLiwgMSkgb3IgYSBwZXJjZW50YWdlIChlLmcuLCAnNTAlJykuXG4gICAqIFVzZWQgaW4gUG9kRGlzcnVwdGlvbkJ1ZGdldCBpZiBzcGVjaWZpZWQuXG4gICAqIEBkZWZhdWx0IC0gdW5kZWZpbmVkIChub3Qgc2V0KVxuICAgKi9cbiAgcmVhZG9ubHkgbWF4VW5hdmFpbGFibGU/OiBudW1iZXIgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1pbmltdW0gbnVtYmVyIG9mIHBvZHMgdGhhdCBtdXN0IGJlIGF2YWlsYWJsZSBkdXJpbmcgdXBkYXRlcy5cbiAgICogQ2FuIGJlIGFuIGFic29sdXRlIG51bWJlciAoZS5nLiwgMSkgb3IgYSBwZXJjZW50YWdlIChlLmcuLCAnNTAlJykuXG4gICAqIFVzZWQgaW4gUG9kRGlzcnVwdGlvbkJ1ZGdldCBpZiBzcGVjaWZpZWQuXG4gICAqIEBkZWZhdWx0IC0gdW5kZWZpbmVkIChub3Qgc2V0KVxuICAgKi9cbiAgcmVhZG9ubHkgbWluQXZhaWxhYmxlPzogbnVtYmVyIHwgc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDUFUgbGltaXQgZm9yIHRoZSBjb250YWluZXIuXG4gICAqIEBleGFtcGxlICc1MDBtJyBvciAnMScgb3IgJzIwMDBtJ1xuICAgKiBAZGVmYXVsdCAnNTAwbScgZm9yIGJvdGggYmFja2VuZCBhbmQgZnJvbnRlbmRcbiAgICovXG4gIHJlYWRvbmx5IGxpbWl0Q3B1Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNZW1vcnkgbGltaXQgZm9yIHRoZSBjb250YWluZXIuXG4gICAqIEBleGFtcGxlICc1MTJNaScgb3IgJzFHaSdcbiAgICogQGRlZmF1bHQgJzUxMk1pJyBmb3IgYmFja2VuZCwgJzFHaScgZm9yIGZyb250ZW5kXG4gICAqL1xuICByZWFkb25seSBsaW1pdE1lbW9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogQ1BVIHJlcXVlc3QgZm9yIHRoZSBjb250YWluZXIuXG4gICAqIEBleGFtcGxlICcyMDBtJyBvciAnMC41J1xuICAgKiBAZGVmYXVsdCAnMjAwbSdcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVlc3RDcHU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1lbW9yeSByZXF1ZXN0IGZvciB0aGUgY29udGFpbmVyLlxuICAgKiBAZXhhbXBsZSAnMjU2TWknIG9yICc1MTJNaSdcbiAgICogQGRlZmF1bHQgJzI1Nk1pJ1xuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWVzdE1lbW9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCBpbiB0aGUgY29udGFpbmVyLlxuICAgKiBVc2UgY2RrOHMtcGx1cy0zMCBFbnYgY2xhc3MgdG8gZGVmaW5lIHZhcmlhYmxlcyBhbmQgc291cmNlcy5cbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWQgKG5vIGFkZGl0aW9uYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzKVxuICAgKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ/OiBrcGx1cy5FbnY7XG5cbiAgLyoqXG4gICAqIEVuYWJsZSByZWFkaW5lc3MgcHJvYmUgZm9yIHRoZSBjb250YWluZXIuXG4gICAqIFJlYWRpbmVzcyBwcm9iZXMgZGV0ZXJtaW5lIHdoZW4gYSBjb250YWluZXIgaXMgcmVhZHkgdG8gYWNjZXB0IHRyYWZmaWMuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHJlYWRpbmVzc0VuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygc2Vjb25kcyBhZnRlciBjb250YWluZXIgc3RhcnQgYmVmb3JlIHJlYWRpbmVzcyBwcm9iZSBpcyBpbml0aWF0ZWQuXG4gICAqIEBkZWZhdWx0IDEwXG4gICAqL1xuICByZWFkb25seSByZWFkaW5lc3NJbml0aWFsRGVsYXlTZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygc2Vjb25kcyBhZnRlciB3aGljaCB0aGUgcmVhZGluZXNzIHByb2JlIHRpbWVzIG91dC5cbiAgICogQGRlZmF1bHQgMTVcbiAgICovXG4gIHJlYWRvbmx5IHJlYWRpbmVzc1RpbWVvdXRTZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBIb3cgb2Z0ZW4gKGluIHNlY29uZHMpIHRvIHBlcmZvcm0gdGhlIHJlYWRpbmVzcyBwcm9iZS5cbiAgICogQGRlZmF1bHQgMTBcbiAgICovXG4gIHJlYWRvbmx5IHJlYWRpbmVzc1BlcmlvZFNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE1pbmltdW0gY29uc2VjdXRpdmUgc3VjY2Vzc2VzIGZvciB0aGUgcmVhZGluZXNzIHByb2JlIHRvIGJlIGNvbnNpZGVyZWQgc3VjY2Vzc2Z1bC5cbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgcmVhZG9ubHkgcmVhZGluZXNzU3VjY2Vzc1RocmVzaG9sZD86IG51bWJlcjtcblxuICAvKipcbiAgICogTWluaW11bSBjb25zZWN1dGl2ZSBmYWlsdXJlcyBmb3IgdGhlIHJlYWRpbmVzcyBwcm9iZSB0byBiZSBjb25zaWRlcmVkIGZhaWxlZC5cbiAgICogQGRlZmF1bHQgM1xuICAgKi9cbiAgcmVhZG9ubHkgcmVhZGluZXNzRmFpbHVyZVRocmVzaG9sZD86IG51bWJlcjtcblxuICAvKipcbiAgICogRW5hYmxlIGxpdmVuZXNzIHByb2JlIGZvciB0aGUgY29udGFpbmVyLlxuICAgKiBMaXZlbmVzcyBwcm9iZXMgZGV0ZXJtaW5lIHdoZW4gdG8gcmVzdGFydCBhIGNvbnRhaW5lci5cbiAgICogUmVjb21tZW5kZWQ6IHRydWUgZm9yIGZyb250ZW5kLCBmYWxzZSBmb3IgYmFja2VuZCAoWm9wZSBoYXMgaXRzIG93biByZWNvdmVyeSkuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBsaXZlbmVzc0VuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygc2Vjb25kcyBhZnRlciBjb250YWluZXIgc3RhcnQgYmVmb3JlIGxpdmVuZXNzIHByb2JlIGlzIGluaXRpYXRlZC5cbiAgICogQGRlZmF1bHQgMzBcbiAgICovXG4gIHJlYWRvbmx5IGxpdmVuZXNzSW5pdGlhbERlbGF5U2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogTnVtYmVyIG9mIHNlY29uZHMgYWZ0ZXIgd2hpY2ggdGhlIGxpdmVuZXNzIHByb2JlIHRpbWVzIG91dC5cbiAgICogQGRlZmF1bHQgNVxuICAgKi9cbiAgcmVhZG9ubHkgbGl2ZW5lc3NUaW1lb3V0U2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogSG93IG9mdGVuIChpbiBzZWNvbmRzKSB0byBwZXJmb3JtIHRoZSBsaXZlbmVzcyBwcm9iZS5cbiAgICogQGRlZmF1bHQgMTBcbiAgICovXG4gIHJlYWRvbmx5IGxpdmVuZXNzUGVyaW9kU2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogTWluaW11bSBjb25zZWN1dGl2ZSBzdWNjZXNzZXMgZm9yIHRoZSBsaXZlbmVzcyBwcm9iZSB0byBiZSBjb25zaWRlcmVkIHN1Y2Nlc3NmdWwuXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIHJlYWRvbmx5IGxpdmVuZXNzU3VjY2Vzc1RocmVzaG9sZD86IG51bWJlcjtcblxuICAvKipcbiAgICogTWluaW11bSBjb25zZWN1dGl2ZSBmYWlsdXJlcyBmb3IgdGhlIGxpdmVuZXNzIHByb2JlIHRvIGJlIGNvbnNpZGVyZWQgZmFpbGVkLlxuICAgKiBAZGVmYXVsdCAzXG4gICAqL1xuICByZWFkb25seSBsaXZlbmVzc0ZhaWx1cmVUaHJlc2hvbGQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEFubm90YXRpb25zIHRvIGFkZCB0byB0aGUgRGVwbG95bWVudCBtZXRhZGF0YS5cbiAgICogQGV4YW1wbGUgeyAnZGVwbG95bWVudC5rdWJlcm5ldGVzLmlvL3JldmlzaW9uJzogJzEnIH1cbiAgICogQGRlZmF1bHQgLSBubyBhZGRpdGlvbmFsIGFubm90YXRpb25zXG4gICAqL1xuICByZWFkb25seSBhbm5vdGF0aW9ucz86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBBbm5vdGF0aW9ucyB0byBhZGQgdG8gdGhlIFBvZCB0ZW1wbGF0ZSBtZXRhZGF0YS5cbiAgICogQ29tbW9uIGZvciBQcm9tZXRoZXVzLCBJc3RpbywgYmFja3VwIHBvbGljaWVzLCBldGMuXG4gICAqIEBleGFtcGxlIHsgJ3Byb21ldGhldXMuaW8vc2NyYXBlJzogJ3RydWUnLCAncHJvbWV0aGV1cy5pby9wb3J0JzogJzgwODAnIH1cbiAgICogQGRlZmF1bHQgLSBubyBhZGRpdGlvbmFsIGFubm90YXRpb25zXG4gICAqL1xuICByZWFkb25seSBwb2RBbm5vdGF0aW9ucz86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBBbm5vdGF0aW9ucyB0byBhZGQgdG8gdGhlIFNlcnZpY2UgbWV0YWRhdGEuXG4gICAqIENvbW1vbiBmb3IgZXh0ZXJuYWwtZG5zLCBsb2FkIGJhbGFuY2Vycywgc2VydmljZSBtZXNoLCBldGMuXG4gICAqIEBleGFtcGxlIHsgJ2V4dGVybmFsLWRucy5hbHBoYS5rdWJlcm5ldGVzLmlvL2hvc3RuYW1lJzogJ3Bsb25lLmV4YW1wbGUuY29tJyB9XG4gICAqIEBkZWZhdWx0IC0gbm8gYWRkaXRpb25hbCBhbm5vdGF0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZUFubm90YXRpb25zPzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBQcm9tZXRoZXVzIFNlcnZpY2VNb25pdG9yIGZvciBtZXRyaWNzIGNvbGxlY3Rpb24uXG4gICAqIFJlcXVpcmVzIFByb21ldGhldXMgT3BlcmF0b3IgdG8gYmUgaW5zdGFsbGVkIGluIHRoZSBjbHVzdGVyLlxuICAgKiBXaGVuIGVuYWJsZWQsIGEgU2VydmljZU1vbml0b3IgcmVzb3VyY2Ugd2lsbCBiZSBjcmVhdGVkIHRvIHNjcmFwZSBtZXRyaWNzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZW1vbml0b3I/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBQb3J0IG5hbWUgb3IgbnVtYmVyIHRvIHNjcmFwZSBtZXRyaWNzIGZyb20uXG4gICAqIE9ubHkgdXNlZCB3aGVuIHNlcnZpY2Vtb25pdG9yIGlzIGVuYWJsZWQuXG4gICAqIEBkZWZhdWx0IC0gdXNlcyB0aGUgbWFpbiBzZXJ2aWNlIHBvcnRcbiAgICovXG4gIHJlYWRvbmx5IG1ldHJpY3NQb3J0Pzogc3RyaW5nIHwgbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIHNjcmFwZSBtZXRyaWNzIGZyb20uXG4gICAqIE9ubHkgdXNlZCB3aGVuIHNlcnZpY2Vtb25pdG9yIGlzIGVuYWJsZWQuXG4gICAqIEBkZWZhdWx0ICcvbWV0cmljcydcbiAgICovXG4gIHJlYWRvbmx5IG1ldHJpY3NQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOb2RlIHNlbGVjdG9yIGxhYmVscyBmb3IgcG9kIHNjaGVkdWxpbmcuXG4gICAqIFVzZSB0byBjb25zdHJhaW4gcG9kcyB0byBub2RlcyB3aXRoIG1hdGNoaW5nIGxhYmVscywgZS5nLiBmb3IgcmVnaW9uIGFmZmluaXR5LlxuICAgKiBAZXhhbXBsZSB7ICd0b3BvbG9neS5rdWJlcm5ldGVzLmlvL3JlZ2lvbic6ICdmc24xJyB9XG4gICAqIEBkZWZhdWx0IC0gbm8gbm9kZSBzZWxlY3RvclxuICAgKi9cbiAgcmVhZG9ubHkgbm9kZVNlbGVjdG9yPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogU2VjdXJpdHkgY29udGV4dCBmb3IgdGhlIGNvbnRhaW5lci5cbiAgICogVXNlIHRvIHNldCBjYXBhYmlsaXRpZXMsIHJ1biBhcyBub24tcm9vdCwgcmVhZC1vbmx5IGZpbGVzeXN0ZW0sIGV0Yy5cbiAgICogQGV4YW1wbGUgeyBjYXBhYmlsaXRpZXM6IHsgYWRkOiBbJ1NZU19QVFJBQ0UnXSB9IH1cbiAgICogQGRlZmF1bHQgLSBubyBzZWN1cml0eSBjb250ZXh0XG4gICAqL1xuICByZWFkb25seSBzZWN1cml0eUNvbnRleHQ/OiBQbG9uZVNlY3VyaXR5Q29udGV4dDtcbn1cbi8qKlxuICogUGxvbmUgZGVwbG95bWVudCB2YXJpYW50cy5cbiAqL1xuZXhwb3J0IGVudW0gUGxvbmVWYXJpYW50IHtcbiAgLyoqXG4gICAqIFZvbHRvIHZhcmlhbnQ6IFJlYWN0SlMgZnJvbnRlbmQgKFZvbHRvKSB3aXRoIFJFU1QgQVBJIGJhY2tlbmQuXG4gICAqIERlcGxveXMgYm90aCBmcm9udGVuZCBhbmQgYmFja2VuZCBzZXJ2aWNlcy5cbiAgICovXG4gIFZPTFRPID0gJ3ZvbHRvJyxcblxuICAvKipcbiAgICogQ2xhc3NpYyBVSSB2YXJpYW50OiBUcmFkaXRpb25hbCBQbG9uZSB3aXRoIHNlcnZlci1zaWRlIHJlbmRlcmluZy5cbiAgICogRGVwbG95cyBvbmx5IHRoZSBiYWNrZW5kIHNlcnZpY2UuXG4gICAqL1xuICBDTEFTU0lDVUkgPSAnY2xhc3NpY3VpJyxcbn1cblxuLyoqXG4gKiBNYWluIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgUGxvbmUgZGVwbG95bWVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbG9uZU9wdGlvbnMge1xuICAvKipcbiAgICogVmVyc2lvbiBzdHJpbmcgZm9yIGxhYmVsaW5nIHRoZSBkZXBsb3ltZW50LlxuICAgKiBUaGlzIGlzIHVzZWQgaW4gS3ViZXJuZXRlcyBsYWJlbHMgYW5kIGRvZXNuJ3QgYWZmZWN0IHRoZSBhY3R1YWwgaW1hZ2UgdmVyc2lvbnMuXG4gICAqIEBkZWZhdWx0ICd1bmRlZmluZWQnXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQbG9uZSBzaXRlIElEIGluIHRoZSBaT0RCLlxuICAgKiBUaGlzIGlzIHVzZWQgdG8gY29uc3RydWN0IHRoZSBpbnRlcm5hbCBBUEkgcGF0aCBmb3IgVm9sdG8gZnJvbnRlbmQuXG4gICAqIEBkZWZhdWx0ICdQbG9uZSdcbiAgICovXG4gIHJlYWRvbmx5IHNpdGVJZD86IHN0cmluZztcblxuICAvKipcbiAgICogUGxvbmUgZGVwbG95bWVudCB2YXJpYW50IHRvIHVzZS5cbiAgICogQGRlZmF1bHQgUGxvbmVWYXJpYW50LlZPTFRPXG4gICAqL1xuICByZWFkb25seSB2YXJpYW50PzogUGxvbmVWYXJpYW50O1xuXG4gIC8qKlxuICAgKiBCYWNrZW5kIChQbG9uZSBBUEkpIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBkZWZhdWx0IHt9ICh1c2VzIGRlZmF1bHQgdmFsdWVzIGZyb20gUGxvbmVCYXNlT3B0aW9ucylcbiAgICovXG4gIHJlYWRvbmx5IGJhY2tlbmQ/OiBQbG9uZUJhc2VPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBGcm9udGVuZCAoVm9sdG8pIGNvbmZpZ3VyYXRpb24uXG4gICAqIE9ubHkgdXNlZCB3aGVuIHZhcmlhbnQgaXMgUGxvbmVWYXJpYW50LlZPTFRPLlxuICAgKiBAZGVmYXVsdCB7fSAodXNlcyBkZWZhdWx0IHZhbHVlcyBmcm9tIFBsb25lQmFzZU9wdGlvbnMpXG4gICAqL1xuICByZWFkb25seSBmcm9udGVuZD86IFBsb25lQmFzZU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIE5hbWVzIG9mIEt1YmVybmV0ZXMgc2VjcmV0cyB0byB1c2UgZm9yIHB1bGxpbmcgcHJpdmF0ZSBjb250YWluZXIgaW1hZ2VzLlxuICAgKiBUaGVzZSBzZWNyZXRzIG11c3QgZXhpc3QgaW4gdGhlIHNhbWUgbmFtZXNwYWNlIGFzIHRoZSBkZXBsb3ltZW50LlxuICAgKiBAZXhhbXBsZSBbJ215LXJlZ2lzdHJ5LXNlY3JldCddXG4gICAqIEBkZWZhdWx0IFtdIChubyBpbWFnZSBwdWxsIHNlY3JldHMpXG4gICAqL1xuICByZWFkb25seSBpbWFnZVB1bGxTZWNyZXRzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogUGxvbmUgY29uc3RydWN0IGZvciBkZXBsb3lpbmcgUGxvbmUgQ01TIHRvIEt1YmVybmV0ZXMuXG4gKlxuICogVGhpcyBjb25zdHJ1Y3QgY3JlYXRlcyBhbGwgbmVjZXNzYXJ5IEt1YmVybmV0ZXMgcmVzb3VyY2VzIGZvciBydW5uaW5nIFBsb25lOlxuICogLSBEZXBsb3ltZW50KHMpIGZvciBiYWNrZW5kIChhbmQgb3B0aW9uYWxseSBmcm9udGVuZClcbiAqIC0gU2VydmljZShzKSBmb3IgbmV0d29yayBhY2Nlc3NcbiAqIC0gT3B0aW9uYWwgUG9kRGlzcnVwdGlvbkJ1ZGdldCBmb3IgaGlnaCBhdmFpbGFiaWxpdHlcbiAqXG4gKiBTdXBwb3J0cyB0d28gZGVwbG95bWVudCB2YXJpYW50czpcbiAqIC0gVk9MVE86IE1vZGVybiBSZWFjdCBmcm9udGVuZCB3aXRoIFJFU1QgQVBJIGJhY2tlbmQgKGRlZmF1bHQpXG4gKiAtIENMQVNTSUNVSTogVHJhZGl0aW9uYWwgc2VydmVyLXNpZGUgcmVuZGVyZWQgUGxvbmVcbiAqXG4gKiBAZXhhbXBsZVxuICogbmV3IFBsb25lKGNoYXJ0LCAnbXktcGxvbmUnLCB7XG4gKiAgIHZhcmlhbnQ6IFBsb25lVmFyaWFudC5WT0xUTyxcbiAqICAgYmFja2VuZDoge1xuICogICAgIGltYWdlOiAncGxvbmUvcGxvbmUtYmFja2VuZDo2LjAuMTAnLFxuICogICAgIHJlcGxpY2FzOiAzLFxuICogICB9LFxuICogICBmcm9udGVuZDoge1xuICogICAgIGltYWdlOiAncGxvbmUvcGxvbmUtZnJvbnRlbmQ6MTYuMC4wJyxcbiAqICAgfSxcbiAqIH0pO1xuICovXG5leHBvcnQgY2xhc3MgUGxvbmUgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgYmFja2VuZCBLdWJlcm5ldGVzIHNlcnZpY2UuXG4gICAqIFVzZSB0aGlzIHRvIHJlZmVyZW5jZSB0aGUgYmFja2VuZCBzZXJ2aWNlIGZyb20gb3RoZXIgY29uc3RydWN0cy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBiYWNrZW5kU2VydmljZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgZnJvbnRlbmQgS3ViZXJuZXRlcyBzZXJ2aWNlLlxuICAgKiBPbmx5IHNldCB3aGVuIHZhcmlhbnQgaXMgVk9MVE8sIG90aGVyd2lzZSB1bmRlZmluZWQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZnJvbnRlbmRTZXJ2aWNlTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVwbG95bWVudCB2YXJpYW50IGJlaW5nIHVzZWQgKFZPTFRPIG9yIENMQVNTSUNVSSkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFyaWFudDogUGxvbmVWYXJpYW50O1xuXG4gIC8qKlxuICAgKiBUaGUgUGxvbmUgc2l0ZSBJRCBpbiBaT0RCLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNpdGVJZDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIG9wdGlvbnM6IFBsb25lT3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLmZyb250ZW5kU2VydmljZU5hbWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zaXRlSWQgPSBvcHRpb25zLnNpdGVJZCA/PyAnUGxvbmUnO1xuICAgIHRoaXMudmFyaWFudCA9IG9wdGlvbnMudmFyaWFudCA/PyBQbG9uZVZhcmlhbnQuVk9MVE87XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBCYWNrZW5kXG4gICAgY29uc3QgYmFja2VuZCA9IG9wdGlvbnMuYmFja2VuZCA/PyB7fTtcbiAgICBjb25zdCBiYWNrZW5kTGFiZWxzID0ge1xuICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL25hbWUnOiAncGxvbmUtYmFja2VuZCcsXG4gICAgICAnYXBwLmt1YmVybmV0ZXMuaW8vY29tcG9uZW50JzogJ2JhY2tlbmQnLFxuICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL3ZlcnNpb24nOiBvcHRpb25zLnZlcnNpb24gPz8gJ3VuZGVmaW5lZCcsXG4gICAgfTtcbiAgICBjb25zdCBiYWNrZW5kUG9ydCA9IDgwODA7XG5cbiAgICAvLyBPcHRpb25zXG4gICAgdmFyIGJhY2tlbmRPcHRpb25zOiBQbG9uZURlcGxveW1lbnRPcHRpb25zID0ge1xuICAgICAgbGFiZWxzOiBiYWNrZW5kTGFiZWxzLFxuICAgICAgaW1hZ2U6IHtcbiAgICAgICAgaW1hZ2U6IGJhY2tlbmQuaW1hZ2UgPz8gJ3Bsb25lL3Bsb25lLWJhY2tlbmQ6bGF0ZXN0JyxcbiAgICAgICAgaW1hZ2VQdWxsU2VjcmV0czogb3B0aW9ucy5pbWFnZVB1bGxTZWNyZXRzID8/IFtdLFxuICAgICAgICBpbWFnZVB1bGxQb2xpY3k6IGJhY2tlbmQuaW1hZ2VQdWxsUG9saWN5ID8/ICdJZk5vdFByZXNlbnQnLFxuICAgICAgfSxcbiAgICAgIHJlcGxpY2FzOiBiYWNrZW5kLnJlcGxpY2FzLFxuICAgICAgbGltaXRDcHU6IGJhY2tlbmQubGltaXRDcHUgPz8gJzUwMG0nLFxuICAgICAgbGltaXRNZW1vcnk6IGJhY2tlbmQubGltaXRNZW1vcnkgPz8gJzUxMk1pJyxcbiAgICAgIHJlcXVlc3RDcHU6IGJhY2tlbmQucmVxdWVzdENwdSA/PyAnMjAwbScsXG4gICAgICByZXF1ZXN0TWVtb3J5OiBiYWNrZW5kLnJlcXVlc3RNZW1vcnkgPz8gJzI1Nk1pJyxcbiAgICAgIHBkYjoge1xuICAgICAgICBtYXhVbmF2YWlsYWJsZTogYmFja2VuZC5tYXhVbmF2YWlsYWJsZSA/PyB1bmRlZmluZWQsXG4gICAgICAgIG1pbkF2YWlsYWJsZTogYmFja2VuZC5taW5BdmFpbGFibGUgPz8gdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICAgIHBvcnQ6IGJhY2tlbmRQb3J0LFxuICAgICAgZW52aXJvbm1lbnQ6IGJhY2tlbmQuZW52aXJvbm1lbnQsXG4gICAgICBhbm5vdGF0aW9uczogYmFja2VuZC5hbm5vdGF0aW9ucyxcbiAgICAgIHBvZEFubm90YXRpb25zOiBiYWNrZW5kLnBvZEFubm90YXRpb25zLFxuICAgICAgbm9kZVNlbGVjdG9yOiBiYWNrZW5kLm5vZGVTZWxlY3RvcixcbiAgICAgIHNlY3VyaXR5Q29udGV4dDogYmFja2VuZC5zZWN1cml0eUNvbnRleHQgYXMgazhzLlNlY3VyaXR5Q29udGV4dCxcbiAgICB9O1xuXG4gICAgLy8gUHJvYmluZ1xuICAgIGNvbnN0IGJhY2tlbmRBY3Rpb25IdHRwR2V0OiBrOHMuSHR0cEdldEFjdGlvbiA9IHtcbiAgICAgIHBhdGg6ICcvJyxcbiAgICAgIHBvcnQ6IEludE9yU3RyaW5nLmZyb21OdW1iZXIoYmFja2VuZFBvcnQpLFxuICAgIH07XG4gICAgaWYgKGJhY2tlbmQubGl2ZW5lc3NFbmFibGVkID8/IGZhbHNlKSB7XG4gICAgICBiYWNrZW5kT3B0aW9ucy5saXZlbmVzc1Byb2JlID0ge1xuICAgICAgICBodHRwR2V0OiBiYWNrZW5kQWN0aW9uSHR0cEdldCxcbiAgICAgICAgaW5pdGlhbERlbGF5U2Vjb25kczogYmFja2VuZC5saXZlbmVzc0luaXRpYWxEZWxheVNlY29uZHMgPz8gMzAsXG4gICAgICAgIHRpbWVvdXRTZWNvbmRzOiBiYWNrZW5kLmxpdmVuZXNzVGltZW91dFNlY29uZHMgPz8gNSxcbiAgICAgICAgcGVyaW9kU2Vjb25kczogYmFja2VuZC5saXZlbmVzc1BlcmlvZFNlY29uZHMgPz8gMTAsXG4gICAgICAgIHN1Y2Nlc3NUaHJlc2hvbGQ6IGJhY2tlbmQubGl2ZW5lc3NTdWNjZXNzVGhyZXNob2xkID8/IDEsXG4gICAgICAgIGZhaWx1cmVUaHJlc2hvbGQ6IGJhY2tlbmQubGl2ZW5lc3NGYWlsdXJlVGhyZXNob2xkID8/IDMsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoYmFja2VuZC5yZWFkaW5lc3NFbmFibGVkID8/IHRydWUpIHtcbiAgICAgIGJhY2tlbmRPcHRpb25zLnJlYWRpbmVzc1Byb2JlID0ge1xuICAgICAgICBodHRwR2V0OiBiYWNrZW5kQWN0aW9uSHR0cEdldCxcbiAgICAgICAgaW5pdGlhbERlbGF5U2Vjb25kczogYmFja2VuZC5yZWFkaW5lc3NJbml0aWFsRGVsYXlTZWNvbmRzID8/IDEwLFxuICAgICAgICB0aW1lb3V0U2Vjb25kczogYmFja2VuZC5yZWFkaW5lc3NUaW1lb3V0U2Vjb25kcyA/PyAxNSxcbiAgICAgICAgcGVyaW9kU2Vjb25kczogYmFja2VuZC5yZWFkaW5lc3NQZXJpb2RTZWNvbmRzID8/IDEwLFxuICAgICAgICBzdWNjZXNzVGhyZXNob2xkOiBiYWNrZW5kLnJlYWRpbmVzc1N1Y2Nlc3NUaHJlc2hvbGQgPz8gMSxcbiAgICAgICAgZmFpbHVyZVRocmVzaG9sZDogYmFja2VuZC5yZWFkaW5lc3NGYWlsdXJlVGhyZXNob2xkID8/IDMsXG4gICAgICB9O1xuICAgIH1cbiAgICAvLyBEZXBsb3ltZW50XG4gICAgdmFyIGJhY2tlbmREZXBsb3ltZW50ID0gbmV3IFBsb25lRGVwbG95bWVudCh0aGlzLCAnYmFja2VuZCcsIGJhY2tlbmRPcHRpb25zKTtcblxuICAgIC8vIFNlcnZpY2VcbiAgICBjb25zdCBiYWNrZW5kU2VydmljZSA9IG5ldyBQbG9uZVNlcnZpY2UoYmFja2VuZERlcGxveW1lbnQsICdzZXJ2aWNlJywge1xuICAgICAgbGFiZWxzOiB7XG4gICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9uYW1lJzogJ3Bsb25lLWJhY2tlbmQtc2VydmljZScsXG4gICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnQnOiAnc2VydmljZScsXG4gICAgICB9LFxuICAgICAgdGFyZ2V0UG9ydDogYmFja2VuZFBvcnQsXG4gICAgICBzZWxlY3RvckxhYmVsOiB7IGFwcDogTmFtZXMudG9MYWJlbFZhbHVlKGJhY2tlbmREZXBsb3ltZW50KSB9LFxuICAgICAgcG9ydE5hbWU6ICdiYWNrZW5kLWh0dHAnLFxuICAgICAgYW5ub3RhdGlvbnM6IGJhY2tlbmQuc2VydmljZUFubm90YXRpb25zLFxuICAgIH0pO1xuICAgIHRoaXMuYmFja2VuZFNlcnZpY2VOYW1lID0gYmFja2VuZFNlcnZpY2UubmFtZTtcblxuICAgIC8vIFNlcnZpY2VNb25pdG9yIGZvciBiYWNrZW5kXG4gICAgaWYgKGJhY2tlbmQuc2VydmljZW1vbml0b3IpIHtcbiAgICAgIHRoaXMuY3JlYXRlU2VydmljZU1vbml0b3IoYmFja2VuZFNlcnZpY2UsICdiYWNrZW5kJywge1xuICAgICAgICBwb3J0OiBiYWNrZW5kLm1ldHJpY3NQb3J0ID8/ICdiYWNrZW5kLWh0dHAnLFxuICAgICAgICBwYXRoOiBiYWNrZW5kLm1ldHJpY3NQYXRoID8/ICcvbWV0cmljcycsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBGcm9udGVuZFxuICAgIGlmICh0aGlzLnZhcmlhbnQgPT0gUGxvbmVWYXJpYW50LlZPTFRPKSB7XG4gICAgICBjb25zdCBmcm9udGVuZCA9IG9wdGlvbnMuZnJvbnRlbmQgPz8ge307XG4gICAgICBjb25zdCBmcm9udGVuZFBvcnQgPSAzMDAwO1xuICAgICAgY29uc3QgZnJvbnRlbmRMYWJlbHMgPSB7XG4gICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9uYW1lJzogJ3Bsb25lLWZyb250ZW5kJyxcbiAgICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL2NvbXBvbmVudCc6ICdmcm9udGVuZCcsXG4gICAgICAgICdhcHAua3ViZXJuZXRlcy5pby92ZXJzaW9uJzogb3B0aW9ucy52ZXJzaW9uID8/ICd1bmRlZmluZWQnLFxuICAgICAgfTtcblxuICAgICAgLy8gRW52aXJvbm1lbnQgZm9yIFJBWlpMRVxuICAgICAgdmFyIGZyb250ZW5kRW52aXJvbm1lbnQgPSBmcm9udGVuZC5lbnZpcm9ubWVudCA/PyBuZXcga3BsdXMuRW52KFtdLCB7fSk7XG4gICAgICBpZiAoZnJvbnRlbmRFbnZpcm9ubWVudC52YXJpYWJsZXMuUkFaWkxFX0lOVEVSTkFMX0FQSV9QQVRIID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gY29ubmVjdCB3aXRoIGJhY2tlbmQgc2VydmljZVxuICAgICAgICBmcm9udGVuZEVudmlyb25tZW50Py5hZGRWYXJpYWJsZSgnUkFaWkxFX0lOVEVSTkFMX0FQSV9QQVRIJywga3BsdXMuRW52VmFsdWUuZnJvbVZhbHVlKGBodHRwOi8vJHtiYWNrZW5kU2VydmljZS5uYW1lfToke2JhY2tlbmRQb3J0fS8ke3RoaXMuc2l0ZUlkfWApKTtcbiAgICAgIH1cblxuICAgICAgLy8gT3B0aW9uc1xuICAgICAgdmFyIGZyb250ZW5kT3B0aW9uczogUGxvbmVEZXBsb3ltZW50T3B0aW9ucyA9IHtcbiAgICAgICAgbGFiZWxzOiBmcm9udGVuZExhYmVscyxcbiAgICAgICAgaW1hZ2U6IHtcbiAgICAgICAgICBpbWFnZTogZnJvbnRlbmQuaW1hZ2UgPz8gJ3Bsb25lL3Bsb25lLWZyb250ZW5kOmxhdGVzdCcsXG4gICAgICAgICAgaW1hZ2VQdWxsU2VjcmV0czogb3B0aW9ucy5pbWFnZVB1bGxTZWNyZXRzID8/IFtdLFxuICAgICAgICAgIGltYWdlUHVsbFBvbGljeTogZnJvbnRlbmQuaW1hZ2VQdWxsUG9saWN5ID8/ICdJZk5vdFByZXNlbnQnLFxuICAgICAgICB9LFxuICAgICAgICByZXBsaWNhczogZnJvbnRlbmQucmVwbGljYXMsXG4gICAgICAgIGxpbWl0Q3B1OiBmcm9udGVuZC5saW1pdENwdSA/PyAnNTAwbScsXG4gICAgICAgIGxpbWl0TWVtb3J5OiBmcm9udGVuZC5saW1pdE1lbW9yeSA/PyAnMUdpJyxcbiAgICAgICAgcmVxdWVzdENwdTogZnJvbnRlbmQucmVxdWVzdENwdSA/PyAnMjAwbScsXG4gICAgICAgIHJlcXVlc3RNZW1vcnk6IGZyb250ZW5kLnJlcXVlc3RNZW1vcnkgPz8gJzI1Nk1pJyxcblxuICAgICAgICBwZGI6IHtcbiAgICAgICAgICBtYXhVbmF2YWlsYWJsZTogZnJvbnRlbmQubWF4VW5hdmFpbGFibGUgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgIG1pbkF2YWlsYWJsZTogZnJvbnRlbmQubWluQXZhaWxhYmxlID8/IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgICAgcG9ydDogZnJvbnRlbmRQb3J0LFxuICAgICAgICBlbnZpcm9ubWVudDogZnJvbnRlbmRFbnZpcm9ubWVudCxcbiAgICAgICAgYW5ub3RhdGlvbnM6IGZyb250ZW5kLmFubm90YXRpb25zLFxuICAgICAgICBwb2RBbm5vdGF0aW9uczogZnJvbnRlbmQucG9kQW5ub3RhdGlvbnMsXG4gICAgICAgIG5vZGVTZWxlY3RvcjogZnJvbnRlbmQubm9kZVNlbGVjdG9yLFxuICAgICAgICBzZWN1cml0eUNvbnRleHQ6IGZyb250ZW5kLnNlY3VyaXR5Q29udGV4dCBhcyBrOHMuU2VjdXJpdHlDb250ZXh0LFxuICAgICAgfTtcblxuICAgICAgLy8gUHJvYmluZ1xuICAgICAgY29uc3QgZnJvbnRlbmRBY3Rpb25IdHRwR2V0OiBrOHMuSHR0cEdldEFjdGlvbiA9IHtcbiAgICAgICAgcGF0aDogJy8nLFxuICAgICAgICBwb3J0OiBJbnRPclN0cmluZy5mcm9tTnVtYmVyKGZyb250ZW5kUG9ydCksXG4gICAgICB9O1xuICAgICAgaWYgKGZyb250ZW5kLmxpdmVuZXNzRW5hYmxlZCA/PyBmYWxzZSkge1xuICAgICAgICBmcm9udGVuZE9wdGlvbnMubGl2ZW5lc3NQcm9iZSA9IHtcbiAgICAgICAgICBodHRwR2V0OiBmcm9udGVuZEFjdGlvbkh0dHBHZXQsXG4gICAgICAgICAgaW5pdGlhbERlbGF5U2Vjb25kczogZnJvbnRlbmQubGl2ZW5lc3NJbml0aWFsRGVsYXlTZWNvbmRzID8/IDMwLFxuICAgICAgICAgIHRpbWVvdXRTZWNvbmRzOiBmcm9udGVuZC5saXZlbmVzc1RpbWVvdXRTZWNvbmRzID8/IDUsXG4gICAgICAgICAgcGVyaW9kU2Vjb25kczogZnJvbnRlbmQubGl2ZW5lc3NQZXJpb2RTZWNvbmRzID8/IDEwLFxuICAgICAgICAgIHN1Y2Nlc3NUaHJlc2hvbGQ6IGZyb250ZW5kLmxpdmVuZXNzU3VjY2Vzc1RocmVzaG9sZCA/PyAxLFxuICAgICAgICAgIGZhaWx1cmVUaHJlc2hvbGQ6IGZyb250ZW5kLmxpdmVuZXNzRmFpbHVyZVRocmVzaG9sZCA/PyAzLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKGZyb250ZW5kLnJlYWRpbmVzc0VuYWJsZWQgPz8gdHJ1ZSkge1xuICAgICAgICBmcm9udGVuZE9wdGlvbnMucmVhZGluZXNzUHJvYmUgPSB7XG4gICAgICAgICAgaHR0cEdldDogZnJvbnRlbmRBY3Rpb25IdHRwR2V0LFxuICAgICAgICAgIGluaXRpYWxEZWxheVNlY29uZHM6IGZyb250ZW5kLnJlYWRpbmVzc0luaXRpYWxEZWxheVNlY29uZHMgPz8gMTAsXG4gICAgICAgICAgdGltZW91dFNlY29uZHM6IGZyb250ZW5kLnJlYWRpbmVzc1RpbWVvdXRTZWNvbmRzID8/IDE1LFxuICAgICAgICAgIHBlcmlvZFNlY29uZHM6IGZyb250ZW5kLnJlYWRpbmVzc1BlcmlvZFNlY29uZHMgPz8gMTAsXG4gICAgICAgICAgc3VjY2Vzc1RocmVzaG9sZDogZnJvbnRlbmQucmVhZGluZXNzU3VjY2Vzc1RocmVzaG9sZCA/PyAxLFxuICAgICAgICAgIGZhaWx1cmVUaHJlc2hvbGQ6IGZyb250ZW5kLnJlYWRpbmVzc0ZhaWx1cmVUaHJlc2hvbGQgPz8gMyxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gRGVwbG95bWVudFxuICAgICAgY29uc3QgZnJvbnRlbmREZXBsb3ltZW50ID0gbmV3IFBsb25lRGVwbG95bWVudCh0aGlzLCAnZnJvbnRlbmQnLCBmcm9udGVuZE9wdGlvbnMpO1xuXG4gICAgICAvLyBTZXJ2aWNlXG4gICAgICBjb25zdCBmcm9udGVuZFNlcnZpY2UgPSBuZXcgUGxvbmVTZXJ2aWNlKGZyb250ZW5kRGVwbG95bWVudCwgJ3NlcnZpY2UnLCB7XG4gICAgICAgIGxhYmVsczoge1xuICAgICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9uYW1lJzogJ3Bsb25lLWZyb250ZW5kLXNlcnZpY2UnLFxuICAgICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnQnOiAnc2VydmljZScsXG4gICAgICAgIH0sXG4gICAgICAgIHRhcmdldFBvcnQ6IGZyb250ZW5kUG9ydCxcbiAgICAgICAgc2VsZWN0b3JMYWJlbDogeyBhcHA6IE5hbWVzLnRvTGFiZWxWYWx1ZShmcm9udGVuZERlcGxveW1lbnQpIH0sXG4gICAgICAgIHBvcnROYW1lOiAnZnJvbnRlbmQtaHR0cCcsXG4gICAgICAgIGFubm90YXRpb25zOiBmcm9udGVuZC5zZXJ2aWNlQW5ub3RhdGlvbnMsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZnJvbnRlbmRTZXJ2aWNlTmFtZSA9IGZyb250ZW5kU2VydmljZS5uYW1lO1xuXG4gICAgICAvLyBTZXJ2aWNlTW9uaXRvciBmb3IgZnJvbnRlbmRcbiAgICAgIGlmIChmcm9udGVuZC5zZXJ2aWNlbW9uaXRvcikge1xuICAgICAgICB0aGlzLmNyZWF0ZVNlcnZpY2VNb25pdG9yKGZyb250ZW5kU2VydmljZSwgJ2Zyb250ZW5kJywge1xuICAgICAgICAgIHBvcnQ6IGZyb250ZW5kLm1ldHJpY3NQb3J0ID8/ICdmcm9udGVuZC1odHRwJyxcbiAgICAgICAgICBwYXRoOiBmcm9udGVuZC5tZXRyaWNzUGF0aCA/PyAnL21ldHJpY3MnLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIFByb21ldGhldXMgU2VydmljZU1vbml0b3IgcmVzb3VyY2UgZm9yIHRoZSBnaXZlbiBzZXJ2aWNlLlxuICAgKiBAcGFyYW0gc2VydmljZSBUaGUgUGxvbmVTZXJ2aWNlIHRvIG1vbml0b3JcbiAgICogQHBhcmFtIGlkIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgU2VydmljZU1vbml0b3JcbiAgICogQHBhcmFtIGNvbmZpZyBDb25maWd1cmF0aW9uIGZvciB0aGUgU2VydmljZU1vbml0b3JcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlU2VydmljZU1vbml0b3IoXG4gICAgc2VydmljZTogUGxvbmVTZXJ2aWNlLFxuICAgIGlkOiBzdHJpbmcsXG4gICAgY29uZmlnOiB7IHBvcnQ6IHN0cmluZyB8IG51bWJlcjsgcGF0aDogc3RyaW5nIH0sXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHBvcnROYW1lID0gdHlwZW9mIGNvbmZpZy5wb3J0ID09PSAnc3RyaW5nJyA/IGNvbmZpZy5wb3J0IDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHBvcnROdW1iZXIgPSB0eXBlb2YgY29uZmlnLnBvcnQgPT09ICdudW1iZXInXG4gICAgICA/IFNlcnZpY2VNb25pdG9yU3BlY0VuZHBvaW50c1RhcmdldFBvcnQuZnJvbU51bWJlcihjb25maWcucG9ydClcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgbmV3IFNlcnZpY2VNb25pdG9yKHRoaXMsIGBzZXJ2aWNlbW9uaXRvci0ke2lkfWAsIHtcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIG5hbWU6IGAke3NlcnZpY2UubmFtZX0tbW9uaXRvcmAsXG4gICAgICAgIGxhYmVsczoge1xuICAgICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9uYW1lJzogc2VydmljZS5uYW1lLFxuICAgICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnQnOiAnc2VydmljZW1vbml0b3InLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHNwZWM6IHtcbiAgICAgICAgc2VsZWN0b3I6IHtcbiAgICAgICAgICBtYXRjaExhYmVsczoge1xuICAgICAgICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL25hbWUnOiBzZXJ2aWNlLmxhYmVsc1snYXBwLmt1YmVybmV0ZXMuaW8vbmFtZSddLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGVuZHBvaW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLihwb3J0TmFtZSAmJiB7IHBvcnQ6IHBvcnROYW1lIH0pLFxuICAgICAgICAgICAgLi4uKHBvcnROdW1iZXIgJiYgeyB0YXJnZXRQb3J0OiBwb3J0TnVtYmVyIH0pLFxuICAgICAgICAgICAgcGF0aDogY29uZmlnLnBhdGgsXG4gICAgICAgICAgICBpbnRlcnZhbDogJzMwcycsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn0iXX0=
|
|
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=
|
package/lib/service.d.ts
CHANGED
|
@@ -1,4 +1,79 @@
|
|
|
1
1
|
import { Construct } from 'constructs';
|
|
2
|
+
/**
|
|
3
|
+
* Configuration for the generated Kubernetes Service spec.
|
|
4
|
+
*
|
|
5
|
+
* Curated fields cover the common cases; use `overrides` as an escape hatch
|
|
6
|
+
* for any other `ServiceSpec` field. `overrides` has the highest precedence and
|
|
7
|
+
* can override every field, including the construct-managed `ports`/`selector`
|
|
8
|
+
* (at your own risk).
|
|
9
|
+
*/
|
|
10
|
+
export interface PloneServiceSpec {
|
|
11
|
+
/**
|
|
12
|
+
* Service type, e.g. ClusterIP | NodePort | LoadBalancer | ExternalName.
|
|
13
|
+
* @default - ClusterIP (Kubernetes default)
|
|
14
|
+
*/
|
|
15
|
+
readonly type?: string;
|
|
16
|
+
/**
|
|
17
|
+
* Traffic distribution preference, e.g. 'PreferClose' for topology-aware routing.
|
|
18
|
+
* @default - none
|
|
19
|
+
*/
|
|
20
|
+
readonly trafficDistribution?: string;
|
|
21
|
+
/**
|
|
22
|
+
* Session affinity, 'ClientIP' | 'None'.
|
|
23
|
+
* @default - None (Kubernetes default)
|
|
24
|
+
*/
|
|
25
|
+
readonly sessionAffinity?: string;
|
|
26
|
+
/**
|
|
27
|
+
* External traffic policy, 'Cluster' | 'Local'.
|
|
28
|
+
* @default - Cluster (Kubernetes default)
|
|
29
|
+
*/
|
|
30
|
+
readonly externalTrafficPolicy?: string;
|
|
31
|
+
/**
|
|
32
|
+
* Internal traffic policy, 'Cluster' | 'Local'.
|
|
33
|
+
* @default - Cluster (Kubernetes default)
|
|
34
|
+
*/
|
|
35
|
+
readonly internalTrafficPolicy?: string;
|
|
36
|
+
/**
|
|
37
|
+
* Publish not-ready addresses (e.g. for headless services with StatefulSets).
|
|
38
|
+
* @default - false
|
|
39
|
+
*/
|
|
40
|
+
readonly publishNotReadyAddresses?: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Load balancer implementation class.
|
|
43
|
+
* @default - none
|
|
44
|
+
*/
|
|
45
|
+
readonly loadBalancerClass?: string;
|
|
46
|
+
/**
|
|
47
|
+
* Source IP ranges allowed to access a LoadBalancer service.
|
|
48
|
+
* @default - none
|
|
49
|
+
*/
|
|
50
|
+
readonly loadBalancerSourceRanges?: string[];
|
|
51
|
+
/**
|
|
52
|
+
* Annotations to add to the Service metadata.
|
|
53
|
+
* @default - none
|
|
54
|
+
*/
|
|
55
|
+
readonly annotations?: {
|
|
56
|
+
[name: string]: string;
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Extra labels to add to the Service metadata.
|
|
60
|
+
* @default - none
|
|
61
|
+
*/
|
|
62
|
+
readonly labels?: {
|
|
63
|
+
[name: string]: string;
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Raw ServiceSpec overrides as a free-form map (e.g. `{ ipFamilyPolicy:
|
|
67
|
+
* 'PreferDualStack' }`). Highest precedence — merged on top of all curated
|
|
68
|
+
* fields and the construct-managed base. Use for any ServiceSpec field not
|
|
69
|
+
* covered above. Keys and values are passed through to the Service spec
|
|
70
|
+
* verbatim and are not validated by this construct.
|
|
71
|
+
* @default - none
|
|
72
|
+
*/
|
|
73
|
+
readonly overrides?: {
|
|
74
|
+
[key: string]: any;
|
|
75
|
+
};
|
|
76
|
+
}
|
|
2
77
|
export interface PloneServiceOptions {
|
|
3
78
|
/**
|
|
4
79
|
* targetPort number.
|
|
@@ -32,6 +107,12 @@ export interface PloneServiceOptions {
|
|
|
32
107
|
readonly annotations?: {
|
|
33
108
|
[name: string]: string;
|
|
34
109
|
};
|
|
110
|
+
/**
|
|
111
|
+
* Service spec configuration (type, trafficDistribution, sessionAffinity,
|
|
112
|
+
* raw overrides, ...).
|
|
113
|
+
* @default - construct-managed defaults only
|
|
114
|
+
*/
|
|
115
|
+
readonly spec?: PloneServiceSpec;
|
|
35
116
|
}
|
|
36
117
|
/**
|
|
37
118
|
* PloneService creates a Kubernetes Service for accessing Plone pods.
|