@gnggln/ng-ui-system 1.0.0-alpha.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/esm2022/gnggln-ng-ui-system.mjs +5 -0
- package/esm2022/lib/components/accordion/accordion.component.mjs +353 -0
- package/esm2022/lib/components/accordion/accordion.types.mjs +6 -0
- package/esm2022/lib/components/accordion/index.mjs +2 -0
- package/esm2022/lib/components/base-layout/base-layout.component.mjs +218 -0
- package/esm2022/lib/components/base-layout/base-layout.types.mjs +6 -0
- package/esm2022/lib/components/base-layout/index.mjs +14 -0
- package/esm2022/lib/components/button/button-area.component.mjs +196 -0
- package/esm2022/lib/components/button/button.component.mjs +164 -0
- package/esm2022/lib/components/button/button.types.mjs +6 -0
- package/esm2022/lib/components/button/index.mjs +16 -0
- package/esm2022/lib/components/crud-table/crud-table.component.mjs +789 -0
- package/esm2022/lib/components/crud-table/crud-table.types.mjs +6 -0
- package/esm2022/lib/components/crud-table/index.mjs +16 -0
- package/esm2022/lib/components/form-builder/adapters/it-date-adapter.mjs +82 -0
- package/esm2022/lib/components/form-builder/directives/currency-input.directive.mjs +184 -0
- package/esm2022/lib/components/form-builder/form-builder.component.mjs +824 -0
- package/esm2022/lib/components/form-builder/form-wizard.component.mjs +510 -0
- package/esm2022/lib/components/form-builder/index.mjs +19 -0
- package/esm2022/lib/components/form-builder/services/form-condition.service.mjs +132 -0
- package/esm2022/lib/components/form-builder/services/form-validation.service.mjs +381 -0
- package/esm2022/lib/components/form-builder/services/location.service.mjs +140 -0
- package/esm2022/lib/components/form-builder/services/wizard-sync.service.mjs +84 -0
- package/esm2022/lib/components/form-builder/sub-components/error-summary/form-error-summary.component.mjs +161 -0
- package/esm2022/lib/components/form-builder/sub-components/file-input/file-input.component.mjs +310 -0
- package/esm2022/lib/components/form-builder/sub-components/specifica-territoriale/specifica-territoriale.component.mjs +648 -0
- package/esm2022/lib/components/form-builder/sub-components/table-territoriale/table-territoriale.component.mjs +432 -0
- package/esm2022/lib/components/form-builder/types/condition.types.mjs +6 -0
- package/esm2022/lib/components/form-builder/types/field.types.mjs +6 -0
- package/esm2022/lib/components/form-builder/types/index.mjs +2 -0
- package/esm2022/lib/components/form-builder/types/schema.types.mjs +6 -0
- package/esm2022/lib/components/form-builder/types/territoriale.types.mjs +6 -0
- package/esm2022/lib/components/form-builder/types/validation.types.mjs +6 -0
- package/esm2022/lib/components/form-builder-editor/form-builder-editor.component.mjs +730 -0
- package/esm2022/lib/components/form-builder-editor/form-builder-editor.service.mjs +56 -0
- package/esm2022/lib/components/form-builder-editor/index.mjs +21 -0
- package/esm2022/lib/components/form-builder-editor/services/editor-persistence.service.mjs +190 -0
- package/esm2022/lib/components/form-builder-editor/services/editor-state.service.mjs +324 -0
- package/esm2022/lib/components/form-builder-editor/services/field-factory.service.mjs +188 -0
- package/esm2022/lib/components/form-builder-editor/sub-components/condition-editor/condition-editor.component.mjs +667 -0
- package/esm2022/lib/components/form-builder-editor/sub-components/editor-toolbar/editor-toolbar.component.mjs +317 -0
- package/esm2022/lib/components/form-builder-editor/sub-components/field-config-panel/field-config-panel.component.mjs +611 -0
- package/esm2022/lib/components/form-builder-editor/sub-components/field-palette/field-palette.component.mjs +267 -0
- package/esm2022/lib/components/form-builder-editor/sub-components/form-values-panel/form-values-panel.component.mjs +276 -0
- package/esm2022/lib/components/form-builder-editor/sub-components/options-editor/options-editor.component.mjs +323 -0
- package/esm2022/lib/components/form-builder-editor/sub-components/preview-container/preview-container.component.mjs +238 -0
- package/esm2022/lib/components/form-builder-editor/sub-components/section-editor/section-editor.component.mjs +472 -0
- package/esm2022/lib/components/form-builder-editor/sub-components/validation-editor/validation-editor.component.mjs +473 -0
- package/esm2022/lib/components/form-builder-editor/types/editor.types.mjs +6 -0
- package/esm2022/lib/components/layout-builder/index.mjs +18 -0
- package/esm2022/lib/components/layout-builder/layout-builder.component.mjs +1730 -0
- package/esm2022/lib/components/layout-builder/layout-builder.types.mjs +9 -0
- package/esm2022/lib/components/layout-builder/layout.service.mjs +239 -0
- package/esm2022/lib/components/modal/confirm-dialog.component.mjs +151 -0
- package/esm2022/lib/components/modal/index.mjs +4 -0
- package/esm2022/lib/components/modal/modal.component.mjs +139 -0
- package/esm2022/lib/components/modal/modal.service.mjs +194 -0
- package/esm2022/lib/components/modal/modal.types.mjs +6 -0
- package/esm2022/lib/components/page-header/breadcrumb.service.mjs +242 -0
- package/esm2022/lib/components/page-header/index.mjs +20 -0
- package/esm2022/lib/components/page-header/page-header.component.mjs +243 -0
- package/esm2022/lib/components/page-header/page-header.types.mjs +21 -0
- package/esm2022/lib/components/table/index.mjs +2 -0
- package/esm2022/lib/components/table/paginated-table.component.mjs +407 -0
- package/esm2022/lib/components/table/table.types.mjs +6 -0
- package/esm2022/lib/core/types/index.mjs +6 -0
- package/esm2022/lib/core/utils/index.mjs +53 -0
- package/esm2022/lib/sources/location-data.opt.json +8942 -0
- package/esm2022/lib/sources/nazioni.opt.json +215 -0
- package/esm2022/public-api.mjs +34 -0
- package/fesm2022/gnggln-ng-ui-system.mjs +55752 -0
- package/fesm2022/gnggln-ng-ui-system.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/components/accordion/accordion.component.d.ts +118 -0
- package/lib/components/accordion/accordion.types.d.ts +62 -0
- package/lib/components/accordion/index.d.ts +2 -0
- package/lib/components/base-layout/base-layout.component.d.ts +83 -0
- package/lib/components/base-layout/base-layout.types.d.ts +26 -0
- package/lib/components/base-layout/index.d.ts +13 -0
- package/lib/components/button/button-area.component.d.ts +88 -0
- package/lib/components/button/button.component.d.ts +55 -0
- package/lib/components/button/button.types.d.ts +70 -0
- package/lib/components/button/index.d.ts +15 -0
- package/lib/components/crud-table/crud-table.component.d.ts +143 -0
- package/lib/components/crud-table/crud-table.types.d.ts +207 -0
- package/lib/components/crud-table/index.d.ts +15 -0
- package/lib/components/form-builder/adapters/it-date-adapter.d.ts +32 -0
- package/lib/components/form-builder/directives/currency-input.directive.d.ts +48 -0
- package/lib/components/form-builder/form-builder.component.d.ts +183 -0
- package/lib/components/form-builder/form-wizard.component.d.ts +87 -0
- package/lib/components/form-builder/index.d.ts +13 -0
- package/lib/components/form-builder/services/form-condition.service.d.ts +46 -0
- package/lib/components/form-builder/services/form-validation.service.d.ts +63 -0
- package/lib/components/form-builder/services/location.service.d.ts +83 -0
- package/lib/components/form-builder/services/wizard-sync.service.d.ts +63 -0
- package/lib/components/form-builder/sub-components/error-summary/form-error-summary.component.d.ts +28 -0
- package/lib/components/form-builder/sub-components/file-input/file-input.component.d.ts +41 -0
- package/lib/components/form-builder/sub-components/specifica-territoriale/specifica-territoriale.component.d.ts +145 -0
- package/lib/components/form-builder/sub-components/table-territoriale/table-territoriale.component.d.ts +108 -0
- package/lib/components/form-builder/types/condition.types.d.ts +51 -0
- package/lib/components/form-builder/types/field.types.d.ts +288 -0
- package/lib/components/form-builder/types/index.d.ts +5 -0
- package/lib/components/form-builder/types/schema.types.d.ts +227 -0
- package/lib/components/form-builder/types/territoriale.types.d.ts +170 -0
- package/lib/components/form-builder/types/validation.types.d.ts +174 -0
- package/lib/components/form-builder-editor/form-builder-editor.component.d.ts +117 -0
- package/lib/components/form-builder-editor/form-builder-editor.service.d.ts +38 -0
- package/lib/components/form-builder-editor/index.d.ts +15 -0
- package/lib/components/form-builder-editor/services/editor-persistence.service.d.ts +42 -0
- package/lib/components/form-builder-editor/services/editor-state.service.d.ts +66 -0
- package/lib/components/form-builder-editor/services/field-factory.service.d.ts +28 -0
- package/lib/components/form-builder-editor/sub-components/condition-editor/condition-editor.component.d.ts +139 -0
- package/lib/components/form-builder-editor/sub-components/editor-toolbar/editor-toolbar.component.d.ts +43 -0
- package/lib/components/form-builder-editor/sub-components/field-config-panel/field-config-panel.component.d.ts +83 -0
- package/lib/components/form-builder-editor/sub-components/field-palette/field-palette.component.d.ts +40 -0
- package/lib/components/form-builder-editor/sub-components/form-values-panel/form-values-panel.component.d.ts +51 -0
- package/lib/components/form-builder-editor/sub-components/options-editor/options-editor.component.d.ts +63 -0
- package/lib/components/form-builder-editor/sub-components/preview-container/preview-container.component.d.ts +68 -0
- package/lib/components/form-builder-editor/sub-components/section-editor/section-editor.component.d.ts +82 -0
- package/lib/components/form-builder-editor/sub-components/validation-editor/validation-editor.component.d.ts +112 -0
- package/lib/components/form-builder-editor/types/editor.types.d.ts +124 -0
- package/lib/components/layout-builder/index.d.ts +16 -0
- package/lib/components/layout-builder/layout-builder.component.d.ts +85 -0
- package/lib/components/layout-builder/layout-builder.types.d.ts +436 -0
- package/lib/components/layout-builder/layout.service.d.ts +100 -0
- package/lib/components/modal/confirm-dialog.component.d.ts +46 -0
- package/lib/components/modal/index.d.ts +4 -0
- package/lib/components/modal/modal.component.d.ts +44 -0
- package/lib/components/modal/modal.service.d.ts +93 -0
- package/lib/components/modal/modal.types.d.ts +110 -0
- package/lib/components/page-header/breadcrumb.service.d.ts +96 -0
- package/lib/components/page-header/index.d.ts +16 -0
- package/lib/components/page-header/page-header.component.d.ts +59 -0
- package/lib/components/page-header/page-header.types.d.ts +96 -0
- package/lib/components/table/index.d.ts +2 -0
- package/lib/components/table/paginated-table.component.d.ts +85 -0
- package/lib/components/table/table.types.d.ts +81 -0
- package/lib/core/types/index.d.ts +57 -0
- package/lib/core/utils/index.d.ts +29 -0
- package/package.json +44 -0
- package/public-api.d.ts +22 -0
|
@@ -0,0 +1,473 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';
|
|
2
|
+
import { FormsModule } from '@angular/forms';
|
|
3
|
+
import { MatCardModule } from '@angular/material/card';
|
|
4
|
+
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
5
|
+
import { MatInputModule } from '@angular/material/input';
|
|
6
|
+
import { MatSelectModule } from '@angular/material/select';
|
|
7
|
+
import { LucideAngularModule } from 'lucide-angular';
|
|
8
|
+
import { UiButtonComponent } from '../../../button/index';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "@angular/forms";
|
|
11
|
+
import * as i2 from "@angular/material/card";
|
|
12
|
+
import * as i3 from "@angular/material/form-field";
|
|
13
|
+
import * as i4 from "@angular/material/input";
|
|
14
|
+
import * as i5 from "@angular/material/select";
|
|
15
|
+
import * as i6 from "@angular/material/core";
|
|
16
|
+
import * as i7 from "lucide-angular";
|
|
17
|
+
/**
|
|
18
|
+
* Editor per le regole di validazione dei campi.
|
|
19
|
+
*
|
|
20
|
+
* Permette di aggiungere, modificare e rimuovere regole di validazione
|
|
21
|
+
* per un campo del form builder. Supporta validazioni standard,
|
|
22
|
+
* cross-field, date e file.
|
|
23
|
+
*
|
|
24
|
+
* @selector ui-validation-editor
|
|
25
|
+
*/
|
|
26
|
+
export class UiValidationEditorComponent {
|
|
27
|
+
constructor() {
|
|
28
|
+
/** Lista delle regole di validazione da editare. */
|
|
29
|
+
this.validations = [];
|
|
30
|
+
/** Emesso quando la lista di regole viene modificata. */
|
|
31
|
+
this.validationsChange = new EventEmitter();
|
|
32
|
+
/** Opzioni disponibili per il tipo di validazione. */
|
|
33
|
+
this.validationTypes = [
|
|
34
|
+
{ value: 'required', label: 'Obbligatorio' },
|
|
35
|
+
{ value: 'email', label: 'Email' },
|
|
36
|
+
{ value: 'min', label: 'Valore minimo' },
|
|
37
|
+
{ value: 'max', label: 'Valore massimo' },
|
|
38
|
+
{ value: 'minLength', label: 'Lunghezza minima' },
|
|
39
|
+
{ value: 'maxLength', label: 'Lunghezza massima' },
|
|
40
|
+
{ value: 'pattern', label: 'Pattern (regex)' },
|
|
41
|
+
{ value: 'crossField', label: 'Cross-field' },
|
|
42
|
+
{ value: 'date-min', label: 'Data minima' },
|
|
43
|
+
{ value: 'date-max', label: 'Data massima' },
|
|
44
|
+
{ value: 'fileSize', label: 'Dimensione file' },
|
|
45
|
+
{ value: 'fileType', label: 'Tipo file' },
|
|
46
|
+
{ value: 'fileCount', label: 'Numero file' },
|
|
47
|
+
];
|
|
48
|
+
/** Opzioni per gli operatori di confronto cross-field. */
|
|
49
|
+
this.crossFieldOperators = [
|
|
50
|
+
{ value: 'greater_than', label: 'Maggiore di' },
|
|
51
|
+
{ value: 'greater_equal', label: 'Maggiore o uguale' },
|
|
52
|
+
{ value: 'less_than', label: 'Minore di' },
|
|
53
|
+
{ value: 'less_equal', label: 'Minore o uguale' },
|
|
54
|
+
{ value: 'not_equal', label: 'Diverso da' },
|
|
55
|
+
];
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Verifica se il tipo di validazione richiede un campo valore.
|
|
59
|
+
* @param type - Tipo di validazione da verificare
|
|
60
|
+
* @returns true se il tipo richiede un valore
|
|
61
|
+
*/
|
|
62
|
+
requiresValue(type) {
|
|
63
|
+
return ['min', 'max', 'minLength', 'maxLength', 'pattern', 'fileSize', 'fileCount'].includes(type);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Restituisce il placeholder appropriato per il campo valore
|
|
67
|
+
* in base al tipo di validazione selezionato.
|
|
68
|
+
* @param type - Tipo di validazione
|
|
69
|
+
* @returns Stringa placeholder
|
|
70
|
+
*/
|
|
71
|
+
getValuePlaceholder(type) {
|
|
72
|
+
const placeholders = {
|
|
73
|
+
min: 'Valore numerico minimo',
|
|
74
|
+
max: 'Valore numerico massimo',
|
|
75
|
+
minLength: 'Lunghezza minima (numero)',
|
|
76
|
+
maxLength: 'Lunghezza massima (numero)',
|
|
77
|
+
pattern: 'Espressione regolare (regex)',
|
|
78
|
+
fileSize: 'Dimensione massima in bytes',
|
|
79
|
+
fileCount: 'Numero massimo di file',
|
|
80
|
+
};
|
|
81
|
+
return placeholders[type] || 'Inserisci valore';
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Aggiunge una nuova regola di validazione con valori predefiniti.
|
|
85
|
+
*/
|
|
86
|
+
addValidation() {
|
|
87
|
+
const updated = [...this.validations, { type: 'required', message: '' }];
|
|
88
|
+
this.emitChange(updated);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Rimuove la regola di validazione all'indice specificato.
|
|
92
|
+
* @param index - Indice della regola da rimuovere
|
|
93
|
+
*/
|
|
94
|
+
removeValidation(index) {
|
|
95
|
+
const updated = this.validations.filter((_, i) => i !== index);
|
|
96
|
+
this.emitChange(updated);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Gestisce il cambio del tipo di validazione.
|
|
100
|
+
* Se il tipo diventa 'crossField', inizializza la configurazione cross-field.
|
|
101
|
+
* @param index - Indice della regola
|
|
102
|
+
* @param type - Nuovo tipo di validazione
|
|
103
|
+
*/
|
|
104
|
+
onTypeChange(index, type) {
|
|
105
|
+
const updated = this.cloneValidations();
|
|
106
|
+
updated[index] = { ...updated[index], type };
|
|
107
|
+
// Inizializza la configurazione cross-field se necessario
|
|
108
|
+
if (type === 'crossField' && !updated[index].crossField) {
|
|
109
|
+
updated[index].crossField = {
|
|
110
|
+
targetField: '',
|
|
111
|
+
operator: 'greater_than',
|
|
112
|
+
dataType: 'number',
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
this.emitChange(updated);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Gestisce il cambio del valore della regola.
|
|
119
|
+
* @param index - Indice della regola
|
|
120
|
+
* @param value - Nuovo valore
|
|
121
|
+
*/
|
|
122
|
+
onValueChange(index, value) {
|
|
123
|
+
const updated = this.cloneValidations();
|
|
124
|
+
updated[index] = { ...updated[index], value };
|
|
125
|
+
this.emitChange(updated);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Gestisce il cambio del messaggio di errore.
|
|
129
|
+
* @param index - Indice della regola
|
|
130
|
+
* @param message - Nuovo messaggio
|
|
131
|
+
*/
|
|
132
|
+
onMessageChange(index, message) {
|
|
133
|
+
const updated = this.cloneValidations();
|
|
134
|
+
updated[index] = { ...updated[index], message };
|
|
135
|
+
this.emitChange(updated);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Gestisce il cambio del campo target nella configurazione cross-field.
|
|
139
|
+
* @param index - Indice della regola
|
|
140
|
+
* @param targetField - Nuova chiave del campo target
|
|
141
|
+
*/
|
|
142
|
+
onCrossFieldTargetChange(index, targetField) {
|
|
143
|
+
const updated = this.cloneValidations();
|
|
144
|
+
updated[index] = {
|
|
145
|
+
...updated[index],
|
|
146
|
+
crossField: {
|
|
147
|
+
...updated[index].crossField,
|
|
148
|
+
targetField,
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
this.emitChange(updated);
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Gestisce il cambio dell'operatore nella configurazione cross-field.
|
|
155
|
+
* @param index - Indice della regola
|
|
156
|
+
* @param operator - Nuovo operatore
|
|
157
|
+
*/
|
|
158
|
+
onCrossFieldOperatorChange(index, operator) {
|
|
159
|
+
const updated = this.cloneValidations();
|
|
160
|
+
updated[index] = {
|
|
161
|
+
...updated[index],
|
|
162
|
+
crossField: {
|
|
163
|
+
...updated[index].crossField,
|
|
164
|
+
operator,
|
|
165
|
+
},
|
|
166
|
+
};
|
|
167
|
+
this.emitChange(updated);
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Gestisce il cambio del tipo di dato nella configurazione cross-field.
|
|
171
|
+
* @param index - Indice della regola
|
|
172
|
+
* @param dataType - Nuovo tipo di dato ('date' | 'number')
|
|
173
|
+
*/
|
|
174
|
+
onCrossFieldDataTypeChange(index, dataType) {
|
|
175
|
+
const updated = this.cloneValidations();
|
|
176
|
+
updated[index] = {
|
|
177
|
+
...updated[index],
|
|
178
|
+
crossField: {
|
|
179
|
+
...updated[index].crossField,
|
|
180
|
+
dataType,
|
|
181
|
+
},
|
|
182
|
+
};
|
|
183
|
+
this.emitChange(updated);
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Clona l'array delle validazioni per garantire immutabilita.
|
|
187
|
+
* @returns Copia superficiale dell'array di validazioni
|
|
188
|
+
*/
|
|
189
|
+
cloneValidations() {
|
|
190
|
+
return this.validations.map((v) => ({ ...v }));
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Emette l'evento di cambio validazioni.
|
|
194
|
+
* @param validations - Nuova lista di validazioni
|
|
195
|
+
*/
|
|
196
|
+
emitChange(validations) {
|
|
197
|
+
this.validations = validations;
|
|
198
|
+
this.validationsChange.emit(validations);
|
|
199
|
+
}
|
|
200
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiValidationEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
201
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: UiValidationEditorComponent, isStandalone: true, selector: "ui-validation-editor", inputs: { validations: "validations" }, outputs: { validationsChange: "validationsChange" }, ngImport: i0, template: `
|
|
202
|
+
<!-- Intestazione con titolo e pulsante aggiungi -->
|
|
203
|
+
<div class="ui-validation-editor__header">
|
|
204
|
+
<h4 class="ui-validation-editor__title">Regole di Validazione</h4>
|
|
205
|
+
<ui-button
|
|
206
|
+
icon="plus"
|
|
207
|
+
variant="ghost"
|
|
208
|
+
size="sm"
|
|
209
|
+
tooltip="Aggiungi regola di validazione"
|
|
210
|
+
ariaLabel="Aggiungi regola di validazione"
|
|
211
|
+
(click)="addValidation()"
|
|
212
|
+
/>
|
|
213
|
+
</div>
|
|
214
|
+
|
|
215
|
+
<!-- Lista delle regole di validazione -->
|
|
216
|
+
@if (validations.length > 0) {
|
|
217
|
+
<div class="ui-validation-editor__list">
|
|
218
|
+
@for (rule of validations; track $index) {
|
|
219
|
+
<mat-card class="ui-validation-editor__card" appearance="outlined">
|
|
220
|
+
<mat-card-content>
|
|
221
|
+
<!-- Riga principale: tipo + elimina -->
|
|
222
|
+
<div class="ui-validation-editor__card-row">
|
|
223
|
+
<mat-form-field class="ui-validation-editor__field ui-validation-editor__field--type" appearance="outline">
|
|
224
|
+
<mat-label>Tipo</mat-label>
|
|
225
|
+
<mat-select
|
|
226
|
+
[ngModel]="rule.type"
|
|
227
|
+
(ngModelChange)="onTypeChange($index, $event)"
|
|
228
|
+
>
|
|
229
|
+
@for (opt of validationTypes; track opt.value) {
|
|
230
|
+
<mat-option [value]="opt.value">{{ opt.label }}</mat-option>
|
|
231
|
+
}
|
|
232
|
+
</mat-select>
|
|
233
|
+
</mat-form-field>
|
|
234
|
+
|
|
235
|
+
<ui-button
|
|
236
|
+
icon="trash-2"
|
|
237
|
+
variant="warn"
|
|
238
|
+
size="sm"
|
|
239
|
+
tooltip="Elimina regola"
|
|
240
|
+
ariaLabel="Elimina regola"
|
|
241
|
+
(click)="removeValidation($index)"
|
|
242
|
+
/>
|
|
243
|
+
</div>
|
|
244
|
+
|
|
245
|
+
<!-- Campo valore (se il tipo lo richiede) -->
|
|
246
|
+
@if (requiresValue(rule.type)) {
|
|
247
|
+
<mat-form-field class="ui-validation-editor__field ui-validation-editor__field--full" appearance="outline">
|
|
248
|
+
<mat-label>Valore</mat-label>
|
|
249
|
+
<input
|
|
250
|
+
matInput
|
|
251
|
+
[ngModel]="rule.value"
|
|
252
|
+
(ngModelChange)="onValueChange($index, $event)"
|
|
253
|
+
[placeholder]="getValuePlaceholder(rule.type)"
|
|
254
|
+
/>
|
|
255
|
+
</mat-form-field>
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
<!-- Configurazione cross-field -->
|
|
259
|
+
@if (rule.type === 'crossField') {
|
|
260
|
+
<div class="ui-validation-editor__cross-field">
|
|
261
|
+
<span class="ui-validation-editor__cross-field-label">
|
|
262
|
+
<lucide-icon name="git-compare" [size]="14" />
|
|
263
|
+
Configurazione cross-field
|
|
264
|
+
</span>
|
|
265
|
+
|
|
266
|
+
<mat-form-field class="ui-validation-editor__field ui-validation-editor__field--full" appearance="outline">
|
|
267
|
+
<mat-label>Campo di confronto</mat-label>
|
|
268
|
+
<input
|
|
269
|
+
matInput
|
|
270
|
+
[ngModel]="rule.crossField?.targetField || ''"
|
|
271
|
+
(ngModelChange)="onCrossFieldTargetChange($index, $event)"
|
|
272
|
+
placeholder="Chiave del campo target"
|
|
273
|
+
/>
|
|
274
|
+
</mat-form-field>
|
|
275
|
+
|
|
276
|
+
<div class="ui-validation-editor__card-row">
|
|
277
|
+
<mat-form-field class="ui-validation-editor__field" appearance="outline">
|
|
278
|
+
<mat-label>Operatore</mat-label>
|
|
279
|
+
<mat-select
|
|
280
|
+
[ngModel]="rule.crossField?.operator || 'greater_than'"
|
|
281
|
+
(ngModelChange)="onCrossFieldOperatorChange($index, $event)"
|
|
282
|
+
>
|
|
283
|
+
@for (op of crossFieldOperators; track op.value) {
|
|
284
|
+
<mat-option [value]="op.value">{{ op.label }}</mat-option>
|
|
285
|
+
}
|
|
286
|
+
</mat-select>
|
|
287
|
+
</mat-form-field>
|
|
288
|
+
|
|
289
|
+
<mat-form-field class="ui-validation-editor__field" appearance="outline">
|
|
290
|
+
<mat-label>Tipo dato</mat-label>
|
|
291
|
+
<mat-select
|
|
292
|
+
[ngModel]="rule.crossField?.dataType || 'number'"
|
|
293
|
+
(ngModelChange)="onCrossFieldDataTypeChange($index, $event)"
|
|
294
|
+
>
|
|
295
|
+
<mat-option value="date">Data</mat-option>
|
|
296
|
+
<mat-option value="number">Numero</mat-option>
|
|
297
|
+
</mat-select>
|
|
298
|
+
</mat-form-field>
|
|
299
|
+
</div>
|
|
300
|
+
</div>
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
<!-- Messaggio di errore personalizzato -->
|
|
304
|
+
<mat-form-field class="ui-validation-editor__field ui-validation-editor__field--full" appearance="outline">
|
|
305
|
+
<mat-label>Messaggio di errore</mat-label>
|
|
306
|
+
<textarea
|
|
307
|
+
matInput
|
|
308
|
+
[ngModel]="rule.message || ''"
|
|
309
|
+
(ngModelChange)="onMessageChange($index, $event)"
|
|
310
|
+
placeholder="Messaggio personalizzato..."
|
|
311
|
+
rows="2"
|
|
312
|
+
></textarea>
|
|
313
|
+
</mat-form-field>
|
|
314
|
+
</mat-card-content>
|
|
315
|
+
</mat-card>
|
|
316
|
+
}
|
|
317
|
+
</div>
|
|
318
|
+
} @else {
|
|
319
|
+
<!-- Stato vuoto -->
|
|
320
|
+
<div class="ui-validation-editor__empty">
|
|
321
|
+
<lucide-icon name="ruler" [size]="32" class="ui-validation-editor__empty-icon" />
|
|
322
|
+
<p class="ui-validation-editor__empty-text">Nessuna regola di validazione configurata.</p>
|
|
323
|
+
<p class="ui-validation-editor__empty-hint">
|
|
324
|
+
Clicca il pulsante "+" per aggiungere una regola.
|
|
325
|
+
</p>
|
|
326
|
+
</div>
|
|
327
|
+
}
|
|
328
|
+
`, isInline: true, styles: [":host{display:block}.ui-validation-editor__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--ui-spacing-3)}.ui-validation-editor__title{margin:0;font-size:var(--ui-font-size-sm);font-weight:600;color:var(--ui-color-text)}.ui-validation-editor__list{display:flex;flex-direction:column;gap:var(--ui-spacing-3)}.ui-validation-editor__card{background:var(--ui-color-surface);border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-md);box-shadow:var(--ui-shadow-sm)}.ui-validation-editor__card-row{display:flex;align-items:flex-start;gap:var(--ui-spacing-2)}.ui-validation-editor__field{flex:1;width:100%}.ui-validation-editor__field--type{flex:1}.ui-validation-editor__field--full{width:100%}.ui-validation-editor__cross-field{border:1px dashed var(--ui-color-border);border-radius:var(--ui-radius-sm);padding:var(--ui-spacing-3);margin-bottom:var(--ui-spacing-2);background:var(--ui-color-bg-subtle)}.ui-validation-editor__cross-field-label{display:flex;align-items:center;gap:var(--ui-spacing-1);font-size:var(--ui-font-size-xs);font-weight:600;color:var(--ui-color-text-secondary);margin-bottom:var(--ui-spacing-2)}.ui-validation-editor__empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--ui-spacing-6) var(--ui-spacing-4);border:1px dashed var(--ui-color-border);border-radius:var(--ui-radius-md);background:var(--ui-color-bg-subtle);text-align:center}.ui-validation-editor__empty-icon{color:var(--ui-color-text-muted);margin-bottom:var(--ui-spacing-2)}.ui-validation-editor__empty-text{margin:0;font-size:var(--ui-font-size-sm);color:var(--ui-color-text-secondary)}.ui-validation-editor__empty-hint{margin:var(--ui-spacing-1) 0 0;font-size:var(--ui-font-size-xs);color:var(--ui-color-text-muted)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i2.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i2.MatCardContent, selector: "mat-card-content" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: LucideAngularModule }, { kind: "component", type: i7.LucideAngularComponent, selector: "lucide-angular, lucide-icon, i-lucide, span-lucide", inputs: ["class", "name", "img", "color", "absoluteStrokeWidth", "size", "strokeWidth"] }, { kind: "component", type: UiButtonComponent, selector: "ui-button", inputs: ["label", "tooltip", "variant", "size", "icon", "iconPosition", "loading", "disabled", "fullWidth", "type", "ariaLabel", "customClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
329
|
+
}
|
|
330
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiValidationEditorComponent, decorators: [{
|
|
331
|
+
type: Component,
|
|
332
|
+
args: [{ selector: 'ui-validation-editor', standalone: true, imports: [
|
|
333
|
+
FormsModule,
|
|
334
|
+
MatCardModule,
|
|
335
|
+
MatFormFieldModule,
|
|
336
|
+
MatInputModule,
|
|
337
|
+
MatSelectModule,
|
|
338
|
+
LucideAngularModule,
|
|
339
|
+
UiButtonComponent,
|
|
340
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
341
|
+
<!-- Intestazione con titolo e pulsante aggiungi -->
|
|
342
|
+
<div class="ui-validation-editor__header">
|
|
343
|
+
<h4 class="ui-validation-editor__title">Regole di Validazione</h4>
|
|
344
|
+
<ui-button
|
|
345
|
+
icon="plus"
|
|
346
|
+
variant="ghost"
|
|
347
|
+
size="sm"
|
|
348
|
+
tooltip="Aggiungi regola di validazione"
|
|
349
|
+
ariaLabel="Aggiungi regola di validazione"
|
|
350
|
+
(click)="addValidation()"
|
|
351
|
+
/>
|
|
352
|
+
</div>
|
|
353
|
+
|
|
354
|
+
<!-- Lista delle regole di validazione -->
|
|
355
|
+
@if (validations.length > 0) {
|
|
356
|
+
<div class="ui-validation-editor__list">
|
|
357
|
+
@for (rule of validations; track $index) {
|
|
358
|
+
<mat-card class="ui-validation-editor__card" appearance="outlined">
|
|
359
|
+
<mat-card-content>
|
|
360
|
+
<!-- Riga principale: tipo + elimina -->
|
|
361
|
+
<div class="ui-validation-editor__card-row">
|
|
362
|
+
<mat-form-field class="ui-validation-editor__field ui-validation-editor__field--type" appearance="outline">
|
|
363
|
+
<mat-label>Tipo</mat-label>
|
|
364
|
+
<mat-select
|
|
365
|
+
[ngModel]="rule.type"
|
|
366
|
+
(ngModelChange)="onTypeChange($index, $event)"
|
|
367
|
+
>
|
|
368
|
+
@for (opt of validationTypes; track opt.value) {
|
|
369
|
+
<mat-option [value]="opt.value">{{ opt.label }}</mat-option>
|
|
370
|
+
}
|
|
371
|
+
</mat-select>
|
|
372
|
+
</mat-form-field>
|
|
373
|
+
|
|
374
|
+
<ui-button
|
|
375
|
+
icon="trash-2"
|
|
376
|
+
variant="warn"
|
|
377
|
+
size="sm"
|
|
378
|
+
tooltip="Elimina regola"
|
|
379
|
+
ariaLabel="Elimina regola"
|
|
380
|
+
(click)="removeValidation($index)"
|
|
381
|
+
/>
|
|
382
|
+
</div>
|
|
383
|
+
|
|
384
|
+
<!-- Campo valore (se il tipo lo richiede) -->
|
|
385
|
+
@if (requiresValue(rule.type)) {
|
|
386
|
+
<mat-form-field class="ui-validation-editor__field ui-validation-editor__field--full" appearance="outline">
|
|
387
|
+
<mat-label>Valore</mat-label>
|
|
388
|
+
<input
|
|
389
|
+
matInput
|
|
390
|
+
[ngModel]="rule.value"
|
|
391
|
+
(ngModelChange)="onValueChange($index, $event)"
|
|
392
|
+
[placeholder]="getValuePlaceholder(rule.type)"
|
|
393
|
+
/>
|
|
394
|
+
</mat-form-field>
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
<!-- Configurazione cross-field -->
|
|
398
|
+
@if (rule.type === 'crossField') {
|
|
399
|
+
<div class="ui-validation-editor__cross-field">
|
|
400
|
+
<span class="ui-validation-editor__cross-field-label">
|
|
401
|
+
<lucide-icon name="git-compare" [size]="14" />
|
|
402
|
+
Configurazione cross-field
|
|
403
|
+
</span>
|
|
404
|
+
|
|
405
|
+
<mat-form-field class="ui-validation-editor__field ui-validation-editor__field--full" appearance="outline">
|
|
406
|
+
<mat-label>Campo di confronto</mat-label>
|
|
407
|
+
<input
|
|
408
|
+
matInput
|
|
409
|
+
[ngModel]="rule.crossField?.targetField || ''"
|
|
410
|
+
(ngModelChange)="onCrossFieldTargetChange($index, $event)"
|
|
411
|
+
placeholder="Chiave del campo target"
|
|
412
|
+
/>
|
|
413
|
+
</mat-form-field>
|
|
414
|
+
|
|
415
|
+
<div class="ui-validation-editor__card-row">
|
|
416
|
+
<mat-form-field class="ui-validation-editor__field" appearance="outline">
|
|
417
|
+
<mat-label>Operatore</mat-label>
|
|
418
|
+
<mat-select
|
|
419
|
+
[ngModel]="rule.crossField?.operator || 'greater_than'"
|
|
420
|
+
(ngModelChange)="onCrossFieldOperatorChange($index, $event)"
|
|
421
|
+
>
|
|
422
|
+
@for (op of crossFieldOperators; track op.value) {
|
|
423
|
+
<mat-option [value]="op.value">{{ op.label }}</mat-option>
|
|
424
|
+
}
|
|
425
|
+
</mat-select>
|
|
426
|
+
</mat-form-field>
|
|
427
|
+
|
|
428
|
+
<mat-form-field class="ui-validation-editor__field" appearance="outline">
|
|
429
|
+
<mat-label>Tipo dato</mat-label>
|
|
430
|
+
<mat-select
|
|
431
|
+
[ngModel]="rule.crossField?.dataType || 'number'"
|
|
432
|
+
(ngModelChange)="onCrossFieldDataTypeChange($index, $event)"
|
|
433
|
+
>
|
|
434
|
+
<mat-option value="date">Data</mat-option>
|
|
435
|
+
<mat-option value="number">Numero</mat-option>
|
|
436
|
+
</mat-select>
|
|
437
|
+
</mat-form-field>
|
|
438
|
+
</div>
|
|
439
|
+
</div>
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
<!-- Messaggio di errore personalizzato -->
|
|
443
|
+
<mat-form-field class="ui-validation-editor__field ui-validation-editor__field--full" appearance="outline">
|
|
444
|
+
<mat-label>Messaggio di errore</mat-label>
|
|
445
|
+
<textarea
|
|
446
|
+
matInput
|
|
447
|
+
[ngModel]="rule.message || ''"
|
|
448
|
+
(ngModelChange)="onMessageChange($index, $event)"
|
|
449
|
+
placeholder="Messaggio personalizzato..."
|
|
450
|
+
rows="2"
|
|
451
|
+
></textarea>
|
|
452
|
+
</mat-form-field>
|
|
453
|
+
</mat-card-content>
|
|
454
|
+
</mat-card>
|
|
455
|
+
}
|
|
456
|
+
</div>
|
|
457
|
+
} @else {
|
|
458
|
+
<!-- Stato vuoto -->
|
|
459
|
+
<div class="ui-validation-editor__empty">
|
|
460
|
+
<lucide-icon name="ruler" [size]="32" class="ui-validation-editor__empty-icon" />
|
|
461
|
+
<p class="ui-validation-editor__empty-text">Nessuna regola di validazione configurata.</p>
|
|
462
|
+
<p class="ui-validation-editor__empty-hint">
|
|
463
|
+
Clicca il pulsante "+" per aggiungere una regola.
|
|
464
|
+
</p>
|
|
465
|
+
</div>
|
|
466
|
+
}
|
|
467
|
+
`, styles: [":host{display:block}.ui-validation-editor__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--ui-spacing-3)}.ui-validation-editor__title{margin:0;font-size:var(--ui-font-size-sm);font-weight:600;color:var(--ui-color-text)}.ui-validation-editor__list{display:flex;flex-direction:column;gap:var(--ui-spacing-3)}.ui-validation-editor__card{background:var(--ui-color-surface);border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-md);box-shadow:var(--ui-shadow-sm)}.ui-validation-editor__card-row{display:flex;align-items:flex-start;gap:var(--ui-spacing-2)}.ui-validation-editor__field{flex:1;width:100%}.ui-validation-editor__field--type{flex:1}.ui-validation-editor__field--full{width:100%}.ui-validation-editor__cross-field{border:1px dashed var(--ui-color-border);border-radius:var(--ui-radius-sm);padding:var(--ui-spacing-3);margin-bottom:var(--ui-spacing-2);background:var(--ui-color-bg-subtle)}.ui-validation-editor__cross-field-label{display:flex;align-items:center;gap:var(--ui-spacing-1);font-size:var(--ui-font-size-xs);font-weight:600;color:var(--ui-color-text-secondary);margin-bottom:var(--ui-spacing-2)}.ui-validation-editor__empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--ui-spacing-6) var(--ui-spacing-4);border:1px dashed var(--ui-color-border);border-radius:var(--ui-radius-md);background:var(--ui-color-bg-subtle);text-align:center}.ui-validation-editor__empty-icon{color:var(--ui-color-text-muted);margin-bottom:var(--ui-spacing-2)}.ui-validation-editor__empty-text{margin:0;font-size:var(--ui-font-size-sm);color:var(--ui-color-text-secondary)}.ui-validation-editor__empty-hint{margin:var(--ui-spacing-1) 0 0;font-size:var(--ui-font-size-xs);color:var(--ui-color-text-muted)}\n"] }]
|
|
468
|
+
}], propDecorators: { validations: [{
|
|
469
|
+
type: Input
|
|
470
|
+
}], validationsChange: [{
|
|
471
|
+
type: Output
|
|
472
|
+
}] } });
|
|
473
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctdWktc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9mb3JtLWJ1aWxkZXItZWRpdG9yL3N1Yi1jb21wb25lbnRzL3ZhbGlkYXRpb24tZWRpdG9yL3ZhbGlkYXRpb24tZWRpdG9yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7O0FBdUIxRDs7Ozs7Ozs7R0FRRztBQW1QSCxNQUFNLE9BQU8sMkJBQTJCO0lBbFB4QztRQW1QRSxvREFBb0Q7UUFDM0MsZ0JBQVcsR0FBdUIsRUFBRSxDQUFDO1FBRTlDLHlEQUF5RDtRQUMvQyxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBc0IsQ0FBQztRQUVyRSxzREFBc0Q7UUFDN0Msb0JBQWUsR0FBMkI7WUFDakQsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUU7WUFDNUMsRUFBRSxLQUFLLEVBQUUsT0FB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RSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssVUFBVSxDQUFDLFdBQStCO1FBQ2hELElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDM0MsQ0FBQzsrR0E1TFUsMkJBQTJCO21HQUEzQiwyQkFBMkIsNktBck81Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStIVCxnMURBeElDLFdBQVcsOG1CQUNYLGFBQWEsME5BQ2Isa0JBQWtCLDBTQUNsQixjQUFjLDBXQUNkLGVBQWUsbXJCQUNmLG1CQUFtQixnUEFDbkIsaUJBQWlCOzs0RkF3T1IsMkJBQTJCO2tCQWxQdkMsU0FBUzsrQkFDRSxzQkFBc0IsY0FDcEIsSUFBSSxXQUNQO3dCQUNQLFdBQVc7d0JBQ1gsYUFBYTt3QkFDYixrQkFBa0I7d0JBQ2xCLGNBQWM7d0JBQ2QsZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLGlCQUFpQjtxQkFDbEIsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU0sWUFDckM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErSFQ7OEJBd0dRLFdBQVc7c0JBQW5CLEtBQUs7Z0JBR0ksaUJBQWlCO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRDYXJkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2FyZCc7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcclxuaW1wb3J0IHsgTHVjaWRlQW5ndWxhck1vZHVsZSB9IGZyb20gJ2x1Y2lkZS1hbmd1bGFyJztcclxuaW1wb3J0IHsgVWlCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9idXR0b24vaW5kZXgnO1xyXG5pbXBvcnQgeyBVaVZhbGlkYXRpb25SdWxlLCBVaVZhbGlkYXRpb25UeXBlLCBVaUNyb3NzRmllbGRPcGVyYXRvciB9IGZyb20gJy4uLy4uLy4uL2Zvcm0tYnVpbGRlci90eXBlcy9pbmRleCc7XHJcblxyXG4vKipcclxuICogSW50ZXJmYWNjaWEgcGVyIGxlIG9wemlvbmkgZGVpIHRpcGkgZGkgdmFsaWRhemlvbmUgbmVsbGEgc2VsZWN0LlxyXG4gKi9cclxuaW50ZXJmYWNlIFZhbGlkYXRpb25UeXBlT3B0aW9uIHtcclxuICAvKiogVmFsb3JlIGRlbCB0aXBvIGRpIHZhbGlkYXppb25lLiAqL1xyXG4gIHZhbHVlOiBVaVZhbGlkYXRpb25UeXBlO1xyXG4gIC8qKiBFdGljaGV0dGEgdmlzdWFsaXp6YXRhIG5lbGxhIHNlbGVjdC4gKi9cclxuICBsYWJlbDogc3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuICogSW50ZXJmYWNjaWEgcGVyIGxlIG9wemlvbmkgZGVnbGkgb3BlcmF0b3JpIGNyb3NzLWZpZWxkIG5lbGxhIHNlbGVjdC5cclxuICovXHJcbmludGVyZmFjZSBDcm9zc0ZpZWxkT3BlcmF0b3JPcHRpb24ge1xyXG4gIC8qKiBWYWxvcmUgZGVsbCdvcGVyYXRvcmUuICovXHJcbiAgdmFsdWU6IFVpQ3Jvc3NGaWVsZE9wZXJhdG9yO1xyXG4gIC8qKiBFdGljaGV0dGEgdmlzdWFsaXp6YXRhIG5lbGxhIHNlbGVjdC4gKi9cclxuICBsYWJlbDogc3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuICogRWRpdG9yIHBlciBsZSByZWdvbGUgZGkgdmFsaWRhemlvbmUgZGVpIGNhbXBpLlxyXG4gKlxyXG4gKiBQZXJtZXR0ZSBkaSBhZ2dpdW5nZXJlLCBtb2RpZmljYXJlIGUgcmltdW92ZXJlIHJlZ29sZSBkaSB2YWxpZGF6aW9uZVxyXG4gKiBwZXIgdW4gY2FtcG8gZGVsIGZvcm0gYnVpbGRlci4gU3VwcG9ydGEgdmFsaWRhemlvbmkgc3RhbmRhcmQsXHJcbiAqIGNyb3NzLWZpZWxkLCBkYXRlIGUgZmlsZS5cclxuICpcclxuICogQHNlbGVjdG9yIHVpLXZhbGlkYXRpb24tZWRpdG9yXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3VpLXZhbGlkYXRpb24tZWRpdG9yJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgTWF0Q2FyZE1vZHVsZSxcclxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcclxuICAgIE1hdElucHV0TW9kdWxlLFxyXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxyXG4gICAgTHVjaWRlQW5ndWxhck1vZHVsZSxcclxuICAgIFVpQnV0dG9uQ29tcG9uZW50LFxyXG4gIF0sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDwhLS0gSW50ZXN0YXppb25lIGNvbiB0aXRvbG8gZSBwdWxzYW50ZSBhZ2dpdW5naSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJ1aS12YWxpZGF0aW9uLWVkaXRvcl9faGVhZGVyXCI+XHJcbiAgICAgIDxoNCBjbGFzcz1cInVpLXZhbGlkYXRpb24tZWRpdG9yX190aXRsZVwiPlJlZ29sZSBkaSBWYWxpZGF6aW9uZTwvaDQ+XHJcbiAgICAgIDx1aS1idXR0b25cclxuICAgICAgICBpY29uPVwicGx1c1wiXHJcbiAgICAgICAgdmFyaWFudD1cImdob3N0XCJcclxuICAgICAgICBzaXplPVwic21cIlxyXG4gICAgICAgIHRvb2x0aXA9XCJBZ2dpdW5naSByZWdvbGEgZGkgdmFsaWRhemlvbmVcIlxyXG4gICAgICAgIGFyaWFMYWJlbD1cIkFnZ2l1bmdpIHJlZ29sYSBkaSB2YWxpZGF6aW9uZVwiXHJcbiAgICAgICAgKGNsaWNrKT1cImFkZFZhbGlkYXRpb24oKVwiXHJcbiAgICAgIC8+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIExpc3RhIGRlbGxlIHJlZ29sZSBkaSB2YWxpZGF6aW9uZSAtLT5cclxuICAgIEBpZiAodmFsaWRhdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwidWktdmFsaWRhdGlvbi1lZGl0b3JfX2xpc3RcIj5cclxuICAgICAgICBAZm9yIChydWxlIG9mIHZhbGlkYXRpb25zOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgIDxtYXQtY2FyZCBjbGFzcz1cInVpLXZhbGlkYXRpb24tZWRpdG9yX19jYXJkXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVkXCI+XHJcbiAgICAgICAgICAgIDxtYXQtY2FyZC1jb250ZW50PlxyXG4gICAgICAgICAgICAgIDwhLS0gUmlnYSBwcmluY2lwYWxlOiB0aXBvICsgZWxpbWluYSAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidWktdmFsaWRhdGlvbi1lZGl0b3JfX2NhcmQtcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ1aS12YWxpZGF0aW9uLWVkaXRvcl9fZmllbGQgdWktdmFsaWRhdGlvbi1lZGl0b3JfX2ZpZWxkLS10eXBlXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5UaXBvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwicnVsZS50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblR5cGVDaGFuZ2UoJGluZGV4LCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKG9wdCBvZiB2YWxpZGF0aW9uVHlwZXM7IHRyYWNrIG9wdC52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIm9wdC52YWx1ZVwiPnt7IG9wdC5sYWJlbCB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgICAgICAgICAgPHVpLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICBpY29uPVwidHJhc2gtMlwiXHJcbiAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJ3YXJuXCJcclxuICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtXCJcclxuICAgICAgICAgICAgICAgICAgdG9vbHRpcD1cIkVsaW1pbmEgcmVnb2xhXCJcclxuICAgICAgICAgICAgICAgICAgYXJpYUxhYmVsPVwiRWxpbWluYSByZWdvbGFcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlVmFsaWRhdGlvbigkaW5kZXgpXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gQ2FtcG8gdmFsb3JlIChzZSBpbCB0aXBvIGxvIHJpY2hpZWRlKSAtLT5cclxuICAgICAgICAgICAgICBAaWYgKHJlcXVpcmVzVmFsdWUocnVsZS50eXBlKSkge1xyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidWktdmFsaWRhdGlvbi1lZGl0b3JfX2ZpZWxkIHVpLXZhbGlkYXRpb24tZWRpdG9yX19maWVsZC0tZnVsbFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+VmFsb3JlPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwicnVsZS52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25WYWx1ZUNoYW5nZSgkaW5kZXgsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJnZXRWYWx1ZVBsYWNlaG9sZGVyKHJ1bGUudHlwZSlcIlxyXG4gICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gQ29uZmlndXJhemlvbmUgY3Jvc3MtZmllbGQgLS0+XHJcbiAgICAgICAgICAgICAgQGlmIChydWxlLnR5cGUgPT09ICdjcm9zc0ZpZWxkJykge1xyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVpLXZhbGlkYXRpb24tZWRpdG9yX19jcm9zcy1maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVpLXZhbGlkYXRpb24tZWRpdG9yX19jcm9zcy1maWVsZC1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsdWNpZGUtaWNvbiBuYW1lPVwiZ2l0LWNvbXBhcmVcIiBbc2l6ZV09XCIxNFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJhemlvbmUgY3Jvc3MtZmllbGRcclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidWktdmFsaWRhdGlvbi1lZGl0b3JfX2ZpZWxkIHVpLXZhbGlkYXRpb24tZWRpdG9yX19maWVsZC0tZnVsbFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5DYW1wbyBkaSBjb25mcm9udG88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJydWxlLmNyb3NzRmllbGQ/LnRhcmdldEZpZWxkIHx8ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ3Jvc3NGaWVsZFRhcmdldENoYW5nZSgkaW5kZXgsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJDaGlhdmUgZGVsIGNhbXBvIHRhcmdldFwiXHJcbiAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1aS12YWxpZGF0aW9uLWVkaXRvcl9fY2FyZC1yb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ1aS12YWxpZGF0aW9uLWVkaXRvcl9fZmllbGRcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5PcGVyYXRvcmU8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInJ1bGUuY3Jvc3NGaWVsZD8ub3BlcmF0b3IgfHwgJ2dyZWF0ZXJfdGhhbidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNyb3NzRmllbGRPcGVyYXRvckNoYW5nZSgkaW5kZXgsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChvcCBvZiBjcm9zc0ZpZWxkT3BlcmF0b3JzOyB0cmFjayBvcC52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJvcC52YWx1ZVwiPnt7IG9wLmxhYmVsIH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidWktdmFsaWRhdGlvbi1lZGl0b3JfX2ZpZWxkXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+VGlwbyBkYXRvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJydWxlLmNyb3NzRmllbGQ/LmRhdGFUeXBlIHx8ICdudW1iZXInXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25Dcm9zc0ZpZWxkRGF0YVR5cGVDaGFuZ2UoJGluZGV4LCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJkYXRlXCI+RGF0YTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJudW1iZXJcIj5OdW1lcm88L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gTWVzc2FnZ2lvIGRpIGVycm9yZSBwZXJzb25hbGl6emF0byAtLT5cclxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ1aS12YWxpZGF0aW9uLWVkaXRvcl9fZmllbGQgdWktdmFsaWRhdGlvbi1lZGl0b3JfX2ZpZWxkLS1mdWxsXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+TWVzc2FnZ2lvIGRpIGVycm9yZTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPHRleHRhcmVhXHJcbiAgICAgICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInJ1bGUubWVzc2FnZSB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uTWVzc2FnZUNoYW5nZSgkaW5kZXgsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIk1lc3NhZ2dpbyBwZXJzb25hbGl6emF0by4uLlwiXHJcbiAgICAgICAgICAgICAgICAgIHJvd3M9XCIyXCJcclxuICAgICAgICAgICAgICAgID48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuICAgICAgICAgIDwvbWF0LWNhcmQ+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuICAgIH0gQGVsc2Uge1xyXG4gICAgICA8IS0tIFN0YXRvIHZ1b3RvIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidWktdmFsaWRhdGlvbi1lZGl0b3JfX2VtcHR5XCI+XHJcbiAgICAgICAgPGx1Y2lkZS1pY29uIG5hbWU9XCJydWxlclwiIFtzaXplXT1cIjMyXCIgY2xhc3M9XCJ1aS12YWxpZGF0aW9uLWVkaXRvcl9fZW1wdHktaWNvblwiIC8+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJ1aS12YWxpZGF0aW9uLWVkaXRvcl9fZW1wdHktdGV4dFwiPk5lc3N1bmEgcmVnb2xhIGRpIHZhbGlkYXppb25lIGNvbmZpZ3VyYXRhLjwvcD5cclxuICAgICAgICA8cCBjbGFzcz1cInVpLXZhbGlkYXRpb24tZWRpdG9yX19lbXB0eS1oaW50XCI+XHJcbiAgICAgICAgICBDbGljY2EgaWwgcHVsc2FudGUgXCIrXCIgcGVyIGFnZ2l1bmdlcmUgdW5hIHJlZ29sYS5cclxuICAgICAgICA8L3A+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbXHJcbiAgICBgXHJcbiAgICA6aG9zdCB7XHJcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgfVxyXG5cclxuICAgIC51aS12YWxpZGF0aW9uLWVkaXRvcl9faGVhZGVyIHtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gICAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS11aS1zcGFjaW5nLTMpO1xyXG4gICAgfVxyXG5cclxuICAgIC51aS12YWxpZGF0aW9uLWVkaXRvcl9fdGl0bGUge1xyXG4gICAgICBtYXJnaW46IDA7XHJcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdWktZm9udC1zaXplLXNtKTtcclxuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICAgICAgY29sb3I6IHZhcigtLXVpLWNvbG9yLXRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIC51aS12YWxpZGF0aW9uLWVkaXRvcl9fbGlzdCB7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICAgIGdhcDogdmFyKC0tdWktc3BhY2luZy0zKTtcclxuICAgIH1cclxuXHJcbiAgICAudWktdmFsaWRhdGlvbi1lZGl0b3JfX2NhcmQge1xyXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS11aS1jb2xvci1zdXJmYWNlKTtcclxuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tdWktY29sb3ItYm9yZGVyKTtcclxuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tdWktcmFkaXVzLW1kKTtcclxuICAgICAgYm94LXNoYWRvdzogdmFyKC0tdWktc2hhZG93LXNtKTtcclxuICAgIH1cclxuXHJcbiAgICAudWktdmFsaWRhdGlvbi1lZGl0b3JfX2NhcmQtcm93IHtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XHJcbiAgICAgIGdhcDogdmFyKC0tdWktc3BhY2luZy0yKTtcclxuICAgIH1cclxuXHJcbiAgICAudWktdmFsaWRhdGlvbi1lZGl0b3JfX2ZpZWxkIHtcclxuICAgICAgZmxleDogMTtcclxuICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICB9XHJcblxyXG4gICAgLnVpLXZhbGlkYXRpb24tZWRpdG9yX19maWVsZC0tdHlwZSB7XHJcbiAgICAgIGZsZXg6IDE7XHJcbiAgICB9XHJcblxyXG4gICAgLnVpLXZhbGlkYXRpb24tZWRpdG9yX19maWVsZC0tZnVsbCB7XHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgfVxyXG5cclxuICAgIC51aS12YWxpZGF0aW9uLWVkaXRvcl9fY3Jvc3MtZmllbGQge1xyXG4gICAgICBib3JkZXI6IDFweCBkYXNoZWQgdmFyKC0tdWktY29sb3ItYm9yZGVyKTtcclxuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tdWktcmFkaXVzLXNtKTtcclxuICAgICAgcGFkZGluZzogdmFyKC0tdWktc3BhY2luZy0zKTtcclxuICAgICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tdWktc3BhY2luZy0yKTtcclxuICAgICAgYmFja2dyb3VuZDogdmFyKC0tdWktY29sb3ItYmctc3VidGxlKTtcclxuICAgIH1cclxuXHJcbiAgICAudWktdmFsaWRhdGlvbi1lZGl0b3JfX2Nyb3NzLWZpZWxkLWxhYmVsIHtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgZ2FwOiB2YXIoLS11aS1zcGFjaW5nLTEpO1xyXG4gICAgICBmb250LXNpemU6IHZhcigtLXVpLWZvbnQtc2l6ZS14cyk7XHJcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgICAgIGNvbG9yOiB2YXIoLS11aS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XHJcbiAgICAgIG1hcmdpbi1ib3R0b206IHZhcigtLXVpLXNwYWNpbmctMik7XHJcbiAgICB9XHJcblxyXG4gICAgLnVpLXZhbGlkYXRpb24tZWRpdG9yX19lbXB0eSB7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgICBwYWRkaW5nOiB2YXIoLS11aS1zcGFjaW5nLTYpIHZhcigtLXVpLXNwYWNpbmctNCk7XHJcbiAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCB2YXIoLS11aS1jb2xvci1ib3JkZXIpO1xyXG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS11aS1yYWRpdXMtbWQpO1xyXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS11aS1jb2xvci1iZy1zdWJ0bGUpO1xyXG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgLnVpLXZhbGlkYXRpb24tZWRpdG9yX19lbXB0eS1pY29uIHtcclxuICAgICAgY29sb3I6IHZhcigtLXVpLWNvbG9yLXRleHQtbXV0ZWQpO1xyXG4gICAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS11aS1zcGFjaW5nLTIpO1xyXG4gICAgfVxyXG5cclxuICAgIC51aS12YWxpZGF0aW9uLWVkaXRvcl9fZW1wdHktdGV4dCB7XHJcbiAgICAgIG1hcmdpbjogMDtcclxuICAgICAgZm9udC1zaXplOiB2YXIoLS11aS1mb250LXNpemUtc20pO1xyXG4gICAgICBjb2xvcjogdmFyKC0tdWktY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xyXG4gICAgfVxyXG5cclxuICAgIC51aS12YWxpZGF0aW9uLWVkaXRvcl9fZW1wdHktaGludCB7XHJcbiAgICAgIG1hcmdpbjogdmFyKC0tdWktc3BhY2luZy0xKSAwIDA7XHJcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdWktZm9udC1zaXplLXhzKTtcclxuICAgICAgY29sb3I6IHZhcigtLXVpLWNvbG9yLXRleHQtbXV0ZWQpO1xyXG4gICAgfVxyXG4gIGAsXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFVpVmFsaWRhdGlvbkVkaXRvckNvbXBvbmVudCB7XHJcbiAgLyoqIExpc3RhIGRlbGxlIHJlZ29sZSBkaSB2YWxpZGF6aW9uZSBkYSBlZGl0YXJlLiAqL1xyXG4gIEBJbnB1dCgpIHZhbGlkYXRpb25zOiBVaVZhbGlkYXRpb25SdWxlW10gPSBbXTtcclxuXHJcbiAgLyoqIEVtZXNzbyBxdWFuZG8gbGEgbGlzdGEgZGkgcmVnb2xlIHZpZW5lIG1vZGlmaWNhdGEuICovXHJcbiAgQE91dHB1dCgpIHZhbGlkYXRpb25zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxVaVZhbGlkYXRpb25SdWxlW10+KCk7XHJcblxyXG4gIC8qKiBPcHppb25pIGRpc3BvbmliaWxpIHBlciBpbCB0aXBvIGRpIHZhbGlkYXppb25lLiAqL1xyXG4gIHJlYWRvbmx5IHZhbGlkYXRpb25UeXBlczogVmFsaWRhdGlvblR5cGVPcHRpb25bXSA9IFtcclxuICAgIHsgdmFsdWU6ICdyZXF1aXJlZCcsIGxhYmVsOiAnT2JibGlnYXRvcmlvJyB9LFxyXG4gICAgeyB2YWx1ZTogJ2VtYWlsJywgbGFiZWw6ICdFbWFpbCcgfSxcclxuICAgIHsgdmFsdWU6ICdtaW4nLCBsYWJlbDogJ1ZhbG9yZSBtaW5pbW8nIH0sXHJcbiAgICB7IHZhbHVlOiAnbWF4JywgbGFiZWw6ICdWYWxvcmUgbWFzc2ltbycgfSxcclxuICAgIHsgdmFsdWU6ICdtaW5MZW5ndGgnLCBsYWJlbDogJ0x1bmdoZXp6YSBtaW5pbWEnIH0sXHJcbiAgICB7IHZhbHVlOiAnbWF4TGVuZ3RoJywgbGFiZWw6ICdMdW5naGV6emEgbWFzc2ltYScgfSxcclxuICAgIHsgdmFsdWU6ICdwYXR0ZXJuJywgbGFiZWw6ICdQYXR0ZXJuIChyZWdleCknIH0sXHJcbiAgICB7IHZhbHVlOiAnY3Jvc3NGaWVsZCcsIGxhYmVsOiAnQ3Jvc3MtZmllbGQnIH0sXHJcbiAgICB7IHZhbHVlOiAnZGF0ZS1taW4nLCBsYWJlbDogJ0RhdGEgbWluaW1hJyB9LFxyXG4gICAgeyB2YWx1ZTogJ2RhdGUtbWF4JywgbGFiZWw6ICdEYXRhIG1hc3NpbWEnIH0sXHJcbiAgICB7IHZhbHVlOiAnZmlsZVNpemUnLCBsYWJlbDogJ0RpbWVuc2lvbmUgZmlsZScgfSxcclxuICAgIHsgdmFsdWU6ICdmaWxlVHlwZScsIGxhYmVsOiAnVGlwbyBmaWxlJyB9LFxyXG4gICAgeyB2YWx1ZTogJ2ZpbGVDb3VudCcsIGxhYmVsOiAnTnVtZXJvIGZpbGUnIH0sXHJcbiAgXTtcclxuXHJcbiAgLyoqIE9wemlvbmkgcGVyIGdsaSBvcGVyYXRvcmkgZGkgY29uZnJvbnRvIGNyb3NzLWZpZWxkLiAqL1xyXG4gIHJlYWRvbmx5IGNyb3NzRmllbGRPcGVyYXRvcnM6IENyb3NzRmllbGRPcGVyYXRvck9wdGlvbltdID0gW1xyXG4gICAgeyB2YWx1ZTogJ2dyZWF0ZXJfdGhhbicsIGxhYmVsOiAnTWFnZ2lvcmUgZGknIH0sXHJcbiAgICB7IHZhbHVlOiAnZ3JlYXRlcl9lcXVhbCcsIGxhYmVsOiAnTWFnZ2lvcmUgbyB1Z3VhbGUnIH0sXHJcbiAgICB7IHZhbHVlOiAnbGVzc190aGFuJywgbGFiZWw6ICdNaW5vcmUgZGknIH0sXHJcbiAgICB7IHZhbHVlOiAnbGVzc19lcXVhbCcsIGxhYmVsOiAnTWlub3JlIG8gdWd1YWxlJyB9LFxyXG4gICAgeyB2YWx1ZTogJ25vdF9lcXVhbCcsIGxhYmVsOiAnRGl2ZXJzbyBkYScgfSxcclxuICBdO1xyXG5cclxuICAvKipcclxuICAgKiBWZXJpZmljYSBzZSBpbCB0aXBvIGRpIHZhbGlkYXppb25lIHJpY2hpZWRlIHVuIGNhbXBvIHZhbG9yZS5cclxuICAgKiBAcGFyYW0gdHlwZSAtIFRpcG8gZGkgdmFsaWRhemlvbmUgZGEgdmVyaWZpY2FyZVxyXG4gICAqIEByZXR1cm5zIHRydWUgc2UgaWwgdGlwbyByaWNoaWVkZSB1biB2YWxvcmVcclxuICAgKi9cclxuICByZXF1aXJlc1ZhbHVlKHR5cGU6IFVpVmFsaWRhdGlvblR5cGUpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBbJ21pbicsICdtYXgnLCAnbWluTGVuZ3RoJywgJ21heExlbmd0aCcsICdwYXR0ZXJuJywgJ2ZpbGVTaXplJywgJ2ZpbGVDb3VudCddLmluY2x1ZGVzKHR5cGUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzdGl0dWlzY2UgaWwgcGxhY2Vob2xkZXIgYXBwcm9wcmlhdG8gcGVyIGlsIGNhbXBvIHZhbG9yZVxyXG4gICAqIGluIGJhc2UgYWwgdGlwbyBkaSB2YWxpZGF6aW9uZSBzZWxlemlvbmF0by5cclxuICAgKiBAcGFyYW0gdHlwZSAtIFRpcG8gZGkgdmFsaWRhemlvbmVcclxuICAgKiBAcmV0dXJucyBTdHJpbmdhIHBsYWNlaG9sZGVyXHJcbiAgICovXHJcbiAgZ2V0VmFsdWVQbGFjZWhvbGRlcih0eXBlOiBVaVZhbGlkYXRpb25UeXBlKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHBsYWNlaG9sZGVyczogUGFydGlhbDxSZWNvcmQ8VWlWYWxpZGF0aW9uVHlwZSwgc3RyaW5nPj4gPSB7XHJcbiAgICAgIG1pbjogJ1ZhbG9yZSBudW1lcmljbyBtaW5pbW8nLFxyXG4gICAgICBtYXg6ICdWYWxvcmUgbnVtZXJpY28gbWFzc2ltbycsXHJcbiAgICAgIG1pbkxlbmd0aDogJ0x1bmdoZXp6YSBtaW5pbWEgKG51bWVybyknLFxyXG4gICAgICBtYXhMZW5ndGg6ICdMdW5naGV6emEgbWFzc2ltYSAobnVtZXJvKScsXHJcbiAgICAgIHBhdHRlcm46ICdFc3ByZXNzaW9uZSByZWdvbGFyZSAocmVnZXgpJyxcclxuICAgICAgZmlsZVNpemU6ICdEaW1lbnNpb25lIG1hc3NpbWEgaW4gYnl0ZXMnLFxyXG4gICAgICBmaWxlQ291bnQ6ICdOdW1lcm8gbWFzc2ltbyBkaSBmaWxlJyxcclxuICAgIH07XHJcbiAgICByZXR1cm4gcGxhY2Vob2xkZXJzW3R5cGVdIHx8ICdJbnNlcmlzY2kgdmFsb3JlJztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFnZ2l1bmdlIHVuYSBudW92YSByZWdvbGEgZGkgdmFsaWRhemlvbmUgY29uIHZhbG9yaSBwcmVkZWZpbml0aS5cclxuICAgKi9cclxuICBhZGRWYWxpZGF0aW9uKCk6IHZvaWQge1xyXG4gICAgY29uc3QgdXBkYXRlZDogVWlWYWxpZGF0aW9uUnVsZVtdID0gWy4uLnRoaXMudmFsaWRhdGlvbnMsIHsgdHlwZTogJ3JlcXVpcmVkJywgbWVzc2FnZTogJycgfV07XHJcbiAgICB0aGlzLmVtaXRDaGFuZ2UodXBkYXRlZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSaW11b3ZlIGxhIHJlZ29sYSBkaSB2YWxpZGF6aW9uZSBhbGwnaW5kaWNlIHNwZWNpZmljYXRvLlxyXG4gICAqIEBwYXJhbSBpbmRleCAtIEluZGljZSBkZWxsYSByZWdvbGEgZGEgcmltdW92ZXJlXHJcbiAgICovXHJcbiAgcmVtb3ZlVmFsaWRhdGlvbihpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBjb25zdCB1cGRhdGVkID0gdGhpcy52YWxpZGF0aW9ucy5maWx0ZXIoKF8sIGkpID0+IGkgIT09IGluZGV4KTtcclxuICAgIHRoaXMuZW1pdENoYW5nZSh1cGRhdGVkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlc3Rpc2NlIGlsIGNhbWJpbyBkZWwgdGlwbyBkaSB2YWxpZGF6aW9uZS5cclxuICAgKiBTZSBpbCB0aXBvIGRpdmVudGEgJ2Nyb3NzRmllbGQnLCBpbml6aWFsaXp6YSBsYSBjb25maWd1cmF6aW9uZSBjcm9zcy1maWVsZC5cclxuICAgKiBAcGFyYW0gaW5kZXggLSBJbmRpY2UgZGVsbGEgcmVnb2xhXHJcbiAgICogQHBhcmFtIHR5cGUgLSBOdW92byB0aXBvIGRpIHZhbGlkYXppb25lXHJcbiAgICovXHJcbiAgb25UeXBlQ2hhbmdlKGluZGV4OiBudW1iZXIsIHR5cGU6IFVpVmFsaWRhdGlvblR5cGUpOiB2b2lkIHtcclxuICAgIGNvbnN0IHVwZGF0ZWQgPSB0aGlzLmNsb25lVmFsaWRhdGlvbnMoKTtcclxuICAgIHVwZGF0ZWRbaW5kZXhdID0geyAuLi51cGRhdGVkW2luZGV4XSwgdHlwZSB9O1xyXG5cclxuICAgIC8vIEluaXppYWxpenphIGxhIGNvbmZpZ3VyYXppb25lIGNyb3NzLWZpZWxkIHNlIG5lY2Vzc2FyaW9cclxuICAgIGlmICh0eXBlID09PSAnY3Jvc3NGaWVsZCcgJiYgIXVwZGF0ZWRbaW5kZXhdLmNyb3NzRmllbGQpIHtcclxuICAgICAgdXBkYXRlZFtpbmRleF0uY3Jvc3NGaWVsZCA9IHtcclxuICAgICAgICB0YXJnZXRGaWVsZDogJycsXHJcbiAgICAgICAgb3BlcmF0b3I6ICdncmVhdGVyX3RoYW4nLFxyXG4gICAgICAgIGRhdGFUeXBlOiAnbnVtYmVyJyxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVtaXRDaGFuZ2UodXBkYXRlZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXN0aXNjZSBpbCBjYW1iaW8gZGVsIHZhbG9yZSBkZWxsYSByZWdvbGEuXHJcbiAgICogQHBhcmFtIGluZGV4IC0gSW5kaWNlIGRlbGxhIHJlZ29sYVxyXG4gICAqIEBwYXJhbSB2YWx1ZSAtIE51b3ZvIHZhbG9yZVxyXG4gICAqL1xyXG4gIG9uVmFsdWVDaGFuZ2UoaW5kZXg6IG51bWJlciwgdmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgdXBkYXRlZCA9IHRoaXMuY2xvbmVWYWxpZGF0aW9ucygpO1xyXG4gICAgdXBkYXRlZFtpbmRleF0gPSB7IC4uLnVwZGF0ZWRbaW5kZXhdLCB2YWx1ZSB9O1xyXG4gICAgdGhpcy5lbWl0Q2hhbmdlKHVwZGF0ZWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2VzdGlzY2UgaWwgY2FtYmlvIGRlbCBtZXNzYWdnaW8gZGkgZXJyb3JlLlxyXG4gICAqIEBwYXJhbSBpbmRleCAtIEluZGljZSBkZWxsYSByZWdvbGFcclxuICAgKiBAcGFyYW0gbWVzc2FnZSAtIE51b3ZvIG1lc3NhZ2dpb1xyXG4gICAqL1xyXG4gIG9uTWVzc2FnZUNoYW5nZShpbmRleDogbnVtYmVyLCBtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IHVwZGF0ZWQgPSB0aGlzLmNsb25lVmFsaWRhdGlvbnMoKTtcclxuICAgIHVwZGF0ZWRbaW5kZXhdID0geyAuLi51cGRhdGVkW2luZGV4XSwgbWVzc2FnZSB9O1xyXG4gICAgdGhpcy5lbWl0Q2hhbmdlKHVwZGF0ZWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2VzdGlzY2UgaWwgY2FtYmlvIGRlbCBjYW1wbyB0YXJnZXQgbmVsbGEgY29uZmlndXJhemlvbmUgY3Jvc3MtZmllbGQuXHJcbiAgICogQHBhcmFtIGluZGV4IC0gSW5kaWNlIGRlbGxhIHJlZ29sYVxyXG4gICAqIEBwYXJhbSB0YXJnZXRGaWVsZCAtIE51b3ZhIGNoaWF2ZSBkZWwgY2FtcG8gdGFyZ2V0XHJcbiAgICovXHJcbiAgb25Dcm9zc0ZpZWxkVGFyZ2V0Q2hhbmdlKGluZGV4OiBudW1iZXIsIHRhcmdldEZpZWxkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IHVwZGF0ZWQgPSB0aGlzLmNsb25lVmFsaWRhdGlvbnMoKTtcclxuICAgIHVwZGF0ZWRbaW5kZXhdID0ge1xyXG4gICAgICAuLi51cGRhdGVkW2luZGV4XSxcclxuICAgICAgY3Jvc3NGaWVsZDoge1xyXG4gICAgICAgIC4uLnVwZGF0ZWRbaW5kZXhdLmNyb3NzRmllbGQhLFxyXG4gICAgICAgIHRhcmdldEZpZWxkLFxyXG4gICAgICB9LFxyXG4gICAgfTtcclxuICAgIHRoaXMuZW1pdENoYW5nZSh1cGRhdGVkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlc3Rpc2NlIGlsIGNhbWJpbyBkZWxsJ29wZXJhdG9yZSBuZWxsYSBjb25maWd1cmF6aW9uZSBjcm9zcy1maWVsZC5cclxuICAgKiBAcGFyYW0gaW5kZXggLSBJbmRpY2UgZGVsbGEgcmVnb2xhXHJcbiAgICogQHBhcmFtIG9wZXJhdG9yIC0gTnVvdm8gb3BlcmF0b3JlXHJcbiAgICovXHJcbiAgb25Dcm9zc0ZpZWxkT3BlcmF0b3JDaGFuZ2UoaW5kZXg6IG51bWJlciwgb3BlcmF0b3I6IFVpQ3Jvc3NGaWVsZE9wZXJhdG9yKTogdm9pZCB7XHJcbiAgICBjb25zdCB1cGRhdGVkID0gdGhpcy5jbG9uZVZhbGlkYXRpb25zKCk7XHJcbiAgICB1cGRhdGVkW2luZGV4XSA9IHtcclxuICAgICAgLi4udXBkYXRlZFtpbmRleF0sXHJcbiAgICAgIGNyb3NzRmllbGQ6IHtcclxuICAgICAgICAuLi51cGRhdGVkW2luZGV4XS5jcm9zc0ZpZWxkISxcclxuICAgICAgICBvcGVyYXRvcixcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgICB0aGlzLmVtaXRDaGFuZ2UodXBkYXRlZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXN0aXNjZSBpbCBjYW1iaW8gZGVsIHRpcG8gZGkgZGF0byBuZWxsYSBjb25maWd1cmF6aW9uZSBjcm9zcy1maWVsZC5cclxuICAgKiBAcGFyYW0gaW5kZXggLSBJbmRpY2UgZGVsbGEgcmVnb2xhXHJcbiAgICogQHBhcmFtIGRhdGFUeXBlIC0gTnVvdm8gdGlwbyBkaSBkYXRvICgnZGF0ZScgfCAnbnVtYmVyJylcclxuICAgKi9cclxuICBvbkNyb3NzRmllbGREYXRhVHlwZUNoYW5nZShpbmRleDogbnVtYmVyLCBkYXRhVHlwZTogJ2RhdGUnIHwgJ251bWJlcicpOiB2b2lkIHtcclxuICAgIGNvbnN0IHVwZGF0ZWQgPSB0aGlzLmNsb25lVmFsaWRhdGlvbnMoKTtcclxuICAgIHVwZGF0ZWRbaW5kZXhdID0ge1xyXG4gICAgICAuLi51cGRhdGVkW2luZGV4XSxcclxuICAgICAgY3Jvc3NGaWVsZDoge1xyXG4gICAgICAgIC4uLnVwZGF0ZWRbaW5kZXhdLmNyb3NzRmllbGQhLFxyXG4gICAgICAgIGRhdGFUeXBlLFxyXG4gICAgICB9LFxyXG4gICAgfTtcclxuICAgIHRoaXMuZW1pdENoYW5nZSh1cGRhdGVkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsb25hIGwnYXJyYXkgZGVsbGUgdmFsaWRhemlvbmkgcGVyIGdhcmFudGlyZSBpbW11dGFiaWxpdGEuXHJcbiAgICogQHJldHVybnMgQ29waWEgc3VwZXJmaWNpYWxlIGRlbGwnYXJyYXkgZGkgdmFsaWRhemlvbmlcclxuICAgKi9cclxuICBwcml2YXRlIGNsb25lVmFsaWRhdGlvbnMoKTogVWlWYWxpZGF0aW9uUnVsZVtdIHtcclxuICAgIHJldHVybiB0aGlzLnZhbGlkYXRpb25zLm1hcCgodikgPT4gKHsgLi4udiB9KSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbWV0dGUgbCdldmVudG8gZGkgY2FtYmlvIHZhbGlkYXppb25pLlxyXG4gICAqIEBwYXJhbSB2YWxpZGF0aW9ucyAtIE51b3ZhIGxpc3RhIGRpIHZhbGlkYXppb25pXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBlbWl0Q2hhbmdlKHZhbGlkYXRpb25zOiBVaVZhbGlkYXRpb25SdWxlW10pOiB2b2lkIHtcclxuICAgIHRoaXMudmFsaWRhdGlvbnMgPSB2YWxpZGF0aW9ucztcclxuICAgIHRoaXMudmFsaWRhdGlvbnNDaGFuZ2UuZW1pdCh2YWxpZGF0aW9ucyk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module ng-ui-system/form-builder-editor
|
|
3
|
+
* Tipi e interfacce per l'editor visuale del form builder.
|
|
4
|
+
*/
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctdWktc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9mb3JtLWJ1aWxkZXItZWRpdG9yL3R5cGVzL2VkaXRvci50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0ciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBtb2R1bGUgbmctdWktc3lzdGVtL2Zvcm0tYnVpbGRlci1lZGl0b3JcbiAqIFRpcGkgZSBpbnRlcmZhY2NlIHBlciBsJ2VkaXRvciB2aXN1YWxlIGRlbCBmb3JtIGJ1aWxkZXIuXG4gKi9cblxuaW1wb3J0IHsgVWlGaWVsZFR5cGUsIFVpRm9ybVNjaGVtYSB9IGZyb20gJy4uLy4uL2Zvcm0tYnVpbGRlci90eXBlcy9pbmRleCc7XG5pbXBvcnQgeyBVaUljb25OYW1lIH0gZnJvbSAnLi4vLi4vLi4vY29yZS90eXBlcyc7XG5cbi8vIOKUgOKUgOKUgCBTdGF0byBkZWxsJ2VkaXRvciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBTdGF0byBjb3JyZW50ZSBkZWxsJ2VkaXRvci5cbiAqIEdlc3RpdG8gZGFsIHNlcnZpemlvIFVpRWRpdG9yU3RhdGVTZXJ2aWNlIHRyYW1pdGUgQmVoYXZpb3JTdWJqZWN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVpRWRpdG9yU3RhdGUge1xuICAvKiogU2NoZW1hIGRlbCBmb3JtIGluIGZhc2UgZGkgZWRpdGluZy4gKi9cbiAgc2NoZW1hOiBVaUZvcm1TY2hlbWE7XG4gIC8qKiBJRCBkZWxsYSBzZXppb25lIGF0dHVhbG1lbnRlIHNlbGV6aW9uYXRhLiAqL1xuICBzZWxlY3RlZFNlY3Rpb25JZDogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIENoaWF2ZSBkZWwgY2FtcG8gYXR0dWFsbWVudGUgc2VsZXppb25hdG8uICovXG4gIHNlbGVjdGVkRmllbGRLZXk6IHN0cmluZyB8IG51bGw7XG4gIC8qKiBJbmRpY2Egc2UgbG8gc2NoZW1hIGUgc3RhdG8gbW9kaWZpY2F0byBkYWxsJ3VsdGltbyBzYWx2YXRhZ2dpby4gKi9cbiAgaXNEaXJ0eTogYm9vbGVhbjtcbiAgLyoqIERhdGEgZGVsbCd1bHRpbW8gc2FsdmF0YWdnaW8uICovXG4gIGxhc3RTYXZlZDogRGF0ZSB8IG51bGw7XG59XG5cbi8vIOKUgOKUgOKUgCBQYWxldHRlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIENhdGVnb3JpZSBwZXIgcmFnZ3J1cHBhcmUgaSB0aXBpIGRpIGNhbXBvIG5lbGxhIHBhbGV0dGUuXG4gKi9cbmV4cG9ydCB0eXBlIFVpRWRpdG9yRmllbGRDYXRlZ29yeSA9ICdiYXNpYycgfCAnY2hvaWNlJyB8ICdkYXRldGltZScgfCAnYWR2YW5jZWQnIHwgJ2N1c3RvbSc7XG5cbi8qKlxuICogRWxlbWVudG8gZGVsbGEgcGFsZXR0ZSBkZWkgdGlwaSBkaSBjYW1wby5cbiAqIFJhcHByZXNlbnRhIHVuIHRpcG8gZGkgY2FtcG8gdHJhc2NpbmFiaWxlIG5lbGxhIHBhbGV0dGUgbGF0ZXJhbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVWlFZGl0b3JGaWVsZFBhbGV0dGVJdGVtIHtcbiAgLyoqIFRpcG8gZGkgY2FtcG8uICovXG4gIHR5cGU6IFVpRmllbGRUeXBlO1xuICAvKiogTm9tZSB2aXN1YWxpenphdG8gbmVsbGEgcGFsZXR0ZS4gKi9cbiAgbGFiZWw6IHN0cmluZztcbiAgLyoqIEljb25hIEx1Y2lkZSBkYSBtb3N0cmFyZS4gKi9cbiAgaWNvbjogVWlJY29uTmFtZTtcbiAgLyoqIERlc2NyaXppb25lIGJyZXZlIGRlbCB0aXBvIGRpIGNhbXBvLiAqL1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAvKiogQ2F0ZWdvcmlhIGRpIGFwcGFydGVuZW56YS4gKi9cbiAgY2F0ZWdvcnk6IFVpRWRpdG9yRmllbGRDYXRlZ29yeTtcbn1cblxuLyoqXG4gKiBDYW1wbyBkaXNwb25pYmlsZSBwZXIgbGEgc2VsZXppb25lIG5lbGxlIGNvbmRpemlvbmkuXG4gKiBWZXJzaW9uZSBzZW1wbGlmaWNhdGEgZGVsIGZpZWxkIGRlc2NyaXB0b3IgcGVyIGxlIHNlbGVjdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVaUVkaXRvckF2YWlsYWJsZUZpZWxkIHtcbiAgLyoqIENoaWF2ZSB1bml2b2NhIGRlbCBjYW1wby4gKi9cbiAga2V5OiBzdHJpbmc7XG4gIC8qKiBMYWJlbCB2aXN1YWxpenphdGEuICovXG4gIGxhYmVsOiBzdHJpbmc7XG4gIC8qKiBUaXBvIGRpIGNhbXBvLiAqL1xuICB0eXBlOiBzdHJpbmc7XG4gIC8qKiBPcHppb25pIChwZXIgY2FtcGkgc2VsZWN0LCByYWRpbywgZXRjLikuICovXG4gIG9wdGlvbnM/OiB7IHZhbHVlOiBhbnk7IGxhYmVsOiBzdHJpbmcgfVtdO1xufVxuXG4vLyDilIDilIDilIAgQnJlYWRjcnVtYiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBFbGVtZW50byBkZWwgYnJlYWRjcnVtYiBkaSBuYXZpZ2F6aW9uZSBkZWxsJ2VkaXRvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVaUVkaXRvckJyZWFkY3J1bWJJdGVtIHtcbiAgLyoqIExhYmVsIHZpc3VhbGl6emF0YS4gKi9cbiAgbGFiZWw6IHN0cmluZztcbiAgLyoqIElEIGRlbGwnZWxlbWVudG8gKGZvcm0sIHNlemlvbmUgbyBjYW1wbykuICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBUaXBvIGRpIGVsZW1lbnRvLiAqL1xuICB0eXBlOiAnZm9ybScgfCAnc2VjdGlvbicgfCAnZmllbGQnO1xuICAvKiogU2UgZSBsJ2VsZW1lbnRvIGF0dHVhbG1lbnRlIGF0dGl2by4gKi9cbiAgYWN0aXZlOiBib29sZWFuO1xufVxuXG4vLyDilIDilIDilIAgUGVyc2lzdGVuemEg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogU3RydXR0dXJhIGRhdGkgcGVyIGlsIHNhbHZhdGFnZ2lvIG5lbCBsb2NhbFN0b3JhZ2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVWlFZGl0b3JTdG9yYWdlRGF0YSB7XG4gIC8qKiBTY2hlbWEgc2FsdmF0by4gKi9cbiAgc2NoZW1hOiBVaUZvcm1TY2hlbWE7XG4gIC8qKiBUaW1lc3RhbXAgZGVsIHNhbHZhdGFnZ2lvIChlcG9jaCBtcykuICovXG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICAvKiogVmVyc2lvbmUgZGVsbG8gc3RvcmFnZSBwZXIgY29tcGF0aWJpbGl0YSBmdXR1cmEuICovXG4gIHZlcnNpb246IHN0cmluZztcbn1cblxuLy8g4pSA4pSA4pSAIFZhbGlkYXppb25lIGRlbGxvIHNjaGVtYSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBSaXN1bHRhdG8gZGVsbGEgdmFsaWRhemlvbmUgZGVsbG8gc2NoZW1hIG5lbGwnZWRpdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVpRWRpdG9yU2NoZW1hVmFsaWRhdGlvblJlc3VsdCB7XG4gIC8qKiBTZSBsbyBzY2hlbWEgZSB2YWxpZG8uICovXG4gIHZhbGlkOiBib29sZWFuO1xuICAvKiogRXJyb3JpIGRpIHZhbGlkYXppb25lLiAqL1xuICBlcnJvcnM6IFVpRWRpdG9yU2NoZW1hVmFsaWRhdGlvbkVycm9yW107XG4gIC8qKiBXYXJuaW5nIGRpIHZhbGlkYXppb25lLiAqL1xuICB3YXJuaW5nczogVWlFZGl0b3JTY2hlbWFWYWxpZGF0aW9uV2FybmluZ1tdO1xufVxuXG4vKipcbiAqIEVycm9yZSBkaSB2YWxpZGF6aW9uZSBkZWxsbyBzY2hlbWEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVWlFZGl0b3JTY2hlbWFWYWxpZGF0aW9uRXJyb3Ige1xuICAvKiogVGlwbyBkaSBlcnJvcmUuICovXG4gIHR5cGU6ICdkdXBsaWNhdGVfa2V5JyB8ICdpbnZhbGlkX3R5cGUnIHwgJ21pc3NpbmdfcmVxdWlyZWQnIHwgJ2ludmFsaWRfcmVmZXJlbmNlJyB8ICdpbnZhbGlkX2Zvcm1hdCc7XG4gIC8qKiBNZXNzYWdnaW8gZGkgZXJyb3JlLiAqL1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIC8qKiBQYXRoIGRlbGwnZWxlbWVudG8gY29uIGVycm9yZSAoZXMuIGBzZWN0aW9uc1swXS5maWVsZHNbMl0ua2V5YCkuICovXG4gIHBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBXYXJuaW5nIGRpIHZhbGlkYXppb25lIGRlbGxvIHNjaGVtYS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVaUVkaXRvclNjaGVtYVZhbGlkYXRpb25XYXJuaW5nIHtcbiAgLyoqIFRpcG8gZGkgd2FybmluZy4gKi9cbiAgdHlwZTogJ21pc3NpbmdfbGFiZWwnIHwgJ2VtcHR5X29wdGlvbnMnIHwgJ3VudXNlZF9maWVsZCcgfCAnY2lyY3VsYXJfY29uZGl0aW9uJztcbiAgLyoqIE1lc3NhZ2dpbyBkaSB3YXJuaW5nLiAqL1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIC8qKiBQYXRoIGRlbGwnZWxlbWVudG8gY29uIHdhcm5pbmcuICovXG4gIHBhdGg6IHN0cmluZztcbn1cblxuLy8g4pSA4pSA4pSAIENvbmZpZ3VyYXppb25lIGVkaXRvciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBEYXRpIHBhc3NhdGkgYWxsYSBtb2RhbGUgZGVsbCdlZGl0b3IuXG4gKiBJbmlldHRhYmlsaSB0cmFtaXRlIE1BVF9ESUFMT0dfREFUQS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVaUVkaXRvckRpYWxvZ0RhdGEge1xuICAvKiogU2NoZW1hIGluaXppYWxlIGRhIGNhcmljYXJlIG5lbGwnZWRpdG9yLiAqL1xuICBpbml0aWFsU2NoZW1hPzogVWlGb3JtU2NoZW1hO1xufVxuIl19
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ng-ui-system — Layout Builder entry point.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```typescript
|
|
6
|
+
* import {
|
|
7
|
+
* UiLayoutBuilderComponent,
|
|
8
|
+
* UiLayoutService,
|
|
9
|
+
* UiLayoutSchema,
|
|
10
|
+
* UiNavItem,
|
|
11
|
+
* } from 'ng-ui-system';
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
// Components
|
|
15
|
+
export { UiLayoutBuilderComponent } from './layout-builder.component';
|
|
16
|
+
// Services
|
|
17
|
+
export { UiLayoutService } from './layout.service';
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy11aS1zeXN0ZW0vc3JjL2xpYi9jb21wb25lbnRzL2xheW91dC1idWlsZGVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7R0FZRztBQUVILGFBQWE7QUFDYixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV0RSxXQUFXO0FBQ1gsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIG5nLXVpLXN5c3RlbSDigJQgTGF5b3V0IEJ1aWxkZXIgZW50cnkgcG9pbnQuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogaW1wb3J0IHtcclxuICogICBVaUxheW91dEJ1aWxkZXJDb21wb25lbnQsXHJcbiAqICAgVWlMYXlvdXRTZXJ2aWNlLFxyXG4gKiAgIFVpTGF5b3V0U2NoZW1hLFxyXG4gKiAgIFVpTmF2SXRlbSxcclxuICogfSBmcm9tICduZy11aS1zeXN0ZW0nO1xyXG4gKiBgYGBcclxuICovXHJcblxyXG4vLyBDb21wb25lbnRzXHJcbmV4cG9ydCB7IFVpTGF5b3V0QnVpbGRlckNvbXBvbmVudCB9IGZyb20gJy4vbGF5b3V0LWJ1aWxkZXIuY29tcG9uZW50JztcclxuXHJcbi8vIFNlcnZpY2VzXHJcbmV4cG9ydCB7IFVpTGF5b3V0U2VydmljZSB9IGZyb20gJy4vbGF5b3V0LnNlcnZpY2UnO1xyXG5cclxuLy8gVHlwZXNcclxuZXhwb3J0IHtcclxuICBVaUxheW91dE1vZGUsXHJcbiAgVWlDb250ZW50VHlwZSxcclxuICBVaUxheW91dEJyZWFkY3J1bWIsXHJcbiAgVWlMYXlvdXRTY2hlbWEsXHJcbiAgVWlOYXZJdGVtLFxyXG4gIFVpTmF2SXRlbVR5cGUsXHJcbiAgVWlOYXZHcm91cCxcclxuICBVaU5hdlNlY3Rpb24sXHJcbiAgVWlOYXZBdXRvRGlzY292ZXJ5Q29uZmlnLFxyXG4gIFVpTGF5b3V0TmF2aWdhdGlvbkNvbmZpZyxcclxuICBVaUxheW91dExvZ28sXHJcbiAgVWlMYXlvdXRIZWFkZXJDb25maWcsXHJcbiAgVWlGb290ZXJMaW5rLFxyXG4gIFVpTGF5b3V0Rm9vdGVyQ29uZmlnLFxyXG4gIFVpRmFiQWN0aW9uLFxyXG4gIFVpTGF5b3V0RmFiQ29uZmlnLFxyXG4gIFVpTGF5b3V0UGFnZUhlYWRlckNvbmZpZyxcclxuICBVaUxheW91dExvYWRlckNvbmZpZyxcclxuICBVaUJhclR5cGUsXHJcbiAgVWlCYXJDb25maWcsXHJcbiAgVWlUb3BiYXJDb25maWcsXHJcbiAgVWlOb3RpZmljYXRpb25CYXJDb25maWcsXHJcbiAgVWlCcmFuZEJhckNvbmZpZyxcclxuICBVaVVzZXJEcm9wZG93bkNvbmZpZyxcclxuICBVaURyb3Bkb3duSXRlbSxcclxuICBVaU5hdmlnYXRpb25CYXJDb25maWcsXHJcbiAgVWlMaW5rc0JhckNvbmZpZyxcclxuICBVaUJhckxpbmtJdGVtLFxyXG59IGZyb20gJy4vbGF5b3V0LWJ1aWxkZXIudHlwZXMnO1xyXG4iXX0=
|