cdk8s-plus-34 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.
Files changed (156) hide show
  1. package/.jsii +101649 -0
  2. package/CODE_OF_CONDUCT.md +3 -0
  3. package/CONTRIBUTING.md +185 -0
  4. package/DCO +34 -0
  5. package/LICENSE +202 -0
  6. package/NOTICE +1 -0
  7. package/OWNERS.md +5 -0
  8. package/README.md +21 -33
  9. package/SECURITY.md +5 -0
  10. package/cdk8s.yaml +11 -0
  11. package/docs/java.md +150009 -0
  12. package/docs/plus/config-map.md +98 -0
  13. package/docs/plus/container.md +133 -0
  14. package/docs/plus/cronjob.md +67 -0
  15. package/docs/plus/deployment.md +232 -0
  16. package/docs/plus/horizontal-pod-autoscaler.md +226 -0
  17. package/docs/plus/ingress.md +68 -0
  18. package/docs/plus/job.md +48 -0
  19. package/docs/plus/namespace.md +58 -0
  20. package/docs/plus/network-policy.md +341 -0
  21. package/docs/plus/pod.md +455 -0
  22. package/docs/plus/pv.md +82 -0
  23. package/docs/plus/pvc.md +77 -0
  24. package/docs/plus/rbac.md +104 -0
  25. package/docs/plus/secret.md +32 -0
  26. package/docs/plus/service-account.md +35 -0
  27. package/docs/plus/service.md +41 -0
  28. package/docs/plus/volume.md +84 -0
  29. package/docs/python.md +161196 -0
  30. package/docs/typescript.md +139649 -0
  31. package/git-hooks/README.md +9 -0
  32. package/git-hooks/prepare-commit-msg +18 -0
  33. package/git-hooks/setup.sh +10 -0
  34. package/lib/_action.d.ts +26 -0
  35. package/lib/_action.js +39 -0
  36. package/lib/api-resource.d.ts +298 -0
  37. package/lib/api-resource.js +430 -0
  38. package/lib/base.d.ts +79 -0
  39. package/lib/base.js +92 -0
  40. package/lib/config-map.d.ts +126 -0
  41. package/lib/config-map.js +159 -0
  42. package/lib/container.d.ts +1057 -0
  43. package/lib/container.js +845 -0
  44. package/lib/cron-job.d.ts +138 -0
  45. package/lib/cron-job.js +103 -0
  46. package/lib/daemon-set.d.ts +45 -0
  47. package/lib/daemon-set.js +55 -0
  48. package/lib/deployment.d.ts +235 -0
  49. package/lib/deployment.js +216 -0
  50. package/lib/handler.d.ts +62 -0
  51. package/lib/handler.js +54 -0
  52. package/lib/horizontal-pod-autoscaler.d.ts +500 -0
  53. package/lib/horizontal-pod-autoscaler.js +569 -0
  54. package/lib/imports/k8s.d.ts +25809 -0
  55. package/lib/imports/k8s.js +19238 -0
  56. package/lib/index.d.ts +26 -0
  57. package/lib/index.js +44 -0
  58. package/lib/ingress.d.ts +230 -0
  59. package/lib/ingress.js +246 -0
  60. package/lib/job.d.ts +64 -0
  61. package/lib/job.js +54 -0
  62. package/lib/namespace.d.ts +128 -0
  63. package/lib/namespace.js +109 -0
  64. package/lib/network-policy.d.ts +311 -0
  65. package/lib/network-policy.js +344 -0
  66. package/lib/pod.d.ts +1097 -0
  67. package/lib/pod.js +1147 -0
  68. package/lib/probe.d.ts +181 -0
  69. package/lib/probe.js +88 -0
  70. package/lib/pv.d.ts +375 -0
  71. package/lib/pv.js +273 -0
  72. package/lib/pvc.d.ts +163 -0
  73. package/lib/pvc.js +154 -0
  74. package/lib/role-binding.d.ts +138 -0
  75. package/lib/role-binding.js +165 -0
  76. package/lib/role.d.ts +268 -0
  77. package/lib/role.js +401 -0
  78. package/lib/secret.d.ts +195 -0
  79. package/lib/secret.js +185 -0
  80. package/lib/service-account.d.ts +83 -0
  81. package/lib/service-account.js +105 -0
  82. package/lib/service.d.ts +289 -0
  83. package/lib/service.js +182 -0
  84. package/lib/stateful-set.d.ts +206 -0
  85. package/lib/stateful-set.js +244 -0
  86. package/lib/utils.d.ts +4 -0
  87. package/lib/utils.js +33 -0
  88. package/lib/volume.d.ts +577 -0
  89. package/lib/volume.js +377 -0
  90. package/lib/workload.d.ts +121 -0
  91. package/lib/workload.js +122 -0
  92. package/node_modules/balanced-match/.github/FUNDING.yml +2 -0
  93. package/node_modules/balanced-match/LICENSE.md +21 -0
  94. package/node_modules/balanced-match/README.md +97 -0
  95. package/node_modules/balanced-match/index.js +62 -0
  96. package/node_modules/balanced-match/package.json +48 -0
  97. package/node_modules/brace-expansion/.github/FUNDING.yml +2 -0
  98. package/node_modules/brace-expansion/LICENSE +21 -0
  99. package/node_modules/brace-expansion/README.md +135 -0
  100. package/node_modules/brace-expansion/index.js +202 -0
  101. package/node_modules/brace-expansion/package.json +49 -0
  102. package/node_modules/minimatch/LICENSE +15 -0
  103. package/node_modules/minimatch/README.md +491 -0
  104. package/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts +2 -0
  105. package/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts.map +1 -0
  106. package/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js +14 -0
  107. package/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js.map +1 -0
  108. package/node_modules/minimatch/dist/commonjs/ast.d.ts +20 -0
  109. package/node_modules/minimatch/dist/commonjs/ast.d.ts.map +1 -0
  110. package/node_modules/minimatch/dist/commonjs/ast.js +747 -0
  111. package/node_modules/minimatch/dist/commonjs/ast.js.map +1 -0
  112. package/node_modules/minimatch/dist/commonjs/brace-expressions.d.ts +8 -0
  113. package/node_modules/minimatch/dist/commonjs/brace-expressions.d.ts.map +1 -0
  114. package/node_modules/minimatch/dist/commonjs/brace-expressions.js +152 -0
  115. package/node_modules/minimatch/dist/commonjs/brace-expressions.js.map +1 -0
  116. package/node_modules/minimatch/dist/commonjs/escape.d.ts +12 -0
  117. package/node_modules/minimatch/dist/commonjs/escape.d.ts.map +1 -0
  118. package/node_modules/minimatch/dist/commonjs/escape.js +22 -0
  119. package/node_modules/minimatch/dist/commonjs/escape.js.map +1 -0
  120. package/node_modules/minimatch/dist/commonjs/index.d.ts +98 -0
  121. package/node_modules/minimatch/dist/commonjs/index.d.ts.map +1 -0
  122. package/node_modules/minimatch/dist/commonjs/index.js +1023 -0
  123. package/node_modules/minimatch/dist/commonjs/index.js.map +1 -0
  124. package/node_modules/minimatch/dist/commonjs/package.json +3 -0
  125. package/node_modules/minimatch/dist/commonjs/unescape.d.ts +17 -0
  126. package/node_modules/minimatch/dist/commonjs/unescape.d.ts.map +1 -0
  127. package/node_modules/minimatch/dist/commonjs/unescape.js +24 -0
  128. package/node_modules/minimatch/dist/commonjs/unescape.js.map +1 -0
  129. package/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts +2 -0
  130. package/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts.map +1 -0
  131. package/node_modules/minimatch/dist/esm/assert-valid-pattern.js +10 -0
  132. package/node_modules/minimatch/dist/esm/assert-valid-pattern.js.map +1 -0
  133. package/node_modules/minimatch/dist/esm/ast.d.ts +20 -0
  134. package/node_modules/minimatch/dist/esm/ast.d.ts.map +1 -0
  135. package/node_modules/minimatch/dist/esm/ast.js +743 -0
  136. package/node_modules/minimatch/dist/esm/ast.js.map +1 -0
  137. package/node_modules/minimatch/dist/esm/brace-expressions.d.ts +8 -0
  138. package/node_modules/minimatch/dist/esm/brace-expressions.d.ts.map +1 -0
  139. package/node_modules/minimatch/dist/esm/brace-expressions.js +148 -0
  140. package/node_modules/minimatch/dist/esm/brace-expressions.js.map +1 -0
  141. package/node_modules/minimatch/dist/esm/escape.d.ts +12 -0
  142. package/node_modules/minimatch/dist/esm/escape.d.ts.map +1 -0
  143. package/node_modules/minimatch/dist/esm/escape.js +18 -0
  144. package/node_modules/minimatch/dist/esm/escape.js.map +1 -0
  145. package/node_modules/minimatch/dist/esm/index.d.ts +98 -0
  146. package/node_modules/minimatch/dist/esm/index.d.ts.map +1 -0
  147. package/node_modules/minimatch/dist/esm/index.js +1007 -0
  148. package/node_modules/minimatch/dist/esm/index.js.map +1 -0
  149. package/node_modules/minimatch/dist/esm/package.json +3 -0
  150. package/node_modules/minimatch/dist/esm/unescape.d.ts +17 -0
  151. package/node_modules/minimatch/dist/esm/unescape.d.ts.map +1 -0
  152. package/node_modules/minimatch/dist/esm/unescape.js +20 -0
  153. package/node_modules/minimatch/dist/esm/unescape.js.map +1 -0
  154. package/node_modules/minimatch/package.json +82 -0
  155. package/package.json +176 -6
  156. package/rotate.md +85 -0
