@meshmakers/shared-ui 0.0.0-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -0
- package/esm2020/lib/confirmation-dialog/confirmation-dialog.module.mjs +40 -0
- package/esm2020/lib/confirmation-dialog/confirmation-window/confirmation-window.component.mjs +65 -0
- package/esm2020/lib/confirmation-dialog/services/confirmation.service.mjs +68 -0
- package/esm2020/lib/confirmation-dialog/shared/confirmation.mjs +15 -0
- package/esm2020/lib/ia-shared-ui/ia-autocomplete-input/ia-autocomplete-input.mjs +263 -0
- package/esm2020/lib/ia-shared-ui/ia-entity-select-input/ia-entity-select-input.component.mjs +264 -0
- package/esm2020/lib/ia-shared-ui/ia-notification-bar/ia-notification-bar.component.mjs +35 -0
- package/esm2020/lib/ia-shared-ui/ia-shared-ui.module.mjs +66 -0
- package/esm2020/lib/ia-shared-ui/message-details/message-details.component.mjs +24 -0
- package/esm2020/lib/progress-notifier/progress-notifier.module.mjs +44 -0
- package/esm2020/lib/progress-notifier/progress-window/progress-window.component.mjs +33 -0
- package/esm2020/lib/progress-notifier/services/progress-notifier.service.mjs +58 -0
- package/esm2020/lib/progress-notifier/shared/progressValue.mjs +3 -0
- package/esm2020/lib/shared/abstractDetailsComponent.mjs +37 -0
- package/esm2020/lib/shared/commonValidators.mjs +29 -0
- package/esm2020/meshmakers-shared-ui.mjs +5 -0
- package/esm2020/public-api.mjs +15 -0
- package/fesm2015/meshmakers-shared-ui.mjs +991 -0
- package/fesm2015/meshmakers-shared-ui.mjs.map +1 -0
- package/fesm2020/meshmakers-shared-ui.mjs +982 -0
- package/fesm2020/meshmakers-shared-ui.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/confirmation-dialog/confirmation-dialog.module.d.ts +13 -0
- package/lib/confirmation-dialog/confirmation-window/confirmation-window.component.d.ts +21 -0
- package/lib/confirmation-dialog/services/confirmation.service.d.ts +14 -0
- package/lib/confirmation-dialog/shared/confirmation.d.ts +20 -0
- package/lib/ia-shared-ui/ia-autocomplete-input/ia-autocomplete-input.d.ts +69 -0
- package/lib/ia-shared-ui/ia-entity-select-input/ia-entity-select-input.component.d.ts +70 -0
- package/lib/ia-shared-ui/ia-notification-bar/ia-notification-bar.component.d.ts +15 -0
- package/lib/ia-shared-ui/ia-shared-ui.module.d.ts +19 -0
- package/lib/ia-shared-ui/message-details/message-details.component.d.ts +13 -0
- package/lib/progress-notifier/progress-notifier.module.d.ts +14 -0
- package/lib/progress-notifier/progress-window/progress-window.component.d.ts +23 -0
- package/lib/progress-notifier/services/progress-notifier.service.d.ts +17 -0
- package/lib/progress-notifier/shared/progressValue.d.ts +4 -0
- package/lib/shared/abstractDetailsComponent.d.ts +15 -0
- package/lib/shared/commonValidators.d.ts +10 -0
- package/package.json +27 -0
- package/public-api.d.ts +11 -0
|
@@ -0,0 +1,264 @@
|
|
|
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 { 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 IaEntitySelectInput {
|
|
16
|
+
constructor(elRef, injector, fm) {
|
|
17
|
+
this.elRef = elRef;
|
|
18
|
+
this.injector = injector;
|
|
19
|
+
this.fm = fm;
|
|
20
|
+
this.filteredEntities = [];
|
|
21
|
+
this.stateChanges = new Subject();
|
|
22
|
+
this.id = `ia-entity-select-${IaEntitySelectInput.nextId++}`;
|
|
23
|
+
this.valueChange = new EventEmitter();
|
|
24
|
+
this.describedBy = '';
|
|
25
|
+
this._disabled = false;
|
|
26
|
+
this._required = false;
|
|
27
|
+
this._propagateChange = (_) => {
|
|
28
|
+
};
|
|
29
|
+
this._onTouched = () => {
|
|
30
|
+
};
|
|
31
|
+
this.searchFormControl = new FormControl();
|
|
32
|
+
this.isLoading = false;
|
|
33
|
+
this._disabled = false;
|
|
34
|
+
this.focused = false;
|
|
35
|
+
fm.monitor(elRef.nativeElement, true).subscribe(origin => {
|
|
36
|
+
this.focused = !!origin;
|
|
37
|
+
this.stateChanges.next();
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
get dataSource() {
|
|
41
|
+
return this._dataSource;
|
|
42
|
+
}
|
|
43
|
+
set dataSource(value) {
|
|
44
|
+
this._dataSource = value;
|
|
45
|
+
}
|
|
46
|
+
get disabled() {
|
|
47
|
+
return this._disabled;
|
|
48
|
+
}
|
|
49
|
+
set disabled(dis) {
|
|
50
|
+
this._disabled = coerceBooleanProperty(dis);
|
|
51
|
+
this._disabled ? this.searchFormControl.disable() : this.searchFormControl.enable();
|
|
52
|
+
this.stateChanges.next();
|
|
53
|
+
}
|
|
54
|
+
get placeholder() {
|
|
55
|
+
return this._placeholder;
|
|
56
|
+
}
|
|
57
|
+
set placeholder(plh) {
|
|
58
|
+
this._placeholder = plh;
|
|
59
|
+
this.stateChanges.next();
|
|
60
|
+
}
|
|
61
|
+
get required() {
|
|
62
|
+
return this._required;
|
|
63
|
+
}
|
|
64
|
+
set required(req) {
|
|
65
|
+
this._required = coerceBooleanProperty(req);
|
|
66
|
+
this.inputField.required = this._required;
|
|
67
|
+
this.stateChanges.next();
|
|
68
|
+
}
|
|
69
|
+
get prefix() {
|
|
70
|
+
return this._prefix;
|
|
71
|
+
}
|
|
72
|
+
set prefix(value) {
|
|
73
|
+
if (value !== this._prefix) {
|
|
74
|
+
this._prefix = value;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
get value() {
|
|
78
|
+
return this._selectedEntity;
|
|
79
|
+
}
|
|
80
|
+
set value(value) {
|
|
81
|
+
if (value !== this._selectedEntity) {
|
|
82
|
+
this.searchFormControl.setValue(value);
|
|
83
|
+
this.setValue(value);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
get empty() {
|
|
87
|
+
let n = this.searchFormControl.value;
|
|
88
|
+
return !!!n;
|
|
89
|
+
}
|
|
90
|
+
get shouldLabelFloat() {
|
|
91
|
+
return this.focused || !this.empty;
|
|
92
|
+
}
|
|
93
|
+
ngOnInit() {
|
|
94
|
+
this.ngControl = this.injector.get(NgControl, null);
|
|
95
|
+
if (this.ngControl != null) {
|
|
96
|
+
this.ngControl.valueAccessor = this;
|
|
97
|
+
}
|
|
98
|
+
// If prefix defined, usually this is used for a code scanner.
|
|
99
|
+
// The goal is to select the entity in direct way.
|
|
100
|
+
if (this._prefix) {
|
|
101
|
+
this.searchFormControl
|
|
102
|
+
.valueChanges
|
|
103
|
+
.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())))
|
|
104
|
+
.subscribe(resultSet => {
|
|
105
|
+
if (resultSet.list.length === 1) {
|
|
106
|
+
this.value = resultSet.list[0];
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
this.filteredEntities = resultSet.list;
|
|
110
|
+
}
|
|
111
|
+
this.isLoading = false;
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
// This is the search functionality when search by human.
|
|
115
|
+
this.searchFormControl
|
|
116
|
+
.valueChanges
|
|
117
|
+
.pipe(debounceTime(300), tap(() => this.filteredEntities = []), filter(value => typeof value === 'string'), tap(() => this.setValue(null)), filter(value => value.toString().length >= 3), tap(() => this.isLoading = true), switchMap(value => this._dataSource.onFilter(value)))
|
|
118
|
+
.subscribe(resultSet => {
|
|
119
|
+
this.filteredEntities = resultSet.list;
|
|
120
|
+
this.isLoading = false;
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
ngOnDestroy() {
|
|
124
|
+
this.stateChanges.complete();
|
|
125
|
+
this.fm.stopMonitoring(this.elRef.nativeElement);
|
|
126
|
+
}
|
|
127
|
+
ngDoCheck() {
|
|
128
|
+
if (this.ngControl) {
|
|
129
|
+
this.errorState = this.ngControl.invalid && this.ngControl.touched;
|
|
130
|
+
this.stateChanges.next();
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
clear() {
|
|
134
|
+
this.filteredEntities = [];
|
|
135
|
+
this.searchFormControl.reset(null);
|
|
136
|
+
}
|
|
137
|
+
focus() {
|
|
138
|
+
this.elRef.nativeElement.querySelector('input').focus();
|
|
139
|
+
}
|
|
140
|
+
onEntitySelected(event) {
|
|
141
|
+
this.value = event.option.value;
|
|
142
|
+
this.filteredEntities = [];
|
|
143
|
+
}
|
|
144
|
+
onEntityActivated(event) {
|
|
145
|
+
this.activatedValue = event.option?.value;
|
|
146
|
+
}
|
|
147
|
+
onEntityClosed() {
|
|
148
|
+
if (this.activatedValue) {
|
|
149
|
+
this.value = this.activatedValue;
|
|
150
|
+
this.activatedValue = null;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
reset() {
|
|
154
|
+
this.value = null;
|
|
155
|
+
}
|
|
156
|
+
onFocusOut() {
|
|
157
|
+
if (this.filteredEntities.length === 1) {
|
|
158
|
+
this.activatedValue = this.filteredEntities[0];
|
|
159
|
+
this.value = this.filteredEntities[0];
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
onTouched() {
|
|
163
|
+
this._onTouched();
|
|
164
|
+
this.stateChanges.next();
|
|
165
|
+
}
|
|
166
|
+
registerOnChange(fn) {
|
|
167
|
+
this._propagateChange = fn;
|
|
168
|
+
}
|
|
169
|
+
registerOnTouched(fn) {
|
|
170
|
+
this.onTouched = fn;
|
|
171
|
+
}
|
|
172
|
+
writeValue(obj) {
|
|
173
|
+
this.clear();
|
|
174
|
+
this.value = obj;
|
|
175
|
+
}
|
|
176
|
+
setDisabledState(isDisabled) {
|
|
177
|
+
this.disabled = isDisabled;
|
|
178
|
+
}
|
|
179
|
+
onContainerClick(event) {
|
|
180
|
+
if (event.target.tagName.toLowerCase() != 'input') {
|
|
181
|
+
this.focus();
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
setDescribedByIds(ids) {
|
|
185
|
+
this.describedBy = ids.join(' ');
|
|
186
|
+
}
|
|
187
|
+
validate(control) {
|
|
188
|
+
const selection = control.value;
|
|
189
|
+
if (typeof selection === 'string') {
|
|
190
|
+
return { incorrect: true };
|
|
191
|
+
}
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
setValue(value) {
|
|
195
|
+
if (value !== this._selectedEntity) {
|
|
196
|
+
this._selectedEntity = value;
|
|
197
|
+
this.valueChange.emit(value);
|
|
198
|
+
this._propagateChange(this._selectedEntity);
|
|
199
|
+
this.stateChanges.next();
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
IaEntitySelectInput.nextId = 0;
|
|
204
|
+
IaEntitySelectInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: IaEntitySelectInput, deps: [{ token: i0.ElementRef }, { token: i0.Injector }, { token: i1.FocusMonitor }], target: i0.ɵɵFactoryTarget.Component });
|
|
205
|
+
IaEntitySelectInput.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.2", type: IaEntitySelectInput, selector: "ia-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: [
|
|
206
|
+
{
|
|
207
|
+
provide: NG_VALUE_ACCESSOR,
|
|
208
|
+
useExisting: forwardRef(() => IaEntitySelectInput),
|
|
209
|
+
multi: true
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
provide: MatFormFieldControl,
|
|
213
|
+
useExisting: IaEntitySelectInput
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
provide: NG_VALIDATORS,
|
|
217
|
+
useExisting: forwardRef(() => IaEntitySelectInput),
|
|
218
|
+
multi: true
|
|
219
|
+
}
|
|
220
|
+
], 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\">\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)}}\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: ["disableRipple"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i3.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i4.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { 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", "diameter", "strokeWidth", "mode", "value"], 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"] }] });
|
|
221
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: IaEntitySelectInput, decorators: [{
|
|
222
|
+
type: Component,
|
|
223
|
+
args: [{ selector: 'ia-entity-select', host: {
|
|
224
|
+
'[id]': 'id',
|
|
225
|
+
'[attr.aria-describedby]': 'describedBy'
|
|
226
|
+
}, providers: [
|
|
227
|
+
{
|
|
228
|
+
provide: NG_VALUE_ACCESSOR,
|
|
229
|
+
useExisting: forwardRef(() => IaEntitySelectInput),
|
|
230
|
+
multi: true
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
provide: MatFormFieldControl,
|
|
234
|
+
useExisting: IaEntitySelectInput
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
provide: NG_VALIDATORS,
|
|
238
|
+
useExisting: forwardRef(() => IaEntitySelectInput),
|
|
239
|
+
multi: true
|
|
240
|
+
}
|
|
241
|
+
], 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\">\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)}}\n </mat-option>\n </ng-container>\n</mat-autocomplete>\n", styles: ["span{opacity:0;transition:opacity .2s}:host.floating span{opacity:1}\n"] }]
|
|
242
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Injector }, { type: i1.FocusMonitor }]; }, propDecorators: { id: [{
|
|
243
|
+
type: HostBinding
|
|
244
|
+
}], inputField: [{
|
|
245
|
+
type: ViewChild,
|
|
246
|
+
args: ['input']
|
|
247
|
+
}], describedBy: [{
|
|
248
|
+
type: HostBinding,
|
|
249
|
+
args: ['attr.aria-describedby']
|
|
250
|
+
}], dataSource: [{
|
|
251
|
+
type: Input
|
|
252
|
+
}], disabled: [{
|
|
253
|
+
type: Input
|
|
254
|
+
}], placeholder: [{
|
|
255
|
+
type: Input
|
|
256
|
+
}], required: [{
|
|
257
|
+
type: Input
|
|
258
|
+
}], prefix: [{
|
|
259
|
+
type: Input
|
|
260
|
+
}], shouldLabelFloat: [{
|
|
261
|
+
type: HostBinding,
|
|
262
|
+
args: ['class.floating']
|
|
263
|
+
}] } });
|
|
264
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWEtZW50aXR5LXNlbGVjdC1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXNobWFrZXJzL3NoYXJlZC11aS9zcmMvbGliL2lhLXNoYXJlZC11aS9pYS1lbnRpdHktc2VsZWN0LWlucHV0L2lhLWVudGl0eS1zZWxlY3QtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVzaG1ha2Vycy9zaGFyZWQtdWkvc3JjL2xpYi9pYS1zaGFyZWQtdWkvaWEtZW50aXR5LXNlbGVjdC1pbnB1dC9pYS1lbnRpdHktc2VsZWN0LWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBR1QsWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBRVgsS0FBSyxFQUdMLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0wsV0FBVyxFQUNYLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsU0FBUyxFQUdWLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFHakUsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUU3QixPQUFPLEVBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEUsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7OztBQTJCNUQsTUFBTSxPQUFPLG1CQUFtQjtJQWlCOUIsWUFBbUIsS0FBaUIsRUFBVSxRQUFrQixFQUFVLEVBQWdCO1FBQXZFLFVBQUssR0FBTCxLQUFLLENBQVk7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBYztRQVpuRixxQkFBZ0IsR0FBVSxFQUFFLENBQUM7UUFJcEIsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ3BCLE9BQUUsR0FBRyxvQkFBb0IsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztRQUNoRixnQkFBVyxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBR2xCLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBMEJ2RCxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBeUJsQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBK0xsQixxQkFBZ0IsR0FBRyxDQUFDLENBQU0sRUFBRSxFQUFFO1FBQ3RDLENBQUMsQ0FBQztRQUVNLGVBQVUsR0FBRyxHQUFHLEVBQUU7UUFDMUIsQ0FBQyxDQUFDO1FBalBBLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDdkQsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBSUQsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFDVyxVQUFVLENBQUMsS0FBa0M7UUFDdEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUlELElBQ1csUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQVcsUUFBUSxDQUFDLEdBQUc7UUFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNwRixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFJRCxJQUNXLFdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFXLFdBQVcsQ0FBQyxHQUFHO1FBQ3hCLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUlELElBQ1csUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQVcsUUFBUSxDQUFDLEdBQUc7UUFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQzFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUlELElBQ1csTUFBTTtRQUNmLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBVyxNQUFNLENBQUMsS0FBYTtRQUM3QixJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1NBQ3RCO0lBQ0gsQ0FBQztJQUVELElBQVcsS0FBSztRQUNkLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBVyxLQUFLLENBQUMsS0FBVTtRQUN6QixJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN0QjtJQUNILENBQUM7SUFFRCxJQUFXLEtBQUs7UUFDZCxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDO1FBQ3JDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQ1csZ0JBQWdCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDckMsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwRCxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxFQUFFO1lBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztTQUNyQztRQUVELDhEQUE4RDtRQUM5RCxrREFBa0Q7UUFDbEQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxpQkFBaUI7aUJBQ25CLFlBQVk7aUJBQ1osSUFBSSxDQUNILFlBQVksQ0FBQyxHQUFHLENBQUMsRUFDakIsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLEVBQzFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQy9DLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUM1QixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFDaEMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FDdEY7aUJBQ0EsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUVyQixJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtvQkFDL0IsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNoQztxQkFBTTtvQkFDTCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztpQkFDeEM7Z0JBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFFekIsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUVELHlEQUF5RDtRQUN6RCxJQUFJLENBQUMsaUJBQWlCO2FBQ25CLFlBQVk7YUFDWixJQUFJLENBQ0gsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUNqQixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyxFQUNyQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsRUFDMUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDOUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsRUFDN0MsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQ2hDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQ3JEO2FBQ0EsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ25CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLENBQUMsQ0FDRixDQUFDO0lBQ04sQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztZQUNuRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQzFCO0lBQ0gsQ0FBQztJQUVNLEtBQUs7UUFDVixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVNLEtBQUs7UUFDVixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDMUQsQ0FBQztJQUVNLGdCQUFnQixDQUFDLEtBQW1DO1FBQ3pELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDaEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRU0saUJBQWlCLENBQUMsS0FBb0M7UUFDM0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQztJQUM1QyxDQUFDO0lBRU0sY0FBYztRQUVuQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFFdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1NBRTVCO0lBQ0gsQ0FBQztJQUVNLEtBQUs7UUFDVixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztJQUNwQixDQUFDO0lBRU0sVUFBVTtRQUVmLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDdEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdkM7SUFDSCxDQUFDO0lBRU0sU0FBUztRQUVkLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxFQUFPO1FBQzdCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVNLGlCQUFpQixDQUFDLEVBQU87UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVNLFVBQVUsQ0FBQyxHQUFRO1FBQ3hCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0lBQ25CLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxVQUFtQjtRQUN6QyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUM3QixDQUFDO0lBRU0sZ0JBQWdCLENBQUMsS0FBaUI7UUFDdkMsSUFBSyxLQUFLLENBQUMsTUFBa0IsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLElBQUksT0FBTyxFQUFFO1lBQzlELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNkO0lBQ0gsQ0FBQztJQUVNLGlCQUFpQixDQUFDLEdBQWE7UUFDcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxRQUFRLENBQUMsT0FBd0I7UUFDL0IsTUFBTSxTQUFTLEdBQVEsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUNyQyxJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsRUFBRTtZQUNqQyxPQUFPLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDO1NBQzFCO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBUU8sUUFBUSxDQUFDLEtBQVU7UUFDekIsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUNsQyxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztZQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDMUI7SUFDSCxDQUFDOztBQTNRYywwQkFBTSxHQUFHLENBQUUsQ0FBQTtnSEFGZixtQkFBbUI7b0dBQW5CLG1CQUFtQiw4U0FqQm5CO1FBQ1Q7WUFDRSxPQUFPLEVBQUUsaUJBQWlCO1lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUM7WUFDbEQsS0FBSyxFQUFFLElBQUk7U0FDWjtRQUNEO1lBQ0UsT0FBTyxFQUFFLG1CQUFtQjtZQUM1QixXQUFXLEVBQUUsbUJBQW1CO1NBQ2pDO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsYUFBYTtZQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDO1lBQ2xELEtBQUssRUFBRSxJQUFJO1NBQ1o7S0FDRiwrSEN2REgsMHdCQWNBOzJGRDJDYSxtQkFBbUI7a0JBekIvQixTQUFTOytCQUNFLGtCQUFrQixRQUd0Qjt3QkFDSixNQUFNLEVBQUUsSUFBSTt3QkFDWix5QkFBeUIsRUFBRSxhQUFhO3FCQUN6QyxhQUNVO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLG9CQUFvQixDQUFDOzRCQUNsRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjt3QkFDRDs0QkFDRSxPQUFPLEVBQUUsbUJBQW1COzRCQUM1QixXQUFXLHFCQUFxQjt5QkFDakM7d0JBQ0Q7NEJBQ0UsT0FBTyxFQUFFLGFBQWE7NEJBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLG9CQUFvQixDQUFDOzRCQUNsRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjttSkFZOEIsRUFBRTtzQkFBaEMsV0FBVztnQkFHZ0IsVUFBVTtzQkFBckMsU0FBUzt1QkFBQyxPQUFPO2dCQUM0QixXQUFXO3NCQUF4RCxXQUFXO3VCQUFDLHVCQUF1QjtnQkFzQnpCLFVBQVU7c0JBRHBCLEtBQUs7Z0JBUUssUUFBUTtzQkFEbEIsS0FBSztnQkFjSyxXQUFXO3NCQURyQixLQUFLO2dCQWFLLFFBQVE7c0JBRGxCLEtBQUs7Z0JBY0ssTUFBTTtzQkFEaEIsS0FBSztnQkE0QkssZ0JBQWdCO3NCQUQxQixXQUFXO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRG9DaGVjayxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0QmluZGluZyxcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgRm9ybUNvbnRyb2wsXG4gIE5HX1ZBTElEQVRPUlMsXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICBOZ0NvbnRyb2wsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFZhbGlkYXRvclxufSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7TWF0Rm9ybUZpZWxkQ29udHJvbH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGRcIjtcbmltcG9ydCB7TWF0SW5wdXR9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9pbnB1dFwiO1xuaW1wb3J0IHtFbnRpdHlTZWxlY3REYXRhU291cmNlfSBmcm9tIFwiQG1lc2htYWtlcnMvc2hhcmVkLXNlcnZpY2VzXCI7XG5pbXBvcnQge1N1YmplY3R9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQge0ZvY3VzTW9uaXRvcn0gZnJvbSBcIkBhbmd1bGFyL2Nkay9hMTF5XCI7XG5pbXBvcnQge2RlYm91bmNlVGltZSwgZmlsdGVyLCBzd2l0Y2hNYXAsIHRhcH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQge01hdEF1dG9jb21wbGV0ZUFjdGl2YXRlZEV2ZW50LCBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50fSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlXCI7XG5pbXBvcnQge2NvZXJjZUJvb2xlYW5Qcm9wZXJ0eX0gZnJvbSBcIkBhbmd1bGFyL2Nkay9jb2VyY2lvblwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpYS1lbnRpdHktc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2lhLWVudGl0eS1zZWxlY3QtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pYS1lbnRpdHktc2VsZWN0LWlucHV0LmNvbXBvbmVudC5jc3MnXSxcbiAgaG9zdDoge1xuICAgICdbaWRdJzogJ2lkJyxcbiAgICAnW2F0dHIuYXJpYS1kZXNjcmliZWRieV0nOiAnZGVzY3JpYmVkQnknXG4gIH0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gSWFFbnRpdHlTZWxlY3RJbnB1dCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTWF0Rm9ybUZpZWxkQ29udHJvbCxcbiAgICAgIHVzZUV4aXN0aW5nOiBJYUVudGl0eVNlbGVjdElucHV0XG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gSWFFbnRpdHlTZWxlY3RJbnB1dCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBJYUVudGl0eVNlbGVjdElucHV0IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIERvQ2hlY2ssIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBNYXRGb3JtRmllbGRDb250cm9sPGFueT4sIFZhbGlkYXRvciB7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbmV4dElkID0gMDtcbiAgcHVibGljIHJlYWRvbmx5IHNlYXJjaEZvcm1Db250cm9sOiBGb3JtQ29udHJvbDtcbiAgcHVibGljIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgcHVibGljIGZpbHRlcmVkRW50aXRpZXM6IGFueVtdID0gW107XG4gIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbDtcbiAgcHVibGljIGVycm9yU3RhdGU6IGJvb2xlYW47XG4gIHB1YmxpYyBmb2N1c2VkOiBib29sZWFuO1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhdGVDaGFuZ2VzID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgQEhvc3RCaW5kaW5nKCkgcHVibGljIHJlYWRvbmx5IGlkID0gYGlhLWVudGl0eS1zZWxlY3QtJHtJYUVudGl0eVNlbGVjdElucHV0Lm5leHRJZCsrfWA7XG4gIHB1YmxpYyB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRFbnRpdHk6IGFueTtcbiAgQFZpZXdDaGlsZCgnaW5wdXQnKSBwcml2YXRlIGlucHV0RmllbGQ6IE1hdElucHV0O1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1kZXNjcmliZWRieScpIHByaXZhdGUgZGVzY3JpYmVkQnkgPSAnJztcbiAgcHJpdmF0ZSBhY3RpdmF0ZWRWYWx1ZTogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBlbFJlZjogRWxlbWVudFJlZiwgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsIHByaXZhdGUgZm06IEZvY3VzTW9uaXRvcikge1xuXG4gICAgdGhpcy5zZWFyY2hGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZTtcbiAgICBmbS5tb25pdG9yKGVsUmVmLm5hdGl2ZUVsZW1lbnQsIHRydWUpLnN1YnNjcmliZShvcmlnaW4gPT4ge1xuICAgICAgdGhpcy5mb2N1c2VkID0gISFvcmlnaW47XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9kYXRhU291cmNlOiBFbnRpdHlTZWxlY3REYXRhU291cmNlPGFueT47XG5cbiAgcHVibGljIGdldCBkYXRhU291cmNlKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkYXRhU291cmNlKHZhbHVlOiBFbnRpdHlTZWxlY3REYXRhU291cmNlPGFueT4pIHtcbiAgICB0aGlzLl9kYXRhU291cmNlID0gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgZGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICB9XG5cbiAgcHVibGljIHNldCBkaXNhYmxlZChkaXMpIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShkaXMpO1xuICAgIHRoaXMuX2Rpc2FibGVkID8gdGhpcy5zZWFyY2hGb3JtQ29udHJvbC5kaXNhYmxlKCkgOiB0aGlzLnNlYXJjaEZvcm1Db250cm9sLmVuYWJsZSgpO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3BsYWNlaG9sZGVyOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGdldCBwbGFjZWhvbGRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXI7XG4gIH1cblxuICBwdWJsaWMgc2V0IHBsYWNlaG9sZGVyKHBsaCkge1xuICAgIHRoaXMuX3BsYWNlaG9sZGVyID0gcGxoO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlcXVpcmVkID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGdldCByZXF1aXJlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XG4gIH1cblxuICBwdWJsaWMgc2V0IHJlcXVpcmVkKHJlcSkge1xuICAgIHRoaXMuX3JlcXVpcmVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHJlcSk7XG4gICAgdGhpcy5pbnB1dEZpZWxkLnJlcXVpcmVkID0gdGhpcy5fcmVxdWlyZWQ7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcHJlZml4OiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGdldCBwcmVmaXgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcHJlZml4O1xuICB9XG5cbiAgcHVibGljIHNldCBwcmVmaXgodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5fcHJlZml4KSB7XG4gICAgICB0aGlzLl9wcmVmaXggPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkRW50aXR5O1xuICB9XG5cbiAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLl9zZWxlY3RlZEVudGl0eSkge1xuICAgICAgdGhpcy5zZWFyY2hGb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICB0aGlzLnNldFZhbHVlKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGVtcHR5KCkge1xuICAgIGxldCBuID0gdGhpcy5zZWFyY2hGb3JtQ29udHJvbC52YWx1ZTtcbiAgICByZXR1cm4gISEhbjtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZmxvYXRpbmcnKVxuICBwdWJsaWMgZ2V0IHNob3VsZExhYmVsRmxvYXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9jdXNlZCB8fCAhdGhpcy5lbXB0eTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMubmdDb250cm9sID0gdGhpcy5pbmplY3Rvci5nZXQoTmdDb250cm9sLCBudWxsKTtcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wgIT0gbnVsbCkge1xuICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgfVxuXG4gICAgLy8gSWYgcHJlZml4IGRlZmluZWQsIHVzdWFsbHkgdGhpcyBpcyB1c2VkIGZvciBhIGNvZGUgc2Nhbm5lci5cbiAgICAvLyBUaGUgZ29hbCBpcyB0byBzZWxlY3QgdGhlIGVudGl0eSBpbiBkaXJlY3Qgd2F5LlxuICAgIGlmICh0aGlzLl9wcmVmaXgpIHtcbiAgICAgIHRoaXMuc2VhcmNoRm9ybUNvbnRyb2xcbiAgICAgICAgLnZhbHVlQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcbiAgICAgICAgICBmaWx0ZXIodmFsdWUgPT4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyksXG4gICAgICAgICAgZmlsdGVyKHZhbHVlID0+IHZhbHVlLnN0YXJ0c1dpdGgodGhpcy5fcHJlZml4KSksXG4gICAgICAgICAgdGFwKCgpID0+IHRoaXMudmFsdWUgPSBudWxsKSxcbiAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5pc0xvYWRpbmcgPSB0cnVlKSxcbiAgICAgICAgICBzd2l0Y2hNYXAodmFsdWUgPT4gdGhpcy5fZGF0YVNvdXJjZS5vbkZpbHRlcih2YWx1ZS5yZXBsYWNlKHRoaXMuX3ByZWZpeCwgXCJcIikudHJpbSgpKSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdFNldCA9PiB7XG5cbiAgICAgICAgICBpZiAocmVzdWx0U2V0Lmxpc3QubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gcmVzdWx0U2V0Lmxpc3RbMF07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRFbnRpdGllcyA9IHJlc3VsdFNldC5saXN0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyB0aGUgc2VhcmNoIGZ1bmN0aW9uYWxpdHkgd2hlbiBzZWFyY2ggYnkgaHVtYW4uXG4gICAgdGhpcy5zZWFyY2hGb3JtQ29udHJvbFxuICAgICAgLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSgzMDApLFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5maWx0ZXJlZEVudGl0aWVzID0gW10pLFxuICAgICAgICBmaWx0ZXIodmFsdWUgPT4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyksXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLnNldFZhbHVlKG51bGwpKSxcbiAgICAgICAgZmlsdGVyKHZhbHVlID0+IHZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoID49IDMpLFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5pc0xvYWRpbmcgPSB0cnVlKSxcbiAgICAgICAgc3dpdGNoTWFwKHZhbHVlID0+IHRoaXMuX2RhdGFTb3VyY2Uub25GaWx0ZXIodmFsdWUpKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShyZXN1bHRTZXQgPT4ge1xuICAgICAgICAgIHRoaXMuZmlsdGVyZWRFbnRpdGllcyA9IHJlc3VsdFNldC5saXN0O1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuZm0uc3RvcE1vbml0b3JpbmcodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIG5nRG9DaGVjaygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcbiAgICAgIHRoaXMuZXJyb3JTdGF0ZSA9IHRoaXMubmdDb250cm9sLmludmFsaWQgJiYgdGhpcy5uZ0NvbnRyb2wudG91Y2hlZDtcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgdGhpcy5maWx0ZXJlZEVudGl0aWVzID0gW107XG4gICAgdGhpcy5zZWFyY2hGb3JtQ29udHJvbC5yZXNldChudWxsKTtcbiAgfVxuXG4gIHB1YmxpYyBmb2N1cygpIHtcbiAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXQnKS5mb2N1cygpO1xuICB9XG5cbiAgcHVibGljIG9uRW50aXR5U2VsZWN0ZWQoZXZlbnQ6IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQpIHtcbiAgICB0aGlzLnZhbHVlID0gZXZlbnQub3B0aW9uLnZhbHVlO1xuICAgIHRoaXMuZmlsdGVyZWRFbnRpdGllcyA9IFtdO1xuICB9XG5cbiAgcHVibGljIG9uRW50aXR5QWN0aXZhdGVkKGV2ZW50OiBNYXRBdXRvY29tcGxldGVBY3RpdmF0ZWRFdmVudCkge1xuICAgIHRoaXMuYWN0aXZhdGVkVmFsdWUgPSBldmVudC5vcHRpb24/LnZhbHVlO1xuICB9XG5cbiAgcHVibGljIG9uRW50aXR5Q2xvc2VkKCkge1xuXG4gICAgaWYgKHRoaXMuYWN0aXZhdGVkVmFsdWUpIHtcblxuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuYWN0aXZhdGVkVmFsdWU7XG4gICAgICB0aGlzLmFjdGl2YXRlZFZhbHVlID0gbnVsbDtcblxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZXNldCgpIHtcbiAgICB0aGlzLnZhbHVlID0gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBvbkZvY3VzT3V0KCkge1xuXG4gICAgaWYgKHRoaXMuZmlsdGVyZWRFbnRpdGllcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHRoaXMuYWN0aXZhdGVkVmFsdWUgPSB0aGlzLmZpbHRlcmVkRW50aXRpZXNbMF07XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5maWx0ZXJlZEVudGl0aWVzWzBdO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvblRvdWNoZWQoKSB7XG5cbiAgICB0aGlzLl9vblRvdWNoZWQoKTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fcHJvcGFnYXRlQ2hhbmdlID0gZm47XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBwdWJsaWMgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgICB0aGlzLnZhbHVlID0gb2JqO1xuICB9XG5cbiAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgcHVibGljIG9uQ29udGFpbmVyQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT0gJ2lucHV0Jykge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXREZXNjcmliZWRCeUlkcyhpZHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgdGhpcy5kZXNjcmliZWRCeSA9IGlkcy5qb2luKCcgJyk7XG4gIH1cblxuICB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3Qgc2VsZWN0aW9uOiBhbnkgPSBjb250cm9sLnZhbHVlO1xuICAgIGlmICh0eXBlb2Ygc2VsZWN0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHtpbmNvcnJlY3Q6IHRydWV9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgX3Byb3BhZ2F0ZUNoYW5nZSA9IChfOiBhbnkpID0+IHtcbiAgfTtcblxuICBwcml2YXRlIF9vblRvdWNoZWQgPSAoKSA9PiB7XG4gIH07XG5cbiAgcHJpdmF0ZSBzZXRWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLl9zZWxlY3RlZEVudGl0eSkge1xuICAgICAgdGhpcy5fc2VsZWN0ZWRFbnRpdHkgPSB2YWx1ZTtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgICB0aGlzLl9wcm9wYWdhdGVDaGFuZ2UodGhpcy5fc2VsZWN0ZWRFbnRpdHkpO1xuICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICAgIH1cbiAgfVxuXG59XG4iLCI8aW5wdXQgI2lucHV0IChibHVyKT1cIm9uVG91Y2hlZCgpXCIgKGZvY3Vzb3V0KT1cIm9uRm9jdXNPdXQoKVwiIFtmb3JtQ29udHJvbF09XCJzZWFyY2hGb3JtQ29udHJvbFwiIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiXG4gICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCIgbWF0SW5wdXQ+XG48bWF0LWF1dG9jb21wbGV0ZSAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiIChjbG9zZWQpPVwib25FbnRpdHlDbG9zZWQoKVwiXG4gICAgICAgICAgICAgICAgICAob3B0aW9uQWN0aXZhdGVkKT1cIm9uRW50aXR5QWN0aXZhdGVkKCRldmVudClcIiAob3B0aW9uU2VsZWN0ZWQpPVwib25FbnRpdHlTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNwbGF5V2l0aF09XCJkYXRhU291cmNlLm9uRGlzcGxheUVudGl0eVwiPlxuICA8bWF0LW9wdGlvbiAqbmdJZj1cImlzTG9hZGluZ1wiIGNsYXNzPVwiaXMtbG9hZGluZ1wiPlxuICAgIDxtYXQtc3Bpbm5lciBkaWFtZXRlcj1cIjUwXCI+PC9tYXQtc3Bpbm5lcj5cbiAgPC9tYXQtb3B0aW9uPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTG9hZGluZ1wiPlxuICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBlbnRpdHkgb2YgZmlsdGVyZWRFbnRpdGllc1wiIFt2YWx1ZV09XCJlbnRpdHlcIj5cbiAgICAgIHt7ZGF0YVNvdXJjZS5vbkRpc3BsYXlFbnRpdHkoZW50aXR5KX19XG4gICAgPC9tYXQtb3B0aW9uPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbWF0LWF1dG9jb21wbGV0ZT5cbiJdfQ==
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import { MessageDetailsComponent } from "../message-details/message-details.component";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@meshmakers/shared-services";
|
|
5
|
+
import * as i2 from "@angular/material/dialog";
|
|
6
|
+
import * as i3 from "@angular/material/toolbar";
|
|
7
|
+
import * as i4 from "@angular/material/button";
|
|
8
|
+
export class IaNotificationBarComponent {
|
|
9
|
+
constructor(messageService, dialog) {
|
|
10
|
+
this.messageService = messageService;
|
|
11
|
+
this.dialog = dialog;
|
|
12
|
+
}
|
|
13
|
+
ngOnInit() {
|
|
14
|
+
this.messageService.getLatestErrorMessage().subscribe(value => {
|
|
15
|
+
this.errorMessage = value;
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
onHide() {
|
|
19
|
+
this.errorMessage = null;
|
|
20
|
+
}
|
|
21
|
+
onShowDetails() {
|
|
22
|
+
this.dialog.open(MessageDetailsComponent, {
|
|
23
|
+
data: {
|
|
24
|
+
errorMessage: this.errorMessage
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
IaNotificationBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: IaNotificationBarComponent, deps: [{ token: i1.MessageService }, { token: i2.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
|
|
30
|
+
IaNotificationBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.2", type: IaNotificationBarComponent, selector: "ia-notification-bar", ngImport: i0, template: "<mat-toolbar [hidden]=\"!errorMessage\" color=\"warn\">\n <a (click)=\"onShowDetails()\"><span class=\"mat-small\"><u>{{ errorMessage?.title }}</u></span></a>\n\n <!-- This fills the remaining space of the current row -->\n <span class=\"notification-fill-remaining-space\"></span>\n\n <button (click)=\"onHide()\" color=\"warn\" mat-raised-button><i class=\"pi pi-angle-double-up\"></i></button>\n</mat-toolbar>\n", styles: [".notification-fill-remaining-space{flex:1 1 auto}\n"], dependencies: [{ kind: "component", type: i3.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }] });
|
|
31
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: IaNotificationBarComponent, decorators: [{
|
|
32
|
+
type: Component,
|
|
33
|
+
args: [{ selector: 'ia-notification-bar', template: "<mat-toolbar [hidden]=\"!errorMessage\" color=\"warn\">\n <a (click)=\"onShowDetails()\"><span class=\"mat-small\"><u>{{ errorMessage?.title }}</u></span></a>\n\n <!-- This fills the remaining space of the current row -->\n <span class=\"notification-fill-remaining-space\"></span>\n\n <button (click)=\"onHide()\" color=\"warn\" mat-raised-button><i class=\"pi pi-angle-double-up\"></i></button>\n</mat-toolbar>\n", styles: [".notification-fill-remaining-space{flex:1 1 auto}\n"] }]
|
|
34
|
+
}], ctorParameters: function () { return [{ type: i1.MessageService }, { type: i2.MatDialog }]; } });
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWEtbm90aWZpY2F0aW9uLWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXNobWFrZXJzL3NoYXJlZC11aS9zcmMvbGliL2lhLXNoYXJlZC11aS9pYS1ub3RpZmljYXRpb24tYmFyL2lhLW5vdGlmaWNhdGlvbi1iYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVzaG1ha2Vycy9zaGFyZWQtdWkvc3JjL2xpYi9pYS1zaGFyZWQtdWkvaWEtbm90aWZpY2F0aW9uLWJhci9pYS1ub3RpZmljYXRpb24tYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQVMsTUFBTSxlQUFlLENBQUM7QUFHaEQsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sOENBQThDLENBQUM7Ozs7OztBQU9yRixNQUFNLE9BQU8sMEJBQTBCO0lBSXJDLFlBQW9CLGNBQThCLEVBQVUsTUFBaUI7UUFBekQsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBVztJQUM3RSxDQUFDO0lBRUQsUUFBUTtRQUVOLElBQUksQ0FBQyxjQUFjLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDNUQsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0lBQzNCLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUU7WUFDeEMsSUFBSSxFQUFFO2dCQUNKLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTthQUNoQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7O3VIQXhCVSwwQkFBMEI7MkdBQTFCLDBCQUEwQiwyRENWdkMsb2FBUUE7MkZERWEsMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNFLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtFcnJvck1lc3NhZ2UsIE1lc3NhZ2VTZXJ2aWNlfSBmcm9tIFwiQG1lc2htYWtlcnMvc2hhcmVkLXNlcnZpY2VzXCI7XG5pbXBvcnQge01hdERpYWxvZ30gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xuaW1wb3J0IHtNZXNzYWdlRGV0YWlsc0NvbXBvbmVudH0gZnJvbSBcIi4uL21lc3NhZ2UtZGV0YWlscy9tZXNzYWdlLWRldGFpbHMuY29tcG9uZW50XCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2lhLW5vdGlmaWNhdGlvbi1iYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vaWEtbm90aWZpY2F0aW9uLWJhci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2lhLW5vdGlmaWNhdGlvbi1iYXIuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIElhTm90aWZpY2F0aW9uQmFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBwdWJsaWMgZXJyb3JNZXNzYWdlOiBFcnJvck1lc3NhZ2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2cpIHtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuXG4gICAgdGhpcy5tZXNzYWdlU2VydmljZS5nZXRMYXRlc3RFcnJvck1lc3NhZ2UoKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB2YWx1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uSGlkZSgpIHtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IG51bGw7XG4gIH1cblxuICBvblNob3dEZXRhaWxzKCkge1xuICAgIHRoaXMuZGlhbG9nLm9wZW4oTWVzc2FnZURldGFpbHNDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZXJyb3JNZXNzYWdlOiB0aGlzLmVycm9yTWVzc2FnZVxuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iLCI8bWF0LXRvb2xiYXIgW2hpZGRlbl09XCIhZXJyb3JNZXNzYWdlXCIgY29sb3I9XCJ3YXJuXCI+XG4gIDxhIChjbGljayk9XCJvblNob3dEZXRhaWxzKClcIj48c3BhbiBjbGFzcz1cIm1hdC1zbWFsbFwiPjx1Pnt7IGVycm9yTWVzc2FnZT8udGl0bGUgfX08L3U+PC9zcGFuPjwvYT5cblxuICA8IS0tIFRoaXMgZmlsbHMgdGhlIHJlbWFpbmluZyBzcGFjZSBvZiB0aGUgY3VycmVudCByb3cgLS0+XG4gIDxzcGFuIGNsYXNzPVwibm90aWZpY2F0aW9uLWZpbGwtcmVtYWluaW5nLXNwYWNlXCI+PC9zcGFuPlxuXG4gIDxidXR0b24gKGNsaWNrKT1cIm9uSGlkZSgpXCIgY29sb3I9XCJ3YXJuXCIgbWF0LXJhaXNlZC1idXR0b24+PGkgY2xhc3M9XCJwaSBwaS1hbmdsZS1kb3VibGUtdXBcIj48L2k+PC9idXR0b24+XG48L21hdC10b29sYmFyPlxuIl19
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { IaNotificationBarComponent } from './ia-notification-bar/ia-notification-bar.component';
|
|
4
|
+
import { MatToolbarModule } from "@angular/material/toolbar";
|
|
5
|
+
import { MatButtonModule } from "@angular/material/button";
|
|
6
|
+
import { MatSnackBarModule } from "@angular/material/snack-bar";
|
|
7
|
+
import { MatDialogModule } from "@angular/material/dialog";
|
|
8
|
+
import { MessageDetailsComponent } from "./message-details/message-details.component";
|
|
9
|
+
import { IaAutocompleteInput } from "./ia-autocomplete-input/ia-autocomplete-input";
|
|
10
|
+
import { MatAutocompleteModule } from "@angular/material/autocomplete";
|
|
11
|
+
import { MatInputModule } from "@angular/material/input";
|
|
12
|
+
import { MatProgressSpinnerModule } from "@angular/material/progress-spinner";
|
|
13
|
+
import { ReactiveFormsModule } from "@angular/forms";
|
|
14
|
+
import { IaEntitySelectInput } from './ia-entity-select-input/ia-entity-select-input.component';
|
|
15
|
+
import * as i0 from "@angular/core";
|
|
16
|
+
export class IaSharedUIModule {
|
|
17
|
+
}
|
|
18
|
+
IaSharedUIModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: IaSharedUIModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
19
|
+
IaSharedUIModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.2", ngImport: i0, type: IaSharedUIModule, declarations: [IaNotificationBarComponent, MessageDetailsComponent, IaAutocompleteInput, IaEntitySelectInput], imports: [CommonModule,
|
|
20
|
+
MatToolbarModule,
|
|
21
|
+
MatButtonModule,
|
|
22
|
+
MatSnackBarModule,
|
|
23
|
+
MatDialogModule,
|
|
24
|
+
MatAutocompleteModule,
|
|
25
|
+
MatInputModule,
|
|
26
|
+
MatProgressSpinnerModule,
|
|
27
|
+
ReactiveFormsModule], exports: [IaNotificationBarComponent,
|
|
28
|
+
IaAutocompleteInput,
|
|
29
|
+
IaEntitySelectInput] });
|
|
30
|
+
IaSharedUIModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: IaSharedUIModule, imports: [CommonModule,
|
|
31
|
+
MatToolbarModule,
|
|
32
|
+
MatButtonModule,
|
|
33
|
+
MatSnackBarModule,
|
|
34
|
+
MatDialogModule,
|
|
35
|
+
MatAutocompleteModule,
|
|
36
|
+
MatInputModule,
|
|
37
|
+
MatProgressSpinnerModule,
|
|
38
|
+
ReactiveFormsModule] });
|
|
39
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: IaSharedUIModule, decorators: [{
|
|
40
|
+
type: NgModule,
|
|
41
|
+
args: [{
|
|
42
|
+
declarations: [IaNotificationBarComponent, MessageDetailsComponent, IaAutocompleteInput, IaEntitySelectInput],
|
|
43
|
+
exports: [
|
|
44
|
+
IaNotificationBarComponent,
|
|
45
|
+
IaAutocompleteInput,
|
|
46
|
+
IaEntitySelectInput
|
|
47
|
+
],
|
|
48
|
+
entryComponents: [
|
|
49
|
+
MessageDetailsComponent,
|
|
50
|
+
IaAutocompleteInput,
|
|
51
|
+
IaEntitySelectInput
|
|
52
|
+
],
|
|
53
|
+
imports: [
|
|
54
|
+
CommonModule,
|
|
55
|
+
MatToolbarModule,
|
|
56
|
+
MatButtonModule,
|
|
57
|
+
MatSnackBarModule,
|
|
58
|
+
MatDialogModule,
|
|
59
|
+
MatAutocompleteModule,
|
|
60
|
+
MatInputModule,
|
|
61
|
+
MatProgressSpinnerModule,
|
|
62
|
+
ReactiveFormsModule
|
|
63
|
+
]
|
|
64
|
+
}]
|
|
65
|
+
}] });
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWEtc2hhcmVkLXVpLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lc2htYWtlcnMvc2hhcmVkLXVpL3NyYy9saWIvaWEtc2hhcmVkLXVpL2lhLXNoYXJlZC11aS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0scURBQXFELENBQUM7QUFDL0YsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSw2Q0FBNkMsQ0FBQztBQUNwRixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSwrQ0FBK0MsQ0FBQztBQUNsRixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDNUUsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sMkRBQTJELENBQUM7O0FBMkI5RixNQUFNLE9BQU8sZ0JBQWdCOzs2R0FBaEIsZ0JBQWdCOzhHQUFoQixnQkFBZ0IsaUJBdkJaLDBCQUEwQixFQUFFLHVCQUF1QixFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixhQVkxRyxZQUFZO1FBQ1osZ0JBQWdCO1FBQ2hCLGVBQWU7UUFDZixpQkFBaUI7UUFDakIsZUFBZTtRQUNmLHFCQUFxQjtRQUNyQixjQUFjO1FBQ2Qsd0JBQXdCO1FBQ3hCLG1CQUFtQixhQWxCbkIsMEJBQTBCO1FBQzFCLG1CQUFtQjtRQUNuQixtQkFBbUI7OEdBbUJWLGdCQUFnQixZQVh6QixZQUFZO1FBQ1osZ0JBQWdCO1FBQ2hCLGVBQWU7UUFDZixpQkFBaUI7UUFDakIsZUFBZTtRQUNmLHFCQUFxQjtRQUNyQixjQUFjO1FBQ2Qsd0JBQXdCO1FBQ3hCLG1CQUFtQjsyRkFHVixnQkFBZ0I7a0JBeEI1QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLDBCQUEwQixFQUFFLHVCQUF1QixFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixDQUFDO29CQUM3RyxPQUFPLEVBQUU7d0JBQ1AsMEJBQTBCO3dCQUMxQixtQkFBbUI7d0JBQ25CLG1CQUFtQjtxQkFDcEI7b0JBQ0QsZUFBZSxFQUFFO3dCQUNmLHVCQUF1Qjt3QkFDdkIsbUJBQW1CO3dCQUNuQixtQkFBbUI7cUJBQ3BCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLGdCQUFnQjt3QkFDaEIsZUFBZTt3QkFDZixpQkFBaUI7d0JBQ2pCLGVBQWU7d0JBQ2YscUJBQXFCO3dCQUNyQixjQUFjO3dCQUNkLHdCQUF3Qjt3QkFDeEIsbUJBQW1CO3FCQUNwQjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0lhTm90aWZpY2F0aW9uQmFyQ29tcG9uZW50fSBmcm9tICcuL2lhLW5vdGlmaWNhdGlvbi1iYXIvaWEtbm90aWZpY2F0aW9uLWJhci5jb21wb25lbnQnO1xuaW1wb3J0IHtNYXRUb29sYmFyTW9kdWxlfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbGJhclwiO1xuaW1wb3J0IHtNYXRCdXR0b25Nb2R1bGV9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9idXR0b25cIjtcbmltcG9ydCB7TWF0U25hY2tCYXJNb2R1bGV9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXJcIjtcbmltcG9ydCB7TWF0RGlhbG9nTW9kdWxlfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XG5pbXBvcnQge01lc3NhZ2VEZXRhaWxzQ29tcG9uZW50fSBmcm9tIFwiLi9tZXNzYWdlLWRldGFpbHMvbWVzc2FnZS1kZXRhaWxzLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtJYUF1dG9jb21wbGV0ZUlucHV0fSBmcm9tIFwiLi9pYS1hdXRvY29tcGxldGUtaW5wdXQvaWEtYXV0b2NvbXBsZXRlLWlucHV0XCI7XG5pbXBvcnQge01hdEF1dG9jb21wbGV0ZU1vZHVsZX0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZVwiO1xuaW1wb3J0IHtNYXRJbnB1dE1vZHVsZX0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2lucHV0XCI7XG5pbXBvcnQge01hdFByb2dyZXNzU3Bpbm5lck1vZHVsZX0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXJcIjtcbmltcG9ydCB7UmVhY3RpdmVGb3Jtc01vZHVsZX0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQge0lhRW50aXR5U2VsZWN0SW5wdXR9IGZyb20gJy4vaWEtZW50aXR5LXNlbGVjdC1pbnB1dC9pYS1lbnRpdHktc2VsZWN0LWlucHV0LmNvbXBvbmVudCc7XG5cblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbSWFOb3RpZmljYXRpb25CYXJDb21wb25lbnQsIE1lc3NhZ2VEZXRhaWxzQ29tcG9uZW50LCBJYUF1dG9jb21wbGV0ZUlucHV0LCBJYUVudGl0eVNlbGVjdElucHV0XSxcbiAgZXhwb3J0czogW1xuICAgIElhTm90aWZpY2F0aW9uQmFyQ29tcG9uZW50LFxuICAgIElhQXV0b2NvbXBsZXRlSW5wdXQsXG4gICAgSWFFbnRpdHlTZWxlY3RJbnB1dFxuICBdLFxuICBlbnRyeUNvbXBvbmVudHM6IFtcbiAgICBNZXNzYWdlRGV0YWlsc0NvbXBvbmVudCxcbiAgICBJYUF1dG9jb21wbGV0ZUlucHV0LFxuICAgIElhRW50aXR5U2VsZWN0SW5wdXRcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBNYXRUb29sYmFyTW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXRTbmFja0Jhck1vZHVsZSxcbiAgICBNYXREaWFsb2dNb2R1bGUsXG4gICAgTWF0QXV0b2NvbXBsZXRlTW9kdWxlLFxuICAgIE1hdElucHV0TW9kdWxlLFxuICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgSWFTaGFyZWRVSU1vZHVsZSB7XG59XG4iXX0=
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Component, Inject } from '@angular/core';
|
|
2
|
+
import { MAT_DIALOG_DATA } from "@angular/material/dialog";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/material/dialog";
|
|
5
|
+
import * as i2 from "@angular/material/button";
|
|
6
|
+
export class MessageDetailsComponent {
|
|
7
|
+
constructor(dialogRef, data) {
|
|
8
|
+
this.dialogRef = dialogRef;
|
|
9
|
+
this.data = data;
|
|
10
|
+
this.errorMessage = data.errorMessage;
|
|
11
|
+
}
|
|
12
|
+
ngOnInit() {
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
MessageDetailsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: MessageDetailsComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
|
|
16
|
+
MessageDetailsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.2", type: MessageDetailsComponent, selector: "app-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-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], 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.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }] });
|
|
17
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: MessageDetailsComponent, decorators: [{
|
|
18
|
+
type: Component,
|
|
19
|
+
args: [{ selector: 'app-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" }]
|
|
20
|
+
}], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
|
|
21
|
+
type: Inject,
|
|
22
|
+
args: [MAT_DIALOG_DATA]
|
|
23
|
+
}] }]; } });
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1kZXRhaWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lc2htYWtlcnMvc2hhcmVkLXVpL3NyYy9saWIvaWEtc2hhcmVkLXVpL21lc3NhZ2UtZGV0YWlscy9tZXNzYWdlLWRldGFpbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVzaG1ha2Vycy9zaGFyZWQtdWkvc3JjL2xpYi9pYS1zaGFyZWQtdWkvbWVzc2FnZS1kZXRhaWxzL21lc3NhZ2UtZGV0YWlscy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBUyxNQUFNLGVBQWUsQ0FBQztBQUN4RCxPQUFPLEVBQUMsZUFBZSxFQUFlLE1BQU0sMEJBQTBCLENBQUM7Ozs7QUFRdkUsTUFBTSxPQUFPLHVCQUF1QjtJQUtsQyxZQUFtQixTQUFnRCxFQUFrQyxJQUFTO1FBQTNGLGNBQVMsR0FBVCxTQUFTLENBQXVDO1FBQWtDLFNBQUksR0FBSixJQUFJLENBQUs7UUFDNUcsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxRQUFRO0lBQ1IsQ0FBQzs7b0hBVlUsdUJBQXVCLDhDQUsyQyxlQUFlO3dHQUxqRix1QkFBdUIsMkRDVHBDLGtRQVVBOzJGRERhLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSxxQkFBcUI7OzBCQVN1QyxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5qZWN0LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZn0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xuaW1wb3J0IHtFcnJvck1lc3NhZ2V9IGZyb20gXCJAbWVzaG1ha2Vycy9zaGFyZWQtc2VydmljZXNcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLW1lc3NhZ2UtZGV0YWlscycsXG4gIHRlbXBsYXRlVXJsOiAnLi9tZXNzYWdlLWRldGFpbHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tZXNzYWdlLWRldGFpbHMuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIE1lc3NhZ2VEZXRhaWxzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBlcnJvck1lc3NhZ2U6IEVycm9yTWVzc2FnZTtcblxuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxNZXNzYWdlRGV0YWlsc0NvbXBvbmVudD4sIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55KSB7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBkYXRhLmVycm9yTWVzc2FnZTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICB9XG5cbn1cbiIsIjxtYXQtZGlhbG9nLWNvbnRlbnQ+XG5cbiAgPGgyPnt7ZXJyb3JNZXNzYWdlLnRpdGxlfX08L2gyPlxuICA8cD57e2Vycm9yTWVzc2FnZS5tZXNzYWdlfX08L3A+XG5cblxuPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XG48bWF0LWRpYWxvZy1hY3Rpb25zIGFsaWduPVwiZW5kXCI+XG4gIDxidXR0b24gY29sb3I9XCJwcmltYXJ5XCIgbWF0LWRpYWxvZy1jbG9zZSBtYXQtcmFpc2VkLWJ1dHRvbj5PSzwvYnV0dG9uPlxuPC9tYXQtZGlhbG9nLWFjdGlvbnM+XG4iXX0=
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { ProgressWindowComponent } from './progress-window/progress-window.component';
|
|
4
|
+
import { MatDialogModule } from "@angular/material/dialog";
|
|
5
|
+
import { FlexLayoutModule } from "@angular/flex-layout";
|
|
6
|
+
import { MatButtonModule } from "@angular/material/button";
|
|
7
|
+
import { MatProgressBarModule } from "@angular/material/progress-bar";
|
|
8
|
+
import { ProgressNotifierService } from "./services/progress-notifier.service";
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
export class ProgressNotifierModule {
|
|
11
|
+
static forRoot() {
|
|
12
|
+
return {
|
|
13
|
+
ngModule: ProgressNotifierModule,
|
|
14
|
+
providers: [
|
|
15
|
+
ProgressNotifierService
|
|
16
|
+
]
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
ProgressNotifierModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: ProgressNotifierModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
21
|
+
ProgressNotifierModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.2", ngImport: i0, type: ProgressNotifierModule, declarations: [ProgressWindowComponent], imports: [CommonModule,
|
|
22
|
+
MatDialogModule,
|
|
23
|
+
FlexLayoutModule,
|
|
24
|
+
MatButtonModule,
|
|
25
|
+
MatProgressBarModule] });
|
|
26
|
+
ProgressNotifierModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: ProgressNotifierModule, imports: [CommonModule,
|
|
27
|
+
MatDialogModule,
|
|
28
|
+
FlexLayoutModule,
|
|
29
|
+
MatButtonModule,
|
|
30
|
+
MatProgressBarModule] });
|
|
31
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: ProgressNotifierModule, decorators: [{
|
|
32
|
+
type: NgModule,
|
|
33
|
+
args: [{
|
|
34
|
+
declarations: [ProgressWindowComponent],
|
|
35
|
+
imports: [
|
|
36
|
+
CommonModule,
|
|
37
|
+
MatDialogModule,
|
|
38
|
+
FlexLayoutModule,
|
|
39
|
+
MatButtonModule,
|
|
40
|
+
MatProgressBarModule
|
|
41
|
+
]
|
|
42
|
+
}]
|
|
43
|
+
}] });
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3Mtbm90aWZpZXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVzaG1ha2Vycy9zaGFyZWQtdWkvc3JjL2xpYi9wcm9ncmVzcy1ub3RpZmllci9wcm9ncmVzcy1ub3RpZmllci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFzQixRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDNUQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDZDQUE2QyxDQUFDO0FBQ3BGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sc0NBQXNDLENBQUM7O0FBYTdFLE1BQU0sT0FBTyxzQkFBc0I7SUFDakMsTUFBTSxDQUFDLE9BQU87UUFDWixPQUFPO1lBQ0wsUUFBUSxFQUFFLHNCQUFzQjtZQUNoQyxTQUFTLEVBQUU7Z0JBQ1QsdUJBQXVCO2FBQ3hCO1NBQ0YsQ0FBQTtJQUNILENBQUM7O21IQVJVLHNCQUFzQjtvSEFBdEIsc0JBQXNCLGlCQVRsQix1QkFBdUIsYUFFcEMsWUFBWTtRQUNaLGVBQWU7UUFDZixnQkFBZ0I7UUFDaEIsZUFBZTtRQUNmLG9CQUFvQjtvSEFHWCxzQkFBc0IsWUFQL0IsWUFBWTtRQUNaLGVBQWU7UUFDZixnQkFBZ0I7UUFDaEIsZUFBZTtRQUNmLG9CQUFvQjsyRkFHWCxzQkFBc0I7a0JBVmxDLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsdUJBQXVCLENBQUM7b0JBQ3ZDLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixlQUFlO3dCQUNmLG9CQUFvQjtxQkFDckI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge01vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtQcm9ncmVzc1dpbmRvd0NvbXBvbmVudH0gZnJvbSAnLi9wcm9ncmVzcy13aW5kb3cvcHJvZ3Jlc3Mtd2luZG93LmNvbXBvbmVudCc7XG5pbXBvcnQge01hdERpYWxvZ01vZHVsZX0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xuaW1wb3J0IHtGbGV4TGF5b3V0TW9kdWxlfSBmcm9tIFwiQGFuZ3VsYXIvZmxleC1sYXlvdXRcIjtcbmltcG9ydCB7TWF0QnV0dG9uTW9kdWxlfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uXCI7XG5pbXBvcnQge01hdFByb2dyZXNzQmFyTW9kdWxlfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3MtYmFyXCI7XG5pbXBvcnQge1Byb2dyZXNzTm90aWZpZXJTZXJ2aWNlfSBmcm9tIFwiLi9zZXJ2aWNlcy9wcm9ncmVzcy1ub3RpZmllci5zZXJ2aWNlXCI7XG5cblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbUHJvZ3Jlc3NXaW5kb3dDb21wb25lbnRdLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIE1hdERpYWxvZ01vZHVsZSxcbiAgICBGbGV4TGF5b3V0TW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXRQcm9ncmVzc0Jhck1vZHVsZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFByb2dyZXNzTm90aWZpZXJNb2R1bGUge1xuICBzdGF0aWMgZm9yUm9vdCgpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPFByb2dyZXNzTm90aWZpZXJNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IFByb2dyZXNzTm90aWZpZXJNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgUHJvZ3Jlc3NOb3RpZmllclNlcnZpY2VcbiAgICAgIF1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Component, Inject } from '@angular/core';
|
|
2
|
+
import { MAT_DIALOG_DATA } from "@angular/material/dialog";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common";
|
|
5
|
+
import * as i2 from "@angular/material/dialog";
|
|
6
|
+
import * as i3 from "@angular/flex-layout/flex";
|
|
7
|
+
import * as i4 from "@angular/material/button";
|
|
8
|
+
import * as i5 from "@angular/material/progress-bar";
|
|
9
|
+
export class ProgressWindowComponent {
|
|
10
|
+
constructor(data) {
|
|
11
|
+
this.data = data;
|
|
12
|
+
this.statusText = null;
|
|
13
|
+
data.progress.subscribe(value => {
|
|
14
|
+
this.statusText = value.statusText;
|
|
15
|
+
this.progressValue = value.progressValue;
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
ngOnInit() {
|
|
19
|
+
}
|
|
20
|
+
onCancelClick() {
|
|
21
|
+
this.data.cancelOperation();
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
ProgressWindowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: ProgressWindowComponent, deps: [{ token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
|
|
25
|
+
ProgressWindowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.2", type: ProgressWindowComponent, selector: "lib-progress-window", ngImport: i0, template: "<h1 mat-dialog-title>{{data.title}}</h1>\n<div mat-dialog-content>\n <div fxLayout=\"column\">\n <mat-progress-bar *ngIf=\"data.isDeterminate\" [value]=\"progressValue\" mode=\"determinate\"></mat-progress-bar>\n <mat-progress-bar *ngIf=\"!data.isDeterminate\" mode=\"indeterminate\"></mat-progress-bar>\n <p>{{statusText}}</p>\n </div>\n</div>\n<div fxLayoutAlign=\"end\" mat-dialog-actions>\n <button (click)=\"onCancelClick()\" *ngIf=\"data.isCancelOperationAvailable\" mat-button>Cancel</button>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i3.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i3.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "component", type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }] });
|
|
26
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: ProgressWindowComponent, decorators: [{
|
|
27
|
+
type: Component,
|
|
28
|
+
args: [{ selector: 'lib-progress-window', template: "<h1 mat-dialog-title>{{data.title}}</h1>\n<div mat-dialog-content>\n <div fxLayout=\"column\">\n <mat-progress-bar *ngIf=\"data.isDeterminate\" [value]=\"progressValue\" mode=\"determinate\"></mat-progress-bar>\n <mat-progress-bar *ngIf=\"!data.isDeterminate\" mode=\"indeterminate\"></mat-progress-bar>\n <p>{{statusText}}</p>\n </div>\n</div>\n<div fxLayoutAlign=\"end\" mat-dialog-actions>\n <button (click)=\"onCancelClick()\" *ngIf=\"data.isCancelOperationAvailable\" mat-button>Cancel</button>\n</div>\n" }]
|
|
29
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
30
|
+
type: Inject,
|
|
31
|
+
args: [MAT_DIALOG_DATA]
|
|
32
|
+
}] }]; } });
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3Mtd2luZG93LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lc2htYWtlcnMvc2hhcmVkLXVpL3NyYy9saWIvcHJvZ3Jlc3Mtbm90aWZpZXIvcHJvZ3Jlc3Mtd2luZG93L3Byb2dyZXNzLXdpbmRvdy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXNobWFrZXJzL3NoYXJlZC11aS9zcmMvbGliL3Byb2dyZXNzLW5vdGlmaWVyL3Byb2dyZXNzLXdpbmRvdy9wcm9ncmVzcy13aW5kb3cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQVMsTUFBTSxlQUFlLENBQUM7QUFDeEQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7O0FBb0J6RCxNQUFNLE9BQU8sdUJBQXVCO0lBS2xDLFlBQTRDLElBQXdCO1FBQXhCLFNBQUksR0FBSixJQUFJLENBQW9CO1FBRWxFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBRXZCLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztZQUNuQyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUE7SUFFSixDQUFDO0lBRUQsUUFBUTtJQUNSLENBQUM7SUFFRCxhQUFhO1FBRVgsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUU5QixDQUFDOztvSEF2QlUsdUJBQXVCLGtCQUtkLGVBQWU7d0dBTHhCLHVCQUF1QiwyRENyQnBDLDJnQkFXQTsyRkRVYSx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0UscUJBQXFCOzswQkFTbEIsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEluamVjdCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TUFUX0RJQUxPR19EQVRBfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQge1Byb2dyZXNzVmFsdWV9IGZyb20gXCIuLi9zaGFyZWQvcHJvZ3Jlc3NWYWx1ZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFByb2dyZXNzV2luZG93RGF0YSB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGlzRGV0ZXJtaW5hdGU6IGJvb2xlYW47XG4gIHByb2dyZXNzOiBPYnNlcnZhYmxlPFByb2dyZXNzVmFsdWU+O1xuICBpc0NhbmNlbE9wZXJhdGlvbkF2YWlsYWJsZTogYm9vbGVhbjtcbiAgY2FuY2VsT3BlcmF0aW9uOiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2dyZXNzV2luZG93UmVzdWx0IHtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXByb2dyZXNzLXdpbmRvdycsXG4gIHRlbXBsYXRlVXJsOiAnLi9wcm9ncmVzcy13aW5kb3cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wcm9ncmVzcy13aW5kb3cuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIFByb2dyZXNzV2luZG93Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBwdWJsaWMgc3RhdHVzVGV4dDogc3RyaW5nO1xuICBwdWJsaWMgcHJvZ3Jlc3NWYWx1ZTogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogUHJvZ3Jlc3NXaW5kb3dEYXRhKSB7XG5cbiAgICB0aGlzLnN0YXR1c1RleHQgPSBudWxsO1xuXG4gICAgZGF0YS5wcm9ncmVzcy5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5zdGF0dXNUZXh0ID0gdmFsdWUuc3RhdHVzVGV4dDtcbiAgICAgIHRoaXMucHJvZ3Jlc3NWYWx1ZSA9IHZhbHVlLnByb2dyZXNzVmFsdWU7XG4gICAgfSlcblxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gIH1cblxuICBvbkNhbmNlbENsaWNrKCkge1xuXG4gICAgdGhpcy5kYXRhLmNhbmNlbE9wZXJhdGlvbigpO1xuXG4gIH1cbn1cbiIsIjxoMSBtYXQtZGlhbG9nLXRpdGxlPnt7ZGF0YS50aXRsZX19PC9oMT5cbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50PlxuICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCI+XG4gICAgPG1hdC1wcm9ncmVzcy1iYXIgKm5nSWY9XCJkYXRhLmlzRGV0ZXJtaW5hdGVcIiBbdmFsdWVdPVwicHJvZ3Jlc3NWYWx1ZVwiIG1vZGU9XCJkZXRlcm1pbmF0ZVwiPjwvbWF0LXByb2dyZXNzLWJhcj5cbiAgICA8bWF0LXByb2dyZXNzLWJhciAqbmdJZj1cIiFkYXRhLmlzRGV0ZXJtaW5hdGVcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiPjwvbWF0LXByb2dyZXNzLWJhcj5cbiAgICA8cD57e3N0YXR1c1RleHR9fTwvcD5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgZnhMYXlvdXRBbGlnbj1cImVuZFwiIG1hdC1kaWFsb2ctYWN0aW9ucz5cbiAgPGJ1dHRvbiAoY2xpY2spPVwib25DYW5jZWxDbGljaygpXCIgKm5nSWY9XCJkYXRhLmlzQ2FuY2VsT3BlcmF0aW9uQXZhaWxhYmxlXCIgbWF0LWJ1dHRvbj5DYW5jZWw8L2J1dHRvbj5cbjwvZGl2PlxuIl19
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject } from "rxjs";
|
|
3
|
+
import { ProgressWindowComponent } from "../progress-window/progress-window.component";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/material/dialog";
|
|
6
|
+
export class ProgressNotifierService {
|
|
7
|
+
constructor(dialog) {
|
|
8
|
+
this.dialog = dialog;
|
|
9
|
+
this._currentProgressValue = new BehaviorSubject(null);
|
|
10
|
+
this.isCanceled = false;
|
|
11
|
+
}
|
|
12
|
+
get isCanceled() {
|
|
13
|
+
return this._isCanceled;
|
|
14
|
+
}
|
|
15
|
+
set isCanceled(value) {
|
|
16
|
+
this._isCanceled = value;
|
|
17
|
+
}
|
|
18
|
+
start(title, isDeterminate, isCancelOperationAvailable) {
|
|
19
|
+
this.isCanceled = false;
|
|
20
|
+
this.reportProgressDeterminate(0, 100, "Working...");
|
|
21
|
+
this.currentDialogRef = this.dialog.open(ProgressWindowComponent, {
|
|
22
|
+
width: '50vw',
|
|
23
|
+
maxWidth: '50vw',
|
|
24
|
+
data: {
|
|
25
|
+
title: title,
|
|
26
|
+
isDeterminate: isDeterminate,
|
|
27
|
+
progress: this._currentProgressValue.asObservable(),
|
|
28
|
+
isCancelOperationAvailable: isCancelOperationAvailable,
|
|
29
|
+
cancelOperation: () => {
|
|
30
|
+
this.reportProgressIndeterminate("Canceling operation...");
|
|
31
|
+
this.isCanceled = true;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
reportProgressDeterminate(progressCurrent, progressMax, statusText) {
|
|
37
|
+
const progressPercentage = (progressMax / 100) * progressCurrent;
|
|
38
|
+
this._currentProgressValue.next({
|
|
39
|
+
statusText: statusText,
|
|
40
|
+
progressValue: progressPercentage
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
reportProgressIndeterminate(statusText) {
|
|
44
|
+
this._currentProgressValue.next({
|
|
45
|
+
statusText: statusText,
|
|
46
|
+
progressValue: 0
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
complete() {
|
|
50
|
+
this.currentDialogRef.close();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
ProgressNotifierService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: ProgressNotifierService, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
54
|
+
ProgressNotifierService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: ProgressNotifierService });
|
|
55
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: ProgressNotifierService, decorators: [{
|
|
56
|
+
type: Injectable
|
|
57
|
+
}], ctorParameters: function () { return [{ type: i1.MatDialog }]; } });
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3Mtbm90aWZpZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lc2htYWtlcnMvc2hhcmVkLXVpL3NyYy9saWIvcHJvZ3Jlc3Mtbm90aWZpZXIvc2VydmljZXMvcHJvZ3Jlc3Mtbm90aWZpZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFHckMsT0FBTyxFQUNMLHVCQUF1QixFQUd4QixNQUFNLDhDQUE4QyxDQUFDOzs7QUFHdEQsTUFBTSxPQUFPLHVCQUF1QjtJQUtsQyxZQUFvQixNQUFpQjtRQUFqQixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ25DLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLGVBQWUsQ0FBZ0IsSUFBSSxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUlELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxVQUFVLENBQUMsS0FBSztRQUNsQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQWEsRUFBRSxhQUFzQixFQUFFLDBCQUFtQztRQUU5RSxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUVyRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQW9FLHVCQUF1QixFQUFFO1lBQ25JLEtBQUssRUFBRSxNQUFNO1lBQ2IsUUFBUSxFQUFFLE1BQU07WUFDaEIsSUFBSSxFQUFzQjtnQkFDeEIsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osYUFBYSxFQUFFLGFBQWE7Z0JBQzVCLFFBQVEsRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxFQUFFO2dCQUNuRCwwQkFBMEIsRUFBRSwwQkFBMEI7Z0JBQ3RELGVBQWUsRUFBRSxHQUFHLEVBQUU7b0JBQ3BCLElBQUksQ0FBQywyQkFBMkIsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO29CQUMzRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztnQkFDekIsQ0FBQzthQUNGO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHlCQUF5QixDQUFDLGVBQXVCLEVBQUUsV0FBbUIsRUFBRSxVQUFrQjtRQUV4RixNQUFNLGtCQUFrQixHQUFHLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxHQUFHLGVBQWUsQ0FBQztRQUVqRSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFnQjtZQUM3QyxVQUFVLEVBQUUsVUFBVTtZQUN0QixhQUFhLEVBQUUsa0JBQWtCO1NBQ2xDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCwyQkFBMkIsQ0FBQyxVQUFrQjtRQUM1QyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFnQjtZQUM3QyxVQUFVLEVBQUUsVUFBVTtZQUN0QixhQUFhLEVBQUUsQ0FBQztTQUNqQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNoQyxDQUFDOztvSEE1RFUsdUJBQXVCO3dIQUF2Qix1QkFBdUI7MkZBQXZCLHVCQUF1QjtrQkFEbkMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7UHJvZ3Jlc3NWYWx1ZX0gZnJvbSBcIi4uL3NoYXJlZC9wcm9ncmVzc1ZhbHVlXCI7XG5pbXBvcnQge01hdERpYWxvZywgTWF0RGlhbG9nUmVmfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XG5pbXBvcnQge1xuICBQcm9ncmVzc1dpbmRvd0NvbXBvbmVudCxcbiAgUHJvZ3Jlc3NXaW5kb3dEYXRhLFxuICBQcm9ncmVzc1dpbmRvd1Jlc3VsdFxufSBmcm9tIFwiLi4vcHJvZ3Jlc3Mtd2luZG93L3Byb2dyZXNzLXdpbmRvdy5jb21wb25lbnRcIjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFByb2dyZXNzTm90aWZpZXJTZXJ2aWNlIHtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9jdXJyZW50UHJvZ3Jlc3NWYWx1ZTogQmVoYXZpb3JTdWJqZWN0PFByb2dyZXNzVmFsdWU+O1xuICBwcml2YXRlIGN1cnJlbnREaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxQcm9ncmVzc1dpbmRvd0NvbXBvbmVudCwgUHJvZ3Jlc3NXaW5kb3dSZXN1bHQ+O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2cpIHtcbiAgICB0aGlzLl9jdXJyZW50UHJvZ3Jlc3NWYWx1ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UHJvZ3Jlc3NWYWx1ZT4obnVsbCk7XG4gICAgdGhpcy5pc0NhbmNlbGVkID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIF9pc0NhbmNlbGVkOiBib29sZWFuO1xuXG4gIGdldCBpc0NhbmNlbGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0NhbmNlbGVkO1xuICB9XG5cbiAgc2V0IGlzQ2FuY2VsZWQodmFsdWUpIHtcbiAgICB0aGlzLl9pc0NhbmNlbGVkID0gdmFsdWU7XG4gIH1cblxuICBzdGFydCh0aXRsZTogc3RyaW5nLCBpc0RldGVybWluYXRlOiBib29sZWFuLCBpc0NhbmNlbE9wZXJhdGlvbkF2YWlsYWJsZTogYm9vbGVhbikge1xuXG4gICAgdGhpcy5pc0NhbmNlbGVkID0gZmFsc2U7XG4gICAgdGhpcy5yZXBvcnRQcm9ncmVzc0RldGVybWluYXRlKDAsIDEwMCwgXCJXb3JraW5nLi4uXCIpO1xuXG4gICAgdGhpcy5jdXJyZW50RGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbjxQcm9ncmVzc1dpbmRvd0NvbXBvbmVudCwgUHJvZ3Jlc3NXaW5kb3dEYXRhLCBQcm9ncmVzc1dpbmRvd1Jlc3VsdD4oUHJvZ3Jlc3NXaW5kb3dDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnNTB2dycsXG4gICAgICBtYXhXaWR0aDogJzUwdncnLFxuICAgICAgZGF0YTogPFByb2dyZXNzV2luZG93RGF0YT57XG4gICAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgICAgaXNEZXRlcm1pbmF0ZTogaXNEZXRlcm1pbmF0ZSxcbiAgICAgICAgcHJvZ3Jlc3M6IHRoaXMuX2N1cnJlbnRQcm9ncmVzc1ZhbHVlLmFzT2JzZXJ2YWJsZSgpLFxuICAgICAgICBpc0NhbmNlbE9wZXJhdGlvbkF2YWlsYWJsZTogaXNDYW5jZWxPcGVyYXRpb25BdmFpbGFibGUsXG4gICAgICAgIGNhbmNlbE9wZXJhdGlvbjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMucmVwb3J0UHJvZ3Jlc3NJbmRldGVybWluYXRlKFwiQ2FuY2VsaW5nIG9wZXJhdGlvbi4uLlwiKTtcbiAgICAgICAgICB0aGlzLmlzQ2FuY2VsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXBvcnRQcm9ncmVzc0RldGVybWluYXRlKHByb2dyZXNzQ3VycmVudDogbnVtYmVyLCBwcm9ncmVzc01heDogbnVtYmVyLCBzdGF0dXNUZXh0OiBzdHJpbmcpIHtcblxuICAgIGNvbnN0IHByb2dyZXNzUGVyY2VudGFnZSA9IChwcm9ncmVzc01heCAvIDEwMCkgKiBwcm9ncmVzc0N1cnJlbnQ7XG5cbiAgICB0aGlzLl9jdXJyZW50UHJvZ3Jlc3NWYWx1ZS5uZXh0KDxQcm9ncmVzc1ZhbHVlPntcbiAgICAgIHN0YXR1c1RleHQ6IHN0YXR1c1RleHQsXG4gICAgICBwcm9ncmVzc1ZhbHVlOiBwcm9ncmVzc1BlcmNlbnRhZ2VcbiAgICB9KTtcbiAgfVxuXG4gIHJlcG9ydFByb2dyZXNzSW5kZXRlcm1pbmF0ZShzdGF0dXNUZXh0OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jdXJyZW50UHJvZ3Jlc3NWYWx1ZS5uZXh0KDxQcm9ncmVzc1ZhbHVlPntcbiAgICAgIHN0YXR1c1RleHQ6IHN0YXR1c1RleHQsXG4gICAgICBwcm9ncmVzc1ZhbHVlOiAwXG4gICAgfSk7XG4gIH1cblxuICBjb21wbGV0ZSgpIHtcbiAgICB0aGlzLmN1cnJlbnREaWFsb2dSZWYuY2xvc2UoKTtcbiAgfVxufVxuIl19
|