@vendasta/developer-training 0.9.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/_internal/a-hundal-to-do-project.api.service.mjs +61 -0
- package/esm2020/lib/_internal/e-currie-list.api.service.mjs +50 -0
- package/esm2020/lib/_internal/enums/api.enum.mjs +13 -0
- package/esm2020/lib/_internal/enums/index.mjs +8 -0
- package/esm2020/lib/_internal/hdo-todo.api.service.mjs +60 -0
- package/esm2020/lib/_internal/i-olaleye-to-do-qa.api.service.mjs +61 -0
- package/esm2020/lib/_internal/index.mjs +9 -1
- package/esm2020/lib/_internal/interfaces/annotations.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/api.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/businessqa.interface.mjs +1 -1
- package/esm2020/lib/_internal/interfaces/field-mask.interface.mjs +1 -1
- package/esm2020/lib/_internal/interfaces/index.mjs +1 -1
- package/esm2020/lib/_internal/interfaces/lfossenier-todo.interface.mjs +1 -1
- package/esm2020/lib/_internal/interfaces/tkabakovtodo.interface.mjs +8 -0
- package/esm2020/lib/_internal/l-fossenier-todo.api.service.mjs +5 -5
- package/esm2020/lib/_internal/m-mugot-list-qa.api.service.mjs +60 -0
- package/esm2020/lib/_internal/objects/annotations.mjs +30 -0
- package/esm2020/lib/_internal/objects/api.mjs +1346 -0
- package/esm2020/lib/_internal/objects/businessqa.mjs +7 -1
- package/esm2020/lib/_internal/objects/field-mask.mjs +7 -1
- package/esm2020/lib/_internal/objects/index.mjs +5 -2
- package/esm2020/lib/_internal/objects/lfossenier-todo.mjs +33 -27
- package/esm2020/lib/_internal/objects/tkabakovtodo.mjs +274 -0
- package/esm2020/lib/_internal/t-kabakov-to-do.api.service.mjs +61 -0
- package/esm2020/lib/_internal/w-horrell-to-do.api.service.mjs +60 -0
- package/fesm2015/vendasta-developer-training.mjs +2086 -81
- package/fesm2015/vendasta-developer-training.mjs.map +1 -1
- package/fesm2020/vendasta-developer-training.mjs +2086 -81
- package/fesm2020/vendasta-developer-training.mjs.map +1 -1
- package/lib/_internal/a-hundal-to-do-project.api.service.d.ts +20 -0
- package/lib/_internal/e-currie-list.api.service.d.ts +18 -0
- package/lib/_internal/enums/api.enum.d.ts +5 -0
- package/lib/_internal/enums/index.d.ts +1 -0
- package/lib/_internal/hdo-todo.api.service.d.ts +20 -0
- package/lib/_internal/i-olaleye-to-do-qa.api.service.d.ts +20 -0
- package/lib/_internal/index.d.ts +8 -0
- package/lib/_internal/interfaces/annotations.interface.d.ts +4 -0
- package/lib/_internal/interfaces/api.interface.d.ts +208 -0
- package/lib/_internal/interfaces/index.d.ts +4 -1
- package/lib/_internal/interfaces/lfossenier-todo.interface.d.ts +5 -5
- package/lib/_internal/interfaces/tkabakovtodo.interface.d.ts +40 -0
- package/lib/_internal/l-fossenier-todo.api.service.d.ts +3 -3
- package/lib/_internal/m-mugot-list-qa.api.service.d.ts +20 -0
- package/lib/_internal/objects/annotations.d.ts +9 -0
- package/lib/_internal/objects/api.d.ts +387 -0
- package/lib/_internal/objects/businessqa.d.ts +1 -0
- package/lib/_internal/objects/field-mask.d.ts +1 -0
- package/lib/_internal/objects/index.d.ts +4 -1
- package/lib/_internal/objects/lfossenier-todo.d.ts +9 -8
- package/lib/_internal/objects/tkabakovtodo.d.ts +78 -0
- package/lib/_internal/t-kabakov-to-do.api.service.d.ts +20 -0
- package/lib/_internal/w-horrell-to-do.api.service.d.ts +20 -0
- package/package.json +1 -1
@@ -0,0 +1,1346 @@
|
|
1
|
+
export function enumStringToValue(enumRef, value) {
|
2
|
+
if (typeof value === 'number') {
|
3
|
+
return value;
|
4
|
+
}
|
5
|
+
return enumRef[value];
|
6
|
+
}
|
7
|
+
export class AHundalAddTaskRequest {
|
8
|
+
static fromProto(proto) {
|
9
|
+
let m = new AHundalAddTaskRequest();
|
10
|
+
m = Object.assign(m, proto);
|
11
|
+
if (proto.newTask) {
|
12
|
+
m.newTask = AHundalTask.fromProto(proto.newTask);
|
13
|
+
}
|
14
|
+
return m;
|
15
|
+
}
|
16
|
+
constructor(kwargs) {
|
17
|
+
if (!kwargs) {
|
18
|
+
return;
|
19
|
+
}
|
20
|
+
Object.assign(this, kwargs);
|
21
|
+
}
|
22
|
+
toApiJson() {
|
23
|
+
const toReturn = {};
|
24
|
+
if (typeof this.newTask !== 'undefined' && this.newTask !== null) {
|
25
|
+
toReturn['newTask'] = 'toApiJson' in this.newTask ? this.newTask.toApiJson() : this.newTask;
|
26
|
+
}
|
27
|
+
return toReturn;
|
28
|
+
}
|
29
|
+
}
|
30
|
+
export class AHundalAddTaskResponse {
|
31
|
+
static fromProto(proto) {
|
32
|
+
let m = new AHundalAddTaskResponse();
|
33
|
+
m = Object.assign(m, proto);
|
34
|
+
return m;
|
35
|
+
}
|
36
|
+
constructor(kwargs) {
|
37
|
+
if (!kwargs) {
|
38
|
+
return;
|
39
|
+
}
|
40
|
+
Object.assign(this, kwargs);
|
41
|
+
}
|
42
|
+
toApiJson() {
|
43
|
+
const toReturn = {};
|
44
|
+
if (typeof this.addSuccesfull !== 'undefined') {
|
45
|
+
toReturn['addSuccesfull'] = this.addSuccesfull;
|
46
|
+
}
|
47
|
+
return toReturn;
|
48
|
+
}
|
49
|
+
}
|
50
|
+
export class AHundalDeleteTaskRequest {
|
51
|
+
static fromProto(proto) {
|
52
|
+
let m = new AHundalDeleteTaskRequest();
|
53
|
+
m = Object.assign(m, proto);
|
54
|
+
return m;
|
55
|
+
}
|
56
|
+
constructor(kwargs) {
|
57
|
+
if (!kwargs) {
|
58
|
+
return;
|
59
|
+
}
|
60
|
+
Object.assign(this, kwargs);
|
61
|
+
}
|
62
|
+
toApiJson() {
|
63
|
+
const toReturn = {};
|
64
|
+
if (typeof this.taskId !== 'undefined') {
|
65
|
+
toReturn['taskId'] = this.taskId;
|
66
|
+
}
|
67
|
+
return toReturn;
|
68
|
+
}
|
69
|
+
}
|
70
|
+
export class AHundalDeleteTaskResponse {
|
71
|
+
static fromProto(proto) {
|
72
|
+
let m = new AHundalDeleteTaskResponse();
|
73
|
+
m = Object.assign(m, proto);
|
74
|
+
return m;
|
75
|
+
}
|
76
|
+
constructor(kwargs) {
|
77
|
+
if (!kwargs) {
|
78
|
+
return;
|
79
|
+
}
|
80
|
+
Object.assign(this, kwargs);
|
81
|
+
}
|
82
|
+
toApiJson() {
|
83
|
+
const toReturn = {};
|
84
|
+
if (typeof this.deleteSuccesfull !== 'undefined') {
|
85
|
+
toReturn['deleteSuccesfull'] = this.deleteSuccesfull;
|
86
|
+
}
|
87
|
+
return toReturn;
|
88
|
+
}
|
89
|
+
}
|
90
|
+
export class AHundalEditTaskRequest {
|
91
|
+
static fromProto(proto) {
|
92
|
+
let m = new AHundalEditTaskRequest();
|
93
|
+
m = Object.assign(m, proto);
|
94
|
+
if (proto.editedTask) {
|
95
|
+
m.editedTask = AHundalTask.fromProto(proto.editedTask);
|
96
|
+
}
|
97
|
+
return m;
|
98
|
+
}
|
99
|
+
constructor(kwargs) {
|
100
|
+
if (!kwargs) {
|
101
|
+
return;
|
102
|
+
}
|
103
|
+
Object.assign(this, kwargs);
|
104
|
+
}
|
105
|
+
toApiJson() {
|
106
|
+
const toReturn = {};
|
107
|
+
if (typeof this.editedTask !== 'undefined' && this.editedTask !== null) {
|
108
|
+
toReturn['editedTask'] = 'toApiJson' in this.editedTask ? this.editedTask.toApiJson() : this.editedTask;
|
109
|
+
}
|
110
|
+
return toReturn;
|
111
|
+
}
|
112
|
+
}
|
113
|
+
export class AHundalEditTaskResponse {
|
114
|
+
static fromProto(proto) {
|
115
|
+
let m = new AHundalEditTaskResponse();
|
116
|
+
m = Object.assign(m, proto);
|
117
|
+
return m;
|
118
|
+
}
|
119
|
+
constructor(kwargs) {
|
120
|
+
if (!kwargs) {
|
121
|
+
return;
|
122
|
+
}
|
123
|
+
Object.assign(this, kwargs);
|
124
|
+
}
|
125
|
+
toApiJson() {
|
126
|
+
const toReturn = {};
|
127
|
+
if (typeof this.editSuccesfull !== 'undefined') {
|
128
|
+
toReturn['editSuccesfull'] = this.editSuccesfull;
|
129
|
+
}
|
130
|
+
return toReturn;
|
131
|
+
}
|
132
|
+
}
|
133
|
+
export class AHundalGetSpecificTaskRequest {
|
134
|
+
static fromProto(proto) {
|
135
|
+
let m = new AHundalGetSpecificTaskRequest();
|
136
|
+
m = Object.assign(m, proto);
|
137
|
+
return m;
|
138
|
+
}
|
139
|
+
constructor(kwargs) {
|
140
|
+
if (!kwargs) {
|
141
|
+
return;
|
142
|
+
}
|
143
|
+
Object.assign(this, kwargs);
|
144
|
+
}
|
145
|
+
toApiJson() {
|
146
|
+
const toReturn = {};
|
147
|
+
if (typeof this.taskId !== 'undefined') {
|
148
|
+
toReturn['taskId'] = this.taskId;
|
149
|
+
}
|
150
|
+
return toReturn;
|
151
|
+
}
|
152
|
+
}
|
153
|
+
export class AHundalGetSpecificTaskResponse {
|
154
|
+
static fromProto(proto) {
|
155
|
+
let m = new AHundalGetSpecificTaskResponse();
|
156
|
+
m = Object.assign(m, proto);
|
157
|
+
if (proto.ahundalTask) {
|
158
|
+
m.ahundalTask = AHundalTask.fromProto(proto.ahundalTask);
|
159
|
+
}
|
160
|
+
return m;
|
161
|
+
}
|
162
|
+
constructor(kwargs) {
|
163
|
+
if (!kwargs) {
|
164
|
+
return;
|
165
|
+
}
|
166
|
+
Object.assign(this, kwargs);
|
167
|
+
}
|
168
|
+
toApiJson() {
|
169
|
+
const toReturn = {};
|
170
|
+
if (typeof this.ahundalTask !== 'undefined' && this.ahundalTask !== null) {
|
171
|
+
toReturn['ahundalTask'] = 'toApiJson' in this.ahundalTask ? this.ahundalTask.toApiJson() : this.ahundalTask;
|
172
|
+
}
|
173
|
+
return toReturn;
|
174
|
+
}
|
175
|
+
}
|
176
|
+
export class AHundalGetTasksRequest {
|
177
|
+
static fromProto(proto) {
|
178
|
+
let m = new AHundalGetTasksRequest();
|
179
|
+
m = Object.assign(m, proto);
|
180
|
+
return m;
|
181
|
+
}
|
182
|
+
constructor(kwargs) {
|
183
|
+
if (!kwargs) {
|
184
|
+
return;
|
185
|
+
}
|
186
|
+
Object.assign(this, kwargs);
|
187
|
+
}
|
188
|
+
toApiJson() {
|
189
|
+
const toReturn = {};
|
190
|
+
if (typeof this.taskId !== 'undefined') {
|
191
|
+
toReturn['taskId'] = this.taskId;
|
192
|
+
}
|
193
|
+
return toReturn;
|
194
|
+
}
|
195
|
+
}
|
196
|
+
export class AHundalGetTasksResponse {
|
197
|
+
static fromProto(proto) {
|
198
|
+
let m = new AHundalGetTasksResponse();
|
199
|
+
m = Object.assign(m, proto);
|
200
|
+
if (proto.ahundalTask) {
|
201
|
+
m.ahundalTask = proto.ahundalTask.map(AHundalTask.fromProto);
|
202
|
+
}
|
203
|
+
return m;
|
204
|
+
}
|
205
|
+
constructor(kwargs) {
|
206
|
+
if (!kwargs) {
|
207
|
+
return;
|
208
|
+
}
|
209
|
+
Object.assign(this, kwargs);
|
210
|
+
}
|
211
|
+
toApiJson() {
|
212
|
+
const toReturn = {};
|
213
|
+
if (typeof this.ahundalTask !== 'undefined' && this.ahundalTask !== null) {
|
214
|
+
toReturn['ahundalTask'] = 'toApiJson' in this.ahundalTask ? this.ahundalTask.toApiJson() : this.ahundalTask;
|
215
|
+
}
|
216
|
+
return toReturn;
|
217
|
+
}
|
218
|
+
}
|
219
|
+
export class AHundalTask {
|
220
|
+
static fromProto(proto) {
|
221
|
+
let m = new AHundalTask();
|
222
|
+
m = Object.assign(m, proto);
|
223
|
+
return m;
|
224
|
+
}
|
225
|
+
constructor(kwargs) {
|
226
|
+
if (!kwargs) {
|
227
|
+
return;
|
228
|
+
}
|
229
|
+
Object.assign(this, kwargs);
|
230
|
+
}
|
231
|
+
toApiJson() {
|
232
|
+
const toReturn = {};
|
233
|
+
if (typeof this.id !== 'undefined') {
|
234
|
+
toReturn['id'] = this.id;
|
235
|
+
}
|
236
|
+
if (typeof this.taskTitle !== 'undefined') {
|
237
|
+
toReturn['taskTitle'] = this.taskTitle;
|
238
|
+
}
|
239
|
+
if (typeof this.day !== 'undefined') {
|
240
|
+
toReturn['day'] = this.day;
|
241
|
+
}
|
242
|
+
if (typeof this.month !== 'undefined') {
|
243
|
+
toReturn['month'] = this.month;
|
244
|
+
}
|
245
|
+
if (typeof this.year !== 'undefined') {
|
246
|
+
toReturn['year'] = this.year;
|
247
|
+
}
|
248
|
+
if (typeof this.description !== 'undefined') {
|
249
|
+
toReturn['description'] = this.description;
|
250
|
+
}
|
251
|
+
if (typeof this.completed !== 'undefined') {
|
252
|
+
toReturn['completed'] = this.completed;
|
253
|
+
}
|
254
|
+
if (typeof this.isDeleted !== 'undefined') {
|
255
|
+
toReturn['isDeleted'] = this.isDeleted;
|
256
|
+
}
|
257
|
+
return toReturn;
|
258
|
+
}
|
259
|
+
}
|
260
|
+
export class CreateECurrieRequest {
|
261
|
+
static fromProto(proto) {
|
262
|
+
let m = new CreateECurrieRequest();
|
263
|
+
m = Object.assign(m, proto);
|
264
|
+
return m;
|
265
|
+
}
|
266
|
+
constructor(kwargs) {
|
267
|
+
if (!kwargs) {
|
268
|
+
return;
|
269
|
+
}
|
270
|
+
Object.assign(this, kwargs);
|
271
|
+
}
|
272
|
+
toApiJson() {
|
273
|
+
const toReturn = {};
|
274
|
+
if (typeof this.title !== 'undefined') {
|
275
|
+
toReturn['title'] = this.title;
|
276
|
+
}
|
277
|
+
if (typeof this.dueDate !== 'undefined') {
|
278
|
+
toReturn['dueDate'] = this.dueDate;
|
279
|
+
}
|
280
|
+
if (typeof this.description !== 'undefined') {
|
281
|
+
toReturn['description'] = this.description;
|
282
|
+
}
|
283
|
+
return toReturn;
|
284
|
+
}
|
285
|
+
}
|
286
|
+
export class CreateECurrieResponse {
|
287
|
+
static fromProto(proto) {
|
288
|
+
let m = new CreateECurrieResponse();
|
289
|
+
m = Object.assign(m, proto);
|
290
|
+
return m;
|
291
|
+
}
|
292
|
+
constructor(kwargs) {
|
293
|
+
if (!kwargs) {
|
294
|
+
return;
|
295
|
+
}
|
296
|
+
Object.assign(this, kwargs);
|
297
|
+
}
|
298
|
+
toApiJson() {
|
299
|
+
const toReturn = {};
|
300
|
+
if (typeof this.id !== 'undefined') {
|
301
|
+
toReturn['id'] = this.id;
|
302
|
+
}
|
303
|
+
return toReturn;
|
304
|
+
}
|
305
|
+
}
|
306
|
+
export class CreateHdoTodoRequest {
|
307
|
+
static fromProto(proto) {
|
308
|
+
let m = new CreateHdoTodoRequest();
|
309
|
+
m = Object.assign(m, proto);
|
310
|
+
if (proto.todo) {
|
311
|
+
m.todo = HdoTodoItem.fromProto(proto.todo);
|
312
|
+
}
|
313
|
+
return m;
|
314
|
+
}
|
315
|
+
constructor(kwargs) {
|
316
|
+
if (!kwargs) {
|
317
|
+
return;
|
318
|
+
}
|
319
|
+
Object.assign(this, kwargs);
|
320
|
+
}
|
321
|
+
toApiJson() {
|
322
|
+
const toReturn = {};
|
323
|
+
if (typeof this.todo !== 'undefined' && this.todo !== null) {
|
324
|
+
toReturn['todo'] = 'toApiJson' in this.todo ? this.todo.toApiJson() : this.todo;
|
325
|
+
}
|
326
|
+
return toReturn;
|
327
|
+
}
|
328
|
+
}
|
329
|
+
export class CreateHdoTodoResponse {
|
330
|
+
static fromProto(proto) {
|
331
|
+
let m = new CreateHdoTodoResponse();
|
332
|
+
m = Object.assign(m, proto);
|
333
|
+
if (proto.todo) {
|
334
|
+
m.todo = HdoTodoItem.fromProto(proto.todo);
|
335
|
+
}
|
336
|
+
return m;
|
337
|
+
}
|
338
|
+
constructor(kwargs) {
|
339
|
+
if (!kwargs) {
|
340
|
+
return;
|
341
|
+
}
|
342
|
+
Object.assign(this, kwargs);
|
343
|
+
}
|
344
|
+
toApiJson() {
|
345
|
+
const toReturn = {};
|
346
|
+
if (typeof this.todo !== 'undefined' && this.todo !== null) {
|
347
|
+
toReturn['todo'] = 'toApiJson' in this.todo ? this.todo.toApiJson() : this.todo;
|
348
|
+
}
|
349
|
+
return toReturn;
|
350
|
+
}
|
351
|
+
}
|
352
|
+
export class CreateWHorrellTaskRequest {
|
353
|
+
static fromProto(proto) {
|
354
|
+
let m = new CreateWHorrellTaskRequest();
|
355
|
+
m = Object.assign(m, proto);
|
356
|
+
return m;
|
357
|
+
}
|
358
|
+
constructor(kwargs) {
|
359
|
+
if (!kwargs) {
|
360
|
+
return;
|
361
|
+
}
|
362
|
+
Object.assign(this, kwargs);
|
363
|
+
}
|
364
|
+
toApiJson() {
|
365
|
+
const toReturn = {};
|
366
|
+
if (typeof this.name !== 'undefined') {
|
367
|
+
toReturn['name'] = this.name;
|
368
|
+
}
|
369
|
+
if (typeof this.description !== 'undefined') {
|
370
|
+
toReturn['description'] = this.description;
|
371
|
+
}
|
372
|
+
return toReturn;
|
373
|
+
}
|
374
|
+
}
|
375
|
+
export class CreateWHorrellTaskResponse {
|
376
|
+
static fromProto(proto) {
|
377
|
+
let m = new CreateWHorrellTaskResponse();
|
378
|
+
m = Object.assign(m, proto);
|
379
|
+
return m;
|
380
|
+
}
|
381
|
+
constructor(kwargs) {
|
382
|
+
if (!kwargs) {
|
383
|
+
return;
|
384
|
+
}
|
385
|
+
Object.assign(this, kwargs);
|
386
|
+
}
|
387
|
+
toApiJson() {
|
388
|
+
const toReturn = {};
|
389
|
+
if (typeof this.id !== 'undefined') {
|
390
|
+
toReturn['id'] = this.id;
|
391
|
+
}
|
392
|
+
return toReturn;
|
393
|
+
}
|
394
|
+
}
|
395
|
+
export class DeleteECurrieRequest {
|
396
|
+
static fromProto(proto) {
|
397
|
+
let m = new DeleteECurrieRequest();
|
398
|
+
m = Object.assign(m, proto);
|
399
|
+
return m;
|
400
|
+
}
|
401
|
+
constructor(kwargs) {
|
402
|
+
if (!kwargs) {
|
403
|
+
return;
|
404
|
+
}
|
405
|
+
Object.assign(this, kwargs);
|
406
|
+
}
|
407
|
+
toApiJson() {
|
408
|
+
const toReturn = {};
|
409
|
+
if (typeof this.id !== 'undefined') {
|
410
|
+
toReturn['id'] = this.id;
|
411
|
+
}
|
412
|
+
return toReturn;
|
413
|
+
}
|
414
|
+
}
|
415
|
+
export class DeleteHdoTodoRequest {
|
416
|
+
static fromProto(proto) {
|
417
|
+
let m = new DeleteHdoTodoRequest();
|
418
|
+
m = Object.assign(m, proto);
|
419
|
+
return m;
|
420
|
+
}
|
421
|
+
constructor(kwargs) {
|
422
|
+
if (!kwargs) {
|
423
|
+
return;
|
424
|
+
}
|
425
|
+
Object.assign(this, kwargs);
|
426
|
+
}
|
427
|
+
toApiJson() {
|
428
|
+
const toReturn = {};
|
429
|
+
if (typeof this.id !== 'undefined') {
|
430
|
+
toReturn['id'] = this.id;
|
431
|
+
}
|
432
|
+
return toReturn;
|
433
|
+
}
|
434
|
+
}
|
435
|
+
export class DeleteHdoTodoResponse {
|
436
|
+
static fromProto(proto) {
|
437
|
+
let m = new DeleteHdoTodoResponse();
|
438
|
+
m = Object.assign(m, proto);
|
439
|
+
return m;
|
440
|
+
}
|
441
|
+
constructor(kwargs) {
|
442
|
+
if (!kwargs) {
|
443
|
+
return;
|
444
|
+
}
|
445
|
+
Object.assign(this, kwargs);
|
446
|
+
}
|
447
|
+
toApiJson() {
|
448
|
+
const toReturn = {};
|
449
|
+
if (typeof this.message !== 'undefined') {
|
450
|
+
toReturn['message'] = this.message;
|
451
|
+
}
|
452
|
+
return toReturn;
|
453
|
+
}
|
454
|
+
}
|
455
|
+
export class DeleteWHorrellTaskRequest {
|
456
|
+
static fromProto(proto) {
|
457
|
+
let m = new DeleteWHorrellTaskRequest();
|
458
|
+
m = Object.assign(m, proto);
|
459
|
+
return m;
|
460
|
+
}
|
461
|
+
constructor(kwargs) {
|
462
|
+
if (!kwargs) {
|
463
|
+
return;
|
464
|
+
}
|
465
|
+
Object.assign(this, kwargs);
|
466
|
+
}
|
467
|
+
toApiJson() {
|
468
|
+
const toReturn = {};
|
469
|
+
if (typeof this.id !== 'undefined') {
|
470
|
+
toReturn['id'] = this.id;
|
471
|
+
}
|
472
|
+
return toReturn;
|
473
|
+
}
|
474
|
+
}
|
475
|
+
export class ECurrieTodoItem {
|
476
|
+
static fromProto(proto) {
|
477
|
+
let m = new ECurrieTodoItem();
|
478
|
+
m = Object.assign(m, proto);
|
479
|
+
return m;
|
480
|
+
}
|
481
|
+
constructor(kwargs) {
|
482
|
+
if (!kwargs) {
|
483
|
+
return;
|
484
|
+
}
|
485
|
+
Object.assign(this, kwargs);
|
486
|
+
}
|
487
|
+
toApiJson() {
|
488
|
+
const toReturn = {};
|
489
|
+
if (typeof this.id !== 'undefined') {
|
490
|
+
toReturn['id'] = this.id;
|
491
|
+
}
|
492
|
+
if (typeof this.title !== 'undefined') {
|
493
|
+
toReturn['title'] = this.title;
|
494
|
+
}
|
495
|
+
if (typeof this.completed !== 'undefined') {
|
496
|
+
toReturn['completed'] = this.completed;
|
497
|
+
}
|
498
|
+
if (typeof this.dueDate !== 'undefined') {
|
499
|
+
toReturn['dueDate'] = this.dueDate;
|
500
|
+
}
|
501
|
+
if (typeof this.description !== 'undefined') {
|
502
|
+
toReturn['description'] = this.description;
|
503
|
+
}
|
504
|
+
return toReturn;
|
505
|
+
}
|
506
|
+
}
|
507
|
+
export class EditWHorrellTaskRequest {
|
508
|
+
static fromProto(proto) {
|
509
|
+
let m = new EditWHorrellTaskRequest();
|
510
|
+
m = Object.assign(m, proto);
|
511
|
+
return m;
|
512
|
+
}
|
513
|
+
constructor(kwargs) {
|
514
|
+
if (!kwargs) {
|
515
|
+
return;
|
516
|
+
}
|
517
|
+
Object.assign(this, kwargs);
|
518
|
+
}
|
519
|
+
toApiJson() {
|
520
|
+
const toReturn = {};
|
521
|
+
if (typeof this.id !== 'undefined') {
|
522
|
+
toReturn['id'] = this.id;
|
523
|
+
}
|
524
|
+
if (typeof this.name !== 'undefined') {
|
525
|
+
toReturn['name'] = this.name;
|
526
|
+
}
|
527
|
+
if (typeof this.description !== 'undefined') {
|
528
|
+
toReturn['description'] = this.description;
|
529
|
+
}
|
530
|
+
if (typeof this.isCompleted !== 'undefined') {
|
531
|
+
toReturn['isCompleted'] = this.isCompleted;
|
532
|
+
}
|
533
|
+
return toReturn;
|
534
|
+
}
|
535
|
+
}
|
536
|
+
export class EditWHorrellTaskResponse {
|
537
|
+
static fromProto(proto) {
|
538
|
+
let m = new EditWHorrellTaskResponse();
|
539
|
+
m = Object.assign(m, proto);
|
540
|
+
return m;
|
541
|
+
}
|
542
|
+
constructor(kwargs) {
|
543
|
+
if (!kwargs) {
|
544
|
+
return;
|
545
|
+
}
|
546
|
+
Object.assign(this, kwargs);
|
547
|
+
}
|
548
|
+
toApiJson() {
|
549
|
+
const toReturn = {};
|
550
|
+
if (typeof this.id !== 'undefined') {
|
551
|
+
toReturn['id'] = this.id;
|
552
|
+
}
|
553
|
+
return toReturn;
|
554
|
+
}
|
555
|
+
}
|
556
|
+
export class GetECurrieListRequest {
|
557
|
+
static fromProto(proto) {
|
558
|
+
let m = new GetECurrieListRequest();
|
559
|
+
m = Object.assign(m, proto);
|
560
|
+
return m;
|
561
|
+
}
|
562
|
+
constructor(kwargs) {
|
563
|
+
if (!kwargs) {
|
564
|
+
return;
|
565
|
+
}
|
566
|
+
Object.assign(this, kwargs);
|
567
|
+
}
|
568
|
+
toApiJson() {
|
569
|
+
const toReturn = {};
|
570
|
+
if (typeof this.category !== 'undefined') {
|
571
|
+
toReturn['category'] = this.category;
|
572
|
+
}
|
573
|
+
if (typeof this.status !== 'undefined') {
|
574
|
+
toReturn['status'] = this.status;
|
575
|
+
}
|
576
|
+
if (typeof this.id !== 'undefined') {
|
577
|
+
toReturn['id'] = this.id;
|
578
|
+
}
|
579
|
+
return toReturn;
|
580
|
+
}
|
581
|
+
}
|
582
|
+
export class GetECurrieListResponse {
|
583
|
+
static fromProto(proto) {
|
584
|
+
let m = new GetECurrieListResponse();
|
585
|
+
m = Object.assign(m, proto);
|
586
|
+
if (proto.todoItems) {
|
587
|
+
m.todoItems = proto.todoItems.map(ECurrieTodoItem.fromProto);
|
588
|
+
}
|
589
|
+
return m;
|
590
|
+
}
|
591
|
+
constructor(kwargs) {
|
592
|
+
if (!kwargs) {
|
593
|
+
return;
|
594
|
+
}
|
595
|
+
Object.assign(this, kwargs);
|
596
|
+
}
|
597
|
+
toApiJson() {
|
598
|
+
const toReturn = {};
|
599
|
+
if (typeof this.todoItems !== 'undefined' && this.todoItems !== null) {
|
600
|
+
toReturn['todoItems'] = 'toApiJson' in this.todoItems ? this.todoItems.toApiJson() : this.todoItems;
|
601
|
+
}
|
602
|
+
return toReturn;
|
603
|
+
}
|
604
|
+
}
|
605
|
+
export class GetHdoTodoRequest {
|
606
|
+
static fromProto(proto) {
|
607
|
+
let m = new GetHdoTodoRequest();
|
608
|
+
m = Object.assign(m, proto);
|
609
|
+
return m;
|
610
|
+
}
|
611
|
+
constructor(kwargs) {
|
612
|
+
if (!kwargs) {
|
613
|
+
return;
|
614
|
+
}
|
615
|
+
Object.assign(this, kwargs);
|
616
|
+
}
|
617
|
+
toApiJson() {
|
618
|
+
const toReturn = {};
|
619
|
+
if (typeof this.id !== 'undefined') {
|
620
|
+
toReturn['id'] = this.id;
|
621
|
+
}
|
622
|
+
return toReturn;
|
623
|
+
}
|
624
|
+
}
|
625
|
+
export class GetHdoTodoResponse {
|
626
|
+
static fromProto(proto) {
|
627
|
+
let m = new GetHdoTodoResponse();
|
628
|
+
m = Object.assign(m, proto);
|
629
|
+
if (proto.todo) {
|
630
|
+
m.todo = HdoTodoItem.fromProto(proto.todo);
|
631
|
+
}
|
632
|
+
return m;
|
633
|
+
}
|
634
|
+
constructor(kwargs) {
|
635
|
+
if (!kwargs) {
|
636
|
+
return;
|
637
|
+
}
|
638
|
+
Object.assign(this, kwargs);
|
639
|
+
}
|
640
|
+
toApiJson() {
|
641
|
+
const toReturn = {};
|
642
|
+
if (typeof this.todo !== 'undefined' && this.todo !== null) {
|
643
|
+
toReturn['todo'] = 'toApiJson' in this.todo ? this.todo.toApiJson() : this.todo;
|
644
|
+
}
|
645
|
+
return toReturn;
|
646
|
+
}
|
647
|
+
}
|
648
|
+
export class GetWHorrellTaskRequest {
|
649
|
+
static fromProto(proto) {
|
650
|
+
let m = new GetWHorrellTaskRequest();
|
651
|
+
m = Object.assign(m, proto);
|
652
|
+
return m;
|
653
|
+
}
|
654
|
+
constructor(kwargs) {
|
655
|
+
if (!kwargs) {
|
656
|
+
return;
|
657
|
+
}
|
658
|
+
Object.assign(this, kwargs);
|
659
|
+
}
|
660
|
+
toApiJson() {
|
661
|
+
const toReturn = {};
|
662
|
+
if (typeof this.id !== 'undefined') {
|
663
|
+
toReturn['id'] = this.id;
|
664
|
+
}
|
665
|
+
return toReturn;
|
666
|
+
}
|
667
|
+
}
|
668
|
+
export class GetWHorrellTaskResponse {
|
669
|
+
static fromProto(proto) {
|
670
|
+
let m = new GetWHorrellTaskResponse();
|
671
|
+
m = Object.assign(m, proto);
|
672
|
+
if (proto.task) {
|
673
|
+
m.task = WHorrellTask.fromProto(proto.task);
|
674
|
+
}
|
675
|
+
return m;
|
676
|
+
}
|
677
|
+
constructor(kwargs) {
|
678
|
+
if (!kwargs) {
|
679
|
+
return;
|
680
|
+
}
|
681
|
+
Object.assign(this, kwargs);
|
682
|
+
}
|
683
|
+
toApiJson() {
|
684
|
+
const toReturn = {};
|
685
|
+
if (typeof this.task !== 'undefined' && this.task !== null) {
|
686
|
+
toReturn['task'] = 'toApiJson' in this.task ? this.task.toApiJson() : this.task;
|
687
|
+
}
|
688
|
+
return toReturn;
|
689
|
+
}
|
690
|
+
}
|
691
|
+
export class HdoTodoItem {
|
692
|
+
static fromProto(proto) {
|
693
|
+
let m = new HdoTodoItem();
|
694
|
+
m = Object.assign(m, proto);
|
695
|
+
return m;
|
696
|
+
}
|
697
|
+
constructor(kwargs) {
|
698
|
+
if (!kwargs) {
|
699
|
+
return;
|
700
|
+
}
|
701
|
+
Object.assign(this, kwargs);
|
702
|
+
}
|
703
|
+
toApiJson() {
|
704
|
+
const toReturn = {};
|
705
|
+
if (typeof this.id !== 'undefined') {
|
706
|
+
toReturn['id'] = this.id;
|
707
|
+
}
|
708
|
+
if (typeof this.title !== 'undefined') {
|
709
|
+
toReturn['title'] = this.title;
|
710
|
+
}
|
711
|
+
if (typeof this.description !== 'undefined') {
|
712
|
+
toReturn['description'] = this.description;
|
713
|
+
}
|
714
|
+
if (typeof this.completed !== 'undefined') {
|
715
|
+
toReturn['completed'] = this.completed;
|
716
|
+
}
|
717
|
+
if (typeof this.deleted !== 'undefined') {
|
718
|
+
toReturn['deleted'] = this.deleted;
|
719
|
+
}
|
720
|
+
return toReturn;
|
721
|
+
}
|
722
|
+
}
|
723
|
+
export class IOlaleyeCreateTaskRequest {
|
724
|
+
static fromProto(proto) {
|
725
|
+
let m = new IOlaleyeCreateTaskRequest();
|
726
|
+
m = Object.assign(m, proto);
|
727
|
+
return m;
|
728
|
+
}
|
729
|
+
constructor(kwargs) {
|
730
|
+
if (!kwargs) {
|
731
|
+
return;
|
732
|
+
}
|
733
|
+
Object.assign(this, kwargs);
|
734
|
+
}
|
735
|
+
toApiJson() {
|
736
|
+
const toReturn = {};
|
737
|
+
if (typeof this.name !== 'undefined') {
|
738
|
+
toReturn['name'] = this.name;
|
739
|
+
}
|
740
|
+
if (typeof this.description !== 'undefined') {
|
741
|
+
toReturn['description'] = this.description;
|
742
|
+
}
|
743
|
+
return toReturn;
|
744
|
+
}
|
745
|
+
}
|
746
|
+
export class IOlaleyeCreateTaskResponse {
|
747
|
+
static fromProto(proto) {
|
748
|
+
let m = new IOlaleyeCreateTaskResponse();
|
749
|
+
m = Object.assign(m, proto);
|
750
|
+
if (proto.id) {
|
751
|
+
m.id = parseInt(proto.id, 10);
|
752
|
+
}
|
753
|
+
return m;
|
754
|
+
}
|
755
|
+
constructor(kwargs) {
|
756
|
+
if (!kwargs) {
|
757
|
+
return;
|
758
|
+
}
|
759
|
+
Object.assign(this, kwargs);
|
760
|
+
}
|
761
|
+
toApiJson() {
|
762
|
+
const toReturn = {};
|
763
|
+
if (typeof this.id !== 'undefined') {
|
764
|
+
toReturn['id'] = this.id;
|
765
|
+
}
|
766
|
+
return toReturn;
|
767
|
+
}
|
768
|
+
}
|
769
|
+
export class IOlaleyeDeleteTaskRequest {
|
770
|
+
static fromProto(proto) {
|
771
|
+
let m = new IOlaleyeDeleteTaskRequest();
|
772
|
+
m = Object.assign(m, proto);
|
773
|
+
return m;
|
774
|
+
}
|
775
|
+
constructor(kwargs) {
|
776
|
+
if (!kwargs) {
|
777
|
+
return;
|
778
|
+
}
|
779
|
+
Object.assign(this, kwargs);
|
780
|
+
}
|
781
|
+
toApiJson() {
|
782
|
+
const toReturn = {};
|
783
|
+
if (typeof this.id !== 'undefined') {
|
784
|
+
toReturn['id'] = this.id;
|
785
|
+
}
|
786
|
+
return toReturn;
|
787
|
+
}
|
788
|
+
}
|
789
|
+
export class IOlaleyeDeleteTaskResponse {
|
790
|
+
static fromProto(proto) {
|
791
|
+
let m = new IOlaleyeDeleteTaskResponse();
|
792
|
+
m = Object.assign(m, proto);
|
793
|
+
return m;
|
794
|
+
}
|
795
|
+
constructor(kwargs) {
|
796
|
+
if (!kwargs) {
|
797
|
+
return;
|
798
|
+
}
|
799
|
+
Object.assign(this, kwargs);
|
800
|
+
}
|
801
|
+
toApiJson() {
|
802
|
+
const toReturn = {};
|
803
|
+
return toReturn;
|
804
|
+
}
|
805
|
+
}
|
806
|
+
export class IOlaleyeEditTaskRequest {
|
807
|
+
static fromProto(proto) {
|
808
|
+
let m = new IOlaleyeEditTaskRequest();
|
809
|
+
m = Object.assign(m, proto);
|
810
|
+
if (proto.task) {
|
811
|
+
m.task = IOlaleyeTask.fromProto(proto.task);
|
812
|
+
}
|
813
|
+
return m;
|
814
|
+
}
|
815
|
+
constructor(kwargs) {
|
816
|
+
if (!kwargs) {
|
817
|
+
return;
|
818
|
+
}
|
819
|
+
Object.assign(this, kwargs);
|
820
|
+
}
|
821
|
+
toApiJson() {
|
822
|
+
const toReturn = {};
|
823
|
+
if (typeof this.task !== 'undefined' && this.task !== null) {
|
824
|
+
toReturn['task'] = 'toApiJson' in this.task ? this.task.toApiJson() : this.task;
|
825
|
+
}
|
826
|
+
return toReturn;
|
827
|
+
}
|
828
|
+
}
|
829
|
+
export class IOlaleyeEditTaskResponse {
|
830
|
+
static fromProto(proto) {
|
831
|
+
let m = new IOlaleyeEditTaskResponse();
|
832
|
+
m = Object.assign(m, proto);
|
833
|
+
if (proto.task) {
|
834
|
+
m.task = IOlaleyeTask.fromProto(proto.task);
|
835
|
+
}
|
836
|
+
return m;
|
837
|
+
}
|
838
|
+
constructor(kwargs) {
|
839
|
+
if (!kwargs) {
|
840
|
+
return;
|
841
|
+
}
|
842
|
+
Object.assign(this, kwargs);
|
843
|
+
}
|
844
|
+
toApiJson() {
|
845
|
+
const toReturn = {};
|
846
|
+
if (typeof this.task !== 'undefined' && this.task !== null) {
|
847
|
+
toReturn['task'] = 'toApiJson' in this.task ? this.task.toApiJson() : this.task;
|
848
|
+
}
|
849
|
+
return toReturn;
|
850
|
+
}
|
851
|
+
}
|
852
|
+
export class IOlaleyeGetTaskRequest {
|
853
|
+
static fromProto(proto) {
|
854
|
+
let m = new IOlaleyeGetTaskRequest();
|
855
|
+
m = Object.assign(m, proto);
|
856
|
+
return m;
|
857
|
+
}
|
858
|
+
constructor(kwargs) {
|
859
|
+
if (!kwargs) {
|
860
|
+
return;
|
861
|
+
}
|
862
|
+
Object.assign(this, kwargs);
|
863
|
+
}
|
864
|
+
toApiJson() {
|
865
|
+
const toReturn = {};
|
866
|
+
if (typeof this.id !== 'undefined') {
|
867
|
+
toReturn['id'] = this.id;
|
868
|
+
}
|
869
|
+
return toReturn;
|
870
|
+
}
|
871
|
+
}
|
872
|
+
export class IOlaleyeGetTaskResponse {
|
873
|
+
static fromProto(proto) {
|
874
|
+
let m = new IOlaleyeGetTaskResponse();
|
875
|
+
m = Object.assign(m, proto);
|
876
|
+
if (proto.task) {
|
877
|
+
m.task = IOlaleyeTask.fromProto(proto.task);
|
878
|
+
}
|
879
|
+
return m;
|
880
|
+
}
|
881
|
+
constructor(kwargs) {
|
882
|
+
if (!kwargs) {
|
883
|
+
return;
|
884
|
+
}
|
885
|
+
Object.assign(this, kwargs);
|
886
|
+
}
|
887
|
+
toApiJson() {
|
888
|
+
const toReturn = {};
|
889
|
+
if (typeof this.task !== 'undefined' && this.task !== null) {
|
890
|
+
toReturn['task'] = 'toApiJson' in this.task ? this.task.toApiJson() : this.task;
|
891
|
+
}
|
892
|
+
return toReturn;
|
893
|
+
}
|
894
|
+
}
|
895
|
+
export class IOlaleyeListTasksRequest {
|
896
|
+
static fromProto(proto) {
|
897
|
+
let m = new IOlaleyeListTasksRequest();
|
898
|
+
m = Object.assign(m, proto);
|
899
|
+
return m;
|
900
|
+
}
|
901
|
+
constructor(kwargs) {
|
902
|
+
if (!kwargs) {
|
903
|
+
return;
|
904
|
+
}
|
905
|
+
Object.assign(this, kwargs);
|
906
|
+
}
|
907
|
+
toApiJson() {
|
908
|
+
const toReturn = {};
|
909
|
+
return toReturn;
|
910
|
+
}
|
911
|
+
}
|
912
|
+
export class IOlaleyeListTasksResponse {
|
913
|
+
static fromProto(proto) {
|
914
|
+
let m = new IOlaleyeListTasksResponse();
|
915
|
+
m = Object.assign(m, proto);
|
916
|
+
if (proto.allTasks) {
|
917
|
+
m.allTasks = proto.allTasks.map(IOlaleyeTask.fromProto);
|
918
|
+
}
|
919
|
+
return m;
|
920
|
+
}
|
921
|
+
constructor(kwargs) {
|
922
|
+
if (!kwargs) {
|
923
|
+
return;
|
924
|
+
}
|
925
|
+
Object.assign(this, kwargs);
|
926
|
+
}
|
927
|
+
toApiJson() {
|
928
|
+
const toReturn = {};
|
929
|
+
if (typeof this.allTasks !== 'undefined' && this.allTasks !== null) {
|
930
|
+
toReturn['allTasks'] = 'toApiJson' in this.allTasks ? this.allTasks.toApiJson() : this.allTasks;
|
931
|
+
}
|
932
|
+
return toReturn;
|
933
|
+
}
|
934
|
+
}
|
935
|
+
export class IOlaleyeTask {
|
936
|
+
static fromProto(proto) {
|
937
|
+
let m = new IOlaleyeTask();
|
938
|
+
m = Object.assign(m, proto);
|
939
|
+
return m;
|
940
|
+
}
|
941
|
+
constructor(kwargs) {
|
942
|
+
if (!kwargs) {
|
943
|
+
return;
|
944
|
+
}
|
945
|
+
Object.assign(this, kwargs);
|
946
|
+
}
|
947
|
+
toApiJson() {
|
948
|
+
const toReturn = {};
|
949
|
+
if (typeof this.id !== 'undefined') {
|
950
|
+
toReturn['id'] = this.id;
|
951
|
+
}
|
952
|
+
if (typeof this.name !== 'undefined') {
|
953
|
+
toReturn['name'] = this.name;
|
954
|
+
}
|
955
|
+
if (typeof this.description !== 'undefined') {
|
956
|
+
toReturn['description'] = this.description;
|
957
|
+
}
|
958
|
+
if (typeof this.deleted !== 'undefined') {
|
959
|
+
toReturn['deleted'] = this.deleted;
|
960
|
+
}
|
961
|
+
if (typeof this.isDone !== 'undefined') {
|
962
|
+
toReturn['isDone'] = this.isDone;
|
963
|
+
}
|
964
|
+
return toReturn;
|
965
|
+
}
|
966
|
+
}
|
967
|
+
export class ListHdoTodoRequest {
|
968
|
+
static fromProto(proto) {
|
969
|
+
let m = new ListHdoTodoRequest();
|
970
|
+
m = Object.assign(m, proto);
|
971
|
+
return m;
|
972
|
+
}
|
973
|
+
constructor(kwargs) {
|
974
|
+
if (!kwargs) {
|
975
|
+
return;
|
976
|
+
}
|
977
|
+
Object.assign(this, kwargs);
|
978
|
+
}
|
979
|
+
toApiJson() {
|
980
|
+
const toReturn = {};
|
981
|
+
return toReturn;
|
982
|
+
}
|
983
|
+
}
|
984
|
+
export class ListHdoTodoResponse {
|
985
|
+
static fromProto(proto) {
|
986
|
+
let m = new ListHdoTodoResponse();
|
987
|
+
m = Object.assign(m, proto);
|
988
|
+
if (proto.todos) {
|
989
|
+
m.todos = proto.todos.map(HdoTodoItem.fromProto);
|
990
|
+
}
|
991
|
+
return m;
|
992
|
+
}
|
993
|
+
constructor(kwargs) {
|
994
|
+
if (!kwargs) {
|
995
|
+
return;
|
996
|
+
}
|
997
|
+
Object.assign(this, kwargs);
|
998
|
+
}
|
999
|
+
toApiJson() {
|
1000
|
+
const toReturn = {};
|
1001
|
+
if (typeof this.todos !== 'undefined' && this.todos !== null) {
|
1002
|
+
toReturn['todos'] = 'toApiJson' in this.todos ? this.todos.toApiJson() : this.todos;
|
1003
|
+
}
|
1004
|
+
return toReturn;
|
1005
|
+
}
|
1006
|
+
}
|
1007
|
+
export class ListWHorrellTasksRequest {
|
1008
|
+
static fromProto(proto) {
|
1009
|
+
let m = new ListWHorrellTasksRequest();
|
1010
|
+
m = Object.assign(m, proto);
|
1011
|
+
return m;
|
1012
|
+
}
|
1013
|
+
constructor(kwargs) {
|
1014
|
+
if (!kwargs) {
|
1015
|
+
return;
|
1016
|
+
}
|
1017
|
+
Object.assign(this, kwargs);
|
1018
|
+
}
|
1019
|
+
toApiJson() {
|
1020
|
+
const toReturn = {};
|
1021
|
+
return toReturn;
|
1022
|
+
}
|
1023
|
+
}
|
1024
|
+
export class ListWHorrellTasksResponse {
|
1025
|
+
static fromProto(proto) {
|
1026
|
+
let m = new ListWHorrellTasksResponse();
|
1027
|
+
m = Object.assign(m, proto);
|
1028
|
+
if (proto.tasks) {
|
1029
|
+
m.tasks = proto.tasks.map(WHorrellTask.fromProto);
|
1030
|
+
}
|
1031
|
+
return m;
|
1032
|
+
}
|
1033
|
+
constructor(kwargs) {
|
1034
|
+
if (!kwargs) {
|
1035
|
+
return;
|
1036
|
+
}
|
1037
|
+
Object.assign(this, kwargs);
|
1038
|
+
}
|
1039
|
+
toApiJson() {
|
1040
|
+
const toReturn = {};
|
1041
|
+
if (typeof this.tasks !== 'undefined' && this.tasks !== null) {
|
1042
|
+
toReturn['tasks'] = 'toApiJson' in this.tasks ? this.tasks.toApiJson() : this.tasks;
|
1043
|
+
}
|
1044
|
+
return toReturn;
|
1045
|
+
}
|
1046
|
+
}
|
1047
|
+
export class MMugotCreateTaskRequest {
|
1048
|
+
static fromProto(proto) {
|
1049
|
+
let m = new MMugotCreateTaskRequest();
|
1050
|
+
m = Object.assign(m, proto);
|
1051
|
+
if (proto.task) {
|
1052
|
+
m.task = MMugotTask.fromProto(proto.task);
|
1053
|
+
}
|
1054
|
+
return m;
|
1055
|
+
}
|
1056
|
+
constructor(kwargs) {
|
1057
|
+
if (!kwargs) {
|
1058
|
+
return;
|
1059
|
+
}
|
1060
|
+
Object.assign(this, kwargs);
|
1061
|
+
}
|
1062
|
+
toApiJson() {
|
1063
|
+
const toReturn = {};
|
1064
|
+
if (typeof this.task !== 'undefined' && this.task !== null) {
|
1065
|
+
toReturn['task'] = 'toApiJson' in this.task ? this.task.toApiJson() : this.task;
|
1066
|
+
}
|
1067
|
+
return toReturn;
|
1068
|
+
}
|
1069
|
+
}
|
1070
|
+
export class MMugotCreateTaskResponse {
|
1071
|
+
static fromProto(proto) {
|
1072
|
+
let m = new MMugotCreateTaskResponse();
|
1073
|
+
m = Object.assign(m, proto);
|
1074
|
+
return m;
|
1075
|
+
}
|
1076
|
+
constructor(kwargs) {
|
1077
|
+
if (!kwargs) {
|
1078
|
+
return;
|
1079
|
+
}
|
1080
|
+
Object.assign(this, kwargs);
|
1081
|
+
}
|
1082
|
+
toApiJson() {
|
1083
|
+
const toReturn = {};
|
1084
|
+
if (typeof this.isCreated !== 'undefined') {
|
1085
|
+
toReturn['isCreated'] = this.isCreated;
|
1086
|
+
}
|
1087
|
+
return toReturn;
|
1088
|
+
}
|
1089
|
+
}
|
1090
|
+
export class MMugotDeleteTaskRequest {
|
1091
|
+
static fromProto(proto) {
|
1092
|
+
let m = new MMugotDeleteTaskRequest();
|
1093
|
+
m = Object.assign(m, proto);
|
1094
|
+
return m;
|
1095
|
+
}
|
1096
|
+
constructor(kwargs) {
|
1097
|
+
if (!kwargs) {
|
1098
|
+
return;
|
1099
|
+
}
|
1100
|
+
Object.assign(this, kwargs);
|
1101
|
+
}
|
1102
|
+
toApiJson() {
|
1103
|
+
const toReturn = {};
|
1104
|
+
if (typeof this.taskId !== 'undefined') {
|
1105
|
+
toReturn['taskId'] = this.taskId;
|
1106
|
+
}
|
1107
|
+
return toReturn;
|
1108
|
+
}
|
1109
|
+
}
|
1110
|
+
export class MMugotGetTaskRequest {
|
1111
|
+
static fromProto(proto) {
|
1112
|
+
let m = new MMugotGetTaskRequest();
|
1113
|
+
m = Object.assign(m, proto);
|
1114
|
+
return m;
|
1115
|
+
}
|
1116
|
+
constructor(kwargs) {
|
1117
|
+
if (!kwargs) {
|
1118
|
+
return;
|
1119
|
+
}
|
1120
|
+
Object.assign(this, kwargs);
|
1121
|
+
}
|
1122
|
+
toApiJson() {
|
1123
|
+
const toReturn = {};
|
1124
|
+
if (typeof this.taskId !== 'undefined') {
|
1125
|
+
toReturn['taskId'] = this.taskId;
|
1126
|
+
}
|
1127
|
+
return toReturn;
|
1128
|
+
}
|
1129
|
+
}
|
1130
|
+
export class MMugotGetTaskResponse {
|
1131
|
+
static fromProto(proto) {
|
1132
|
+
let m = new MMugotGetTaskResponse();
|
1133
|
+
m = Object.assign(m, proto);
|
1134
|
+
if (proto.task) {
|
1135
|
+
m.task = MMugotTask.fromProto(proto.task);
|
1136
|
+
}
|
1137
|
+
return m;
|
1138
|
+
}
|
1139
|
+
constructor(kwargs) {
|
1140
|
+
if (!kwargs) {
|
1141
|
+
return;
|
1142
|
+
}
|
1143
|
+
Object.assign(this, kwargs);
|
1144
|
+
}
|
1145
|
+
toApiJson() {
|
1146
|
+
const toReturn = {};
|
1147
|
+
if (typeof this.task !== 'undefined' && this.task !== null) {
|
1148
|
+
toReturn['task'] = 'toApiJson' in this.task ? this.task.toApiJson() : this.task;
|
1149
|
+
}
|
1150
|
+
return toReturn;
|
1151
|
+
}
|
1152
|
+
}
|
1153
|
+
export class MMugotListTasksRequest {
|
1154
|
+
static fromProto(proto) {
|
1155
|
+
let m = new MMugotListTasksRequest();
|
1156
|
+
m = Object.assign(m, proto);
|
1157
|
+
return m;
|
1158
|
+
}
|
1159
|
+
constructor(kwargs) {
|
1160
|
+
if (!kwargs) {
|
1161
|
+
return;
|
1162
|
+
}
|
1163
|
+
Object.assign(this, kwargs);
|
1164
|
+
}
|
1165
|
+
toApiJson() {
|
1166
|
+
const toReturn = {};
|
1167
|
+
return toReturn;
|
1168
|
+
}
|
1169
|
+
}
|
1170
|
+
export class MMugotListTasksResponse {
|
1171
|
+
static fromProto(proto) {
|
1172
|
+
let m = new MMugotListTasksResponse();
|
1173
|
+
m = Object.assign(m, proto);
|
1174
|
+
if (proto.tasks) {
|
1175
|
+
m.tasks = proto.tasks.map(MMugotTask.fromProto);
|
1176
|
+
}
|
1177
|
+
return m;
|
1178
|
+
}
|
1179
|
+
constructor(kwargs) {
|
1180
|
+
if (!kwargs) {
|
1181
|
+
return;
|
1182
|
+
}
|
1183
|
+
Object.assign(this, kwargs);
|
1184
|
+
}
|
1185
|
+
toApiJson() {
|
1186
|
+
const toReturn = {};
|
1187
|
+
if (typeof this.tasks !== 'undefined' && this.tasks !== null) {
|
1188
|
+
toReturn['tasks'] = 'toApiJson' in this.tasks ? this.tasks.toApiJson() : this.tasks;
|
1189
|
+
}
|
1190
|
+
return toReturn;
|
1191
|
+
}
|
1192
|
+
}
|
1193
|
+
export class MMugotTask {
|
1194
|
+
static fromProto(proto) {
|
1195
|
+
let m = new MMugotTask();
|
1196
|
+
m = Object.assign(m, proto);
|
1197
|
+
if (proto.dueDate) {
|
1198
|
+
m.dueDate = new Date(proto.dueDate);
|
1199
|
+
}
|
1200
|
+
return m;
|
1201
|
+
}
|
1202
|
+
constructor(kwargs) {
|
1203
|
+
if (!kwargs) {
|
1204
|
+
return;
|
1205
|
+
}
|
1206
|
+
Object.assign(this, kwargs);
|
1207
|
+
}
|
1208
|
+
toApiJson() {
|
1209
|
+
const toReturn = {};
|
1210
|
+
if (typeof this.taskName !== 'undefined') {
|
1211
|
+
toReturn['taskName'] = this.taskName;
|
1212
|
+
}
|
1213
|
+
if (typeof this.taskDescription !== 'undefined') {
|
1214
|
+
toReturn['taskDescription'] = this.taskDescription;
|
1215
|
+
}
|
1216
|
+
if (typeof this.isComplete !== 'undefined') {
|
1217
|
+
toReturn['isComplete'] = this.isComplete;
|
1218
|
+
}
|
1219
|
+
if (typeof this.taskId !== 'undefined') {
|
1220
|
+
toReturn['taskId'] = this.taskId;
|
1221
|
+
}
|
1222
|
+
if (typeof this.isDeleted !== 'undefined') {
|
1223
|
+
toReturn['isDeleted'] = this.isDeleted;
|
1224
|
+
}
|
1225
|
+
if (typeof this.dueDate !== 'undefined' && this.dueDate !== null) {
|
1226
|
+
toReturn['dueDate'] = 'toApiJson' in this.dueDate ? this.dueDate.toApiJson() : this.dueDate;
|
1227
|
+
}
|
1228
|
+
return toReturn;
|
1229
|
+
}
|
1230
|
+
}
|
1231
|
+
export class MMugotUpdateTaskRequest {
|
1232
|
+
static fromProto(proto) {
|
1233
|
+
let m = new MMugotUpdateTaskRequest();
|
1234
|
+
m = Object.assign(m, proto);
|
1235
|
+
return m;
|
1236
|
+
}
|
1237
|
+
constructor(kwargs) {
|
1238
|
+
if (!kwargs) {
|
1239
|
+
return;
|
1240
|
+
}
|
1241
|
+
Object.assign(this, kwargs);
|
1242
|
+
}
|
1243
|
+
toApiJson() {
|
1244
|
+
const toReturn = {};
|
1245
|
+
if (typeof this.taskId !== 'undefined') {
|
1246
|
+
toReturn['taskId'] = this.taskId;
|
1247
|
+
}
|
1248
|
+
return toReturn;
|
1249
|
+
}
|
1250
|
+
}
|
1251
|
+
export class MMugotUpdateTaskResponse {
|
1252
|
+
static fromProto(proto) {
|
1253
|
+
let m = new MMugotUpdateTaskResponse();
|
1254
|
+
m = Object.assign(m, proto);
|
1255
|
+
return m;
|
1256
|
+
}
|
1257
|
+
constructor(kwargs) {
|
1258
|
+
if (!kwargs) {
|
1259
|
+
return;
|
1260
|
+
}
|
1261
|
+
Object.assign(this, kwargs);
|
1262
|
+
}
|
1263
|
+
toApiJson() {
|
1264
|
+
const toReturn = {};
|
1265
|
+
return toReturn;
|
1266
|
+
}
|
1267
|
+
}
|
1268
|
+
export class UpdateHdoTodoRequest {
|
1269
|
+
static fromProto(proto) {
|
1270
|
+
let m = new UpdateHdoTodoRequest();
|
1271
|
+
m = Object.assign(m, proto);
|
1272
|
+
if (proto.todo) {
|
1273
|
+
m.todo = HdoTodoItem.fromProto(proto.todo);
|
1274
|
+
}
|
1275
|
+
return m;
|
1276
|
+
}
|
1277
|
+
constructor(kwargs) {
|
1278
|
+
if (!kwargs) {
|
1279
|
+
return;
|
1280
|
+
}
|
1281
|
+
Object.assign(this, kwargs);
|
1282
|
+
}
|
1283
|
+
toApiJson() {
|
1284
|
+
const toReturn = {};
|
1285
|
+
if (typeof this.todo !== 'undefined' && this.todo !== null) {
|
1286
|
+
toReturn['todo'] = 'toApiJson' in this.todo ? this.todo.toApiJson() : this.todo;
|
1287
|
+
}
|
1288
|
+
return toReturn;
|
1289
|
+
}
|
1290
|
+
}
|
1291
|
+
export class UpdateHdoTodoResponse {
|
1292
|
+
static fromProto(proto) {
|
1293
|
+
let m = new UpdateHdoTodoResponse();
|
1294
|
+
m = Object.assign(m, proto);
|
1295
|
+
if (proto.todo) {
|
1296
|
+
m.todo = HdoTodoItem.fromProto(proto.todo);
|
1297
|
+
}
|
1298
|
+
return m;
|
1299
|
+
}
|
1300
|
+
constructor(kwargs) {
|
1301
|
+
if (!kwargs) {
|
1302
|
+
return;
|
1303
|
+
}
|
1304
|
+
Object.assign(this, kwargs);
|
1305
|
+
}
|
1306
|
+
toApiJson() {
|
1307
|
+
const toReturn = {};
|
1308
|
+
if (typeof this.todo !== 'undefined' && this.todo !== null) {
|
1309
|
+
toReturn['todo'] = 'toApiJson' in this.todo ? this.todo.toApiJson() : this.todo;
|
1310
|
+
}
|
1311
|
+
return toReturn;
|
1312
|
+
}
|
1313
|
+
}
|
1314
|
+
export class WHorrellTask {
|
1315
|
+
static fromProto(proto) {
|
1316
|
+
let m = new WHorrellTask();
|
1317
|
+
m = Object.assign(m, proto);
|
1318
|
+
return m;
|
1319
|
+
}
|
1320
|
+
constructor(kwargs) {
|
1321
|
+
if (!kwargs) {
|
1322
|
+
return;
|
1323
|
+
}
|
1324
|
+
Object.assign(this, kwargs);
|
1325
|
+
}
|
1326
|
+
toApiJson() {
|
1327
|
+
const toReturn = {};
|
1328
|
+
if (typeof this.id !== 'undefined') {
|
1329
|
+
toReturn['id'] = this.id;
|
1330
|
+
}
|
1331
|
+
if (typeof this.name !== 'undefined') {
|
1332
|
+
toReturn['name'] = this.name;
|
1333
|
+
}
|
1334
|
+
if (typeof this.description !== 'undefined') {
|
1335
|
+
toReturn['description'] = this.description;
|
1336
|
+
}
|
1337
|
+
if (typeof this.isCompleted !== 'undefined') {
|
1338
|
+
toReturn['isCompleted'] = this.isCompleted;
|
1339
|
+
}
|
1340
|
+
if (typeof this.isDeleted !== 'undefined') {
|
1341
|
+
toReturn['isDeleted'] = this.isDeleted;
|
1342
|
+
}
|
1343
|
+
return toReturn;
|
1344
|
+
}
|
1345
|
+
}
|
1346
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vZGV2ZWxvcGVyX3RyYWluaW5nX3Nkay9zcmMvbGliL19pbnRlcm5hbC9vYmplY3RzL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxNQUFNLFVBQVUsaUJBQWlCLENBQUksT0FBWSxFQUFFLEtBQWE7SUFDOUQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDN0IsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUNELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hCLENBQUM7QUFFRCxNQUFNLE9BQU8scUJBQXFCO0lBRzlCLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLHFCQUFxQixFQUFFLENBQUM7UUFDcEMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7U0FBQztRQUN0RSxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQXlDO1FBQ2pELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUksRUFBRTtZQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENB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NUIsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQsWUFBWSxNQUFnQztRQUN4QyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFNBQVM7UUFDTCxNQUFNLFFBQVEsR0FFVixFQUFFLENBQUM7UUFFUCxJQUFJLE9BQU8sSUFBSSxDQUFDLEVBQUUsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztTQUFDO1FBQy9ELElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQUM7UUFDckUsSUFBSSxPQUFPLElBQUksQ0FBQyxXQUFXLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7U0FBQztRQUMxRixJQUFJLE9BQU8sSUFBSSxDQUFDLFdBQVcsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztTQUFDO1FBQzFGLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQUM7UUFDcEYsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4vLyBDb2RlIGdlbmVyYXRlZCBieSBzZGtnZW5cbi8vIERPIE5PVCBFRElUIS5cbi8vXG4vLyBPYmplY3RzLlxuLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5pbXBvcnQgKiBhcyBpIGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5pbXBvcnQgKiBhcyBlIGZyb20gJy4uL2VudW1zJztcblxuZXhwb3J0IGZ1bmN0aW9uIGVudW1TdHJpbmdUb1ZhbHVlPEU+KGVudW1SZWY6IGFueSwgdmFsdWU6IHN0cmluZyk6IEUge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gZW51bVJlZlt2YWx1ZV07XG59XG5cbmV4cG9ydCBjbGFzcyBBSHVuZGFsQWRkVGFza1JlcXVlc3QgaW1wbGVtZW50cyBpLkFIdW5kYWxBZGRUYXNrUmVxdWVzdEludGVyZmFjZSB7XG4gICAgbmV3VGFzazogQUh1bmRhbFRhc2s7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBBSHVuZGFsQWRkVGFza1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBBSHVuZGFsQWRkVGFza1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ubmV3VGFzaykge20ubmV3VGFzayA9IEFIdW5kYWxUYXNrLmZyb21Qcm90byhwcm90by5uZXdUYXNrKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQUh1bmRhbEFkZFRhc2tSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubmV3VGFzayAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5uZXdUYXNrICE9PSBudWxsKSB7dG9SZXR1cm5bJ25ld1Rhc2snXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubmV3VGFzayA/ICh0aGlzLm5ld1Rhc2sgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubmV3VGFzazt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBSHVuZGFsQWRkVGFza1Jlc3BvbnNlIGltcGxlbWVudHMgaS5BSHVuZGFsQWRkVGFza1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBhZGRTdWNjZXNmdWxsOiBib29sZWFuO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQUh1bmRhbEFkZFRhc2tSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEFIdW5kYWxBZGRUYXNrUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkFIdW5kYWxBZGRUYXNrUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hZGRTdWNjZXNmdWxsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhZGRTdWNjZXNmdWxsJ10gPSB0aGlzLmFkZFN1Y2Nlc2Z1bGw7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQUh1bmRhbERlbGV0ZVRhc2tSZXF1ZXN0IGltcGxlbWVudHMgaS5BSHVuZGFsRGVsZXRlVGFza1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHRhc2tJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQUh1bmRhbERlbGV0ZVRhc2tSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQUh1bmRhbERlbGV0ZVRhc2tSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5BSHVuZGFsRGVsZXRlVGFza1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50YXNrSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Rhc2tJZCddID0gdGhpcy50YXNrSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQUh1bmRhbERlbGV0ZVRhc2tSZXNwb25zZSBpbXBsZW1lbnRzIGkuQUh1bmRhbERlbGV0ZVRhc2tSZXNwb25zZUludGVyZmFjZSB7XG4gICAgZGVsZXRlU3VjY2VzZnVsbDogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEFIdW5kYWxEZWxldGVUYXNrUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBBSHVuZGFsRGVsZXRlVGFza1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5BSHVuZGFsRGVsZXRlVGFza1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGVsZXRlU3VjY2VzZnVsbCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZGVsZXRlU3VjY2VzZnVsbCddID0gdGhpcy5kZWxldGVTdWNjZXNmdWxsO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFIdW5kYWxFZGl0VGFza1JlcXVlc3QgaW1wbGVtZW50cyBpLkFIdW5kYWxFZGl0VGFza1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGVkaXRlZFRhc2s6IEFIdW5kYWxUYXNrO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQUh1bmRhbEVkaXRUYXNrUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEFIdW5kYWxFZGl0VGFza1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZWRpdGVkVGFzaykge20uZWRpdGVkVGFzayA9IEFIdW5kYWxUYXNrLmZyb21Qcm90byhwcm90by5lZGl0ZWRUYXNrKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQUh1bmRhbEVkaXRUYXNrUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVkaXRlZFRhc2sgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZWRpdGVkVGFzayAhPT0gbnVsbCkge3RvUmV0dXJuWydlZGl0ZWRUYXNrJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmVkaXRlZFRhc2sgPyAodGhpcy5lZGl0ZWRUYXNrIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmVkaXRlZFRhc2s7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQUh1bmRhbEVkaXRUYXNrUmVzcG9uc2UgaW1wbGVtZW50cyBpLkFIdW5kYWxFZGl0VGFza1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBlZGl0U3VjY2VzZnVsbDogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEFIdW5kYWxFZGl0VGFza1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQUh1bmRhbEVkaXRUYXNrUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkFIdW5kYWxFZGl0VGFza1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZWRpdFN1Y2Nlc2Z1bGwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2VkaXRTdWNjZXNmdWxsJ10gPSB0aGlzLmVkaXRTdWNjZXNmdWxsO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFIdW5kYWxHZXRTcGVjaWZpY1Rhc2tSZXF1ZXN0IGltcGxlbWVudHMgaS5BSHVuZGFsR2V0U3BlY2lmaWNUYXNrUmVxdWVzdEludGVyZmFjZSB7XG4gICAgdGFza0lkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBBSHVuZGFsR2V0U3BlY2lmaWNUYXNrUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEFIdW5kYWxHZXRTcGVjaWZpY1Rhc2tSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5BSHVuZGFsR2V0U3BlY2lmaWNUYXNrUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRhc2tJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndGFza0lkJ10gPSB0aGlzLnRhc2tJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBSHVuZGFsR2V0U3BlY2lmaWNUYXNrUmVzcG9uc2UgaW1wbGVtZW50cyBpLkFIdW5kYWxHZXRTcGVjaWZpY1Rhc2tSZXNwb25zZUludGVyZmFjZSB7XG4gICAgYWh1bmRhbFRhc2s6IEFIdW5kYWxUYXNrO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQUh1bmRhbEdldFNwZWNpZmljVGFza1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQUh1bmRhbEdldFNwZWNpZmljVGFza1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmFodW5kYWxUYXNrKSB7bS5haHVuZGFsVGFzayA9IEFIdW5kYWxUYXNrLmZyb21Qcm90byhwcm90by5haHVuZGFsVGFzayk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkFIdW5kYWxHZXRTcGVjaWZpY1Rhc2tSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFodW5kYWxUYXNrICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmFodW5kYWxUYXNrICE9PSBudWxsKSB7dG9SZXR1cm5bJ2FodW5kYWxUYXNrJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmFodW5kYWxUYXNrID8gKHRoaXMuYWh1bmRhbFRhc2sgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuYWh1bmRhbFRhc2s7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQUh1bmRhbEdldFRhc2tzUmVxdWVzdCBpbXBsZW1lbnRzIGkuQUh1bmRhbEdldFRhc2tzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgdGFza0lkOiBudW1iZXI7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBBSHVuZGFsR2V0VGFza3NSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQUh1bmRhbEdldFRhc2tzUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQUh1bmRhbEdldFRhc2tzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRhc2tJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndGFza0lkJ10gPSB0aGlzLnRhc2tJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBSHVuZGFsR2V0VGFza3NSZXNwb25zZSBpbXBsZW1lbnRzIGkuQUh1bmRhbEdldFRhc2tzUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGFodW5kYWxUYXNrOiBBSHVuZGFsVGFza1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQUh1bmRhbEdldFRhc2tzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBBSHVuZGFsR2V0VGFza3NSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5haHVuZGFsVGFzaykge20uYWh1bmRhbFRhc2sgPSBwcm90by5haHVuZGFsVGFzay5tYXAoQUh1bmRhbFRhc2suZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQUh1bmRhbEdldFRhc2tzUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5haHVuZGFsVGFzayAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5haHVuZGFsVGFzayAhPT0gbnVsbCkge3RvUmV0dXJuWydhaHVuZGFsVGFzayddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5haHVuZGFsVGFzayA/ICh0aGlzLmFodW5kYWxUYXNrIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmFodW5kYWxUYXNrO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFIdW5kYWxUYXNrIGltcGxlbWVudHMgaS5BSHVuZGFsVGFza0ludGVyZmFjZSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICB0YXNrVGl0bGU6IHN0cmluZztcbiAgICBkYXk6IG51bWJlcjtcbiAgICBtb250aDogbnVtYmVyO1xuICAgIHllYXI6IG51bWJlcjtcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgIGNvbXBsZXRlZDogYm9vbGVhbjtcbiAgICBpc0RlbGV0ZWQ6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBBSHVuZGFsVGFzayB7XG4gICAgICAgIGxldCBtID0gbmV3IEFIdW5kYWxUYXNrKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5BSHVuZGFsVGFza0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpZCddID0gdGhpcy5pZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50YXNrVGl0bGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Rhc2tUaXRsZSddID0gdGhpcy50YXNrVGl0bGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGF5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkYXknXSA9IHRoaXMuZGF5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1vbnRoICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtb250aCddID0gdGhpcy5tb250aDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy55ZWFyICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd5ZWFyJ10gPSB0aGlzLnllYXI7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGVzY3JpcHRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Rlc2NyaXB0aW9uJ10gPSB0aGlzLmRlc2NyaXB0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbXBsZXRlZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29tcGxldGVkJ10gPSB0aGlzLmNvbXBsZXRlZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pc0RlbGV0ZWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lzRGVsZXRlZCddID0gdGhpcy5pc0RlbGV0ZWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlRUN1cnJpZVJlcXVlc3QgaW1wbGVtZW50cyBpLkNyZWF0ZUVDdXJyaWVSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIGR1ZURhdGU6IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlRUN1cnJpZVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBDcmVhdGVFQ3VycmllUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ3JlYXRlRUN1cnJpZVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50aXRsZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndGl0bGUnXSA9IHRoaXMudGl0bGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZHVlRGF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZHVlRGF0ZSddID0gdGhpcy5kdWVEYXRlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRlc2NyaXB0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkZXNjcmlwdGlvbiddID0gdGhpcy5kZXNjcmlwdGlvbjt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVFQ3VycmllUmVzcG9uc2UgaW1wbGVtZW50cyBpLkNyZWF0ZUVDdXJyaWVSZXNwb25zZUludGVyZmFjZSB7XG4gICAgaWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IENyZWF0ZUVDdXJyaWVSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IENyZWF0ZUVDdXJyaWVSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ3JlYXRlRUN1cnJpZVJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lkJ10gPSB0aGlzLmlkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0ZUhkb1RvZG9SZXF1ZXN0IGltcGxlbWVudHMgaS5DcmVhdGVIZG9Ub2RvUmVxdWVzdEludGVyZmFjZSB7XG4gICAgdG9kbzogSGRvVG9kb0l0ZW07XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDcmVhdGVIZG9Ub2RvUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IENyZWF0ZUhkb1RvZG9SZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnRvZG8pIHttLnRvZG8gPSBIZG9Ub2RvSXRlbS5mcm9tUHJvdG8ocHJvdG8udG9kbyk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkNyZWF0ZUhkb1RvZG9SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudG9kbyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy50b2RvICE9PSBudWxsKSB7dG9SZXR1cm5bJ3RvZG8nXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudG9kbyA/ICh0aGlzLnRvZG8gYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudG9kbzt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVIZG9Ub2RvUmVzcG9uc2UgaW1wbGVtZW50cyBpLkNyZWF0ZUhkb1RvZG9SZXNwb25zZUludGVyZmFjZSB7XG4gICAgdG9kbzogSGRvVG9kb0l0ZW07XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDcmVhdGVIZG9Ub2RvUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBDcmVhdGVIZG9Ub2RvUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udG9kbykge20udG9kbyA9IEhkb1RvZG9JdGVtLmZyb21Qcm90byhwcm90by50b2RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ3JlYXRlSGRvVG9kb1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudG9kbyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy50b2RvICE9PSBudWxsKSB7dG9SZXR1cm5bJ3RvZG8nXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudG9kbyA/ICh0aGlzLnRvZG8gYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudG9kbzt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVXSG9ycmVsbFRhc2tSZXF1ZXN0IGltcGxlbWVudHMgaS5DcmVhdGVXSG9ycmVsbFRhc2tSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IENyZWF0ZVdIb3JyZWxsVGFza1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBDcmVhdGVXSG9ycmVsbFRhc2tSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVXSG9ycmVsbFRhc2tSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbmFtZSddID0gdGhpcy5uYW1lO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRlc2NyaXB0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkZXNjcmlwdGlvbiddID0gdGhpcy5kZXNjcmlwdGlvbjt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVXSG9ycmVsbFRhc2tSZXNwb25zZSBpbXBsZW1lbnRzIGkuQ3JlYXRlV0hvcnJlbGxUYXNrUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGlkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDcmVhdGVXSG9ycmVsbFRhc2tSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IENyZWF0ZVdIb3JyZWxsVGFza1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVXSG9ycmVsbFRhc2tSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpZCddID0gdGhpcy5pZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZWxldGVFQ3VycmllUmVxdWVzdCBpbXBsZW1lbnRzIGkuRGVsZXRlRUN1cnJpZVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGlkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBEZWxldGVFQ3VycmllUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IERlbGV0ZUVDdXJyaWVSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5EZWxldGVFQ3VycmllUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpZCddID0gdGhpcy5pZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZWxldGVIZG9Ub2RvUmVxdWVzdCBpbXBsZW1lbnRzIGkuRGVsZXRlSGRvVG9kb1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGlkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBEZWxldGVIZG9Ub2RvUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IERlbGV0ZUhkb1RvZG9SZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5EZWxldGVIZG9Ub2RvUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpZCddID0gdGhpcy5pZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZWxldGVIZG9Ub2RvUmVzcG9uc2UgaW1wbGVtZW50cyBpLkRlbGV0ZUhkb1RvZG9SZXNwb25zZUludGVyZmFjZSB7XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRGVsZXRlSGRvVG9kb1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRGVsZXRlSGRvVG9kb1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5EZWxldGVIZG9Ub2RvUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXNzYWdlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXNzYWdlJ10gPSB0aGlzLm1lc3NhZ2U7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGVsZXRlV0hvcnJlbGxUYXNrUmVxdWVzdCBpbXBsZW1lbnRzIGkuRGVsZXRlV0hvcnJlbGxUYXNrUmVxdWVzdEludGVyZmFjZSB7XG4gICAgaWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IERlbGV0ZVdIb3JyZWxsVGFza1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBEZWxldGVXSG9ycmVsbFRhc2tSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5EZWxldGVXSG9ycmVsbFRhc2tSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lkJ10gPSB0aGlzLmlkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVDdXJyaWVUb2RvSXRlbSBpbXBsZW1lbnRzIGkuRUN1cnJpZVRvZG9JdGVtSW50ZXJmYWNlIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgY29tcGxldGVkOiBib29sZWFuO1xuICAgIGR1ZURhdGU6IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRUN1cnJpZVRvZG9JdGVtIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRUN1cnJpZVRvZG9JdGVtKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5FQ3VycmllVG9kb0l0ZW1JbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWQnXSA9IHRoaXMuaWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGl0bGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RpdGxlJ10gPSB0aGlzLnRpdGxlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbXBsZXRlZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29tcGxldGVkJ10gPSB0aGlzLmNvbXBsZXRlZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kdWVEYXRlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkdWVEYXRlJ10gPSB0aGlzLmR1ZURhdGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGVzY3JpcHRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Rlc2NyaXB0aW9uJ10gPSB0aGlzLmRlc2NyaXB0aW9uO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVkaXRXSG9ycmVsbFRhc2tSZXF1ZXN0IGltcGxlbWVudHMgaS5FZGl0V0hvcnJlbGxUYXNrUmVxdWVzdEludGVyZmFjZSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICBpc0NvbXBsZXRlZDogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEVkaXRXSG9ycmVsbFRhc2tSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRWRpdFdIb3JyZWxsVGFza1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkVkaXRXSG9ycmVsbFRhc2tSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lkJ10gPSB0aGlzLmlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm5hbWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ25hbWUnXSA9IHRoaXMubmFtZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kZXNjcmlwdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZGVzY3JpcHRpb24nXSA9IHRoaXMuZGVzY3JpcHRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaXNDb21wbGV0ZWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lzQ29tcGxldGVkJ10gPSB0aGlzLmlzQ29tcGxldGVkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVkaXRXSG9ycmVsbFRhc2tSZXNwb25zZSBpbXBsZW1lbnRzIGkuRWRpdFdIb3JyZWxsVGFza1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBpZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRWRpdFdIb3JyZWxsVGFza1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRWRpdFdIb3JyZWxsVGFza1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5FZGl0V0hvcnJlbGxUYXNrUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWQnXSA9IHRoaXMuaWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0RUN1cnJpZUxpc3RSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRFQ3VycmllTGlzdFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGNhdGVnb3J5OiBzdHJpbmc7XG4gICAgc3RhdHVzOiBzdHJpbmc7XG4gICAgaWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldEVDdXJyaWVMaXN0UmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldEVDdXJyaWVMaXN0UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0RUN1cnJpZUxpc3RSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2F0ZWdvcnkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NhdGVnb3J5J10gPSB0aGlzLmNhdGVnb3J5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0YXR1cyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc3RhdHVzJ10gPSB0aGlzLnN0YXR1czt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWQnXSA9IHRoaXMuaWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0RUN1cnJpZUxpc3RSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0RUN1cnJpZUxpc3RSZXNwb25zZUludGVyZmFjZSB7XG4gICAgdG9kb0l0ZW1zOiBFQ3VycmllVG9kb0l0ZW1bXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldEVDdXJyaWVMaXN0UmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRFQ3VycmllTGlzdFJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnRvZG9JdGVtcykge20udG9kb0l0ZW1zID0gcHJvdG8udG9kb0l0ZW1zLm1hcChFQ3VycmllVG9kb0l0ZW0uZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0RUN1cnJpZUxpc3RSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRvZG9JdGVtcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy50b2RvSXRlbXMgIT09IG51bGwpIHt0b1JldHVyblsndG9kb0l0ZW1zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnRvZG9JdGVtcyA/ICh0aGlzLnRvZG9JdGVtcyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy50b2RvSXRlbXM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0SGRvVG9kb1JlcXVlc3QgaW1wbGVtZW50cyBpLkdldEhkb1RvZG9SZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBpZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0SGRvVG9kb1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRIZG9Ub2RvUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0SGRvVG9kb1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWQnXSA9IHRoaXMuaWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0SGRvVG9kb1Jlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRIZG9Ub2RvUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHRvZG86IEhkb1RvZG9JdGVtO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0SGRvVG9kb1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0SGRvVG9kb1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnRvZG8pIHttLnRvZG8gPSBIZG9Ub2RvSXRlbS5mcm9tUHJvdG8ocHJvdG8udG9kbyk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldEhkb1RvZG9SZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRvZG8gIT09ICd1bmRlZmluZWQnICYmIHRoaXMudG9kbyAhPT0gbnVsbCkge3RvUmV0dXJuWyd0b2RvJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnRvZG8gPyAodGhpcy50b2RvIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnRvZG87fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0V0hvcnJlbGxUYXNrUmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0V0hvcnJlbGxUYXNrUmVxdWVzdEludGVyZmFjZSB7XG4gICAgaWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldFdIb3JyZWxsVGFza1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRXSG9ycmVsbFRhc2tSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRXSG9ycmVsbFRhc2tSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lkJ10gPSB0aGlzLmlkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldFdIb3JyZWxsVGFza1Jlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRXSG9ycmVsbFRhc2tSZXNwb25zZUludGVyZmFjZSB7XG4gICAgdGFzazogV0hvcnJlbGxUYXNrO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0V0hvcnJlbGxUYXNrUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRXSG9ycmVsbFRhc2tSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by50YXNrKSB7bS50YXNrID0gV0hvcnJlbGxUYXNrLmZyb21Qcm90byhwcm90by50YXNrKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0V0hvcnJlbGxUYXNrUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50YXNrICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnRhc2sgIT09IG51bGwpIHt0b1JldHVyblsndGFzayddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy50YXNrID8gKHRoaXMudGFzayBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy50YXNrO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEhkb1RvZG9JdGVtIGltcGxlbWVudHMgaS5IZG9Ub2RvSXRlbUludGVyZmFjZSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgY29tcGxldGVkOiBib29sZWFuO1xuICAgIGRlbGV0ZWQ6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBIZG9Ub2RvSXRlbSB7XG4gICAgICAgIGxldCBtID0gbmV3IEhkb1RvZG9JdGVtKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5IZG9Ub2RvSXRlbUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpZCddID0gdGhpcy5pZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50aXRsZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndGl0bGUnXSA9IHRoaXMudGl0bGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGVzY3JpcHRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Rlc2NyaXB0aW9uJ10gPSB0aGlzLmRlc2NyaXB0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbXBsZXRlZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29tcGxldGVkJ10gPSB0aGlzLmNvbXBsZXRlZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kZWxldGVkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkZWxldGVkJ10gPSB0aGlzLmRlbGV0ZWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSU9sYWxleWVDcmVhdGVUYXNrUmVxdWVzdCBpbXBsZW1lbnRzIGkuSU9sYWxleWVDcmVhdGVUYXNrUmVxdWVzdEludGVyZmFjZSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBJT2xhbGV5ZUNyZWF0ZVRhc2tSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgSU9sYWxleWVDcmVhdGVUYXNrUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuSU9sYWxleWVDcmVhdGVUYXNrUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm5hbWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ25hbWUnXSA9IHRoaXMubmFtZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kZXNjcmlwdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZGVzY3JpcHRpb24nXSA9IHRoaXMuZGVzY3JpcHRpb247fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSU9sYWxleWVDcmVhdGVUYXNrUmVzcG9uc2UgaW1wbGVtZW50cyBpLklPbGFsZXllQ3JlYXRlVGFza1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBpZDogbnVtYmVyO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogSU9sYWxleWVDcmVhdGVUYXNrUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBJT2xhbGV5ZUNyZWF0ZVRhc2tSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5pZCkge20uaWQgPSBwYXJzZUludChwcm90by5pZCwgMTApO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5JT2xhbGV5ZUNyZWF0ZVRhc2tSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpZCddID0gdGhpcy5pZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJT2xhbGV5ZURlbGV0ZVRhc2tSZXF1ZXN0IGltcGxlbWVudHMgaS5JT2xhbGV5ZURlbGV0ZVRhc2tSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBpZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogSU9sYWxleWVEZWxldGVUYXNrUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IElPbGFsZXllRGVsZXRlVGFza1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLklPbGFsZXllRGVsZXRlVGFza1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWQnXSA9IHRoaXMuaWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSU9sYWxleWVEZWxldGVUYXNrUmVzcG9uc2UgaW1wbGVtZW50cyBpLklPbGFsZXllRGVsZXRlVGFza1Jlc3BvbnNlSW50ZXJmYWNlIHtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IElPbGFsZXllRGVsZXRlVGFza1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgSU9sYWxleWVEZWxldGVUYXNrUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLklPbGFsZXllRGVsZXRlVGFza1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSU9sYWxleWVFZGl0VGFza1JlcXVlc3QgaW1wbGVtZW50cyBpLklPbGFsZXllRWRpdFRhc2tSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICB0YXNrOiBJT2xhbGV5ZVRhc2s7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBJT2xhbGV5ZUVkaXRUYXNrUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IElPbGFsZXllRWRpdFRhc2tSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnRhc2spIHttLnRhc2sgPSBJT2xhbGV5ZVRhc2suZnJvbVByb3RvKHByb3RvLnRhc2spO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5JT2xhbGV5ZUVkaXRUYXNrUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRhc2sgIT09ICd1bmRlZmluZWQnICYmIHRoaXMudGFzayAhPT0gbnVsbCkge3RvUmV0dXJuWyd0YXNrJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnRhc2sgPyAodGhpcy50YXNrIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnRhc2s7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSU9sYWxleWVFZGl0VGFza1Jlc3BvbnNlIGltcGxlbWVudHMgaS5JT2xhbGV5ZUVkaXRUYXNrUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHRhc2s6IElPbGFsZXllVGFzaztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IElPbGFsZXllRWRpdFRhc2tSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IElPbGFsZXllRWRpdFRhc2tSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by50YXNrKSB7bS50YXNrID0gSU9sYWxleWVUYXNrLmZyb21Qcm90byhwcm90by50YXNrKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuSU9sYWxleWVFZGl0VGFza1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGFzayAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy50YXNrICE9PSBudWxsKSB7dG9SZXR1cm5bJ3Rhc2snXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudGFzayA/ICh0aGlzLnRhc2sgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudGFzazt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJT2xhbGV5ZUdldFRhc2tSZXF1ZXN0IGltcGxlbWVudHMgaS5JT2xhbGV5ZUdldFRhc2tSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBpZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogSU9sYWxleWVHZXRUYXNrUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IElPbGFsZXllR2V0VGFza1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLklPbGFsZXllR2V0VGFza1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWQnXSA9IHRoaXMuaWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSU9sYWxleWVHZXRUYXNrUmVzcG9uc2UgaW1wbGVtZW50cyBpLklPbGFsZXllR2V0VGFza1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICB0YXNrOiBJT2xhbGV5ZVRhc2s7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBJT2xhbGV5ZUdldFRhc2tSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IElPbGFsZXllR2V0VGFza1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnRhc2spIHttLnRhc2sgPSBJT2xhbGV5ZVRhc2suZnJvbVByb3RvKHByb3RvLnRhc2spO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5JT2xhbGV5ZUdldFRhc2tSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRhc2sgIT09ICd1bmRlZmluZWQnICYmIHRoaXMudGFzayAhPT0gbnVsbCkge3RvUmV0dXJuWyd0YXNrJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnRhc2sgPyAodGhpcy50YXNrIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnRhc2s7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSU9sYWxleWVMaXN0VGFza3NSZXF1ZXN0IGltcGxlbWVudHMgaS5JT2xhbGV5ZUxpc3RUYXNrc1JlcXVlc3RJbnRlcmZhY2Uge1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogSU9sYWxleWVMaXN0VGFza3NSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgSU9sYWxleWVMaXN0VGFza3NSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5JT2xhbGV5ZUxpc3RUYXNrc1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJT2xhbGV5ZUxpc3RUYXNrc1Jlc3BvbnNlIGltcGxlbWVudHMgaS5JT2xhbGV5ZUxpc3RUYXNrc1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBhbGxUYXNrczogSU9sYWxleWVUYXNrW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBJT2xhbGV5ZUxpc3RUYXNrc1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgSU9sYWxleWVMaXN0VGFza3NSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5hbGxUYXNrcykge20uYWxsVGFza3MgPSBwcm90by5hbGxUYXNrcy5tYXAoSU9sYWxleWVUYXNrLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLklPbGFsZXllTGlzdFRhc2tzUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hbGxUYXNrcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5hbGxUYXNrcyAhPT0gbnVsbCkge3RvUmV0dXJuWydhbGxUYXNrcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5hbGxUYXNrcyA/ICh0aGlzLmFsbFRhc2tzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmFsbFRhc2tzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIElPbGFsZXllVGFzayBpbXBsZW1lbnRzIGkuSU9sYWxleWVUYXNrSW50ZXJmYWNlIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgIGRlbGV0ZWQ6IHN0cmluZztcbiAgICBpc0RvbmU6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBJT2xhbGV5ZVRhc2sge1xuICAgICAgICBsZXQgbSA9IG5ldyBJT2xhbGV5ZVRhc2soKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLklPbGFsZXllVGFza0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpZCddID0gdGhpcy5pZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5uYW1lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyduYW1lJ10gPSB0aGlzLm5hbWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGVzY3JpcHRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Rlc2NyaXB0aW9uJ10gPSB0aGlzLmRlc2NyaXB0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRlbGV0ZWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2RlbGV0ZWQnXSA9IHRoaXMuZGVsZXRlZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pc0RvbmUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lzRG9uZSddID0gdGhpcy5pc0RvbmU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdEhkb1RvZG9SZXF1ZXN0IGltcGxlbWVudHMgaS5MaXN0SGRvVG9kb1JlcXVlc3RJbnRlcmZhY2Uge1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdEhkb1RvZG9SZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdEhkb1RvZG9SZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0SGRvVG9kb1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0SGRvVG9kb1Jlc3BvbnNlIGltcGxlbWVudHMgaS5MaXN0SGRvVG9kb1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICB0b2RvczogSGRvVG9kb0l0ZW1bXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RIZG9Ub2RvUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0SGRvVG9kb1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnRvZG9zKSB7bS50b2RvcyA9IHByb3RvLnRvZG9zLm1hcChIZG9Ub2RvSXRlbS5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0SGRvVG9kb1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudG9kb3MgIT09ICd1bmRlZmluZWQnICYmIHRoaXMudG9kb3MgIT09IG51bGwpIHt0b1JldHVyblsndG9kb3MnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudG9kb3MgPyAodGhpcy50b2RvcyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy50b2Rvczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0V0hvcnJlbGxUYXNrc1JlcXVlc3QgaW1wbGVtZW50cyBpLkxpc3RXSG9ycmVsbFRhc2tzUmVxdWVzdEludGVyZmFjZSB7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0V0hvcnJlbGxUYXNrc1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0V0hvcnJlbGxUYXNrc1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RXSG9ycmVsbFRhc2tzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RXSG9ycmVsbFRhc2tzUmVzcG9uc2UgaW1wbGVtZW50cyBpLkxpc3RXSG9ycmVsbFRhc2tzUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHRhc2tzOiBXSG9ycmVsbFRhc2tbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RXSG9ycmVsbFRhc2tzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0V0hvcnJlbGxUYXNrc1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnRhc2tzKSB7bS50YXNrcyA9IHByb3RvLnRhc2tzLm1hcChXSG9ycmVsbFRhc2suZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdFdIb3JyZWxsVGFza3NSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRhc2tzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnRhc2tzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3Rhc2tzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnRhc2tzID8gKHRoaXMudGFza3MgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudGFza3M7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTU11Z290Q3JlYXRlVGFza1JlcXVlc3QgaW1wbGVtZW50cyBpLk1NdWdvdENyZWF0ZVRhc2tSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICB0YXNrOiBNTXVnb3RUYXNrO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTU11Z290Q3JlYXRlVGFza1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBNTXVnb3RDcmVhdGVUYXNrUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by50YXNrKSB7bS50YXNrID0gTU11Z290VGFzay5mcm9tUHJvdG8ocHJvdG8udGFzayk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLk1NdWdvdENyZWF0ZVRhc2tSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGFzayAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy50YXNrICE9PSBudWxsKSB7dG9SZXR1cm5bJ3Rhc2snXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudGFzayA/ICh0aGlzLnRhc2sgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudGFzazt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNTXVnb3RDcmVhdGVUYXNrUmVzcG9uc2UgaW1wbGVtZW50cyBpLk1NdWdvdENyZWF0ZVRhc2tSZXNwb25zZUludGVyZmFjZSB7XG4gICAgaXNDcmVhdGVkOiBib29sZWFuO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTU11Z290Q3JlYXRlVGFza1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTU11Z290Q3JlYXRlVGFza1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5NTXVnb3RDcmVhdGVUYXNrUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pc0NyZWF0ZWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lzQ3JlYXRlZCddID0gdGhpcy5pc0NyZWF0ZWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTU11Z290RGVsZXRlVGFza1JlcXVlc3QgaW1wbGVtZW50cyBpLk1NdWdvdERlbGV0ZVRhc2tSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICB0YXNrSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IE1NdWdvdERlbGV0ZVRhc2tSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTU11Z290RGVsZXRlVGFza1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLk1NdWdvdERlbGV0ZVRhc2tSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGFza0lkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0YXNrSWQnXSA9IHRoaXMudGFza0lkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1NdWdvdEdldFRhc2tSZXF1ZXN0IGltcGxlbWVudHMgaS5NTXVnb3RHZXRUYXNrUmVxdWVzdEludGVyZmFjZSB7XG4gICAgdGFza0lkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBNTXVnb3RHZXRUYXNrUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IE1NdWdvdEdldFRhc2tSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5NTXVnb3RHZXRUYXNrUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRhc2tJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndGFza0lkJ10gPSB0aGlzLnRhc2tJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNTXVnb3RHZXRUYXNrUmVzcG9uc2UgaW1wbGVtZW50cyBpLk1NdWdvdEdldFRhc2tSZXNwb25zZUludGVyZmFjZSB7XG4gICAgdGFzazogTU11Z290VGFzaztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IE1NdWdvdEdldFRhc2tSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IE1NdWdvdEdldFRhc2tSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by50YXNrKSB7bS50YXNrID0gTU11Z290VGFzay5mcm9tUHJvdG8ocHJvdG8udGFzayk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLk1NdWdvdEdldFRhc2tSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRhc2sgIT09ICd1bmRlZmluZWQnICYmIHRoaXMudGFzayAhPT0gbnVsbCkge3RvUmV0dXJuWyd0YXNrJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnRhc2sgPyAodGhpcy50YXNrIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnRhc2s7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTU11Z290TGlzdFRhc2tzUmVxdWVzdCBpbXBsZW1lbnRzIGkuTU11Z290TGlzdFRhc2tzUmVxdWVzdEludGVyZmFjZSB7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBNTXVnb3RMaXN0VGFza3NSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTU11Z290TGlzdFRhc2tzUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTU11Z290TGlzdFRhc2tzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1NdWdvdExpc3RUYXNrc1Jlc3BvbnNlIGltcGxlbWVudHMgaS5NTXVnb3RMaXN0VGFza3NSZXNwb25zZUludGVyZmFjZSB7XG4gICAgdGFza3M6IE1NdWdvdFRhc2tbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IE1NdWdvdExpc3RUYXNrc1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTU11Z290TGlzdFRhc2tzUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udGFza3MpIHttLnRhc2tzID0gcHJvdG8udGFza3MubWFwKE1NdWdvdFRhc2suZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTU11Z290TGlzdFRhc2tzUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50YXNrcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy50YXNrcyAhPT0gbnVsbCkge3RvUmV0dXJuWyd0YXNrcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy50YXNrcyA/ICh0aGlzLnRhc2tzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnRhc2tzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1NdWdvdFRhc2sgaW1wbGVtZW50cyBpLk1NdWdvdFRhc2tJbnRlcmZhY2Uge1xuICAgIHRhc2tOYW1lOiBzdHJpbmc7XG4gICAgdGFza0Rlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgaXNDb21wbGV0ZTogYm9vbGVhbjtcbiAgICB0YXNrSWQ6IHN0cmluZztcbiAgICBpc0RlbGV0ZWQ6IGJvb2xlYW47XG4gICAgZHVlRGF0ZTogRGF0ZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IE1NdWdvdFRhc2sge1xuICAgICAgICBsZXQgbSA9IG5ldyBNTXVnb3RUYXNrKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmR1ZURhdGUpIHttLmR1ZURhdGUgPSBuZXcgRGF0ZShwcm90by5kdWVEYXRlKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTU11Z290VGFza0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRhc2tOYW1lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0YXNrTmFtZSddID0gdGhpcy50YXNrTmFtZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50YXNrRGVzY3JpcHRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Rhc2tEZXNjcmlwdGlvbiddID0gdGhpcy50YXNrRGVzY3JpcHRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaXNDb21wbGV0ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaXNDb21wbGV0ZSddID0gdGhpcy5pc0NvbXBsZXRlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRhc2tJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndGFza0lkJ10gPSB0aGlzLnRhc2tJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pc0RlbGV0ZWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lzRGVsZXRlZCddID0gdGhpcy5pc0RlbGV0ZWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZHVlRGF0ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5kdWVEYXRlICE9PSBudWxsKSB7dG9SZXR1cm5bJ2R1ZURhdGUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZHVlRGF0ZSA/ICh0aGlzLmR1ZURhdGUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZHVlRGF0ZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNTXVnb3RVcGRhdGVUYXNrUmVxdWVzdCBpbXBsZW1lbnRzIGkuTU11Z290VXBkYXRlVGFza1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHRhc2tJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTU11Z290VXBkYXRlVGFza1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBNTXVnb3RVcGRhdGVUYXNrUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTU11Z290VXBkYXRlVGFza1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50YXNrSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Rhc2tJZCddID0gdGhpcy50YXNrSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTU11Z290VXBkYXRlVGFza1Jlc3BvbnNlIGltcGxlbWVudHMgaS5NTXVnb3RVcGRhdGVUYXNrUmVzcG9uc2VJbnRlcmZhY2Uge1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTU11Z290VXBkYXRlVGFza1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTU11Z290VXBkYXRlVGFza1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5NTXVnb3RVcGRhdGVUYXNrUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVIZG9Ub2RvUmVxdWVzdCBpbXBsZW1lbnRzIGkuVXBkYXRlSGRvVG9kb1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHRvZG86IEhkb1RvZG9JdGVtO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlSGRvVG9kb1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBVcGRhdGVIZG9Ub2RvUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by50b2RvKSB7bS50b2RvID0gSGRvVG9kb0l0ZW0uZnJvbVByb3RvKHByb3RvLnRvZG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcGRhdGVIZG9Ub2RvUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRvZG8gIT09ICd1bmRlZmluZWQnICYmIHRoaXMudG9kbyAhPT0gbnVsbCkge3RvUmV0dXJuWyd0b2RvJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnRvZG8gPyAodGhpcy50b2RvIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnRvZG87fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlSGRvVG9kb1Jlc3BvbnNlIGltcGxlbWVudHMgaS5VcGRhdGVIZG9Ub2RvUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHRvZG86IEhkb1RvZG9JdGVtO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlSGRvVG9kb1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBkYXRlSGRvVG9kb1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnRvZG8pIHttLnRvZG8gPSBIZG9Ub2RvSXRlbS5mcm9tUHJvdG8ocHJvdG8udG9kbyk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwZGF0ZUhkb1RvZG9SZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRvZG8gIT09ICd1bmRlZmluZWQnICYmIHRoaXMudG9kbyAhPT0gbnVsbCkge3RvUmV0dXJuWyd0b2RvJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnRvZG8gPyAodGhpcy50b2RvIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnRvZG87fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgV0hvcnJlbGxUYXNrIGltcGxlbWVudHMgaS5XSG9ycmVsbFRhc2tJbnRlcmZhY2Uge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgaXNDb21wbGV0ZWQ6IGJvb2xlYW47XG4gICAgaXNEZWxldGVkOiBib29sZWFuO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogV0hvcnJlbGxUYXNrIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgV0hvcnJlbGxUYXNrKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5XSG9ycmVsbFRhc2tJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWQnXSA9IHRoaXMuaWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbmFtZSddID0gdGhpcy5uYW1lO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRlc2NyaXB0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkZXNjcmlwdGlvbiddID0gdGhpcy5kZXNjcmlwdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pc0NvbXBsZXRlZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaXNDb21wbGV0ZWQnXSA9IHRoaXMuaXNDb21wbGV0ZWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaXNEZWxldGVkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpc0RlbGV0ZWQnXSA9IHRoaXMuaXNEZWxldGVkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuIl19
|