@meshmakers/shared-ui 3.1.140-0 → 3.1.143-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/esm2022/lib/mm-autocomplete-input/mm-autocomplete-input.component.mjs +302 -0
  2. package/esm2022/lib/mm-breadcrumb/mm-breadcrumb.component.mjs +108 -0
  3. package/esm2022/lib/mm-confirmation-window/mm-confirmation-window.component.mjs +75 -0
  4. package/esm2022/lib/mm-entity-select-input/mm-entity-select-input.component.mjs +293 -0
  5. package/esm2022/lib/{mm-shared-ui/mm-message-details → mm-message-details}/mm-message-details.component.mjs +4 -4
  6. package/esm2022/lib/mm-multiple-entity-select-input/mm-multiple-entity-select-input.component.mjs +316 -0
  7. package/esm2022/lib/mm-notification-bar/mm-notification-bar.component.mjs +40 -0
  8. package/esm2022/lib/mm-progress-window/mm-progress-window.component.mjs +34 -0
  9. package/esm2022/lib/mm-shared-ui.module.mjs +83 -0
  10. package/esm2022/lib/{shared → models}/abstractDetailsComponent.mjs +1 -1
  11. package/esm2022/lib/{shared → models}/commonValidators.mjs +1 -1
  12. package/esm2022/lib/models/confirmation.mjs +15 -0
  13. package/esm2022/lib/models/progressValue.mjs +9 -0
  14. package/esm2022/lib/services/confirmation.service.mjs +69 -0
  15. package/esm2022/lib/services/progress-notifier.service.mjs +63 -0
  16. package/esm2022/public-api.mjs +13 -16
  17. package/fesm2022/meshmakers-shared-ui.mjs +267 -337
  18. package/fesm2022/meshmakers-shared-ui.mjs.map +1 -1
  19. package/lib/{breadcrumb/mat-breadcrumb → mm-breadcrumb}/mm-breadcrumb.component.d.ts +1 -2
  20. package/lib/{confirmation-dialog/confirmation-window → mm-confirmation-window}/mm-confirmation-window.component.d.ts +1 -1
  21. package/lib/{progress-notifier/progress-window → mm-progress-window}/mm-progress-window.component.d.ts +1 -1
  22. package/lib/mm-shared-ui.module.d.ts +25 -0
  23. package/lib/{confirmation-dialog/services → services}/confirmation.service.d.ts +1 -1
  24. package/package.json +3 -3
  25. package/public-api.d.ts +12 -15
  26. package/esm2022/lib/breadcrumb/breadcrumb.module.mjs +0 -22
  27. package/esm2022/lib/breadcrumb/mat-breadcrumb/mm-breadcrumb.component.mjs +0 -109
  28. package/esm2022/lib/breadcrumb/model/breadcrumb.mjs +0 -2
  29. package/esm2022/lib/breadcrumb/services/breadcrumb.service.mjs +0 -22
  30. package/esm2022/lib/confirmation-dialog/confirmation-dialog.module.mjs +0 -26
  31. package/esm2022/lib/confirmation-dialog/confirmation-window/mm-confirmation-window.component.mjs +0 -75
  32. package/esm2022/lib/confirmation-dialog/services/confirmation.service.mjs +0 -69
  33. package/esm2022/lib/confirmation-dialog/shared/confirmation.mjs +0 -15
  34. package/esm2022/lib/mm-shared-ui/mm-autocomplete-input/mm-autocomplete-input.component.mjs +0 -302
  35. package/esm2022/lib/mm-shared-ui/mm-entity-select-input/mm-entity-select-input.component.mjs +0 -293
  36. package/esm2022/lib/mm-shared-ui/mm-multiple-entity-select-input/mm-multiple-entity-select-input.component.mjs +0 -316
  37. package/esm2022/lib/mm-shared-ui/mm-notification-bar/mm-notification-bar.component.mjs +0 -40
  38. package/esm2022/lib/mm-shared-ui/mm-shared-ui.module.mjs +0 -74
  39. package/esm2022/lib/progress-notifier/progress-notifier.module.mjs +0 -27
  40. package/esm2022/lib/progress-notifier/progress-window/mm-progress-window.component.mjs +0 -35
  41. package/esm2022/lib/progress-notifier/services/progress-notifier.service.mjs +0 -63
  42. package/esm2022/lib/progress-notifier/shared/progressValue.mjs +0 -9
  43. package/lib/breadcrumb/breadcrumb.module.d.ts +0 -12
  44. package/lib/breadcrumb/model/breadcrumb.d.ts +0 -4
  45. package/lib/breadcrumb/services/breadcrumb.service.d.ts +0 -11
  46. package/lib/confirmation-dialog/confirmation-dialog.module.d.ts +0 -12
  47. package/lib/mm-shared-ui/mm-shared-ui.module.d.ts +0 -22
  48. package/lib/progress-notifier/progress-notifier.module.d.ts +0 -13
  49. /package/lib/{mm-shared-ui/mm-autocomplete-input → mm-autocomplete-input}/mm-autocomplete-input.component.d.ts +0 -0
  50. /package/lib/{mm-shared-ui/mm-entity-select-input → mm-entity-select-input}/mm-entity-select-input.component.d.ts +0 -0
  51. /package/lib/{mm-shared-ui/mm-message-details → mm-message-details}/mm-message-details.component.d.ts +0 -0
  52. /package/lib/{mm-shared-ui/mm-multiple-entity-select-input → mm-multiple-entity-select-input}/mm-multiple-entity-select-input.component.d.ts +0 -0
  53. /package/lib/{mm-shared-ui/mm-notification-bar → mm-notification-bar}/mm-notification-bar.component.d.ts +0 -0
  54. /package/lib/{shared → models}/abstractDetailsComponent.d.ts +0 -0
  55. /package/lib/{shared → models}/commonValidators.d.ts +0 -0
  56. /package/lib/{confirmation-dialog/shared → models}/confirmation.d.ts +0 -0
  57. /package/lib/{progress-notifier/shared → models}/progressValue.d.ts +0 -0
  58. /package/lib/{progress-notifier/services → services}/progress-notifier.service.d.ts +0 -0
