@aneoconsultingfr/armonik.api.angular 3.4.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 (68) hide show
  1. package/README.md +24 -0
  2. package/esm2020/aneoconsultingfr-armonik.api.angular.mjs +5 -0
  3. package/esm2020/lib/generated/applications-common.pb.mjs +964 -0
  4. package/esm2020/lib/generated/applications-service.pb.mjs +2 -0
  5. package/esm2020/lib/generated/applications-service.pbconf.mjs +13 -0
  6. package/esm2020/lib/generated/applications-service.pbsc.mjs +104 -0
  7. package/esm2020/lib/generated/auth-common.pb.mjs +318 -0
  8. package/esm2020/lib/generated/auth-service.pb.mjs +2 -0
  9. package/esm2020/lib/generated/auth-service.pbconf.mjs +13 -0
  10. package/esm2020/lib/generated/auth-service.pbsc.mjs +74 -0
  11. package/esm2020/lib/generated/objects.pb.mjs +2705 -0
  12. package/esm2020/lib/generated/partitions-common.pb.mjs +1169 -0
  13. package/esm2020/lib/generated/partitions-service.pb.mjs +2 -0
  14. package/esm2020/lib/generated/partitions-service.pbconf.mjs +13 -0
  15. package/esm2020/lib/generated/partitions-service.pbsc.mjs +104 -0
  16. package/esm2020/lib/generated/result-status.pb.mjs +15 -0
  17. package/esm2020/lib/generated/results-common.pb.mjs +1167 -0
  18. package/esm2020/lib/generated/results-service.pb.mjs +2 -0
  19. package/esm2020/lib/generated/results-service.pbconf.mjs +13 -0
  20. package/esm2020/lib/generated/results-service.pbsc.mjs +104 -0
  21. package/esm2020/lib/generated/session-status.pb.mjs +13 -0
  22. package/esm2020/lib/generated/sessions-common.pb.mjs +1683 -0
  23. package/esm2020/lib/generated/sessions-service.pb.mjs +2 -0
  24. package/esm2020/lib/generated/sessions-service.pbconf.mjs +13 -0
  25. package/esm2020/lib/generated/sessions-service.pbsc.mjs +164 -0
  26. package/esm2020/lib/generated/task-status.pb.mjs +21 -0
  27. package/esm2020/lib/generated/tasks-common.pb.mjs +2398 -0
  28. package/esm2020/lib/generated/tasks-service.pb.mjs +2 -0
  29. package/esm2020/lib/generated/tasks-service.pbconf.mjs +13 -0
  30. package/esm2020/lib/generated/tasks-service.pbsc.mjs +194 -0
  31. package/esm2020/lib/index.mjs +16 -0
  32. package/esm2020/public-api.mjs +5 -0
  33. package/fesm2015/aneoconsultingfr-armonik.api.angular.mjs +11173 -0
  34. package/fesm2015/aneoconsultingfr-armonik.api.angular.mjs.map +1 -0
  35. package/fesm2020/aneoconsultingfr-armonik.api.angular.mjs +11161 -0
  36. package/fesm2020/aneoconsultingfr-armonik.api.angular.mjs.map +1 -0
  37. package/index.d.ts +5 -0
  38. package/lib/generated/applications-common.pb.d.ts +568 -0
  39. package/lib/generated/applications-service.pb.d.ts +1 -0
  40. package/lib/generated/applications-service.pbconf.d.ts +6 -0
  41. package/lib/generated/applications-service.pbsc.d.ts +54 -0
  42. package/lib/generated/auth-common.pb.d.ts +214 -0
  43. package/lib/generated/auth-service.pb.d.ts +1 -0
  44. package/lib/generated/auth-service.pbconf.d.ts +6 -0
  45. package/lib/generated/auth-service.pbsc.d.ts +38 -0
  46. package/lib/generated/objects.pb.d.ts +1673 -0
  47. package/lib/generated/partitions-common.pb.d.ts +671 -0
  48. package/lib/generated/partitions-service.pb.d.ts +1 -0
  49. package/lib/generated/partitions-service.pbconf.d.ts +6 -0
  50. package/lib/generated/partitions-service.pbsc.d.ts +54 -0
  51. package/lib/generated/result-status.pb.d.ts +7 -0
  52. package/lib/generated/results-common.pb.d.ts +664 -0
  53. package/lib/generated/results-service.pb.d.ts +1 -0
  54. package/lib/generated/results-service.pbconf.d.ts +6 -0
  55. package/lib/generated/results-service.pbsc.d.ts +54 -0
  56. package/lib/generated/session-status.pb.d.ts +5 -0
  57. package/lib/generated/sessions-common.pb.d.ts +965 -0
  58. package/lib/generated/sessions-service.pb.d.ts +1 -0
  59. package/lib/generated/sessions-service.pbconf.d.ts +6 -0
  60. package/lib/generated/sessions-service.pbsc.d.ts +86 -0
  61. package/lib/generated/task-status.pb.d.ts +13 -0
  62. package/lib/generated/tasks-common.pb.d.ts +1328 -0
  63. package/lib/generated/tasks-service.pb.d.ts +1 -0
  64. package/lib/generated/tasks-service.pbconf.d.ts +6 -0
  65. package/lib/generated/tasks-service.pbsc.d.ts +102 -0
  66. package/lib/index.d.ts +15 -0
  67. package/package.json +52 -0
  68. package/public-api.d.ts +1 -0
