@libs-ui/utils 0.2.307-0 → 0.2.309-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.
@@ -1,10 +1,11 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
  import { HttpParams } from '@angular/common/http';
3
- import { ElementRef, TemplateRef, isSignal, signal } from '@angular/core';
4
- import { Observable } from 'rxjs';
3
+ import { isSignal, signal } from '@angular/core';
5
4
  import dayjs from 'dayjs';
6
- import { UtilsHttpParamsRequest } from './http-params';
5
+ import { isDangerousObject, isReturnAsIsObject } from './dangerous-object';
7
6
  import { getDayjs } from './date';
7
+ import { UtilsHttpParamsRequest } from './http-params';
8
+ import { convertSignalToObject } from './two-way-signal-object';
8
9
  /**Các hàm tương tự thư viện lodash */
9
10
  /**
10
11
  * Kiểm tra xem một giá trị có phải là null hoặc undefined hay không
@@ -16,7 +17,10 @@ import { getDayjs } from './date';
16
17
  * isNil(0); // false
17
18
  * isNil('hello'); // false
18
19
  */
19
- export const isNil = (value) => {
20
+ export const isNil = (value, options) => {
21
+ if (!options?.ignoreUnWrapSignal) {
22
+ value = convertSignalToObject(value);
23
+ }
20
24
  return value === null || value === undefined;
21
25
  };
22
26
  /**
@@ -32,11 +36,75 @@ export const isNil = (value) => {
32
36
  * isEmpty([1, 2, 3]); // false
33
37
  * isEmpty({ a: 1 }); // false
34
38
  */
35
- export const isEmpty = (value) => {
36
- while (isSignal(value)) {
37
- value = value();
39
+ export const isEmpty = (value, options) => {
40
+ if (!options?.ignoreUnWrapSignal) {
41
+ value = convertSignalToObject(value);
42
+ }
43
+ if (options?.ignoreCheckFalsy) {
44
+ return isEmptyTypeObject(value);
45
+ }
46
+ const valueIsFalsy = isFalsy(value, { ignoreUnWrapSignal: options?.ignoreUnWrapSignal, ignoreZero: true, ignoreCheckString: options?.ignoreCheckString });
47
+ if (options?.ignoreCheckTypeObj) {
48
+ return valueIsFalsy;
38
49
  }
39
- return value === null || value === '' || value === undefined || (typeof value === 'object' && (JSON.stringify(value) === '{}' || JSON.stringify(value) === '[]'));
50
+ return valueIsFalsy || isEmptyTypeObject(value);
51
+ };
52
+ /**
53
+ * Kiểm tra xem một giá trị có phải là object rỗng hay không
54
+ * @param value Giá trị cần kiểm tra
55
+ * @returns true nếu giá trị là object rỗng, false nếu không
56
+ * @example
57
+ * isEmptyTypeObject({}); // true
58
+ * isEmptyTypeObject({ a: 1 }); // false
59
+ */
60
+ const isEmptyTypeObject = (value) => {
61
+ return typeof value === 'object' && (JSON.stringify(value) === '{}' || JSON.stringify(value) === '[]');
62
+ };
63
+ /**
64
+ * Kiểm tra xem một giá trị có phải là null, rỗng, undefined hoặc 0 hay không
65
+ * @param value Giá trị cần kiểm tra
66
+ * @param options Cấu hình tùy chọn
67
+ * @param options.ignoreZero Nếu true, sẽ không kiểm tra giá trị 0
68
+ * @returns true nếu giá trị là null, rỗng, undefined hoặc 0, false nếu không
69
+ * @example
70
+ * isTruthy(null); // false
71
+ * isTruthy(''); // false
72
+ * isTruthy(undefined); // false
73
+ * isTruthy(0); // false
74
+ * isTruthy({}); // false
75
+ * isTruthy(0, { ignoreZero: true }); // true
76
+ */
77
+ export const isTruthy = (value, options) => {
78
+ return !isFalsy(value, options);
79
+ };
80
+ /**
81
+ * Kiểm tra xem một giá trị có phải là null, rỗng, undefined hoặc 0 hay không
82
+ * @param value Giá trị cần kiểm tra
83
+ * @param options Cấu hình tùy chọn
84
+ * @param options.ignoreZero Nếu true, sẽ không kiểm tra giá trị 0
85
+ * @returns true nếu giá trị là null, rỗng, undefined hoặc 0, false nếu không
86
+ * @example
87
+ * isFalsy(null); // true
88
+ * isFalsy(''); // true
89
+ * isFalsy(undefined); // true
90
+ * isFalsy(0); // true
91
+ * isFalsy({}); // false
92
+ * isFalsy(0, { ignoreZero: true }); // false
93
+ */
94
+ export const isFalsy = (value, options) => {
95
+ if (!options?.ignoreUnWrapSignal) {
96
+ value = convertSignalToObject(value);
97
+ }
98
+ if (isNil(value, { ignoreUnWrapSignal: options?.ignoreUnWrapSignal })) {
99
+ return true;
100
+ }
101
+ if (options?.ignoreZero) {
102
+ return value === '';
103
+ }
104
+ if (options?.ignoreCheckString) {
105
+ return value === 0;
106
+ }
107
+ return value === '' || value === 0;
40
108
  };
41
109
  /**
42
110
  * Loại bỏ các thuộc tính của đối tượng dựa trên một hàm điều kiện
@@ -174,7 +242,7 @@ export const get = (obj, path, defaultValue = undefined, keepLastValueIfSignal)
174
242
  * const obj = { a: { b: 1 } };
175
243
  * set(obj, 'a.b', 2); // { a: { b: 2 } }
176
244
  */
177
- export const set = (obj, path, value) => {
245
+ export const set = (obj, path, value, options) => {
178
246
  if (!obj || (typeof obj !== 'object' && !isSignal(obj)) || (isSignal(obj) && typeof obj() !== 'object')) {
179
247
  throw new Error('The first argument must be an object');
180
248
  }
@@ -194,7 +262,9 @@ export const set = (obj, path, value) => {
194
262
  if (!(key in currentObjectByKey) || (typeof currentObjectByKey[key] !== 'object' && !isSignal(currentObjectByKey[key]))) {
195
263
  const nextKey = pathArray[index + 1];
196
264
  key = key.replace(/\[(\d+)]/g, '$1');
197
- currentObjectByKey[key] = /\[(\d+)]/g.test(nextKey) ? [] : {};
265
+ if (isNil(currentObjectByKey[key])) {
266
+ currentObjectByKey[key] = /\[(\d+)]/g.test(nextKey) ? (options?.valueDefaultPathArrayUndefined ?? []) : (options?.valueDefaultPathObjectUndefined ?? {});
267
+ }
198
268
  }
199
269
  currentObjectByKey = key ? currentObjectByKey[key] : currentObjectByKey;
200
270
  preObjectByKey = currentObjectByKey;
@@ -253,7 +323,7 @@ export const set = (obj, path, value) => {
253
323
  * // clone là một bản sao hoàn toàn độc lập của obj
254
324
  */
255
325
  export const cloneDeep = (data, options = { ignoreSignal: false }, seen = new WeakMap()) => {
256
- if (data === null || (typeof data !== 'object' && !isSignal(data))) {
326
+ if (data === null || (typeof data !== 'object' && !isSignal(data)) || isDangerousObject(data)) {
257
327
  return data;
258
328
  }
259
329
  if (seen.has(data)) {
@@ -291,10 +361,7 @@ export const cloneDeep = (data, options = { ignoreSignal: false }, seen = new We
291
361
  seen.set(data, data.map((item) => cloneDeep(item, options, seen)));
292
362
  return seen.get(data);
293
363
  }
294
- if (data instanceof File || data instanceof Blob || Object.prototype.toString.call(data) === '[object File]') {
295
- return data;
296
- }
297
- if (data instanceof TemplateRef || data instanceof ElementRef || data instanceof Element || data instanceof Promise || data instanceof Observable) {
364
+ if (isReturnAsIsObject(data)) {
298
365
  return data;
299
366
  }
300
367
  if (isSignal(data)) {
@@ -312,11 +379,19 @@ export const cloneDeep = (data, options = { ignoreSignal: false }, seen = new We
312
379
  result[key] = new UtilsHttpParamsRequest(undefined, value);
313
380
  continue;
314
381
  }
382
+ if (value instanceof Date) {
383
+ result[key] = new Date(value.getTime());
384
+ continue;
385
+ }
315
386
  if (dayjs.isDayjs(value)) {
316
387
  result[key] = getDayjs({ date: value.valueOf() });
317
388
  continue;
318
389
  }
319
- if (value instanceof TemplateRef || value instanceof ElementRef || value instanceof Element || value instanceof Promise || value instanceof Observable) {
390
+ if (value instanceof RegExp) {
391
+ result[key] = new RegExp(value.source, value.flags);
392
+ continue;
393
+ }
394
+ if (isReturnAsIsObject(data)) {
320
395
  result[key] = value;
321
396
  continue;
322
397
  }
@@ -448,6 +523,11 @@ export const range = (start, end, step) => {
448
523
  * isEqual({a:1}, {a:1}); // true
449
524
  */
450
525
  export const isEqual = (value1, value2, options) => {
526
+ // Handle signals
527
+ if (!options?.ignoreUnWrapSignal) {
528
+ value1 = convertSignalToObject(value1);
529
+ value2 = convertSignalToObject(value2);
530
+ }
451
531
  const { exactlyPosition = false, ignoreExactlyDataType = false } = options || {};
452
532
  if (value1 === value2 || (value1 === null && value2 === null) || (value1 === undefined && value2 === undefined)) {
453
533
  return true;
@@ -455,13 +535,6 @@ export const isEqual = (value1, value2, options) => {
455
535
  if (ignoreExactlyDataType) {
456
536
  return isEqual(isNil(value1) ? undefined : `${value1}`, isNil(value2) ? undefined : `${value2}`);
457
537
  }
458
- // Handle signals
459
- while (isSignal(value1)) {
460
- value1 = value1();
461
- }
462
- while (isSignal(value2)) {
463
- value2 = value2();
464
- }
465
538
  if (typeof value1 !== 'object' || typeof value2 !== 'object' || (Array.isArray(value1) && !Array.isArray(value2)) || (!Array.isArray(value1) && Array.isArray(value2))) {
466
539
  return false;
467
540
  }
@@ -564,4 +637,4 @@ export const generateInterface = (obj, interfaceName) => {
564
637
  const interfaceStr = `interface ${interfaceName} ${generateType(obj)}`;
565
638
  return interfaceStr;
566
639
  };
567
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMtdWkvdXRpbHMvc3JjL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBa0IsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUVsQyxzQ0FBc0M7QUFDdEM7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQUMsS0FBYyxFQUE2QixFQUFFO0lBQ2pFLE9BQU8sS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxDQUFDO0FBQy9DLENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxDQUFDLEtBQWMsRUFBRSxFQUFFO0lBQ3hDLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdkIsS0FBSyxHQUFHLEtBQUssRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFDRCxPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxJ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QUssR0FBRyxLQUFLLFNBQVMsS0FBSyxDQUFDO2dCQUM5QyxDQUFDO1lBQ0gsQ0FBQztZQUNELFlBQVksSUFBSSxHQUFHLENBQUM7WUFDcEIsT0FBTyxZQUFZLENBQUM7UUFDdEIsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxDQUFDO0lBRUYsTUFBTSxZQUFZLEdBQUcsYUFBYSxhQUFhLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDdkUsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEVsZW1lbnRSZWYsIFRlbXBsYXRlUmVmLCBXcml0YWJsZVNpZ25hbCwgaXNTaWduYWwsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVFlQRV9PQkpFQ1QgfSBmcm9tICdAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XG5pbXBvcnQgeyBVdGlsc0h0dHBQYXJhbXNSZXF1ZXN0IH0gZnJvbSAnLi9odHRwLXBhcmFtcyc7XG5pbXBvcnQgeyBnZXREYXlqcyB9IGZyb20gJy4vZGF0ZSc7XG5cbi8qKkPDoWMgaMOgbSB0xrDGoW5nIHThu7EgdGjGsCB2aeG7h24gbG9kYXNoICovXG4vKipcbiAqIEtp4buDbSB0cmEgeGVtIG3hu5l0IGdpw6EgdHLhu4sgY8OzIHBo4bqjaSBsw6AgbnVsbCBob+G6t2MgdW5kZWZpbmVkIGhheSBraMO0bmdcbiAqIEBwYXJhbSB2YWx1ZSBHacOhIHRy4buLIGPhuqduIGtp4buDbSB0cmFcbiAqIEByZXR1cm5zIHRydWUgbuG6v3UgZ2nDoSB0cuG7iyBsw6AgbnVsbCBob+G6t2MgdW5kZWZpbmVkLCBmYWxzZSBu4bq/dSBraMO0bmdcbiAqIEBleGFtcGxlXG4gKiBpc05pbChudWxsKTsgLy8gdHJ1ZVxuICogaXNOaWwodW5kZWZpbmVkKTsgLy8gdHJ1ZVxuICogaXNOaWwoMCk7IC8vIGZhbHNlXG4gKiBpc05pbCgnaGVsbG8nKTsgLy8gZmFsc2VcbiAqL1xuZXhwb3J0IGNvbnN0IGlzTmlsID0gKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgbnVsbCB8IHVuZGVmaW5lZCA9PiB7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBLaeG7g20gdHJhIHhlbSBt4buZdCBnacOhIHRy4buLIGPDsyBwaOG6o2kgbMOgIHLhu5duZyBoYXkga2jDtG5nXG4gKiBAcGFyYW0gdmFsdWUgR2nDoSB0cuG7iyBj4bqnbiBraeG7g20gdHJhXG4gKiBAcmV0dXJucyB0cnVlIG7hur91IGdpw6EgdHLhu4sgbMOgIG51bGwsIHLhu5duZyBob+G6t2MgdW5kZWZpbmVkLCBmYWxzZSBu4bq/dSBraMO0bmdcbiAqIEBleGFtcGxlXG4gKiBpc0VtcHR5KG51bGwpOyAvLyB0cnVlXG4gKiBpc0VtcHR5KCcnKTsgLy8gdHJ1ZVxuICogaXNFbXB0eSh1bmRlZmluZWQpOyAvLyB0cnVlXG4gKiBpc0VtcHR5KHt9KTsgLy8gdHJ1ZVxuICogaXNFbXB0eShbXSk7IC8vIHRydWVcbiAqIGlzRW1wdHkoWzEsIDIsIDNdKTsgLy8gZmFsc2VcbiAqIGlzRW1wdHkoeyBhOiAxIH0pOyAvLyBmYWxzZVxuICovXG5leHBvcnQgY29uc3QgaXNFbXB0eSA9ICh2YWx1ZTogdW5rbm93bikgPT4ge1xuICB3aGlsZSAoaXNTaWduYWwodmFsdWUpKSB7XG4gICAgdmFsdWUgPSB2YWx1ZSgpO1xuICB9XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAoSlNPTi5zdHJpbmdpZnkodmFsdWUpID09PSAne30nIHx8IEpTT04uc3RyaW5naWZ5KHZhbHVlKSA9PT0gJ1tdJykpO1xufTtcblxuLyoqXG4gKiBMb+G6oWkgYuG7jyBjw6FjIHRodeG7mWMgdMOtbmggY+G7p2EgxJHhu5FpIHTGsOG7o25nIGThu7FhIHRyw6puIG3hu5l0IGjDoG0gxJFp4buBdSBraeG7h25cbiAqIEBwYXJhbSBvYmpEYXRhIMSQ4buRaSB0xrDhu6NuZyBj4bqnbiB44butIGzDvVxuICogQHBhcmFtIHByZWRpY2F0ZSBIw6BtIMSRaeG7gXUga2nhu4duIMSR4buDIGtp4buDbSB0cmEgZ2nDoSB0cuG7iyBj4bunYSB0aHXhu5ljIHTDrW5oLiBO4bq/dSBow6BtIHRy4bqjIHbhu4EgdHJ1ZSB0aMOsIHRodeG7mWMgdMOtbmggxJHDsyBz4bq9IGLhu4sgbG/huqFpIGLhu49cbiAqIEByZXR1cm5zIMSQ4buRaSB0xrDhu6NuZyBt4bubaSBzYXUga2hpIMSRw6MgbG/huqFpIGLhu48gY8OhYyB0aHXhu5ljIHTDrW5oIHRo4buPYSBtw6NuIMSRaeG7gXUga2nhu4duXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgb2JqID0geyBhOiAxLCBiOiBudWxsLCBjOiAzLCBkOiB1bmRlZmluZWQgfTtcbiAqIG9taXRCeShvYmosIGlzTmlsKTsgLy8geyBhOiAxLCBjOiAzIH1cbiAqL1xuZXhwb3J0IGNvbnN0IG9taXRCeSA9IDxUPihvYmpEYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBwcmVkaWNhdGU6ICh2YWw6IGFueSkgPT4gYm9vbGVhbik6IFQgPT4ge1xuICBpZiAoIW9iakRhdGEgfHwgdHlwZW9mIG9iakRhdGEgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkob2JqRGF0YSkpIHtcbiAgICByZXR1cm4gb2JqRGF0YSBhcyBUO1xuICB9XG4gIGNvbnN0IG5ld09iaiA9IHt9IGFzIFQ7XG5cbiAgT2JqZWN0LmtleXMob2JqRGF0YSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgY29uc3QgdmFsdWVPZktleSA9IGdldChvYmpEYXRhLCBrZXkpO1xuICAgIGlmICghcHJlZGljYXRlKHZhbHVlT2ZLZXkpKSB7XG4gICAgICBzZXQobmV3T2JqLCBrZXksIHZhbHVlT2ZLZXkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBuZXdPYmo7XG59O1xuXG4vKipcbiAqIEzhuqV5IGdpw6EgdHLhu4sgdOG7qyDEkeG7kWkgdMaw4bujbmcgdGhlbyDEkcaw4budbmcgZOG6q24gY2jhu4kgxJHhu4tuaFxuICpcbiAqIEjDoG0gbsOgeSBnacO6cCBi4bqhbiB0cnV5IGPhuq1wIHbDoG8gY8OhYyB0aHXhu5ljIHTDrW5oIHPDonUgYsOqbiB0cm9uZyBt4buZdCDEkeG7kWkgdMaw4bujbmcgbeG7mXQgY8OhY2ggYW4gdG/DoG4sXG4gKiB0csOhbmggbOG7l2kga2hpIHRodeG7mWMgdMOtbmgga2jDtG5nIHThu5NuIHThuqFpLlxuICpcbiAqIEBwYXJhbSBvYmogxJDhu5FpIHTGsOG7o25nIG5ndeG7k24gY+G6p24gbOG6pXkgZ2nDoSB0cuG7i1xuICogQHBhcmFtIHBhdGggxJDGsOG7nW5nIGThuqtuIMSR4bq/biB0aHXhu5ljIHTDrW5oIGPhuqduIGzhuqV5LiBDw7MgdGjhu4MgbMOgOlxuICogICAtIENodeG7l2k6ICd1c2VyLnByb2ZpbGUubmFtZScgaG/hurdjICdpdGVtc1swXS50aXRsZSdcbiAqICAgLSBN4bqjbmc6IFsndXNlcicsICdwcm9maWxlJywgJ25hbWUnXSBob+G6t2MgWydpdGVtcycsICcwJywgJ3RpdGxlJ11cbiAqICAgLSBDaHXhu5dpIHLhu5duZyAnJzogdHLhuqMgduG7gSBjaMOtbmggxJHhu5FpIHTGsOG7o25nIGfhu5FjXG4gKiBAcGFyYW0gZGVmYXVsdFZhbHVlIEdpw6EgdHLhu4sgbeG6t2MgxJHhu4tuaCB0cuG6oyB24buBIGtoaSBraMO0bmcgdMOsbSB0aOG6pXkgdGh14buZYyB0w61uaCAobeG6t2MgxJHhu4tuaDogdW5kZWZpbmVkKVxuICogQHBhcmFtIGtlZXBMYXN0VmFsdWVJZlNpZ25hbCBDw7MgZ2nhu68gbmd1ecOqbiBzaWduYWwgY3Xhu5FpIGPDuW5nIGhheSBraMO0bmcgKG3hurdjIMSR4buLbmg6IGZhbHNlIC0gc+G6vSBn4buNaSBzaWduYWwoKSlcbiAqIEByZXR1cm5zIEdpw6EgdHLhu4sgdMOsbSDEkcaw4bujYyBob+G6t2MgZ2nDoSB0cuG7iyBt4bq3YyDEkeG7i25oXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFbDrSBk4bulIGPGoSBi4bqjblxuICogY29uc3QgdXNlciA9IHsgbmFtZTogJ0pvaG4nLCBhZ2U6IDMwIH07XG4gKiBnZXQodXNlciwgJ25hbWUnKTsgLy8gJ0pvaG4nXG4gKiBnZXQodXNlciwgJ2VtYWlsJyk7IC8vIHVuZGVmaW5lZFxuICogZ2V0KHVzZXIsICdlbWFpbCcsICduby1lbWFpbCcpOyAvLyAnbm8tZW1haWwnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRydXnhu4FuIHBhdGggcuG7l25nIC0gdHLhuqMgduG7gSBjaMOtbmggxJHhu5FpIHTGsOG7o25nIGfhu5FjXG4gKiBjb25zdCBkYXRhID0geyBuYW1lOiAnQWxpY2UnLCBhZ2U6IDI1IH07XG4gKiBnZXQoZGF0YSwgJycpOyAvLyB7IG5hbWU6ICdBbGljZScsIGFnZTogMjUgfSAoY2jDrW5oIMSR4buRaSB0xrDhu6NuZyBkYXRhKVxuICogZ2V0KGRhdGEsICcnLCAnZGVmYXVsdCcpOyAvLyB7IG5hbWU6ICdBbGljZScsIGFnZTogMjUgfSAoYuG7jyBxdWEgZGVmYXVsdFZhbHVlKVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUcnV5IGPhuq1wIHRodeG7mWMgdMOtbmggc8OidVxuICogY29uc3QgZGF0YSA9IHtcbiAqICAgdXNlcjoge1xuICogICAgIHByb2ZpbGU6IHtcbiAqICAgICAgIG5hbWU6ICdBbGljZScsXG4gKiAgICAgICBzZXR0aW5nczogeyB0aGVtZTogJ2RhcmsnIH1cbiAqICAgICB9XG4gKiAgIH1cbiAqIH07XG4gKiBnZXQoZGF0YSwgJ3VzZXIucHJvZmlsZS5uYW1lJyk7IC8vICdBbGljZSdcbiAqIGdldChkYXRhLCAndXNlci5wcm9maWxlLnNldHRpbmdzLnRoZW1lJyk7IC8vICdkYXJrJ1xuICogZ2V0KGRhdGEsICd1c2VyLnByb2ZpbGUuYXZhdGFyJywgJ2RlZmF1bHQuanBnJyk7IC8vICdkZWZhdWx0LmpwZydcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVHJ1eSBj4bqtcCBt4bqjbmdcbiAqIGNvbnN0IGl0ZW1zID0gW1xuICogICB7IG5hbWU6ICdJdGVtIDEnLCBwcmljZTogMTAwIH0sXG4gKiAgIHsgbmFtZTogJ0l0ZW0gMicsIHByaWNlOiAyMDAgfVxuICogXTtcbiAqIGdldChpdGVtcywgJ1swXS5uYW1lJyk7IC8vICdJdGVtIDEnXG4gKiBnZXQoaXRlbXMsICdbMV0ubmFtZScpOyAvLyAnSXRlbSAyJ1xuICogZ2V0KGl0ZW1zLCAnWzJdLm5hbWUnLCAnTm90IGZvdW5kJyk7IC8vICdOb3QgZm91bmQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFPhu60gZOG7pW5nIHbhu5tpIG3huqNuZyBwYXRoXG4gKiBjb25zdCBuZXN0ZWQgPSB7IGE6IHsgYjogeyBjOiAnZGVlcCB2YWx1ZScgfSB9IH07XG4gKiBnZXQobmVzdGVkLCBbJ2EnLCAnYicsICdjJ10pOyAvLyAnZGVlcCB2YWx1ZSdcbiAqIGdldChuZXN0ZWQsIFsnYScsICdiJywgJ2QnXSwgJ2RlZmF1bHQnKTsgLy8gJ2RlZmF1bHQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRyxrDhu51uZyBo4bujcCDEkeG6t2MgYmnhu4d0XG4gKiBnZXQobnVsbCwgJ2FueS5wYXRoJyk7IC8vIHVuZGVmaW5lZFxuICogZ2V0KHVuZGVmaW5lZCwgJ2FueS5wYXRoJywgJ2ZhbGxiYWNrJyk7IC8vICdmYWxsYmFjaydcbiAqL1xuZXhwb3J0IGNvbnN0IGdldCA9IDxUID0gYW55PihvYmo6IGFueSwgcGF0aDogc3RyaW5nIHwgc3RyaW5nW10sIGRlZmF1bHRWYWx1ZTogYW55ID0gdW5kZWZpbmVkLCBrZWVwTGFzdFZhbHVlSWZTaWduYWw/OiBib29sZWFuKTogVCA9PiB7XG4gIGlmIChpc05pbChvYmopKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfVxuICB3aGlsZSAoaXNTaWduYWwob2JqKSkge1xuICAgIG9iaiA9IG9iaigpO1xuICB9XG4gIGlmIChwYXRoID09PSAnJykge1xuICAgIHJldHVybiBvYmogYXMgVDtcbiAgfVxuICBpZiAob2JqIGluc3RhbmNlb2YgSHR0cFBhcmFtcykge1xuICAgIHJldHVybiAob2JqLmdldChgJHtwYXRofWApID8/IGRlZmF1bHRWYWx1ZSkgYXMgVDtcbiAgfVxuICBpZiAob2JqIGluc3RhbmNlb2YgRE9NUmVjdCkge1xuICAgIHJldHVybiBvYmpbcGF0aCBhcyBrZXlvZiBET01SZWN0XSBhcyBUO1xuICB9XG5cbiAgY29uc3QgcGF0aHMgPSBBcnJheS5pc0FycmF5KHBhdGgpXG4gICAgPyBwYXRoXG4gICAgOiBwYXRoXG4gICAgICAgIC5yZXBsYWNlKC9cXFsoXFxkKyldL2csICcuJDEnKVxuICAgICAgICAuc3BsaXQoJy4nKVxuICAgICAgICAuZmlsdGVyKChrZXkpID0+IGtleSk7XG4gIGZvciAoY29uc3QgaW5kZXggaW4gcGF0aHMpIHtcbiAgICBjb25zdCBrZXkgPSBwYXRoc1tpbmRleF07XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIENTU1N0eWxlRGVjbGFyYXRpb24pIHtcbiAgICAgIG9iaiA9IG9ialtrZXkgYXMga2V5b2YgQ1NTU3R5bGVEZWNsYXJhdGlvbl0gYXMgVDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgb2JqID0gb2JqW2tleSBhcyBrZXlvZiBIVE1MRWxlbWVudF0gYXMgVDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoaXNOaWwob2JqKSB8fCAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWwgPSBpc1NpZ25hbChvYmpba2V5XSkgJiYgIWtlZXBMYXN0VmFsdWVJZlNpZ25hbCA/IG9ialtrZXldKCkgOiBvYmpba2V5XTtcblxuICAgIG9iaiA9IHZhbDtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG4vKipcbiAqIFRoaeG6v3QgbOG6rXAgZ2nDoSB0cuG7iyBjaG8gbeG7mXQgdGh14buZYyB0w61uaCB0cm9uZyDEkeG7kWkgdMaw4bujbmcgdGhlbyDEkcaw4budbmcgZOG6q24gY2jhu4kgxJHhu4tuaFxuICogQHBhcmFtIG9iaiDEkOG7kWkgdMaw4bujbmcgY+G6p24gdGhp4bq/dCBs4bqtcCBnacOhIHRy4buLXG4gKiBAcGFyYW0gcGF0aCDEkMaw4budbmcgZOG6q24gxJHhur9uIHRodeG7mWMgdMOtbmgsIGPDsyB0aOG7gyBsw6AgY2h14buXaSAodmQ6ICdhLmIuYycpIGhv4bq3YyBt4bqjbmcgKHZkOiBbJ2EnLCAnYicsICdjJ10pXG4gKiBAcGFyYW0gdmFsdWUgR2nDoSB0cuG7iyBj4bqnbiB0aGnhur90IGzhuq1wXG4gKiBAcmV0dXJucyDEkOG7kWkgdMaw4bujbmcgc2F1IGtoaSDEkcOjIHRoaeG6v3QgbOG6rXAgZ2nDoSB0cuG7i1xuICogQHRocm93cyBFcnJvciBu4bq/dSB0aGFtIHPhu5EgxJHhuqd1IHRpw6puIGtow7RuZyBwaOG6o2kgbMOgIMSR4buRaSB0xrDhu6NuZ1xuICogQGV4YW1wbGVcbiAqIGNvbnN0IG9iaiA9IHsgYTogeyBiOiAxIH0gfTtcbiAqIHNldChvYmosICdhLmInLCAyKTsgLy8geyBhOiB7IGI6IDIgfSB9XG4gKi9cbmV4cG9ydCBjb25zdCBzZXQgPSA8VCA9IGFueT4ob2JqOiBhbnksIHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLCB2YWx1ZTogYW55KTogVCA9PiB7XG4gIGlmICghb2JqIHx8ICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyAmJiAhaXNTaWduYWwob2JqKSkgfHwgKGlzU2lnbmFsKG9iaikgJiYgdHlwZW9mIG9iaigpICE9PSAnb2JqZWN0JykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgaWYgKG9iaiBpbnN0YW5jZW9mIEh0dHBQYXJhbXMpIHtcbiAgICByZXR1cm4gb2JqLnNldChgJHtwYXRofWAsIHZhbHVlKSBhcyBUO1xuICB9XG5cbiAgY29uc3QgcGF0aEFycmF5ID0gQXJyYXkuaXNBcnJheShwYXRoKVxuICAgID8gcGF0aFxuICAgIDogcGF0aFxuICAgICAgICAucmVwbGFjZSgvXFxbKFxcZCspXS9nLCAnLlskMV0nKVxuICAgICAgICAuc3BsaXQoJy4nKVxuICAgICAgICAuZmlsdGVyKChrZXkpID0+IGtleSk7XG5cbiAgbGV0IGN1cnJlbnRPYmplY3RCeUtleTogYW55ID0gaXNTaWduYWwob2JqKSA/IG9iaigpIDogb2JqO1xuICBsZXQgcHJlT2JqZWN0QnlLZXkgPSBvYmo7XG5cbiAgcGF0aEFycmF5LmZvckVhY2goKGtleSwgaW5kZXgpID0+IHtcbiAgICBpZiAoaW5kZXggPCBwYXRoQXJyYXkubGVuZ3RoIC0gMSkge1xuICAgICAgaWYgKCEoa2V5IGluIGN1cnJlbnRPYmplY3RCeUtleSkgfHwgKHR5cGVvZiBjdXJyZW50T2JqZWN0QnlLZXlba2V5XSAhPT0gJ29iamVjdCcgJiYgIWlzU2lnbmFsKGN1cnJlbnRPYmplY3RCeUtleVtrZXldKSkpIHtcbiAgICAgICAgY29uc3QgbmV4dEtleSA9IHBhdGhBcnJheVtpbmRleCArIDFdO1xuICAgICAgICBrZXkgPSBrZXkucmVwbGFjZSgvXFxbKFxcZCspXS9nLCAnJDEnKTtcbiAgICAgICAgY3VycmVudE9iamVjdEJ5S2V5W2tleV0gPSAvXFxbKFxcZCspXS9nLnRlc3QobmV4dEtleSkgPyBbXSA6IHt9O1xuICAgICAgfVxuICAgICAgY3VycmVudE9iamVjdEJ5S2V5ID0ga2V5ID8gY3VycmVudE9iamVjdEJ5S2V5W2tleV0gOiBjdXJyZW50T2JqZWN0QnlLZXk7XG4gICAgICBwcmVPYmplY3RCeUtleSA9IGN1cnJlbnRPYmplY3RCeUtleTtcbiAgICAgIGN1cnJlbnRPYmplY3RCeUtleSA9IGlzU2lnbmFsKGN1cnJlbnRPYmplY3RCeUtleSkgPyBjdXJyZW50T2JqZWN0QnlLZXkoKSA6IGN1cnJlbnRPYmplY3RCeUtleTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGN1cnJlbnRPYmplY3RCeUtleSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBHw6FuIGdpw6EgdHLhu4sg4bufIGN14buRaSDEkcaw4budbmcgZOG6q25cbiAgICBrZXkgPSBrZXkucmVwbGFjZSgvXFxbKFxcZCspXS9nLCAnJDEnKTtcbiAgICBjb25zdCB2YWx1ZU9mS2V5ID0gY3VycmVudE9iamVjdEJ5S2V5W2tleV07XG4gICAgY29uc3QgdmFsdWVPZktleUlzU2lnbmFsID0gaXNTaWduYWwodmFsdWVPZktleSk7XG5cbiAgICBpZiAodmFsdWVPZktleUlzU2lnbmFsICYmICh0eXBlb2YgdmFsdWVPZktleSgpICE9PSAnb2JqZWN0JyB8fCB2YWx1ZU9mS2V5KCkgPT09IG51bGwpKSB7XG4gICAgICAodmFsdWVPZktleSBhcyBXcml0YWJsZVNpZ25hbDxhbnk+KS5zZXQoaXNTaWduYWwodmFsdWUpID8gdmFsdWUoKSA6IHZhbHVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlzU2lnbmFsKHByZU9iamVjdEJ5S2V5KSkge1xuICAgICAgKHByZU9iamVjdEJ5S2V5IGFzIFdyaXRhYmxlU2lnbmFsPGFueT4pLnVwZGF0ZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGFPZktleSA9IGRhdGFba2V5XTtcbiAgICAgICAgaWYgKGlzTmlsKGRhdGFPZktleSkgfHwgIXZhbHVlT2ZLZXlJc1NpZ25hbCkge1xuICAgICAgICAgIGRhdGFba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlT2ZLZXlJc1NpZ25hbCkge1xuICAgICAgICAgICh2YWx1ZU9mS2V5IGFzIFdyaXRhYmxlU2lnbmFsPGFueT4pLnNldChpc1NpZ25hbCh2YWx1ZSkgPyB2YWx1ZSgpIDogdmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICByZXR1cm4gWy4uLmRhdGFdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IC4uLmRhdGEgfTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodmFsdWVPZktleUlzU2lnbmFsKSB7XG4gICAgICAodmFsdWVPZktleSBhcyBXcml0YWJsZVNpZ25hbDxhbnk+KS5zZXQoaXNTaWduYWwodmFsdWUpID8gdmFsdWUoKSA6IHZhbHVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY3VycmVudE9iamVjdEJ5S2V5W2tleV0gPSB2YWx1ZTtcbiAgfSk7XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbi8qKlxuICogVOG6oW8gbeG7mXQgYuG6o24gc2FvIHPDonUgY+G7p2EgbeG7mXQgxJHhu5FpIHTGsOG7o25nIGhv4bq3YyBnacOhIHRy4buLIGLhuqV0IGvhu7NcbiAqIEBwYXJhbSBkYXRhIEThu68gbGnhu4d1IGPhuqduIHNhbyBjaMOpcFxuICogQHBhcmFtIG9wdGlvbnMgVMO5eSBjaOG7jW4gY+G6pXUgaMOsbmhcbiAqIEBwYXJhbSBvcHRpb25zLmlnbm9yZVNpZ25hbCBO4bq/dSB0cnVlLCBz4bq9IGtow7RuZyBzYW8gY2jDqXAgY8OhYyBzaWduYWwgbcOgIHRy4bqjIHbhu4Egc2lnbmFsIGfhu5FjXG4gKiBAcGFyYW0gc2VlbiBXZWFrTWFwIMSR4buDIHRoZW8gZMO1aSBjw6FjIHRoYW0gY2hp4bq/dSDEkcOjIMSRxrDhu6NjIHNhbyBjaMOpcCwgdHLDoW5oIGzhurdwIHbDtCBo4bqhbiB24bubaSBjw6FjIHRoYW0gY2hp4bq/dSB2w7JuZ1xuICogQHJldHVybnMgQuG6o24gc2FvIHPDonUgY+G7p2EgZOG7ryBsaeG7h3UgxJHhuqd1IHbDoG9cbiAqIEBleGFtcGxlXG4gKiBjb25zdCBvYmogPSB7XG4gKiAgIGE6IDEsXG4gKiAgIGI6IHsgYzogMiB9LFxuICogICBkOiBbMSwgMiwgM11cbiAqIH07XG4gKiBjb25zdCBjbG9uZSA9IGNsb25lRGVlcChvYmopO1xuICogLy8gY2xvbmUgbMOgIG3hu5l0IGLhuqNuIHNhbyBob8OgbiB0b8OgbiDEkeG7mWMgbOG6rXAgY+G7p2Egb2JqXG4gKi9cbmV4cG9ydCBjb25zdCBjbG9uZURlZXAgPSA8VCA9IGFueT4oZGF0YTogYW55LCBvcHRpb25zID0geyBpZ25vcmVTaWduYWw6IGZhbHNlIH0sIHNlZW4gPSBuZXcgV2Vha01hcCgpKTogVCA9PiB7XG4gIGlmIChkYXRhID09PSBudWxsIHx8ICh0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcgJiYgIWlzU2lnbmFsKGRhdGEpKSkge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgaWYgKHNlZW4uaGFzKGRhdGEpKSB7XG4gICAgcmV0dXJuIHNlZW4uZ2V0KGRhdGEpO1xuICB9XG5cbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBIdHRwUGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBVdGlsc0h0dHBQYXJhbXNSZXF1ZXN0KHVuZGVmaW5lZCwgZGF0YSkgYXMgVDtcbiAgfVxuXG4gIGlmIChkYXRhIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiBuZXcgRGF0ZShkYXRhLmdldFRpbWUoKSkgYXMgVDtcbiAgfVxuXG4gIGlmIChkYXlqcy5pc0RheWpzKGRhdGEpKSB7XG4gICAgcmV0dXJuIGdldERheWpzKHsgZGF0ZTogZGF0YS52YWx1ZU9mKCkgfSkgYXMgVDtcbiAgfVxuXG4gIGlmIChkYXRhIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoZGF0YS5zb3VyY2UsIGRhdGEuZmxhZ3MpIGFzIFQ7XG4gIH1cblxuICBpZiAoZGF0YSBpbnN0YW5jZW9mIE1hcCkge1xuICAgIGNvbnN0IG1hcENvcHkgPSBuZXcgTWFwKCk7XG4gICAgc2Vlbi5zZXQoZGF0YSwgbWFwQ29weSk7XG4gICAgZGF0YS5mb3JFYWNoKCh2YWwsIGtleSkgPT4ge1xuICAgICAgbWFwQ29weS5zZXQoY2xvbmVEZWVwKGtleSwgb3B0aW9ucywgc2VlbiksIGNsb25lRGVlcCh2YWwsIG9wdGlvbnMsIHNlZW4pKTtcbiAgICB9KTtcbiAgICByZXR1cm4gbWFwQ29weSBhcyBUO1xuICB9XG5cbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBTZXQpIHtcbiAgICBjb25zdCBzZXRDb3B5ID0gbmV3IFNldCgpO1xuICAgIHNlZW4uc2V0KGRhdGEsIHNldENvcHkpO1xuICAgIGRhdGEuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICBzZXRDb3B5LmFkZChjbG9uZURlZXAodmFsLCBvcHRpb25zLCBzZWVuKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHNldENvcHkgYXMgVDtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgc2Vlbi5zZXQoZGF0YSwgZGF0YS5tYXAoKGl0ZW0pID0+IGNsb25lRGVlcChpdGVtLCBvcHRpb25zLCBzZWVuKSkgYXMgVCk7XG4gICAgcmV0dXJuIHNlZW4uZ2V0KGRhdGEpIGFzIFQ7XG4gIH1cblxuICBpZiAoZGF0YSBpbnN0YW5jZW9mIEZpbGUgfHwgZGF0YSBpbnN0YW5jZW9mIEJsb2IgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRhdGEpID09PSAnW29iamVjdCBGaWxlXScpIHtcbiAgICByZXR1cm4gZGF0YSBhcyBUO1xuICB9XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgVGVtcGxhdGVSZWYgfHwgZGF0YSBpbnN0YW5jZW9mIEVsZW1lbnRSZWYgfHwgZGF0YSBpbnN0YW5jZW9mIEVsZW1lbnQgfHwgZGF0YSBpbnN0YW5jZW9mIFByb21pc2UgfHwgZGF0YSBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICByZXR1cm4gZGF0YSBhcyBUO1xuICB9XG4gIGlmIChpc1NpZ25hbChkYXRhKSkge1xuICAgIGlmIChvcHRpb25zPy5pZ25vcmVTaWduYWwpIHtcbiAgICAgIHJldHVybiBkYXRhIGFzIFQ7XG4gICAgfVxuICAgIHNlZW4uc2V0KGRhdGEsIHNpZ25hbChjbG9uZURlZXAoZGF0YSgpLCBvcHRpb25zLCBzZWVuKSkpO1xuICAgIHJldHVybiBzZWVuLmdldChkYXRhKSBhcyBUO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gIHNlZW4uc2V0KGRhdGEsIHJlc3VsdCk7XG4gIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGRhdGFba2V5XTtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBIdHRwUGFyYW1zKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG5ldyBVdGlsc0h0dHBQYXJhbXNSZXF1ZXN0KHVuZGVmaW5lZCwgdmFsdWUpIGFzIFQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGRheWpzLmlzRGF5anModmFsdWUpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IGdldERheWpzKHsgZGF0ZTogdmFsdWUudmFsdWVPZigpIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmIHx8IHZhbHVlIGluc3RhbmNlb2YgRWxlbWVudFJlZiB8fCB2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnQgfHwgdmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlIHx8IHZhbHVlIGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gY2xvbmVEZWVwKHZhbHVlLCBvcHRpb25zLCBzZWVuKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0IGFzIFQ7XG59O1xuXG4vKipcbiAqIENodXnhu4NuIMSR4buVaSBt4buZdCBt4bqjbmcgY8OhYyDEkeG7kWkgdMaw4bujbmcgdGjDoG5oIG3hu5l0IMSR4buRaSB0xrDhu6NuZyB24bubaSBraMOzYSDEkcaw4bujYyBjaOG7iSDEkeG7i25oXG4gKiBAcGFyYW0gZGF0YSBN4bqjbmcgY8OhYyDEkeG7kWkgdMaw4bujbmcgY+G6p24gY2h1eeG7g24gxJHhu5VpXG4gKiBAcGFyYW0ga2V5IFTDqm4gdGh14buZYyB0w61uaCDEkcaw4bujYyBz4butIGThu6VuZyBsw6BtIGtow7NhIHRyb25nIMSR4buRaSB0xrDhu6NuZyBr4bq/dCBxdeG6o1xuICogQHJldHVybnMgxJDhu5FpIHTGsOG7o25nIHbhu5tpIGPDoWMgZ2nDoSB0cuG7iyB04burIG3huqNuZyDEkcaw4bujYyDEkcOhbmgga2V5IHRoZW8gdGh14buZYyB0w61uaCDEkcOjIGNo4buJIMSR4buLbmhcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBkYXRhID0gW1xuICogICB7IGlkOiAxLCBuYW1lOiAnSm9obicgfSxcbiAqICAgeyBpZDogMiwgbmFtZTogJ0phbmUnIH1cbiAqIF07XG4gKiBrZXlCeShkYXRhLCAnaWQnKTtcbiAqIC8vIEvhur90IHF14bqjOiB7XG4gKiAvLyAgICcxJzogeyBpZDogMSwgbmFtZTogJ0pvaG4nIH0sXG4gKiAvLyAgICcyJzogeyBpZDogMiwgbmFtZTogJ0phbmUnIH1cbiAqIC8vIH1cbiAqL1xuZXhwb3J0IGNvbnN0IGtleUJ5ID0gKGRhdGE6IEFycmF5PFRZUEVfT0JKRUNUPiwga2V5OiBzdHJpbmcpOiBUWVBFX09CSkVDVCA9PiB7XG4gIGlmICghZGF0YSB8fCAhZGF0YS5sZW5ndGggfHwgIWtleSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICByZXR1cm4gZGF0YS5yZWR1Y2UoKGRpciwgbmV4dEl0ZW0pID0+IHtcbiAgICBjb25zdCB2YWx1ZU9mS2V5ID0gZ2V0KG5leHRJdGVtLCBrZXkpO1xuICAgIGlmICh0eXBlb2YgdmFsdWVPZktleSAhPT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlT2ZLZXkgIT09ICdudW1iZXInICYmIHR5cGVvZiB2YWx1ZU9mS2V5ICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiBkaXI7XG4gICAgfVxuICAgIGlmICghT2JqZWN0LmtleXMoZGlyKS5pbmNsdWRlcyhgJHt2YWx1ZU9mS2V5fWApKSB7XG4gICAgICBkaXJbYCR7dmFsdWVPZktleX1gXSA9IG5leHRJdGVtO1xuICAgIH1cbiAgICByZXR1cm4gZGlyO1xuICB9LCB7fSk7XG59O1xuXG4vKipcbiAqIE5ow7NtIGPDoWMgxJHhu5FpIHTGsOG7o25nIHRyb25nIG3hu5l0IG3huqNuZyB0aMOgbmggY8OhYyBuaMOzbSBk4buxYSB0csOqbiBt4buZdCB0aHXhu5ljIHTDrW5oIGPhu6UgdGjhu4NcbiAqIEBwYXJhbSBkYXRhIE3huqNuZyBjw6FjIMSR4buRaSB0xrDhu6NuZyBj4bqnbiBuaMOzbVxuICogQHBhcmFtIGtleSBUw6puIHRodeG7mWMgdMOtbmggxJHGsOG7o2Mgc+G7rSBk4bulbmcgbMOgbSBraMOzYSBuaMOzbVxuICogQHJldHVybnMgxJDhu5FpIHTGsOG7o25nIHbhu5tpIGPDoWMgZ2nDoSB0cuG7iyB04burIG3huqNuZyDEkcaw4bujYyBuaMOzbSB0aGVvIHRodeG7mWMgdMOtbmggxJHDoyBjaOG7iSDEkeG7i25oXG4gKiBAZXhhbXBsZVxuICogY29uc3QgZGF0YSA9IFtcbiAqICAgeyBpZDogMSwgbmFtZTogJ0pvaG4nIH0sXG4gKiAgIHsgaWQ6IDIsIG5hbWU6ICdKYW5lJyB9LFxuICogICB7IGlkOiAxLCBuYW1lOiAnSm9obicgfVxuICogXTtcbiAqIGdyb3VwQnkoZGF0YSwgJ2lkJyk7XG4gKiAvLyBL4bq/dCBxdeG6ozoge1xuICogLy8gICAnMSc6IFtcbiAqIC8vICAgICB7IGlkOiAxLCBuYW1lOiAnSm9obicgfSxcbiAqIC8vICAgICB7IGlkOiAxLCBuYW1lOiAnSm9obicgfVxuICogLy8gICBdLFxuICogLy8gICAnMic6IFtcbiAqIC8vICAgICB7IGlkOiAyLCBuYW1lOiAnSmFuZScgfVxuICogLy8gfVxuICovXG5leHBvcnQgY29uc3QgZ3JvdXBCeSA9IChkYXRhOiBBcnJheTxUWVBFX09CSkVDVD4sIGtleTogc3RyaW5nKTogVFlQRV9PQkpFQ1QgPT4ge1xuICBpZiAoIWRhdGEgfHwgIWRhdGEubGVuZ3RoIHx8ICFPYmplY3Qua2V5cyhnZXQoZGF0YSwgJzAnKSkubGVuZ3RoIHx8ICFrZXkpIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgcmV0dXJuIGRhdGEucmVkdWNlKChkaXIsIG5leHRJdGVtKSA9PiB7XG4gICAgY29uc3QgdmFsdWVPZktleSA9IGdldChuZXh0SXRlbSwga2V5KTtcbiAgICBpZiAodHlwZW9mIHZhbHVlT2ZLZXkgIT09ICdzdHJpbmcnICYmIHR5cGVvZiB2YWx1ZU9mS2V5ICE9PSAnbnVtYmVyJyAmJiB0eXBlb2YgdmFsdWVPZktleSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gZGlyO1xuICAgIH1cbiAgICBpZiAoIU9iamVjdC5rZXlzKGRpcikuaW5jbHVkZXMoYCR7dmFsdWVPZktleX1gKSkge1xuICAgICAgZGlyW2Ake3ZhbHVlT2ZLZXl9YF0gPSBbXTtcbiAgICB9XG4gICAgZGlyW2Ake3ZhbHVlT2ZLZXl9YF0ucHVzaChuZXh0SXRlbSk7XG4gICAgcmV0dXJuIGRpcjtcbiAgfSwge30pO1xufTtcblxuLyoqXG4gKiBU4bqhbyBt4buZdCBt4bqjbmcgY8OhYyBz4buRIHThu6sgZ2nDoSB0cuG7iyBi4bqvdCDEkeG6p3UgxJHhur9uIGdpw6EgdHLhu4sga+G6v3QgdGjDumMgduG7m2kgYsaw4bubYyBuaOG6o3kgdMO5eSBjaOG7jW5cbiAqIEBwYXJhbSBzdGFydCBHacOhIHRy4buLIGLhuq90IMSR4bqndSBj4bunYSBkw6N5IHPhu5EuIE7hur91IGNo4buJIGPDsyBt4buZdCB0aGFtIHPhu5EsIMSRw6J5IHPhur0gbMOgIGdpw6EgdHLhu4sga+G6v3QgdGjDumMgdsOgIGdpw6EgdHLhu4sgYuG6r3QgxJHhuqd1IHPhur0gbMOgIDBcbiAqIEBwYXJhbSBlbmQgR2nDoSB0cuG7iyBr4bq/dCB0aMO6YyBj4bunYSBkw6N5IHPhu5EgKHTDuXkgY2jhu41uKVxuICogQHBhcmFtIHN0ZXAgQsaw4bubYyBuaOG6o3kgZ2nhu69hIGPDoWMgc+G7kSB0cm9uZyBkw6N5ICh0w7l5IGNo4buNbikuIE3hurdjIMSR4buLbmggbMOgIDEgbuG6v3UgZW5kID4gc3RhcnQsIC0xIG7hur91IGVuZCA8IHN0YXJ0XG4gKiBAcmV0dXJucyBN4bqjbmcgY8OhYyBz4buRIHThu6sgc3RhcnQgxJHhur9uIGVuZCB24bubaSBixrDhu5tjIG5o4bqjeSBzdGVwXG4gKiBAZXhhbXBsZVxuICogcmFuZ2UoNCk7ICAgICAgLy8gWzAsIDEsIDIsIDNdXG4gKiByYW5nZSgxLCA1KTsgICAvLyBbMSwgMiwgMywgNF1cbiAqIHJhbmdlKDAsIDIwLCA1KTsgLy8gWzAsIDUsIDEwLCAxNV1cbiAqIHJhbmdlKDUsIDIpOyAgIC8vIFs1LCA0LCAzXVxuICovXG5leHBvcnQgY29uc3QgcmFuZ2UgPSAoc3RhcnQ6IG51bWJlciwgZW5kPzogbnVtYmVyLCBzdGVwPzogbnVtYmVyKTogQXJyYXk8bnVtYmVyPiA9PiB7XG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPT09IG51bGwpIHtcbiAgICBlbmQgPSBzdGFydDtcbiAgICBzdGFydCA9IDA7XG4gIH1cblxuICBpZiAoIXN0ZXApIHtcbiAgICBzdGVwID0gZW5kIDwgMCA/IC0xIDogMTtcbiAgfVxuXG4gIGlmIChlbmQgPCBzdGFydCAmJiBzdGVwID4gMCkge1xuICAgIHN0ZXAgKj0gLTE7XG4gIH1cblxuICBjb25zdCB2YWx1ZVN0YXJ0QnlTdGVwID0gc3RlcCArIHN0YXJ0O1xuICBjb25zdCBkaXJlY3Rpb24gPSBzdGFydCA8IGVuZCA/ICdhc2MnIDogJ2Rlc2MnO1xuICBpZiAoKGRpcmVjdGlvbiA9PT0gJ2FzYycgJiYgKHZhbHVlU3RhcnRCeVN0ZXAgPCBzdGFydCB8fCB2YWx1ZVN0YXJ0QnlTdGVwID4gZW5kKSkgfHwgKGRpcmVjdGlvbiA9PT0gJ2Rlc2MnICYmICh2YWx1ZVN0YXJ0QnlTdGVwID4gc3RhcnQgfHwgdmFsdWVTdGFydEJ5U3RlcCA8IGVuZCkpKSB7XG4gICAgcmV0dXJuIFtzdGFydF07XG4gIH1cblxuICBjb25zdCBhcnIgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBNYXRoLmFicyhlbmQgLSBzdGFydCk7IGluZGV4KyspIHtcbiAgICBsZXQgdmFsdWUgPSBzdGFydCArIGluZGV4ICogc3RlcDtcbiAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgIHZhbHVlID0gc3RhcnQ7XG4gICAgfVxuXG4gICAgaWYgKChkaXJlY3Rpb24gPT09ICdhc2MnICYmICh2YWx1ZSA8IHN0YXJ0IHx8IHZhbHVlID4gZW5kKSkgfHwgKGRpcmVjdGlvbiA9PT0gJ2Rlc2MnICYmICh2YWx1ZSA+IHN0YXJ0IHx8IHZhbHVlIDwgZW5kKSkpIHtcbiAgICAgIHJldHVybiBhcnI7XG4gICAgfVxuXG4gICAgYXJyLnB1c2godmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIGFycjtcbn07XG5cbi8qKlxuICogU28gc8OhbmggaGFpIGdpw6EgdHLhu4sgYuG6pXQga+G7syBjw7MgYuG6sW5nIG5oYXUgaGF5IGtow7RuZ1xuICogQHBhcmFtIHZhbHVlMSBHacOhIHRy4buLIHRo4bupIG5o4bqldCBj4bqnbiBzbyBzw6FuaFxuICogQHBhcmFtIHZhbHVlMiBHacOhIHRy4buLIHRo4bupIGhhaSBj4bqnbiBzbyBzw6FuaFxuICogQHBhcmFtIGV4YWN0bHlQb3NpdGlvbiBDw7Mgc28gc8OhbmggY2jDrW5oIHjDoWMgduG7iyB0csOtIGPDoWMgcGjhuqduIHThu60gdHJvbmcgbeG6o25nIGhheSBraMO0bmdcbiAqIEByZXR1cm5zIHRydWUgbuG6v3UgaGFpIGdpw6EgdHLhu4sgYuG6sW5nIG5oYXUsIGZhbHNlIG7hur91IGtow7RuZyBi4bqxbmcgbmhhdVxuICogQGV4YW1wbGVcbiAqIGlzRXF1YWwoWzEsMiwzXSwgWzEsMiwzXSk7IC8vIHRydWVcbiAqIGlzRXF1YWwoWzEsMiwzXSwgWzMsMiwxXSk7IC8vIHRydWUga2hpIGV4YWN0bHlQb3NpdGlvbiA9IGZhbHNlXG4gKiBpc0VxdWFsKFsxLDIsM10sIFszLDIsMV0pOyAvLyBmYWxzZSBraGkgZXhhY3RseVBvc2l0aW9uID0gdHJ1ZVxuICogaXNFcXVhbCh7YToxfSwge2E6MX0pOyAvLyB0cnVlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0VxdWFsID0gKFxuICB2YWx1ZTE6IGFueSxcbiAgdmFsdWUyOiBhbnksXG4gIG9wdGlvbnM/OiB7XG4gICAgZXhhY3RseVBvc2l0aW9uPzogYm9vbGVhbjtcbiAgICBpZ25vcmVFeGFjdGx5RGF0YVR5cGU/OiBib29sZWFuO1xuICB9XG4pOiBib29sZWFuID0+IHtcbiAgY29uc3QgeyBleGFjdGx5UG9zaXRpb24gPSBmYWxzZSwgaWdub3JlRXhhY3RseURhdGFUeXBlID0gZmFsc2UgfSA9IG9wdGlvbnMgfHwge307XG5cbiAgaWYgKHZhbHVlMSA9PT0gdmFsdWUyIHx8ICh2YWx1ZTEgPT09IG51bGwgJiYgdmFsdWUyID09PSBudWxsKSB8fCAodmFsdWUxID09PSB1bmRlZmluZWQgJiYgdmFsdWUyID09PSB1bmRlZmluZWQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoaWdub3JlRXhhY3RseURhdGFUeXBlKSB7XG4gICAgcmV0dXJuIGlzRXF1YWwoaXNOaWwodmFsdWUxKSA/IHVuZGVmaW5lZCA6IGAke3ZhbHVlMX1gLCBpc05pbCh2YWx1ZTIpID8gdW5kZWZpbmVkIDogYCR7dmFsdWUyfWApO1xuICB9XG5cbiAgLy8gSGFuZGxlIHNpZ25hbHNcbiAgd2hpbGUgKGlzU2lnbmFsKHZhbHVlMSkpIHtcbiAgICB2YWx1ZTEgPSB2YWx1ZTEoKTtcbiAgfVxuICB3aGlsZSAoaXNTaWduYWwodmFsdWUyKSkge1xuICAgIHZhbHVlMiA9IHZhbHVlMigpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZTEgIT09ICdvYmplY3QnIHx8IHR5cGVvZiB2YWx1ZTIgIT09ICdvYmplY3QnIHx8IChBcnJheS5pc0FycmF5KHZhbHVlMSkgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUyKSkgfHwgKCFBcnJheS5pc0FycmF5KHZhbHVlMSkgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZTIpKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlMSkpIHtcbiAgICBpZiAodmFsdWUxLmxlbmd0aCAhPT0gdmFsdWUyLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIWV4YWN0bHlQb3NpdGlvbikge1xuICAgICAgcmV0dXJuICF2YWx1ZTEuc29tZSgoaXRlbSkgPT4gIXZhbHVlMi5pbmNsdWRlcyhpdGVtKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICF2YWx1ZTEuc29tZSgoaXRlbSwgaW5kZXgpID0+ICFpc0VxdWFsKGl0ZW0sIHZhbHVlMltpbmRleF0sIG9wdGlvbnMpKTtcbiAgfVxuXG4gIGlmIChPYmplY3Qua2V5cyh2YWx1ZTEpLmxlbmd0aCAhPT0gT2JqZWN0LmtleXModmFsdWUyKS5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuICFPYmplY3Qua2V5cyh2YWx1ZTEpLnNvbWUoKGtleSkgPT4gIWlzRXF1YWwodmFsdWUxW2tleV0sIHZhbHVlMltrZXldLCBvcHRpb25zKSk7XG59O1xuXG4vKipcbiAqIExv4bqhaSBi4buPIGPDoWMgcGjhuqduIHThu60gdHLDuW5nIGzhurdwIHRyb25nIG3huqNuZyBk4buxYSB0csOqbiBt4buZdCB0aHXhu5ljIHTDrW5oIGNo4buJIMSR4buLbmhcbiAqIEBwYXJhbSBkYXRhIE3huqNuZyBk4buvIGxp4buHdSBj4bqnbiB44butIGzDvVxuICogQHBhcmFtIGtleSBUw6puIHRodeG7mWMgdMOtbmggZMO5bmcgxJHhu4Mgc28gc8OhbmggdHLDuW5nIGzhurdwLiBO4bq/dSBraMO0bmcgY8OzIGtleSB0aMOsIHNvIHPDoW5oIHRy4buxYyB0aeG6v3AgZ2nDoSB0cuG7i1xuICogQHJldHVybnMgTeG6o25nIG3hu5tpIGNo4bupYSBjw6FjIHBo4bqnbiB04butIGtow7RuZyB0csO5bmcgbOG6t3BcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBhcnIgPSBbXG4gKiAgIHsgaWQ6IDEsIG5hbWU6ICdBJyB9LFxuICogICB7IGlkOiAyLCBuYW1lOiAnQicgfSxcbiAqICAgeyBpZDogMSwgbmFtZTogJ0MnIH1cbiAqIF07XG4gKiB1bmlxQnkoYXJyLCAnaWQnKTsgLy8gW3sgaWQ6IDEsIG5hbWU6ICdBJyB9LCB7IGlkOiAyLCBuYW1lOiAnQicgfV1cbiAqXG4gKiBjb25zdCBudW1iZXJzID0gWzEsIDIsIDIsIDMsIDNdO1xuICogdW5pcUJ5KG51bWJlcnMpOyAvLyBbMSwgMiwgM11cbiAqXG4gKiBjb25zdCBudW1iZXJzU2lnbmFsID0gW3NpZ25hbCgxKSwgc2lnbmFsKDIpLCBzaWduYWwoMyksIHNpZ25hbCgyKSwgc2lnbmFsKDUpLCBzaWduYWwoNCksIHNpZ25hbCgxKSwgc2lnbmFsKDYpLCBzaWduYWwoNyksIHNpZ25hbCg2KV07XG4gKiB1bmlxQnkobnVtYmVyc1NpZ25hbCk7IC8vIFtzaWduYWwoMSksIHNpZ25hbCgyKSwgc2lnbmFsKDMpLCBzaWduYWwoNSksIHNpZ25hbCg0KSwgc2lnbmFsKDYpLCBzaWduYWwoNyldXG4gKi9cbmV4cG9ydCBjb25zdCB1bmlxQnkgPSA8VD4oZGF0YTogQXJyYXk8VD4sIGtleT86IHN0cmluZyk6IEFycmF5PFQ+ID0+IHtcbiAgaWYgKCFrZXkgfHwgIWRhdGE/Lmxlbmd0aCB8fCB0eXBlb2YgZ2V0KGRhdGEsICcwJykgIT09ICdvYmplY3QnKSB7XG4gICAgLy8gWOG7rSBsw70gbeG6o25nIGNo4bupYSBzaWduYWwgdmFsdWVzXG4gICAgaWYgKGRhdGFbMF0gJiYgaXNTaWduYWwoZGF0YVswXSkpIHtcbiAgICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgICAgcmV0dXJuIGRhdGEuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gYCR7Z2V0KGl0ZW0sICcnKX1gO1xuICAgICAgICBpZiAoc2Vlbi5oYXModmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHNlZW4uYWRkKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gWOG7rSBsw70gbeG6o25nIHByaW1pdGl2ZSB2YWx1ZXNcbiAgICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KGRhdGEpKTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFVbmlxdWUgPSBrZXlCeShkYXRhIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIGFueT4+LCBrZXkpO1xuXG4gIHJldHVybiBPYmplY3Qua2V5cyhkYXRhVW5pcXVlKS5tYXAoKGtleSkgPT4gZGF0YVVuaXF1ZVtrZXldKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUludGVyZmFjZSA9IChvYmo6IGFueSwgaW50ZXJmYWNlTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgZ2VuZXJhdGVUeXBlID0gKHZhbHVlOiBhbnkpOiBzdHJpbmcgPT4ge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuICdudWxsJztcbiAgICB9XG4gICAgY29uc3QgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcblxuICAgIGlmICh0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuICdzdHJpbmcnO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiAnbnVtYmVyJztcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuICdib29sZWFuJztcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gJ2FueSc7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgcmV0dXJuICdEYXRlJztcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIHJldHVybiAnUmVnRXhwJztcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuICdBcnJheTxhbnk+JztcbiAgICAgIH1cbiAgICAgIHJldHVybiBgQXJyYXk8JHtnZW5lcmF0ZVR5cGUodmFsdWVbMF0pfT5gO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgbGV0IGludGVyZmFjZVN0ciA9ICd7XFxuJztcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHZhbHVlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZVR5cGUgPSBnZW5lcmF0ZVR5cGUodmFsdWVba2V5XSk7XG4gICAgICAgICAgaW50ZXJmYWNlU3RyICs9IGAgICR7a2V5fTogJHt2YWx1ZVR5cGV9O1xcbmA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGludGVyZmFjZVN0ciArPSAnfSc7XG4gICAgICByZXR1cm4gaW50ZXJmYWNlU3RyO1xuICAgIH1cblxuICAgIHJldHVybiAnYW55JztcbiAgfTtcblxuICBjb25zdCBpbnRlcmZhY2VTdHIgPSBgaW50ZXJmYWNlICR7aW50ZXJmYWNlTmFtZX0gJHtnZW5lcmF0ZVR5cGUob2JqKX1gO1xuICByZXR1cm4gaW50ZXJmYWNlU3RyO1xufTtcbiJdfQ==
640
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMtdWkvdXRpbHMvc3JjL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQWtCLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakUsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDbEMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWhFLHNDQUFzQztBQUN0Qzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxLQUFjLEVBQUUsT0FBMEMsRUFBNkIsRUFBRTtJQUM3RyxJQUFJLENBQUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLENBQUM7UUFDakMsS0FBSyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsQ0FBQztBQUMvQyxDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxLQUFjLEVBQUUsT0FBaUksRUFBc0MsRUFBRTtJQUMvTSxJQUFJLENBQUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLENBQUM7UUFDakMsS0FBSyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxJQUFJLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO1FBQzlCLE9BQU8saUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUNELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO0lBQzFKLElBQUksT0FBTyxFQUFFLGtCQUFrQixFQUFFLENBQUM7UUFDaEMsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUNELE9BQU8sWUFBWSxJQUFJLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2xELENBQUMsQ0FBQztBQUVGOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLGlCQUFpQixHQUFHLENBQVcsS0FBYyxFQUFjLEVBQUU7SUFDakUsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQ3pHLENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFFSCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBSSxLQUFRLEVBQUUsT0FBNkYsRUFBMkIsRUFBRTtJQUM5SixPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsQyxDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLENBQUMsS0FBYyxFQUFFLE9BQTZGLEVBQXNDLEVBQUU7SUFDM0ssSUFBSSxDQUFDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxDQUFDO1FBQ2pDLEtBQUssR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3RFLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELElBQUksT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sS0FBSyxLQUFLLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBQ0QsSUFBSSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQztRQUMvQixPQUFPLEtBQUssS0FBSyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUNELE9BQU8sS0FBSyxLQUFLLEVBQUUsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ3JDLENBQUMsQ0FBQztBQUVGOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLENBQUksT0FBNEIsRUFBRSxTQUFnQyxFQUFLLEVBQUU7SUFDN0YsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3RFLE9BQU8sT0FBWSxDQUFDO0lBQ3RCLENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRyxFQUFPLENBQUM7SUFFdkIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUNuQyxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUMzQixHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMvQixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4REc7QUFDSCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBVSxHQUFRLEVBQUUsSUFBdUIsRUFBRSxlQUFvQixTQUFTLEVBQUUscUJBQStCLEVBQUssRUFBRTtJQUNuSSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2YsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDckIsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUNELElBQUksSUFBSSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sR0FBUSxDQUFDO0lBQ2xCLENBQUM7SUFDRCxJQUFJLEdBQUcsWUFBWSxVQUFVLEVBQUUsQ0FBQztRQUM5QixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLElBQUksWUFBWSxDQUFNLENBQUM7SUFDbkQsQ0FBQztJQUNELElBQUksR0FBRyxZQUFZLE9BQU8sRUFBRSxDQUFDO1FBQzNCLE9BQU8sR0FBRyxDQUFDLElBQXFCLENBQU0sQ0FBQztJQUN6QyxDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDL0IsQ0FBQyxDQUFDLElBQUk7UUFDTixDQUFDLENBQUMsSUFBSTthQUNELE9BQU8sQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDO2FBQzNCLEtBQUssQ0FBQyxHQUFHLENBQUM7YUFDVixNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLEtBQUssTUFBTSxLQUFLLElBQUksS0FBSyxFQUFFLENBQUM7UUFDMUIsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLElBQUksR0FBRyxZQUFZLG1CQUFtQixFQUFFLENBQUM7WUFDdkMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFnQyxDQUFNLENBQUM7WUFDakQsU0FBUztRQUNYLENBQUM7UUFFRCxJQUFJLEdBQUcsWUFBWSxXQUFXLEVBQUUsQ0FBQztZQUMvQixHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQXdCLENBQU0sQ0FBQztZQUN6QyxTQUFTO1FBQ1gsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xFLE9BQU8sWUFBWSxDQUFDO1FBQ3RCLENBQUM7UUFFRCxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVqRixHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ1osQ0FBQztJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFVLEdBQVEsRUFBRSxJQUF1QixFQUFFLEtBQVUsRUFBRSxPQUF5RixFQUFLLEVBQUU7SUFDMUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLE9BQU8sR0FBRyxFQUFFLEtBQUssUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUN4RyxNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELElBQUksR0FBRyxZQUFZLFVBQVUsRUFBRSxDQUFDO1FBQzlCLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLEtBQUssQ0FBTSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztRQUNuQyxDQUFDLENBQUMsSUFBSTtRQUNOLENBQUMsQ0FBQyxJQUFJO2FBQ0QsT0FBTyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUM7YUFDN0IsS0FBSyxDQUFDLEdBQUcsQ0FBQzthQUNWLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFNUIsSUFBSSxrQkFBa0IsR0FBUSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDMUQsSUFBSSxjQUFjLEdBQUcsR0FBRyxDQUFDO0lBRXpCLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDL0IsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLE9BQU8sa0JBQWtCLENBQUMsR0FBRyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN4SCxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNyQyxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3JDLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDbkMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsOEJBQThCLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLCtCQUErQixJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUMzSixDQUFDO1lBQ0gsQ0FBQztZQUNELGtCQUFrQixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDO1lBQ3hFLGNBQWMsR0FBRyxrQkFBa0IsQ0FBQztZQUNwQyxrQkFBa0IsR0FBRyxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUM7WUFDOUYsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLE9BQU8sa0JBQWtCLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDM0MsT0FBTztRQUNULENBQUM7UUFFRCwrQkFBK0I7UUFDL0IsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sVUFBVSxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sa0JBQWtCLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRWhELElBQUksa0JBQWtCLElBQUksQ0FBQyxPQUFPLFVBQVUsRUFBRSxLQUFLLFFBQVEsSUFBSSxVQUFVLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3JGLFVBQWtDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNFLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUM1QixjQUFzQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO2dCQUMzRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzVCLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztvQkFDNUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDcEIsQ0FBQztnQkFFRCxJQUFJLGtCQUFrQixFQUFFLENBQUM7b0JBQ3RCLFVBQWtDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM3RSxDQUFDO2dCQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUN4QixPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztnQkFDbkIsQ0FBQztnQkFDRCxPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztZQUNyQixDQUFDLENBQUMsQ0FBQztZQUNILE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQ3RCLFVBQWtDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNFLE9BQU87UUFDVCxDQUFDO1FBQ0Qsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ2xDLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBVSxJQUFTLEVBQUUsT0FBTyxHQUFHLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksR0FBRyxJQUFJLE9BQU8sRUFBRSxFQUFLLEVBQUU7SUFDMUcsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUM5RixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksSUFBSSxZQUFZLFVBQVUsRUFBRSxDQUFDO1FBQy9CLE9BQU8sSUFBSSxzQkFBc0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFNLENBQUM7SUFDMUQsQ0FBQztJQUVELElBQUksSUFBSSxZQUFZLElBQUksRUFBRSxDQUFDO1FBQ3pCLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFNLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFNLENBQUM7SUFDakQsQ0FBQztJQUVELElBQUksSUFBSSxZQUFZLE1BQU0sRUFBRSxDQUFDO1FBQzNCLE9BQU8sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFNLENBQUM7SUFDbEQsQ0FBQztJQUVELElBQUksSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDNUUsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE9BQVksQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDeEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDbkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxPQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFNLENBQUMsQ0FBQztRQUN4RSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFNLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUM3QixPQUFPLElBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNuQixJQUFJLE9BQU8sRUFBRSxZQUFZLEVBQUUsQ0FBQztZQUMxQixPQUFPLElBQVMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQU0sQ0FBQztJQUM3QixDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQXdCLEVBQUUsQ0FBQztJQUN2QyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN2QixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QixJQUFJLEtBQUssWUFBWSxVQUFVLEVBQUUsQ0FBQztZQUNoQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxzQkFBc0IsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFNLENBQUM7WUFDaEUsU0FBUztRQUNYLENBQUM7UUFFRCxJQUFJLEtBQUssWUFBWSxJQUFJLEVBQUUsQ0FBQztZQUMxQixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFNLENBQUM7WUFDN0MsU0FBUztRQUNYLENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6QixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFNLENBQUM7WUFDdkQsU0FBUztRQUNYLENBQUM7UUFFRCxJQUFJLEtBQUssWUFBWSxNQUFNLEVBQUUsQ0FBQztZQUM1QixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFNLENBQUM7WUFDekQsU0FBUztRQUNYLENBQUM7UUFDRCxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDN0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUNwQixTQUFTO1FBQ1gsQ0FBQztRQUVELElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3BELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoRCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sTUFBVyxDQUFDO0FBQ3JCLENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDLElBQXdCLEVBQUUsR0FBVyxFQUFlLEVBQUU7SUFDMUUsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNsQyxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUU7UUFDbkMsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN0QyxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLElBQUksT0FBTyxVQUFVLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEcsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ2hELEdBQUcsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDO1FBQ2xDLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNULENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxDQUFDLElBQXdCLEVBQUUsR0FBVyxFQUFlLEVBQUU7SUFDNUUsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN6RSxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUU7UUFDbkMsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN0QyxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLElBQUksT0FBTyxVQUFVLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEcsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ2hELEdBQUcsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzVCLENBQUM7UUFDRCxHQUFHLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwQyxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNULENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQUMsS0FBYSxFQUFFLEdBQVksRUFBRSxJQUFhLEVBQWlCLEVBQUU7SUFDakYsSUFBSSxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUN0QyxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ1osS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNaLENBQUM7SUFFRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDVixJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxHQUFHLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM1QixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFDO0lBQ3RDLE1BQU0sU0FBUyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQy9DLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxJQUFJLGdCQUFnQixHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxJQUFJLGdCQUFnQixHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNwSyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUVELE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7SUFFaEMsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDM0QsSUFBSSxLQUFLLEdBQUcsS0FBSyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDakMsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDaEIsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNoQixDQUFDO1FBRUQsSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN4SCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUM7UUFFRCxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLENBQ3JCLE1BQVcsRUFDWCxNQUFXLEVBQ1gsT0FJQyxFQUNRLEVBQUU7SUFDWCxpQkFBaUI7SUFDakIsSUFBSSxDQUFDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QyxNQUFNLEdBQUcscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUNELE1BQU0sRUFBRSxlQUFlLEdBQUcsS0FBSyxFQUFFLHFCQUFxQixHQUFHLEtBQUssRUFBRSxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7SUFFakYsSUFBSSxNQUFNLEtBQUssTUFBTSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksSUFBSSxNQUFNLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLE1BQU0sS0FBSyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ2hILE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQUkscUJBQXFCLEVBQUUsQ0FBQztRQUMxQixPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ25HLENBQUM7SUFFRCxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3ZLLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzFCLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDcEMsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBRUQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM5RCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUN6RixDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLENBQUksSUFBYyxFQUFFLEdBQVksRUFBWSxFQUFFO0lBQ2xFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNoRSxnQ0FBZ0M7UUFDaEMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakMsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztZQUUvQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDMUIsTUFBTSxLQUFLLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUNwQixPQUFPLEtBQUssQ0FBQztnQkFDZixDQUFDO2dCQUNELElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hCLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsOEJBQThCO1FBQzlCLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBa0MsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUVsRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvRCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEdBQVEsRUFBRSxhQUFxQixFQUFVLEVBQUU7SUFDM0UsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFVLEVBQVUsRUFBRTtRQUMxQyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNuQixPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7UUFFMUIsSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDdEIsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztRQUNELElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFDRCxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN2QixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsSUFBSSxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDekIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsSUFBSSxLQUFLLFlBQVksSUFBSSxFQUFFLENBQUM7WUFDMUIsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUVELElBQUksS0FBSyxZQUFZLE1BQU0sRUFBRSxDQUFDO1lBQzVCLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6QixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZCLE9BQU8sWUFBWSxDQUFDO1lBQ3RCLENBQUM7WUFDRCxPQUFPLFNBQVMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDNUMsQ0FBQztRQUVELElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3RCLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztZQUN6QixLQUFLLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUN4QixJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDckQsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUMzQyxZQUFZLElBQUksS0FBSyxHQUFHLEtBQUssU0FBUyxLQUFLLENBQUM7Z0JBQzlDLENBQUM7WUFDSCxDQUFDO1lBQ0QsWUFBWSxJQUFJLEdBQUcsQ0FBQztZQUNwQixPQUFPLFlBQVksQ0FBQztRQUN0QixDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDLENBQUM7SUFFRixNQUFNLFlBQVksR0FBRyxhQUFhLGFBQWEsSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUN2RSxPQUFPLFlBQVksQ0FBQztBQUN0QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgV3JpdGFibGVTaWduYWwsIGlzU2lnbmFsLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRZUEVfT0JKRUNUIH0gZnJvbSAnQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlcyc7XG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xuaW1wb3J0IHsgaXNEYW5nZXJvdXNPYmplY3QsIGlzUmV0dXJuQXNJc09iamVjdCB9IGZyb20gJy4vZGFuZ2Vyb3VzLW9iamVjdCc7XG5pbXBvcnQgeyBnZXREYXlqcyB9IGZyb20gJy4vZGF0ZSc7XG5pbXBvcnQgeyBVdGlsc0h0dHBQYXJhbXNSZXF1ZXN0IH0gZnJvbSAnLi9odHRwLXBhcmFtcyc7XG5pbXBvcnQgeyBjb252ZXJ0U2lnbmFsVG9PYmplY3QgfSBmcm9tICcuL3R3by13YXktc2lnbmFsLW9iamVjdCc7XG5cbi8qKkPDoWMgaMOgbSB0xrDGoW5nIHThu7EgdGjGsCB2aeG7h24gbG9kYXNoICovXG4vKipcbiAqIEtp4buDbSB0cmEgeGVtIG3hu5l0IGdpw6EgdHLhu4sgY8OzIHBo4bqjaSBsw6AgbnVsbCBob+G6t2MgdW5kZWZpbmVkIGhheSBraMO0bmdcbiAqIEBwYXJhbSB2YWx1ZSBHacOhIHRy4buLIGPhuqduIGtp4buDbSB0cmFcbiAqIEByZXR1cm5zIHRydWUgbuG6v3UgZ2nDoSB0cuG7iyBsw6AgbnVsbCBob+G6t2MgdW5kZWZpbmVkLCBmYWxzZSBu4bq/dSBraMO0bmdcbiAqIEBleGFtcGxlXG4gKiBpc05pbChudWxsKTsgLy8gdHJ1ZVxuICogaXNOaWwodW5kZWZpbmVkKTsgLy8gdHJ1ZVxuICogaXNOaWwoMCk7IC8vIGZhbHNlXG4gKiBpc05pbCgnaGVsbG8nKTsgLy8gZmFsc2VcbiAqL1xuZXhwb3J0IGNvbnN0IGlzTmlsID0gKHZhbHVlOiB1bmtub3duLCBvcHRpb25zPzogeyBpZ25vcmVVbldyYXBTaWduYWw/OiBib29sZWFuIH0pOiB2YWx1ZSBpcyBudWxsIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKCFvcHRpb25zPy5pZ25vcmVVbldyYXBTaWduYWwpIHtcbiAgICB2YWx1ZSA9IGNvbnZlcnRTaWduYWxUb09iamVjdCh2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIEtp4buDbSB0cmEgeGVtIG3hu5l0IGdpw6EgdHLhu4sgY8OzIHBo4bqjaSBsw6AgcuG7l25nIGhheSBraMO0bmdcbiAqIEBwYXJhbSB2YWx1ZSBHacOhIHRy4buLIGPhuqduIGtp4buDbSB0cmFcbiAqIEByZXR1cm5zIHRydWUgbuG6v3UgZ2nDoSB0cuG7iyBsw6AgbnVsbCwgcuG7l25nIGhv4bq3YyB1bmRlZmluZWQsIGZhbHNlIG7hur91IGtow7RuZ1xuICogQGV4YW1wbGVcbiAqIGlzRW1wdHkobnVsbCk7IC8vIHRydWVcbiAqIGlzRW1wdHkoJycpOyAvLyB0cnVlXG4gKiBpc0VtcHR5KHVuZGVmaW5lZCk7IC8vIHRydWVcbiAqIGlzRW1wdHkoe30pOyAvLyB0cnVlXG4gKiBpc0VtcHR5KFtdKTsgLy8gdHJ1ZVxuICogaXNFbXB0eShbMSwgMiwgM10pOyAvLyBmYWxzZVxuICogaXNFbXB0eSh7IGE6IDEgfSk7IC8vIGZhbHNlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0VtcHR5ID0gKHZhbHVlOiB1bmtub3duLCBvcHRpb25zPzogeyBpZ25vcmVDaGVja1R5cGVPYmo/OiBib29sZWFuOyBpZ25vcmVDaGVja0ZhbHN5PzogYm9vbGVhbjsgaWdub3JlVW5XcmFwU2lnbmFsPzogYm9vbGVhbjsgaWdub3JlQ2hlY2tTdHJpbmc/OiBib29sZWFuIH0pOiB2YWx1ZSBpcyBudWxsIHwgdW5kZWZpbmVkIHwgJycgfCAwID0+IHtcbiAgaWYgKCFvcHRpb25zPy5pZ25vcmVVbldyYXBTaWduYWwpIHtcbiAgICB2YWx1ZSA9IGNvbnZlcnRTaWduYWxUb09iamVjdCh2YWx1ZSk7XG4gIH1cbiAgaWYgKG9wdGlvbnM/Lmlnbm9yZUNoZWNrRmFsc3kpIHtcbiAgICByZXR1cm4gaXNFbXB0eVR5cGVPYmplY3QodmFsdWUpO1xuICB9XG4gIGNvbnN0IHZhbHVlSXNGYWxzeSA9IGlzRmFsc3kodmFsdWUsIHsgaWdub3JlVW5XcmFwU2lnbmFsOiBvcHRpb25zPy5pZ25vcmVVbldyYXBTaWduYWwsIGlnbm9yZVplcm86IHRydWUsIGlnbm9yZUNoZWNrU3RyaW5nOiBvcHRpb25zPy5pZ25vcmVDaGVja1N0cmluZyB9KTtcbiAgaWYgKG9wdGlvbnM/Lmlnbm9yZUNoZWNrVHlwZU9iaikge1xuICAgIHJldHVybiB2YWx1ZUlzRmFsc3k7XG4gIH1cbiAgcmV0dXJuIHZhbHVlSXNGYWxzeSB8fCBpc0VtcHR5VHlwZU9iamVjdCh2YWx1ZSk7XG59O1xuXG4vKipcbiAqIEtp4buDbSB0cmEgeGVtIG3hu5l0IGdpw6EgdHLhu4sgY8OzIHBo4bqjaSBsw6Agb2JqZWN0IHLhu5duZyBoYXkga2jDtG5nXG4gKiBAcGFyYW0gdmFsdWUgR2nDoSB0cuG7iyBj4bqnbiBraeG7g20gdHJhXG4gKiBAcmV0dXJucyB0cnVlIG7hur91IGdpw6EgdHLhu4sgbMOgIG9iamVjdCBy4buXbmcsIGZhbHNlIG7hur91IGtow7RuZ1xuICogQGV4YW1wbGVcbiAqIGlzRW1wdHlUeXBlT2JqZWN0KHt9KTsgLy8gdHJ1ZVxuICogaXNFbXB0eVR5cGVPYmplY3QoeyBhOiAxIH0pOyAvLyBmYWxzZVxuICovXG5jb25zdCBpc0VtcHR5VHlwZU9iamVjdCA9IDxUID0gbnVsbD4odmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBUID0+IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgKEpTT04uc3RyaW5naWZ5KHZhbHVlKSA9PT0gJ3t9JyB8fCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgPT09ICdbXScpO1xufTtcblxuLyoqXG4gKiBLaeG7g20gdHJhIHhlbSBt4buZdCBnacOhIHRy4buLIGPDsyBwaOG6o2kgbMOgIG51bGwsIHLhu5duZywgdW5kZWZpbmVkIGhv4bq3YyAwIGhheSBraMO0bmdcbiAqIEBwYXJhbSB2YWx1ZSBHacOhIHRy4buLIGPhuqduIGtp4buDbSB0cmFcbiAqIEBwYXJhbSBvcHRpb25zIEPhuqV1IGjDrG5oIHTDuXkgY2jhu41uXG4gKiBAcGFyYW0gb3B0aW9ucy5pZ25vcmVaZXJvIE7hur91IHRydWUsIHPhur0ga2jDtG5nIGtp4buDbSB0cmEgZ2nDoSB0cuG7iyAwXG4gKiBAcmV0dXJucyB0cnVlIG7hur91IGdpw6EgdHLhu4sgbMOgIG51bGwsIHLhu5duZywgdW5kZWZpbmVkIGhv4bq3YyAwLCBmYWxzZSBu4bq/dSBraMO0bmdcbiAqIEBleGFtcGxlXG4gKiBpc1RydXRoeShudWxsKTsgLy8gZmFsc2VcbiAqIGlzVHJ1dGh5KCcnKTsgLy8gZmFsc2VcbiAqIGlzVHJ1dGh5KHVuZGVmaW5lZCk7IC8vIGZhbHNlXG4gKiBpc1RydXRoeSgwKTsgLy8gZmFsc2VcbiAqIGlzVHJ1dGh5KHt9KTsgLy8gZmFsc2VcbiAqIGlzVHJ1dGh5KDAsIHsgaWdub3JlWmVybzogdHJ1ZSB9KTsgLy8gdHJ1ZVxuICovXG5cbmV4cG9ydCBjb25zdCBpc1RydXRoeSA9IDxUPih2YWx1ZTogVCwgb3B0aW9ucz86IHsgaWdub3JlWmVybz86IGJvb2xlYW47IGlnbm9yZUNoZWNrU3RyaW5nPzogYm9vbGVhbjsgaWdub3JlVW5XcmFwU2lnbmFsPzogYm9vbGVhbiB9KTogdmFsdWUgaXMgTm9uTnVsbGFibGU8VD4gPT4ge1xuICByZXR1cm4gIWlzRmFsc3kodmFsdWUsIG9wdGlvbnMpO1xufTtcblxuLyoqXG4gKiBLaeG7g20gdHJhIHhlbSBt4buZdCBnacOhIHRy4buLIGPDsyBwaOG6o2kgbMOgIG51bGwsIHLhu5duZywgdW5kZWZpbmVkIGhv4bq3YyAwIGhheSBraMO0bmdcbiAqIEBwYXJhbSB2YWx1ZSBHacOhIHRy4buLIGPhuqduIGtp4buDbSB0cmFcbiAqIEBwYXJhbSBvcHRpb25zIEPhuqV1IGjDrG5oIHTDuXkgY2jhu41uXG4gKiBAcGFyYW0gb3B0aW9ucy5pZ25vcmVaZXJvIE7hur91IHRydWUsIHPhur0ga2jDtG5nIGtp4buDbSB0cmEgZ2nDoSB0cuG7iyAwXG4gKiBAcmV0dXJucyB0cnVlIG7hur91IGdpw6EgdHLhu4sgbMOgIG51bGwsIHLhu5duZywgdW5kZWZpbmVkIGhv4bq3YyAwLCBmYWxzZSBu4bq/dSBraMO0bmdcbiAqIEBleGFtcGxlXG4gKiBpc0ZhbHN5KG51bGwpOyAvLyB0cnVlXG4gKiBpc0ZhbHN5KCcnKTsgLy8gdHJ1ZVxuICogaXNGYWxzeSh1bmRlZmluZWQpOyAvLyB0cnVlXG4gKiBpc0ZhbHN5KDApOyAvLyB0cnVlXG4gKiBpc0ZhbHN5KHt9KTsgLy8gZmFsc2VcbiAqIGlzRmFsc3koMCwgeyBpZ25vcmVaZXJvOiB0cnVlIH0pOyAvLyBmYWxzZVxuICovXG5leHBvcnQgY29uc3QgaXNGYWxzeSA9ICh2YWx1ZTogdW5rbm93biwgb3B0aW9ucz86IHsgaWdub3JlWmVybz86IGJvb2xlYW47IGlnbm9yZUNoZWNrU3RyaW5nPzogYm9vbGVhbjsgaWdub3JlVW5XcmFwU2lnbmFsPzogYm9vbGVhbiB9KTogdmFsdWUgaXMgbnVsbCB8IHVuZGVmaW5lZCB8ICcnIHwgMCA9PiB7XG4gIGlmICghb3B0aW9ucz8uaWdub3JlVW5XcmFwU2lnbmFsKSB7XG4gICAgdmFsdWUgPSBjb252ZXJ0U2lnbmFsVG9PYmplY3QodmFsdWUpO1xuICB9XG4gIGlmIChpc05pbCh2YWx1ZSwgeyBpZ25vcmVVbldyYXBTaWduYWw6IG9wdGlvbnM/Lmlnbm9yZVVuV3JhcFNpZ25hbCB9KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChvcHRpb25zPy5pZ25vcmVaZXJvKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAnJztcbiAgfVxuICBpZiAob3B0aW9ucz8uaWdub3JlQ2hlY2tTdHJpbmcpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IDA7XG4gIH1cbiAgcmV0dXJuIHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gMDtcbn07XG5cbi8qKlxuICogTG/huqFpIGLhu48gY8OhYyB0aHXhu5ljIHTDrW5oIGPhu6dhIMSR4buRaSB0xrDhu6NuZyBk4buxYSB0csOqbiBt4buZdCBow6BtIMSRaeG7gXUga2nhu4duXG4gKiBAcGFyYW0gb2JqRGF0YSDEkOG7kWkgdMaw4bujbmcgY+G6p24geOG7rSBsw71cbiAqIEBwYXJhbSBwcmVkaWNhdGUgSMOgbSDEkWnhu4F1IGtp4buHbiDEkeG7gyBraeG7g20gdHJhIGdpw6EgdHLhu4sgY+G7p2EgdGh14buZYyB0w61uaC4gTuG6v3UgaMOgbSB0cuG6oyB24buBIHRydWUgdGjDrCB0aHXhu5ljIHTDrW5oIMSRw7Mgc+G6vSBi4buLIGxv4bqhaSBi4buPXG4gKiBAcmV0dXJucyDEkOG7kWkgdMaw4bujbmcgbeG7m2kgc2F1IGtoaSDEkcOjIGxv4bqhaSBi4buPIGPDoWMgdGh14buZYyB0w61uaCB0aOG7j2EgbcOjbiDEkWnhu4F1IGtp4buHblxuICogQGV4YW1wbGVcbiAqIGNvbnN0IG9iaiA9IHsgYTogMSwgYjogbnVsbCwgYzogMywgZDogdW5kZWZpbmVkIH07XG4gKiBvbWl0Qnkob2JqLCBpc05pbCk7IC8vIHsgYTogMSwgYzogMyB9XG4gKi9cbmV4cG9ydCBjb25zdCBvbWl0QnkgPSA8VD4ob2JqRGF0YTogUmVjb3JkPHN0cmluZywgYW55PiwgcHJlZGljYXRlOiAodmFsOiBhbnkpID0+IGJvb2xlYW4pOiBUID0+IHtcbiAgaWYgKCFvYmpEYXRhIHx8IHR5cGVvZiBvYmpEYXRhICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KG9iakRhdGEpKSB7XG4gICAgcmV0dXJuIG9iakRhdGEgYXMgVDtcbiAgfVxuICBjb25zdCBuZXdPYmogPSB7fSBhcyBUO1xuXG4gIE9iamVjdC5rZXlzKG9iakRhdGEpLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGNvbnN0IHZhbHVlT2ZLZXkgPSBnZXQob2JqRGF0YSwga2V5KTtcbiAgICBpZiAoIXByZWRpY2F0ZSh2YWx1ZU9mS2V5KSkge1xuICAgICAgc2V0KG5ld09iaiwga2V5LCB2YWx1ZU9mS2V5KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbmV3T2JqO1xufTtcblxuLyoqXG4gKiBM4bqleSBnacOhIHRy4buLIHThu6sgxJHhu5FpIHTGsOG7o25nIHRoZW8gxJHGsOG7nW5nIGThuqtuIGNo4buJIMSR4buLbmhcbiAqXG4gKiBIw6BtIG7DoHkgZ2nDunAgYuG6oW4gdHJ1eSBj4bqtcCB2w6BvIGPDoWMgdGh14buZYyB0w61uaCBzw6J1IGLDqm4gdHJvbmcgbeG7mXQgxJHhu5FpIHTGsOG7o25nIG3hu5l0IGPDoWNoIGFuIHRvw6BuLFxuICogdHLDoW5oIGzhu5dpIGtoaSB0aHXhu5ljIHTDrW5oIGtow7RuZyB04buTbiB04bqhaS5cbiAqXG4gKiBAcGFyYW0gb2JqIMSQ4buRaSB0xrDhu6NuZyBuZ3Xhu5NuIGPhuqduIGzhuqV5IGdpw6EgdHLhu4tcbiAqIEBwYXJhbSBwYXRoIMSQxrDhu51uZyBk4bqrbiDEkeG6v24gdGh14buZYyB0w61uaCBj4bqnbiBs4bqleS4gQ8OzIHRo4buDIGzDoDpcbiAqICAgLSBDaHXhu5dpOiAndXNlci5wcm9maWxlLm5hbWUnIGhv4bq3YyAnaXRlbXNbMF0udGl0bGUnXG4gKiAgIC0gTeG6o25nOiBbJ3VzZXInLCAncHJvZmlsZScsICduYW1lJ10gaG/hurdjIFsnaXRlbXMnLCAnMCcsICd0aXRsZSddXG4gKiAgIC0gQ2h14buXaSBy4buXbmcgJyc6IHRy4bqjIHbhu4EgY2jDrW5oIMSR4buRaSB0xrDhu6NuZyBn4buRY1xuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBHacOhIHRy4buLIG3hurdjIMSR4buLbmggdHLhuqMgduG7gSBraGkga2jDtG5nIHTDrG0gdGjhuqV5IHRodeG7mWMgdMOtbmggKG3hurdjIMSR4buLbmg6IHVuZGVmaW5lZClcbiAqIEBwYXJhbSBrZWVwTGFzdFZhbHVlSWZTaWduYWwgQ8OzIGdp4buvIG5ndXnDqm4gc2lnbmFsIGN14buRaSBjw7luZyBoYXkga2jDtG5nICht4bq3YyDEkeG7i25oOiBmYWxzZSAtIHPhur0gZ+G7jWkgc2lnbmFsKCkpXG4gKiBAcmV0dXJucyBHacOhIHRy4buLIHTDrG0gxJHGsOG7o2MgaG/hurdjIGdpw6EgdHLhu4sgbeG6t2MgxJHhu4tuaFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBWw60gZOG7pSBjxqEgYuG6o25cbiAqIGNvbnN0IHVzZXIgPSB7IG5hbWU6ICdKb2huJywgYWdlOiAzMCB9O1xuICogZ2V0KHVzZXIsICduYW1lJyk7IC8vICdKb2huJ1xuICogZ2V0KHVzZXIsICdlbWFpbCcpOyAvLyB1bmRlZmluZWRcbiAqIGdldCh1c2VyLCAnZW1haWwnLCAnbm8tZW1haWwnKTsgLy8gJ25vLWVtYWlsJ1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUcnV54buBbiBwYXRoIHLhu5duZyAtIHRy4bqjIHbhu4EgY2jDrW5oIMSR4buRaSB0xrDhu6NuZyBn4buRY1xuICogY29uc3QgZGF0YSA9IHsgbmFtZTogJ0FsaWNlJywgYWdlOiAyNSB9O1xuICogZ2V0KGRhdGEsICcnKTsgLy8geyBuYW1lOiAnQWxpY2UnLCBhZ2U6IDI1IH0gKGNow61uaCDEkeG7kWkgdMaw4bujbmcgZGF0YSlcbiAqIGdldChkYXRhLCAnJywgJ2RlZmF1bHQnKTsgLy8geyBuYW1lOiAnQWxpY2UnLCBhZ2U6IDI1IH0gKGLhu48gcXVhIGRlZmF1bHRWYWx1ZSlcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVHJ1eSBj4bqtcCB0aHXhu5ljIHTDrW5oIHPDonVcbiAqIGNvbnN0IGRhdGEgPSB7XG4gKiAgIHVzZXI6IHtcbiAqICAgICBwcm9maWxlOiB7XG4gKiAgICAgICBuYW1lOiAnQWxpY2UnLFxuICogICAgICAgc2V0dGluZ3M6IHsgdGhlbWU6ICdkYXJrJyB9XG4gKiAgICAgfVxuICogICB9XG4gKiB9O1xuICogZ2V0KGRhdGEsICd1c2VyLnByb2ZpbGUubmFtZScpOyAvLyAnQWxpY2UnXG4gKiBnZXQoZGF0YSwgJ3VzZXIucHJvZmlsZS5zZXR0aW5ncy50aGVtZScpOyAvLyAnZGFyaydcbiAqIGdldChkYXRhLCAndXNlci5wcm9maWxlLmF2YXRhcicsICdkZWZhdWx0LmpwZycpOyAvLyAnZGVmYXVsdC5qcGcnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRydXkgY+G6rXAgbeG6o25nXG4gKiBjb25zdCBpdGVtcyA9IFtcbiAqICAgeyBuYW1lOiAnSXRlbSAxJywgcHJpY2U6IDEwMCB9LFxuICogICB7IG5hbWU6ICdJdGVtIDInLCBwcmljZTogMjAwIH1cbiAqIF07XG4gKiBnZXQoaXRlbXMsICdbMF0ubmFtZScpOyAvLyAnSXRlbSAxJ1xuICogZ2V0KGl0ZW1zLCAnWzFdLm5hbWUnKTsgLy8gJ0l0ZW0gMidcbiAqIGdldChpdGVtcywgJ1syXS5uYW1lJywgJ05vdCBmb3VuZCcpOyAvLyAnTm90IGZvdW5kJ1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBT4butIGThu6VuZyB24bubaSBt4bqjbmcgcGF0aFxuICogY29uc3QgbmVzdGVkID0geyBhOiB7IGI6IHsgYzogJ2RlZXAgdmFsdWUnIH0gfSB9O1xuICogZ2V0KG5lc3RlZCwgWydhJywgJ2InLCAnYyddKTsgLy8gJ2RlZXAgdmFsdWUnXG4gKiBnZXQobmVzdGVkLCBbJ2EnLCAnYicsICdkJ10sICdkZWZhdWx0Jyk7IC8vICdkZWZhdWx0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUcsaw4budbmcgaOG7o3AgxJHhurdjIGJp4buHdFxuICogZ2V0KG51bGwsICdhbnkucGF0aCcpOyAvLyB1bmRlZmluZWRcbiAqIGdldCh1bmRlZmluZWQsICdhbnkucGF0aCcsICdmYWxsYmFjaycpOyAvLyAnZmFsbGJhY2snXG4gKi9cbmV4cG9ydCBjb25zdCBnZXQgPSA8VCA9IGFueT4ob2JqOiBhbnksIHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLCBkZWZhdWx0VmFsdWU6IGFueSA9IHVuZGVmaW5lZCwga2VlcExhc3RWYWx1ZUlmU2lnbmFsPzogYm9vbGVhbik6IFQgPT4ge1xuICBpZiAoaXNOaWwob2JqKSkge1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cbiAgd2hpbGUgKGlzU2lnbmFsKG9iaikpIHtcbiAgICBvYmogPSBvYmooKTtcbiAgfVxuICBpZiAocGF0aCA9PT0gJycpIHtcbiAgICByZXR1cm4gb2JqIGFzIFQ7XG4gIH1cbiAgaWYgKG9iaiBpbnN0YW5jZW9mIEh0dHBQYXJhbXMpIHtcbiAgICByZXR1cm4gKG9iai5nZXQoYCR7cGF0aH1gKSA/PyBkZWZhdWx0VmFsdWUpIGFzIFQ7XG4gIH1cbiAgaWYgKG9iaiBpbnN0YW5jZW9mIERPTVJlY3QpIHtcbiAgICByZXR1cm4gb2JqW3BhdGggYXMga2V5b2YgRE9NUmVjdF0gYXMgVDtcbiAgfVxuXG4gIGNvbnN0IHBhdGhzID0gQXJyYXkuaXNBcnJheShwYXRoKVxuICAgID8gcGF0aFxuICAgIDogcGF0aFxuICAgICAgICAucmVwbGFjZSgvXFxbKFxcZCspXS9nLCAnLiQxJylcbiAgICAgICAgLnNwbGl0KCcuJylcbiAgICAgICAgLmZpbHRlcigoa2V5KSA9PiBrZXkpO1xuICBmb3IgKGNvbnN0IGluZGV4IGluIHBhdGhzKSB7XG4gICAgY29uc3Qga2V5ID0gcGF0aHNbaW5kZXhdO1xuICAgIGlmIChvYmogaW5zdGFuY2VvZiBDU1NTdHlsZURlY2xhcmF0aW9uKSB7XG4gICAgICBvYmogPSBvYmpba2V5IGFzIGtleW9mIENTU1N0eWxlRGVjbGFyYXRpb25dIGFzIFQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAob2JqIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgIG9iaiA9IG9ialtrZXkgYXMga2V5b2YgSFRNTEVsZW1lbnRdIGFzIFQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGlzTmlsKG9iaikgfHwgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsID0gaXNTaWduYWwob2JqW2tleV0pICYmICFrZWVwTGFzdFZhbHVlSWZTaWduYWwgPyBvYmpba2V5XSgpIDogb2JqW2tleV07XG5cbiAgICBvYmogPSB2YWw7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufTtcblxuLyoqXG4gKiBUaGnhur90IGzhuq1wIGdpw6EgdHLhu4sgY2hvIG3hu5l0IHRodeG7mWMgdMOtbmggdHJvbmcgxJHhu5FpIHTGsOG7o25nIHRoZW8gxJHGsOG7nW5nIGThuqtuIGNo4buJIMSR4buLbmhcbiAqIEBwYXJhbSBvYmogxJDhu5FpIHTGsOG7o25nIGPhuqduIHRoaeG6v3QgbOG6rXAgZ2nDoSB0cuG7i1xuICogQHBhcmFtIHBhdGggxJDGsOG7nW5nIGThuqtuIMSR4bq/biB0aHXhu5ljIHTDrW5oLCBjw7MgdGjhu4MgbMOgIGNodeG7l2kgKHZkOiAnYS5iLmMnKSBob+G6t2MgbeG6o25nICh2ZDogWydhJywgJ2InLCAnYyddKVxuICogQHBhcmFtIHZhbHVlIEdpw6EgdHLhu4sgY+G6p24gdGhp4bq/dCBs4bqtcFxuICogQHJldHVybnMgxJDhu5FpIHTGsOG7o25nIHNhdSBraGkgxJHDoyB0aGnhur90IGzhuq1wIGdpw6EgdHLhu4tcbiAqIEB0aHJvd3MgRXJyb3IgbuG6v3UgdGhhbSBz4buRIMSR4bqndSB0acOqbiBraMO0bmcgcGjhuqNpIGzDoCDEkeG7kWkgdMaw4bujbmdcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBvYmogPSB7IGE6IHsgYjogMSB9IH07XG4gKiBzZXQob2JqLCAnYS5iJywgMik7IC8vIHsgYTogeyBiOiAyIH0gfVxuICovXG5leHBvcnQgY29uc3Qgc2V0ID0gPFQgPSBhbnk+KG9iajogYW55LCBwYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSwgdmFsdWU6IGFueSwgb3B0aW9ucz86IHsgdmFsdWVEZWZhdWx0UGF0aE9iamVjdFVuZGVmaW5lZD86IGFueTsgdmFsdWVEZWZhdWx0UGF0aEFycmF5VW5kZWZpbmVkPzogYW55IH0pOiBUID0+IHtcbiAgaWYgKCFvYmogfHwgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnICYmICFpc1NpZ25hbChvYmopKSB8fCAoaXNTaWduYWwob2JqKSAmJiB0eXBlb2Ygb2JqKCkgIT09ICdvYmplY3QnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICBpZiAob2JqIGluc3RhbmNlb2YgSHR0cFBhcmFtcykge1xuICAgIHJldHVybiBvYmouc2V0KGAke3BhdGh9YCwgdmFsdWUpIGFzIFQ7XG4gIH1cblxuICBjb25zdCBwYXRoQXJyYXkgPSBBcnJheS5pc0FycmF5KHBhdGgpXG4gICAgPyBwYXRoXG4gICAgOiBwYXRoXG4gICAgICAgIC5yZXBsYWNlKC9cXFsoXFxkKyldL2csICcuWyQxXScpXG4gICAgICAgIC5zcGxpdCgnLicpXG4gICAgICAgIC5maWx0ZXIoKGtleSkgPT4ga2V5KTtcblxuICBsZXQgY3VycmVudE9iamVjdEJ5S2V5OiBhbnkgPSBpc1NpZ25hbChvYmopID8gb2JqKCkgOiBvYmo7XG4gIGxldCBwcmVPYmplY3RCeUtleSA9IG9iajtcblxuICBwYXRoQXJyYXkuZm9yRWFjaCgoa2V5LCBpbmRleCkgPT4ge1xuICAgIGlmIChpbmRleCA8IHBhdGhBcnJheS5sZW5ndGggLSAxKSB7XG4gICAgICBpZiAoIShrZXkgaW4gY3VycmVudE9iamVjdEJ5S2V5KSB8fCAodHlwZW9mIGN1cnJlbnRPYmplY3RCeUtleVtrZXldICE9PSAnb2JqZWN0JyAmJiAhaXNTaWduYWwoY3VycmVudE9iamVjdEJ5S2V5W2tleV0pKSkge1xuICAgICAgICBjb25zdCBuZXh0S2V5ID0gcGF0aEFycmF5W2luZGV4ICsgMV07XG4gICAgICAgIGtleSA9IGtleS5yZXBsYWNlKC9cXFsoXFxkKyldL2csICckMScpO1xuICAgICAgICBpZiAoaXNOaWwoY3VycmVudE9iamVjdEJ5S2V5W2tleV0pKSB7XG4gICAgICAgICAgY3VycmVudE9iamVjdEJ5S2V5W2tleV0gPSAvXFxbKFxcZCspXS9nLnRlc3QobmV4dEtleSkgPyAob3B0aW9ucz8udmFsdWVEZWZhdWx0UGF0aEFycmF5VW5kZWZpbmVkID8/IFtdKSA6IChvcHRpb25zPy52YWx1ZURlZmF1bHRQYXRoT2JqZWN0VW5kZWZpbmVkID8/IHt9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY3VycmVudE9iamVjdEJ5S2V5ID0ga2V5ID8gY3VycmVudE9iamVjdEJ5S2V5W2tleV0gOiBjdXJyZW50T2JqZWN0QnlLZXk7XG4gICAgICBwcmVPYmplY3RCeUtleSA9IGN1cnJlbnRPYmplY3RCeUtleTtcbiAgICAgIGN1cnJlbnRPYmplY3RCeUtleSA9IGlzU2lnbmFsKGN1cnJlbnRPYmplY3RCeUtleSkgPyBjdXJyZW50T2JqZWN0QnlLZXkoKSA6IGN1cnJlbnRPYmplY3RCeUtleTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGN1cnJlbnRPYmplY3RCeUtleSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBHw6FuIGdpw6EgdHLhu4sg4bufIGN14buRaSDEkcaw4budbmcgZOG6q25cbiAgICBrZXkgPSBrZXkucmVwbGFjZSgvXFxbKFxcZCspXS9nLCAnJDEnKTtcbiAgICBjb25zdCB2YWx1ZU9mS2V5ID0gY3VycmVudE9iamVjdEJ5S2V5W2tleV07XG4gICAgY29uc3QgdmFsdWVPZktleUlzU2lnbmFsID0gaXNTaWduYWwodmFsdWVPZktleSk7XG5cbiAgICBpZiAodmFsdWVPZktleUlzU2lnbmFsICYmICh0eXBlb2YgdmFsdWVPZktleSgpICE9PSAnb2JqZWN0JyB8fCB2YWx1ZU9mS2V5KCkgPT09IG51bGwpKSB7XG4gICAgICAodmFsdWVPZktleSBhcyBXcml0YWJsZVNpZ25hbDxhbnk+KS5zZXQoaXNTaWduYWwodmFsdWUpID8gdmFsdWUoKSA6IHZhbHVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlzU2lnbmFsKHByZU9iamVjdEJ5S2V5KSkge1xuICAgICAgKHByZU9iamVjdEJ5S2V5IGFzIFdyaXRhYmxlU2lnbmFsPGFueT4pLnVwZGF0ZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGFPZktleSA9IGRhdGFba2V5XTtcbiAgICAgICAgaWYgKGlzTmlsKGRhdGFPZktleSkgfHwgIXZhbHVlT2ZLZXlJc1NpZ25hbCkge1xuICAgICAgICAgIGRhdGFba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlT2ZLZXlJc1NpZ25hbCkge1xuICAgICAgICAgICh2YWx1ZU9mS2V5IGFzIFdyaXRhYmxlU2lnbmFsPGFueT4pLnNldChpc1NpZ25hbCh2YWx1ZSkgPyB2YWx1ZSgpIDogdmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICByZXR1cm4gWy4uLmRhdGFdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IC4uLmRhdGEgfTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodmFsdWVPZktleUlzU2lnbmFsKSB7XG4gICAgICAodmFsdWVPZktleSBhcyBXcml0YWJsZVNpZ25hbDxhbnk+KS5zZXQoaXNTaWduYWwodmFsdWUpID8gdmFsdWUoKSA6IHZhbHVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY3VycmVudE9iamVjdEJ5S2V5W2tleV0gPSB2YWx1ZTtcbiAgfSk7XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbi8qKlxuICogVOG6oW8gbeG7mXQgYuG6o24gc2FvIHPDonUgY+G7p2EgbeG7mXQgxJHhu5FpIHTGsOG7o25nIGhv4bq3YyBnacOhIHRy4buLIGLhuqV0IGvhu7NcbiAqIEBwYXJhbSBkYXRhIEThu68gbGnhu4d1IGPhuqduIHNhbyBjaMOpcFxuICogQHBhcmFtIG9wdGlvbnMgVMO5eSBjaOG7jW4gY+G6pXUgaMOsbmhcbiAqIEBwYXJhbSBvcHRpb25zLmlnbm9yZVNpZ25hbCBO4bq/dSB0cnVlLCBz4bq9IGtow7RuZyBzYW8gY2jDqXAgY8OhYyBzaWduYWwgbcOgIHRy4bqjIHbhu4Egc2lnbmFsIGfhu5FjXG4gKiBAcGFyYW0gc2VlbiBXZWFrTWFwIMSR4buDIHRoZW8gZMO1aSBjw6FjIHRoYW0gY2hp4bq/dSDEkcOjIMSRxrDhu6NjIHNhbyBjaMOpcCwgdHLDoW5oIGzhurdwIHbDtCBo4bqhbiB24bubaSBjw6FjIHRoYW0gY2hp4bq/dSB2w7JuZ1xuICogQHJldHVybnMgQuG6o24gc2FvIHPDonUgY+G7p2EgZOG7ryBsaeG7h3UgxJHhuqd1IHbDoG9cbiAqIEBleGFtcGxlXG4gKiBjb25zdCBvYmogPSB7XG4gKiAgIGE6IDEsXG4gKiAgIGI6IHsgYzogMiB9LFxuICogICBkOiBbMSwgMiwgM11cbiAqIH07XG4gKiBjb25zdCBjbG9uZSA9IGNsb25lRGVlcChvYmopO1xuICogLy8gY2xvbmUgbMOgIG3hu5l0IGLhuqNuIHNhbyBob8OgbiB0b8OgbiDEkeG7mWMgbOG6rXAgY+G7p2Egb2JqXG4gKi9cbmV4cG9ydCBjb25zdCBjbG9uZURlZXAgPSA8VCA9IGFueT4oZGF0YTogYW55LCBvcHRpb25zID0geyBpZ25vcmVTaWduYWw6IGZhbHNlIH0sIHNlZW4gPSBuZXcgV2Vha01hcCgpKTogVCA9PiB7XG4gIGlmIChkYXRhID09PSBudWxsIHx8ICh0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcgJiYgIWlzU2lnbmFsKGRhdGEpKSB8fCBpc0Rhbmdlcm91c09iamVjdChkYXRhKSkge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgaWYgKHNlZW4uaGFzKGRhdGEpKSB7XG4gICAgcmV0dXJuIHNlZW4uZ2V0KGRhdGEpO1xuICB9XG5cbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBIdHRwUGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBVdGlsc0h0dHBQYXJhbXNSZXF1ZXN0KHVuZGVmaW5lZCwgZGF0YSkgYXMgVDtcbiAgfVxuXG4gIGlmIChkYXRhIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiBuZXcgRGF0ZShkYXRhLmdldFRpbWUoKSkgYXMgVDtcbiAgfVxuXG4gIGlmIChkYXlqcy5pc0RheWpzKGRhdGEpKSB7XG4gICAgcmV0dXJuIGdldERheWpzKHsgZGF0ZTogZGF0YS52YWx1ZU9mKCkgfSkgYXMgVDtcbiAgfVxuXG4gIGlmIChkYXRhIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoZGF0YS5zb3VyY2UsIGRhdGEuZmxhZ3MpIGFzIFQ7XG4gIH1cblxuICBpZiAoZGF0YSBpbnN0YW5jZW9mIE1hcCkge1xuICAgIGNvbnN0IG1hcENvcHkgPSBuZXcgTWFwKCk7XG4gICAgc2Vlbi5zZXQoZGF0YSwgbWFwQ29weSk7XG4gICAgZGF0YS5mb3JFYWNoKCh2YWwsIGtleSkgPT4ge1xuICAgICAgbWFwQ29weS5zZXQoY2xvbmVEZWVwKGtleSwgb3B0aW9ucywgc2VlbiksIGNsb25lRGVlcCh2YWwsIG9wdGlvbnMsIHNlZW4pKTtcbiAgICB9KTtcbiAgICByZXR1cm4gbWFwQ29weSBhcyBUO1xuICB9XG5cbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBTZXQpIHtcbiAgICBjb25zdCBzZXRDb3B5ID0gbmV3IFNldCgpO1xuICAgIHNlZW4uc2V0KGRhdGEsIHNldENvcHkpO1xuICAgIGRhdGEuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICBzZXRDb3B5LmFkZChjbG9uZURlZXAodmFsLCBvcHRpb25zLCBzZWVuKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHNldENvcHkgYXMgVDtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgc2Vlbi5zZXQoZGF0YSwgZGF0YS5tYXAoKGl0ZW0pID0+IGNsb25lRGVlcChpdGVtLCBvcHRpb25zLCBzZWVuKSkgYXMgVCk7XG4gICAgcmV0dXJuIHNlZW4uZ2V0KGRhdGEpIGFzIFQ7XG4gIH1cblxuICBpZiAoaXNSZXR1cm5Bc0lzT2JqZWN0KGRhdGEpKSB7XG4gICAgcmV0dXJuIGRhdGEgYXMgVDtcbiAgfVxuXG4gIGlmIChpc1NpZ25hbChkYXRhKSkge1xuICAgIGlmIChvcHRpb25zPy5pZ25vcmVTaWduYWwpIHtcbiAgICAgIHJldHVybiBkYXRhIGFzIFQ7XG4gICAgfVxuICAgIHNlZW4uc2V0KGRhdGEsIHNpZ25hbChjbG9uZURlZXAoZGF0YSgpLCBvcHRpb25zLCBzZWVuKSkpO1xuICAgIHJldHVybiBzZWVuLmdldChkYXRhKSBhcyBUO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gIHNlZW4uc2V0KGRhdGEsIHJlc3VsdCk7XG4gIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGRhdGFba2V5XTtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBIdHRwUGFyYW1zKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG5ldyBVdGlsc0h0dHBQYXJhbXNSZXF1ZXN0KHVuZGVmaW5lZCwgdmFsdWUpIGFzIFQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG5ldyBEYXRlKHZhbHVlLmdldFRpbWUoKSkgYXMgVDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChkYXlqcy5pc0RheWpzKHZhbHVlKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBnZXREYXlqcyh7IGRhdGU6IHZhbHVlLnZhbHVlT2YoKSB9KSBhcyBUO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG5ldyBSZWdFeHAodmFsdWUuc291cmNlLCB2YWx1ZS5mbGFncykgYXMgVDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoaXNSZXR1cm5Bc0lzT2JqZWN0KGRhdGEpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IGNsb25lRGVlcCh2YWx1ZSwgb3B0aW9ucywgc2Vlbik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdCBhcyBUO1xufTtcblxuLyoqXG4gKiBDaHV54buDbiDEkeG7lWkgbeG7mXQgbeG6o25nIGPDoWMgxJHhu5FpIHTGsOG7o25nIHRow6BuaCBt4buZdCDEkeG7kWkgdMaw4bujbmcgduG7m2kga2jDs2EgxJHGsOG7o2MgY2jhu4kgxJHhu4tuaFxuICogQHBhcmFtIGRhdGEgTeG6o25nIGPDoWMgxJHhu5FpIHTGsOG7o25nIGPhuqduIGNodXnhu4NuIMSR4buVaVxuICogQHBhcmFtIGtleSBUw6puIHRodeG7mWMgdMOtbmggxJHGsOG7o2Mgc+G7rSBk4bulbmcgbMOgbSBraMOzYSB0cm9uZyDEkeG7kWkgdMaw4bujbmcga+G6v3QgcXXhuqNcbiAqIEByZXR1cm5zIMSQ4buRaSB0xrDhu6NuZyB24bubaSBjw6FjIGdpw6EgdHLhu4sgdOG7qyBt4bqjbmcgxJHGsOG7o2MgxJHDoW5oIGtleSB0aGVvIHRodeG7mWMgdMOtbmggxJHDoyBjaOG7iSDEkeG7i25oXG4gKiBAZXhhbXBsZVxuICogY29uc3QgZGF0YSA9IFtcbiAqICAgeyBpZDogMSwgbmFtZTogJ0pvaG4nIH0sXG4gKiAgIHsgaWQ6IDIsIG5hbWU6ICdKYW5lJyB9XG4gKiBdO1xuICoga2V5QnkoZGF0YSwgJ2lkJyk7XG4gKiAvLyBL4bq/dCBxdeG6ozoge1xuICogLy8gICAnMSc6IHsgaWQ6IDEsIG5hbWU6ICdKb2huJyB9LFxuICogLy8gICAnMic6IHsgaWQ6IDIsIG5hbWU6ICdKYW5lJyB9XG4gKiAvLyB9XG4gKi9cbmV4cG9ydCBjb25zdCBrZXlCeSA9IChkYXRhOiBBcnJheTxUWVBFX09CSkVDVD4sIGtleTogc3RyaW5nKTogVFlQRV9PQkpFQ1QgPT4ge1xuICBpZiAoIWRhdGEgfHwgIWRhdGEubGVuZ3RoIHx8ICFrZXkpIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgcmV0dXJuIGRhdGEucmVkdWNlKChkaXIsIG5leHRJdGVtKSA9PiB7XG4gICAgY29uc3QgdmFsdWVPZktleSA9IGdldChuZXh0SXRlbSwga2V5KTtcbiAgICBpZiAodHlwZW9mIHZhbHVlT2ZLZXkgIT09ICdzdHJpbmcnICYmIHR5cGVvZiB2YWx1ZU9mS2V5ICE9PSAnbnVtYmVyJyAmJiB0eXBlb2YgdmFsdWVPZktleSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gZGlyO1xuICAgIH1cbiAgICBpZiAoIU9iamVjdC5rZXlzKGRpcikuaW5jbHVkZXMoYCR7dmFsdWVPZktleX1gKSkge1xuICAgICAgZGlyW2Ake3ZhbHVlT2ZLZXl9YF0gPSBuZXh0SXRlbTtcbiAgICB9XG4gICAgcmV0dXJuIGRpcjtcbiAgfSwge30pO1xufTtcblxuLyoqXG4gKiBOaMOzbSBjw6FjIMSR4buRaSB0xrDhu6NuZyB0cm9uZyBt4buZdCBt4bqjbmcgdGjDoG5oIGPDoWMgbmjDs20gZOG7sWEgdHLDqm4gbeG7mXQgdGh14buZYyB0w61uaCBj4bulIHRo4buDXG4gKiBAcGFyYW0gZGF0YSBN4bqjbmcgY8OhYyDEkeG7kWkgdMaw4bujbmcgY+G6p24gbmjDs21cbiAqIEBwYXJhbSBrZXkgVMOqbiB0aHXhu5ljIHTDrW5oIMSRxrDhu6NjIHPhu60gZOG7pW5nIGzDoG0ga2jDs2EgbmjDs21cbiAqIEByZXR1cm5zIMSQ4buRaSB0xrDhu6NuZyB24bubaSBjw6FjIGdpw6EgdHLhu4sgdOG7qyBt4bqjbmcgxJHGsOG7o2MgbmjDs20gdGhlbyB0aHXhu5ljIHTDrW5oIMSRw6MgY2jhu4kgxJHhu4tuaFxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGRhdGEgPSBbXG4gKiAgIHsgaWQ6IDEsIG5hbWU6ICdKb2huJyB9LFxuICogICB7IGlkOiAyLCBuYW1lOiAnSmFuZScgfSxcbiAqICAgeyBpZDogMSwgbmFtZTogJ0pvaG4nIH1cbiAqIF07XG4gKiBncm91cEJ5KGRhdGEsICdpZCcpO1xuICogLy8gS+G6v3QgcXXhuqM6IHtcbiAqIC8vICAgJzEnOiBbXG4gKiAvLyAgICAgeyBpZDogMSwgbmFtZTogJ0pvaG4nIH0sXG4gKiAvLyAgICAgeyBpZDogMSwgbmFtZTogJ0pvaG4nIH1cbiAqIC8vICAgXSxcbiAqIC8vICAgJzInOiBbXG4gKiAvLyAgICAgeyBpZDogMiwgbmFtZTogJ0phbmUnIH1cbiAqIC8vIH1cbiAqL1xuZXhwb3J0IGNvbnN0IGdyb3VwQnkgPSAoZGF0YTogQXJyYXk8VFlQRV9PQkpFQ1Q+LCBrZXk6IHN0cmluZyk6IFRZUEVfT0JKRUNUID0+IHtcbiAgaWYgKCFkYXRhIHx8ICFkYXRhLmxlbmd0aCB8fCAhT2JqZWN0LmtleXMoZ2V0KGRhdGEsICcwJykpLmxlbmd0aCB8fCAha2V5KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIHJldHVybiBkYXRhLnJlZHVjZSgoZGlyLCBuZXh0SXRlbSkgPT4ge1xuICAgIGNvbnN0IHZhbHVlT2ZLZXkgPSBnZXQobmV4dEl0ZW0sIGtleSk7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZU9mS2V5ICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsdWVPZktleSAhPT0gJ251bWJlcicgJiYgdHlwZW9mIHZhbHVlT2ZLZXkgIT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIGRpcjtcbiAgICB9XG4gICAgaWYgKCFPYmplY3Qua2V5cyhkaXIpLmluY2x1ZGVzKGAke3ZhbHVlT2ZLZXl9YCkpIHtcbiAgICAgIGRpcltgJHt2YWx1ZU9mS2V5fWBdID0gW107XG4gICAgfVxuICAgIGRpcltgJHt2YWx1ZU9mS2V5fWBdLnB1c2gobmV4dEl0ZW0pO1xuICAgIHJldHVybiBkaXI7XG4gIH0sIHt9KTtcbn07XG5cbi8qKlxuICogVOG6oW8gbeG7mXQgbeG6o25nIGPDoWMgc+G7kSB04burIGdpw6EgdHLhu4sgYuG6r3QgxJHhuqd1IMSR4bq/biBnacOhIHRy4buLIGvhur90IHRow7pjIHbhu5tpIGLGsOG7m2MgbmjhuqN5IHTDuXkgY2jhu41uXG4gKiBAcGFyYW0gc3RhcnQgR2nDoSB0cuG7iyBi4bqvdCDEkeG6p3UgY+G7p2EgZMOjeSBz4buRLiBO4bq/dSBjaOG7iSBjw7MgbeG7mXQgdGhhbSBz4buRLCDEkcOieSBz4bq9IGzDoCBnacOhIHRy4buLIGvhur90IHRow7pjIHbDoCBnacOhIHRy4buLIGLhuq90IMSR4bqndSBz4bq9IGzDoCAwXG4gKiBAcGFyYW0gZW5kIEdpw6EgdHLhu4sga+G6v3QgdGjDumMgY+G7p2EgZMOjeSBz4buRICh0w7l5IGNo4buNbilcbiAqIEBwYXJhbSBzdGVwIELGsOG7m2MgbmjhuqN5IGdp4buvYSBjw6FjIHPhu5EgdHJvbmcgZMOjeSAodMO5eSBjaOG7jW4pLiBN4bq3YyDEkeG7i25oIGzDoCAxIG7hur91IGVuZCA+IHN0YXJ0LCAtMSBu4bq/dSBlbmQgPCBzdGFydFxuICogQHJldHVybnMgTeG6o25nIGPDoWMgc+G7kSB04burIHN0YXJ0IMSR4bq/biBlbmQgduG7m2kgYsaw4bubYyBuaOG6o3kgc3RlcFxuICogQGV4YW1wbGVcbiAqIHJhbmdlKDQpOyAgICAgIC8vIFswLCAxLCAyLCAzXVxuICogcmFuZ2UoMSwgNSk7ICAgLy8gWzEsIDIsIDMsIDRdXG4gKiByYW5nZSgwLCAyMCwgNSk7IC8vIFswLCA1LCAxMCwgMTVdXG4gKiByYW5nZSg1LCAyKTsgICAvLyBbNSwgNCwgM11cbiAqL1xuZXhwb3J0IGNvbnN0IHJhbmdlID0gKHN0YXJ0OiBudW1iZXIsIGVuZD86IG51bWJlciwgc3RlcD86IG51bWJlcik6IEFycmF5PG51bWJlcj4gPT4ge1xuICBpZiAoZW5kID09PSB1bmRlZmluZWQgfHwgZW5kID09PSBudWxsKSB7XG4gICAgZW5kID0gc3RhcnQ7XG4gICAgc3RhcnQgPSAwO1xuICB9XG5cbiAgaWYgKCFzdGVwKSB7XG4gICAgc3RlcCA9IGVuZCA8IDAgPyAtMSA6IDE7XG4gIH1cblxuICBpZiAoZW5kIDwgc3RhcnQgJiYgc3RlcCA+IDApIHtcbiAgICBzdGVwICo9IC0xO1xuICB9XG5cbiAgY29uc3QgdmFsdWVTdGFydEJ5U3RlcCA9IHN0ZXAgKyBzdGFydDtcbiAgY29uc3QgZGlyZWN0aW9uID0gc3RhcnQgPCBlbmQgPyAnYXNjJyA6ICdkZXNjJztcbiAgaWYgKChkaXJlY3Rpb24gPT09ICdhc2MnICYmICh2YWx1ZVN0YXJ0QnlTdGVwIDwgc3RhcnQgfHwgdmFsdWVTdGFydEJ5U3RlcCA+IGVuZCkpIHx8IChkaXJlY3Rpb24gPT09ICdkZXNjJyAmJiAodmFsdWVTdGFydEJ5U3RlcCA+IHN0YXJ0IHx8IHZhbHVlU3RhcnRCeVN0ZXAgPCBlbmQpKSkge1xuICAgIHJldHVybiBbc3RhcnRdO1xuICB9XG5cbiAgY29uc3QgYXJyID0gbmV3IEFycmF5PG51bWJlcj4oKTtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgTWF0aC5hYnMoZW5kIC0gc3RhcnQpOyBpbmRleCsrKSB7XG4gICAgbGV0IHZhbHVlID0gc3RhcnQgKyBpbmRleCAqIHN0ZXA7XG4gICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICB2YWx1ZSA9IHN0YXJ0O1xuICAgIH1cblxuICAgIGlmICgoZGlyZWN0aW9uID09PSAnYXNjJyAmJiAodmFsdWUgPCBzdGFydCB8fCB2YWx1ZSA+IGVuZCkpIHx8IChkaXJlY3Rpb24gPT09ICdkZXNjJyAmJiAodmFsdWUgPiBzdGFydCB8fCB2YWx1ZSA8IGVuZCkpKSB7XG4gICAgICByZXR1cm4gYXJyO1xuICAgIH1cblxuICAgIGFyci5wdXNoKHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiBhcnI7XG59O1xuXG4vKipcbiAqIFNvIHPDoW5oIGhhaSBnacOhIHRy4buLIGLhuqV0IGvhu7MgY8OzIGLhurFuZyBuaGF1IGhheSBraMO0bmdcbiAqIEBwYXJhbSB2YWx1ZTEgR2nDoSB0cuG7iyB0aOG7qSBuaOG6pXQgY+G6p24gc28gc8OhbmhcbiAqIEBwYXJhbSB2YWx1ZTIgR2nDoSB0cuG7iyB0aOG7qSBoYWkgY+G6p24gc28gc8OhbmhcbiAqIEBwYXJhbSBleGFjdGx5UG9zaXRpb24gQ8OzIHNvIHPDoW5oIGNow61uaCB4w6FjIHbhu4sgdHLDrSBjw6FjIHBo4bqnbiB04butIHRyb25nIG3huqNuZyBoYXkga2jDtG5nXG4gKiBAcmV0dXJucyB0cnVlIG7hur91IGhhaSBnacOhIHRy4buLIGLhurFuZyBuaGF1LCBmYWxzZSBu4bq/dSBraMO0bmcgYuG6sW5nIG5oYXVcbiAqIEBleGFtcGxlXG4gKiBpc0VxdWFsKFsxLDIsM10sIFsxLDIsM10pOyAvLyB0cnVlXG4gKiBpc0VxdWFsKFsxLDIsM10sIFszLDIsMV0pOyAvLyB0cnVlIGtoaSBleGFjdGx5UG9zaXRpb24gPSBmYWxzZVxuICogaXNFcXVhbChbMSwyLDNdLCBbMywyLDFdKTsgLy8gZmFsc2Uga2hpIGV4YWN0bHlQb3NpdGlvbiA9IHRydWVcbiAqIGlzRXF1YWwoe2E6MX0sIHthOjF9KTsgLy8gdHJ1ZVxuICovXG5leHBvcnQgY29uc3QgaXNFcXVhbCA9IChcbiAgdmFsdWUxOiBhbnksXG4gIHZhbHVlMjogYW55LFxuICBvcHRpb25zPzoge1xuICAgIGV4YWN0bHlQb3NpdGlvbj86IGJvb2xlYW47XG4gICAgaWdub3JlRXhhY3RseURhdGFUeXBlPzogYm9vbGVhbjtcbiAgICBpZ25vcmVVbldyYXBTaWduYWw/OiBib29sZWFuO1xuICB9XG4pOiBib29sZWFuID0+IHtcbiAgLy8gSGFuZGxlIHNpZ25hbHNcbiAgaWYgKCFvcHRpb25zPy5pZ25vcmVVbldyYXBTaWduYWwpIHtcbiAgICB2YWx1ZTEgPSBjb252ZXJ0U2lnbmFsVG9PYmplY3QodmFsdWUxKTtcbiAgICB2YWx1ZTIgPSBjb252ZXJ0U2lnbmFsVG9PYmplY3QodmFsdWUyKTtcbiAgfVxuICBjb25zdCB7IGV4YWN0bHlQb3NpdGlvbiA9IGZhbHNlLCBpZ25vcmVFeGFjdGx5RGF0YVR5cGUgPSBmYWxzZSB9ID0gb3B0aW9ucyB8fCB7fTtcblxuICBpZiAodmFsdWUxID09PSB2YWx1ZTIgfHwgKHZhbHVlMSA9PT0gbnVsbCAmJiB2YWx1ZTIgPT09IG51bGwpIHx8ICh2YWx1ZTEgPT09IHVuZGVmaW5lZCAmJiB2YWx1ZTIgPT09IHVuZGVmaW5lZCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpZ25vcmVFeGFjdGx5RGF0YVR5cGUpIHtcbiAgICByZXR1cm4gaXNFcXVhbChpc05pbCh2YWx1ZTEpID8gdW5kZWZpbmVkIDogYCR7dmFsdWUxfWAsIGlzTmlsKHZhbHVlMikgPyB1bmRlZmluZWQgOiBgJHt2YWx1ZTJ9YCk7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlMSAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHZhbHVlMiAhPT0gJ29iamVjdCcgfHwgKEFycmF5LmlzQXJyYXkodmFsdWUxKSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZTIpKSB8fCAoIUFycmF5LmlzQXJyYXkodmFsdWUxKSAmJiBBcnJheS5pc0FycmF5KHZhbHVlMikpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUxKSkge1xuICAgIGlmICh2YWx1ZTEubGVuZ3RoICE9PSB2YWx1ZTIubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghZXhhY3RseVBvc2l0aW9uKSB7XG4gICAgICByZXR1cm4gIXZhbHVlMS5zb21lKChpdGVtKSA9PiAhdmFsdWUyLmluY2x1ZGVzKGl0ZW0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gIXZhbHVlMS5zb21lKChpdGVtLCBpbmRleCkgPT4gIWlzRXF1YWwoaXRlbSwgdmFsdWUyW2luZGV4XSwgb3B0aW9ucykpO1xuICB9XG5cbiAgaWYgKE9iamVjdC5rZXlzKHZhbHVlMSkubGVuZ3RoICE9PSBPYmplY3Qua2V5cyh2YWx1ZTIpLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gIU9iamVjdC5rZXlzKHZhbHVlMSkuc29tZSgoa2V5KSA9PiAhaXNFcXVhbCh2YWx1ZTFba2V5XSwgdmFsdWUyW2tleV0sIG9wdGlvbnMpKTtcbn07XG5cbi8qKlxuICogTG/huqFpIGLhu48gY8OhYyBwaOG6p24gdOG7rSB0csO5bmcgbOG6t3AgdHJvbmcgbeG6o25nIGThu7FhIHRyw6puIG3hu5l0IHRodeG7mWMgdMOtbmggY2jhu4kgxJHhu4tuaFxuICogQHBhcmFtIGRhdGEgTeG6o25nIGThu68gbGnhu4d1IGPhuqduIHjhu60gbMO9XG4gKiBAcGFyYW0ga2V5IFTDqm4gdGh14buZYyB0w61uaCBkw7luZyDEkeG7gyBzbyBzw6FuaCB0csO5bmcgbOG6t3AuIE7hur91IGtow7RuZyBjw7Mga2V5IHRow6wgc28gc8OhbmggdHLhu7FjIHRp4bq/cCBnacOhIHRy4buLXG4gKiBAcmV0dXJucyBN4bqjbmcgbeG7m2kgY2jhu6lhIGPDoWMgcGjhuqduIHThu60ga2jDtG5nIHRyw7luZyBs4bq3cFxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGFyciA9IFtcbiAqICAgeyBpZDogMSwgbmFtZTogJ0EnIH0sXG4gKiAgIHsgaWQ6IDIsIG5hbWU6ICdCJyB9LFxuICogICB7IGlkOiAxLCBuYW1lOiAnQycgfVxuICogXTtcbiAqIHVuaXFCeShhcnIsICdpZCcpOyAvLyBbeyBpZDogMSwgbmFtZTogJ0EnIH0sIHsgaWQ6IDIsIG5hbWU6ICdCJyB9XVxuICpcbiAqIGNvbnN0IG51bWJlcnMgPSBbMSwgMiwgMiwgMywgM107XG4gKiB1bmlxQnkobnVtYmVycyk7IC8vIFsxLCAyLCAzXVxuICpcbiAqIGNvbnN0IG51bWJlcnNTaWduYWwgPSBbc2lnbmFsKDEpLCBzaWduYWwoMiksIHNpZ25hbCgzKSwgc2lnbmFsKDIpLCBzaWduYWwoNSksIHNpZ25hbCg0KSwgc2lnbmFsKDEpLCBzaWduYWwoNiksIHNpZ25hbCg3KSwgc2lnbmFsKDYpXTtcbiAqIHVuaXFCeShudW1iZXJzU2lnbmFsKTsgLy8gW3NpZ25hbCgxKSwgc2lnbmFsKDIpLCBzaWduYWwoMyksIHNpZ25hbCg1KSwgc2lnbmFsKDQpLCBzaWduYWwoNiksIHNpZ25hbCg3KV1cbiAqL1xuZXhwb3J0IGNvbnN0IHVuaXFCeSA9IDxUPihkYXRhOiBBcnJheTxUPiwga2V5Pzogc3RyaW5nKTogQXJyYXk8VD4gPT4ge1xuICBpZiAoIWtleSB8fCAhZGF0YT8ubGVuZ3RoIHx8IHR5cGVvZiBnZXQoZGF0YSwgJzAnKSAhPT0gJ29iamVjdCcpIHtcbiAgICAvLyBY4butIGzDvSBt4bqjbmcgY2jhu6lhIHNpZ25hbCB2YWx1ZXNcbiAgICBpZiAoZGF0YVswXSAmJiBpc1NpZ25hbChkYXRhWzBdKSkge1xuICAgICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgICByZXR1cm4gZGF0YS5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBgJHtnZXQoaXRlbSwgJycpfWA7XG4gICAgICAgIGlmIChzZWVuLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgc2Vlbi5hZGQodmFsdWUpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBY4butIGzDvSBt4bqjbmcgcHJpbWl0aXZlIHZhbHVlc1xuICAgIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoZGF0YSkpO1xuICB9XG5cbiAgY29uc3QgZGF0YVVuaXF1ZSA9IGtleUJ5KGRhdGEgYXMgQXJyYXk8UmVjb3JkPHN0cmluZywgYW55Pj4sIGtleSk7XG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKGRhdGFVbmlxdWUpLm1hcCgoa2V5KSA9PiBkYXRhVW5pcXVlW2tleV0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlSW50ZXJmYWNlID0gKG9iajogYW55LCBpbnRlcmZhY2VOYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBnZW5lcmF0ZVR5cGUgPSAodmFsdWU6IGFueSk6IHN0cmluZyA9PiB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJ251bGwnO1xuICAgIH1cbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIHZhbHVlO1xuXG4gICAgaWYgKHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gJ3N0cmluZyc7XG4gICAgfVxuICAgIGlmICh0eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuICdudW1iZXInO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gJ2Jvb2xlYW4nO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiAnYW55JztcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICByZXR1cm4gJ0RhdGUnO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgcmV0dXJuICdSZWdFeHAnO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gJ0FycmF5PGFueT4nO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGBBcnJheTwke2dlbmVyYXRlVHlwZSh2YWx1ZVswXSl9PmA7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICBsZXQgaW50ZXJmYWNlU3RyID0gJ3tcXG4nO1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlVHlwZSA9IGdlbmVyYXRlVHlwZSh2YWx1ZVtrZXldKTtcbiAgICAgICAgICBpbnRlcmZhY2VTdHIgKz0gYCAgJHtrZXl9OiAke3ZhbHVlVHlwZX07XFxuYDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaW50ZXJmYWNlU3RyICs9ICd9JztcbiAgICAgIHJldHVybiBpbnRlcmZhY2VTdHI7XG4gICAgfVxuXG4gICAgcmV0dXJuICdhbnknO1xuICB9O1xuXG4gIGNvbnN0IGludGVyZmFjZVN0ciA9IGBpbnRlcmZhY2UgJHtpbnRlcmZhY2VOYW1lfSAke2dlbmVyYXRlVHlwZShvYmopfWA7XG4gIHJldHVybiBpbnRlcmZhY2VTdHI7XG59O1xuIl19
package/esm2022/index.mjs CHANGED
@@ -26,4 +26,5 @@ export * from './uri';
26
26
  export * from './format-text';
27
27
  export * from './get-smart-axis-scale';
28
28
  export * from './random';
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzLXVpL3V0aWxzL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9kb20nO1xuZXhwb3J0ICogZnJvbSAnLi91cmwtc2VhcmNoLXBhcmFtcyc7XG5leHBvcnQgKiBmcm9tICcuL3V1aWQnO1xuZXhwb3J0ICogZnJvbSAnLi9oZWxwZXJzJztcbmV4cG9ydCAqIGZyb20gJy4vY29sb3InO1xuZXhwb3J0ICogZnJvbSAnLi9jcnlwdG8nO1xuZXhwb3J0ICogZnJvbSAnLi9jcnlwdG8tM3JkJztcbmV4cG9ydCAqIGZyb20gJy4va2V5LWNvZGUnO1xuZXhwb3J0ICogZnJvbSAnLi9odHRwLXBhcmFtcyc7XG5leHBvcnQgKiBmcm9tICcuL2xhbmd1YWdlJztcbmV4cG9ydCAqIGZyb20gJy4va2V5LWNhY2hlJztcbmV4cG9ydCAqIGZyb20gJy4vY2FjaGUnO1xuZXhwb3J0ICogZnJvbSAnLi9mb3JtYXQtbnVtYmVyJztcbmV4cG9ydCAqIGZyb20gJy4vY29tbXVuaWNhdGUtbWljcm8nO1xuZXhwb3J0ICogZnJvbSAnLi9mdW5jdGlvbi1jaGVjay1lbWJlZC1mcmFtZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cyc7XG5leHBvcnQgKiBmcm9tICcuL3BhdHRlcm4nO1xuZXhwb3J0ICogZnJvbSAnLi94c3MtZmlsdGVyJztcbmV4cG9ydCAqIGZyb20gJy4vdHdvLXdheS1zaWduYWwtb2JqZWN0JztcbmV4cG9ydCAqIGZyb20gJy4vZGF0ZSc7XG5leHBvcnQgKiBmcm9tICcuL2Rvd25sb2FkJztcbmV4cG9ydCAqIGZyb20gJy4vYmFzZTY0JztcbmV4cG9ydCAqIGZyb20gJy4vaW5qZWN0LXRva2VuJztcbmV4cG9ydCAqIGZyb20gJy4vZmlsZSc7XG5leHBvcnQgKiBmcm9tICcuL3VyaSc7XG5leHBvcnQgKiBmcm9tICcuL2Zvcm1hdC10ZXh0JztcbmV4cG9ydCAqIGZyb20gJy4vZ2V0LXNtYXJ0LWF4aXMtc2NhbGUnO1xuZXhwb3J0ICogZnJvbSAnLi9yYW5kb20nO1xuIl19
29
+ export * from './dangerous-object';
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzLXVpL3V0aWxzL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2RvbSc7XG5leHBvcnQgKiBmcm9tICcuL3VybC1zZWFyY2gtcGFyYW1zJztcbmV4cG9ydCAqIGZyb20gJy4vdXVpZCc7XG5leHBvcnQgKiBmcm9tICcuL2hlbHBlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb2xvcic7XG5leHBvcnQgKiBmcm9tICcuL2NyeXB0byc7XG5leHBvcnQgKiBmcm9tICcuL2NyeXB0by0zcmQnO1xuZXhwb3J0ICogZnJvbSAnLi9rZXktY29kZSc7XG5leHBvcnQgKiBmcm9tICcuL2h0dHAtcGFyYW1zJztcbmV4cG9ydCAqIGZyb20gJy4vbGFuZ3VhZ2UnO1xuZXhwb3J0ICogZnJvbSAnLi9rZXktY2FjaGUnO1xuZXhwb3J0ICogZnJvbSAnLi9jYWNoZSc7XG5leHBvcnQgKiBmcm9tICcuL2Zvcm1hdC1udW1iZXInO1xuZXhwb3J0ICogZnJvbSAnLi9jb21tdW5pY2F0ZS1taWNybyc7XG5leHBvcnQgKiBmcm9tICcuL2Z1bmN0aW9uLWNoZWNrLWVtYmVkLWZyYW1lJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vcGF0dGVybic7XG5leHBvcnQgKiBmcm9tICcuL3hzcy1maWx0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi90d28td2F5LXNpZ25hbC1vYmplY3QnO1xuZXhwb3J0ICogZnJvbSAnLi9kYXRlJztcbmV4cG9ydCAqIGZyb20gJy4vZG93bmxvYWQnO1xuZXhwb3J0ICogZnJvbSAnLi9iYXNlNjQnO1xuZXhwb3J0ICogZnJvbSAnLi9pbmplY3QtdG9rZW4nO1xuZXhwb3J0ICogZnJvbSAnLi9maWxlJztcbmV4cG9ydCAqIGZyb20gJy4vdXJpJztcbmV4cG9ydCAqIGZyb20gJy4vZm9ybWF0LXRleHQnO1xuZXhwb3J0ICogZnJvbSAnLi9nZXQtc21hcnQtYXhpcy1zY2FsZSc7XG5leHBvcnQgKiBmcm9tICcuL3JhbmRvbSc7XG5leHBvcnQgKiBmcm9tICcuL2Rhbmdlcm91cy1vYmplY3QnO1xuIl19