cdk8s-plus-36 0.0.1 → 2.0.0
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 +105714 -0
- package/CODE_OF_CONDUCT.md +3 -0
- package/CONTRIBUTING.md +185 -0
- package/DCO +34 -0
- package/LICENSE +202 -0
- package/NOTICE +1 -0
- package/OWNERS.md +5 -0
- package/README.md +21 -34
- package/SECURITY.md +5 -0
- package/cdk8s.yaml +13 -0
- package/docs/java.md +156096 -0
- package/docs/plus/config-map.md +98 -0
- package/docs/plus/container.md +133 -0
- package/docs/plus/cronjob.md +67 -0
- package/docs/plus/deployment.md +232 -0
- package/docs/plus/horizontal-pod-autoscaler.md +226 -0
- package/docs/plus/ingress.md +68 -0
- package/docs/plus/job.md +48 -0
- package/docs/plus/namespace.md +58 -0
- package/docs/plus/network-policy.md +341 -0
- package/docs/plus/pod.md +455 -0
- package/docs/plus/pv.md +82 -0
- package/docs/plus/pvc.md +77 -0
- package/docs/plus/rbac.md +104 -0
- package/docs/plus/secret.md +32 -0
- package/docs/plus/service-account.md +35 -0
- package/docs/plus/service.md +41 -0
- package/docs/plus/volume.md +84 -0
- package/docs/python.md +167536 -0
- package/docs/typescript.md +145485 -0
- package/git-hooks/README.md +9 -0
- package/git-hooks/prepare-commit-msg +18 -0
- package/git-hooks/setup.sh +10 -0
- package/lib/_action.d.ts +26 -0
- package/lib/_action.js +72 -0
- package/lib/api-resource.d.ts +298 -0
- package/lib/api-resource.js +438 -0
- package/lib/base.d.ts +79 -0
- package/lib/base.js +124 -0
- package/lib/config-map.d.ts +126 -0
- package/lib/config-map.js +199 -0
- package/lib/container.d.ts +1057 -0
- package/lib/container.js +944 -0
- package/lib/cron-job.d.ts +138 -0
- package/lib/cron-job.js +170 -0
- package/lib/daemon-set.d.ts +45 -0
- package/lib/daemon-set.js +91 -0
- package/lib/deployment.d.ts +235 -0
- package/lib/deployment.js +274 -0
- package/lib/handler.d.ts +62 -0
- package/lib/handler.js +88 -0
- package/lib/horizontal-pod-autoscaler.d.ts +500 -0
- package/lib/horizontal-pod-autoscaler.js +629 -0
- package/lib/imports/k8s.d.ts +27283 -0
- package/lib/imports/k8s.js +20112 -0
- package/lib/index.d.ts +26 -0
- package/lib/index.js +66 -0
- package/lib/ingress.d.ts +230 -0
- package/lib/ingress.js +282 -0
- package/lib/job.d.ts +64 -0
- package/lib/job.js +101 -0
- package/lib/namespace.d.ts +128 -0
- package/lib/namespace.js +148 -0
- package/lib/network-policy.d.ts +311 -0
- package/lib/network-policy.js +383 -0
- package/lib/pod.d.ts +1097 -0
- package/lib/pod.js +1227 -0
- package/lib/probe.d.ts +181 -0
- package/lib/probe.js +124 -0
- package/lib/pv.d.ts +375 -0
- package/lib/pv.js +387 -0
- package/lib/pvc.d.ts +163 -0
- package/lib/pvc.js +204 -0
- package/lib/role-binding.d.ts +138 -0
- package/lib/role-binding.js +207 -0
- package/lib/role.d.ts +268 -0
- package/lib/role.js +441 -0
- package/lib/secret.d.ts +195 -0
- package/lib/secret.js +221 -0
- package/lib/service-account.d.ts +83 -0
- package/lib/service-account.js +148 -0
- package/lib/service.d.ts +289 -0
- package/lib/service.js +235 -0
- package/lib/stateful-set.d.ts +206 -0
- package/lib/stateful-set.js +291 -0
- package/lib/utils.d.ts +4 -0
- package/lib/utils.js +33 -0
- package/lib/volume.d.ts +577 -0
- package/lib/volume.js +410 -0
- package/lib/workload.d.ts +121 -0
- package/lib/workload.js +158 -0
- package/node_modules/balanced-match/.github/FUNDING.yml +2 -0
- package/node_modules/balanced-match/LICENSE.md +21 -0
- package/node_modules/balanced-match/README.md +97 -0
- package/node_modules/balanced-match/index.js +62 -0
- package/node_modules/balanced-match/package.json +48 -0
- package/node_modules/brace-expansion/.github/FUNDING.yml +2 -0
- package/node_modules/brace-expansion/LICENSE +21 -0
- package/node_modules/brace-expansion/README.md +157 -0
- package/node_modules/brace-expansion/index.js +394 -0
- package/node_modules/brace-expansion/package.json +49 -0
- package/node_modules/minimatch/LICENSE +15 -0
- package/node_modules/minimatch/README.md +491 -0
- package/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts +2 -0
- package/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts.map +1 -0
- package/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js +14 -0
- package/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js.map +1 -0
- package/node_modules/minimatch/dist/commonjs/ast.d.ts +20 -0
- package/node_modules/minimatch/dist/commonjs/ast.d.ts.map +1 -0
- package/node_modules/minimatch/dist/commonjs/ast.js +747 -0
- package/node_modules/minimatch/dist/commonjs/ast.js.map +1 -0
- package/node_modules/minimatch/dist/commonjs/brace-expressions.d.ts +8 -0
- package/node_modules/minimatch/dist/commonjs/brace-expressions.d.ts.map +1 -0
- package/node_modules/minimatch/dist/commonjs/brace-expressions.js +152 -0
- package/node_modules/minimatch/dist/commonjs/brace-expressions.js.map +1 -0
- package/node_modules/minimatch/dist/commonjs/escape.d.ts +12 -0
- package/node_modules/minimatch/dist/commonjs/escape.d.ts.map +1 -0
- package/node_modules/minimatch/dist/commonjs/escape.js +22 -0
- package/node_modules/minimatch/dist/commonjs/escape.js.map +1 -0
- package/node_modules/minimatch/dist/commonjs/index.d.ts +98 -0
- package/node_modules/minimatch/dist/commonjs/index.d.ts.map +1 -0
- package/node_modules/minimatch/dist/commonjs/index.js +1023 -0
- package/node_modules/minimatch/dist/commonjs/index.js.map +1 -0
- package/node_modules/minimatch/dist/commonjs/package.json +3 -0
- package/node_modules/minimatch/dist/commonjs/unescape.d.ts +17 -0
- package/node_modules/minimatch/dist/commonjs/unescape.d.ts.map +1 -0
- package/node_modules/minimatch/dist/commonjs/unescape.js +24 -0
- package/node_modules/minimatch/dist/commonjs/unescape.js.map +1 -0
- package/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts +2 -0
- package/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts.map +1 -0
- package/node_modules/minimatch/dist/esm/assert-valid-pattern.js +10 -0
- package/node_modules/minimatch/dist/esm/assert-valid-pattern.js.map +1 -0
- package/node_modules/minimatch/dist/esm/ast.d.ts +20 -0
- package/node_modules/minimatch/dist/esm/ast.d.ts.map +1 -0
- package/node_modules/minimatch/dist/esm/ast.js +743 -0
- package/node_modules/minimatch/dist/esm/ast.js.map +1 -0
- package/node_modules/minimatch/dist/esm/brace-expressions.d.ts +8 -0
- package/node_modules/minimatch/dist/esm/brace-expressions.d.ts.map +1 -0
- package/node_modules/minimatch/dist/esm/brace-expressions.js +148 -0
- package/node_modules/minimatch/dist/esm/brace-expressions.js.map +1 -0
- package/node_modules/minimatch/dist/esm/escape.d.ts +12 -0
- package/node_modules/minimatch/dist/esm/escape.d.ts.map +1 -0
- package/node_modules/minimatch/dist/esm/escape.js +18 -0
- package/node_modules/minimatch/dist/esm/escape.js.map +1 -0
- package/node_modules/minimatch/dist/esm/index.d.ts +98 -0
- package/node_modules/minimatch/dist/esm/index.d.ts.map +1 -0
- package/node_modules/minimatch/dist/esm/index.js +1007 -0
- package/node_modules/minimatch/dist/esm/index.js.map +1 -0
- package/node_modules/minimatch/dist/esm/package.json +3 -0
- package/node_modules/minimatch/dist/esm/unescape.d.ts +17 -0
- package/node_modules/minimatch/dist/esm/unescape.d.ts.map +1 -0
- package/node_modules/minimatch/dist/esm/unescape.js +20 -0
- package/node_modules/minimatch/dist/esm/unescape.js.map +1 -0
- package/node_modules/minimatch/package.json +82 -0
- package/package.json +172 -6
- package/rotate.md +82 -0
package/lib/pvc.js
ADDED
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.PersistentVolumeMode = exports.PersistentVolumeAccessMode = exports.PersistentVolumeClaim = void 0;
|
|
37
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
38
|
+
const cdk8s_1 = require("cdk8s");
|
|
39
|
+
const constructs_1 = require("constructs");
|
|
40
|
+
const base = __importStar(require("./base"));
|
|
41
|
+
const k8s = __importStar(require("./imports/k8s"));
|
|
42
|
+
class ImportedPersistentVolumeClaim extends constructs_1.Construct {
|
|
43
|
+
_name;
|
|
44
|
+
resourceType = 'persistentvolumeclaims';
|
|
45
|
+
constructor(scope, id, name) {
|
|
46
|
+
super(scope, id);
|
|
47
|
+
this._name = name;
|
|
48
|
+
}
|
|
49
|
+
get name() {
|
|
50
|
+
return this._name;
|
|
51
|
+
}
|
|
52
|
+
get apiVersion() {
|
|
53
|
+
return k8s.KubePersistentVolumeClaim.GVK.apiVersion;
|
|
54
|
+
}
|
|
55
|
+
get apiGroup() {
|
|
56
|
+
return '';
|
|
57
|
+
}
|
|
58
|
+
get kind() {
|
|
59
|
+
return k8s.KubePersistentVolumeClaim.GVK.kind;
|
|
60
|
+
}
|
|
61
|
+
get resourceName() {
|
|
62
|
+
return this.name;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* A PersistentVolumeClaim (PVC) is a request for storage by a user.
|
|
67
|
+
* It is similar to a Pod. Pods consume node resources and PVCs consume PV resources.
|
|
68
|
+
* Pods can request specific levels of resources (CPU and Memory).
|
|
69
|
+
* Claims can request specific size and access modes
|
|
70
|
+
*/
|
|
71
|
+
class PersistentVolumeClaim extends base.Resource {
|
|
72
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk8s-plus-36.PersistentVolumeClaim", version: "2.0.0" };
|
|
73
|
+
/**
|
|
74
|
+
* Imports a pvc from the cluster as a reference.
|
|
75
|
+
*/
|
|
76
|
+
static fromClaimName(scope, id, claimName) {
|
|
77
|
+
return new ImportedPersistentVolumeClaim(scope, id, claimName);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* @see base.Resource.apiObject
|
|
81
|
+
*/
|
|
82
|
+
apiObject;
|
|
83
|
+
resourceType = 'persistentvolumeclaims';
|
|
84
|
+
/**
|
|
85
|
+
* Storage requirement of this claim.
|
|
86
|
+
*/
|
|
87
|
+
storage;
|
|
88
|
+
/**
|
|
89
|
+
* Volume mode requirement of this claim.
|
|
90
|
+
*/
|
|
91
|
+
volumeMode;
|
|
92
|
+
/**
|
|
93
|
+
* Storage class requirment of this claim.
|
|
94
|
+
*/
|
|
95
|
+
storageClassName;
|
|
96
|
+
_accessModes;
|
|
97
|
+
_volume;
|
|
98
|
+
constructor(scope, id, props = {}) {
|
|
99
|
+
super(scope, id);
|
|
100
|
+
this.storage = props.storage;
|
|
101
|
+
this.volumeMode = props.volumeMode ?? PersistentVolumeMode.FILE_SYSTEM;
|
|
102
|
+
this.storageClassName = props.storageClassName;
|
|
103
|
+
this._accessModes = props.accessModes;
|
|
104
|
+
if (props.volume) {
|
|
105
|
+
this.bind(props.volume);
|
|
106
|
+
}
|
|
107
|
+
this.apiObject = new k8s.KubePersistentVolumeClaim(this, 'Resource', {
|
|
108
|
+
metadata: props.metadata,
|
|
109
|
+
spec: cdk8s_1.Lazy.any({ produce: () => this._toKube() }),
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Access modes requirement of this claim.
|
|
114
|
+
*/
|
|
115
|
+
get accessModes() {
|
|
116
|
+
return this._accessModes ? [...this._accessModes] : undefined;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* PV this claim is bound to. Undefined means the claim is not bound
|
|
120
|
+
* to any specific volume.
|
|
121
|
+
*/
|
|
122
|
+
get volume() {
|
|
123
|
+
return this._volume;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Bind a claim to a specific volume.
|
|
127
|
+
* Note that you must also bind the volume to the claim.
|
|
128
|
+
*
|
|
129
|
+
* @see https://kubernetes.io/docs/concepts/storage/persistent-volumes/#binding
|
|
130
|
+
*
|
|
131
|
+
* @param vol The PV to bind to.
|
|
132
|
+
*/
|
|
133
|
+
bind(vol) {
|
|
134
|
+
if (this._volume && this._volume.name !== vol.name) {
|
|
135
|
+
throw new Error(`Cannot bind claim '${this.name}' to volume '${vol.name}' since it is already bound to volume '${this._volume.name}'`);
|
|
136
|
+
}
|
|
137
|
+
this._volume = vol;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* @internal
|
|
141
|
+
*/
|
|
142
|
+
_toKube() {
|
|
143
|
+
const storage = this.storage ? k8s.Quantity.fromString(this.storage.toGibibytes({
|
|
144
|
+
rounding: cdk8s_1.SizeRoundingBehavior.NONE,
|
|
145
|
+
}) + 'Gi') : undefined;
|
|
146
|
+
return {
|
|
147
|
+
volumeName: this.volume ? this.volume.name : undefined,
|
|
148
|
+
accessModes: this.accessModes?.map(a => a.toString()),
|
|
149
|
+
resources: storage ? { requests: { storage } } : undefined,
|
|
150
|
+
volumeMode: this.volumeMode,
|
|
151
|
+
storageClassName: this.storageClassName,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
exports.PersistentVolumeClaim = PersistentVolumeClaim;
|
|
156
|
+
/**
|
|
157
|
+
* Access Modes.
|
|
158
|
+
*/
|
|
159
|
+
var PersistentVolumeAccessMode;
|
|
160
|
+
(function (PersistentVolumeAccessMode) {
|
|
161
|
+
/**
|
|
162
|
+
* The volume can be mounted as read-write by a single node.
|
|
163
|
+
* ReadWriteOnce access mode still can allow multiple pods to access
|
|
164
|
+
* the volume when the pods are running on the same node.
|
|
165
|
+
*/
|
|
166
|
+
PersistentVolumeAccessMode["READ_WRITE_ONCE"] = "ReadWriteOnce";
|
|
167
|
+
/**
|
|
168
|
+
* The volume can be mounted as read-only by many nodes.
|
|
169
|
+
*/
|
|
170
|
+
PersistentVolumeAccessMode["READ_ONLY_MANY"] = "ReadOnlyMany";
|
|
171
|
+
/**
|
|
172
|
+
* The volume can be mounted as read-write by many nodes.
|
|
173
|
+
*/
|
|
174
|
+
PersistentVolumeAccessMode["READ_WRITE_MANY"] = "ReadWriteMany";
|
|
175
|
+
/**
|
|
176
|
+
* The volume can be mounted as read-write by a single Pod.
|
|
177
|
+
* Use ReadWriteOncePod access mode if you want to ensure that
|
|
178
|
+
* only one pod across whole cluster can read that PVC or write to it.
|
|
179
|
+
* This is only supported for CSI volumes and Kubernetes version 1.22+.
|
|
180
|
+
*/
|
|
181
|
+
PersistentVolumeAccessMode["READ_WRITE_ONCE_POD"] = "ReadWriteOncePod";
|
|
182
|
+
})(PersistentVolumeAccessMode || (exports.PersistentVolumeAccessMode = PersistentVolumeAccessMode = {}));
|
|
183
|
+
/**
|
|
184
|
+
* Volume Modes.
|
|
185
|
+
*/
|
|
186
|
+
var PersistentVolumeMode;
|
|
187
|
+
(function (PersistentVolumeMode) {
|
|
188
|
+
/**
|
|
189
|
+
* Volume is ounted into Pods into a directory.
|
|
190
|
+
* If the volume is backed by a block device and the device is empty,
|
|
191
|
+
* Kubernetes creates a filesystem on the device before mounting it
|
|
192
|
+
* for the first time.
|
|
193
|
+
*/
|
|
194
|
+
PersistentVolumeMode["FILE_SYSTEM"] = "Filesystem";
|
|
195
|
+
/**
|
|
196
|
+
* Use a volume as a raw block device. Such volume is presented into a Pod as a block device,
|
|
197
|
+
* without any filesystem on it. This mode is useful to provide a Pod the fastest possible way
|
|
198
|
+
* to access a volume, without any filesystem layer between the Pod
|
|
199
|
+
* and the volume. On the other hand, the application running in
|
|
200
|
+
* the Pod must know how to handle a raw block device
|
|
201
|
+
*/
|
|
202
|
+
PersistentVolumeMode["BLOCK"] = "Block";
|
|
203
|
+
})(PersistentVolumeMode || (exports.PersistentVolumeMode = PersistentVolumeMode = {}));
|
|
204
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHZjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3B2Yy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsaUNBQW9FO0FBQ3BFLDJDQUF1QztBQUN2Qyw2Q0FBK0I7QUFDL0IsbURBQXFDO0FBc0VyQyxNQUFNLDZCQUE4QixTQUFRLHNCQUFTO0lBRWxDLEtBQUssQ0FBUztJQUVmLFlBQVksR0FBRyx3QkFBd0IsQ0FBQztJQUV4RCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLElBQVk7UUFDcEQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztJQUNwQixDQUFDO0lBRUQsSUFBVyxJQUFJO1FBQ2IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxHQUFHLENBQUMseUJBQXlCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztJQUN0RCxDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELElBQVcsSUFBSTtRQUNiLE9BQU8sR0FBRyxDQUFDLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7SUFDaEQsQ0FBQztJQUVELElBQVcsWUFBWTtRQUNyQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztDQUVGO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFhLHFCQUFzQixTQUFRLElBQUksQ0FBQyxRQUFROztJQUV0RDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsU0FBaUI7UUFDekUsT0FBTyxJQUFJLDZCQUE2QixDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVEOztP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LENBQUMsVUFBVTtZQUMzQixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1NBQ3hDLENBQUM7SUFDSixDQUFDOztBQWpHSCxzREFtR0M7QUFFRDs7R0FFRztBQUNILElBQVksMEJBMkJYO0FBM0JELFdBQVksMEJBQTBCO0lBRXBDOzs7O09BSUc7SUFDSCwrREFBaUMsQ0FBQTtJQUVqQzs7T0FFRztJQUNILDZEQUErQixDQUFBO0lBRS9COztPQUVHO0lBQ0gsK0RBQWlDLENBQUE7SUFFakM7Ozs7O09BS0c7SUFDSCxzRUFBd0MsQ0FBQTtBQUUxQyxDQUFDLEVBM0JXLDBCQUEwQiwwQ0FBMUIsMEJBQTBCLFFBMkJyQztBQUVEOztHQUVHO0FBQ0gsSUFBWSxvQkFrQlg7QUFsQkQsV0FBWSxvQkFBb0I7SUFFOUI7Ozs7O09BS0c7SUFDSCxrREFBMEIsQ0FBQTtJQUUxQjs7Ozs7O09BTUc7SUFDSCx1Q0FBZSxDQUFBO0FBQ2pCLENBQUMsRUFsQlcsb0JBQW9CLG9DQUFwQixvQkFBb0IsUUFrQi9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2l6ZSwgU2l6ZVJvdW5kaW5nQmVoYXZpb3IsIEFwaU9iamVjdCwgTGF6eSB9IGZyb20gJ2NkazhzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0ICogYXMgYmFzZSBmcm9tICcuL2Jhc2UnO1xuaW1wb3J0ICogYXMgazhzIGZyb20gJy4vaW1wb3J0cy9rOHMnO1xuaW1wb3J0ICogYXMgcHYgZnJvbSAnLi9wdic7XG5cbi8qKlxuICogQ29udHJhY3Qgb2YgYSBgUGVyc2lzdGVudFZvbHVtZUNsYWltYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUGVyc2lzdGVudFZvbHVtZUNsYWltIGV4dGVuZHMgYmFzZS5JUmVzb3VyY2Uge1xuXG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYFBlcnNpc3RlbnRWb2x1bWVDbGFpbWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGVyc2lzdGVudFZvbHVtZUNsYWltUHJvcHMgZXh0ZW5kcyBiYXNlLlJlc291cmNlUHJvcHMge1xuXG4gIC8qKlxuICAgKiBDb250YWlucyB0aGUgYWNjZXNzIG1vZGVzIHRoZSB2b2x1bWUgc2hvdWxkIHN1cHBvcnQuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMjYWNjZXNzLW1vZGVzLTFcbiAgICogQGRlZmF1bHQgLSBObyBhY2Nlc3MgbW9kZXMgcmVxdWlyZW1lbnQuXG4gICAqL1xuICByZWFkb25seSBhY2Nlc3NNb2Rlcz86IFBlcnNpc3RlbnRWb2x1bWVBY2Nlc3NNb2RlW107XG5cbiAgLyoqXG4gICAqIE1pbmltdW0gc3RvcmFnZSBzaXplIHRoZSB2b2x1bWUgc2hvdWxkIGhhdmUuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMjcmVzb3VyY2VzXG4gICAqIEBkZWZhdWx0IC0gTm8gc3RvcmFnZSByZXF1aXJlbWVudC5cbiAgICovXG4gIHJlYWRvbmx5IHN0b3JhZ2U/OiBTaXplO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBTdG9yYWdlQ2xhc3MgcmVxdWlyZWQgYnkgdGhlIGNsYWltLlxuICAgKiBXaGVuIHRoaXMgcHJvcGVydHkgaXMgbm90IHNldCwgdGhlIGJlaGF2aW9yIGlzIGFzIGZvbGxvd3M6XG4gICAqXG4gICAqIC0gSWYgdGhlIGFkbWlzc2lvbiBwbHVnaW4gaXMgdHVybmVkIG9uLCB0aGUgc3RvcmFnZSBjbGFzcyBtYXJrZWQgYXMgZGVmYXVsdCB3aWxsIGJlIHVzZWQuXG4gICAqIC0gSWYgdGhlIGFkbWlzc2lvbiBwbHVnaW4gaXMgdHVybmVkIG9mZiwgdGhlIHB2YyBjYW4gb25seSBiZSBib3VuZCB0byB2b2x1bWVzIHdpdGhvdXQgYSBzdG9yYWdlIGNsYXNzLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzI2NsYXNzLTFcbiAgICogQGRlZmF1bHQgLSBOb3Qgc2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgc3RvcmFnZUNsYXNzTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogRGVmaW5lcyB3aGF0IHR5cGUgb2Ygdm9sdW1lIGlzIHJlcXVpcmVkIGJ5IHRoZSBjbGFpbS5cbiAgICpcbiAgICogQGRlZmF1bHQgVm9sdW1lTW9kZS5GSUxFX1NZU1RFTVxuICAgKi9cbiAgcmVhZG9ubHkgdm9sdW1lTW9kZT86IFBlcnNpc3RlbnRWb2x1bWVNb2RlO1xuXG4gIC8qKlxuICAgKiBUaGUgUGVyc2lzdGVudFZvbHVtZSBiYWNraW5nIHRoaXMgY2xhaW0uXG4gICAqXG4gICAqIFRoZSBjb250cm9sIHBsYW5lIHN0aWxsIGNoZWNrcyB0aGF0IHN0b3JhZ2UgY2xhc3MsIGFjY2VzcyBtb2RlcyxcbiAgICogYW5kIHJlcXVlc3RlZCBzdG9yYWdlIHNpemUgb24gdGhlIHZvbHVtZSBhcmUgdmFsaWQuXG4gICAqXG4gICAqIE5vdGUgdGhhdCBpbiBvcmRlciB0byBndWFyYW50ZWUgYSBwcm9wZXIgYmluZGluZywgdGhlIHZvbHVtZSBzaG91bGRcbiAgICogYWxzbyBkZWZpbmUgYSBgY2xhaW1SZWZgIHJlZmVycmluZyB0byB0aGlzIGNsYWltLiBPdGhlcndpc2UsIHRoZSB2b2x1bWUgbWF5IGJlXG4gICAqIGNsYWltZWQgYmUgb3RoZXIgcHZjJ3MgYmVmb3JlIGl0IGdldHMgYSBjaGFuY2UgdG8gYmluZCB0byB0aGlzIG9uZS5cbiAgICpcbiAgICogSWYgdGhlIHZvbHVtZSBpcyBtYW5hZ2VkIChpLmUgbm90IGltcG9ydGVkKSwgeW91IGNhbiB1c2UgYHB2LmNsYWltKClgIHRvIGVhc2lseVxuICAgKiBjcmVhdGUgYSBiaS1kaXJlY3Rpb25hbCBib3VuZGVkIGNsYWltLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzLyNiaW5kaW5nLlxuICAgKiBAZGVmYXVsdCAtIE5vIHNwZWNpZmljIHZvbHVtZSBiaW5kaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgdm9sdW1lPzogcHYuSVBlcnNpc3RlbnRWb2x1bWU7XG5cbn1cblxuY2xhc3MgSW1wb3J0ZWRQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0gZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJUGVyc2lzdGVudFZvbHVtZUNsYWltIHtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9uYW1lOiBzdHJpbmc7XG5cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlVHlwZSA9ICdwZXJzaXN0ZW50dm9sdW1lY2xhaW1zJztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMuX25hbWUgPSBuYW1lO1xuICB9XG5cbiAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFwaVZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gazhzLkt1YmVQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0uR1ZLLmFwaVZlcnNpb247XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFwaUdyb3VwKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcHVibGljIGdldCBraW5kKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGs4cy5LdWJlUGVyc2lzdGVudFZvbHVtZUNsYWltLkdWSy5raW5kO1xuICB9XG5cbiAgcHVibGljIGdldCByZXNvdXJjZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbn1cblxuLyoqXG4gKiBBIFBlcnNpc3RlbnRWb2x1bWVDbGFpbSAoUFZDKSBpcyBhIHJlcXVlc3QgZm9yIHN0b3JhZ2UgYnkgYSB1c2VyLlxuICogSXQgaXMgc2ltaWxhciB0byBhIFBvZC4gUG9kcyBjb25zdW1lIG5vZGUgcmVzb3VyY2VzIGFuZCBQVkNzIGNvbnN1bWUgUFYgcmVzb3VyY2VzLlxuICogUG9kcyBjYW4gcmVxdWVzdCBzcGVjaWZpYyBsZXZlbHMgb2YgcmVzb3VyY2VzIChDUFUgYW5kIE1lbW9yeSkuXG4gKiBDbGFpbXMgY2FuIHJlcXVlc3Qgc3BlY2lmaWMgc2l6ZSBhbmQgYWNjZXNzIG1vZGVzXG4gKi9cbmV4cG9ydCBjbGFzcyBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0gZXh0ZW5kcyBiYXNlLlJlc291cmNlIGltcGxlbWVudHMgSVBlcnNpc3RlbnRWb2x1bWVDbGFpbSB7XG5cbiAgLyoqXG4gICAqIEltcG9ydHMgYSBwdmMgZnJvbSB0aGUgY2x1c3RlciBhcyBhIHJlZmVyZW5jZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUNsYWltTmFtZShzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBjbGFpbU5hbWU6IHN0cmluZyk6IElQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0ge1xuICAgIHJldHVybiBuZXcgSW1wb3J0ZWRQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0oc2NvcGUsIGlkLCBjbGFpbU5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgYmFzZS5SZXNvdXJjZS5hcGlPYmplY3RcbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBhcGlPYmplY3Q6IEFwaU9iamVjdDtcblxuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2VUeXBlID0gJ3BlcnNpc3RlbnR2b2x1bWVjbGFpbXMnO1xuXG4gIC8qKlxuICAgKiBTdG9yYWdlIHJlcXVpcmVtZW50IG9mIHRoaXMgY2xhaW0uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3RvcmFnZT86IFNpemU7XG5cbiAgLyoqXG4gICAqIFZvbHVtZSBtb2RlIHJlcXVpcmVtZW50IG9mIHRoaXMgY2xhaW0uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdm9sdW1lTW9kZTogUGVyc2lzdGVudFZvbHVtZU1vZGU7XG5cbiAgLyoqXG4gICAqIFN0b3JhZ2UgY2xhc3MgcmVxdWlybWVudCBvZiB0aGlzIGNsYWltLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHN0b3JhZ2VDbGFzc05hbWU/OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfYWNjZXNzTW9kZXM/OiBQZXJzaXN0ZW50Vm9sdW1lQWNjZXNzTW9kZVtdO1xuXG4gIHByaXZhdGUgX3ZvbHVtZT86IHB2LklQZXJzaXN0ZW50Vm9sdW1lO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUGVyc2lzdGVudFZvbHVtZUNsYWltUHJvcHMgPSB7IH0pIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5zdG9yYWdlID0gcHJvcHMuc3RvcmFnZTtcbiAgICB0aGlzLnZvbHVtZU1vZGUgPSBwcm9wcy52b2x1bWVNb2RlID8/IFBlcnNpc3RlbnRWb2x1bWVNb2RlLkZJTEVfU1lTVEVNO1xuICAgIHRoaXMuc3RvcmFnZUNsYXNzTmFtZSA9IHByb3BzLnN0b3JhZ2VDbGFzc05hbWU7XG4gICAgdGhpcy5fYWNjZXNzTW9kZXMgPSBwcm9wcy5hY2Nlc3NNb2RlcztcblxuICAgIGlmIChwcm9wcy52b2x1bWUpIHtcbiAgICAgIHRoaXMuYmluZChwcm9wcy52b2x1bWUpO1xuICAgIH1cblxuICAgIHRoaXMuYXBpT2JqZWN0ID0gbmV3IGs4cy5LdWJlUGVyc2lzdGVudFZvbHVtZUNsYWltKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIG1ldGFkYXRhOiBwcm9wcy5tZXRhZGF0YSxcbiAgICAgIHNwZWM6IExhenkuYW55KHsgcHJvZHVjZTogKCkgPT4gdGhpcy5fdG9LdWJlKCkgfSksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWNjZXNzIG1vZGVzIHJlcXVpcmVtZW50IG9mIHRoaXMgY2xhaW0uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFjY2Vzc01vZGVzKCk6IFBlcnNpc3RlbnRWb2x1bWVBY2Nlc3NNb2RlW10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9hY2Nlc3NNb2RlcyA/IFsuLi50aGlzLl9hY2Nlc3NNb2Rlc10gOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogUFYgdGhpcyBjbGFpbSBpcyBib3VuZCB0by4gVW5kZWZpbmVkIG1lYW5zIHRoZSBjbGFpbSBpcyBub3QgYm91bmRcbiAgICogdG8gYW55IHNwZWNpZmljIHZvbHVtZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgdm9sdW1lKCk6IHB2LklQZXJzaXN0ZW50Vm9sdW1lIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fdm9sdW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmQgYSBjbGFpbSB0byBhIHNwZWNpZmljIHZvbHVtZS5cbiAgICogTm90ZSB0aGF0IHlvdSBtdXN0IGFsc28gYmluZCB0aGUgdm9sdW1lIHRvIHRoZSBjbGFpbS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lcy8jYmluZGluZ1xuICAgKlxuICAgKiBAcGFyYW0gdm9sIFRoZSBQViB0byBiaW5kIHRvLlxuICAgKi9cbiAgcHVibGljIGJpbmQodm9sOiBwdi5JUGVyc2lzdGVudFZvbHVtZSkge1xuICAgIGlmICh0aGlzLl92b2x1bWUgJiYgdGhpcy5fdm9sdW1lLm5hbWUgIT09IHZvbC5uYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBiaW5kIGNsYWltICcke3RoaXMubmFtZX0nIHRvIHZvbHVtZSAnJHt2b2wubmFtZX0nIHNpbmNlIGl0IGlzIGFscmVhZHkgYm91bmQgdG8gdm9sdW1lICcke3RoaXMuX3ZvbHVtZS5uYW1lfSdgKTtcbiAgICB9XG4gICAgdGhpcy5fdm9sdW1lID0gdm9sO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF90b0t1YmUoKTogazhzLlBlcnNpc3RlbnRWb2x1bWVDbGFpbVNwZWMge1xuICAgIGNvbnN0IHN0b3JhZ2UgPSB0aGlzLnN0b3JhZ2UgPyBrOHMuUXVhbnRpdHkuZnJvbVN0cmluZyh0aGlzLnN0b3JhZ2UudG9HaWJpYnl0ZXMoe1xuICAgICAgcm91bmRpbmc6IFNpemVSb3VuZGluZ0JlaGF2aW9yLk5PTkUsXG4gICAgfSkgKyAnR2knKSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4ge1xuICAgICAgdm9sdW1lTmFtZTogdGhpcy52b2x1bWUgPyB0aGlzLnZvbHVtZS5uYW1lIDogdW5kZWZpbmVkLFxuICAgICAgYWNjZXNzTW9kZXM6IHRoaXMuYWNjZXNzTW9kZXM/Lm1hcChhID0+IGEudG9TdHJpbmcoKSksXG4gICAgICByZXNvdXJjZXM6IHN0b3JhZ2UgPyB7IHJlcXVlc3RzOiB7IHN0b3JhZ2UgfSB9IDogdW5kZWZpbmVkLFxuICAgICAgdm9sdW1lTW9kZTogdGhpcy52b2x1bWVNb2RlLFxuICAgICAgc3RvcmFnZUNsYXNzTmFtZTogdGhpcy5zdG9yYWdlQ2xhc3NOYW1lLFxuICAgIH07XG4gIH1cblxufVxuXG4vKipcbiAqIEFjY2VzcyBNb2Rlcy5cbiAqL1xuZXhwb3J0IGVudW0gUGVyc2lzdGVudFZvbHVtZUFjY2Vzc01vZGUge1xuXG4gIC8qKlxuICAgKiBUaGUgdm9sdW1lIGNhbiBiZSBtb3VudGVkIGFzIHJlYWQtd3JpdGUgYnkgYSBzaW5nbGUgbm9kZS5cbiAgICogUmVhZFdyaXRlT25jZSBhY2Nlc3MgbW9kZSBzdGlsbCBjYW4gYWxsb3cgbXVsdGlwbGUgcG9kcyB0byBhY2Nlc3NcbiAgICogdGhlIHZvbHVtZSB3aGVuIHRoZSBwb2RzIGFyZSBydW5uaW5nIG9uIHRoZSBzYW1lIG5vZGUuXG4gICAqL1xuICBSRUFEX1dSSVRFX09OQ0UgPSAnUmVhZFdyaXRlT25jZScsXG5cbiAgLyoqXG4gICAqIFRoZSB2b2x1bWUgY2FuIGJlIG1vdW50ZWQgYXMgcmVhZC1vbmx5IGJ5IG1hbnkgbm9kZXMuXG4gICAqL1xuICBSRUFEX09OTFlfTUFOWSA9ICdSZWFkT25seU1hbnknLFxuXG4gIC8qKlxuICAgKiBUaGUgdm9sdW1lIGNhbiBiZSBtb3VudGVkIGFzIHJlYWQtd3JpdGUgYnkgbWFueSBub2Rlcy5cbiAgICovXG4gIFJFQURfV1JJVEVfTUFOWSA9ICdSZWFkV3JpdGVNYW55JyxcblxuICAvKipcbiAgICogVGhlIHZvbHVtZSBjYW4gYmUgbW91bnRlZCBhcyByZWFkLXdyaXRlIGJ5IGEgc2luZ2xlIFBvZC5cbiAgICogVXNlIFJlYWRXcml0ZU9uY2VQb2QgYWNjZXNzIG1vZGUgaWYgeW91IHdhbnQgdG8gZW5zdXJlIHRoYXRcbiAgICogb25seSBvbmUgcG9kIGFjcm9zcyB3aG9sZSBjbHVzdGVyIGNhbiByZWFkIHRoYXQgUFZDIG9yIHdyaXRlIHRvIGl0LlxuICAgKiBUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBDU0kgdm9sdW1lcyBhbmQgS3ViZXJuZXRlcyB2ZXJzaW9uIDEuMjIrLlxuICAgKi9cbiAgUkVBRF9XUklURV9PTkNFX1BPRCA9ICdSZWFkV3JpdGVPbmNlUG9kJyxcblxufVxuXG4vKipcbiAqIFZvbHVtZSBNb2Rlcy5cbiAqL1xuZXhwb3J0IGVudW0gUGVyc2lzdGVudFZvbHVtZU1vZGUge1xuXG4gIC8qKlxuICAgKiBWb2x1bWUgaXMgb3VudGVkIGludG8gUG9kcyBpbnRvIGEgZGlyZWN0b3J5LlxuICAgKiBJZiB0aGUgdm9sdW1lIGlzIGJhY2tlZCBieSBhIGJsb2NrIGRldmljZSBhbmQgdGhlIGRldmljZSBpcyBlbXB0eSxcbiAgICogS3ViZXJuZXRlcyBjcmVhdGVzIGEgZmlsZXN5c3RlbSBvbiB0aGUgZGV2aWNlIGJlZm9yZSBtb3VudGluZyBpdFxuICAgKiBmb3IgdGhlIGZpcnN0IHRpbWUuXG4gICAqL1xuICBGSUxFX1NZU1RFTSA9ICdGaWxlc3lzdGVtJyxcblxuICAvKipcbiAgICogVXNlIGEgdm9sdW1lIGFzIGEgcmF3IGJsb2NrIGRldmljZS4gU3VjaCB2b2x1bWUgaXMgcHJlc2VudGVkIGludG8gYSBQb2QgYXMgYSBibG9jayBkZXZpY2UsXG4gICAqIHdpdGhvdXQgYW55IGZpbGVzeXN0ZW0gb24gaXQuIFRoaXMgbW9kZSBpcyB1c2VmdWwgdG8gcHJvdmlkZSBhIFBvZCB0aGUgZmFzdGVzdCBwb3NzaWJsZSB3YXlcbiAgICogdG8gYWNjZXNzIGEgdm9sdW1lLCB3aXRob3V0IGFueSBmaWxlc3lzdGVtIGxheWVyIGJldHdlZW4gdGhlIFBvZFxuICAgKiBhbmQgdGhlIHZvbHVtZS4gT24gdGhlIG90aGVyIGhhbmQsIHRoZSBhcHBsaWNhdGlvbiBydW5uaW5nIGluXG4gICAqIHRoZSBQb2QgbXVzdCBrbm93IGhvdyB0byBoYW5kbGUgYSByYXcgYmxvY2sgZGV2aWNlXG4gICAqL1xuICBCTE9DSyA9ICdCbG9jaycsXG59XG4iXX0=
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { ApiObject } from 'cdk8s';
|
|
2
|
+
import { Construct, IConstruct } from 'constructs';
|
|
3
|
+
import { Resource, ResourceProps } from './base';
|
|
4
|
+
import * as role from './role';
|
|
5
|
+
/**
|
|
6
|
+
* Subject contains a reference to the object or user identities a role binding
|
|
7
|
+
* applies to. This can either hold a direct API object reference, or a value
|
|
8
|
+
* for non-objects such as user and group names.
|
|
9
|
+
*/
|
|
10
|
+
export interface SubjectConfiguration {
|
|
11
|
+
/**
|
|
12
|
+
* APIGroup holds the API group of the referenced subject. Defaults to "" for
|
|
13
|
+
* ServiceAccount subjects. Defaults to "rbac.authorization.k8s.io" for User
|
|
14
|
+
* and Group subjects.
|
|
15
|
+
*/
|
|
16
|
+
readonly apiGroup?: string;
|
|
17
|
+
/**
|
|
18
|
+
* Kind of object being referenced. Values defined by this API group are
|
|
19
|
+
* "User", "Group", and "ServiceAccount". If the Authorizer does not
|
|
20
|
+
* recognized the kind value, the Authorizer should report an error.
|
|
21
|
+
*/
|
|
22
|
+
readonly kind: string;
|
|
23
|
+
/**
|
|
24
|
+
* Name of the object being referenced.
|
|
25
|
+
*/
|
|
26
|
+
readonly name: string;
|
|
27
|
+
/**
|
|
28
|
+
* Namespace of the referenced object. If the object kind is non-namespace,
|
|
29
|
+
* such as "User" or "Group", and this value is not empty the Authorizer
|
|
30
|
+
* should report an error.
|
|
31
|
+
*/
|
|
32
|
+
readonly namespace?: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Represents an object that can be used as a role binding subject.
|
|
36
|
+
*/
|
|
37
|
+
export interface ISubject extends IConstruct {
|
|
38
|
+
/**
|
|
39
|
+
* Return the subject configuration.
|
|
40
|
+
*/
|
|
41
|
+
toSubjectConfiguration(): SubjectConfiguration;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Properties for `RoleBinding`.
|
|
45
|
+
*/
|
|
46
|
+
export interface RoleBindingProps extends ResourceProps {
|
|
47
|
+
/**
|
|
48
|
+
* The role to bind to. A RoleBinding can reference a Role or a ClusterRole.
|
|
49
|
+
*/
|
|
50
|
+
readonly role: role.IRole;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* A RoleBinding grants permissions within a specific namespace to a user or
|
|
54
|
+
* set of users.
|
|
55
|
+
*/
|
|
56
|
+
export declare class RoleBinding extends Resource {
|
|
57
|
+
/**
|
|
58
|
+
* @see base.Resource.apiObject
|
|
59
|
+
*/
|
|
60
|
+
protected readonly apiObject: ApiObject;
|
|
61
|
+
readonly resourceType = "rolebindings";
|
|
62
|
+
readonly role: role.IRole;
|
|
63
|
+
private readonly _subjects;
|
|
64
|
+
constructor(scope: Construct, id: string, props: RoleBindingProps);
|
|
65
|
+
/**
|
|
66
|
+
* Adds a subject to the role.
|
|
67
|
+
* @param subjects The subjects to add
|
|
68
|
+
*/
|
|
69
|
+
addSubjects(...subjects: ISubject[]): void;
|
|
70
|
+
get subjects(): ISubject[];
|
|
71
|
+
private synthesizeRoleRef;
|
|
72
|
+
private synthesizeSubjects;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Properties for `ClusterRoleBinding`.
|
|
76
|
+
*/
|
|
77
|
+
export interface ClusterRoleBindingProps extends ResourceProps {
|
|
78
|
+
/**
|
|
79
|
+
* The role to bind to.
|
|
80
|
+
*/
|
|
81
|
+
readonly role: role.IClusterRole;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* A ClusterRoleBinding grants permissions cluster-wide to a user or
|
|
85
|
+
* set of users.
|
|
86
|
+
*/
|
|
87
|
+
export declare class ClusterRoleBinding extends Resource {
|
|
88
|
+
/**
|
|
89
|
+
* @see base.Resource.apiObject
|
|
90
|
+
*/
|
|
91
|
+
protected readonly apiObject: ApiObject;
|
|
92
|
+
readonly resourceType = "clusterrolebindings";
|
|
93
|
+
readonly role: role.IClusterRole;
|
|
94
|
+
private readonly _subjects;
|
|
95
|
+
constructor(scope: Construct, id: string, props: ClusterRoleBindingProps);
|
|
96
|
+
/**
|
|
97
|
+
* Adds a subject to the role.
|
|
98
|
+
* @param subjects The subjects to add
|
|
99
|
+
*/
|
|
100
|
+
addSubjects(...subjects: ISubject[]): void;
|
|
101
|
+
get subjects(): ISubject[];
|
|
102
|
+
private synthesizeRoleRef;
|
|
103
|
+
private synthesizeSubjects;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Represents a user.
|
|
107
|
+
*/
|
|
108
|
+
export declare class User extends Construct implements ISubject {
|
|
109
|
+
/**
|
|
110
|
+
* Reference a user in the cluster by name.
|
|
111
|
+
*/
|
|
112
|
+
static fromName(scope: Construct, id: string, name: string): User;
|
|
113
|
+
readonly apiGroup: string | undefined;
|
|
114
|
+
readonly kind: string;
|
|
115
|
+
readonly name: string;
|
|
116
|
+
private constructor();
|
|
117
|
+
/**
|
|
118
|
+
* @see ISubect.toSubjectConfiguration()
|
|
119
|
+
*/
|
|
120
|
+
toSubjectConfiguration(): SubjectConfiguration;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Represents a group.
|
|
124
|
+
*/
|
|
125
|
+
export declare class Group extends Construct implements ISubject {
|
|
126
|
+
/**
|
|
127
|
+
* Reference a group by name.
|
|
128
|
+
*/
|
|
129
|
+
static fromName(scope: Construct, id: string, name: string): Group;
|
|
130
|
+
readonly apiGroup: string | undefined;
|
|
131
|
+
readonly kind: string;
|
|
132
|
+
readonly name: string;
|
|
133
|
+
private constructor();
|
|
134
|
+
/**
|
|
135
|
+
* @see ISubect.toSubjectConfiguration()
|
|
136
|
+
*/
|
|
137
|
+
toSubjectConfiguration(): SubjectConfiguration;
|
|
138
|
+
}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.Group = exports.User = exports.ClusterRoleBinding = exports.RoleBinding = void 0;
|
|
37
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
38
|
+
const cdk8s_1 = require("cdk8s");
|
|
39
|
+
const constructs_1 = require("constructs");
|
|
40
|
+
const base_1 = require("./base");
|
|
41
|
+
const k8s = __importStar(require("./imports/k8s"));
|
|
42
|
+
const utils_1 = require("./utils");
|
|
43
|
+
/**
|
|
44
|
+
* A RoleBinding grants permissions within a specific namespace to a user or
|
|
45
|
+
* set of users.
|
|
46
|
+
*/
|
|
47
|
+
class RoleBinding extends base_1.Resource {
|
|
48
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk8s-plus-36.RoleBinding", version: "2.0.0" };
|
|
49
|
+
/**
|
|
50
|
+
* @see base.Resource.apiObject
|
|
51
|
+
*/
|
|
52
|
+
apiObject;
|
|
53
|
+
resourceType = 'rolebindings';
|
|
54
|
+
role;
|
|
55
|
+
_subjects;
|
|
56
|
+
constructor(scope, id, props) {
|
|
57
|
+
super(scope, id);
|
|
58
|
+
this.role = props.role;
|
|
59
|
+
this._subjects = new Array();
|
|
60
|
+
this.apiObject = new k8s.KubeRoleBinding(this, 'Resource', {
|
|
61
|
+
metadata: props.metadata,
|
|
62
|
+
subjects: cdk8s_1.Lazy.any({ produce: () => this.synthesizeSubjects() }),
|
|
63
|
+
roleRef: cdk8s_1.Lazy.any({ produce: () => this.synthesizeRoleRef() }),
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Adds a subject to the role.
|
|
68
|
+
* @param subjects The subjects to add
|
|
69
|
+
*/
|
|
70
|
+
addSubjects(...subjects) {
|
|
71
|
+
for (const subject of subjects) {
|
|
72
|
+
this._subjects.push(subject);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
get subjects() {
|
|
76
|
+
return [...this._subjects];
|
|
77
|
+
}
|
|
78
|
+
synthesizeRoleRef() {
|
|
79
|
+
return {
|
|
80
|
+
apiGroup: this.role.apiGroup,
|
|
81
|
+
kind: this.role.kind,
|
|
82
|
+
name: this.role.name,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
synthesizeSubjects() {
|
|
86
|
+
return this._subjects.map(subject => subject.toSubjectConfiguration()).map((subject) => (0, utils_1.filterUndefined)({
|
|
87
|
+
apiGroup: subject.apiGroup === 'core' ? '' : subject.apiGroup,
|
|
88
|
+
kind: subject.kind,
|
|
89
|
+
name: subject.name,
|
|
90
|
+
namespace: subject.namespace,
|
|
91
|
+
}));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
exports.RoleBinding = RoleBinding;
|
|
95
|
+
/**
|
|
96
|
+
* A ClusterRoleBinding grants permissions cluster-wide to a user or
|
|
97
|
+
* set of users.
|
|
98
|
+
*/
|
|
99
|
+
class ClusterRoleBinding extends base_1.Resource {
|
|
100
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk8s-plus-36.ClusterRoleBinding", version: "2.0.0" };
|
|
101
|
+
/**
|
|
102
|
+
* @see base.Resource.apiObject
|
|
103
|
+
*/
|
|
104
|
+
apiObject;
|
|
105
|
+
resourceType = 'clusterrolebindings';
|
|
106
|
+
role;
|
|
107
|
+
_subjects;
|
|
108
|
+
constructor(scope, id, props) {
|
|
109
|
+
super(scope, id);
|
|
110
|
+
this.role = props.role;
|
|
111
|
+
this._subjects = new Array();
|
|
112
|
+
this.apiObject = new k8s.KubeClusterRoleBinding(this, 'Resource', {
|
|
113
|
+
metadata: props.metadata,
|
|
114
|
+
subjects: cdk8s_1.Lazy.any({ produce: () => this.synthesizeSubjects() }),
|
|
115
|
+
roleRef: cdk8s_1.Lazy.any({ produce: () => this.synthesizeRoleRef() }),
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Adds a subject to the role.
|
|
120
|
+
* @param subjects The subjects to add
|
|
121
|
+
*/
|
|
122
|
+
addSubjects(...subjects) {
|
|
123
|
+
for (const subject of subjects) {
|
|
124
|
+
this._subjects.push(subject);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
get subjects() {
|
|
128
|
+
return [...this._subjects];
|
|
129
|
+
}
|
|
130
|
+
synthesizeRoleRef() {
|
|
131
|
+
return {
|
|
132
|
+
apiGroup: this.role.apiGroup,
|
|
133
|
+
kind: this.role.kind,
|
|
134
|
+
name: this.role.name,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
synthesizeSubjects() {
|
|
138
|
+
return this._subjects.map(subject => subject.toSubjectConfiguration()).map((subject) => (0, utils_1.filterUndefined)({
|
|
139
|
+
apiGroup: subject.apiGroup === 'core' ? '' : subject.apiGroup,
|
|
140
|
+
kind: subject.kind,
|
|
141
|
+
name: subject.name,
|
|
142
|
+
namespace: subject.namespace,
|
|
143
|
+
}));
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
exports.ClusterRoleBinding = ClusterRoleBinding;
|
|
147
|
+
/**
|
|
148
|
+
* Represents a user.
|
|
149
|
+
*/
|
|
150
|
+
class User extends constructs_1.Construct {
|
|
151
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk8s-plus-36.User", version: "2.0.0" };
|
|
152
|
+
/**
|
|
153
|
+
* Reference a user in the cluster by name.
|
|
154
|
+
*/
|
|
155
|
+
static fromName(scope, id, name) {
|
|
156
|
+
return new User(scope, id, name);
|
|
157
|
+
}
|
|
158
|
+
apiGroup = 'rbac.authorization.k8s.io';
|
|
159
|
+
kind = 'User';
|
|
160
|
+
name;
|
|
161
|
+
constructor(scope, id, name) {
|
|
162
|
+
super(scope, id);
|
|
163
|
+
this.name = name;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* @see ISubect.toSubjectConfiguration()
|
|
167
|
+
*/
|
|
168
|
+
toSubjectConfiguration() {
|
|
169
|
+
return {
|
|
170
|
+
kind: this.kind,
|
|
171
|
+
name: this.name,
|
|
172
|
+
apiGroup: this.apiGroup,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
exports.User = User;
|
|
177
|
+
/**
|
|
178
|
+
* Represents a group.
|
|
179
|
+
*/
|
|
180
|
+
class Group extends constructs_1.Construct {
|
|
181
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk8s-plus-36.Group", version: "2.0.0" };
|
|
182
|
+
/**
|
|
183
|
+
* Reference a group by name.
|
|
184
|
+
*/
|
|
185
|
+
static fromName(scope, id, name) {
|
|
186
|
+
return new Group(scope, id, name);
|
|
187
|
+
}
|
|
188
|
+
apiGroup = 'rbac.authorization.k8s.io';
|
|
189
|
+
kind = 'Group';
|
|
190
|
+
name;
|
|
191
|
+
constructor(scope, id, name) {
|
|
192
|
+
super(scope, id);
|
|
193
|
+
this.name = name;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* @see ISubect.toSubjectConfiguration()
|
|
197
|
+
*/
|
|
198
|
+
toSubjectConfiguration() {
|
|
199
|
+
return {
|
|
200
|
+
kind: this.kind,
|
|
201
|
+
name: this.name,
|
|
202
|
+
apiGroup: this.apiGroup,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
exports.Group = Group;
|
|
207
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS1iaW5kaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JvbGUtYmluZGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsaUNBQXdDO0FBQ3hDLDJDQUFtRDtBQUNuRCxpQ0FBaUQ7QUFDakQsbURBQXFDO0FBRXJDLG1DQUEwQztBQTJEMUM7OztHQUdHO0FBQ0gsTUFBYSxXQUFZLFNBQVEsZUFBUTs7SUFDdkM7O09BRUc7SUFDZ0IsU0FBUyxDQUFZO0lBRXhCLFlBQVksR0FBRyxjQUFjLENBQUM7SUFFOUIsSUFBSSxDQUFhO0lBRWhCLFNBQVMsQ0FBa0I7SUFFNUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF1QjtRQUMvRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUV2QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksS0FBSyxFQUFZLENBQUM7UUFFdkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUN6RCxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7WUFDeEIsUUFBUSxFQUFFLFlBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQztZQUNoRSxPQUFPLEVBQUUsWUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO1NBQy9ELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSSxXQUFXLENBQUMsR0FBRyxRQUFvQjtRQUN4QyxLQUFLLE1BQU0sT0FBTyxJQUFJ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Q0FBQyxRQUFRLENBQUMsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsSUFBWTtRQUMvRCxPQUFPLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVlLFFBQVEsR0FBdUIsMkJBQTJCLENBQUM7SUFDM0QsSUFBSSxHQUFXLE9BQU8sQ0FBQztJQUN2QixJQUFJLENBQVM7SUFFN0IsWUFBb0IsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsSUFBWTtRQUM1RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFRDs7T0FFRztJQUNJLHNCQUFzQjtRQUMzQixPQUFPO1lBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQ3hCLENBQUM7SUFDSixDQUFDOztBQTNCSCxzQkE2QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcGlPYmplY3QsIExhenkgfSBmcm9tICdjZGs4cyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIElDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IFJlc291cmNlLCBSZXNvdXJjZVByb3BzIH0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCAqIGFzIGs4cyBmcm9tICcuL2ltcG9ydHMvazhzJztcbmltcG9ydCAqIGFzIHJvbGUgZnJvbSAnLi9yb2xlJztcbmltcG9ydCB7IGZpbHRlclVuZGVmaW5lZCB9IGZyb20gJy4vdXRpbHMnO1xuXG4vKipcbiAqIFN1YmplY3QgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBvciB1c2VyIGlkZW50aXRpZXMgYSByb2xlIGJpbmRpbmdcbiAqIGFwcGxpZXMgdG8uIFRoaXMgY2FuIGVpdGhlciBob2xkIGEgZGlyZWN0IEFQSSBvYmplY3QgcmVmZXJlbmNlLCBvciBhIHZhbHVlXG4gKiBmb3Igbm9uLW9iamVjdHMgc3VjaCBhcyB1c2VyIGFuZCBncm91cCBuYW1lcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdWJqZWN0Q29uZmlndXJhdGlvbiB7XG5cbiAgLyoqXG4gICAqIEFQSUdyb3VwIGhvbGRzIHRoZSBBUEkgZ3JvdXAgb2YgdGhlIHJlZmVyZW5jZWQgc3ViamVjdC4gRGVmYXVsdHMgdG8gXCJcIiBmb3JcbiAgICogU2VydmljZUFjY291bnQgc3ViamVjdHMuIERlZmF1bHRzIHRvIFwicmJhYy5hdXRob3JpemF0aW9uLms4cy5pb1wiIGZvciBVc2VyXG4gICAqIGFuZCBHcm91cCBzdWJqZWN0cy5cbiAgICovXG4gIHJlYWRvbmx5IGFwaUdyb3VwPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBLaW5kIG9mIG9iamVjdCBiZWluZyByZWZlcmVuY2VkLiBWYWx1ZXMgZGVmaW5lZCBieSB0aGlzIEFQSSBncm91cCBhcmVcbiAgICogXCJVc2VyXCIsIFwiR3JvdXBcIiwgYW5kIFwiU2VydmljZUFjY291bnRcIi4gSWYgdGhlIEF1dGhvcml6ZXIgZG9lcyBub3RcbiAgICogcmVjb2duaXplZCB0aGUga2luZCB2YWx1ZSwgdGhlIEF1dGhvcml6ZXIgc2hvdWxkIHJlcG9ydCBhbiBlcnJvci5cbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6IHN0cmluZztcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgb2JqZWN0IGJlaW5nIHJlZmVyZW5jZWQuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5hbWVzcGFjZSBvZiB0aGUgcmVmZXJlbmNlZCBvYmplY3QuICBJZiB0aGUgb2JqZWN0IGtpbmQgaXMgbm9uLW5hbWVzcGFjZSxcbiAgICogc3VjaCBhcyBcIlVzZXJcIiBvciBcIkdyb3VwXCIsIGFuZCB0aGlzIHZhbHVlIGlzIG5vdCBlbXB0eSB0aGUgQXV0aG9yaXplclxuICAgKiBzaG91bGQgcmVwb3J0IGFuIGVycm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZXNwYWNlPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIHJvbGUgYmluZGluZyBzdWJqZWN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElTdWJqZWN0IGV4dGVuZHMgSUNvbnN0cnVjdCB7XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgc3ViamVjdCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgdG9TdWJqZWN0Q29uZmlndXJhdGlvbigpOiBTdWJqZWN0Q29uZmlndXJhdGlvbjtcblxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGBSb2xlQmluZGluZ2AuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUm9sZUJpbmRpbmdQcm9wcyBleHRlbmRzIFJlc291cmNlUHJvcHMge1xuICAvKipcbiAgICogVGhlIHJvbGUgdG8gYmluZCB0by4gQSBSb2xlQmluZGluZyBjYW4gcmVmZXJlbmNlIGEgUm9sZSBvciBhIENsdXN0ZXJSb2xlLlxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZTogcm9sZS5JUm9sZTtcbn1cblxuLyoqXG4gKiBBIFJvbGVCaW5kaW5nIGdyYW50cyBwZXJtaXNzaW9ucyB3aXRoaW4gYSBzcGVjaWZpYyBuYW1lc3BhY2UgdG8gYSB1c2VyIG9yXG4gKiBzZXQgb2YgdXNlcnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBSb2xlQmluZGluZyBleHRlbmRzIFJlc291cmNlIHtcbiAgLyoqXG4gICAqIEBzZWUgYmFzZS5SZXNvdXJjZS5hcGlPYmplY3RcbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBhcGlPYmplY3Q6IEFwaU9iamVjdDtcblxuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2VUeXBlID0gJ3JvbGViaW5kaW5ncyc7XG5cbiAgcHVibGljIHJlYWRvbmx5IHJvbGU6IHJvbGUuSVJvbGU7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc3ViamVjdHM6IEFycmF5PElTdWJqZWN0PjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUm9sZUJpbmRpbmdQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnJvbGUgPSBwcm9wcy5yb2xlO1xuXG4gICAgdGhpcy5fc3ViamVjdHMgPSBuZXcgQXJyYXk8SVN1YmplY3Q+KCk7XG5cbiAgICB0aGlzLmFwaU9iamVjdCA9IG5ldyBrOHMuS3ViZVJvbGVCaW5kaW5nKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIG1ldGFkYXRhOiBwcm9wcy5tZXRhZGF0YSxcbiAgICAgIHN1YmplY3RzOiBMYXp5LmFueSh7IHByb2R1Y2U6ICgpID0+IHRoaXMuc3ludGhlc2l6ZVN1YmplY3RzKCkgfSksXG4gICAgICByb2xlUmVmOiBMYXp5LmFueSh7IHByb2R1Y2U6ICgpID0+IHRoaXMuc3ludGhlc2l6ZVJvbGVSZWYoKSB9KSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgc3ViamVjdCB0byB0aGUgcm9sZS5cbiAgICogQHBhcmFtIHN1YmplY3RzIFRoZSBzdWJqZWN0cyB0byBhZGRcbiAgICovXG4gIHB1YmxpYyBhZGRTdWJqZWN0cyguLi5zdWJqZWN0czogSVN1YmplY3RbXSk6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgc3ViamVjdCBvZiBzdWJqZWN0cykge1xuICAgICAgdGhpcy5fc3ViamVjdHMucHVzaChzdWJqZWN0KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHN1YmplY3RzKCkge1xuICAgIHJldHVybiBbLi4udGhpcy5fc3ViamVjdHNdO1xuICB9XG5cbiAgcHJpdmF0ZSBzeW50aGVzaXplUm9sZVJlZigpOiBrOHMuUm9sZVJlZiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFwaUdyb3VwOiB0aGlzLnJvbGUuYXBpR3JvdXAsXG4gICAgICBraW5kOiB0aGlzLnJvbGUua2luZCxcbiAgICAgIG5hbWU6IHRoaXMucm9sZS5uYW1lLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHN5bnRoZXNpemVTdWJqZWN0cygpOiBrOHMuU3ViamVjdFtdIHtcbiAgICByZXR1cm4gdGhpcy5fc3ViamVjdHMubWFwKHN1YmplY3QgPT4gc3ViamVjdC50b1N1YmplY3RDb25maWd1cmF0aW9uKCkpLm1hcCgoc3ViamVjdCkgPT4gZmlsdGVyVW5kZWZpbmVkKHtcbiAgICAgIGFwaUdyb3VwOiBzdWJqZWN0LmFwaUdyb3VwID09PSAnY29yZScgPyAnJyA6IHN1YmplY3QuYXBpR3JvdXAsXG4gICAgICBraW5kOiBzdWJqZWN0LmtpbmQsXG4gICAgICBuYW1lOiBzdWJqZWN0Lm5hbWUsXG4gICAgICBuYW1lc3BhY2U6IHN1YmplY3QubmFtZXNwYWNlLFxuICAgIH0pKTtcbiAgfVxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGBDbHVzdGVyUm9sZUJpbmRpbmdgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENsdXN0ZXJSb2xlQmluZGluZ1Byb3BzIGV4dGVuZHMgUmVzb3VyY2VQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgcm9sZSB0byBiaW5kIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZTogcm9sZS5JQ2x1c3RlclJvbGU7XG59XG5cbi8qKlxuICogQSBDbHVzdGVyUm9sZUJpbmRpbmcgZ3JhbnRzIHBlcm1pc3Npb25zIGNsdXN0ZXItd2lkZSB0byBhIHVzZXIgb3JcbiAqIHNldCBvZiB1c2Vycy5cbiAqL1xuZXhwb3J0IGNsYXNzIENsdXN0ZXJSb2xlQmluZGluZyBleHRlbmRzIFJlc291cmNlIHtcbiAgLyoqXG4gICAqIEBzZWUgYmFzZS5SZXNvdXJjZS5hcGlPYmplY3RcbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBhcGlPYmplY3Q6IEFwaU9iamVjdDtcblxuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2VUeXBlID0gJ2NsdXN0ZXJyb2xlYmluZGluZ3MnO1xuXG4gIHB1YmxpYyByZWFkb25seSByb2xlOiByb2xlLklDbHVzdGVyUm9sZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJqZWN0czogQXJyYXk8SVN1YmplY3Q+O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDbHVzdGVyUm9sZUJpbmRpbmdQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnJvbGUgPSBwcm9wcy5yb2xlO1xuXG4gICAgdGhpcy5fc3ViamVjdHMgPSBuZXcgQXJyYXk8SVN1YmplY3Q+KCk7XG5cbiAgICB0aGlzLmFwaU9iamVjdCA9IG5ldyBrOHMuS3ViZUNsdXN0ZXJSb2xlQmluZGluZyh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBtZXRhZGF0YTogcHJvcHMubWV0YWRhdGEsXG4gICAgICBzdWJqZWN0czogTGF6eS5hbnkoeyBwcm9kdWNlOiAoKSA9PiB0aGlzLnN5bnRoZXNpemVTdWJqZWN0cygpIH0pLFxuICAgICAgcm9sZVJlZjogTGF6eS5hbnkoeyBwcm9kdWNlOiAoKSA9PiB0aGlzLnN5bnRoZXNpemVSb2xlUmVmKCkgfSksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHN1YmplY3QgdG8gdGhlIHJvbGUuXG4gICAqIEBwYXJhbSBzdWJqZWN0cyBUaGUgc3ViamVjdHMgdG8gYWRkXG4gICAqL1xuICBwdWJsaWMgYWRkU3ViamVjdHMoLi4uc3ViamVjdHM6IElTdWJqZWN0W10pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHN1YmplY3Qgb2Ygc3ViamVjdHMpIHtcbiAgICAgIHRoaXMuX3N1YmplY3RzLnB1c2goc3ViamVjdCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBzdWJqZWN0cygpIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuX3N1YmplY3RzXTtcbiAgfVxuXG4gIHByaXZhdGUgc3ludGhlc2l6ZVJvbGVSZWYoKTogazhzLlJvbGVSZWYge1xuICAgIHJldHVybiB7XG4gICAgICBhcGlHcm91cDogdGhpcy5yb2xlLmFwaUdyb3VwLFxuICAgICAga2luZDogdGhpcy5yb2xlLmtpbmQsXG4gICAgICBuYW1lOiB0aGlzLnJvbGUubmFtZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzeW50aGVzaXplU3ViamVjdHMoKTogazhzLlN1YmplY3RbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YmplY3RzLm1hcChzdWJqZWN0ID0+IHN1YmplY3QudG9TdWJqZWN0Q29uZmlndXJhdGlvbigpKS5tYXAoKHN1YmplY3QpID0+IGZpbHRlclVuZGVmaW5lZCh7XG4gICAgICBhcGlHcm91cDogc3ViamVjdC5hcGlHcm91cCA9PT0gJ2NvcmUnID8gJycgOiBzdWJqZWN0LmFwaUdyb3VwLFxuICAgICAga2luZDogc3ViamVjdC5raW5kLFxuICAgICAgbmFtZTogc3ViamVjdC5uYW1lLFxuICAgICAgbmFtZXNwYWNlOiBzdWJqZWN0Lm5hbWVzcGFjZSxcbiAgICB9KSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgdXNlci5cbiAqL1xuZXhwb3J0IGNsYXNzIFVzZXIgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJU3ViamVjdCB7XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZSBhIHVzZXIgaW4gdGhlIGNsdXN0ZXIgYnkgbmFtZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbU5hbWUoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgbmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBVc2VyKHNjb3BlLCBpZCwgbmFtZSk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgYXBpR3JvdXA6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICdyYmFjLmF1dGhvcml6YXRpb24uazhzLmlvJztcbiAgcHVibGljIHJlYWRvbmx5IGtpbmQ6IHN0cmluZyA9ICdVc2VyJztcbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIElTdWJlY3QudG9TdWJqZWN0Q29uZmlndXJhdGlvbigpXG4gICAqL1xuICBwdWJsaWMgdG9TdWJqZWN0Q29uZmlndXJhdGlvbigpOiBTdWJqZWN0Q29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtpbmQ6IHRoaXMua2luZCxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIGFwaUdyb3VwOiB0aGlzLmFwaUdyb3VwLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZ3JvdXAuXG4gKi9cbmV4cG9ydCBjbGFzcyBHcm91cCBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElTdWJqZWN0IHtcblxuICAvKipcbiAgICogUmVmZXJlbmNlIGEgZ3JvdXAgYnkgbmFtZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbU5hbWUoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgbmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBHcm91cChzY29wZSwgaWQsIG5hbWUpO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGFwaUdyb3VwOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAncmJhYy5hdXRob3JpemF0aW9uLms4cy5pbyc7XG4gIHB1YmxpYyByZWFkb25seSBraW5kOiBzdHJpbmcgPSAnR3JvdXAnO1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgbmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgSVN1YmVjdC50b1N1YmplY3RDb25maWd1cmF0aW9uKClcbiAgICovXG4gIHB1YmxpYyB0b1N1YmplY3RDb25maWd1cmF0aW9uKCk6IFN1YmplY3RDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAga2luZDogdGhpcy5raW5kLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgYXBpR3JvdXA6IHRoaXMuYXBpR3JvdXAsXG4gICAgfTtcbiAgfVxuXG59XG4iXX0=
|