@@ -0,0 +1,1169 @@
1
+ import { BinaryReader, BinaryWriter } from 'google-protobuf';
2
+ /**
3
+ * Message implementation for armonik.api.grpc.v1.partitions.PartitionRaw
4
+ */
5
+ export class PartitionRaw {
6
+ /**
7
+ * Deserialize binary data to message
8
+ * @param instance message instance
9
+ */
10
+ static deserializeBinary(bytes) {
11
+ const instance = new PartitionRaw();
12
+ PartitionRaw.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
13
+ return instance;
14
+ }
15
+ /**
16
+ * Check all the properties and set default protobuf values if necessary
17
+ * @param _instance message instance
18
+ */
19
+ static refineValues(_instance) {
20
+ _instance.id = _instance.id || '';
21
+ _instance.parentPartitionIds = _instance.parentPartitionIds || [];
22
+ _instance.podReserved = _instance.podReserved || '0';
23
+ _instance.podMax = _instance.podMax || '0';
24
+ _instance.podConfiguration = _instance.podConfiguration || {};
25
+ _instance.preemptionPercentage = _instance.preemptionPercentage || '0';
26
+ _instance.priority = _instance.priority || '0';
27
+ }
28
+ /**
29
+ * Deserializes / reads binary message into message instance using provided binary reader
30
+ * @param _instance message instance
31
+ * @param _reader binary reader instance
32
+ */
33
+ static deserializeBinaryFromReader(_instance, _reader) {
34
+ while (_reader.nextField()) {
35
+ if (_reader.isEndGroup())
36
+ break;
37
+ switch (_reader.getFieldNumber()) {
38
+ case 1:
39
+ _instance.id = _reader.readString();
40
+ break;
41
+ case 2:
42
+ (_instance.parentPartitionIds =
43
+ _instance.parentPartitionIds || []).push(_reader.readString());
44
+ break;
45
+ case 3:
46
+ _instance.podReserved = _reader.readInt64String();
47
+ break;
48
+ case 4:
49
+ _instance.podMax = _reader.readInt64String();
50
+ break;
51
+ case 7:
52
+ const msg_7 = {};
53
+ _reader.readMessage(msg_7, PartitionRaw.PodConfigurationEntry.deserializeBinaryFromReader);
54
+ _instance.podConfiguration = _instance.podConfiguration || {};
55
+ _instance.podConfiguration[msg_7.key] = msg_7.value;
56
+ break;
57
+ case 5:
58
+ _instance.preemptionPercentage = _reader.readInt64String();
59
+ break;
60
+ case 6:
61
+ _instance.priority = _reader.readInt64String();
62
+ break;
63
+ default:
64
+ _reader.skipField();
65
+ }
66
+ }
67
+ PartitionRaw.refineValues(_instance);
68
+ }
69
+ /**
70
+ * Serializes a message to binary format using provided binary reader
71
+ * @param _instance message instance
72
+ * @param _writer binary writer instance
73
+ */
74
+ static serializeBinaryToWriter(_instance, _writer) {
75
+ if (_instance.id) {
76
+ _writer.writeString(1, _instance.id);
77
+ }
78
+ if (_instance.parentPartitionIds && _instance.parentPartitionIds.length) {
79
+ _writer.writeRepeatedString(2, _instance.parentPartitionIds);
80
+ }
81
+ if (_instance.podReserved) {
82
+ _writer.writeInt64String(3, _instance.podReserved);
83
+ }
84
+ if (_instance.podMax) {
85
+ _writer.writeInt64String(4, _instance.podMax);
86
+ }
87
+ if (!!_instance.podConfiguration) {
88
+ const keys_7 = Object.keys(_instance.podConfiguration);
89
+ if (keys_7.length) {
90
+ const repeated_7 = keys_7
91
+ .map(key => ({
92
+ key: key,
93
+ value: _instance.podConfiguration[key]
94
+ }))
95
+ .reduce((r, v) => [...r, v], []);
96
+ _writer.writeRepeatedMessage(7, repeated_7, PartitionRaw.PodConfigurationEntry.serializeBinaryToWriter);
97
+ }
98
+ }
99
+ if (_instance.preemptionPercentage) {
100
+ _writer.writeInt64String(5, _instance.preemptionPercentage);
101
+ }
102
+ if (_instance.priority) {
103
+ _writer.writeInt64String(6, _instance.priority);
104
+ }
105
+ }
106
+ /**
107
+ * Message constructor. Initializes the properties and applies default Protobuf values if necessary
108
+ * @param _value initial values object or instance of PartitionRaw to deeply clone from
109
+ */
110
+ constructor(_value) {
111
+ _value = _value || {};
112
+ this.id = _value.id;
113
+ this.parentPartitionIds = (_value.parentPartitionIds || []).slice();
114
+ this.podReserved = _value.podReserved;
115
+ this.podMax = _value.podMax;
116
+ (this.podConfiguration = _value.podConfiguration
117
+ ? Object.keys(_value.podConfiguration).reduce((r, k) => ({ ...r, [k]: _value.podConfiguration[k] }), {})
118
+ : {}),
119
+ (this.preemptionPercentage = _value.preemptionPercentage);
120
+ this.priority = _value.priority;
121
+ PartitionRaw.refineValues(this);
122
+ }
123
+ get id() {
124
+ return this._id;
125
+ }
126
+ set id(value) {
127
+ this._id = value;
128
+ }
129
+ get parentPartitionIds() {
130
+ return this._parentPartitionIds;
131
+ }
132
+ set parentPartitionIds(value) {
133
+ this._parentPartitionIds = value;
134
+ }
135
+ get podReserved() {
136
+ return this._podReserved;
137
+ }
138
+ set podReserved(value) {
139
+ this._podReserved = value;
140
+ }
141
+ get podMax() {
142
+ return this._podMax;
143
+ }
144
+ set podMax(value) {
145
+ this._podMax = value;
146
+ }
147
+ get podConfiguration() {
148
+ return this._podConfiguration;
149
+ }
150
+ set podConfiguration(value) {
151
+ this._podConfiguration = value;
152
+ }
153
+ get preemptionPercentage() {
154
+ return this._preemptionPercentage;
155
+ }
156
+ set preemptionPercentage(value) {
157
+ this._preemptionPercentage = value;
158
+ }
159
+ get priority() {
160
+ return this._priority;
161
+ }
162
+ set priority(value) {
163
+ this._priority = value;
164
+ }
165
+ /**
166
+ * Serialize message to binary data
167
+ * @param instance message instance
168
+ */
169
+ serializeBinary() {
170
+ const writer = new BinaryWriter();
171
+ PartitionRaw.serializeBinaryToWriter(this, writer);
172
+ return writer.getResultBuffer();
173
+ }
174
+ /**
175
+ * Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
176
+ */
177
+ toObject() {
178
+ return {
179
+ id: this.id,
180
+ parentPartitionIds: (this.parentPartitionIds || []).slice(),
181
+ podReserved: this.podReserved,
182
+ podMax: this.podMax,
183
+ podConfiguration: this.podConfiguration
184
+ ? Object.keys(this.podConfiguration).reduce((r, k) => ({ ...r, [k]: this.podConfiguration[k] }), {})
185
+ : {},
186
+ preemptionPercentage: this.preemptionPercentage,
187
+ priority: this.priority
188
+ };
189
+ }
190
+ /**
191
+ * Convenience method to support JSON.stringify(message), replicates the structure of toObject()
192
+ */
193
+ toJSON() {
194
+ return this.toObject();
195
+ }
196
+ /**
197
+ * Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
198
+ * Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
199
+ * If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
200
+ */
201
+ toProtobufJSON(
202
+ // @ts-ignore
203
+ options) {
204
+ return {
205
+ id: this.id,
206
+ parentPartitionIds: (this.parentPartitionIds || []).slice(),
207
+ podReserved: this.podReserved,
208
+ podMax: this.podMax,
209
+ podConfiguration: this.podConfiguration
210
+ ? Object.keys(this.podConfiguration).reduce((r, k) => ({ ...r, [k]: this.podConfiguration[k] }), {})
211
+ : {},
212
+ preemptionPercentage: this.preemptionPercentage,
213
+ priority: this.priority
214
+ };
215
+ }
216
+ }
217
+ PartitionRaw.id = 'armonik.api.grpc.v1.partitions.PartitionRaw';
218
+ (function (PartitionRaw) {
219
+ /**
220
+ * Message implementation for armonik.api.grpc.v1.partitions.PartitionRaw.PodConfigurationEntry
221
+ */
222
+ class PodConfigurationEntry {
223
+ /**
224
+ * Deserialize binary data to message
225
+ * @param instance message instance
226
+ */
227
+ static deserializeBinary(bytes) {
228
+ const instance = new PodConfigurationEntry();
229
+ PodConfigurationEntry.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
230
+ return instance;
231
+ }
232
+ /**
233
+ * Check all the properties and set default protobuf values if necessary
234
+ * @param _instance message instance
235
+ */
236
+ static refineValues(_instance) {
237
+ _instance.key = _instance.key || '';
238
+ _instance.value = _instance.value || '';
239
+ }
240
+ /**
241
+ * Deserializes / reads binary message into message instance using provided binary reader
242
+ * @param _instance message instance
243
+ * @param _reader binary reader instance
244
+ */
245
+ static deserializeBinaryFromReader(_instance, _reader) {
246
+ while (_reader.nextField()) {
247
+ if (_reader.isEndGroup())
248
+ break;
249
+ switch (_reader.getFieldNumber()) {
250
+ case 1:
251
+ _instance.key = _reader.readString();
252
+ break;
253
+ case 2:
254
+ _instance.value = _reader.readString();
255
+ break;
256
+ default:
257
+ _reader.skipField();
258
+ }
259
+ }
260
+ PodConfigurationEntry.refineValues(_instance);
261
+ }
262
+ /**
263
+ * Serializes a message to binary format using provided binary reader
264
+ * @param _instance message instance
265
+ * @param _writer binary writer instance
266
+ */
267
+ static serializeBinaryToWriter(_instance, _writer) {
268
+ if (_instance.key) {
269
+ _writer.writeString(1, _instance.key);
270
+ }
271
+ if (_instance.value) {
272
+ _writer.writeString(2, _instance.value);
273
+ }
274
+ }
275
+ /**
276
+ * Message constructor. Initializes the properties and applies default Protobuf values if necessary
277
+ * @param _value initial values object or instance of PodConfigurationEntry to deeply clone from
278
+ */
279
+ constructor(_value) {
280
+ _value = _value || {};
281
+ this.key = _value.key;
282
+ this.value = _value.value;
283
+ PodConfigurationEntry.refineValues(this);
284
+ }
285
+ get key() {
286
+ return this._key;
287
+ }
288
+ set key(value) {
289
+ this._key = value;
290
+ }
291
+ get value() {
292
+ return this._value;
293
+ }
294
+ set value(value) {
295
+ this._value = value;
296
+ }
297
+ /**
298
+ * Serialize message to binary data
299
+ * @param instance message instance
300
+ */
301
+ serializeBinary() {
302
+ const writer = new BinaryWriter();
303
+ PodConfigurationEntry.serializeBinaryToWriter(this, writer);
304
+ return writer.getResultBuffer();
305
+ }
306
+ /**
307
+ * Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
308
+ */
309
+ toObject() {
310
+ return {
311
+ key: this.key,
312
+ value: this.value
313
+ };
314
+ }
315
+ /**
316
+ * Convenience method to support JSON.stringify(message), replicates the structure of toObject()
317
+ */
318
+ toJSON() {
319
+ return this.toObject();
320
+ }
321
+ /**
322
+ * Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
323
+ * Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
324
+ * If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
325
+ */
326
+ toProtobufJSON(
327
+ // @ts-ignore
328
+ options) {
329
+ return {
330
+ key: this.key,
331
+ value: this.value
332
+ };
333
+ }
334
+ }
335
+ PodConfigurationEntry.id = 'armonik.api.grpc.v1.partitions.PartitionRaw.PodConfigurationEntry';
336
+ PartitionRaw.PodConfigurationEntry = PodConfigurationEntry;
337
+ })(PartitionRaw || (PartitionRaw = {}));
338
+ /**
339
+ * Message implementation for armonik.api.grpc.v1.partitions.ListPartitionsRequest
340
+ */
341
+ export class ListPartitionsRequest {
342
+ /**
343
+ * Deserialize binary data to message
344
+ * @param instance message instance
345
+ */
346
+ static deserializeBinary(bytes) {
347
+ const instance = new ListPartitionsRequest();
348
+ ListPartitionsRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
349
+ return instance;
350
+ }
351
+ /**
352
+ * Check all the properties and set default protobuf values if necessary
353
+ * @param _instance message instance
354
+ */
355
+ static refineValues(_instance) {
356
+ _instance.page = _instance.page || 0;
357
+ _instance.pageSize = _instance.pageSize || 0;
358
+ _instance.filter = _instance.filter || undefined;
359
+ _instance.sort = _instance.sort || undefined;
360
+ }
361
+ /**
362
+ * Deserializes / reads binary message into message instance using provided binary reader
363
+ * @param _instance message instance
364
+ * @param _reader binary reader instance
365
+ */
366
+ static deserializeBinaryFromReader(_instance, _reader) {
367
+ while (_reader.nextField()) {
368
+ if (_reader.isEndGroup())
369
+ break;
370
+ switch (_reader.getFieldNumber()) {
371
+ case 1:
372
+ _instance.page = _reader.readInt32();
373
+ break;
374
+ case 2:
375
+ _instance.pageSize = _reader.readInt32();
376
+ break;
377
+ case 3:
378
+ _instance.filter = new ListPartitionsRequest.Filter();
379
+ _reader.readMessage(_instance.filter, ListPartitionsRequest.Filter.deserializeBinaryFromReader);
380
+ break;
381
+ case 4:
382
+ _instance.sort = new ListPartitionsRequest.Sort();
383
+ _reader.readMessage(_instance.sort, ListPartitionsRequest.Sort.deserializeBinaryFromReader);
384
+ break;
385
+ default:
386
+ _reader.skipField();
387
+ }
388
+ }
389
+ ListPartitionsRequest.refineValues(_instance);
390
+ }
391
+ /**
392
+ * Serializes a message to binary format using provided binary reader
393
+ * @param _instance message instance
394
+ * @param _writer binary writer instance
395
+ */
396
+ static serializeBinaryToWriter(_instance, _writer) {
397
+ if (_instance.page) {
398
+ _writer.writeInt32(1, _instance.page);
399
+ }
400
+ if (_instance.pageSize) {
401
+ _writer.writeInt32(2, _instance.pageSize);
402
+ }
403
+ if (_instance.filter) {
404
+ _writer.writeMessage(3, _instance.filter, ListPartitionsRequest.Filter.serializeBinaryToWriter);
405
+ }
406
+ if (_instance.sort) {
407
+ _writer.writeMessage(4, _instance.sort, ListPartitionsRequest.Sort.serializeBinaryToWriter);
408
+ }
409
+ }
410
+ /**
411
+ * Message constructor. Initializes the properties and applies default Protobuf values if necessary
412
+ * @param _value initial values object or instance of ListPartitionsRequest to deeply clone from
413
+ */
414
+ constructor(_value) {
415
+ _value = _value || {};
416
+ this.page = _value.page;
417
+ this.pageSize = _value.pageSize;
418
+ this.filter = _value.filter
419
+ ? new ListPartitionsRequest.Filter(_value.filter)
420
+ : undefined;
421
+ this.sort = _value.sort
422
+ ? new ListPartitionsRequest.Sort(_value.sort)
423
+ : undefined;
424
+ ListPartitionsRequest.refineValues(this);
425
+ }
426
+ get page() {
427
+ return this._page;
428
+ }
429
+ set page(value) {
430
+ this._page = value;
431
+ }
432
+ get pageSize() {
433
+ return this._pageSize;
434
+ }
435
+ set pageSize(value) {
436
+ this._pageSize = value;
437
+ }
438
+ get filter() {
439
+ return this._filter;
440
+ }
441
+ set filter(value) {
442
+ this._filter = value;
443
+ }
444
+ get sort() {
445
+ return this._sort;
446
+ }
447
+ set sort(value) {
448
+ this._sort = value;
449
+ }
450
+ /**
451
+ * Serialize message to binary data
452
+ * @param instance message instance
453
+ */
454
+ serializeBinary() {
455
+ const writer = new BinaryWriter();
456
+ ListPartitionsRequest.serializeBinaryToWriter(this, writer);
457
+ return writer.getResultBuffer();
458
+ }
459
+ /**
460
+ * Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
461
+ */
462
+ toObject() {
463
+ return {
464
+ page: this.page,
465
+ pageSize: this.pageSize,
466
+ filter: this.filter ? this.filter.toObject() : undefined,
467
+ sort: this.sort ? this.sort.toObject() : undefined
468
+ };
469
+ }
470
+ /**
471
+ * Convenience method to support JSON.stringify(message), replicates the structure of toObject()
472
+ */
473
+ toJSON() {
474
+ return this.toObject();
475
+ }
476
+ /**
477
+ * Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
478
+ * Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
479
+ * If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
480
+ */
481
+ toProtobufJSON(
482
+ // @ts-ignore
483
+ options) {
484
+ return {
485
+ page: this.page,
486
+ pageSize: this.pageSize,
487
+ filter: this.filter ? this.filter.toProtobufJSON(options) : null,
488
+ sort: this.sort ? this.sort.toProtobufJSON(options) : null
489
+ };
490
+ }
491
+ }
492
+ ListPartitionsRequest.id = 'armonik.api.grpc.v1.partitions.ListPartitionsRequest';
493
+ (function (ListPartitionsRequest) {
494
+ let OrderByField;
495
+ (function (OrderByField) {
496
+ OrderByField[OrderByField["ORDER_BY_FIELD_UNSPECIFIED"] = 0] = "ORDER_BY_FIELD_UNSPECIFIED";
497
+ OrderByField[OrderByField["ORDER_BY_FIELD_ID"] = 1] = "ORDER_BY_FIELD_ID";
498
+ OrderByField[OrderByField["ORDER_BY_FIELD_PARENT_PARTITION_IDS"] = 2] = "ORDER_BY_FIELD_PARENT_PARTITION_IDS";
499
+ OrderByField[OrderByField["ORDER_BY_FIELD_POD_RESERVED"] = 3] = "ORDER_BY_FIELD_POD_RESERVED";
500
+ OrderByField[OrderByField["ORDER_BY_FIELD_POD_MAX"] = 4] = "ORDER_BY_FIELD_POD_MAX";
501
+ OrderByField[OrderByField["ORDER_BY_FIELD_PREEMPTION_PERCENTAGE"] = 5] = "ORDER_BY_FIELD_PREEMPTION_PERCENTAGE";
502
+ OrderByField[OrderByField["ORDER_BY_FIELD_PRIORITY"] = 6] = "ORDER_BY_FIELD_PRIORITY";
503
+ })(OrderByField = ListPartitionsRequest.OrderByField || (ListPartitionsRequest.OrderByField = {}));
504
+ let OrderDirection;
505
+ (function (OrderDirection) {
506
+ OrderDirection[OrderDirection["ORDER_DIRECTION_UNSPECIFIED"] = 0] = "ORDER_DIRECTION_UNSPECIFIED";
507
+ OrderDirection[OrderDirection["ORDER_DIRECTION_ASC"] = 1] = "ORDER_DIRECTION_ASC";
508
+ OrderDirection[OrderDirection["ORDER_DIRECTION_DESC"] = 2] = "ORDER_DIRECTION_DESC";
509
+ })(OrderDirection = ListPartitionsRequest.OrderDirection || (ListPartitionsRequest.OrderDirection = {}));
510
+ /**
511
+ * Message implementation for armonik.api.grpc.v1.partitions.ListPartitionsRequest.Filter
512
+ */
513
+ class Filter {
514
+ /**
515
+ * Deserialize binary data to message
516
+ * @param instance message instance
517
+ */
518
+ static deserializeBinary(bytes) {
519
+ const instance = new Filter();
520
+ Filter.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
521
+ return instance;
522
+ }
523
+ /**
524
+ * Check all the properties and set default protobuf values if necessary
525
+ * @param _instance message instance
526
+ */
527
+ static refineValues(_instance) {
528
+ _instance.id = _instance.id || '';
529
+ _instance.parentPartitionId = _instance.parentPartitionId || '';
530
+ _instance.podReserved = _instance.podReserved || 0;
531
+ _instance.podMax = _instance.podMax || 0;
532
+ _instance.preemptionPercentage = _instance.preemptionPercentage || 0;
533
+ _instance.priority = _instance.priority || 0;
534
+ }
535
+ /**
536
+ * Deserializes / reads binary message into message instance using provided binary reader
537
+ * @param _instance message instance
538
+ * @param _reader binary reader instance
539
+ */
540
+ static deserializeBinaryFromReader(_instance, _reader) {
541
+ while (_reader.nextField()) {
542
+ if (_reader.isEndGroup())
543
+ break;
544
+ switch (_reader.getFieldNumber()) {
545
+ case 1:
546
+ _instance.id = _reader.readString();
547
+ break;
548
+ case 2:
549
+ _instance.parentPartitionId = _reader.readString();
550
+ break;
551
+ case 3:
552
+ _instance.podReserved = _reader.readInt32();
553
+ break;
554
+ case 4:
555
+ _instance.podMax = _reader.readInt32();
556
+ break;
557
+ case 5:
558
+ _instance.preemptionPercentage = _reader.readInt32();
559
+ break;
560
+ case 6:
561
+ _instance.priority = _reader.readInt32();
562
+ break;
563
+ default:
564
+ _reader.skipField();
565
+ }
566
+ }
567
+ Filter.refineValues(_instance);
568
+ }
569
+ /**
570
+ * Serializes a message to binary format using provided binary reader
571
+ * @param _instance message instance
572
+ * @param _writer binary writer instance
573
+ */
574
+ static serializeBinaryToWriter(_instance, _writer) {
575
+ if (_instance.id) {
576
+ _writer.writeString(1, _instance.id);
577
+ }
578
+ if (_instance.parentPartitionId) {
579
+ _writer.writeString(2, _instance.parentPartitionId);
580
+ }
581
+ if (_instance.podReserved) {
582
+ _writer.writeInt32(3, _instance.podReserved);
583
+ }
584
+ if (_instance.podMax) {
585
+ _writer.writeInt32(4, _instance.podMax);
586
+ }
587
+ if (_instance.preemptionPercentage) {
588
+ _writer.writeInt32(5, _instance.preemptionPercentage);
589
+ }
590
+ if (_instance.priority) {
591
+ _writer.writeInt32(6, _instance.priority);
592
+ }
593
+ }
594
+ /**
595
+ * Message constructor. Initializes the properties and applies default Protobuf values if necessary
596
+ * @param _value initial values object or instance of Filter to deeply clone from
597
+ */
598
+ constructor(_value) {
599
+ _value = _value || {};
600
+ this.id = _value.id;
601
+ this.parentPartitionId = _value.parentPartitionId;
602
+ this.podReserved = _value.podReserved;
603
+ this.podMax = _value.podMax;
604
+ this.preemptionPercentage = _value.preemptionPercentage;
605
+ this.priority = _value.priority;
606
+ Filter.refineValues(this);
607
+ }
608
+ get id() {
609
+ return this._id;
610
+ }
611
+ set id(value) {
612
+ this._id = value;
613
+ }
614
+ get parentPartitionId() {
615
+ return this._parentPartitionId;
616
+ }
617
+ set parentPartitionId(value) {
618
+ this._parentPartitionId = value;
619
+ }
620
+ get podReserved() {
621
+ return this._podReserved;
622
+ }
623
+ set podReserved(value) {
624
+ this._podReserved = value;
625
+ }
626
+ get podMax() {
627
+ return this._podMax;
628
+ }
629
+ set podMax(value) {
630
+ this._podMax = value;
631
+ }
632
+ get preemptionPercentage() {
633
+ return this._preemptionPercentage;
634
+ }
635
+ set preemptionPercentage(value) {
636
+ this._preemptionPercentage = value;
637
+ }
638
+ get priority() {
639
+ return this._priority;
640
+ }
641
+ set priority(value) {
642
+ this._priority = value;
643
+ }
644
+ /**
645
+ * Serialize message to binary data
646
+ * @param instance message instance
647
+ */
648
+ serializeBinary() {
649
+ const writer = new BinaryWriter();
650
+ Filter.serializeBinaryToWriter(this, writer);
651
+ return writer.getResultBuffer();
652
+ }
653
+ /**
654
+ * Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
655
+ */
656
+ toObject() {
657
+ return {
658
+ id: this.id,
659
+ parentPartitionId: this.parentPartitionId,
660
+ podReserved: this.podReserved,
661
+ podMax: this.podMax,
662
+ preemptionPercentage: this.preemptionPercentage,
663
+ priority: this.priority
664
+ };
665
+ }
666
+ /**
667
+ * Convenience method to support JSON.stringify(message), replicates the structure of toObject()
668
+ */
669
+ toJSON() {
670
+ return this.toObject();
671
+ }
672
+ /**
673
+ * Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
674
+ * Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
675
+ * If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
676
+ */
677
+ toProtobufJSON(
678
+ // @ts-ignore
679
+ options) {
680
+ return {
681
+ id: this.id,
682
+ parentPartitionId: this.parentPartitionId,
683
+ podReserved: this.podReserved,
684
+ podMax: this.podMax,
685
+ preemptionPercentage: this.preemptionPercentage,
686
+ priority: this.priority
687
+ };
688
+ }
689
+ }
690
+ Filter.id = 'armonik.api.grpc.v1.partitions.ListPartitionsRequest.Filter';
691
+ ListPartitionsRequest.Filter = Filter;
692
+ /**
693
+ * Message implementation for armonik.api.grpc.v1.partitions.ListPartitionsRequest.Sort
694
+ */
695
+ class Sort {
696
+ /**
697
+ * Deserialize binary data to message
698
+ * @param instance message instance
699
+ */
700
+ static deserializeBinary(bytes) {
701
+ const instance = new Sort();
702
+ Sort.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
703
+ return instance;
704
+ }
705
+ /**
706
+ * Check all the properties and set default protobuf values if necessary
707
+ * @param _instance message instance
708
+ */
709
+ static refineValues(_instance) {
710
+ _instance.field = _instance.field || 0;
711
+ _instance.direction = _instance.direction || 0;
712
+ }
713
+ /**
714
+ * Deserializes / reads binary message into message instance using provided binary reader
715
+ * @param _instance message instance
716
+ * @param _reader binary reader instance
717
+ */
718
+ static deserializeBinaryFromReader(_instance, _reader) {
719
+ while (_reader.nextField()) {
720
+ if (_reader.isEndGroup())
721
+ break;
722
+ switch (_reader.getFieldNumber()) {
723
+ case 1:
724
+ _instance.field = _reader.readEnum();
725
+ break;
726
+ case 2:
727
+ _instance.direction = _reader.readEnum();
728
+ break;
729
+ default:
730
+ _reader.skipField();
731
+ }
732
+ }
733
+ Sort.refineValues(_instance);
734
+ }
735
+ /**
736
+ * Serializes a message to binary format using provided binary reader
737
+ * @param _instance message instance
738
+ * @param _writer binary writer instance
739
+ */
740
+ static serializeBinaryToWriter(_instance, _writer) {
741
+ if (_instance.field) {
742
+ _writer.writeEnum(1, _instance.field);
743
+ }
744
+ if (_instance.direction) {
745
+ _writer.writeEnum(2, _instance.direction);
746
+ }
747
+ }
748
+ /**
749
+ * Message constructor. Initializes the properties and applies default Protobuf values if necessary
750
+ * @param _value initial values object or instance of Sort to deeply clone from
751
+ */
752
+ constructor(_value) {
753
+ _value = _value || {};
754
+ this.field = _value.field;
755
+ this.direction = _value.direction;
756
+ Sort.refineValues(this);
757
+ }
758
+ get field() {
759
+ return this._field;
760
+ }
761
+ set field(value) {
762
+ this._field = value;
763
+ }
764
+ get direction() {
765
+ return this._direction;
766
+ }
767
+ set direction(value) {
768
+ this._direction = value;
769
+ }
770
+ /**
771
+ * Serialize message to binary data
772
+ * @param instance message instance
773
+ */
774
+ serializeBinary() {
775
+ const writer = new BinaryWriter();
776
+ Sort.serializeBinaryToWriter(this, writer);
777
+ return writer.getResultBuffer();
778
+ }
779
+ /**
780
+ * Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
781
+ */
782
+ toObject() {
783
+ return {
784
+ field: this.field,
785
+ direction: this.direction
786
+ };
787
+ }
788
+ /**
789
+ * Convenience method to support JSON.stringify(message), replicates the structure of toObject()
790
+ */
791
+ toJSON() {
792
+ return this.toObject();
793
+ }
794
+ /**
795
+ * Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
796
+ * Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
797
+ * If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
798
+ */
799
+ toProtobufJSON(
800
+ // @ts-ignore
801
+ options) {
802
+ return {
803
+ field: ListPartitionsRequest.OrderByField[this.field === null || this.field === undefined ? 0 : this.field],
804
+ direction: ListPartitionsRequest.OrderDirection[this.direction === null || this.direction === undefined
805
+ ? 0
806
+ : this.direction]
807
+ };
808
+ }
809
+ }
810
+ Sort.id = 'armonik.api.grpc.v1.partitions.ListPartitionsRequest.Sort';
811
+ ListPartitionsRequest.Sort = Sort;
812
+ })(ListPartitionsRequest || (ListPartitionsRequest = {}));
813
+ /**
814
+ * Message implementation for armonik.api.grpc.v1.partitions.ListPartitionsResponse
815
+ */
816
+ export class ListPartitionsResponse {
817
+ /**
818
+ * Deserialize binary data to message
819
+ * @param instance message instance
820
+ */
821
+ static deserializeBinary(bytes) {
822
+ const instance = new ListPartitionsResponse();
823
+ ListPartitionsResponse.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
824
+ return instance;
825
+ }
826
+ /**
827
+ * Check all the properties and set default protobuf values if necessary
828
+ * @param _instance message instance
829
+ */
830
+ static refineValues(_instance) {
831
+ _instance.partitions = _instance.partitions || [];
832
+ _instance.page = _instance.page || 0;
833
+ _instance.pageSize = _instance.pageSize || 0;
834
+ _instance.total = _instance.total || 0;
835
+ }
836
+ /**
837
+ * Deserializes / reads binary message into message instance using provided binary reader
838
+ * @param _instance message instance
839
+ * @param _reader binary reader instance
840
+ */
841
+ static deserializeBinaryFromReader(_instance, _reader) {
842
+ while (_reader.nextField()) {
843
+ if (_reader.isEndGroup())
844
+ break;
845
+ switch (_reader.getFieldNumber()) {
846
+ case 1:
847
+ const messageInitializer1 = new PartitionRaw();
848
+ _reader.readMessage(messageInitializer1, PartitionRaw.deserializeBinaryFromReader);
849
+ (_instance.partitions = _instance.partitions || []).push(messageInitializer1);
850
+ break;
851
+ case 2:
852
+ _instance.page = _reader.readInt32();
853
+ break;
854
+ case 3:
855
+ _instance.pageSize = _reader.readInt32();
856
+ break;
857
+ case 4:
858
+ _instance.total = _reader.readInt32();
859
+ break;
860
+ default:
861
+ _reader.skipField();
862
+ }
863
+ }
864
+ ListPartitionsResponse.refineValues(_instance);
865
+ }
866
+ /**
867
+ * Serializes a message to binary format using provided binary reader
868
+ * @param _instance message instance
869
+ * @param _writer binary writer instance
870
+ */
871
+ static serializeBinaryToWriter(_instance, _writer) {
872
+ if (_instance.partitions && _instance.partitions.length) {
873
+ _writer.writeRepeatedMessage(1, _instance.partitions, PartitionRaw.serializeBinaryToWriter);
874
+ }
875
+ if (_instance.page) {
876
+ _writer.writeInt32(2, _instance.page);
877
+ }
878
+ if (_instance.pageSize) {
879
+ _writer.writeInt32(3, _instance.pageSize);
880
+ }
881
+ if (_instance.total) {
882
+ _writer.writeInt32(4, _instance.total);
883
+ }
884
+ }
885
+ /**
886
+ * Message constructor. Initializes the properties and applies default Protobuf values if necessary
887
+ * @param _value initial values object or instance of ListPartitionsResponse to deeply clone from
888
+ */
889
+ constructor(_value) {
890
+ _value = _value || {};
891
+ this.partitions = (_value.partitions || []).map(m => new PartitionRaw(m));
892
+ this.page = _value.page;
893
+ this.pageSize = _value.pageSize;
894
+ this.total = _value.total;
895
+ ListPartitionsResponse.refineValues(this);
896
+ }
897
+ get partitions() {
898
+ return this._partitions;
899
+ }
900
+ set partitions(value) {
901
+ this._partitions = value;
902
+ }
903
+ get page() {
904
+ return this._page;
905
+ }
906
+ set page(value) {
907
+ this._page = value;
908
+ }
909
+ get pageSize() {
910
+ return this._pageSize;
911
+ }
912
+ set pageSize(value) {
913
+ this._pageSize = value;
914
+ }
915
+ get total() {
916
+ return this._total;
917
+ }
918
+ set total(value) {
919
+ this._total = value;
920
+ }
921
+ /**
922
+ * Serialize message to binary data
923
+ * @param instance message instance
924
+ */
925
+ serializeBinary() {
926
+ const writer = new BinaryWriter();
927
+ ListPartitionsResponse.serializeBinaryToWriter(this, writer);
928
+ return writer.getResultBuffer();
929
+ }
930
+ /**
931
+ * Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
932
+ */
933
+ toObject() {
934
+ return {
935
+ partitions: (this.partitions || []).map(m => m.toObject()),
936
+ page: this.page,
937
+ pageSize: this.pageSize,
938
+ total: this.total
939
+ };
940
+ }
941
+ /**
942
+ * Convenience method to support JSON.stringify(message), replicates the structure of toObject()
943
+ */
944
+ toJSON() {
945
+ return this.toObject();
946
+ }
947
+ /**
948
+ * Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
949
+ * Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
950
+ * If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
951
+ */
952
+ toProtobufJSON(
953
+ // @ts-ignore
954
+ options) {
955
+ return {
956
+ partitions: (this.partitions || []).map(m => m.toProtobufJSON(options)),
957
+ page: this.page,
958
+ pageSize: this.pageSize,
959
+ total: this.total
960
+ };
961
+ }
962
+ }
963
+ ListPartitionsResponse.id = 'armonik.api.grpc.v1.partitions.ListPartitionsResponse';
964
+ /**
965
+ * Message implementation for armonik.api.grpc.v1.partitions.GetPartitionRequest
966
+ */
967
+ export class GetPartitionRequest {
968
+ /**
969
+ * Deserialize binary data to message
970
+ * @param instance message instance
971
+ */
972
+ static deserializeBinary(bytes) {
973
+ const instance = new GetPartitionRequest();
974
+ GetPartitionRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
975
+ return instance;
976
+ }
977
+ /**
978
+ * Check all the properties and set default protobuf values if necessary
979
+ * @param _instance message instance
980
+ */
981
+ static refineValues(_instance) {
982
+ _instance.id = _instance.id || '';
983
+ }
984
+ /**
985
+ * Deserializes / reads binary message into message instance using provided binary reader
986
+ * @param _instance message instance
987
+ * @param _reader binary reader instance
988
+ */
989
+ static deserializeBinaryFromReader(_instance, _reader) {
990
+ while (_reader.nextField()) {
991
+ if (_reader.isEndGroup())
992
+ break;
993
+ switch (_reader.getFieldNumber()) {
994
+ case 1:
995
+ _instance.id = _reader.readString();
996
+ break;
997
+ default:
998
+ _reader.skipField();
999
+ }
1000
+ }
1001
+ GetPartitionRequest.refineValues(_instance);
1002
+ }
1003
+ /**
1004
+ * Serializes a message to binary format using provided binary reader
1005
+ * @param _instance message instance
1006
+ * @param _writer binary writer instance
1007
+ */
1008
+ static serializeBinaryToWriter(_instance, _writer) {
1009
+ if (_instance.id) {
1010
+ _writer.writeString(1, _instance.id);
1011
+ }
1012
+ }
1013
+ /**
1014
+ * Message constructor. Initializes the properties and applies default Protobuf values if necessary
1015
+ * @param _value initial values object or instance of GetPartitionRequest to deeply clone from
1016
+ */
1017
+ constructor(_value) {
1018
+ _value = _value || {};
1019
+ this.id = _value.id;
1020
+ GetPartitionRequest.refineValues(this);
1021
+ }
1022
+ get id() {
1023
+ return this._id;
1024
+ }
1025
+ set id(value) {
1026
+ this._id = value;
1027
+ }
1028
+ /**
1029
+ * Serialize message to binary data
1030
+ * @param instance message instance
1031
+ */
1032
+ serializeBinary() {
1033
+ const writer = new BinaryWriter();
1034
+ GetPartitionRequest.serializeBinaryToWriter(this, writer);
1035
+ return writer.getResultBuffer();
1036
+ }
1037
+ /**
1038
+ * Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
1039
+ */
1040
+ toObject() {
1041
+ return {
1042
+ id: this.id
1043
+ };
1044
+ }
1045
+ /**
1046
+ * Convenience method to support JSON.stringify(message), replicates the structure of toObject()
1047
+ */
1048
+ toJSON() {
1049
+ return this.toObject();
1050
+ }
1051
+ /**
1052
+ * Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
1053
+ * Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
1054
+ * If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
1055
+ */
1056
+ toProtobufJSON(
1057
+ // @ts-ignore
1058
+ options) {
1059
+ return {
1060
+ id: this.id
1061
+ };
1062
+ }
1063
+ }
1064
+ GetPartitionRequest.id = 'armonik.api.grpc.v1.partitions.GetPartitionRequest';
1065
+ /**
1066
+ * Message implementation for armonik.api.grpc.v1.partitions.GetPartitionResponse
1067
+ */
1068
+ export class GetPartitionResponse {
1069
+ /**
1070
+ * Deserialize binary data to message
1071
+ * @param instance message instance
1072
+ */
1073
+ static deserializeBinary(bytes) {
1074
+ const instance = new GetPartitionResponse();
1075
+ GetPartitionResponse.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
1076
+ return instance;
1077
+ }
1078
+ /**
1079
+ * Check all the properties and set default protobuf values if necessary
1080
+ * @param _instance message instance
1081
+ */
1082
+ static refineValues(_instance) {
1083
+ _instance.partition = _instance.partition || undefined;
1084
+ }
1085
+ /**
1086
+ * Deserializes / reads binary message into message instance using provided binary reader
1087
+ * @param _instance message instance
1088
+ * @param _reader binary reader instance
1089
+ */
1090
+ static deserializeBinaryFromReader(_instance, _reader) {
1091
+ while (_reader.nextField()) {
1092
+ if (_reader.isEndGroup())
1093
+ break;
1094
+ switch (_reader.getFieldNumber()) {
1095
+ case 1:
1096
+ _instance.partition = new PartitionRaw();
1097
+ _reader.readMessage(_instance.partition, PartitionRaw.deserializeBinaryFromReader);
1098
+ break;
1099
+ default:
1100
+ _reader.skipField();
1101
+ }
1102
+ }
1103
+ GetPartitionResponse.refineValues(_instance);
1104
+ }
1105
+ /**
1106
+ * Serializes a message to binary format using provided binary reader
1107
+ * @param _instance message instance
1108
+ * @param _writer binary writer instance
1109
+ */
1110
+ static serializeBinaryToWriter(_instance, _writer) {
1111
+ if (_instance.partition) {
1112
+ _writer.writeMessage(1, _instance.partition, PartitionRaw.serializeBinaryToWriter);
1113
+ }
1114
+ }
1115
+ /**
1116
+ * Message constructor. Initializes the properties and applies default Protobuf values if necessary
1117
+ * @param _value initial values object or instance of GetPartitionResponse to deeply clone from
1118
+ */
1119
+ constructor(_value) {
1120
+ _value = _value || {};
1121
+ this.partition = _value.partition
1122
+ ? new PartitionRaw(_value.partition)
1123
+ : undefined;
1124
+ GetPartitionResponse.refineValues(this);
1125
+ }
1126
+ get partition() {
1127
+ return this._partition;
1128
+ }
1129
+ set partition(value) {
1130
+ this._partition = value;
1131
+ }
1132
+ /**
1133
+ * Serialize message to binary data
1134
+ * @param instance message instance
1135
+ */
1136
+ serializeBinary() {
1137
+ const writer = new BinaryWriter();
1138
+ GetPartitionResponse.serializeBinaryToWriter(this, writer);
1139
+ return writer.getResultBuffer();
1140
+ }
1141
+ /**
1142
+ * Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
1143
+ */
1144
+ toObject() {
1145
+ return {
1146
+ partition: this.partition ? this.partition.toObject() : undefined
1147
+ };
1148
+ }
1149
+ /**
1150
+ * Convenience method to support JSON.stringify(message), replicates the structure of toObject()
1151
+ */
1152
+ toJSON() {
1153
+ return this.toObject();
1154
+ }
1155
+ /**
1156
+ * Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
1157
+ * Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
1158
+ * If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
1159
+ */
1160
+ toProtobufJSON(
1161
+ // @ts-ignore
1162
+ options) {
1163
+ return {
1164
+ partition: this.partition ? this.partition.toProtobufJSON(options) : null
1165
+ };
1166
+ }
1167
+ }
1168
+ GetPartitionResponse.id = 'armonik.api.grpc.v1.partitions.GetPartitionResponse';
1169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFydGl0aW9ucy1jb21tb24ucGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmVvY29uc3VsdGluZ2ZyL2FybW9uaWsuYXBpLmFuZ3VsYXIvc3JjL2xpYi9nZW5lcmF0ZWQvcGFydGl0aW9ucy1jb21tb24ucGIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBV0EsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQWMsTUFBTSxpQkFBaUIsQ0FBQztBQUV6RTs7R0FFRztBQUNILE1BQU0sT0FBTyxZQUFZO0lBR3ZCOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxLQUFpQjtRQUN4QyxNQUFNLFFBQVEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3BDLFlBQVksQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM1RSxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLFlBQVksQ0FBQyxTQUF1QjtRQUN6QyxTQUFTLENBQUMsRUFBRSxHQUFHLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ2xDLFNBQVMsQ0FBQyxrQkFBa0IsR0FBRyxTQUFTLENBQUMsa0JBQWtCLElBQUksRUFBRSxDQUFDO1FBQ2xFLFNBQVMsQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUM7UUFDckQsU0FBUyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQztRQUMzQyxTQUFTLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQztRQUM5RCxTQUFTLENBQUMsb0JBQW9CLEdBQUcsU0FBUyxDQUFDLG9CQUFvQixJQUFJLEdBQUcsQ0FBQztRQUN2RSxTQUFTLENBQUMsUUFBUSxHQUFHLFNB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U0FBUyxDQUFDLEtBQStCO1FBQzNDLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxlQUFlO1FBQ2IsTUFBTSxNQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsQyxvQkFBb0IsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDM0QsT0FBTyxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUTtRQUNOLE9BQU87WUFDTCxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUNsRSxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTTtRQUNKLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsY0FBYztJQUNaLGFBQWE7SUFDYixPQUErQjtRQUUvQixPQUFPO1lBQ0wsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO1NBQzFFLENBQUM7SUFDSixDQUFDOztBQS9ITSx1QkFBRSxHQUFHLHFEQUFxRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogdHNsaW50OmRpc2FibGUgKi9cbi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBAdHMtbm9jaGVja1xuLy9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRVxuLy8gRE8gTk9UIE1PRElGWSBJVCEgWU9VUiBDSEFOR0VTIFdJTEwgQkUgTE9TVFxuaW1wb3J0IHtcbiAgR3JwY01lc3NhZ2UsXG4gIFJlY3Vyc2l2ZVBhcnRpYWwsXG4gIFRvUHJvdG9idWZKU09OT3B0aW9uc1xufSBmcm9tICdAbmd4LWdycGMvY29tbW9uJztcbmltcG9ydCB7IEJpbmFyeVJlYWRlciwgQmluYXJ5V3JpdGVyLCBCeXRlU291cmNlIH0gZnJvbSAnZ29vZ2xlLXByb3RvYnVmJztcblxuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBhcm1vbmlrLmFwaS5ncnBjLnYxLnBhcnRpdGlvbnMuUGFydGl0aW9uUmF3XG4gKi9cbmV4cG9ydCBjbGFzcyBQYXJ0aXRpb25SYXcgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdhcm1vbmlrLmFwaS5ncnBjLnYxLnBhcnRpdGlvbnMuUGFydGl0aW9uUmF3JztcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgUGFydGl0aW9uUmF3KCk7XG4gICAgUGFydGl0aW9uUmF3LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihpbnN0YW5jZSwgbmV3IEJpbmFyeVJlYWRlcihieXRlcykpO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBhbGwgdGhlIHByb3BlcnRpZXMgYW5kIHNldCBkZWZhdWx0IHByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgcmVmaW5lVmFsdWVzKF9pbnN0YW5jZTogUGFydGl0aW9uUmF3KSB7XG4gICAgX2luc3RhbmNlLmlkID0gX2luc3RhbmNlLmlkIHx8ICcnO1xuICAgIF9pbnN0YW5jZS5wYXJlbnRQYXJ0aXRpb25JZHMgPSBfaW5zdGFuY2UucGFyZW50UGFydGl0aW9uSWRzIHx8IFtdO1xuICAgIF9pbnN0YW5jZS5wb2RSZXNlcnZlZCA9IF9pbnN0YW5jZS5wb2RSZXNlcnZlZCB8fCAnMCc7XG4gICAgX2luc3RhbmNlLnBvZE1heCA9IF9pbnN0YW5jZS5wb2RNYXggfHwgJzAnO1xuICAgIF9pbnN0YW5jZS5wb2RDb25maWd1cmF0aW9uID0gX2luc3RhbmNlLnBvZENvbmZpZ3VyYXRpb24gfHwge307XG4gICAgX2luc3RhbmNlLnByZWVtcHRpb25QZXJjZW50YWdlID0gX2luc3RhbmNlLnByZWVtcHRpb25QZXJjZW50YWdlIHx8ICcwJztcbiAgICBfaW5zdGFuY2UucHJpb3JpdHkgPSBfaW5zdGFuY2UucHJpb3JpdHkgfHwgJzAnO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplcyAvIHJlYWRzIGJpbmFyeSBtZXNzYWdlIGludG8gbWVzc2FnZSBpbnN0YW5jZSB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3JlYWRlciBiaW5hcnkgcmVhZGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgIF9pbnN0YW5jZTogUGFydGl0aW9uUmF3LFxuICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICApIHtcbiAgICB3aGlsZSAoX3JlYWRlci5uZXh0RmllbGQoKSkge1xuICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIF9pbnN0YW5jZS5pZCA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgKF9pbnN0YW5jZS5wYXJlbnRQYXJ0aXRpb25JZHMgPVxuICAgICAgICAgICAgX2luc3RhbmNlLnBhcmVudFBhcnRpdGlvbklkcyB8fCBbXSkucHVzaChfcmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBfaW5zdGFuY2UucG9kUmVzZXJ2ZWQgPSBfcmVhZGVyLnJlYWRJbnQ2NFN0cmluZygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgX2luc3RhbmNlLnBvZE1heCA9IF9yZWFkZXIucmVhZEludDY0U3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBjb25zdCBtc2dfNyA9IHt9IGFzIGFueTtcbiAgICAgICAgICBfcmVhZGVyLnJlYWRNZXNzYWdlKFxuICAgICAgICAgICAgbXNnXzcsXG4gICAgICAgICAgICBQYXJ0aXRpb25SYXcuUG9kQ29uZmlndXJhdGlvbkVudHJ5LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgX2luc3RhbmNlLnBvZENvbmZpZ3VyYXRpb24gPSBfaW5zdGFuY2UucG9kQ29uZmlndXJhdGlvbiB8fCB7fTtcbiAgICAgICAgICBfaW5zdGFuY2UucG9kQ29uZmlndXJhdGlvblttc2dfNy5rZXldID0gbXNnXzcudmFsdWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBfaW5zdGFuY2UucHJlZW1wdGlvblBlcmNlbnRhZ2UgPSBfcmVhZGVyLnJlYWRJbnQ2NFN0cmluZygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgX2luc3RhbmNlLnByaW9yaXR5ID0gX3JlYWRlci5yZWFkSW50NjRTdHJpbmcoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIFBhcnRpdGlvblJhdy5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICBfaW5zdGFuY2U6IFBhcnRpdGlvblJhdyxcbiAgICBfd3JpdGVyOiBCaW5hcnlXcml0ZXJcbiAgKSB7XG4gICAgaWYgKF9pbnN0YW5jZS5pZCkge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZygxLCBfaW5zdGFuY2UuaWQpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLnBhcmVudFBhcnRpdGlvbklkcyAmJiBfaW5zdGFuY2UucGFyZW50UGFydGl0aW9uSWRzLmxlbmd0aCkge1xuICAgICAgX3dyaXRlci53cml0ZVJlcGVhdGVkU3RyaW5nKDIsIF9pbnN0YW5jZS5wYXJlbnRQYXJ0aXRpb25JZHMpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLnBvZFJlc2VydmVkKSB7XG4gICAgICBfd3JpdGVyLndyaXRlSW50NjRTdHJpbmcoMywgX2luc3RhbmNlLnBvZFJlc2VydmVkKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5wb2RNYXgpIHtcbiAgICAgIF93cml0ZXIud3JpdGVJbnQ2NFN0cmluZyg0LCBfaW5zdGFuY2UucG9kTWF4KTtcbiAgICB9XG4gICAgaWYgKCEhX2luc3RhbmNlLnBvZENvbmZpZ3VyYXRpb24pIHtcbiAgICAgIGNvbnN0IGtleXNfNyA9IE9iamVjdC5rZXlzKF9pbnN0YW5jZS5wb2RDb25maWd1cmF0aW9uIGFzIGFueSk7XG5cbiAgICAgIGlmIChrZXlzXzcubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHJlcGVhdGVkXzcgPSBrZXlzXzdcbiAgICAgICAgICAubWFwKGtleSA9PiAoe1xuICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICB2YWx1ZTogKF9pbnN0YW5jZS5wb2RDb25maWd1cmF0aW9uIGFzIGFueSlba2V5XVxuICAgICAgICAgIH0pKVxuICAgICAgICAgIC5yZWR1Y2UoKHIsIHYpID0+IFsuLi5yLCB2XSwgW10gYXMgYW55W10pO1xuXG4gICAgICAgIF93cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICAgICAgNyxcbiAgICAgICAgICByZXBlYXRlZF83LFxuICAgICAgICAgIFBhcnRpdGlvblJhdy5Qb2RDb25maWd1cmF0aW9uRW50cnkuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5wcmVlbXB0aW9uUGVyY2VudGFnZSkge1xuICAgICAgX3dyaXRlci53cml0ZUludDY0U3RyaW5nKDUsIF9pbnN0YW5jZS5wcmVlbXB0aW9uUGVyY2VudGFnZSk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UucHJpb3JpdHkpIHtcbiAgICAgIF93cml0ZXIud3JpdGVJbnQ2NFN0cmluZyg2LCBfaW5zdGFuY2UucHJpb3JpdHkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2lkOiBzdHJpbmc7XG4gIHByaXZhdGUgX3BhcmVudFBhcnRpdGlvbklkczogc3RyaW5nW107XG4gIHByaXZhdGUgX3BvZFJlc2VydmVkOiBzdHJpbmc7XG4gIHByaXZhdGUgX3BvZE1heDogc3RyaW5nO1xuICBwcml2YXRlIF9wb2RDb25maWd1cmF0aW9uOiB7IFtwcm9wOiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgcHJpdmF0ZSBfcHJlZW1wdGlvblBlcmNlbnRhZ2U6IHN0cmluZztcbiAgcHJpdmF0ZSBfcHJpb3JpdHk6IHN0cmluZztcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIFBhcnRpdGlvblJhdyB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgKi9cbiAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxQYXJ0aXRpb25SYXcuQXNPYmplY3Q+KSB7XG4gICAgX3ZhbHVlID0gX3ZhbHVlIHx8IHt9O1xuICAgIHRoaXMuaWQgPSBfdmFsdWUuaWQ7XG4gICAgdGhpcy5wYXJlbnRQYXJ0aXRpb25JZHMgPSAoX3ZhbHVlLnBhcmVudFBhcnRpdGlvbklkcyB8fCBbXSkuc2xpY2UoKTtcbiAgICB0aGlzLnBvZFJlc2VydmVkID0gX3ZhbHVlLnBvZFJlc2VydmVkO1xuICAgIHRoaXMucG9kTWF4ID0gX3ZhbHVlLnBvZE1heDtcbiAgICAodGhpcy5wb2RDb25maWd1cmF0aW9uID0gX3ZhbHVlIS5wb2RDb25maWd1cmF0aW9uXG4gICAgICA/IE9iamVjdC5rZXlzKF92YWx1ZSEucG9kQ29uZmlndXJhdGlvbikucmVkdWNlKFxuICAgICAgICAgIChyLCBrKSA9PiAoeyAuLi5yLCBba106IF92YWx1ZSEucG9kQ29uZmlndXJhdGlvbiFba10gfSksXG4gICAgICAgICAge31cbiAgICAgICAgKVxuICAgICAgOiB7fSksXG4gICAgICAodGhpcy5wcmVlbXB0aW9uUGVyY2VudGFnZSA9IF92YWx1ZS5wcmVlbXB0aW9uUGVyY2VudGFnZSk7XG4gICAgdGhpcy5wcmlvcml0eSA9IF92YWx1ZS5wcmlvcml0eTtcbiAgICBQYXJ0aXRpb25SYXcucmVmaW5lVmFsdWVzKHRoaXMpO1xuICB9XG4gIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9pZDtcbiAgfVxuICBzZXQgaWQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2lkID0gdmFsdWU7XG4gIH1cbiAgZ2V0IHBhcmVudFBhcnRpdGlvbklkcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudFBhcnRpdGlvbklkcztcbiAgfVxuICBzZXQgcGFyZW50UGFydGl0aW9uSWRzKHZhbHVlOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuX3BhcmVudFBhcnRpdGlvbklkcyA9IHZhbHVlO1xuICB9XG4gIGdldCBwb2RSZXNlcnZlZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9wb2RSZXNlcnZlZDtcbiAgfVxuICBzZXQgcG9kUmVzZXJ2ZWQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3BvZFJlc2VydmVkID0gdmFsdWU7XG4gIH1cbiAgZ2V0IHBvZE1heCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9wb2RNYXg7XG4gIH1cbiAgc2V0IHBvZE1heCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcG9kTWF4ID0gdmFsdWU7XG4gIH1cbiAgZ2V0IHBvZENvbmZpZ3VyYXRpb24oKTogeyBbcHJvcDogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIHJldHVybiB0aGlzLl9wb2RDb25maWd1cmF0aW9uO1xuICB9XG4gIHNldCBwb2RDb25maWd1cmF0aW9uKHZhbHVlOiB7IFtwcm9wOiBzdHJpbmddOiBzdHJpbmcgfSkge1xuICAgIHRoaXMuX3BvZENvbmZpZ3VyYXRpb24gPSB2YWx1ZTtcbiAgfVxuICBnZXQgcHJlZW1wdGlvblBlcmNlbnRhZ2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcHJlZW1wdGlvblBlcmNlbnRhZ2U7XG4gIH1cbiAgc2V0IHByZWVtcHRpb25QZXJjZW50YWdlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wcmVlbXB0aW9uUGVyY2VudGFnZSA9IHZhbHVlO1xuICB9XG4gIGdldCBwcmlvcml0eSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9wcmlvcml0eTtcbiAgfVxuICBzZXQgcHJpb3JpdHkodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3ByaW9yaXR5ID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgUGFydGl0aW9uUmF3LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IFBhcnRpdGlvblJhdy5Bc09iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgcGFyZW50UGFydGl0aW9uSWRzOiAodGhpcy5wYXJlbnRQYXJ0aXRpb25JZHMgfHwgW10pLnNsaWNlKCksXG4gICAgICBwb2RSZXNlcnZlZDogdGhpcy5wb2RSZXNlcnZlZCxcbiAgICAgIHBvZE1heDogdGhpcy5wb2RNYXgsXG4gICAgICBwb2RDb25maWd1cmF0aW9uOiB0aGlzLnBvZENvbmZpZ3VyYXRpb25cbiAgICAgICAgPyBPYmplY3Qua2V5cyh0aGlzLnBvZENvbmZpZ3VyYXRpb24pLnJlZHVjZShcbiAgICAgICAgICAgIChyLCBrKSA9PiAoeyAuLi5yLCBba106IHRoaXMucG9kQ29uZmlndXJhdGlvbiFba10gfSksXG4gICAgICAgICAgICB7fVxuICAgICAgICAgIClcbiAgICAgICAgOiB7fSxcbiAgICAgIHByZWVtcHRpb25QZXJjZW50YWdlOiB0aGlzLnByZWVtcHRpb25QZXJjZW50YWdlLFxuICAgICAgcHJpb3JpdHk6IHRoaXMucHJpb3JpdHlcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBQYXJ0aXRpb25SYXcuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIHBhcmVudFBhcnRpdGlvbklkczogKHRoaXMucGFyZW50UGFydGl0aW9uSWRzIHx8IFtdKS5zbGljZSgpLFxuICAgICAgcG9kUmVzZXJ2ZWQ6IHRoaXMucG9kUmVzZXJ2ZWQsXG4gICAgICBwb2RNYXg6IHRoaXMucG9kTWF4LFxuICAgICAgcG9kQ29uZmlndXJhdGlvbjogdGhpcy5wb2RDb25maWd1cmF0aW9uXG4gICAgICAgID8gT2JqZWN0LmtleXModGhpcy5wb2RDb25maWd1cmF0aW9uKS5yZWR1Y2UoXG4gICAgICAgICAgICAociwgaykgPT4gKHsgLi4uciwgW2tdOiB0aGlzLnBvZENvbmZpZ3VyYXRpb24hW2tdIH0pLFxuICAgICAgICAgICAge31cbiAgICAgICAgICApXG4gICAgICAgIDoge30sXG4gICAgICBwcmVlbXB0aW9uUGVyY2VudGFnZTogdGhpcy5wcmVlbXB0aW9uUGVyY2VudGFnZSxcbiAgICAgIHByaW9yaXR5OiB0aGlzLnByaW9yaXR5XG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IG1vZHVsZSBQYXJ0aXRpb25SYXcge1xuICAvKipcbiAgICogU3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIFBhcnRpdGlvblJhd1xuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc09iamVjdCB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBwYXJlbnRQYXJ0aXRpb25JZHM6IHN0cmluZ1tdO1xuICAgIHBvZFJlc2VydmVkOiBzdHJpbmc7XG4gICAgcG9kTWF4OiBzdHJpbmc7XG4gICAgcG9kQ29uZmlndXJhdGlvbjogeyBbcHJvcDogc3RyaW5nXTogc3RyaW5nIH07XG4gICAgcHJlZW1wdGlvblBlcmNlbnRhZ2U6IHN0cmluZztcbiAgICBwcmlvcml0eTogc3RyaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIFBhcnRpdGlvblJhd1xuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBwYXJlbnRQYXJ0aXRpb25JZHM6IHN0cmluZ1tdO1xuICAgIHBvZFJlc2VydmVkOiBzdHJpbmc7XG4gICAgcG9kTWF4OiBzdHJpbmc7XG4gICAgcG9kQ29uZmlndXJhdGlvbjogeyBbcHJvcDogc3RyaW5nXTogc3RyaW5nIH07XG4gICAgcHJlZW1wdGlvblBlcmNlbnRhZ2U6IHN0cmluZztcbiAgICBwcmlvcml0eTogc3RyaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIGFybW9uaWsuYXBpLmdycGMudjEucGFydGl0aW9ucy5QYXJ0aXRpb25SYXcuUG9kQ29uZmlndXJhdGlvbkVudHJ5XG4gICAqL1xuICBleHBvcnQgY2xhc3MgUG9kQ29uZmlndXJhdGlvbkVudHJ5IGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICAgIHN0YXRpYyBpZCA9XG4gICAgICAnYXJtb25pay5hcGkuZ3JwYy52MS5wYXJ0aXRpb25zLlBhcnRpdGlvblJhdy5Qb2RDb25maWd1cmF0aW9uRW50cnknO1xuXG4gICAgLyoqXG4gICAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAgICovXG4gICAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBQb2RDb25maWd1cmF0aW9uRW50cnkoKTtcbiAgICAgIFBvZENvbmZpZ3VyYXRpb25FbnRyeS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgICAgIGluc3RhbmNlLFxuICAgICAgICBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKVxuICAgICAgKTtcbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBhbGwgdGhlIHByb3BlcnRpZXMgYW5kIHNldCBkZWZhdWx0IHByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzdGF0aWMgcmVmaW5lVmFsdWVzKF9pbnN0YW5jZTogUG9kQ29uZmlndXJhdGlvbkVudHJ5KSB7XG4gICAgICBfaW5zdGFuY2Uua2V5ID0gX2luc3RhbmNlLmtleSB8fCAnJztcbiAgICAgIF9pbnN0YW5jZS52YWx1ZSA9IF9pbnN0YW5jZS52YWx1ZSB8fCAnJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSBfcmVhZGVyIGJpbmFyeSByZWFkZXIgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgICAgX2luc3RhbmNlOiBQb2RDb25maWd1cmF0aW9uRW50cnksXG4gICAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgICApIHtcbiAgICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBfaW5zdGFuY2Uua2V5ID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBfaW5zdGFuY2UudmFsdWUgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIFBvZENvbmZpZ3VyYXRpb25FbnRyeS5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0gX3dyaXRlciBiaW5hcnkgd3JpdGVyIGluc3RhbmNlXG4gICAgICovXG4gICAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKFxuICAgICAgX2luc3RhbmNlOiBQb2RDb25maWd1cmF0aW9uRW50cnksXG4gICAgICBfd3JpdGVyOiBCaW5hcnlXcml0ZXJcbiAgICApIHtcbiAgICAgIGlmIChfaW5zdGFuY2Uua2V5KSB7XG4gICAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMSwgX2luc3RhbmNlLmtleSk7XG4gICAgICB9XG4gICAgICBpZiAoX2luc3RhbmNlLnZhbHVlKSB7XG4gICAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMiwgX2luc3RhbmNlLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9rZXk6IHN0cmluZztcbiAgICBwcml2YXRlIF92YWx1ZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgUG9kQ29uZmlndXJhdGlvbkVudHJ5IHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxQb2RDb25maWd1cmF0aW9uRW50cnkuQXNPYmplY3Q+KSB7XG4gICAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgICB0aGlzLmtleSA9IF92YWx1ZS5rZXk7XG4gICAgICB0aGlzLnZhbHVlID0gX3ZhbHVlLnZhbHVlO1xuICAgICAgUG9kQ29uZmlndXJhdGlvbkVudHJ5LnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgICB9XG4gICAgZ2V0IGtleSgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMuX2tleTtcbiAgICB9XG4gICAgc2V0IGtleSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICB0aGlzLl9rZXkgPSB2YWx1ZTtcbiAgICB9XG4gICAgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuICAgIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgICBQb2RDb25maWd1cmF0aW9uRW50cnkuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAgICovXG4gICAgdG9PYmplY3QoKTogUG9kQ29uZmlndXJhdGlvbkVudHJ5LkFzT2JqZWN0IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleTogdGhpcy5rZXksXG4gICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgICAqL1xuICAgIHRvSlNPTigpIHtcbiAgICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgICAqL1xuICAgIHRvUHJvdG9idWZKU09OKFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICAgICk6IFBvZENvbmZpZ3VyYXRpb25FbnRyeS5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IHRoaXMua2V5LFxuICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgZXhwb3J0IG1vZHVsZSBQb2RDb25maWd1cmF0aW9uRW50cnkge1xuICAgIC8qKlxuICAgICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBQb2RDb25maWd1cmF0aW9uRW50cnlcbiAgICAgKi9cbiAgICBleHBvcnQgaW50ZXJmYWNlIEFzT2JqZWN0IHtcbiAgICAgIGtleTogc3RyaW5nO1xuICAgICAgdmFsdWU6IHN0cmluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBQb2RDb25maWd1cmF0aW9uRW50cnlcbiAgICAgKi9cbiAgICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICAgIGtleTogc3RyaW5nO1xuICAgICAgdmFsdWU6IHN0cmluZztcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBhcm1vbmlrLmFwaS5ncnBjLnYxLnBhcnRpdGlvbnMuTGlzdFBhcnRpdGlvbnNSZXF1ZXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBMaXN0UGFydGl0aW9uc1JlcXVlc3QgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdhcm1vbmlrLmFwaS5ncnBjLnYxLnBhcnRpdGlvbnMuTGlzdFBhcnRpdGlvbnNSZXF1ZXN0JztcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgTGlzdFBhcnRpdGlvbnNSZXF1ZXN0KCk7XG4gICAgTGlzdFBhcnRpdGlvbnNSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICAgIGluc3RhbmNlLFxuICAgICAgbmV3IEJpbmFyeVJlYWRlcihieXRlcylcbiAgICApO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBhbGwgdGhlIHByb3BlcnRpZXMgYW5kIHNldCBkZWZhdWx0IHByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgcmVmaW5lVmFsdWVzKF9pbnN0YW5jZTogTGlzdFBhcnRpdGlvbnNSZXF1ZXN0KSB7XG4gICAgX2luc3RhbmNlLnBhZ2UgPSBfaW5zdGFuY2UucGFnZSB8fCAwO1xuICAgIF9pbnN0YW5jZS5wYWdlU2l6ZSA9IF9pbnN0YW5jZS5wYWdlU2l6ZSB8fCAwO1xuICAgIF9pbnN0YW5jZS5maWx0ZXIgPSBfaW5zdGFuY2UuZmlsdGVyIHx8IHVuZGVmaW5lZDtcbiAgICBfaW5zdGFuY2Uuc29ydCA9IF9pbnN0YW5jZS5zb3J0IHx8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IExpc3RQYXJ0aXRpb25zUmVxdWVzdCxcbiAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgKSB7XG4gICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBfaW5zdGFuY2UucGFnZSA9IF9yZWFkZXIucmVhZEludDMyKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBfaW5zdGFuY2UucGFnZVNpemUgPSBfcmVhZGVyLnJlYWRJbnQzMigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgX2luc3RhbmNlLmZpbHRlciA9IG5ldyBMaXN0UGFydGl0aW9uc1JlcXVlc3QuRmlsdGVyKCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIF9pbnN0YW5jZS5maWx0ZXIsXG4gICAgICAgICAgICBMaXN0UGFydGl0aW9uc1JlcXVlc3QuRmlsdGVyLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBfaW5zdGFuY2Uuc29ydCA9IG5ldyBMaXN0UGFydGl0aW9uc1JlcXVlc3QuU29ydCgpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBfaW5zdGFuY2Uuc29ydCxcbiAgICAgICAgICAgIExpc3RQYXJ0aXRpb25zUmVxdWVzdC5Tb3J0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBMaXN0UGFydGl0aW9uc1JlcXVlc3QucmVmaW5lVmFsdWVzKF9pbnN0YW5jZSk7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplcyBhIG1lc3NhZ2UgdG8gYmluYXJ5IGZvcm1hdCB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3dyaXRlciBiaW5hcnkgd3JpdGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIoXG4gICAgX2luc3RhbmNlOiBMaXN0UGFydGl0aW9uc1JlcXVlc3QsXG4gICAgX3dyaXRlcjogQmluYXJ5V3JpdGVyXG4gICkge1xuICAgIGlmIChfaW5zdGFuY2UucGFnZSkge1xuICAgICAgX3dyaXRlci53cml0ZUludDMyKDEsIF9pbnN0YW5jZS5wYWdlKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5wYWdlU2l6ZSkge1xuICAgICAgX3dyaXRlci53cml0ZUludDMyKDIsIF9pbnN0YW5jZS5wYWdlU2l6ZSk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UuZmlsdGVyKSB7XG4gICAgICBfd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgICAgMyxcbiAgICAgICAgX2luc3RhbmNlLmZpbHRlciBhcyBhbnksXG4gICAgICAgIExpc3RQYXJ0aXRpb25zUmVxdWVzdC5GaWx0ZXIuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2Uuc29ydCkge1xuICAgICAgX3dyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAgIDQsXG4gICAgICAgIF9pbnN0YW5jZS5zb3J0IGFzIGFueSxcbiAgICAgICAgTGlzdFBhcnRpdGlvbnNSZXF1ZXN0LlNvcnQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcGFnZTogbnVtYmVyO1xuICBwcml2YXRlIF9wYWdlU2l6ZTogbnVtYmVyO1xuICBwcml2YXRlIF9maWx0ZXI/OiBMaXN0UGFydGl0aW9uc1JlcXVlc3QuRmlsdGVyO1xuICBwcml2YXRlIF9zb3J0PzogTGlzdFBhcnRpdGlvbnNSZXF1ZXN0LlNvcnQ7XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBMaXN0UGFydGl0aW9uc1JlcXVlc3QgdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICovXG4gIGNvbnN0cnVjdG9yKF92YWx1ZT86IFJlY3Vyc2l2ZVBhcnRpYWw8TGlzdFBhcnRpdGlvbnNSZXF1ZXN0LkFzT2JqZWN0Pikge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLnBhZ2UgPSBfdmFsdWUucGFnZTtcbiAgICB0aGlzLnBhZ2VTaXplID0gX3ZhbHVlLnBhZ2VTaXplO1xuICAgIHRoaXMuZmlsdGVyID0gX3ZhbHVlLmZpbHRlclxuICAgICAgPyBuZXcgTGlzdFBhcnRpdGlvbnNSZXF1ZXN0LkZpbHRlcihfdmFsdWUuZmlsdGVyKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5zb3J0ID0gX3ZhbHVlLnNvcnRcbiAgICAgID8gbmV3IExpc3RQYXJ0aXRpb25zUmVxdWVzdC5Tb3J0KF92YWx1ZS5zb3J0KVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgTGlzdFBhcnRpdGlvbnNSZXF1ZXN0LnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgfVxuICBnZXQgcGFnZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9wYWdlO1xuICB9XG4gIHNldCBwYWdlKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9wYWdlID0gdmFsdWU7XG4gIH1cbiAgZ2V0IHBhZ2VTaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VTaXplO1xuICB9XG4gIHNldCBwYWdlU2l6ZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fcGFnZVNpemUgPSB2YWx1ZTtcbiAgfVxuICBnZXQgZmlsdGVyKCk6IExpc3RQYXJ0aXRpb25zUmVxdWVzdC5GaWx0ZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXI7XG4gIH1cbiAgc2V0IGZpbHRlcih2YWx1ZTogTGlzdFBhcnRpdGlvbnNSZXF1ZXN0LkZpbHRlciB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2ZpbHRlciA9IHZhbHVlO1xuICB9XG4gIGdldCBzb3J0KCk6IExpc3RQYXJ0aXRpb25zUmVxdWVzdC5Tb3J0IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fc29ydDtcbiAgfVxuICBzZXQgc29ydCh2YWx1ZTogTGlzdFBhcnRpdGlvbnNSZXF1ZXN0LlNvcnQgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9zb3J0ID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgTGlzdFBhcnRpdGlvbnNSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IExpc3RQYXJ0aXRpb25zUmVxdWVzdC5Bc09iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2U6IHRoaXMucGFnZSxcbiAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLFxuICAgICAgZmlsdGVyOiB0aGlzLmZpbHRlciA/IHRoaXMuZmlsdGVyLnRvT2JqZWN0KCkgOiB1bmRlZmluZWQsXG4gICAgICBzb3J0OiB0aGlzLnNvcnQgPyB0aGlzLnNvcnQudG9PYmplY3QoKSA6IHVuZGVmaW5lZFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICovXG4gIHRvUHJvdG9idWZKU09OKFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICk6IExpc3RQYXJ0aXRpb25zUmVxdWVzdC5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2U6IHRoaXMucGFnZSxcbiAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLFxuICAgICAgZmlsdGVyOiB0aGlzLmZpbHRlciA/IHRoaXMuZmlsdGVyLnRvUHJvdG9idWZKU09OKG9wdGlvbnMpIDogbnVsbCxcbiAgICAgIHNvcnQ6IHRoaXMuc29ydCA/IHRoaXMuc29ydC50b1Byb3RvYnVmSlNPTihvcHRpb25zKSA6IG51bGxcbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIExpc3RQYXJ0aXRpb25zUmVxdWVzdCB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgTGlzdFBhcnRpdGlvbnNSZXF1ZXN0XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzT2JqZWN0IHtcbiAgICBwYWdlOiBudW1iZXI7XG4gICAgcGFnZVNpemU6IG51bWJlcjtcbiAgICBmaWx0ZXI/OiBMaXN0UGFydGl0aW9uc1JlcXVlc3QuRmlsdGVyLkFzT2JqZWN0O1xuICAgIHNvcnQ/OiBMaXN0UGFydGl0aW9uc1JlcXVlc3QuU29ydC5Bc09iamVjdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBMaXN0UGFydGl0aW9uc1JlcXVlc3RcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNQcm90b2J1ZkpTT04ge1xuICAgIHBhZ2U6IG51bWJlcjtcbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xuICAgIGZpbHRlcjogTGlzdFBhcnRpdGlvbnNSZXF1ZXN0LkZpbHRlci5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gICAgc29ydDogTGlzdFBhcnRpdGlvbnNSZXF1ZXN0LlNvcnQuQXNQcm90b2J1ZkpTT04gfCBudWxsO1xuICB9XG4gIGV4cG9ydCBlbnVtIE9yZGVyQnlGaWVsZCB7XG4gICAgT1JERVJfQllfRklFTERfVU5TUEVDSUZJRUQgPSAwLFxuICAgIE9SREVSX0JZX0ZJRUxEX0lEID0gMSxcbiAgICBPUkRFUl9CWV9GSUVMRF9QQVJFTlRfUEFSVElUSU9OX0lEUyA9IDIsXG4gICAgT1JERVJfQllfRklFTERfUE9EX1JFU0VSVkVEID0gMyxcbiAgICBPUkRFUl9CWV9GSUVMRF9QT0RfTUFYID0gNCxcbiAgICBPUkRFUl9CWV9GSUVMRF9QUkVFTVBUSU9OX1BFUkNFTlRBR0UgPSA1LFxuICAgIE9SREVSX0JZX0ZJRUxEX1BSSU9SSVRZID0gNlxuICB9XG4gIGV4cG9ydCBlbnVtIE9yZGVyRGlyZWN0aW9uIHtcbiAgICBPUkRFUl9ESVJFQ1RJT05fVU5TUEVDSUZJRUQgPSAwLFxuICAgIE9SREVSX0RJUkVDVElPTl9BU0MgPSAxLFxuICAgIE9SREVSX0RJUkVDVElPTl9ERVNDID0gMlxuICB9XG4gIC8qKlxuICAgKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBhcm1vbmlrLmFwaS5ncnBjLnYxLnBhcnRpdGlvbnMuTGlzdFBhcnRpdGlvbnNSZXF1ZXN0LkZpbHRlclxuICAgKi9cbiAgZXhwb3J0IGNsYXNzIEZpbHRlciBpbXBsZW1lbnRzIEdycGNNZXNzYWdlIHtcbiAgICBzdGF0aWMgaWQgPSAnYXJtb25pay5hcGkuZ3JwYy52MS5wYXJ0aXRpb25zLkxpc3RQYXJ0aXRpb25zUmVxdWVzdC5GaWx0ZXInO1xuXG4gICAgLyoqXG4gICAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAgICovXG4gICAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBGaWx0ZXIoKTtcbiAgICAgIEZpbHRlci5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoaW5zdGFuY2UsIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpKTtcbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBhbGwgdGhlIHByb3BlcnRpZXMgYW5kIHNldCBkZWZhdWx0IHByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzdGF0aWMgcmVmaW5lVmFsdWVzKF9pbnN0YW5jZTogRmlsdGVyKSB7XG4gICAgICBfaW5zdGFuY2UuaWQgPSBfaW5zdGFuY2UuaWQgfHwgJyc7XG4gICAgICBfaW5zdGFuY2UucGFyZW50UGFydGl0aW9uSWQgPSBfaW5zdGFuY2UucGFyZW50UGFydGl0aW9uSWQgfHwgJyc7XG4gICAgICBfaW5zdGFuY2UucG9kUmVzZXJ2ZWQgPSBfaW5zdGFuY2UucG9kUmVzZXJ2ZWQgfHwgMDtcbiAgICAgIF9pbnN0YW5jZS5wb2RNYXggPSBfaW5zdGFuY2UucG9kTWF4IHx8IDA7XG4gICAgICBfaW5zdGFuY2UucHJlZW1wdGlvblBlcmNlbnRhZ2UgPSBfaW5zdGFuY2UucHJlZW1wdGlvblBlcmNlbnRhZ2UgfHwgMDtcbiAgICAgIF9pbnN0YW5jZS5wcmlvcml0eSA9IF9pbnN0YW5jZS5wcmlvcml0eSB8fCAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlc2VyaWFsaXplcyAvIHJlYWRzIGJpbmFyeSBtZXNzYWdlIGludG8gbWVzc2FnZSBpbnN0YW5jZSB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgICAqL1xuICAgIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgICBfaW5zdGFuY2U6IEZpbHRlcixcbiAgICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICAgICkge1xuICAgICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIF9pbnN0YW5jZS5pZCA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgX2luc3RhbmNlLnBhcmVudFBhcnRpdGlvbklkID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBfaW5zdGFuY2UucG9kUmVzZXJ2ZWQgPSBfcmVhZGVyLnJlYWRJbnQzMigpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgX2luc3RhbmNlLnBvZE1heCA9IF9yZWFkZXIucmVhZEludDMyKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICBfaW5zdGFuY2UucHJlZW1wdGlvblBlcmNlbnRhZ2UgPSBfcmVhZGVyLnJlYWRJbnQzMigpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgX2luc3RhbmNlLnByaW9yaXR5ID0gX3JlYWRlci5yZWFkSW50MzIoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIEZpbHRlci5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0gX3dyaXRlciBiaW5hcnkgd3JpdGVyIGluc3RhbmNlXG4gICAgICovXG4gICAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKF9pbnN0YW5jZTogRmlsdGVyLCBfd3JpdGVyOiBCaW5hcnlXcml0ZXIpIHtcbiAgICAgIGlmIChfaW5zdGFuY2UuaWQpIHtcbiAgICAgICAgX3dyaXRlci53cml0ZVN0cmluZygxLCBfaW5zdGFuY2UuaWQpO1xuICAgICAgfVxuICAgICAgaWYgKF9pbnN0YW5jZS5wYXJlbnRQYXJ0aXRpb25JZCkge1xuICAgICAgICBfd3JpdGVyLndyaXRlU3RyaW5nKDIsIF9pbnN0YW5jZS5wYXJlbnRQYXJ0aXRpb25JZCk7XG4gICAgICB9XG4gICAgICBpZiAoX2luc3RhbmNlLnBvZFJlc2VydmVkKSB7XG4gICAgICAgIF93cml0ZXIud3JpdGVJbnQzMigzLCBfaW5zdGFuY2UucG9kUmVzZXJ2ZWQpO1xuICAgICAgfVxuICAgICAgaWYgKF9pbnN0YW5jZS5wb2RNYXgpIHtcbiAgICAgICAgX3dyaXRlci53cml0ZUludDMyKDQsIF9pbnN0YW5jZS5wb2RNYXgpO1xuICAgICAgfVxuICAgICAgaWYgKF9pbnN0YW5jZS5wcmVlbXB0aW9uUGVyY2VudGFnZSkge1xuICAgICAgICBfd3JpdGVyLndyaXRlSW50MzIoNSwgX2luc3RhbmNlLnByZWVtcHRpb25QZXJjZW50YWdlKTtcbiAgICAgIH1cbiAgICAgIGlmIChfaW5zdGFuY2UucHJpb3JpdHkpIHtcbiAgICAgICAgX3dyaXRlci53cml0ZUludDMyKDYsIF9pbnN0YW5jZS5wcmlvcml0eSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaWQ6IHN0cmluZztcbiAgICBwcml2YXRlIF9wYXJlbnRQYXJ0aXRpb25JZDogc3RyaW5nO1xuICAgIHByaXZhdGUgX3BvZFJlc2VydmVkOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfcG9kTWF4OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfcHJlZW1wdGlvblBlcmNlbnRhZ2U6IG51bWJlcjtcbiAgICBwcml2YXRlIF9wcmlvcml0eTogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgRmlsdGVyIHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxGaWx0ZXIuQXNPYmplY3Q+KSB7XG4gICAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgICB0aGlzLmlkID0gX3ZhbHVlLmlkO1xuICAgICAgdGhpcy5wYXJlbnRQYXJ0aXRpb25JZCA9IF92YWx1ZS5wYXJlbnRQYXJ0aXRpb25JZDtcbiAgICAgIHRoaXMucG9kUmVzZXJ2ZWQgPSBfdmFsdWUucG9kUmVzZXJ2ZWQ7XG4gICAgICB0aGlzLnBvZE1heCA9IF92YWx1ZS5wb2RNYXg7XG4gICAgICB0aGlzLnByZWVtcHRpb25QZXJjZW50YWdlID0gX3ZhbHVlLnByZWVtcHRpb25QZXJjZW50YWdlO1xuICAgICAgdGhpcy5wcmlvcml0eSA9IF92YWx1ZS5wcmlvcml0eTtcbiAgICAgIEZpbHRlci5yZWZpbmVWYWx1ZXModGhpcyk7XG4gICAgfVxuICAgIGdldCBpZCgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMuX2lkO1xuICAgIH1cbiAgICBzZXQgaWQodmFsdWU6IHN0cmluZykge1xuICAgICAgdGhpcy5faWQgPSB2YWx1ZTtcbiAgICB9XG4gICAgZ2V0IHBhcmVudFBhcnRpdGlvbklkKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gdGhpcy5fcGFyZW50UGFydGl0aW9uSWQ7XG4gICAgfVxuICAgIHNldCBwYXJlbnRQYXJ0aXRpb25JZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICB0aGlzLl9wYXJlbnRQYXJ0aXRpb25JZCA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgcG9kUmVzZXJ2ZWQoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB0aGlzLl9wb2RSZXNlcnZlZDtcbiAgICB9XG4gICAgc2V0IHBvZFJlc2VydmVkKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgIHRoaXMuX3BvZFJlc2VydmVkID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCBwb2RNYXgoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB0aGlzLl9wb2RNYXg7XG4gICAgfVxuICAgIHNldCBwb2RNYXgodmFsdWU6IG51bWJlcikge1xuICAgICAgdGhpcy5fcG9kTWF4ID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCBwcmVlbXB0aW9uUGVyY2VudGFnZSgpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHRoaXMuX3ByZWVtcHRpb25QZXJjZW50YWdlO1xuICAgIH1cbiAgICBzZXQgcHJlZW1wdGlvblBlcmNlbnRhZ2UodmFsdWU6IG51bWJlcikge1xuICAgICAgdGhpcy5fcHJlZW1wdGlvblBlcmNlbnRhZ2UgPSB2YWx1ZTtcbiAgICB9XG4gICAgZ2V0IHByaW9yaXR5KCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gdGhpcy5fcHJpb3JpdHk7XG4gICAgfVxuICAgIHNldCBwcmlvcml0eSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICB0aGlzLl9wcmlvcml0eSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgICBGaWx0ZXIuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAgICovXG4gICAgdG9PYmplY3QoKTogRmlsdGVyLkFzT2JqZWN0IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgICBwYXJlbnRQYXJ0aXRpb25JZDogdGhpcy5wYXJlbnRQYXJ0aXRpb25JZCxcbiAgICAgICAgcG9kUmVzZXJ2ZWQ6IHRoaXMucG9kUmVzZXJ2ZWQsXG4gICAgICAgIHBvZE1heDogdGhpcy5wb2RNYXgsXG4gICAgICAgIHByZWVtcHRpb25QZXJjZW50YWdlOiB0aGlzLnByZWVtcHRpb25QZXJjZW50YWdlLFxuICAgICAgICBwcmlvcml0eTogdGhpcy5wcmlvcml0eVxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICAgKi9cbiAgICB0b0pTT04oKSB7XG4gICAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICAgKi9cbiAgICB0b1Byb3RvYnVmSlNPTihcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgICApOiBGaWx0ZXIuQXNQcm90b2J1ZkpTT04ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICAgIHBhcmVudFBhcnRpdGlvbklkOiB0aGlzLnBhcmVudFBhcnRpdGlvbklkLFxuICAgICAgICBwb2RSZXNlcnZlZDogdGhpcy5wb2RSZXNlcnZlZCxcbiAgICAgICAgcG9kTWF4OiB0aGlzLnBvZE1heCxcbiAgICAgICAgcHJlZW1wdGlvblBlcmNlbnRhZ2U6IHRoaXMucHJlZW1wdGlvblBlcmNlbnRhZ2UsXG4gICAgICAgIHByaW9yaXR5OiB0aGlzLnByaW9yaXR5XG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBleHBvcnQgbW9kdWxlIEZpbHRlciB7XG4gICAgLyoqXG4gICAgICogU3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIEZpbHRlclxuICAgICAqL1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgICAgaWQ6IHN0cmluZztcbiAgICAgIHBhcmVudFBhcnRpdGlvbklkOiBzdHJpbmc7XG4gICAgICBwb2RSZXNlcnZlZDogbnVtYmVyO1xuICAgICAgcG9kTWF4OiBudW1iZXI7XG4gICAgICBwcmVlbXB0aW9uUGVyY2VudGFnZTogbnVtYmVyO1xuICAgICAgcHJpb3JpdHk6IG51bWJlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBGaWx0ZXJcbiAgICAgKi9cbiAgICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICAgIGlkOiBzdHJpbmc7XG4gICAgICBwYXJlbnRQYXJ0aXRpb25JZDogc3RyaW5nO1xuICAgICAgcG9kUmVzZXJ2ZWQ6IG51bWJlcjtcbiAgICAgIHBvZE1heDogbnVtYmVyO1xuICAgICAgcHJlZW1wdGlvblBlcmNlbnRhZ2U6IG51bWJlcjtcbiAgICAgIHByaW9yaXR5OiBudW1iZXI7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIGFybW9uaWsuYXBpLmdycGMudjEucGFydGl0aW9ucy5MaXN0UGFydGl0aW9uc1JlcXVlc3QuU29ydFxuICAgKi9cbiAgZXhwb3J0IGNsYXNzIFNvcnQgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gICAgc3RhdGljIGlkID0gJ2FybW9uaWsuYXBpLmdycGMudjEucGFydGl0aW9ucy5MaXN0UGFydGl0aW9uc1JlcXVlc3QuU29ydCc7XG5cbiAgICAvKipcbiAgICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFNvcnQoKTtcbiAgICAgIFNvcnQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKGluc3RhbmNlLCBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAgICovXG4gICAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IFNvcnQpIHtcbiAgICAgIF9pbnN0YW5jZS5maWVsZCA9IF9pbnN0YW5jZS5maWVsZCB8fCAwO1xuICAgICAgX2luc3RhbmNlLmRpcmVjdGlvbiA9IF9pbnN0YW5jZS5kaXJlY3Rpb24gfHwgMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSBfcmVhZGVyIGJpbmFyeSByZWFkZXIgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKF9pbnN0YW5jZTogU29ydCwgX3JlYWRlcjogQmluYXJ5UmVhZGVyKSB7XG4gICAgICB3aGlsZSAoX3JlYWRlci5uZXh0RmllbGQoKSkge1xuICAgICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgX2luc3RhbmNlLmZpZWxkID0gX3JlYWRlci5yZWFkRW51bSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgX2luc3RhbmNlLmRpcmVjdGlvbiA9IF9yZWFkZXIucmVhZEVudW0oKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIFNvcnQucmVmaW5lVmFsdWVzKF9pbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VyaWFsaXplcyBhIG1lc3NhZ2UgdG8gYmluYXJ5IGZvcm1hdCB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgICAqL1xuICAgIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihfaW5zdGFuY2U6IFNvcnQsIF93cml0ZXI6IEJpbmFyeVdyaXRlcikge1xuICAgICAgaWYgKF9pbnN0YW5jZS5maWVsZCkge1xuICAgICAgICBfd3JpdGVyLndyaXRlRW51bSgxLCBfaW5zdGFuY2UuZmllbGQpO1xuICAgICAgfVxuICAgICAgaWYgKF9pbnN0YW5jZS5kaXJlY3Rpb24pIHtcbiAgICAgICAgX3dyaXRlci53cml0ZUVudW0oMiwgX2luc3RhbmNlLmRpcmVjdGlvbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZmllbGQ6IExpc3RQYXJ0aXRpb25zUmVxdWVzdC5PcmRlckJ5RmllbGQ7XG4gICAgcHJpdmF0ZSBfZGlyZWN0aW9uOiBMaXN0UGFydGl0aW9uc1JlcXVlc3QuT3JkZXJEaXJlY3Rpb247XG5cbiAgICAvKipcbiAgICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBTb3J0IHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxTb3J0LkFzT2JqZWN0Pikge1xuICAgICAgX3ZhbHVlID0gX3ZhbHVlIHx8IHt9O1xuICAgICAgdGhpcy5maWVsZCA9IF92YWx1ZS5maWVsZDtcbiAgICAgIHRoaXMuZGlyZWN0aW9uID0gX3ZhbHVlLmRpcmVjdGlvbjtcbiAgICAgIFNvcnQucmVmaW5lVmFsdWVzKHRoaXMpO1xuICAgIH1cbiAgICBnZXQgZmllbGQoKTogTGlzdFBhcnRpdGlvbnNSZXF1ZXN0Lk9yZGVyQnlGaWVsZCB7XG4gICAgICByZXR1cm4gdGhpcy5fZmllbGQ7XG4gICAgfVxuICAgIHNldCBmaWVsZCh2YWx1ZTogTGlzdFBhcnRpdGlvbnNSZXF1ZXN0Lk9yZGVyQnlGaWVsZCkge1xuICAgICAgdGhpcy5fZmllbGQgPSB2YWx1ZTtcbiAgICB9XG4gICAgZ2V0IGRpcmVjdGlvbigpOiBMaXN0UGFydGl0aW9uc1JlcXVlc3QuT3JkZXJEaXJlY3Rpb24ge1xuICAgICAgcmV0dXJuIHRoaXMuX2RpcmVjdGlvbjtcbiAgICB9XG4gICAgc2V0IGRpcmVjdGlvbih2YWx1ZTogTGlzdFBhcnRpdGlvbnNSZXF1ZXN0Lk9yZGVyRGlyZWN0aW9uKSB7XG4gICAgICB0aGlzLl9kaXJlY3Rpb24gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAgICovXG4gICAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgICAgY29uc3Qgd3JpdGVyID0gbmV3IEJpbmFyeVdyaXRlcigpO1xuICAgICAgU29ydC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICAgKi9cbiAgICB0b09iamVjdCgpOiBTb3J0LkFzT2JqZWN0IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZpZWxkOiB0aGlzLmZpZWxkLFxuICAgICAgICBkaXJlY3Rpb246IHRoaXMuZGlyZWN0aW9uXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgICAqL1xuICAgIHRvSlNPTigpIHtcbiAgICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgICAqL1xuICAgIHRvUHJvdG9idWZKU09OKFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICAgICk6IFNvcnQuQXNQcm90b2J1ZkpTT04ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmllbGQ6XG4gICAgICAgICAgTGlzdFBhcnRpdGlvbnNSZXF1ZXN0Lk9yZGVyQnlGaWVsZFtcbiAgICAgICAgICAgIHRoaXMuZmllbGQgPT09IG51bGwgfHwgdGhpcy5maWVsZCA9PT0gdW5kZWZpbmVkID8gMCA6IHRoaXMuZmllbGRcbiAgICAgICAgICBdLFxuICAgICAgICBkaXJlY3Rpb246XG4gICAgICAgICAgTGlzdFBhcnRpdGlvbnNSZXF1ZXN0Lk9yZGVyRGlyZWN0aW9uW1xuICAgICAgICAgICAgdGhpcy5kaXJlY3Rpb24gPT09IG51bGwgfHwgdGhpcy5kaXJlY3Rpb24gPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IDBcbiAgICAgICAgICAgICAgOiB0aGlzLmRpcmVjdGlvblxuICAgICAgICAgIF1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGV4cG9ydCBtb2R1bGUgU29ydCB7XG4gICAgLyoqXG4gICAgICogU3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIFNvcnRcbiAgICAgKi9cbiAgICBleHBvcnQgaW50ZXJmYWNlIEFzT2JqZWN0IHtcbiAgICAgIGZpZWxkOiBMaXN0UGFydGl0aW9uc1JlcXVlc3QuT3JkZXJCeUZpZWxkO1xuICAgICAgZGlyZWN0aW9uOiBMaXN0UGFydGl0aW9uc1JlcXVlc3QuT3JkZXJEaXJlY3Rpb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvdG9idWYgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgU29ydFxuICAgICAqL1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgQXNQcm90b2J1ZkpTT04ge1xuICAgICAgZmllbGQ6IHN0cmluZztcbiAgICAgIGRpcmVjdGlvbjogc3RyaW5nO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIGFybW9uaWsuYXBpLmdycGMudjEucGFydGl0aW9ucy5MaXN0UGFydGl0aW9uc1Jlc3BvbnNlXG4gKi9cbmV4cG9ydCBjbGFzcyBMaXN0UGFydGl0aW9uc1Jlc3BvbnNlIGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnYXJtb25pay5hcGkuZ3JwYy52MS5wYXJ0aXRpb25zLkxpc3RQYXJ0aXRpb25zUmVzcG9uc2UnO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBMaXN0UGFydGl0aW9uc1Jlc3BvbnNlKCk7XG4gICAgTGlzdFBhcnRpdGlvbnNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgICBpbnN0YW5jZSxcbiAgICAgIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpXG4gICAgKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IExpc3RQYXJ0aXRpb25zUmVzcG9uc2UpIHtcbiAgICBfaW5zdGFuY2UucGFydGl0aW9ucyA9IF9pbnN0YW5jZS5wYXJ0aXRpb25zIHx8IFtdO1xuICAgIF9pbnN0YW5jZS5wYWdlID0gX2luc3RhbmNlLnBhZ2UgfHwgMDtcbiAgICBfaW5zdGFuY2UucGFnZVNpemUgPSBfaW5zdGFuY2UucGFnZVNpemUgfHwgMDtcbiAgICBfaW5zdGFuY2UudG90YWwgPSBfaW5zdGFuY2UudG90YWwgfHwgMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IExpc3RQYXJ0aXRpb25zUmVzcG9uc2UsXG4gICAgX3JlYWRlcjogQmluYXJ5UmVhZGVyXG4gICkge1xuICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgY29uc3QgbWVzc2FnZUluaXRpYWxpemVyMSA9IG5ldyBQYXJ0aXRpb25SYXcoKTtcbiAgICAgICAgICBfcmVhZGVyLnJlYWRNZXNzYWdlKFxuICAgICAgICAgICAgbWVzc2FnZUluaXRpYWxpemVyMSxcbiAgICAgICAgICAgIFBhcnRpdGlvblJhdy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIChfaW5zdGFuY2UucGFydGl0aW9ucyA9IF9pbnN0YW5jZS5wYXJ0aXRpb25zIHx8IFtdKS5wdXNoKFxuICAgICAgICAgICAgbWVzc2FnZUluaXRpYWxpemVyMVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBfaW5zdGFuY2UucGFnZSA9IF9yZWFkZXIucmVhZEludDMyKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBfaW5zdGFuY2UucGFnZVNpemUgPSBfcmVhZGVyLnJlYWRJbnQzMigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgX2luc3RhbmNlLnRvdGFsID0gX3JlYWRlci5yZWFkSW50MzIoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIExpc3RQYXJ0aXRpb25zUmVzcG9uc2UucmVmaW5lVmFsdWVzKF9pbnN0YW5jZSk7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplcyBhIG1lc3NhZ2UgdG8gYmluYXJ5IGZvcm1hdCB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3dyaXRlciBiaW5hcnkgd3JpdGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIoXG4gICAgX2luc3RhbmNlOiBMaXN0UGFydGl0aW9uc1Jlc3BvbnNlLFxuICAgIF93cml0ZXI6IEJpbmFyeVdyaXRlclxuICApIHtcbiAgICBpZiAoX2luc3RhbmNlLnBhcnRpdGlvbnMgJiYgX2luc3RhbmNlLnBhcnRpdGlvbnMubGVuZ3RoKSB7XG4gICAgICBfd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgICAxLFxuICAgICAgICBfaW5zdGFuY2UucGFydGl0aW9ucyBhcyBhbnksXG4gICAgICAgIFBhcnRpdGlvblJhdy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5wYWdlKSB7XG4gICAgICBfd3JpdGVyLndyaXRlSW50MzIoMiwgX2luc3RhbmNlLnBhZ2UpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLnBhZ2VTaXplKSB7XG4gICAgICBfd3JpdGVyLndyaXRlSW50MzIoMywgX2luc3RhbmNlLnBhZ2VTaXplKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS50b3RhbCkge1xuICAgICAgX3dyaXRlci53cml0ZUludDMyKDQsIF9pbnN0YW5jZS50b3RhbCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcGFydGl0aW9ucz86IFBhcnRpdGlvblJhd1tdO1xuICBwcml2YXRlIF9wYWdlOiBudW1iZXI7XG4gIHByaXZhdGUgX3BhZ2VTaXplOiBudW1iZXI7XG4gIHByaXZhdGUgX3RvdGFsOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBMaXN0UGFydGl0aW9uc1Jlc3BvbnNlIHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPExpc3RQYXJ0aXRpb25zUmVzcG9uc2UuQXNPYmplY3Q+KSB7XG4gICAgX3ZhbHVlID0gX3ZhbHVlIHx8IHt9O1xuICAgIHRoaXMucGFydGl0aW9ucyA9IChfdmFsdWUucGFydGl0aW9ucyB8fCBbXSkubWFwKG0gPT4gbmV3IFBhcnRpdGlvblJhdyhtKSk7XG4gICAgdGhpcy5wYWdlID0gX3ZhbHVlLnBhZ2U7XG4gICAgdGhpcy5wYWdlU2l6ZSA9IF92YWx1ZS5wYWdlU2l6ZTtcbiAgICB0aGlzLnRvdGFsID0gX3ZhbHVlLnRvdGFsO1xuICAgIExpc3RQYXJ0aXRpb25zUmVzcG9uc2UucmVmaW5lVmFsdWVzKHRoaXMpO1xuICB9XG4gIGdldCBwYXJ0aXRpb25zKCk6IFBhcnRpdGlvblJhd1tdIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fcGFydGl0aW9ucztcbiAgfVxuICBzZXQgcGFydGl0aW9ucyh2YWx1ZTogUGFydGl0aW9uUmF3W10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9wYXJ0aXRpb25zID0gdmFsdWU7XG4gIH1cbiAgZ2V0IHBhZ2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcGFnZTtcbiAgfVxuICBzZXQgcGFnZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fcGFnZSA9IHZhbHVlO1xuICB9XG4gIGdldCBwYWdlU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9wYWdlU2l6ZTtcbiAgfVxuICBzZXQgcGFnZVNpemUodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3BhZ2VTaXplID0gdmFsdWU7XG4gIH1cbiAgZ2V0IHRvdGFsKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3RvdGFsO1xuICB9XG4gIHNldCB0b3RhbCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fdG90YWwgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBMaXN0UGFydGl0aW9uc1Jlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IExpc3RQYXJ0aXRpb25zUmVzcG9uc2UuQXNPYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJ0aXRpb25zOiAodGhpcy5wYXJ0aXRpb25zIHx8IFtdKS5tYXAobSA9PiBtLnRvT2JqZWN0KCkpLFxuICAgICAgcGFnZTogdGhpcy5wYWdlLFxuICAgICAgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsXG4gICAgICB0b3RhbDogdGhpcy50b3RhbFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICovXG4gIHRvUHJvdG9idWZKU09OKFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICk6IExpc3RQYXJ0aXRpb25zUmVzcG9uc2UuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJ0aXRpb25zOiAodGhpcy5wYXJ0aXRpb25zIHx8IFtdKS5tYXAobSA9PiBtLnRvUHJvdG9idWZKU09OKG9wdGlvbnMpKSxcbiAgICAgIHBhZ2U6IHRoaXMucGFnZSxcbiAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLFxuICAgICAgdG90YWw6IHRoaXMudG90YWxcbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIExpc3RQYXJ0aXRpb25zUmVzcG9uc2Uge1xuICAvKipcbiAgICogU3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIExpc3RQYXJ0aXRpb25zUmVzcG9uc2VcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIHBhcnRpdGlvbnM/OiBQYXJ0aXRpb25SYXcuQXNPYmplY3RbXTtcbiAgICBwYWdlOiBudW1iZXI7XG4gICAgcGFnZVNpemU6IG51bWJlcjtcbiAgICB0b3RhbDogbnVtYmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIExpc3RQYXJ0aXRpb25zUmVzcG9uc2VcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNQcm90b2J1ZkpTT04ge1xuICAgIHBhcnRpdGlvbnM6IFBhcnRpdGlvblJhdy5Bc1Byb3RvYnVmSlNPTltdIHwgbnVsbDtcbiAgICBwYWdlOiBudW1iZXI7XG4gICAgcGFnZVNpemU6IG51bWJlcjtcbiAgICB0b3RhbDogbnVtYmVyO1xuICB9XG59XG5cbi8qKlxuICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3IgYXJtb25pay5hcGkuZ3JwYy52MS5wYXJ0aXRpb25zLkdldFBhcnRpdGlvblJlcXVlc3RcbiAqL1xuZXhwb3J0IGNsYXNzIEdldFBhcnRpdGlvblJlcXVlc3QgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdhcm1vbmlrLmFwaS5ncnBjLnYxLnBhcnRpdGlvbnMuR2V0UGFydGl0aW9uUmVxdWVzdCc7XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEdldFBhcnRpdGlvblJlcXVlc3QoKTtcbiAgICBHZXRQYXJ0aXRpb25SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICAgIGluc3RhbmNlLFxuICAgICAgbmV3IEJpbmFyeVJlYWRlcihieXRlcylcbiAgICApO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBhbGwgdGhlIHByb3BlcnRpZXMgYW5kIHNldCBkZWZhdWx0IHByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgcmVmaW5lVmFsdWVzKF9pbnN0YW5jZTogR2V0UGFydGl0aW9uUmVxdWVzdCkge1xuICAgIF9pbnN0YW5jZS5pZCA9IF9pbnN0YW5jZS5pZCB8fCAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IEdldFBhcnRpdGlvblJlcXVlc3QsXG4gICAgX3JlYWRlcjogQmluYXJ5UmVhZGVyXG4gICkge1xuICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgX2luc3RhbmNlLmlkID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBHZXRQYXJ0aXRpb25SZXF1ZXN0LnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKFxuICAgIF9pbnN0YW5jZTogR2V0UGFydGl0aW9uUmVxdWVzdCxcbiAgICBfd3JpdGVyOiBCaW5hcnlXcml0ZXJcbiAgKSB7XG4gICAgaWYgKF9pbnN0YW5jZS5pZCkge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZygxLCBfaW5zdGFuY2UuaWQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBHZXRQYXJ0aXRpb25SZXF1ZXN0IHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPEdldFBhcnRpdGlvblJlcXVlc3QuQXNPYmplY3Q+KSB7XG4gICAgX3ZhbHVlID0gX3ZhbHVlIHx8IHt9O1xuICAgIHRoaXMuaWQgPSBfdmFsdWUuaWQ7XG4gICAgR2V0UGFydGl0aW9uUmVxdWVzdC5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cbiAgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2lkO1xuICB9XG4gIHNldCBpZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5faWQgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBHZXRQYXJ0aXRpb25SZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IEdldFBhcnRpdGlvblJlcXVlc3QuQXNPYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogdGhpcy5pZFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICovXG4gIHRvUHJvdG9idWZKU09OKFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICk6IEdldFBhcnRpdGlvblJlcXVlc3QuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogdGhpcy5pZFxuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBtb2R1bGUgR2V0UGFydGl0aW9uUmVxdWVzdCB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgR2V0UGFydGl0aW9uUmVxdWVzdFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc09iamVjdCB7XG4gICAgaWQ6IHN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBHZXRQYXJ0aXRpb25SZXF1ZXN0XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICBpZDogc3RyaW5nO1xuICB9XG59XG5cbi8qKlxuICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3IgYXJtb25pay5hcGkuZ3JwYy52MS5wYXJ0aXRpb25zLkdldFBhcnRpdGlvblJlc3BvbnNlXG4gKi9cbmV4cG9ydCBjbGFzcyBHZXRQYXJ0aXRpb25SZXNwb25zZSBpbXBsZW1lbnRzIEdycGNNZXNzYWdlIHtcbiAgc3RhdGljIGlkID0gJ2FybW9uaWsuYXBpLmdycGMudjEucGFydGl0aW9ucy5HZXRQYXJ0aXRpb25SZXNwb25zZSc7XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEdldFBhcnRpdGlvblJlc3BvbnNlKCk7XG4gICAgR2V0UGFydGl0aW9uUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgICAgaW5zdGFuY2UsXG4gICAgICBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKVxuICAgICk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBHZXRQYXJ0aXRpb25SZXNwb25zZSkge1xuICAgIF9pbnN0YW5jZS5wYXJ0aXRpb24gPSBfaW5zdGFuY2UucGFydGl0aW9uIHx8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IEdldFBhcnRpdGlvblJlc3BvbnNlLFxuICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICApIHtcbiAgICB3aGlsZSAoX3JlYWRlci5uZXh0RmllbGQoKSkge1xuICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIF9pbnN0YW5jZS5wYXJ0aXRpb24gPSBuZXcgUGFydGl0aW9uUmF3KCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIF9pbnN0YW5jZS5wYXJ0aXRpb24sXG4gICAgICAgICAgICBQYXJ0aXRpb25SYXcuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIEdldFBhcnRpdGlvblJlc3BvbnNlLnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKFxuICAgIF9pbnN0YW5jZTogR2V0UGFydGl0aW9uUmVzcG9uc2UsXG4gICAgX3dyaXRlcjogQmluYXJ5V3JpdGVyXG4gICkge1xuICAgIGlmIChfaW5zdGFuY2UucGFydGl0aW9uKSB7XG4gICAgICBfd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgICAgMSxcbiAgICAgICAgX2luc3RhbmNlLnBhcnRpdGlvbiBhcyBhbnksXG4gICAgICAgIFBhcnRpdGlvblJhdy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9wYXJ0aXRpb24/OiBQYXJ0aXRpb25SYXc7XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBHZXRQYXJ0aXRpb25SZXNwb25zZSB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgKi9cbiAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxHZXRQYXJ0aXRpb25SZXNwb25zZS5Bc09iamVjdD4pIHtcbiAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgdGhpcy5wYXJ0aXRpb24gPSBfdmFsdWUucGFydGl0aW9uXG4gICAgICA/IG5ldyBQYXJ0aXRpb25SYXcoX3ZhbHVlLnBhcnRpdGlvbilcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIEdldFBhcnRpdGlvblJlc3BvbnNlLnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgfVxuICBnZXQgcGFydGl0aW9uKCk6IFBhcnRpdGlvblJhdyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcnRpdGlvbjtcbiAgfVxuICBzZXQgcGFydGl0aW9uKHZhbHVlOiBQYXJ0aXRpb25SYXcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9wYXJ0aXRpb24gPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBHZXRQYXJ0aXRpb25SZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAqL1xuICB0b09iamVjdCgpOiBHZXRQYXJ0aXRpb25SZXNwb25zZS5Bc09iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcnRpdGlvbjogdGhpcy5wYXJ0aXRpb24gPyB0aGlzLnBhcnRpdGlvbi50b09iamVjdCgpIDogdW5kZWZpbmVkXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgKi9cbiAgdG9Qcm90b2J1ZkpTT04oXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgKTogR2V0UGFydGl0aW9uUmVzcG9uc2UuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJ0aXRpb246IHRoaXMucGFydGl0aW9uID8gdGhpcy5wYXJ0aXRpb24udG9Qcm90b2J1ZkpTT04ob3B0aW9ucykgOiBudWxsXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IG1vZHVsZSBHZXRQYXJ0aXRpb25SZXNwb25zZSB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgR2V0UGFydGl0aW9uUmVzcG9uc2VcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIHBhcnRpdGlvbj86IFBhcnRpdGlvblJhdy5Bc09iamVjdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBHZXRQYXJ0aXRpb25SZXNwb25zZVxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgcGFydGl0aW9uOiBQYXJ0aXRpb25SYXcuQXNQcm90b2J1ZkpTT04gfCBudWxsO1xuICB9XG59XG4iXX0=