@sarasanalytics-com/design-system 0.0.136 → 0.0.138
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/interfaces/button-interface.mjs +1 -1
- package/esm2022/interfaces/chip-interface.mjs +1 -1
- package/esm2022/interfaces/form-layout.interface.mjs +2 -0
- package/esm2022/interfaces/grid-interface.mjs +1 -1
- package/esm2022/lib/avatar/avatar.component.mjs +3 -3
- package/esm2022/lib/categories-nav/categories-nav.component.mjs +27 -0
- package/esm2022/lib/chips/chips.component.mjs +3 -3
- package/esm2022/lib/data-grid/data-grid.component.mjs +135 -0
- package/esm2022/lib/dialog/dialog.component.mjs +43 -3
- package/esm2022/lib/filter/filter.component.mjs +232 -0
- package/esm2022/lib/form-input/form-input.component.mjs +71 -7
- package/esm2022/lib/form-select/form-select.component.mjs +187 -5
- package/esm2022/lib/grid-cell/grid-cell.component.mjs +173 -25
- package/esm2022/lib/menu/menu-list/menu-item.component.mjs +3 -3
- package/esm2022/lib/menu/menu.component.mjs +3 -3
- package/esm2022/lib/message-banner-v2/message-banner-v2.component.mjs +256 -7
- package/esm2022/lib/query-builder/query-builder-demo.component.mjs +134 -0
- package/esm2022/lib/query-builder/query-builder.component.mjs +275 -0
- package/esm2022/lib/query-builder/query-builder.service.mjs +107 -0
- package/esm2022/lib/query-builder-textarea/query-builder-textarea-demo.component.mjs +130 -0
- package/esm2022/lib/query-builder-textarea/query-builder-textarea.component.mjs +805 -0
- package/esm2022/lib/tool-tip/tool-tip.component.mjs +8 -3
- package/esm2022/public-api.mjs +10 -1
- package/fesm2022/sarasanalytics-com-design-system.mjs +3042 -587
- package/fesm2022/sarasanalytics-com-design-system.mjs.map +1 -1
- package/interfaces/button-interface.d.ts +1 -0
- package/interfaces/form-layout.interface.d.ts +59 -0
- package/interfaces/grid-interface.d.ts +11 -4
- package/lib/categories-nav/categories-nav.component.d.ts +15 -0
- package/lib/data-grid/data-grid.component.d.ts +33 -0
- package/lib/dialog/dialog.component.d.ts +13 -0
- package/lib/filter/filter.component.d.ts +83 -0
- package/lib/form-input/form-input.component.d.ts +11 -1
- package/lib/form-select/form-select.component.d.ts +8 -0
- package/lib/grid-cell/grid-cell.component.d.ts +51 -10
- package/lib/message-banner-v2/message-banner-v2.component.d.ts +34 -2
- package/lib/query-builder/query-builder-demo.component.d.ts +14 -0
- package/lib/query-builder/query-builder.component.d.ts +90 -0
- package/lib/query-builder/query-builder.service.d.ts +39 -0
- package/lib/query-builder-textarea/query-builder-textarea-demo.component.d.ts +9 -0
- package/lib/query-builder-textarea/query-builder-textarea.component.d.ts +143 -0
- package/lib/tool-tip/tool-tip.component.d.ts +2 -1
- package/package.json +1 -1
- package/public-api.d.ts +9 -0
|
@@ -4,8 +4,16 @@ import { IconService } from '../icon/icon.service';
|
|
|
4
4
|
import { ButtonComponent } from '../button/button.component';
|
|
5
5
|
import { HttpClientModule } from '@angular/common/http';
|
|
6
6
|
import { IconComponent } from '../icon/icon.component';
|
|
7
|
+
import { MessageBannerComponent } from '../message-banner/message-banner.component';
|
|
8
|
+
import { FormInputComponent } from '../form-input/form-input.component';
|
|
9
|
+
import { FormSelectComponent } from '../form-select/form-select.component';
|
|
10
|
+
import { FormsModule, FormGroup, ReactiveFormsModule } from '@angular/forms';
|
|
11
|
+
import { FormlyModule } from '@ngx-formly/core';
|
|
12
|
+
import { ChipsComponent } from '../chips/chips.component';
|
|
7
13
|
import * as i0 from "@angular/core";
|
|
8
14
|
import * as i1 from "@angular/common";
|
|
15
|
+
import * as i2 from "@angular/forms";
|
|
16
|
+
import * as i3 from "@ngx-formly/core";
|
|
9
17
|
export class MessageBannerV2Component {
|
|
10
18
|
constructor() {
|
|
11
19
|
// State management using signals
|
|
@@ -26,9 +34,57 @@ export class MessageBannerV2Component {
|
|
|
26
34
|
description: this.sanitizeDescription(currentState.description)
|
|
27
35
|
};
|
|
28
36
|
});
|
|
37
|
+
this.banner = {};
|
|
38
|
+
this.formConfig = null;
|
|
39
|
+
this.form = new FormGroup({});
|
|
40
|
+
this.model = {};
|
|
41
|
+
this.fields = [];
|
|
42
|
+
this.onFormEvent = new EventEmitter();
|
|
29
43
|
this.buttons = [];
|
|
30
44
|
this.buttonClick = new EventEmitter();
|
|
31
45
|
}
|
|
46
|
+
// Computed properties for unified access
|
|
47
|
+
get activeFormInputs() {
|
|
48
|
+
return this.formConfig?.fields || [];
|
|
49
|
+
}
|
|
50
|
+
get activeChips() {
|
|
51
|
+
return this.formConfig?.chips || [];
|
|
52
|
+
}
|
|
53
|
+
get activeCustomFormButton() {
|
|
54
|
+
return this.formConfig?.customButton || [];
|
|
55
|
+
}
|
|
56
|
+
get activeDivider() {
|
|
57
|
+
return this.formConfig?.divider?.enabled ?? false;
|
|
58
|
+
}
|
|
59
|
+
get activeDividerConfig() {
|
|
60
|
+
return this.formConfig?.divider || {};
|
|
61
|
+
}
|
|
62
|
+
get activeFormLayout() {
|
|
63
|
+
return this.formConfig?.layout || {};
|
|
64
|
+
}
|
|
65
|
+
onChipRemove(chip) {
|
|
66
|
+
this.onFormEvent.emit({ type: 'chip-remove', data: chip });
|
|
67
|
+
}
|
|
68
|
+
onAddUser() {
|
|
69
|
+
let clickedButton = this.activeCustomFormButton;
|
|
70
|
+
if (Array.isArray(this.activeCustomFormButton)) {
|
|
71
|
+
clickedButton = this.activeCustomFormButton.find(btn => btn.text === 'Add User' || btn.id === 'add-user' || btn.action === 'add-user');
|
|
72
|
+
}
|
|
73
|
+
this.onFormEvent.emit({ type: 'custom-button-click', data: clickedButton });
|
|
74
|
+
if (clickedButton?.resetForm !== false) {
|
|
75
|
+
this.model = {};
|
|
76
|
+
this.form.reset();
|
|
77
|
+
this.activeFormInputs?.forEach(input => {
|
|
78
|
+
input.value = '';
|
|
79
|
+
});
|
|
80
|
+
this.updateFormlyFields();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
areAllFieldsFilled() {
|
|
84
|
+
if (!this.activeFormInputs || this.activeFormInputs.length < 4)
|
|
85
|
+
return false;
|
|
86
|
+
return this.activeFormInputs.every(field => field.value && field.value.trim() !== '');
|
|
87
|
+
}
|
|
32
88
|
set messageIcon(value) {
|
|
33
89
|
this.state.update(s => ({ ...s, messageIcon: value }));
|
|
34
90
|
}
|
|
@@ -49,6 +105,9 @@ export class MessageBannerV2Component {
|
|
|
49
105
|
if (shouldUpdateBasedOnType) {
|
|
50
106
|
this.updateContentBasedOnType(this.messageType || 'default');
|
|
51
107
|
}
|
|
108
|
+
if (changes['formConfig'] || changes['formInputs']) {
|
|
109
|
+
this.updateFormlyFields();
|
|
110
|
+
}
|
|
52
111
|
}
|
|
53
112
|
updateContentBasedOnType(type) {
|
|
54
113
|
// Only apply default content if custom content hasn't been provided
|
|
@@ -98,18 +157,202 @@ export class MessageBannerV2Component {
|
|
|
98
157
|
return description.replace(/support@sarasanalytics\.com/g, '<span class="support-email">support@sarasanalytics.com</span>');
|
|
99
158
|
}
|
|
100
159
|
onButtonClick(button, event) {
|
|
101
|
-
this
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
160
|
+
// Check if this is a form button (from activeCustomFormButton) or regular banner button
|
|
161
|
+
if (!event && (button.action === 'submit' || button.action === 'link' || button.id === 'add-user' || button.id === 'learn-more')) {
|
|
162
|
+
// Handle form buttons with new logic
|
|
163
|
+
if (button.id === 'add-user') {
|
|
164
|
+
// Handle form submission (existing Add User functionality)
|
|
165
|
+
this.onAddUser();
|
|
166
|
+
}
|
|
167
|
+
else if (button.action === 'link' && button.link) {
|
|
168
|
+
// Handle link navigation (Learn More functionality)
|
|
169
|
+
window.open(button.link, '_blank');
|
|
170
|
+
}
|
|
171
|
+
else if (button.onClick) {
|
|
172
|
+
// Handle custom click function
|
|
173
|
+
button.onClick();
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
else if (event) {
|
|
177
|
+
// Handle regular banner buttons with original logic (backward compatibility)
|
|
178
|
+
this.buttonClick.emit({
|
|
179
|
+
type: button.type,
|
|
180
|
+
button,
|
|
181
|
+
originalEvent: event
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
isButtonArray() {
|
|
186
|
+
return Array.isArray(this.activeCustomFormButton);
|
|
187
|
+
}
|
|
188
|
+
isEmptyObject(obj) {
|
|
189
|
+
if (obj) {
|
|
190
|
+
return Object.keys(obj).length === 0;
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
updateFormlyFields() {
|
|
197
|
+
if (!this.formConfig || !this.formConfig.fields || this.formConfig.fields.length === 0) {
|
|
198
|
+
this.fields = [];
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
this.fields = this.formConfig.fields.map((input, index) => {
|
|
202
|
+
// All fields should be side-by-side: Email+Role (row 1), Brands+Use Cases (row 2)
|
|
203
|
+
const cssClass = 'col-6'; // All fields get 50% width for 2x2 grid layout
|
|
204
|
+
const fieldConfig = {
|
|
205
|
+
key: input.label.toLowerCase().replace(/\s+/g, '_'),
|
|
206
|
+
type: input.type === 'text' ? 'sa-input' : 'sa-select',
|
|
207
|
+
className: cssClass, // All fields use col-6 for side-by-side layout
|
|
208
|
+
props: {
|
|
209
|
+
...(input.type === 'text' && {
|
|
210
|
+
placeholder: input.placeholder || input.label,
|
|
211
|
+
required: input.required || false,
|
|
212
|
+
disabled: false,
|
|
213
|
+
params: {
|
|
214
|
+
supportText: '',
|
|
215
|
+
placeholder: input.placeholder || input.label,
|
|
216
|
+
type: input.label === 'Email ID' ? 'multi-value' : 'text',
|
|
217
|
+
multiValue: input.label === 'Email ID',
|
|
218
|
+
chipValues: input.label === 'Email ID' ? [] : undefined
|
|
219
|
+
}
|
|
220
|
+
}),
|
|
221
|
+
...((input.type === 'select' || input.type === 'multiselect') && {
|
|
222
|
+
required: input.required || false,
|
|
223
|
+
closeOnselect: input.type === 'select', // Only close on select for single-select
|
|
224
|
+
isClearable: true,
|
|
225
|
+
bindLabel: index >= 2 ? 'name' : 'label', // Restore original bindLabel logic
|
|
226
|
+
bindValue: 'value',
|
|
227
|
+
options: index >= 2
|
|
228
|
+
? (input.options || []).map(option => ({ ...option, name: option.label }))
|
|
229
|
+
: input.options || [],
|
|
230
|
+
placeholder: input.placeholder || 'Select ' + input.label,
|
|
231
|
+
params: {
|
|
232
|
+
label: input.placeholder || 'Select ' + input.label,
|
|
233
|
+
placeholder: input.placeholder || 'Select ' + input.label,
|
|
234
|
+
multiple: input.type === 'multiselect' || index >= 2, // Enable multiple for multiselect or additional fields
|
|
235
|
+
...(input.type === 'multiselect' || index >= 2) && {
|
|
236
|
+
iconPath: "../assets/closeBlueOutlined.svg",
|
|
237
|
+
type: 'regular',
|
|
238
|
+
state: 'primary',
|
|
239
|
+
filling: 'filled',
|
|
240
|
+
iconPosition: 'right',
|
|
241
|
+
showCheckboxes: true
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
})
|
|
245
|
+
}
|
|
246
|
+
};
|
|
247
|
+
if (input.value) {
|
|
248
|
+
this.model[fieldConfig.key] = input.value;
|
|
249
|
+
}
|
|
250
|
+
return fieldConfig;
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
onFormModelChange(model) {
|
|
254
|
+
// Update the formInputs array when the Formly model changes
|
|
255
|
+
Object.keys(model).forEach(key => {
|
|
256
|
+
const input = this.activeFormInputs.find(input => input.label.toLowerCase().replace(/\s+/g, '_') === key);
|
|
257
|
+
if (input) {
|
|
258
|
+
input.value = model[key];
|
|
259
|
+
// Emit the change event to maintain compatibility with existing logic
|
|
260
|
+
this.onFormEvent.emit({ type: 'form-input-change', data: { label: input.label, value: model[key] } });
|
|
261
|
+
}
|
|
105
262
|
});
|
|
106
263
|
}
|
|
264
|
+
shouldShowAdditionalFields() {
|
|
265
|
+
if (!this.activeFormInputs || this.activeFormInputs.length === 0)
|
|
266
|
+
return false;
|
|
267
|
+
if (!this.activeFormLayout.conditionalFields) {
|
|
268
|
+
const initialCount = this.activeFormLayout.initialVisibleFields || this.activeFormLayout.fieldsPerRow || 2;
|
|
269
|
+
const initialFields = this.activeFormInputs.slice(0, initialCount);
|
|
270
|
+
return initialFields.every(field => field.value && field.value.trim && field.value.trim() !== '');
|
|
271
|
+
}
|
|
272
|
+
return this.activeFormLayout.conditionalFields.showWhen(this.model);
|
|
273
|
+
}
|
|
274
|
+
// Get initial fields to display in the first row
|
|
275
|
+
getInitialFields() {
|
|
276
|
+
if (!this.activeFormInputs)
|
|
277
|
+
return [];
|
|
278
|
+
const initialCount = this.activeFormLayout.initialVisibleFields || this.activeFormLayout.fieldsPerRow || 2;
|
|
279
|
+
return this.activeFormInputs.slice(0, initialCount);
|
|
280
|
+
}
|
|
281
|
+
// Get additional fields to display conditionally
|
|
282
|
+
getAdditionalFields() {
|
|
283
|
+
if (!this.activeFormInputs)
|
|
284
|
+
return [];
|
|
285
|
+
const initialCount = this.activeFormLayout.initialVisibleFields || this.activeFormLayout.fieldsPerRow || 2;
|
|
286
|
+
// If conditional fields are specified, use those indices
|
|
287
|
+
if (this.activeFormLayout.conditionalFields?.fields) {
|
|
288
|
+
return this.activeFormLayout.conditionalFields.fields
|
|
289
|
+
.map(index => this.activeFormInputs[index])
|
|
290
|
+
.filter(field => field); // Remove undefined fields
|
|
291
|
+
}
|
|
292
|
+
// Otherwise, show remaining fields after initial count
|
|
293
|
+
return this.activeFormInputs.slice(initialCount);
|
|
294
|
+
}
|
|
295
|
+
// Get the actual field index for initial fields
|
|
296
|
+
getInitialFieldIndex(localIndex) {
|
|
297
|
+
return localIndex;
|
|
298
|
+
}
|
|
299
|
+
// Get the actual field index for additional fields
|
|
300
|
+
getAdditionalFieldIndex(localIndex) {
|
|
301
|
+
const initialCount = this.activeFormLayout.initialVisibleFields || this.activeFormLayout.fieldsPerRow || 2;
|
|
302
|
+
// If conditional fields are specified, use those indices
|
|
303
|
+
if (this.activeFormLayout.conditionalFields?.fields) {
|
|
304
|
+
return this.activeFormLayout.conditionalFields.fields[localIndex] || 0;
|
|
305
|
+
}
|
|
306
|
+
// Otherwise, offset by initial count
|
|
307
|
+
return initialCount + localIndex;
|
|
308
|
+
}
|
|
309
|
+
// Get CSS class for additional fields to maintain layout
|
|
310
|
+
getAdditionalFieldClass(localIndex) {
|
|
311
|
+
const fieldsPerRow = this.activeFormLayout.fieldsPerRow || 2;
|
|
312
|
+
if (fieldsPerRow === 2) {
|
|
313
|
+
return 'col-6'; // Bootstrap-style 50% width for 2-column layout
|
|
314
|
+
}
|
|
315
|
+
else if (fieldsPerRow === 1) {
|
|
316
|
+
return 'col-12'; // Full width for single column
|
|
317
|
+
}
|
|
318
|
+
else {
|
|
319
|
+
return `col-${12 / fieldsPerRow}`; // Dynamic width based on fields per row
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
// Check if all visible fields are filled and form is valid
|
|
323
|
+
areAllVisibleFieldsFilled() {
|
|
324
|
+
if (!this.activeFormInputs || this.activeFormInputs.length === 0)
|
|
325
|
+
return true;
|
|
326
|
+
// Get all currently visible fields
|
|
327
|
+
const initialFields = this.getInitialFields();
|
|
328
|
+
const additionalFields = this.shouldShowAdditionalFields() ? this.getAdditionalFields() : [];
|
|
329
|
+
const allVisibleFields = [...initialFields, ...additionalFields];
|
|
330
|
+
// Check if all visible fields have values
|
|
331
|
+
const allFieldsFilled = allVisibleFields.every(field => {
|
|
332
|
+
const modelKey = field.label.toLowerCase().replace(/\s+/g, '_');
|
|
333
|
+
const fieldValue = this.model[modelKey];
|
|
334
|
+
if (!fieldValue)
|
|
335
|
+
return false;
|
|
336
|
+
// For string values, check if not empty after trim
|
|
337
|
+
if (typeof fieldValue === 'string') {
|
|
338
|
+
return fieldValue.trim() !== '';
|
|
339
|
+
}
|
|
340
|
+
// For arrays (multi-select), check if not empty
|
|
341
|
+
if (Array.isArray(fieldValue)) {
|
|
342
|
+
return fieldValue.length > 0;
|
|
343
|
+
}
|
|
344
|
+
return true;
|
|
345
|
+
});
|
|
346
|
+
// Also check if the form is valid
|
|
347
|
+
const formValid = this.form.valid;
|
|
348
|
+
return allFieldsFilled && formValid;
|
|
349
|
+
}
|
|
107
350
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: MessageBannerV2Component, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
108
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: MessageBannerV2Component, isStandalone: true, selector: "sa-message-banner-v2", inputs: { messageType: "messageType", contactUrl: "contactUrl", spacingBetweenImageAndDescription: "spacingBetweenImageAndDescription", contentGap: "contentGap", titleClass: "titleClass", descriptionClass: "descriptionClass", messageIcon: "messageIcon", messageIconSize: "messageIconSize", title: "title", description: "description", buttons: "buttons" }, outputs: { buttonClick: "buttonClick" }, providers: [IconService], usesOnChanges: true, ngImport: i0, template: "@if (bannerContent(); as content) {\r\n <div class=\"error-page message-banner-v2\">\r\n <div class=\"content-container\" \r\n [ngStyle]=\"{ gap: contentGap || 'var(--medium-32px, 32px)' }\">\r\n <div class=\"image-container\"\r\n [ngStyle]=\"{ 'margin-bottom': spacingBetweenImageAndDescription ?? 'var(--small-16px, 16px)' }\">\r\n <img [src]=\"content.messageIcon\" \r\n [alt]=\"content.type + ' image'\"\r\n [style.--message-icon-height]=\"content.messageIconSize?.height\"\r\n [style.--message-icon-width]=\"content.messageIconSize?.width\" />\r\n </div>\r\n <div class=\"details\">\r\n <div class=\"title-description\">\r\n <div class=\"title-class\" [ngClass]=\"titleClass || 'title-class'\" [innerHTML]=\"content.title\"></div>\r\n <p class=\"description\" [ngClass]=\"descriptionClass || 'description'\" [innerHTML]=\"content.description\"></p>\r\n </div>\r\n @if(buttons){\r\n <div class=\"button-group\">\r\n @for (button of buttons; track button.text) {\r\n <sa-button \r\n [text]=\"button.text\"\r\n [icon]=\"button.icon\"\r\n [size]=\"button.size\"\r\n [type]=\"button.type\"\r\n [iconPosition]=\"button.iconPosition\"\r\n [buttonIconSize]=\"button.buttonIconSize\"\r\n (onClickEvent)=\"onButtonClick(button, $event)\"\r\n role=\"button\"\r\n [attr.aria-label]=\"button.text\">\r\n </sa-button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n", styles: [".error-page{display:flex;justify-content:center;align-items:center;box-sizing:border-box}.title-class{color:var(--text-highemphasis, #1C1B20);text-align:center;font-family:var(--font-roboto, Roboto);font-size:var(--small-16px, 16px);font-style:normal;font-weight:600;line-height:1.5rem;letter-spacing:.15px}.content-container{display:flex;flex-direction:column;align-items:center;gap:var(--medium-32px, 32px);text-align:center}.image-container{display:flex;justify-content:center;align-items:center;margin-bottom:var(--small-16px, 16px)}.image-container img{height:var(--message-icon-height, 12.5rem);width:var(--message-icon-width, fit-content)}.details{display:flex;flex-direction:column;align-items:center;gap:var(--medium-20px, 20px);text-align:center;background-color:var(--structural-white, #FFF)}::ng-deep .description .support-email{color:var(--primary-500);font-family:var(--font-roboto, Roboto);font-size:14px;font-style:normal;font-weight:500;line-height:1.25rem;letter-spacing:.1px}.description{color:var(--Text-Medium-Emphasis, #6D6979);text-align:center;font-family:var(--font-family, Roboto);font-size:var(--small-14px, 14px);font-style:normal;font-weight:400;line-height:var(--medium-20px, 20px);letter-spacing:.25px;margin:0}.message-banner-v2 .button-group{display:flex;gap:var(--small-8px);justify-content:center}::ng-deep .custom-contact-link{color:var(--primary-500, #7F56D9);font-family:var(--font-roboto, Roboto);font-size:var(--small-16px, 16px);font-style:normal;font-weight:600;line-height:var(--medium-24px);letter-spacing:.15px;text-decoration:none}.access-restricted-title{color:var(--text-highemphasis, #1C1B20);text-align:center;font-family:var(--font-roboto, Roboto);font-size:var(--medium-22px);font-style:normal;font-weight:500;line-height:var(--medium-28px);margin-bottom:var(--small-10px)}.access-restricted-description{text-align:center;font-family:var(--font-roboto, Roboto);font-size:var(--small-16px, 16px);line-height:var(--medium-24px);max-width:44rem;white-space:normal;word-break:break-word}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: ButtonComponent, selector: "sa-button", inputs: ["id", "type", "state", "size", "text", "ImagePath", "icon", "iconPosition", "href", "hrefTarget", "width", "isSubmit", "buttonIconSize", "showSpinner"], outputs: ["onClickEvent", "onMouseInEvent", "onMouseOutEvent"] }, { kind: "ngmodule", type: HttpClientModule }] }); }
|
|
351
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: MessageBannerV2Component, isStandalone: true, selector: "sa-message-banner-v2", inputs: { messageType: "messageType", contactUrl: "contactUrl", spacingBetweenImageAndDescription: "spacingBetweenImageAndDescription", contentGap: "contentGap", titleClass: "titleClass", descriptionClass: "descriptionClass", banner: "banner", formConfig: "formConfig", messageIcon: "messageIcon", messageIconSize: "messageIconSize", title: "title", description: "description", buttons: "buttons" }, outputs: { onFormEvent: "onFormEvent", buttonClick: "buttonClick" }, providers: [IconService], usesOnChanges: true, ngImport: i0, template: "@if (bannerContent(); as content) {\r\n <div class=\"error-page message-banner-v2\">\r\n <div class=\"content-container\" [ngStyle]=\"{ gap: contentGap || 'var(--medium-32px, 32px)' }\">\r\n <div class=\"image-container\"\r\n [ngStyle]=\"{ 'margin-bottom': spacingBetweenImageAndDescription ?? 'var(--small-16px, 16px)' }\">\r\n <img [src]=\"content.messageIcon\" [alt]=\"content.type + ' image'\"\r\n [style.--message-icon-height]=\"content.messageIconSize?.height\"\r\n [style.--message-icon-width]=\"content.messageIconSize?.width\" />\r\n </div>\r\n <div class=\"details\">\r\n <div class=\"title-description\">\r\n <div class=\"title-class\" [ngClass]=\"titleClass || 'title-class'\" [innerHTML]=\"content.title\"></div>\r\n <p class=\"description\" [ngClass]=\"descriptionClass || 'description'\" [innerHTML]=\"content.description\"></p> \r\n <div [ngStyle]=\"{ margin: banner?.spacing + 'px 0px' }\">\r\n <sa-message-banner *ngIf=\"!isEmptyObject(banner)\" [type]=\"banner?.type\" [bannerIcon]=\"banner?.bannerIcon\" [buttonIcon]=\"banner?.buttonIcon\"\r\n [bannerIconSize]=\"banner?.bannerIconSize\" [buttonType]=\"banner?.buttonType\" [buttonSize]=\"banner?.buttonSize\" [buttonIconPosition]=\"banner?.buttonIconPosition\"\r\n [buttonIconSize]=\"banner?.buttonIconSize\" [actionText]=\"banner?.actionText\" >\r\n <div [innerHTML]=\"banner?.text\"></div>\r\n </sa-message-banner>\r\n </div>\r\n </div>\r\n \r\n <!-- Form inputs section -->\r\n <ng-container *ngIf=\"activeFormInputs?.length\">\r\n <form [formGroup]=\"form\" class=\"dialog-form\">\r\n <!-- Initial fields row (dynamic count based on formLayout.fieldsPerRow) -->\r\n <div class=\"form-row\">\r\n <div class=\"form-field-wrapper\" *ngFor=\"let input of getInitialFields(); let i = index\">\r\n <formly-form \r\n [form]=\"form\"\r\n [fields]=\"[fields[getInitialFieldIndex(i)]]\"\r\n [model]=\"model\"\r\n (modelChange)=\"onFormModelChange($event)\">\r\n </formly-form>\r\n </div>\r\n </div>\r\n \r\n <!-- Additional fields (conditional based on formLayout.conditionalFields) -->\r\n <div class=\"additional-fields\" *ngIf=\"shouldShowAdditionalFields()\">\r\n <div class=\"form-row\">\r\n <div class=\"form-field-wrapper\" *ngFor=\"let input of getAdditionalFields(); let i = index\">\r\n <formly-form \r\n [form]=\"form\"\r\n [fields]=\"[fields[getAdditionalFieldIndex(i)]]\"\r\n [model]=\"model\"\r\n (modelChange)=\"onFormModelChange($event)\"\r\n *ngIf=\"fields[getAdditionalFieldIndex(i)]\">\r\n </formly-form>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </ng-container>\r\n \r\n <!-- Custom form button(s) -->\r\n <div class=\"form-button-container\" *ngIf=\"activeCustomFormButton\">\r\n <!-- Support both single button and array of buttons -->\r\n <ng-container *ngIf=\"isButtonArray(); else singleButton\">\r\n <sa-button \r\n *ngFor=\"let button of activeCustomFormButton\"\r\n class=\"action-button\"\r\n [id]=\"button.id\"\r\n [text]=\"button.text\"\r\n [type]=\"button.type\"\r\n [size]=\"button.size\"\r\n [state]=\"button.state\"\r\n [ImagePath]=\"button.ImagePath\"\r\n [iconPosition]=\"button.iconPosition\"\r\n (click)=\"onButtonClick(button)\">\r\n </sa-button>\r\n </ng-container>\r\n \r\n <ng-template #singleButton>\r\n <sa-button class=\"action-button\"\r\n [id]=\"activeCustomFormButton.id\"\r\n [text]=\"activeCustomFormButton.text\"\r\n [type]=\"activeCustomFormButton.type\"\r\n [size]=\"activeCustomFormButton.size\"\r\n [state]=\"activeCustomFormButton.state\"\r\n [ImagePath]=\"activeCustomFormButton.ImagePath\"\r\n [iconPosition]=\"activeCustomFormButton.iconPosition\"\r\n (click)=\"onButtonClick(activeCustomFormButton)\">\r\n </sa-button>\r\n </ng-template>\r\n </div>\r\n \r\n <!-- Divider section -->\r\n <div class=\"divider-section\" *ngIf=\"activeDivider\">\r\n <div class=\"divider\"></div>\r\n <div class=\"divider-header\">\r\n <h3 class=\"divider-title\" *ngIf=\"activeDividerConfig.title\">{{ activeDividerConfig.title }}</h3>\r\n <p class=\"divider-subtitle\" *ngIf=\"activeDividerConfig.subtitle || activeDividerConfig.showSubtitleWhenEmpty\">\r\n {{ activeDividerConfig.subtitle || 'No items added yet' }}\r\n </p>\r\n </div>\r\n \r\n <!-- Chips section -->\r\n <div class=\"chip-list\" *ngIf=\"activeChips?.length\">\r\n <sa-chip \r\n *ngFor=\"let chip of activeChips\"\r\n [text]=\"chip.label || chip.text || chip\"\r\n [type]=\"'regular'\"\r\n [state]=\"'default'\"\r\n [filling]=\"'filled'\"\r\n [iconPosition]=\"'right'\"\r\n [iconPath]=\"'../assets/closeBlueOutlined.svg'\"\r\n (onClickEvent)=\"chip.removable ? onChipRemove(chip) : null\">\r\n </sa-chip>\r\n </div>\r\n </div>\r\n \r\n @if(buttons){\r\n <div class=\"button-group\">\r\n @for (button of buttons; track button.text) {\r\n <sa-button \r\n [text]=\"button.text\"\r\n [icon]=\"button.icon\"\r\n [size]=\"button.size\"\r\n [type]=\"button.type\"\r\n [iconPosition]=\"button.iconPosition\"\r\n [buttonIconSize]=\"button.buttonIconSize\"\r\n (onClickEvent)=\"onButtonClick(button, $event)\"\r\n role=\"button\"\r\n [state]=\"!areAllVisibleFieldsFilled() ? 'disabled' : ''\"\r\n [attr.aria-label]=\"button.text\">\r\n </sa-button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }", styles: [".error-page{display:flex;justify-content:center;align-items:center;box-sizing:border-box}.title-class{color:var(--text-highemphasis, #1C1B20);text-align:center;font-family:var(--font-roboto, Roboto);font-size:var(--small-16px, 16px);font-style:normal;font-weight:600;line-height:1.5rem;letter-spacing:.15px}.content-container{display:flex;flex-direction:column;align-items:center;gap:var(--medium-32px, 32px);text-align:center}.image-container{display:flex;justify-content:center;align-items:center;margin-bottom:var(--small-16px, 16px)}.image-container img{height:var(--message-icon-height, 12.5rem);width:var(--message-icon-width, fit-content)}.details{display:flex;flex-direction:column;align-items:center;gap:var(--medium-20px, 20px);text-align:center;background-color:var(--structural-white, #FFF)}::ng-deep .description .support-email{color:var(--primary-500);font-family:var(--font-roboto, Roboto);font-size:14px;font-style:normal;font-weight:500;line-height:1.25rem;letter-spacing:.1px}.description{color:var(--Text-Medium-Emphasis, #6D6979);text-align:center;font-family:var(--font-family, Roboto);font-size:var(--small-14px, 14px);font-style:normal;font-weight:400;line-height:var(--medium-20px, 20px);letter-spacing:.25px;margin:0}.message-banner-v2 .button-group{display:flex;gap:var(--small-8px);justify-content:center}::ng-deep .custom-contact-link{color:var(--primary-500, #7F56D9);font-family:var(--font-roboto, Roboto);font-size:var(--small-16px, 16px);font-style:normal;font-weight:600;line-height:var(--medium-24px);letter-spacing:.15px;text-decoration:none}.access-restricted-title{color:var(--text-highemphasis, #1C1B20);text-align:center;font-family:var(--font-roboto, Roboto);font-size:var(--medium-22px);font-style:normal;font-weight:500;line-height:var(--medium-28px);margin-bottom:var(--small-10px)}.access-restricted-description{text-align:center;font-family:var(--font-roboto, Roboto);font-size:var(--small-16px, 16px);line-height:var(--medium-24px);max-width:44rem;white-space:normal;word-break:break-word}.access-error-title{color:var(--semantic-error-500, #BD271E);text-align:center;font-family:var(--font-roboto, Roboto);font-size:var(--medium-22px);font-style:normal;font-weight:500;line-height:var(--medium-28px);margin-bottom:var(--small-10px)}.redirect-link{display:flex;align-items:center;gap:8px;cursor:pointer}.info-icon{width:16px;height:16px;color:var(--primary-500, #825CEE)}.learn-more-text{font-size:14px;color:var(--primary-500, #825CEE);text-decoration:none}.redirect-link:hover .learn-more-text{text-decoration:underline}.additional-fields{display:flex;gap:16px;width:100%}.form-button-container{display:flex;justify-content:flex-end;align-items:center;align-self:stretch}::ng-deep .form-button-container .action-button .sa-button{align-self:flex-start;display:flex;justify-content:center;align-items:center;gap:var(--small-3px, 3px);align-self:stretch}.divider-section{margin-top:32px;width:100%}.divider{width:100%;height:1px;background:var(--grey-200, #E4E7EC);margin-bottom:24px}.divider-header{margin-bottom:16px}.divider-title{font-size:16px;font-weight:600;color:var(--text-high-emphasis, #1C1B20);margin:0 0 8px;font-family:var(--font-family, Roboto)}.divider-subtitle{font-size:14px;font-weight:400;color:var(--text-medium-emphasis, #6D6979);margin:0;font-style:italic;font-family:var(--font-family, Roboto)}.chip-list{display:flex;flex-wrap:wrap;gap:8px}.dialog-form{width:100%;display:flex;flex-direction:column;gap:16px}.dialog-form .form-row{display:flex;gap:16px;margin-bottom:16px;width:100%}.dialog-form .form-field-wrapper{flex:1;display:flex;flex-direction:column;gap:4px}.dialog-form .form-field-wrapper.full-width{flex:1 1 100%}.dialog-form .additional-fields{display:flex;flex-direction:column;gap:16px;width:100%}::ng-deep .dialog-form formly-form{width:100%;display:block}::ng-deep .dialog-form formly-field{width:100%;display:block}::ng-deep .dialog-form .col-6,::ng-deep .dialog-form .col-12{width:100%;display:block}::ng-deep .dialog-form formly-group{width:100%;display:block;margin:0;padding:0}::ng-deep .additional-fields formly-form{width:100%;display:block}::ng-deep .dialog-form lib-form-select{width:100%}::ng-deep .dialog-form .sa-select-container{width:100%;display:flex;flex-direction:column}::ng-deep .dialog-form .sa-select-field-container{width:100%;position:relative}::ng-deep .dialog-form .ng-select{min-height:44px;border-radius:4px;padding:unset;border:1px solid var(--Grey-100, #EAECF0);background:var(--Structural-White, #FFF)}::ng-deep .dialog-form .sa-select-container .sa-select-field-container .ng-select-field{padding:unset;border:none}::ng-deep .dialog-form .ng-select.ng-select-focused{border-color:var(--primary-500, #825CEE);box-shadow:0 0 0 3px #825cee1a}::ng-deep .dialog-form .ng-select .ng-select-container{min-height:44px;padding:12px 16px}::ng-deep .dialog-form .ng-select .ng-placeholder{color:var(--text-medium-emphasis, #6D6979);font-size:14px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { 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.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: ButtonComponent, selector: "sa-button", inputs: ["id", "type", "state", "size", "text", "ImagePath", "icon", "iconPosition", "href", "hrefTarget", "width", "isSubmit", "buttonIconSize", "showSpinner"], outputs: ["onClickEvent", "onMouseInEvent", "onMouseOutEvent"] }, { kind: "ngmodule", type: HttpClientModule }, { kind: "component", type: MessageBannerComponent, selector: "sa-message-banner", inputs: ["type", "actionText", "content", "bannerIcon", "bannerIconSize", "buttonIcon", "buttonType", "buttonIconPosition", "buttonSize", "buttonIconSize", "button", "onAction"], outputs: ["actionClick"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i3.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "component", type: ChipsComponent, selector: "sa-chip", inputs: ["id", "iconPath", "text", "type", "state", "filling", "iconPosition", "largeStateIcon", "largeStateText", "tooltip", "className"], outputs: ["onClickEvent"] }] }); }
|
|
109
352
|
}
|
|
110
353
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: MessageBannerV2Component, decorators: [{
|
|
111
354
|
type: Component,
|
|
112
|
-
args: [{ selector: 'sa-message-banner-v2', standalone: true, imports: [CommonModule, IconComponent, ButtonComponent, HttpClientModule], providers: [IconService], template: "@if (bannerContent(); as content) {\r\n <div class=\"error-page message-banner-v2\">\r\n <div class=\"content-container\" \r\n [ngStyle]=\"{ gap: contentGap || 'var(--medium-32px, 32px)' }\">\r\n <div class=\"image-container\"\r\n [ngStyle]=\"{ 'margin-bottom': spacingBetweenImageAndDescription ?? 'var(--small-16px, 16px)' }\">\r\n <img [src]=\"content.messageIcon\" \r\n [alt]=\"content.type + ' image'\"\r\n [style.--message-icon-height]=\"content.messageIconSize?.height\"\r\n [style.--message-icon-width]=\"content.messageIconSize?.width\" />\r\n </div>\r\n <div class=\"details\">\r\n <div class=\"title-description\">\r\n <div class=\"title-class\" [ngClass]=\"titleClass || 'title-class'\" [innerHTML]=\"content.title\"></div>\r\n <p class=\"description\" [ngClass]=\"descriptionClass || 'description'\" [innerHTML]=\"content.description\"></p>\r\n </div>\r\n @if(buttons){\r\n <div class=\"button-group\">\r\n @for (button of buttons; track button.text) {\r\n <sa-button \r\n [text]=\"button.text\"\r\n [icon]=\"button.icon\"\r\n [size]=\"button.size\"\r\n [type]=\"button.type\"\r\n [iconPosition]=\"button.iconPosition\"\r\n [buttonIconSize]=\"button.buttonIconSize\"\r\n (onClickEvent)=\"onButtonClick(button, $event)\"\r\n role=\"button\"\r\n [attr.aria-label]=\"button.text\">\r\n </sa-button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n", styles: [".error-page{display:flex;justify-content:center;align-items:center;box-sizing:border-box}.title-class{color:var(--text-highemphasis, #1C1B20);text-align:center;font-family:var(--font-roboto, Roboto);font-size:var(--small-16px, 16px);font-style:normal;font-weight:600;line-height:1.5rem;letter-spacing:.15px}.content-container{display:flex;flex-direction:column;align-items:center;gap:var(--medium-32px, 32px);text-align:center}.image-container{display:flex;justify-content:center;align-items:center;margin-bottom:var(--small-16px, 16px)}.image-container img{height:var(--message-icon-height, 12.5rem);width:var(--message-icon-width, fit-content)}.details{display:flex;flex-direction:column;align-items:center;gap:var(--medium-20px, 20px);text-align:center;background-color:var(--structural-white, #FFF)}::ng-deep .description .support-email{color:var(--primary-500);font-family:var(--font-roboto, Roboto);font-size:14px;font-style:normal;font-weight:500;line-height:1.25rem;letter-spacing:.1px}.description{color:var(--Text-Medium-Emphasis, #6D6979);text-align:center;font-family:var(--font-family, Roboto);font-size:var(--small-14px, 14px);font-style:normal;font-weight:400;line-height:var(--medium-20px, 20px);letter-spacing:.25px;margin:0}.message-banner-v2 .button-group{display:flex;gap:var(--small-8px);justify-content:center}::ng-deep .custom-contact-link{color:var(--primary-500, #7F56D9);font-family:var(--font-roboto, Roboto);font-size:var(--small-16px, 16px);font-style:normal;font-weight:600;line-height:var(--medium-24px);letter-spacing:.15px;text-decoration:none}.access-restricted-title{color:var(--text-highemphasis, #1C1B20);text-align:center;font-family:var(--font-roboto, Roboto);font-size:var(--medium-22px);font-style:normal;font-weight:500;line-height:var(--medium-28px);margin-bottom:var(--small-10px)}.access-restricted-description{text-align:center;font-family:var(--font-roboto, Roboto);font-size:var(--small-16px, 16px);line-height:var(--medium-24px);max-width:44rem;white-space:normal;word-break:break-word}\n"] }]
|
|
355
|
+
args: [{ selector: 'sa-message-banner-v2', standalone: true, imports: [CommonModule, IconComponent, ButtonComponent, HttpClientModule, MessageBannerComponent, FormInputComponent, FormSelectComponent, FormsModule, ReactiveFormsModule, FormlyModule, ChipsComponent], providers: [IconService], template: "@if (bannerContent(); as content) {\r\n <div class=\"error-page message-banner-v2\">\r\n <div class=\"content-container\" [ngStyle]=\"{ gap: contentGap || 'var(--medium-32px, 32px)' }\">\r\n <div class=\"image-container\"\r\n [ngStyle]=\"{ 'margin-bottom': spacingBetweenImageAndDescription ?? 'var(--small-16px, 16px)' }\">\r\n <img [src]=\"content.messageIcon\" [alt]=\"content.type + ' image'\"\r\n [style.--message-icon-height]=\"content.messageIconSize?.height\"\r\n [style.--message-icon-width]=\"content.messageIconSize?.width\" />\r\n </div>\r\n <div class=\"details\">\r\n <div class=\"title-description\">\r\n <div class=\"title-class\" [ngClass]=\"titleClass || 'title-class'\" [innerHTML]=\"content.title\"></div>\r\n <p class=\"description\" [ngClass]=\"descriptionClass || 'description'\" [innerHTML]=\"content.description\"></p> \r\n <div [ngStyle]=\"{ margin: banner?.spacing + 'px 0px' }\">\r\n <sa-message-banner *ngIf=\"!isEmptyObject(banner)\" [type]=\"banner?.type\" [bannerIcon]=\"banner?.bannerIcon\" [buttonIcon]=\"banner?.buttonIcon\"\r\n [bannerIconSize]=\"banner?.bannerIconSize\" [buttonType]=\"banner?.buttonType\" [buttonSize]=\"banner?.buttonSize\" [buttonIconPosition]=\"banner?.buttonIconPosition\"\r\n [buttonIconSize]=\"banner?.buttonIconSize\" [actionText]=\"banner?.actionText\" >\r\n <div [innerHTML]=\"banner?.text\"></div>\r\n </sa-message-banner>\r\n </div>\r\n </div>\r\n \r\n <!-- Form inputs section -->\r\n <ng-container *ngIf=\"activeFormInputs?.length\">\r\n <form [formGroup]=\"form\" class=\"dialog-form\">\r\n <!-- Initial fields row (dynamic count based on formLayout.fieldsPerRow) -->\r\n <div class=\"form-row\">\r\n <div class=\"form-field-wrapper\" *ngFor=\"let input of getInitialFields(); let i = index\">\r\n <formly-form \r\n [form]=\"form\"\r\n [fields]=\"[fields[getInitialFieldIndex(i)]]\"\r\n [model]=\"model\"\r\n (modelChange)=\"onFormModelChange($event)\">\r\n </formly-form>\r\n </div>\r\n </div>\r\n \r\n <!-- Additional fields (conditional based on formLayout.conditionalFields) -->\r\n <div class=\"additional-fields\" *ngIf=\"shouldShowAdditionalFields()\">\r\n <div class=\"form-row\">\r\n <div class=\"form-field-wrapper\" *ngFor=\"let input of getAdditionalFields(); let i = index\">\r\n <formly-form \r\n [form]=\"form\"\r\n [fields]=\"[fields[getAdditionalFieldIndex(i)]]\"\r\n [model]=\"model\"\r\n (modelChange)=\"onFormModelChange($event)\"\r\n *ngIf=\"fields[getAdditionalFieldIndex(i)]\">\r\n </formly-form>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </ng-container>\r\n \r\n <!-- Custom form button(s) -->\r\n <div class=\"form-button-container\" *ngIf=\"activeCustomFormButton\">\r\n <!-- Support both single button and array of buttons -->\r\n <ng-container *ngIf=\"isButtonArray(); else singleButton\">\r\n <sa-button \r\n *ngFor=\"let button of activeCustomFormButton\"\r\n class=\"action-button\"\r\n [id]=\"button.id\"\r\n [text]=\"button.text\"\r\n [type]=\"button.type\"\r\n [size]=\"button.size\"\r\n [state]=\"button.state\"\r\n [ImagePath]=\"button.ImagePath\"\r\n [iconPosition]=\"button.iconPosition\"\r\n (click)=\"onButtonClick(button)\">\r\n </sa-button>\r\n </ng-container>\r\n \r\n <ng-template #singleButton>\r\n <sa-button class=\"action-button\"\r\n [id]=\"activeCustomFormButton.id\"\r\n [text]=\"activeCustomFormButton.text\"\r\n [type]=\"activeCustomFormButton.type\"\r\n [size]=\"activeCustomFormButton.size\"\r\n [state]=\"activeCustomFormButton.state\"\r\n [ImagePath]=\"activeCustomFormButton.ImagePath\"\r\n [iconPosition]=\"activeCustomFormButton.iconPosition\"\r\n (click)=\"onButtonClick(activeCustomFormButton)\">\r\n </sa-button>\r\n </ng-template>\r\n </div>\r\n \r\n <!-- Divider section -->\r\n <div class=\"divider-section\" *ngIf=\"activeDivider\">\r\n <div class=\"divider\"></div>\r\n <div class=\"divider-header\">\r\n <h3 class=\"divider-title\" *ngIf=\"activeDividerConfig.title\">{{ activeDividerConfig.title }}</h3>\r\n <p class=\"divider-subtitle\" *ngIf=\"activeDividerConfig.subtitle || activeDividerConfig.showSubtitleWhenEmpty\">\r\n {{ activeDividerConfig.subtitle || 'No items added yet' }}\r\n </p>\r\n </div>\r\n \r\n <!-- Chips section -->\r\n <div class=\"chip-list\" *ngIf=\"activeChips?.length\">\r\n <sa-chip \r\n *ngFor=\"let chip of activeChips\"\r\n [text]=\"chip.label || chip.text || chip\"\r\n [type]=\"'regular'\"\r\n [state]=\"'default'\"\r\n [filling]=\"'filled'\"\r\n [iconPosition]=\"'right'\"\r\n [iconPath]=\"'../assets/closeBlueOutlined.svg'\"\r\n (onClickEvent)=\"chip.removable ? onChipRemove(chip) : null\">\r\n </sa-chip>\r\n </div>\r\n </div>\r\n \r\n @if(buttons){\r\n <div class=\"button-group\">\r\n @for (button of buttons; track button.text) {\r\n <sa-button \r\n [text]=\"button.text\"\r\n [icon]=\"button.icon\"\r\n [size]=\"button.size\"\r\n [type]=\"button.type\"\r\n [iconPosition]=\"button.iconPosition\"\r\n [buttonIconSize]=\"button.buttonIconSize\"\r\n (onClickEvent)=\"onButtonClick(button, $event)\"\r\n role=\"button\"\r\n [state]=\"!areAllVisibleFieldsFilled() ? 'disabled' : ''\"\r\n [attr.aria-label]=\"button.text\">\r\n </sa-button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }", styles: [".error-page{display:flex;justify-content:center;align-items:center;box-sizing:border-box}.title-class{color:var(--text-highemphasis, #1C1B20);text-align:center;font-family:var(--font-roboto, Roboto);font-size:var(--small-16px, 16px);font-style:normal;font-weight:600;line-height:1.5rem;letter-spacing:.15px}.content-container{display:flex;flex-direction:column;align-items:center;gap:var(--medium-32px, 32px);text-align:center}.image-container{display:flex;justify-content:center;align-items:center;margin-bottom:var(--small-16px, 16px)}.image-container img{height:var(--message-icon-height, 12.5rem);width:var(--message-icon-width, fit-content)}.details{display:flex;flex-direction:column;align-items:center;gap:var(--medium-20px, 20px);text-align:center;background-color:var(--structural-white, #FFF)}::ng-deep .description .support-email{color:var(--primary-500);font-family:var(--font-roboto, Roboto);font-size:14px;font-style:normal;font-weight:500;line-height:1.25rem;letter-spacing:.1px}.description{color:var(--Text-Medium-Emphasis, #6D6979);text-align:center;font-family:var(--font-family, Roboto);font-size:var(--small-14px, 14px);font-style:normal;font-weight:400;line-height:var(--medium-20px, 20px);letter-spacing:.25px;margin:0}.message-banner-v2 .button-group{display:flex;gap:var(--small-8px);justify-content:center}::ng-deep .custom-contact-link{color:var(--primary-500, #7F56D9);font-family:var(--font-roboto, Roboto);font-size:var(--small-16px, 16px);font-style:normal;font-weight:600;line-height:var(--medium-24px);letter-spacing:.15px;text-decoration:none}.access-restricted-title{color:var(--text-highemphasis, #1C1B20);text-align:center;font-family:var(--font-roboto, Roboto);font-size:var(--medium-22px);font-style:normal;font-weight:500;line-height:var(--medium-28px);margin-bottom:var(--small-10px)}.access-restricted-description{text-align:center;font-family:var(--font-roboto, Roboto);font-size:var(--small-16px, 16px);line-height:var(--medium-24px);max-width:44rem;white-space:normal;word-break:break-word}.access-error-title{color:var(--semantic-error-500, #BD271E);text-align:center;font-family:var(--font-roboto, Roboto);font-size:var(--medium-22px);font-style:normal;font-weight:500;line-height:var(--medium-28px);margin-bottom:var(--small-10px)}.redirect-link{display:flex;align-items:center;gap:8px;cursor:pointer}.info-icon{width:16px;height:16px;color:var(--primary-500, #825CEE)}.learn-more-text{font-size:14px;color:var(--primary-500, #825CEE);text-decoration:none}.redirect-link:hover .learn-more-text{text-decoration:underline}.additional-fields{display:flex;gap:16px;width:100%}.form-button-container{display:flex;justify-content:flex-end;align-items:center;align-self:stretch}::ng-deep .form-button-container .action-button .sa-button{align-self:flex-start;display:flex;justify-content:center;align-items:center;gap:var(--small-3px, 3px);align-self:stretch}.divider-section{margin-top:32px;width:100%}.divider{width:100%;height:1px;background:var(--grey-200, #E4E7EC);margin-bottom:24px}.divider-header{margin-bottom:16px}.divider-title{font-size:16px;font-weight:600;color:var(--text-high-emphasis, #1C1B20);margin:0 0 8px;font-family:var(--font-family, Roboto)}.divider-subtitle{font-size:14px;font-weight:400;color:var(--text-medium-emphasis, #6D6979);margin:0;font-style:italic;font-family:var(--font-family, Roboto)}.chip-list{display:flex;flex-wrap:wrap;gap:8px}.dialog-form{width:100%;display:flex;flex-direction:column;gap:16px}.dialog-form .form-row{display:flex;gap:16px;margin-bottom:16px;width:100%}.dialog-form .form-field-wrapper{flex:1;display:flex;flex-direction:column;gap:4px}.dialog-form .form-field-wrapper.full-width{flex:1 1 100%}.dialog-form .additional-fields{display:flex;flex-direction:column;gap:16px;width:100%}::ng-deep .dialog-form formly-form{width:100%;display:block}::ng-deep .dialog-form formly-field{width:100%;display:block}::ng-deep .dialog-form .col-6,::ng-deep .dialog-form .col-12{width:100%;display:block}::ng-deep .dialog-form formly-group{width:100%;display:block;margin:0;padding:0}::ng-deep .additional-fields formly-form{width:100%;display:block}::ng-deep .dialog-form lib-form-select{width:100%}::ng-deep .dialog-form .sa-select-container{width:100%;display:flex;flex-direction:column}::ng-deep .dialog-form .sa-select-field-container{width:100%;position:relative}::ng-deep .dialog-form .ng-select{min-height:44px;border-radius:4px;padding:unset;border:1px solid var(--Grey-100, #EAECF0);background:var(--Structural-White, #FFF)}::ng-deep .dialog-form .sa-select-container .sa-select-field-container .ng-select-field{padding:unset;border:none}::ng-deep .dialog-form .ng-select.ng-select-focused{border-color:var(--primary-500, #825CEE);box-shadow:0 0 0 3px #825cee1a}::ng-deep .dialog-form .ng-select .ng-select-container{min-height:44px;padding:12px 16px}::ng-deep .dialog-form .ng-select .ng-placeholder{color:var(--text-medium-emphasis, #6D6979);font-size:14px}\n"] }]
|
|
113
356
|
}], propDecorators: { messageType: [{
|
|
114
357
|
type: Input
|
|
115
358
|
}], contactUrl: [{
|
|
@@ -122,6 +365,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
|
|
|
122
365
|
type: Input
|
|
123
366
|
}], descriptionClass: [{
|
|
124
367
|
type: Input
|
|
368
|
+
}], banner: [{
|
|
369
|
+
type: Input
|
|
370
|
+
}], formConfig: [{
|
|
371
|
+
type: Input
|
|
372
|
+
}], onFormEvent: [{
|
|
373
|
+
type: Output
|
|
125
374
|
}], messageIcon: [{
|
|
126
375
|
type: Input
|
|
127
376
|
}], messageIconSize: [{
|
|
@@ -135,4 +384,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
|
|
|
135
384
|
}], buttonClick: [{
|
|
136
385
|
type: Output
|
|
137
386
|
}] } });
|
|
138
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1iYW5uZXItdjIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50LWxpYnJhcnkvc3JjL2xpYi9tZXNzYWdlLWJhbm5lci12Mi9tZXNzYWdlLWJhbm5lci12Mi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL21lc3NhZ2UtYmFubmVyLXYyL21lc3NhZ2UtYmFubmVyLXYyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQVUsWUFBWSxFQUFFLE1BQU0sRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFDM0gsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7QUEwQnZELE1BQU0sT0FBTyx3QkFBd0I7SUFSckM7UUFTRSxpQ0FBaUM7UUFDekIsVUFBSyxHQUFHLE1BQU0sQ0FBcUI7WUFDekMsSUFBSSxFQUFFLFNBQVM7WUFDZixLQUFLLEVBQUUsRUFBRTtZQUNULFdBQVcsRUFBRSxFQUFFO1lBQ2YsV0FBVyxFQUFFLEVBQUU7WUFDZixlQUFlLEVBQUU7Z0JBQ2YsTUFBTSxFQUFFLFNBQVM7YUFDbEI7U0FDRixDQUFDLENBQUM7UUFFSCxzQkFBc0I7UUFDWixrQkFBYSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDdEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxD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QUp4QixDQUFDLFdBQVcsQ0FBQywrQ0M3QjFCLCtvREFxQ0EsOGlFRFRZLFlBQVksa05BQWlCLGVBQWUsdVJBQUUsZ0JBQWdCOzsyRkFLN0Qsd0JBQXdCO2tCQVJwQyxTQUFTOytCQUNFLHNCQUFzQixjQUNwQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxhQUM5RCxDQUFDLFdBQVcsQ0FBQzs4QkF5QmYsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGlDQUFpQztzQkFBekMsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUdPLFdBQVc7c0JBQXZCLEtBQUs7Z0JBSU8sZUFBZTtzQkFBM0IsS0FBSztnQkFJTyxLQUFLO3NCQUFqQixLQUFLO2dCQUlPLFdBQVc7c0JBQXZCLEtBQUs7Z0JBSUcsT0FBTztzQkFBZixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBjb21wdXRlZCwgc2lnbmFsLCBlZmZlY3QsIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBPbkNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSWNvblNlcnZpY2UgfSBmcm9tICcuLi9pY29uL2ljb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgSWNvbk5hbWUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2ljb24taW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQnV0dG9uSWNvblBvc2l0aW9uLCBCdXR0b25TaXplLCBCdXR0b25UeXBlLCBCdXR0b25JbnRlcmZhY2UsIEJ1dHRvbkNsaWNrRXZlbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2J1dHRvbi1pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vaWNvbi9pY29uLmNvbXBvbmVudCc7XHJcblxyXG5pbnRlcmZhY2UgTWVzc2FnZUJhbm5lclN0YXRlIHtcclxuICB0eXBlOiAnZGVmYXVsdCcgfCAnY29ubmVjdGlvbicgfCAnYWNjZXNzJyB8ICdhY2Nlc3NSZXN0cmljdGVkJztcclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XHJcbiAgbWVzc2FnZUljb246IHN0cmluZztcclxuICBtZXNzYWdlSWNvblNpemU/OiB7XHJcbiAgICB3aWR0aD86IHN0cmluZztcclxuICAgIGhlaWdodD86IHN0cmluZztcclxuICB9O1xyXG4gIHNwYWNpbmdCZXR3ZWVuSW1hZ2VBbmREZXNjcmlwdGlvbj86IHN0cmluZztcclxuICBjb250ZW50R2FwPzogc3RyaW5nOyBcclxuICBjb250YWN0VXJsPzogc3RyaW5nO1xyXG4gIHRpdGxlQ2xhc3M/OiBzdHJpbmc7XHJcbiAgZGVzY3JpcHRpb25DbGFzcz86IHN0cmluZztcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzYS1tZXNzYWdlLWJhbm5lci12MicsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBJY29uQ29tcG9uZW50LCBCdXR0b25Db21wb25lbnQsIEh0dHBDbGllbnRNb2R1bGVdLFxyXG4gIHByb3ZpZGVyczogW0ljb25TZXJ2aWNlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vbWVzc2FnZS1iYW5uZXItdjIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL21lc3NhZ2UtYmFubmVyLXYyLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWVzc2FnZUJhbm5lclYyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcclxuICAvLyBTdGF0ZSBtYW5hZ2VtZW50IHVzaW5nIHNpZ25hbHNcclxuICBwcml2YXRlIHN0YXRlID0gc2lnbmFsPE1lc3NhZ2VCYW5uZXJTdGF0ZT4oe1xyXG4gICAgdHlwZTogJ2RlZmF1bHQnLFxyXG4gICAgdGl0bGU6ICcnLFxyXG4gICAgZGVzY3JpcHRpb246ICcnLFxyXG4gICAgbWVzc2FnZUljb246ICcnLFxyXG4gICAgbWVzc2FnZUljb25TaXplOiB7XHJcbiAgICAgIGhlaWdodDogJzEyLjVyZW0nXHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIC8vIENvbXB1dGVkIHByb3BlcnRpZXNcclxuICBwcm90ZWN0ZWQgYmFubmVyQ29udGVudCA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMuc3RhdGUoKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIC4uLmN1cnJlbnRTdGF0ZSxcclxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuc2FuaXRpemVEZXNjcmlwdGlvbihjdXJyZW50U3RhdGUuZGVzY3JpcHRpb24pXHJcbiAgICB9O1xyXG4gIH0pO1xyXG5cclxuICBASW5wdXQoKSBtZXNzYWdlVHlwZTogJ2RlZmF1bHQnIHwgJ2Nvbm5lY3Rpb24nIHwgJ2FjY2VzcycgfCAnYWNjZXNzUmVzdHJpY3RlZCc7XHJcbiAgQElucHV0KCkgY29udGFjdFVybD86IHN0cmluZztcclxuICBASW5wdXQoKSBzcGFjaW5nQmV0d2VlbkltYWdlQW5kRGVzY3JpcHRpb24/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgY29udGVudEdhcD86IHN0cmluZztcclxuICBASW5wdXQoKSB0aXRsZUNsYXNzPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGRlc2NyaXB0aW9uQ2xhc3M/OiBzdHJpbmc7XHJcblxyXG5cclxuICBASW5wdXQoKSBzZXQgbWVzc2FnZUljb24odmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5zdGF0ZS51cGRhdGUocyA9PiAoeyAuLi5zLCBtZXNzYWdlSWNvbjogdmFsdWUgfSkpO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgc2V0IG1lc3NhZ2VJY29uU2l6ZSh2YWx1ZTogeyB3aWR0aD86IHN0cmluZzsgaGVpZ2h0Pzogc3RyaW5nIH0pIHtcclxuICAgIHRoaXMuc3RhdGUudXBkYXRlKHMgPT4gKHsgLi4ucywgbWVzc2FnZUljb25TaXplOiB2YWx1ZSB9KSk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBzZXQgdGl0bGUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5zdGF0ZS51cGRhdGUocyA9PiAoeyAuLi5zLCB0aXRsZTogdmFsdWUgfSkpO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgc2V0IGRlc2NyaXB0aW9uKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc3RhdGUudXBkYXRlKHMgPT4gKHsgLi4ucywgZGVzY3JpcHRpb246IHZhbHVlIH0pKTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGJ1dHRvbnM6IEJ1dHRvbkludGVyZmFjZVtdID0gW107XHJcbiAgQE91dHB1dCgpIGJ1dHRvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxCdXR0b25DbGlja0V2ZW50PigpO1xyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICAvLyBDaGVjayBpZiB0aGlzIGlzIHRoZSBmaXJzdCBpbml0aWFsaXphdGlvbiBvciBpZiBtZXNzYWdlVHlwZSBoYXMgY2hhbmdlZFxyXG4gICAgY29uc3Qgc2hvdWxkVXBkYXRlQmFzZWRPblR5cGUgPSBjaGFuZ2VzWydtZXNzYWdlVHlwZSddICYmIFxyXG4gICAgICAvLyBPbmx5IHVwZGF0ZSBiYXNlZCBvbiB0eXBlIGlmIHdlIGRvbid0IGhhdmUgY3VzdG9tIHZhbHVlcyBzZXRcclxuICAgICAgISh0aGlzLnN0YXRlKCkudGl0bGUgfHwgdGhpcy5zdGF0ZSgpLmRlc2NyaXB0aW9uIHx8IHRoaXMuc3RhdGUoKS5tZXNzYWdlSWNvbik7XHJcbiAgICBcclxuICAgIGlmIChzaG91bGRVcGRhdGVCYXNlZE9uVHlwZSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZUNvbnRlbnRCYXNlZE9uVHlwZSh0aGlzLm1lc3NhZ2VUeXBlIHx8ICdkZWZhdWx0Jyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUNvbnRlbnRCYXNlZE9uVHlwZSh0eXBlOiAnZGVmYXVsdCcgfCAnY29ubmVjdGlvbicgfCAnYWNjZXNzJyB8ICdhY2Nlc3NSZXN0cmljdGVkJykge1xyXG4gICAgLy8gRGVmaW5lIGEgdHlwZSBmb3IgdGhlIGNvbnRlbnQgaXRlbXMgdG8gZW5zdXJlIGFsbCBwcm9wZXJ0aWVzIGFyZSBwcm9wZXJseSB0eXBlZFxyXG4gICAgdHlwZSBDb250ZW50SXRlbSA9IHtcclxuICAgICAgdGl0bGU6IHN0cmluZztcclxuICAgICAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICAgICAgbWVzc2FnZUljb246IHN0cmluZztcclxuICAgICAgc3BhY2luZ0JldHdlZW5JbWFnZUFuZERlc2NyaXB0aW9uPzogc3RyaW5nO1xyXG4gICAgICBjb250ZW50R2FwPzogc3RyaW5nO1xyXG4gICAgICB0aXRsZUNsYXNzPzogc3RyaW5nO1xyXG4gICAgICBkZXNjcmlwdGlvbkNsYXNzPzogc3RyaW5nO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBPbmx5IGFwcGx5IGRlZmF1bHQgY29udGVudCBpZiBjdXN0b20gY29udGVudCBoYXNuJ3QgYmVlbiBwcm92aWRlZFxyXG4gICAgY29uc3QgY3VycmVudFN0YXRlID0gdGhpcy5zdGF0ZSgpO1xyXG4gICAgY29uc3QgY29udGVudDogUmVjb3JkPCdkZWZhdWx0JyB8ICdjb25uZWN0aW9uJyB8ICdhY2Nlc3MnIHwgJ2FjY2Vzc1Jlc3RyaWN0ZWQnLCBDb250ZW50SXRlbT4gPSB7XHJcbiAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICB0aXRsZTogJ09vcHMhIFNvbWV0aGluZyB3ZW50IHdyb25nLiBQbGVhc2UgdHJ5IGFnYWluIG9yIHRyeSBhZnRlciBzb21lIHRpbWUnLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnSWYgdGhlIGlzc3VlIHBlcnNpc3RzLCBjb250YWN0IG91ciBzdXBwb3J0IHRlYW0gYXQgPHNwYW4gY2xhc3M9XCJzdXBwb3J0LWVtYWlsXCI+c3VwcG9ydEBzYXJhc2FuYWx5dGljcy5jb208L3NwYW4+JyxcclxuICAgICAgICBtZXNzYWdlSWNvbjogJy9hc3NldHMvZXJyb3IuZ2lmJ1xyXG4gICAgICB9LFxyXG4gICAgICBjb25uZWN0aW9uOiB7XHJcbiAgICAgICAgdGl0bGU6ICdXZVxcJ3JlIGhhdmluZyB0cm91YmxlIGNvbm5lY3RpbmcuIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24gYW5kIHRyeSBhZ2FpbicsXHJcbiAgICAgICAgZGVzY3JpcHRpb246ICdZb3UgY2FuIGFsc28gcmVhY2ggb3V0IHRvIG91ciBzdXBwb3J0IHRlYW0gYXQgPHNwYW4gY2xhc3M9XCJzdXBwb3J0LWVtYWlsXCI+c3VwcG9ydEBzYXJhc2FuYWx5dGljcy5jb208L3NwYW4+IGZvciBhc3Npc3RhbmNlJyxcclxuICAgICAgICBtZXNzYWdlSWNvbjogJy9hc3NldHMvbG9zdC1jb25uZWN0aW9uLmdpZidcclxuICAgICAgfSxcclxuICAgICAgYWNjZXNzOiB7XHJcbiAgICAgICAgdGl0bGU6ICdUaGlzIGlzIHRha2luZyBhIGJpdCBsb25nZXIgdGhhbiB1c3VhbC4gUGxlYXNlIGhvbGQgb24hJyxcclxuICAgICAgICBkZXNjcmlwdGlvbjogJ0lmIHRoZSBkZWxheSBjb250aW51ZXMsIGNoZWNrIHlvdXIgY29ubmVjdGlvbiBhbmQgdHJ5IHJlZnJlc2hpbmcgdGhlIHBhZ2UuJyxcclxuICAgICAgICBtZXNzYWdlSWNvbjogJy9hc3NldHMvbG9uZy1sb2FkaW5nLmdpZidcclxuICAgICAgfSxcclxuICAgICAgYWNjZXNzUmVzdHJpY3RlZDoge1xyXG4gICAgICAgIHRpdGxlOiAnQWNjZXNzIFJlc3RyaWN0ZWQhJyxcclxuICAgICAgICBkZXNjcmlwdGlvbjogYExvb2tzIGxpa2UgeW91IGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoaXMgbW9kdWxlIGp1c3QgeWV0LiBObyB3b3JyaWVz4oCUcmVhY2ggb3V0IHRvIHlvdXIgYWRtaW4gdG8gcmVxdWVzdCBhY2Nlc3MgdG8gdGhpcyBmZWF0dXJlLiBJZiB5b3UncmUgZmFjaW5nIGFueSBpc3N1ZXMsIGZlZWwgZnJlZSB0byA8YSBjbGFzcz1cImN1c3RvbS1jb250YWN0LWxpbmtcIiBocmVmPVwiJHt0aGlzLmNvbnRhY3RVcmwgPz8gJ2h0dHBzOi8vc3VwcG9ydC5kZWZhdWx0LmNvbSd9XCIgdGFyZ2V0PVwiX2JsYW5rXCI+Q29udGFjdCBVczwvYT4uYCxcclxuICAgICAgICBtZXNzYWdlSWNvbjogJy9hc3NldHMvYWNjZXNzLXJlc3RyaWN0ZWQuZ2lmJyxcclxuICAgICAgICBzcGFjaW5nQmV0d2VlbkltYWdlQW5kRGVzY3JpcHRpb246ICcwcHgnLFxyXG4gICAgICAgIGNvbnRlbnRHYXA6JzIwcHgnLFxyXG4gICAgICAgIHRpdGxlQ2xhc3M6ICdhY2Nlc3MtcmVzdHJpY3RlZC10aXRsZScsXHJcbiAgICAgICAgZGVzY3JpcHRpb25DbGFzczogJ2FjY2Vzcy1yZXN0cmljdGVkLWRlc2NyaXB0aW9uJyxcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBjb250ZW50SXRlbSA9IGNvbnRlbnRbdHlwZV07XHJcblxyXG4gICAgdGhpcy5zdGF0ZS51cGRhdGUocyA9PiAoe1xyXG4gICAgICAuLi5zLFxyXG4gICAgICB0eXBlLFxyXG4gICAgICAvLyBPbmx5IGFwcGx5IGRlZmF1bHQgdmFsdWVzIGlmIGN1c3RvbSB2YWx1ZXMgaGF2ZW4ndCBiZWVuIHByb3ZpZGVkXHJcbiAgICAgIHRpdGxlOiBzLnRpdGxlIHx8IGNvbnRlbnRJdGVtLnRpdGxlLFxyXG4gICAgICBkZXNjcmlwdGlvbjogcy5kZXNjcmlwdGlvbiB8fCBjb250ZW50SXRlbS5kZXNjcmlwdGlvbixcclxuICAgICAgbWVzc2FnZUljb246IHMubWVzc2FnZUljb24gfHwgY29udGVudEl0ZW0ubWVzc2FnZUljb24sXHJcbiAgICAgIC8vIEZvciBvdGhlciBwcm9wZXJ0aWVzLCBvbmx5IGFwcGx5IHRoZW0gaWYgdGhleSBleGlzdCBpbiB0aGUgY29udGVudEl0ZW1cclxuICAgICAgLi4uKGNvbnRlbnRJdGVtLnNwYWNpbmdCZXR3ZWVuSW1hZ2VBbmREZXNjcmlwdGlvbiAmJiB7IHNwYWNpbmdCZXR3ZWVuSW1hZ2VBbmREZXNjcmlwdGlvbjogY29udGVudEl0ZW0uc3BhY2luZ0JldHdlZW5JbWFnZUFuZERlc2NyaXB0aW9uIH0pLFxyXG4gICAgICAuLi4oY29udGVudEl0ZW0uY29udGVudEdhcCAmJiB7IGNvbnRlbnRHYXA6IGNvbnRlbnRJdGVtLmNvbnRlbnRHYXAgfSksXHJcbiAgICAgIC4uLihjb250ZW50SXRlbS50aXRsZUNsYXNzICYmIHsgdGl0bGVDbGFzczogY29udGVudEl0ZW0udGl0bGVDbGFzcyB9KSxcclxuICAgICAgLi4uKGNvbnRlbnRJdGVtLmRlc2NyaXB0aW9uQ2xhc3MgJiYgeyBkZXNjcmlwdGlvbkNsYXNzOiBjb250ZW50SXRlbS5kZXNjcmlwdGlvbkNsYXNzIH0pXHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNhbml0aXplRGVzY3JpcHRpb24oZGVzY3JpcHRpb246IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gZGVzY3JpcHRpb24ucmVwbGFjZShcclxuICAgICAgL3N1cHBvcnRAc2FyYXNhbmFseXRpY3NcXC5jb20vZyxcclxuICAgICAgJzxzcGFuIGNsYXNzPVwic3VwcG9ydC1lbWFpbFwiPnN1cHBvcnRAc2FyYXNhbmFseXRpY3MuY29tPC9zcGFuPidcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBvbkJ1dHRvbkNsaWNrKGJ1dHRvbjogQnV0dG9uSW50ZXJmYWNlLCBldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuYnV0dG9uQ2xpY2suZW1pdCh7XHJcbiAgICAgIHR5cGU6IGJ1dHRvbi50eXBlIGFzICdwcmltYXJ5JyB8ICdzZWNvbmRhcnknLFxyXG4gICAgICBidXR0b24sXHJcbiAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiQGlmIChiYW5uZXJDb250ZW50KCk7IGFzIGNvbnRlbnQpIHtcclxuICA8ZGl2IGNsYXNzPVwiZXJyb3ItcGFnZSBtZXNzYWdlLWJhbm5lci12MlwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbnRlbnQtY29udGFpbmVyXCIgXHJcbiAgICAgICAgIFtuZ1N0eWxlXT1cInsgZ2FwOiBjb250ZW50R2FwIHx8ICd2YXIoLS1tZWRpdW0tMzJweCwgMzJweCknIH1cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImltYWdlLWNvbnRhaW5lclwiXHJcbiAgICAgICAgICAgW25nU3R5bGVdPVwieyAnbWFyZ2luLWJvdHRvbSc6IHNwYWNpbmdCZXR3ZWVuSW1hZ2VBbmREZXNjcmlwdGlvbiA/PyAndmFyKC0tc21hbGwtMTZweCwgMTZweCknIH1cIj5cclxuICAgICAgICA8aW1nIFtzcmNdPVwiY29udGVudC5tZXNzYWdlSWNvblwiIFxyXG4gICAgICAgICAgICAgW2FsdF09XCJjb250ZW50LnR5cGUgKyAnIGltYWdlJ1wiXHJcbiAgICAgICAgICAgICBbc3R5bGUuLS1tZXNzYWdlLWljb24taGVpZ2h0XT1cImNvbnRlbnQubWVzc2FnZUljb25TaXplPy5oZWlnaHRcIlxyXG4gICAgICAgICAgICAgW3N0eWxlLi0tbWVzc2FnZS1pY29uLXdpZHRoXT1cImNvbnRlbnQubWVzc2FnZUljb25TaXplPy53aWR0aFwiIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlsc1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1kZXNjcmlwdGlvblwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLWNsYXNzXCIgW25nQ2xhc3NdPVwidGl0bGVDbGFzcyB8fCAndGl0bGUtY2xhc3MnXCIgW2lubmVySFRNTF09XCJjb250ZW50LnRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICA8cCBjbGFzcz1cImRlc2NyaXB0aW9uXCIgW25nQ2xhc3NdPVwiZGVzY3JpcHRpb25DbGFzcyB8fCAnZGVzY3JpcHRpb24nXCIgW2lubmVySFRNTF09XCJjb250ZW50LmRlc2NyaXB0aW9uXCI+PC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIEBpZihidXR0b25zKXtcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLWdyb3VwXCI+XHJcbiAgICAgICAgICBAZm9yIChidXR0b24gb2YgYnV0dG9uczsgdHJhY2sgYnV0dG9uLnRleHQpIHtcclxuICAgICAgICAgICAgPHNhLWJ1dHRvbiBcclxuICAgICAgICAgICAgICBbdGV4dF09XCJidXR0b24udGV4dFwiXHJcbiAgICAgICAgICAgICAgW2ljb25dPVwiYnV0dG9uLmljb25cIlxyXG4gICAgICAgICAgICAgIFtzaXplXT1cImJ1dHRvbi5zaXplXCJcclxuICAgICAgICAgICAgICBbdHlwZV09XCJidXR0b24udHlwZVwiXHJcbiAgICAgICAgICAgICAgW2ljb25Qb3NpdGlvbl09XCJidXR0b24uaWNvblBvc2l0aW9uXCJcclxuICAgICAgICAgICAgICBbYnV0dG9uSWNvblNpemVdPVwiYnV0dG9uLmJ1dHRvbkljb25TaXplXCJcclxuICAgICAgICAgICAgICAob25DbGlja0V2ZW50KT1cIm9uQnV0dG9uQ2xpY2soYnV0dG9uLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImJ1dHRvbi50ZXh0XCI+XHJcbiAgICAgICAgICAgIDwvc2EtYnV0dG9uPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICB9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbn1cclxuIl19
|
|
387
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1iYW5uZXItdjIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50LWxpYnJhcnkvc3JjL2xpYi9tZXNzYWdlLWJhbm5lci12Mi9tZXNzYWdlLWJhbm5lci12Mi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL21lc3NhZ2UtYmFubmVyLXYyL21lc3NhZ2UtYmFubmVyLXYyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQVUsWUFBWSxFQUFFLE1BQU0sRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFDM0gsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxXQUFXLEVBQWUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUYsT0FBTyxFQUFFLFlBQVksRUFBcUIsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENB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QkFBc0IsMFFBQTJDLFdBQVcsbVNBQUUsbUJBQW1CLCtLQUFFLFlBQVksOEtBQUUsY0FBYzs7MkZBSzdMLHdCQUF3QjtrQkFScEMsU0FBUzsrQkFDRSxzQkFBc0IsY0FDcEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUMsc0JBQXNCLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLFlBQVksRUFBRSxjQUFjLENBQUMsYUFDOUwsQ0FBQyxXQUFXLENBQUM7OEJBeUJmLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxpQ0FBaUM7c0JBQXpDLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkE4QkksV0FBVztzQkFBcEIsTUFBTTtnQkE4Qk0sV0FBVztzQkFBdkIsS0FBSztnQkFJTyxlQUFlO3NCQUEzQixLQUFLO2dCQUlPLEtBQUs7c0JBQWpCLEtBQUs7Z0JBSU8sV0FBVztzQkFBdkIsS0FBSztnQkFJRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIGNvbXB1dGVkLCBzaWduYWwsIGVmZmVjdCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIE9uQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBJY29uU2VydmljZSB9IGZyb20gJy4uL2ljb24vaWNvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJY29uTmFtZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvaWNvbi1pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBCdXR0b25JY29uUG9zaXRpb24sIEJ1dHRvblNpemUsIEJ1dHRvblR5cGUsIEJ1dHRvbkludGVyZmFjZSwgQnV0dG9uQ2xpY2tFdmVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvYnV0dG9uLWludGVyZmFjZSc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEljb25Db21wb25lbnQgfSBmcm9tICcuLi9pY29uL2ljb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWVzc2FnZUJhbm5lckNvbXBvbmVudCB9IGZyb20gJy4uL21lc3NhZ2UtYmFubmVyL21lc3NhZ2UtYmFubmVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZvcm1JbnB1dENvbXBvbmVudCB9IGZyb20gJy4uL2Zvcm0taW5wdXQvZm9ybS1pbnB1dC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGb3JtU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vZm9ybS1zZWxlY3QvZm9ybS1zZWxlY3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEZvcm1seU1vZHVsZSwgRm9ybWx5RmllbGRDb25maWcgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcclxuaW1wb3J0IHsgQ2hpcHNDb21wb25lbnQgfSBmcm9tICcuLi9jaGlwcy9jaGlwcy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGb3JtTGF5b3V0Q29uZmlnLCBGb3JtRmllbGRDb25maWcsIFVuaWZpZWRGb3JtQ29uZmlnIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9mb3JtLWxheW91dC5pbnRlcmZhY2UnO1xyXG5cclxuaW50ZXJmYWNlIE1lc3NhZ2VCYW5uZXJTdGF0ZSB7XHJcbiAgdHlwZTogJ2RlZmF1bHQnIHwgJ2Nvbm5lY3Rpb24nIHwgJ2FjY2VzcycgfCAnYWNjZXNzUmVzdHJpY3RlZCc7XHJcbiAgdGl0bGU6IHN0cmluZztcclxuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gIG1lc3NhZ2VJY29uOiBzdHJpbmc7XHJcbiAgbWVzc2FnZUljb25TaXplPzoge1xyXG4gICAgd2lkdGg/OiBzdHJpbmc7XHJcbiAgICBoZWlnaHQ/OiBzdHJpbmc7XHJcbiAgfTtcclxuICBzcGFjaW5nQmV0d2VlbkltYWdlQW5kRGVzY3JpcHRpb24/OiBzdHJpbmc7XHJcbiAgY29udGVudEdhcD86IHN0cmluZzsgXHJcbiAgY29udGFjdFVybD86IHN0cmluZztcclxuICB0aXRsZUNsYXNzPzogc3RyaW5nO1xyXG4gIGRlc2NyaXB0aW9uQ2xhc3M/OiBzdHJpbmc7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2EtbWVzc2FnZS1iYW5uZXItdjInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSWNvbkNvbXBvbmVudCwgQnV0dG9uQ29tcG9uZW50LCBIdHRwQ2xpZW50TW9kdWxlLE1lc3NhZ2VCYW5uZXJDb21wb25lbnQsIEZvcm1JbnB1dENvbXBvbmVudCwgRm9ybVNlbGVjdENvbXBvbmVudCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1seU1vZHVsZSwgQ2hpcHNDb21wb25lbnRdLFxyXG4gIHByb3ZpZGVyczogW0ljb25TZXJ2aWNlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vbWVzc2FnZS1iYW5uZXItdjIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL21lc3NhZ2UtYmFubmVyLXYyLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWVzc2FnZUJhbm5lclYyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcclxuICAvLyBTdGF0ZSBtYW5hZ2VtZW50IHVzaW5nIHNpZ25hbHNcclxuICBwcml2YXRlIHN0YXRlID0gc2lnbmFsPE1lc3NhZ2VCYW5uZXJTdGF0ZT4oe1xyXG4gICAgdHlwZTogJ2RlZmF1bHQnLFxyXG4gICAgdGl0bGU6ICcnLFxyXG4gICAgZGVzY3JpcHRpb246ICcnLFxyXG4gICAgbWVzc2FnZUljb246ICcnLFxyXG4gICAgbWVzc2FnZUljb25TaXplOiB7XHJcbiAgICAgIGhlaWdodDogJzEyLjVyZW0nXHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIC8vIENvbXB1dGVkIHByb3BlcnRpZXNcclxuICBwcm90ZWN0ZWQgYmFubmVyQ29udGVudCA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMuc3RhdGUoKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIC4uLmN1cnJlbnRTdGF0ZSxcclxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuc2FuaXRpemVEZXNjcmlwdGlvbihjdXJyZW50U3RhdGUuZGVzY3JpcHRpb24pXHJcbiAgICB9O1xyXG4gIH0pO1xyXG5cclxuICBASW5wdXQoKSBtZXNzYWdlVHlwZTogJ2RlZmF1bHQnIHwgJ2Nvbm5lY3Rpb24nIHwgJ2FjY2VzcycgfCAnYWNjZXNzUmVzdHJpY3RlZCc7XHJcbiAgQElucHV0KCkgY29udGFjdFVybD86IHN0cmluZztcclxuICBASW5wdXQoKSBzcGFjaW5nQmV0d2VlbkltYWdlQW5kRGVzY3JpcHRpb24/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgY29udGVudEdhcD86IHN0cmluZztcclxuICBASW5wdXQoKSB0aXRsZUNsYXNzPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGRlc2NyaXB0aW9uQ2xhc3M/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYmFubmVyOmFueSA9IHt9O1xyXG4gIEBJbnB1dCgpIGZvcm1Db25maWc6IFVuaWZpZWRGb3JtQ29uZmlnIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIGZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBtb2RlbDogYW55ID0ge307XHJcbiAgZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW107XHJcbiAgLy8gQ29tcHV0ZWQgcHJvcGVydGllcyBmb3IgdW5pZmllZCBhY2Nlc3NcclxuICBnZXQgYWN0aXZlRm9ybUlucHV0cygpOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtQ29uZmlnPy5maWVsZHMgfHwgW107XHJcbiAgfVxyXG5cclxuICBnZXQgYWN0aXZlQ2hpcHMoKTogYW55W10ge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUNvbmZpZz8uY2hpcHMgfHwgW107XHJcbiAgfVxyXG5cclxuICBnZXQgYWN0aXZlQ3VzdG9tRm9ybUJ1dHRvbigpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUNvbmZpZz8uY3VzdG9tQnV0dG9uIHx8IFtdO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGFjdGl2ZURpdmlkZXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtQ29uZmlnPy5kaXZpZGVyPy5lbmFibGVkID8/IGZhbHNlO1xyXG4gIH0gXHJcblxyXG4gIGdldCBhY3RpdmVEaXZpZGVyQ29uZmlnKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtQ29uZmlnPy5kaXZpZGVyIHx8IHt9O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGFjdGl2ZUZvcm1MYXlvdXQoKTogRm9ybUxheW91dENvbmZpZyB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtQ29uZmlnPy5sYXlvdXQgfHwge307XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgb25Gb3JtRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHt0eXBlOiBzdHJpbmcsIGRhdGE6IGFueX0+KCk7XHJcbiAgXHJcbiAgb25DaGlwUmVtb3ZlKGNoaXA6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkZvcm1FdmVudC5lbWl0KHsgdHlwZTogJ2NoaXAtcmVtb3ZlJywgZGF0YTogY2hpcCB9KTtcclxuICB9XHJcbiAgXHJcbiAgb25BZGRVc2VyKCk6IHZvaWQge1xyXG4gICAgbGV0IGNsaWNrZWRCdXR0b24gPSB0aGlzLmFjdGl2ZUN1c3RvbUZvcm1CdXR0b247XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmFjdGl2ZUN1c3RvbUZvcm1CdXR0b24pKSB7XHJcbiAgICAgIGNsaWNrZWRCdXR0b24gPSB0aGlzLmFjdGl2ZUN1c3RvbUZvcm1CdXR0b24uZmluZChidG4gPT4gXHJcbiAgICAgICAgYnRuLnRleHQgPT09ICdBZGQgVXNlcicgfHwgYnRuLmlkID09PSAnYWRkLXVzZXInIHx8IGJ0bi5hY3Rpb24gPT09ICdhZGQtdXNlcidcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMub25Gb3JtRXZlbnQuZW1pdCh7IHR5cGU6ICdjdXN0b20tYnV0dG9uLWNsaWNrJywgZGF0YTogY2xpY2tlZEJ1dHRvbiB9KTtcclxuICAgIGlmIChjbGlja2VkQnV0dG9uPy5yZXNldEZvcm0gIT09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMubW9kZWwgPSB7fTtcclxuICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XHJcbiAgICAgIHRoaXMuYWN0aXZlRm9ybUlucHV0cz8uZm9yRWFjaChpbnB1dCA9PiB7XHJcbiAgICAgICAgaW5wdXQudmFsdWUgPSAnJztcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudXBkYXRlRm9ybWx5RmllbGRzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIGFyZUFsbEZpZWxkc0ZpbGxlZCgpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5hY3RpdmVGb3JtSW5wdXRzIHx8IHRoaXMuYWN0aXZlRm9ybUlucHV0cy5sZW5ndGggPCA0KSByZXR1cm4gZmFsc2U7XHJcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVGb3JtSW5wdXRzLmV2ZXJ5KGZpZWxkID0+IGZpZWxkLnZhbHVlICYmIGZpZWxkLnZhbHVlLnRyaW0oKSAhPT0gJycpO1xyXG4gIH1cclxuICBcclxuXHJcbiAgQElucHV0KCkgc2V0IG1lc3NhZ2VJY29uKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc3RhdGUudXBkYXRlKHMgPT4gKHsgLi4ucywgbWVzc2FnZUljb246IHZhbHVlIH0pKTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNldCBtZXNzYWdlSWNvblNpemUodmFsdWU6IHsgd2lkdGg/OiBzdHJpbmc7IGhlaWdodD86IHN0cmluZyB9KSB7XHJcbiAgICB0aGlzLnN0YXRlLnVwZGF0ZShzID0+ICh7IC4uLnMsIG1lc3NhZ2VJY29uU2l6ZTogdmFsdWUgfSkpO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgc2V0IHRpdGxlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc3RhdGUudXBkYXRlKHMgPT4gKHsgLi4ucywgdGl0bGU6IHZhbHVlIH0pKTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNldCBkZXNjcmlwdGlvbih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnN0YXRlLnVwZGF0ZShzID0+ICh7IC4uLnMsIGRlc2NyaXB0aW9uOiB2YWx1ZSB9KSk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBidXR0b25zOiBCdXR0b25JbnRlcmZhY2VbXSA9IFtdO1xyXG4gIEBPdXRwdXQoKSBidXR0b25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8QnV0dG9uQ2xpY2tFdmVudD4oKTtcclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyB0aGUgZmlyc3QgaW5pdGlhbGl6YXRpb24gb3IgaWYgbWVzc2FnZVR5cGUgaGFzIGNoYW5nZWRcclxuICAgIGNvbnN0IHNob3VsZFVwZGF0ZUJhc2VkT25UeXBlID0gY2hhbmdlc1snbWVzc2FnZVR5cGUnXSAmJiBcclxuICAgICAgLy8gT25seSB1cGRhdGUgYmFzZWQgb24gdHlwZSBpZiB3ZSBkb24ndCBoYXZlIGN1c3RvbSB2YWx1ZXMgc2V0XHJcbiAgICAgICEodGhpcy5zdGF0ZSgpLnRpdGxlIHx8IHRoaXMuc3RhdGUoKS5kZXNjcmlwdGlvbiB8fCB0aGlzLnN0YXRlKCkubWVzc2FnZUljb24pO1xyXG4gICAgXHJcbiAgICBpZiAoc2hvdWxkVXBkYXRlQmFzZWRPblR5cGUpIHtcclxuICAgICAgdGhpcy51cGRhdGVDb250ZW50QmFzZWRPblR5cGUodGhpcy5tZXNzYWdlVHlwZSB8fCAnZGVmYXVsdCcpO1xyXG4gICAgfSAgICBcclxuICAgIGlmIChjaGFuZ2VzWydmb3JtQ29uZmlnJ10gfHwgY2hhbmdlc1snZm9ybUlucHV0cyddKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlRm9ybWx5RmllbGRzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUNvbnRlbnRCYXNlZE9uVHlwZSh0eXBlOiAnZGVmYXVsdCcgfCAnY29ubmVjdGlvbicgfCAnYWNjZXNzJyB8ICdhY2Nlc3NSZXN0cmljdGVkJykgeyAgXHJcbiAgICAvLyBEZWZpbmUgYSB0eXBlIGZvciB0aGUgY29udGVudCBpdGVtcyB0byBlbnN1cmUgYWxsIHByb3BlcnRpZXMgYXJlIHByb3Blcmx5IHR5cGVkXHJcbiAgICB0eXBlIENvbnRlbnRJdGVtID0ge1xyXG4gICAgICB0aXRsZTogc3RyaW5nO1xyXG4gICAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gICAgICBtZXNzYWdlSWNvbjogc3RyaW5nO1xyXG4gICAgICBzcGFjaW5nQmV0d2VlbkltYWdlQW5kRGVzY3JpcHRpb24/OiBzdHJpbmc7XHJcbiAgICAgIGNvbnRlbnRHYXA/OiBzdHJpbmc7XHJcbiAgICAgIHRpdGxlQ2xhc3M/OiBzdHJpbmc7XHJcbiAgICAgIGRlc2NyaXB0aW9uQ2xhc3M/OiBzdHJpbmc7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIE9ubHkgYXBwbHkgZGVmYXVsdCBjb250ZW50IGlmIGN1c3RvbSBjb250ZW50IGhhc24ndCBiZWVuIHByb3ZpZGVkXHJcbiAgICBjb25zdCBjdXJyZW50U3RhdGUgPSB0aGlzLnN0YXRlKCk7XHJcbiAgICBjb25zdCBjb250ZW50OiBSZWNvcmQ8J2RlZmF1bHQnIHwgJ2Nvbm5lY3Rpb24nIHwgJ2FjY2VzcycgfCAnYWNjZXNzUmVzdHJpY3RlZCcsIENvbnRlbnRJdGVtPiA9IHtcclxuICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgIHRpdGxlOiAnT29wcyEgU29tZXRoaW5nIHdlbnQgd3JvbmcuIFBsZWFzZSB0cnkgYWdhaW4gb3IgdHJ5IGFmdGVyIHNvbWUgdGltZScsXHJcbiAgICAgICAgZGVzY3JpcHRpb246ICdJZiB0aGUgaXNzdWUgcGVyc2lzdHMsIGNvbnRhY3Qgb3VyIHN1cHBvcnQgdGVhbSBhdCA8c3BhbiBjbGFzcz1cInN1cHBvcnQtZW1haWxcIj5zdXBwb3J0QHNhcmFzYW5hbHl0aWNzLmNvbTwvc3Bhbj4nLFxyXG4gICAgICAgIG1lc3NhZ2VJY29uOiAnL2Fzc2V0cy9lcnJvci5naWYnXHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbm5lY3Rpb246IHtcclxuICAgICAgICB0aXRsZTogJ1dlXFwncmUgaGF2aW5nIHRyb3VibGUgY29ubmVjdGluZy4gUGxlYXNlIGNoZWNrIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvbiBhbmQgdHJ5IGFnYWluJyxcclxuICAgICAgICBkZXNjcmlwdGlvbjogJ1lvdSBjYW4gYWxzbyByZWFjaCBvdXQgdG8gb3VyIHN1cHBvcnQgdGVhbSBhdCA8c3BhbiBjbGFzcz1cInN1cHBvcnQtZW1haWxcIj5zdXBwb3J0QHNhcmFzYW5hbHl0aWNzLmNvbTwvc3Bhbj4gZm9yIGFzc2lzdGFuY2UnLFxyXG4gICAgICAgIG1lc3NhZ2VJY29uOiAnL2Fzc2V0cy9sb3N0LWNvbm5lY3Rpb24uZ2lmJ1xyXG4gICAgICB9LFxyXG4gICAgICBhY2Nlc3M6IHtcclxuICAgICAgICB0aXRsZTogJ1RoaXMgaXMgdGFraW5nIGEgYml0IGxvbmdlciB0aGFuIHVzdWFsLiBQbGVhc2UgaG9sZCBvbiEnLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnSWYgdGhlIGRlbGF5IGNvbnRpbnVlcywgY2hlY2sgeW91ciBjb25uZWN0aW9uIGFuZCB0cnkgcmVmcmVzaGluZyB0aGUgcGFnZS4nLFxyXG4gICAgICAgIG1lc3NhZ2VJY29uOiAnL2Fzc2V0cy9sb25nLWxvYWRpbmcuZ2lmJ1xyXG4gICAgICB9LFxyXG4gICAgICBhY2Nlc3NSZXN0cmljdGVkOiB7XHJcbiAgICAgICAgdGl0bGU6ICdBY2Nlc3MgUmVzdHJpY3RlZCEnLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgTG9va3MgbGlrZSB5b3UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhpcyBtb2R1bGUganVzdCB5ZXQuIE5vIHdvcnJpZXPigJRyZWFjaCBvdXQgdG8geW91ciBhZG1pbiB0byByZXF1ZXN0IGFjY2VzcyB0byB0aGlzIGZlYXR1cmUuIElmIHlvdSdyZSBmYWNpbmcgYW55IGlzc3VlcywgZmVlbCBmcmVlIHRvIDxhIGNsYXNzPVwiY3VzdG9tLWNvbnRhY3QtbGlua1wiIGhyZWY9XCIke3RoaXMuY29udGFjdFVybCA/PyAnaHR0cHM6Ly9zdXBwb3J0LmRlZmF1bHQuY29tJ31cIiB0YXJnZXQ9XCJfYmxhbmtcIj5Db250YWN0IFVzPC9hPi5gLFxyXG4gICAgICAgIG1lc3NhZ2VJY29uOiAnL2Fzc2V0cy9hY2Nlc3MtcmVzdHJpY3RlZC5naWYnLFxyXG4gICAgICAgIHNwYWNpbmdCZXR3ZWVuSW1hZ2VBbmREZXNjcmlwdGlvbjogJzBweCcsXHJcbiAgICAgICAgY29udGVudEdhcDonMjBweCcsXHJcbiAgICAgICAgdGl0bGVDbGFzczogJ2FjY2Vzcy1yZXN0cmljdGVkLXRpdGxlJyxcclxuICAgICAgICBkZXNjcmlwdGlvbkNsYXNzOiAnYWNjZXNzLXJlc3RyaWN0ZWQtZGVzY3JpcHRpb24nLFxyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGNvbnRlbnRJdGVtID0gY29udGVudFt0eXBlXTtcclxuXHJcbiAgICB0aGlzLnN0YXRlLnVwZGF0ZShzID0+ICh7XHJcbiAgICAgIC4uLnMsXHJcbiAgICAgIHR5cGUsXHJcbiAgICAgIC8vIE9ubHkgYXBwbHkgZGVmYXVsdCB2YWx1ZXMgaWYgY3VzdG9tIHZhbHVlcyBoYXZlbid0IGJlZW4gcHJvdmlkZWRcclxuICAgICAgdGl0bGU6IHMudGl0bGUgfHwgY29udGVudEl0ZW0udGl0bGUsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiBzLmRlc2NyaXB0aW9uIHx8IGNvbnRlbnRJdGVtLmRlc2NyaXB0aW9uLFxyXG4gICAgICBtZXNzYWdlSWNvbjogcy5tZXNzYWdlSWNvbiB8fCBjb250ZW50SXRlbS5tZXNzYWdlSWNvbixcclxuICAgICAgLy8gRm9yIG90aGVyIHByb3BlcnRpZXMsIG9ubHkgYXBwbHkgdGhlbSBpZiB0aGV5IGV4aXN0IGluIHRoZSBjb250ZW50SXRlbVxyXG4gICAgICAuLi4oY29udGVudEl0ZW0uc3BhY2luZ0JldHdlZW5JbWFnZUFuZERlc2NyaXB0aW9uICYmIHsgc3BhY2luZ0JldHdlZW5JbWFnZUFuZERlc2NyaXB0aW9uOiBjb250ZW50SXRlbS5zcGFjaW5nQmV0d2VlbkltYWdlQW5kRGVzY3JpcHRpb24gfSksXHJcbiAgICAgIC4uLihjb250ZW50SXRlbS5jb250ZW50R2FwICYmIHsgY29udGVudEdhcDogY29udGVudEl0ZW0uY29udGVudEdhcCB9KSxcclxuICAgICAgLi4uKGNvbnRlbnRJdGVtLnRpdGxlQ2xhc3MgJiYgeyB0aXRsZUNsYXNzOiBjb250ZW50SXRlbS50aXRsZUNsYXNzIH0pLFxyXG4gICAgICAuLi4oY29udGVudEl0ZW0uZGVzY3JpcHRpb25DbGFzcyAmJiB7IGRlc2NyaXB0aW9uQ2xhc3M6IGNvbnRlbnRJdGVtLmRlc2NyaXB0aW9uQ2xhc3MgfSlcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2FuaXRpemVEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBkZXNjcmlwdGlvbi5yZXBsYWNlKFxyXG4gICAgICAvc3VwcG9ydEBzYXJhc2FuYWx5dGljc1xcLmNvbS9nLFxyXG4gICAgICAnPHNwYW4gY2xhc3M9XCJzdXBwb3J0LWVtYWlsXCI+c3VwcG9ydEBzYXJhc2FuYWx5dGljcy5jb208L3NwYW4+J1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG9uQnV0dG9uQ2xpY2soYnV0dG9uOiBhbnksIGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcclxuICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBmb3JtIGJ1dHRvbiAoZnJvbSBhY3RpdmVDdXN0b21Gb3JtQnV0dG9uKSBvciByZWd1bGFyIGJhbm5lciBidXR0b25cclxuICAgIGlmICghZXZlbnQgJiYgKGJ1dHRvbi5hY3Rpb24gPT09ICdzdWJtaXQnIHx8IGJ1dHRvbi5hY3Rpb24gPT09ICdsaW5rJyB8fCBidXR0b24uaWQgPT09ICdhZGQtdXNlcicgfHwgYnV0dG9uLmlkID09PSAnbGVhcm4tbW9yZScpKSB7XHJcbiAgICAgIC8vIEhhbmRsZSBmb3JtIGJ1dHRvbnMgd2l0aCBuZXcgbG9naWNcclxuICAgICAgaWYgKCBidXR0b24uaWQgPT09ICdhZGQtdXNlcicpIHtcclxuICAgICAgICAvLyBIYW5kbGUgZm9ybSBzdWJtaXNzaW9uIChleGlzdGluZyBBZGQgVXNlciBmdW5jdGlvbmFsaXR5KVxyXG4gICAgICAgIHRoaXMub25BZGRVc2VyKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoYnV0dG9uLmFjdGlvbiA9PT0gJ2xpbmsnICYmIGJ1dHRvbi5saW5rKSB7XHJcbiAgICAgICAgLy8gSGFuZGxlIGxpbmsgbmF2aWdhdGlvbiAoTGVhcm4gTW9yZSBmdW5jdGlvbmFsaXR5KVxyXG4gICAgICAgIHdpbmRvdy5vcGVuKGJ1dHRvbi5saW5rLCAnX2JsYW5rJyk7XHJcbiAgICAgIH0gZWxzZSBpZiAoYnV0dG9uLm9uQ2xpY2spIHtcclxuICAgICAgICAvLyBIYW5kbGUgY3VzdG9tIGNsaWNrIGZ1bmN0aW9uXHJcbiAgICAgICAgYnV0dG9uLm9uQ2xpY2soKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChldmVudCkge1xyXG4gICAgICAvLyBIYW5kbGUgcmVndWxhciBiYW5uZXIgYnV0dG9ucyB3aXRoIG9yaWdpbmFsIGxvZ2ljIChiYWNrd2FyZCBjb21wYXRpYmlsaXR5KVxyXG4gICAgICB0aGlzLmJ1dHRvbkNsaWNrLmVtaXQoe1xyXG4gICAgICAgIHR5cGU6IGJ1dHRvbi50eXBlIGFzICdwcmltYXJ5JyB8ICdzZWNvbmRhcnknLFxyXG4gICAgICAgIGJ1dHRvbixcclxuICAgICAgICBvcmlnaW5hbEV2ZW50OiBldmVudFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzQnV0dG9uQXJyYXkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLmFjdGl2ZUN1c3RvbUZvcm1CdXR0b24pO1xyXG4gIH1cclxuXHJcbiAgaXNFbXB0eU9iamVjdChvYmo6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKG9iaikge1xyXG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDA7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUZvcm1seUZpZWxkcygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5mb3JtQ29uZmlnIHx8ICF0aGlzLmZvcm1Db25maWcuZmllbGRzIHx8IHRoaXMuZm9ybUNvbmZpZy5maWVsZHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuZmllbGRzID0gW107XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpZWxkcyA9IHRoaXMuZm9ybUNvbmZpZy5maWVsZHMubWFwKChpbnB1dCwgaW5kZXgpID0+IHtcclxuICAgICAgLy8gQWxsIGZpZWxkcyBzaG91bGQgYmUgc2lkZS1ieS1zaWRlOiBFbWFpbCtSb2xlIChyb3cgMSksIEJyYW5kcytVc2UgQ2FzZXMgKHJvdyAyKVxyXG4gICAgICBjb25zdCBjc3NDbGFzcyA9ICdjb2wtNic7IC8vIEFsbCBmaWVsZHMgZ2V0IDUwJSB3aWR0aCBmb3IgMngyIGdyaWQgbGF5b3V0XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCBmaWVsZENvbmZpZzogRm9ybWx5RmllbGRDb25maWcgPSB7XHJcbiAgICAgICAga2V5OiBpbnB1dC5sYWJlbC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xccysvZywgJ18nKSxcclxuICAgICAgICB0eXBlOiBpbnB1dC50eXBlID09PSAndGV4dCcgPyAnc2EtaW5wdXQnIDogJ3NhLXNlbGVjdCcsXHJcbiAgICAgICAgY2xhc3NOYW1lOiBjc3NDbGFzcywgLy8gQWxsIGZpZWxkcyB1c2UgY29sLTYgZm9yIHNpZGUtYnktc2lkZSBsYXlvdXRcclxuICAgICAgICBwcm9wczoge1xyXG4gICAgICAgICAgLi4uKGlucHV0LnR5cGUgPT09ICd0ZXh0JyAmJiB7XHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBpbnB1dC5wbGFjZWhvbGRlciB8fCBpbnB1dC5sYWJlbCxcclxuICAgICAgICAgICAgcmVxdWlyZWQ6IGlucHV0LnJlcXVpcmVkIHx8IGZhbHNlLFxyXG4gICAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHBhcmFtczoge1xyXG4gICAgICAgICAgICAgIHN1cHBvcnRUZXh0OiAnJyxcclxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogaW5wdXQucGxhY2Vob2xkZXIgfHwgaW5wdXQubGFiZWwsXHJcbiAgICAgICAgICAgICAgdHlwZTogaW5wdXQubGFiZWwgPT09ICdFbWFpbCBJRCcgPyAnbXVsdGktdmFsdWUnIDogJ3RleHQnLFxyXG4gICAgICAgICAgICAgIG11bHRpVmFsdWU6IGlucHV0LmxhYmVsID09PSAnRW1haWwgSUQnLFxyXG4gICAgICAgICAgICAgIGNoaXBWYWx1ZXM6IGlucHV0LmxhYmVsID09PSAnRW1haWwgSUQnID8gW10gOiB1bmRlZmluZWRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICAuLi4oKGlucHV0LnR5cGUgPT09ICdzZWxlY3QnIHx8IGlucHV0LnR5cGUgPT09ICdtdWx0aXNlbGVjdCcpICYmIHtcclxuICAgICAgICAgICAgcmVxdWlyZWQ6IGlucHV0LnJlcXVpcmVkIHx8IGZhbHNlLFxyXG4gICAgICAgICAgICBjbG9zZU9uc2VsZWN0OiBpbnB1dC50eXBlID09PSAnc2VsZWN0JywgLy8gT25seSBjbG9zZSBvbiBzZWxlY3QgZm9yIHNpbmdsZS1zZWxlY3RcclxuICAgICAgICAgICAgaXNDbGVhcmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIGJpbmRMYWJlbDogaW5kZXggPj0gMiA/ICduYW1lJyA6ICdsYWJlbCcsIC8vIFJlc3RvcmUgb3JpZ2luYWwgYmluZExhYmVsIGxvZ2ljXHJcbiAgICAgICAgICAgIGJpbmRWYWx1ZTogJ3ZhbHVlJyxcclxuICAgICAgICAgICAgb3B0aW9uczogaW5kZXggPj0gMiBcclxuICAgICAgICAgICAgICA/IChpbnB1dC5vcHRpb25zIHx8IFtdKS5tYXAob3B0aW9uID0+ICh7IC4uLm9wdGlvbiwgbmFtZTogb3B0aW9uLmxhYmVsIH0pKVxyXG4gICAgICAgICAgICAgIDogaW5wdXQub3B0aW9ucyB8fCBbXSxcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGlucHV0LnBsYWNlaG9sZGVyIHx8ICdTZWxlY3QgJyArIGlucHV0LmxhYmVsLFxyXG4gICAgICAgICAgICBwYXJhbXM6IHtcclxuICAgICAgICAgICAgICBsYWJlbDogaW5wdXQucGxhY2Vob2xkZXIgfHwgJ1NlbGVjdCAnICsgaW5wdXQubGFiZWwsXHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGlucHV0LnBsYWNlaG9sZGVyIHx8ICdTZWxlY3QgJyArIGlucHV0LmxhYmVsLFxyXG4gICAgICAgICAgICAgIG11bHRpcGxlOiBpbnB1dC50eXBlID09PSAnbXVsdGlzZWxlY3QnIHx8IGluZGV4ID49IDIsIC8vIEVuYWJsZSBtdWx0aXBsZSBmb3IgbXVsdGlzZWxlY3Qgb3IgYWRkaXRpb25hbCBmaWVsZHNcclxuICAgICAgICAgICAgICAuLi4oaW5wdXQudHlwZSA9PT0gJ211bHRpc2VsZWN0JyB8fCBpbmRleCA+PSAyKSAmJiB7XHJcbiAgICAgICAgICAgICAgICBpY29uUGF0aDogXCIuLi9hc3NldHMvY2xvc2VCbHVlT3V0bGluZWQuc3ZnXCIsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiAncmVndWxhcicsXHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogJ3ByaW1hcnknLFxyXG4gICAgICAgICAgICAgICAgZmlsbGluZzogJ2ZpbGxlZCcsXHJcbiAgICAgICAgICAgICAgICBpY29uUG9zaXRpb246ICdyaWdodCcsXHJcbiAgICAgICAgICAgICAgICBzaG93Q2hlY2tib3hlczogdHJ1ZVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBpZiAoaW5wdXQudmFsdWUpIHtcclxuICAgICAgICB0aGlzLm1vZGVsW2ZpZWxkQ29uZmlnLmtleSBhcyBzdHJpbmddID0gaW5wdXQudmFsdWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBmaWVsZENvbmZpZztcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25Gb3JtTW9kZWxDaGFuZ2UobW9kZWw6IGFueSk6IHZvaWQge1xyXG4gICAgLy8gVXBkYXRlIHRoZSBmb3JtSW5wdXRzIGFycmF5IHdoZW4gdGhlIEZvcm1seSBtb2RlbCBjaGFuZ2VzXHJcbiAgICBPYmplY3Qua2V5cyhtb2RlbCkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICBjb25zdCBpbnB1dCA9IHRoaXMuYWN0aXZlRm9ybUlucHV0cy5maW5kKGlucHV0ID0+IFxyXG4gICAgICAgIGlucHV0LmxhYmVsLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzKy9nLCAnXycpID09PSBrZXlcclxuICAgICAgKTtcclxuICAgICAgaWYgKGlucHV0KSB7XHJcbiAgICAgICAgaW5wdXQudmFsdWUgPSBtb2RlbFtrZXldO1xyXG4gICAgICAgIC8vIEVtaXQgdGhlIGNoYW5nZSBldmVudCB0byBtYWludGFpbiBjb21wYXRpYmlsaXR5IHdpdGggZXhpc3RpbmcgbG9naWNcclxuICAgICAgICB0aGlzLm9uRm9ybUV2ZW50LmVtaXQoeyB0eXBlOiAnZm9ybS1pbnB1dC1jaGFuZ2UnLCBkYXRhOiB7IGxhYmVsOiBpbnB1dC5sYWJlbCwgdmFsdWU6IG1vZGVsW2tleV0gfSB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHNob3VsZFNob3dBZGRpdGlvbmFsRmllbGRzKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmFjdGl2ZUZvcm1JbnB1dHMgfHwgdGhpcy5hY3RpdmVGb3JtSW5wdXRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgaWYgKCF0aGlzLmFjdGl2ZUZvcm1MYXlvdXQuY29uZGl0aW9uYWxGaWVsZHMpIHtcclxuICAgICAgY29uc3QgaW5pdGlhbENvdW50ID0gdGhpcy5hY3RpdmVGb3JtTGF5b3V0LmluaXRpYWxWaXNpYmxlRmllbGRzIHx8IHRoaXMuYWN0aXZlRm9ybUxheW91dC5maWVsZHNQZXJSb3cgfHwgMjtcclxuICAgICAgY29uc3QgaW5pdGlhbEZpZWxkcyA9IHRoaXMuYWN0aXZlRm9ybUlucHV0cy5zbGljZSgwLCBpbml0aWFsQ291bnQpO1xyXG4gICAgICByZXR1cm4gaW5pdGlhbEZpZWxkcy5ldmVyeShmaWVsZCA9PiBmaWVsZC52YWx1ZSAmJiBmaWVsZC52YWx1ZS50cmltICYmIGZpZWxkLnZhbHVlLnRyaW0oKSAhPT0gJycpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlRm9ybUxheW91dC5jb25kaXRpb25hbEZpZWxkcy5zaG93V2hlbih0aGlzLm1vZGVsKTtcclxuICB9XHJcblxyXG4gIC8vIEdldCBpbml0aWFsIGZpZWxkcyB0byBkaXNwbGF5IGluIHRoZSBmaXJzdCByb3dcclxuICBnZXRJbml0aWFsRmllbGRzKCk6IEZvcm1GaWVsZENvbmZpZ1tdIHtcclxuICAgIGlmICghdGhpcy5hY3RpdmVGb3JtSW5wdXRzKSByZXR1cm4gW107XHJcbiAgICBcclxuICAgIGNvbnN0IGluaXRpYWxDb3VudCA9IHRoaXMuYWN0aXZlRm9ybUxheW91dC5pbml0aWFsVmlzaWJsZUZpZWxkcyB8fCB0aGlzLmFjdGl2ZUZvcm1MYXlvdXQuZmllbGRzUGVyUm93IHx8IDI7XHJcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVGb3JtSW5wdXRzLnNsaWNlKDAsIGluaXRpYWxDb3VudCk7XHJcbiAgfVxyXG5cclxuICAvLyBHZXQgYWRkaXRpb25hbCBmaWVsZHMgdG8gZGlzcGxheSBjb25kaXRpb25hbGx5XHJcbiAgZ2V0QWRkaXRpb25hbEZpZWxkcygpOiBGb3JtRmllbGRDb25maWdbXSB7XHJcbiAgICBpZiAoIXRoaXMuYWN0aXZlRm9ybUlucHV0cykgcmV0dXJuIFtdO1xyXG4gICAgXHJcbiAgICBjb25zdCBpbml0aWFsQ291bnQgPSB0aGlzLmFjdGl2ZUZvcm1MYXlvdXQuaW5pdGlhbFZpc2libGVGaWVsZHMgfHwgdGhpcy5hY3RpdmVGb3JtTGF5b3V0LmZpZWxkc1BlclJvdyB8fCAyO1xyXG4gICAgXHJcbiAgICAvLyBJZiBjb25kaXRpb25hbCBmaWVsZHMgYXJlIHNwZWNpZmllZCwgdXNlIHRob3NlIGluZGljZXNcclxuICAgIGlmICh0aGlzLmFjdGl2ZUZvcm1MYXlvdXQuY29uZGl0aW9uYWxGaWVsZHM/LmZpZWxkcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5hY3RpdmVGb3JtTGF5b3V0LmNvbmRpdGlvbmFsRmllbGRzLmZpZWxkc1xyXG4gICAgICAgIC5tYXAoaW5kZXggPT4gdGhpcy5hY3RpdmVGb3JtSW5wdXRzW2luZGV4XSlcclxuICAgICAgICAuZmlsdGVyKGZpZWxkID0+IGZpZWxkKTsgLy8gUmVtb3ZlIHVuZGVmaW5lZCBmaWVsZHNcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gT3RoZXJ3aXNlLCBzaG93IHJlbWFpbmluZyBmaWVsZHMgYWZ0ZXIgaW5pdGlhbCBjb3VudFxyXG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlRm9ybUlucHV0cy5zbGljZShpbml0aWFsQ291bnQpO1xyXG4gIH1cclxuXHJcbiAgLy8gR2V0IHRoZSBhY3R1YWwgZmllbGQgaW5kZXggZm9yIGluaXRpYWwgZmllbGRzXHJcbiAgZ2V0SW5pdGlhbEZpZWxkSW5kZXgobG9jYWxJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBsb2NhbEluZGV4O1xyXG4gIH1cclxuXHJcbiAgLy8gR2V0IHRoZSBhY3R1YWwgZmllbGQgaW5kZXggZm9yIGFkZGl0aW9uYWwgZmllbGRzXHJcbiAgZ2V0QWRkaXRpb25hbEZpZWxkSW5kZXgobG9jYWxJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGluaXRpYWxDb3VudCA9IHRoaXMuYWN0aXZlRm9ybUxheW91dC5pbml0aWFsVmlzaWJsZUZpZWxkcyB8fCB0aGlzLmFjdGl2ZUZvcm1MYXlvdXQuZmllbGRzUGVyUm93IHx8IDI7XHJcbiAgICBcclxuICAgIC8vIElmIGNvbmRpdGlvbmFsIGZpZWxkcyBhcmUgc3BlY2lmaWVkLCB1c2UgdGhvc2UgaW5kaWNlc1xyXG4gICAgaWYgKHRoaXMuYWN0aXZlRm9ybUxheW91dC5jb25kaXRpb25hbEZpZWxkcz8uZmllbGRzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmFjdGl2ZUZvcm1MYXlvdXQuY29uZGl0aW9uYWxGaWVsZHMuZmllbGRzW2xvY2FsSW5kZXhdIHx8IDA7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIE90aGVyd2lzZSwgb2Zmc2V0IGJ5IGluaXRpYWwgY291bnRcclxuICAgIHJldHVybiBpbml0aWFsQ291bnQgKyBsb2NhbEluZGV4O1xyXG4gIH1cclxuXHJcbiAgLy8gR2V0IENTUyBjbGFzcyBmb3IgYWRkaXRpb25hbCBmaWVsZHMgdG8gbWFpbnRhaW4gbGF5b3V0XHJcbiAgZ2V0QWRkaXRpb25hbEZpZWxkQ2xhc3MobG9jYWxJbmRleDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGZpZWxkc1BlclJvdyA9IHRoaXMuYWN0aXZlRm9ybUxheW91dC5maWVsZHNQZXJSb3cgfHwgMjtcclxuICAgIFxyXG4gICAgaWYgKGZpZWxkc1BlclJvdyA9PT0gMikge1xyXG4gICAgICByZXR1cm4gJ2NvbC02JzsgLy8gQm9vdHN0cmFwLXN0eWxlIDUwJSB3aWR0aCBmb3IgMi1jb2x1bW4gbGF5b3V0XHJcbiAgICB9IGVsc2UgaWYgKGZpZWxkc1BlclJvdyA9PT0gMSkge1xyXG4gICAgICByZXR1cm4gJ2NvbC0xMic7IC8vIEZ1bGwgd2lkdGggZm9yIHNpbmdsZSBjb2x1bW5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBgY29sLSR7MTIgLyBmaWVsZHNQZXJSb3d9YDsgLy8gRHluYW1pYyB3aWR0aCBiYXNlZCBvbiBmaWVsZHMgcGVyIHJvd1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gQ2hlY2sgaWYgYWxsIHZpc2libGUgZmllbGRzIGFyZSBmaWxsZWQgYW5kIGZvcm0gaXMgdmFsaWRcclxuICBhcmVBbGxWaXNpYmxlRmllbGRzRmlsbGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmFjdGl2ZUZvcm1JbnB1dHMgfHwgdGhpcy5hY3RpdmVGb3JtSW5wdXRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7XHJcbiAgICBcclxuICAgIC8vIEdldCBhbGwgY3VycmVudGx5IHZpc2libGUgZmllbGRzXHJcbiAgICBjb25zdCBpbml0aWFsRmllbGRzID0gdGhpcy5nZXRJbml0aWFsRmllbGRzKCk7XHJcbiAgICBjb25zdCBhZGRpdGlvbmFsRmllbGRzID0gdGhpcy5zaG91bGRTaG93QWRkaXRpb25hbEZpZWxkcygpID8gdGhpcy5nZXRBZGRpdGlvbmFsRmllbGRzKCkgOiBbXTtcclxuICAgIGNvbnN0IGFsbFZpc2libGVGaWVsZHMgPSBbLi4uaW5pdGlhbEZpZWxkcywgLi4uYWRkaXRpb25hbEZpZWxkc107XHJcbiAgICBcclxuICAgIC8vIENoZWNrIGlmIGFsbCB2aXNpYmxlIGZpZWxkcyBoYXZlIHZhbHVlc1xyXG4gICAgY29uc3QgYWxsRmllbGRzRmlsbGVkID0gYWxsVmlzaWJsZUZpZWxkcy5ldmVyeShmaWVsZCA9PiB7XHJcbiAgICAgIGNvbnN0IG1vZGVsS2V5ID0gZmllbGQubGFiZWwudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICdfJyk7XHJcbiAgICAgIGNvbnN0IGZpZWxkVmFsdWUgPSB0aGlzLm1vZGVsW21vZGVsS2V5XTtcclxuICAgICAgXHJcbiAgICAgIGlmICghZmllbGRWYWx1ZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICBcclxuICAgICAgLy8gRm9yIHN0cmluZyB2YWx1ZXMsIGNoZWNrIGlmIG5vdCBlbXB0eSBhZnRlciB0cmltXHJcbiAgICAgIGlmICh0eXBlb2YgZmllbGRWYWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICByZXR1cm4gZmllbGRWYWx1ZS50cmltKCkgIT09ICcnO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAvLyBGb3IgYXJyYXlzIChtdWx0aS1zZWxlY3QpLCBjaGVjayBpZiBub3QgZW1wdHlcclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmllbGRWYWx1ZSkpIHtcclxuICAgICAgICByZXR1cm4gZmllbGRWYWx1ZS5sZW5ndGggPiAwO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0pO1xyXG4gICAgXHJcbiAgICAvLyBBbHNvIGNoZWNrIGlmIHRoZSBmb3JtIGlzIHZhbGlkXHJcbiAgICBjb25zdCBmb3JtVmFsaWQgPSB0aGlzLmZvcm0udmFsaWQ7XHJcbiAgICBcclxuICAgIHJldHVybiBhbGxGaWVsZHNGaWxsZWQgJiYgZm9ybVZhbGlkO1xyXG4gIH1cclxufVxyXG4iLCJAaWYgKGJhbm5lckNvbnRlbnQoKTsgYXMgY29udGVudCkge1xyXG4gIDxkaXYgY2xhc3M9XCJlcnJvci1wYWdlIG1lc3NhZ2UtYmFubmVyLXYyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29udGVudC1jb250YWluZXJcIiBbbmdTdHlsZV09XCJ7IGdhcDogY29udGVudEdhcCB8fCAndmFyKC0tbWVkaXVtLTMycHgsIDMycHgpJyB9XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZS1jb250YWluZXJcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cInsgJ21hcmdpbi1ib3R0b20nOiBzcGFjaW5nQmV0d2VlbkltYWdlQW5kRGVzY3JpcHRpb24gPz8gJ3ZhcigtLXNtYWxsLTE2cHgsIDE2cHgpJyB9XCI+XHJcbiAgICAgICAgPGltZyBbc3JjXT1cImNvbnRlbnQubWVzc2FnZUljb25cIiBbYWx0XT1cImNvbnRlbnQudHlwZSArICcgaW1hZ2UnXCJcclxuICAgICAgICAgIFtzdHlsZS4tLW1lc3NhZ2UtaWNvbi1oZWlnaHRdPVwiY29udGVudC5tZXNzYWdlSWNvblNpemU/LmhlaWdodFwiXHJcbiAgICAgICAgICBbc3R5bGUuLS1tZXNzYWdlLWljb24td2lkdGhdPVwiY29udGVudC5tZXNzYWdlSWNvblNpemU/LndpZHRoXCIgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxzXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLWRlc2NyaXB0aW9uXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtY2xhc3NcIiBbbmdDbGFzc109XCJ0aXRsZUNsYXNzIHx8ICd0aXRsZS1jbGFzcydcIiBbaW5uZXJIVE1MXT1cImNvbnRlbnQudGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgIDxwIGNsYXNzPVwiZGVzY3JpcHRpb25cIiBbbmdDbGFzc109XCJkZXNjcmlwdGlvbkNsYXNzIHx8ICdkZXNjcmlwdGlvbidcIiBbaW5uZXJIVE1MXT1cImNvbnRlbnQuZGVzY3JpcHRpb25cIj48L3A+IFxyXG4gICAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7IG1hcmdpbjogYmFubmVyPy5zcGFjaW5nICsgJ3B4IDBweCcgfVwiPlxyXG4gICAgICAgICAgICA8c2EtbWVzc2FnZS1iYW5uZXIgKm5nSWY9XCIhaXNFbXB0eU9iamVjdChiYW5uZXIpXCIgW3R5cGVdPVwiYmFubmVyPy50eXBlXCIgW2Jhbm5lckljb25dPVwiYmFubmVyPy5iYW5uZXJJY29uXCIgW2J1dHRvbkljb25dPVwiYmFubmVyPy5idXR0b25JY29uXCJcclxuICAgICAgICAgICAgICBbYmFubmVySWNvblNpemVdPVwiYmFubmVyPy5iYW5uZXJJY29uU2l6ZVwiIFtidXR0b25UeXBlXT1cImJhbm5lcj8uYnV0dG9uVHlwZVwiIFtidXR0b25TaXplXT1cImJhbm5lcj8uYnV0dG9uU2l6ZVwiIFtidXR0b25JY29uUG9zaXRpb25dPVwiYmFubmVyPy5idXR0b25JY29uUG9zaXRpb25cIlxyXG4gICAgICAgICAgICAgIFtidXR0b25JY29uU2l6ZV09XCJiYW5uZXI/LmJ1dHRvbkljb25TaXplXCIgW2FjdGlvblRleHRdPVwiYmFubmVyPy5hY3Rpb25UZXh0XCIgPlxyXG4gICAgICAgICAgICAgIDxkaXYgW2lubmVySFRNTF09XCJiYW5uZXI/LnRleHRcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9zYS1tZXNzYWdlLWJhbm5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gIFxyXG4gICAgICAgIDwhLS0gRm9ybSBpbnB1dHMgc2VjdGlvbiAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aXZlRm9ybUlucHV0cz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiBjbGFzcz1cImRpYWxvZy1mb3JtXCI+XHJcbiAgICAgICAgICAgIDwhLS0gSW5pdGlhbCBmaWVsZHMgcm93IChkeW5hbWljIGNvdW50IGJhc2VkIG9uIGZvcm1MYXlvdXQuZmllbGRzUGVyUm93KSAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtd3JhcHBlclwiICpuZ0Zvcj1cImxldCBpbnB1dCBvZiBnZXRJbml0aWFsRmllbGRzKCk7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgIDxmb3JtbHktZm9ybSBcclxuICAgICAgICAgICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXHJcbiAgICAgICAgICAgICAgICAgIFtmaWVsZHNdPVwiW2ZpZWxkc1tnZXRJbml0aWFsRmllbGRJbmRleChpKV1dXCJcclxuICAgICAgICAgICAgICAgICAgW21vZGVsXT1cIm1vZGVsXCJcclxuICAgICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cIm9uRm9ybU1vZGVsQ2hhbmdlKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgIDwvZm9ybWx5LWZvcm0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPCEtLSBBZGRpdGlvbmFsIGZpZWxkcyAoY29uZGl0aW9uYWwgYmFzZWQgb24gZm9ybUxheW91dC5jb25kaXRpb25hbEZpZWxkcykgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGRpdGlvbmFsLWZpZWxkc1wiICpuZ0lmPVwic2hvdWxkU2hvd0FkZGl0aW9uYWxGaWVsZHMoKVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtd3JhcHBlclwiICpuZ0Zvcj1cImxldCBpbnB1dCBvZiBnZXRBZGRpdGlvbmFsRmllbGRzKCk7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgIDxmb3JtbHktZm9ybSBcclxuICAgICAgICAgICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXHJcbiAgICAgICAgICAgICAgICAgIFtmaWVsZHNdPVwiW2ZpZWxkc1tnZXRBZGRpdGlvbmFsRmllbGRJbmRleChpKV1dXCJcclxuICAgICAgICAgICAgICAgICAgW21vZGVsXT1cIm1vZGVsXCJcclxuICAgICAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwib25Gb3JtTW9kZWxDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZHNbZ2V0QWRkaXRpb25hbEZpZWxkSW5kZXgoaSldXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Zvcm1seS1mb3JtPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gIFxyXG4gICAgICAgIDwhLS0gQ3VzdG9tIGZvcm0gYnV0dG9uKHMpIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWJ1dHRvbi1jb250YWluZXJcIiAqbmdJZj1cImFjdGl2ZUN1c3RvbUZvcm1CdXR0b25cIj5cclxuICAgICAgICAgIDwhLS0gU3VwcG9ydCBib3RoIHNpbmdsZSBidXR0b24gYW5kIGFycmF5IG9mIGJ1dHRvbnMgLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNCdXR0b25BcnJheSgpOyBlbHNlIHNpbmdsZUJ1dHRvblwiPlxyXG4gICAgICAgICAgICA8c2EtYnV0dG9uIFxyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBidXR0b24gb2YgYWN0aXZlQ3VzdG9tRm9ybUJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb24tYnV0dG9uXCJcclxuICAgICAgICAgICAgICBbaWRdPVwiYnV0dG9uLmlkXCJcclxuICAgICAgICAgICAgICBbdGV4dF09XCJidXR0b24udGV4dFwiXHJcbiAgICAgICAgICAgICAgW3R5cGVdPVwiYnV0dG9uLnR5cGVcIlxyXG4gICAgICAgICAgICAgIFtzaXplXT1cImJ1dHRvbi5zaXplXCJcclxuICAgICAgICAgICAgICBbc3RhdGVdPVwiYnV0dG9uLnN0YXRlXCJcclxuICAgICAgICAgICAgICBbSW1hZ2VQYXRoXT1cImJ1dHRvbi5JbWFnZVBhdGhcIlxyXG4gICAgICAgICAgICAgIFtpY29uUG9zaXRpb25dPVwiYnV0dG9uLmljb25Qb3NpdGlvblwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQnV0dG9uQ2xpY2soYnV0dG9uKVwiPlxyXG4gICAgICAgICAgICA8L3NhLWJ1dHRvbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3NpbmdsZUJ1dHRvbj5cclxuICAgICAgICAgICAgPHNhLWJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idXR0b25cIlxyXG4gICAgICAgICAgICAgIFtpZF09XCJhY3RpdmVDdXN0b21Gb3JtQnV0dG9uLmlkXCJcclxuICAgICAgICAgICAgICBbdGV4dF09XCJhY3RpdmVDdXN0b21Gb3JtQnV0dG9uLnRleHRcIlxyXG4gICAgICAgICAgICAgIFt0eXBlXT1cImFjdGl2ZUN1c3RvbUZvcm1CdXR0b24udHlwZVwiXHJcbiAgICAgICAgICAgICAgW3NpemVdPVwiYWN0aXZlQ3VzdG9tRm9ybUJ1dHRvbi5zaXplXCJcclxuICAgICAgICAgICAgICBbc3RhdGVdPVwiYWN0aXZlQ3VzdG9tRm9ybUJ1dHRvbi5zdGF0ZVwiXHJcbiAgICAgICAgICAgICAgW0ltYWdlUGF0aF09XCJhY3RpdmVDdXN0b21Gb3JtQnV0dG9uLkltYWdlUGF0aFwiXHJcbiAgICAgICAgICAgICAgW2ljb25Qb3NpdGlvbl09XCJhY3RpdmVDdXN0b21Gb3JtQnV0dG9uLmljb25Qb3NpdGlvblwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQnV0dG9uQ2xpY2soYWN0aXZlQ3VzdG9tRm9ybUJ1dHRvbilcIj5cclxuICAgICAgICAgICAgPC9zYS1idXR0b24+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gIFxyXG4gICAgICAgIDwhLS0gRGl2aWRlciBzZWN0aW9uIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkaXZpZGVyLXNlY3Rpb25cIiAqbmdJZj1cImFjdGl2ZURpdmlkZXJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXZpZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2aWRlci1oZWFkZXJcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiZGl2aWRlci10aXRsZVwiICpuZ0lmPVwiYWN0aXZlRGl2aWRlckNvbmZpZy50aXRsZVwiPnt7IGFjdGl2ZURpdmlkZXJDb25maWcudGl0bGUgfX08L2gzPlxyXG4gICAgICAgICAgICA8cCBjbGFzcz1cImRpdmlkZXItc3VidGl0bGVcIiAqbmdJZj1cImFjdGl2ZURpdmlkZXJDb25maWcuc3VidGl0bGUgfHwgYWN0aXZlRGl2aWRlckNvbmZpZy5zaG93U3VidGl0bGVXaGVuRW1wdHlcIj5cclxuICAgICAgICAgICAgICB7eyBhY3RpdmVEaXZpZGVyQ29uZmlnLnN1YnRpdGxlIHx8ICdObyBpdGVtcyBhZGRlZCB5ZXQnIH19XHJcbiAgICAgICAgICAgIDwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICBcclxuICAgICAgICA8IS0tIENoaXBzIHNlY3Rpb24gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNoaXAtbGlzdFwiICpuZ0lmPVwiYWN0aXZlQ2hpcHM/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgPHNhLWNoaXAgXHJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNoaXAgb2YgYWN0aXZlQ2hpcHNcIlxyXG4gICAgICAgICAgICAgIFt0ZXh0XT1cImNoaXAubGFiZWwgfHwgY2hpcC50ZXh0IHx8IGNoaXBcIlxyXG4gICAgICAgICAgICAgIFt0eXBlXT1cIidyZWd1bGFyJ1wiXHJcbiAgICAgICAgICAgICAgW3N0YXRlXT1cIidkZWZhdWx0J1wiXHJcbiAgICAgICAgICAgICAgW2ZpbGxpbmddPVwiJ2ZpbGxlZCdcIlxyXG4gICAgICAgICAgICAgIFtpY29uUG9zaXRpb25dPVwiJ3JpZ2h0J1wiXHJcbiAgICAgICAgICAgICAgW2ljb25QYXRoXT1cIicuLi9hc3NldHMvY2xvc2VCbHVlT3V0bGluZWQuc3ZnJ1wiXHJcbiAgICAgICAgICAgICAgKG9uQ2xpY2tFdmVudCk9XCJjaGlwLnJlbW92YWJsZSA/IG9uQ2hpcFJlbW92ZShjaGlwKSA6IG51bGxcIj5cclxuICAgICAgICAgICAgPC9zYS1jaGlwPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgXHJcbiAgICAgICAgQGlmKGJ1dHRvbnMpe1xyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b24tZ3JvdXBcIj5cclxuICAgICAgICAgIEBmb3IgKGJ1dHRvbiBvZiBidXR0b25zOyB0cmFjayBidXR0b24udGV4dCkge1xyXG4gICAgICAgICAgICA8c2EtYnV0dG9uIFxyXG4gICAgICAgICAgICAgIFt0ZXh0XT1cImJ1dHRvbi50ZXh0XCJcclxuICAgICAgICAgICAgICBbaWNvbl09XCJidXR0b24uaWNvblwiXHJcbiAgICAgICAgICAgICAgW3NpemVdPVwiYnV0dG9uLnNpemVcIlxyXG4gICAgICAgICAgICAgIFt0eXBlXT1cImJ1dHRvbi50eXBlXCJcclxuICAgICAgICAgICAgICBbaWNvblBvc2l0aW9uXT1cImJ1dHRvbi5pY29uUG9zaXRpb25cIlxyXG4gICAgICAgICAgICAgIFtidXR0b25JY29uU2l6ZV09XCJidXR0b24uYnV0dG9uSWNvblNpemVcIlxyXG4gICAgICAgICAgICAgIChvbkNsaWNrRXZlbnQpPVwib25CdXR0b25DbGljayhidXR0b24sICRldmVudClcIlxyXG4gICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgIFtzdGF0ZV09XCIhYXJlQWxsVmlzaWJsZUZpZWxkc0ZpbGxlZCgpID8gJ2Rpc2FibGVkJyA6ICcnXCJcclxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImJ1dHRvbi50ZXh0XCI+XHJcbiAgICAgICAgICAgIDwvc2EtYnV0dG9uPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICB9Il19
|