occam-languages 2.2.63 → 3.0.2

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.
@@ -9,421 +9,328 @@ function _export(target, all) {
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
- get asynchronousAll () {
13
- return asynchronousAll;
12
+ get all () {
13
+ return all;
14
14
  },
15
- get asynchronousBackwardsEvery () {
16
- return asynchronousBackwardsEvery;
15
+ get backwardsEvery () {
16
+ return backwardsEvery;
17
17
  },
18
- get asynchronousBackwardsForEach () {
19
- return asynchronousBackwardsForEach;
18
+ get backwardsForEach () {
19
+ return backwardsForEach;
20
20
  },
21
- get asynchronousEach () {
22
- return asynchronousEach;
21
+ get default () {
22
+ return _default;
23
23
  },
24
- get asynchronousEvery () {
25
- return asynchronousEvery;
24
+ get each () {
25
+ return each;
26
26
  },
27
- get asynchronousExists () {
28
- return asynchronousExists;
27
+ get every () {
28
+ return every;
29
29
  },
30
- get asynchronousExtract () {
31
- return asynchronousExtract;
30
+ get exists () {
31
+ return exists;
32
32
  },
33
- get asynchronousFilter () {
34
- return asynchronousFilter;
33
+ get extract () {
34
+ return extract;
35
35
  },
36
- get asynchronousForEach () {
37
- return asynchronousForEach;
36
+ get filter () {
37
+ return filter;
38
38
  },
39
- get asynchronousForwardsEvery () {
40
- return asynchronousForwardsEvery;
39
+ get forEach () {
40
+ return forEach;
41
41
  },
42
- get asynchronousForwardsForEach () {
43
- return asynchronousForwardsForEach;
42
+ get forwardsEvery () {
43
+ return forwardsEvery;
44
44
  },
45
- get asynchronousMatch () {
46
- return asynchronousMatch;
45
+ get forwardsForEach () {
46
+ return forwardsForEach;
47
47
  },
48
- get asynchronousOne () {
49
- return asynchronousOne;
48
+ get match () {
49
+ return match;
50
50
  },
51
- get asynchronousPrune () {
52
- return asynchronousPrune;
51
+ get one () {
52
+ return one;
53
53
  },
54
- get asynchronousReduce () {
55
- return asynchronousReduce;
54
+ get prune () {
55
+ return prune;
56
56
  },
57
- get asynchronousResolve () {
58
- return asynchronousResolve;
57
+ get reduce () {
58
+ return reduce;
59
59
  },
60
- get asynchronousSome () {
61
- return asynchronousSome;
60
+ get resolve () {
61
+ return resolve;
62
62
  },
63
- get default () {
64
- return _default;
63
+ get some () {
64
+ return some;
65
65
  }
66
66
  });
67
67
  const _necessary = require("necessary");
68
68
  const { filter: arrayFilter } = _necessary.arrayUtilities;
69
- function asynchronousOne(array, callback, ...initialArguments) {
70
- const continuation = initialArguments.pop(), length = array.length;
71
- let count = 0, index = -1;
72
- let finalArguments;
73
- function next(...callbackArguments) {
74
- index++;
69
+ function one(array, callback, ...initialArguments) {
70
+ const continuation = initialArguments.pop(), length = array.length, index = 0;
71
+ function next(index, ...nextArguments) {
75
72
  if (index === length) {
76
- const success = count === 1;
77
- if (!success) {
78
- finalArguments = initialArguments; ///
79
- }
80
- return continuation(success, ...finalArguments);
73
+ const success = count === 1, finalArguemnts = success ? nextArguments : initialArguments; ///
74
+ return continuation(success, ...finalArguemnts);
81
75
  }
82
76
  const element = array[index];
83
- return callback(element, ...callbackArguments, (success, ...intermediateArguments)=>{
77
+ return callback(element, ...initialArguments, (success, ...callbackArguments)=>{
84
78
  if (success) {
85
- if (count === 1) {
86
- const success = false;
87
- finalArguments = initialArguments; ///
79
+ count++;
80
+ if (count === 2) {
81
+ const success = false, finalArguments = initialArguments; ///
88
82
  return continuation(success, ...finalArguments);
89
83
  }
90
- finalArguments = intermediateArguments; ///
91
- count++;
84
+ return next(index + 1, ...callbackArguments);
92
85
  }
93
- const callbackArguments = initialArguments; ///
94
- return next(...callbackArguments);
86
+ return next(index + 1, ...nextArguments);
95
87
  });
96
88
  }
97
- const callbackArguments = initialArguments; ///
98
- return next(...callbackArguments);
89
+ let count = 0;
90
+ return next(index, ...initialArguments);
99
91
  }
100
- function asynchronousSome(array, callback, ...initialArguments) {
101
- const continuation = initialArguments.pop(), length = array.length;
102
- let index = -1;
103
- let finalArguments;
104
- function next(...callbackArguments) {
105
- index++;
92
+ function some(array, callback, ...initialArguments) {
93
+ const continuation = initialArguments.pop(), length = array.length, index = 0;
94
+ function next(index) {
106
95
  if (index === length) {
107
- const success = false;
108
- finalArguments = initialArguments; ///
96
+ const success = false, finalArguments = initialArguments; ///
109
97
  return continuation(success, ...finalArguments);
110
98
  }
111
99
  const element = array[index];
112
- return callback(element, ...callbackArguments, (success, ...intermediateArguments)=>{
100
+ return callback(element, ...initialArguments, (success, ...callbackArguments)=>{
113
101
  if (success) {
114
- finalArguments = intermediateArguments; ///
102
+ const finalArguments = callbackArguments; //
115
103
  return continuation(success, ...finalArguments);
116
104
  }
117
- const callbackArguments = initialArguments; ///
118
- return next(...callbackArguments);
105
+ return next(index + 1);
119
106
  });
120
107
  }
121
- const callbackArguments = initialArguments; ///
122
- return next(...callbackArguments);
108
+ return next(index);
123
109
  }
124
- function asynchronousEach(array, callback, ...initialArguments) {
125
- const continuation = initialArguments.pop(), length = array.length;
126
- let count = 0, index = -1;
127
- let finalArguments;
128
- function next(...callbackArguments) {
129
- index++;
110
+ function each(array, callback, ...initialArguments) {
111
+ const continuation = initialArguments.pop(), length = array.length, index = 0;
112
+ function next(index, ...nextArguments) {
130
113
  if (index === length) {
131
- const success = count > 0;
132
- finalArguments = callbackArguments; ///
114
+ const success = count !== 0, finalArguments = success ? nextArguments : initialArguments; ///
133
115
  return continuation(success, ...finalArguments);
134
116
  }
135
117
  const element = array[index];
136
- return callback(element, ...callbackArguments, (success, ...intermediateArguments)=>{
118
+ return callback(element, ...nextArguments, (success, ...callbackArguments)=>{
137
119
  if (!success) {
138
- finalArguments = initialArguments; ///
120
+ const finalArguments = initialArguments; ///
139
121
  return continuation(success, ...finalArguments);
140
122
  }
141
123
  count++;
142
- const callbackArguments = intermediateArguments; ///
143
- return next(...callbackArguments);
124
+ return next(index + 1, ...callbackArguments);
144
125
  });
145
126
  }
146
- const callbackArguments = initialArguments; ///
147
- return next(...callbackArguments);
127
+ let count = 0;
128
+ return next(index, ...initialArguments);
148
129
  }
149
- function asynchronousEvery(array, callback, ...initialArguments) {
150
- const continuation = initialArguments.pop(), length = array.length;
151
- let index = -1;
152
- let finalArguments;
153
- function next(...callbackArguments) {
154
- index++;
130
+ function every(array, callback, ...initialArguments) {
131
+ const continuation = initialArguments.pop(), length = array.length, index = 0;
132
+ function next(index, ...nextArguments) {
155
133
  if (index === length) {
156
- const success = true;
157
- finalArguments = callbackArguments; ///
134
+ const success = true, finalArguments = nextArguments; ///
158
135
  return continuation(success, ...finalArguments);
159
136
  }
160
137
  const element = array[index];
161
- return callback(element, ...callbackArguments, (success, ...intermediateArguments)=>{
138
+ return callback(element, ...nextArguments, (success, ...callbackArguments)=>{
162
139
  if (!success) {
163
- finalArguments = initialArguments; ///
140
+ const finalArguments = initialArguments; ///
164
141
  return continuation(success, ...finalArguments);
165
142
  }
166
- const callbackArguments = intermediateArguments; ///
167
- return next(...callbackArguments);
143
+ return next(index + 1, ...callbackArguments);
168
144
  });
169
145
  }
170
- const callbackArguments = initialArguments; ///
171
- return next(...callbackArguments);
146
+ return next(index, ...initialArguments);
172
147
  }
173
- function asynchronousReduce(array, initialValue, callback, ...initialArguments) {
174
- const continuation = initialArguments.pop(), length = array.length;
175
- let index = -1;
176
- let finalArguments;
177
- function next(value, ...callbackArguments) {
178
- index++;
148
+ function reduce(array, initialValue, callback, ...initialArguments) {
149
+ const continuation = initialArguments.pop(), length = array.length, index = 0;
150
+ function next(index, value, ...nextArguments) {
179
151
  if (index === length) {
180
- finalArguments = callbackArguments; ///
152
+ const finalArguments = nextArguments; ///
181
153
  return continuation(value, ...finalArguments);
182
154
  }
183
155
  const element = array[index];
184
- return callback(element, value, ...callbackArguments, (value, ...intermediateArguments)=>{
185
- const callbackArguments = intermediateArguments; ///
186
- return next(value, ...callbackArguments);
156
+ return callback(element, value, ...nextArguments, (value, ...callbackArguments)=>{
157
+ return next(index + 1, value, ...callbackArguments);
187
158
  });
188
159
  }
189
- const value = initialValue, callbackArguments = initialArguments; ///
190
- return next(value, ...callbackArguments);
160
+ return next(index, initialValue, ...initialArguments);
191
161
  }
192
- function asynchronousForEach(array, callback, ...initialArguments) {
193
- const continuation = initialArguments.pop(), length = array.length;
194
- let index = -1;
195
- let finalArguments;
196
- function next(...callbackArguments) {
197
- index++;
162
+ function forEach(array, callback, ...initialArguments) {
163
+ const continuation = initialArguments.pop(), length = array.length, index = 0;
164
+ function next(index, ...nextArguments) {
198
165
  if (index === length) {
199
- finalArguments = callbackArguments; ///
166
+ const finalArguments = nextArguments; ///
200
167
  return continuation(...finalArguments);
201
168
  }
202
169
  const element = array[index];
203
- return callback(element, ...callbackArguments, (...intermediateArguments)=>{
204
- const callbackArguments = intermediateArguments; ///
205
- return next(...callbackArguments);
170
+ return callback(element, ...nextArguments, (...callbackArguments)=>{
171
+ return next(index + 1, ...callbackArguments);
206
172
  });
207
173
  }
208
- const callbackArguments = initialArguments; ///
209
- return next(...callbackArguments);
174
+ return next(index, ...initialArguments);
210
175
  }
211
- function asynchronousForwardsEvery(array, callback, ...initialArguments) {
212
- const continuation = initialArguments.pop(), length = array.length;
213
- let index = -1;
214
- let finalArguments;
215
- function next(...callbackArguments) {
216
- index++;
176
+ function forwardsEvery(array, callback, ...initialArguments) {
177
+ const continuation = initialArguments.pop(), length = array.length, index = 0;
178
+ function next(index, ...nextArguments) {
217
179
  if (index === length) {
218
- const success = true;
219
- finalArguments = callbackArguments; ///
180
+ const success = true, finalArguments = nextArguments; ///
220
181
  return continuation(success, ...finalArguments);
221
182
  }
222
183
  const element = array[index];
223
- return callback(element, ...callbackArguments, (success, ...intermediateArguments)=>{
184
+ return callback(element, ...nextArguments, (success, ...callbackArguments)=>{
224
185
  if (!success) {
225
- finalArguments = initialArguments; ///
186
+ const finalArguments = initialArguments; ///
226
187
  return continuation(success, ...finalArguments);
227
188
  }
228
- const callbackArguments = intermediateArguments; ///
229
- return next(...callbackArguments);
189
+ return next(index + 1, ...callbackArguments);
230
190
  });
231
191
  }
232
- const callbackArguments = initialArguments; ///
233
- return next(...callbackArguments);
192
+ return next(index, ...initialArguments);
234
193
  }
235
- function asynchronousBackwardsEvery(array, callback, ...initialArguments) {
236
- const continuation = initialArguments.pop(), length = array.length;
237
- let index = length;
238
- let finalArguments;
239
- function next(...callbackArguments) {
240
- index--;
194
+ function backwardsEvery(array, callback, ...initialArguments) {
195
+ const continuation = initialArguments.pop(), length = array.length, index = length - 1;
196
+ function next(index, ...nextArguments) {
241
197
  if (index === -1) {
242
- const success = true;
243
- finalArguments = callbackArguments; ///
198
+ const success = true, finalArguments = nextArguments; ///
244
199
  return continuation(success, ...finalArguments);
245
200
  }
246
201
  const element = array[index];
247
- return callback(element, ...callbackArguments, (success, ...intermediateArguments)=>{
202
+ return callback(element, ...nextArguments, (success, ...callbackArguments)=>{
248
203
  if (!success) {
249
- finalArguments = initialArguments; ///
204
+ const finalArguments = initialArguments; ///
250
205
  return continuation(success, ...finalArguments);
251
206
  }
252
- const callbackArguments = intermediateArguments; ///
253
- return next(...callbackArguments);
207
+ return next(index - 1, ...callbackArguments);
254
208
  });
255
209
  }
256
- const callbackArguments = initialArguments; ///
257
- return next(...callbackArguments);
210
+ return next(index, ...initialArguments);
258
211
  }
259
- function asynchronousForwardsForEach(array, callback, ...initialArguments) {
260
- const continuation = initialArguments.pop(), length = array.length;
261
- let index = -1;
262
- let finalArguments;
263
- function next(...callbackArguments) {
264
- index++;
212
+ function forwardsForEach(array, callback, ...initialArguments) {
213
+ const continuation = initialArguments.pop(), length = array.length, index = 0;
214
+ function next(index, ...nextArguments) {
265
215
  if (index === length) {
266
- finalArguments = callbackArguments; ///
216
+ const finalArguments = nextArguments; ///
267
217
  return continuation(...finalArguments);
268
218
  }
269
219
  const element = array[index];
270
- return callback(element, ...callbackArguments, (...intermediateArguments)=>{
271
- const callbackArguments = intermediateArguments; ///
272
- return next(...callbackArguments);
220
+ return callback(element, ...nextArguments, (...callbackArguments)=>{
221
+ return next(index + 1, ...callbackArguments);
273
222
  });
274
223
  }
275
- const callbackArguments = initialArguments; ///
276
- return next(...callbackArguments);
224
+ return next(index, ...initialArguments);
277
225
  }
278
- function asynchronousBackwardsForEach(array, callback, ...initialArguments) {
279
- const continuation = initialArguments.pop(), length = array.length;
280
- let index = length;
281
- let finalArguments;
282
- function next(...callbackArguments) {
283
- index--;
226
+ function backwardsForEach(array, callback, ...initialArguments) {
227
+ const continuation = initialArguments.pop(), length = array.length, index = length - 1;
228
+ function next(index, ...nextArguments) {
284
229
  if (index === -1) {
285
- finalArguments = callbackArguments; ///
230
+ const finalArguments = nextArguments; ///
286
231
  return continuation(...finalArguments);
287
232
  }
288
233
  const element = array[index];
289
- return callback(element, ...callbackArguments, (...intermediateArguments)=>{
290
- const callbackArguments = intermediateArguments; ///
291
- return next(...callbackArguments);
234
+ return callback(element, ...nextArguments, (...callbackArguments)=>{
235
+ return next(index - 1, ...callbackArguments);
292
236
  });
293
237
  }
294
- const callbackArguments = initialArguments; ///
295
- return next(...callbackArguments);
238
+ return next(index, ...initialArguments);
296
239
  }
297
- function asynchronousFilter(array, callback, ...initialArguments) {
298
- const continuation = initialArguments.pop(), length = array.length;
299
- const deletedElements = [];
300
- let index = length;
301
- let finalArguments;
302
- function next(...callbackArguments) {
303
- index--;
240
+ function filter(array, callback, ...initialArguments) {
241
+ const continuation = initialArguments.pop(), length = array.length, deletedElements = [], index = length - 1;
242
+ function next(index, ...nextArguments) {
304
243
  if (index === -1) {
305
- finalArguments = callbackArguments; ///
244
+ const finalArguments = nextArguments; ///
306
245
  return continuation(deletedElements, ...finalArguments);
307
246
  }
308
247
  const element = array[index];
309
- return callback(element, ...callbackArguments, (passed, ...intermediateArguments)=>{
248
+ return callback(element, ...nextArguments, (passed, ...callbackArguments)=>{
310
249
  if (!passed) {
311
250
  const startIndex = index, deleteCount = 1, deletedElement = element; ///
312
251
  array.splice(startIndex, deleteCount);
313
252
  deletedElements.unshift(deletedElement);
314
253
  }
315
- const callbackArguments = intermediateArguments; ///
316
- return next(...callbackArguments);
254
+ return next(index - 1, ...callbackArguments);
317
255
  });
318
256
  }
319
- const callbackArguments = initialArguments; ///
320
- return next(...callbackArguments);
257
+ return next(index, ...initialArguments);
321
258
  }
322
- function asynchronousPrune(array, callback, ...initialArguments) {
323
- const continuation = initialArguments.pop(), length = array.length;
324
- let deletedElement;
325
- let index = -1;
326
- let finalArguments;
327
- function next(...callbackArguments) {
328
- index++;
259
+ function prune(array, callback, ...initialArguments) {
260
+ const continuation = initialArguments.pop(), length = array.length, index = 0;
261
+ function next(index) {
329
262
  if (index === length) {
330
- deletedElement = undefined;
331
- finalArguments = initialArguments; ///
263
+ const deletedElement = undefined, finalArguments = initialArguments; ///
332
264
  return continuation(deletedElement, ...finalArguments);
333
265
  }
334
266
  const element = array[index];
335
- return callback(element, ...callbackArguments, (passed, ...intermediateArguments)=>{
267
+ return callback(element, ...initialArguments, (passed, ...callbackArguments)=>{
336
268
  if (!passed) {
337
- const startIndex = index, deleteCount = 1, deletedElement = element; ///
269
+ const startIndex = index, deleteCount = 1, deletedElement = element, finalArguments = callbackArguments; ///
338
270
  array.splice(startIndex, deleteCount);
339
- finalArguments = intermediateArguments; ///
340
271
  return continuation(deletedElement, ...finalArguments);
341
272
  }
342
- const callbackArguments = initialArguments; ///
343
- return next(...callbackArguments);
273
+ return next(index + 1);
344
274
  });
345
275
  }
346
- const callbackArguments = initialArguments; ///
347
- return next(...callbackArguments);
276
+ return next(index);
348
277
  }
349
- function asynchronousExtract(array, callback, ...initialArguments) {
350
- const continuation = initialArguments.pop(), length = array.length;
351
- let deletedElement;
352
- let index = -1;
353
- let finalArguments;
354
- function next(...callbackArguments) {
355
- index++;
278
+ function extract(array, callback, ...initialArguments) {
279
+ const continuation = initialArguments.pop(), length = array.length, index = 0;
280
+ function next(index) {
356
281
  if (index === length) {
357
- deletedElement = undefined;
358
- finalArguments = initialArguments; ///
282
+ const deletedElement = undefined, finalArguments = initialArguments; ///
359
283
  return continuation(deletedElement, ...finalArguments);
360
284
  }
361
285
  const element = array[index];
362
- return callback(element, ...callbackArguments, (passed, ...intermediateArguments)=>{
286
+ return callback(element, ...initialArguments, (passed, ...callbackArguments)=>{
363
287
  if (passed) {
364
- const startIndex = index, deleteCount = 1, deletedElement = element; ///
288
+ const startIndex = index, deleteCount = 1, deletedElement = element, finalArguments = callbackArguments; ///
365
289
  array.splice(startIndex, deleteCount);
366
- finalArguments = intermediateArguments; ///
367
290
  return continuation(deletedElement, ...finalArguments);
368
291
  }
369
- const callbackArguments = initialArguments; ///
370
- return next(...callbackArguments);
292
+ return next(index + 1);
371
293
  });
372
294
  }
373
- const callbackArguments = initialArguments; ///
374
- return next(...callbackArguments);
295
+ return next(index);
375
296
  }
376
- function asynchronousMatch(arrayA, arrayB, callback, ...initialArguments) {
377
- const continuation = initialArguments.pop();
378
- const arrayALength = arrayA.length, arrayBLength = arrayB.length;
379
- let finalArguments;
297
+ function match(arrayA, arrayB, callback, ...initialArguments) {
298
+ const continuation = initialArguments.pop(), arrayALength = arrayA.length, arrayBLength = arrayB.length;
380
299
  if (arrayALength !== arrayBLength) {
381
- const success = false;
382
- finalArguments = initialArguments; ///
300
+ const success = false, finalArguments = initialArguments; ///
383
301
  return continuation(success, ...finalArguments);
384
302
  }
385
- const length = arrayALength; ///
386
- let index = -1;
387
- function next(...callbackArguments) {
388
- index++;
303
+ const length = arrayALength, index = 0;
304
+ function next(index, ...nextArguments) {
389
305
  if (index === length) {
390
- const success = true;
391
- finalArguments = callbackArguments; ///
306
+ const success = true, finalArguments = nextArguments; ///
392
307
  return continuation(success, ...finalArguments);
393
308
  }
394
309
  const elementA = arrayA[index], elementB = arrayB[index];
395
- return callback(elementA, elementB, ...callbackArguments, (success, ...intermediateArguments)=>{
310
+ return callback(elementA, elementB, ...nextArguments, (success, ...callbackArguments)=>{
396
311
  if (!success) {
397
- finalArguments = initialArguments; ///
312
+ const finalArguments = initialArguments; ///
398
313
  return continuation(success, ...finalArguments);
399
314
  }
400
- const callbackArguments = intermediateArguments; ///
401
- return next(...callbackArguments);
315
+ return next(index + 1, ...callbackArguments);
402
316
  });
403
317
  }
404
- const callbackArguments = initialArguments; ///
405
- return next(...callbackArguments);
318
+ return next(index, ...initialArguments);
406
319
  }
407
- function asynchronousResolve(arrayA, arrayB, callback, ...initialArguments) {
320
+ function resolve(arrayA, arrayB, callback, ...initialArguments) {
408
321
  arrayA = [
409
322
  ...arrayA
410
323
  ];
411
324
  const continuation = initialArguments.pop();
412
- let finalArguments;
413
- function nextPass(...callbackArguments) {
414
- let success = false;
325
+ function nextPass(...nextArguments) {
415
326
  const length = arrayA.length; ///
416
327
  if (length === 0) {
417
- success = true;
418
- finalArguments = callbackArguments; ///
328
+ const success = true, finalArguments = nextArguments; ///
419
329
  return continuation(success, ...finalArguments);
420
330
  }
421
- let index = -1;
422
- function nextElement(...callbackArguments) {
423
- index++;
331
+ function nextElement(index, success, ...currentArguments) {
424
332
  if (index === length) {
425
333
  if (!success) {
426
- success = false;
427
334
  const finalArguments = initialArguments; ///
428
335
  return continuation(success, ...finalArguments);
429
336
  }
@@ -433,53 +340,51 @@ function asynchronousResolve(arrayA, arrayB, callback, ...initialArguments) {
433
340
  return true;
434
341
  }
435
342
  });
436
- return nextPass(...callbackArguments);
437
- } else {
438
- const elementA = arrayA[index];
439
- return callback(elementA, ...callbackArguments, (passed, ...intermediateArguments)=>{
440
- if (passed) {
441
- callbackArguments = intermediateArguments; ///
442
- const elementB = elementA; ///
443
- arrayB.push(elementB);
444
- success = true;
445
- }
446
- return nextElement(...callbackArguments);
447
- });
343
+ return nextPass(...currentArguments);
448
344
  }
345
+ const elementA = arrayA[index];
346
+ return callback(elementA, ...currentArguments, (passed, ...callbackArguments)=>{
347
+ if (passed) {
348
+ const elementB = elementA, success = true;
349
+ arrayB.push(elementB);
350
+ return nextElement(index + 1, success, ...callbackArguments);
351
+ }
352
+ return nextElement(index + 1, success, ...currentArguments);
353
+ });
449
354
  }
450
- return nextElement(...callbackArguments);
355
+ const index = 0, success = false;
356
+ return nextElement(index, success, ...nextArguments);
451
357
  }
452
- const callbackArguments = initialArguments; ///
453
- return nextPass(...callbackArguments);
358
+ return nextPass(...initialArguments);
454
359
  }
455
- function asynchronousAll(callbacks, ...initialArguments) {
456
- return asynchronousEvery(callbacks, (callback, ...callbackArguments)=>{
360
+ function all(callbacks, ...initialArguments) {
361
+ return every(callbacks, (callback, ...callbackArguments)=>{
457
362
  return callback(...callbackArguments);
458
363
  }, ...initialArguments);
459
364
  }
460
- function asynchronousExists(callbacks, ...initialArguments) {
461
- return asynchronousSome(callbacks, (callback, ...callbackArguments)=>{
365
+ function exists(callbacks, ...initialArguments) {
366
+ return some(callbacks, (callback, ...callbackArguments)=>{
462
367
  return callback(...callbackArguments);
463
368
  }, ...initialArguments);
464
369
  }
465
370
  const _default = {
466
- asynchronousOne,
467
- asynchronousSome,
468
- asynchronousEach,
469
- asynchronousEvery,
470
- asynchronousReduce,
471
- asynchronousForEach,
472
- asynchronousForwardsEvery,
473
- asynchronousBackwardsEvery,
474
- asynchronousForwardsForEach,
475
- asynchronousBackwardsForEach,
476
- asynchronousFilter,
477
- asynchronousPrune,
478
- asynchronousExtract,
479
- asynchronousMatch,
480
- asynchronousResolve,
481
- asynchronousAll,
482
- asynchronousExists
371
+ one,
372
+ some,
373
+ each,
374
+ every,
375
+ reduce,
376
+ forEach,
377
+ forwardsEvery,
378
+ backwardsEvery,
379
+ forwardsForEach,
380
+ backwardsForEach,
381
+ filter,
382
+ prune,
383
+ extract,
384
+ match,
385
+ resolve,
386
+ all,
387
+ exists
483
388
  };
484
389
 
485
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvY29udGludWF0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuY29uc3QgeyBmaWx0ZXI6IGFycmF5RmlsdGVyIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIGFzeW5jaHJvbm91c09uZShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGxldCBjb3VudCA9IDAsXG4gICAgICBpbmRleCA9IC0xO1xuXG4gIGxldCBmaW5hbEFyZ3VtZW50cztcblxuICBmdW5jdGlvbiBuZXh0KC4uLmNhbGxiYWNrQXJndW1lbnRzKSB7XG4gICAgaW5kZXgrKztcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gKGNvdW50ID09PSAxKTtcblxuICAgICAgaWYgKCFzdWNjZXNzKSB7XG4gICAgICAgIGZpbmFsQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgLy8vXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2VzcywgLi4uZmluYWxBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4uY2FsbGJhY2tBcmd1bWVudHMsIChzdWNjZXNzLCAuLi5pbnRlcm1lZGlhdGVBcmd1bWVudHMpID0+IHtcbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIGlmIChjb3VudCA9PT0gMSkge1xuICAgICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgIGZpbmFsQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgLy8vXG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbmFsQXJndW1lbnRzID0gaW50ZXJtZWRpYXRlQXJndW1lbnRzOyAvLy9cblxuICAgICAgICBjb3VudCsrO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjYWxsYmFja0FyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gICAgICByZXR1cm4gbmV4dCguLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBjYWxsYmFja0FyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gIHJldHVybiBuZXh0KC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzeW5jaHJvbm91c1NvbWUoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBsZXQgaW5kZXggPSAtMTtcblxuICBsZXQgZmluYWxBcmd1bWVudHM7XG5cbiAgZnVuY3Rpb24gbmV4dCguLi5jYWxsYmFja0FyZ3VtZW50cykge1xuICAgIGluZGV4Kys7XG5cbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgY29uc3Qgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICBmaW5hbEFyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLmNhbGxiYWNrQXJndW1lbnRzLCAoc3VjY2VzcywgLi4uaW50ZXJtZWRpYXRlQXJndW1lbnRzKSA9PiB7XG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICBmaW5hbEFyZ3VtZW50cyA9IGludGVybWVkaWF0ZUFyZ3VtZW50czsgLy8vXG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhbGxiYWNrQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBuZXh0KC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IGNhbGxiYWNrQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgLy8vXG5cbiAgcmV0dXJuIG5leHQoLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXN5bmNocm9ub3VzRWFjaChhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGxldCBjb3VudCA9IDAsXG4gICAgICBpbmRleCA9IC0xO1xuXG4gIGxldCBmaW5hbEFyZ3VtZW50cztcblxuICBmdW5jdGlvbiBuZXh0KC4uLmNhbGxiYWNrQXJndW1lbnRzKSB7XG4gICAgaW5kZXgrKztcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gKGNvdW50ID4gMCk7XG5cbiAgICAgIGZpbmFsQXJndW1lbnRzID0gY2FsbGJhY2tBcmd1bWVudHM7IC8vL1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLmNhbGxiYWNrQXJndW1lbnRzLCAoc3VjY2VzcywgLi4uaW50ZXJtZWRpYXRlQXJndW1lbnRzKSA9PiB7XG4gICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgZmluYWxBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICAgIH1cblxuICAgICAgY291bnQrKztcblxuICAgICAgY29uc3QgY2FsbGJhY2tBcmd1bWVudHMgPSBpbnRlcm1lZGlhdGVBcmd1bWVudHM7IC8vL1xuXG4gICAgICByZXR1cm4gbmV4dCguLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBjYWxsYmFja0FyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gIHJldHVybiBuZXh0KC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzeW5jaHJvbm91c0V2ZXJ5KGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBjb250aW51YXRpb24gPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgbGV0IGluZGV4ID0gLTE7XG5cbiAgbGV0IGZpbmFsQXJndW1lbnRzO1xuXG4gIGZ1bmN0aW9uIG5leHQoLi4uY2FsbGJhY2tBcmd1bWVudHMpIHtcbiAgICBpbmRleCsrO1xuXG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSB0cnVlO1xuXG4gICAgICBmaW5hbEFyZ3VtZW50cyA9IGNhbGxiYWNrQXJndW1lbnRzOyAvLy9cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5jYWxsYmFja0FyZ3VtZW50cywgKHN1Y2Nlc3MsIC4uLmludGVybWVkaWF0ZUFyZ3VtZW50cykgPT4ge1xuICAgICAgaWYgKCFzdWNjZXNzKSB7XG4gICAgICAgIGZpbmFsQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgLy8vXG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhbGxiYWNrQXJndW1lbnRzID0gaW50ZXJtZWRpYXRlQXJndW1lbnRzOyAvLy9cblxuICAgICAgcmV0dXJuIG5leHQoLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgY2FsbGJhY2tBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICByZXR1cm4gbmV4dCguLi5jYWxsYmFja0FyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3luY2hyb25vdXNSZWR1Y2UoYXJyYXksIGluaXRpYWxWYWx1ZSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGxldCBpbmRleCA9IC0xO1xuXG4gIGxldCBmaW5hbEFyZ3VtZW50cztcblxuICBmdW5jdGlvbiBuZXh0KHZhbHVlLCAuLi5jYWxsYmFja0FyZ3VtZW50cykge1xuICAgIGluZGV4Kys7XG5cbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgZmluYWxBcmd1bWVudHMgPSBjYWxsYmFja0FyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odmFsdWUsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIHZhbHVlLCAuLi5jYWxsYmFja0FyZ3VtZW50cywgKHZhbHVlLCAuLi5pbnRlcm1lZGlhdGVBcmd1bWVudHMpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrQXJndW1lbnRzID0gaW50ZXJtZWRpYXRlQXJndW1lbnRzOyAvLy9cblxuICAgICAgcmV0dXJuIG5leHQodmFsdWUsIC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IHZhbHVlID0gaW5pdGlhbFZhbHVlLCAvLy9cbiAgICAgICAgY2FsbGJhY2tBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICByZXR1cm4gbmV4dCh2YWx1ZSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXN5bmNocm9ub3VzRm9yRWFjaChhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGxldCBpbmRleCA9IC0xO1xuXG4gIGxldCBmaW5hbEFyZ3VtZW50cztcblxuICBmdW5jdGlvbiBuZXh0KC4uLmNhbGxiYWNrQXJndW1lbnRzKSB7XG4gICAgaW5kZXgrKztcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICBmaW5hbEFyZ3VtZW50cyA9IGNhbGxiYWNrQXJndW1lbnRzOyAvLy9cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbiguLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5jYWxsYmFja0FyZ3VtZW50cywgKC4uLmludGVybWVkaWF0ZUFyZ3VtZW50cykgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2tBcmd1bWVudHMgPSBpbnRlcm1lZGlhdGVBcmd1bWVudHM7IC8vL1xuXG4gICAgICByZXR1cm4gbmV4dCguLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBjYWxsYmFja0FyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gIHJldHVybiBuZXh0KC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzeW5jaHJvbm91c0ZvcndhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBsZXQgaW5kZXggPSAtMTtcblxuICBsZXQgZmluYWxBcmd1bWVudHM7XG5cbiAgZnVuY3Rpb24gbmV4dCguLi5jYWxsYmFja0FyZ3VtZW50cykge1xuICAgIGluZGV4Kys7XG5cbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgY29uc3Qgc3VjY2VzcyA9IHRydWU7XG5cbiAgICAgIGZpbmFsQXJndW1lbnRzID0gY2FsbGJhY2tBcmd1bWVudHM7IC8vL1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLmNhbGxiYWNrQXJndW1lbnRzLCAoc3VjY2VzcywgLi4uaW50ZXJtZWRpYXRlQXJndW1lbnRzKSA9PiB7XG4gICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgZmluYWxBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2FsbGJhY2tBcmd1bWVudHMgPSBpbnRlcm1lZGlhdGVBcmd1bWVudHM7IC8vL1xuXG4gICAgICByZXR1cm4gbmV4dCguLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBjYWxsYmFja0FyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gIHJldHVybiBuZXh0KC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzeW5jaHJvbm91c0JhY2t3YXJkc0V2ZXJ5KGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBjb250aW51YXRpb24gPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgbGV0IGluZGV4ID0gbGVuZ3RoO1xuXG4gIGxldCBmaW5hbEFyZ3VtZW50cztcblxuICBmdW5jdGlvbiBuZXh0KC4uLmNhbGxiYWNrQXJndW1lbnRzKSB7XG4gICAgaW5kZXgtLTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSB0cnVlO1xuXG4gICAgICBmaW5hbEFyZ3VtZW50cyA9IGNhbGxiYWNrQXJndW1lbnRzOyAvLy9cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5jYWxsYmFja0FyZ3VtZW50cywgKHN1Y2Nlc3MsIC4uLmludGVybWVkaWF0ZUFyZ3VtZW50cykgPT4ge1xuICAgICAgaWYgKCFzdWNjZXNzKSB7XG4gICAgICAgIGZpbmFsQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgLy8vXG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhbGxiYWNrQXJndW1lbnRzID0gaW50ZXJtZWRpYXRlQXJndW1lbnRzOyAvLy9cblxuICAgICAgcmV0dXJuIG5leHQoLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgY2FsbGJhY2tBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICByZXR1cm4gbmV4dCguLi5jYWxsYmFja0FyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3luY2hyb25vdXNGb3J3YXJkc0ZvckVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGxldCBpbmRleCA9IC0xO1xuXG4gIGxldCBmaW5hbEFyZ3VtZW50cztcblxuICBmdW5jdGlvbiBuZXh0KC4uLmNhbGxiYWNrQXJndW1lbnRzKSB7XG4gICAgaW5kZXgrKztcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICBmaW5hbEFyZ3VtZW50cyA9IGNhbGxiYWNrQXJndW1lbnRzOyAvLy9cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbiguLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5jYWxsYmFja0FyZ3VtZW50cywgKC4uLmludGVybWVkaWF0ZUFyZ3VtZW50cykgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2tBcmd1bWVudHMgPSBpbnRlcm1lZGlhdGVBcmd1bWVudHM7IC8vL1xuXG4gICAgICByZXR1cm4gbmV4dCguLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBjYWxsYmFja0FyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gIHJldHVybiBuZXh0KC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzeW5jaHJvbm91c0JhY2t3YXJkc0ZvckVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBsZXQgaW5kZXggPSBsZW5ndGg7XG5cbiAgbGV0IGZpbmFsQXJndW1lbnRzO1xuXG4gIGZ1bmN0aW9uIG5leHQoLi4uY2FsbGJhY2tBcmd1bWVudHMpIHtcbiAgICBpbmRleC0tO1xuXG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgZmluYWxBcmd1bWVudHMgPSBjYWxsYmFja0FyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oLi4uZmluYWxBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4uY2FsbGJhY2tBcmd1bWVudHMsICguLi5pbnRlcm1lZGlhdGVBcmd1bWVudHMpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrQXJndW1lbnRzID0gaW50ZXJtZWRpYXRlQXJndW1lbnRzOyAvLy9cblxuICAgICAgcmV0dXJuIG5leHQoLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgY2FsbGJhY2tBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICByZXR1cm4gbmV4dCguLi5jYWxsYmFja0FyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3luY2hyb25vdXNGaWx0ZXIoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBjb25zdCBkZWxldGVkRWxlbWVudHMgPSBbXTtcblxuICBsZXQgaW5kZXggPSBsZW5ndGg7XG5cbiAgbGV0IGZpbmFsQXJndW1lbnRzO1xuXG4gIGZ1bmN0aW9uIG5leHQoLi4uY2FsbGJhY2tBcmd1bWVudHMpIHtcbiAgICBpbmRleC0tO1xuXG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgZmluYWxBcmd1bWVudHMgPSBjYWxsYmFja0FyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oZGVsZXRlZEVsZW1lbnRzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5jYWxsYmFja0FyZ3VtZW50cywgKHBhc3NlZCwgLi4uaW50ZXJtZWRpYXRlQXJndW1lbnRzKSA9PiB7XG4gICAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gaW5kZXgsIC8vL1xuICAgICAgICAgICAgICBkZWxldGVDb3VudCA9IDEsXG4gICAgICAgICAgICAgIGRlbGV0ZWRFbGVtZW50ID0gZWxlbWVudDsgLy8vXG5cbiAgICAgICAgYXJyYXkuc3BsaWNlKHN0YXJ0SW5kZXgsIGRlbGV0ZUNvdW50KTtcblxuICAgICAgICBkZWxldGVkRWxlbWVudHMudW5zaGlmdChkZWxldGVkRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhbGxiYWNrQXJndW1lbnRzID0gaW50ZXJtZWRpYXRlQXJndW1lbnRzOyAvLy9cblxuICAgICAgcmV0dXJuIG5leHQoLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgY2FsbGJhY2tBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICByZXR1cm4gbmV4dCguLi5jYWxsYmFja0FyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3luY2hyb25vdXNQcnVuZShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGxldCBkZWxldGVkRWxlbWVudDtcblxuICBsZXQgaW5kZXggPSAtMTtcblxuICBsZXQgZmluYWxBcmd1bWVudHM7XG5cbiAgZnVuY3Rpb24gbmV4dCguLi5jYWxsYmFja0FyZ3VtZW50cykge1xuICAgIGluZGV4Kys7XG5cbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgZGVsZXRlZEVsZW1lbnQgPSB1bmRlZmluZWQ7XG5cbiAgICAgIGZpbmFsQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oZGVsZXRlZEVsZW1lbnQsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLmNhbGxiYWNrQXJndW1lbnRzLCAocGFzc2VkLCAuLi5pbnRlcm1lZGlhdGVBcmd1bWVudHMpID0+IHtcbiAgICAgIGlmICghcGFzc2VkKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBpbmRleCwgLy8vXG4gICAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMSxcbiAgICAgICAgICAgICAgZGVsZXRlZEVsZW1lbnQgPSBlbGVtZW50OyAvLy9cblxuICAgICAgICBhcnJheS5zcGxpY2Uoc3RhcnRJbmRleCwgZGVsZXRlQ291bnQpO1xuXG4gICAgICAgIGZpbmFsQXJndW1lbnRzID0gaW50ZXJtZWRpYXRlQXJndW1lbnRzOyAvLy9cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGRlbGV0ZWRFbGVtZW50LCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhbGxiYWNrQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBuZXh0KC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IGNhbGxiYWNrQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgLy8vXG5cbiAgcmV0dXJuIG5leHQoLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXN5bmNocm9ub3VzRXh0cmFjdChhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGxldCBkZWxldGVkRWxlbWVudDtcblxuICBsZXQgaW5kZXggPSAtMTtcblxuICBsZXQgZmluYWxBcmd1bWVudHM7XG5cbiAgZnVuY3Rpb24gbmV4dCguLi5jYWxsYmFja0FyZ3VtZW50cykge1xuICAgIGluZGV4Kys7XG5cbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgZGVsZXRlZEVsZW1lbnQgPSB1bmRlZmluZWQ7XG5cbiAgICAgIGZpbmFsQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oZGVsZXRlZEVsZW1lbnQsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLmNhbGxiYWNrQXJndW1lbnRzLCAocGFzc2VkLCAuLi5pbnRlcm1lZGlhdGVBcmd1bWVudHMpID0+IHtcbiAgICAgIGlmIChwYXNzZWQpIHtcbiAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IGluZGV4LCAvLy9cbiAgICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxLFxuICAgICAgICAgICAgICBkZWxldGVkRWxlbWVudCA9IGVsZW1lbnQ7IC8vL1xuXG4gICAgICAgIGFycmF5LnNwbGljZShzdGFydEluZGV4LCBkZWxldGVDb3VudCk7XG5cbiAgICAgICAgZmluYWxBcmd1bWVudHMgPSBpbnRlcm1lZGlhdGVBcmd1bWVudHM7IC8vL1xuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oZGVsZXRlZEVsZW1lbnQsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2FsbGJhY2tBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICAgICAgcmV0dXJuIG5leHQoLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgY2FsbGJhY2tBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICByZXR1cm4gbmV4dCguLi5jYWxsYmFja0FyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3luY2hyb25vdXNNYXRjaChhcnJheUEsIGFycmF5QiwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKTtcblxuICBjb25zdCBhcnJheUFMZW5ndGggPSBhcnJheUEubGVuZ3RoLFxuICAgICAgICBhcnJheUJMZW5ndGggPSBhcnJheUIubGVuZ3RoO1xuXG4gIGxldCBmaW5hbEFyZ3VtZW50cztcblxuICBpZiAoYXJyYXlBTGVuZ3RoICE9PSBhcnJheUJMZW5ndGgpIHtcbiAgICBjb25zdCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICBmaW5hbEFyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gIH1cblxuICBjb25zdCBsZW5ndGggPSBhcnJheUFMZW5ndGg7ICAvLy9cblxuICBsZXQgaW5kZXggPSAtMTtcblxuICBmdW5jdGlvbiBuZXh0KC4uLmNhbGxiYWNrQXJndW1lbnRzKSB7XG4gICAgaW5kZXgrKztcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gdHJ1ZTtcblxuICAgICAgZmluYWxBcmd1bWVudHMgPSBjYWxsYmFja0FyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2VzcywgLi4uZmluYWxBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnRBID0gYXJyYXlBW2luZGV4XSxcbiAgICAgICAgICBlbGVtZW50QiA9IGFycmF5QltpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudEEsIGVsZW1lbnRCLCAuLi5jYWxsYmFja0FyZ3VtZW50cywgKHN1Y2Nlc3MsIC4uLmludGVybWVkaWF0ZUFyZ3VtZW50cykgPT4ge1xuICAgICAgaWYgKCFzdWNjZXNzKSB7XG4gICAgICAgIGZpbmFsQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgLy8vXG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhbGxiYWNrQXJndW1lbnRzID0gaW50ZXJtZWRpYXRlQXJndW1lbnRzOyAvLy9cblxuICAgICAgcmV0dXJuIG5leHQoLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgY2FsbGJhY2tBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICByZXR1cm4gbmV4dCguLi5jYWxsYmFja0FyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3luY2hyb25vdXNSZXNvbHZlKGFycmF5QSwgYXJyYXlCLCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBhcnJheUEgPSBbICAvLy9cbiAgICAuLi5hcnJheUFcbiAgXTtcblxuICBjb25zdCBjb250aW51YXRpb24gPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpO1xuXG4gIGxldCBmaW5hbEFyZ3VtZW50cztcblxuICBmdW5jdGlvbiBuZXh0UGFzcyguLi5jYWxsYmFja0FyZ3VtZW50cykge1xuICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICBjb25zdCBsZW5ndGggPSBhcnJheUEubGVuZ3RoOyAvLy9cblxuICAgIGlmIChsZW5ndGggPT09IDApIHtcbiAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuXG4gICAgICBmaW5hbEFyZ3VtZW50cyA9IGNhbGxiYWNrQXJndW1lbnRzOyAvLy9cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgbGV0IGluZGV4ID0gLTE7XG5cbiAgICBmdW5jdGlvbiBuZXh0RWxlbWVudCguLi5jYWxsYmFja0FyZ3VtZW50cykge1xuICAgICAgaW5kZXgrKztcblxuICAgICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgICAgaWYgKCFzdWNjZXNzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgICAgY29uc3QgZmluYWxBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2VzcywgLi4uZmluYWxBcmd1bWVudHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyYXlGaWx0ZXIoYXJyYXlBLCAoZWxlbWVudEEpID0+IHtcbiAgICAgICAgICBjb25zdCBhcnJheUJJbmNsdWRlc0VsZW1lbnRBID0gYXJyYXlCLmluY2x1ZGVzKGVsZW1lbnRBKTtcblxuICAgICAgICAgIGlmICghYXJyYXlCSW5jbHVkZXNFbGVtZW50QSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gbmV4dFBhc3MoLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZWxlbWVudEEgPSBhcnJheUFbaW5kZXhdO1xuXG4gICAgICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50QSwgLi4uY2FsbGJhY2tBcmd1bWVudHMsIChwYXNzZWQsIC4uLmludGVybWVkaWF0ZUFyZ3VtZW50cykgPT4ge1xuICAgICAgICAgIGlmIChwYXNzZWQpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrQXJndW1lbnRzID0gaW50ZXJtZWRpYXRlQXJndW1lbnRzOyAgLy8vXG5cbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRCID0gZWxlbWVudEE7ICAvLy9cblxuICAgICAgICAgICAgYXJyYXlCLnB1c2goZWxlbWVudEIpO1xuXG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbmV4dEVsZW1lbnQoLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dEVsZW1lbnQoLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICB9XG5cbiAgY29uc3QgY2FsbGJhY2tBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICByZXR1cm4gbmV4dFBhc3MoLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXN5bmNocm9ub3VzQWxsKGNhbGxiYWNrcywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICByZXR1cm4gYXN5bmNocm9ub3VzRXZlcnkoY2FsbGJhY2tzLCAoY2FsbGJhY2ssIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgfSwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3luY2hyb25vdXNFeGlzdHMoY2FsbGJhY2tzLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIHJldHVybiBhc3luY2hyb25vdXNTb21lKGNhbGxiYWNrcywgKGNhbGxiYWNrLCAuLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgIHJldHVybiBjYWxsYmFjayguLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gIH0sIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGFzeW5jaHJvbm91c09uZSxcbiAgYXN5bmNocm9ub3VzU29tZSxcbiAgYXN5bmNocm9ub3VzRWFjaCxcbiAgYXN5bmNocm9ub3VzRXZlcnksXG4gIGFzeW5jaHJvbm91c1JlZHVjZSxcbiAgYXN5bmNocm9ub3VzRm9yRWFjaCxcbiAgYXN5bmNocm9ub3VzRm9yd2FyZHNFdmVyeSxcbiAgYXN5bmNocm9ub3VzQmFja3dhcmRzRXZlcnksXG4gIGFzeW5jaHJvbm91c0ZvcndhcmRzRm9yRWFjaCxcbiAgYXN5bmNocm9ub3VzQmFja3dhcmRzRm9yRWFjaCxcbiAgYXN5bmNocm9ub3VzRmlsdGVyLFxuICBhc3luY2hyb25vdXNQcnVuZSxcbiAgYXN5bmNocm9ub3VzRXh0cmFjdCxcbiAgYXN5bmNocm9ub3VzTWF0Y2gsXG4gIGFzeW5jaHJvbm91c1Jlc29sdmUsXG4gIGFzeW5jaHJvbm91c0FsbCxcbiAgYXN5bmNocm9ub3VzRXhpc3RzXG59O1xuIl0sIm5hbWVzIjpbImFzeW5jaHJvbm91c0FsbCIsImFzeW5jaHJvbm91c0JhY2t3YXJkc0V2ZXJ5IiwiYXN5bmNocm9ub3VzQmFja3dhcmRzRm9yRWFjaCIsImFzeW5jaHJvbm91c0VhY2giLCJhc3luY2hyb25vdXNFdmVyeSIsImFzeW5jaHJvbm91c0V4aXN0cyIsImFzeW5jaHJvbm91c0V4dHJhY3QiLCJhc3luY2hyb25vdXNGaWx0ZXIiLCJhc3luY2hyb25vdXNGb3JFYWNoIiwiYXN5bmNocm9ub3VzRm9yd2FyZHNFdmVyeSIsImFzeW5jaHJvbm91c0ZvcndhcmRzRm9yRWFjaCIsImFzeW5jaHJvbm91c01hdGNoIiwiYXN5bmNocm9ub3VzT25lIiwiYXN5bmNocm9ub3VzUHJ1bmUiLCJhc3luY2hyb25vdXNSZWR1Y2UiLCJhc3luY2hyb25vdXNSZXNvbHZlIiwiYXN5bmNocm9ub3VzU29tZSIsImZpbHRlciIsImFycmF5RmlsdGVyIiwiYXJyYXlVdGlsaXRpZXMiLCJhcnJheSIsImNhbGxiYWNrIiwiaW5pdGlhbEFyZ3VtZW50cyIsImNvbnRpbnVhdGlvbiIsInBvcCIsImxlbmd0aCIsImNvdW50IiwiaW5kZXgiLCJmaW5hbEFyZ3VtZW50cyIsIm5leHQiLCJjYWxsYmFja0FyZ3VtZW50cyIsInN1Y2Nlc3MiLCJlbGVtZW50IiwiaW50ZXJtZWRpYXRlQXJndW1lbnRzIiwiaW5pdGlhbFZhbHVlIiwidmFsdWUiLCJkZWxldGVkRWxlbWVudHMiLCJwYXNzZWQiLCJzdGFydEluZGV4IiwiZGVsZXRlQ291bnQiLCJkZWxldGVkRWxlbWVudCIsInNwbGljZSIsInVuc2hpZnQiLCJ1bmRlZmluZWQiLCJhcnJheUEiLCJhcnJheUIiLCJhcnJheUFMZW5ndGgiLCJhcnJheUJMZW5ndGgiLCJlbGVtZW50QSIsImVsZW1lbnRCIiwibmV4dFBhc3MiLCJuZXh0RWxlbWVudCIsImFycmF5QkluY2x1ZGVzRWxlbWVudEEiLCJpbmNsdWRlcyIsInB1c2giLCJjYWxsYmFja3MiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQWdvQmdCQTtlQUFBQTs7UUExV0FDO2VBQUFBOztRQXNFQUM7ZUFBQUE7O1FBN1BBQztlQUFBQTs7UUEwQ0FDO2VBQUFBOztRQTZmQUM7ZUFBQUE7O1FBakxBQztlQUFBQTs7UUExRkFDO2VBQUFBOztRQTNLQUM7ZUFBQUE7O1FBK0JBQztlQUFBQTs7UUE4RUFDO2VBQUFBOztRQXVNQUM7ZUFBQUE7O1FBOWZBQztlQUFBQTs7UUFnYUFDO2VBQUFBOztRQXRQQUM7ZUFBQUE7O1FBd1lBQztlQUFBQTs7UUFoZ0JBQztlQUFBQTs7UUFvbEJoQjtlQUFBOzs7MkJBMW9CK0I7QUFFL0IsTUFBTSxFQUFFQyxRQUFRQyxXQUFXLEVBQUUsR0FBR0MseUJBQWM7QUFFdkMsU0FBU1AsZ0JBQWdCUSxLQUFLLEVBQUVDLFFBQVEsRUFBRSxHQUFHQyxnQkFBZ0I7SUFDbEUsTUFBTUMsZUFBZUQsaUJBQWlCRSxHQUFHLElBQ25DQyxTQUFTTCxNQUFNSyxNQUFNO0lBRTNCLElBQUlDLFFBQVEsR0FDUkMsUUFBUSxDQUFDO0lBRWIsSUFBSUM7SUFFSixTQUFTQyxLQUFLLEdBQUdDLGlCQUFpQjtRQUNoQ0g7UUFFQSxJQUFJQSxVQUFVRixRQUFRO1lBQ3BCLE1BQU1NLFVBQVdMLFVBQVU7WUFFM0IsSUFBSSxDQUFDSyxTQUFTO2dCQUNaSCxpQkFBaUJOLGtCQUFrQixHQUFHO1lBQ3hDO1lBRUEsT0FBT0MsYUFBYVEsWUFBWUg7UUFDbEM7UUFFQSxNQUFNSSxVQUFVWixLQUFLLENBQUNPLE1BQU07UUFFNUIsT0FBT04sU0FBU1csWUFBWUYsbUJBQW1CLENBQUNDLFNBQVMsR0FBR0U7WUFDMUQsSUFBSUYsU0FBUztnQkFDWCxJQUFJTCxVQUFVLEdBQUc7b0JBQ2YsTUFBTUssVUFBVTtvQkFFaEJILGlCQUFpQk4sa0JBQWtCLEdBQUc7b0JBRXRDLE9BQU9DLGFBQWFRLFlBQVlIO2dCQUNsQztnQkFFQUEsaUJBQWlCSyx1QkFBdUIsR0FBRztnQkFFM0NQO1lBQ0Y7WUFFQSxNQUFNSSxvQkFBb0JSLGtCQUFrQixHQUFHO1lBRS9DLE9BQU9PLFFBQVFDO1FBQ2pCO0lBQ0Y7SUFFQSxNQUFNQSxvQkFBb0JSLGtCQUFrQixHQUFHO0lBRS9DLE9BQU9PLFFBQVFDO0FBQ2pCO0FBRU8sU0FBU2QsaUJBQWlCSSxLQUFLLEVBQUVDLFFBQVEsRUFBRSxHQUFHQyxnQkFBZ0I7SUFDbkUsTUFBTUMsZUFBZUQsaUJBQWlCRSxHQUFHLElBQ25DQyxTQUFTTCxNQUFNSyxNQUFNO0lBRTNCLElBQUlFLFFBQVEsQ0FBQztJQUViLElBQUlDO0lBRUosU0FBU0MsS0FBSyxHQUFHQyxpQkFBaUI7UUFDaENIO1FBRUEsSUFBSUEsVUFBVUYsUUFBUTtZQUNwQixNQUFNTSxVQUFVO1lBRWhCSCxpQkFBaUJOLGtCQUFrQixHQUFHO1lBRXRDLE9BQU9DLGFBQWFRLFlBQVlIO1FBQ2xDO1FBRUEsTUFBTUksVUFBVVosS0FBSyxDQUFDTyxNQUFNO1FBRTVCLE9BQU9OLFNBQVNXLFlBQVlGLG1CQUFtQixDQUFDQyxTQUFTLEdBQUdFO1lBQzFELElBQUlGLFNBQVM7Z0JBQ1hILGlCQUFpQkssdUJBQXVCLEdBQUc7Z0JBRTNDLE9BQU9WLGFBQWFRLFlBQVlIO1lBQ2xDO1lBRUEsTUFBTUUsb0JBQW9CUixrQkFBa0IsR0FBRztZQUUvQyxPQUFPTyxRQUFRQztRQUNqQjtJQUNGO0lBRUEsTUFBTUEsb0JBQW9CUixrQkFBa0IsR0FBRztJQUUvQyxPQUFPTyxRQUFRQztBQUNqQjtBQUVPLFNBQVMzQixpQkFBaUJpQixLQUFLLEVBQUVDLFFBQVEsRUFBRSxHQUFHQyxnQkFBZ0I7SUFDbkUsTUFBTUMsZUFBZUQsaUJBQWlCRSxHQUFHLElBQ25DQyxTQUFTTCxNQUFNSyxNQUFNO0lBRTNCLElBQUlDLFFBQVEsR0FDUkMsUUFBUSxDQUFDO0lBRWIsSUFBSUM7SUFFSixTQUFTQyxLQUFLLEdBQUdDLGlCQUFpQjtRQUNoQ0g7UUFFQSxJQUFJQSxVQUFVRixRQUFRO1lBQ3BCLE1BQU1NLFVBQVdMLFFBQVE7WUFFekJFLGlCQUFpQkUsbUJBQW1CLEdBQUc7WUFFdkMsT0FBT1AsYUFBYVEsWUFBWUg7UUFDbEM7UUFFQSxNQUFNSSxVQUFVWixLQUFLLENBQUNPLE1BQU07UUFFNUIsT0FBT04sU0FBU1csWUFBWUYsbUJBQW1CLENBQUNDLFNBQVMsR0FBR0U7WUFDMUQsSUFBSSxDQUFDRixTQUFTO2dCQUNaSCxpQkFBaUJOLGtCQUFrQixHQUFHO2dCQUV0QyxPQUFPQyxhQUFhUSxZQUFZSDtZQUNsQztZQUVBRjtZQUVBLE1BQU1JLG9CQUFvQkcsdUJBQXVCLEdBQUc7WUFFcEQsT0FBT0osUUFBUUM7UUFDakI7SUFDRjtJQUVBLE1BQU1BLG9CQUFvQlIsa0JBQWtCLEdBQUc7SUFFL0MsT0FBT08sUUFBUUM7QUFDakI7QUFFTyxTQUFTMUIsa0JBQWtCZ0IsS0FBSyxFQUFFQyxRQUFRLEVBQUUsR0FBR0MsZ0JBQWdCO0lBQ3BFLE1BQU1DLGVBQWVELGlCQUFpQkUsR0FBRyxJQUNuQ0MsU0FBU0wsTUFBTUssTUFBTTtJQUUzQixJQUFJRSxRQUFRLENBQUM7SUFFYixJQUFJQztJQUVKLFNBQVNDLEtBQUssR0FBR0MsaUJBQWlCO1FBQ2hDSDtRQUVBLElBQUlBLFVBQVVGLFFBQVE7WUFDcEIsTUFBTU0sVUFBVTtZQUVoQkgsaUJBQWlCRSxtQkFBbUIsR0FBRztZQUV2QyxPQUFPUCxhQUFhUSxZQUFZSDtRQUNsQztRQUVBLE1BQU1JLFVBQVVaLEtBQUssQ0FBQ08sTUFBTTtRQUU1QixPQUFPTixTQUFTVyxZQUFZRixtQkFBbUIsQ0FBQ0MsU0FBUyxHQUFHRTtZQUMxRCxJQUFJLENBQUNGLFNBQVM7Z0JBQ1pILGlCQUFpQk4sa0JBQWtCLEdBQUc7Z0JBRXRDLE9BQU9DLGFBQWFRLFlBQVlIO1lBQ2xDO1lBRUEsTUFBTUUsb0JBQW9CRyx1QkFBdUIsR0FBRztZQUVwRCxPQUFPSixRQUFRQztRQUNqQjtJQUNGO0lBRUEsTUFBTUEsb0JBQW9CUixrQkFBa0IsR0FBRztJQUUvQyxPQUFPTyxRQUFRQztBQUNqQjtBQUVPLFNBQVNoQixtQkFBbUJNLEtBQUssRUFBRWMsWUFBWSxFQUFFYixRQUFRLEVBQUUsR0FBR0MsZ0JBQWdCO0lBQ25GLE1BQU1DLGVBQWVELGlCQUFpQkUsR0FBRyxJQUNuQ0MsU0FBU0wsTUFBTUssTUFBTTtJQUUzQixJQUFJRSxRQUFRLENBQUM7SUFFYixJQUFJQztJQUVKLFNBQVNDLEtBQUtNLEtBQUssRUFBRSxHQUFHTCxpQkFBaUI7UUFDdkNIO1FBRUEsSUFBSUEsVUFBVUYsUUFBUTtZQUNwQkcsaUJBQWlCRSxtQkFBbUIsR0FBRztZQUV2QyxPQUFPUCxhQUFhWSxVQUFVUDtRQUNoQztRQUVBLE1BQU1JLFVBQVVaLEtBQUssQ0FBQ08sTUFBTTtRQUU1QixPQUFPTixTQUFTVyxTQUFTRyxVQUFVTCxtQkFBbUIsQ0FBQ0ssT0FBTyxHQUFHRjtZQUMvRCxNQUFNSCxvQkFBb0JHLHVCQUF1QixHQUFHO1lBRXBELE9BQU9KLEtBQUtNLFVBQVVMO1FBQ3hCO0lBQ0Y7SUFFQSxNQUFNSyxRQUFRRCxjQUNSSixvQkFBb0JSLGtCQUFrQixHQUFHO0lBRS9DLE9BQU9PLEtBQUtNLFVBQVVMO0FBQ3hCO0FBRU8sU0FBU3RCLG9CQUFvQlksS0FBSyxFQUFFQyxRQUFRLEVBQUUsR0FBR0MsZ0JBQWdCO0lBQ3RFLE1BQU1DLGVBQWVELGlCQUFpQkUsR0FBRyxJQUNuQ0MsU0FBU0wsTUFBTUssTUFBTTtJQUUzQixJQUFJRSxRQUFRLENBQUM7SUFFYixJQUFJQztJQUVKLFNBQVNDLEtBQUssR0FBR0MsaUJBQWlCO1FBQ2hDSDtRQUVBLElBQUlBLFVBQVVGLFFBQVE7WUFDcEJHLGlCQUFpQkUsbUJBQW1CLEdBQUc7WUFFdkMsT0FBT1AsZ0JBQWdCSztRQUN6QjtRQUVBLE1BQU1JLFVBQVVaLEtBQUssQ0FBQ08sTUFBTTtRQUU1QixPQUFPTixTQUFTVyxZQUFZRixtQkFBbUIsQ0FBQyxHQUFHRztZQUNqRCxNQUFNSCxvQkFBb0JHLHVCQUF1QixHQUFHO1lBRXBELE9BQU9KLFFBQVFDO1FBQ2pCO0lBQ0Y7SUFFQSxNQUFNQSxvQkFBb0JSLGtCQUFrQixHQUFHO0lBRS9DLE9BQU9PLFFBQVFDO0FBQ2pCO0FBRU8sU0FBU3JCLDBCQUEwQlcsS0FBSyxFQUFFQyxRQUFRLEVBQUUsR0FBR0MsZ0JBQWdCO0lBQzVFLE1BQU1DLGVBQWVELGlCQUFpQkUsR0FBRyxJQUNuQ0MsU0FBU0wsTUFBTUssTUFBTTtJQUUzQixJQUFJRSxRQUFRLENBQUM7SUFFYixJQUFJQztJQUVKLFNBQVNDLEtBQUssR0FBR0MsaUJBQWlCO1FBQ2hDSDtRQUVBLElBQUlBLFVBQVVGLFFBQVE7WUFDcEIsTUFBTU0sVUFBVTtZQUVoQkgsaUJBQWlCRSxtQkFBbUIsR0FBRztZQUV2QyxPQUFPUCxhQUFhUSxZQUFZSDtRQUNsQztRQUVBLE1BQU1JLFVBQVVaLEtBQUssQ0FBQ08sTUFBTTtRQUU1QixPQUFPTixTQUFTVyxZQUFZRixtQkFBbUIsQ0FBQ0MsU0FBUyxHQUFHRTtZQUMxRCxJQUFJLENBQUNGLFNBQVM7Z0JBQ1pILGlCQUFpQk4sa0JBQWtCLEdBQUc7Z0JBRXRDLE9BQU9DLGFBQWFRLFlBQVlIO1lBQ2xDO1lBRUEsTUFBTUUsb0JBQW9CRyx1QkFBdUIsR0FBRztZQUVwRCxPQUFPSixRQUFRQztRQUNqQjtJQUNGO0lBRUEsTUFBTUEsb0JBQW9CUixrQkFBa0IsR0FBRztJQUUvQyxPQUFPTyxRQUFRQztBQUNqQjtBQUVPLFNBQVM3QiwyQkFBMkJtQixLQUFLLEVBQUVDLFFBQVEsRUFBRSxHQUFHQyxnQkFBZ0I7SUFDN0UsTUFBTUMsZUFBZUQsaUJBQWlCRSxHQUFHLElBQ25DQyxTQUFTTCxNQUFNSyxNQUFNO0lBRTNCLElBQUlFLFFBQVFGO0lBRVosSUFBSUc7SUFFSixTQUFTQyxLQUFLLEdBQUdDLGlCQUFpQjtRQUNoQ0g7UUFFQSxJQUFJQSxVQUFVLENBQUMsR0FBRztZQUNoQixNQUFNSSxVQUFVO1lBRWhCSCxpQkFBaUJFLG1CQUFtQixHQUFHO1lBRXZDLE9BQU9QLGFBQWFRLFlBQVlIO1FBQ2xDO1FBRUEsTUFBTUksVUFBVVosS0FBSyxDQUFDTyxNQUFNO1FBRTVCLE9BQU9OLFNBQVNXLFlBQVlGLG1CQUFtQixDQUFDQyxTQUFTLEdBQUdFO1lBQzFELElBQUksQ0FBQ0YsU0FBUztnQkFDWkgsaUJBQWlCTixrQkFBa0IsR0FBRztnQkFFdEMsT0FBT0MsYUFBYVEsWUFBWUg7WUFDbEM7WUFFQSxNQUFNRSxvQkFBb0JHLHVCQUF1QixHQUFHO1lBRXBELE9BQU9KLFFBQVFDO1FBQ2pCO0lBQ0Y7SUFFQSxNQUFNQSxvQkFBb0JSLGtCQUFrQixHQUFHO0lBRS9DLE9BQU9PLFFBQVFDO0FBQ2pCO0FBRU8sU0FBU3BCLDRCQUE0QlUsS0FBSyxFQUFFQyxRQUFRLEVBQUUsR0FBR0MsZ0JBQWdCO0lBQzlFLE1BQU1DLGVBQWVELGlCQUFpQkUsR0FBRyxJQUN2Q0MsU0FBU0wsTUFBTUssTUFBTTtJQUV2QixJQUFJRSxRQUFRLENBQUM7SUFFYixJQUFJQztJQUVKLFNBQVNDLEtBQUssR0FBR0MsaUJBQWlCO1FBQ2hDSDtRQUVBLElBQUlBLFVBQVVGLFFBQVE7WUFDcEJHLGlCQUFpQkUsbUJBQW1CLEdBQUc7WUFFdkMsT0FBT1AsZ0JBQWdCSztRQUN6QjtRQUVBLE1BQU1JLFVBQVVaLEtBQUssQ0FBQ08sTUFBTTtRQUU1QixPQUFPTixTQUFTVyxZQUFZRixtQkFBbUIsQ0FBQyxHQUFHRztZQUNqRCxNQUFNSCxvQkFBb0JHLHVCQUF1QixHQUFHO1lBRXBELE9BQU9KLFFBQVFDO1FBQ2pCO0lBQ0Y7SUFFQSxNQUFNQSxvQkFBb0JSLGtCQUFrQixHQUFHO0lBRS9DLE9BQU9PLFFBQVFDO0FBQ2pCO0FBRU8sU0FBUzVCLDZCQUE2QmtCLEtBQUssRUFBRUMsUUFBUSxFQUFFLEdBQUdDLGdCQUFnQjtJQUMvRSxNQUFNQyxlQUFlRCxpQkFBaUJFLEdBQUcsSUFDbkNDLFNBQVNMLE1BQU1LLE1BQU07SUFFM0IsSUFBSUUsUUFBUUY7SUFFWixJQUFJRztJQUVKLFNBQVNDLEtBQUssR0FBR0MsaUJBQWlCO1FBQ2hDSDtRQUVBLElBQUlBLFVBQVUsQ0FBQyxHQUFHO1lBQ2hCQyxpQkFBaUJFLG1CQUFtQixHQUFHO1lBRXZDLE9BQU9QLGdCQUFnQks7UUFDekI7UUFFQSxNQUFNSSxVQUFVWixLQUFLLENBQUNPLE1BQU07UUFFNUIsT0FBT04sU0FBU1csWUFBWUYsbUJBQW1CLENBQUMsR0FBR0c7WUFDakQsTUFBTUgsb0JBQW9CRyx1QkFBdUIsR0FBRztZQUVwRCxPQUFPSixRQUFRQztRQUNqQjtJQUNGO0lBRUEsTUFBTUEsb0JBQW9CUixrQkFBa0IsR0FBRztJQUUvQyxPQUFPTyxRQUFRQztBQUNqQjtBQUVPLFNBQVN2QixtQkFBbUJhLEtBQUssRUFBRUMsUUFBUSxFQUFFLEdBQUdDLGdCQUFnQjtJQUNyRSxNQUFNQyxlQUFlRCxpQkFBaUJFLEdBQUcsSUFDbkNDLFNBQVNMLE1BQU1LLE1BQU07SUFFM0IsTUFBTVcsa0JBQWtCLEVBQUU7SUFFMUIsSUFBSVQsUUFBUUY7SUFFWixJQUFJRztJQUVKLFNBQVNDLEtBQUssR0FBR0MsaUJBQWlCO1FBQ2hDSDtRQUVBLElBQUlBLFVBQVUsQ0FBQyxHQUFHO1lBQ2hCQyxpQkFBaUJFLG1CQUFtQixHQUFHO1lBRXZDLE9BQU9QLGFBQWFhLG9CQUFvQlI7UUFDMUM7UUFFQSxNQUFNSSxVQUFVWixLQUFLLENBQUNPLE1BQU07UUFFNUIsT0FBT04sU0FBU1csWUFBWUYsbUJBQW1CLENBQUNPLFFBQVEsR0FBR0o7WUFDekQsSUFBSSxDQUFDSSxRQUFRO2dCQUNYLE1BQU1DLGFBQWFYLE9BQ2JZLGNBQWMsR0FDZEMsaUJBQWlCUixTQUFTLEdBQUc7Z0JBRW5DWixNQUFNcUIsTUFBTSxDQUFDSCxZQUFZQztnQkFFekJILGdCQUFnQk0sT0FBTyxDQUFDRjtZQUMxQjtZQUVBLE1BQU1WLG9CQUFvQkcsdUJBQXVCLEdBQUc7WUFFcEQsT0FBT0osUUFBUUM7UUFDakI7SUFDRjtJQUVBLE1BQU1BLG9CQUFvQlIsa0JBQWtCLEdBQUc7SUFFL0MsT0FBT08sUUFBUUM7QUFDakI7QUFFTyxTQUFTakIsa0JBQWtCTyxLQUFLLEVBQUVDLFFBQVEsRUFBRSxHQUFHQyxnQkFBZ0I7SUFDcEUsTUFBTUMsZUFBZUQsaUJBQWlCRSxHQUFHLElBQ25DQyxTQUFTTCxNQUFNSyxNQUFNO0lBRTNCLElBQUllO0lBRUosSUFBSWIsUUFBUSxDQUFDO0lBRWIsSUFBSUM7SUFFSixTQUFTQyxLQUFLLEdBQUdDLGlCQUFpQjtRQUNoQ0g7UUFFQSxJQUFJQSxVQUFVRixRQUFRO1lBQ3BCZSxpQkFBaUJHO1lBRWpCZixpQkFBaUJOLGtCQUFrQixHQUFHO1lBRXRDLE9BQU9DLGFBQWFpQixtQkFBbUJaO1FBQ3pDO1FBRUEsTUFBTUksVUFBVVosS0FBSyxDQUFDTyxNQUFNO1FBRTVCLE9BQU9OLFNBQVNXLFlBQVlGLG1CQUFtQixDQUFDTyxRQUFRLEdBQUdKO1lBQ3pELElBQUksQ0FBQ0ksUUFBUTtnQkFDWCxNQUFNQyxhQUFhWCxPQUNiWSxjQUFjLEdBQ2RDLGlCQUFpQlIsU0FBUyxHQUFHO2dCQUVuQ1osTUFBTXFCLE1BQU0sQ0FBQ0gsWUFBWUM7Z0JBRXpCWCxpQkFBaUJLLHVCQUF1QixHQUFHO2dCQUUzQyxPQUFPVixhQUFhaUIsbUJBQW1CWjtZQUN6QztZQUVBLE1BQU1FLG9CQUFvQlIsa0JBQWtCLEdBQUc7WUFFL0MsT0FBT08sUUFBUUM7UUFDakI7SUFDRjtJQUVBLE1BQU1BLG9CQUFvQlIsa0JBQWtCLEdBQUc7SUFFL0MsT0FBT08sUUFBUUM7QUFDakI7QUFFTyxTQUFTeEIsb0JBQW9CYyxLQUFLLEVBQUVDLFFBQVEsRUFBRSxHQUFHQyxnQkFBZ0I7SUFDdEUsTUFBTUMsZUFBZUQsaUJBQWlCRSxHQUFHLElBQ25DQyxTQUFTTCxNQUFNSyxNQUFNO0lBRTNCLElBQUllO0lBRUosSUFBSWIsUUFBUSxDQUFDO0lBRWIsSUFBSUM7SUFFSixTQUFTQyxLQUFLLEdBQUdDLGlCQUFpQjtRQUNoQ0g7UUFFQSxJQUFJQSxVQUFVRixRQUFRO1lBQ3BCZSxpQkFBaUJHO1lBRWpCZixpQkFBaUJOLGtCQUFrQixHQUFHO1lBRXRDLE9BQU9DLGFBQWFpQixtQkFBbUJaO1FBQ3pDO1FBRUEsTUFBTUksVUFBVVosS0FBSyxDQUFDTyxNQUFNO1FBRTVCLE9BQU9OLFNBQVNXLFlBQVlGLG1CQUFtQixDQUFDTyxRQUFRLEdBQUdKO1lBQ3pELElBQUlJLFFBQVE7Z0JBQ1YsTUFBTUMsYUFBYVgsT0FDYlksY0FBYyxHQUNkQyxpQkFBaUJSLFNBQVMsR0FBRztnQkFFbkNaLE1BQU1xQixNQUFNLENBQUNILFlBQVlDO2dCQUV6QlgsaUJBQWlCSyx1QkFBdUIsR0FBRztnQkFFM0MsT0FBT1YsYUFBYWlCLG1CQUFtQlo7WUFDekM7WUFFQSxNQUFNRSxvQkFBb0JSLGtCQUFrQixHQUFHO1lBRS9DLE9BQU9PLFFBQVFDO1FBQ2pCO0lBQ0Y7SUFFQSxNQUFNQSxvQkFBb0JSLGtCQUFrQixHQUFHO0lBRS9DLE9BQU9PLFFBQVFDO0FBQ2pCO0FBRU8sU0FBU25CLGtCQUFrQmlDLE1BQU0sRUFBRUMsTUFBTSxFQUFFeEIsUUFBUSxFQUFFLEdBQUdDLGdCQUFnQjtJQUM3RSxNQUFNQyxlQUFlRCxpQkFBaUJFLEdBQUc7SUFFekMsTUFBTXNCLGVBQWVGLE9BQU9uQixNQUFNLEVBQzVCc0IsZUFBZUYsT0FBT3BCLE1BQU07SUFFbEMsSUFBSUc7SUFFSixJQUFJa0IsaUJBQWlCQyxjQUFjO1FBQ2pDLE1BQU1oQixVQUFVO1FBRWhCSCxpQkFBaUJOLGtCQUFrQixHQUFHO1FBRXRDLE9BQU9DLGFBQWFRLFlBQVlIO0lBQ2xDO0lBRUEsTUFBTUgsU0FBU3FCLGNBQWUsR0FBRztJQUVqQyxJQUFJbkIsUUFBUSxDQUFDO0lBRWIsU0FBU0UsS0FBSyxHQUFHQyxpQkFBaUI7UUFDaENIO1FBRUEsSUFBSUEsVUFBVUYsUUFBUTtZQUNwQixNQUFNTSxVQUFVO1lBRWhCSCxpQkFBaUJFLG1CQUFtQixHQUFHO1lBRXZDLE9BQU9QLGFBQWFRLFlBQVlIO1FBQ2xDO1FBRUEsTUFBTW9CLFdBQVdKLE1BQU0sQ0FBQ2pCLE1BQU0sRUFDeEJzQixXQUFXSixNQUFNLENBQUNsQixNQUFNO1FBRTlCLE9BQU9OLFNBQVMyQixVQUFVQyxhQUFhbkIsbUJBQW1CLENBQUNDLFNBQVMsR0FBR0U7WUFDckUsSUFBSSxDQUFDRixTQUFTO2dCQUNaSCxpQkFBaUJOLGtCQUFrQixHQUFHO2dCQUV0QyxPQUFPQyxhQUFhUSxZQUFZSDtZQUNsQztZQUVBLE1BQU1FLG9CQUFvQkcsdUJBQXVCLEdBQUc7WUFFcEQsT0FBT0osUUFBUUM7UUFDakI7SUFDRjtJQUVBLE1BQU1BLG9CQUFvQlIsa0JBQWtCLEdBQUc7SUFFL0MsT0FBT08sUUFBUUM7QUFDakI7QUFFTyxTQUFTZixvQkFBb0I2QixNQUFNLEVBQUVDLE1BQU0sRUFBRXhCLFFBQVEsRUFBRSxHQUFHQyxnQkFBZ0I7SUFDL0VzQixTQUFTO1dBQ0pBO0tBQ0o7SUFFRCxNQUFNckIsZUFBZUQsaUJBQWlCRSxHQUFHO0lBRXpDLElBQUlJO0lBRUosU0FBU3NCLFNBQVMsR0FBR3BCLGlCQUFpQjtRQUNwQyxJQUFJQyxVQUFVO1FBRWQsTUFBTU4sU0FBU21CLE9BQU9uQixNQUFNLEVBQUUsR0FBRztRQUVqQyxJQUFJQSxXQUFXLEdBQUc7WUFDaEJNLFVBQVU7WUFFVkgsaUJBQWlCRSxtQkFBbUIsR0FBRztZQUV2QyxPQUFPUCxhQUFhUSxZQUFZSDtRQUNsQztRQUVBLElBQUlELFFBQVEsQ0FBQztRQUViLFNBQVN3QixZQUFZLEdBQUdyQixpQkFBaUI7WUFDdkNIO1lBRUEsSUFBSUEsVUFBVUYsUUFBUTtnQkFDcEIsSUFBSSxDQUFDTSxTQUFTO29CQUNaQSxVQUFVO29CQUVWLE1BQU1ILGlCQUFpQk4sa0JBQWtCLEdBQUc7b0JBRTVDLE9BQU9DLGFBQWFRLFlBQVlIO2dCQUNsQztnQkFFQVYsWUFBWTBCLFFBQVEsQ0FBQ0k7b0JBQ25CLE1BQU1JLHlCQUF5QlAsT0FBT1EsUUFBUSxDQUFDTDtvQkFFL0MsSUFBSSxDQUFDSSx3QkFBd0I7d0JBQzNCLE9BQU87b0JBQ1Q7Z0JBQ0Y7Z0JBRUEsT0FBT0YsWUFBWXBCO1lBQ3JCLE9BQU87Z0JBQ0wsTUFBTWtCLFdBQVdKLE1BQU0sQ0FBQ2pCLE1BQU07Z0JBRTlCLE9BQU9OLFNBQVMyQixhQUFhbEIsbUJBQW1CLENBQUNPLFFBQVEsR0FBR0o7b0JBQzFELElBQUlJLFFBQVE7d0JBQ1ZQLG9CQUFvQkcsdUJBQXdCLEdBQUc7d0JBRS9DLE1BQU1nQixXQUFXRCxVQUFXLEdBQUc7d0JBRS9CSCxPQUFPUyxJQUFJLENBQUNMO3dCQUVabEIsVUFBVTtvQkFDWjtvQkFFQSxPQUFPb0IsZUFBZXJCO2dCQUN4QjtZQUNGO1FBQ0Y7UUFFQSxPQUFPcUIsZUFBZXJCO0lBQ3hCO0lBRUEsTUFBTUEsb0JBQW9CUixrQkFBa0IsR0FBRztJQUUvQyxPQUFPNEIsWUFBWXBCO0FBQ3JCO0FBRU8sU0FBUzlCLGdCQUFnQnVELFNBQVMsRUFBRSxHQUFHakMsZ0JBQWdCO0lBQzVELE9BQU9sQixrQkFBa0JtRCxXQUFXLENBQUNsQyxVQUFVLEdBQUdTO1FBQ2hELE9BQU9ULFlBQVlTO0lBQ3JCLE1BQU1SO0FBQ1I7QUFFTyxTQUFTakIsbUJBQW1Ca0QsU0FBUyxFQUFFLEdBQUdqQyxnQkFBZ0I7SUFDL0QsT0FBT04saUJBQWlCdUMsV0FBVyxDQUFDbEMsVUFBVSxHQUFHUztRQUMvQyxPQUFPVCxZQUFZUztJQUNyQixNQUFNUjtBQUNSO01BRUEsV0FBZTtJQUNiVjtJQUNBSTtJQUNBYjtJQUNBQztJQUNBVTtJQUNBTjtJQUNBQztJQUNBUjtJQUNBUztJQUNBUjtJQUNBSztJQUNBTTtJQUNBUDtJQUNBSztJQUNBSTtJQUNBZjtJQUNBSztBQUNGIn0=
390
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvY29udGludWF0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuY29uc3QgeyBmaWx0ZXI6IGFycmF5RmlsdGVyIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIG9uZShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IDA7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gKGNvdW50ID09PSAxKSxcbiAgICAgICAgZmluYWxBcmd1ZW1udHMgPSBzdWNjZXNzID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0QXJndW1lbnRzIDogLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VlbW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5pbml0aWFsQXJndW1lbnRzLCAoc3VjY2VzcywgLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIGNvdW50Kys7XG5cbiAgICAgICAgaWYgKGNvdW50ID09PSAyKSB7XG4gICAgICAgICAgY29uc3Qgc3VjY2VzcyA9IGZhbHNlLFxuICAgICAgICAgICAgICAgIGZpbmFsQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgIC8vL1xuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCAuLi5uZXh0QXJndW1lbnRzKTtcbiAgICB9KTtcbiAgfVxuXG4gIGxldCBjb3VudCA9IDA7XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc29tZShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IDA7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCkge1xuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gZmFsc2UsXG4gICAgICAgICAgICBmaW5hbEFyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLmluaXRpYWxBcmd1bWVudHMsIChzdWNjZXNzLCAuLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc3QgZmluYWxBcmd1bWVudHMgPSBjYWxsYmFja0FyZ3VtZW50czsgLy9cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXh0KGluZGV4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSAwO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgY29uc3Qgc3VjY2VzcyA9IChjb3VudCAhPT0gMCksXG4gICAgICAgIGZpbmFsQXJndW1lbnRzID0gc3VjY2VzcyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEFyZ3VtZW50cyA6IC8vL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbEFyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2VzcywgLi4uZmluYWxBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4ubmV4dEFyZ3VtZW50cywgKHN1Y2Nlc3MsIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc3QgZmluYWxBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAgLy8vXG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIGNvdW50Kys7XG5cbiAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgbGV0IGNvdW50ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IDA7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gdHJ1ZSxcbiAgICAgICAgICAgIGZpbmFsQXJndW1lbnRzID0gbmV4dEFyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2VzcywgLi4uZmluYWxBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4ubmV4dEFyZ3VtZW50cywgKHN1Y2Nlc3MsIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc3QgZmluYWxBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAgLy8vXG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVkdWNlKGFycmF5LCBpbml0aWFsVmFsdWUsIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSAwO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIHZhbHVlLCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIGNvbnN0IGZpbmFsQXJndW1lbnRzID0gbmV4dEFyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odmFsdWUsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIHZhbHVlLCAuLi5uZXh0QXJndW1lbnRzLCAodmFsdWUsIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIHZhbHVlLCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV4dChpbmRleCwgaW5pdGlhbFZhbHVlLCAuLi5pbml0aWFsQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvckVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSAwO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgY29uc3QgZmluYWxBcmd1bWVudHMgPSBuZXh0QXJndW1lbnRzOyAvLy9cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbiguLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5uZXh0QXJndW1lbnRzLCAoLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNFdmVyeShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IDA7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gdHJ1ZSxcbiAgICAgICAgICAgIGZpbmFsQXJndW1lbnRzID0gbmV4dEFyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2VzcywgLi4uZmluYWxBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4ubmV4dEFyZ3VtZW50cywgKHN1Y2Nlc3MsIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc3QgZmluYWxBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAgLy8vXG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSBsZW5ndGggLSAxO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gdHJ1ZSxcbiAgICAgICAgICAgIGZpbmFsQXJndW1lbnRzID0gbmV4dEFyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2VzcywgLi4uZmluYWxBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4ubmV4dEFyZ3VtZW50cywgKHN1Y2Nlc3MsIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc3QgZmluYWxBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAgLy8vXG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXh0KGluZGV4IC0gMSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBjb250aW51YXRpb24gPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgIGluZGV4ID0gMDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIGNvbnN0IGZpbmFsQXJndW1lbnRzID0gbmV4dEFyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oLi4uZmluYWxBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4ubmV4dEFyZ3VtZW50cywgKC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXh0KGluZGV4LCAuLi5pbml0aWFsQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhY2t3YXJkc0ZvckVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSBsZW5ndGggLSAxO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICBjb25zdCBmaW5hbEFyZ3VtZW50cyA9IG5leHRBcmd1bWVudHM7IC8vL1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLm5leHRBcmd1bWVudHMsICguLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgcmV0dXJuIG5leHQoaW5kZXggLSAxLCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXIoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgZGVsZXRlZEVsZW1lbnRzID0gW10sXG4gICAgICAgIGluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgY29uc3QgZmluYWxBcmd1bWVudHMgPSBuZXh0QXJndW1lbnRzOyAvLy9cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihkZWxldGVkRWxlbWVudHMsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLm5leHRBcmd1bWVudHMsIChwYXNzZWQsIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gaW5kZXgsIC8vL1xuICAgICAgICAgICAgICBkZWxldGVDb3VudCA9IDEsXG4gICAgICAgICAgICAgIGRlbGV0ZWRFbGVtZW50ID0gZWxlbWVudDsgLy8vXG5cbiAgICAgICAgYXJyYXkuc3BsaWNlKHN0YXJ0SW5kZXgsIGRlbGV0ZUNvdW50KTtcblxuICAgICAgICBkZWxldGVkRWxlbWVudHMudW5zaGlmdChkZWxldGVkRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXh0KGluZGV4IC0gMSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJ1bmUoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSAwO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgY29uc3QgZGVsZXRlZEVsZW1lbnQgPSB1bmRlZmluZWQsXG4gICAgICAgICAgICBmaW5hbEFyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGRlbGV0ZWRFbGVtZW50LCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5pbml0aWFsQXJndW1lbnRzLCAocGFzc2VkLCAuLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgaWYgKCFwYXNzZWQpIHtcbiAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IGluZGV4LCAvLy9cbiAgICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxLFxuICAgICAgICAgICAgICBkZWxldGVkRWxlbWVudCA9IGVsZW1lbnQsIC8vL1xuICAgICAgICAgICAgICBmaW5hbEFyZ3VtZW50cyA9IGNhbGxiYWNrQXJndW1lbnRzOyAvLy9cblxuICAgICAgICBhcnJheS5zcGxpY2Uoc3RhcnRJbmRleCwgZGVsZXRlQ291bnQpO1xuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oZGVsZXRlZEVsZW1lbnQsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXh0KGluZGV4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3QoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSAwO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgY29uc3QgZGVsZXRlZEVsZW1lbnQgPSB1bmRlZmluZWQsXG4gICAgICAgICAgICBmaW5hbEFyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGRlbGV0ZWRFbGVtZW50LCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5pbml0aWFsQXJndW1lbnRzLCAocGFzc2VkLCAuLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgaWYgKHBhc3NlZCkge1xuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gaW5kZXgsIC8vL1xuICAgICAgICAgICAgICBkZWxldGVDb3VudCA9IDEsXG4gICAgICAgICAgICAgIGRlbGV0ZWRFbGVtZW50ID0gZWxlbWVudCwgLy8vXG4gICAgICAgICAgICAgIGZpbmFsQXJndW1lbnRzID0gY2FsbGJhY2tBcmd1bWVudHM7IC8vL1xuXG4gICAgICAgIGFycmF5LnNwbGljZShzdGFydEluZGV4LCBkZWxldGVDb3VudCk7XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihkZWxldGVkRWxlbWVudCwgLi4uZmluYWxBcmd1bWVudHMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV4dChpbmRleCArIDEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2goYXJyYXlBLCBhcnJheUIsIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGFycmF5QUxlbmd0aCA9IGFycmF5QS5sZW5ndGgsXG4gICAgICAgIGFycmF5Qkxlbmd0aCA9IGFycmF5Qi5sZW5ndGg7XG5cbiAgaWYgKGFycmF5QUxlbmd0aCAhPT0gYXJyYXlCTGVuZ3RoKSB7XG4gICAgY29uc3Qgc3VjY2VzcyA9IGZhbHNlLFxuICAgICAgICAgIGZpbmFsQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgIC8vL1xuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gIH1cblxuICBjb25zdCBsZW5ndGggPSBhcnJheUFMZW5ndGgsICAvLy9cbiAgICAgICAgaW5kZXggPSAwO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgY29uc3Qgc3VjY2VzcyA9IHRydWUsXG4gICAgICAgICAgICBmaW5hbEFyZ3VtZW50cyA9IG5leHRBcmd1bWVudHM7IC8vL1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50QSA9IGFycmF5QVtpbmRleF0sXG4gICAgICAgICAgZWxlbWVudEIgPSBhcnJheUJbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnRBLCBlbGVtZW50QiwgLi4ubmV4dEFyZ3VtZW50cywgKHN1Y2Nlc3MsIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc3QgZmluYWxBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAgLy8vXG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZShhcnJheUEsIGFycmF5QiwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgYXJyYXlBID0gWyAgLy8vXG4gICAgLi4uYXJyYXlBXG4gIF07XG5cbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKTtcblxuICBmdW5jdGlvbiBuZXh0UGFzcyguLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gYXJyYXlBLmxlbmd0aDsgLy8vXG5cbiAgICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gdHJ1ZSxcbiAgICAgICAgICAgIGZpbmFsQXJndW1lbnRzID0gbmV4dEFyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2VzcywgLi4uZmluYWxBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5leHRFbGVtZW50KGluZGV4LCBzdWNjZXNzLCAuLi5jdXJyZW50QXJndW1lbnRzKSB7XG4gICAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgICBjb25zdCBmaW5hbEFyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgICAgIH1cblxuICAgICAgICBhcnJheUZpbHRlcihhcnJheUEsIChlbGVtZW50QSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFycmF5QkluY2x1ZGVzRWxlbWVudEEgPSBhcnJheUIuaW5jbHVkZXMoZWxlbWVudEEpO1xuXG4gICAgICAgICAgaWYgKCFhcnJheUJJbmNsdWRlc0VsZW1lbnRBKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBuZXh0UGFzcyguLi5jdXJyZW50QXJndW1lbnRzKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWxlbWVudEEgPSBhcnJheUFbaW5kZXhdO1xuXG4gICAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudEEsIC4uLmN1cnJlbnRBcmd1bWVudHMsIChwYXNzZWQsIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIGlmIChwYXNzZWQpIHtcbiAgICAgICAgICBjb25zdCBlbGVtZW50QiA9IGVsZW1lbnRBLCAgLy8vXG4gICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG5cbiAgICAgICAgICBhcnJheUIucHVzaChlbGVtZW50Qik7XG5cbiAgICAgICAgICByZXR1cm4gbmV4dEVsZW1lbnQoaW5kZXggKyAxLCBzdWNjZXNzLCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV4dEVsZW1lbnQoaW5kZXggKyAxLCBzdWNjZXNzLCAuLi5jdXJyZW50QXJndW1lbnRzKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGluZGV4ID0gMCxcbiAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICByZXR1cm4gbmV4dEVsZW1lbnQoaW5kZXgsIHN1Y2Nlc3MsIC4uLm5leHRBcmd1bWVudHMpO1xuICB9XG5cbiAgcmV0dXJuIG5leHRQYXNzKC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxsKGNhbGxiYWNrcywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICByZXR1cm4gZXZlcnkoY2FsbGJhY2tzLCAoY2FsbGJhY2ssIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgfSwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleGlzdHMoY2FsbGJhY2tzLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIHJldHVybiBzb21lKGNhbGxiYWNrcywgKGNhbGxiYWNrLCAuLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgIHJldHVybiBjYWxsYmFjayguLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gIH0sIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG9uZSxcbiAgc29tZSxcbiAgZWFjaCxcbiAgZXZlcnksXG4gIHJlZHVjZSxcbiAgZm9yRWFjaCxcbiAgZm9yd2FyZHNFdmVyeSxcbiAgYmFja3dhcmRzRXZlcnksXG4gIGZvcndhcmRzRm9yRWFjaCxcbiAgYmFja3dhcmRzRm9yRWFjaCxcbiAgZmlsdGVyLFxuICBwcnVuZSxcbiAgZXh0cmFjdCxcbiAgbWF0Y2gsXG4gIHJlc29sdmUsXG4gIGFsbCxcbiAgZXhpc3RzXG59O1xuIl0sIm5hbWVzIjpbImFsbCIsImJhY2t3YXJkc0V2ZXJ5IiwiYmFja3dhcmRzRm9yRWFjaCIsImVhY2giLCJldmVyeSIsImV4aXN0cyIsImV4dHJhY3QiLCJmaWx0ZXIiLCJmb3JFYWNoIiwiZm9yd2FyZHNFdmVyeSIsImZvcndhcmRzRm9yRWFjaCIsIm1hdGNoIiwib25lIiwicHJ1bmUiLCJyZWR1Y2UiLCJyZXNvbHZlIiwic29tZSIsImFycmF5RmlsdGVyIiwiYXJyYXlVdGlsaXRpZXMiLCJhcnJheSIsImNhbGxiYWNrIiwiaW5pdGlhbEFyZ3VtZW50cyIsImNvbnRpbnVhdGlvbiIsInBvcCIsImxlbmd0aCIsImluZGV4IiwibmV4dCIsIm5leHRBcmd1bWVudHMiLCJzdWNjZXNzIiwiY291bnQiLCJmaW5hbEFyZ3VlbW50cyIsImVsZW1lbnQiLCJjYWxsYmFja0FyZ3VtZW50cyIsImZpbmFsQXJndW1lbnRzIiwiaW5pdGlhbFZhbHVlIiwidmFsdWUiLCJkZWxldGVkRWxlbWVudHMiLCJwYXNzZWQiLCJzdGFydEluZGV4IiwiZGVsZXRlQ291bnQiLCJkZWxldGVkRWxlbWVudCIsInNwbGljZSIsInVuc2hpZnQiLCJ1bmRlZmluZWQiLCJhcnJheUEiLCJhcnJheUIiLCJhcnJheUFMZW5ndGgiLCJhcnJheUJMZW5ndGgiLCJlbGVtZW50QSIsImVsZW1lbnRCIiwibmV4dFBhc3MiLCJuZXh0RWxlbWVudCIsImN1cnJlbnRBcmd1bWVudHMiLCJhcnJheUJJbmNsdWRlc0VsZW1lbnRBIiwiaW5jbHVkZXMiLCJwdXNoIiwiY2FsbGJhY2tzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUF1ZWdCQTtlQUFBQTs7UUFuUkFDO2VBQUFBOztRQW1EQUM7ZUFBQUE7O1FBNE9oQjtlQUFBOztRQXhhZ0JDO2VBQUFBOztRQW1DQUM7ZUFBQUE7O1FBK1hBQztlQUFBQTs7UUE3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