@myrtex-org/form 1.1.69 → 1.1.70
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/modules/object-form/components/elements/input/table/components/input-table-modal/input-table-modal.component.mjs +24 -38
- package/esm2022/lib/modules/object-form/components/elements/input/table/input-table.component.mjs +11 -1
- package/fesm2022/myrtex-org-form.mjs +33 -38
- package/fesm2022/myrtex-org-form.mjs.map +1 -1
- package/lib/modules/object-form/components/elements/input/table/input-table.component.d.ts +2 -2
- package/package.json +1 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, Component, Inject } from '@angular/core';
|
|
2
|
+
import { isArray } from 'lodash-es';
|
|
2
3
|
import { ButtonModule, MODAL_DATA, ModalModule, ModalServiceComponent } from '@myrtex-org/ui';
|
|
3
4
|
import { FormDispenserModal } from './form-dispenser-modal/form-dispenser-modal.component';
|
|
4
5
|
import { provideNgxMask } from 'ngx-mask';
|
|
@@ -25,44 +26,20 @@ export class InputTableModalComponent extends ModalServiceComponent {
|
|
|
25
26
|
}
|
|
26
27
|
componentValueChanged(valueModel) {
|
|
27
28
|
console.group('=== МОДАЛКА: Изменение значения в форме ===');
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
38
|
-
// Проходим по сгруппированным изменениям
|
|
39
|
-
Object.keys(groups).forEach(sysName => {
|
|
40
|
-
const changedItems = groups[sysName];
|
|
41
|
-
if (changedItems.length === 2) {
|
|
42
|
-
// Это диапазон дат (два объекта с одинаковым sysName)
|
|
43
|
-
// Ищем в rowModel оригинальное поле (например, 'itb6-id0') и СЛЕДУЮЩЕЕ за ним ('itb6-id1')
|
|
44
|
-
const startIndex = cloneRowModel.data.findIndex(c => c.sysName === sysName);
|
|
45
|
-
if (startIndex !== -1) {
|
|
46
|
-
// Записываем дату начала в текущее поле
|
|
47
|
-
cloneRowModel.data[startIndex].value = changedItems[0].value;
|
|
48
|
-
// Записываем дату окончания в следующее по порядку поле (id1)
|
|
49
|
-
if (cloneRowModel.data[startIndex + 1]) {
|
|
50
|
-
cloneRowModel.data[startIndex + 1].value = changedItems[1].value;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
else if (changedItems.length === 1) {
|
|
55
|
-
// Обычное одиночное поле
|
|
56
|
-
const findValue = cloneRowModel.data.find(c => c.sysName === sysName);
|
|
57
|
-
if (findValue) {
|
|
58
|
-
findValue.value = changedItems[0].value;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
this.rowModel = cloneRowModel;
|
|
29
|
+
console.log('Что пришло из FormDispenser (valueModel):', structuredClone(valueModel));
|
|
30
|
+
console.log('Текущий rowModel.data ДО трансформации:', structuredClone(this.rowModel.data));
|
|
31
|
+
if (isArray(valueModel)) {
|
|
32
|
+
valueModel.forEach(model => {
|
|
33
|
+
this._transformValues(model);
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
this._transformValues(valueModel);
|
|
38
|
+
}
|
|
63
39
|
this._recalculateFormulaFields();
|
|
40
|
+
console.log('Итоговый rowModel.data ПОСЛЕ трансформации и формул:', structuredClone(this.rowModel.data));
|
|
64
41
|
this.emptyRow = this.rowModel.data.every(x => this.isEmpty(x.value, x.valueType));
|
|
65
|
-
console.log('
|
|
42
|
+
console.log('Статус emptyRow:', this.emptyRow);
|
|
66
43
|
console.groupEnd();
|
|
67
44
|
}
|
|
68
45
|
ok() {
|
|
@@ -88,9 +65,18 @@ export class InputTableModalComponent extends ModalServiceComponent {
|
|
|
88
65
|
}
|
|
89
66
|
_transformValues(value) {
|
|
90
67
|
const cloneRowModel = structuredClone(this.rowModel);
|
|
68
|
+
// Ищем поле в модели строки
|
|
91
69
|
const findValue = cloneRowModel.data.find((c) => c.sysName === value.sysName);
|
|
92
70
|
if (findValue) {
|
|
93
|
-
|
|
71
|
+
// Если это компонент даты и это range (пришел массив), записываем его целиком
|
|
72
|
+
if (value.type === 'inputDate' && Array.isArray(value.value)) {
|
|
73
|
+
console.log(`[Трансформация] Записываем МАССИВ дат в ${value.sysName}:`, value.value);
|
|
74
|
+
findValue.value = value.value; // Запишется ["2026-04-30...", "2026-05-02..."]
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
// Для всех остальных обычных полей
|
|
78
|
+
findValue.value = value.value;
|
|
79
|
+
}
|
|
94
80
|
}
|
|
95
81
|
this.rowModel = cloneRowModel;
|
|
96
82
|
}
|
|
@@ -187,4 +173,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
187
173
|
type: Inject,
|
|
188
174
|
args: [MODAL_DATA]
|
|
189
175
|
}] }] });
|
|
190
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtdGFibGUtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGV4LWZvcm0vc3JjL2xpYi9tb2R1bGVzL29iamVjdC1mb3JtL2NvbXBvbmVudHMvZWxlbWVudHMvaW5wdXQvdGFibGUvY29tcG9uZW50cy9pbnB1dC10YWJsZS1tb2RhbC9pbnB1dC10YWJsZS1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJ0ZXgtZm9ybS9zcmMvbGliL21vZHVsZXMvb2JqZWN0LWZvcm0vY29tcG9uZW50cy9lbGVtZW50cy9pbnB1dC90YWJsZS9jb21wb25lbnRzL2lucHV0LXRhYmxlLW1vZGFsL2lucHV0LXRhYmxlLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBWSxxQkFBcUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3hHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDMUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFdkYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFNUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7Ozs7O0FBaUM5RixNQUFNLE9BQU8sd0JBQXlCLFNBQVEscUJBQW1FO0lBUy9HLFlB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ZixDQUFDOytHQXZNVSx3QkFBd0Isc0dBYXpCLFVBQVU7bUdBYlQsd0JBQXdCLG9FQU54QjtZQUNULGNBQWMsRUFBRTtZQUNoQix1QkFBdUI7WUFDdkIsZ0JBQWdCLENBQUMsd0JBQXdCO1NBQzFDLGlEQzFDSCx3eEJBOEJBLHlERElJLFdBQVcsd1dBQ1gsWUFBWSw2VUFDWixrQkFBa0I7OzRGQVFULHdCQUF3QjtrQkFqQnBDLFNBQVM7K0JBQ0UsdUJBQXVCLG1CQUdoQix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUDt3QkFDUCxXQUFXO3dCQUNYLFlBQVk7d0JBQ1osa0JBQWtCO3FCQUNuQixhQUNVO3dCQUNULGNBQWMsRUFBRTt3QkFDaEIsdUJBQXVCO3dCQUN2QixnQkFBZ0IsQ0FBQyx3QkFBd0I7cUJBQzFDOzswQkFlRSxNQUFNOzJCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ2xvZGFzaC1lcyc7XHJcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSwgTU9EQUxfREFUQSwgTW9kYWxNb2R1bGUsIE1vZGFsUmVmLCBNb2RhbFNlcnZpY2VDb21wb25lbnQgfSBmcm9tICdAbXlydGV4LW9yZy91aSc7XHJcbmltcG9ydCB7IElucHV0VGFibGVNb2RlbCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL21vZGVscy9lbGVtZXRzL2lucHV0cyc7XHJcbmltcG9ydCB7IENvbXBvbmVudFZhbHVlTW9kZWwsIFRhYmxlUm93TW9kZWwgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBGb3JtRGlzcGVuc2VyTW9kYWwgfSBmcm9tICcuL2Zvcm0tZGlzcGVuc2VyLW1vZGFsL2Zvcm0tZGlzcGVuc2VyLW1vZGFsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IHByb3ZpZGVOZ3hNYXNrIH0gZnJvbSAnbmd4LW1hc2snO1xyXG5pbXBvcnQgeyBGb3JtdWxhQ2FsY3VsYXRlU2VydmljZSwgUmVmZXJlbmNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XHJcbmltcG9ydCB7IG9iamVjdEZvcm1BY3Rpb25zIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vc3RvcmUnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRNb2RlbEJhc2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi8uLi9zaGFyZWQtZm9ybS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRUeXBlLCBJbnB1dFN0YXRlLCBWYWx1ZVR5cGUgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi8uLi9zaGFyZWQtZm9ybS9lbnVtcyc7XHJcbmltcG9ydCB7IElucHV0TnVtYmVyTW9kZWwgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9tb2RlbHMvZWxlbWV0cy9pbnB1dHMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJbnB1dFRhYmxlTW9kYWxQYXJhbXMge1xyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgb2tUZXh0OiBzdHJpbmc7XHJcbiAgc2V0dGluZ3M6IElucHV0VGFibGVNb2RlbDtcclxuICByb3dNb2RlbDogVGFibGVSb3dNb2RlbDtcclxuICBpc0NoZWNrUmVxdWlyZWQ6IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSW5wdXRUYWJsZU1vZGFsUmVzdWx0IHtcclxuICByZXN1bHQ6IGJvb2xlYW47XHJcbiAgcm93TW9kZWw6IFRhYmxlUm93TW9kZWw7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWlucHV0LXRhYmxlLW1vZGFsJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaW5wdXQtdGFibGUtbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2lucHV0LXRhYmxlLW1vZGFsLmNvbXBvbmVudC5sZXNzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBNb2RhbE1vZHVsZSxcclxuICAgIEJ1dHRvbk1vZHVsZSxcclxuICAgIEZvcm1EaXNwZW5zZXJNb2RhbCxcclxuICBdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgcHJvdmlkZU5neE1hc2soKSxcclxuICAgIEZvcm11bGFDYWxjdWxhdGVTZXJ2aWNlLFxyXG4gICAgUmVmZXJlbmNlU2VydmljZSAvLyDQtNC70Y8g0LrQvtC80L/QvtC90LXQvdGC0LAg0YHQv9C40YHQvtC6XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW5wdXRUYWJsZU1vZGFsQ29tcG9uZW50IGV4dGVuZHMgTW9kYWxTZXJ2aWNlQ29tcG9uZW50PElucHV0VGFibGVNb2RhbFBhcmFtcywgSW5wdXRUYWJsZU1vZGFsUmVzdWx0PiB7XHJcbiAgcHVibGljIHRpdGxlITogc3RyaW5nO1xyXG4gIHB1YmxpYyBva1RleHQhOiBzdHJpbmc7XHJcbiAgcHVibGljIHNldHRpbmdzITogSW5wdXRUYWJsZU1vZGVsO1xyXG4gIHB1YmxpYyByb3dNb2RlbCE6IFRhYmxlUm93TW9kZWw7XHJcbiAgLy8g0JfQsNC/0L7QvNC40L3QsNC10Lwg0YHRgtCw0YLRg9GBINC/0YDQvtCy0LXRgNC60Lgg0YTQvtGA0LzRiyDQv9GA0Lgg0L7RgtC60YDRi9GC0LjQuCDQvNC+0LTQsNC70LrQuFxyXG4gIHB1YmxpYyBpc0NoZWNrUmVxdWlyZWQhOiBib29sZWFuO1xyXG4gIHB1YmxpYyBlbXB0eVJvdzogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBkaWFsb2dSZWY6IE1vZGFsUmVmPElucHV0VGFibGVNb2RhbFJlc3VsdD4sXHJcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZSxcclxuICAgIHByaXZhdGUgZm9ybXVsYUNhbGN1bGF0ZVNlcnZpY2U6IEZvcm11bGFDYWxjdWxhdGVTZXJ2aWNlLFxyXG4gICAgQEluamVjdChNT0RBTF9EQVRBKSBkYXRhOiBJbnB1dFRhYmxlTW9kYWxQYXJhbXMsXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG5cclxuICAgIHRoaXMudGl0bGUgPSBkYXRhLnRpdGxlO1xyXG4gICAgdGhpcy5va1RleHQgPSBkYXRhLm9rVGV4dFxyXG4gICAgdGhpcy5zZXR0aW5ncyA9IGRhdGEuc2V0dGluZ3M7XHJcbiAgICB0aGlzLnJvd01vZGVsID0gZGF0YS5yb3dNb2RlbDtcclxuICAgIHRoaXMuaXNDaGVja1JlcXVpcmVkID0gZGF0YS5pc0NoZWNrUmVxdWlyZWQ7XHJcblxyXG4gICAgdGhpcy5yZXN1bHQgPSB7cmVzdWx0OiBmYWxzZSwgcm93TW9kZWw6IHRoaXMucm93TW9kZWx9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbXBvbmVudFZhbHVlQ2hhbmdlZCh2YWx1ZU1vZGVsOiBDb21wb25lbnRWYWx1ZU1vZGVsIHwgQ29tcG9uZW50VmFsdWVNb2RlbFtdKSB7XHJcbiAgICBjb25zb2xlLmdyb3VwKCc9PT0g0JzQntCU0JDQm9Ca0JA6INCY0LfQvNC10L3QtdC90LjQtSDQt9C90LDRh9C10L3QuNGPINCyINGE0L7RgNC80LUgPT09Jyk7XHJcbiAgICBcclxuICAgIC8vINCf0LXRgNC10LLQvtC00LjQvCDQstGB0ZEg0LIg0LzQsNGB0YHQuNCyINC00LvRjyDRg9C00L7QsdGB0YLQstCwINC+0LHRgNCw0LHQvtGC0LrQuFxyXG4gICAgY29uc3QgbW9kZWxzID0gQXJyYXkuaXNBcnJheSh2YWx1ZU1vZGVsKSA/IHZhbHVlTW9kZWwgOiBbdmFsdWVNb2RlbF07XHJcbiAgICBcclxuICAgIGNvbnN0IGNsb25lUm93TW9kZWwgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5yb3dNb2RlbCk7XHJcblxyXG4gICAgLy8g0KHQs9GA0YPQv9C/0LjRgNGD0LXQvCDQv9GA0LjRiNC10LTRiNC40LUg0LfQvdCw0YfQtdC90LjRjyDQv9C+IHN5c05hbWUsINGH0YLQvtCx0Ysg0LLRi9GP0LLQuNGC0YwgcmFuZ2Ut0L/QvtC70Y9cclxuICAgIGNvbnN0IGdyb3VwczogeyBba2V5OiBzdHJpbmddOiBDb21wb25lbnRWYWx1ZU1vZGVsW10gfSA9IHt9O1xyXG4gICAgbW9kZWxzLmZvckVhY2gobSA9PiB7XHJcbiAgICAgIGlmICghZ3JvdXBzW20uc3lzTmFtZV0pIGdyb3Vwc1ttLnN5c05hbWVdID0gW107XHJcbiAgICAgIGdyb3Vwc1ttLnN5c05hbWVdLnB1c2gobSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyDQn9GA0L7RhdC+0LTQuNC8INC/0L4g0YHQs9GA0YPQv9C/0LjRgNC+0LLQsNC90L3Ri9C8INC40LfQvNC10L3QtdC90LjRj9C8XHJcbiAgICBPYmplY3Qua2V5cyhncm91cHMpLmZvckVhY2goc3lzTmFtZSA9PiB7XHJcbiAgICAgIGNvbnN0IGNoYW5nZWRJdGVtcyA9IGdyb3Vwc1tzeXNOYW1lXTtcclxuXHJcbiAgICAgIGlmIChjaGFuZ2VkSXRlbXMubGVuZ3RoID09PSAyKSB7XHJcbiAgICAgICAgLy8g0K3RgtC+INC00LjQsNC/0LDQt9C+0L0g0LTQsNGCICjQtNCy0LAg0L7QsdGK0LXQutGC0LAg0YEg0L7QtNC40L3QsNC60L7QstGL0Lwgc3lzTmFtZSlcclxuICAgICAgICAvLyDQmNGJ0LXQvCDQsiByb3dNb2RlbCDQvtGA0LjQs9C40L3QsNC70YzQvdC+0LUg0L/QvtC70LUgKNC90LDQv9GA0LjQvNC10YAsICdpdGI2LWlkMCcpINC4INCh0JvQldCU0KPQrtCp0JXQlSDQt9CwINC90LjQvCAoJ2l0YjYtaWQxJylcclxuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gY2xvbmVSb3dNb2RlbC5kYXRhLmZpbmRJbmRleChjID0+IGMuc3lzTmFtZSA9PT0gc3lzTmFtZSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHN0YXJ0SW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAvLyDQl9Cw0L/QuNGB0YvQstCw0LXQvCDQtNCw0YLRgyDQvdCw0YfQsNC70LAg0LIg0YLQtdC60YPRidC10LUg0L/QvtC70LVcclxuICAgICAgICAgIGNsb25lUm93TW9kZWwuZGF0YVtzdGFydEluZGV4XS52YWx1ZSA9IGNoYW5nZWRJdGVtc1swXS52YWx1ZTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgLy8g0JfQsNC/0LjRgdGL0LLQsNC10Lwg0LTQsNGC0YMg0L7QutC+0L3Rh9Cw0L3QuNGPINCyINGB0LvQtdC00YPRjtGJ0LXQtSDQv9C+INC/0L7RgNGP0LTQutGDINC/0L7Qu9C1IChpZDEpXHJcbiAgICAgICAgICBpZiAoY2xvbmVSb3dNb2RlbC5kYXRhW3N0YXJ0SW5kZXggKyAxXSkge1xyXG4gICAgICAgICAgICBjbG9uZVJvd01vZGVsLmRhdGFbc3RhcnRJbmRleCArIDFdLnZhbHVlID0gY2hhbmdlZEl0ZW1zWzFdLnZhbHVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChjaGFuZ2VkSXRlbXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgLy8g0J7QsdGL0YfQvdC+0LUg0L7QtNC40L3QvtGH0L3QvtC1INC/0L7Qu9C1XHJcbiAgICAgICAgY29uc3QgZmluZFZhbHVlID0gY2xvbmVSb3dNb2RlbC5kYXRhLmZpbmQoYyA9PiBjLnN5c05hbWUgPT09IHN5c05hbWUpO1xyXG4gICAgICAgIGlmIChmaW5kVmFsdWUpIHtcclxuICAgICAgICAgIGZpbmRWYWx1ZS52YWx1ZSA9IGNoYW5nZWRJdGVtc1swXS52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucm93TW9kZWwgPSBjbG9uZVJvd01vZGVsO1xyXG5cclxuICAgIHRoaXMuX3JlY2FsY3VsYXRlRm9ybXVsYUZpZWxkcygpO1xyXG4gICAgdGhpcy5lbXB0eVJvdyA9IHRoaXMucm93TW9kZWwuZGF0YS5ldmVyeSh4ID0+IHRoaXMuaXNFbXB0eSh4LnZhbHVlLCB4LnZhbHVlVHlwZSkpO1xyXG4gICAgXHJcbiAgICBjb25zb2xlLmxvZygn0JjRgtC+0LPQvtCy0YvQuSByb3dNb2RlbC5kYXRhINCf0J7QodCb0JUg0LjRgdC/0YDQsNCy0LvQtdC90LjRjzonLCBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5yb3dNb2RlbC5kYXRhKSk7XHJcbiAgICBjb25zb2xlLmdyb3VwRW5kKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb2soKSB7XHJcbiAgICBjb25zb2xlLmdyb3VwKCc9PT0g0JzQntCU0JDQm9Ca0JA6INCd0LDQttCw0YLQsCDQutC90L7Qv9C60LAg0J7QmiA9PT0nKTtcclxuICAgIGNvbnNvbGUubG9nKCfQpNC40L3QsNC70YzQvdGL0Lkgcm93TW9kZWwg0L/QtdGA0LXQtCDQvtGC0L/RgNCw0LLQutC+0Lkg0LIg0YLQsNCx0LvQuNGG0YM6Jywgc3RydWN0dXJlZENsb25lKHRoaXMucm93TW9kZWwpKTtcclxuICAgIFxyXG4gICAgaWYgKCF0aGlzLl9pc1ZhbGlkKCkpIHtcclxuICAgICAgY29uc29sZS53YXJuKCfQktCw0LvQuNC00LDRhtC40Y8g0LzQvtC00LDQu9C60Lgg0J3QlSDQn9Cg0J7QmdCU0JXQndCQJyk7XHJcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gob2JqZWN0Rm9ybUFjdGlvbnMudXBkYXRlQ2hlY2tSZXF1aXJlZCh7IGlzQ2hlY2tSZXF1aXJlZDogdHJ1ZSB9KSk7XHJcbiAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKCfQktCw0LvQuNC00LDRhtC40Y8g0YPRgdC/0LXRiNC90LAuINCX0LDQutGA0YvQstCw0LXQvCDQvNC+0LTQsNC70LrRgyDRgSDRgNC10LfRg9C70YzRgtCw0YLQvtC8IHRydWUuJyk7XHJcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG9iamVjdEZvcm1BY3Rpb25zLnVwZGF0ZUNoZWNrUmVxdWlyZWQoeyBpc0NoZWNrUmVxdWlyZWQ6IHRoaXMuaXNDaGVja1JlcXVpcmVkIH0pKTtcclxuICAgIHRoaXMucmVzdWx0ID0geyByZXN1bHQ6IHRydWUsIHJvd01vZGVsOiB0aGlzLnJvd01vZGVsIH07XHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5yZXN1bHQpKTtcclxuICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbG9zZSgpIHtcclxuICAgIC8vINCy0L7Qt9Cy0YDQsNGJ0LDQtdC8INC/0YDQuNC30L3QsNC6INC60LDQuiDQsdGL0Lsg0LTQviDQvtGC0LrRgNGL0YLQuNGPINC80L7QtNCw0LvQutC4XHJcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG9iamVjdEZvcm1BY3Rpb25zLnVwZGF0ZUNoZWNrUmVxdWlyZWQoeyBpc0NoZWNrUmVxdWlyZWQ6IHRoaXMuaXNDaGVja1JlcXVpcmVkIH0pKTtcclxuXHJcbiAgICB0aGlzLnJlc3VsdCA9IHtyZXN1bHQ6IGZhbHNlLCByb3dNb2RlbDogdGhpcy5yb3dNb2RlbH07XHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh0aGlzLnJlc3VsdCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF90cmFuc2Zvcm1WYWx1ZXModmFsdWU6IENvbXBvbmVudFZhbHVlTW9kZWwpIHtcclxuICAgIGNvbnN0IGNsb25lUm93TW9kZWwgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5yb3dNb2RlbCk7XHJcbiAgICBjb25zdCBmaW5kVmFsdWU6IENvbXBvbmVudFZhbHVlTW9kZWwgfCB1bmRlZmluZWQgPSBjbG9uZVJvd01vZGVsLmRhdGEuZmluZCgoYzogQ29tcG9uZW50VmFsdWVNb2RlbCkgPT4gYy5zeXNOYW1lID09PSB2YWx1ZS5zeXNOYW1lKTtcclxuXHJcbiAgICBpZiAoZmluZFZhbHVlKSB7XHJcbiAgICAgIGZpbmRWYWx1ZS52YWx1ZSA9IHZhbHVlLnZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucm93TW9kZWwgPSBjbG9uZVJvd01vZGVsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVjYWxjdWxhdGVGb3JtdWxhRmllbGRzKCkge1xyXG4gICAgY29uc3QgZm9ybXVsYUNvbXBvbmVudHMgPSB0aGlzLl9nZXRGb3JtdWxhTnVtYmVyQ29tcG9uZW50cyh0aGlzLnNldHRpbmdzLmNvbXBvbmVudHMpO1xyXG5cclxuICAgIGlmICghZm9ybXVsYUNvbXBvbmVudHMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjbG9uZVJvd01vZGVsID0gc3RydWN0dXJlZENsb25lKHRoaXMucm93TW9kZWwpO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9ybXVsYUNvbXBvbmVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGhhc1VwZGF0ZXMgPSBmYWxzZTtcclxuXHJcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGZvcm11bGFDb21wb25lbnRzKSB7XHJcbiAgICAgICAgY29uc3QgZm9ybXVsYSA9IGNvbXBvbmVudC5vcHRpb25zPy5mb3JtdWxhPy50cmltKCk7XHJcbiAgICAgICAgaWYgKCFmb3JtdWxhKSB7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZm9ybXVsYUNhbGN1bGF0ZVNlcnZpY2UuY2FsY3VsYXRlTWF0aEV4cHJlc3Npb24oZm9ybXVsYSwgY2xvbmVSb3dNb2RlbC5kYXRhKTtcclxuXHJcbiAgICAgICAgY29uc3QgdGFyZ2V0VmFsdWUgPSBjbG9uZVJvd01vZGVsLmRhdGEuZmluZCh4ID0+IHguc3lzTmFtZSA9PT0gY29tcG9uZW50LnN5c05hbWUpO1xyXG4gICAgICAgIGlmICghdGFyZ2V0VmFsdWUgfHwgdGFyZ2V0VmFsdWUudmFsdWUgPT09IHJlc3VsdCkge1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0YXJnZXRWYWx1ZS52YWx1ZSA9IHJlc3VsdDtcclxuICAgICAgICBoYXNVcGRhdGVzID0gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFoYXNVcGRhdGVzKSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJvd01vZGVsID0gY2xvbmVSb3dNb2RlbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldEZvcm11bGFOdW1iZXJDb21wb25lbnRzKGNvbXBvbmVudHM6IENvbXBvbmVudE1vZGVsQmFzZVtdKTogSW5wdXROdW1iZXJNb2RlbFtdIHtcclxuICAgIGNvbnN0IHJlc3VsdDogSW5wdXROdW1iZXJNb2RlbFtdID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgY29tcG9uZW50LnR5cGUgPT09IENvbXBvbmVudFR5cGUuSW5wdXROdW1iZXIgJiZcclxuICAgICAgICAoY29tcG9uZW50IGFzIElucHV0TnVtYmVyTW9kZWwpLm9wdGlvbnM/LmlucHV0U3RhdGUgPT09IElucHV0U3RhdGUuRm9ybXVsYVxyXG4gICAgICApIHtcclxuICAgICAgICByZXN1bHQucHVzaChjb21wb25lbnQgYXMgSW5wdXROdW1iZXJNb2RlbCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjb21wb25lbnQuY29tcG9uZW50cz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgcmVzdWx0LnB1c2goLi4udGhpcy5fZ2V0Rm9ybXVsYU51bWJlckNvbXBvbmVudHMoY29tcG9uZW50LmNvbXBvbmVudHMpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc1ZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgdmFyIGhhc0Vycm9yID0gZmFsc2U7XHJcbiAgICB2YXIgcmVxdWlyZWRDb21wb25lbnRzID0gdGhpcy5fZ2V0UmVxdWlyZWRDb21wb25lbnRzKHRoaXMuc2V0dGluZ3MuY29tcG9uZW50cyk7XHJcbiAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiByZXF1aXJlZENvbXBvbmVudHMpIHtcclxuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnJvd01vZGVsLmRhdGFcclxuICAgICAgICAuZmluZCh4ID0+IHguc3lzTmFtZSA9PSBjb21wb25lbnQuc3lzTmFtZVxyXG4gICAgICAgICAgICAgIHx8IHguc3lzTmFtZSA9PSBgJHtjb21wb25lbnQuc3lzTmFtZX1fc3RhcnRgXHJcbiAgICAgICAgICAgICAgfHwgeC5zeXNOYW1lID09IGAke2NvbXBvbmVudC5zeXNOYW1lfV9lbmRgKTtcclxuICAgICAgaWYgKCF2YWx1ZT8udmFsdWUpIHtcclxuICAgICAgICBoYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAhaGFzRXJyb3I7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRSZXF1aXJlZENvbXBvbmVudHMoY29tcG9uZW50czogQ29tcG9uZW50TW9kZWxCYXNlW10pOiBDb21wb25lbnRNb2RlbEJhc2VbXXtcclxuICAgIHZhciBjb21wb25lbnRzID0gY29tcG9uZW50cy5maWx0ZXIoeCA9PiB4LnR5cGUgIT0gQ29tcG9uZW50VHlwZS5Hcm91cCAmJiAhIXgub3B0aW9ucy5yZXF1aXJlZCk7XHJcbiAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzLmZpbHRlcih4ID0+IHgudHlwZSA9PSBDb21wb25lbnRUeXBlLkdyb3VwICYmIHguY29tcG9uZW50cy5sZW5ndGggPiAwKSkge1xyXG4gICAgICB0aGlzLl9nZXRSZXF1aXJlZENvbXBvbmVudHMoY29tcG9uZW50LmNvbXBvbmVudHMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbXBvbmVudHM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzRW1wdHkodmFsdWU6IGFueSwgdHlwZTogVmFsdWVUeXBlKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodHlwZSA9PT0gVmFsdWVUeXBlLlVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XHJcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiB0cnVlO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdmFsdWUubGVuZ3RoID09PSAwO1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCI8bXJ4LW1vZGFsXHJcbiAgW3RpdGxlXT1cInRpdGxlXCJcclxuICBzaXplPVwibGFyZ2VcIlxyXG4gIChjbG9zZSk9XCJjbG9zZSgpXCJcclxuICAob2spPVwib2soKVwiXHJcbj5cclxuICA8YXBwLWZvcm0tZGlzcGVuc2VyLW1vZGFsXHJcbiAgICBbc2VjdGlvblNldHRpbmdzXT1cInNldHRpbmdzXCJcclxuICAgIFt2YWx1ZXNdPVwicm93TW9kZWwuZGF0YVwiXHJcbiAgICBbdmFsdWVNb2RlXT1cIidtYW51YWwnXCJcclxuICAgIChjaGFuZ2VkKT1cImNvbXBvbmVudFZhbHVlQ2hhbmdlZCgkZXZlbnQpXCJcclxuICA+PC9hcHAtZm9ybS1kaXNwZW5zZXItbW9kYWw+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjZm9vdGVyQ29udGVudD5cclxuICAgIDxtcngtYnV0dG9uXHJcbiAgICAgIFtjdXN0b21DbGFzc2VzXT1cIidtci0zJ1wiXHJcbiAgICAgIFt0eXBlXT1cIidzZWNvbmRhcnknXCJcclxuICAgICAgW3NpemVdPVwiJ21lZGl1bSdcIlxyXG4gICAgICAoY2xpY2spPVwiY2xvc2UoKVwiXHJcbiAgICA+0J7RgtC80LXQvdCwXHJcbiAgICA8L21yeC1idXR0b24+XHJcbiAgICA8bXJ4LWJ1dHRvblxyXG4gICAgICBbdHlwZV09XCIncHJpbWFyeSdcIlxyXG4gICAgICBbc2l6ZV09XCInbWVkaXVtJ1wiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJlbXB0eVJvd1wiXHJcbiAgICAgIChjbGljayk9XCJvaygpXCJcclxuICAgID57eyBva1RleHQgfX1cclxuICAgIDwvbXJ4LWJ1dHRvbj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L21yeC1tb2RhbD5cclxuIl19
|
|
176
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtdGFibGUtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGV4LWZvcm0vc3JjL2xpYi9tb2R1bGVzL29iamVjdC1mb3JtL2NvbXBvbmVudHMvZWxlbWVudHMvaW5wdXQvdGFibGUvY29tcG9uZW50cy9pbnB1dC10YWJsZS1tb2RhbC9pbnB1dC10YWJsZS1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJ0ZXgtZm9ybS9zcmMvbGliL21vZHVsZXMvb2JqZWN0LWZvcm0vY29tcG9uZW50cy9lbGVtZW50cy9pbnB1dC90YWJsZS9jb21wb25lbnRzL2lucHV0LXRhYmxlLW1vZGFsL2lucHV0LXRhYmxlLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFZLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHeEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDM0YsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV2RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7Ozs7QUFp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QUUsSUFBZTtRQUN6QyxJQUFJLElBQUksS0FBSyxTQUFTLENBQUMsU0FBUztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQzlDLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxFQUFFO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDdkUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7UUFDcEQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOytHQXBMVSx3QkFBd0Isc0dBYXpCLFVBQVU7bUdBYlQsd0JBQXdCLG9FQU54QjtZQUNULGNBQWMsRUFBRTtZQUNoQix1QkFBdUI7WUFDdkIsZ0JBQWdCLENBQUMsd0JBQXdCO1NBQzFDLGlEQzFDSCx3eEJBOEJBLHlERElJLFdBQVcsd1dBQ1gsWUFBWSw2VUFDWixrQkFBa0I7OzRGQVFULHdCQUF3QjtrQkFqQnBDLFNBQVM7K0JBQ0UsdUJBQXVCLG1CQUdoQix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUDt3QkFDUCxXQUFXO3dCQUNYLFlBQVk7d0JBQ1osa0JBQWtCO3FCQUNuQixhQUNVO3dCQUNULGNBQWMsRUFBRTt3QkFDaEIsdUJBQXVCO3dCQUN2QixnQkFBZ0IsQ0FBQyx3QkFBd0I7cUJBQzFDOzswQkFlRSxNQUFNOzJCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ2xvZGFzaC1lcyc7XHJcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSwgTU9EQUxfREFUQSwgTW9kYWxNb2R1bGUsIE1vZGFsUmVmLCBNb2RhbFNlcnZpY2VDb21wb25lbnQgfSBmcm9tICdAbXlydGV4LW9yZy91aSc7XHJcbmltcG9ydCB7IElucHV0VGFibGVNb2RlbCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL21vZGVscy9lbGVtZXRzL2lucHV0cyc7XHJcbmltcG9ydCB7IENvbXBvbmVudFZhbHVlTW9kZWwsIFRhYmxlUm93TW9kZWwgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBGb3JtRGlzcGVuc2VyTW9kYWwgfSBmcm9tICcuL2Zvcm0tZGlzcGVuc2VyLW1vZGFsL2Zvcm0tZGlzcGVuc2VyLW1vZGFsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IHByb3ZpZGVOZ3hNYXNrIH0gZnJvbSAnbmd4LW1hc2snO1xyXG5pbXBvcnQgeyBGb3JtdWxhQ2FsY3VsYXRlU2VydmljZSwgUmVmZXJlbmNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XHJcbmltcG9ydCB7IG9iamVjdEZvcm1BY3Rpb25zIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vc3RvcmUnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRNb2RlbEJhc2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi8uLi9zaGFyZWQtZm9ybS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRUeXBlLCBJbnB1dFN0YXRlLCBWYWx1ZVR5cGUgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi8uLi9zaGFyZWQtZm9ybS9lbnVtcyc7XHJcbmltcG9ydCB7IElucHV0TnVtYmVyTW9kZWwgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9tb2RlbHMvZWxlbWV0cy9pbnB1dHMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJbnB1dFRhYmxlTW9kYWxQYXJhbXMge1xyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgb2tUZXh0OiBzdHJpbmc7XHJcbiAgc2V0dGluZ3M6IElucHV0VGFibGVNb2RlbDtcclxuICByb3dNb2RlbDogVGFibGVSb3dNb2RlbDtcclxuICBpc0NoZWNrUmVxdWlyZWQ6IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSW5wdXRUYWJsZU1vZGFsUmVzdWx0IHtcclxuICByZXN1bHQ6IGJvb2xlYW47XHJcbiAgcm93TW9kZWw6IFRhYmxlUm93TW9kZWw7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWlucHV0LXRhYmxlLW1vZGFsJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaW5wdXQtdGFibGUtbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2lucHV0LXRhYmxlLW1vZGFsLmNvbXBvbmVudC5sZXNzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBNb2RhbE1vZHVsZSxcclxuICAgIEJ1dHRvbk1vZHVsZSxcclxuICAgIEZvcm1EaXNwZW5zZXJNb2RhbCxcclxuICBdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgcHJvdmlkZU5neE1hc2soKSxcclxuICAgIEZvcm11bGFDYWxjdWxhdGVTZXJ2aWNlLFxyXG4gICAgUmVmZXJlbmNlU2VydmljZSAvLyDQtNC70Y8g0LrQvtC80L/QvtC90LXQvdGC0LAg0YHQv9C40YHQvtC6XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW5wdXRUYWJsZU1vZGFsQ29tcG9uZW50IGV4dGVuZHMgTW9kYWxTZXJ2aWNlQ29tcG9uZW50PElucHV0VGFibGVNb2RhbFBhcmFtcywgSW5wdXRUYWJsZU1vZGFsUmVzdWx0PiB7XHJcbiAgcHVibGljIHRpdGxlITogc3RyaW5nO1xyXG4gIHB1YmxpYyBva1RleHQhOiBzdHJpbmc7XHJcbiAgcHVibGljIHNldHRpbmdzITogSW5wdXRUYWJsZU1vZGVsO1xyXG4gIHB1YmxpYyByb3dNb2RlbCE6IFRhYmxlUm93TW9kZWw7XHJcbiAgLy8g0JfQsNC/0L7QvNC40L3QsNC10Lwg0YHRgtCw0YLRg9GBINC/0YDQvtCy0LXRgNC60Lgg0YTQvtGA0LzRiyDQv9GA0Lgg0L7RgtC60YDRi9GC0LjQuCDQvNC+0LTQsNC70LrQuFxyXG4gIHB1YmxpYyBpc0NoZWNrUmVxdWlyZWQhOiBib29sZWFuO1xyXG4gIHB1YmxpYyBlbXB0eVJvdzogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBkaWFsb2dSZWY6IE1vZGFsUmVmPElucHV0VGFibGVNb2RhbFJlc3VsdD4sXHJcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZSxcclxuICAgIHByaXZhdGUgZm9ybXVsYUNhbGN1bGF0ZVNlcnZpY2U6IEZvcm11bGFDYWxjdWxhdGVTZXJ2aWNlLFxyXG4gICAgQEluamVjdChNT0RBTF9EQVRBKSBkYXRhOiBJbnB1dFRhYmxlTW9kYWxQYXJhbXMsXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG5cclxuICAgIHRoaXMudGl0bGUgPSBkYXRhLnRpdGxlO1xyXG4gICAgdGhpcy5va1RleHQgPSBkYXRhLm9rVGV4dFxyXG4gICAgdGhpcy5zZXR0aW5ncyA9IGRhdGEuc2V0dGluZ3M7XHJcbiAgICB0aGlzLnJvd01vZGVsID0gZGF0YS5yb3dNb2RlbDtcclxuICAgIHRoaXMuaXNDaGVja1JlcXVpcmVkID0gZGF0YS5pc0NoZWNrUmVxdWlyZWQ7XHJcblxyXG4gICAgdGhpcy5yZXN1bHQgPSB7cmVzdWx0OiBmYWxzZSwgcm93TW9kZWw6IHRoaXMucm93TW9kZWx9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbXBvbmVudFZhbHVlQ2hhbmdlZCh2YWx1ZU1vZGVsOiBDb21wb25lbnRWYWx1ZU1vZGVsIHwgQ29tcG9uZW50VmFsdWVNb2RlbFtdKSB7XHJcbiAgICBjb25zb2xlLmdyb3VwKCc9PT0g0JzQntCU0JDQm9Ca0JA6INCY0LfQvNC10L3QtdC90LjQtSDQt9C90LDRh9C10L3QuNGPINCyINGE0L7RgNC80LUgPT09Jyk7XHJcbiAgICBjb25zb2xlLmxvZygn0KfRgtC+INC/0YDQuNGI0LvQviDQuNC3IEZvcm1EaXNwZW5zZXIgKHZhbHVlTW9kZWwpOicsIHN0cnVjdHVyZWRDbG9uZSh2YWx1ZU1vZGVsKSk7XHJcbiAgICBjb25zb2xlLmxvZygn0KLQtdC60YPRidC40Lkgcm93TW9kZWwuZGF0YSDQlNCeINGC0YDQsNC90YHRhNC+0YDQvNCw0YbQuNC4OicsIHN0cnVjdHVyZWRDbG9uZSh0aGlzLnJvd01vZGVsLmRhdGEpKTtcclxuXHJcbiAgICBpZiAoaXNBcnJheSh2YWx1ZU1vZGVsKSkge1xyXG4gICAgICB2YWx1ZU1vZGVsLmZvckVhY2gobW9kZWwgPT4ge1xyXG4gICAgICAgIHRoaXMuX3RyYW5zZm9ybVZhbHVlcyhtb2RlbCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fdHJhbnNmb3JtVmFsdWVzKHZhbHVlTW9kZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3JlY2FsY3VsYXRlRm9ybXVsYUZpZWxkcygpO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKCfQmNGC0L7Qs9C+0LLRi9C5IHJvd01vZGVsLmRhdGEg0J/QntCh0JvQlSDRgtGA0LDQvdGB0YTQvtGA0LzQsNGG0LjQuCDQuCDRhNC+0YDQvNGD0Ls6Jywgc3RydWN0dXJlZENsb25lKHRoaXMucm93TW9kZWwuZGF0YSkpO1xyXG4gICAgdGhpcy5lbXB0eVJvdyA9IHRoaXMucm93TW9kZWwuZGF0YS5ldmVyeSh4ID0+IHRoaXMuaXNFbXB0eSh4LnZhbHVlLCB4LnZhbHVlVHlwZSkpO1xyXG4gICAgY29uc29sZS5sb2coJ9Ch0YLQsNGC0YPRgSBlbXB0eVJvdzonLCB0aGlzLmVtcHR5Um93KTtcclxuICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvaygpIHtcclxuICAgIGNvbnNvbGUuZ3JvdXAoJz09PSDQnNCe0JTQkNCb0JrQkDog0J3QsNC20LDRgtCwINC60L3QvtC/0LrQsCDQntCaID09PScpO1xyXG4gICAgY29uc29sZS5sb2coJ9Ck0LjQvdCw0LvRjNC90YvQuSByb3dNb2RlbCDQv9C10YDQtdC0INC+0YLQv9GA0LDQstC60L7QuSDQsiDRgtCw0LHQu9C40YbRgzonLCBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5yb3dNb2RlbCkpO1xyXG4gICAgXHJcbiAgICBpZiAoIXRoaXMuX2lzVmFsaWQoKSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ9CS0LDQu9C40LTQsNGG0LjRjyDQvNC+0LTQsNC70LrQuCDQndCVINCf0KDQntCZ0JTQldCd0JAnKTtcclxuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChvYmplY3RGb3JtQWN0aW9ucy51cGRhdGVDaGVja1JlcXVpcmVkKHsgaXNDaGVja1JlcXVpcmVkOiB0cnVlIH0pKTtcclxuICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc29sZS5sb2coJ9CS0LDQu9C40LTQsNGG0LjRjyDRg9GB0L/QtdGI0L3QsC4g0JfQsNC60YDRi9Cy0LDQtdC8INC80L7QtNCw0LvQutGDINGBINGA0LXQt9GD0LvRjNGC0LDRgtC+0LwgdHJ1ZS4nKTtcclxuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gob2JqZWN0Rm9ybUFjdGlvbnMudXBkYXRlQ2hlY2tSZXF1aXJlZCh7IGlzQ2hlY2tSZXF1aXJlZDogdGhpcy5pc0NoZWNrUmVxdWlyZWQgfSkpO1xyXG4gICAgdGhpcy5yZXN1bHQgPSB7IHJlc3VsdDogdHJ1ZSwgcm93TW9kZWw6IHRoaXMucm93TW9kZWwgfTtcclxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHN0cnVjdHVyZWRDbG9uZSh0aGlzLnJlc3VsdCkpO1xyXG4gICAgY29uc29sZS5ncm91cEVuZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlKCkge1xyXG4gICAgLy8g0LLQvtC30LLRgNCw0YnQsNC10Lwg0L/RgNC40LfQvdCw0Log0LrQsNC6INCx0YvQuyDQtNC+INC+0YLQutGA0YvRgtC40Y8g0LzQvtC00LDQu9C60LhcclxuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gob2JqZWN0Rm9ybUFjdGlvbnMudXBkYXRlQ2hlY2tSZXF1aXJlZCh7IGlzQ2hlY2tSZXF1aXJlZDogdGhpcy5pc0NoZWNrUmVxdWlyZWQgfSkpO1xyXG5cclxuICAgIHRoaXMucmVzdWx0ID0ge3Jlc3VsdDogZmFsc2UsIHJvd01vZGVsOiB0aGlzLnJvd01vZGVsfTtcclxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHRoaXMucmVzdWx0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3RyYW5zZm9ybVZhbHVlcyh2YWx1ZTogQ29tcG9uZW50VmFsdWVNb2RlbCkge1xyXG4gICAgY29uc3QgY2xvbmVSb3dNb2RlbCA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLnJvd01vZGVsKTtcclxuICAgIFxyXG4gICAgLy8g0JjRidC10Lwg0L/QvtC70LUg0LIg0LzQvtC00LXQu9C4INGB0YLRgNC+0LrQuFxyXG4gICAgY29uc3QgZmluZFZhbHVlOiBDb21wb25lbnRWYWx1ZU1vZGVsIHwgdW5kZWZpbmVkID0gY2xvbmVSb3dNb2RlbC5kYXRhLmZpbmQoXHJcbiAgICAgIChjOiBDb21wb25lbnRWYWx1ZU1vZGVsKSA9PiBjLnN5c05hbWUgPT09IHZhbHVlLnN5c05hbWVcclxuICAgICk7XHJcblxyXG4gICAgaWYgKGZpbmRWYWx1ZSkge1xyXG4gICAgICAvLyDQldGB0LvQuCDRjdGC0L4g0LrQvtC80L/QvtC90LXQvdGCINC00LDRgtGLINC4INGN0YLQviByYW5nZSAo0L/RgNC40YjQtdC7INC80LDRgdGB0LjQsiksINC30LDQv9C40YHRi9Cy0LDQtdC8INC10LPQviDRhtC10LvQuNC60L7QvFxyXG4gICAgICBpZiAodmFsdWUudHlwZSA9PT0gJ2lucHV0RGF0ZScgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZS52YWx1ZSkpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgW9Ci0YDQsNC90YHRhNC+0YDQvNCw0YbQuNGPXSDQl9Cw0L/QuNGB0YvQstCw0LXQvCDQnNCQ0KHQodCY0JIg0LTQsNGCINCyICR7dmFsdWUuc3lzTmFtZX06YCwgdmFsdWUudmFsdWUpO1xyXG4gICAgICAgIGZpbmRWYWx1ZS52YWx1ZSA9IHZhbHVlLnZhbHVlOyAvLyDQl9Cw0L/QuNGI0LXRgtGB0Y8gW1wiMjAyNi0wNC0zMC4uLlwiLCBcIjIwMjYtMDUtMDIuLi5cIl1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyDQlNC70Y8g0LLRgdC10YUg0L7RgdGC0LDQu9GM0L3Ri9GFINC+0LHRi9GH0L3Ri9GFINC/0L7Qu9C10LlcclxuICAgICAgICBmaW5kVmFsdWUudmFsdWUgPSB2YWx1ZS52YWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucm93TW9kZWwgPSBjbG9uZVJvd01vZGVsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVjYWxjdWxhdGVGb3JtdWxhRmllbGRzKCkge1xyXG4gICAgY29uc3QgZm9ybXVsYUNvbXBvbmVudHMgPSB0aGlzLl9nZXRGb3JtdWxhTnVtYmVyQ29tcG9uZW50cyh0aGlzLnNldHRpbmdzLmNvbXBvbmVudHMpO1xyXG5cclxuICAgIGlmICghZm9ybXVsYUNvbXBvbmVudHMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjbG9uZVJvd01vZGVsID0gc3RydWN0dXJlZENsb25lKHRoaXMucm93TW9kZWwpO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9ybXVsYUNvbXBvbmVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGhhc1VwZGF0ZXMgPSBmYWxzZTtcclxuXHJcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGZvcm11bGFDb21wb25lbnRzKSB7XHJcbiAgICAgICAgY29uc3QgZm9ybXVsYSA9IGNvbXBvbmVudC5vcHRpb25zPy5mb3JtdWxhPy50cmltKCk7XHJcbiAgICAgICAgaWYgKCFmb3JtdWxhKSB7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZm9ybXVsYUNhbGN1bGF0ZVNlcnZpY2UuY2FsY3VsYXRlTWF0aEV4cHJlc3Npb24oZm9ybXVsYSwgY2xvbmVSb3dNb2RlbC5kYXRhKTtcclxuXHJcbiAgICAgICAgY29uc3QgdGFyZ2V0VmFsdWUgPSBjbG9uZVJvd01vZGVsLmRhdGEuZmluZCh4ID0+IHguc3lzTmFtZSA9PT0gY29tcG9uZW50LnN5c05hbWUpO1xyXG4gICAgICAgIGlmICghdGFyZ2V0VmFsdWUgfHwgdGFyZ2V0VmFsdWUudmFsdWUgPT09IHJlc3VsdCkge1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0YXJnZXRWYWx1ZS52YWx1ZSA9IHJlc3VsdDtcclxuICAgICAgICBoYXNVcGRhdGVzID0gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFoYXNVcGRhdGVzKSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJvd01vZGVsID0gY2xvbmVSb3dNb2RlbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldEZvcm11bGFOdW1iZXJDb21wb25lbnRzKGNvbXBvbmVudHM6IENvbXBvbmVudE1vZGVsQmFzZVtdKTogSW5wdXROdW1iZXJNb2RlbFtdIHtcclxuICAgIGNvbnN0IHJlc3VsdDogSW5wdXROdW1iZXJNb2RlbFtdID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgY29tcG9uZW50LnR5cGUgPT09IENvbXBvbmVudFR5cGUuSW5wdXROdW1iZXIgJiZcclxuICAgICAgICAoY29tcG9uZW50IGFzIElucHV0TnVtYmVyTW9kZWwpLm9wdGlvbnM/LmlucHV0U3RhdGUgPT09IElucHV0U3RhdGUuRm9ybXVsYVxyXG4gICAgICApIHtcclxuICAgICAgICByZXN1bHQucHVzaChjb21wb25lbnQgYXMgSW5wdXROdW1iZXJNb2RlbCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjb21wb25lbnQuY29tcG9uZW50cz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgcmVzdWx0LnB1c2goLi4udGhpcy5fZ2V0Rm9ybXVsYU51bWJlckNvbXBvbmVudHMoY29tcG9uZW50LmNvbXBvbmVudHMpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc1ZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgdmFyIGhhc0Vycm9yID0gZmFsc2U7XHJcbiAgICB2YXIgcmVxdWlyZWRDb21wb25lbnRzID0gdGhpcy5fZ2V0UmVxdWlyZWRDb21wb25lbnRzKHRoaXMuc2V0dGluZ3MuY29tcG9uZW50cyk7XHJcbiAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiByZXF1aXJlZENvbXBvbmVudHMpIHtcclxuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnJvd01vZGVsLmRhdGFcclxuICAgICAgICAuZmluZCh4ID0+IHguc3lzTmFtZSA9PSBjb21wb25lbnQuc3lzTmFtZVxyXG4gICAgICAgICAgICAgIHx8IHguc3lzTmFtZSA9PSBgJHtjb21wb25lbnQuc3lzTmFtZX1fc3RhcnRgXHJcbiAgICAgICAgICAgICAgfHwgeC5zeXNOYW1lID09IGAke2NvbXBvbmVudC5zeXNOYW1lfV9lbmRgKTtcclxuICAgICAgaWYgKCF2YWx1ZT8udmFsdWUpIHtcclxuICAgICAgICBoYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAhaGFzRXJyb3I7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRSZXF1aXJlZENvbXBvbmVudHMoY29tcG9uZW50czogQ29tcG9uZW50TW9kZWxCYXNlW10pOiBDb21wb25lbnRNb2RlbEJhc2VbXXtcclxuICAgIHZhciBjb21wb25lbnRzID0gY29tcG9uZW50cy5maWx0ZXIoeCA9PiB4LnR5cGUgIT0gQ29tcG9uZW50VHlwZS5Hcm91cCAmJiAhIXgub3B0aW9ucy5yZXF1aXJlZCk7XHJcbiAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzLmZpbHRlcih4ID0+IHgudHlwZSA9PSBDb21wb25lbnRUeXBlLkdyb3VwICYmIHguY29tcG9uZW50cy5sZW5ndGggPiAwKSkge1xyXG4gICAgICB0aGlzLl9nZXRSZXF1aXJlZENvbXBvbmVudHMoY29tcG9uZW50LmNvbXBvbmVudHMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbXBvbmVudHM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzRW1wdHkodmFsdWU6IGFueSwgdHlwZTogVmFsdWVUeXBlKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodHlwZSA9PT0gVmFsdWVUeXBlLlVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XHJcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiB0cnVlO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdmFsdWUubGVuZ3RoID09PSAwO1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCI8bXJ4LW1vZGFsXHJcbiAgW3RpdGxlXT1cInRpdGxlXCJcclxuICBzaXplPVwibGFyZ2VcIlxyXG4gIChjbG9zZSk9XCJjbG9zZSgpXCJcclxuICAob2spPVwib2soKVwiXHJcbj5cclxuICA8YXBwLWZvcm0tZGlzcGVuc2VyLW1vZGFsXHJcbiAgICBbc2VjdGlvblNldHRpbmdzXT1cInNldHRpbmdzXCJcclxuICAgIFt2YWx1ZXNdPVwicm93TW9kZWwuZGF0YVwiXHJcbiAgICBbdmFsdWVNb2RlXT1cIidtYW51YWwnXCJcclxuICAgIChjaGFuZ2VkKT1cImNvbXBvbmVudFZhbHVlQ2hhbmdlZCgkZXZlbnQpXCJcclxuICA+PC9hcHAtZm9ybS1kaXNwZW5zZXItbW9kYWw+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjZm9vdGVyQ29udGVudD5cclxuICAgIDxtcngtYnV0dG9uXHJcbiAgICAgIFtjdXN0b21DbGFzc2VzXT1cIidtci0zJ1wiXHJcbiAgICAgIFt0eXBlXT1cIidzZWNvbmRhcnknXCJcclxuICAgICAgW3NpemVdPVwiJ21lZGl1bSdcIlxyXG4gICAgICAoY2xpY2spPVwiY2xvc2UoKVwiXHJcbiAgICA+0J7RgtC80LXQvdCwXHJcbiAgICA8L21yeC1idXR0b24+XHJcbiAgICA8bXJ4LWJ1dHRvblxyXG4gICAgICBbdHlwZV09XCIncHJpbWFyeSdcIlxyXG4gICAgICBbc2l6ZV09XCInbWVkaXVtJ1wiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJlbXB0eVJvd1wiXHJcbiAgICAgIChjbGljayk9XCJvaygpXCJcclxuICAgID57eyBva1RleHQgfX1cclxuICAgIDwvbXJ4LWJ1dHRvbj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L21yeC1tb2RhbD5cclxuIl19
|
package/esm2022/lib/modules/object-form/components/elements/input/table/input-table.component.mjs
CHANGED
|
@@ -236,6 +236,16 @@ export class InputTableComponent {
|
|
|
236
236
|
format: this.getFormat(component),
|
|
237
237
|
minWidth: 160
|
|
238
238
|
};
|
|
239
|
+
if (component.type === ComponentType.InputDate && component.options.range) {
|
|
240
|
+
column.calculateCellValue = (rowData) => {
|
|
241
|
+
const dateArray = rowData[component.sysName];
|
|
242
|
+
if (Array.isArray(dateArray) && dateArray.length === 2) {
|
|
243
|
+
// Тут можно отформатировать красиво, например: "30.04.2026 - 02.05.2026"
|
|
244
|
+
return `${dateArray[0]} - ${dateArray[1]}`;
|
|
245
|
+
}
|
|
246
|
+
return '';
|
|
247
|
+
};
|
|
248
|
+
}
|
|
239
249
|
if (dataType === 'boolean') {
|
|
240
250
|
column.calculateCellValue = (rowData) => {
|
|
241
251
|
const value = rowData[component.sysName];
|
|
@@ -437,4 +447,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
437
447
|
}], changed: [{
|
|
438
448
|
type: Output
|
|
439
449
|
}] } });
|
|
440
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGV4LWZvcm0vc3JjL2xpYi9tb2R1bGVzL29iamVjdC1mb3JtL2NvbXBvbmVudHMvZWxlbWVudHMvaW5wdXQvdGFibGUvaW5wdXQtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGV4LWZvcm0vc3JjL2xpYi9tb2R1bGVzL29iamVjdC1mb3JtL2NvbXBvbmVudHMvZWxlbWVudHMvaW5wdXQvdGFibGUvaW5wdXQtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFBRSxNQUFNLEVBQ3BCLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDL0UsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFFN0MsT0FBTyxFQUtMLGFBQWEsRUFHZCxNQUFNLG9CQUFvQixDQUFDO0FBRTVCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFD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O2dCQUNNLFlBQVk7c0JBQXZELFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQztnQkFFekIsT0FBTztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlciwgaW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRUeXBlLCBEYXRlVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zaGFyZWQtZm9ybS9lbnVtcyc7XHJcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRNb2RlbEJhc2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zaGFyZWQtZm9ybS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBEeERhdGFHcmlkQ29tcG9uZW50IH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyJztcclxuaW1wb3J0IHtcclxuICBDb21wb25lbnRWYWx1ZU1vZGVsLFxyXG4gIFNlY3Rpb25WYWx1ZU1vZGVsLFxyXG4gIFRhYmxlR3JvdXBNb2RlbCxcclxuICBUYWJsZUl0ZW0sXHJcbiAgVGFibGVJdGVtVHlwZSxcclxuICBUYWJsZVJvd01vZGVsLFxyXG4gIFRhYmxlVmFsdWVNb2RlbFxyXG59IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscyc7XHJcbmltcG9ydCB7IElucHV0RGF0ZU1vZGVsLCBJbnB1dE51bWJlck1vZGVsLCBJbnB1dFNlbGVjdE1vZGVsLCBJbnB1dFRhYmxlTW9kZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZWxlbWV0cy9pbnB1dHMnO1xyXG5pbXBvcnQgeyBvYmplY3RGb3JtQWN0aW9ucywgb2JqZWN0Rm9ybVNlbGVjdG9ycyB9IGZyb20gJy4uLy4uLy4uLy4uL3N0b3JlJztcclxuaW1wb3J0IHsgTW9kYWxTZXJ2aWNlIH0gZnJvbSAnQG15cnRleC1vcmcvdWknO1xyXG5pbXBvcnQgeyBJbnB1dFRhYmxlTW9kYWxDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMnO1xyXG5pbXBvcnQgeyBnZXRSb3dNb2RlbCB9IGZyb20gJy4vaGVscGVycy9nZXQtcm93LW1vZGVsLmhlbHBlcic7XHJcbmltcG9ydCB7IENvbHVtbk1vZGVsIH0gZnJvbSAnLi9tb2RlbHMvY29sdW1uLm1vZGVsJztcclxuaW1wb3J0IHsgUmVmZXJlbmNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3JlZmVyZW5jZS5zZXJ2aWNlJztcclxuaW1wb3J0IEN1c3RvbVN0b3JlIGZyb20gJ2RldmV4dHJlbWUvZGF0YS9jdXN0b21fc3RvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtaW5wdXQtdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vaW5wdXQtdGFibGUuY29tcG9uZW50Lmxlc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW5wdXRUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICB0eXBlID0gQ29tcG9uZW50VHlwZS5JbnB1dFRhYmxlO1xyXG5cclxuICBwcml2YXRlIF9yZWZlcmVuY2VTZXJ2aWNlOiBSZWZlcmVuY2VTZXJ2aWNlID0gaW5qZWN0KFJlZmVyZW5jZVNlcnZpY2UpO1xyXG5cclxuICBwcml2YXRlIF9sb29rdXBzQ2FjaGU6IE1hcDxzdHJpbmcsIGFueVtdPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc3RvcmU6IFN0b3JlID0gaW5qZWN0KFN0b3JlKTtcclxuICBwcml2YXRlIF9kZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gIHByaXZhdGUgX21vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlID0gaW5qZWN0KE1vZGFsU2VydmljZSk7XHJcblxyXG4gIHByaXZhdGUgX2NoYW5nZVN1YmplY3QkOiBTdWJqZWN0PFRhYmxlVmFsdWVNb2RlbD4gPSBuZXcgU3ViamVjdDxUYWJsZVZhbHVlTW9kZWw+KCk7XHJcbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9ucyQ6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblxyXG4gIHByaXZhdGUgX2lzQ2hlY2tSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2NhbkVkaXRPYmplY3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9yb3dzOiBUYWJsZVJvd01vZGVsW10gPSBbXTtcclxuXHJcbiAgcHVibGljIG1vZGVsITogVGFibGVWYWx1ZU1vZGVsO1xyXG4gIHB1YmxpYyBzZXR0aW5ncyE6IElucHV0VGFibGVNb2RlbDtcclxuICBwdWJsaWMgZGF0YVNvdXJjZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfVtdID0gW107XHJcbiAgcHVibGljIGNvbHVtbnM6IENvbHVtbk1vZGVsW10gPSBbXTtcclxuXHJcbiAgQElucHV0KCkgdmFsdWVzOiBTZWN0aW9uVmFsdWVNb2RlbFtdID0gW107XHJcblxyXG4gIEBJbnB1dCgpIHNldCBkYXRhKHNldHRpbmdzOiBDb21wb25lbnRNb2RlbEJhc2UpIHtcclxuICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncyBhcyBJbnB1dFRhYmxlTW9kZWw7XHJcblxyXG4gICAgdGhpcy5tb2RlbCA9IHtzeXNOYW1lOiBzZXR0aW5ncy5zeXNOYW1lLCB0eXBlOiBzZXR0aW5ncy50eXBlLCBkYXRhOiBbXSwgdG90YWxzOiBbXX07XHJcbiAgICB0aGlzLl9yb3dzID0gW107XHJcblxyXG4gICAgdGhpcy5fZGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgIHRoaXMuX2luaXRDb2x1bW5zKHRoaXMuc2V0dGluZ3MuY29tcG9uZW50cyk7XHJcbiAgfVxyXG5cclxuICBAVmlld0NoaWxkKCdkYXRhR3JpZCcsIHtzdGF0aWM6IGZhbHNlfSkgZGF0YUdyaWQhOiBEeERhdGFHcmlkQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoJ2VkaXRUZW1wbGF0ZScsIHtzdGF0aWM6IGZhbHNlfSkgZWRpdFRlbXBsYXRlITogYW55O1xyXG5cclxuICBAT3V0cHV0KCkgcHVibGljIGNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxDb21wb25lbnRWYWx1ZU1vZGVsIHwgQ29tcG9uZW50VmFsdWVNb2RlbFtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8Q29tcG9uZW50VmFsdWVNb2RlbCB8IENvbXBvbmVudFZhbHVlTW9kZWxbXT4oKTtcclxuXHJcbiAgcHVibGljIGdldCByb3dzQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9yb3dzLmxlbmd0aCB8fCAwO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGhhc0FueVRvdGFsKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MuY29tcG9uZW50cy5zb21lKGMgPT5cclxuICAgICAgdGhpcy5zaG93VG90YWwoYykgfHwgYy5jb21wb25lbnRzPy5zb21lKGlubmVyID0+IHRoaXMuc2hvd1RvdGFsKGlubmVyKSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNSZWROb0RhdGEoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNDaGVja1JlcXVpcmVkO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9pbml0TW9kZWwoKTtcclxuXHJcbiAgICB0aGlzLl9jaGFuZ2VTdWJqZWN0JC5waXBlKFxyXG4gICAgICBkZWJvdW5jZVRpbWUoNzAwKSxcclxuICAgICkuc3Vic2NyaWJlKG1vZGVsID0+IHtcclxuICAgICAgdGhpcy5fc3RvcmUuZGlzcGF0Y2gob2JqZWN0Rm9ybUFjdGlvbnMudXBkYXRlVmFsdWVzKHt2YWx1ZTogbW9kZWx9KSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zJC5wdXNoKHRoaXMuX3N0b3JlLnNlbGVjdChvYmplY3RGb3JtU2VsZWN0b3JzLnNlbGVjdElzQ2hlY2tSZXF1aXJlZCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgIHRoaXMuX2lzQ2hlY2tSZXF1aXJlZCA9IHJlc3VsdDtcclxuICAgICAgdGhpcy5fZGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSkpO1xyXG5cclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMkLnB1c2godGhpcy5fc3RvcmUuc2VsZWN0KG9iamVjdEZvcm1TZWxlY3RvcnMuc2VsZWN0Q2FuRWRpdE9iamVjdClcclxuICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgIHRoaXMuX2NhbkVkaXRPYmplY3QgPSByZXN1bHQ7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzPy5jb21wb25lbnRzKSB7XHJcbiAgICAgICAgICB0aGlzLl9pbml0Q29sdW1ucyh0aGlzLnNldHRpbmdzLmNvbXBvbmVudHMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9KSk7XHJcblxyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucyQucHVzaCh0aGlzLl9zdG9yZS5zZWxlY3Qob2JqZWN0Rm9ybVNlbGVjdG9ycy5zZWxlY3RWYWx1ZU1vZGVsKHRoaXMuc2V0dGluZ3MpKVxyXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IENvbXBvbmVudFZhbHVlTW9kZWwgfCBudWxsIHwgKENvbXBvbmVudFZhbHVlTW9kZWwgfCBudWxsKVtdKSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2xvbmVSZXN1bHQgPSBzdHJ1Y3R1cmVkQ2xvbmUocmVzdWx0IGFzIFRhYmxlVmFsdWVNb2RlbCB8IG51bGwpO1xyXG5cclxuICAgICAgICBpZiAoY2xvbmVSZXN1bHQgJiYgIUFycmF5LmlzQXJyYXkoY2xvbmVSZXN1bHQpICYmIHRoaXMubW9kZWwuZGF0YSAhPT0gY2xvbmVSZXN1bHQuZGF0YSkge1xyXG4gICAgICAgICAgdGhpcy5tb2RlbCA9IHN0cnVjdHVyZWRDbG9uZShjbG9uZVJlc3VsdCk7XHJcbiAgICAgICAgICB0aGlzLl9yb3dzID0gdGhpcy5fZXh0cmFjdFJvd3ModGhpcy5tb2RlbC5kYXRhKTtcclxuICAgICAgICAgIHRoaXMuX2luaXREYXRhU291cmNlKHRoaXMuX3Jvd3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jaGFuZ2VTdWJqZWN0JC51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucyQuZm9yRWFjaCgoc3Vic2NyaXB0aW9uKSA9PiBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY3JlYXRlUm93KCkge1xyXG4gICAgdGhpcy5fbW9kYWxTZXJ2aWNlLm9wZW4oSW5wdXRUYWJsZU1vZGFsQ29tcG9uZW50LCB7XHJcbiAgICAgIHRpdGxlOiAn0KHQvtC30LTQsNC90LjQtSDRgdGC0YDQvtC60LgnLFxyXG4gICAgICBva1RleHQ6ICfQodC+0LfQtNCw0YLRjCcsXHJcbiAgICAgIHNldHRpbmdzOiB0aGlzLnNldHRpbmdzLFxyXG4gICAgICByb3dNb2RlbDogZ2V0Um93TW9kZWwodGhpcy5zZXR0aW5ncyksXHJcbiAgICAgIGlzQ2hlY2tSZXF1aXJlZDogdGhpcy5faXNDaGVja1JlcXVpcmVkXHJcbiAgICB9KS5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXNvbHZlID0+IHtcclxuICAgICAgaWYgKHJlc29sdmUucmVzdWx0KSB7XHJcbiAgICAgICAgY29uc29sZS5ncm91cCgnPT09INCi0JDQkdCb0JjQptCQOiDQn9C+0LvRg9GH0LXQvdGLINC00LDQvdC90YvQtSDQv9C+0YHQu9C1INCh0J7Ql9CU0JDQndCY0K8gPT09Jyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ9CU0LDQvdC90YvQtSDRgdGC0YDQvtC60Lgg0LjQtyDQvNC+0LTQsNC70LrQuCAocmVzb2x2ZS5yb3dNb2RlbCk6Jywgc3RydWN0dXJlZENsb25lKHJlc29sdmUucm93TW9kZWwpKTtcclxuXHJcbiAgICAgICAgdGhpcy5fcm93cyA9IFsuLi5zdHJ1Y3R1cmVkQ2xvbmUodGhpcy5fcm93cyksIHJlc29sdmUucm93TW9kZWxdO1xyXG5cclxuICAgICAgICB0aGlzLl9pbml0RGF0YVNvdXJjZSh0aGlzLl9yb3dzKTtcclxuXHJcbiAgICAgICAgY29uc3QgbmV4dFZhbHVlTW9kZWwgPSB0aGlzLl9idWlsZFRhYmxlVmFsdWVNb2RlbCgpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCfQodGE0L7RgNC80LjRgNC+0LLQsNC90L3QsNGPINC80L7QtNC10LvRjCDRgtCw0LHQu9C40YbRiyDQtNC70Y8g0L7RgtC/0YDQsNCy0LrQuCDQsiBTdG9yZTonLCBzdHJ1Y3R1cmVkQ2xvbmUobmV4dFZhbHVlTW9kZWwpKTtcclxuICAgICAgICB0aGlzLl9jaGFuZ2VTdWJqZWN0JC5uZXh0KHRoaXMuX2J1aWxkVGFibGVWYWx1ZU1vZGVsKCkpO1xyXG4gICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZGVsZXRlUm93KGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IGZpbmRSb3cgPSB0aGlzLl9yb3dzLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBldmVudC5yb3cuZGF0YS5pZCk7XHJcblxyXG4gICAgaWYgKGZpbmRSb3cpIHtcclxuICAgICAgdGhpcy5fcm93cyA9IHRoaXMuX3Jvd3MuZmlsdGVyKGl0ZW0gPT4gaXRlbS5pZCAhPT0gZXZlbnQucm93LmRhdGEuaWQpO1xyXG5cclxuICAgICAgdGhpcy5faW5pdERhdGFTb3VyY2UodGhpcy5fcm93cyk7XHJcblxyXG4gICAgICB0aGlzLl9jaGFuZ2VTdWJqZWN0JC5uZXh0KHRoaXMuX2J1aWxkVGFibGVWYWx1ZU1vZGVsKCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICF0aGlzLl9jYW5FZGl0T2JqZWN0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGVkaXRSb3coZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgZmluZFJvdzogVGFibGVSb3dNb2RlbCB8IHVuZGVmaW5lZCA9IHRoaXMuX3Jvd3MuZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IGV2ZW50LnJvdy5kYXRhLmlkKTtcclxuXHJcbiAgICBpZiAoZmluZFJvdykge1xyXG4gICAgICBjb25zb2xlLmdyb3VwKCc9PT0g0KLQkNCR0JvQmNCm0JA6INCe0YLQutGA0YvRgtC40LUg0KDQldCU0JDQmtCi0JjQoNCe0JLQkNCd0JjQryDRgdGC0YDQvtC60LggPT09Jyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdJRCDRgdGC0YDQvtC60Lg6JywgZXZlbnQucm93LmRhdGEuaWQpO1xyXG4gICAgICBjb25zb2xlLmxvZygn0KLQtdC60YPRidC10LUg0YHQvtGB0YLQvtGP0L3QuNC1INGB0YLRgNC+0LrQuCDQsiDQv9Cw0LzRj9GC0Lgg0YLQsNCx0LvQuNGG0Ys6Jywgc3RydWN0dXJlZENsb25lKGZpbmRSb3cpKTtcclxuICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xyXG5cclxuICAgICAgdGhpcy5fbW9kYWxTZXJ2aWNlLm9wZW4oSW5wdXRUYWJsZU1vZGFsQ29tcG9uZW50LCB7XHJcbiAgICAgICAgdGl0bGU6ICfQoNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNC1INGB0YLRgNC+0LrQuCcsXHJcbiAgICAgICAgb2tUZXh0OiAn0KHQvtGF0YDQsNC90LjRgtGMJyxcclxuICAgICAgICBzZXR0aW5nczogdGhpcy5zZXR0aW5ncyxcclxuICAgICAgICByb3dNb2RlbDogZmluZFJvd1xyXG4gICAgICB9KS5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXNvbHZlID0+IHtcclxuICAgICAgICBpZiAocmVzb2x2ZS5yZXN1bHQpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZ3JvdXAoJz09PSDQotCQ0JHQm9CY0KbQkDog0J/QvtC70YPRh9C10L3RiyDQtNCw0L3QvdGL0LUg0L/QvtGB0LvQtSDQoNCV0JTQkNCa0KLQmNCg0J7QktCQ0J3QmNCvID09PScpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ9CU0LDQvdC90YvQtSDQuNC3INC80L7QtNCw0LvQutC4IChyZXNvbHZlLnJvd01vZGVsKTonLCBzdHJ1Y3R1cmVkQ2xvbmUocmVzb2x2ZS5yb3dNb2RlbCkpO1xyXG4gICAgICAgICAgY29uc3QgY2xvbmVSb3dzID0gc3RydWN0dXJlZENsb25lKHRoaXMuX3Jvd3MpO1xyXG4gICAgICAgICAgY29uc3QgZWRpdGFibGVSb3cgPSBjbG9uZVJvd3MuZmluZChyb3cgPT4gcm93LmlkID09PSByZXNvbHZlLnJvd01vZGVsLmlkKTtcclxuXHJcbiAgICAgICAgICBpZiAoZWRpdGFibGVSb3cpIHtcclxuICAgICAgICAgICAgZWRpdGFibGVSb3cuZGF0YSA9IHJlc29sdmUucm93TW9kZWwuZGF0YTtcclxuICAgICAgICAgICAgdGhpcy5fcm93cyA9IGNsb25lUm93cztcclxuICAgICAgICAgICAgdGhpcy5faW5pdERhdGFTb3VyY2UodGhpcy5fcm93cyk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBuZXh0VmFsdWVNb2RlbCA9IHRoaXMuX2J1aWxkVGFibGVWYWx1ZU1vZGVsKCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCfQodGE0L7RgNC80LjRgNC+0LLQsNC90L3QsNGPINC80L7QtNC10LvRjCDRgtCw0LHQu9C40YbRiyDQtNC70Y8g0L7QsdC90L7QstC70LXQvdC40Y8gU3RvcmU6Jywgc3RydWN0dXJlZENsb25lKG5leHRWYWx1ZU1vZGVsKSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZVN1YmplY3QkLm5leHQobmV4dFZhbHVlTW9kZWwpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcign0J7RiNC40LHQutCwOiDQndC1INGD0LTQsNC70L7RgdGMINC90LDQudGC0Lgg0YDQtdC00LDQutGC0LjRgNGD0LXQvNGD0Y4g0YHRgtGA0L7QutGDINC/0L4gSUQ6JywgcmVzb2x2ZS5yb3dNb2RlbC5pZCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRGb3JtYXQoY29tcG9uZW50OiBDb21wb25lbnRNb2RlbEJhc2UpIHtcclxuICAgIHN3aXRjaCAoY29tcG9uZW50LnR5cGUpIHtcclxuICAgICAgY2FzZSBDb21wb25lbnRUeXBlLklucHV0RGF0ZTpcclxuICAgICAgICBzd2l0Y2ggKChjb21wb25lbnQgYXMgSW5wdXREYXRlTW9kZWwpLm9wdGlvbnMudmlld1R5cGUpIHtcclxuICAgICAgICAgIGNhc2UgRGF0ZVR5cGVFbnVtLkRhdGVUaW1lOlxyXG4gICAgICAgICAgICByZXR1cm4gJ2RkLk1NLnl5eXkgaGg6bW0nO1xyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuICdkZC5NTS55eXl5JztcclxuICAgICAgICB9XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldERhdGFUeXBlKGNvbXBvbmVudDogQ29tcG9uZW50TW9kZWxCYXNlKSB7XHJcbiAgICBzd2l0Y2ggKGNvbXBvbmVudC50eXBlKSB7XHJcbiAgICAgIGNhc2UgQ29tcG9uZW50VHlwZS5JbnB1dERhdGU6XHJcbiAgICAgICAgcmV0dXJuICdkYXRlJztcclxuICAgICAgY2FzZSBDb21wb25lbnRUeXBlLklucHV0U3dpdGNoOlxyXG4gICAgICAgIHJldHVybiAnYm9vbGVhbidcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gJ3N0cmluZyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hvd1RvdGFsKGNvbXBvbmVudDogQ29tcG9uZW50TW9kZWxCYXNlKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoY29tcG9uZW50LnR5cGUgPT09IENvbXBvbmVudFR5cGUuSW5wdXROdW1iZXIpIHtcclxuICAgICAgY29uc3QgZWxlbWVudDogSW5wdXROdW1iZXJNb2RlbCA9IGNvbXBvbmVudCBhcyBJbnB1dE51bWJlck1vZGVsO1xyXG5cclxuICAgICAgcmV0dXJuIGVsZW1lbnQub3B0aW9ucy5pblRvdGFscztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNUb3RhbENvbHVtbihjb21wb25lbnQ6IENvbXBvbmVudE1vZGVsQmFzZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChjb21wb25lbnQgYXMgSW5wdXROdW1iZXJNb2RlbCkub3B0aW9ucy5pblRvdGFscztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRNb2RlbCgpIHtcclxuICAgIHRoaXMubW9kZWwgPSB7XHJcbiAgICAgIHN5c05hbWU6IHRoaXMuc2V0dGluZ3Muc3lzTmFtZSxcclxuICAgICAgdHlwZTogdGhpcy5zZXR0aW5ncy50eXBlLFxyXG4gICAgICBkYXRhOiBbXSxcclxuICAgICAgdG90YWxzOiBbXVxyXG4gICAgfTtcclxuICAgIHRoaXMuX3Jvd3MgPSBbXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXREYXRhU291cmNlKGRhdGE6IFRhYmxlUm93TW9kZWxbXSkge1xyXG4gICAgdGhpcy5kYXRhU291cmNlID0gZGF0YS5tYXAoKGl0ZW06IFRhYmxlUm93TW9kZWwpID0+IHtcclxuICAgICAgY29uc3QgbmV3RGF0YUl0ZW06IGFueSA9IHt9O1xyXG5cclxuICAgICAgZm9yIChsZXQgaSBpbiBpdGVtLmRhdGEpIHtcclxuICAgICAgICBuZXdEYXRhSXRlbVtpdGVtLmRhdGFbaV0uc3lzTmFtZV0gPSBpdGVtLmRhdGFbaV0udmFsdWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5ld0RhdGFJdGVtLmlkID0gaXRlbS5pZDtcclxuXHJcbiAgICAgIHJldHVybiBuZXdEYXRhSXRlbTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX2RldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICBpZiAodGhpcy5kYXRhR3JpZD8uaW5zdGFuY2UpIHtcclxuICAgICAgdGhpcy5kYXRhR3JpZC5pbnN0YW5jZS5yZWZyZXNoKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0Q29sdW1ucyhjb21wb25lbnRzOiBDb21wb25lbnRNb2RlbEJhc2VbXSkge1xyXG4gICAgdGhpcy5jb2x1bW5zID0gY29tcG9uZW50cy5tYXAoYyA9PiB0aGlzLl90cmFuc2Zvcm1Db2x1bW4oc3RydWN0dXJlZENsb25lKGMpKSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMuY29sdW1ucy5wdXNoKHtcclxuICAgICAgICBjYXB0aW9uOiAnJyxcclxuICAgICAgICB0eXBlOiAnYnV0dG9ucycsXHJcbiAgICAgICAgd2lkdGg6IDgwLFxyXG4gICAgICAgIGNzc0NsYXNzOiAnY3VzdG9tLWNlbGwtY29udHJvbHMnLFxyXG4gICAgICAgIGJ1dHRvbnM6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdGVtcGxhdGU6ICdlZGl0QnV0dG9uVGVtcGxhdGUnLFxyXG4gICAgICAgICAgICBoaW50OiAn0KDQtdC00LDQutGC0LjRgNC+0LLQsNGC0YwnLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdGVtcGxhdGU6ICdkZWxldGVCdXR0b25UZW1wbGF0ZScsXHJcbiAgICAgICAgICAgIGhpbnQ6ICfQo9C00LDQu9C40YLRjCcsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmRhdGFHcmlkPy5pbnN0YW5jZSkge1xyXG4gICAgICB0aGlzLmRhdGFHcmlkLmluc3RhbmNlLnJlcGFpbnQoKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2RldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3RyYW5zZm9ybUNvbHVtbihjb21wb25lbnQ6IENvbXBvbmVudE1vZGVsQmFzZSk6IENvbHVtbk1vZGVsIHtcclxuICAgIGNvbnN0IGRhdGFUeXBlID0gdGhpcy5nZXREYXRhVHlwZShjb21wb25lbnQpO1xyXG5cclxuICAgIGNvbnN0IGNvbHVtbjogQ29sdW1uTW9kZWwgPSB7XHJcbiAgICAgIGNhcHRpb246IGNvbXBvbmVudC5vcHRpb25zLmxhYmVsIHx8ICcnLFxyXG4gICAgICBjb2x1bW5zOiBjb21wb25lbnQuY29tcG9uZW50cy5tYXAoYyA9PiB0aGlzLl90cmFuc2Zvcm1Db2x1bW4oc3RydWN0dXJlZENsb25lKGMpKSksXHJcbiAgICAgIGRhdGFGaWVsZDogY29tcG9uZW50LnN5c05hbWUsXHJcbiAgICAgIGRhdGFUeXBlOiB0aGlzLmdldERhdGFUeXBlKGNvbXBvbmVudCksXHJcbiAgICAgIGZvcm1hdDogdGhpcy5nZXRGb3JtYXQoY29tcG9uZW50KSxcclxuICAgICAgbWluV2lkdGg6IDE2MFxyXG4gICAgfVxyXG5cclxuICAgIGlmIChkYXRhVHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgIGNvbHVtbi5jYWxjdWxhdGVDZWxsVmFsdWUgPSAocm93RGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSByb3dEYXRhW2NvbXBvbmVudC5zeXNOYW1lXTtcclxuICAgICAgICAvLyDQldGB0LvQuCB0cnVlIOKAlCDQlNCwLCDQtdGB0LvQuCBmYWxzZSwgXCJcIiDQuNC70LggbnVsbCDigJQg0J3QtdGCXHJcbiAgICAgICAgcmV0dXJuICEhdmFsdWU7IFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29sdW1uLmxvb2t1cCA9IHtcclxuICAgICAgICBkYXRhU291cmNlOiBbXHJcbiAgICAgICAgICB7IHZhbHVlOiB0cnVlLCBkaXNwbGF5VmFsdWU6ICfQlNCwJyB9LFxyXG4gICAgICAgICAgeyB2YWx1ZTogZmFsc2UsIGRpc3BsYXlWYWx1ZTogJ9Cd0LXRgicgfVxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgdmFsdWVFeHByOiAndmFsdWUnLFxyXG4gICAgICAgIGRpc3BsYXlFeHByOiAnZGlzcGxheVZhbHVlJ1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb21wb25lbnQudHlwZSA9PT0gQ29tcG9uZW50VHlwZS5JbnB1dFNlbGVjdCkge1xyXG4gICAgICBjb25zdCBzZWxlY3RNb2RlbCA9IGNvbXBvbmVudCBhcyBJbnB1dFNlbGVjdE1vZGVsO1xyXG5cclxuICAgICAgaWYgKHNlbGVjdE1vZGVsLm9wdGlvbnMubWFudWFsKSB7XHJcbiAgICAgICAgY29sdW1uLmxvb2t1cCA9IHtcclxuICAgICAgICAgIGRhdGFTb3VyY2U6IHNlbGVjdE1vZGVsLm9wdGlvbnMuaXRlbXMsXHJcbiAgICAgICAgICB2YWx1ZUV4cHI6ICd2YWx1ZScsXHJcbiAgICAgICAgICBkaXNwbGF5RXhwcjogJ3RleHQnXHJcbiAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIGlmIChzZWxlY3RNb2RlbC5vcHRpb25zLmRpcmVjdG9yeT8uWzBdKSB7XHJcbiAgICAgICAgY29uc3QgZGlyZWN0b3J5TmFtZSA9IHNlbGVjdE1vZGVsLm9wdGlvbnMuZGlyZWN0b3J5WzBdO1xyXG5cclxuICAgICAgICBjb2x1bW4ubG9va3VwID0ge1xyXG4gICAgICAgICAgLy8g0J7QsdC+0YDQsNGH0LjQstCw0LXQvCDQsiBDdXN0b21TdG9yZSDQtNC70Y8g0YHQvtC+0YLQstC10YLRgdGC0LLQuNGPINGC0LjQv9Cw0LwgRGV2RXh0cmVtZVxyXG4gICAgICAgICAgZGF0YVNvdXJjZTogbmV3IEN1c3RvbVN0b3JlKHtcclxuICAgICAgICAgICAga2V5OiAndmFsdWUnLFxyXG4gICAgICAgICAgICBsb2FkOiAoKSA9PiB0aGlzLmdldExvb2t1cERhdGEoZGlyZWN0b3J5TmFtZSksXHJcbiAgICAgICAgICAgIGJ5S2V5OiAoa2V5KSA9PiB0aGlzLmdldExvb2t1cERhdGEoZGlyZWN0b3J5TmFtZSkudGhlbihpdGVtcyA9PiBpdGVtcy5maW5kKGkgPT4gaS52YWx1ZSA9PT0ga2V5KSlcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgdmFsdWVFeHByOiAndmFsdWUnLFxyXG4gICAgICAgICAgZGlzcGxheUV4cHI6ICd0ZXh0J1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zZXR0aW5ncy5vcHRpb25zLmdyb3Vwcy5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgZmluZElkeCA9IHRoaXMuc2V0dGluZ3Mub3B0aW9ucy5ncm91cHMuZmluZEluZGV4KHggPT4geCA9PT0gY29tcG9uZW50LnN5c05hbWUpO1xyXG5cclxuICAgICAgaWYgKGZpbmRJZHggIT09IC0xKSB7XHJcbiAgICAgICAgY29sdW1uLmdyb3VwSW5kZXggPSBmaW5kSWR4XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY29sdW1uXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldExvb2t1cERhdGEoZGlyZWN0b3J5TmFtZTogc3RyaW5nKTogUHJvbWlzZTxhbnlbXT4ge1xyXG4gICAgLy8g0J/RgNC+0LLQtdGA0Y/QtdC8INC60Y3RiFxyXG4gICAgaWYgKHRoaXMuX2xvb2t1cHNDYWNoZS5oYXMoZGlyZWN0b3J5TmFtZSkpIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9sb29rdXBzQ2FjaGUuZ2V0KGRpcmVjdG9yeU5hbWUpISk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g0JfQsNC/0YDQsNGI0LjQstCw0LXQvCDQtNCw0L3QvdGL0LUgKNC40YHQv9C+0LvRjNC30YPQtdC8INGC0L7RgiDQttC1IG9iamVjdElkLCDRh9GC0L4g0Lgg0LIg0LzQvtC00LDQu9C60LUpXHJcbiAgICAvLyDQo9Cx0LXQtNC40YLQtdGB0YwsINGH0YLQviBvYmplY3RJZCDQtNC+0YHRgtGD0L/QtdC9INCyINGN0YLQvtC8INC60L7QvNC/0L7QvdC10L3RgtC1XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgdGhpcy5fcmVmZXJlbmNlU2VydmljZS5nZXRSZWZlcmVuY2VzKGRpcmVjdG9yeU5hbWUsICh0aGlzIGFzIGFueSkub2JqZWN0SWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgaXRlbXMgPSAocmVzdWx0Py5yb3dzIHx8IFtdKS5tYXAoKHJvdzogYW55KSA9PiAoe1xyXG4gICAgICAgICAgICB2YWx1ZTogcm93LmEsXHJcbiAgICAgICAgICAgIHRleHQ6IHJvdy5iXHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICB0aGlzLl9sb29rdXBzQ2FjaGUuc2V0KGRpcmVjdG9yeU5hbWUsIGl0ZW1zKTtcclxuICAgICAgICAgIHJlc29sdmUoaXRlbXMpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHJlc29sdmUoW10pXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9idWlsZFRhYmxlVmFsdWVNb2RlbCgpOiBUYWJsZVZhbHVlTW9kZWwge1xyXG4gICAgY29uc3QgZ3JvdXBlZERhdGEgPSB0aGlzLl9idWlsZEdyb3VwZWRJdGVtcyh0aGlzLl9yb3dzLCB0aGlzLnNldHRpbmdzLm9wdGlvbnMuZ3JvdXBzIHx8IFtdLCAwKTtcclxuICAgIGNvbnN0IHRvdGFscyA9IHRoaXMuX2NhbGN1bGF0ZVRvdGFscyh0aGlzLl9yb3dzKTtcclxuXHJcbiAgICB0aGlzLm1vZGVsID0ge1xyXG4gICAgICBzeXNOYW1lOiB0aGlzLnNldHRpbmdzLnN5c05hbWUsXHJcbiAgICAgIHR5cGU6IHRoaXMuc2V0dGluZ3MudHlwZSxcclxuICAgICAgZGF0YTogZ3JvdXBlZERhdGEsXHJcbiAgICAgIHRvdGFsc1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gc3RydWN0dXJlZENsb25lKHRoaXMubW9kZWwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYnVpbGRHcm91cGVkSXRlbXMocm93czogVGFibGVSb3dNb2RlbFtdLCBncm91cEZpZWxkczogc3RyaW5nW10sIGxldmVsOiBudW1iZXIpOiBUYWJsZUl0ZW1bXSB7XHJcbiAgICBpZiAoIWdyb3VwRmllbGRzLmxlbmd0aCB8fCBsZXZlbCA+PSBncm91cEZpZWxkcy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIHJvd3MubWFwKHJvdyA9PiAoeyAuLi5yb3csIGl0ZW1UeXBlOiByb3cuaXRlbVR5cGUgPz8gVGFibGVJdGVtVHlwZS5Sb3cgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGdyb3VwRmllbGQgPSBncm91cEZpZWxkc1tsZXZlbF07XHJcbiAgICBjb25zdCBncm91cHMgPSBuZXcgTWFwPHN0cmluZywgeyByb3dzOiBUYWJsZVJvd01vZGVsW10sIGdyb3VwVmFsdWVTeXNOYW1lOiBzdHJpbmcgfT4oKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7XHJcbiAgICAgIGNvbnN0IGZpZWxkVmFsdWUgPSByb3cuZGF0YS5maW5kKHggPT4geC5zeXNOYW1lID09PSBncm91cEZpZWxkKT8udmFsdWUgPz8gbnVsbDtcclxuICAgICAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoZmllbGRWYWx1ZSk7XHJcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gZ3JvdXBzLmdldChrZXkpID8/IHtcclxuICAgICAgICByb3dzOiBbXSxcclxuICAgICAgICBncm91cFZhbHVlU3lzTmFtZTogdGhpcy5fZ2V0R3JvdXBWYWx1ZVN5c05hbWUoZmllbGRWYWx1ZSwgZ3JvdXBGaWVsZClcclxuICAgICAgfTtcclxuICAgICAgZXhpc3Rpbmcucm93cy5wdXNoKHJvdyk7XHJcbiAgICAgIGdyb3Vwcy5zZXQoa2V5LCBleGlzdGluZyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVzdWx0OiBUYWJsZUl0ZW1bXSA9IFtdO1xyXG5cclxuICAgIGZvciAoY29uc3QgZ3JvdXBJdGVtIG9mIGdyb3Vwcy52YWx1ZXMoKSkge1xyXG4gICAgICBjb25zdCBuZXN0ZWREYXRhID0gdGhpcy5fYnVpbGRHcm91cGVkSXRlbXMoZ3JvdXBJdGVtLnJvd3MsIGdyb3VwRmllbGRzLCBsZXZlbCArIDEpO1xyXG4gICAgICBjb25zdCBncm91cE1vZGVsOiBUYWJsZUdyb3VwTW9kZWwgPSB7XHJcbiAgICAgICAgaXRlbVR5cGU6IFRhYmxlSXRlbVR5cGUuR3JvdXAsXHJcbiAgICAgICAgZGF0YTogbmVzdGVkRGF0YSxcclxuICAgICAgICB0b3RhbHM6IHRoaXMuX2NhbGN1bGF0ZVRvdGFscyhncm91cEl0ZW0ucm93cywgZ3JvdXBJdGVtLmdyb3VwVmFsdWVTeXNOYW1lKVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgcmVzdWx0LnB1c2goZ3JvdXBNb2RlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NhbGN1bGF0ZVRvdGFscyhyb3dzOiBUYWJsZVJvd01vZGVsW10sIGdyb3VwRmllbGRTeXNOYW1lPzogc3RyaW5nKTogQ29tcG9uZW50VmFsdWVNb2RlbFtdIHtcclxuICAgIGNvbnN0IHRvdGFsQ29sdW1ucyA9IHRoaXMuX2dldFRvdGFsQ29sdW1ucyh0aGlzLnNldHRpbmdzLmNvbXBvbmVudHMpO1xyXG5cclxuICAgIHJldHVybiB0b3RhbENvbHVtbnMubWFwKGNvbXBvbmVudCA9PiB7XHJcbiAgICAgIGNvbnN0IHN1bSA9IHJvd3MucmVkdWNlKChhY2MsIHJvdykgPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gcm93LmRhdGEuZmluZCh4ID0+IHguc3lzTmFtZSA9PT0gY29tcG9uZW50LnN5c05hbWUpPy52YWx1ZTtcclxuICAgICAgICBjb25zdCBudW1lcmljVmFsdWUgPSB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInID8gdmFsdWUgOiBOdW1iZXIodmFsdWUpO1xyXG5cclxuICAgICAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG51bWVyaWNWYWx1ZSkgPyBhY2MgKyBudW1lcmljVmFsdWUgOiBhY2M7XHJcbiAgICAgIH0sIDApO1xyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBzeXNOYW1lOiB0aGlzLl9nZXRUb3RhbFN5c05hbWUoY29tcG9uZW50LnN5c05hbWUsIGdyb3VwRmllbGRTeXNOYW1lKSxcclxuICAgICAgICB0eXBlOiBjb21wb25lbnQudHlwZSxcclxuICAgICAgICB2YWx1ZVR5cGU6IGNvbXBvbmVudC52YWx1ZVR5cGUsXHJcbiAgICAgICAgdmFsdWU6IHN1bVxyXG4gICAgICB9IGFzIENvbXBvbmVudFZhbHVlTW9kZWw7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldFRvdGFsU3lzTmFtZShjb2x1bW5TeXNOYW1lOiBzdHJpbmcsIGdyb3VwRmllbGRTeXNOYW1lPzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmIChncm91cEZpZWxkU3lzTmFtZSkge1xyXG4gICAgICByZXR1cm4gYCR7Y29sdW1uU3lzTmFtZX1fJHtncm91cEZpZWxkU3lzTmFtZX1fdG90YWxgO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBgJHtjb2x1bW5TeXNOYW1lfV90b3RhbGA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRHcm91cFZhbHVlU3lzTmFtZShmaWVsZFZhbHVlOiBhbnksIGZhbGxiYWNrU3lzTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkVmFsdWUpICYmIGZpZWxkVmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IGZpcnN0VmFsdWUgPSBmaWVsZFZhbHVlWzBdO1xyXG4gICAgICBpZiAodHlwZW9mIGZpcnN0VmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBmaXJzdFZhbHVlID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgZmlyc3RWYWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZyhmaXJzdFZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChmaWVsZFZhbHVlICYmIHR5cGVvZiBmaWVsZFZhbHVlID09PSAnb2JqZWN0Jykge1xyXG4gICAgICBpZiAodHlwZW9mIGZpZWxkVmFsdWUudmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBmaWVsZFZhbHVlLnZhbHVlID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgZmllbGRWYWx1ZS52YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZyhmaWVsZFZhbHVlLnZhbHVlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHR5cGVvZiBmaWVsZFZhbHVlLnN5c05hbWUgPT09ICdzdHJpbmcnICYmIGZpZWxkVmFsdWUuc3lzTmFtZSkge1xyXG4gICAgICAgIHJldHVybiBmaWVsZFZhbHVlLnN5c05hbWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIGZpZWxkVmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBmaWVsZFZhbHVlID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgZmllbGRWYWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgIHJldHVybiBTdHJpbmcoZmllbGRWYWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbGxiYWNrU3lzTmFtZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldFRvdGFsQ29sdW1ucyhjb21wb25lbnRzOiBDb21wb25lbnRNb2RlbEJhc2VbXSk6IElucHV0TnVtYmVyTW9kZWxbXSB7XHJcbiAgICBjb25zdCByZXN1bHQ6IElucHV0TnVtYmVyTW9kZWxbXSA9IFtdO1xyXG5cclxuICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcclxuICAgICAgaWYgKGNvbXBvbmVudC50eXBlID09PSBDb21wb25lbnRUeXBlLklucHV0TnVtYmVyICYmIHRoaXMuc2hvd1RvdGFsKGNvbXBvbmVudCkpIHtcclxuICAgICAgICByZXN1bHQucHVzaChjb21wb25lbnQgYXMgSW5wdXROdW1iZXJNb2RlbCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjb21wb25lbnQuY29tcG9uZW50cz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgcmVzdWx0LnB1c2goLi4udGhpcy5fZ2V0VG90YWxDb2x1bW5zKGNvbXBvbmVudC5jb21wb25lbnRzKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZXh0cmFjdFJvd3MoaXRlbXM6IFRhYmxlSXRlbVtdID0gW10pOiBUYWJsZVJvd01vZGVsW10ge1xyXG4gICAgY29uc3Qgcm93czogVGFibGVSb3dNb2RlbFtdID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XHJcbiAgICAgIGlmICh0aGlzLl9pc1JvdyhpdGVtKSkge1xyXG4gICAgICAgIHJvd3MucHVzaCh7XHJcbiAgICAgICAgICAuLi5pdGVtLFxyXG4gICAgICAgICAgaXRlbVR5cGU6IFRhYmxlSXRlbVR5cGUuUm93XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgZ3JvdXAgPSBpdGVtIGFzIFRhYmxlR3JvdXBNb2RlbDtcclxuICAgICAgICBpZiAoZ3JvdXAuZGF0YT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICByb3dzLnB1c2goLi4udGhpcy5fZXh0cmFjdFJvd3MoZ3JvdXAuZGF0YSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByb3dzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNSb3coaXRlbTogVGFibGVJdGVtKTogaXRlbSBpcyBUYWJsZVJvd01vZGVsIHtcclxuICAgIGNvbnN0IG1heWJlUm93ID0gaXRlbSBhcyBUYWJsZVJvd01vZGVsO1xyXG4gICAgcmV0dXJuIHR5cGVvZiBtYXliZVJvdy5pZCA9PT0gJ3N0cmluZycgJiYgQXJyYXkuaXNBcnJheShtYXliZVJvdy5kYXRhKTtcclxuICB9XHJcbn1cclxuIiwiQGlmIChzZXR0aW5ncykge1xyXG4gIDxkaXYgY2xhc3M9XCJpbnB1dC10YWJsZS1jb250ZW50IHctMTAwXCI+XHJcbiAgICBAaWYgKHNldHRpbmdzLm9wdGlvbnMubGFiZWwpIHtcclxuICAgICAgPG1yeC1sYWJlbFxyXG4gICAgICAgIFtyZXF1aXJlZF09XCJzZXR0aW5ncy5vcHRpb25zLnJlcXVpcmVkXCJcclxuICAgICAgICBbdG9vbHRpcF09XCJzZXR0aW5ncy5vcHRpb25zLnRvb2x0aXAgfHwgJydcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgc2V0dGluZ3Mub3B0aW9ucy5sYWJlbCB9fVxyXG4gICAgICA8L21yeC1sYWJlbD5cclxuICAgIH1cclxuXHJcbiAgICA8ZHgtZGF0YS1ncmlkXHJcbiAgICAgICNkYXRhR3JpZFxyXG4gICAgICBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCJcclxuICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXHJcbiAgICAgIG5vRGF0YVRleHQ9XCLQndC10YIg0LTQsNC90L3Ri9GFXCJcclxuICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJVwiXHJcbiAgICAgIFt3b3JkV3JhcEVuYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgIFtjb2x1bW5BdXRvV2lkdGhdPVwidHJ1ZVwiXHJcbiAgICAgIFtjbGFzcy5ub0RhdGFdPVwiaXNSZWROb0RhdGFcIlxyXG4gICAgPlxyXG4gICAgICBAaWYoIWRpc2FibGVkKSB7XHJcbiAgICAgICAgPGR4by10b29sYmFyPlxyXG4gICAgICAgICAgPGR4aS1pdGVtIGxvY2F0aW9uPVwiYWZ0ZXJcIj5cclxuICAgICAgICAgICAgPGRpdiAqZHhUZW1wbGF0ZSBjbGFzcz1cImFkZC1yb3dcIj5cclxuICAgICAgICAgICAgICA8bXJ4LWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgW3NpemVdPVwiJ21lZGl1bSdcIlxyXG4gICAgICAgICAgICAgICAgW3R5cGVdPVwiJ3NlY29uZGFyeSdcIlxyXG4gICAgICAgICAgICAgICAgW2N1c3RvbUNsYXNzZXNdPVwiJ21iLTMnXCJcclxuICAgICAgICAgICAgICAgIChtcnhDbGljayk9XCJjcmVhdGVSb3coKVwiXHJcbiAgICAgICAgICAgICAgPnt7c2V0dGluZ3Mub3B0aW9ucy5hZGRCdG5UaXRsZX19XHJcbiAgICAgICAgICAgICAgPC9tcngtYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZHhpLWl0ZW0+XHJcbiAgICAgICAgPC9keG8tdG9vbGJhcj5cclxuICAgICAgfVxyXG5cclxuICAgICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBidXR0b25EYXRhIG9mICdlZGl0QnV0dG9uVGVtcGxhdGUnXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtcngtaWNvbiBpY29uLWVkaXQgaWNvbi1mb250LTE2IGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImVkaXRSb3coYnV0dG9uRGF0YSlcIj48L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBidXR0b25EYXRhIG9mICdkZWxldGVCdXR0b25UZW1wbGF0ZSdcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1yeC1pY29uIGljb24tZGVsZXRlIGljb24tZm9udC0xNiBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJkZWxldGVSb3coYnV0dG9uRGF0YSlcIj48L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgQGlmIChkYXRhU291cmNlLmxlbmd0aCkge1xyXG4gICAgICAgIDxkeG8tc3VtbWFyeT5cclxuICAgICAgICAgIEBmb3IgKGNvbXBvbmVudCBvZiBzZXR0aW5ncy5jb21wb25lbnRzOyB0cmFjayBjb21wb25lbnQuaWQ7IGxldCBmaXJzdCA9ICRmaXJzdCkge1xyXG4gICAgICAgICAgICBAaWYgKCFmaXJzdCkge1xyXG4gICAgICAgICAgICAgIEBpZiAoc2hvd1RvdGFsKGNvbXBvbmVudCkpIHtcclxuICAgICAgICAgICAgICAgIDxkeGktZ3JvdXAtaXRlbVxyXG4gICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbXBvbmVudC5zeXNOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgc3VtbWFyeVR5cGU9XCJzdW1cIlxyXG4gICAgICAgICAgICAgICAgICBkaXNwbGF5Rm9ybWF0PVwi0JjRgtC+0LPQvjogezB9XCJcclxuICAgICAgICAgICAgICAgICAgW3Nob3dJbkdyb3VwRm9vdGVyXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBbYWxpZ25CeUNvbHVtbl09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICA8L2R4aS1ncm91cC1pdGVtPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkeGktdG90YWwtaXRlbSBcclxuICAgICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb21wb25lbnQuc3lzTmFtZVwiIFxyXG4gICAgICAgICAgICAgICAgICBkaXNwbGF5Rm9ybWF0PVwiezB9XCJcclxuICAgICAgICAgICAgICAgICAgc3VtbWFyeVR5cGU9XCJzdW1cIlxyXG4gICAgICAgICAgICAgICAgPjwvZHhpLXRvdGFsLWl0ZW0+XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBAZm9yIChjb21wb25lbnQgb2YgY29tcG9uZW50LmNvbXBvbmVudHM7IHRyYWNrIGNvbXBvbmVudC5pZCkge1xyXG4gICAgICAgICAgICAgICAgQGlmIChzaG93VG90YWwoY29tcG9uZW50KSkge1xyXG4gICAgICAgICAgICAgICAgICA8ZHhpLWdyb3VwLWl0ZW1cclxuICAgICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbXBvbmVudC5zeXNOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5VHlwZT1cInN1bVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheUZvcm1hdD1cItCY0YLQvtCz0L46IHswfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dJbkdyb3VwRm9vdGVyXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFthbGlnbkJ5Q29sdW1uXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgPC9keGktZ3JvdXAtaXRlbT5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBAZm9yIChjb21wb25lbnQgb2YgY29tcG9uZW50LmNvbXBvbmVudHM7IHRyYWNrIGNvbXBvbmVudC5pZCkge1xyXG4gICAgICAgICAgICAgICAgICBAaWYgKHNob3dUb3RhbChjb21wb25lbnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPGR4aS1ncm91cC1pdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbXBvbmVudC5zeXNOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHN1bW1hcnlUeXBlPVwic3VtXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlGb3JtYXQ9XCLQmNGC0L7Qs9C+OiB7MH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3Nob3dJbkdyb3VwRm9vdGVyXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2FsaWduQnlDb2x1bW5dPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZHhpLWdyb3VwLWl0ZW0+XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICAgIEBpZiAoaGFzQW55VG90YWwpIHsgXHJcbiAgICAgICAgICAgICAgICA8ZHhpLXRvdGFsLWl0ZW1cclxuICAgICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbXBvbmVudC5zeXNOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICBbY3NzQ2xhc3NdPVwiJ3RleHQtYm9sZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5Rm9ybWF0XT1cInNob3dUb3RhbChjb21wb25lbnQpID8gJ3swfScgOiAn0JjQotCe0JPQnidcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzdW1tYXJ5VHlwZV09XCJzaG93VG90YWwoY29tcG9uZW50KSA/ICdzdW0nIDogdW5kZWZpbmVkXCJcclxuICAgICAgICAgICAgICAgID48L2R4aS10b3RhbC1pdGVtPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvZHhvLXN1bW1hcnk+XHJcbiAgICAgIH1cclxuICAgIDwvZHgtZGF0YS1ncmlkPlxyXG5cclxuICAgIEBpZighIXNldHRpbmdzLm9wdGlvbnMubWF4Um93cykge1xyXG4gICAgICA8bXJ4LWhpbnQtZXJyb3ItbWVzc2FnZVxyXG4gICAgICAgIG1lc3NhZ2U9XCLQnNCw0LrRgdC40LzQsNC70YzQvdC+0LUg0LrQvtC70LjRh9C10YHRgtCy0L4g0YHRgtGA0L7Qujoge3sgc2V0dGluZ3Mub3B0aW9ucy5tYXhSb3dzIH19XCJcclxuICAgICAgICBbbWF4VmFsdWVdPVwic2V0dGluZ3Mub3B0aW9ucy5tYXhSb3dzXCJcclxuICAgICAgICBbdmFsdWVdPVwicm93c0NvdW50XCJcclxuICAgICAgPjwvbXJ4LWhpbnQtZXJyb3ItbWVzc2FnZT5cclxuICAgIH1cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI2VkaXRUZW1wbGF0ZSBsZXQtY2VsbEluZm89XCJjZWxsSW5mb1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCIgc3R5bGU9XCJnYXA6IDRweFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibXJ4LWljb24gaWNvbi1lZGl0IGljb24tZm9udC0xNiBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJlZGl0Um93KGNlbGxJbmZvKVwiPjwvc3Bhbj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1yeC1pY29uIGljb24tZGVsZXRlIGljb24tZm9udC0xNiBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJkZWxldGVSb3coY2VsbEluZm8pXCI+PC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9kaXY+XHJcbn1cclxuXHJcblxyXG4iXX0=
|
|
450
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGV4LWZvcm0vc3JjL2xpYi9tb2R1bGVzL29iamVjdC1mb3JtL2NvbXBvbmVudHMvZWxlbWVudHMvaW5wdXQvdGFibGUvaW5wdXQtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGV4LWZvcm0vc3JjL2xpYi9tb2R1bGVzL29iamVjdC1mb3JtL2NvbXBvbmVudHMvZWxlbWVudHMvaW5wdXQvdGFibGUvaW5wdXQtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFBRSxNQUFNLEVBQ3BCLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDL0UsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFFN0MsT0FBTyxFQUtMLGFBQWEsRUFHZCxNQUFNLG9CQUFvQixDQUFDO0FBRTVCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFD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Q0FBQztRQUNILENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxNQUFNLENBQUMsSUFBZTtRQUM1QixNQUFNLFFBQVEsR0FBRyxJQUFxQixDQUFDO1FBQ3ZDLE9BQU8sT0FBTyxRQUFRLENBQUMsRUFBRSxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6RSxDQUFDOytHQWhnQlUsbUJBQW1CO21HQUFuQixtQkFBbUIseVVDekNoQyw4d0pBeUhBOzs0RkRoRmEsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNFLGlCQUFpQixtQkFHVix1QkFBdUIsQ0FBQyxNQUFNOzhCQXlCdEMsTUFBTTtzQkFBZCxLQUFLO2dCQUVPLElBQUk7c0JBQWhCLEtBQUs7Z0JBV2tDLFFBQVE7c0JBQS9DLFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQztnQkFDTSxZQUFZO3NCQUF2RCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUM7Z0JBRXpCLE9BQU87c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsIGluamVjdCxcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50VHlwZSwgRGF0ZVR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2hhcmVkLWZvcm0vZW51bXMnO1xyXG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50TW9kZWxCYXNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2hhcmVkLWZvcm0vbW9kZWxzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRHhEYXRhR3JpZENvbXBvbmVudCB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhcic7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50VmFsdWVNb2RlbCxcclxuICBTZWN0aW9uVmFsdWVNb2RlbCxcclxuICBUYWJsZUdyb3VwTW9kZWwsXHJcbiAgVGFibGVJdGVtLFxyXG4gIFRhYmxlSXRlbVR5cGUsXHJcbiAgVGFibGVSb3dNb2RlbCxcclxuICBUYWJsZVZhbHVlTW9kZWxcclxufSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBJbnB1dERhdGVNb2RlbCwgSW5wdXROdW1iZXJNb2RlbCwgSW5wdXRTZWxlY3RNb2RlbCwgSW5wdXRUYWJsZU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2VsZW1ldHMvaW5wdXRzJztcclxuaW1wb3J0IHsgb2JqZWN0Rm9ybUFjdGlvbnMsIG9iamVjdEZvcm1TZWxlY3RvcnMgfSBmcm9tICcuLi8uLi8uLi8uLi9zdG9yZSc7XHJcbmltcG9ydCB7IE1vZGFsU2VydmljZSB9IGZyb20gJ0BteXJ0ZXgtb3JnL3VpJztcclxuaW1wb3J0IHsgSW5wdXRUYWJsZU1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzJztcclxuaW1wb3J0IHsgZ2V0Um93TW9kZWwgfSBmcm9tICcuL2hlbHBlcnMvZ2V0LXJvdy1tb2RlbC5oZWxwZXInO1xyXG5pbXBvcnQgeyBDb2x1bW5Nb2RlbCB9IGZyb20gJy4vbW9kZWxzL2NvbHVtbi5tb2RlbCc7XHJcbmltcG9ydCB7IFJlZmVyZW5jZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9yZWZlcmVuY2Uuc2VydmljZSc7XHJcbmltcG9ydCBDdXN0b21TdG9yZSBmcm9tICdkZXZleHRyZW1lL2RhdGEvY3VzdG9tX3N0b3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWlucHV0LXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaW5wdXQtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2lucHV0LXRhYmxlLmNvbXBvbmVudC5sZXNzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIElucHV0VGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgdHlwZSA9IENvbXBvbmVudFR5cGUuSW5wdXRUYWJsZTtcclxuXHJcbiAgcHJpdmF0ZSBfcmVmZXJlbmNlU2VydmljZTogUmVmZXJlbmNlU2VydmljZSA9IGluamVjdChSZWZlcmVuY2VTZXJ2aWNlKTtcclxuXHJcbiAgcHJpdmF0ZSBfbG9va3Vwc0NhY2hlOiBNYXA8c3RyaW5nLCBhbnlbXT4gPSBuZXcgTWFwKCk7XHJcblxyXG4gIHByaXZhdGUgX3N0b3JlOiBTdG9yZSA9IGluamVjdChTdG9yZSk7XHJcbiAgcHJpdmF0ZSBfZGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcclxuICBwcml2YXRlIF9tb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSA9IGluamVjdChNb2RhbFNlcnZpY2UpO1xyXG5cclxuICBwcml2YXRlIF9jaGFuZ2VTdWJqZWN0JDogU3ViamVjdDxUYWJsZVZhbHVlTW9kZWw+ID0gbmV3IFN1YmplY3Q8VGFibGVWYWx1ZU1vZGVsPigpO1xyXG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMkOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cclxuICBwcml2YXRlIF9pc0NoZWNrUmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9jYW5FZGl0T2JqZWN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfcm93czogVGFibGVSb3dNb2RlbFtdID0gW107XHJcblxyXG4gIHB1YmxpYyBtb2RlbCE6IFRhYmxlVmFsdWVNb2RlbDtcclxuICBwdWJsaWMgc2V0dGluZ3MhOiBJbnB1dFRhYmxlTW9kZWw7XHJcbiAgcHVibGljIGRhdGFTb3VyY2U6IHsgW2tleTogc3RyaW5nXTogYW55IH1bXSA9IFtdO1xyXG4gIHB1YmxpYyBjb2x1bW5zOiBDb2x1bW5Nb2RlbFtdID0gW107XHJcblxyXG4gIEBJbnB1dCgpIHZhbHVlczogU2VjdGlvblZhbHVlTW9kZWxbXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKSBzZXQgZGF0YShzZXR0aW5nczogQ29tcG9uZW50TW9kZWxCYXNlKSB7XHJcbiAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3MgYXMgSW5wdXRUYWJsZU1vZGVsO1xyXG5cclxuICAgIHRoaXMubW9kZWwgPSB7c3lzTmFtZTogc2V0dGluZ3Muc3lzTmFtZSwgdHlwZTogc2V0dGluZ3MudHlwZSwgZGF0YTogW10sIHRvdGFsczogW119O1xyXG4gICAgdGhpcy5fcm93cyA9IFtdO1xyXG5cclxuICAgIHRoaXMuX2RldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICB0aGlzLl9pbml0Q29sdW1ucyh0aGlzLnNldHRpbmdzLmNvbXBvbmVudHMpO1xyXG4gIH1cclxuXHJcbiAgQFZpZXdDaGlsZCgnZGF0YUdyaWQnLCB7c3RhdGljOiBmYWxzZX0pIGRhdGFHcmlkITogRHhEYXRhR3JpZENvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKCdlZGl0VGVtcGxhdGUnLCB7c3RhdGljOiBmYWxzZX0pIGVkaXRUZW1wbGF0ZSE6IGFueTtcclxuXHJcbiAgQE91dHB1dCgpIHB1YmxpYyBjaGFuZ2VkOiBFdmVudEVtaXR0ZXI8Q29tcG9uZW50VmFsdWVNb2RlbCB8IENvbXBvbmVudFZhbHVlTW9kZWxbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPENvbXBvbmVudFZhbHVlTW9kZWwgfCBDb21wb25lbnRWYWx1ZU1vZGVsW10+KCk7XHJcblxyXG4gIHB1YmxpYyBnZXQgcm93c0NvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fcm93cy5sZW5ndGggfHwgMDtcclxuICB9XHJcblxyXG4gIGdldCBoYXNBbnlUb3RhbCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmNvbXBvbmVudHMuc29tZShjID0+XHJcbiAgICAgIHRoaXMuc2hvd1RvdGFsKGMpIHx8IGMuY29tcG9uZW50cz8uc29tZShpbm5lciA9PiB0aGlzLnNob3dUb3RhbChpbm5lcikpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzUmVkTm9EYXRhKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzQ2hlY2tSZXF1aXJlZDtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5faW5pdE1vZGVsKCk7XHJcblxyXG4gICAgdGhpcy5fY2hhbmdlU3ViamVjdCQucGlwZShcclxuICAgICAgZGVib3VuY2VUaW1lKDcwMCksXHJcbiAgICApLnN1YnNjcmliZShtb2RlbCA9PiB7XHJcbiAgICAgIHRoaXMuX3N0b3JlLmRpc3BhdGNoKG9iamVjdEZvcm1BY3Rpb25zLnVwZGF0ZVZhbHVlcyh7dmFsdWU6IG1vZGVsfSkpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucyQucHVzaCh0aGlzLl9zdG9yZS5zZWxlY3Qob2JqZWN0Rm9ybVNlbGVjdG9ycy5zZWxlY3RJc0NoZWNrUmVxdWlyZWQpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICB0aGlzLl9pc0NoZWNrUmVxdWlyZWQgPSByZXN1bHQ7XHJcbiAgICAgIHRoaXMuX2RldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pKTtcclxuXHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zJC5wdXNoKHRoaXMuX3N0b3JlLnNlbGVjdChvYmplY3RGb3JtU2VsZWN0b3JzLnNlbGVjdENhbkVkaXRPYmplY3QpXHJcbiAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICB0aGlzLl9jYW5FZGl0T2JqZWN0ID0gcmVzdWx0O1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncz8uY29tcG9uZW50cykge1xyXG4gICAgICAgICAgdGhpcy5faW5pdENvbHVtbnModGhpcy5zZXR0aW5ncy5jb21wb25lbnRzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2RldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfSkpO1xyXG5cclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMkLnB1c2godGhpcy5fc3RvcmUuc2VsZWN0KG9iamVjdEZvcm1TZWxlY3RvcnMuc2VsZWN0VmFsdWVNb2RlbCh0aGlzLnNldHRpbmdzKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBDb21wb25lbnRWYWx1ZU1vZGVsIHwgbnVsbCB8IChDb21wb25lbnRWYWx1ZU1vZGVsIHwgbnVsbClbXSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNsb25lUmVzdWx0ID0gc3RydWN0dXJlZENsb25lKHJlc3VsdCBhcyBUYWJsZVZhbHVlTW9kZWwgfCBudWxsKTtcclxuXHJcbiAgICAgICAgaWYgKGNsb25lUmVzdWx0ICYmICFBcnJheS5pc0FycmF5KGNsb25lUmVzdWx0KSAmJiB0aGlzLm1vZGVsLmRhdGEgIT09IGNsb25lUmVzdWx0LmRhdGEpIHtcclxuICAgICAgICAgIHRoaXMubW9kZWwgPSBzdHJ1Y3R1cmVkQ2xvbmUoY2xvbmVSZXN1bHQpO1xyXG4gICAgICAgICAgdGhpcy5fcm93cyA9IHRoaXMuX2V4dHJhY3RSb3dzKHRoaXMubW9kZWwuZGF0YSk7XHJcbiAgICAgICAgICB0aGlzLl9pbml0RGF0YVNvdXJjZSh0aGlzLl9yb3dzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY2hhbmdlU3ViamVjdCQudW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMkLmZvckVhY2goKHN1YnNjcmlwdGlvbikgPT4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNyZWF0ZVJvdygpIHtcclxuICAgIHRoaXMuX21vZGFsU2VydmljZS5vcGVuKElucHV0VGFibGVNb2RhbENvbXBvbmVudCwge1xyXG4gICAgICB0aXRsZTogJ9Ch0L7Qt9C00LDQvdC40LUg0YHRgtGA0L7QutC4JyxcclxuICAgICAgb2tUZXh0OiAn0KHQvtC30LTQsNGC0YwnLFxyXG4gICAgICBzZXR0aW5nczogdGhpcy5zZXR0aW5ncyxcclxuICAgICAgcm93TW9kZWw6IGdldFJvd01vZGVsKHRoaXMuc2V0dGluZ3MpLFxyXG4gICAgICBpc0NoZWNrUmVxdWlyZWQ6IHRoaXMuX2lzQ2hlY2tSZXF1aXJlZFxyXG4gICAgfSkuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzb2x2ZSA9PiB7XHJcbiAgICAgIGlmIChyZXNvbHZlLnJlc3VsdCkge1xyXG4gICAgICAgIGNvbnNvbGUuZ3JvdXAoJz09PSDQotCQ0JHQm9CY0KbQkDog0J/QvtC70YPRh9C10L3RiyDQtNCw0L3QvdGL0LUg0L/QvtGB0LvQtSDQodCe0JfQlNCQ0J3QmNCvID09PScpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCfQlNCw0L3QvdGL0LUg0YHRgtGA0L7QutC4INC40Lcg0LzQvtC00LDQu9C60LggKHJlc29sdmUucm93TW9kZWwpOicsIHN0cnVjdHVyZWRDbG9uZShyZXNvbHZlLnJvd01vZGVsKSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3Jvd3MgPSBbLi4uc3RydWN0dXJlZENsb25lKHRoaXMuX3Jvd3MpLCByZXNvbHZlLnJvd01vZGVsXTtcclxuXHJcbiAgICAgICAgdGhpcy5faW5pdERhdGFTb3VyY2UodGhpcy5fcm93cyk7XHJcblxyXG4gICAgICAgIGNvbnN0IG5leHRWYWx1ZU1vZGVsID0gdGhpcy5fYnVpbGRUYWJsZVZhbHVlTW9kZWwoKTtcclxuICAgICAgICBjb25zb2xlLmxvZygn0KHRhNC+0YDQvNC40YDQvtCy0LDQvdC90LDRjyDQvNC+0LTQtdC70Ywg0YLQsNCx0LvQuNGG0Ysg0LTQu9GPINC+0YLQv9GA0LDQstC60Lgg0LIgU3RvcmU6Jywgc3RydWN0dXJlZENsb25lKG5leHRWYWx1ZU1vZGVsKSk7XHJcbiAgICAgICAgdGhpcy5fY2hhbmdlU3ViamVjdCQubmV4dCh0aGlzLl9idWlsZFRhYmxlVmFsdWVNb2RlbCgpKTtcclxuICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRlbGV0ZVJvdyhldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBmaW5kUm93ID0gdGhpcy5fcm93cy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gZXZlbnQucm93LmRhdGEuaWQpO1xyXG5cclxuICAgIGlmIChmaW5kUm93KSB7XHJcbiAgICAgIHRoaXMuX3Jvd3MgPSB0aGlzLl9yb3dzLmZpbHRlcihpdGVtID0+IGl0ZW0uaWQgIT09IGV2ZW50LnJvdy5kYXRhLmlkKTtcclxuXHJcbiAgICAgIHRoaXMuX2luaXREYXRhU291cmNlKHRoaXMuX3Jvd3MpO1xyXG5cclxuICAgICAgdGhpcy5fY2hhbmdlU3ViamVjdCQubmV4dCh0aGlzLl9idWlsZFRhYmxlVmFsdWVNb2RlbCgpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhdGhpcy5fY2FuRWRpdE9iamVjdDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBlZGl0Um93KGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IGZpbmRSb3c6IFRhYmxlUm93TW9kZWwgfCB1bmRlZmluZWQgPSB0aGlzLl9yb3dzLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBldmVudC5yb3cuZGF0YS5pZCk7XHJcblxyXG4gICAgaWYgKGZpbmRSb3cpIHtcclxuICAgICAgY29uc29sZS5ncm91cCgnPT09INCi0JDQkdCb0JjQptCQOiDQntGC0LrRgNGL0YLQuNC1INCg0JXQlNCQ0JrQotCY0KDQntCS0JDQndCY0K8g0YHRgtGA0L7QutC4ID09PScpO1xyXG4gICAgICBjb25zb2xlLmxvZygnSUQg0YHRgtGA0L7QutC4OicsIGV2ZW50LnJvdy5kYXRhLmlkKTtcclxuICAgICAgY29uc29sZS5sb2coJ9Ci0LXQutGD0YnQtdC1INGB0L7RgdGC0L7Rj9C90LjQtSDRgdGC0YDQvtC60Lgg0LIg0L/QsNC80Y/RgtC4INGC0LDQsdC70LjRhtGLOicsIHN0cnVjdHVyZWRDbG9uZShmaW5kUm93KSk7XHJcbiAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcclxuXHJcbiAgICAgIHRoaXMuX21vZGFsU2VydmljZS5vcGVuKElucHV0VGFibGVNb2RhbENvbXBvbmVudCwge1xyXG4gICAgICAgIHRpdGxlOiAn0KDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjQtSDRgdGC0YDQvtC60LgnLFxyXG4gICAgICAgIG9rVGV4dDogJ9Ch0L7RhdGA0LDQvdC40YLRjCcsXHJcbiAgICAgICAgc2V0dGluZ3M6IHRoaXMuc2V0dGluZ3MsXHJcbiAgICAgICAgcm93TW9kZWw6IGZpbmRSb3dcclxuICAgICAgfSkuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc29sdmUucmVzdWx0KSB7XHJcbiAgICAgICAgICBjb25zb2xlLmdyb3VwKCc9PT0g0KLQkNCR0JvQmNCm0JA6INCf0L7Qu9GD0YfQtdC90Ysg0LTQsNC90L3Ri9C1INC/0L7RgdC70LUg0KDQldCU0JDQmtCi0JjQoNCe0JLQkNCd0JjQryA9PT0nKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCfQlNCw0L3QvdGL0LUg0LjQtyDQvNC+0LTQsNC70LrQuCAocmVzb2x2ZS5yb3dNb2RlbCk6Jywgc3RydWN0dXJlZENsb25lKHJlc29sdmUucm93TW9kZWwpKTtcclxuICAgICAgICAgIGNvbnN0IGNsb25lUm93cyA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLl9yb3dzKTtcclxuICAgICAgICAgIGNvbnN0IGVkaXRhYmxlUm93ID0gY2xvbmVSb3dzLmZpbmQocm93ID0+IHJvdy5pZCA9PT0gcmVzb2x2ZS5yb3dNb2RlbC5pZCk7XHJcblxyXG4gICAgICAgICAgaWYgKGVkaXRhYmxlUm93KSB7XHJcbiAgICAgICAgICAgIGVkaXRhYmxlUm93LmRhdGEgPSByZXNvbHZlLnJvd01vZGVsLmRhdGE7XHJcbiAgICAgICAgICAgIHRoaXMuX3Jvd3MgPSBjbG9uZVJvd3M7XHJcbiAgICAgICAgICAgIHRoaXMuX2luaXREYXRhU291cmNlKHRoaXMuX3Jvd3MpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgbmV4dFZhbHVlTW9kZWwgPSB0aGlzLl9idWlsZFRhYmxlVmFsdWVNb2RlbCgpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygn0KHRhNC+0YDQvNC40YDQvtCy0LDQvdC90LDRjyDQvNC+0LTQtdC70Ywg0YLQsNCx0LvQuNGG0Ysg0LTQu9GPINC+0LHQvdC+0LLQu9C10L3QuNGPIFN0b3JlOicsIHN0cnVjdHVyZWRDbG9uZShuZXh0VmFsdWVNb2RlbCkpO1xyXG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VTdWJqZWN0JC5uZXh0KG5leHRWYWx1ZU1vZGVsKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ9Ce0YjQuNCx0LrQsDog0J3QtSDRg9C00LDQu9C+0YHRjCDQvdCw0LnRgtC4INGA0LXQtNCw0LrRgtC40YDRg9C10LzRg9GOINGB0YLRgNC+0LrRgyDQv9C+IElEOicsIHJlc29sdmUucm93TW9kZWwuaWQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Rm9ybWF0KGNvbXBvbmVudDogQ29tcG9uZW50TW9kZWxCYXNlKSB7XHJcbiAgICBzd2l0Y2ggKGNvbXBvbmVudC50eXBlKSB7XHJcbiAgICAgIGNhc2UgQ29tcG9uZW50VHlwZS5JbnB1dERhdGU6XHJcbiAgICAgICAgc3dpdGNoICgoY29tcG9uZW50IGFzIElucHV0RGF0ZU1vZGVsKS5vcHRpb25zLnZpZXdUeXBlKSB7XHJcbiAgICAgICAgICBjYXNlIERhdGVUeXBlRW51bS5EYXRlVGltZTpcclxuICAgICAgICAgICAgcmV0dXJuICdkZC5NTS55eXl5IGhoOm1tJztcclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHJldHVybiAnZGQuTU0ueXl5eSc7XHJcbiAgICAgICAgfVxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXREYXRhVHlwZShjb21wb25lbnQ6IENvbXBvbmVudE1vZGVsQmFzZSkge1xyXG4gICAgc3dpdGNoIChjb21wb25lbnQudHlwZSkge1xyXG4gICAgICBjYXNlIENvbXBvbmVudFR5cGUuSW5wdXREYXRlOlxyXG4gICAgICAgIHJldHVybiAnZGF0ZSc7XHJcbiAgICAgIGNhc2UgQ29tcG9uZW50VHlwZS5JbnB1dFN3aXRjaDpcclxuICAgICAgICByZXR1cm4gJ2Jvb2xlYW4nXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuICdzdHJpbmcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3dUb3RhbChjb21wb25lbnQ6IENvbXBvbmVudE1vZGVsQmFzZSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGNvbXBvbmVudC50eXBlID09PSBDb21wb25lbnRUeXBlLklucHV0TnVtYmVyKSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQ6IElucHV0TnVtYmVyTW9kZWwgPSBjb21wb25lbnQgYXMgSW5wdXROdW1iZXJNb2RlbDtcclxuXHJcbiAgICAgIHJldHVybiBlbGVtZW50Lm9wdGlvbnMuaW5Ub3RhbHM7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzVG90YWxDb2x1bW4oY29tcG9uZW50OiBDb21wb25lbnRNb2RlbEJhc2UpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoY29tcG9uZW50IGFzIElucHV0TnVtYmVyTW9kZWwpLm9wdGlvbnMuaW5Ub3RhbHM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0TW9kZWwoKSB7XHJcbiAgICB0aGlzLm1vZGVsID0ge1xyXG4gICAgICBzeXNOYW1lOiB0aGlzLnNldHRpbmdzLnN5c05hbWUsXHJcbiAgICAgIHR5cGU6IHRoaXMuc2V0dGluZ3MudHlwZSxcclxuICAgICAgZGF0YTogW10sXHJcbiAgICAgIHRvdGFsczogW11cclxuICAgIH07XHJcbiAgICB0aGlzLl9yb3dzID0gW107XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0RGF0YVNvdXJjZShkYXRhOiBUYWJsZVJvd01vZGVsW10pIHtcclxuICAgIHRoaXMuZGF0YVNvdXJjZSA9IGRhdGEubWFwKChpdGVtOiBUYWJsZVJvd01vZGVsKSA9PiB7XHJcbiAgICAgIGNvbnN0IG5ld0RhdGFJdGVtOiBhbnkgPSB7fTtcclxuXHJcbiAgICAgIGZvciAobGV0IGkgaW4gaXRlbS5kYXRhKSB7XHJcbiAgICAgICAgbmV3RGF0YUl0ZW1baXRlbS5kYXRhW2ldLnN5c05hbWVdID0gaXRlbS5kYXRhW2ldLnZhbHVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBuZXdEYXRhSXRlbS5pZCA9IGl0ZW0uaWQ7XHJcblxyXG4gICAgICByZXR1cm4gbmV3RGF0YUl0ZW07XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLl9kZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuZGF0YUdyaWQ/Lmluc3RhbmNlKSB7XHJcbiAgICAgIHRoaXMuZGF0YUdyaWQuaW5zdGFuY2UucmVmcmVzaCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5pdENvbHVtbnMoY29tcG9uZW50czogQ29tcG9uZW50TW9kZWxCYXNlW10pIHtcclxuICAgIHRoaXMuY29sdW1ucyA9IGNvbXBvbmVudHMubWFwKGMgPT4gdGhpcy5fdHJhbnNmb3JtQ29sdW1uKHN0cnVjdHVyZWRDbG9uZShjKSkpO1xyXG5cclxuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLmNvbHVtbnMucHVzaCh7XHJcbiAgICAgICAgY2FwdGlvbjogJycsXHJcbiAgICAgICAgdHlwZTogJ2J1dHRvbnMnLFxyXG4gICAgICAgIHdpZHRoOiA4MCxcclxuICAgICAgICBjc3NDbGFzczogJ2N1c3RvbS1jZWxsLWNvbnRyb2xzJyxcclxuICAgICAgICBidXR0b25zOiBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHRlbXBsYXRlOiAnZWRpdEJ1dHRvblRlbXBsYXRlJyxcclxuICAgICAgICAgICAgaGludDogJ9Cg0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMJyxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHRlbXBsYXRlOiAnZGVsZXRlQnV0dG9uVGVtcGxhdGUnLFxyXG4gICAgICAgICAgICBoaW50OiAn0KPQtNCw0LvQuNGC0YwnLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICBdLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5kYXRhR3JpZD8uaW5zdGFuY2UpIHtcclxuICAgICAgdGhpcy5kYXRhR3JpZC5pbnN0YW5jZS5yZXBhaW50KCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9kZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF90cmFuc2Zvcm1Db2x1bW4oY29tcG9uZW50OiBDb21wb25lbnRNb2RlbEJhc2UpOiBDb2x1bW5Nb2RlbCB7XHJcbiAgICBjb25zdCBkYXRhVHlwZSA9IHRoaXMuZ2V0RGF0YVR5cGUoY29tcG9uZW50KTtcclxuXHJcbiAgICBjb25zdCBjb2x1bW46IENvbHVtbk1vZGVsID0ge1xyXG4gICAgICBjYXB0aW9uOiBjb21wb25lbnQub3B0aW9ucy5sYWJlbCB8fCAnJyxcclxuICAgICAgY29sdW1uczogY29tcG9uZW50LmNvbXBvbmVudHMubWFwKGMgPT4gdGhpcy5fdHJhbnNmb3JtQ29sdW1uKHN0cnVjdHVyZWRDbG9uZShjKSkpLFxyXG4gICAgICBkYXRhRmllbGQ6IGNvbXBvbmVudC5zeXNOYW1lLFxyXG4gICAgICBkYXRhVHlwZTogdGhpcy5nZXREYXRhVHlwZShjb21wb25lbnQpLFxyXG4gICAgICBmb3JtYXQ6IHRoaXMuZ2V0Rm9ybWF0KGNvbXBvbmVudCksXHJcbiAgICAgIG1pbldpZHRoOiAxNjBcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29tcG9uZW50LnR5cGUgPT09IENvbXBvbmVudFR5cGUuSW5wdXREYXRlICYmIChjb21wb25lbnQgYXMgSW5wdXREYXRlTW9kZWwpLm9wdGlvbnMucmFuZ2UpIHtcclxuICAgICAgY29sdW1uLmNhbGN1bGF0ZUNlbGxWYWx1ZSA9IChyb3dEYXRhOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBkYXRlQXJyYXkgPSByb3dEYXRhW2NvbXBvbmVudC5zeXNOYW1lXTtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRlQXJyYXkpICYmIGRhdGVBcnJheS5sZW5ndGggPT09IDIpIHtcclxuICAgICAgICAgIC8vINCi0YPRgiDQvNC+0LbQvdC+INC+0YLRhNC+0YDQvNCw0YLQuNGA0L7QstCw0YLRjCDQutGA0LDRgdC40LLQviwg0L3QsNC/0YDQuNC80LXRgDogXCIzMC4wNC4yMDI2IC0gMDIuMDUuMjAyNlwiXHJcbiAgICAgICAgICByZXR1cm4gYCR7ZGF0ZUFycmF5WzBdfSAtICR7ZGF0ZUFycmF5WzFdfWA7IFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRhdGFUeXBlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgY29sdW1uLmNhbGN1bGF0ZUNlbGxWYWx1ZSA9IChyb3dEYXRhOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IHJvd0RhdGFbY29tcG9uZW50LnN5c05hbWVdO1xyXG4gICAgICAgIC8vINCV0YHQu9C4IHRydWUg4oCUINCU0LAsINC10YHQu9C4IGZhbHNlLCBcIlwiINC40LvQuCBudWxsIOKAlCDQndC10YJcclxuICAgICAgICByZXR1cm4gISF2YWx1ZTsgXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBjb2x1bW4ubG9va3VwID0ge1xyXG4gICAgICAgIGRhdGFTb3VyY2U6IFtcclxuICAgICAgICAgIHsgdmFsdWU6IHRydWUsIGRpc3BsYXlWYWx1ZTogJ9CU0LAnIH0sXHJcbiAgICAgICAgICB7IHZhbHVlOiBmYWxzZSwgZGlzcGxheVZhbHVlOiAn0J3QtdGCJyB9XHJcbiAgICAgICAgXSxcclxuICAgICAgICB2YWx1ZUV4cHI6ICd2YWx1ZScsXHJcbiAgICAgICAgZGlzcGxheUV4cHI6ICdkaXNwbGF5VmFsdWUnXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbXBvbmVudC50eXBlID09PSBDb21wb25lbnRUeXBlLklucHV0U2VsZWN0KSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdE1vZGVsID0gY29tcG9uZW50IGFzIElucHV0U2VsZWN0TW9kZWw7XHJcblxyXG4gICAgICBpZiAoc2VsZWN0TW9kZWwub3B0aW9ucy5tYW51YWwpIHtcclxuICAgICAgICBjb2x1bW4ubG9va3VwID0ge1xyXG4gICAgICAgICAgZGF0YVNvdXJjZTogc2VsZWN0TW9kZWwub3B0aW9ucy5pdGVtcyxcclxuICAgICAgICAgIHZhbHVlRXhwcjogJ3ZhbHVlJyxcclxuICAgICAgICAgIGRpc3BsYXlFeHByOiAndGV4dCdcclxuICAgICAgICB9O1xyXG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdE1vZGVsLm9wdGlvbnMuZGlyZWN0b3J5Py5bMF0pIHtcclxuICAgICAgICBjb25zdCBkaXJlY3RvcnlOYW1lID0gc2VsZWN0TW9kZWwub3B0aW9ucy5kaXJlY3RvcnlbMF07XHJcblxyXG4gICAgICAgIGNvbHVtbi5sb29rdXAgPSB7XHJcbiAgICAgICAgICAvLyDQntCx0L7RgNCw0YfQuNCy0LDQtdC8INCyIEN1c3RvbVN0b3JlINC00LvRjyDRgdC+0L7RgtCy0LXRgtGB0YLQstC40Y8g0YLQuNC/0LDQvCBEZXZFeHRyZW1lXHJcbiAgICAgICAgICBkYXRhU291cmNlOiBuZXcgQ3VzdG9tU3RvcmUoe1xyXG4gICAgICAgICAgICBrZXk6ICd2YWx1ZScsXHJcbiAgICAgICAgICAgIGxvYWQ6ICgpID0+IHRoaXMuZ2V0TG9va3VwRGF0YShkaXJlY3RvcnlOYW1lKSxcclxuICAgICAgICAgICAgYnlLZXk6IChrZXkpID0+IHRoaXMuZ2V0TG9va3VwRGF0YShkaXJlY3RvcnlOYW1lKS50aGVuKGl0ZW1zID0+IGl0ZW1zLmZpbmQoaSA9PiBpLnZhbHVlID09PSBrZXkpKVxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICB2YWx1ZUV4cHI6ICd2YWx1ZScsXHJcbiAgICAgICAgICBkaXNwbGF5RXhwcjogJ3RleHQnXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNldHRpbmdzLm9wdGlvbnMuZ3JvdXBzLmxlbmd0aCkge1xyXG4gICAgICBjb25zdCBmaW5kSWR4ID0gdGhpcy5zZXR0aW5ncy5vcHRpb25zLmdyb3Vwcy5maW5kSW5kZXgoeCA9PiB4ID09PSBjb21wb25lbnQuc3lzTmFtZSk7XHJcblxyXG4gICAgICBpZiAoZmluZElkeCAhPT0gLTEpIHtcclxuICAgICAgICBjb2x1bW4uZ3JvdXBJbmRleCA9IGZpbmRJZHhcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb2x1bW5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TG9va3VwRGF0YShkaXJlY3RvcnlOYW1lOiBzdHJpbmcpOiBQcm9taXNlPGFueVtdPiB7XHJcbiAgICAvLyDQn9GA0L7QstC10YDRj9C10Lwg0LrRjdGIXHJcbiAgICBpZiAodGhpcy5fbG9va3Vwc0NhY2hlLmhhcyhkaXJlY3RvcnlOYW1lKSkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2xvb2t1cHNDYWNoZS5nZXQoZGlyZWN0b3J5TmFtZSkhKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDQl9Cw0L/RgNCw0YjQuNCy0LDQtdC8INC00LDQvdC90YvQtSAo0LjRgdC/0L7Qu9GM0LfRg9C10Lwg0YLQvtGCINC20LUgb2JqZWN0SWQsINGH0YLQviDQuCDQsiDQvNC+0LTQsNC70LrQtSlcclxuICAgIC8vINCj0LHQtdC00LjRgtC10YHRjCwg0YfRgtC+IG9iamVjdElkINC00L7RgdGC0YPQv9C10L0g0LIg0Y3RgtC+0Lwg0LrQvtC80L/QvtC90LXQvdGC0LVcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICB0aGlzLl9yZWZlcmVuY2VTZXJ2aWNlLmdldFJlZmVyZW5jZXMoZGlyZWN0b3J5TmFtZSwgKHRoaXMgYXMgYW55KS5vYmplY3RJZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtcyA9IChyZXN1bHQ/LnJvd3MgfHwgW10pLm1hcCgocm93OiBhbnkpID0+ICh7XHJcbiAgICAgICAgICAgIHZhbHVlOiByb3cuYSxcclxuICAgICAgICAgICAgdGV4dDogcm93LmJcclxuICAgICAgICAgIH0pKTtcclxuICAgICAgICAgIHRoaXMuX2xvb2t1cHNDYWNoZS5zZXQoZGlyZWN0b3J5TmFtZSwgaXRlbXMpO1xyXG4gICAgICAgICAgcmVzb2x2ZShpdGVtcyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4gcmVzb2x2ZShbXSlcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2J1aWxkVGFibGVWYWx1ZU1vZGVsKCk6IFRhYmxlVmFsdWVNb2RlbCB7XHJcbiAgICBjb25zdCBncm91cGVkRGF0YSA9IHRoaXMuX2J1aWxkR3JvdXBlZEl0ZW1zKHRoaXMuX3Jvd3MsIHRoaXMuc2V0dGluZ3Mub3B0aW9ucy5ncm91cHMgfHwgW10sIDApO1xyXG4gICAgY29uc3QgdG90YWxzID0gdGhpcy5fY2FsY3VsYXRlVG90YWxzKHRoaXMuX3Jvd3MpO1xyXG5cclxuICAgIHRoaXMubW9kZWwgPSB7XHJcbiAgICAgIHN5c05hbWU6IHRoaXMuc2V0dGluZ3Muc3lzTmFtZSxcclxuICAgICAgdHlwZTogdGhpcy5zZXR0aW5ncy50eXBlLFxyXG4gICAgICBkYXRhOiBncm91cGVkRGF0YSxcclxuICAgICAgdG90YWxzXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5tb2RlbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9idWlsZEdyb3VwZWRJdGVtcyhyb3dzOiBUYWJsZVJvd01vZGVsW10sIGdyb3VwRmllbGRzOiBzdHJpbmdbXSwgbGV2ZWw6IG51bWJlcik6IFRhYmxlSXRlbVtdIHtcclxuICAgIGlmICghZ3JvdXBGaWVsZHMubGVuZ3RoIHx8IGxldmVsID49IGdyb3VwRmllbGRzLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gcm93cy5tYXAocm93ID0+ICh7IC4uLnJvdywgaXRlbVR5cGU6IHJvdy5pdGVtVHlwZSA/PyBUYWJsZUl0ZW1UeXBlLlJvdyB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZ3JvdXBGaWVsZCA9IGdyb3VwRmllbGRzW2xldmVsXTtcclxuICAgIGNvbnN0IGdyb3VwcyA9IG5ldyBNYXA8c3RyaW5nLCB7IHJvd3M6IFRhYmxlUm93TW9kZWxbXSwgZ3JvdXBWYWx1ZVN5c05hbWU6IHN0cmluZyB9PigpO1xyXG5cclxuICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcclxuICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IHJvdy5kYXRhLmZpbmQoeCA9PiB4LnN5c05hbWUgPT09IGdyb3VwRmllbGQpPy52YWx1ZSA/PyBudWxsO1xyXG4gICAgICBjb25zdCBrZXkgPSBKU09OLnN0cmluZ2lmeShmaWVsZFZhbHVlKTtcclxuICAgICAgY29uc3QgZXhpc3RpbmcgPSBncm91cHMuZ2V0KGtleSkgPz8ge1xyXG4gICAgICAgIHJvd3M6IFtdLFxyXG4gICAgICAgIGdyb3VwVmFsdWVTeXNOYW1lOiB0aGlzLl9nZXRHcm91cFZhbHVlU3lzTmFtZShmaWVsZFZhbHVlLCBncm91cEZpZWxkKVxyXG4gICAgICB9O1xyXG4gICAgICBleGlzdGluZy5yb3dzLnB1c2gocm93KTtcclxuICAgICAgZ3JvdXBzLnNldChrZXksIGV4aXN0aW5nKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZXN1bHQ6IFRhYmxlSXRlbVtdID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCBncm91cEl0ZW0gb2YgZ3JvdXBzLnZhbHVlcygpKSB7XHJcbiAgICAgIGNvbnN0IG5lc3RlZERhdGEgPSB0aGlzLl9idWlsZEdyb3VwZWRJdGVtcyhncm91cEl0ZW0ucm93cywgZ3JvdXBGaWVsZHMsIGxldmVsICsgMSk7XHJcbiAgICAgIGNvbnN0IGdyb3VwTW9kZWw6IFRhYmxlR3JvdXBNb2RlbCA9IHtcclxuICAgICAgICBpdGVtVHlwZTogVGFibGVJdGVtVHlwZS5Hcm91cCxcclxuICAgICAgICBkYXRhOiBuZXN0ZWREYXRhLFxyXG4gICAgICAgIHRvdGFsczogdGhpcy5fY2FsY3VsYXRlVG90YWxzKGdyb3VwSXRlbS5yb3dzLCBncm91cEl0ZW0uZ3JvdXBWYWx1ZVN5c05hbWUpXHJcbiAgICAgIH07XHJcblxyXG4gICAgICByZXN1bHQucHVzaChncm91cE1vZGVsKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2FsY3VsYXRlVG90YWxzKHJvd3M6IFRhYmxlUm93TW9kZWxbXSwgZ3JvdXBGaWVsZFN5c05hbWU/OiBzdHJpbmcpOiBDb21wb25lbnRWYWx1ZU1vZGVsW10ge1xyXG4gICAgY29uc3QgdG90YWxDb2x1bW5zID0gdGhpcy5fZ2V0VG90YWxDb2x1bW5zKHRoaXMuc2V0dGluZ3MuY29tcG9uZW50cyk7XHJcblxyXG4gICAgcmV0dXJuIHRvdGFsQ29sdW1ucy5tYXAoY29tcG9uZW50ID0+IHtcclxuICAgICAgY29uc3Qgc3VtID0gcm93cy5yZWR1Y2UoKGFjYywgcm93KSA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSByb3cuZGF0YS5maW5kKHggPT4geC5zeXNOYW1lID09PSBjb21wb25lbnQuc3lzTmFtZSk/LnZhbHVlO1xyXG4gICAgICAgIGNvbnN0IG51bWVyaWNWYWx1ZSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgPyB2YWx1ZSA6IE51bWJlcih2YWx1ZSk7XHJcblxyXG4gICAgICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUobnVtZXJpY1ZhbHVlKSA/IGFjYyArIG51bWVyaWNWYWx1ZSA6IGFjYztcclxuICAgICAgfSwgMCk7XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHN5c05hbWU6IHRoaXMuX2dldFRvdGFsU3lzTmFtZShjb21wb25lbnQuc3lzTmFtZSwgZ3JvdXBGaWVsZFN5c05hbWUpLFxyXG4gICAgICAgIHR5cGU6IGNvbXBvbmVudC50eXBlLFxyXG4gICAgICAgIHZhbHVlVHlwZTogY29tcG9uZW50LnZhbHVlVHlwZSxcclxuICAgICAgICB2YWx1ZTogc3VtXHJcbiAgICAgIH0gYXMgQ29tcG9uZW50VmFsdWVNb2RlbDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0VG90YWxTeXNOYW1lKGNvbHVtblN5c05hbWU6IHN0cmluZywgZ3JvdXBGaWVsZFN5c05hbWU/OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKGdyb3VwRmllbGRTeXNOYW1lKSB7XHJcbiAgICAgIHJldHVybiBgJHtjb2x1bW5TeXNOYW1lfV8ke2dyb3VwRmllbGRTeXNOYW1lfV90b3RhbGA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGAke2NvbHVtblN5c05hbWV9X3RvdGFsYDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldEdyb3VwVmFsdWVTeXNOYW1lKGZpZWxkVmFsdWU6IGFueSwgZmFsbGJhY2tTeXNOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZmllbGRWYWx1ZSkgJiYgZmllbGRWYWx1ZS5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgZmlyc3RWYWx1ZSA9IGZpZWxkVmFsdWVbMF07XHJcbiAgICAgIGlmICh0eXBlb2YgZmlyc3RWYWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGZpcnN0VmFsdWUgPT09ICdudW1iZXInIHx8IHR5cGVvZiBmaXJzdFZhbHVlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nKGZpcnN0VmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZpZWxkVmFsdWUgJiYgdHlwZW9mIGZpZWxkVmFsdWUgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgZmllbGRWYWx1ZS52YWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGZpZWxkVmFsdWUudmFsdWUgPT09ICdudW1iZXInIHx8IHR5cGVvZiBmaWVsZFZhbHVlLnZhbHVlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nKGZpZWxkVmFsdWUudmFsdWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodHlwZW9mIGZpZWxkVmFsdWUuc3lzTmFtZSA9PT0gJ3N0cmluZycgJiYgZmllbGRWYWx1ZS5zeXNOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIGZpZWxkVmFsdWUuc3lzTmFtZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgZmllbGRWYWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGZpZWxkVmFsdWUgPT09ICdudW1iZXInIHx8IHR5cGVvZiBmaWVsZFZhbHVlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgcmV0dXJuIFN0cmluZyhmaWVsZFZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsbGJhY2tTeXNOYW1lO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0VG90YWxDb2x1bW5zKGNvbXBvbmVudHM6IENvbXBvbmVudE1vZGVsQmFzZVtdKTogSW5wdXROdW1iZXJNb2RlbFtdIHtcclxuICAgIGNvbnN0IHJlc3VsdDogSW5wdXROdW1iZXJNb2RlbFtdID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xyXG4gICAgICBpZiAoY29tcG9uZW50LnR5cGUgPT09IENvbXBvbmVudFR5cGUuSW5wdXROdW1iZXIgJiYgdGhpcy5zaG93VG90YWwoY29tcG9uZW50KSkge1xyXG4gICAgICAgIHJlc3VsdC5wdXNoKGNvbXBvbmVudCBhcyBJbnB1dE51bWJlck1vZGVsKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNvbXBvbmVudC5jb21wb25lbnRzPy5sZW5ndGgpIHtcclxuICAgICAgICByZXN1bHQucHVzaCguLi50aGlzLl9nZXRUb3RhbENvbHVtbnMoY29tcG9uZW50LmNvbXBvbmVudHMpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9leHRyYWN0Um93cyhpdGVtczogVGFibGVJdGVtW10gPSBbXSk6IFRhYmxlUm93TW9kZWxbXSB7XHJcbiAgICBjb25zdCByb3dzOiBUYWJsZVJvd01vZGVsW10gPSBbXTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcclxuICAgICAgaWYgKHRoaXMuX2lzUm93KGl0ZW0pKSB7XHJcbiAgICAgICAgcm93cy5wdXNoKHtcclxuICAgICAgICAgIC4uLml0ZW0sXHJcbiAgICAgICAgICBpdGVtVHlwZTogVGFibGVJdGVtVHlwZS5Sb3dcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBncm91cCA9IGl0ZW0gYXMgVGFibGVHcm91cE1vZGVsO1xyXG4gICAgICAgIGlmIChncm91cC5kYXRhPy5sZW5ndGgpIHtcclxuICAgICAgICAgIHJvd3MucHVzaCguLi50aGlzLl9leHRyYWN0Um93cyhncm91cC5kYXRhKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJvd3M7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc1JvdyhpdGVtOiBUYWJsZUl0ZW0pOiBpdGVtIGlzIFRhYmxlUm93TW9kZWwge1xyXG4gICAgY29uc3QgbWF5YmVSb3cgPSBpdGVtIGFzIFRhYmxlUm93TW9kZWw7XHJcbiAgICByZXR1cm4gdHlwZW9mIG1heWJlUm93LmlkID09PSAnc3RyaW5nJyAmJiBBcnJheS5pc0FycmF5KG1heWJlUm93LmRhdGEpO1xyXG4gIH1cclxufVxyXG4iLCJAaWYgKHNldHRpbmdzKSB7XHJcbiAgPGRpdiBjbGFzcz1cImlucHV0LXRhYmxlLWNvbnRlbnQgdy0xMDBcIj5cclxuICAgIEBpZiAoc2V0dGluZ3Mub3B0aW9ucy5sYWJlbCkge1xyXG4gICAgICA8bXJ4LWxhYmVsXHJcbiAgICAgICAgW3JlcXVpcmVkXT1cInNldHRpbmdzLm9wdGlvbnMucmVxdWlyZWRcIlxyXG4gICAgICAgIFt0b29sdGlwXT1cInNldHRpbmdzLm9wdGlvbnMudG9vbHRpcCB8fCAnJ1wiXHJcbiAgICAgID5cclxuICAgICAgICB7eyBzZXR0aW5ncy5vcHRpb25zLmxhYmVsIH19XHJcbiAgICAgIDwvbXJ4LWxhYmVsPlxyXG4gICAgfVxyXG5cclxuICAgIDxkeC1kYXRhLWdyaWRcclxuICAgICAgI2RhdGFHcmlkXHJcbiAgICAgIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIlxyXG4gICAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcclxuICAgICAgbm9EYXRhVGV4dD1cItCd0LXRgiDQtNCw0L3QvdGL0YVcIlxyXG4gICAgICBzdHlsZT1cIndpZHRoOiAxMDAlXCJcclxuICAgICAgW3dvcmRXcmFwRW5hYmxlZF09XCJ0cnVlXCJcclxuICAgICAgW2NvbHVtbkF1dG9XaWR0aF09XCJ0cnVlXCJcclxuICAgICAgW2NsYXNzLm5vRGF0YV09XCJpc1JlZE5vRGF0YVwiXHJcbiAgICA+XHJcbiAgICAgIEBpZighZGlzYWJsZWQpIHtcclxuICAgICAgICA8ZHhvLXRvb2xiYXI+XHJcbiAgICAgICAgICA8ZHhpLWl0ZW0gbG9jYXRpb249XCJhZnRlclwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpkeFRlbXBsYXRlIGNsYXNzPVwiYWRkLXJvd1wiPlxyXG4gICAgICAgICAgICAgIDxtcngtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICBbc2l6ZV09XCInbWVkaXVtJ1wiXHJcbiAgICAgICAgICAgICAgICBbdHlwZV09XCInc2Vjb25kYXJ5J1wiXHJcbiAgICAgICAgICAgICAgICBbY3VzdG9tQ2xhc3Nlc109XCInbWItMydcIlxyXG4gICAgICAgICAgICAgICAgKG1yeENsaWNrKT1cImNyZWF0ZVJvdygpXCJcclxuICAgICAgICAgICAgICA+e3tzZXR0aW5ncy5vcHRpb25zLmFkZEJ0blRpdGxlfX1cclxuICAgICAgICAgICAgICA8L21yeC1idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9keGktaXRlbT5cclxuICAgICAgICA8L2R4by10b29sYmFyPlxyXG4gICAgICB9XHJcblxyXG4gICAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGJ1dHRvbkRhdGEgb2YgJ2VkaXRCdXR0b25UZW1wbGF0ZSdcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1yeC1pY29uIGljb24tZWRpdCBpY29uLWZvbnQtMTYgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiZWRpdFJvdyhidXR0b25EYXRhKVwiPjwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGJ1dHRvbkRhdGEgb2YgJ2RlbGV0ZUJ1dHRvblRlbXBsYXRlJ1wiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibXJ4LWljb24gaWNvbi1kZWxldGUgaWNvbi1mb250LTE2IGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImRlbGV0ZVJvdyhidXR0b25EYXRhKVwiPjwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICBAaWYgKGRhdGFTb3VyY2UubGVuZ3RoKSB7XHJcbiAgICAgICAgPGR4by1zdW1tYXJ5PlxyXG4gICAgICAgICAgQGZvciAoY29tcG9uZW50IG9mIHNldHRpbmdzLmNvbXBvbmVudHM7IHRyYWNrIGNvbXBvbmVudC5pZDsgbGV0IGZpcnN0ID0gJGZpcnN0KSB7XHJcbiAgICAgICAgICAgIEBpZiAoIWZpcnN0KSB7XHJcbiAgICAgICAgICAgICAgQGlmIChzaG93VG90YWwoY29tcG9uZW50KSkge1xyXG4gICAgICAgICAgICAgICAgPGR4aS1ncm91cC1pdGVtXHJcbiAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29tcG9uZW50LnN5c05hbWVcIlxyXG4gICAgICAgICAgICAgICAgICBzdW1tYXJ5VHlwZT1cInN1bVwiXHJcbiAgICAgICAgICAgICAgICAgIGRpc3BsYXlGb3JtYXQ9XCLQmNGC0L7Qs9C+OiB7MH1cIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd0luR3JvdXBGb290ZXJdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFthbGlnbkJ5Q29sdW1uXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgIDwvZHhpLWdyb3VwLWl0ZW0+XHJcblxyXG4gICAgICAgICAgICAgICAgPGR4aS10b3RhbC1pdGVtIFxyXG4gICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbXBvbmVudC5zeXNOYW1lXCIgXHJcbiAgICAgICAgICAgICAgICAgIGRpc3BsYXlGb3JtYXQ9XCJ7MH1cIlxyXG4gICAgICAgICAgICAgICAgICBzdW1tYXJ5VHlwZT1cInN1bVwiXHJcbiAgICAgICAgICAgICAgICA+PC9keGktdG90YWwtaXRlbT5cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIEBmb3IgKGNvbXBvbmVudCBvZiBjb21wb25lbnQuY29tcG9uZW50czsgdHJhY2sgY29tcG9uZW50LmlkKSB7XHJcbiAgICAgICAgICAgICAgICBAaWYgKHNob3dUb3RhbChjb21wb25lbnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgIDxkeGktZ3JvdXAtaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29tcG9uZW50LnN5c05hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN1bW1hcnlUeXBlPVwic3VtXCJcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5Rm9ybWF0PVwi0JjRgtC+0LPQvjogezB9XCJcclxuICAgICAgICAgICAgICAgICAgICBbc2hvd0luR3JvdXBGb290ZXJdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2FsaWduQnlDb2x1bW5dPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L2R4aS1ncm91cC1pdGVtPlxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIEBmb3IgKGNvbXBvbmVudCBvZiBjb21wb25lbnQuY29tcG9uZW50czsgdHJhY2sgY29tcG9uZW50LmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgIEBpZiAoc2hvd1RvdGFsKGNvbXBvbmVudCkpIHtcclxuICAgICAgICAgICAgICAgICAgICA8ZHhpLWdyb3VwLWl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29tcG9uZW50LnN5c05hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeVR5cGU9XCJzdW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUZvcm1hdD1cItCY0YLQvtCz0L46IHswfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbc2hvd0luR3JvdXBGb290ZXJdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbYWxpZ25CeUNvbHVtbl09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9keGktZ3JvdXAtaXRlbT5cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgQGlmIChoYXNBbnlUb3RhbCkgeyBcclxuICAgICAgICAgICAgICAgIDxkeGktdG90YWwtaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29tcG9uZW50LnN5c05hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjc3NDbGFzc109XCIndGV4dC1ib2xkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc3BsYXlGb3JtYXRdPVwic2hvd1RvdGFsKGNvbXBvbmVudCkgPyAnezB9JyA6ICfQmNCi0J7Qk9CeJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW3N1bW1hcnlUeXBlXT1cInNob3dUb3RhbChjb21wb25lbnQpID8gJ3N1bScgOiB1bmRlZmluZWRcIlxyXG4gICAgICAgICAgICAgICAgPjwvZHhpLXRvdGFsLWl0ZW0+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9keG8tc3VtbWFyeT5cclxuICAgICAgfVxyXG4gICAgPC9keC1kYXRhLWdyaWQ+XHJcblxyXG4gICAgQGlmKCEhc2V0dGluZ3Mub3B0aW9ucy5tYXhSb3dzKSB7XHJcbiAgICAgIDxtcngtaGludC1lcnJvci1tZXNzYWdlXHJcbiAgICAgICAgbWVzc2FnZT1cItCc0LDQutGB0LjQvNCw0LvRjNC90L7QtSDQutC+0LvQuNGH0LXRgdGC0LLQviDRgdGC0YDQvtC6OiB7eyBzZXR0aW5ncy5vcHRpb25zLm1heFJvd3MgfX1cIlxyXG4gICAgICAgIFttYXhWYWx1ZV09XCJzZXR0aW5ncy5vcHRpb25zLm1heFJvd3NcIlxyXG4gICAgICAgIFt2YWx1ZV09XCJyb3dzQ291bnRcIlxyXG4gICAgICA+PC9tcngtaGludC1lcnJvci1tZXNzYWdlPlxyXG4gICAgfVxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjZWRpdFRlbXBsYXRlIGxldC1jZWxsSW5mbz1cImNlbGxJbmZvXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIiBzdHlsZT1cImdhcDogNHB4XCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtcngtaWNvbiBpY29uLWVkaXQgaWNvbi1mb250LTE2IGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImVkaXRSb3coY2VsbEluZm8pXCI+PC9zcGFuPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibXJ4LWljb24gaWNvbi1kZWxldGUgaWNvbi1mb250LTE2IGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImRlbGV0ZVJvdyhjZWxsSW5mbylcIj48L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L2Rpdj5cclxufVxyXG5cclxuXHJcbiJdfQ==
|
|
@@ -17,7 +17,7 @@ import { AutoSaveStore, ToasterType, LabelModule, ModalServiceComponent, MODAL_D
|
|
|
17
17
|
import { HttpHeaders, HttpClient, HTTP_INTERCEPTORS } from '@angular/common/http';
|
|
18
18
|
import * as i2$1 from '@myrtex-org/templates';
|
|
19
19
|
import { FormHeaderModule, MenuAdminModule } from '@myrtex-org/templates';
|
|
20
|
-
import { cloneDeep } from 'lodash-es';
|
|
20
|
+
import { cloneDeep, isArray } from 'lodash-es';
|
|
21
21
|
import * as i2$2 from '@angular/forms';
|
|
22
22
|
import { FormsModule } from '@angular/forms';
|
|
23
23
|
import { provideNgxMask } from 'ngx-mask';
|
|
@@ -2224,44 +2224,20 @@ class InputTableModalComponent extends ModalServiceComponent {
|
|
|
2224
2224
|
}
|
|
2225
2225
|
componentValueChanged(valueModel) {
|
|
2226
2226
|
console.group('=== МОДАЛКА: Изменение значения в форме ===');
|
|
2227
|
-
|
|
2228
|
-
|
|
2229
|
-
|
|
2230
|
-
|
|
2231
|
-
|
|
2232
|
-
|
|
2233
|
-
|
|
2234
|
-
|
|
2235
|
-
|
|
2236
|
-
}
|
|
2237
|
-
// Проходим по сгруппированным изменениям
|
|
2238
|
-
Object.keys(groups).forEach(sysName => {
|
|
2239
|
-
const changedItems = groups[sysName];
|
|
2240
|
-
if (changedItems.length === 2) {
|
|
2241
|
-
// Это диапазон дат (два объекта с одинаковым sysName)
|
|
2242
|
-
// Ищем в rowModel оригинальное поле (например, 'itb6-id0') и СЛЕДУЮЩЕЕ за ним ('itb6-id1')
|
|
2243
|
-
const startIndex = cloneRowModel.data.findIndex(c => c.sysName === sysName);
|
|
2244
|
-
if (startIndex !== -1) {
|
|
2245
|
-
// Записываем дату начала в текущее поле
|
|
2246
|
-
cloneRowModel.data[startIndex].value = changedItems[0].value;
|
|
2247
|
-
// Записываем дату окончания в следующее по порядку поле (id1)
|
|
2248
|
-
if (cloneRowModel.data[startIndex + 1]) {
|
|
2249
|
-
cloneRowModel.data[startIndex + 1].value = changedItems[1].value;
|
|
2250
|
-
}
|
|
2251
|
-
}
|
|
2252
|
-
}
|
|
2253
|
-
else if (changedItems.length === 1) {
|
|
2254
|
-
// Обычное одиночное поле
|
|
2255
|
-
const findValue = cloneRowModel.data.find(c => c.sysName === sysName);
|
|
2256
|
-
if (findValue) {
|
|
2257
|
-
findValue.value = changedItems[0].value;
|
|
2258
|
-
}
|
|
2259
|
-
}
|
|
2260
|
-
});
|
|
2261
|
-
this.rowModel = cloneRowModel;
|
|
2227
|
+
console.log('Что пришло из FormDispenser (valueModel):', structuredClone(valueModel));
|
|
2228
|
+
console.log('Текущий rowModel.data ДО трансформации:', structuredClone(this.rowModel.data));
|
|
2229
|
+
if (isArray(valueModel)) {
|
|
2230
|
+
valueModel.forEach(model => {
|
|
2231
|
+
this._transformValues(model);
|
|
2232
|
+
});
|
|
2233
|
+
}
|
|
2234
|
+
else {
|
|
2235
|
+
this._transformValues(valueModel);
|
|
2236
|
+
}
|
|
2262
2237
|
this._recalculateFormulaFields();
|
|
2238
|
+
console.log('Итоговый rowModel.data ПОСЛЕ трансформации и формул:', structuredClone(this.rowModel.data));
|
|
2263
2239
|
this.emptyRow = this.rowModel.data.every(x => this.isEmpty(x.value, x.valueType));
|
|
2264
|
-
console.log('
|
|
2240
|
+
console.log('Статус emptyRow:', this.emptyRow);
|
|
2265
2241
|
console.groupEnd();
|
|
2266
2242
|
}
|
|
2267
2243
|
ok() {
|
|
@@ -2287,9 +2263,18 @@ class InputTableModalComponent extends ModalServiceComponent {
|
|
|
2287
2263
|
}
|
|
2288
2264
|
_transformValues(value) {
|
|
2289
2265
|
const cloneRowModel = structuredClone(this.rowModel);
|
|
2266
|
+
// Ищем поле в модели строки
|
|
2290
2267
|
const findValue = cloneRowModel.data.find((c) => c.sysName === value.sysName);
|
|
2291
2268
|
if (findValue) {
|
|
2292
|
-
|
|
2269
|
+
// Если это компонент даты и это range (пришел массив), записываем его целиком
|
|
2270
|
+
if (value.type === 'inputDate' && Array.isArray(value.value)) {
|
|
2271
|
+
console.log(`[Трансформация] Записываем МАССИВ дат в ${value.sysName}:`, value.value);
|
|
2272
|
+
findValue.value = value.value; // Запишется ["2026-04-30...", "2026-05-02..."]
|
|
2273
|
+
}
|
|
2274
|
+
else {
|
|
2275
|
+
// Для всех остальных обычных полей
|
|
2276
|
+
findValue.value = value.value;
|
|
2277
|
+
}
|
|
2293
2278
|
}
|
|
2294
2279
|
this.rowModel = cloneRowModel;
|
|
2295
2280
|
}
|
|
@@ -2624,6 +2609,16 @@ class InputTableComponent {
|
|
|
2624
2609
|
format: this.getFormat(component),
|
|
2625
2610
|
minWidth: 160
|
|
2626
2611
|
};
|
|
2612
|
+
if (component.type === ComponentType.InputDate && component.options.range) {
|
|
2613
|
+
column.calculateCellValue = (rowData) => {
|
|
2614
|
+
const dateArray = rowData[component.sysName];
|
|
2615
|
+
if (Array.isArray(dateArray) && dateArray.length === 2) {
|
|
2616
|
+
// Тут можно отформатировать красиво, например: "30.04.2026 - 02.05.2026"
|
|
2617
|
+
return `${dateArray[0]} - ${dateArray[1]}`;
|
|
2618
|
+
}
|
|
2619
|
+
return '';
|
|
2620
|
+
};
|
|
2621
|
+
}
|
|
2627
2622
|
if (dataType === 'boolean') {
|
|
2628
2623
|
column.calculateCellValue = (rowData) => {
|
|
2629
2624
|
const value = rowData[component.sysName];
|