@cdktn/provider-helm 12.2.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 +13145 -0
- package/LICENSE +355 -0
- package/README.md +94 -0
- package/lib/data-helm-template/index.d.ts +823 -0
- package/lib/data-helm-template/index.js +1820 -0
- package/lib/index.d.ts +7 -0
- package/lib/index.js +12 -0
- package/lib/lazy-index.d.ts +4 -0
- package/lib/lazy-index.js +10 -0
- package/lib/provider/index.d.ts +330 -0
- package/lib/provider/index.js +582 -0
- package/lib/release/index.d.ts +866 -0
- package/lib/release/index.js +1979 -0
- package/package.json +155 -0
|
@@ -0,0 +1,582 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.HelmProvider = void 0;
|
|
5
|
+
exports.helmProviderExperimentsToTerraform = helmProviderExperimentsToTerraform;
|
|
6
|
+
exports.helmProviderExperimentsToHclTerraform = helmProviderExperimentsToHclTerraform;
|
|
7
|
+
exports.helmProviderKubernetesExecToTerraform = helmProviderKubernetesExecToTerraform;
|
|
8
|
+
exports.helmProviderKubernetesExecToHclTerraform = helmProviderKubernetesExecToHclTerraform;
|
|
9
|
+
exports.helmProviderKubernetesToTerraform = helmProviderKubernetesToTerraform;
|
|
10
|
+
exports.helmProviderKubernetesToHclTerraform = helmProviderKubernetesToHclTerraform;
|
|
11
|
+
exports.helmProviderRegistriesToTerraform = helmProviderRegistriesToTerraform;
|
|
12
|
+
exports.helmProviderRegistriesToHclTerraform = helmProviderRegistriesToHclTerraform;
|
|
13
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
14
|
+
const cdktn = require("cdktn");
|
|
15
|
+
function helmProviderExperimentsToTerraform(struct) {
|
|
16
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
17
|
+
return struct;
|
|
18
|
+
}
|
|
19
|
+
if (cdktn.isComplexElement(struct)) {
|
|
20
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
21
|
+
}
|
|
22
|
+
return {
|
|
23
|
+
manifest: cdktn.booleanToTerraform(struct.manifest),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
function helmProviderExperimentsToHclTerraform(struct) {
|
|
27
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
28
|
+
return struct;
|
|
29
|
+
}
|
|
30
|
+
if (cdktn.isComplexElement(struct)) {
|
|
31
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
32
|
+
}
|
|
33
|
+
const attrs = {
|
|
34
|
+
manifest: {
|
|
35
|
+
value: cdktn.booleanToHclTerraform(struct.manifest),
|
|
36
|
+
isBlock: false,
|
|
37
|
+
type: "simple",
|
|
38
|
+
storageClassType: "boolean",
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
// remove undefined attributes
|
|
42
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
|
43
|
+
}
|
|
44
|
+
function helmProviderKubernetesExecToTerraform(struct) {
|
|
45
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
46
|
+
return struct;
|
|
47
|
+
}
|
|
48
|
+
if (cdktn.isComplexElement(struct)) {
|
|
49
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
api_version: cdktn.stringToTerraform(struct.apiVersion),
|
|
53
|
+
args: cdktn.listMapper(cdktn.stringToTerraform, false)(struct.args),
|
|
54
|
+
command: cdktn.stringToTerraform(struct.command),
|
|
55
|
+
env: cdktn.hashMapper(cdktn.stringToTerraform)(struct.env),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function helmProviderKubernetesExecToHclTerraform(struct) {
|
|
59
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
60
|
+
return struct;
|
|
61
|
+
}
|
|
62
|
+
if (cdktn.isComplexElement(struct)) {
|
|
63
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
64
|
+
}
|
|
65
|
+
const attrs = {
|
|
66
|
+
api_version: {
|
|
67
|
+
value: cdktn.stringToHclTerraform(struct.apiVersion),
|
|
68
|
+
isBlock: false,
|
|
69
|
+
type: "simple",
|
|
70
|
+
storageClassType: "string",
|
|
71
|
+
},
|
|
72
|
+
args: {
|
|
73
|
+
value: cdktn.listMapperHcl(cdktn.stringToHclTerraform, false)(struct.args),
|
|
74
|
+
isBlock: false,
|
|
75
|
+
type: "list",
|
|
76
|
+
storageClassType: "stringList",
|
|
77
|
+
},
|
|
78
|
+
command: {
|
|
79
|
+
value: cdktn.stringToHclTerraform(struct.command),
|
|
80
|
+
isBlock: false,
|
|
81
|
+
type: "simple",
|
|
82
|
+
storageClassType: "string",
|
|
83
|
+
},
|
|
84
|
+
env: {
|
|
85
|
+
value: cdktn.hashMapperHcl(cdktn.stringToHclTerraform)(struct.env),
|
|
86
|
+
isBlock: false,
|
|
87
|
+
type: "map",
|
|
88
|
+
storageClassType: "stringMap",
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
// remove undefined attributes
|
|
92
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
|
93
|
+
}
|
|
94
|
+
function helmProviderKubernetesToTerraform(struct) {
|
|
95
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
96
|
+
return struct;
|
|
97
|
+
}
|
|
98
|
+
if (cdktn.isComplexElement(struct)) {
|
|
99
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
client_certificate: cdktn.stringToTerraform(struct.clientCertificate),
|
|
103
|
+
client_key: cdktn.stringToTerraform(struct.clientKey),
|
|
104
|
+
cluster_ca_certificate: cdktn.stringToTerraform(struct.clusterCaCertificate),
|
|
105
|
+
config_context: cdktn.stringToTerraform(struct.configContext),
|
|
106
|
+
config_context_auth_info: cdktn.stringToTerraform(struct.configContextAuthInfo),
|
|
107
|
+
config_context_cluster: cdktn.stringToTerraform(struct.configContextCluster),
|
|
108
|
+
config_path: cdktn.stringToTerraform(struct.configPath),
|
|
109
|
+
config_paths: cdktn.listMapper(cdktn.stringToTerraform, false)(struct.configPaths),
|
|
110
|
+
exec: helmProviderKubernetesExecToTerraform(struct.exec),
|
|
111
|
+
host: cdktn.stringToTerraform(struct.host),
|
|
112
|
+
insecure: cdktn.booleanToTerraform(struct.insecure),
|
|
113
|
+
password: cdktn.stringToTerraform(struct.password),
|
|
114
|
+
proxy_url: cdktn.stringToTerraform(struct.proxyUrl),
|
|
115
|
+
tls_server_name: cdktn.stringToTerraform(struct.tlsServerName),
|
|
116
|
+
token: cdktn.stringToTerraform(struct.token),
|
|
117
|
+
username: cdktn.stringToTerraform(struct.username),
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
function helmProviderKubernetesToHclTerraform(struct) {
|
|
121
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
122
|
+
return struct;
|
|
123
|
+
}
|
|
124
|
+
if (cdktn.isComplexElement(struct)) {
|
|
125
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
126
|
+
}
|
|
127
|
+
const attrs = {
|
|
128
|
+
client_certificate: {
|
|
129
|
+
value: cdktn.stringToHclTerraform(struct.clientCertificate),
|
|
130
|
+
isBlock: false,
|
|
131
|
+
type: "simple",
|
|
132
|
+
storageClassType: "string",
|
|
133
|
+
},
|
|
134
|
+
client_key: {
|
|
135
|
+
value: cdktn.stringToHclTerraform(struct.clientKey),
|
|
136
|
+
isBlock: false,
|
|
137
|
+
type: "simple",
|
|
138
|
+
storageClassType: "string",
|
|
139
|
+
},
|
|
140
|
+
cluster_ca_certificate: {
|
|
141
|
+
value: cdktn.stringToHclTerraform(struct.clusterCaCertificate),
|
|
142
|
+
isBlock: false,
|
|
143
|
+
type: "simple",
|
|
144
|
+
storageClassType: "string",
|
|
145
|
+
},
|
|
146
|
+
config_context: {
|
|
147
|
+
value: cdktn.stringToHclTerraform(struct.configContext),
|
|
148
|
+
isBlock: false,
|
|
149
|
+
type: "simple",
|
|
150
|
+
storageClassType: "string",
|
|
151
|
+
},
|
|
152
|
+
config_context_auth_info: {
|
|
153
|
+
value: cdktn.stringToHclTerraform(struct.configContextAuthInfo),
|
|
154
|
+
isBlock: false,
|
|
155
|
+
type: "simple",
|
|
156
|
+
storageClassType: "string",
|
|
157
|
+
},
|
|
158
|
+
config_context_cluster: {
|
|
159
|
+
value: cdktn.stringToHclTerraform(struct.configContextCluster),
|
|
160
|
+
isBlock: false,
|
|
161
|
+
type: "simple",
|
|
162
|
+
storageClassType: "string",
|
|
163
|
+
},
|
|
164
|
+
config_path: {
|
|
165
|
+
value: cdktn.stringToHclTerraform(struct.configPath),
|
|
166
|
+
isBlock: false,
|
|
167
|
+
type: "simple",
|
|
168
|
+
storageClassType: "string",
|
|
169
|
+
},
|
|
170
|
+
config_paths: {
|
|
171
|
+
value: cdktn.listMapperHcl(cdktn.stringToHclTerraform, false)(struct.configPaths),
|
|
172
|
+
isBlock: false,
|
|
173
|
+
type: "list",
|
|
174
|
+
storageClassType: "stringList",
|
|
175
|
+
},
|
|
176
|
+
exec: {
|
|
177
|
+
value: helmProviderKubernetesExecToHclTerraform(struct.exec),
|
|
178
|
+
isBlock: true,
|
|
179
|
+
type: "struct",
|
|
180
|
+
storageClassType: "HelmProviderKubernetesExec",
|
|
181
|
+
},
|
|
182
|
+
host: {
|
|
183
|
+
value: cdktn.stringToHclTerraform(struct.host),
|
|
184
|
+
isBlock: false,
|
|
185
|
+
type: "simple",
|
|
186
|
+
storageClassType: "string",
|
|
187
|
+
},
|
|
188
|
+
insecure: {
|
|
189
|
+
value: cdktn.booleanToHclTerraform(struct.insecure),
|
|
190
|
+
isBlock: false,
|
|
191
|
+
type: "simple",
|
|
192
|
+
storageClassType: "boolean",
|
|
193
|
+
},
|
|
194
|
+
password: {
|
|
195
|
+
value: cdktn.stringToHclTerraform(struct.password),
|
|
196
|
+
isBlock: false,
|
|
197
|
+
type: "simple",
|
|
198
|
+
storageClassType: "string",
|
|
199
|
+
},
|
|
200
|
+
proxy_url: {
|
|
201
|
+
value: cdktn.stringToHclTerraform(struct.proxyUrl),
|
|
202
|
+
isBlock: false,
|
|
203
|
+
type: "simple",
|
|
204
|
+
storageClassType: "string",
|
|
205
|
+
},
|
|
206
|
+
tls_server_name: {
|
|
207
|
+
value: cdktn.stringToHclTerraform(struct.tlsServerName),
|
|
208
|
+
isBlock: false,
|
|
209
|
+
type: "simple",
|
|
210
|
+
storageClassType: "string",
|
|
211
|
+
},
|
|
212
|
+
token: {
|
|
213
|
+
value: cdktn.stringToHclTerraform(struct.token),
|
|
214
|
+
isBlock: false,
|
|
215
|
+
type: "simple",
|
|
216
|
+
storageClassType: "string",
|
|
217
|
+
},
|
|
218
|
+
username: {
|
|
219
|
+
value: cdktn.stringToHclTerraform(struct.username),
|
|
220
|
+
isBlock: false,
|
|
221
|
+
type: "simple",
|
|
222
|
+
storageClassType: "string",
|
|
223
|
+
},
|
|
224
|
+
};
|
|
225
|
+
// remove undefined attributes
|
|
226
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
|
227
|
+
}
|
|
228
|
+
function helmProviderRegistriesToTerraform(struct) {
|
|
229
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
230
|
+
return struct;
|
|
231
|
+
}
|
|
232
|
+
if (cdktn.isComplexElement(struct)) {
|
|
233
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
234
|
+
}
|
|
235
|
+
return {
|
|
236
|
+
password: cdktn.stringToTerraform(struct.password),
|
|
237
|
+
url: cdktn.stringToTerraform(struct.url),
|
|
238
|
+
username: cdktn.stringToTerraform(struct.username),
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
function helmProviderRegistriesToHclTerraform(struct) {
|
|
242
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
243
|
+
return struct;
|
|
244
|
+
}
|
|
245
|
+
if (cdktn.isComplexElement(struct)) {
|
|
246
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
247
|
+
}
|
|
248
|
+
const attrs = {
|
|
249
|
+
password: {
|
|
250
|
+
value: cdktn.stringToHclTerraform(struct.password),
|
|
251
|
+
isBlock: false,
|
|
252
|
+
type: "simple",
|
|
253
|
+
storageClassType: "string",
|
|
254
|
+
},
|
|
255
|
+
url: {
|
|
256
|
+
value: cdktn.stringToHclTerraform(struct.url),
|
|
257
|
+
isBlock: false,
|
|
258
|
+
type: "simple",
|
|
259
|
+
storageClassType: "string",
|
|
260
|
+
},
|
|
261
|
+
username: {
|
|
262
|
+
value: cdktn.stringToHclTerraform(struct.username),
|
|
263
|
+
isBlock: false,
|
|
264
|
+
type: "simple",
|
|
265
|
+
storageClassType: "string",
|
|
266
|
+
},
|
|
267
|
+
};
|
|
268
|
+
// remove undefined attributes
|
|
269
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Represents a {@link https://registry.terraform.io/providers/hashicorp/helm/3.1.1/docs helm}
|
|
273
|
+
*/
|
|
274
|
+
class HelmProvider extends cdktn.TerraformProvider {
|
|
275
|
+
// ==============
|
|
276
|
+
// STATIC Methods
|
|
277
|
+
// ==============
|
|
278
|
+
/**
|
|
279
|
+
* Generates CDKTN code for importing a HelmProvider resource upon running "cdktn plan <stack-name>"
|
|
280
|
+
* @param scope The scope in which to define this construct
|
|
281
|
+
* @param importToId The construct id used in the generated config for the HelmProvider to import
|
|
282
|
+
* @param importFromId The id of the existing HelmProvider that should be imported. Refer to the {@link https://registry.terraform.io/providers/hashicorp/helm/3.1.1/docs#import import section} in the documentation of this resource for the id to use
|
|
283
|
+
* @param provider? Optional instance of the provider where the HelmProvider to import is found
|
|
284
|
+
*/
|
|
285
|
+
static generateConfigForImport(scope, importToId, importFromId, provider) {
|
|
286
|
+
return new cdktn.ImportableResource(scope, importToId, { terraformResourceType: "helm", importId: importFromId, provider });
|
|
287
|
+
}
|
|
288
|
+
// ===========
|
|
289
|
+
// INITIALIZER
|
|
290
|
+
// ===========
|
|
291
|
+
/**
|
|
292
|
+
* Create a new {@link https://registry.terraform.io/providers/hashicorp/helm/3.1.1/docs helm} Resource
|
|
293
|
+
*
|
|
294
|
+
* @param scope The scope in which to define this construct
|
|
295
|
+
* @param id The scoped construct ID. Must be unique amongst siblings in the same scope
|
|
296
|
+
* @param options HelmProviderConfig = {}
|
|
297
|
+
*/
|
|
298
|
+
constructor(scope, id, config = {}) {
|
|
299
|
+
super(scope, id, {
|
|
300
|
+
terraformResourceType: 'helm',
|
|
301
|
+
terraformGeneratorMetadata: {
|
|
302
|
+
providerName: 'helm',
|
|
303
|
+
providerVersion: '3.1.1',
|
|
304
|
+
providerVersionConstraint: '~> 3.0'
|
|
305
|
+
},
|
|
306
|
+
terraformProviderSource: 'helm'
|
|
307
|
+
});
|
|
308
|
+
this._burstLimit = config.burstLimit;
|
|
309
|
+
this._debug = config.debug;
|
|
310
|
+
this._experiments = config.experiments;
|
|
311
|
+
this._helmDriver = config.helmDriver;
|
|
312
|
+
this._kubernetes = config.kubernetes;
|
|
313
|
+
this._pluginsPath = config.pluginsPath;
|
|
314
|
+
this._qps = config.qps;
|
|
315
|
+
this._registries = config.registries;
|
|
316
|
+
this._registryConfigPath = config.registryConfigPath;
|
|
317
|
+
this._repositoryCache = config.repositoryCache;
|
|
318
|
+
this._repositoryConfigPath = config.repositoryConfigPath;
|
|
319
|
+
this._alias = config.alias;
|
|
320
|
+
}
|
|
321
|
+
get burstLimit() {
|
|
322
|
+
return this._burstLimit;
|
|
323
|
+
}
|
|
324
|
+
set burstLimit(value) {
|
|
325
|
+
this._burstLimit = value;
|
|
326
|
+
}
|
|
327
|
+
resetBurstLimit() {
|
|
328
|
+
this._burstLimit = undefined;
|
|
329
|
+
}
|
|
330
|
+
// Temporarily expose input value. Use with caution.
|
|
331
|
+
get burstLimitInput() {
|
|
332
|
+
return this._burstLimit;
|
|
333
|
+
}
|
|
334
|
+
get debug() {
|
|
335
|
+
return this._debug;
|
|
336
|
+
}
|
|
337
|
+
set debug(value) {
|
|
338
|
+
this._debug = value;
|
|
339
|
+
}
|
|
340
|
+
resetDebug() {
|
|
341
|
+
this._debug = undefined;
|
|
342
|
+
}
|
|
343
|
+
// Temporarily expose input value. Use with caution.
|
|
344
|
+
get debugInput() {
|
|
345
|
+
return this._debug;
|
|
346
|
+
}
|
|
347
|
+
get experiments() {
|
|
348
|
+
return this._experiments;
|
|
349
|
+
}
|
|
350
|
+
set experiments(value) {
|
|
351
|
+
this._experiments = value;
|
|
352
|
+
}
|
|
353
|
+
resetExperiments() {
|
|
354
|
+
this._experiments = undefined;
|
|
355
|
+
}
|
|
356
|
+
// Temporarily expose input value. Use with caution.
|
|
357
|
+
get experimentsInput() {
|
|
358
|
+
return this._experiments;
|
|
359
|
+
}
|
|
360
|
+
get helmDriver() {
|
|
361
|
+
return this._helmDriver;
|
|
362
|
+
}
|
|
363
|
+
set helmDriver(value) {
|
|
364
|
+
this._helmDriver = value;
|
|
365
|
+
}
|
|
366
|
+
resetHelmDriver() {
|
|
367
|
+
this._helmDriver = undefined;
|
|
368
|
+
}
|
|
369
|
+
// Temporarily expose input value. Use with caution.
|
|
370
|
+
get helmDriverInput() {
|
|
371
|
+
return this._helmDriver;
|
|
372
|
+
}
|
|
373
|
+
get kubernetes() {
|
|
374
|
+
return this._kubernetes;
|
|
375
|
+
}
|
|
376
|
+
set kubernetes(value) {
|
|
377
|
+
this._kubernetes = value;
|
|
378
|
+
}
|
|
379
|
+
resetKubernetes() {
|
|
380
|
+
this._kubernetes = undefined;
|
|
381
|
+
}
|
|
382
|
+
// Temporarily expose input value. Use with caution.
|
|
383
|
+
get kubernetesInput() {
|
|
384
|
+
return this._kubernetes;
|
|
385
|
+
}
|
|
386
|
+
get pluginsPath() {
|
|
387
|
+
return this._pluginsPath;
|
|
388
|
+
}
|
|
389
|
+
set pluginsPath(value) {
|
|
390
|
+
this._pluginsPath = value;
|
|
391
|
+
}
|
|
392
|
+
resetPluginsPath() {
|
|
393
|
+
this._pluginsPath = undefined;
|
|
394
|
+
}
|
|
395
|
+
// Temporarily expose input value. Use with caution.
|
|
396
|
+
get pluginsPathInput() {
|
|
397
|
+
return this._pluginsPath;
|
|
398
|
+
}
|
|
399
|
+
get qps() {
|
|
400
|
+
return this._qps;
|
|
401
|
+
}
|
|
402
|
+
set qps(value) {
|
|
403
|
+
this._qps = value;
|
|
404
|
+
}
|
|
405
|
+
resetQps() {
|
|
406
|
+
this._qps = undefined;
|
|
407
|
+
}
|
|
408
|
+
// Temporarily expose input value. Use with caution.
|
|
409
|
+
get qpsInput() {
|
|
410
|
+
return this._qps;
|
|
411
|
+
}
|
|
412
|
+
get registries() {
|
|
413
|
+
return this._registries;
|
|
414
|
+
}
|
|
415
|
+
set registries(value) {
|
|
416
|
+
this._registries = value;
|
|
417
|
+
}
|
|
418
|
+
resetRegistries() {
|
|
419
|
+
this._registries = undefined;
|
|
420
|
+
}
|
|
421
|
+
// Temporarily expose input value. Use with caution.
|
|
422
|
+
get registriesInput() {
|
|
423
|
+
return this._registries;
|
|
424
|
+
}
|
|
425
|
+
get registryConfigPath() {
|
|
426
|
+
return this._registryConfigPath;
|
|
427
|
+
}
|
|
428
|
+
set registryConfigPath(value) {
|
|
429
|
+
this._registryConfigPath = value;
|
|
430
|
+
}
|
|
431
|
+
resetRegistryConfigPath() {
|
|
432
|
+
this._registryConfigPath = undefined;
|
|
433
|
+
}
|
|
434
|
+
// Temporarily expose input value. Use with caution.
|
|
435
|
+
get registryConfigPathInput() {
|
|
436
|
+
return this._registryConfigPath;
|
|
437
|
+
}
|
|
438
|
+
get repositoryCache() {
|
|
439
|
+
return this._repositoryCache;
|
|
440
|
+
}
|
|
441
|
+
set repositoryCache(value) {
|
|
442
|
+
this._repositoryCache = value;
|
|
443
|
+
}
|
|
444
|
+
resetRepositoryCache() {
|
|
445
|
+
this._repositoryCache = undefined;
|
|
446
|
+
}
|
|
447
|
+
// Temporarily expose input value. Use with caution.
|
|
448
|
+
get repositoryCacheInput() {
|
|
449
|
+
return this._repositoryCache;
|
|
450
|
+
}
|
|
451
|
+
get repositoryConfigPath() {
|
|
452
|
+
return this._repositoryConfigPath;
|
|
453
|
+
}
|
|
454
|
+
set repositoryConfigPath(value) {
|
|
455
|
+
this._repositoryConfigPath = value;
|
|
456
|
+
}
|
|
457
|
+
resetRepositoryConfigPath() {
|
|
458
|
+
this._repositoryConfigPath = undefined;
|
|
459
|
+
}
|
|
460
|
+
// Temporarily expose input value. Use with caution.
|
|
461
|
+
get repositoryConfigPathInput() {
|
|
462
|
+
return this._repositoryConfigPath;
|
|
463
|
+
}
|
|
464
|
+
get alias() {
|
|
465
|
+
return this._alias;
|
|
466
|
+
}
|
|
467
|
+
set alias(value) {
|
|
468
|
+
this._alias = value;
|
|
469
|
+
}
|
|
470
|
+
resetAlias() {
|
|
471
|
+
this._alias = undefined;
|
|
472
|
+
}
|
|
473
|
+
// Temporarily expose input value. Use with caution.
|
|
474
|
+
get aliasInput() {
|
|
475
|
+
return this._alias;
|
|
476
|
+
}
|
|
477
|
+
// =========
|
|
478
|
+
// SYNTHESIS
|
|
479
|
+
// =========
|
|
480
|
+
synthesizeAttributes() {
|
|
481
|
+
return {
|
|
482
|
+
burst_limit: cdktn.numberToTerraform(this._burstLimit),
|
|
483
|
+
debug: cdktn.booleanToTerraform(this._debug),
|
|
484
|
+
experiments: helmProviderExperimentsToTerraform(this._experiments),
|
|
485
|
+
helm_driver: cdktn.stringToTerraform(this._helmDriver),
|
|
486
|
+
kubernetes: helmProviderKubernetesToTerraform(this._kubernetes),
|
|
487
|
+
plugins_path: cdktn.stringToTerraform(this._pluginsPath),
|
|
488
|
+
qps: cdktn.numberToTerraform(this._qps),
|
|
489
|
+
registries: cdktn.listMapper(helmProviderRegistriesToTerraform, false)(this._registries),
|
|
490
|
+
registry_config_path: cdktn.stringToTerraform(this._registryConfigPath),
|
|
491
|
+
repository_cache: cdktn.stringToTerraform(this._repositoryCache),
|
|
492
|
+
repository_config_path: cdktn.stringToTerraform(this._repositoryConfigPath),
|
|
493
|
+
alias: cdktn.stringToTerraform(this._alias),
|
|
494
|
+
};
|
|
495
|
+
}
|
|
496
|
+
synthesizeHclAttributes() {
|
|
497
|
+
const attrs = {
|
|
498
|
+
burst_limit: {
|
|
499
|
+
value: cdktn.numberToHclTerraform(this._burstLimit),
|
|
500
|
+
isBlock: false,
|
|
501
|
+
type: "simple",
|
|
502
|
+
storageClassType: "number",
|
|
503
|
+
},
|
|
504
|
+
debug: {
|
|
505
|
+
value: cdktn.booleanToHclTerraform(this._debug),
|
|
506
|
+
isBlock: false,
|
|
507
|
+
type: "simple",
|
|
508
|
+
storageClassType: "boolean",
|
|
509
|
+
},
|
|
510
|
+
experiments: {
|
|
511
|
+
value: helmProviderExperimentsToHclTerraform(this._experiments),
|
|
512
|
+
isBlock: true,
|
|
513
|
+
type: "struct",
|
|
514
|
+
storageClassType: "HelmProviderExperiments",
|
|
515
|
+
},
|
|
516
|
+
helm_driver: {
|
|
517
|
+
value: cdktn.stringToHclTerraform(this._helmDriver),
|
|
518
|
+
isBlock: false,
|
|
519
|
+
type: "simple",
|
|
520
|
+
storageClassType: "string",
|
|
521
|
+
},
|
|
522
|
+
kubernetes: {
|
|
523
|
+
value: helmProviderKubernetesToHclTerraform(this._kubernetes),
|
|
524
|
+
isBlock: true,
|
|
525
|
+
type: "struct",
|
|
526
|
+
storageClassType: "HelmProviderKubernetes",
|
|
527
|
+
},
|
|
528
|
+
plugins_path: {
|
|
529
|
+
value: cdktn.stringToHclTerraform(this._pluginsPath),
|
|
530
|
+
isBlock: false,
|
|
531
|
+
type: "simple",
|
|
532
|
+
storageClassType: "string",
|
|
533
|
+
},
|
|
534
|
+
qps: {
|
|
535
|
+
value: cdktn.numberToHclTerraform(this._qps),
|
|
536
|
+
isBlock: false,
|
|
537
|
+
type: "simple",
|
|
538
|
+
storageClassType: "number",
|
|
539
|
+
},
|
|
540
|
+
registries: {
|
|
541
|
+
value: cdktn.listMapperHcl(helmProviderRegistriesToHclTerraform, false)(this._registries),
|
|
542
|
+
isBlock: true,
|
|
543
|
+
type: "list",
|
|
544
|
+
storageClassType: "HelmProviderRegistriesList",
|
|
545
|
+
},
|
|
546
|
+
registry_config_path: {
|
|
547
|
+
value: cdktn.stringToHclTerraform(this._registryConfigPath),
|
|
548
|
+
isBlock: false,
|
|
549
|
+
type: "simple",
|
|
550
|
+
storageClassType: "string",
|
|
551
|
+
},
|
|
552
|
+
repository_cache: {
|
|
553
|
+
value: cdktn.stringToHclTerraform(this._repositoryCache),
|
|
554
|
+
isBlock: false,
|
|
555
|
+
type: "simple",
|
|
556
|
+
storageClassType: "string",
|
|
557
|
+
},
|
|
558
|
+
repository_config_path: {
|
|
559
|
+
value: cdktn.stringToHclTerraform(this._repositoryConfigPath),
|
|
560
|
+
isBlock: false,
|
|
561
|
+
type: "simple",
|
|
562
|
+
storageClassType: "string",
|
|
563
|
+
},
|
|
564
|
+
alias: {
|
|
565
|
+
value: cdktn.stringToHclTerraform(this._alias),
|
|
566
|
+
isBlock: false,
|
|
567
|
+
type: "simple",
|
|
568
|
+
storageClassType: "string",
|
|
569
|
+
},
|
|
570
|
+
};
|
|
571
|
+
// remove undefined attributes
|
|
572
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
exports.HelmProvider = HelmProvider;
|
|
576
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
577
|
+
HelmProvider[_a] = { fqn: "@cdktn/provider-helm.provider.HelmProvider", version: "12.2.0" };
|
|
578
|
+
// =================
|
|
579
|
+
// STATIC PROPERTIES
|
|
580
|
+
// =================
|
|
581
|
+
HelmProvider.tfResourceType = "helm";
|
|
582
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvdmlkZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQWdHQSxnRkFRQztBQUdELHNGQWdCQztBQTZCRCxzRkFXQztBQUdELDRGQWtDQztBQXFHRCw4RUF1QkM7QUFHRCxvRkEwR0M7QUF1QkQsOEVBVUM7QUFHRCxvRkE0QkM7O0FBeGVELCtCQUErQjtBQXVGL0IsU0FBZ0Isa0NBQWtDLENBQUMsTUFBb0Q7SUFDckcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUFDLE9BQU8sTUFBTSxDQUFDO0lBQUMsQ0FBQztJQUM1RixJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsb0hBQW9ILENBQUMsQ0FBQztJQUN4SSxDQUFDO0lBQ0QsT0FBTztRQUNMLFFBQVEsRUFBRSxLQUFLLENBQUMsa0JBQWtCLENBQUMsTUFBTyxDQUFDLFFBQVEsQ0FBQztLQUNyRCxDQUFBO0FBQ0gsQ0FBQztBQUdELFNBQWdCLHFDQUFxQyxDQUFDLE1BQW9EO0lBQ3hHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFBQyxPQUFPLE1BQU0sQ0FBQztJQUFDLENBQUM7SUFDNUYsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLG9IQUFvSCxDQUFDLENBQUM7SUFDeEksQ0FBQztJQUNELE1BQU0sS0FBSyxHQUFHO1FBQ1osUUFBUSxFQUFFO1lBQ1IsS0FBSyxFQUFFLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxNQUFPLENBQUMsUUFBUSxDQUFDO1lBQ3BELE9BQU8sRUFBRSxLQUFLO1lBQ2QsSUFBSSxFQUFFLFFBQVE7WUFDZCxnQkFBZ0IsRUFBRSxTQUFTO1NBQzVCO0tBQ0YsQ0FBQztJQUVGLDhCQUE4QjtJQUM5QixPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDNUgsQ0FBQztBQTZCRCxTQUFnQixxQ0FBcUMsQ0FBQyxNQUF1RDtJQUMzRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQUMsT0FBTyxNQUFNLENBQUM7SUFBQyxDQUFDO0lBQzVGLElBQUksS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxvSEFBb0gsQ0FBQyxDQUFDO0lBQ3hJLENBQUM7SUFDRCxPQUFPO1FBQ0wsV0FBVyxFQUFFLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFPLENBQUMsVUFBVSxDQUFDO1FBQ3hELElBQUksRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsQ0FBQyxNQUFPLENBQUMsSUFBSSxDQUFDO1FBQ3BFLE9BQU8sRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTyxDQUFDLE9BQU8sQ0FBQztRQUNqRCxHQUFHLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxNQUFPLENBQUMsR0FBRyxDQUFDO0tBQzVELENBQUE7QUFDSCxDQUFDO0FBR0QsU0FBZ0Isd0NBQXdDLENBQUMsTUFBdUQ7SUFDOUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUFDLE9BQU8sTUFBTSxDQUFDO0lBQUMsQ0FBQztJQUM1RixJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsb0hBQW9ILENBQUMsQ0FBQztJQUN4SSxDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUc7UUFDWixXQUFXLEVBQUU7WUFDWCxLQUFLLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixDQUFDLE1BQU8sQ0FBQyxVQUFVLENBQUM7WUFDckQsT0FBTyxFQUFFLEtBQUs7WUFDZCxJQUFJLEVBQUUsUUFBUTtZQUNkLGdCQUFnQixFQUFFLFFBQVE7U0FDM0I7UUFDRCxJQUFJLEVBQUU7WUFDSixLQUFLLEVBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLENBQUMsTUFBTyxDQUFDLElBQUksQ0FBQztZQUMzRSxPQUFPLEVBQUUsS0FBSztZQUNkLElBQUksRUFBRSxNQUFNO1lBQ1osZ0JBQWdCLEVBQUUsWUFBWTtTQUMvQjtRQUNELE9BQU8sRUFBRTtZQUNQLEtBQUssRUFBRSxLQUFLLENBQUMsb0JBQW9CLENBQUMsTUFBTyxDQUFDLE9BQU8sQ0FBQztZQUNsRCxPQUFPLEVBQUUsS0FBSztZQUNkLElBQUksRUFBRSxRQUFRO1lBQ2QsZ0JBQWdCLEVBQUUsUUFBUTtTQUMzQjtRQUNELEdBQUcsRUFBRTtZQUNILEtBQUssRUFBRSxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLE1BQU8sQ0FBQyxHQUFHLENBQUM7WUFDbkUsT0FBTyxFQUFFLEtBQUs7WUFDZCxJQUFJLEVBQUUsS0FBSztZQUNYLGdCQUFnQixFQUFFLFdBQVc7U0FDOUI7S0FDRixDQUFDO0lBRUYsOEJBQThCO0lBQzlCLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztBQUM1SCxDQUFDO0FBcUdELFNBQWdCLGlDQUFpQyxDQUFDLE1BQW1EO0lBQ25HLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFBQyxPQUFPLE1BQU0sQ0FBQztJQUFDLENBQUM7SUFDNUYsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLG9IQUFvSCxDQUFDLENBQUM7SUFDeEksQ0FBQztJQUNELE9BQU87UUFDTCxrQkFBa0IsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTyxDQUFDLGlCQUFpQixDQUFDO1FBQ3RFLFVBQVUsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTyxDQUFDLFNBQVMsQ0FBQztRQUN0RCxzQkFBc0IsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTyxDQUFDLG9CQUFvQixDQUFDO1FBQzdFLGNBQWMsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTyxDQUFDLGFBQWEsQ0FBQztRQUM5RCx3QkFBd0IsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTyxDQUFDLHFCQUFxQixDQUFDO1FBQ2hGLHNCQUFzQixFQUFFLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFPLENBQUMsb0JBQW9CLENBQUM7UUFDN0UsV0FBVyxFQUFFLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFPLENBQUMsVUFBVSxDQUFDO1FBQ3hELFlBQVksRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsQ0FBQyxNQUFPLENBQUMsV0FBVyxDQUFDO1FBQ25GLElBQUksRUFBRSxxQ0FBcUMsQ0FBQyxNQUFPLENBQUMsSUFBSSxDQUFDO1FBQ3pELElBQUksRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTyxDQUFDLElBQUksQ0FBQztRQUMzQyxRQUFRLEVBQUUsS0FBSyxDQUFDLGtCQUFrQixDQUFDLE1BQU8sQ0FBQyxRQUFRLENBQUM7UUFDcEQsUUFBUSxFQUFFLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFPLENBQUMsUUFBUSxDQUFDO1FBQ25ELFNBQVMsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTyxDQUFDLFFBQVEsQ0FBQztRQUNwRCxlQUFlLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixDQUFDLE1BQU8sQ0FBQyxhQUFhLENBQUM7UUFDL0QsS0FBSyxFQUFFLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFPLENBQUMsS0FBSyxDQUFDO1FBQzdDLFFBQVEsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTyxDQUFDLFFBQVEsQ0FBQztLQUNwRCxDQUFBO0FBQ0gsQ0FBQztBQUdELFNBQWdCLG9DQUFvQyxDQUFDLE1BQW1EO0lBQ3RHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFBQyxPQUFPLE1BQU0sQ0FBQztJQUFDLENBQUM7SUFDNUYsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLG9IQUFvSCxDQUFDLENBQUM7SUFDeEksQ0FBQztJQUNELE1BQU0sS0FBSyxHQUFHO1FBQ1osa0JBQWtCLEVBQUU7WUFDbEIsS0FBSyxFQUFFLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxNQUFPLENBQUMsaUJBQWlCLENBQUM7WUFDNUQsT0FBTyxFQUFFLEtBQUs7WUFDZCxJQUFJLEVBQUUsUUFBUTtZQUNkLGdCQUFnQixFQUFFLFFBQVE7U0FDM0I7UUFDRCxVQUFVLEVBQUU7WUFDVixLQUFLLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixDQUFDLE1BQU8sQ0FBQyxTQUFTLENBQUM7WUFDcEQsT0FBTyxFQUFFLEtBQUs7WUFDZCxJQUFJLEVBQUUsUUFBUTtZQUNkLGdCQUFnQixFQUFFLFFBQVE7U0FDM0I7UUFDRCxzQkFBc0IsRUFBRTtZQUN0QixLQUFLLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixDQUFDLE1BQU8sQ0FBQyxvQkFBb0IsQ0FBQztZQUMvRCxPQUFPLEVBQUUsS0FBSztZQUNkLElBQUksRUFBRSxRQUFRO1lBQ2QsZ0JBQWdCLEVBQUUsUUFBUTtTQUMzQjtRQUNELGNBQWMsRUFBRTtZQUNkLEtBQUssRUFBRSxLQUFLLENBQUMsb0JBQW9CLENBQUMsTUFBTyxDQUFDLGFBQWEsQ0FBQztZQUN4RCxPQUFPLEVBQUUsS0FBSztZQUNkLElBQUksRUFBRSxRQUFRO1lBQ2QsZ0JBQWdCLEVBQUUsUUFBUTtTQUMzQjtRQUNELHdCQUF3QixFQUFFO1lBQ3hCLEtBQUssRUFBRSxLQUFLLENBQUMsb0JBQW9CLENBQUMsTUFBTyxDQUFDLHFCQUFxQixDQUFDO1lBQ2hFLE9BQU8sRUFBRSxLQUFLO1lBQ2QsSUFBSSxFQUFFLFFBQVE7WUFDZCxnQkFBZ0IsRUFBRSxRQUFRO1NBQzNCO1FBQ0Qsc0JBQXNCLEVBQUU7WUFDdEIsS0FBSyxFQUFFLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxNQUFPLENBQUMsb0JBQW9CLENBQUM7WUFDL0QsT0FBTyxFQUFFLEtBQUs7WUFDZCxJQUFJLEVBQUUsUUFBUTtZQUNkLGdCQUFnQixFQUFFLFFBQVE7U0FDM0I7UUFDRCxXQUFXLEVBQUU7WUFDWCxLQUFLLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixDQUFDLE1BQU8sQ0FBQyxVQUFVLENBQUM7WUFDckQsT0FBTyxFQUFFLEtBQUs7WUFDZCxJQUFJLEVBQUUsUUFBUTtZQUNkLGdCQUFnQixFQUFFLFFBQVE7U0FDM0I7UUFDRCxZQUFZLEVBQUU7WUFDWixLQUFLLEVBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLENBQUMsTUFBTyxDQUFDLFdBQVcsQ0FBQztZQUNsRixPQUFPLEVBQUUsS0FBSztZQUNkLElBQUksRUFBRSxNQUFNO1lBQ1osZ0JBQWdCLEVBQUUsWUFBWTtTQUMvQjtRQUNELElBQUksRUFBRTtZQUNKLEtBQUssRUFBRSx3Q0FBd0MsQ0FBQyxNQUFPLENBQUMsSUFBSSxDQUFDO1lBQzdELE9BQU8sRUFBRSxJQUFJO1lBQ2IsSUFBSSxFQUFFLFFBQVE7WUFDZCxnQkFBZ0IsRUFBRSw0QkFBNEI7U0FDL0M7UUFDRCxJQUFJLEVBQUU7WUFDSixLQUFLLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixDQUFDLE1BQU8sQ0FBQyxJQUFJLENBQUM7WUFDL0MsT0FBTyxFQUFFLEtBQUs7WUFDZCxJQUFJLEVBQUUsUUFBUTtZQUNkLGdCQUFnQixFQUFFLFFBQVE7U0FDM0I7UUFDRCxRQUFRLEVBQUU7WUFDUixLQUFLLEVBQUUsS0FBSyxDQUFDLHFCQUFxQixDQUFDLE1BQU8sQ0FBQyxRQUFRLENBQUM7WUFDcEQsT0FBTyxFQUFFLEtBQUs7WUFDZCxJQUFJLEVBQUUsUUFBUTtZQUNkLGdCQUFnQixFQUFFLFNBQVM7U0FDNUI7UUFDRCxRQUFRLEVBQUU7WUFDUixLQUFLLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixDQUFDLE1BQU8sQ0FBQyxRQUFRLENBQUM7WUFDbkQsT0FBTyxFQUFFLEtBQUs7WUFDZCxJQUFJLEVBQUUsUUFBUTtZQUNkLGdCQUFnQixFQUFFLFFBQVE7U0FDM0I7UUFDRCxTQUFTLEVBQUU7WUFDVCxLQUFLLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixDQUFDLE1BQU8sQ0FBQyxRQUFRLENBQUM7WUFDbkQsT0FBTyxFQUFFLEtBQUs7WUFDZCxJQUFJLEVBQUUsUUFBUTtZQUNkLGdCQUFnQixFQUFFLFFBQVE7U0FDM0I7UUFDRCxlQUFlLEVBQUU7WUFDZixLQUFLLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixDQUFDLE1BQU8sQ0FBQyxhQUFhLENBQUM7WUFDeEQsT0FBTyxFQUFFLEtBQUs7WUFDZCxJQUFJLEVBQUUsUUFBUTtZQUNkLGdCQUFnQixFQUFFLFFBQVE7U0FDM0I7UUFDRCxLQUFLLEVBQUU7WUFDTCxLQUFLLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixDQUFDLE1BQU8sQ0FBQyxLQUFLLENBQUM7WUFDaEQsT0FBTyxFQUFFLEtBQUs7WUFDZCxJQUFJLEVBQUUsUUFBUTtZQUNkLGdCQUFnQixFQUFFLFFBQVE7U0FDM0I7UUFDRCxRQUFRLEVBQUU7WUFDUixLQUFLLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixDQUFDLE1BQU8sQ0FBQyxRQUFRLENBQUM7WUFDbkQsT0FBTyxFQUFFLEtBQUs7WUFDZCxJQUFJLEVBQUUsUUFBUTtZQUNkLGdCQUFnQixFQUFFLFFBQVE7U0FDM0I7S0FDRixDQUFDO0lBRUYsOEJBQThCO0lBQzlCLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztBQUM1SCxDQUFDO0FBdUJELFNBQWdCLGlDQUFpQyxDQUFDLE1BQW1EO0lBQ25HLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFBQyxPQUFPLE1BQU0sQ0FBQztJQUFDLENBQUM7SUFDNUYsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLG9IQUFvSCxDQUFDLENBQUM7SUFDeEksQ0FBQztJQUNELE9BQU87UUFDTCxRQUFRLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixDQUFDLE1BQU8sQ0FBQyxRQUFRLENBQUM7UUFDbkQsR0FBRyxFQUFFLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFPLENBQUMsR0FBRyxDQUFDO1FBQ3pDLFFBQVEsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTyxDQUFDLFFBQVEsQ0FBQztLQUNwRCxDQUFBO0FBQ0gsQ0FBQztBQUdELFNBQWdCLG9DQUFvQyxDQUFDLE1BQW1EO0lBQ3RHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFBQyxPQUFPLE1BQU0sQ0FBQztJQUFDLENBQUM7SUFDNUYsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLG9IQUFvSCxDQUFDLENBQUM7SUFDeEksQ0FBQztJQUNELE1BQU0sS0FBSyxHQUFHO1FBQ1osUUFBUSxFQUFFO1lBQ1IsS0FBSyxFQUFFLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxNQUFPLENBQUMsUUFBUSxDQUFDO1lBQ25ELE9BQU8sRUFBRSxLQUFLO1lBQ2QsSUFBSSxFQUFFLFFBQVE7WUFDZCxnQkFBZ0IsRUFBRSxRQUFRO1NBQzNCO1FBQ0QsR0FBRyxFQUFFO1lBQ0gsS0FBSyxFQUFFLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxNQUFPLENBQUMsR0FBRyxDQUFDO1lBQzlDLE9BQU8sRUFBRSxLQUFLO1lBQ2QsSUFBSSxFQUFFLFFBQVE7WUFDZCxnQkFBZ0IsRUFBRSxRQUFRO1NBQzNCO1FBQ0QsUUFBUSxFQUFFO1lBQ1IsS0FBSyxFQUFFLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxNQUFPLENBQUMsUUFBUSxDQUFDO1lBQ25ELE9BQU8sRUFBRSxLQUFLO1lBQ2QsSUFBSSxFQUFFLFFBQVE7WUFDZCxnQkFBZ0IsRUFBRSxRQUFRO1NBQzNCO0tBQ0YsQ0FBQztJQUVGLDhCQUE4QjtJQUM5QixPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDNUgsQ0FBQztBQUdEOztFQUVFO0FBQ0YsTUFBYSxZQUFhLFNBQVEsS0FBSyxDQUFDLGlCQUFpQjtJQU92RCxpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLGlCQUFpQjtJQUNqQjs7Ozs7O01BTUU7SUFDSyxNQUFNLENBQUMsdUJBQXVCLENBQUMsS0FBZ0IsRUFBRSxVQUFrQixFQUFFLFlBQW9CLEVBQUUsUUFBa0M7UUFDOUgsT0FBTyxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUM5SCxDQUFDO0lBRUwsY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBRWQ7Ozs7OztNQU1FO0lBQ0YsWUFBbUIsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsU0FBNkIsRUFBRTtRQUM5RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLHFCQUFxQixFQUFFLE1BQU07WUFDN0IsMEJBQTBCLEVBQUU7Z0JBQzFCLFlBQVksRUFBRSxNQUFNO2dCQUNwQixlQUFlLEVBQUUsT0FBTztnQkFDeEIseUJBQXlCLEVBQUUsUUFBUTthQUNwQztZQUNELHVCQUF1QixFQUFFLE1BQU07U0FDaEMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDdkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUNyQyxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDdkMsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUNyQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDO1FBQ3JELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDO1FBQy9DLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUM7UUFDekQsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQzdCLENBQUM7SUFRRCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFDRCxJQUFXLFVBQVUsQ0FBQyxLQUF5QjtRQUM3QyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBQ00sZUFBZTtRQUNwQixJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztJQUMvQixDQUFDO0lBQ0Qsb0RBQW9EO0lBQ3BELElBQVcsZUFBZTtRQUN4QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUlELElBQVcsS0FBSztRQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBQ0QsSUFBVyxLQUFLLENBQUMsS0FBOEM7UUFDN0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUNNLFVBQVU7UUFDZixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBQ0Qsb0RBQW9EO0lBQ3BELElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUlELElBQVcsV0FBVztRQUNwQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUNELElBQVcsV0FBVyxDQUFDLEtBQTBDO1FBQy9ELElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFDTSxnQkFBZ0I7UUFDckIsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7SUFDaEMsQ0FBQztJQUNELG9EQUFvRDtJQUNwRCxJQUFXLGdCQUFnQjtRQUN6QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUlELElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUNELElBQVcsVUFBVSxDQUFDLEtBQXlCO1FBQzdDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFDTSxlQUFlO1FBQ3BCLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO0lBQy9CLENBQUM7SUFDRCxvREFBb0Q7SUFDcEQsSUFBVyxlQUFlO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBSUQsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBQ0QsSUFBVyxVQUFVLENBQUMsS0FBeUM7UUFDN0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUNNLGVBQWU7UUFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7SUFDL0IsQ0FBQztJQUNELG9EQUFvRDtJQUNwRCxJQUFXLGVBQWU7UUFDeEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFJRCxJQUFXLFdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFDRCxJQUFXLFdBQVcsQ0FBQyxLQUF5QjtRQUM5QyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBQ00sZ0JBQWdCO1FBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO0lBQ2hDLENBQUM7SUFDRCxvREFBb0Q7SUFDcEQsSUFBVyxnQkFBZ0I7UUFDekIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFJRCxJQUFXLEdBQUc7UUFDWixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUNELElBQVcsR0FBRyxDQUFDLEtBQXlCO1FBQ3RDLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFDTSxRQUFRO1FBQ2IsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUNELG9EQUFvRDtJQUNwRCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFJRCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFDRCxJQUFXLFVBQVUsQ0FBQyxLQUErRDtRQUNuRixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBQ00sZUFBZTtRQUNwQixJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztJQUMvQixDQUFDO0lBQ0Qsb0RBQW9EO0lBQ3BELElBQVcsZUFBZTtRQUN4QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUlELElBQVcsa0JBQWtCO1FBQzNCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ2xDLENBQUM7SUFDRCxJQUFXLGtCQUFrQixDQUFDLEtBQXlCO1FBQ3JELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7SUFDbkMsQ0FBQztJQUNNLHVCQUF1QjtRQUM1QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsU0FBUyxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxvREFBb0Q7SUFDcEQsSUFBVyx1QkFBdUI7UUFDaEMsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUM7SUFDbEMsQ0FBQztJQUlELElBQVcsZUFBZTtRQUN4QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDO0lBQ0QsSUFBVyxlQUFlLENBQUMsS0FBeUI7UUFDbEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztJQUNoQyxDQUFDO0lBQ00sb0JBQW9CO1FBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUM7SUFDcEMsQ0FBQztJQUNELG9EQUFvRDtJQUNwRCxJQUFXLG9CQUFvQjtRQUM3QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDO0lBSUQsSUFBVyxvQkFBb0I7UUFDN0IsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUM7SUFDcEMsQ0FBQztJQUNELElBQVcsb0JBQW9CLENBQUMsS0FBeUI7UUFDdkQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQztJQUNyQyxDQUFDO0lBQ00seUJBQXlCO1FBQzlCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxTQUFTLENBQUM7SUFDekMsQ0FBQztJQUNELG9EQUFvRDtJQUNwRCxJQUFXLHlCQUF5QjtRQUNsQyxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztJQUNwQyxDQUFDO0lBSUQsSUFBVyxLQUFLO1FBQ2QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFDRCxJQUFXLEtBQUssQ0FBQyxLQUF5QjtRQUN4QyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBQ00sVUFBVTtRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFDRCxvREFBb0Q7SUFDcEQsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQsWUFBWTtJQUNaLFlBQVk7SUFDWixZQUFZO0lBRUYsb0JBQW9CO1FBQzVCLE9BQU87WUFDTCxXQUFXLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDdEQsS0FBSyxFQUFFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzVDLFdBQVcsRUFBRSxrQ0FBa0MsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO1lBQ2xFLFdBQVcsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUN0RCxVQUFVLEVBQUUsaUNBQWlDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUMvRCxZQUFZLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDeEQsR0FBRyxFQUFFLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ3ZDLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLGlDQUFpQyxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDeEYsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztZQUN2RSxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1lBQ2hFLHNCQUFzQixFQUFFLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUM7WUFDM0UsS0FBSyxFQUFFLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQzVDLENBQUM7SUFDSixDQUFDO0lBRVMsdUJBQXVCO1FBQy9CLE1BQU0sS0FBSyxHQUFHO1lBQ1osV0FBVyxFQUFFO2dCQUNYLEtBQUssRUFBRSxLQUFLLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztnQkFDbkQsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsZ0JBQWdCLEVBQUUsUUFBUTthQUMzQjtZQUNELEtBQUssRUFBRTtnQkFDTCxLQUFLLEVBQUUsS0FBSyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQy9DLE9BQU8sRUFBRSxLQUFLO2dCQUNkLElBQUksRUFBRSxRQUFRO2dCQUNkLGdCQUFnQixFQUFFLFNBQVM7YUFDNUI7WUFDRCxXQUFXLEVBQUU7Z0JBQ1gsS0FBSyxFQUFFLHFDQUFxQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7Z0JBQy9ELE9BQU8sRUFBRSxJQUFJO2dCQUNiLElBQUksRUFBRSxRQUFRO2dCQUNkLGdCQUFnQixFQUFFLHlCQUF5QjthQUM1QztZQUNELFdBQVcsRUFBRTtnQkFDWCxLQUFLLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7Z0JBQ25ELE9BQU8sRUFBRSxLQUFLO2dCQUNkLElBQUksRUFBRSxRQUFRO2dCQUNkLGdCQUFnQixFQUFFLFFBQVE7YUFDM0I7WUFDRCxVQUFVLEVBQUU7Z0JBQ1YsS0FBSyxFQUFFLG9DQUFvQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7Z0JBQzdELE9BQU8sRUFBRSxJQUFJO2dCQUNiLElBQUksRUFBRSxRQUFRO2dCQUNkLGdCQUFnQixFQUFFLHdCQUF3QjthQUMzQztZQUNELFlBQVksRUFBRTtnQkFDWixLQUFLLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7Z0JBQ3BELE9BQU8sRUFBRSxLQUFLO2dCQUNkLElBQUksRUFBRSxRQUFRO2dCQUNkLGdCQUFnQixFQUFFLFFBQVE7YUFDM0I7WUFDRCxHQUFHLEVBQUU7Z0JBQ0gsS0FBSyxFQUFFLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUM1QyxPQUFPLEVBQUUsS0FBSztnQkFDZCxJQUFJLEVBQUUsUUFBUTtnQkFDZCxnQkFBZ0IsRUFBRSxRQUFRO2FBQzNCO1lBQ0QsVUFBVSxFQUFFO2dCQUNWLEtBQUssRUFBRSxLQUFLLENBQUMsYUFBYSxDQUFDLG9DQUFvQyxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7Z0JBQ3pGLE9BQU8sRUFBRSxJQUFJO2dCQUNiLElBQUksRUFBRSxNQUFNO2dCQUNaLGdCQUFnQixFQUFFLDRCQUE0QjthQUMvQztZQUNELG9CQUFvQixFQUFFO2dCQUNwQixLQUFLLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztnQkFDM0QsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsZ0JBQWdCLEVBQUUsUUFBUTthQUMzQjtZQUNELGdCQUFnQixFQUFFO2dCQUNoQixLQUFLLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDeEQsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsZ0JBQWdCLEVBQUUsUUFBUTthQUMzQjtZQUNELHNCQUFzQixFQUFFO2dCQUN0QixLQUFLLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztnQkFDN0QsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsZ0JBQWdCLEVBQUUsUUFBUTthQUMzQjtZQUNELEtBQUssRUFBRTtnQkFDTCxLQUFLLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQzlDLE9BQU8sRUFBRSxLQUFLO2dCQUNkLElBQUksRUFBRSxRQUFRO2dCQUNkLGdCQUFnQixFQUFFLFFBQVE7YUFDM0I7U0FDRixDQUFDO1FBRUYsOEJBQThCO1FBQzlCLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFFLENBQUMsQ0FBQTtJQUM1SCxDQUFDOztBQS9WSCxvQ0FnV0M7OztBQTlWQyxvQkFBb0I7QUFDcEIsb0JBQW9CO0FBQ3BCLG9CQUFvQjtBQUNHLDJCQUFjLEdBQUcsTUFBTSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMjEsIDIwMjZcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG4gKi9cblxuLy8gaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9oZWxtLzMuMS4xL2RvY3Ncbi8vIGdlbmVyYXRlZCBmcm9tIHRlcnJhZm9ybSByZXNvdXJjZSBzY2hlbWFcblxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyBjZGt0biBmcm9tICdjZGt0bic7XG5cbi8vIENvbmZpZ3VyYXRpb25cblxuZXhwb3J0IGludGVyZmFjZSBIZWxtUHJvdmlkZXJDb25maWcge1xuICAvKipcbiAgKiBIZWxtIGJ1cnN0IGxpbWl0LiBJbmNyZWFzZSB0aGlzIGlmIHlvdSBoYXZlIGEgY2x1c3RlciB3aXRoIG1hbnkgQ1JEc1xuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2hlbG0vMy4xLjEvZG9jcyNidXJzdF9saW1pdCBIZWxtUHJvdmlkZXIjYnVyc3RfbGltaXR9XG4gICovXG4gIHJlYWRvbmx5IGJ1cnN0TGltaXQ/OiBudW1iZXI7XG4gIC8qKlxuICAqIERlYnVnIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCBIZWxtIGlzIHJ1bm5pbmcgaW4gRGVidWcgbW9kZS5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9oZWxtLzMuMS4xL2RvY3MjZGVidWcgSGVsbVByb3ZpZGVyI2RlYnVnfVxuICAqL1xuICByZWFkb25seSBkZWJ1Zz86IGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZTtcbiAgLyoqXG4gICogRW5hYmxlIGFuZCBkaXNhYmxlIGV4cGVyaW1lbnRhbCBmZWF0dXJlcy5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9oZWxtLzMuMS4xL2RvY3MjZXhwZXJpbWVudHMgSGVsbVByb3ZpZGVyI2V4cGVyaW1lbnRzfVxuICAqL1xuICByZWFkb25seSBleHBlcmltZW50cz86IEhlbG1Qcm92aWRlckV4cGVyaW1lbnRzO1xuICAvKipcbiAgKiBUaGUgYmFja2VuZCBzdG9yYWdlIGRyaXZlci4gVmFsdWVzIGFyZTogY29uZmlnbWFwLCBzZWNyZXQsIG1lbW9yeSwgc3FsXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzI2hlbG1fZHJpdmVyIEhlbG1Qcm92aWRlciNoZWxtX2RyaXZlcn1cbiAgKi9cbiAgcmVhZG9ubHkgaGVsbURyaXZlcj86IHN0cmluZztcbiAgLyoqXG4gICogS3ViZXJuZXRlcyBDb25maWd1cmF0aW9uXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzI2t1YmVybmV0ZXMgSGVsbVByb3ZpZGVyI2t1YmVybmV0ZXN9XG4gICovXG4gIHJlYWRvbmx5IGt1YmVybmV0ZXM/OiBIZWxtUHJvdmlkZXJLdWJlcm5ldGVzO1xuICAvKipcbiAgKiBUaGUgcGF0aCB0byB0aGUgaGVsbSBwbHVnaW5zIGRpcmVjdG9yeVxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2hlbG0vMy4xLjEvZG9jcyNwbHVnaW5zX3BhdGggSGVsbVByb3ZpZGVyI3BsdWdpbnNfcGF0aH1cbiAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luc1BhdGg/OiBzdHJpbmc7XG4gIC8qKlxuICAqIFF1ZXJpZXMgcGVyIHNlY29uZCB1c2VkIHdoZW4gY29tbXVuaWNhdGluZyB3aXRoIHRoZSBLdWJlcm5ldGVzIEFQSS4gQ2FuIGJlIHVzZWQgdG8gYXZvaWQgdGhyb3R0bGluZy5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9oZWxtLzMuMS4xL2RvY3MjcXBzIEhlbG1Qcm92aWRlciNxcHN9XG4gICovXG4gIHJlYWRvbmx5IHFwcz86IG51bWJlcjtcbiAgLyoqXG4gICogUmVnaXN0cnlDbGllbnQgY29uZmlndXJhdGlvbi5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9oZWxtLzMuMS4xL2RvY3MjcmVnaXN0cmllcyBIZWxtUHJvdmlkZXIjcmVnaXN0cmllc31cbiAgKi9cbiAgcmVhZG9ubHkgcmVnaXN0cmllcz86IEhlbG1Qcm92aWRlclJlZ2lzdHJpZXNbXSB8IGNka3RuLklSZXNvbHZhYmxlO1xuICAvKipcbiAgKiBUaGUgcGF0aCB0byB0aGUgcmVnaXN0cnkgY29uZmlnIGZpbGVcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9oZWxtLzMuMS4xL2RvY3MjcmVnaXN0cnlfY29uZmlnX3BhdGggSGVsbVByb3ZpZGVyI3JlZ2lzdHJ5X2NvbmZpZ19wYXRofVxuICAqL1xuICByZWFkb25seSByZWdpc3RyeUNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gIC8qKlxuICAqIFRoZSBwYXRoIHRvIHRoZSBmaWxlIGNvbnRhaW5pbmcgY2FjaGVkIHJlcG9zaXRvcnkgaW5kZXhlc1xuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2hlbG0vMy4xLjEvZG9jcyNyZXBvc2l0b3J5X2NhY2hlIEhlbG1Qcm92aWRlciNyZXBvc2l0b3J5X2NhY2hlfVxuICAqL1xuICByZWFkb25seSByZXBvc2l0b3J5Q2FjaGU/OiBzdHJpbmc7XG4gIC8qKlxuICAqIFRoZSBwYXRoIHRvIHRoZSBmaWxlIGNvbnRhaW5pbmcgcmVwb3NpdG9yeSBuYW1lcyBhbmQgVVJMc1xuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2hlbG0vMy4xLjEvZG9jcyNyZXBvc2l0b3J5X2NvbmZpZ19wYXRoIEhlbG1Qcm92aWRlciNyZXBvc2l0b3J5X2NvbmZpZ19wYXRofVxuICAqL1xuICByZWFkb25seSByZXBvc2l0b3J5Q29uZmlnUGF0aD86IHN0cmluZztcbiAgLyoqXG4gICogQWxpYXMgbmFtZVxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2hlbG0vMy4xLjEvZG9jcyNhbGlhcyBIZWxtUHJvdmlkZXIjYWxpYXN9XG4gICovXG4gIHJlYWRvbmx5IGFsaWFzPzogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBIZWxtUHJvdmlkZXJFeHBlcmltZW50cyB7XG4gIC8qKlxuICAqIEVuYWJsZSBmdWxsIGRpZmYgYnkgc3RvcmluZyB0aGUgcmVuZGVyZWQgbWFuaWZlc3QgaW4gdGhlIHN0YXRlLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2hlbG0vMy4xLjEvZG9jcyNtYW5pZmVzdCBIZWxtUHJvdmlkZXIjbWFuaWZlc3R9XG4gICovXG4gIHJlYWRvbmx5IG1hbmlmZXN0PzogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGVsbVByb3ZpZGVyRXhwZXJpbWVudHNUb1RlcnJhZm9ybShzdHJ1Y3Q/OiBIZWxtUHJvdmlkZXJFeHBlcmltZW50cyB8IGNka3RuLklSZXNvbHZhYmxlKTogYW55IHtcbiAgaWYgKCFjZGt0bi5jYW5JbnNwZWN0KHN0cnVjdCkgfHwgY2RrdG4uVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZShzdHJ1Y3QpKSB7IHJldHVybiBzdHJ1Y3Q7IH1cbiAgaWYgKGNka3RuLmlzQ29tcGxleEVsZW1lbnQoc3RydWN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkEgY29tcGxleCBlbGVtZW50IHdhcyB1c2VkIGFzIGNvbmZpZ3VyYXRpb24sIHRoaXMgaXMgbm90IHN1cHBvcnRlZDogaHR0cHM6Ly9jZGsudGYvY29tcGxleC1vYmplY3QtYXMtY29uZmlndXJhdGlvblwiKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG1hbmlmZXN0OiBjZGt0bi5ib29sZWFuVG9UZXJyYWZvcm0oc3RydWN0IS5tYW5pZmVzdCksXG4gIH1cbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gaGVsbVByb3ZpZGVyRXhwZXJpbWVudHNUb0hjbFRlcnJhZm9ybShzdHJ1Y3Q/OiBIZWxtUHJvdmlkZXJFeHBlcmltZW50cyB8IGNka3RuLklSZXNvbHZhYmxlKTogYW55IHtcbiAgaWYgKCFjZGt0bi5jYW5JbnNwZWN0KHN0cnVjdCkgfHwgY2RrdG4uVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZShzdHJ1Y3QpKSB7IHJldHVybiBzdHJ1Y3Q7IH1cbiAgaWYgKGNka3RuLmlzQ29tcGxleEVsZW1lbnQoc3RydWN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkEgY29tcGxleCBlbGVtZW50IHdhcyB1c2VkIGFzIGNvbmZpZ3VyYXRpb24sIHRoaXMgaXMgbm90IHN1cHBvcnRlZDogaHR0cHM6Ly9jZGsudGYvY29tcGxleC1vYmplY3QtYXMtY29uZmlndXJhdGlvblwiKTtcbiAgfVxuICBjb25zdCBhdHRycyA9IHtcbiAgICBtYW5pZmVzdDoge1xuICAgICAgdmFsdWU6IGNka3RuLmJvb2xlYW5Ub0hjbFRlcnJhZm9ybShzdHJ1Y3QhLm1hbmlmZXN0KSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiYm9vbGVhblwiLFxuICAgIH0sXG4gIH07XG5cbiAgLy8gcmVtb3ZlIHVuZGVmaW5lZCBhdHRyaWJ1dGVzXG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoYXR0cnMpLmZpbHRlcigoW18sIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS52YWx1ZSAhPT0gdW5kZWZpbmVkKSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGVsbVByb3ZpZGVyS3ViZXJuZXRlc0V4ZWMge1xuICAvKipcbiAgKiBBUEkgdmVyc2lvbiBmb3IgdGhlIGV4ZWMgcGx1Z2luLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2hlbG0vMy4xLjEvZG9jcyNhcGlfdmVyc2lvbiBIZWxtUHJvdmlkZXIjYXBpX3ZlcnNpb259XG4gICovXG4gIHJlYWRvbmx5IGFwaVZlcnNpb246IHN0cmluZztcbiAgLyoqXG4gICogQXJndW1lbnRzIGZvciB0aGUgZXhlYyBwbHVnaW5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9oZWxtLzMuMS4xL2RvY3MjYXJncyBIZWxtUHJvdmlkZXIjYXJnc31cbiAgKi9cbiAgcmVhZG9ubHkgYXJncz86IHN0cmluZ1tdO1xuICAvKipcbiAgKiBDb21tYW5kIHRvIHJ1biBmb3IgS3ViZXJuZXRlcyBleGVjIHBsdWdpblxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2hlbG0vMy4xLjEvZG9jcyNjb21tYW5kIEhlbG1Qcm92aWRlciNjb21tYW5kfVxuICAqL1xuICByZWFkb25seSBjb21tYW5kOiBzdHJpbmc7XG4gIC8qKlxuICAqIEVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIGV4ZWMgcGx1Z2luXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzI2VudiBIZWxtUHJvdmlkZXIjZW52fVxuICAqL1xuICByZWFkb25seSBlbnY/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGVsbVByb3ZpZGVyS3ViZXJuZXRlc0V4ZWNUb1RlcnJhZm9ybShzdHJ1Y3Q/OiBIZWxtUHJvdmlkZXJLdWJlcm5ldGVzRXhlYyB8IGNka3RuLklSZXNvbHZhYmxlKTogYW55IHtcbiAgaWYgKCFjZGt0bi5jYW5JbnNwZWN0KHN0cnVjdCkgfHwgY2RrdG4uVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZShzdHJ1Y3QpKSB7IHJldHVybiBzdHJ1Y3Q7IH1cbiAgaWYgKGNka3RuLmlzQ29tcGxleEVsZW1lbnQoc3RydWN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkEgY29tcGxleCBlbGVtZW50IHdhcyB1c2VkIGFzIGNvbmZpZ3VyYXRpb24sIHRoaXMgaXMgbm90IHN1cHBvcnRlZDogaHR0cHM6Ly9jZGsudGYvY29tcGxleC1vYmplY3QtYXMtY29uZmlndXJhdGlvblwiKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGFwaV92ZXJzaW9uOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLmFwaVZlcnNpb24pLFxuICAgIGFyZ3M6IGNka3RuLmxpc3RNYXBwZXIoY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0sIGZhbHNlKShzdHJ1Y3QhLmFyZ3MpLFxuICAgIGNvbW1hbmQ6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHN0cnVjdCEuY29tbWFuZCksXG4gICAgZW52OiBjZGt0bi5oYXNoTWFwcGVyKGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKShzdHJ1Y3QhLmVudiksXG4gIH1cbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gaGVsbVByb3ZpZGVyS3ViZXJuZXRlc0V4ZWNUb0hjbFRlcnJhZm9ybShzdHJ1Y3Q/OiBIZWxtUHJvdmlkZXJLdWJlcm5ldGVzRXhlYyB8IGNka3RuLklSZXNvbHZhYmxlKTogYW55IHtcbiAgaWYgKCFjZGt0bi5jYW5JbnNwZWN0KHN0cnVjdCkgfHwgY2RrdG4uVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZShzdHJ1Y3QpKSB7IHJldHVybiBzdHJ1Y3Q7IH1cbiAgaWYgKGNka3RuLmlzQ29tcGxleEVsZW1lbnQoc3RydWN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkEgY29tcGxleCBlbGVtZW50IHdhcyB1c2VkIGFzIGNvbmZpZ3VyYXRpb24sIHRoaXMgaXMgbm90IHN1cHBvcnRlZDogaHR0cHM6Ly9jZGsudGYvY29tcGxleC1vYmplY3QtYXMtY29uZmlndXJhdGlvblwiKTtcbiAgfVxuICBjb25zdCBhdHRycyA9IHtcbiAgICBhcGlfdmVyc2lvbjoge1xuICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEuYXBpVmVyc2lvbiksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gICAgYXJnczoge1xuICAgICAgdmFsdWU6IGNka3RuLmxpc3RNYXBwZXJIY2woY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0sIGZhbHNlKShzdHJ1Y3QhLmFyZ3MpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcImxpc3RcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nTGlzdFwiLFxuICAgIH0sXG4gICAgY29tbWFuZDoge1xuICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEuY29tbWFuZCksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gICAgZW52OiB7XG4gICAgICB2YWx1ZTogY2RrdG4uaGFzaE1hcHBlckhjbChjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybSkoc3RydWN0IS5lbnYpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcIm1hcFwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdNYXBcIixcbiAgICB9LFxuICB9O1xuXG4gIC8vIHJlbW92ZSB1bmRlZmluZWQgYXR0cmlidXRlc1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGF0dHJzKS5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUudmFsdWUgIT09IHVuZGVmaW5lZCkpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhlbG1Qcm92aWRlckt1YmVybmV0ZXMge1xuICAvKipcbiAgKiBQRU0tZW5jb2RlZCBjbGllbnQgY2VydGlmaWNhdGUgZm9yIFRMUyBhdXRoZW50aWNhdGlvbi5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9oZWxtLzMuMS4xL2RvY3MjY2xpZW50X2NlcnRpZmljYXRlIEhlbG1Qcm92aWRlciNjbGllbnRfY2VydGlmaWNhdGV9XG4gICovXG4gIHJlYWRvbmx5IGNsaWVudENlcnRpZmljYXRlPzogc3RyaW5nO1xuICAvKipcbiAgKiBQRU0tZW5jb2RlZCBjbGllbnQgY2VydGlmaWNhdGUga2V5IGZvciBUTFMgYXV0aGVudGljYXRpb24uXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzI2NsaWVudF9rZXkgSGVsbVByb3ZpZGVyI2NsaWVudF9rZXl9XG4gICovXG4gIHJlYWRvbmx5IGNsaWVudEtleT86IHN0cmluZztcbiAgLyoqXG4gICogUEVNLWVuY29kZWQgcm9vdCBjZXJ0aWZpY2F0ZXMgYnVuZGxlIGZvciBUTFMgYXV0aGVudGljYXRpb24uXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzI2NsdXN0ZXJfY2FfY2VydGlmaWNhdGUgSGVsbVByb3ZpZGVyI2NsdXN0ZXJfY2FfY2VydGlmaWNhdGV9XG4gICovXG4gIHJlYWRvbmx5IGNsdXN0ZXJDYUNlcnRpZmljYXRlPzogc3RyaW5nO1xuICAvKipcbiAgKiBDb250ZXh0IHRvIGNob29zZSBmcm9tIHRoZSBjb25maWcgZmlsZS4gQ2FuIGJlIHNvdXJjZWQgZnJvbSBLVUJFX0NUWC5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9oZWxtLzMuMS4xL2RvY3MjY29uZmlnX2NvbnRleHQgSGVsbVByb3ZpZGVyI2NvbmZpZ19jb250ZXh0fVxuICAqL1xuICByZWFkb25seSBjb25maWdDb250ZXh0Pzogc3RyaW5nO1xuICAvKipcbiAgKiBBdXRoZW50aWNhdGlvbiBpbmZvIGNvbnRleHQgb2YgdGhlIGt1YmUgY29uZmlnIChuYW1lIG9mIHRoZSBrdWJlY29uZmlnIHVzZXIsIC0tdXNlciBmbGFnIGluIGt1YmVjdGwpLiBDYW4gYmUgc291cmNlZCBmcm9tIEtVQkVfQ1RYX0FVVEhfSU5GTy5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9oZWxtLzMuMS4xL2RvY3MjY29uZmlnX2NvbnRleHRfYXV0aF9pbmZvIEhlbG1Qcm92aWRlciNjb25maWdfY29udGV4dF9hdXRoX2luZm99XG4gICovXG4gIHJlYWRvbmx5IGNvbmZpZ0NvbnRleHRBdXRoSW5mbz86IHN0cmluZztcbiAgLyoqXG4gICogQ2x1c3RlciBjb250ZXh0IG9mIHRoZSBrdWJlIGNvbmZpZyAobmFtZSBvZiB0aGUga3ViZWNvbmZpZyBjbHVzdGVyLCAtLWNsdXN0ZXIgZmxhZyBpbiBrdWJlY3RsKS4gQ2FuIGJlIHNvdXJjZWQgZnJvbSBLVUJFX0NUWF9DTFVTVEVSLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2hlbG0vMy4xLjEvZG9jcyNjb25maWdfY29udGV4dF9jbHVzdGVyIEhlbG1Qcm92aWRlciNjb25maWdfY29udGV4dF9jbHVzdGVyfVxuICAqL1xuICByZWFkb25seSBjb25maWdDb250ZXh0Q2x1c3Rlcj86IHN0cmluZztcbiAgLyoqXG4gICogUGF0aCB0byB0aGUga3ViZSBjb25maWcgZmlsZS4gQ2FuIGJlIHNldCB3aXRoIEtVQkVfQ09ORklHX1BBVEguXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzI2NvbmZpZ19wYXRoIEhlbG1Qcm92aWRlciNjb25maWdfcGF0aH1cbiAgKi9cbiAgcmVhZG9ubHkgY29uZmlnUGF0aD86IHN0cmluZztcbiAgLyoqXG4gICogQSBsaXN0IG9mIHBhdGhzIHRvIGt1YmUgY29uZmlnIGZpbGVzLiBDYW4gYmUgc2V0IHdpdGggS1VCRV9DT05GSUdfUEFUSFMgZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzI2NvbmZpZ19wYXRocyBIZWxtUHJvdmlkZXIjY29uZmlnX3BhdGhzfVxuICAqL1xuICByZWFkb25seSBjb25maWdQYXRocz86IHN0cmluZ1tdO1xuICAvKipcbiAgKiBFeGVjIGNvbmZpZ3VyYXRpb24gZm9yIEt1YmVybmV0ZXMgYXV0aGVudGljYXRpb25cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9oZWxtLzMuMS4xL2RvY3MjZXhlYyBIZWxtUHJvdmlkZXIjZXhlY31cbiAgKi9cbiAgcmVhZG9ubHkgZXhlYz86IEhlbG1Qcm92aWRlckt1YmVybmV0ZXNFeGVjO1xuICAvKipcbiAgKiBUaGUgaG9zdG5hbWUgKGluIGZvcm0gb2YgVVJJKSBvZiBrdWJlcm5ldGVzIG1hc3RlclxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2hlbG0vMy4xLjEvZG9jcyNob3N0IEhlbG1Qcm92aWRlciNob3N0fVxuICAqL1xuICByZWFkb25seSBob3N0Pzogc3RyaW5nO1xuICAvKipcbiAgKiBXaGV0aGVyIHNlcnZlciBzaG91bGQgYmUgYWNjZXNzZWQgd2l0aG91dCB2ZXJpZnlpbmcgdGhlIFRMUyBjZXJ0aWZpY2F0ZS5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9oZWxtLzMuMS4xL2RvY3MjaW5zZWN1cmUgSGVsbVByb3ZpZGVyI2luc2VjdXJlfVxuICAqL1xuICByZWFkb25seSBpbnNlY3VyZT86IGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZTtcbiAgLyoqXG4gICogVGhlIHBhc3N3b3JkIHRvIHVzZSBmb3IgSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvbiB3aGVuIGFjY2Vzc2luZyB0aGUgS3ViZXJuZXRlcyBtYXN0ZXIgZW5kcG9pbnQuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzI3Bhc3N3b3JkIEhlbG1Qcm92aWRlciNwYXNzd29yZH1cbiAgKi9cbiAgcmVhZG9ubHkgcGFzc3dvcmQ/OiBzdHJpbmc7XG4gIC8qKlxuICAqIFVSTCB0byB0aGUgcHJveHkgdG8gYmUgdXNlZCBmb3IgYWxsIEFQSSByZXF1ZXN0cy5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9oZWxtLzMuMS4xL2RvY3MjcHJveHlfdXJsIEhlbG1Qcm92aWRlciNwcm94eV91cmx9XG4gICovXG4gIHJlYWRvbmx5IHByb3h5VXJsPzogc3RyaW5nO1xuICAvKipcbiAgKiBTZXJ2ZXIgbmFtZSBwYXNzZWQgdG8gdGhlIHNlcnZlciBmb3IgU05JIGFuZCBpcyB1c2VkIGluIHRoZSBjbGllbnQgdG8gY2hlY2sgc2VydmVyIGNlcnRpZmljYXRlcyBhZ2FpbnN0LlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2hlbG0vMy4xLjEvZG9jcyN0bHNfc2VydmVyX25hbWUgSGVsbVByb3ZpZGVyI3Rsc19zZXJ2ZXJfbmFtZX1cbiAgKi9cbiAgcmVhZG9ubHkgdGxzU2VydmVyTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICogVG9rZW4gdG8gYXV0aGVudGljYXRlIGEgc2VydmljZSBhY2NvdW50LlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2hlbG0vMy4xLjEvZG9jcyN0b2tlbiBIZWxtUHJvdmlkZXIjdG9rZW59XG4gICovXG4gIHJlYWRvbmx5IHRva2VuPzogc3RyaW5nO1xuICAvKipcbiAgKiBUaGUgdXNlcm5hbWUgdG8gdXNlIGZvciBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uIHdoZW4gYWNjZXNzaW5nIHRoZSBLdWJlcm5ldGVzIG1hc3RlciBlbmRwb2ludFxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2hlbG0vMy4xLjEvZG9jcyN1c2VybmFtZSBIZWxtUHJvdmlkZXIjdXNlcm5hbWV9XG4gICovXG4gIHJlYWRvbmx5IHVzZXJuYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGVsbVByb3ZpZGVyS3ViZXJuZXRlc1RvVGVycmFmb3JtKHN0cnVjdD86IEhlbG1Qcm92aWRlckt1YmVybmV0ZXMgfCBjZGt0bi5JUmVzb2x2YWJsZSk6IGFueSB7XG4gIGlmICghY2RrdG4uY2FuSW5zcGVjdChzdHJ1Y3QpIHx8IGNka3RuLlRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoc3RydWN0KSkgeyByZXR1cm4gc3RydWN0OyB9XG4gIGlmIChjZGt0bi5pc0NvbXBsZXhFbGVtZW50KHN0cnVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGNvbXBsZXggZWxlbWVudCB3YXMgdXNlZCBhcyBjb25maWd1cmF0aW9uLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IGh0dHBzOi8vY2RrLnRmL2NvbXBsZXgtb2JqZWN0LWFzLWNvbmZpZ3VyYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBjbGllbnRfY2VydGlmaWNhdGU6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHN0cnVjdCEuY2xpZW50Q2VydGlmaWNhdGUpLFxuICAgIGNsaWVudF9rZXk6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHN0cnVjdCEuY2xpZW50S2V5KSxcbiAgICBjbHVzdGVyX2NhX2NlcnRpZmljYXRlOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLmNsdXN0ZXJDYUNlcnRpZmljYXRlKSxcbiAgICBjb25maWdfY29udGV4dDogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0oc3RydWN0IS5jb25maWdDb250ZXh0KSxcbiAgICBjb25maWdfY29udGV4dF9hdXRoX2luZm86IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHN0cnVjdCEuY29uZmlnQ29udGV4dEF1dGhJbmZvKSxcbiAgICBjb25maWdfY29udGV4dF9jbHVzdGVyOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLmNvbmZpZ0NvbnRleHRDbHVzdGVyKSxcbiAgICBjb25maWdfcGF0aDogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0oc3RydWN0IS5jb25maWdQYXRoKSxcbiAgICBjb25maWdfcGF0aHM6IGNka3RuLmxpc3RNYXBwZXIoY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0sIGZhbHNlKShzdHJ1Y3QhLmNvbmZpZ1BhdGhzKSxcbiAgICBleGVjOiBoZWxtUHJvdmlkZXJLdWJlcm5ldGVzRXhlY1RvVGVycmFmb3JtKHN0cnVjdCEuZXhlYyksXG4gICAgaG9zdDogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0oc3RydWN0IS5ob3N0KSxcbiAgICBpbnNlY3VyZTogY2RrdG4uYm9vbGVhblRvVGVycmFmb3JtKHN0cnVjdCEuaW5zZWN1cmUpLFxuICAgIHBhc3N3b3JkOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLnBhc3N3b3JkKSxcbiAgICBwcm94eV91cmw6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHN0cnVjdCEucHJveHlVcmwpLFxuICAgIHRsc19zZXJ2ZXJfbmFtZTogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0oc3RydWN0IS50bHNTZXJ2ZXJOYW1lKSxcbiAgICB0b2tlbjogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0oc3RydWN0IS50b2tlbiksXG4gICAgdXNlcm5hbWU6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHN0cnVjdCEudXNlcm5hbWUpLFxuICB9XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGhlbG1Qcm92aWRlckt1YmVybmV0ZXNUb0hjbFRlcnJhZm9ybShzdHJ1Y3Q/OiBIZWxtUHJvdmlkZXJLdWJlcm5ldGVzIHwgY2RrdG4uSVJlc29sdmFibGUpOiBhbnkge1xuICBpZiAoIWNka3RuLmNhbkluc3BlY3Qoc3RydWN0KSB8fCBjZGt0bi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHN0cnVjdCkpIHsgcmV0dXJuIHN0cnVjdDsgfVxuICBpZiAoY2RrdG4uaXNDb21wbGV4RWxlbWVudChzdHJ1Y3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQSBjb21wbGV4IGVsZW1lbnQgd2FzIHVzZWQgYXMgY29uZmlndXJhdGlvbiwgdGhpcyBpcyBub3Qgc3VwcG9ydGVkOiBodHRwczovL2Nkay50Zi9jb21wbGV4LW9iamVjdC1hcy1jb25maWd1cmF0aW9uXCIpO1xuICB9XG4gIGNvbnN0IGF0dHJzID0ge1xuICAgIGNsaWVudF9jZXJ0aWZpY2F0ZToge1xuICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEuY2xpZW50Q2VydGlmaWNhdGUpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICB9LFxuICAgIGNsaWVudF9rZXk6IHtcbiAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLmNsaWVudEtleSksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gICAgY2x1c3Rlcl9jYV9jZXJ0aWZpY2F0ZToge1xuICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEuY2x1c3RlckNhQ2VydGlmaWNhdGUpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICB9LFxuICAgIGNvbmZpZ19jb250ZXh0OiB7XG4gICAgICB2YWx1ZTogY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5jb25maWdDb250ZXh0KSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgICBjb25maWdfY29udGV4dF9hdXRoX2luZm86IHtcbiAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLmNvbmZpZ0NvbnRleHRBdXRoSW5mbyksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gICAgY29uZmlnX2NvbnRleHRfY2x1c3Rlcjoge1xuICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEuY29uZmlnQ29udGV4dENsdXN0ZXIpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICB9LFxuICAgIGNvbmZpZ19wYXRoOiB7XG4gICAgICB2YWx1ZTogY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5jb25maWdQYXRoKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgICBjb25maWdfcGF0aHM6IHtcbiAgICAgIHZhbHVlOiBjZGt0bi5saXN0TWFwcGVySGNsKGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtLCBmYWxzZSkoc3RydWN0IS5jb25maWdQYXRocyksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwibGlzdFwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdMaXN0XCIsXG4gICAgfSxcbiAgICBleGVjOiB7XG4gICAgICB2YWx1ZTogaGVsbVByb3ZpZGVyS3ViZXJuZXRlc0V4ZWNUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLmV4ZWMpLFxuICAgICAgaXNCbG9jazogdHJ1ZSxcbiAgICAgIHR5cGU6IFwic3RydWN0XCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIkhlbG1Qcm92aWRlckt1YmVybmV0ZXNFeGVjXCIsXG4gICAgfSxcbiAgICBob3N0OiB7XG4gICAgICB2YWx1ZTogY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5ob3N0KSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgICBpbnNlY3VyZToge1xuICAgICAgdmFsdWU6IGNka3RuLmJvb2xlYW5Ub0hjbFRlcnJhZm9ybShzdHJ1Y3QhLmluc2VjdXJlKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiYm9vbGVhblwiLFxuICAgIH0sXG4gICAgcGFzc3dvcmQ6IHtcbiAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLnBhc3N3b3JkKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgICBwcm94eV91cmw6IHtcbiAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLnByb3h5VXJsKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgICB0bHNfc2VydmVyX25hbWU6IHtcbiAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLnRsc1NlcnZlck5hbWUpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICB9LFxuICAgIHRva2VuOiB7XG4gICAgICB2YWx1ZTogY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0oc3RydWN0IS50b2tlbiksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gICAgdXNlcm5hbWU6IHtcbiAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLnVzZXJuYW1lKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgfTtcblxuICAvLyByZW1vdmUgdW5kZWZpbmVkIGF0dHJpYnV0ZXNcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhhdHRycykuZmlsdGVyKChbXywgdmFsdWVdKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLnZhbHVlICE9PSB1bmRlZmluZWQpKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIZWxtUHJvdmlkZXJSZWdpc3RyaWVzIHtcbiAgLyoqXG4gICogVGhlIHBhc3N3b3JkIHRvIHVzZSBmb3IgdGhlIE9DSSBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uIHdoZW4gYWNjZXNzaW5nIHRoZSBLdWJlcm5ldGVzIG1hc3RlciBlbmRwb2ludC5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9oZWxtLzMuMS4xL2RvY3MjcGFzc3dvcmQgSGVsbVByb3ZpZGVyI3Bhc3N3b3JkfVxuICAqL1xuICByZWFkb25seSBwYXNzd29yZDogc3RyaW5nO1xuICAvKipcbiAgKiBPQ0kgVVJMIGluIGZvcm0gb2Ygb2NpOi8vaG9zdDpwb3J0IG9yIG9jaTovL2hvc3RcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9oZWxtLzMuMS4xL2RvY3MjdXJsIEhlbG1Qcm92aWRlciN1cmx9XG4gICovXG4gIHJlYWRvbmx5IHVybDogc3RyaW5nO1xuICAvKipcbiAgKiBUaGUgdXNlcm5hbWUgdG8gdXNlIGZvciB0aGUgT0NJIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb24gd2hlbiBhY2Nlc3NpbmcgdGhlIEt1YmVybmV0ZXMgbWFzdGVyIGVuZHBvaW50LlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2hlbG0vMy4xLjEvZG9jcyN1c2VybmFtZSBIZWxtUHJvdmlkZXIjdXNlcm5hbWV9XG4gICovXG4gIHJlYWRvbmx5IHVzZXJuYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoZWxtUHJvdmlkZXJSZWdpc3RyaWVzVG9UZXJyYWZvcm0oc3RydWN0PzogSGVsbVByb3ZpZGVyUmVnaXN0cmllcyB8IGNka3RuLklSZXNvbHZhYmxlKTogYW55IHtcbiAgaWYgKCFjZGt0bi5jYW5JbnNwZWN0KHN0cnVjdCkgfHwgY2RrdG4uVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZShzdHJ1Y3QpKSB7IHJldHVybiBzdHJ1Y3Q7IH1cbiAgaWYgKGNka3RuLmlzQ29tcGxleEVsZW1lbnQoc3RydWN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkEgY29tcGxleCBlbGVtZW50IHdhcyB1c2VkIGFzIGNvbmZpZ3VyYXRpb24sIHRoaXMgaXMgbm90IHN1cHBvcnRlZDogaHR0cHM6Ly9jZGsudGYvY29tcGxleC1vYmplY3QtYXMtY29uZmlndXJhdGlvblwiKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHBhc3N3b3JkOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLnBhc3N3b3JkKSxcbiAgICB1cmw6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHN0cnVjdCEudXJsKSxcbiAgICB1c2VybmFtZTogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0oc3RydWN0IS51c2VybmFtZSksXG4gIH1cbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gaGVsbVByb3ZpZGVyUmVnaXN0cmllc1RvSGNsVGVycmFmb3JtKHN0cnVjdD86IEhlbG1Qcm92aWRlclJlZ2lzdHJpZXMgfCBjZGt0bi5JUmVzb2x2YWJsZSk6IGFueSB7XG4gIGlmICghY2RrdG4uY2FuSW5zcGVjdChzdHJ1Y3QpIHx8IGNka3RuLlRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoc3RydWN0KSkgeyByZXR1cm4gc3RydWN0OyB9XG4gIGlmIChjZGt0bi5pc0NvbXBsZXhFbGVtZW50KHN0cnVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGNvbXBsZXggZWxlbWVudCB3YXMgdXNlZCBhcyBjb25maWd1cmF0aW9uLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IGh0dHBzOi8vY2RrLnRmL2NvbXBsZXgtb2JqZWN0LWFzLWNvbmZpZ3VyYXRpb25cIik7XG4gIH1cbiAgY29uc3QgYXR0cnMgPSB7XG4gICAgcGFzc3dvcmQ6IHtcbiAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLnBhc3N3b3JkKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgICB1cmw6IHtcbiAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLnVybCksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gICAgdXNlcm5hbWU6IHtcbiAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLnVzZXJuYW1lKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgfTtcblxuICAvLyByZW1vdmUgdW5kZWZpbmVkIGF0dHJpYnV0ZXNcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhhdHRycykuZmlsdGVyKChbXywgdmFsdWVdKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLnZhbHVlICE9PSB1bmRlZmluZWQpKTtcbn1cblxuXG4vKipcbiogUmVwcmVzZW50cyBhIHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2hlbG0vMy4xLjEvZG9jcyBoZWxtfVxuKi9cbmV4cG9ydCBjbGFzcyBIZWxtUHJvdmlkZXIgZXh0ZW5kcyBjZGt0bi5UZXJyYWZvcm1Qcm92aWRlciB7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT1cbiAgLy8gU1RBVElDIFBST1BFUlRJRVNcbiAgLy8gPT09PT09PT09PT09PT09PT1cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSB0ZlJlc291cmNlVHlwZSA9IFwiaGVsbVwiO1xuXG4gIC8vID09PT09PT09PT09PT09XG4gIC8vIFNUQVRJQyBNZXRob2RzXG4gIC8vID09PT09PT09PT09PT09XG4gIC8qKlxuICAqIEdlbmVyYXRlcyBDREtUTiBjb2RlIGZvciBpbXBvcnRpbmcgYSBIZWxtUHJvdmlkZXIgcmVzb3VyY2UgdXBvbiBydW5uaW5nIFwiY2RrdG4gcGxhbiA8c3RhY2stbmFtZT5cIlxuICAqIEBwYXJhbSBzY29wZSBUaGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgY29uc3RydWN0XG4gICogQHBhcmFtIGltcG9ydFRvSWQgVGhlIGNvbnN0cnVjdCBpZCB1c2VkIGluIHRoZSBnZW5lcmF0ZWQgY29uZmlnIGZvciB0aGUgSGVsbVByb3ZpZGVyIHRvIGltcG9ydFxuICAqIEBwYXJhbSBpbXBvcnRGcm9tSWQgVGhlIGlkIG9mIHRoZSBleGlzdGluZyBIZWxtUHJvdmlkZXIgdGhhdCBzaG91bGQgYmUgaW1wb3J0ZWQuIFJlZmVyIHRvIHRoZSB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9oZWxtLzMuMS4xL2RvY3MjaW1wb3J0IGltcG9ydCBzZWN0aW9ufSBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGlzIHJlc291cmNlIGZvciB0aGUgaWQgdG8gdXNlXG4gICogQHBhcmFtIHByb3ZpZGVyPyBPcHRpb25hbCBpbnN0YW5jZSBvZiB0aGUgcHJvdmlkZXIgd2hlcmUgdGhlIEhlbG1Qcm92aWRlciB0byBpbXBvcnQgaXMgZm91bmRcbiAgKi9cbiAgcHVibGljIHN0YXRpYyBnZW5lcmF0ZUNvbmZpZ0ZvckltcG9ydChzY29wZTogQ29uc3RydWN0LCBpbXBvcnRUb0lkOiBzdHJpbmcsIGltcG9ydEZyb21JZDogc3RyaW5nLCBwcm92aWRlcj86IGNka3RuLlRlcnJhZm9ybVByb3ZpZGVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgY2RrdG4uSW1wb3J0YWJsZVJlc291cmNlKHNjb3BlLCBpbXBvcnRUb0lkLCB7IHRlcnJhZm9ybVJlc291cmNlVHlwZTogXCJoZWxtXCIsIGltcG9ydElkOiBpbXBvcnRGcm9tSWQsIHByb3ZpZGVyIH0pO1xuICAgICAgfVxuXG4gIC8vID09PT09PT09PT09XG4gIC8vIElOSVRJQUxJWkVSXG4gIC8vID09PT09PT09PT09XG5cbiAgLyoqXG4gICogQ3JlYXRlIGEgbmV3IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2hlbG0vMy4xLjEvZG9jcyBoZWxtfSBSZXNvdXJjZVxuICAqXG4gICogQHBhcmFtIHNjb3BlIFRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBjb25zdHJ1Y3RcbiAgKiBAcGFyYW0gaWQgVGhlIHNjb3BlZCBjb25zdHJ1Y3QgSUQuIE11c3QgYmUgdW5pcXVlIGFtb25nc3Qgc2libGluZ3MgaW4gdGhlIHNhbWUgc2NvcGVcbiAgKiBAcGFyYW0gb3B0aW9ucyBIZWxtUHJvdmlkZXJDb25maWcgPSB7fVxuICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgY29uZmlnOiBIZWxtUHJvdmlkZXJDb25maWcgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgdGVycmFmb3JtUmVzb3VyY2VUeXBlOiAnaGVsbScsXG4gICAgICB0ZXJyYWZvcm1HZW5lcmF0b3JNZXRhZGF0YToge1xuICAgICAgICBwcm92aWRlck5hbWU6ICdoZWxtJyxcbiAgICAgICAgcHJvdmlkZXJWZXJzaW9uOiAnMy4xLjEnLFxuICAgICAgICBwcm92aWRlclZlcnNpb25Db25zdHJhaW50OiAnfj4gMy4wJ1xuICAgICAgfSxcbiAgICAgIHRlcnJhZm9ybVByb3ZpZGVyU291cmNlOiAnaGVsbSdcbiAgICB9KTtcbiAgICB0aGlzLl9idXJzdExpbWl0ID0gY29uZmlnLmJ1cnN0TGltaXQ7XG4gICAgdGhpcy5fZGVidWcgPSBjb25maWcuZGVidWc7XG4gICAgdGhpcy5fZXhwZXJpbWVudHMgPSBjb25maWcuZXhwZXJpbWVudHM7XG4gICAgdGhpcy5faGVsbURyaXZlciA9IGNvbmZpZy5oZWxtRHJpdmVyO1xuICAgIHRoaXMuX2t1YmVybmV0ZXMgPSBjb25maWcua3ViZXJuZXRlcztcbiAgICB0aGlzLl9wbHVnaW5zUGF0aCA9IGNvbmZpZy5wbHVnaW5zUGF0aDtcbiAgICB0aGlzLl9xcHMgPSBjb25maWcucXBzO1xuICAgIHRoaXMuX3JlZ2lzdHJpZXMgPSBjb25maWcucmVnaXN0cmllcztcbiAgICB0aGlzLl9yZWdpc3RyeUNvbmZpZ1BhdGggPSBjb25maWcucmVnaXN0cnlDb25maWdQYXRoO1xuICAgIHRoaXMuX3JlcG9zaXRvcnlDYWNoZSA9IGNvbmZpZy5yZXBvc2l0b3J5Q2FjaGU7XG4gICAgdGhpcy5fcmVwb3NpdG9yeUNvbmZpZ1BhdGggPSBjb25maWcucmVwb3NpdG9yeUNvbmZpZ1BhdGg7XG4gICAgdGhpcy5fYWxpYXMgPSBjb25maWcuYWxpYXM7XG4gIH1cblxuICAvLyA9PT09PT09PT09XG4gIC8vIEFUVFJJQlVURVNcbiAgLy8gPT09PT09PT09PVxuXG4gIC8vIGJ1cnN0X2xpbWl0IC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2J1cnN0TGltaXQ/OiBudW1iZXI7IFxuICBwdWJsaWMgZ2V0IGJ1cnN0TGltaXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2J1cnN0TGltaXQ7XG4gIH1cbiAgcHVibGljIHNldCBidXJzdExpbWl0KHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9idXJzdExpbWl0ID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0QnVyc3RMaW1pdCgpIHtcbiAgICB0aGlzLl9idXJzdExpbWl0ID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBidXJzdExpbWl0SW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2J1cnN0TGltaXQ7XG4gIH1cblxuICAvLyBkZWJ1ZyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9kZWJ1Zz86IGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZTsgXG4gIHB1YmxpYyBnZXQgZGVidWcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RlYnVnO1xuICB9XG4gIHB1YmxpYyBzZXQgZGVidWcodmFsdWU6IGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2RlYnVnID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0RGVidWcoKSB7XG4gICAgdGhpcy5fZGVidWcgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGRlYnVnSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RlYnVnO1xuICB9XG5cbiAgLy8gZXhwZXJpbWVudHMgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfZXhwZXJpbWVudHM/OiBIZWxtUHJvdmlkZXJFeHBlcmltZW50czsgXG4gIHB1YmxpYyBnZXQgZXhwZXJpbWVudHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2V4cGVyaW1lbnRzO1xuICB9XG4gIHB1YmxpYyBzZXQgZXhwZXJpbWVudHModmFsdWU6IEhlbG1Qcm92aWRlckV4cGVyaW1lbnRzIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fZXhwZXJpbWVudHMgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRFeHBlcmltZW50cygpIHtcbiAgICB0aGlzLl9leHBlcmltZW50cyA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZXhwZXJpbWVudHNJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZXhwZXJpbWVudHM7XG4gIH1cblxuICAvLyBoZWxtX2RyaXZlciAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9oZWxtRHJpdmVyPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBoZWxtRHJpdmVyKCkge1xuICAgIHJldHVybiB0aGlzLl9oZWxtRHJpdmVyO1xuICB9XG4gIHB1YmxpYyBzZXQgaGVsbURyaXZlcih2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5faGVsbURyaXZlciA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldEhlbG1Ecml2ZXIoKSB7XG4gICAgdGhpcy5faGVsbURyaXZlciA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgaGVsbURyaXZlcklucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9oZWxtRHJpdmVyO1xuICB9XG5cbiAgLy8ga3ViZXJuZXRlcyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9rdWJlcm5ldGVzPzogSGVsbVByb3ZpZGVyS3ViZXJuZXRlczsgXG4gIHB1YmxpYyBnZXQga3ViZXJuZXRlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fa3ViZXJuZXRlcztcbiAgfVxuICBwdWJsaWMgc2V0IGt1YmVybmV0ZXModmFsdWU6IEhlbG1Qcm92aWRlckt1YmVybmV0ZXMgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9rdWJlcm5ldGVzID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0S3ViZXJuZXRlcygpIHtcbiAgICB0aGlzLl9rdWJlcm5ldGVzID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBrdWJlcm5ldGVzSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2t1YmVybmV0ZXM7XG4gIH1cblxuICAvLyBwbHVnaW5zX3BhdGggLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfcGx1Z2luc1BhdGg/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IHBsdWdpbnNQYXRoKCkge1xuICAgIHJldHVybiB0aGlzLl9wbHVnaW5zUGF0aDtcbiAgfVxuICBwdWJsaWMgc2V0IHBsdWdpbnNQYXRoKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9wbHVnaW5zUGF0aCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFBsdWdpbnNQYXRoKCkge1xuICAgIHRoaXMuX3BsdWdpbnNQYXRoID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBwbHVnaW5zUGF0aElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9wbHVnaW5zUGF0aDtcbiAgfVxuXG4gIC8vIHFwcyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9xcHM/OiBudW1iZXI7IFxuICBwdWJsaWMgZ2V0IHFwcygpIHtcbiAgICByZXR1cm4gdGhpcy5fcXBzO1xuICB9XG4gIHB1YmxpYyBzZXQgcXBzKHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9xcHMgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRRcHMoKSB7XG4gICAgdGhpcy5fcXBzID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBxcHNJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcXBzO1xuICB9XG5cbiAgLy8gcmVnaXN0cmllcyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9yZWdpc3RyaWVzPzogSGVsbVByb3ZpZGVyUmVnaXN0cmllc1tdIHwgY2RrdG4uSVJlc29sdmFibGU7IFxuICBwdWJsaWMgZ2V0IHJlZ2lzdHJpZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlZ2lzdHJpZXM7XG4gIH1cbiAgcHVibGljIHNldCByZWdpc3RyaWVzKHZhbHVlOiBIZWxtUHJvdmlkZXJSZWdpc3RyaWVzW10gfCBjZGt0bi5JUmVzb2x2YWJsZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3JlZ2lzdHJpZXMgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRSZWdpc3RyaWVzKCkge1xuICAgIHRoaXMuX3JlZ2lzdHJpZXMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHJlZ2lzdHJpZXNJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVnaXN0cmllcztcbiAgfVxuXG4gIC8vIHJlZ2lzdHJ5X2NvbmZpZ19wYXRoIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3JlZ2lzdHJ5Q29uZmlnUGF0aD86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgcmVnaXN0cnlDb25maWdQYXRoKCkge1xuICAgIHJldHVybiB0aGlzLl9yZWdpc3RyeUNvbmZpZ1BhdGg7XG4gIH1cbiAgcHVibGljIHNldCByZWdpc3RyeUNvbmZpZ1BhdGgodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3JlZ2lzdHJ5Q29uZmlnUGF0aCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFJlZ2lzdHJ5Q29uZmlnUGF0aCgpIHtcbiAgICB0aGlzLl9yZWdpc3RyeUNvbmZpZ1BhdGggPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHJlZ2lzdHJ5Q29uZmlnUGF0aElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9yZWdpc3RyeUNvbmZpZ1BhdGg7XG4gIH1cblxuICAvLyByZXBvc2l0b3J5X2NhY2hlIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3JlcG9zaXRvcnlDYWNoZT86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgcmVwb3NpdG9yeUNhY2hlKCkge1xuICAgIHJldHVybiB0aGlzLl9yZXBvc2l0b3J5Q2FjaGU7XG4gIH1cbiAgcHVibGljIHNldCByZXBvc2l0b3J5Q2FjaGUodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3JlcG9zaXRvcnlDYWNoZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFJlcG9zaXRvcnlDYWNoZSgpIHtcbiAgICB0aGlzLl9yZXBvc2l0b3J5Q2FjaGUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHJlcG9zaXRvcnlDYWNoZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9yZXBvc2l0b3J5Q2FjaGU7XG4gIH1cblxuICAvLyByZXBvc2l0b3J5X2NvbmZpZ19wYXRoIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3JlcG9zaXRvcnlDb25maWdQYXRoPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCByZXBvc2l0b3J5Q29uZmlnUGF0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVwb3NpdG9yeUNvbmZpZ1BhdGg7XG4gIH1cbiAgcHVibGljIHNldCByZXBvc2l0b3J5Q29uZmlnUGF0aCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fcmVwb3NpdG9yeUNvbmZpZ1BhdGggPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRSZXBvc2l0b3J5Q29uZmlnUGF0aCgpIHtcbiAgICB0aGlzLl9yZXBvc2l0b3J5Q29uZmlnUGF0aCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgcmVwb3NpdG9yeUNvbmZpZ1BhdGhJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVwb3NpdG9yeUNvbmZpZ1BhdGg7XG4gIH1cblxuICAvLyBhbGlhcyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9hbGlhcz86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgYWxpYXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FsaWFzO1xuICB9XG4gIHB1YmxpYyBzZXQgYWxpYXModmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2FsaWFzID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0QWxpYXMoKSB7XG4gICAgdGhpcy5fYWxpYXMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGFsaWFzSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FsaWFzO1xuICB9XG5cbiAgLy8gPT09PT09PT09XG4gIC8vIFNZTlRIRVNJU1xuICAvLyA9PT09PT09PT1cblxuICBwcm90ZWN0ZWQgc3ludGhlc2l6ZUF0dHJpYnV0ZXMoKTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0ge1xuICAgIHJldHVybiB7XG4gICAgICBidXJzdF9saW1pdDogY2RrdG4ubnVtYmVyVG9UZXJyYWZvcm0odGhpcy5fYnVyc3RMaW1pdCksXG4gICAgICBkZWJ1ZzogY2RrdG4uYm9vbGVhblRvVGVycmFmb3JtKHRoaXMuX2RlYnVnKSxcbiAgICAgIGV4cGVyaW1lbnRzOiBoZWxtUHJvdmlkZXJFeHBlcmltZW50c1RvVGVycmFmb3JtKHRoaXMuX2V4cGVyaW1lbnRzKSxcbiAgICAgIGhlbG1fZHJpdmVyOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybSh0aGlzLl9oZWxtRHJpdmVyKSxcbiAgICAgIGt1YmVybmV0ZXM6IGhlbG1Qcm92aWRlckt1YmVybmV0ZXNUb1RlcnJhZm9ybSh0aGlzLl9rdWJlcm5ldGVzKSxcbiAgICAgIHBsdWdpbnNfcGF0aDogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0odGhpcy5fcGx1Z2luc1BhdGgpLFxuICAgICAgcXBzOiBjZGt0bi5udW1iZXJUb1RlcnJhZm9ybSh0aGlzLl9xcHMpLFxuICAgICAgcmVnaXN0cmllczogY2RrdG4ubGlzdE1hcHBlcihoZWxtUHJvdmlkZXJSZWdpc3RyaWVzVG9UZXJyYWZvcm0sIGZhbHNlKSh0aGlzLl9yZWdpc3RyaWVzKSxcbiAgICAgIHJlZ2lzdHJ5X2NvbmZpZ19wYXRoOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybSh0aGlzLl9yZWdpc3RyeUNvbmZpZ1BhdGgpLFxuICAgICAgcmVwb3NpdG9yeV9jYWNoZTogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0odGhpcy5fcmVwb3NpdG9yeUNhY2hlKSxcbiAgICAgIHJlcG9zaXRvcnlfY29uZmlnX3BhdGg6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX3JlcG9zaXRvcnlDb25maWdQYXRoKSxcbiAgICAgIGFsaWFzOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybSh0aGlzLl9hbGlhcyksXG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzeW50aGVzaXplSGNsQXR0cmlidXRlcygpOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSB7XG4gICAgY29uc3QgYXR0cnMgPSB7XG4gICAgICBidXJzdF9saW1pdDoge1xuICAgICAgICB2YWx1ZTogY2RrdG4ubnVtYmVyVG9IY2xUZXJyYWZvcm0odGhpcy5fYnVyc3RMaW1pdCksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIm51bWJlclwiLFxuICAgICAgfSxcbiAgICAgIGRlYnVnOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0bi5ib29sZWFuVG9IY2xUZXJyYWZvcm0odGhpcy5fZGVidWcpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJib29sZWFuXCIsXG4gICAgICB9LFxuICAgICAgZXhwZXJpbWVudHM6IHtcbiAgICAgICAgdmFsdWU6IGhlbG1Qcm92aWRlckV4cGVyaW1lbnRzVG9IY2xUZXJyYWZvcm0odGhpcy5fZXhwZXJpbWVudHMpLFxuICAgICAgICBpc0Jsb2NrOiB0cnVlLFxuICAgICAgICB0eXBlOiBcInN0cnVjdFwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIkhlbG1Qcm92aWRlckV4cGVyaW1lbnRzXCIsXG4gICAgICB9LFxuICAgICAgaGVsbV9kcml2ZXI6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX2hlbG1Ecml2ZXIpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgICBrdWJlcm5ldGVzOiB7XG4gICAgICAgIHZhbHVlOiBoZWxtUHJvdmlkZXJLdWJlcm5ldGVzVG9IY2xUZXJyYWZvcm0odGhpcy5fa3ViZXJuZXRlcyksXG4gICAgICAgIGlzQmxvY2s6IHRydWUsXG4gICAgICAgIHR5cGU6IFwic3RydWN0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiSGVsbVByb3ZpZGVyS3ViZXJuZXRlc1wiLFxuICAgICAgfSxcbiAgICAgIHBsdWdpbnNfcGF0aDoge1xuICAgICAgICB2YWx1ZTogY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0odGhpcy5fcGx1Z2luc1BhdGgpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgICBxcHM6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLm51bWJlclRvSGNsVGVycmFmb3JtKHRoaXMuX3FwcyksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIm51bWJlclwiLFxuICAgICAgfSxcbiAgICAgIHJlZ2lzdHJpZXM6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLmxpc3RNYXBwZXJIY2woaGVsbVByb3ZpZGVyUmVnaXN0cmllc1RvSGNsVGVycmFmb3JtLCBmYWxzZSkodGhpcy5fcmVnaXN0cmllcyksXG4gICAgICAgIGlzQmxvY2s6IHRydWUsXG4gICAgICAgIHR5cGU6IFwibGlzdFwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIkhlbG1Qcm92aWRlclJlZ2lzdHJpZXNMaXN0XCIsXG4gICAgICB9LFxuICAgICAgcmVnaXN0cnlfY29uZmlnX3BhdGg6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX3JlZ2lzdHJ5Q29uZmlnUGF0aCksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgfSxcbiAgICAgIHJlcG9zaXRvcnlfY2FjaGU6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX3JlcG9zaXRvcnlDYWNoZSksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgfSxcbiAgICAgIHJlcG9zaXRvcnlfY29uZmlnX3BhdGg6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX3JlcG9zaXRvcnlDb25maWdQYXRoKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgYWxpYXM6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX2FsaWFzKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICAvLyByZW1vdmUgdW5kZWZpbmVkIGF0dHJpYnV0ZXNcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGF0dHJzKS5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUudmFsdWUgIT09IHVuZGVmaW5lZCApKVxuICB9XG59XG4iXX0=
|