package/lib/pv.js ADDED
@@ -0,0 +1,273 @@
1
+ "use strict";
2
+ var _a, _b, _c, _d;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.GCEPersistentDiskPersistentVolume = exports.AzureDiskPersistentVolume = exports.AwsElasticBlockStorePersistentVolume = exports.PersistentVolumeReclaimPolicy = exports.PersistentVolume = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const cdk8s_1 = require("cdk8s");
7
+ const constructs_1 = require("constructs");
8
+ const base = require("./base");
9
+ const k8s = require("./imports/k8s");
10
+ const pvc = require("./pvc");
11
+ const volume = require("./volume");
12
+ class ImportedPersistentVolume extends constructs_1.Construct {
13
+ constructor(scope, id, name) {
14
+ super(scope, id);
15
+ this.resourceType = 'persistentvolumes';
16
+ this._name = name;
17
+ }
18
+ get name() {
19
+ return this._name;
20
+ }
21
+ get apiVersion() {
22
+ return k8s.KubePersistentVolume.GVK.apiVersion;
23
+ }
24
+ get apiGroup() {
25
+ return '';
26
+ }
27
+ get kind() {
28
+ return k8s.KubePersistentVolume.GVK.kind;
29
+ }
30
+ get resourceName() {
31
+ return this.name;
32
+ }
33
+ }
34
+ /**
35
+ * A PersistentVolume (PV) is a piece of storage in the cluster that has been
36
+ * provisioned by an administrator or dynamically provisioned using Storage Classes.
37
+ * It is a resource in the cluster just like a node is a cluster resource.
38
+ * PVs are volume plugins like Volumes, but have a lifecycle independent of any
39
+ * individual Pod that uses the PV. This API object captures the details of the
40
+ * implementation of the storage, be that NFS, iSCSI, or a
41
+ * cloud-provider-specific storage system.
42
+ */
43
+ class PersistentVolume extends base.Resource {
44
+ /**
45
+ * Imports a pv from the cluster as a reference.
46
+ */
47
+ static fromPersistentVolumeName(scope, id, volumeName) {
48
+ return new ImportedPersistentVolume(scope, id, volumeName);
49
+ }
50
+ constructor(scope, id, props = {}) {
51
+ super(scope, id);
52
+ this.resourceType = 'persistentvolumes';
53
+ this.storage = props.storage;
54
+ this.mode = props.volumeMode ?? pvc.PersistentVolumeMode.FILE_SYSTEM;
55
+ this.storageClassName = props.storageClassName;
56
+ this._accessModes = props.accessModes;
57
+ this.mountOptions = props.mountOptions;
58
+ this.reclaimPolicy = props.reclaimPolicy ?? PersistentVolumeReclaimPolicy.RETAIN;
59
+ if (props.claim) {
60
+ this.bind(props.claim);
61
+ }
62
+ this.apiObject = new k8s.KubePersistentVolume(this, 'Resource', {
63
+ metadata: props.metadata,
64
+ spec: cdk8s_1.Lazy.any({ produce: () => this._toKube() }),
65
+ });
66
+ }
67
+ /**
68
+ * Access modes requirement of this claim.
69
+ */
70
+ get accessModes() {
71
+ return this._accessModes ? [...this._accessModes] : undefined;
72
+ }
73
+ /**
74
+ * PVC this volume is bound to. Undefined means this volume is not yet
75
+ * claimed by any PVC.
76
+ */
77
+ get claim() {
78
+ return this._claim;
79
+ }
80
+ /**
81
+ * Reserve a `PersistentVolume` by creating a `PersistentVolumeClaim`
82
+ * that is wired to claim this volume.
83
+ *
84
+ * Note that this method will throw in case the volume is already claimed.
85
+ *
86
+ * @see https://kubernetes.io/docs/concepts/storage/persistent-volumes/#reserving-a-persistentvolume
87
+ */
88
+ reserve() {
89
+ const claim = new pvc.PersistentVolumeClaim(this, `${this.name}PVC`, {
90
+ metadata: { name: `pvc-${this.name}`, namespace: this.metadata.namespace },
91
+ // the storage classes must match, otherwise the claim
92
+ // will use the default class (or no class at all), which may be different than the class
93
+ // of this volume. note that other requirements are not needed since
94
+ // when they are not defined, any volume satisifies them.
95
+ storageClassName: this.storageClassName,
96
+ });
97
+ this.bind(claim);
98
+ claim.bind(this);
99
+ return claim;
100
+ }
101
+ /**
102
+ * Bind a volume to a specific claim.
103
+ * Note that you must also bind the claim to the volume.
104
+ *
105
+ * @see https://kubernetes.io/docs/concepts/storage/persistent-volumes/#binding
106
+ *
107
+ * @param claim The PVC to bind to.
108
+ */
109
+ bind(claim) {
110
+ if (this._claim && this._claim.name !== claim.name) {
111
+ throw new Error(`Cannot bind volume '${this.name}' to claim '${claim.name}' since it is already bound to claim '${this._claim.name}'`);
112
+ }
113
+ this._claim = claim;
114
+ }
115
+ asVolume() {
116
+ const claim = this.reserve();
117
+ return volume.Volume.fromPersistentVolumeClaim(this, 'Volume', claim);
118
+ }
119
+ /**
120
+ * @internal
121
+ */
122
+ _toKube() {
123
+ const storage = this.storage ? k8s.Quantity.fromString(this.storage.toGibibytes() + 'Gi') : undefined;
124
+ return {
125
+ claimRef: this._claim ? { name: this._claim?.name } : undefined,
126
+ accessModes: this.accessModes?.map(a => a.toString()),
127
+ capacity: storage ? { storage } : undefined,
128
+ mountOptions: this.mountOptions?.map(o => o),
129
+ storageClassName: this.storageClassName,
130
+ persistentVolumeReclaimPolicy: this.reclaimPolicy,
131
+ volumeMode: this.mode,
132
+ };
133
+ }
134
+ }
135
+ exports.PersistentVolume = PersistentVolume;
136
+ _a = JSII_RTTI_SYMBOL_1;
137
+ PersistentVolume[_a] = { fqn: "cdk8s-plus-34.PersistentVolume", version: "2.0.0" };
138
+ /**
139
+ * Reclaim Policies.
140
+ */
141
+ var PersistentVolumeReclaimPolicy;
142
+ (function (PersistentVolumeReclaimPolicy) {
143
+ /**
144
+ * The Retain reclaim policy allows for manual reclamation of the resource.
145
+ * When the PersistentVolumeClaim is deleted, the PersistentVolume still exists and the
146
+ * volume is considered "released". But it is not yet available for another claim
147
+ * because the previous claimant's data remains on the volume.
148
+ * An administrator can manually reclaim the volume with the following steps:
149
+ *
150
+ * 1. Delete the PersistentVolume. The associated storage asset in external
151
+ * infrastructure (such as an AWS EBS, GCE PD, Azure Disk, or Cinder volume) still exists after the PV is deleted.
152
+ * 2. Manually clean up the data on the associated storage asset accordingly.
153
+ * 3. Manually delete the associated storage asset.
154
+ *
155
+ * If you want to reuse the same storage asset, create a new PersistentVolume
156
+ * with the same storage asset definition.
157
+ */
158
+ PersistentVolumeReclaimPolicy["RETAIN"] = "Retain";
159
+ /**
160
+ * For volume plugins that support the Delete reclaim policy, deletion removes both the
161
+ * PersistentVolume object from Kubernetes, as well as the associated storage asset in
162
+ * the external infrastructure, such as an AWS EBS, GCE PD, Azure Disk, or Cinder volume.
163
+ * Volumes that were dynamically provisioned inherit the reclaim policy of their StorageClass, which defaults to Delete.
164
+ * The administrator should configure the StorageClass according to users' expectations; otherwise,
165
+ * the PV must be edited or patched after it is created
166
+ */
167
+ PersistentVolumeReclaimPolicy["DELETE"] = "Delete";
168
+ })(PersistentVolumeReclaimPolicy || (exports.PersistentVolumeReclaimPolicy = PersistentVolumeReclaimPolicy = {}));
169
+ /**
170
+ * Represents an AWS Disk resource that is attached to a kubelet's host machine and
171
+ * then exposed to the pod.
172
+ *
173
+ * @see https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
174
+ */
175
+ class AwsElasticBlockStorePersistentVolume extends PersistentVolume {
176
+ constructor(scope, id, props) {
177
+ super(scope, id, props);
178
+ this.volumeId = props.volumeId;
179
+ this.readOnly = props.readOnly ?? false;
180
+ this.fsType = props.fsType ?? 'ext4';
181
+ this.partition = props.partition;
182
+ }
183
+ /**
184
+ * @internal
185
+ */
186
+ _toKube() {
187
+ const spec = super._toKube();
188
+ return {
189
+ ...spec,
190
+ awsElasticBlockStore: {
191
+ volumeId: this.volumeId,
192
+ fsType: this.fsType,
193
+ partition: this.partition,
194
+ readOnly: this.readOnly,
195
+ },
196
+ };
197
+ }
198
+ }
199
+ exports.AwsElasticBlockStorePersistentVolume = AwsElasticBlockStorePersistentVolume;
200
+ _b = JSII_RTTI_SYMBOL_1;
201
+ AwsElasticBlockStorePersistentVolume[_b] = { fqn: "cdk8s-plus-34.AwsElasticBlockStorePersistentVolume", version: "2.0.0" };
202
+ /**
203
+ * AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.
204
+ */
205
+ class AzureDiskPersistentVolume extends PersistentVolume {
206
+ constructor(scope, id, props) {
207
+ super(scope, id, props);
208
+ this.diskName = props.diskName;
209
+ this.diskUri = props.diskUri;
210
+ this.cachingMode = props.cachingMode ?? volume.AzureDiskPersistentVolumeCachingMode.NONE;
211
+ this.fsType = props.fsType ?? 'ext4';
212
+ this.azureKind = props.kind ?? volume.AzureDiskPersistentVolumeKind.SHARED;
213
+ this.readOnly = props.readOnly ?? false;
214
+ }
215
+ /**
216
+ * @internal
217
+ *
218
+ * @see https://github.com/kubernetes/examples/blob/master/staging/volumes/azure_disk/README.md
219
+ */
220
+ _toKube() {
221
+ const spec = super._toKube();
222
+ return {
223
+ ...spec,
224
+ azureDisk: {
225
+ diskName: this.diskName,
226
+ diskUri: this.diskUri,
227
+ cachingMode: this.cachingMode,
228
+ fsType: this.fsType,
229
+ kind: this.azureKind,
230
+ readOnly: this.readOnly,
231
+ },
232
+ };
233
+ }
234
+ }
235
+ exports.AzureDiskPersistentVolume = AzureDiskPersistentVolume;
236
+ _c = JSII_RTTI_SYMBOL_1;
237
+ AzureDiskPersistentVolume[_c] = { fqn: "cdk8s-plus-34.AzureDiskPersistentVolume", version: "2.0.0" };
238
+ /**
239
+ * GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine
240
+ * and then exposed to the pod. Provisioned by an admin.
241
+ *
242
+ * @see https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
243
+ */
244
+ class GCEPersistentDiskPersistentVolume extends PersistentVolume {
245
+ constructor(scope, id, props) {
246
+ super(scope, id, props);
247
+ this.pdName = props.pdName;
248
+ this.readOnly = props.readOnly ?? false;
249
+ this.fsType = props.fsType ?? 'ext4';
250
+ this.partition = props.partition;
251
+ }
252
+ /**
253
+ * @internal
254
+ *
255
+ * @see https://github.com/kubernetes/examples/blob/master/staging/volumes/azure_disk/README.md
256
+ */
257
+ _toKube() {
258
+ const spec = super._toKube();
259
+ return {
260
+ ...spec,
261
+ gcePersistentDisk: {
262
+ pdName: this.pdName,
263
+ fsType: this.fsType,
264
+ partition: this.partition,
265
+ readOnly: this.readOnly,
266
+ },
267
+ };
268
+ }
269
+ }
270
+ exports.GCEPersistentDiskPersistentVolume = GCEPersistentDiskPersistentVolume;
271
+ _d = JSII_RTTI_SYMBOL_1;
272
+ GCEPersistentDiskPersistentVolume[_d] = { fqn: "cdk8s-plus-34.GCEPersistentDiskPersistentVolume", version: "2.0.0" };
273
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxpQ0FBOEM7QUFDOUMsMkNBQXVDO0FBQ3ZDLCtCQUErQjtBQUMvQixxQ0FBcUM7QUFDckMsNkJBQTZCO0FBQzdCLG1DQUFtQztBQXdFbkMsTUFBTSx3QkFBeUIsU0FBUSxzQkFBUztJQU05QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLElBQVk7UUFDcEQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUhILGlCQUFZLEdBQUcsbUJBQW1CLENBQUM7UUFJakQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQVcsSUFBSTtRQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ25CLE9BQU8sR0FBRyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7SUFDakQsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNqQixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxJQUFXLElBQUk7UUFDYixPQUFPLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO0lBQzNDLENBQUM7SUFFRCxJQUFXLFlBQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7Q0FFRjtBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBYSxnQkFBaUIsU0FBUSxJQUFJLENBQUMsUUFBUTtJQUVqRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxLQUFnQixFQUFFLEVBQVUsRUFBRSxVQUFrQjtRQUNyRixPQUFPLElBQUksd0JBQXdCLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBeUNELFlBQXNCLEtBQWdCLEVBQUUsRUFB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LElBQUksR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDN0IsT0FBTztZQUNMLEdBQUcsSUFBSTtZQUNQLGlCQUFpQixFQUFFO2dCQUNqQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ25CLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtnQkFDbkIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2dCQUN6QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7YUFDeEI7U0FDRixDQUFDO0lBQ0osQ0FBQzs7QUFoREgsOEVBaURDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBpT2JqZWN0LCBMYXp5LCBTaXplIH0gZnJvbSAnY2RrOHMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyBiYXNlIGZyb20gJy4vYmFzZSc7XG5pbXBvcnQgKiBhcyBrOHMgZnJvbSAnLi9pbXBvcnRzL2s4cyc7XG5pbXBvcnQgKiBhcyBwdmMgZnJvbSAnLi9wdmMnO1xuaW1wb3J0ICogYXMgdm9sdW1lIGZyb20gJy4vdm9sdW1lJztcblxuLyoqXG4gKiBDb250cmFjdCBvZiBhIGBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW1gLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElQZXJzaXN0ZW50Vm9sdW1lIGV4dGVuZHMgYmFzZS5JUmVzb3VyY2Uge1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGBQZXJzaXN0ZW50Vm9sdW1lYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQZXJzaXN0ZW50Vm9sdW1lUHJvcHMgZXh0ZW5kcyBiYXNlLlJlc291cmNlUHJvcHMge1xuXG4gIC8qKlxuICAgKiBDb250YWlucyBhbGwgd2F5cyB0aGUgdm9sdW1lIGNhbiBiZSBtb3VudGVkLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzI2FjY2Vzcy1tb2Rlc1xuICAgKiBAZGVmYXVsdCAtIE5vIGFjY2VzcyBtb2Rlcy5cbiAgICovXG4gIHJlYWRvbmx5IGFjY2Vzc01vZGVzPzogcHZjLlBlcnNpc3RlbnRWb2x1bWVBY2Nlc3NNb2RlW107XG5cbiAgLyoqXG4gICAqIFdoYXQgaXMgdGhlIHN0b3JhZ2UgY2FwYWNpdHkgb2YgdGhpcyB2b2x1bWUuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMjcmVzb3VyY2VzXG4gICAqIEBkZWZhdWx0IC0gTm8gc3BlY2lmaWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RvcmFnZT86IFNpemU7XG5cbiAgLyoqXG4gICAqIFBhcnQgb2YgYSBiaS1kaXJlY3Rpb25hbCBiaW5kaW5nIGJldHdlZW4gUGVyc2lzdGVudFZvbHVtZSBhbmQgUGVyc2lzdGVudFZvbHVtZUNsYWltLlxuICAgKiBFeHBlY3RlZCB0byBiZSBub24tbmlsIHdoZW4gYm91bmQuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMjYmluZGluZ1xuICAgKiBAZGVmYXVsdCAtIE5vdCBib3VuZCB0byBhIHNwZWNpZmljIGNsYWltLlxuICAgKi9cbiAgcmVhZG9ubHkgY2xhaW0/OiBwdmMuSVBlcnNpc3RlbnRWb2x1bWVDbGFpbTtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIG1vdW50IG9wdGlvbnMsIGUuZy4gW1wicm9cIiwgXCJzb2Z0XCJdLiBOb3QgdmFsaWRhdGVkIC0gbW91bnQgd2lsbCBzaW1wbHkgZmFpbCBpZiBvbmUgaXMgaW52YWxpZC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lcy8jbW91bnQtb3B0aW9uc1xuICAgKiBAZGVmYXVsdCAtIE5vIG9wdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBtb3VudE9wdGlvbnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogV2hlbiBhIHVzZXIgaXMgZG9uZSB3aXRoIHRoZWlyIHZvbHVtZSwgdGhleSBjYW4gZGVsZXRlIHRoZSBQVkMgb2JqZWN0cyBmcm9tIHRoZSBBUEkgdGhhdFxuICAgKiBhbGxvd3MgcmVjbGFtYXRpb24gb2YgdGhlIHJlc291cmNlLiBUaGUgcmVjbGFpbSBwb2xpY3kgdGVsbHMgdGhlIGNsdXN0ZXIgd2hhdCB0byBkbyB3aXRoXG4gICAqIHRoZSB2b2x1bWUgYWZ0ZXIgaXQgaGFzIGJlZW4gcmVsZWFzZWQgb2YgaXRzIGNsYWltLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzI3JlY2xhaW1pbmdcbiAgICogQGRlZmF1bHQgUGVyc2lzdGVudFZvbHVtZVJlY2xhaW1Qb2xpY3kuUkVUQUlOXG4gICAqL1xuICByZWFkb25seSByZWNsYWltUG9saWN5PzogUGVyc2lzdGVudFZvbHVtZVJlY2xhaW1Qb2xpY3k7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgU3RvcmFnZUNsYXNzIHRvIHdoaWNoIHRoaXMgcGVyc2lzdGVudCB2b2x1bWUgYmVsb25ncy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBWb2x1bWUgZG9lcyBub3QgYmVsb25nIHRvIGFueSBzdG9yYWdlIGNsYXNzLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RvcmFnZUNsYXNzTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogRGVmaW5lcyB3aGF0IHR5cGUgb2Ygdm9sdW1lIGlzIHJlcXVpcmVkIGJ5IHRoZSBjbGFpbS5cbiAgICpcbiAgICogQGRlZmF1bHQgVm9sdW1lTW9kZS5GSUxFX1NZU1RFTVxuICAgKi9cbiAgcmVhZG9ubHkgdm9sdW1lTW9kZT86IHB2Yy5QZXJzaXN0ZW50Vm9sdW1lTW9kZTtcblxufVxuXG5jbGFzcyBJbXBvcnRlZFBlcnNpc3RlbnRWb2x1bWUgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJUGVyc2lzdGVudFZvbHVtZSB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbmFtZTogc3RyaW5nO1xuXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZVR5cGUgPSAncGVyc2lzdGVudHZvbHVtZXMnO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5fbmFtZSA9IG5hbWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXBpVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBrOHMuS3ViZVBlcnNpc3RlbnRWb2x1bWUuR1ZLLmFwaVZlcnNpb247XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFwaUdyb3VwKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcHVibGljIGdldCBraW5kKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGs4cy5LdWJlUGVyc2lzdGVudFZvbHVtZS5HVksua2luZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcmVzb3VyY2VOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuXG59XG5cbi8qKlxuICogQSBQZXJzaXN0ZW50Vm9sdW1lIChQVikgaXMgYSBwaWVjZSBvZiBzdG9yYWdlIGluIHRoZSBjbHVzdGVyIHRoYXQgaGFzIGJlZW5cbiAqIHByb3Zpc2lvbmVkIGJ5IGFuIGFkbWluaXN0cmF0b3Igb3IgZHluYW1pY2FsbHkgcHJvdmlzaW9uZWQgdXNpbmcgU3RvcmFnZSBDbGFzc2VzLlxuICogSXQgaXMgYSByZXNvdXJjZSBpbiB0aGUgY2x1c3RlciBqdXN0IGxpa2UgYSBub2RlIGlzIGEgY2x1c3RlciByZXNvdXJjZS5cbiAqIFBWcyBhcmUgdm9sdW1lIHBsdWdpbnMgbGlrZSBWb2x1bWVzLCBidXQgaGF2ZSBhIGxpZmVjeWNsZSBpbmRlcGVuZGVudCBvZiBhbnlcbiAqIGluZGl2aWR1YWwgUG9kIHRoYXQgdXNlcyB0aGUgUFYuIFRoaXMgQVBJIG9iamVjdCBjYXB0dXJlcyB0aGUgZGV0YWlscyBvZiB0aGVcbiAqIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzdG9yYWdlLCBiZSB0aGF0IE5GUywgaVNDU0ksIG9yIGFcbiAqIGNsb3VkLXByb3ZpZGVyLXNwZWNpZmljIHN0b3JhZ2Ugc3lzdGVtLlxuICovXG5leHBvcnQgY2xhc3MgUGVyc2lzdGVudFZvbHVtZSBleHRlbmRzIGJhc2UuUmVzb3VyY2UgaW1wbGVtZW50cyBJUGVyc2lzdGVudFZvbHVtZSwgdm9sdW1lLklTdG9yYWdlIHtcblxuICAvKipcbiAgICogSW1wb3J0cyBhIHB2IGZyb20gdGhlIGNsdXN0ZXIgYXMgYSByZWZlcmVuY2UuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21QZXJzaXN0ZW50Vm9sdW1lTmFtZShzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCB2b2x1bWVOYW1lOiBzdHJpbmcpOiBJUGVyc2lzdGVudFZvbHVtZSB7XG4gICAgcmV0dXJuIG5ldyBJbXBvcnRlZFBlcnNpc3RlbnRWb2x1bWUoc2NvcGUsIGlkLCB2b2x1bWVOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGJhc2UuUmVzb3VyY2UuYXBpT2JqZWN0XG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXBpT2JqZWN0OiBBcGlPYmplY3Q7XG5cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlVHlwZSA9ICdwZXJzaXN0ZW50dm9sdW1lcyc7XG5cbiAgcHJpdmF0ZSBfY2xhaW0/OiBwdmMuSVBlcnNpc3RlbnRWb2x1bWVDbGFpbTtcblxuICAvKipcbiAgICogU3RvcmFnZSBzaXplIG9mIHRoaXMgdm9sdW1lLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHN0b3JhZ2U/OiBTaXplO1xuXG4gIC8qKlxuICAgKiBWb2x1bWUgbW9kZSBvZiB0aGlzIHZvbHVtZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtb2RlOiBwdmMuUGVyc2lzdGVudFZvbHVtZU1vZGU7XG5cbiAgLyoqXG4gICAgKiBTdG9yYWdlIGNsYXNzIHRoaXMgdm9sdW1lIGJlbG9uZ3MgdG8uXG4gICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHN0b3JhZ2VDbGFzc05hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFjY2VzcyBtb2RlcyByZXF1aXJlbWVudCBvZiB0aGlzIGNsYWltLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfYWNjZXNzTW9kZXM/OiBwdmMuUGVyc2lzdGVudFZvbHVtZUFjY2Vzc01vZGVbXTtcblxuICAvKipcbiAgICogTW91bnQgb3B0aW9ucyBvZiB0aGlzIHZvbHVtZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtb3VudE9wdGlvbnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUmVjbGFpbSBwb2xpY3kgb2YgdGhpcyB2b2x1bWUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVjbGFpbVBvbGljeTogUGVyc2lzdGVudFZvbHVtZVJlY2xhaW1Qb2xpY3k7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBQZXJzaXN0ZW50Vm9sdW1lUHJvcHMgPSB7IH0pIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5zdG9yYWdlID0gcHJvcHMuc3RvcmFnZTtcbiAgICB0aGlzLm1vZGUgPSBwcm9wcy52b2x1bWVNb2RlID8/IHB2Yy5QZXJzaXN0ZW50Vm9sdW1lTW9kZS5GSUxFX1NZU1RFTTtcbiAgICB0aGlzLnN0b3JhZ2VDbGFzc05hbWUgPSBwcm9wcy5zdG9yYWdlQ2xhc3NOYW1lO1xuICAgIHRoaXMuX2FjY2Vzc01vZGVzID0gcHJvcHMuYWNjZXNzTW9kZXM7XG4gICAgdGhpcy5tb3VudE9wdGlvbnMgPSBwcm9wcy5tb3VudE9wdGlvbnM7XG4gICAgdGhpcy5yZWNsYWltUG9saWN5ID0gcHJvcHMucmVjbGFpbVBvbGljeSA/PyBQZXJzaXN0ZW50Vm9sdW1lUmVjbGFpbVBvbGljeS5SRVRBSU47XG5cbiAgICBpZiAocHJvcHMuY2xhaW0pIHtcbiAgICAgIHRoaXMuYmluZChwcm9wcy5jbGFpbSk7XG4gICAgfVxuXG4gICAgdGhpcy5hcGlPYmplY3QgPSBuZXcgazhzLkt1YmVQZXJzaXN0ZW50Vm9sdW1lKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIG1ldGFkYXRhOiBwcm9wcy5tZXRhZGF0YSxcbiAgICAgIHNwZWM6IExhenkuYW55KHsgcHJvZHVjZTogKCkgPT4gdGhpcy5fdG9LdWJlKCkgfSksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWNjZXNzIG1vZGVzIHJlcXVpcmVtZW50IG9mIHRoaXMgY2xhaW0uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFjY2Vzc01vZGVzKCk6IHB2Yy5QZXJzaXN0ZW50Vm9sdW1lQWNjZXNzTW9kZVtdIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fYWNjZXNzTW9kZXMgPyBbLi4udGhpcy5fYWNjZXNzTW9kZXNdIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFBWQyB0aGlzIHZvbHVtZSBpcyBib3VuZCB0by4gVW5kZWZpbmVkIG1lYW5zIHRoaXMgdm9sdW1lIGlzIG5vdCB5ZXRcbiAgICogY2xhaW1lZCBieSBhbnkgUFZDLlxuICAgKi9cbiAgcHVibGljIGdldCBjbGFpbSgpOiBwdmMuSVBlcnNpc3RlbnRWb2x1bWVDbGFpbSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2NsYWltO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2VydmUgYSBgUGVyc2lzdGVudFZvbHVtZWAgYnkgY3JlYXRpbmcgYSBgUGVyc2lzdGVudFZvbHVtZUNsYWltYFxuICAgKiB0aGF0IGlzIHdpcmVkIHRvIGNsYWltIHRoaXMgdm9sdW1lLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGhpcyBtZXRob2Qgd2lsbCB0aHJvdyBpbiBjYXNlIHRoZSB2b2x1bWUgaXMgYWxyZWFkeSBjbGFpbWVkLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzLyNyZXNlcnZpbmctYS1wZXJzaXN0ZW50dm9sdW1lXG4gICAqL1xuICBwdWJsaWMgcmVzZXJ2ZSgpOiBwdmMuUGVyc2lzdGVudFZvbHVtZUNsYWltIHtcbiAgICBjb25zdCBjbGFpbSA9IG5ldyBwdmMuUGVyc2lzdGVudFZvbHVtZUNsYWltKHRoaXMsIGAke3RoaXMubmFtZX1QVkNgLCB7XG4gICAgICBtZXRhZGF0YTogeyBuYW1lOiBgcHZjLSR7dGhpcy5uYW1lfWAsIG5hbWVzcGFjZTogdGhpcy5tZXRhZGF0YS5uYW1lc3BhY2UgfSxcblxuICAgICAgLy8gdGhlIHN0b3JhZ2UgY2xhc3NlcyBtdXN0IG1hdGNoLCBvdGhlcndpc2UgdGhlIGNsYWltXG4gICAgICAvLyB3aWxsIHVzZSB0aGUgZGVmYXVsdCBjbGFzcyAob3Igbm8gY2xhc3MgYXQgYWxsKSwgd2hpY2ggbWF5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBjbGFzc1xuICAgICAgLy8gb2YgdGhpcyB2b2x1bWUuIG5vdGUgdGhhdCBvdGhlciByZXF1aXJlbWVudHMgYXJlIG5vdCBuZWVkZWQgc2luY2VcbiAgICAgIC8vIHdoZW4gdGhleSBhcmUgbm90IGRlZmluZWQsIGFueSB2b2x1bWUgc2F0aXNpZmllcyB0aGVtLlxuICAgICAgc3RvcmFnZUNsYXNzTmFtZTogdGhpcy5zdG9yYWdlQ2xhc3NOYW1lLFxuICAgIH0pO1xuXG4gICAgdGhpcy5iaW5kKGNsYWltKTtcbiAgICBjbGFpbS5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuIGNsYWltO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmQgYSB2b2x1bWUgdG8gYSBzcGVjaWZpYyBjbGFpbS5cbiAgICogTm90ZSB0aGF0IHlvdSBtdXN0IGFsc28gYmluZCB0aGUgY2xhaW0gdG8gdGhlIHZvbHVtZS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lcy8jYmluZGluZ1xuICAgKlxuICAgKiBAcGFyYW0gY2xhaW0gVGhlIFBWQyB0byBiaW5kIHRvLlxuICAgKi9cbiAgcHVibGljIGJpbmQoY2xhaW06IHB2Yy5JUGVyc2lzdGVudFZvbHVtZUNsYWltKSB7XG4gICAgaWYgKHRoaXMuX2NsYWltICYmIHRoaXMuX2NsYWltLm5hbWUgIT09IGNsYWltLm5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGJpbmQgdm9sdW1lICcke3RoaXMubmFtZX0nIHRvIGNsYWltICcke2NsYWltLm5hbWV9JyBzaW5jZSBpdCBpcyBhbHJlYWR5IGJvdW5kIHRvIGNsYWltICcke3RoaXMuX2NsYWltLm5hbWV9J2ApO1xuICAgIH1cbiAgICB0aGlzLl9jbGFpbSA9IGNsYWltO1xuICB9XG5cbiAgcHVibGljIGFzVm9sdW1lKCk6IHZvbHVtZS5Wb2x1bWUge1xuICAgIGNvbnN0IGNsYWltID0gdGhpcy5yZXNlcnZlKCk7XG4gICAgcmV0dXJuIHZvbHVtZS5Wb2x1bWUuZnJvbVBlcnNpc3RlbnRWb2x1bWVDbGFpbSh0aGlzLCAnVm9sdW1lJywgY2xhaW0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF90b0t1YmUoKTogazhzLlBlcnNpc3RlbnRWb2x1bWVTcGVjIHtcbiAgICBjb25zdCBzdG9yYWdlID0gdGhpcy5zdG9yYWdlID8gazhzLlF1YW50aXR5LmZyb21TdHJpbmcodGhpcy5zdG9yYWdlLnRvR2liaWJ5dGVzKCkgKyAnR2knKSA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB7XG4gICAgICBjbGFpbVJlZjogdGhpcy5fY2xhaW0gPyB7IG5hbWU6IHRoaXMuX2NsYWltPy5uYW1lIH0gOiB1bmRlZmluZWQsXG4gICAgICBhY2Nlc3NNb2RlczogdGhpcy5hY2Nlc3NNb2Rlcz8ubWFwKGEgPT4gYS50b1N0cmluZygpKSxcbiAgICAgIGNhcGFjaXR5OiBzdG9yYWdlID8geyBzdG9yYWdlIH0gOiB1bmRlZmluZWQsXG4gICAgICBtb3VudE9wdGlvbnM6IHRoaXMubW91bnRPcHRpb25zPy5tYXAobyA9PiBvKSxcbiAgICAgIHN0b3JhZ2VDbGFzc05hbWU6IHRoaXMuc3RvcmFnZUNsYXNzTmFtZSxcbiAgICAgIHBlcnNpc3RlbnRWb2x1bWVSZWNsYWltUG9saWN5OiB0aGlzLnJlY2xhaW1Qb2xpY3ksXG4gICAgICB2b2x1bWVNb2RlOiB0aGlzLm1vZGUsXG4gICAgfTtcbiAgfVxuXG59XG5cbi8qKlxuICogUmVjbGFpbSBQb2xpY2llcy5cbiAqL1xuZXhwb3J0IGVudW0gUGVyc2lzdGVudFZvbHVtZVJlY2xhaW1Qb2xpY3kge1xuXG4gIC8qKlxuICAgKiBUaGUgUmV0YWluIHJlY2xhaW0gcG9saWN5IGFsbG93cyBmb3IgbWFudWFsIHJlY2xhbWF0aW9uIG9mIHRoZSByZXNvdXJjZS5cbiAgICogV2hlbiB0aGUgUGVyc2lzdGVudFZvbHVtZUNsYWltIGlzIGRlbGV0ZWQsIHRoZSBQZXJzaXN0ZW50Vm9sdW1lIHN0aWxsIGV4aXN0cyBhbmQgdGhlXG4gICAqIHZvbHVtZSBpcyBjb25zaWRlcmVkIFwicmVsZWFzZWRcIi4gQnV0IGl0IGlzIG5vdCB5ZXQgYXZhaWxhYmxlIGZvciBhbm90aGVyIGNsYWltXG4gICAqIGJlY2F1c2UgdGhlIHByZXZpb3VzIGNsYWltYW50J3MgZGF0YSByZW1haW5zIG9uIHRoZSB2b2x1bWUuXG4gICAqIEFuIGFkbWluaXN0cmF0b3IgY2FuIG1hbnVhbGx5IHJlY2xhaW0gdGhlIHZvbHVtZSB3aXRoIHRoZSBmb2xsb3dpbmcgc3RlcHM6XG4gICAqXG4gICAqIDEuIERlbGV0ZSB0aGUgUGVyc2lzdGVudFZvbHVtZS4gVGhlIGFzc29jaWF0ZWQgc3RvcmFnZSBhc3NldCBpbiBleHRlcm5hbFxuICAgKiAgICBpbmZyYXN0cnVjdHVyZSAoc3VjaCBhcyBhbiBBV1MgRUJTLCBHQ0UgUEQsIEF6dXJlIERpc2ssIG9yIENpbmRlciB2b2x1bWUpIHN0aWxsIGV4aXN0cyBhZnRlciB0aGUgUFYgaXMgZGVsZXRlZC5cbiAgICogMi4gTWFudWFsbHkgY2xlYW4gdXAgdGhlIGRhdGEgb24gdGhlIGFzc29jaWF0ZWQgc3RvcmFnZSBhc3NldCBhY2NvcmRpbmdseS5cbiAgICogMy4gTWFudWFsbHkgZGVsZXRlIHRoZSBhc3NvY2lhdGVkIHN0b3JhZ2UgYXNzZXQuXG4gICAqXG4gICAqIElmIHlvdSB3YW50IHRvIHJldXNlIHRoZSBzYW1lIHN0b3JhZ2UgYXNzZXQsIGNyZWF0ZSBhIG5ldyBQZXJzaXN0ZW50Vm9sdW1lXG4gICAqIHdpdGggdGhlIHNhbWUgc3RvcmFnZSBhc3NldCBkZWZpbml0aW9uLlxuICAgKi9cbiAgUkVUQUlOID0gJ1JldGFpbicsXG5cbiAgLyoqXG4gICAqIEZvciB2b2x1bWUgcGx1Z2lucyB0aGF0IHN1cHBvcnQgdGhlIERlbGV0ZSByZWNsYWltIHBvbGljeSwgZGVsZXRpb24gcmVtb3ZlcyBib3RoIHRoZVxuICAgKiBQZXJzaXN0ZW50Vm9sdW1lIG9iamVjdCBmcm9tIEt1YmVybmV0ZXMsIGFzIHdlbGwgYXMgdGhlIGFzc29jaWF0ZWQgc3RvcmFnZSBhc3NldCBpblxuICAgKiB0aGUgZXh0ZXJuYWwgaW5mcmFzdHJ1Y3R1cmUsIHN1Y2ggYXMgYW4gQVdTIEVCUywgR0NFIFBELCBBenVyZSBEaXNrLCBvciBDaW5kZXIgdm9sdW1lLlxuICAgKiBWb2x1bWVzIHRoYXQgd2VyZSBkeW5hbWljYWxseSBwcm92aXNpb25lZCBpbmhlcml0IHRoZSByZWNsYWltIHBvbGljeSBvZiB0aGVpciBTdG9yYWdlQ2xhc3MsIHdoaWNoIGRlZmF1bHRzIHRvIERlbGV0ZS5cbiAgICogVGhlIGFkbWluaXN0cmF0b3Igc2hvdWxkIGNvbmZpZ3VyZSB0aGUgU3RvcmFnZUNsYXNzIGFjY29yZGluZyB0byB1c2VycycgZXhwZWN0YXRpb25zOyBvdGhlcndpc2UsXG4gICAqIHRoZSBQViBtdXN0IGJlIGVkaXRlZCBvciBwYXRjaGVkIGFmdGVyIGl0IGlzIGNyZWF0ZWRcbiAgICovXG4gIERFTEVURSA9ICdEZWxldGUnLFxuXG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYEF3c0VsYXN0aWNCbG9ja1N0b3JlUGVyc2lzdGVudFZvbHVtZWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXdzRWxhc3RpY0Jsb2NrU3RvcmVQZXJzaXN0ZW50Vm9sdW1lUHJvcHMgZXh0ZW5kcyBQZXJzaXN0ZW50Vm9sdW1lUHJvcHMge1xuXG4gIC8qKlxuICAgKiBVbmlxdWUgSUQgb2YgdGhlIHBlcnNpc3RlbnQgZGlzayByZXNvdXJjZSBpbiBBV1MgKEFtYXpvbiBFQlMgdm9sdW1lKS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3ZvbHVtZXMjYXdzZWxhc3RpY2Jsb2Nrc3RvcmVcbiAgICpcbiAgICogQHNlZSBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3ZvbHVtZXMjYXdzZWxhc3RpY2Jsb2Nrc3RvcmVcbiAgICovXG4gIHJlYWRvbmx5IHZvbHVtZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZpbGVzeXN0ZW0gdHlwZSBvZiB0aGUgdm9sdW1lIHRoYXQgeW91IHdhbnQgdG8gbW91bnQuXG4gICAqIFRpcDogRW5zdXJlIHRoYXQgdGhlIGZpbGVzeXN0ZW0gdHlwZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3Qgb3BlcmF0aW5nIHN5c3RlbS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3ZvbHVtZXMjYXdzZWxhc3RpY2Jsb2Nrc3RvcmVcbiAgICogQGRlZmF1bHQgJ2V4dDQnXG4gICAqL1xuICByZWFkb25seSBmc1R5cGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAgKiBUaGUgcGFydGl0aW9uIGluIHRoZSB2b2x1bWUgdGhhdCB5b3Ugd2FudCB0byBtb3VudC4gSWYgb21pdHRlZCwgdGhlIGRlZmF1bHQgaXMgdG8gbW91bnQgYnkgdm9sdW1lIG5hbWUuXG4gICAgKiBFeGFtcGxlczogRm9yIHZvbHVtZSAvZGV2L3NkYTEsIHlvdSBzcGVjaWZ5IHRoZSBwYXJ0aXRpb24gYXMgXCIxXCIuXG4gICAgKiBTaW1pbGFybHksIHRoZSB2b2x1bWUgcGFydGl0aW9uIGZvciAvZGV2L3NkYSBpcyBcIjBcIiAob3IgeW91IGNhbiBsZWF2ZSB0aGUgcHJvcGVydHkgZW1wdHkpLlxuICAgICpcbiAgICAqIEBkZWZhdWx0IC0gTm8gcGFydGl0aW9uLlxuICAgICovXG4gIHJlYWRvbmx5IHBhcnRpdGlvbj86IG51bWJlcjtcblxuICAvKipcbiAgICAqIFNwZWNpZnkgXCJ0cnVlXCIgdG8gZm9yY2UgYW5kIHNldCB0aGUgUmVhZE9ubHkgcHJvcGVydHkgaW4gVm9sdW1lTW91bnRzIHRvIFwidHJ1ZVwiLlxuICAgICpcbiAgICAqIEBzZWUgaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS92b2x1bWVzI2F3c2VsYXN0aWNibG9ja3N0b3JlXG4gICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICovXG4gIHJlYWRvbmx5IHJlYWRPbmx5PzogYm9vbGVhbjtcblxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gQVdTIERpc2sgcmVzb3VyY2UgdGhhdCBpcyBhdHRhY2hlZCB0byBhIGt1YmVsZXQncyBob3N0IG1hY2hpbmUgYW5kXG4gKiB0aGVuIGV4cG9zZWQgdG8gdGhlIHBvZC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2Uvdm9sdW1lcyNhd3NlbGFzdGljYmxvY2tzdG9yZVxuICovXG5leHBvcnQgY2xhc3MgQXdzRWxhc3RpY0Jsb2NrU3RvcmVQZXJzaXN0ZW50Vm9sdW1lIGV4dGVuZHMgUGVyc2lzdGVudFZvbHVtZSB7XG5cbiAgLyoqXG4gICAqIFZvbHVtZSBpZCBvZiB0aGlzIHZvbHVtZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2b2x1bWVJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCBpdCBpcyBtb3VudGVkIGFzIGEgcmVhZC1vbmx5IHZvbHVtZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZWFkT25seTogYm9vbGVhbjtcblxuICAvKipcbiAgICogRmlsZSBzeXN0ZW0gdHlwZSBvZiB0aGlzIHZvbHVtZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBmc1R5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogUGFydGl0aW9uIG9mIHRoaXMgdm9sdW1lLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBhcnRpdGlvbj86IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQXdzRWxhc3RpY0Jsb2NrU3RvcmVQZXJzaXN0ZW50Vm9sdW1lUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIHRoaXMudm9sdW1lSWQgPSBwcm9wcy52b2x1bWVJZDtcbiAgICB0aGlzLnJlYWRPbmx5ID0gcHJvcHMucmVhZE9ubHkgPz8gZmFsc2U7XG4gICAgdGhpcy5mc1R5cGUgPSBwcm9wcy5mc1R5cGUgPz8gJ2V4dDQnO1xuICAgIHRoaXMucGFydGl0aW9uID0gcHJvcHMucGFydGl0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF90b0t1YmUoKTogazhzLlBlcnNpc3RlbnRWb2x1bWVTcGVjIHtcbiAgICBjb25zdCBzcGVjID0gc3VwZXIuX3RvS3ViZSgpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zcGVjLFxuICAgICAgYXdzRWxhc3RpY0Jsb2NrU3RvcmU6IHtcbiAgICAgICAgdm9sdW1lSWQ6IHRoaXMudm9sdW1lSWQsXG4gICAgICAgIGZzVHlwZTogdGhpcy5mc1R5cGUsXG4gICAgICAgIHBhcnRpdGlvbjogdGhpcy5wYXJ0aXRpb24sXG4gICAgICAgIHJlYWRPbmx5OiB0aGlzLnJlYWRPbmx5LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYEF6dXJlRGlza1BlcnNpc3RlbnRWb2x1bWVgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF6dXJlRGlza1BlcnNpc3RlbnRWb2x1bWVQcm9wcyBleHRlbmRzIFBlcnNpc3RlbnRWb2x1bWVQcm9wcyB7XG5cbiAgLyoqXG4gICAqIFRoZSBOYW1lIG9mIHRoZSBkYXRhIGRpc2sgaW4gdGhlIGJsb2Igc3RvcmFnZVxuICAgKi9cbiAgcmVhZG9ubHkgZGlza05hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFVSSSB0aGUgZGF0YSBkaXNrIGluIHRoZSBibG9iIHN0b3JhZ2VcbiAgICovXG4gIHJlYWRvbmx5IGRpc2tVcmk6IHN0cmluZztcblxuICAvKipcbiAgICogSG9zdCBDYWNoaW5nIG1vZGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQXp1cmVEaXNrUGVyc2lzdGVudFZvbHVtZUNhY2hpbmdNb2RlLk5PTkUuXG4gICAqL1xuICByZWFkb25seSBjYWNoaW5nTW9kZT86IHZvbHVtZS5BenVyZURpc2tQZXJzaXN0ZW50Vm9sdW1lQ2FjaGluZ01vZGU7XG5cbiAgLyoqXG4gICAgKiBGaWxlc3lzdGVtIHR5cGUgdG8gbW91bnQuIE11c3QgYmUgYSBmaWxlc3lzdGVtIHR5cGUgc3VwcG9ydGVkIGJ5IHRoZSBob3N0IG9wZXJhdGluZyBzeXN0ZW0uXG4gICAgKlxuICAgICogQGRlZmF1bHQgJ2V4dDQnXG4gICAgKi9cbiAgcmVhZG9ubHkgZnNUeXBlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgICogS2luZCBvZiBkaXNrLlxuICAgICpcbiAgICAqIEBkZWZhdWx0IEF6dXJlRGlza1BlcnNpc3RlbnRWb2x1bWVLaW5kLlNIQVJFRFxuICAgICovXG4gIHJlYWRvbmx5IGtpbmQ/OiB2b2x1bWUuQXp1cmVEaXNrUGVyc2lzdGVudFZvbHVtZUtpbmQ7XG5cbiAgLyoqXG4gICAgKiBGb3JjZSB0aGUgUmVhZE9ubHkgc2V0dGluZyBpbiBWb2x1bWVNb3VudHMuXG4gICAgKlxuICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAqL1xuICByZWFkb25seSByZWFkT25seT86IGJvb2xlYW47XG5cbn1cblxuLyoqXG4gKiBBenVyZURpc2sgcmVwcmVzZW50cyBhbiBBenVyZSBEYXRhIERpc2sgbW91bnQgb24gdGhlIGhvc3QgYW5kIGJpbmQgbW91bnQgdG8gdGhlIHBvZC5cbiAqL1xuZXhwb3J0IGNsYXNzIEF6dXJlRGlza1BlcnNpc3RlbnRWb2x1bWUgZXh0ZW5kcyBQZXJzaXN0ZW50Vm9sdW1lIHtcblxuICAvKipcbiAgICogRGlzayBuYW1lIG9mIHRoaXMgdm9sdW1lLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRpc2tOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERpc2sgVVJJIG9mIHRoaXMgdm9sdW1lLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRpc2tVcmk6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgaXQgaXMgbW91bnRlZCBhcyBhIHJlYWQtb25seSB2b2x1bWUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVhZE9ubHk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENhY2hpbmcgbW9kZSBvZiB0aGlzIHZvbHVtZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjYWNoaW5nTW9kZTogdm9sdW1lLkF6dXJlRGlza1BlcnNpc3RlbnRWb2x1bWVDYWNoaW5nTW9kZTtcblxuICAvKipcbiAgICogRmlsZSBzeXN0ZW0gdHlwZSBvZiB0aGlzIHZvbHVtZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBmc1R5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogQXp1cmUga2luZCBvZiB0aGlzIHZvbHVtZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhenVyZUtpbmQ6IHZvbHVtZS5BenVyZURpc2tQZXJzaXN0ZW50Vm9sdW1lS2luZDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQXp1cmVEaXNrUGVyc2lzdGVudFZvbHVtZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICB0aGlzLmRpc2tOYW1lID0gcHJvcHMuZGlza05hbWU7XG4gICAgdGhpcy5kaXNrVXJpID0gcHJvcHMuZGlza1VyaTtcbiAgICB0aGlzLmNhY2hpbmdNb2RlID0gcHJvcHMuY2FjaGluZ01vZGUgPz8gdm9sdW1lLkF6dXJlRGlza1BlcnNpc3RlbnRWb2x1bWVDYWNoaW5nTW9kZS5OT05FO1xuICAgIHRoaXMuZnNUeXBlID0gcHJvcHMuZnNUeXBlID8/ICdleHQ0JztcbiAgICB0aGlzLmF6dXJlS2luZCA9IHByb3BzLmtpbmQgPz8gdm9sdW1lLkF6dXJlRGlza1BlcnNpc3RlbnRWb2x1bWVLaW5kLlNIQVJFRDtcbiAgICB0aGlzLnJlYWRPbmx5ID0gcHJvcHMucmVhZE9ubHkgPz8gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2t1YmVybmV0ZXMvZXhhbXBsZXMvYmxvYi9tYXN0ZXIvc3RhZ2luZy92b2x1bWVzL2F6dXJlX2Rpc2svUkVBRE1FLm1kXG4gICAqL1xuICBwdWJsaWMgX3RvS3ViZSgpOiBrOHMuUGVyc2lzdGVudFZvbHVtZVNwZWMge1xuICAgIGNvbnN0IHNwZWMgPSBzdXBlci5fdG9LdWJlKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnNwZWMsXG4gICAgICBhenVyZURpc2s6IHtcbiAgICAgICAgZGlza05hbWU6IHRoaXMuZGlza05hbWUsXG4gICAgICAgIGRpc2tVcmk6IHRoaXMuZGlza1VyaSxcbiAgICAgICAgY2FjaGluZ01vZGU6IHRoaXMuY2FjaGluZ01vZGUsXG4gICAgICAgIGZzVHlwZTogdGhpcy5mc1R5cGUsXG4gICAgICAgIGtpbmQ6IHRoaXMuYXp1cmVLaW5kLFxuICAgICAgICByZWFkT25seTogdGhpcy5yZWFkT25seSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGBHQ0VQZXJzaXN0ZW50RGlza1BlcnNpc3RlbnRWb2x1bWVgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdDRVBlcnNpc3RlbnREaXNrUGVyc2lzdGVudFZvbHVtZVByb3BzIGV4dGVuZHMgUGVyc2lzdGVudFZvbHVtZVByb3BzIHtcblxuICAvKipcbiAgICogVW5pcXVlIG5hbWUgb2YgdGhlIFBEIHJlc291cmNlIGluIEdDRS4gVXNlZCB0byBpZGVudGlmeSB0aGUgZGlzayBpbiBHQ0UuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS92b2x1bWVzI2djZXBlcnNpc3RlbnRkaXNrXG4gICAqL1xuICByZWFkb25seSBwZE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogRmlsZXN5c3RlbSB0eXBlIG9mIHRoZSB2b2x1bWUgdGhhdCB5b3Ugd2FudCB0byBtb3VudC5cbiAgICogVGlwOiBFbnN1cmUgdGhhdCB0aGUgZmlsZXN5c3RlbSB0eXBlIGlzIHN1cHBvcnRlZCBieSB0aGUgaG9zdCBvcGVyYXRpbmcgc3lzdGVtLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2Uvdm9sdW1lcyNhd3NlbGFzdGljYmxvY2tzdG9yZVxuICAgKiBAZGVmYXVsdCAnZXh0NCdcbiAgICovXG4gIHJlYWRvbmx5IGZzVHlwZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBhcnRpdGlvbiBpbiB0aGUgdm9sdW1lIHRoYXQgeW91IHdhbnQgdG8gbW91bnQuIElmIG9taXR0ZWQsIHRoZSBkZWZhdWx0IGlzIHRvIG1vdW50IGJ5IHZvbHVtZSBuYW1lLlxuICAgKiBFeGFtcGxlczogRm9yIHZvbHVtZSAvZGV2L3NkYTEsIHlvdSBzcGVjaWZ5IHRoZSBwYXJ0aXRpb24gYXMgXCIxXCIuXG4gICAqIFNpbWlsYXJseSwgdGhlIHZvbHVtZSBwYXJ0aXRpb24gZm9yIC9kZXYvc2RhIGlzIFwiMFwiIChvciB5b3UgY2FuIGxlYXZlIHRoZSBwcm9wZXJ0eSBlbXB0eSkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gcGFydGl0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFydGl0aW9uPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IFwidHJ1ZVwiIHRvIGZvcmNlIGFuZCBzZXQgdGhlIFJlYWRPbmx5IHByb3BlcnR5IGluIFZvbHVtZU1vdW50cyB0byBcInRydWVcIi5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3ZvbHVtZXMjYXdzZWxhc3RpY2Jsb2Nrc3RvcmVcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHJlYWRPbmx5PzogYm9vbGVhbjtcblxufVxuXG4vKipcbiAqIEdDRVBlcnNpc3RlbnREaXNrIHJlcHJlc2VudHMgYSBHQ0UgRGlzayByZXNvdXJjZSB0aGF0IGlzIGF0dGFjaGVkIHRvIGEga3ViZWxldCdzIGhvc3QgbWFjaGluZVxuICogYW5kIHRoZW4gZXhwb3NlZCB0byB0aGUgcG9kLiBQcm92aXNpb25lZCBieSBhbiBhZG1pbi5cbiAqXG4gKiBAc2VlIGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2Uvdm9sdW1lcyNnY2VwZXJzaXN0ZW50ZGlza1xuICovXG5leHBvcnQgY2xhc3MgR0NFUGVyc2lzdGVudERpc2tQZXJzaXN0ZW50Vm9sdW1lIGV4dGVuZHMgUGVyc2lzdGVudFZvbHVtZSB7XG5cbiAgLyoqXG4gICAqIFBEIHJlc291cmNlIGluIEdDRSBvZiB0aGlzIHZvbHVtZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwZE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgaXQgaXMgbW91bnRlZCBhcyBhIHJlYWQtb25seSB2b2x1bWUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVhZE9ubHk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEZpbGUgc3lzdGVtIHR5cGUgb2YgdGhpcyB2b2x1bWUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZnNUeXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhcnRpdGlvbiBvZiB0aGlzIHZvbHVtZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwYXJ0aXRpb24/OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEdDRVBlcnNpc3RlbnREaXNrUGVyc2lzdGVudFZvbHVtZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICB0aGlzLnBkTmFtZSA9IHByb3BzLnBkTmFtZTtcbiAgICB0aGlzLnJlYWRPbmx5ID0gcHJvcHMucmVhZE9ubHkgPz8gZmFsc2U7XG4gICAgdGhpcy5mc1R5cGUgPSBwcm9wcy5mc1R5cGUgPz8gJ2V4dDQnO1xuICAgIHRoaXMucGFydGl0aW9uID0gcHJvcHMucGFydGl0aW9uO1xuXG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2t1YmVybmV0ZXMvZXhhbXBsZXMvYmxvYi9tYXN0ZXIvc3RhZ2luZy92b2x1bWVzL2F6dXJlX2Rpc2svUkVBRE1FLm1kXG4gICAqL1xuICBwdWJsaWMgX3RvS3ViZSgpOiBrOHMuUGVyc2lzdGVudFZvbHVtZVNwZWMge1xuICAgIGNvbnN0IHNwZWMgPSBzdXBlci5fdG9LdWJlKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnNwZWMsXG4gICAgICBnY2VQZXJzaXN0ZW50RGlzazoge1xuICAgICAgICBwZE5hbWU6IHRoaXMucGROYW1lLFxuICAgICAgICBmc1R5cGU6IHRoaXMuZnNUeXBlLFxuICAgICAgICBwYXJ0aXRpb246IHRoaXMucGFydGl0aW9uLFxuICAgICAgICByZWFkT25seTogdGhpcy5yZWFkT25seSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxufSJdfQ==
package/lib/pvc.d.ts ADDED
@@ -0,0 +1,163 @@
1
+ import { Size, ApiObject } from 'cdk8s';
2
+ import { Construct } from 'constructs';
3
+ import * as base from './base';
4
+ import * as k8s from './imports/k8s';
5
+ import * as pv from './pv';
6
+ /**
7
+ * Contract of a `PersistentVolumeClaim`.
8
+ */
9
+ export interface IPersistentVolumeClaim extends base.IResource {
10
+ }
11
+ /**
12
+ * Properties for `PersistentVolumeClaim`.
13
+ */
14
+ export interface PersistentVolumeClaimProps extends base.ResourceProps {
15
+ /**
16
+ * Contains the access modes the volume should support.
17
+ *
18
+ * @see https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
19
+ * @default - No access modes requirement.
20
+ */
21
+ readonly accessModes?: PersistentVolumeAccessMode[];
22
+ /**
23
+ * Minimum storage size the volume should have.
24
+ *
25
+ * @see https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
26
+ * @default - No storage requirement.
27
+ */
28
+ readonly storage?: Size;
29
+ /**
30
+ * Name of the StorageClass required by the claim.
31
+ * When this property is not set, the behavior is as follows:
32
+ *
33
+ * - If the admission plugin is turned on, the storage class marked as default will be used.
34
+ * - If the admission plugin is turned off, the pvc can only be bound to volumes without a storage class.
35
+ *
36
+ * @see https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1
37
+ * @default - Not set.
38
+ */
39
+ readonly storageClassName?: string;
40
+ /**
41
+ * Defines what type of volume is required by the claim.
42
+ *
43
+ * @default VolumeMode.FILE_SYSTEM
44
+ */
45
+ readonly volumeMode?: PersistentVolumeMode;
46
+ /**
47
+ * The PersistentVolume backing this claim.
48
+ *
49
+ * The control plane still checks that storage class, access modes,
50
+ * and requested storage size on the volume are valid.
51
+ *
52
+ * Note that in order to guarantee a proper binding, the volume should
53
+ * also define a `claimRef` referring to this claim. Otherwise, the volume may be
54
+ * claimed be other pvc's before it gets a chance to bind to this one.
55
+ *
56
+ * If the volume is managed (i.e not imported), you can use `pv.claim()` to easily
57
+ * create a bi-directional bounded claim.
58
+ *
59
+ * @see https://kubernetes.io/docs/concepts/storage/persistent-volumes/#binding.
60
+ * @default - No specific volume binding.
61
+ */
62
+ readonly volume?: pv.IPersistentVolume;
63
+ }
64
+ /**
65
+ * A PersistentVolumeClaim (PVC) is a request for storage by a user.
66
+ * It is similar to a Pod. Pods consume node resources and PVCs consume PV resources.
67
+ * Pods can request specific levels of resources (CPU and Memory).
68
+ * Claims can request specific size and access modes
69
+ */
70
+ export declare class PersistentVolumeClaim extends base.Resource implements IPersistentVolumeClaim {
71
+ /**
72
+ * Imports a pvc from the cluster as a reference.
73
+ */
74
+ static fromClaimName(scope: Construct, id: string, claimName: string): IPersistentVolumeClaim;
75
+ /**
76
+ * @see base.Resource.apiObject
77
+ */
78
+ protected readonly apiObject: ApiObject;
79
+ readonly resourceType = "persistentvolumeclaims";
80
+ /**
81
+ * Storage requirement of this claim.
82
+ */
83
+ readonly storage?: Size;
84
+ /**
85
+ * Volume mode requirement of this claim.
86
+ */
87
+ readonly volumeMode: PersistentVolumeMode;
88
+ /**
89
+ * Storage class requirment of this claim.
90
+ */
91
+ readonly storageClassName?: string;
92
+ private readonly _accessModes?;
93
+ private _volume?;
94
+ constructor(scope: Construct, id: string, props?: PersistentVolumeClaimProps);
95
+ /**
96
+ * Access modes requirement of this claim.
97
+ */
98
+ get accessModes(): PersistentVolumeAccessMode[] | undefined;
99
+ /**
100
+ * PV this claim is bound to. Undefined means the claim is not bound
101
+ * to any specific volume.
102
+ */
103
+ get volume(): pv.IPersistentVolume | undefined;
104
+ /**
105
+ * Bind a claim to a specific volume.
106
+ * Note that you must also bind the volume to the claim.
107
+ *
108
+ * @see https://kubernetes.io/docs/concepts/storage/persistent-volumes/#binding
109
+ *
110
+ * @param vol The PV to bind to.
111
+ */
112
+ bind(vol: pv.IPersistentVolume): void;
113
+ /**
114
+ * @internal
115
+ */
116
+ _toKube(): k8s.PersistentVolumeClaimSpec;
117
+ }
118
+ /**
119
+ * Access Modes.
120
+ */
121
+ export declare enum PersistentVolumeAccessMode {
122
+ /**
123
+ * The volume can be mounted as read-write by a single node.
124
+ * ReadWriteOnce access mode still can allow multiple pods to access
125
+ * the volume when the pods are running on the same node.
126
+ */
127
+ READ_WRITE_ONCE = "ReadWriteOnce",
128
+ /**
129
+ * The volume can be mounted as read-only by many nodes.
130
+ */
131
+ READ_ONLY_MANY = "ReadOnlyMany",
132
+ /**
133
+ * The volume can be mounted as read-write by many nodes.
134
+ */
135
+ READ_WRITE_MANY = "ReadWriteMany",
136
+ /**
137
+ * The volume can be mounted as read-write by a single Pod.
138
+ * Use ReadWriteOncePod access mode if you want to ensure that
139
+ * only one pod across whole cluster can read that PVC or write to it.
140
+ * This is only supported for CSI volumes and Kubernetes version 1.22+.
141
+ */
142
+ READ_WRITE_ONCE_POD = "ReadWriteOncePod"
143
+ }
144
+ /**
145
+ * Volume Modes.
146
+ */
147
+ export declare enum PersistentVolumeMode {
148
+ /**
149
+ * Volume is ounted into Pods into a directory.
150
+ * If the volume is backed by a block device and the device is empty,
151
+ * Kubernetes creates a filesystem on the device before mounting it
152
+ * for the first time.
153
+ */
154
+ FILE_SYSTEM = "Filesystem",
155
+ /**
156
+ * Use a volume as a raw block device. Such volume is presented into a Pod as a block device,
157
+ * without any filesystem on it. This mode is useful to provide a Pod the fastest possible way
158
+ * to access a volume, without any filesystem layer between the Pod
159
+ * and the volume. On the other hand, the application running in
160
+ * the Pod must know how to handle a raw block device
161
+ */
162
+ BLOCK = "Block"
163
+ }