@@ -0,0 +1,293 @@
1
+ import { Component, EventEmitter, forwardRef, HostBinding, Input, ViewChild } from '@angular/core';
2
+ import { FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl } from '@angular/forms';
3
+ import { MatFormFieldControl } from '@angular/material/form-field';
4
+ import { of, Subject } from 'rxjs';
5
+ import { debounceTime, filter, switchMap, tap } from 'rxjs/operators';
6
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/cdk/a11y";
9
+ import * as i2 from "@angular/common";
10
+ import * as i3 from "@angular/material/autocomplete";
11
+ import * as i4 from "@angular/material/core";
12
+ import * as i5 from "@angular/material/input";
13
+ import * as i6 from "@angular/material/progress-spinner";
14
+ import * as i7 from "@angular/forms";
15
+ export class MmEntitySelectInputComponent {
16
+ elRef;
17
+ injector;
18
+ fm;
19
+ static nextId = 0;
20
+ searchFormControl;
21
+ isLoading;
22
+ filteredEntities = [];
23
+ ngControl;
24
+ errorState;
25
+ focused;
26
+ stateChanges = new Subject();
27
+ id = `ia-entity-select-${MmEntitySelectInputComponent.nextId++}`;
28
+ valueChange = new EventEmitter();
29
+ _selectedEntity;
30
+ inputField;
31
+ describedBy = '';
32
+ activatedValue;
33
+ constructor(elRef, injector, fm) {
34
+ this.elRef = elRef;
35
+ this.injector = injector;
36
+ this.fm = fm;
37
+ this.ngControl = null;
38
+ this.errorState = false;
39
+ this.inputField = null;
40
+ this._dataSource = null;
41
+ this._placeholder = '';
42
+ this._prefix = '';
43
+ this.searchFormControl = new FormControl();
44
+ this.isLoading = false;
45
+ this._disabled = false;
46
+ this.focused = false;
47
+ fm.monitor(elRef.nativeElement, true).subscribe((origin) => {
48
+ this.focused = !!origin;
49
+ this.stateChanges.next();
50
+ });
51
+ }
52
+ _dataSource;
53
+ get dataSource() {
54
+ return this._dataSource;
55
+ }
56
+ set dataSource(value) {
57
+ this._dataSource = value;
58
+ }
59
+ _disabled = false;
60
+ get disabled() {
61
+ return this._disabled;
62
+ }
63
+ set disabled(dis) {
64
+ this._disabled = coerceBooleanProperty(dis);
65
+ if (this._disabled) {
66
+ this.searchFormControl.disable();
67
+ }
68
+ else {
69
+ this.searchFormControl.enable();
70
+ }
71
+ this.stateChanges.next();
72
+ }
73
+ _placeholder;
74
+ get placeholder() {
75
+ return this._placeholder;
76
+ }
77
+ set placeholder(plh) {
78
+ this._placeholder = plh;
79
+ this.stateChanges.next();
80
+ }
81
+ _required = false;
82
+ get required() {
83
+ return this._required;
84
+ }
85
+ set required(req) {
86
+ this._required = coerceBooleanProperty(req);
87
+ if (this.inputField != null) {
88
+ this.inputField.required = this._required;
89
+ }
90
+ this.stateChanges.next();
91
+ }
92
+ _prefix;
93
+ get prefix() {
94
+ return this._prefix;
95
+ }
96
+ set prefix(value) {
97
+ if (value !== this._prefix) {
98
+ this._prefix = value;
99
+ }
100
+ }
101
+ get value() {
102
+ return this._selectedEntity;
103
+ }
104
+ set value(value) {
105
+ if (value !== this._selectedEntity) {
106
+ this.searchFormControl.setValue(value);
107
+ this.setValue(value);
108
+ }
109
+ }
110
+ get empty() {
111
+ const n = this.searchFormControl.value;
112
+ return !n;
113
+ }
114
+ get shouldLabelFloat() {
115
+ return this.focused || !this.empty;
116
+ }
117
+ ngOnInit() {
118
+ this.ngControl = this.injector.get(NgControl, null);
119
+ if (this.ngControl != null) {
120
+ this.ngControl.valueAccessor = this;
121
+ }
122
+ // If prefix defined, usually this is used for a code scanner.
123
+ // The goal is to select the entity in direct way.
124
+ if (this._prefix) {
125
+ this.searchFormControl.valueChanges
126
+ .pipe(debounceTime(300), filter((value) => typeof value === 'string'), filter((value) => value.startsWith(this._prefix)), tap(() => (this.value = null)), tap(() => (this.isLoading = true)), switchMap((value) => this._dataSource?.onFilter(value.replace(this._prefix, '').trim()) ?? of(null)))
127
+ .subscribe((resultSet) => {
128
+ if (resultSet?.list) {
129
+ if (resultSet.list.length === 1) {
130
+ this.value = resultSet.list[0];
131
+ }
132
+ else {
133
+ this.filteredEntities = resultSet.list;
134
+ }
135
+ }
136
+ this.isLoading = false;
137
+ });
138
+ }
139
+ // This is the search functionality when search by human.
140
+ this.searchFormControl.valueChanges
141
+ .pipe(debounceTime(300), tap(() => (this.filteredEntities = [])), filter((value) => typeof value === 'string'), tap(() => {
142
+ this.setValue(null);
143
+ }), filter((value) => value.toString().length >= 3), tap(() => (this.isLoading = true)), switchMap((value) => this._dataSource?.onFilter(value) ?? of(null)))
144
+ .subscribe((resultSet) => {
145
+ if (resultSet?.list) {
146
+ this.filteredEntities = resultSet.list;
147
+ }
148
+ this.isLoading = false;
149
+ });
150
+ }
151
+ ngOnDestroy() {
152
+ this.stateChanges.complete();
153
+ this.fm.stopMonitoring(this.elRef.nativeElement);
154
+ }
155
+ ngDoCheck() {
156
+ if (this.ngControl != null) {
157
+ this.errorState = (this.ngControl.invalid && this.ngControl.touched) ?? false;
158
+ this.stateChanges.next();
159
+ }
160
+ }
161
+ clear() {
162
+ this.filteredEntities = [];
163
+ this.searchFormControl.reset(null);
164
+ }
165
+ focus() {
166
+ this.elRef.nativeElement.querySelector('input')?.focus();
167
+ }
168
+ onEntitySelected(event) {
169
+ this.value = event.option.value;
170
+ this.filteredEntities = [];
171
+ }
172
+ onEntityActivated(event) {
173
+ this.activatedValue = event.option?.value;
174
+ }
175
+ onEntityClosed() {
176
+ if (this.activatedValue) {
177
+ this.value = this.activatedValue;
178
+ this.activatedValue = null;
179
+ }
180
+ }
181
+ reset() {
182
+ this.value = null;
183
+ }
184
+ onFocusOut() {
185
+ if (this.filteredEntities.length === 1) {
186
+ this.activatedValue = this.filteredEntities[0];
187
+ this.value = this.filteredEntities[0];
188
+ }
189
+ }
190
+ onTouched() {
191
+ this._onTouched();
192
+ this.stateChanges.next();
193
+ }
194
+ registerOnChange(fn) {
195
+ this._propagateChange = fn;
196
+ }
197
+ registerOnTouched(fn) {
198
+ this.onTouched = fn;
199
+ }
200
+ writeValue(obj) {
201
+ this.clear();
202
+ this.value = obj;
203
+ }
204
+ setDisabledState(isDisabled) {
205
+ this.disabled = isDisabled;
206
+ }
207
+ onContainerClick(event) {
208
+ if (event.target.tagName.toLowerCase() !== 'input') {
209
+ this.focus();
210
+ }
211
+ }
212
+ setDescribedByIds(ids) {
213
+ this.describedBy = ids.join(' ');
214
+ }
215
+ validate(control) {
216
+ const selection = control.value;
217
+ if (typeof selection === 'string') {
218
+ return { incorrect: true };
219
+ }
220
+ return null;
221
+ }
222
+ _propagateChange = (_) => { };
223
+ _onTouched = () => { };
224
+ setValue(value) {
225
+ if (value !== this._selectedEntity) {
226
+ this._selectedEntity = value;
227
+ this.valueChange.emit(value);
228
+ this._propagateChange(this._selectedEntity);
229
+ this.stateChanges.next();
230
+ }
231
+ }
232
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: MmEntitySelectInputComponent, deps: [{ token: i0.ElementRef }, { token: i0.Injector }, { token: i1.FocusMonitor }], target: i0.ɵɵFactoryTarget.Component });
233
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: MmEntitySelectInputComponent, selector: "mm-entity-select", inputs: { dataSource: "dataSource", disabled: "disabled", placeholder: "placeholder", required: "required", prefix: "prefix" }, host: { properties: { "id": "this.id", "attr.aria-describedby": "this.describedBy", "class.floating": "this.shouldLabelFloat" } }, providers: [
234
+ {
235
+ provide: NG_VALUE_ACCESSOR,
236
+ useExisting: forwardRef(() => MmEntitySelectInputComponent),
237
+ multi: true
238
+ },
239
+ {
240
+ provide: MatFormFieldControl,
241
+ useExisting: MmEntitySelectInputComponent
242
+ },
243
+ {
244
+ provide: NG_VALIDATORS,
245
+ useExisting: forwardRef(() => MmEntitySelectInputComponent),
246
+ multi: true
247
+ }
248
+ ], viewQueries: [{ propertyName: "inputField", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<input #input (blur)=\"onTouched()\" (focusout)=\"onFocusOut()\" [formControl]=\"searchFormControl\" [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholder\" matInput>\n<mat-autocomplete #auto=\"matAutocomplete\" (closed)=\"onEntityClosed()\"\n (optionActivated)=\"onEntityActivated($event)\" (optionSelected)=\"onEntitySelected($event)\"\n [displayWith]=\"dataSource?.onDisplayEntity ?? null\">\n <mat-option *ngIf=\"isLoading\" class=\"is-loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n </mat-option>\n <ng-container *ngIf=\"!isLoading\">\n <mat-option *ngFor=\"let entity of filteredEntities\" [value]=\"entity\">\n {{dataSource?.onDisplayEntity(entity) ?? null}}\n </mat-option>\n </ng-container>\n</mat-autocomplete>\n", styles: ["span{opacity:0;transition:opacity .2s}:host.floating span{opacity:1}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i4.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i3.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
249
+ }
250
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: MmEntitySelectInputComponent, decorators: [{
251
+ type: Component,
252
+ args: [{ selector: 'mm-entity-select', host: {
253
+ '[id]': 'id',
254
+ '[attr.aria-describedby]': 'describedBy'
255
+ }, providers: [
256
+ {
257
+ provide: NG_VALUE_ACCESSOR,
258
+ useExisting: forwardRef(() => MmEntitySelectInputComponent),
259
+ multi: true
260
+ },
261
+ {
262
+ provide: MatFormFieldControl,
263
+ useExisting: MmEntitySelectInputComponent
264
+ },
265
+ {
266
+ provide: NG_VALIDATORS,
267
+ useExisting: forwardRef(() => MmEntitySelectInputComponent),
268
+ multi: true
269
+ }
270
+ ], template: "<input #input (blur)=\"onTouched()\" (focusout)=\"onFocusOut()\" [formControl]=\"searchFormControl\" [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholder\" matInput>\n<mat-autocomplete #auto=\"matAutocomplete\" (closed)=\"onEntityClosed()\"\n (optionActivated)=\"onEntityActivated($event)\" (optionSelected)=\"onEntitySelected($event)\"\n [displayWith]=\"dataSource?.onDisplayEntity ?? null\">\n <mat-option *ngIf=\"isLoading\" class=\"is-loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n </mat-option>\n <ng-container *ngIf=\"!isLoading\">\n <mat-option *ngFor=\"let entity of filteredEntities\" [value]=\"entity\">\n {{dataSource?.onDisplayEntity(entity) ?? null}}\n </mat-option>\n </ng-container>\n</mat-autocomplete>\n", styles: ["span{opacity:0;transition:opacity .2s}:host.floating span{opacity:1}\n"] }]
271
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Injector }, { type: i1.FocusMonitor }], propDecorators: { id: [{
272
+ type: HostBinding
273
+ }], inputField: [{
274
+ type: ViewChild,
275
+ args: ['input']
276
+ }], describedBy: [{
277
+ type: HostBinding,
278
+ args: ['attr.aria-describedby']
279
+ }], dataSource: [{
280
+ type: Input
281
+ }], disabled: [{
282
+ type: Input
283
+ }], placeholder: [{
284
+ type: Input
285
+ }], required: [{
286
+ type: Input
287
+ }], prefix: [{
288
+ type: Input
289
+ }], shouldLabelFloat: [{
290
+ type: HostBinding,
291
+ args: ['class.floating']
292
+ }] } });
293
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW0tZW50aXR5LXNlbGVjdC1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXNobWFrZXJzL3NoYXJlZC11aS9zcmMvbGliL21tLWVudGl0eS1zZWxlY3QtaW5wdXQvbW0tZW50aXR5LXNlbGVjdC1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXNobWFrZXJzL3NoYXJlZC11aS9zcmMvbGliL21tLWVudGl0eS1zZWxlY3QtaW5wdXQvbW0tZW50aXR5LXNlbGVjdC1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUdULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUVYLEtBQUssRUFHTCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUdMLFdBQVcsRUFDWCxhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLFNBQVMsRUFHVixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBR25FLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRW5DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7O0FBMkI5RCxNQUFNLE9BQU8sNEJBQTRCO0lBbUI5QjtJQUNVO0lBQ0E7SUFwQlgsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDVixpQkFBaUIsQ0FBYztJQUN4QyxTQUFTLENBQVU7SUFDbkIsZ0JBQWdCLEdBQVUsRUFBRSxDQUFDO0lBQzdCLFNBQVMsQ0FBbUI7SUFDNUIsVUFBVSxDQUFVO0lBQ3BCLE9BQU8sQ0FBVTtJQUNSLFlBQVksR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRW5DLEVBQUUsR0FBRyxvQkFBb0IsNEJBQTRCLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztJQUUxRSxXQUFXLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7SUFDeEQsZUFBZSxDQUFNO0lBQ1EsVUFBVSxDQUFrQjtJQUNuQixXQUFXLEdBQUcsRUFBRSxDQUFDO0lBQ3ZELGNBQWMsQ0FBTTtJQUU1QixZQUNTLEtBQThCLEVBQ3BCLFFBQWtCLEVBQ2xCLEVBQWdCO1FBRjFCLFVBQUssR0FBTCxLQUFLLENBQXlCO1FBQ3BCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsT0FBRSxHQUFGLEVBQUUsQ0FBYztRQUVqQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUVsQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDekQsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sV0FBVyxDQUFxQztJQUV4RCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUNXLFVBQVUsQ0FBQyxLQUF5QztRQUM3RCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBRU8sU0FBUyxHQUFHLEtBQUssQ0FBQztJQUUxQixJQUNXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFXLFFBQVEsQ0FBQyxHQUFHO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25DLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2xDLENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTyxZQUFZLENBQVM7SUFFN0IsSUFDVyxXQUFXO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBVyxXQUFXLENBQUMsR0FBRztRQUN4QixJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztRQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBRTFCLElBQ1csUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQVcsUUFBUSxDQUFDLEdBQUc7UUFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUM1QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU8sT0FBTyxDQUFTO0lBRXhCLElBQ1csTUFBTTtRQUNmLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBVyxNQUFNLENBQUMsS0FBYTtRQUM3QixJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFXLEtBQUs7UUFDZCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQVcsS0FBSyxDQUFDLEtBQVU7UUFDekIsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQztJQUVELElBQVcsS0FBSztRQUNkLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7UUFDdkMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNaLENBQUM7SUFFRCxJQUNXLGdCQUFnQjtRQUN6QixPQUFPLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEQsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUN0QyxDQUFDO1FBRUQsOERBQThEO1FBQzlELGtEQUFrRDtRQUNsRCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWTtpQkFDaEMsSUFBSSxDQUNILFlBQVksQ0FBQyxHQUFHLENBQUMsRUFDakIsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsRUFDNUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUNqRCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQzlCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFDbEMsU0FBUyxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDN0c7aUJBQ0EsU0FBUyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQ3ZCLElBQUksU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDO29CQUNwQixJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO3dCQUNoQyxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2pDLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztvQkFDekMsQ0FBQztnQkFDSCxDQUFDO2dCQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUVELHlEQUF5RDtRQUN6RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWTthQUNoQyxJQUFJLENBQ0gsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUNqQixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFDdkMsTUFBTSxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsRUFDakQsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEIsQ0FBQyxDQUFDLEVBQ0YsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxFQUMvQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQ2xDLFNBQVMsQ0FBQyxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQzVFO2FBQ0EsU0FBUyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDdkIsSUFBSSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQ3pDLENBQUM7WUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQztZQUM5RSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSztRQUNWLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRU0sS0FBSztRQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUMzRCxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsS0FBbUM7UUFDekQsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNoQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxLQUFvQztRQUMzRCxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDO0lBQzVDLENBQUM7SUFFTSxjQUFjO1FBQ25CLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUNqQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUs7UUFDVixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztJQUNwQixDQUFDO0lBRU0sVUFBVTtRQUNmLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QyxDQUFDO0lBQ0gsQ0FBQztJQUVNLFNBQVM7UUFDZCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU0sZ0JBQWdCLENBQUMsRUFBTztRQUM3QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxFQUFPO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFTSxVQUFVLENBQUMsR0FBUTtRQUN4QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztJQUNuQixDQUFDO0lBRU0sZ0JBQWdCLENBQUMsVUFBbUI7UUFDekMsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7SUFDN0IsQ0FBQztJQUVNLGdCQUFnQixDQUFDLEtBQWlCO1FBQ3ZDLElBQUssS0FBSyxDQUFDLE1BQWtCLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ2hFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRU0saUJBQWlCLENBQUMsR0FBYTtRQUNwQyxJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELFFBQVEsQ0FBQyxPQUF3QjtRQUMvQixNQUFNLFNBQVMsR0FBUSxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ3JDLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDbEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUM3QixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFNLEVBQVEsRUFBRSxHQUFFLENBQUMsQ0FBQztJQUUvQixVQUFVLEdBQUcsR0FBUyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0lBRXJDLFFBQVEsQ0FBQyxLQUFVO1FBQ3pCLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztZQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7dUdBdlJVLDRCQUE0QjsyRkFBNUIsNEJBQTRCLDhTQWpCNUI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDRCQUE0QixDQUFDO2dCQUMzRCxLQUFLLEVBQUUsSUFBSTthQUNaO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLG1CQUFtQjtnQkFDNUIsV0FBVyxFQUFFLDRCQUE0QjthQUMxQztZQUNEO2dCQUNFLE9BQU8sRUFBRSxhQUFhO2dCQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDRCQUE0QixDQUFDO2dCQUMzRCxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0YsK0hDdkRILDR4QkFjQTs7MkZEMkNhLDRCQUE0QjtrQkF6QnhDLFNBQVM7K0JBQ0Usa0JBQWtCLFFBR3RCO3dCQUNKLE1BQU0sRUFBRSxJQUFJO3dCQUNaLHlCQUF5QixFQUFFLGFBQWE7cUJBQ3pDLGFBQ1U7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsNkJBQTZCLENBQUM7NEJBQzNELEtBQUssRUFBRSxJQUFJO3lCQUNaO3dCQUNEOzRCQUNFLE9BQU8sRUFBRSxtQkFBbUI7NEJBQzVCLFdBQVcsOEJBQThCO3lCQUMxQzt3QkFDRDs0QkFDRSxPQUFPLEVBQUUsYUFBYTs0QkFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsNkJBQTZCLENBQUM7NEJBQzNELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO2lJQVllLEVBQUU7c0JBRGpCLFdBQVc7Z0JBS3lCLFVBQVU7c0JBQTlDLFNBQVM7dUJBQUMsT0FBTztnQkFDNEIsV0FBVztzQkFBeEQsV0FBVzt1QkFBQyx1QkFBdUI7Z0JBZ0N6QixVQUFVO3NCQURwQixLQUFLO2dCQVFLLFFBQVE7c0JBRGxCLEtBQUs7Z0JBa0JLLFdBQVc7c0JBRHJCLEtBQUs7Z0JBYUssUUFBUTtzQkFEbEIsS0FBSztnQkFnQkssTUFBTTtzQkFEaEIsS0FBSztnQkE0QkssZ0JBQWdCO3NCQUQxQixXQUFXO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRG9DaGVjayxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0QmluZGluZyxcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgRm9ybUNvbnRyb2wsXG4gIE5HX1ZBTElEQVRPUlMsXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICBOZ0NvbnRyb2wsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFZhbGlkYXRvclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IEVudGl0eVNlbGVjdERhdGFTb3VyY2UgfSBmcm9tICdAbWVzaG1ha2Vycy9zaGFyZWQtc2VydmljZXMnO1xuaW1wb3J0IHsgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEZvY3VzTW9uaXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZUFjdGl2YXRlZEV2ZW50LCBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21tLWVudGl0eS1zZWxlY3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vbW0tZW50aXR5LXNlbGVjdC1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21tLWVudGl0eS1zZWxlY3QtaW5wdXQuY29tcG9uZW50LmNzcyddLFxuICBob3N0OiB7XG4gICAgJ1tpZF0nOiAnaWQnLFxuICAgICdbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XSc6ICdkZXNjcmliZWRCeSdcbiAgfSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBNbUVudGl0eVNlbGVjdElucHV0Q29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBNYXRGb3JtRmllbGRDb250cm9sLFxuICAgICAgdXNlRXhpc3Rpbmc6IE1tRW50aXR5U2VsZWN0SW5wdXRDb21wb25lbnRcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBNbUVudGl0eVNlbGVjdElucHV0Q29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIE1tRW50aXR5U2VsZWN0SW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgRG9DaGVjaywgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE1hdEZvcm1GaWVsZENvbnRyb2w8YW55PiwgVmFsaWRhdG9yIHtcbiAgcHJpdmF0ZSBzdGF0aWMgbmV4dElkID0gMDtcbiAgcHVibGljIHJlYWRvbmx5IHNlYXJjaEZvcm1Db250cm9sOiBGb3JtQ29udHJvbDtcbiAgcHVibGljIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgcHVibGljIGZpbHRlcmVkRW50aXRpZXM6IGFueVtdID0gW107XG4gIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCB8IG51bGw7XG4gIHB1YmxpYyBlcnJvclN0YXRlOiBib29sZWFuO1xuICBwdWJsaWMgZm9jdXNlZDogYm9vbGVhbjtcbiAgcHVibGljIHJlYWRvbmx5IHN0YXRlQ2hhbmdlcyA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIEBIb3N0QmluZGluZygpXG4gIHB1YmxpYyByZWFkb25seSBpZCA9IGBpYS1lbnRpdHktc2VsZWN0LSR7TW1FbnRpdHlTZWxlY3RJbnB1dENvbXBvbmVudC5uZXh0SWQrK31gO1xuXG4gIHB1YmxpYyB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRFbnRpdHk6IGFueTtcbiAgQFZpZXdDaGlsZCgnaW5wdXQnKSBwcml2YXRlIHJlYWRvbmx5IGlucHV0RmllbGQ6IE1hdElucHV0IHwgbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZGVzY3JpYmVkYnknKSBwcml2YXRlIGRlc2NyaWJlZEJ5ID0gJyc7XG4gIHByaXZhdGUgYWN0aXZhdGVkVmFsdWU6IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZWxSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZm06IEZvY3VzTW9uaXRvclxuICApIHtcbiAgICB0aGlzLm5nQ29udHJvbCA9IG51bGw7XG4gICAgdGhpcy5lcnJvclN0YXRlID0gZmFsc2U7XG4gICAgdGhpcy5pbnB1dEZpZWxkID0gbnVsbDtcbiAgICB0aGlzLl9kYXRhU291cmNlID0gbnVsbDtcbiAgICB0aGlzLl9wbGFjZWhvbGRlciA9ICcnO1xuICAgIHRoaXMuX3ByZWZpeCA9ICcnO1xuXG4gICAgdGhpcy5zZWFyY2hGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZTtcbiAgICBmbS5tb25pdG9yKGVsUmVmLm5hdGl2ZUVsZW1lbnQsIHRydWUpLnN1YnNjcmliZSgob3JpZ2luKSA9PiB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSAhIW9yaWdpbjtcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2RhdGFTb3VyY2U6IEVudGl0eVNlbGVjdERhdGFTb3VyY2U8YW55PiB8IG51bGw7XG5cbiAgcHVibGljIGdldCBkYXRhU291cmNlKCk6IEVudGl0eVNlbGVjdERhdGFTb3VyY2U8YW55PiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkYXRhU291cmNlKHZhbHVlOiBFbnRpdHlTZWxlY3REYXRhU291cmNlPGFueT4gfCBudWxsKSB7XG4gICAgdGhpcy5fZGF0YVNvdXJjZSA9IHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgZGlzYWJsZWQoZGlzKSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkoZGlzKTtcbiAgICBpZiAodGhpcy5fZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc2VhcmNoRm9ybUNvbnRyb2wuZGlzYWJsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlYXJjaEZvcm1Db250cm9sLmVuYWJsZSgpO1xuICAgIH1cbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIF9wbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgcGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXI7XG4gIH1cblxuICBwdWJsaWMgc2V0IHBsYWNlaG9sZGVyKHBsaCkge1xuICAgIHRoaXMuX3BsYWNlaG9sZGVyID0gcGxoO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlcXVpcmVkID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XG4gIH1cblxuICBwdWJsaWMgc2V0IHJlcXVpcmVkKHJlcSkge1xuICAgIHRoaXMuX3JlcXVpcmVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHJlcSk7XG4gICAgaWYgKHRoaXMuaW5wdXRGaWVsZCAhPSBudWxsKSB7XG4gICAgICB0aGlzLmlucHV0RmllbGQucmVxdWlyZWQgPSB0aGlzLl9yZXF1aXJlZDtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcHJlZml4OiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGdldCBwcmVmaXgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcHJlZml4O1xuICB9XG5cbiAgcHVibGljIHNldCBwcmVmaXgodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5fcHJlZml4KSB7XG4gICAgICB0aGlzLl9wcmVmaXggPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkRW50aXR5O1xuICB9XG5cbiAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLl9zZWxlY3RlZEVudGl0eSkge1xuICAgICAgdGhpcy5zZWFyY2hGb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICB0aGlzLnNldFZhbHVlKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGVtcHR5KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG4gPSB0aGlzLnNlYXJjaEZvcm1Db250cm9sLnZhbHVlO1xuICAgIHJldHVybiAhbjtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZmxvYXRpbmcnKVxuICBwdWJsaWMgZ2V0IHNob3VsZExhYmVsRmxvYXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZm9jdXNlZCB8fCAhdGhpcy5lbXB0eTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubmdDb250cm9sID0gdGhpcy5pbmplY3Rvci5nZXQoTmdDb250cm9sLCBudWxsKTtcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wgIT0gbnVsbCkge1xuICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgfVxuXG4gICAgLy8gSWYgcHJlZml4IGRlZmluZWQsIHVzdWFsbHkgdGhpcyBpcyB1c2VkIGZvciBhIGNvZGUgc2Nhbm5lci5cbiAgICAvLyBUaGUgZ29hbCBpcyB0byBzZWxlY3QgdGhlIGVudGl0eSBpbiBkaXJlY3Qgd2F5LlxuICAgIGlmICh0aGlzLl9wcmVmaXgpIHtcbiAgICAgIHRoaXMuc2VhcmNoRm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGRlYm91bmNlVGltZSgzMDApLFxuICAgICAgICAgIGZpbHRlcigodmFsdWUpID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpLFxuICAgICAgICAgIGZpbHRlcigodmFsdWUpID0+IHZhbHVlLnN0YXJ0c1dpdGgodGhpcy5fcHJlZml4KSksXG4gICAgICAgICAgdGFwKCgpID0+ICh0aGlzLnZhbHVlID0gbnVsbCkpLFxuICAgICAgICAgIHRhcCgoKSA9PiAodGhpcy5pc0xvYWRpbmcgPSB0cnVlKSksXG4gICAgICAgICAgc3dpdGNoTWFwKCh2YWx1ZTogc3RyaW5nKSA9PiB0aGlzLl9kYXRhU291cmNlPy5vbkZpbHRlcih2YWx1ZS5yZXBsYWNlKHRoaXMuX3ByZWZpeCwgJycpLnRyaW0oKSkgPz8gb2YobnVsbCkpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0U2V0KSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdFNldD8ubGlzdCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdFNldC5saXN0Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gcmVzdWx0U2V0Lmxpc3RbMF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkRW50aXRpZXMgPSByZXN1bHRTZXQubGlzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyB0aGUgc2VhcmNoIGZ1bmN0aW9uYWxpdHkgd2hlbiBzZWFyY2ggYnkgaHVtYW4uXG4gICAgdGhpcy5zZWFyY2hGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcbiAgICAgICAgdGFwKCgpID0+ICh0aGlzLmZpbHRlcmVkRW50aXRpZXMgPSBbXSkpLFxuICAgICAgICBmaWx0ZXIoKHZhbHVlOiBhbnkpID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgIH0pLFxuICAgICAgICBmaWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZS50b1N0cmluZygpLmxlbmd0aCA+PSAzKSxcbiAgICAgICAgdGFwKCgpID0+ICh0aGlzLmlzTG9hZGluZyA9IHRydWUpKSxcbiAgICAgICAgc3dpdGNoTWFwKCh2YWx1ZTogc3RyaW5nKSA9PiB0aGlzLl9kYXRhU291cmNlPy5vbkZpbHRlcih2YWx1ZSkgPz8gb2YobnVsbCkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHRTZXQpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdFNldD8ubGlzdCkge1xuICAgICAgICAgIHRoaXMuZmlsdGVyZWRFbnRpdGllcyA9IHJlc3VsdFNldC5saXN0O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5mbS5zdG9wTW9uaXRvcmluZyh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPSBudWxsKSB7XG4gICAgICB0aGlzLmVycm9yU3RhdGUgPSAodGhpcy5uZ0NvbnRyb2wuaW52YWxpZCAmJiB0aGlzLm5nQ29udHJvbC50b3VjaGVkKSA/PyBmYWxzZTtcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJlZEVudGl0aWVzID0gW107XG4gICAgdGhpcy5zZWFyY2hGb3JtQ29udHJvbC5yZXNldChudWxsKTtcbiAgfVxuXG4gIHB1YmxpYyBmb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXQnKT8uZm9jdXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkVudGl0eVNlbGVjdGVkKGV2ZW50OiBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IGV2ZW50Lm9wdGlvbi52YWx1ZTtcbiAgICB0aGlzLmZpbHRlcmVkRW50aXRpZXMgPSBbXTtcbiAgfVxuXG4gIHB1YmxpYyBvbkVudGl0eUFjdGl2YXRlZChldmVudDogTWF0QXV0b2NvbXBsZXRlQWN0aXZhdGVkRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2YXRlZFZhbHVlID0gZXZlbnQub3B0aW9uPy52YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBvbkVudGl0eUNsb3NlZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hY3RpdmF0ZWRWYWx1ZSkge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuYWN0aXZhdGVkVmFsdWU7XG4gICAgICB0aGlzLmFjdGl2YXRlZFZhbHVlID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gIH1cblxuICBwdWJsaWMgb25Gb2N1c091dCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5maWx0ZXJlZEVudGl0aWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdGhpcy5hY3RpdmF0ZWRWYWx1ZSA9IHRoaXMuZmlsdGVyZWRFbnRpdGllc1swXTtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmZpbHRlcmVkRW50aXRpZXNbMF07XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uVG91Y2hlZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWQoKTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fcHJvcGFnYXRlQ2hhbmdlID0gZm47XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBwdWJsaWMgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgICB0aGlzLnZhbHVlID0gb2JqO1xuICB9XG5cbiAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgcHVibGljIG9uQ29udGFpbmVyQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICdpbnB1dCcpIHtcbiAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0RGVzY3JpYmVkQnlJZHMoaWRzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIHRoaXMuZGVzY3JpYmVkQnkgPSBpZHMuam9pbignICcpO1xuICB9XG5cbiAgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHNlbGVjdGlvbjogYW55ID0gY29udHJvbC52YWx1ZTtcbiAgICBpZiAodHlwZW9mIHNlbGVjdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB7IGluY29ycmVjdDogdHJ1ZSB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgX3Byb3BhZ2F0ZUNoYW5nZSA9IChfOiBhbnkpOiB2b2lkID0+IHt9O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX29uVG91Y2hlZCA9ICgpOiB2b2lkID0+IHt9O1xuXG4gIHByaXZhdGUgc2V0VmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5fc2VsZWN0ZWRFbnRpdHkpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGVkRW50aXR5ID0gdmFsdWU7XG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgICAgdGhpcy5fcHJvcGFnYXRlQ2hhbmdlKHRoaXMuX3NlbGVjdGVkRW50aXR5KTtcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxpbnB1dCAjaW5wdXQgKGJsdXIpPVwib25Ub3VjaGVkKClcIiAoZm9jdXNvdXQpPVwib25Gb2N1c091dCgpXCIgW2Zvcm1Db250cm9sXT1cInNlYXJjaEZvcm1Db250cm9sXCIgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCJcbiAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIiBtYXRJbnB1dD5cbjxtYXQtYXV0b2NvbXBsZXRlICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCIgKGNsb3NlZCk9XCJvbkVudGl0eUNsb3NlZCgpXCJcbiAgICAgICAgICAgICAgICAgIChvcHRpb25BY3RpdmF0ZWQpPVwib25FbnRpdHlBY3RpdmF0ZWQoJGV2ZW50KVwiIChvcHRpb25TZWxlY3RlZCk9XCJvbkVudGl0eVNlbGVjdGVkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgW2Rpc3BsYXlXaXRoXT1cImRhdGFTb3VyY2U/Lm9uRGlzcGxheUVudGl0eSA/PyBudWxsXCI+XG4gIDxtYXQtb3B0aW9uICpuZ0lmPVwiaXNMb2FkaW5nXCIgY2xhc3M9XCJpcy1sb2FkaW5nXCI+XG4gICAgPG1hdC1zcGlubmVyIGRpYW1ldGVyPVwiNTBcIj48L21hdC1zcGlubmVyPlxuICA8L21hdC1vcHRpb24+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNMb2FkaW5nXCI+XG4gICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGVudGl0eSBvZiBmaWx0ZXJlZEVudGl0aWVzXCIgW3ZhbHVlXT1cImVudGl0eVwiPlxuICAgICAge3tkYXRhU291cmNlPy5vbkRpc3BsYXlFbnRpdHkoZW50aXR5KSA/PyBudWxsfX1cbiAgICA8L21hdC1vcHRpb24+XG4gIDwvbmctY29udGFpbmVyPlxuPC9tYXQtYXV0b2NvbXBsZXRlPlxuIl19
@@ -13,14 +13,14 @@ export class MmMessageDetailsComponent {
13
13
  this.errorMessage = data.errorMessage;
14
14
  }
