keevo-components 1.5.223 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{esm2020 → esm2022}/lib/api/base-components/base-component-button.mjs +4 -4
- package/{esm2020 → esm2022}/lib/api/base-components/base-component-chart.mjs +4 -4
- package/{esm2020 → esm2022}/lib/api/base-components/base-component-crud-form.mjs +4 -4
- package/{esm2020 → esm2022}/lib/api/base-components/base-component-crud-list.mjs +4 -4
- package/{esm2020 → esm2022}/lib/api/base-components/base-component-crud.mjs +4 -4
- package/{esm2020 → esm2022}/lib/api/base-components/base-component-dropdown-new.mjs +6 -6
- package/{esm2020 → esm2022}/lib/api/base-components/base-component-dropdown.mjs +4 -4
- package/{esm2020 → esm2022}/lib/api/base-components/base-component-input.mjs +4 -4
- package/{esm2020 → esm2022}/lib/api/base-components/base-component-multi-select.mjs +4 -4
- package/{esm2020 → esm2022}/lib/api/base-components/base-component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/api/components/error/error.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/api/components/error/kverror.module.mjs +11 -11
- package/{esm2020 → esm2022}/lib/api/modules/primeng.module.mjs +121 -121
- package/{esm2020 → esm2022}/lib/api/services/base.api.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/api/services/breadcrumbs.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/api/services/component.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/api/services/form.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/api/services/imagens.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/api/services/notification.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/api/services/object.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/avatar/avatar.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/avatar/kv-avatar.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/buttons/button-personalize/button-personalize.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/buttons/button-popup/button-popup.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/buttons/button-secondary/button-secondary.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/buttons/button-success/button-success.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/buttons/kvbutton.module.mjs +11 -11
- package/{esm2020 → esm2022}/lib/chart/chart.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/chart/kvchart.module.mjs +9 -9
- package/{esm2020 → esm2022}/lib/directives/template.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/inputs/check/check.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/inputs/dropdown/dropdown.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/inputs/editor/editor.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/inputs/input-calendar/input-calendar.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/inputs/input-mask/input-mask.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/inputs/input-number/input-number.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/inputs/input-password/input-password.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/inputs/input-text/input-text.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/inputs/input-text-checkbox/input-text-checkbox.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/inputs/input-textarea/input-textarea.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/inputs/input-time/input-time.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/inputs/kvinputs.module.mjs +41 -41
- package/{esm2020 → esm2022}/lib/inputs/multi-select/multi-select.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/inputs/radio-group/radio-group.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/inputs/switch/switch.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/keevo-components.module.mjs +57 -57
- package/{esm2020 → esm2022}/lib/label/label.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/label/label.module.mjs +5 -5
- package/esm2022/lib/loader/kvloader.module.mjs +28 -0
- package/{esm2020 → esm2022}/lib/loader/loader.component.mjs +4 -4
- package/esm2022/lib/loader/loader.service.mjs +29 -0
- package/{esm2020 → esm2022}/lib/login/kvlogin.module.mjs +17 -17
- package/{esm2020 → esm2022}/lib/login/login.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/menu/kvmenu.module.mjs +15 -15
- package/{esm2020 → esm2022}/lib/menu/menu.component.mjs +5 -5
- package/{esm2020 → esm2022}/lib/orgchart/orgchart.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/orgchart/orgchart.module.mjs +7 -7
- package/{esm2020 → esm2022}/lib/page-form/kv-page-form.module.mjs +13 -13
- package/{esm2020 → esm2022}/lib/page-form/page-form.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/picklist/kvpicklist.module.mjs +9 -9
- package/{esm2020 → esm2022}/lib/picklist/picklist.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/pipes/codigofile.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/pipes/cpfcnpj.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/pipes/pipes.module.mjs +9 -9
- package/{esm2020 → esm2022}/lib/pipes/telefone.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/table/kvtable.module.mjs +9 -9
- package/esm2022/lib/table/table.component.mjs +499 -0
- package/esm2022/lib/tree-table/kv-treetable.component.mjs +371 -0
- package/{esm2020 → esm2022}/lib/tree-table/kv-treetable.module.mjs +11 -11
- package/{esm2020 → esm2022}/lib/tree-view/kvtree-view.module.mjs +7 -7
- package/esm2022/lib/tree-view/tree-view.component.mjs +30 -0
- package/{esm2020 → esm2022}/lib/workspace/kvworkspace.module.mjs +17 -17
- package/{esm2020 → esm2022}/lib/workspace/workspace.component.mjs +5 -5
- package/{fesm2020 → fesm2022}/keevo-components.mjs +536 -532
- package/fesm2022/keevo-components.mjs.map +1 -0
- package/lib/api/base-components/base-component-button.d.ts +1 -1
- package/lib/api/base-components/base-component-dropdown-new.d.ts +1 -1
- package/lib/api/base-components/base-component-dropdown.d.ts +1 -1
- package/lib/api/base-components/base-component-input.d.ts +2 -2
- package/lib/api/base-components/base-component-multi-select.d.ts +3 -3
- package/lib/api/base-components/base-component.d.ts +1 -1
- package/lib/api/components/error/error.component.d.ts +1 -1
- package/lib/avatar/avatar.component.d.ts +1 -1
- package/lib/buttons/button-popup/button-popup.component.d.ts +1 -1
- package/lib/chart/chart.component.d.ts +1 -1
- package/lib/directives/template.directive.d.ts +1 -1
- package/lib/inputs/dropdown/dropdown.component.d.ts +1 -1
- package/lib/inputs/editor/editor.component.d.ts +1 -1
- package/lib/inputs/input-calendar/input-calendar.component.d.ts +1 -1
- package/lib/inputs/input-mask/input-mask.component.d.ts +1 -1
- package/lib/inputs/input-number/input-number.component.d.ts +1 -1
- package/lib/inputs/input-password/input-password.component.d.ts +1 -1
- package/lib/inputs/input-text-checkbox/input-text-checkbox.component.d.ts +1 -1
- package/lib/inputs/input-textarea/input-textarea.component.d.ts +1 -1
- package/lib/inputs/input-time/input-time.component.d.ts +1 -1
- package/lib/inputs/multi-select/multi-select.component.d.ts +1 -1
- package/lib/inputs/radio-group/radio-group.component.d.ts +1 -1
- package/lib/inputs/switch/switch.component.d.ts +1 -1
- package/lib/label/label.component.d.ts +1 -1
- package/lib/login/login.component.d.ts +1 -1
- package/lib/menu/menu.component.d.ts +1 -1
- package/lib/orgchart/orgchart.component.d.ts +1 -1
- package/lib/page-form/page-form.component.d.ts +1 -1
- package/lib/picklist/picklist.component.d.ts +1 -1
- package/lib/table/table.component.d.ts +3 -1
- package/lib/tree-table/kv-treetable.component.d.ts +4 -3
- package/lib/tree-view/tree-view.component.d.ts +3 -3
- package/lib/workspace/workspace.component.d.ts +1 -1
- package/package.json +7 -13
- package/esm2020/lib/loader/kvloader.module.mjs +0 -28
- package/esm2020/lib/loader/loader.service.mjs +0 -29
- package/esm2020/lib/table/table.component.mjs +0 -499
- package/esm2020/lib/tree-table/kv-treetable.component.mjs +0 -371
- package/esm2020/lib/tree-view/tree-view.component.mjs +0 -29
- package/fesm2015/keevo-components.mjs +0 -4839
- package/fesm2015/keevo-components.mjs.map +0 -1
- package/fesm2020/keevo-components.mjs.map +0 -1
- /package/{esm2020 → esm2022}/keevo-components.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api/components/chart/chart.config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api/components/chart/chart.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api/components/chart/orchart.config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api/components/chart/orchart.item.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api/components/dropdown/filtro.combo.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api/components/table/action-item.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api/components/table/kv-menuitem.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api/components/table/table.config.column.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api/components/table/table.config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api/components/table/table.paginate.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api/helpers/component-providers.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api/helpers/keevo-validators.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api/helpers/translate-primeng.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api/models/menu/menu.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api/models/menu/menucompleto.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api/models/menu/sistemamenu.model.mjs +0 -0
- /package/{esm2020 → esm2022}/public-api.mjs +0 -0
|
@@ -0,0 +1,499 @@
|
|
|
1
|
+
import { Component, ContentChildren, EventEmitter, HostListener, Input, Output, ViewChild, } from '@angular/core';
|
|
2
|
+
import { TemplateDirective } from '../directives/template.directive';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common";
|
|
5
|
+
import * as i2 from "../pipes/codigofile.pipe";
|
|
6
|
+
import * as i3 from "../pipes/cpfcnpj.pipe";
|
|
7
|
+
import * as i4 from "../pipes/telefone.pipe";
|
|
8
|
+
import * as i5 from "primeng/api";
|
|
9
|
+
import * as i6 from "primeng/autofocus";
|
|
10
|
+
import * as i7 from "primeng/button";
|
|
11
|
+
import * as i8 from "primeng/card";
|
|
12
|
+
import * as i9 from "primeng/checkbox";
|
|
13
|
+
import * as i10 from "primeng/tooltip";
|
|
14
|
+
import * as i11 from "primeng/inputtext";
|
|
15
|
+
import * as i12 from "primeng/menu";
|
|
16
|
+
import * as i13 from "primeng/panel";
|
|
17
|
+
import * as i14 from "primeng/table";
|
|
18
|
+
import * as i15 from "@angular/forms";
|
|
19
|
+
const imgDefault = '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';
|
|
20
|
+
export class TableComponent {
|
|
21
|
+
set setConfig(value) {
|
|
22
|
+
this.config = {
|
|
23
|
+
enableCation: value.enableCation || true,
|
|
24
|
+
enableSelect: value.enableSelect || false,
|
|
25
|
+
enableFilter: value.enableFilter || true,
|
|
26
|
+
...value,
|
|
27
|
+
};
|
|
28
|
+
if (this.config.enableFilter) {
|
|
29
|
+
this.config.columns.forEach((col) => {
|
|
30
|
+
this.globalFilterFields.push(col.field);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
constructor(datePipe, decimalPipe, codigoFipePipe, cpfCnpjPipe, telefonePipe) {
|
|
35
|
+
this.datePipe = datePipe;
|
|
36
|
+
this.decimalPipe = decimalPipe;
|
|
37
|
+
this.codigoFipePipe = codigoFipePipe;
|
|
38
|
+
this.cpfCnpjPipe = cpfCnpjPipe;
|
|
39
|
+
this.telefonePipe = telefonePipe;
|
|
40
|
+
this.globalFilterFields = [];
|
|
41
|
+
this.selectedSize = '';
|
|
42
|
+
this.menuItems = [];
|
|
43
|
+
this.menuColumns = [];
|
|
44
|
+
this.checked = true;
|
|
45
|
+
this.columns = [];
|
|
46
|
+
this.deletedColuns = [];
|
|
47
|
+
this.menuFiltro = false;
|
|
48
|
+
this.checkboxClicked = false;
|
|
49
|
+
this.showFiltrosAvancados = false;
|
|
50
|
+
this.collapsed = false;
|
|
51
|
+
this.selectedItems = [];
|
|
52
|
+
this.paginator = true;
|
|
53
|
+
this.rows = 5;
|
|
54
|
+
this.pageLinksOptions = 1;
|
|
55
|
+
this.showFirstLastIcon = false;
|
|
56
|
+
this.applyStyle = (rowData, col) => '';
|
|
57
|
+
this.acoesLinhaTabela = true;
|
|
58
|
+
this.filterColumnsBtn = false;
|
|
59
|
+
this.filtrosAvancados = false;
|
|
60
|
+
this.onActiveItem = new EventEmitter();
|
|
61
|
+
this.onActiveItemLote = new EventEmitter();
|
|
62
|
+
this.onPaginate = new EventEmitter();
|
|
63
|
+
this.onSelectionChange = new EventEmitter();
|
|
64
|
+
this.doubleClickEvent = new EventEmitter();
|
|
65
|
+
this.filterField = new EventEmitter();
|
|
66
|
+
this.filtrosAvancadosEmit = new EventEmitter();
|
|
67
|
+
this.isRowSelectable = this.isRowSelectable.bind(this);
|
|
68
|
+
}
|
|
69
|
+
ngOnInit() {
|
|
70
|
+
this.adjustTableSize();
|
|
71
|
+
this.tamanhoTela = window.innerWidth;
|
|
72
|
+
// this.criarMenuColumns();
|
|
73
|
+
this.config.columns.forEach((col) => {
|
|
74
|
+
this.columns.push(col);
|
|
75
|
+
});
|
|
76
|
+
this.checkHideColumns();
|
|
77
|
+
}
|
|
78
|
+
onWindowResize() {
|
|
79
|
+
this.adjustTableSize();
|
|
80
|
+
this.tamanhoTela = window.innerWidth;
|
|
81
|
+
}
|
|
82
|
+
activeItem(rowData) {
|
|
83
|
+
this.onActiveItem.emit(rowData);
|
|
84
|
+
}
|
|
85
|
+
activeItemLote(rowData) {
|
|
86
|
+
this.onActiveItemLote.emit(rowData);
|
|
87
|
+
}
|
|
88
|
+
isBooleanField(rowData, col) {
|
|
89
|
+
return typeof rowData[col.field] == 'boolean';
|
|
90
|
+
}
|
|
91
|
+
isChipField(col) {
|
|
92
|
+
return col.fieldType == 'chip';
|
|
93
|
+
}
|
|
94
|
+
isImageField(col) {
|
|
95
|
+
let retorno = col.fieldType && col.fieldType === 'image' ? true : false;
|
|
96
|
+
return retorno;
|
|
97
|
+
}
|
|
98
|
+
// isVisibleCheckbox(rowData: any): boolean {
|
|
99
|
+
// return this.config.visibleControlCheckboxFunction? this.config.visibleControlCheckboxFunction(rowData): true;
|
|
100
|
+
// }
|
|
101
|
+
isRowSelectable(event) {
|
|
102
|
+
return !this.isDisabledCheckbox(event.data);
|
|
103
|
+
;
|
|
104
|
+
}
|
|
105
|
+
isDisabledCheckbox(rowData) {
|
|
106
|
+
return this.config.disableControlCheckboxFunction ? this.config.disableControlCheckboxFunction(rowData) : false;
|
|
107
|
+
}
|
|
108
|
+
loadImage(rowData, col) {
|
|
109
|
+
/*
|
|
110
|
+
Nossa coluna de imagem trabalha com strings do tipo: base64 ou url
|
|
111
|
+
*/
|
|
112
|
+
let retorno = `data:image/jpg;base64, ${imgDefault}`;
|
|
113
|
+
if (rowData && col && rowData[col.field] && rowData[col.field] !== '') {
|
|
114
|
+
if (rowData[col.field].includes('http'))
|
|
115
|
+
retorno = rowData[col.field];
|
|
116
|
+
else
|
|
117
|
+
retorno = `data:image/jpg;base64, ${rowData[col.field]}`;
|
|
118
|
+
}
|
|
119
|
+
return retorno;
|
|
120
|
+
}
|
|
121
|
+
onGlobalFilter(table, event) {
|
|
122
|
+
this.filterField.emit(event.target.value);
|
|
123
|
+
table.filterGlobal(event.target.value, 'contains');
|
|
124
|
+
}
|
|
125
|
+
paginate(event) {
|
|
126
|
+
if (event) {
|
|
127
|
+
let paginaInicial = (event?.first > 0 ? event.first / event.rows : event.first) + 1;
|
|
128
|
+
let termoPesquisa = '';
|
|
129
|
+
let ordenacao = '';
|
|
130
|
+
if (event.globalFilter)
|
|
131
|
+
termoPesquisa = event.globalFilter;
|
|
132
|
+
if (event.sortField)
|
|
133
|
+
ordenacao = `${event.sortField} ${event.sortOrder === 1 ? 'ASC' : 'DESC'}`;
|
|
134
|
+
const objeto = {
|
|
135
|
+
paginaInicial: paginaInicial,
|
|
136
|
+
tamanhoPagina: event.rows,
|
|
137
|
+
termoPesquisa: termoPesquisa,
|
|
138
|
+
ordenacao: ordenacao,
|
|
139
|
+
};
|
|
140
|
+
this.onPaginate.emit(objeto);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
selectionChange(value = []) {
|
|
144
|
+
this.onSelectionChange.emit(value);
|
|
145
|
+
}
|
|
146
|
+
returnRowClass(rowData, col) {
|
|
147
|
+
let value = rowData[col.field];
|
|
148
|
+
let rowClass;
|
|
149
|
+
this.tableSize > 800 ? (rowClass = 'text-base') : (rowClass = 'text-sm');
|
|
150
|
+
if (col.expiredDate == true) {
|
|
151
|
+
new Date(value) < new Date()
|
|
152
|
+
? (rowClass = rowClass + ' text-red-400 font-semibold')
|
|
153
|
+
: '';
|
|
154
|
+
}
|
|
155
|
+
return rowClass;
|
|
156
|
+
}
|
|
157
|
+
expiredFile(rowData, col) {
|
|
158
|
+
let value = rowData['datavencimento'];
|
|
159
|
+
return new Date(value) < new Date() && col.field == 'area';
|
|
160
|
+
}
|
|
161
|
+
transformValue(rowData, col) {
|
|
162
|
+
let value = rowData[col.field];
|
|
163
|
+
if (value != null) {
|
|
164
|
+
if (!col.pipe) {
|
|
165
|
+
return value;
|
|
166
|
+
}
|
|
167
|
+
switch (col.pipe) {
|
|
168
|
+
case 'date':
|
|
169
|
+
return this.datePipe.transform(value, 'dd/MM/yyyy');
|
|
170
|
+
case 'decimal':
|
|
171
|
+
return this.decimalPipe.transform(value, '1.2-2', 'pt-BR');
|
|
172
|
+
case 'cpfcnpj':
|
|
173
|
+
return this.cpfCnpjPipe.transform(value);
|
|
174
|
+
case 'telefone':
|
|
175
|
+
return this.telefonePipe.transform(value);
|
|
176
|
+
case 'codigofipe':
|
|
177
|
+
return this.codigoFipePipe.transform(value);
|
|
178
|
+
case 'money':
|
|
179
|
+
return this.formatarValor(value);
|
|
180
|
+
case 'percentage':
|
|
181
|
+
return `${value} %`;
|
|
182
|
+
default:
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
formatarValor(valor) {
|
|
188
|
+
const formatter = new Intl.NumberFormat('pt-BR', {
|
|
189
|
+
style: 'currency',
|
|
190
|
+
currency: 'BRL',
|
|
191
|
+
});
|
|
192
|
+
return formatter.format(valor);
|
|
193
|
+
}
|
|
194
|
+
adjustTableSize() {
|
|
195
|
+
if (this.tableSize < 800) {
|
|
196
|
+
this.selectedSize = 'p-datatable-sm';
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
this.selectedSize = '';
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
doubleClick(e, rowData) {
|
|
203
|
+
let eventDoubleClick = { event: e, rowData: rowData };
|
|
204
|
+
let array = [];
|
|
205
|
+
e.target.classList.forEach((x) => array.push(x));
|
|
206
|
+
if (array.find((x) => x == 'ng-star-inserted') != undefined)
|
|
207
|
+
this.doubleClickEvent.emit(eventDoubleClick);
|
|
208
|
+
}
|
|
209
|
+
centralizarColunas(col) {
|
|
210
|
+
if (col.centralize) {
|
|
211
|
+
return 'text-align: center';
|
|
212
|
+
}
|
|
213
|
+
else
|
|
214
|
+
return '';
|
|
215
|
+
}
|
|
216
|
+
alignColunas(col) {
|
|
217
|
+
if (col.align) {
|
|
218
|
+
return `text-align: ${col.align}`;
|
|
219
|
+
}
|
|
220
|
+
else
|
|
221
|
+
return '';
|
|
222
|
+
}
|
|
223
|
+
alignColunasHeader(col) {
|
|
224
|
+
if (col.align) {
|
|
225
|
+
if (col.align == 'right')
|
|
226
|
+
return 'justify-content: end';
|
|
227
|
+
else
|
|
228
|
+
return '';
|
|
229
|
+
}
|
|
230
|
+
else
|
|
231
|
+
return '';
|
|
232
|
+
}
|
|
233
|
+
retornarCampo(action, rowData, field) {
|
|
234
|
+
const _function = action.dynamicfields
|
|
235
|
+
? action.dynamicfields[field]
|
|
236
|
+
: null;
|
|
237
|
+
const _field = _function
|
|
238
|
+
? _function.apply(action, [rowData])
|
|
239
|
+
: action[field];
|
|
240
|
+
return _field;
|
|
241
|
+
}
|
|
242
|
+
retornarRow(rowData, col, field) {
|
|
243
|
+
const _rowaction = this.config.rows ? this.config.rows[col.field] : null;
|
|
244
|
+
const _field = _rowaction && _rowaction[field]
|
|
245
|
+
? _rowaction[field].constructor === Function
|
|
246
|
+
? _rowaction[field].apply(this, [rowData])
|
|
247
|
+
: _rowaction[field]
|
|
248
|
+
: null;
|
|
249
|
+
return _field;
|
|
250
|
+
}
|
|
251
|
+
exibirCampo(field, rowData) {
|
|
252
|
+
let visible = field.visible ? field.visible(rowData) : true;
|
|
253
|
+
// if (field != undefined && field != null && field != '') {
|
|
254
|
+
// const value = rowData[field];
|
|
255
|
+
// return value;
|
|
256
|
+
// }
|
|
257
|
+
return visible;
|
|
258
|
+
}
|
|
259
|
+
criarMenusModal(data) {
|
|
260
|
+
if (this.config.actions && data) {
|
|
261
|
+
const items = this.config.actions.map((action) => {
|
|
262
|
+
const icon = this.retornarCampo(action, data, 'icon');
|
|
263
|
+
const tooltip = this.retornarCampo(action, data, 'tooltip');
|
|
264
|
+
const tooltipPosition = this.retornarCampo(action, data, 'tooltipPosition');
|
|
265
|
+
const label = this.retornarCampo(action, data, 'label');
|
|
266
|
+
const command = this.retornarCampo(action, data, 'command');
|
|
267
|
+
const visible = action.visible ? action.visible(data) : true;
|
|
268
|
+
const disabled = action.disabled
|
|
269
|
+
? action.disabled(data)
|
|
270
|
+
: false;
|
|
271
|
+
const menuInsert = {
|
|
272
|
+
label,
|
|
273
|
+
icon,
|
|
274
|
+
tooltip,
|
|
275
|
+
tooltipPosition,
|
|
276
|
+
command,
|
|
277
|
+
disabled,
|
|
278
|
+
visible,
|
|
279
|
+
};
|
|
280
|
+
let item = this.menuItems.filter((x) => x.command == menuInsert.command);
|
|
281
|
+
if (item.length == 0)
|
|
282
|
+
this.menuItems.push(menuInsert);
|
|
283
|
+
else {
|
|
284
|
+
if (menuInsert.label != item[0].label) {
|
|
285
|
+
let index = this.menuItems.indexOf(item[0]);
|
|
286
|
+
this.menuItems.splice(index, 1);
|
|
287
|
+
}
|
|
288
|
+
if (menuInsert.visible != item[0].visible) {
|
|
289
|
+
let index = this.menuItems.indexOf(item[0]);
|
|
290
|
+
this.menuItems.splice(index, 1);
|
|
291
|
+
}
|
|
292
|
+
if (menuInsert.disabled != item[0].disabled) {
|
|
293
|
+
let index = this.menuItems.indexOf(item[0]);
|
|
294
|
+
this.menuItems.splice(index, 1);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
returnClassChip(rowData, col) {
|
|
301
|
+
return `chip-style w-auto border-round-2xl p-2 text-${this.retornarRow(rowData, col, 'stylechip')} border-${this.retornarRow(rowData, col, 'stylechip')}`;
|
|
302
|
+
}
|
|
303
|
+
returnClassIcon(rowData, col) {
|
|
304
|
+
return this.retornarRow(rowData, col, 'iconrow');
|
|
305
|
+
}
|
|
306
|
+
returnTooltipIcon(rowData, col) {
|
|
307
|
+
return this.retornarRow(rowData, col, 'tooltipiconrow');
|
|
308
|
+
}
|
|
309
|
+
returnTooltipRow(rowData, col) {
|
|
310
|
+
return this.retornarRow(rowData, col, 'tooltiprow');
|
|
311
|
+
}
|
|
312
|
+
deleteColumn(field) {
|
|
313
|
+
let index;
|
|
314
|
+
let column = this.config.columns.find((x) => x.field == field);
|
|
315
|
+
if (column) {
|
|
316
|
+
index = this.config.columns.indexOf(column);
|
|
317
|
+
this.config.columns.splice(index, 1);
|
|
318
|
+
this.deletedColuns.push(column);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
addColumn(field) {
|
|
322
|
+
let index;
|
|
323
|
+
let column = this.config.columns.find((x) => x.field == field);
|
|
324
|
+
if (!column) {
|
|
325
|
+
let deletedColumn = this.deletedColuns.find((x) => x.field == field);
|
|
326
|
+
if (deletedColumn != undefined) {
|
|
327
|
+
index = this.deletedColuns.indexOf(deletedColumn);
|
|
328
|
+
this.deletedColuns.slice(index, 1);
|
|
329
|
+
this.config.columns.push(deletedColumn);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
dinamicColumnSet(e, col) {
|
|
334
|
+
col.checked = e.checked;
|
|
335
|
+
if (e.checked)
|
|
336
|
+
this.addColumn(col.field);
|
|
337
|
+
else
|
|
338
|
+
this.deleteColumn(col.field);
|
|
339
|
+
if (col.position)
|
|
340
|
+
this.config.columns.sort(this.sortByPosition());
|
|
341
|
+
}
|
|
342
|
+
// abrirMenuFiltro(e: any) {
|
|
343
|
+
// this.menuFiltro = !this.menuFiltro;
|
|
344
|
+
// this.checkboxClicked = false;
|
|
345
|
+
// if (this.tamanhoTela < 700)
|
|
346
|
+
// this.styleSetter('left', (this.botaoFiltro.nativeElement.offsetLeft - 288) + 'px')
|
|
347
|
+
// else
|
|
348
|
+
// this.styleSetter('left', (this.botaoFiltro.nativeElement.offsetLeft + 40) + 'px')
|
|
349
|
+
// this.styleSetter('top', this.botaoFiltro.nativeElement.offsetTop + 'px')
|
|
350
|
+
// this.styleSetter('visibility', this.menuFiltro ? 'visible' : 'hidden')
|
|
351
|
+
// }
|
|
352
|
+
// fecharMenuFiltro() {
|
|
353
|
+
// this.menuFiltro = false;
|
|
354
|
+
// this.checkboxClicked = false;
|
|
355
|
+
// this.styleSetter('visibility', 'hidden')
|
|
356
|
+
// }
|
|
357
|
+
// @HostListener('document:keydown.escape', ['$event'])
|
|
358
|
+
// onEscapeKey(event: KeyboardEvent) {
|
|
359
|
+
// if (this.filterColumnsBtn == true && this.menuFiltro == true) {
|
|
360
|
+
// this.fecharMenuFiltro();
|
|
361
|
+
// }
|
|
362
|
+
// }
|
|
363
|
+
// @HostListener('document:click', ['$event'])
|
|
364
|
+
// onClickEvent(event: any) {
|
|
365
|
+
// if (this.filterColumnsBtn == true && this.menuFiltro == true) {
|
|
366
|
+
// const clickedElement = event.target as HTMLElement;
|
|
367
|
+
// const menuFiltroDiv =
|
|
368
|
+
// this.elementRef.nativeElement.querySelector('#menuFiltroDiv');
|
|
369
|
+
// const botaoFiltro =
|
|
370
|
+
// this.elementRef.nativeElement.querySelector('#botaoFiltro');
|
|
371
|
+
// const isCheckboxClicked =
|
|
372
|
+
// clickedElement.classList.toString().includes('p-checkbox') ||
|
|
373
|
+
// event.target.classList.toString() == '';
|
|
374
|
+
// const isInsideMenu =
|
|
375
|
+
// menuFiltroDiv?.contains(clickedElement) ||
|
|
376
|
+
// botaoFiltro?.contains(clickedElement) ||
|
|
377
|
+
// isCheckboxClicked;
|
|
378
|
+
// if (!isInsideMenu) this.fecharMenuFiltro();
|
|
379
|
+
// }
|
|
380
|
+
// }
|
|
381
|
+
checkMenuFiltro(col) {
|
|
382
|
+
let deletedColumn = this.deletedColuns.find((x) => x.field == col.field);
|
|
383
|
+
if (deletedColumn)
|
|
384
|
+
col.checked = false;
|
|
385
|
+
else
|
|
386
|
+
col.checked = true;
|
|
387
|
+
}
|
|
388
|
+
sortByPosition() {
|
|
389
|
+
return function (elem1, elem2) {
|
|
390
|
+
if (elem1.position < elem2.position) {
|
|
391
|
+
return -1;
|
|
392
|
+
}
|
|
393
|
+
else if (elem1.position > elem2.position) {
|
|
394
|
+
return 1;
|
|
395
|
+
}
|
|
396
|
+
else {
|
|
397
|
+
return 0;
|
|
398
|
+
}
|
|
399
|
+
};
|
|
400
|
+
}
|
|
401
|
+
callDisabled(action, data) {
|
|
402
|
+
if (action?.disabled) {
|
|
403
|
+
return action.disabled(data);
|
|
404
|
+
}
|
|
405
|
+
return false;
|
|
406
|
+
}
|
|
407
|
+
dinamicDisableColumn(col) {
|
|
408
|
+
if (col.fixedColumn)
|
|
409
|
+
return col.fixedColumn;
|
|
410
|
+
else
|
|
411
|
+
return false;
|
|
412
|
+
}
|
|
413
|
+
checkHideColumns() {
|
|
414
|
+
let hideColumnsConfig = this.columns.filter((col) => col.hideColumn == true);
|
|
415
|
+
hideColumnsConfig.forEach((col) => this.deleteColumn(col.field));
|
|
416
|
+
}
|
|
417
|
+
getCustomTemplate(templatename) {
|
|
418
|
+
return this._templates[templatename];
|
|
419
|
+
}
|
|
420
|
+
// styleSetter(style: string, data: string) {
|
|
421
|
+
// this.renderer?.setStyle(
|
|
422
|
+
// this.menuFiltroDiv.nativeElement,
|
|
423
|
+
// style,
|
|
424
|
+
// data
|
|
425
|
+
// );
|
|
426
|
+
// }
|
|
427
|
+
filtrosAvancadosEvent(e) {
|
|
428
|
+
this.showFiltrosAvancados = !this.showFiltrosAvancados;
|
|
429
|
+
this.filtrosAvancadosEmit.emit(this.showFiltrosAvancados);
|
|
430
|
+
}
|
|
431
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TableComponent, deps: [{ token: i1.DatePipe }, { token: i1.DecimalPipe }, { token: i2.CodigoFipePipe }, { token: i3.CpfCnpjPipe }, { token: i4.TelefonePipe }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
432
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TableComponent, selector: "kv-table", inputs: { _templates: ["templates", "_templates"], setConfig: ["config", "setConfig"], dataSource: "dataSource", selectedItems: "selectedItems", totalRecords: "totalRecords", paginator: "paginator", rowsPerPageOptions: "rowsPerPageOptions", rows: "rows", pageLinksOptions: "pageLinksOptions", showFirstLastIcon: "showFirstLastIcon", tableSize: "tableSize", applyStyle: "applyStyle", acoesLinhaTabela: "acoesLinhaTabela", filterColumnsBtn: "filterColumnsBtn", filtrosAvancados: "filtrosAvancados" }, outputs: { onActiveItem: "onActiveItem", onActiveItemLote: "onActiveItemLote", onPaginate: "onPaginate", onSelectionChange: "onSelectionChange", doubleClickEvent: "doubleClickEvent", filterField: "filterField", filtrosAvancadosEmit: "filtrosAvancadosEmit" }, host: { listeners: { "window:resize": "onWindowResize($event)" } }, queries: [{ propertyName: "templates", predicate: TemplateDirective }], viewQueries: [{ propertyName: "table", first: true, predicate: ["table"], descendants: true }, { propertyName: "menuFiltroDiv", first: true, predicate: ["menuFiltroDiv"], descendants: true }, { propertyName: "botaoFiltro", first: true, predicate: ["botaoFiltro"], descendants: true }], ngImport: i0, template: "<div>\r\n\r\n <p-panel\r\n *ngIf=\"filtrosAvancados\"\r\n header=\"Filtros avan\u00E7ados\"\r\n [toggleable]=\"true\"\r\n [collapsed]=\"true\"\r\n (collapsedChange)=\"collapsed = !collapsed\"\r\n [style]=\"{'margin-bottom': '2px'}\"\r\n >\r\n <ng-template pTemplate=\"headericons\">\r\n <i\r\n *ngIf=\"!collapsed\"\r\n class=\"pi pi-filter\"\r\n ></i> <!-- \u00CDcone quando o painel est\u00E1 aberto -->\r\n <i\r\n *ngIf=\"collapsed\"\r\n class=\"pi pi-minus\"\r\n ></i> <!-- \u00CDcone quando o painel est\u00E1 fechado -->\r\n </ng-template>\r\n <ng-content></ng-content>\r\n </p-panel>\r\n\r\n <p-table\r\n *ngIf=\"config\"\r\n #dt\r\n styleClass=\"p-datatable-sm\"\r\n [value]=\"dataSource\"\r\n [(selection)]=\"selectedItems\"\r\n [rowSelectable]=\"isRowSelectable\"\r\n [columns]=\"config.columns\"\r\n [globalFilterFields]=\"globalFilterFields\"\r\n [rows]=\"rows\"\r\n [paginator]=\"paginator\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\r\n [showCurrentPageReport]=\"true\"\r\n currentPageReportTemplate=\"{first} - {last} de {{totalRecords}}\"\r\n [rowHover]=\"true\"\r\n [totalRecords]=\"totalRecords\"\r\n [lazy]=\"config.lazy\"\r\n (onLazyLoad)=\"paginate($event)\"\r\n (selectionChange)=\"selectionChange($event)\"\r\n rowGroupMode=\"rowspan\"\r\n [groupRowsBy]=\"config.fieldGroup\"\r\n [showFirstLastIcon]=\"showFirstLastIcon\"\r\n [pageLinks]=\"pageLinksOptions\"\r\n [responsive]=\"true\"\r\n responsiveLayout=\"stack\"\r\n >\r\n <ng-template\r\n pTemplate=\"caption\"\r\n *ngIf=\"config.enableCation\"\r\n >\r\n <div class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12\">\r\n\r\n <div class=\"col-12 flex flex-column\">\r\n <div\r\n *ngIf=\"config.title\"\r\n class=\"text-md font-bold my-3\"\r\n >\r\n {{ config.title }}\r\n </div>\r\n <div\r\n *ngIf=\"config.subtitle\"\r\n class=\"text-sm mb-4 font-medium\"\r\n >\r\n {{ config.subtitle }}\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex flex-row align-items-center md:col-6 lg:col-4 {{tamanhoTela < 768 ? 'col-10' : 'col-12'}}\">\r\n <span\r\n *ngIf=\"config.enableFilter\"\r\n class=\"block mt-2 md:mt-0 p-input-icon-left text-align-center\"\r\n >\r\n <i\r\n class=\"material-symbols-outlined icon-search\"\r\n style=\"display: inline-block\"\r\n >\r\n search\r\n </i>\r\n\r\n <input\r\n pInputText\r\n pAutoFocus\r\n [autofocus]=\"true\"\r\n type=\"text\"\r\n (input)=\"onGlobalFilter(dt, $event)\"\r\n placeholder=\"Pesquisar...\"\r\n class=\"w-full mb-1\"\r\n style=\"height: 40px\"\r\n />\r\n </span>\r\n\r\n <!-- <button\r\n pButton\r\n #botaoFiltro\r\n *ngIf=\"filtrosAvancados\"\r\n class=\"p-button-raised p-button-text actionLoteBtns\"\r\n (click)=\"filtrosAvancadosEvent(showFiltrosAvancados)\"\r\n [pTooltip]=\"'Filtros avan\u00E7ados'\"\r\n >\r\n <span class=\"material-symbols-outlined md-22\"> filter_alt </span>\r\n </button> -->\r\n\r\n <!-- <div\r\n #menuFiltroDiv\r\n id = \"menuFiltroDiv\"\r\n [style.visibility]=\"'hidden'\"\r\n class=\"absolute z-4 bg-gray-200\"\r\n (click)=\"onClickEvent($event)\"\r\n > -->\r\n\r\n <div\r\n #menuFiltroDiv\r\n id=\"menuFiltroDiv\"\r\n [style.visibility]=\"'hidden'\"\r\n class=\"absolute z-4 bg-gray-200 menu-columns-filtro\"\r\n >\r\n <p-card>\r\n <div\r\n class=\"flex flex-column text-medium w-15rem\"\r\n *ngFor=\"let col of columns\"\r\n >\r\n {{ checkMenuFiltro(col) }}\r\n <p-checkbox\r\n #filterColumns\r\n [label]=\"col.header\"\r\n [binary]=\"true\"\r\n class=\"checkbox-container\"\r\n (onChange)=\"dinamicColumnSet($event, col)\"\r\n [(ngModel)]=\"col.checked\"\r\n *ngIf=\"!dinamicDisableColumn(col)\"\r\n ></p-checkbox>\r\n </div>\r\n </p-card>\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex flex-row col-1 justify-content-end\">\r\n <div\r\n *ngFor=\"let action of config.actionsLote\"\r\n class=\"btns-options\"\r\n [style]=\"{'margin-right': '7px'}\"\r\n >\r\n <button\r\n id=\"actionLoteBtns\"\r\n pButton\r\n *ngIf=\"(selectedItems.length > 0 || action.showAcoesLote) && exibirCampo(action, this.action)\"\r\n class=\"actionLoteBtns p-button-raised p-button-text\"\r\n (click)=\"action?.command(commandEvent); activeItemLote(selectedItems)\"\r\n [pTooltip]=\"retornarCampo(action, selectedItems, 'tooltip')\"\r\n [tooltipPosition]=\"'bottom'\"\r\n [style.backgroundColor]=\"retornarCampo(action, selectedItems, 'btnColor')\"\r\n [disabled]=\"retornarCampo(action, selectedItems, 'disabled')\"\r\n >\r\n <span\r\n class=\"material-symbols-outlined md-22\"\r\n [style.color]=\"\r\n retornarCampo(action, selectedItems, 'iconBtnColor')\r\n \"\r\n >\r\n {{ retornarCampo(action, selectedItems, \"icon\") }}\r\n </span>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template\r\n pTemplate=\"header\"\r\n let-columns\r\n >\r\n <tr>\r\n <th\r\n style=\"width: 4rem; border-left: solid 4px transparent\"\r\n *ngIf=\"config.enableSelect\"\r\n >\r\n <p-tableHeaderCheckbox (click)=\"activeItemLote(selectedItems)\"></p-tableHeaderCheckbox>\r\n </th>\r\n\r\n <th\r\n *ngFor=\"let col of columns\"\r\n [pSortableColumn]=\"col.field\"\r\n [pSortableColumnDisabled]=\"col.sortable === false\"\r\n [style.width]=\"col.width\"\r\n class=\"text-sm\"\r\n >\r\n <div\r\n [class]=\"\r\n centralizarColunas(col) && alignColunasHeader(col) == ''\r\n ? 'flex flex-row justify-content-center'\r\n : 'flex flex-row'\r\n \"\r\n [style]=\"alignColunasHeader(col)\"\r\n >\r\n\r\n\r\n <span>{{ col.header }}</span>\r\n <p-sortIcon\r\n *ngIf=\"col.sortable === true\"\r\n [field]=\"col.field\"\r\n style=\"font-size: 10px\"\r\n ></p-sortIcon>\r\n\r\n <span\r\n *ngIf=\"col.headerTooltip\"\r\n class=\"material-symbols-outlined flex align-items-center\"\r\n [pTooltip]=\"col.headerTooltip\"\r\n >info</span>\r\n\r\n </div>\r\n </th>\r\n <th *ngIf=\"config.actions && config.actions.length > 0\"></th>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template\r\n pTemplate=\"body\"\r\n let-rowData\r\n let-columns=\"columns\"\r\n let-rowgroup=\"rowgroup\"\r\n let-rowspan=\"rowspan\"\r\n >\r\n <tr (dblclick)=\"doubleClick($event, rowData)\">\r\n <td\r\n *ngIf=\"config.enableSelect\"\r\n [style]=\"applyStyle(rowData, { field: 'check-box', header: '' })\"\r\n >\r\n <!--<p-tableCheckbox *ngIf=\"isVisibleCheckbox(rowData)\"-->\r\n <p-tableCheckbox\r\n [value]=\"rowData\"\r\n [disabled]=\"isDisabledCheckbox(rowData)\"\r\n (click)=\"activeItemLote(selectedItems)\"\r\n ></p-tableCheckbox>\r\n </td>\r\n\r\n <ng-container *ngFor=\"let col of columns\">\r\n <td\r\n *ngIf=\"rowgroup && !col.template\"\r\n [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\r\n class=\"rowTable\"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n\r\n <span\r\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\r\n [class]=\"returnRowClass(rowData, col)\"\r\n >\r\n <span *ngIf=\"!isChipField(col) && !col.iconField && !isImageField(col)\">\r\n <i\r\n *ngIf=\"col.icon\"\r\n [class]=\"col.icon + ' mr-2'\"\r\n ></i>\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n\r\n <div *ngIf=\"isChipField(col) && !col.iconField\">\r\n <span\r\n [class]=\"returnClassChip(rowData, col)\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >{{\r\n transformValue(rowData, col)\r\n }}</span>\r\n </div>\r\n </span>\r\n\r\n <span *ngIf=\"isImageField(col)\">\r\n <span>\r\n <img\r\n class=\"image\"\r\n [src]=\"loadImage(rowData, col)\"\r\n />\r\n </span>\r\n </span>\r\n\r\n <i\r\n *ngIf=\"col.iconField\"\r\n [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n\r\n <ng-template #booleanField>\r\n <i\r\n *ngIf=\"!col.iconField\"\r\n [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"\r\n ><span class=\"material-symbols-outlined\">\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n </ng-template>\r\n </td>\r\n\r\n <td\r\n *ngIf=\"!rowgroup && !col.grouped && !col.template\"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n class=\"rowTable\"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n\r\n\r\n <span\r\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\r\n [class]=\"returnRowClass(rowData, col)\"\r\n >\r\n <span *ngIf=\"!isChipField(col) && !col.iconField && !isImageField(col)\">\r\n <i\r\n *ngIf=\"col.icon\"\r\n [class]=\"col.icon + ' mr-2'\"\r\n ></i>\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n\r\n <div *ngIf=\"isChipField(col) && !col.iconField\">\r\n <span\r\n [class]=\"returnClassChip(rowData, col)\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ transformValue(rowData, col) }}</span>\r\n </div>\r\n </span>\r\n\r\n <span *ngIf=\"isImageField(col)\">\r\n <span>\r\n <img\r\n class=\"image\"\r\n [src]=\"loadImage(rowData, col)\"\r\n />\r\n </span>\r\n </span>\r\n\r\n <i\r\n *ngIf=\"col.iconField\"\r\n [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n\r\n <ng-template #booleanField>\r\n <i\r\n *ngIf=\"!col.iconField\"\r\n [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"\r\n ><span class=\"material-symbols-outlined\">\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n </ng-template>\r\n </td>\r\n\r\n <td\r\n *ngIf=\"col.template\"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n class=\"rowTable\"\r\n >\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n <ng-container\r\n *ngIf=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\r\n >\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <td\r\n *ngIf=\"config.actions && config.actions.length > 0\"\r\n [style]=\"applyStyle(rowData, { field: 'btns-options', header: '' })\"\r\n >\r\n <div\r\n class=\"flex flex-row justify-content-end w-full gap-1\"\r\n *ngIf=\"acoesLinhaTabela\"\r\n >\r\n <div *ngFor=\"let action of config.actions\">\r\n <button\r\n id=\"actionBtns\"\r\n pButton\r\n *ngIf=\"exibirCampo(action, rowData)\"\r\n class=\"actionBtns p-button-text p-button-raised\"\r\n (click)=\"activeItem(rowData); action?.command(commandEvent)\"\r\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\"\r\n [tooltipPosition]=\"action.tooltipPosition ? action.tooltipPosition : 'bottom'\"\r\n [disabled]=\"callDisabled(action, rowData)\"\r\n >\r\n <span class=\"material-symbols-outlined md-19\">\r\n {{ retornarCampo(action, rowData, \"icon\") }}</span>\r\n </button>\r\n </div>\r\n </div>\r\n <div\r\n class=\"flex flex-row justify-content-end w-full\"\r\n *ngIf=\"!acoesLinhaTabela\"\r\n >\r\n <!-- <button\r\n id=\"moreVertBtn\"\r\n pButton\r\n class=\"actionBtns p-button-text p-button-raised\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n > -->\r\n <span\r\n class=\"material-symbols-outlined cursor-pointer icon-more-horiz\"\r\n style=\"font-size: 20px\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n >\r\n more_horiz\r\n </span>\r\n <!-- </button> -->\r\n\r\n <div *ngFor=\"let action of config.actions\">\r\n {{ criarMenusModal(rowData) }}\r\n </div>\r\n\r\n <!-- <div *ngFor=\"let action of config.actions\">\r\n {{ criarMenusModal(rowData) }}\r\n </div> -->\r\n\r\n <p-menu\r\n #menu\r\n [popup]=\"true\"\r\n [model]=\"menuItems\"\r\n appendTo=\"body\"\r\n ></p-menu>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template\r\n pTemplate=\"emptymessage\"\r\n let-columns\r\n >\r\n <tr>\r\n <td\r\n [attr.colspan]=\"columns.length + 2\"\r\n style=\"text-align: center;\r\n border-radius: 10px !important;\r\n \"\r\n >\r\n <p class=\"font-medium m-0\"> Nenhum registro encontrado </p>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n</div>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://fonts.googleapis.com/icon?family=Material+Icons\"\r\n/>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@48,400,0,0\"\r\n/>", styles: ["@charset \"UTF-8\";.error-show{background-color:red;width:5px;height:10px}.btns-options{position:relative;left:20px}.chip-style{border:solid 1px}:host::ng-deep .p-card .p-card-content{padding:0}.material-symbols-outlined.md-19{font-size:19px}.material-symbols-outlined.md-22{font-size:22px}.checkbox-container{display:flex;align-items:center;gap:2px;margin-top:5px}#botaoFiltro:hover{color:#a9a9a9}.actionLoteBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;font-size:16px;width:2rem;height:2rem;top:2px;margin-left:.5rem;justify-content:center;text-decoration:none;text-align:justify;padding:12px}#actionLoteBtns:hover,.actionLoteBtns:hover{background-color:#29b92d!important}.actionBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;width:.8rem;height:.8rem;margin-left:.22rem;justify-content:center;text-decoration:none;text-align:justify;padding:11px}:host::ng-deep .material-symbols-outlined{font-family:Material Symbols Outlined;font-weight:400;font-style:normal;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased}#actionBtns:hover{color:#a9a9a9}.icon-search{top:20px}.image{border-style:solid;border-width:3.5px;border-color:#5289b4;border-radius:100%;height:55px;width:55px;padding:0;margin:0;vertical-align:middle}:host ::ng-deep .p-datatable-table{border-spacing:0px 2px}:host ::ng-deep .p-datatable-header{background-color:#eaeaea!important;padding:2px 13px 0!important;border-radius:5px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th{background-color:#eaeaea!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:first-of-type{border-radius:5px 0 0 5px}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:last-child{border-radius:0 5px 5px 0}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{border-bottom:1px solid #ddd!important;border-top:1px solid #ddd!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:first-of-type{border-left:solid 4px #5289B4!important;border-radius:10px 0 0 10px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child{border-radius:0 10px 10px 0!important;border-right:1px solid #ddd!important}:host ::ng-deep .actionBtns,:host ::ng-deep .actionLoteBtns{border-radius:50%;width:2.5rem!important;height:2.5rem!important;box-shadow:#0000003d 0 3px 8px}.icon-more-horiz:hover,.icon-more-horiz:focus{color:#5e5e5e;transform:scale(1.1);transition:color .3s,transform .3s}@media only screen and (min-width: 768px){.actionLoteBtns{top:-1px}}@media only screen and (max-width: 960px){.rowTable{text-align:right!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{border-right:1px solid #ddd!important;border-bottom:1px solid hsl(0,0%,91%)!important;border-top:0px solid!important;line-height:30px!important;gap:5px}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(p-tablecheckbox){border-bottom:0px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(img){justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(img) .p-column-title{display:none!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:first-of-type{border-left:solid 4px #5289B4!important;border-radius:10px 10px 0 0!important;border-top:1px solid #ddd!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child{border-radius:0 0 10px 10px!important;border-bottom:1px solid #ddd!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child div{justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{border-left:solid 4px #5289B4!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td .p-column-title{font-weight:600}}::ng-deep .p-panel.p-panel-toggleable .p-panel-header{background-color:#eaeaea!important}::ng-deep .field.grid,.formgrid.grid{padding:0rem!important}@media screen and (min-width: 961px){.moreVertBtn{position:relative;right:3px}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i6.AutoFocus, selector: "[pAutoFocus]", inputs: ["autofocus"] }, { kind: "directive", type: i7.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: i8.Card, selector: "p-card", inputs: ["header", "subheader", "style", "styleClass"] }, { kind: "component", type: i9.Checkbox, selector: "p-checkbox", inputs: ["value", "name", "disabled", "binary", "label", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "styleClass", "labelStyleClass", "formControl", "checkboxIcon", "readonly", "required", "trueValue", "falseValue"], outputs: ["onChange"] }, { kind: "directive", type: i10.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i11.InputText, selector: "[pInputText]" }, { kind: "component", type: i12.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "component", type: i13.Panel, selector: "p-panel", inputs: ["toggleable", "header", "collapsed", "style", "styleClass", "iconPos", "expandIcon", "collapseIcon", "showHeader", "toggler", "transitionOptions"], outputs: ["collapsedChange", "onBeforeToggle", "onAfterToggle"] }, { kind: "component", type: i14.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i14.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i14.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i14.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i14.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "directive", type: i15.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i15.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
|
|
433
|
+
}
|
|
434
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TableComponent, decorators: [{
|
|
435
|
+
type: Component,
|
|
436
|
+
args: [{ selector: 'kv-table', template: "<div>\r\n\r\n <p-panel\r\n *ngIf=\"filtrosAvancados\"\r\n header=\"Filtros avan\u00E7ados\"\r\n [toggleable]=\"true\"\r\n [collapsed]=\"true\"\r\n (collapsedChange)=\"collapsed = !collapsed\"\r\n [style]=\"{'margin-bottom': '2px'}\"\r\n >\r\n <ng-template pTemplate=\"headericons\">\r\n <i\r\n *ngIf=\"!collapsed\"\r\n class=\"pi pi-filter\"\r\n ></i> <!-- \u00CDcone quando o painel est\u00E1 aberto -->\r\n <i\r\n *ngIf=\"collapsed\"\r\n class=\"pi pi-minus\"\r\n ></i> <!-- \u00CDcone quando o painel est\u00E1 fechado -->\r\n </ng-template>\r\n <ng-content></ng-content>\r\n </p-panel>\r\n\r\n <p-table\r\n *ngIf=\"config\"\r\n #dt\r\n styleClass=\"p-datatable-sm\"\r\n [value]=\"dataSource\"\r\n [(selection)]=\"selectedItems\"\r\n [rowSelectable]=\"isRowSelectable\"\r\n [columns]=\"config.columns\"\r\n [globalFilterFields]=\"globalFilterFields\"\r\n [rows]=\"rows\"\r\n [paginator]=\"paginator\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\r\n [showCurrentPageReport]=\"true\"\r\n currentPageReportTemplate=\"{first} - {last} de {{totalRecords}}\"\r\n [rowHover]=\"true\"\r\n [totalRecords]=\"totalRecords\"\r\n [lazy]=\"config.lazy\"\r\n (onLazyLoad)=\"paginate($event)\"\r\n (selectionChange)=\"selectionChange($event)\"\r\n rowGroupMode=\"rowspan\"\r\n [groupRowsBy]=\"config.fieldGroup\"\r\n [showFirstLastIcon]=\"showFirstLastIcon\"\r\n [pageLinks]=\"pageLinksOptions\"\r\n [responsive]=\"true\"\r\n responsiveLayout=\"stack\"\r\n >\r\n <ng-template\r\n pTemplate=\"caption\"\r\n *ngIf=\"config.enableCation\"\r\n >\r\n <div class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12\">\r\n\r\n <div class=\"col-12 flex flex-column\">\r\n <div\r\n *ngIf=\"config.title\"\r\n class=\"text-md font-bold my-3\"\r\n >\r\n {{ config.title }}\r\n </div>\r\n <div\r\n *ngIf=\"config.subtitle\"\r\n class=\"text-sm mb-4 font-medium\"\r\n >\r\n {{ config.subtitle }}\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex flex-row align-items-center md:col-6 lg:col-4 {{tamanhoTela < 768 ? 'col-10' : 'col-12'}}\">\r\n <span\r\n *ngIf=\"config.enableFilter\"\r\n class=\"block mt-2 md:mt-0 p-input-icon-left text-align-center\"\r\n >\r\n <i\r\n class=\"material-symbols-outlined icon-search\"\r\n style=\"display: inline-block\"\r\n >\r\n search\r\n </i>\r\n\r\n <input\r\n pInputText\r\n pAutoFocus\r\n [autofocus]=\"true\"\r\n type=\"text\"\r\n (input)=\"onGlobalFilter(dt, $event)\"\r\n placeholder=\"Pesquisar...\"\r\n class=\"w-full mb-1\"\r\n style=\"height: 40px\"\r\n />\r\n </span>\r\n\r\n <!-- <button\r\n pButton\r\n #botaoFiltro\r\n *ngIf=\"filtrosAvancados\"\r\n class=\"p-button-raised p-button-text actionLoteBtns\"\r\n (click)=\"filtrosAvancadosEvent(showFiltrosAvancados)\"\r\n [pTooltip]=\"'Filtros avan\u00E7ados'\"\r\n >\r\n <span class=\"material-symbols-outlined md-22\"> filter_alt </span>\r\n </button> -->\r\n\r\n <!-- <div\r\n #menuFiltroDiv\r\n id = \"menuFiltroDiv\"\r\n [style.visibility]=\"'hidden'\"\r\n class=\"absolute z-4 bg-gray-200\"\r\n (click)=\"onClickEvent($event)\"\r\n > -->\r\n\r\n <div\r\n #menuFiltroDiv\r\n id=\"menuFiltroDiv\"\r\n [style.visibility]=\"'hidden'\"\r\n class=\"absolute z-4 bg-gray-200 menu-columns-filtro\"\r\n >\r\n <p-card>\r\n <div\r\n class=\"flex flex-column text-medium w-15rem\"\r\n *ngFor=\"let col of columns\"\r\n >\r\n {{ checkMenuFiltro(col) }}\r\n <p-checkbox\r\n #filterColumns\r\n [label]=\"col.header\"\r\n [binary]=\"true\"\r\n class=\"checkbox-container\"\r\n (onChange)=\"dinamicColumnSet($event, col)\"\r\n [(ngModel)]=\"col.checked\"\r\n *ngIf=\"!dinamicDisableColumn(col)\"\r\n ></p-checkbox>\r\n </div>\r\n </p-card>\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex flex-row col-1 justify-content-end\">\r\n <div\r\n *ngFor=\"let action of config.actionsLote\"\r\n class=\"btns-options\"\r\n [style]=\"{'margin-right': '7px'}\"\r\n >\r\n <button\r\n id=\"actionLoteBtns\"\r\n pButton\r\n *ngIf=\"(selectedItems.length > 0 || action.showAcoesLote) && exibirCampo(action, this.action)\"\r\n class=\"actionLoteBtns p-button-raised p-button-text\"\r\n (click)=\"action?.command(commandEvent); activeItemLote(selectedItems)\"\r\n [pTooltip]=\"retornarCampo(action, selectedItems, 'tooltip')\"\r\n [tooltipPosition]=\"'bottom'\"\r\n [style.backgroundColor]=\"retornarCampo(action, selectedItems, 'btnColor')\"\r\n [disabled]=\"retornarCampo(action, selectedItems, 'disabled')\"\r\n >\r\n <span\r\n class=\"material-symbols-outlined md-22\"\r\n [style.color]=\"\r\n retornarCampo(action, selectedItems, 'iconBtnColor')\r\n \"\r\n >\r\n {{ retornarCampo(action, selectedItems, \"icon\") }}\r\n </span>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template\r\n pTemplate=\"header\"\r\n let-columns\r\n >\r\n <tr>\r\n <th\r\n style=\"width: 4rem; border-left: solid 4px transparent\"\r\n *ngIf=\"config.enableSelect\"\r\n >\r\n <p-tableHeaderCheckbox (click)=\"activeItemLote(selectedItems)\"></p-tableHeaderCheckbox>\r\n </th>\r\n\r\n <th\r\n *ngFor=\"let col of columns\"\r\n [pSortableColumn]=\"col.field\"\r\n [pSortableColumnDisabled]=\"col.sortable === false\"\r\n [style.width]=\"col.width\"\r\n class=\"text-sm\"\r\n >\r\n <div\r\n [class]=\"\r\n centralizarColunas(col) && alignColunasHeader(col) == ''\r\n ? 'flex flex-row justify-content-center'\r\n : 'flex flex-row'\r\n \"\r\n [style]=\"alignColunasHeader(col)\"\r\n >\r\n\r\n\r\n <span>{{ col.header }}</span>\r\n <p-sortIcon\r\n *ngIf=\"col.sortable === true\"\r\n [field]=\"col.field\"\r\n style=\"font-size: 10px\"\r\n ></p-sortIcon>\r\n\r\n <span\r\n *ngIf=\"col.headerTooltip\"\r\n class=\"material-symbols-outlined flex align-items-center\"\r\n [pTooltip]=\"col.headerTooltip\"\r\n >info</span>\r\n\r\n </div>\r\n </th>\r\n <th *ngIf=\"config.actions && config.actions.length > 0\"></th>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template\r\n pTemplate=\"body\"\r\n let-rowData\r\n let-columns=\"columns\"\r\n let-rowgroup=\"rowgroup\"\r\n let-rowspan=\"rowspan\"\r\n >\r\n <tr (dblclick)=\"doubleClick($event, rowData)\">\r\n <td\r\n *ngIf=\"config.enableSelect\"\r\n [style]=\"applyStyle(rowData, { field: 'check-box', header: '' })\"\r\n >\r\n <!--<p-tableCheckbox *ngIf=\"isVisibleCheckbox(rowData)\"-->\r\n <p-tableCheckbox\r\n [value]=\"rowData\"\r\n [disabled]=\"isDisabledCheckbox(rowData)\"\r\n (click)=\"activeItemLote(selectedItems)\"\r\n ></p-tableCheckbox>\r\n </td>\r\n\r\n <ng-container *ngFor=\"let col of columns\">\r\n <td\r\n *ngIf=\"rowgroup && !col.template\"\r\n [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\r\n class=\"rowTable\"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n\r\n <span\r\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\r\n [class]=\"returnRowClass(rowData, col)\"\r\n >\r\n <span *ngIf=\"!isChipField(col) && !col.iconField && !isImageField(col)\">\r\n <i\r\n *ngIf=\"col.icon\"\r\n [class]=\"col.icon + ' mr-2'\"\r\n ></i>\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n\r\n <div *ngIf=\"isChipField(col) && !col.iconField\">\r\n <span\r\n [class]=\"returnClassChip(rowData, col)\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >{{\r\n transformValue(rowData, col)\r\n }}</span>\r\n </div>\r\n </span>\r\n\r\n <span *ngIf=\"isImageField(col)\">\r\n <span>\r\n <img\r\n class=\"image\"\r\n [src]=\"loadImage(rowData, col)\"\r\n />\r\n </span>\r\n </span>\r\n\r\n <i\r\n *ngIf=\"col.iconField\"\r\n [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n\r\n <ng-template #booleanField>\r\n <i\r\n *ngIf=\"!col.iconField\"\r\n [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"\r\n ><span class=\"material-symbols-outlined\">\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n </ng-template>\r\n </td>\r\n\r\n <td\r\n *ngIf=\"!rowgroup && !col.grouped && !col.template\"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n class=\"rowTable\"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n\r\n\r\n <span\r\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\r\n [class]=\"returnRowClass(rowData, col)\"\r\n >\r\n <span *ngIf=\"!isChipField(col) && !col.iconField && !isImageField(col)\">\r\n <i\r\n *ngIf=\"col.icon\"\r\n [class]=\"col.icon + ' mr-2'\"\r\n ></i>\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n\r\n <div *ngIf=\"isChipField(col) && !col.iconField\">\r\n <span\r\n [class]=\"returnClassChip(rowData, col)\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ transformValue(rowData, col) }}</span>\r\n </div>\r\n </span>\r\n\r\n <span *ngIf=\"isImageField(col)\">\r\n <span>\r\n <img\r\n class=\"image\"\r\n [src]=\"loadImage(rowData, col)\"\r\n />\r\n </span>\r\n </span>\r\n\r\n <i\r\n *ngIf=\"col.iconField\"\r\n [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n\r\n <ng-template #booleanField>\r\n <i\r\n *ngIf=\"!col.iconField\"\r\n [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"\r\n ><span class=\"material-symbols-outlined\">\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n </ng-template>\r\n </td>\r\n\r\n <td\r\n *ngIf=\"col.template\"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n class=\"rowTable\"\r\n >\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n <ng-container\r\n *ngIf=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\r\n >\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <td\r\n *ngIf=\"config.actions && config.actions.length > 0\"\r\n [style]=\"applyStyle(rowData, { field: 'btns-options', header: '' })\"\r\n >\r\n <div\r\n class=\"flex flex-row justify-content-end w-full gap-1\"\r\n *ngIf=\"acoesLinhaTabela\"\r\n >\r\n <div *ngFor=\"let action of config.actions\">\r\n <button\r\n id=\"actionBtns\"\r\n pButton\r\n *ngIf=\"exibirCampo(action, rowData)\"\r\n class=\"actionBtns p-button-text p-button-raised\"\r\n (click)=\"activeItem(rowData); action?.command(commandEvent)\"\r\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\"\r\n [tooltipPosition]=\"action.tooltipPosition ? action.tooltipPosition : 'bottom'\"\r\n [disabled]=\"callDisabled(action, rowData)\"\r\n >\r\n <span class=\"material-symbols-outlined md-19\">\r\n {{ retornarCampo(action, rowData, \"icon\") }}</span>\r\n </button>\r\n </div>\r\n </div>\r\n <div\r\n class=\"flex flex-row justify-content-end w-full\"\r\n *ngIf=\"!acoesLinhaTabela\"\r\n >\r\n <!-- <button\r\n id=\"moreVertBtn\"\r\n pButton\r\n class=\"actionBtns p-button-text p-button-raised\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n > -->\r\n <span\r\n class=\"material-symbols-outlined cursor-pointer icon-more-horiz\"\r\n style=\"font-size: 20px\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n >\r\n more_horiz\r\n </span>\r\n <!-- </button> -->\r\n\r\n <div *ngFor=\"let action of config.actions\">\r\n {{ criarMenusModal(rowData) }}\r\n </div>\r\n\r\n <!-- <div *ngFor=\"let action of config.actions\">\r\n {{ criarMenusModal(rowData) }}\r\n </div> -->\r\n\r\n <p-menu\r\n #menu\r\n [popup]=\"true\"\r\n [model]=\"menuItems\"\r\n appendTo=\"body\"\r\n ></p-menu>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template\r\n pTemplate=\"emptymessage\"\r\n let-columns\r\n >\r\n <tr>\r\n <td\r\n [attr.colspan]=\"columns.length + 2\"\r\n style=\"text-align: center;\r\n border-radius: 10px !important;\r\n \"\r\n >\r\n <p class=\"font-medium m-0\"> Nenhum registro encontrado </p>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n</div>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://fonts.googleapis.com/icon?family=Material+Icons\"\r\n/>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@48,400,0,0\"\r\n/>", styles: ["@charset \"UTF-8\";.error-show{background-color:red;width:5px;height:10px}.btns-options{position:relative;left:20px}.chip-style{border:solid 1px}:host::ng-deep .p-card .p-card-content{padding:0}.material-symbols-outlined.md-19{font-size:19px}.material-symbols-outlined.md-22{font-size:22px}.checkbox-container{display:flex;align-items:center;gap:2px;margin-top:5px}#botaoFiltro:hover{color:#a9a9a9}.actionLoteBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;font-size:16px;width:2rem;height:2rem;top:2px;margin-left:.5rem;justify-content:center;text-decoration:none;text-align:justify;padding:12px}#actionLoteBtns:hover,.actionLoteBtns:hover{background-color:#29b92d!important}.actionBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;width:.8rem;height:.8rem;margin-left:.22rem;justify-content:center;text-decoration:none;text-align:justify;padding:11px}:host::ng-deep .material-symbols-outlined{font-family:Material Symbols Outlined;font-weight:400;font-style:normal;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased}#actionBtns:hover{color:#a9a9a9}.icon-search{top:20px}.image{border-style:solid;border-width:3.5px;border-color:#5289b4;border-radius:100%;height:55px;width:55px;padding:0;margin:0;vertical-align:middle}:host ::ng-deep .p-datatable-table{border-spacing:0px 2px}:host ::ng-deep .p-datatable-header{background-color:#eaeaea!important;padding:2px 13px 0!important;border-radius:5px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th{background-color:#eaeaea!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:first-of-type{border-radius:5px 0 0 5px}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:last-child{border-radius:0 5px 5px 0}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{border-bottom:1px solid #ddd!important;border-top:1px solid #ddd!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:first-of-type{border-left:solid 4px #5289B4!important;border-radius:10px 0 0 10px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child{border-radius:0 10px 10px 0!important;border-right:1px solid #ddd!important}:host ::ng-deep .actionBtns,:host ::ng-deep .actionLoteBtns{border-radius:50%;width:2.5rem!important;height:2.5rem!important;box-shadow:#0000003d 0 3px 8px}.icon-more-horiz:hover,.icon-more-horiz:focus{color:#5e5e5e;transform:scale(1.1);transition:color .3s,transform .3s}@media only screen and (min-width: 768px){.actionLoteBtns{top:-1px}}@media only screen and (max-width: 960px){.rowTable{text-align:right!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{border-right:1px solid #ddd!important;border-bottom:1px solid hsl(0,0%,91%)!important;border-top:0px solid!important;line-height:30px!important;gap:5px}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(p-tablecheckbox){border-bottom:0px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(img){justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(img) .p-column-title{display:none!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:first-of-type{border-left:solid 4px #5289B4!important;border-radius:10px 10px 0 0!important;border-top:1px solid #ddd!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child{border-radius:0 0 10px 10px!important;border-bottom:1px solid #ddd!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child div{justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{border-left:solid 4px #5289B4!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td .p-column-title{font-weight:600}}::ng-deep .p-panel.p-panel-toggleable .p-panel-header{background-color:#eaeaea!important}::ng-deep .field.grid,.formgrid.grid{padding:0rem!important}@media screen and (min-width: 961px){.moreVertBtn{position:relative;right:3px}}\n"] }]
|
|
437
|
+
}], ctorParameters: function () { return [{ type: i1.DatePipe }, { type: i1.DecimalPipe }, { type: i2.CodigoFipePipe }, { type: i3.CpfCnpjPipe }, { type: i4.TelefonePipe }]; }, propDecorators: { templates: [{
|
|
438
|
+
type: ContentChildren,
|
|
439
|
+
args: [TemplateDirective]
|
|
440
|
+
}], _templates: [{
|
|
441
|
+
type: Input,
|
|
442
|
+
args: ['templates']
|
|
443
|
+
}], table: [{
|
|
444
|
+
type: ViewChild,
|
|
445
|
+
args: ['table', { static: false }]
|
|
446
|
+
}], setConfig: [{
|
|
447
|
+
type: Input,
|
|
448
|
+
args: ['config']
|
|
449
|
+
}], dataSource: [{
|
|
450
|
+
type: Input
|
|
451
|
+
}], selectedItems: [{
|
|
452
|
+
type: Input
|
|
453
|
+
}], totalRecords: [{
|
|
454
|
+
type: Input
|
|
455
|
+
}], paginator: [{
|
|
456
|
+
type: Input
|
|
457
|
+
}], rowsPerPageOptions: [{
|
|
458
|
+
type: Input
|
|
459
|
+
}], rows: [{
|
|
460
|
+
type: Input
|
|
461
|
+
}], pageLinksOptions: [{
|
|
462
|
+
type: Input
|
|
463
|
+
}], showFirstLastIcon: [{
|
|
464
|
+
type: Input
|
|
465
|
+
}], tableSize: [{
|
|
466
|
+
type: Input
|
|
467
|
+
}], applyStyle: [{
|
|
468
|
+
type: Input
|
|
469
|
+
}], acoesLinhaTabela: [{
|
|
470
|
+
type: Input
|
|
471
|
+
}], filterColumnsBtn: [{
|
|
472
|
+
type: Input
|
|
473
|
+
}], filtrosAvancados: [{
|
|
474
|
+
type: Input
|
|
475
|
+
}], onActiveItem: [{
|
|
476
|
+
type: Output
|
|
477
|
+
}], onActiveItemLote: [{
|
|
478
|
+
type: Output
|
|
479
|
+
}], onPaginate: [{
|
|
480
|
+
type: Output
|
|
481
|
+
}], onSelectionChange: [{
|
|
482
|
+
type: Output
|
|
483
|
+
}], doubleClickEvent: [{
|
|
484
|
+
type: Output
|
|
485
|
+
}], filterField: [{
|
|
486
|
+
type: Output
|
|
487
|
+
}], filtrosAvancadosEmit: [{
|
|
488
|
+
type: Output
|
|
489
|
+
}], menuFiltroDiv: [{
|
|
490
|
+
type: ViewChild,
|
|
491
|
+
args: ['menuFiltroDiv']
|
|
492
|
+
}], botaoFiltro: [{
|
|
493
|
+
type: ViewChild,
|
|
494
|
+
args: ['botaoFiltro']
|
|
495
|
+
}], onWindowResize: [{
|
|
496
|
+
type: HostListener,
|
|
497
|
+
args: ['window:resize', ['$event']]
|
|
498
|
+
}] } });
|
|
499
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBRUwsU0FBUyxFQUNULGVBQWUsRUFFZixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBSU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQVNyRSxNQUFNLFVBQVUsR0FBRywwcVBBQTBxUCxDQUFDO0FBTzlyUCxNQUFNLE9BQU8sY0FBYztJQWlDekIsSUFBcUIsU0FBUyxDQUFDLEtBQWtCO1FBQy9DLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDWixZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVksSUFBSSxJQUFJO1lBQ3hDLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWSxJQUFJLEtBQUs7WUFDekMsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZLElBQUksSUFBSTtZQUN4QyxHQUFHLEtBQUs7U0FDVCxDQUFDO1FBRUYsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRTtZQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDbEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUMsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUE0QkQsWUFDbUIsUUFBa0IsRUFDbEIsV0FB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QUNkLFVBQVU7c0JBQTdCLEtBQUs7dUJBQUMsV0FBVztnQkFFcUIsS0FBSztzQkFBM0MsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUdoQixTQUFTO3NCQUE3QixLQUFLO3VCQUFDLFFBQVE7Z0JBZU4sVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFHcUIsYUFBYTtzQkFBeEMsU0FBUzt1QkFBQyxlQUFlO2dCQUNBLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkF1QnhCLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSwgRGVjaW1hbFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbnRlbnRDaGlsZHJlbixcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBRdWVyeUxpc3QsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVGFibGUgfSBmcm9tICdwcmltZW5nL3RhYmxlJztcclxuaW1wb3J0IHsgVGFibGVDb25maWcgfSBmcm9tICcuLi9hcGkvY29tcG9uZW50cy90YWJsZS90YWJsZS5jb25maWcnO1xyXG5pbXBvcnQgeyBUYWJsZUNvbmZpZ0NvbHVtbiB9IGZyb20gJy4uL2FwaS9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbmZpZy5jb2x1bW4nO1xyXG5pbXBvcnQgeyBUYWJsZVBhZ2luYXRlIH0gZnJvbSAnLi4vYXBpL2NvbXBvbmVudHMvdGFibGUvdGFibGUucGFnaW5hdGUnO1xyXG5pbXBvcnQgeyBUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdGVtcGxhdGUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29kaWdvRmlwZVBpcGUgfSBmcm9tICcuLi9waXBlcy9jb2RpZ29maWxlLnBpcGUnO1xyXG5pbXBvcnQgeyBDcGZDbnBqUGlwZSB9IGZyb20gJy4uL3BpcGVzL2NwZmNucGoucGlwZSc7XHJcbmltcG9ydCB7IFRlbGVmb25lUGlwZSB9IGZyb20gJy4uL3BpcGVzL3RlbGVmb25lLnBpcGUnO1xyXG5pbXBvcnQgeyBLdk1lbnVJdGVtIH0gZnJvbSAnLi4vYXBpL2NvbXBvbmVudHMvdGFibGUva3YtbWVudWl0ZW0nO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgUGFuZWwgfSBmcm9tICdwcmltZW5nL3BhbmVsJztcclxuaW1wb3J0IHsgTWVudUl0ZW1Db21tYW5kRXZlbnQgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcblxyXG5jb25zdCBpbWdEZWZhdWx0ID0gJy85ai80QUFRU2taSlJnQUJBUUlBZGdCMkFBRC80UUJpUlhocFpnQUFUVTBBS2dBQUFBZ0FCUUVTQUFNQUFBQUJBQUVBQUFFYUFBVUFBQUFCQUFBQVNnRWJBQVVBQUFBQkFBQUFVZ0VvQUFNQUFBQUJBQU1BQUFJVEFBTUFBQUFCQUFFQUFBQUFBQUFBQUFCMkFBQUFBUUFBQUhZQUFBQUIvOXNBUXdBREFnSUNBZ0lEQWdJQ0F3TURBd1FHQkFRRUJBUUlCZ1lGQmdrSUNnb0pDQWtKQ2d3UERBb0xEZ3NKQ1EwUkRRNFBFQkFSRUFvTUVoTVNFQk1QRUJBUS85c0FRd0VEQXdNRUF3UUlCQVFJRUFzSkN4QVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRLzhBQUVRZ0FrQUNRQXdFUkFBSVJBUU1SQWYvRUFCMEFBUUFCQkFNQkFBQUFBQUFBQUFBQUFBQUdBUUlIQ0FNRUNRWC94QUJCRUFBQ0FRUUFCUUlDQ0FRREJBc0FBQUFCQWdNQUJBVVJCZ2NTSVRFVFFRaFJDUlFWR1NKVmxkRXlZWUdSUWxKaUZpTTNPRk5qY1hOMWRwS1RzYk8wLzhRQUdnRUJBQUlEQVFBQUFBQUFBQUFBQUFBQUFBRUZBd1FHQXYvRUFESVJBQUlBQkFNRkNBRUZBUUVCQUFBQUFBQUJBZ01FRVNFeFVRVVNRWkh3RXhVeVlYR0JvYkhSSWpOQ3dlRTA4U1AvMmdBTUF3RUFBaEVERVFBL0FQS3FnRkFLQVVCZERETGNTcEJCRThrc2pCRVJGSlptSjBBQVBKSnFVbkU3SWh0UXE3eUo1dzl5ZHoyVmkrczVlNFhGUk11MFYwOVNVNzBSdEFSMGpSUGs5UUkwVjk2czVHeXBreFhtUGQrWC9uMzVGYk8ycEtsNFFmcWZ4eko5ak9VL0JtTzZXa3NaYjZSSkJJcjNVcE90YTBwVmVsU08zZ2c3MmQ3SGFyT1hzMm5nelYvWHBJcTQ5cFZNZkczb3Z6ZGttc01UaXNYMS9abU10TFAxZGRmb1FMSDFhM3JmU0J2V3ovZXR1Q1hCTHZ1SksrbUJweHpJNWx0OXQyMXhPM1dROENnT3BmNG5GWlRvKzA4WmFYbnBiNlByRUN5ZE85YjExQTYzb2YyckhITGdtZU5KK3FQY0V5T1hmY2JWOU1DTTVQbFB3WmtlcG83R1d4a2VReU05cktSdmU5cUZicVVMMzhBRFdoclE3VnFUTm0wOGVTdDZQLzFHNUJ0S29nNDM5VitMTWdQRVBKM1BZcUw2emlMaGNyR3E3ZEVUMDVSclpPa0pQVU5BZUQxRW5RWDNxc243S21TMXZTM3ZmRC8zNzhpMGs3VWxUSHV4cmRmeHovd2djME0xdk05dmNSUEZMRXhSMGRTckt3T2lDRDRJUHRWWTA0WFpsa21vbGRaRnRRU0tBVUFvQlFDZ0ZBU2pnL2w5bWVMWlJLRmV5c09rc2J1U0lsVzdrYVFkdXM3QkIwZERSMmQ2QjNhV2htVk9PVU92NDFOS3NyWWFWWVl4YWRYL0FOK1Ztemg3aEhBY01SQk1UWUlrcFhwZTRmOEFGSy9ZYjJ4OWowZzlJMHUvWVYwTWltbFU2dEFzZGVKenMycG16LzNJci9YU3kxMVo5bXM1Z0toVFVrWEs2RkJjYUZDTGpRb0xqUW9UY29WTkJjcFVFbnh1SWVFY0J4UkNVeTFnalNoZWxMaFB3eXAyT3RNTzVBNmllazdYZnRXQ2ZTeXFoZnJXT3ZFenlhaWJJZjhBODRyZVhEcDVYejBaaFBqSGwvbCtFWmZVSWE4c0NvSXU0NHlGVTdBMDQ3OUIyUnJaMGRqUjNzRG5hcWltVXJ1OFZyK2REb0tTdmwxS3RGYUdLK1Y4ODhzcjRLNzArU0wxcG0rS0FVQW9CUUU1NWRjdTVlSnBseXVXUjQ4VEczWWJLdGNzRDNWVDdLRDJMZjBIZlpXeW9hRjFEMzQvRDk5Y2VyVnRkWEtuWFp5L0Y5ZjdwMWZPTU1NVnZFbHZieEpIRkdvUkVSUUZWUU5BQUR3QVBhdWlTVUtzc2puVzNFN3Q0bklCODY5SGhzclFnclVBVUFvQlFDZ0ZBVXFRVUlvVGM0NW9ZcDRuZ25pU1NPUlNqbzZobFpTTkVFSHNRUjdWRFNpVm5rZWszQzdwNG1EZVluTHVYaGlWc3Jpa2VURlNOM0hjdGJNVDJWajdxVDRiK2g3NkxjNVhVTHAzMmt2dy9YK2VmVDZPaHJsVUxzNW5pKy85MTZ0QjZyU3lGQUtBbEhML0FJT2w0dXkrcENxMkZteVNYWkpPMlVudEdORUhiYUkzN0FFK2RBN2xGU3VxbVdlU3ovSHVhRmZWcW1sN3F2dlJYdDVlZVRXRjhubnBhNXNGREZGQkVrRUVTUnh4cUVSRVVCVlVEUUFBOEFEMnJxVWtsWkhNdHQ0czVRS2s4dGxhZ2dVQW9DZmNwdVJQTkxuYmtueC9MdmhhNHlFY0RCYm05Y2lLMXR0LzlKSzJsQjEzNlJ0aVBBTllaMVJMcDFlWXpQSXBwdFE3UzBiUDRUNkxianU0dEZrNGg1cVlLd3VTTm1LenNacnBBZmwxc1kvL0FJcXVpMnZBbittRmxsRHNlTnI5VVNJcnpCK2piNTI4SzJjdVI0U3llRzR0aWlCWTI5czdXMTJRUGNSeWZnUC9BR0NUWjlnYXlTdHF5WTNhSzZNVTNaTTZCWGdhWnF2bHNUbGNEa3JuRFp2RzNXUHY3T1F4WEZyZFJORkxFNDhxeU1BVlA4alZrbW9sZFpGWkZDNFhhTE02bFNRS0FVQmFSVTVrcG5ITkRGY1JQYjNFU1NSU0tVZEhVTXJLUm9nZytRYWhwTk5NOXd4T0Y3eXpOZmVZSEIwdkNPWUlqNlRZWGpQSmFFSHVxZ2phSFpKMnV3Tis0MGZPd09XcmFWMHN6RHd2TDhleDB0QlZxcGw3cjhVS1YvUHp5U3h0a3N1UkY2MHpmTG9ZWmJpVklJSW5rbGtZSWlJcExNeE9nQUI1Sk5TazRuWkVOcUZYZVJzcHduZ0l1R2VIN1REb0l6SkVuVk82QWY3eVZ1N0hZQUxEZllFamZTRkh0WFcwMGhVOHBTMTcrdlh3Y2hVVGUybXhUTWNYcS9UVjJ5eFN3dmQ1dG4yQUsyREF5Nm9JRkFLQXlwOE5YSXpKZkVCelFzdUM0SlpMWEZ3SWIzTDNpQWJndEVJRGRPKzNXeEtvdm51MnlDQWExNnFvVk5MY2ZIZ2JOSlRPcG1xRGh4UFluZ3pndmhmbDd3MVk4SWNIWWEzeG1KeDhZamd0NFYwQjgyWStXWW51V095U1NTU2E1V1pNaW14T0tOM1oxa3VYREtoVUVDc2o3ZGVEMktBMXkrTVQ0VzhOeno0TnV1SStIOGRGRHh6aHJkcGJDNGpVSzEvR2cyYldRLzR0amZRVC9DMnU0QmJlL1ExanA0OTJMd3Y0OHpRcnFOVk1HOUN2MUw1OGp5VmRIamRvNUZLc3BJWlNORUg1R3VtT1dLVUFvQlFGcEh2VWtvK054ZHc5RHhSZ0xyRXlCUks2OWR1N2FIUktQNFR2UjBOOWpvYjZTUjcxcjFVaFZFcHkzN2Vwc1UwM3NKc016VDYvdjM0MlpyWk5ETmJ6UGIzRVR4U3hNVWRIVXF5c0RvZ2crQ0Q3VnlUVGhkbWRjbW9sZFpFODVPOFBSWlhQeTVhNUN0RmlsVjFRNk81WDJFT2lEMkFWanZZSVlLYXN0bHlWTW03Ny9qOTlmSldiVXFITGxxV3Y1Y2ZKVysvcTVtK3VqT2RMcUhrclVBVUFvRDBpK2k3NFZzN1RscnhkeHI2Uy9XOGxtMXhwY2p1SXJlQkpBQjhnV3VXL3NQbFZEdGVOdVpEQm9yOWNqb05qd0pTNG85WDlmK202MVZCY0NnRkFLQThZL2kyNFZ0T0RQaVA0OHdWaEVzVnY5cC9Ya1JSb0lMbU5ManBBOWdQVzBCOHE2eWlqY3lSREU5UHJBNUd1Z1V1b2poV3YzaVlqclpOVVVBb0NsU0Myb1BSaERuRnc5RmlzL0ZsN2JvV1BLcXpzZzdhbFRRYzZBQTBReW5leVN4WW4ycm50cVNGTG1LWXY1ZmEvUDNjNlBaYzV6Slc0ODRmcmgvWlB1VStNK3p1RExhUmtsU1Mra2t1bldRYTFzOUtsUnIrRW9pa2VkNzM0SXF6MmJMM0tkUFc3NjlrVmUwbzkrb2ZsWmYzOXNtUUZiNW9NdXFEeUtBVUFvRDBiK2k2NHhzN25nUGpEZ0ZwVkYzajhzbVdWQ2U3UlR3cEVTUG1BMXVOL0xySHpxaDJ2TGFqaGo4ckhRYkhtSndSUWFPNXU3VlFYQW9CUUNnUEZ6NHFPTWJQano0aHVPdUpjZktzdHJKbEd0SUpGTzFranQwVzNWd2ZrUkVDUDVHdXNvNWJseUlZWHA5NG5JMXN4VEtpS0phL1dCaXF0azFSUUNnRkFXa1ZKS0lkell4bjJqd1hjeUtrenlXVWtkMGl4OS9CNldMRFI3QkhjKzJ0YjNvR3EvYVV0ektkMjRZOWN5dzJkTVV1b1YrT0hYdWtTWEVXSDJWaXJMR2VyNnYxTzNqZzYrbnA2dWhRdTliT3Q2OGJyY2x3ZG5Bb05GWTA1a2ZhUnVQVjM1bmRIaXNoalpXb0lGQUtBVUJrYmtCem96ZklYbVpqdVBjUkdiaUNNRzJ5Vm4xZEl1N055UFVqMzdIc3JLZlprVW5ZMkRncVpDcVpiZ1pzVTFSRlRURkdqMko1YmN6T0MrYlhDbHJ4bHdMbW9jampycFJ2cElFa0VtdG1LVlBLT045MVA4aU5nZ25sWnNxT1RGdVJyRTZ5Vk9nbnc3OER1aVUxak1nb0RWajQwdml6dzNLUGhlKzVlOEY1U080NDR5MEJnUG9QdjdKaGNhTXprZnd5bFQrQmZJSkRuc0FHc3FDaWM2SlRJMStsZkpXMTlhcEVMZ2dmNm44SGxkNXJvem1SUUNnRkFLQW8zaXBKUjBzdFlESzRxOHhabTlJWGx2SkI2blQxZEhXcFhldGpldCtOMWptUWRwQTROVTF6TWt1UHM0MUdsZXp1ZHVzaDRSY1BGRHl5dFFCUUNnRkFLQWxQTHptanpCNVVaci9hRGw1eFZmWVM5SUN5R0J3WTVsQjJGa2pZRkpGMzdNQ0t4elpNRTVic3hYTXNxZE1rUGVsdXhzbmhQcE51ZWVQdEZ0c3Z3MXdqbFpFR3ZyRDJzOE1qSDVzRWxDZjJVVlh4YkprdDROb3NJZHJ6a3NVbVJUbUQ5SUQ4UlBIVm5MamJMTTQ3aGExbUJWeGc3Wm9wbVgvdnBHZVJUL05DcHJMTDJiSWx1N1YvVXhUZHAxRXhXVHQ2R3VWemMzRjVjUzNkM1BKUFBNNWtrbGtZczdzVHNzeFBja24zTmI2VnNFVjdiZUxPT2dGQUtBVUFvQ2g4VklSYlE5Q2dSY1BGRHl5dFFCUUNnRkFTZmcvbGZ6SDVneWVud1B3TG5jNE9ycFo3R3drbGpRLzZuVWRLLzFJckhIT2x5dkhFa1pKY21aTjhFTFptREEvQUo4VCtiUlpadUJyWEZSdjNEWCtVdDFPdjVxanN3L3FCV3JGdEtuaC9sZjJOdUhabFRGL0czdVN1SDZNLzRoSlVEU1pmZ3VFLzVYeVU1SS84QVRBUldQdldSbyt2Y3lyWk0vVmRleDFiL0FPamIrSTJ6UXRidHdyZkVEK0czeWpnbi93QnlOUlVyYXNoNjhpSHNtb1duTXg5eFI4RzN4TDhKSTgyUjVUNVc2aVFiNjhZOFYvc2ZNTEF6dC9jVm5ncnFlUEtMK3Zzd1IwRlJCbkR5eCtqRU9UeGVUd3Q3SmpzeGpycXh1NFRxU0M1aGFLUkQvTldBSXJaVFVTdWpVY0xoZG1kYXBJRkFLQVVCUStLa0l0b2VqcVltL3dEdFRGV1dUOUwwdnJsdkhQMGRYVjA5YWh0YjBONjM1MVdPWEgya0NqMVNaN21RZG5HNEwzczdjanVqeFdReHNyVUVDZ01qOGtPUVBNUG43eEljRHdSamxGdmJkTFgrU3VkcmEyU0h3WFlBN1k2T2tVRmpvOXRBa1lLaXBsMDBPOUdiRlBUVEttTGRnNW5vOXliK0F2a2p5d2dndnVJc1d2R21jUUF2ZDVhSU5iSzMvVjJ1eWdIaitQcmI1RWVLb1orMFowN0NGN3E4dnlkQkkyYkprNHhMZWZuK0RZNjJ0YmF5dDQ3U3p0NG9JSWxDUnhSSUZSRkhnQURzQldnMjNpeXdTdGdqbHFBS0FVQW9DT2NhOHVPQXVZK09PSzQ3NFF4V2N0dEVLdDdiTEkwZS9kSEk2a1A4MUlOWkpjMk9VN3dPeGptU29KcXRHcm1rL1A3Nk51M2p0TG5pYmtIZlRlckdHa2ZoNi9tNnVzZkszbmJ2djVMSVR2OEF6anNEYjAyMWNkMmZ6L0pUMU95VmJla2N2d2FGWkhIWkRENUM1eFdXc3A3TzlzNVdndUxlZU1wSkZJcDB5TXA3Z2dnZ2cxZEpxSlhSU05PRjJlWjE2RUNnS0h4VWtvNldXdnhpc1ZlWlF3K3FMTzNrbjlQcTZldm9VdHJlanJldk9xeHpJK3pnY2VpYjVHU1hBNWthZ1R0ZDI1a2E1VDVNWkhndTFqWjVua3NaSkxWMmtPL0I2bENuWi9DRWRBUEd0YThBVnA3Tm1PWlRwUGhoMXpOemFNdnM2aDI0NDllNlpNUWFzQ3ZaZFVFSFp4bU91OHZrclRFMkVmcVhON1BIYndwdlhWSTdCVkg5eUtodFFxN0pTY1RzajIyNUw4cGVIT1NuTHZGY0JjT1c4WVd6aURYbHlGMDk1ZEVEMVozUGtsajQzNFVLbzdBVnlOUk9pcUpqamlPeHA1RU5QTFVFSk9hd21ZVUFvQlFDZ0ZBS0FVQm9WOUpmeVZ3OFdNeFhQSEMya2NGKzEwbUp6UHBycjZ3ckl4Z21iL1V2UVVKOGtNZzhMVjFzcW9kM0pmcWlrMnZUcXluTFBKbm41VjJVUW9DMG1wSlJEdWJHVCt6dUM3cU5YbVNTOWtqdFVhTTYxczlUQmpzZmhLSTQ5OTcxclJOViswcGpsMDd0eHc2NUcvczZXcGxRcjhNZXZkb2dISjNpQ0xGWitYRTNKVllzcXFvcm5RMU1teWcyU094RE1QQkpZcUtyTmx6MUxtN2p5aSsrQlo3VmtPWkxVeUgrUER5ZnR3NVd2NUdiNjZJNTR1cVR5U3psTC94VjRNLzh3WTcvQVBUSFdLZCsxRjZNeXlQM1lmVkh1YlhISFppZ0ZBS0FVQW9CUUNnRkFheS9TSi84cytTLzhWc1Avc3F3MlovMEwwWlhiVS81bjZvOG9hNlU1Z29lMVNDMm9QUmhEbkZ4RERsYzlGaWJib2FQRkt5TTQ3a3l2b3VOZ2thSFNvOEFodW9IMnJudHF6MU1tS1hEL0g3ZjQrN25SN0xrdVhLY2NXY1gxdy9zZ2NNMHR2S2s4RXJ4eXhzSFIwWWhsWUhZSUk4RUdxeE53dTZMSnBSS3p5TmxPRXMvSHhOdy9aNWRUR0pKVTZaMFVqOEVxOW1HZ1NWNzl3RDM2U3A5NjYybW5xb2xLTmUvcjE4SElWRXZzWjBVclQxeXpYREgxV0Y3ck5NK3dEN1ZzR0JuZndlWXZlSHMxajgvaldSYnZHWFVWNWJsMTZsRWtiaDFKSHVOZ2RxOHhRcUpPRjhSREU0V29sd05qdnZGUGlYL0FEbkJmcE1mNzFvZDJVK2o1bGgzclVhcmtQdkZQaVgvQURuQmZwTWY3MDdzcDlIekhldFJxdVErOFUrSmY4NXdYNlRIKzlPN0tmUjh4M3JVYXJrUHZGUGlYL09jRitreC92VHV5bjBmTWQ2MUdxNUQ3eFQ0bC96bkJmcE1mNzA3c3A5SHpIZXRScXVRKzhVK0pmOEFPY0Yra3gvdlR1eW4wZk1kNjFHcTVEN3hUNGwvem5CZnBNZjcwN3NwOUh6SGV0UnF1USs4VStKZjg1d1g2VEgrOU83S2ZSOHgzclVhcmtQdkZQaVgvT2NGK2t4L3ZUdXluMGZNZDYxR3E1RVA1cWZHQnpwNXljSVRjRDhiNUhGell1ZWFLNGRiZkhwRS9YR2RyK0lkL05aWk5ESmtSYjhHWmluVjA2b2czSThqQ2xiWnBscFB0VWtwSHhlTHVJWXVGOEJkWlp5aGxSZWkzUnY4Y3A3S05iR3g3blIzMGcxcjFNOVU4cHpIN2V2WHdiRlBLN2ViREwxK3Y2OThMMk5iWnBwYmlWNTU1WGtsa1l1N3V4TE14T3lTVDVKTmNrMjRuZDVuWEpLRldSYlVFa281ZjhZeThJNWNHVHBOaGVNa2QyQ0R0VkJPcEJvRTdYWk92Y0Vqem9qY29xcDBzekh3dlA4QVBzYUZmU0twbDd5dnZRM3Q1K1dPR05zK0d0cm13VU0wVnhFbHhieXBKRklvZEhSZ3lzcEd3UVI1QnJxVTdxNk9aYWF3WnlBMU9aNWFMcWdnVUFvQlFDZ0ZBS0FVQW9CUUZwTlRrU2tjYzAwVnZFOXhjU3BIRkdwZDNkZ3Fxb0d5U1Q0QXFHMGsyejNEQzRudXJNMTk1Z2NZeThYWmdtUHBGaFpzOGRvQU83S1NOeUhZQjIzU0RyMkdoNTJUeTFiVk9xbVhXU3kvSjB0QlNLbWw3ejhVU1YvTHl6YXd2bXMrUkY2MHpmRkFLQW5ITHZtSkx3eEt1S3lydkppcEc3SHV6V3pFOTJVZTZrK1YvcU8rdzFsUTF6cDMyY3p3L1grZVhUcmE2aFZRdCtYNHZ2cmgxYk9VTTBWeEVrOEVxU1JTS0hSMFlGV1VqWUlJOGdpdWpUVFYwem5HbW5abzVBZm5VbmxvclVFRmFBVUFvQlFDZ0ZBVTNxcEJRbjVVSlNPT2FhSzNpZTR1SlVqaWpVdTd1d0Nxb0d5U1Q0QUZRMmxpejBsZDJSZzNtSnpFbDRtbGJGWXAzanhVYmR6M0RYTEE5bVlleWoyWCtwNzZDODVYVnpxSHVRZUg3NjY4dWpvYUZVNjdTUHhmWFhYbkI2clN5RkFLQVVBb0NVOEg4dzgxd25Jc0pkNzdIaENnczVaU0ZUdVczR2UvUWVwaVRvYU96c2IwUnVVdGJNcG5iT0hUOGFGZlZiT2wxRjRvTFF4TjNidG5rc2NyNEt5ZkN5NFlHYmNCeFpnT0pvZzJJeU1jc2dRTzhEZmhsajdLVHRUM0lCWUFzTnJ2d1RYUlNhbVZVSzh0KzNIcjRPZm0wODZUKzVEYkYvZmxmUE5YeHRtazhENjlaekNWREdwSXNWNmhRV0d4ODZFV0d4ODZDdzZoUW14UXNhQ3hTb0pQa1ovaTNoL2htTXRsOGpIRklVTHBBdjRwWk96RWFVZHhzcVFHT2wzNUlyQlBxWlZPcnpIN2Nldmd6U3FlYlA4QTI0YjRwY01PZHNzM3h0a204RENQR1BNREw4WFMrbVMxbllCUUJhUnlrcXgyRHR6MjZ6c0RXeG9hR2h2WlBPMVZiTXFuWjRMVDg2blJVdEJMcGtuRmFLTFczcmxuYkIyZXZ3UmV0TTNoUUNnRkFLQVVBb0M2R2FXM2xTZUNWNDVZMkRvNk1ReXNEc0VFZUNEVXB1RjNSRFNpVm5rVHpoN25GbjhWRUxiTFFKbFlsWFNNNytuS093QTI0QjZoMlBrRmlUc21yS1R0U2JMVm8xdkw1NitmTXE1K3lwY3gzbHZkMTRyankrcksxaWY0em14d1hrZWxaTDZXeWtlVDAxUzZoSzc4YVlzdlVxanY1TERXanZRNzFaeTlwVTh4MnZiMTZaV3pOblZFdFh0ZjA2VCtDUzJHV3hXVkVoeGVTdGJ3UmE5VDBKbGs2TjcxdnBKMXZSL3NhM0lKa0V6d05QMGR6VGpseHk3S05OWDFPM1dROENnT3BmNWZFNHJvKzA4bmFXZnE3S2V2TXNmVnJ6cnFJMzVIOTZ4eHpJSmZqYVhxekpCTGptZUJOK2lJMWsrYS9CZU42bFMvbHZaRWxNYkpheEZ2RzlzR2JwUmw3ZVF4M3NhMk85YWN6YVZQTGRyMzlPbDhHMUwyZFVURmUxdlhwdGNpQWNRYzRzL2xZamJZbUJNVkV5NmRrZjFKVHNFSFRrQUtPNDhEcUJHdzFWay9hazJaaEIrbGZQTXRKR3lwY3Q3MHg3Mm5CY09mSHl4eTRrRG1tbXVKbnVMaVY1WlpXTHU3c1dabUoyU1NlNUpQdlZhMjRuZGxta29WWlpGdFFTS0FVQW9ELzlrPSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2t2LXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgY29uZmlnITogVGFibGVDb25maWc7XHJcbiAgcGVzcXVpc2FWYWx1ZSE6IHN0cmluZztcclxuICBnbG9iYWxGaWx0ZXJGaWVsZHM6IHN0cmluZ1tdID0gW107XHJcbiAgYWN0aW9uc1RlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgc2VsZWN0ZWRTaXplOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgdGFtYW5ob1RlbGEhOiBudW1iZXI7XHJcblxyXG4gIG1lbnVJdGVtczogS3ZNZW51SXRlbVtdID0gW107XHJcbiAgbWVudUNvbHVtbnM6IEt2TWVudUl0ZW1bXSA9IFtdO1xyXG5cclxuICBjaGVja2VkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgY29sdW1uczogVGFibGVDb25maWdDb2x1bW5bXSA9IFtdO1xyXG4gIGRlbGV0ZWRDb2x1bnM6IFRhYmxlQ29uZmlnQ29sdW1uW10gPSBbXTtcclxuXHJcbiAgbWVudUZpbHRybzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNoZWNrYm94Q2xpY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBzaG93RmlsdHJvc0F2YW5jYWRvczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb2xsYXBzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29tbWFuZEV2ZW50ITogTWVudUl0ZW1Db21tYW5kRXZlbnQ7XHJcblxyXG4gIEBDb250ZW50Q2hpbGRyZW4oVGVtcGxhdGVEaXJlY3RpdmUpIHRlbXBsYXRlcyE6IFF1ZXJ5TGlzdDxhbnk+O1xyXG4gIEBJbnB1dCgndGVtcGxhdGVzJykgX3RlbXBsYXRlcyE6IGFueTtcclxuXHJcbiAgQFZpZXdDaGlsZCgndGFibGUnLCB7IHN0YXRpYzogZmFsc2UgfSkgdGFibGUhOiBUYWJsZTtcclxuICBkZWxldGVkQ29sdW1uc0luZGV4ITogYW55W107XHJcblxyXG4gIEBJbnB1dCgnY29uZmlnJykgc2V0IHNldENvbmZpZyh2YWx1ZTogVGFibGVDb25maWcpIHtcclxuICAgIHRoaXMuY29uZmlnID0ge1xyXG4gICAgICBlbmFibGVDYXRpb246IHZhbHVlLmVuYWJsZUNhdGlvbiB8fCB0cnVlLFxyXG4gICAgICBlbmFibGVTZWxlY3Q6IHZhbHVlLmVuYWJsZVNlbGVjdCB8fCBmYWxzZSxcclxuICAgICAgZW5hYmxlRmlsdGVyOiB2YWx1ZS5lbmFibGVGaWx0ZXIgfHwgdHJ1ZSxcclxuICAgICAgLi4udmFsdWUsXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZy5lbmFibGVGaWx0ZXIpIHtcclxuICAgICAgdGhpcy5jb25maWcuY29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcclxuICAgICAgICB0aGlzLmdsb2JhbEZpbHRlckZpZWxkcy5wdXNoKGNvbC5maWVsZCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgZGF0YVNvdXJjZTogYW55O1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkSXRlbXM6IGFueVtdID0gW107XHJcbiAgQElucHV0KCkgdG90YWxSZWNvcmRzITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHBhZ2luYXRvcjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgcm93c1BlclBhZ2VPcHRpb25zITogbnVtYmVyW107XHJcbiAgQElucHV0KCkgcm93czogbnVtYmVyID0gNTtcclxuICBASW5wdXQoKSBwYWdlTGlua3NPcHRpb25zOiBudW1iZXIgPSAxO1xyXG4gIEBJbnB1dCgpIHNob3dGaXJzdExhc3RJY29uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgdGFibGVTaXplITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGFwcGx5U3R5bGU6IEZ1bmN0aW9uID0gKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbikgPT4gJyc7XHJcbiAgQElucHV0KCkgYWNvZXNMaW5oYVRhYmVsYTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgZmlsdGVyQ29sdW1uc0J0bjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGZpbHRyb3NBdmFuY2Fkb3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIG9uQWN0aXZlSXRlbTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uQWN0aXZlSXRlbUxvdGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvblBhZ2luYXRlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25TZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBkb3VibGVDbGlja0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZmlsdGVyRmllbGQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBmaWx0cm9zQXZhbmNhZG9zRW1pdDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuXHJcbiAgQFZpZXdDaGlsZCgnbWVudUZpbHRyb0RpdicpIG1lbnVGaWx0cm9EaXYhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2JvdGFvRmlsdHJvJykgYm90YW9GaWx0cm8hOiBFbGVtZW50UmVmO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGF0ZVBpcGU6IERhdGVQaXBlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZWNpbWFsUGlwZTogRGVjaW1hbFBpcGUsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvZGlnb0ZpcGVQaXBlOiBDb2RpZ29GaXBlUGlwZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY3BmQ25walBpcGU6IENwZkNucGpQaXBlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0ZWxlZm9uZVBpcGU6IFRlbGVmb25lUGlwZSxcclxuICApIHtcclxuICAgIHRoaXMuaXNSb3dTZWxlY3RhYmxlID0gdGhpcy5pc1Jvd1NlbGVjdGFibGUuYmluZCh0aGlzKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5hZGp1c3RUYWJsZVNpemUoKTtcclxuICAgIHRoaXMudGFtYW5ob1RlbGEgPSB3aW5kb3cuaW5uZXJXaWR0aDtcclxuICAgIC8vIHRoaXMuY3JpYXJNZW51Q29sdW1ucygpO1xyXG4gICAgdGhpcy5jb25maWcuY29sdW1ucy5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmNvbHVtbnMucHVzaChjb2wpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNoZWNrSGlkZUNvbHVtbnMoKTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxyXG4gIG9uV2luZG93UmVzaXplKCkge1xyXG4gICAgdGhpcy5hZGp1c3RUYWJsZVNpemUoKTtcclxuICAgIHRoaXMudGFtYW5ob1RlbGEgPSB3aW5kb3cuaW5uZXJXaWR0aDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhY3RpdmVJdGVtKHJvd0RhdGE6IGFueSkge1xyXG4gICAgdGhpcy5vbkFjdGl2ZUl0ZW0uZW1pdChyb3dEYXRhKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhY3RpdmVJdGVtTG90ZShyb3dEYXRhOiBhbnkpIHtcclxuICAgIHRoaXMub25BY3RpdmVJdGVtTG90ZS5lbWl0KHJvd0RhdGEpO1xyXG4gIH1cclxuXHJcbiAgaXNCb29sZWFuRmllbGQocm93RGF0YTogYW55LCBjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHJvd0RhdGFbY29sLmZpZWxkXSA9PSAnYm9vbGVhbic7XHJcbiAgfVxyXG5cclxuICBpc0NoaXBGaWVsZChjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gY29sLmZpZWxkVHlwZSA9PSAnY2hpcCc7XHJcbiAgfVxyXG5cclxuICBpc0ltYWdlRmllbGQoY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHJldG9ybm8gPSBjb2wuZmllbGRUeXBlICYmIGNvbC5maWVsZFR5cGUgPT09ICdpbWFnZScgPyB0cnVlIDogZmFsc2U7XHJcbiAgICByZXR1cm4gcmV0b3JubztcclxuICB9XHJcblxyXG4gIC8vIGlzVmlzaWJsZUNoZWNrYm94KHJvd0RhdGE6IGFueSk6IGJvb2xlYW4ge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMuY29uZmlnLnZpc2libGVDb250cm9sQ2hlY2tib3hGdW5jdGlvbj8gdGhpcy5jb25maWcudmlzaWJsZUNvbnRyb2xDaGVja2JveEZ1bmN0aW9uKHJvd0RhdGEpOiB0cnVlO1xyXG4gIC8vIH1cclxuXHJcbiAgaXNSb3dTZWxlY3RhYmxlKGV2ZW50OiBhbnkpIHtcclxuICAgIHJldHVybiAhdGhpcy5pc0Rpc2FibGVkQ2hlY2tib3goZXZlbnQuZGF0YSk7O1xyXG4gIH1cclxuICBpc0Rpc2FibGVkQ2hlY2tib3gocm93RGF0YTogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZGlzYWJsZUNvbnRyb2xDaGVja2JveEZ1bmN0aW9uID8gdGhpcy5jb25maWcuZGlzYWJsZUNvbnRyb2xDaGVja2JveEZ1bmN0aW9uKHJvd0RhdGEpIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBsb2FkSW1hZ2Uocm93RGF0YTogYW55LCBjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogc3RyaW5nIHtcclxuICAgIC8qXHJcbiAgICAgIE5vc3NhIGNvbHVuYSBkZSBpbWFnZW0gdHJhYmFsaGEgY29tIHN0cmluZ3MgZG8gdGlwbzogYmFzZTY0IG91IHVybFxyXG4gICAgKi9cclxuICAgIGxldCByZXRvcm5vID0gYGRhdGE6aW1hZ2UvanBnO2Jhc2U2NCwgJHtpbWdEZWZhdWx0fWA7XHJcbiAgICBpZiAocm93RGF0YSAmJiBjb2wgJiYgcm93RGF0YVtjb2wuZmllbGRdICYmIHJvd0RhdGFbY29sLmZpZWxkXSAhPT0gJycpIHtcclxuICAgICAgaWYgKHJvd0RhdGFbY29sLmZpZWxkXS5pbmNsdWRlcygnaHR0cCcpKVxyXG4gICAgICAgIHJldG9ybm8gPSByb3dEYXRhW2NvbC5maWVsZF07XHJcbiAgICAgIGVsc2VcclxuICAgICAgICByZXRvcm5vID0gYGRhdGE6aW1hZ2UvanBnO2Jhc2U2NCwgJHtyb3dEYXRhW2NvbC5maWVsZF19YDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmV0b3JubztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkdsb2JhbEZpbHRlcih0YWJsZTogVGFibGUsIGV2ZW50OiBFdmVudCkge1xyXG4gICAgdGhpcy5maWx0ZXJGaWVsZC5lbWl0KChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpO1xyXG4gICAgdGFibGUuZmlsdGVyR2xvYmFsKChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUsICdjb250YWlucycpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHBhZ2luYXRlKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICBsZXQgcGFnaW5hSW5pY2lhbCA9XHJcbiAgICAgICAgKGV2ZW50Py5maXJzdCA+IDAgPyBldmVudC5maXJzdCAvIGV2ZW50LnJvd3MgOiBldmVudC5maXJzdCkgKyAxO1xyXG4gICAgICBsZXQgdGVybW9QZXNxdWlzYSA9ICcnO1xyXG4gICAgICBsZXQgb3JkZW5hY2FvID0gJyc7XHJcblxyXG4gICAgICBpZiAoZXZlbnQuZ2xvYmFsRmlsdGVyKSB0ZXJtb1Blc3F1aXNhID0gZXZlbnQuZ2xvYmFsRmlsdGVyO1xyXG5cclxuICAgICAgaWYgKGV2ZW50LnNvcnRGaWVsZClcclxuICAgICAgICBvcmRlbmFjYW8gPSBgJHtldmVudC5zb3J0RmllbGR9ICR7ZXZlbnQuc29ydE9yZGVyID09PSAxID8gJ0FTQycgOiAnREVTQydcclxuICAgICAgICAgIH1gO1xyXG5cclxuICAgICAgY29uc3Qgb2JqZXRvOiBUYWJsZVBhZ2luYXRlID0ge1xyXG4gICAgICAgIHBhZ2luYUluaWNpYWw6IHBhZ2luYUluaWNpYWwsXHJcbiAgICAgICAgdGFtYW5ob1BhZ2luYTogZXZlbnQucm93cyxcclxuICAgICAgICB0ZXJtb1Blc3F1aXNhOiB0ZXJtb1Blc3F1aXNhLFxyXG4gICAgICAgIG9yZGVuYWNhbzogb3JkZW5hY2FvLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5vblBhZ2luYXRlLmVtaXQob2JqZXRvKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGVjdGlvbkNoYW5nZSh2YWx1ZSA9IFtdKSB7XHJcbiAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlLmVtaXQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuUm93Q2xhc3Mocm93RGF0YTogYW55LCBjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKSB7XHJcbiAgICBsZXQgdmFsdWUgPSByb3dEYXRhW2NvbC5maWVsZF07XHJcbiAgICBsZXQgcm93Q2xhc3M6IHN0cmluZztcclxuXHJcbiAgICB0aGlzLnRhYmxlU2l6ZSA+IDgwMCA/IChyb3dDbGFzcyA9ICd0ZXh0LWJhc2UnKSA6IChyb3dDbGFzcyA9ICd0ZXh0LXNtJyk7XHJcblxyXG4gICAgaWYgKGNvbC5leHBpcmVkRGF0ZSA9PSB0cnVlKSB7XHJcbiAgICAgIG5ldyBEYXRlKHZhbHVlKSA8IG5ldyBEYXRlKClcclxuICAgICAgICA/IChyb3dDbGFzcyA9IHJvd0NsYXNzICsgJyB0ZXh0LXJlZC00MDAgZm9udC1zZW1pYm9sZCcpXHJcbiAgICAgICAgOiAnJztcclxuICAgIH1cclxuICAgIHJldHVybiByb3dDbGFzcztcclxuICB9XHJcblxyXG4gIGV4cGlyZWRGaWxlKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHZhbHVlID0gcm93RGF0YVsnZGF0YXZlbmNpbWVudG8nXTtcclxuICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSkgPCBuZXcgRGF0ZSgpICYmIGNvbC5maWVsZCA9PSAnYXJlYSc7XHJcbiAgfVxyXG5cclxuICB0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pIHtcclxuICAgIGxldCB2YWx1ZSA9IHJvd0RhdGFbY29sLmZpZWxkXTtcclxuXHJcbiAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICBpZiAoIWNvbC5waXBlKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzd2l0Y2ggKGNvbC5waXBlKSB7XHJcbiAgICAgICAgY2FzZSAnZGF0ZSc6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUsICdkZC9NTS95eXl5Jyk7XHJcbiAgICAgICAgY2FzZSAnZGVjaW1hbCc6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5kZWNpbWFsUGlwZS50cmFuc2Zvcm0odmFsdWUsICcxLjItMicsICdwdC1CUicpO1xyXG4gICAgICAgIGNhc2UgJ2NwZmNucGonOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuY3BmQ25walBpcGUudHJhbnNmb3JtKHZhbHVlKTtcclxuICAgICAgICBjYXNlICd0ZWxlZm9uZSc6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy50ZWxlZm9uZVBpcGUudHJhbnNmb3JtKHZhbHVlKTtcclxuICAgICAgICBjYXNlICdjb2RpZ29maXBlJzpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmNvZGlnb0ZpcGVQaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XHJcbiAgICAgICAgY2FzZSAnbW9uZXknOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0YXJWYWxvcih2YWx1ZSk7XHJcbiAgICAgICAgY2FzZSAncGVyY2VudGFnZSc6XHJcbiAgICAgICAgICByZXR1cm4gYCR7dmFsdWV9ICVgO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZvcm1hdGFyVmFsb3IodmFsb3I6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoJ3B0LUJSJywge1xyXG4gICAgICBzdHlsZTogJ2N1cnJlbmN5JyxcclxuICAgICAgY3VycmVuY3k6ICdCUkwnLFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXQodmFsb3IpO1xyXG4gIH1cclxuXHJcbiAgYWRqdXN0VGFibGVTaXplKCkge1xyXG4gICAgaWYgKHRoaXMudGFibGVTaXplIDwgODAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTaXplID0gJ3AtZGF0YXRhYmxlLXNtJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTaXplID0gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkb3VibGVDbGljayhlOiBhbnksIHJvd0RhdGE6IGFueSkge1xyXG4gICAgbGV0IGV2ZW50RG91YmxlQ2xpY2sgPSB7IGV2ZW50OiBlLCByb3dEYXRhOiByb3dEYXRhIH07XHJcblxyXG4gICAgbGV0IGFycmF5OiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgZS50YXJnZXQuY2xhc3NMaXN0LmZvckVhY2goKHg6IGFueSkgPT4gYXJyYXkucHVzaCh4KSk7XHJcblxyXG4gICAgaWYgKGFycmF5LmZpbmQoKHg6IGFueSkgPT4geCA9PSAnbmctc3Rhci1pbnNlcnRlZCcpICE9IHVuZGVmaW5lZClcclxuICAgICAgdGhpcy5kb3VibGVDbGlja0V2ZW50LmVtaXQoZXZlbnREb3VibGVDbGljayk7XHJcbiAgfVxyXG5cclxuICBjZW50cmFsaXphckNvbHVuYXMoY29sOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKGNvbC5jZW50cmFsaXplKSB7XHJcbiAgICAgIHJldHVybiAndGV4dC1hbGlnbjogY2VudGVyJztcclxuICAgIH0gZWxzZSByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBhbGlnbkNvbHVuYXMoY29sOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKGNvbC5hbGlnbikge1xyXG4gICAgICByZXR1cm4gYHRleHQtYWxpZ246ICR7Y29sLmFsaWdufWA7XHJcbiAgICB9IGVsc2UgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgYWxpZ25Db2x1bmFzSGVhZGVyKGNvbDogYW55KTogc3RyaW5nIHtcclxuICAgIGlmIChjb2wuYWxpZ24pIHtcclxuICAgICAgaWYgKGNvbC5hbGlnbiA9PSAncmlnaHQnKSByZXR1cm4gJ2p1c3RpZnktY29udGVudDogZW5kJztcclxuICAgICAgZWxzZSByZXR1cm4gJyc7XHJcbiAgICB9IGVsc2UgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgcmV0b3JuYXJDYW1wbyhhY3Rpb246IEt2TWVudUl0ZW0sIHJvd0RhdGE6IGFueSwgZmllbGQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBfZnVuY3Rpb24gPSBhY3Rpb24uZHluYW1pY2ZpZWxkc1xyXG4gICAgICA/IChhY3Rpb24uZHluYW1pY2ZpZWxkc1tmaWVsZF0gYXMgRnVuY3Rpb24pXHJcbiAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IF9maWVsZDogc3RyaW5nID0gX2Z1bmN0aW9uXHJcbiAgICAgID8gX2Z1bmN0aW9uLmFwcGx5KGFjdGlvbiwgW3Jvd0RhdGFdKVxyXG4gICAgICA6IGFjdGlvbltmaWVsZF07XHJcbiAgICByZXR1cm4gX2ZpZWxkO1xyXG4gIH1cclxuXHJcbiAgcmV0b3JuYXJSb3cocm93RGF0YTogYW55LCBjb2w6IGFueSwgZmllbGQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBfcm93YWN0aW9uID0gdGhpcy5jb25maWcucm93cyA/IHRoaXMuY29uZmlnLnJvd3NbY29sLmZpZWxkXSA6IG51bGw7XHJcbiAgICBjb25zdCBfZmllbGQ6IHN0cmluZyA9XHJcbiAgICAgIF9yb3dhY3Rpb24gJiYgX3Jvd2FjdGlvbltmaWVsZF1cclxuICAgICAgICA/IF9yb3dhY3Rpb25bZmllbGRdLmNvbnN0cnVjdG9yID09PSBGdW5jdGlvblxyXG4gICAgICAgICAgPyBfcm93YWN0aW9uW2ZpZWxkXS5hcHBseSh0aGlzLCBbcm93RGF0YV0pXHJcbiAgICAgICAgICA6IF9yb3dhY3Rpb25bZmllbGRdXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgcmV0dXJuIF9maWVsZDtcclxuICB9XHJcblxyXG4gIGV4aWJpckNhbXBvKGZpZWxkOiBhbnksIHJvd0RhdGE6IGFueSkge1xyXG4gICAgbGV0IHZpc2libGUgPSBmaWVsZC52aXNpYmxlID8gZmllbGQudmlzaWJsZShyb3dEYXRhKSA6IHRydWU7XHJcblxyXG4gICAgLy8gaWYgKGZpZWxkICE9IHVuZGVmaW5lZCAmJiBmaWVsZCAhPSBudWxsICYmIGZpZWxkICE9ICcnKSB7XHJcbiAgICAvLyAgIGNvbnN0IHZhbHVlID0gcm93RGF0YVtmaWVsZF07XHJcbiAgICAvLyAgIHJldHVybiB2YWx1ZTtcclxuICAgIC8vIH1cclxuICAgIHJldHVybiB2aXNpYmxlO1xyXG4gIH1cclxuXHJcbiAgY3JpYXJNZW51c01vZGFsKGRhdGE6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLmFjdGlvbnMgJiYgZGF0YSkge1xyXG4gICAgICBjb25zdCBpdGVtcyA9IHRoaXMuY29uZmlnLmFjdGlvbnMubWFwKChhY3Rpb24pID0+IHtcclxuICAgICAgICBjb25zdCBpY29uID0gdGhpcy5yZXRvcm5hckNhbXBvKGFjdGlvbiwgZGF0YSwgJ2ljb24nKTtcclxuICAgICAgICBjb25zdCB0b29sdGlwID0gdGhpcy5yZXRvcm5hckNhbXBvKGFjdGlvbiwgZGF0YSwgJ3Rvb2x0aXAnKTtcclxuICAgICAgICBjb25zdCB0b29sdGlwUG9zaXRpb24gPSB0aGlzLnJldG9ybmFyQ2FtcG8oYWN0aW9uLCBkYXRhLCAndG9vbHRpcFBvc2l0aW9uJyk7XHJcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLnJldG9ybmFyQ2FtcG8oYWN0aW9uLCBkYXRhLCAnbGFiZWwnKTtcclxuICAgICAgICBjb25zdCBjb21tYW5kOiBhbnkgPSB0aGlzLnJldG9ybmFyQ2FtcG8oYWN0aW9uLCBkYXRhLCAnY29tbWFuZCcpO1xyXG4gICAgICAgIGNvbnN0IHZpc2libGU6IGJvb2xlYW4gPSBhY3Rpb24udmlzaWJsZSA/IGFjdGlvbi52aXNpYmxlKGRhdGEpIDogdHJ1ZTtcclxuICAgICAgICBjb25zdCBkaXNhYmxlZDogYm9vbGVhbiA9IGFjdGlvbi5kaXNhYmxlZFxyXG4gICAgICAgICAgPyBhY3Rpb24uZGlzYWJsZWQoZGF0YSlcclxuICAgICAgICAgIDogZmFsc2U7XHJcblxyXG4gICAgICAgIGNvbnN0IG1lbnVJbnNlcnQ6IEt2TWVudUl0ZW0gPSB7XHJcbiAgICAgICAgICBsYWJlbCxcclxuICAgICAgICAgIGljb24sXHJcbiAgICAgICAgICB0b29sdGlwLFxyXG4gICAgICAgICAgdG9vbHRpcFBvc2l0aW9uLFxyXG4gICAgICAgICAgY29tbWFuZCxcclxuICAgICAgICAgIGRpc2FibGVkLFxyXG4gICAgICAgICAgdmlzaWJsZSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBsZXQgaXRlbSA9IHRoaXMubWVudUl0ZW1zLmZpbHRlcihcclxuICAgICAgICAgICh4KSA9PiB4LmNvbW1hbmQgPT0gbWVudUluc2VydC5jb21tYW5kXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKGl0ZW0ubGVuZ3RoID09IDApIHRoaXMubWVudUl0ZW1zLnB1c2gobWVudUluc2VydCk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpZiAobWVudUluc2VydC5sYWJlbCAhPSBpdGVtWzBdLmxhYmVsKSB7XHJcbiAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMubWVudUl0ZW1zLmluZGV4T2YoaXRlbVswXSk7XHJcbiAgICAgICAgICAgIHRoaXMubWVudUl0ZW1zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKG1lbnVJbnNlcnQudmlzaWJsZSAhPSBpdGVtWzBdLnZpc2libGUpIHtcclxuICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5tZW51SXRlbXMuaW5kZXhPZihpdGVtWzBdKTtcclxuICAgICAgICAgICAgdGhpcy5tZW51SXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAobWVudUluc2VydC5kaXNhYmxlZCAhPSBpdGVtWzBdLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMubWVudUl0ZW1zLmluZGV4T2YoaXRlbVswXSk7XHJcbiAgICAgICAgICAgIHRoaXMubWVudUl0ZW1zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybkNsYXNzQ2hpcChyb3dEYXRhOiBhbnksIGNvbDogYW55KTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgY2hpcC1zdHlsZSB3LWF1dG8gYm9yZGVyLXJvdW5kLTJ4bCBwLTIgdGV4dC0ke3RoaXMucmV0b3JuYXJSb3coXHJcbiAgICAgIHJvd0RhdGEsXHJcbiAgICAgIGNvbCxcclxuICAgICAgJ3N0eWxlY2hpcCdcclxuICAgICl9IGJvcmRlci0ke3RoaXMucmV0b3JuYXJSb3cocm93RGF0YSwgY29sLCAnc3R5bGVjaGlwJyl9YDtcclxuICB9XHJcblxyXG4gIHJldHVybkNsYXNzSWNvbihyb3dEYXRhOiBhbnksIGNvbDogYW55KTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnJldG9ybmFyUm93KHJvd0RhdGEsIGNvbCwgJ2ljb25yb3cnKTtcclxuICB9XHJcblxyXG4gIHJldHVyblRvb2x0aXBJY29uKHJvd0RhdGE6IGFueSwgY29sOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMucmV0b3JuYXJSb3cocm93RGF0YSwgY29sLCAndG9vbHRpcGljb25yb3cnKTtcclxuICB9XHJcblxyXG4gIHJldHVyblRvb2x0aXBSb3cocm93RGF0YTogYW55LCBjb2w6IGFueSk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXRvcm5hclJvdyhyb3dEYXRhLCBjb2wsICd0b29sdGlwcm93JylcclxuICB9XHJcblxyXG4gIGRlbGV0ZUNvbHVtbihmaWVsZDogc3RyaW5nKSB7XHJcbiAgICBsZXQgaW5kZXg6IG51bWJlcjtcclxuXHJcbiAgICBsZXQgY29sdW1uOiBUYWJsZUNvbmZpZ0NvbHVtbiB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlnLmNvbHVtbnMuZmluZChcclxuICAgICAgKHg6IFRhYmxlQ29uZmlnQ29sdW1uKSA9PiB4LmZpZWxkID09IGZpZWxkXHJcbiAgICApO1xyXG4gICAgaWYgKGNvbHVtbikge1xyXG4gICAgICBpbmRleCA9IHRoaXMuY29uZmlnLmNvbHVtbnMuaW5kZXhPZihjb2x1bW4pO1xyXG4gICAgICB0aGlzLmNvbmZpZy5jb2x1bW5zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIHRoaXMuZGVsZXRlZENvbHVucy5wdXNoKGNvbHVtbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRDb2x1bW4oZmllbGQ6IHN0cmluZykge1xyXG4gICAgbGV0IGluZGV4OiBudW1iZXI7XHJcblxyXG4gICAgbGV0IGNvbHVtbjogVGFibGVDb25maWdDb2x1bW4gfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZy5jb2x1bW5zLmZpbmQoXHJcbiAgICAgICh4OiBUYWJsZUNvbmZpZ0NvbHVtbikgPT4geC5maWVsZCA9PSBmaWVsZFxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoIWNvbHVtbikge1xyXG4gICAgICBsZXQgZGVsZXRlZENvbHVtbjogVGFibGVDb25maWdDb2x1bW4gfCB1bmRlZmluZWQgPVxyXG4gICAgICAgIHRoaXMuZGVsZXRlZENvbHVucy5maW5kKCh4OiBUYWJsZUNvbmZpZ0NvbHVtbikgPT4geC5maWVsZCA9PSBmaWVsZCk7XHJcblxyXG4gICAgICBpZiAoZGVsZXRlZENvbHVtbiAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICBpbmRleCA9IHRoaXMuZGVsZXRlZENvbHVucy5pbmRleE9mKGRlbGV0ZWRDb2x1bW4pO1xyXG4gICAgICAgIHRoaXMuZGVsZXRlZENvbHVucy5zbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgdGhpcy5jb25maWcuY29sdW1ucy5wdXNoKGRlbGV0ZWRDb2x1bW4pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaW5hbWljQ29sdW1uU2V0KGU6IGFueSwgY29sOiBhbnkpIHtcclxuICAgIGNvbC5jaGVja2VkID0gZS5jaGVja2VkO1xyXG4gICAgaWYgKGUuY2hlY2tlZCkgdGhpcy5hZGRDb2x1bW4oY29sLmZpZWxkKTtcclxuICAgIGVsc2UgdGhpcy5kZWxldGVDb2x1bW4oY29sLmZpZWxkKTtcclxuXHJcbiAgICBpZiAoY29sLnBvc2l0aW9uKSB0aGlzLmNvbmZpZy5jb2x1bW5zLnNvcnQodGhpcy5zb3J0QnlQb3NpdGlvbigpKTtcclxuICB9XHJcblxyXG4gIC8vIGFicmlyTWVudUZpbHRybyhlOiBhbnkpIHtcclxuICAvLyAgIHRoaXMubWVudUZpbHRybyA9ICF0aGlzLm1lbnVGaWx0cm87XHJcbiAgLy8gICB0aGlzLmNoZWNrYm94Q2xpY2tlZCA9IGZhbHNlO1xyXG5cclxuICAvLyAgIGlmICh0aGlzLnRhbWFuaG9UZWxhIDwgNzAwKVxyXG4gIC8vICAgICB0aGlzLnN0eWxlU2V0dGVyKCdsZWZ0JywgKHRoaXMuYm90YW9GaWx0cm8ubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0IC0gMjg4KSArICdweCcpXHJcbiAgLy8gICBlbHNlXHJcbiAgLy8gICAgIHRoaXMuc3R5bGVTZXR0ZXIoJ2xlZnQnLCAodGhpcy5ib3Rhb0ZpbHRyby5uYXRpdmVFbGVtZW50Lm9mZnNldExlZnQgKyA0MCkgKyAncHgnKVxyXG5cclxuICAvLyAgIHRoaXMuc3R5bGVTZXR0ZXIoJ3RvcCcsIHRoaXMuYm90YW9GaWx0cm8ubmF0aXZlRWxlbWVudC5vZmZzZXRUb3AgKyAncHgnKVxyXG4gIC8vICAgdGhpcy5zdHlsZVNldHRlcigndmlzaWJpbGl0eScsIHRoaXMubWVudUZpbHRybyA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nKVxyXG4gIC8vIH1cclxuXHJcbiAgLy8gZmVjaGFyTWVudUZpbHRybygpIHtcclxuICAvLyAgIHRoaXMubWVudUZpbHRybyA9IGZhbHNlO1xyXG4gIC8vICAgdGhpcy5jaGVja2JveENsaWNrZWQgPSBmYWxzZTtcclxuXHJcbiAgLy8gICB0aGlzLnN0eWxlU2V0dGVyKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpXHJcbiAgLy8gfVxyXG5cclxuICAvLyBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVzY2FwZScsIFsnJGV2ZW50J10pXHJcbiAgLy8gb25Fc2NhcGVLZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAvLyAgIGlmICh0aGlzLmZpbHRlckNvbHVtbnNCdG4gPT0gdHJ1ZSAmJiB0aGlzLm1lbnVGaWx0cm8gPT0gdHJ1ZSkge1xyXG4gIC8vICAgICB0aGlzLmZlY2hhck1lbnVGaWx0cm8oKTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIC8vIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcclxuICAvLyBvbkNsaWNrRXZlbnQoZXZlbnQ6IGFueSkge1xyXG4gIC8vICAgaWYgKHRoaXMuZmlsdGVyQ29sdW1uc0J0biA9PSB0cnVlICYmIHRoaXMubWVudUZpbHRybyA9PSB0cnVlKSB7XHJcbiAgLy8gICAgIGNvbnN0IGNsaWNrZWRFbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gIC8vICAgICBjb25zdCBtZW51RmlsdHJvRGl2ID1cclxuICAvLyAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjbWVudUZpbHRyb0RpdicpO1xyXG4gIC8vICAgICBjb25zdCBib3Rhb0ZpbHRybyA9XHJcbiAgLy8gICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignI2JvdGFvRmlsdHJvJyk7XHJcbiAgLy8gICAgIGNvbnN0IGlzQ2hlY2tib3hDbGlja2VkID1cclxuICAvLyAgICAgICBjbGlja2VkRWxlbWVudC5jbGFzc0xpc3QudG9TdHJpbmcoKS5pbmNsdWRlcygncC1jaGVja2JveCcpIHx8XHJcbiAgLy8gICAgICAgZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC50b1N0cmluZygpID09ICcnO1xyXG4gIC8vICAgICBjb25zdCBpc0luc2lkZU1lbnUgPVxyXG4gIC8vICAgICAgIG1lbnVGaWx0cm9EaXY/LmNvbnRhaW5zKGNsaWNrZWRFbGVtZW50KSB8fFxyXG4gIC8vICAgICAgIGJvdGFvRmlsdHJvPy5jb250YWlucyhjbGlja2VkRWxlbWVudCkgfHxcclxuICAvLyAgICAgICBpc0NoZWNrYm94Q2xpY2tlZDtcclxuXHJcbiAgLy8gICAgIGlmICghaXNJbnNpZGVNZW51KSB0aGlzLmZlY2hhck1lbnVGaWx0cm8oKTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIGNoZWNrTWVudUZpbHRybyhjb2w6IGFueSkge1xyXG4gICAgbGV0IGRlbGV0ZWRDb2x1bW46IFRhYmxlQ29uZmlnQ29sdW1uIHwgdW5kZWZpbmVkID0gdGhpcy5kZWxldGVkQ29sdW5zLmZpbmQoXHJcbiAgICAgICh4OiBUYWJsZUNvbmZpZ0NvbHVtbikgPT4geC5maWVsZCA9PSBjb2wuZmllbGRcclxuICAgICk7XHJcbiAgICBpZiAoZGVsZXRlZENvbHVtbikgY29sLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgIGVsc2UgY29sLmNoZWNrZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc29ydEJ5UG9zaXRpb24oKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGVsZW0xOiBhbnksIGVsZW0yOiBhbnkpIHtcclxuICAgICAgaWYgKGVsZW0xLnBvc2l0aW9uIDwgZWxlbTIucG9zaXRpb24pIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH0gZWxzZSBpZiAoZWxlbTEucG9zaXRpb24gPiBlbGVtMi5wb3NpdGlvbikge1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgY2FsbERpc2FibGVkKGFjdGlvbjogS3ZNZW51SXRlbSwgZGF0YTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoYWN0aW9uPy5kaXNhYmxlZCkge1xyXG4gICAgICByZXR1cm4gYWN0aW9uLmRpc2FibGVkKGRhdGEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZGluYW1pY0Rpc2FibGVDb2x1bW4oY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGNvbC5maXhlZENvbHVtbikgcmV0dXJuIGNvbC5maXhlZENvbHVtbjtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tIaWRlQ29sdW1ucygpIHtcclxuICAgIGxldCBoaWRlQ29sdW1uc0NvbmZpZyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoXHJcbiAgICAgIChjb2wpID0+IGNvbC5oaWRlQ29sdW1uID09IHRydWVcclxuICAgICk7XHJcbiAgICBoaWRlQ29sdW1uc0NvbmZpZy5mb3JFYWNoKChjb2wpID0+IHRoaXMuZGVsZXRlQ29sdW1uKGNvbC5maWVsZCkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q3VzdG9tVGVtcGxhdGUodGVtcGxhdGVuYW1lOiBzdHJpbmcpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZXNbdGVtcGxhdGVuYW1lXTtcclxuICB9XHJcblxyXG4gIC8vIHN0eWxlU2V0dGVyKHN0eWxlOiBzdHJpbmcsIGRhdGE6IHN0cmluZykge1xyXG4gIC8vICAgdGhpcy5yZW5kZXJlcj8uc2V0U3R5bGUoXHJcbiAgLy8gICAgIHRoaXMubWVudUZpbHRyb0Rpdi5uYXRpdmVFbGVtZW50LFxyXG4gIC8vICAgICBzdHlsZSxcclxuICAvLyAgICAgZGF0YVxyXG4gIC8vICAgKTtcclxuICAvLyB9XHJcblxyXG4gIGZpbHRyb3NBdmFuY2Fkb3NFdmVudChlOiBhbnkpIHtcclxuICAgIHRoaXMuc2hvd0ZpbHRyb3NBdmFuY2Fkb3MgPSAhdGhpcy5zaG93RmlsdHJvc0F2YW5jYWRvcztcclxuICAgIHRoaXMuZmlsdHJvc0F2YW5jYWRvc0VtaXQuZW1pdCh0aGlzLnNob3dGaWx0cm9zQXZhbmNhZG9zKVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2PlxyXG5cclxuICA8cC1wYW5lbFxyXG4gICAgKm5nSWY9XCJmaWx0cm9zQXZhbmNhZG9zXCJcclxuICAgIGhlYWRlcj1cIkZpbHRyb3MgYXZhbsOnYWRvc1wiXHJcbiAgICBbdG9nZ2xlYWJsZV09XCJ0cnVlXCJcclxuICAgIFtjb2xsYXBzZWRdPVwidHJ1ZVwiXHJcbiAgICAoY29sbGFwc2VkQ2hhbmdlKT1cImNvbGxhcHNlZCA9ICFjb2xsYXBzZWRcIlxyXG4gICAgW3N0eWxlXT1cInsnbWFyZ2luLWJvdHRvbSc6ICcycHgnfVwiXHJcbiAgPlxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlcmljb25zXCI+XHJcbiAgICAgIDxpXHJcbiAgICAgICAgKm5nSWY9XCIhY29sbGFwc2VkXCJcclxuICAgICAgICBjbGFzcz1cInBpIHBpLWZpbHRlclwiXHJcbiAgICAgID48L2k+IDwhLS0gw41jb25lIHF1YW5kbyBvIHBhaW5lbCBlc3TDoSBhYmVydG8gLS0+XHJcbiAgICAgIDxpXHJcbiAgICAgICAgKm5nSWY9XCJjb2xsYXBzZWRcIlxyXG4gICAgICAgIGNsYXNzPVwicGkgcGktbWludXNcIlxyXG4gICAgICA+PC9pPiA8IS0tIMONY29uZSBxdWFuZG8gbyBwYWluZWwgZXN0w6EgZmVjaGFkbyAtLT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgPC9wLXBhbmVsPlxyXG5cclxuICA8cC10YWJsZVxyXG4gICAgKm5nSWY9XCJjb25maWdcIlxyXG4gICAgI2R0XHJcbiAgICBzdHlsZUNsYXNzPVwicC1kYXRhdGFibGUtc21cIlxyXG4gICAgW3ZhbHVlXT1cImRhdGFTb3VyY2VcIlxyXG4gICAgWyhzZWxlY3Rpb24pXT1cInNlbGVjdGVkSXRlbXNcIlxyXG4gICAgW3Jvd1NlbGVjdGFibGVdPVwiaXNSb3dTZWxlY3RhYmxlXCJcclxuICAgIFtjb2x1bW5zXT1cImNvbmZpZy5jb2x1bW5zXCJcclxuICAgIFtnbG9iYWxGaWx0ZXJGaWVsZHNdPVwiZ2xvYmFsRmlsdGVyRmllbGRzXCJcclxuICAgIFtyb3dzXT1cInJvd3NcIlxyXG4gICAgW3BhZ2luYXRvcl09XCJwYWdpbmF0b3JcIlxyXG4gICAgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCJyb3dzUGVyUGFnZU9wdGlvbnNcIlxyXG4gICAgW3Nob3dDdXJyZW50UGFnZVJlcG9ydF09XCJ0cnVlXCJcclxuICAgIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJ7Zmlyc3R9IC0ge2xhc3R9IGRlIHt7dG90YWxSZWNvcmRzfX1cIlxyXG4gICAgW3Jvd0hvdmVyXT1cInRydWVcIlxyXG4gICAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxyXG4gICAgW2xhenldPVwiY29uZmlnLmxhenlcIlxyXG4gICAgKG9uTGF6eUxvYWQpPVwicGFnaW5hdGUoJGV2ZW50KVwiXHJcbiAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cInNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcclxuICAgIHJvd0dyb3VwTW9kZT1cInJvd3NwYW5cIlxyXG4gICAgW2dyb3VwUm93c0J5XT1cImNvbmZpZy5maWVsZEdyb3VwXCJcclxuICAgIFtzaG93Rmlyc3RMYXN0SWNvbl09XCJzaG93Rmlyc3RMYXN0SWNvblwiXHJcbiAgICBbcGFnZUxpbmtzXT1cInBhZ2VMaW5rc09wdGlvbnNcIlxyXG4gICAgW3Jlc3BvbnNpdmVdPVwidHJ1ZVwiXHJcbiAgICByZXNwb25zaXZlTGF5b3V0PVwic3RhY2tcIlxyXG4gID5cclxuICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICBwVGVtcGxhdGU9XCJjYXB0aW9uXCJcclxuICAgICAgKm5nSWY9XCJjb25maWcuZW5hYmxlQ2F0aW9uXCJcclxuICAgID5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZmxleC13cmFwIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBncmlkIGZvcm1ncmlkIHAtZmx1aWQgY29sLTEyXCI+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZmxleCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAqbmdJZj1cImNvbmZpZy50aXRsZVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwidGV4dC1tZCBmb250LWJvbGQgbXktM1wiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IGNvbmZpZy50aXRsZSB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICpuZ0lmPVwiY29uZmlnLnN1YnRpdGxlXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXNtIG1iLTQgZm9udC1tZWRpdW1cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7eyBjb25maWcuc3VidGl0bGUgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgbWQ6Y29sLTYgbGc6Y29sLTQge3t0YW1hbmhvVGVsYSA8IDc2OCA/ICdjb2wtMTAnIDogJ2NvbC0xMid9fVwiPlxyXG4gICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgKm5nSWY9XCJjb25maWcuZW5hYmxlRmlsdGVyXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJibG9jayBtdC0yIG1kOm10LTAgcC1pbnB1dC1pY29uLWxlZnQgdGV4dC1hbGlnbi1jZW50ZXJcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBpY29uLXNlYXJjaFwiXHJcbiAgICAgICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBpbmxpbmUtYmxvY2tcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgc2VhcmNoXHJcbiAgICAgICAgICAgIDwvaT5cclxuXHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIHBJbnB1dFRleHRcclxuICAgICAgICAgICAgICBwQXV0b0ZvY3VzXHJcbiAgICAgICAgICAgICAgW2F1dG9mb2N1c109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgKGlucHV0KT1cIm9uR2xvYmFsRmlsdGVyKGR0LCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlBlc3F1aXNhci4uLlwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgbWItMVwiXHJcbiAgICAgICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDQwcHhcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgIDwhLS0gPGJ1dHRvblxyXG4gICAgICAgICAgICBwQnV0dG9uXHJcbiAgICAgICAgICAgICNib3Rhb0ZpbHRyb1xyXG4gICAgICAgICAgICAqbmdJZj1cImZpbHRyb3NBdmFuY2Fkb3NcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXJhaXNlZCBwLWJ1dHRvbi10ZXh0IGFjdGlvbkxvdGVCdG5zXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImZpbHRyb3NBdmFuY2Fkb3NFdmVudChzaG93RmlsdHJvc0F2YW5jYWRvcylcIlxyXG4gICAgICAgICAgICBbcFRvb2x0aXBdPVwiJ0ZpbHRyb3MgYXZhbsOnYWRvcydcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgbWQtMjJcIj4gZmlsdGVyX2FsdCA8L3NwYW4+XHJcbiAgICAgICAgICA8L2J1dHRvbj4gLS0+XHJcblxyXG4gICAgICAgICAgPCEtLSA8ZGl2XHJcbiAgICAgICAgICAjbWVudUZpbHRyb0RpdlxyXG4gICAgICAgICAgaWQgPSBcIm1lbnVGaWx0cm9EaXZcIlxyXG4gICAgICAgICAgW3N0eWxlLnZpc2liaWxpdHldPVwiJ2hpZGRlbidcIlxyXG4gICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSB6LTQgYmctZ3JheS0yMDBcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tFdmVudCgkZXZlbnQpXCJcclxuICAgICAgICA+IC0tPlxyXG5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgI21lbnVGaWx0cm9EaXZcclxuICAgICAgICAgICAgaWQ9XCJtZW51RmlsdHJvRGl2XCJcclxuICAgICAgICAgICAgW3N0eWxlLnZpc2liaWxpdHldPVwiJ2hpZGRlbidcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHotNCBiZy1ncmF5LTIwMCBtZW51LWNvbHVtbnMtZmlsdHJvXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPHAtY2FyZD5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gdGV4dC1tZWRpdW0gdy0xNXJlbVwiXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7IGNoZWNrTWVudUZpbHRybyhjb2wpIH19XHJcbiAgICAgICAgICAgICAgICA8cC1jaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICAjZmlsdGVyQ29sdW1uc1xyXG4gICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29sLmhlYWRlclwiXHJcbiAgICAgICAgICAgICAgICAgIFtiaW5hcnldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tib3gtY29udGFpbmVyXCJcclxuICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cImRpbmFtaWNDb2x1bW5TZXQoJGV2ZW50LCBjb2wpXCJcclxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb2wuY2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWRpbmFtaWNEaXNhYmxlQ29sdW1uKGNvbClcIlxyXG4gICAgICAgICAgICAgICAgPjwvcC1jaGVja2JveD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9wLWNhcmQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgY29sLTEganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGNvbmZpZy5hY3Rpb25zTG90ZVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRucy1vcHRpb25zXCJcclxuICAgICAgICAgICAgW3N0eWxlXT1cInsnbWFyZ2luLXJpZ2h0JzogJzdweCd9XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgIGlkPVwiYWN0aW9uTG90ZUJ0bnNcIlxyXG4gICAgICAgICAgICAgIHBCdXR0b25cclxuICAgICAgICAgICAgICAqbmdJZj1cIihzZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDAgfHwgYWN0aW9uLnNob3dBY29lc0xvdGUpICYmIGV4aWJpckNhbXBvKGFjdGlvbiwgdGhpcy5hY3Rpb24pXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImFjdGlvbkxvdGVCdG5zIHAtYnV0dG9uLXJhaXNlZCBwLWJ1dHRvbi10ZXh0XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aW9uPy5jb21tYW5kKGNvbW1hbmRFdmVudCk7IGFjdGl2ZUl0ZW1Mb3RlKHNlbGVjdGVkSXRlbXMpXCJcclxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwicmV0b3JuYXJDYW1wbyhhY3Rpb24sIHNlbGVjdGVkSXRlbXMsICd0b29sdGlwJylcIlxyXG4gICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2JvdHRvbSdcIlxyXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwicmV0b3JuYXJDYW1wbyhhY3Rpb24sIHNlbGVjdGVkSXRlbXMsICdidG5Db2xvcicpXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicmV0b3JuYXJDYW1wbyhhY3Rpb24sIHNlbGVjdGVkSXRlbXMsICdkaXNhYmxlZCcpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgbWQtMjJcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cIlxyXG4gICAgICAgICAgICAgICAgICByZXRvcm5hckNhbXBvKGFjdGlvbiwgc2VsZWN0ZWRJdGVtcywgJ2ljb25CdG5Db2xvcicpXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7IHJldG9ybmFyQ2FtcG8oYWN0aW9uLCBzZWxlY3RlZEl0ZW1zLCBcImljb25cIikgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgIHBUZW1wbGF0ZT1cImhlYWRlclwiXHJcbiAgICAgIGxldC1jb2x1bW5zXHJcbiAgICA+XHJcbiAgICAgIDx0cj5cclxuICAgICAgICA8dGhcclxuICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDRyZW07IGJvcmRlci1sZWZ0OiBzb2xpZCA0cHggdHJhbnNwYXJlbnRcIlxyXG4gICAgICAgICAgKm5nSWY9XCJjb25maWcuZW5hYmxlU2VsZWN0XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8cC10YWJsZUhlYWRlckNoZWNrYm94IChjbGljayk9XCJhY3RpdmVJdGVtTG90ZShzZWxlY3RlZEl0ZW1zKVwiPjwvcC10YWJsZUhlYWRlckNoZWNrYm94PlxyXG4gICAgICAgIDwvdGg+XHJcblxyXG4gICAgICAgIDx0aFxyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCJcclxuICAgICAgICAgIFtwU29ydGFibGVDb2x1bW5dPVwiY29sLmZpZWxkXCJcclxuICAgICAgICAgIFtwU29ydGFibGVDb2x1bW5EaXNhYmxlZF09XCJjb2wuc29ydGFibGUgPT09IGZhbHNlXCJcclxuICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjb2wud2lkdGhcIlxyXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LXNtXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIFtjbGFzc109XCJcclxuICAgICAgICAgICAgICBjZW50cmFsaXphckNvbHVuYXMoY29sKSAmJiBhbGlnbkNvbHVuYXNIZWFkZXIoY29sKSA9PSAnJ1xyXG4gICAgICAgICAgICAgICAgPyAnZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJ1xyXG4gICAgICAgICAgICAgICAgOiAnZmxleCBmbGV4LXJvdydcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgW3N0eWxlXT1cImFsaWduQ29sdW5hc0hlYWRlcihjb2wpXCJcclxuICAgICAgICAgID5cclxuXHJcblxyXG4gICAgICAgICAgICA8c3Bhbj57eyBjb2wuaGVhZGVyIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8cC1zb3J0SWNvblxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiY29sLnNvcnRhYmxlID09PSB0cnVlXCJcclxuICAgICAgICAgICAgICBbZmllbGRdPVwiY29sLmZpZWxkXCJcclxuICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMTBweFwiXHJcbiAgICAgICAgICAgID48L3Atc29ydEljb24+XHJcblxyXG4gICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiY29sLmhlYWRlclRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgW3BUb29sdGlwXT1cImNvbC5oZWFkZXJUb29sdGlwXCJcclxuICAgICAgICAgICAgPmluZm88L3NwYW4+XHJcblxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC90aD5cclxuICAgICAgICA8dGggKm5nSWY9XCJjb25maWcuYWN0aW9ucyAmJiBjb25maWcuYWN0aW9ucy5sZW5ndGggPiAwXCI+PC90aD5cclxuICAgICAgPC90cj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgIHBUZW1wbGF0ZT1cImJvZHlcIlxyXG4gICAgICBsZXQtcm93RGF0YVxyXG4gICAgICBsZXQtY29sdW1ucz1cImNvbHVtbnNcIlxyXG4gICAgICBsZXQtcm93Z3JvdXA9XCJyb3dncm91cFwiXHJcbiAgICAgIGxldC1yb3dzcGFuPVwicm93c3BhblwiXHJcbiAgICA+XHJcbiAgICAgIDx0ciAoZGJsY2xpY2spPVwiZG91YmxlQ2xpY2soJGV2ZW50LCByb3dEYXRhKVwiPlxyXG4gICAgICAgIDx0ZFxyXG4gICAgICAgICAgKm5nSWY9XCJjb25maWcuZW5hYmxlU2VsZWN0XCJcclxuICAgICAgICAgIFtzdHlsZV09XCJhcHBseVN0eWxlKHJvd0RhdGEsIHsgZmllbGQ6ICdjaGVjay1ib3gnLCBoZWFkZXI6ICcnIH0pXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8IS0tPHAtdGFibGVDaGVja2JveCAqbmdJZj1cImlzVmlzaWJsZUNoZWNrYm94KHJvd0RhdGEpXCItLT5cclxuICAgICAgICAgIDxwLXRhYmxlQ2hlY2tib3hcclxuICAgICAgICAgICAgW3ZhbHVlXT1cInJvd0RhdGFcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZENoZWNrYm94KHJvd0RhdGEpXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2ZUl0ZW1Mb3RlKHNlbGVjdGVkSXRlbXMpXCJcclxuICAgICAgICAgID48L3AtdGFibGVDaGVja2JveD5cclxuICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiPlxyXG4gICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgICpuZ0lmPVwicm93Z3JvdXAgJiYgIWNvbC50ZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgIFthdHRyLnJvd3NwYW5dPVwicm93Z3JvdXAgJiYgY29sLmdyb3VwZWQgPyByb3dzcGFuIDogbnVsbFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwicm93VGFibGVcIlxyXG4gICAgICAgICAgICBbc3R5bGVdPVwiXHJcbiAgICAgICAgICAgICAgYXBwbHlTdHlsZShyb3dEYXRhLCBjb2wpICtcclxuICAgICAgICAgICAgICBjZW50cmFsaXphckNvbHVuYXMoY29sKSArXHJcbiAgICAgICAgICAgICAgYWxpZ25Db2x1bmFzKGNvbClcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldHVyblRvb2x0aXBSb3cocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1jb2x1bW4tdGl0bGVcIj57eyBjb2wuaGVhZGVyIH19Ojwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCIhaXNCb29sZWFuRmllbGQocm93RGF0YSwgY29sKTsgZWxzZSBib29sZWFuRmllbGRcIlxyXG4gICAgICAgICAgICAgIFtjbGFzc109XCJyZXR1cm5Sb3dDbGFzcyhyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWlzQ2hpcEZpZWxkKGNvbCkgJiYgIWNvbC5pY29uRmllbGQgJiYgIWlzSW1hZ2VGaWVsZChjb2wpXCI+XHJcbiAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC5pY29uXCJcclxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNvbC5pY29uICsgJyBtci0yJ1wiXHJcbiAgICAgICAgICAgICAgICA+PC9pPlxyXG4gICAgICAgICAgICAgICAge3sgdHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzQ2hpcEZpZWxkKGNvbCkgJiYgIWNvbC5pY29uRmllbGRcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyZXR1cm5DbGFzc0NoaXAocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwSWNvbihyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgID57e1xyXG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpXHJcbiAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzSW1hZ2VGaWVsZChjb2wpXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW1hZ2VcIlxyXG4gICAgICAgICAgICAgICAgICBbc3JjXT1cImxvYWRJbWFnZShyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiY29sLmljb25GaWVsZFwiXHJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgJ21hdGVyaWFsLWljb25zJzogY29sLmluZEljb25NYXRlcmlhbCxcclxuICAgICAgICAgICAgICAgICdtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIG1yLTInOiAhY29sLmluZEljb25NYXRlcmlhbFxyXG4gICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwSWNvbihyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIHt7IHJldHVybkNsYXNzSWNvbihyb3dEYXRhLCBjb2wpIH19XHJcbiAgICAgICAgICAgIDwvaT5cclxuXHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYm9vbGVhbkZpZWxkPlxyXG4gICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFjb2wuaWNvbkZpZWxkXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgICAgICAgICByb3dEYXRhW2NvbC5maWVsZF0gPyAndGV4dC1ncmVlbi01MDAnIDogJ3RleHQtcmVkLTUwMCdcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgPjxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyByb3dEYXRhW2NvbC5maWVsZF0gPyBcImNoZWNrXCIgOiBcImNsb3NlXCIgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICAgIDx0ZFxyXG4gICAgICAgICAgICAqbmdJZj1cIiFyb3dncm91cCAmJiAhY29sLmdyb3VwZWQgJiYgIWNvbC50ZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgIFtzdHlsZV09XCJcclxuICAgICAgICAgICAgICBhcHBseVN0eWxlKHJvd0RhdGEsIGNvbCkgK1xyXG4gICAgICAgICAgICAgIGNlbnRyYWxpemFyQ29sdW5hcyhjb2wpICtcclxuICAgICAgICAgICAgICBhbGlnbkNvbHVuYXMoY29sKVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInJvd1RhYmxlXCJcclxuICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldHVyblRvb2x0aXBSb3cocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1jb2x1bW4tdGl0bGVcIj57eyBjb2wuaGVhZGVyIH19Ojwvc3Bhbj5cclxuXHJcblxyXG4gICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWlzQm9vbGVhbkZpZWxkKHJvd0RhdGEsIGNvbCk7IGVsc2UgYm9vbGVhbkZpZWxkXCJcclxuICAgICAgICAgICAgICBbY2xhc3NdPVwicmV0dXJuUm93Q2xhc3Mocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc0NoaXBGaWVsZChjb2wpICYmICFjb2wuaWNvbkZpZWxkICYmICFpc0ltYWdlRmllbGQoY29sKVwiPlxyXG4gICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuaWNvblwiXHJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjb2wuaWNvbiArICcgbXItMidcIlxyXG4gICAgICAgICAgICAgICAgPjwvaT5cclxuICAgICAgICAgICAgICAgIHt7IHRyYW5zZm9ybVZhbHVlKHJvd0RhdGEsIGNvbCkgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0NoaXBGaWVsZChjb2wpICYmICFjb2wuaWNvbkZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicmV0dXJuQ2xhc3NDaGlwKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwicmV0dXJuVG9vbHRpcEljb24ocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHRyYW5zZm9ybVZhbHVlKHJvd0RhdGEsIGNvbCkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNJbWFnZUZpZWxkKGNvbClcIj5cclxuICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbWFnZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzcmNdPVwibG9hZEltYWdlKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuaWNvbkZpZWxkXCJcclxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAnbWF0ZXJpYWwtaWNvbnMnOiBjb2wuaW5kSWNvbk1hdGVyaWFsLFxyXG4gICAgICAgICAgICAgICAgJ21hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgbXItMic6ICFjb2wuaW5kSWNvbk1hdGVyaWFsXHJcbiAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldHVyblRvb2x0aXBJY29uKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge3sgcmV0dXJuQ2xhc3NJY29uKHJvd0RhdGEsIGNvbCkgfX1cclxuICAgICAgICAgICAgPC9pPlxyXG5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNib29sZWFuRmllbGQ+XHJcbiAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNvbC5pY29uRmllbGRcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICAgICAgICAgIHJvd0RhdGFbY29sLmZpZWxkXSA/ICd0ZXh0LWdyZWVuLTUwMCcgOiAndGV4dC1yZWQtNTAwJ1xyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICA+PHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHJvd0RhdGFbY29sLmZpZWxkXSA/IFwiY2hlY2tcIiA6IFwiY2xvc2VcIiB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvdGQ+XHJcblxyXG4gICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgICpuZ0lmPVwiY29sLnRlbXBsYXRlXCJcclxuICAgICAgICAgICAgW3N0eWxlXT1cIlxyXG4gICAgICAgICAgICAgIGFwcGx5U3R5bGUocm93RGF0YSwgY29sKSArXHJcbiAgICAgICAgICAgICAgY2VudHJhbGl6YXJDb2x1bmFzKGNvbCkgK1xyXG4gICAgICAgICAgICAgIGFsaWduQ29sdW5hcyhjb2wpXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwicm93VGFibGVcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtY29sdW1uLXRpdGxlXCI+e3sgY29sLmhlYWRlciB9fTo8L3NwYW4+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAqbmdJZj1cImdldEN1c3RvbVRlbXBsYXRlKGNvbC50ZW1wbGF0ZS5uYW1lKVwiXHJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ2V0Q3VzdG9tVGVtcGxhdGUoY29sLnRlbXBsYXRlLm5hbWUpXCJcclxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHJvd0RhdGEgfVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8dGRcclxuICAgICAgICAgICpuZ0lmPVwiY29uZmlnLmFjdGlvbnMgJiYgY29uZmlnLmFjdGlvbnMubGVuZ3RoID4gMFwiXHJcbiAgICAgICAgICBbc3R5bGVdPVwiYXBwbHlTdHlsZShyb3dEYXRhLCB7IGZpZWxkOiAnYnRucy1vcHRpb25zJywgaGVhZGVyOiAnJyB9KVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWVuZCB3LWZ1bGwgZ2FwLTFcIlxyXG4gICAgICAgICAgICAqbmdJZj1cImFjb2VzTGluaGFUYWJlbGFcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgY29uZmlnLmFjdGlvbnNcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBpZD1cImFjdGlvbkJ0bnNcIlxyXG4gICAgICAgICAgICAgICAgcEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJleGliaXJDYW1wbyhhY3Rpb24sIHJvd0RhdGEpXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uQnRucyBwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXJhaXNlZFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZlSXRlbShyb3dEYXRhKTsgYWN0aW9uPy5jb21tYW5kKGNvbW1hbmRFdmVudClcIlxyXG4gICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldG9ybmFyQ2FtcG8oYWN0aW9uLCByb3dEYXRhLCAndG9vbHRpcCcpXCJcclxuICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiYWN0aW9uLnRvb2x0aXBQb3NpdGlvbiA/IGFjdGlvbi50b29sdGlwUG9zaXRpb24gOiAnYm90dG9tJ1wiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY2FsbERpc2FibGVkKGFjdGlvbiwgcm93RGF0YSlcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBtZC0xOVwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyByZXRvcm5hckNhbXBvKGFjdGlvbiwgcm93RGF0YSwgXCJpY29uXCIpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWVuZCB3LWZ1bGxcIlxyXG4gICAgICAgICAgICAqbmdJZj1cIiFhY29lc0xpbmhhVGFiZWxhXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPCEtLSA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgaWQ9XCJtb3JlVmVydEJ0blwiXHJcbiAgICAgICAgICAgICAgcEJ1dHRvblxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uQnRucyBwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXJhaXNlZFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm1lbnUudG9nZ2xlKCRldmVudCk7IGFjdGl2ZUl0ZW0ocm93RGF0YSlcIlxyXG4gICAgICAgICAgICA+IC0tPlxyXG4gICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBjdXJzb3ItcG9pbnRlciBpY29uLW1vcmUtaG9yaXpcIlxyXG4gICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAyMHB4XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwibWVudS50b2dnbGUoJGV2ZW50KTsgYWN0aXZlSXRlbShyb3dEYXRhKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICBtb3JlX2hvcml6XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPCEtLSA8L2J1dHRvbj4gLS0+XHJcblxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgY29uZmlnLmFjdGlvbnNcIj5cclxuICAgICAgICAgICAgICB7eyBjcmlhck1lbnVzTW9kYWwocm93RGF0YSkgfX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIDxkaXYgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb25maWcuYWN0aW9uc1wiPlxyXG4gICAgICAgICAgICAgIHt7IGNyaWFyTWVudXNNb2RhbChyb3dEYXRhKSB9fVxyXG4gICAgICAgICAgICA8L2Rpdj4gLS0+XHJcblxyXG4gICAgICAgICAgICA8cC1tZW51XHJcbiAgICAgICAgICAgICAgI21lbnVcclxuICAgICAgICAgICAgICBbcG9wdXBdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgW21vZGVsXT1cIm1lbnVJdGVtc1wiXHJcbiAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCJcclxuICAgICAgICAgICAgPjwvcC1tZW51PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgPC90cj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiXHJcbiAgICAgIGxldC1jb2x1bW5zXHJcbiAgICA+XHJcbiAgICAgIDx0cj5cclxuICAgICAgICA8dGRcclxuICAgICAgICAgIFthdHRyLmNvbHNwYW5dPVwiY29sdW1ucy5sZW5ndGggKyAyXCJcclxuICAgICAgICAgIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweCAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8cCBjbGFzcz1cImZvbnQtbWVkaXVtIG0tMFwiPiBOZW5odW0gcmVnaXN0cm8gZW5jb250cmFkbyA8L3A+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgPC90cj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9wLXRhYmxlPlxyXG48L2Rpdj5cclxuXHJcbjxsaW5rXHJcbiAgcmVsPVwic3R5bGVzaGVldFwiXHJcbiAgaHJlZj1cImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vaWNvbj9mYW1pbHk9TWF0ZXJpYWwrSWNvbnNcIlxyXG4vPlxyXG5cclxuPGxpbmtcclxuICByZWw9XCJzdHlsZXNoZWV0XCJcclxuICBocmVmPVwiaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1NYXRlcmlhbCtTeW1ib2xzK091dGxpbmVkOm9wc3osd2dodCxGSUxMLEdSQURANDgsNDAwLDAsMFwiXHJcbi8+Il19
|