15
15
  ngOnInit() { }
16
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: MmMessageDetailsComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
17
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: MmMessageDetailsComponent, selector: "mm-message-details", ngImport: i0, template: "<mat-dialog-content>\n\n <h2>{{errorMessage.title}}</h2>\n <p>{{errorMessage.message}}</p>\n\n\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n <button color=\"primary\" mat-dialog-close mat-raised-button>OK</button>\n</mat-dialog-actions>\n", styles: [""], dependencies: [{ kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }] });
16
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: MmMessageDetailsComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
17
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: MmMessageDetailsComponent, selector: "mm-message-details", ngImport: i0, template: "<mat-dialog-content>\n\n <h2>{{errorMessage.title}}</h2>\n <p>{{errorMessage.message}}</p>\n\n\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n <button color=\"primary\" mat-dialog-close mat-raised-button>OK</button>\n</mat-dialog-actions>\n", styles: [""], dependencies: [{ kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }] });
18
18
  }
19
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: MmMessageDetailsComponent, decorators: [{
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: MmMessageDetailsComponent, decorators: [{
20
20
  type: Component,
21
21
  args: [{ selector: 'mm-message-details', template: "<mat-dialog-content>\n\n <h2>{{errorMessage.title}}</h2>\n <p>{{errorMessage.message}}</p>\n\n\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n <button color=\"primary\" mat-dialog-close mat-raised-button>OK</button>\n</mat-dialog-actions>\n" }]
22
22
  }], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
23
23
  type: Inject,
24
24
  args: [MAT_DIALOG_DATA]
25
25
  }] }] });
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW0tbWVzc2FnZS1kZXRhaWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lc2htYWtlcnMvc2hhcmVkLXVpL3NyYy9saWIvbW0tc2hhcmVkLXVpL21tLW1lc3NhZ2UtZGV0YWlscy9tbS1tZXNzYWdlLWRldGFpbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVzaG1ha2Vycy9zaGFyZWQtdWkvc3JjL2xpYi9tbS1zaGFyZWQtdWkvbW0tbWVzc2FnZS1kZXRhaWxzL21tLW1lc3NhZ2UtZGV0YWlscy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDOzs7O0FBUXpFLE1BQU0sT0FBTyx5QkFBeUI7SUFJM0I7SUFDeUI7SUFKbEMsWUFBWSxDQUFlO0lBRTNCLFlBQ1MsU0FBa0QsRUFDekIsSUFBUztRQURsQyxjQUFTLEdBQVQsU0FBUyxDQUF5QztRQUN6QixTQUFJLEdBQUosSUFBSSxDQUFLO1FBRXpDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztJQUN4QyxDQUFDO0lBRUQsUUFBUSxLQUFVLENBQUM7dUdBVlIseUJBQXlCLDhDQUsxQixlQUFlOzJGQUxkLHlCQUF5QiwwRENUdEMsa1FBVUE7OzJGRERhLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDRSxvQkFBb0I7OzBCQVMzQixNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICdAbWVzaG1ha2Vycy9zaGFyZWQtc2VydmljZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtbS1tZXNzYWdlLWRldGFpbHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vbW0tbWVzc2FnZS1kZXRhaWxzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbW0tbWVzc2FnZS1kZXRhaWxzLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBNbU1lc3NhZ2VEZXRhaWxzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgZXJyb3JNZXNzYWdlOiBFcnJvck1lc3NhZ2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPE1tTWVzc2FnZURldGFpbHNDb21wb25lbnQ+LFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55XG4gICkge1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZGF0YS5lcnJvck1lc3NhZ2U7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHt9XG59XG4iLCI8bWF0LWRpYWxvZy1jb250ZW50PlxuXG4gIDxoMj57e2Vycm9yTWVzc2FnZS50aXRsZX19PC9oMj5cbiAgPHA+e3tlcnJvck1lc3NhZ2UubWVzc2FnZX19PC9wPlxuXG5cbjwvbWF0LWRpYWxvZy1jb250ZW50PlxuPG1hdC1kaWFsb2ctYWN0aW9ucyBhbGlnbj1cImVuZFwiPlxuICA8YnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIG1hdC1kaWFsb2ctY2xvc2UgbWF0LXJhaXNlZC1idXR0b24+T0s8L2J1dHRvbj5cbjwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuIl19
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW0tbWVzc2FnZS1kZXRhaWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lc2htYWtlcnMvc2hhcmVkLXVpL3NyYy9saWIvbW0tbWVzc2FnZS1kZXRhaWxzL21tLW1lc3NhZ2UtZGV0YWlscy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXNobWFrZXJzL3NoYXJlZC11aS9zcmMvbGliL21tLW1lc3NhZ2UtZGV0YWlscy9tbS1tZXNzYWdlLWRldGFpbHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSwwQkFBMEIsQ0FBQzs7OztBQVF6RSxNQUFNLE9BQU8seUJBQXlCO0lBSTNCO0lBQ3lCO0lBSmxDLFlBQVksQ0FBZTtJQUUzQixZQUNTLFNBQWtELEVBQ3pCLElBQVM7UUFEbEMsY0FBUyxHQUFULFNBQVMsQ0FBeUM7UUFDekIsU0FBSSxHQUFKLElBQUksQ0FBSztRQUV6QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDeEMsQ0FBQztJQUVELFFBQVEsS0FBVSxDQUFDO3VHQVZSLHlCQUF5Qiw4Q0FLMUIsZUFBZTsyRkFMZCx5QkFBeUIsMERDVHRDLGtRQVVBOzsyRkREYSx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0Usb0JBQW9COzswQkFTM0IsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnQG1lc2htYWtlcnMvc2hhcmVkLXNlcnZpY2VzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbW0tbWVzc2FnZS1kZXRhaWxzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21tLW1lc3NhZ2UtZGV0YWlscy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21tLW1lc3NhZ2UtZGV0YWlscy5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTW1NZXNzYWdlRGV0YWlsc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGVycm9yTWVzc2FnZTogRXJyb3JNZXNzYWdlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxNbU1lc3NhZ2VEZXRhaWxzQ29tcG9uZW50PixcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IGFueVxuICApIHtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGRhdGEuZXJyb3JNZXNzYWdlO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7fVxufVxuIiwiPG1hdC1kaWFsb2ctY29udGVudD5cblxuICA8aDI+e3tlcnJvck1lc3NhZ2UudGl0bGV9fTwvaDI+XG4gIDxwPnt7ZXJyb3JNZXNzYWdlLm1lc3NhZ2V9fTwvcD5cblxuXG48L21hdC1kaWFsb2ctY29udGVudD5cbjxtYXQtZGlhbG9nLWFjdGlvbnMgYWxpZ249XCJlbmRcIj5cbiAgPGJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBtYXQtZGlhbG9nLWNsb3NlIG1hdC1yYWlzZWQtYnV0dG9uPk9LPC9idXR0b24+XG48L21hdC1kaWFsb2ctYWN0aW9ucz5cbiJdfQ==