@rededor/site-front-end-lib 1.3.72 → 1.3.74
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/index.mjs +2 -1
- package/esm2022/lib/components/input-file/input-file.component.mjs +301 -0
- package/fesm2022/rededor-site-front-end-lib.mjs +297 -1
- package/fesm2022/rededor-site-front-end-lib.mjs.map +1 -1
- package/lib/components/index.d.ts +1 -0
- package/lib/components/input-file/input-file.component.d.ts +88 -0
- package/package.json +2 -2
|
@@ -43,4 +43,5 @@ export * from './carousels/testimonials-carousel/testimonials-carousel.component
|
|
|
43
43
|
export * from './sidebar-navigation/sidebar-navigation.component';
|
|
44
44
|
export * from './sticky-navigation/sticky-navigation.component';
|
|
45
45
|
export * from './page-template-fullcontent/page-template-fullcontent.component';
|
|
46
|
-
|
|
46
|
+
export * from './input-file/input-file.component';
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaXRlLWZyb250LWVuZC1saWIvc3JjL2xpYi9jb21wb25lbnRzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGFBQWE7QUFDYixjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxxRUFBcUUsQ0FBQztBQUNwRixjQUFjLCtEQUErRCxDQUFDO0FBQzlFLGNBQWMsbUZBQW1GLENBQUM7QUFDbEcsY0FBYyx5RUFBeUUsQ0FBQztBQUN4RixjQUFjLDJGQUEyRixDQUFDO0FBQzFHLGNBQWMsdURBQXVELENBQUM7QUFDdEUsY0FBYyxpRUFBaUUsQ0FBQztBQUNoRixjQUFjLDJFQUEyRSxDQUFDO0FBQzFGLGNBQWMsNkZBQTZGLENBQUM7QUFDNUcsY0FBYyxpRUFBaUUsQ0FBQztBQUNoRixjQUFjLDJFQUEyRSxDQUFDO0FBQzFGLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxvRUFBb0UsQ0FBQztBQUNuRixjQUFjLGdGQUFnRixDQUFDO0FBQy9GLGNBQWMsZ0ZBQWdGLENBQUM7QUFDL0YsY0FBYywwRUFBMEUsQ0FBQztBQUN6RixjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsK0NBQStDLENBQUM7QUFDOUQsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyx5REFBeUQsQ0FBQztBQUN4RSxjQUFjLG1EQUFtRCxDQUFDO0FBQ2xFLGNBQWMscUVBQXFFLENBQUM7QUFDcEYsY0FBYyw2REFBNkQsQ0FBQztBQUM1RSxjQUFjLG1EQUFtRCxDQUFDO0FBQ2xFLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYywrRUFBK0UsQ0FBQztBQUM5RixjQUFjLG1EQUFtRCxDQUFDO0FBQ2xFLGNBQWMsa0RBQWtELENBQUM7QUFDakUsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLHFEQUFxRCxDQUFDO0FBQ3BFLGNBQWMsbUVBQW1FLENBQUM7QUFDbEYsY0FBYyxtREFBbUQsQ0FBQztBQUNsRSxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMsaUVBQWlFLENBQUM7QUFDaEYsY0FBYyxtQ0FBbUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvbXBvbmVudHNcbmV4cG9ydCAqIGZyb20gJy4vZm9vdGVyL2Zvb3Rlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9oZWFkZXIvaGVhZGVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2hlYWRlci9jb21wb25lbnRzL2hlYWRlci1hY3Rpb24tbWVudS9oZWFkZXItYWN0aW9uLW1lbnUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vaGVhZGVyL2NvbXBvbmVudHMvaGVhZGVyLWF1eC1tZW51L2hlYWRlci1hdXgtbWVudS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9oZWFkZXIvY29tcG9uZW50cy9oZWFkZXItYXV4LW1lbnUtY29udGFpbmVyL2hlYWRlci1hdXgtbWVudS1jb250YWluZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vaGVhZGVyL2NvbXBvbmVudHMvaGVhZGVyLWF1eC1tZW51LWl0ZW0vaGVhZGVyLWF1eC1tZW51LWl0ZW0uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vaGVhZGVyL2NvbXBvbmVudHMvaGVhZGVyLWF1eC1tZW51LWl0ZW0tZHJvcGRvd24vaGVhZGVyLWF1eC1tZW51LWl0ZW0tZHJvcGRvd24uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vaGVhZGVyL2NvbXBvbmVudHMvaGVhZGVyLWxvZ28vaGVhZGVyLWxvZ28uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vaGVhZGVyL2NvbXBvbmVudHMvaGVhZGVyLW1haW4tbWVudS9oZWFkZXItbWFpbi1tZW51LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2hlYWRlci9jb21wb25lbnRzL2hlYWRlci1tYWluLW1lbnUtaXRlbS9oZWFkZXItbWFpbi1tZW51LWl0ZW0uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vaGVhZGVyL2NvbXBvbmVudHMvaGVhZGVyLW1haW4tbWVudS1pdGVtLWRyb3Bkb3duL2hlYWRlci1tYWluLW1lbnUtaXRlbS1kcm9wZG93bi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9oZWFkZXIvY29tcG9uZW50cy9oZWFkZXItc2lkZS1tZW51L2hlYWRlci1zaWRlLW1lbnUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vaGVhZGVyL2NvbXBvbmVudHMvaGVhZGVyLXNpZGUtbWVudS1pdGVtL2hlYWRlci1zaWRlLW1lbnUtaXRlbS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9sb2FkLXNjcmVlbi9sb2FkLXNjcmVlbi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9vdmVybGF5L292ZXJsYXkuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc2VhcmNoL3NlYXJjaC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zaWRlLWN0YXMvc2lkZS1jdGFzLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NpZGUtY3Rhcy9jb21wb25lbnRzL3NpZGUtY3Rhcy1ib3R0b20vc2lkZS1jdGFzLWJvdHRvbS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zaWRlLWN0YXMvY29tcG9uZW50cy9zaWRlLWN0YXMtcmlnaHQtYm90dG9tL3NpZGUtY3Rhcy1yaWdodC1ib3R0b20uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc2lkZS1jdGFzL2NvbXBvbmVudHMvc2lkZS1jdGFzLXJpZ2h0LW1pZGRsZS9zaWRlLWN0YXMtcmlnaHQtbWlkZGxlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NpZGUtY3Rhcy9jb21wb25lbnRzL3NpZGUtY3Rhcy1yaWdodC10b3Avc2lkZS1jdGFzLXJpZ2h0LXRvcC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi93aGF0c2FwcC93aGF0c2FwcC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9hbGdvbGlhLWRyb3Bkb3duL2FsZ29saWEtZHJvcGRvd24uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZXJyb3IvZXJyb3IuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZXJyb3IvZXJyb3Itc2VydmljZS9lcnJvci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vY3RhLXdyYXBwZXIvY3RhLXdyYXBwZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vcGFnZS1oZWFkZXIvcGFnZS1oZWFkZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vcG9zdC1oZWFkZXIvcG9zdC1oZWFkZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vYnJlYWRjcnVtYnMvYnJlYWRjcnVtYnMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vcGFnZS10ZW1wbGF0ZS1zaWRlYmFyL3BhZ2UtdGVtcGxhdGUtc2lkZWJhci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9maWx0ZXJzL2ZpbHRlci1nZW5lcmljL2ZpbHRlci1nZW5lcmljLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2ZpbHRlcnMvZmlsdGVyLXBsYW5vcy1jb252ZW5pb3MvZmlsdGVyLXBsYW5vcy1jb252ZW5pb3MuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZmlsdGVyLWxldHRlci1hbmQtdGVybXMvZmlsdGVyLWxldHRlci1hbmQtdGVybXMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc2VjdGlvbi1uYXZpZ2F0aW9uL3NlY3Rpb24tbmF2aWdhdGlvbi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9pbWFnZS9pbWFnZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9jYXJkcy9jYXJkLXVuaWRhZGUtcGxhbm9zLWNvbnZlbmlvcy9jYXJkLXVuaWRhZGUtcGxhbm9zLWNvbnZlbmlvcy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9jYXJkcy9leHBhbmRhYmxlLWNhcmQvZXhwYW5kYWJsZS1jYXJkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2Jhbm5lci9jb250ZW50LWJhbm5lci9jb250ZW50LWJhbm5lci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9wYWdpbmF0aW9uL3BhZ2luYXRpb24uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vY2FyZHMvdGVzdGltb25pYWwtY2FyZC90ZXN0aW1vbmlhbC1jYXJkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2Nhcm91c2Vscy90ZXN0aW1vbmlhbHMtY2Fyb3VzZWwvdGVzdGltb25pYWxzLWNhcm91c2VsLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NpZGViYXItbmF2aWdhdGlvbi9zaWRlYmFyLW5hdmlnYXRpb24uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc3RpY2t5LW5hdmlnYXRpb24vc3RpY2t5LW5hdmlnYXRpb24uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vcGFnZS10ZW1wbGF0ZS1mdWxsY29udGVudC9wYWdlLXRlbXBsYXRlLWZ1bGxjb250ZW50LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2lucHV0LWZpbGUvaW5wdXQtZmlsZS5jb21wb25lbnQnO1xuIl19
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
import { Component, CUSTOM_ELEMENTS_SCHEMA, EventEmitter, HostBinding, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../../services";
|
|
5
|
+
import * as i2 from "@angular/common";
|
|
6
|
+
export class InputFileComponent {
|
|
7
|
+
get style() {
|
|
8
|
+
const weights = this.curaService.getFontWeights();
|
|
9
|
+
return {
|
|
10
|
+
'--primary-base': this.curaService.getColor('primary-base'),
|
|
11
|
+
'--neutral-purewhite': this.curaService.getColor('neutral-purewhite'),
|
|
12
|
+
'--neutral-white': this.curaService.getColor('neutral-white'),
|
|
13
|
+
'--neutral-black': this.curaService.getColor('neutral-black'),
|
|
14
|
+
'--neutral-medium': this.curaService.getColor('neutral-medium'),
|
|
15
|
+
'--neutral-base': this.curaService.getColor('neutral-base'),
|
|
16
|
+
'--neutral-dark': this.curaService.getColor('neutral-dark'),
|
|
17
|
+
'--success-dark': this.curaService.getColor('success-dark'),
|
|
18
|
+
'--success-darker': this.curaService.getColor('success-darker'),
|
|
19
|
+
'--success-lighter': this.curaService.getColor('success-lighter'),
|
|
20
|
+
'--error-lighter': this.curaService.getColor('error-lighter'),
|
|
21
|
+
'--error-dark': this.curaService.getColor('error-dark'),
|
|
22
|
+
'--error-darker': this.curaService.getColor('error-darker'),
|
|
23
|
+
'--error-base': this.curaService.getColor('error-base'),
|
|
24
|
+
'--info-base': this.curaService.getColor('info-base'),
|
|
25
|
+
'--font-size': this.curaService.getFontSize(),
|
|
26
|
+
'--font-color': this.curaService.getFontColor(),
|
|
27
|
+
'--font-family': this.curaService.getFontFamily(''),
|
|
28
|
+
'--font-weight-medium': weights['medium'],
|
|
29
|
+
'--font-weight-bold': weights['bold'],
|
|
30
|
+
'--font-weight-regular': weights['regular'],
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
constructor(curaService) {
|
|
34
|
+
this.curaService = curaService;
|
|
35
|
+
this.status = 'default';
|
|
36
|
+
this.size = 'medium';
|
|
37
|
+
this.label = '';
|
|
38
|
+
this.name = '';
|
|
39
|
+
this.placeholder = 'Nenhum arquivo selecionado';
|
|
40
|
+
this.accept = '';
|
|
41
|
+
this.multiple = false;
|
|
42
|
+
this.disabled = false;
|
|
43
|
+
this.required = false;
|
|
44
|
+
this.iconName = '';
|
|
45
|
+
this.hideErrorIcon = false;
|
|
46
|
+
this.isLoading = false;
|
|
47
|
+
this.helperText = '';
|
|
48
|
+
this.fileChange = new EventEmitter();
|
|
49
|
+
this.fileClear = new EventEmitter();
|
|
50
|
+
this.fileRejected = new EventEmitter();
|
|
51
|
+
this.fileSizeExceeded = new EventEmitter();
|
|
52
|
+
this.filePickerCancel = new EventEmitter();
|
|
53
|
+
this.fileName = '';
|
|
54
|
+
this.acceptError = false;
|
|
55
|
+
this.sizeError = false;
|
|
56
|
+
this.isHovered = false;
|
|
57
|
+
this.isFocused = false;
|
|
58
|
+
}
|
|
59
|
+
ngAfterViewInit() {
|
|
60
|
+
this.cancelListener = () => this.handlePickerCancel();
|
|
61
|
+
this.inputRef?.nativeElement?.addEventListener('cancel', this.cancelListener);
|
|
62
|
+
}
|
|
63
|
+
ngOnDestroy() {
|
|
64
|
+
if (this.cancelListener) {
|
|
65
|
+
this.inputRef?.nativeElement?.removeEventListener('cancel', this.cancelListener);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
get effectiveStatus() {
|
|
69
|
+
return this.acceptError || this.sizeError ? 'error' : this.status;
|
|
70
|
+
}
|
|
71
|
+
get showIcon() {
|
|
72
|
+
const hasInternalError = this.acceptError || this.sizeError;
|
|
73
|
+
if (this.iconName === '' && this.status === 'default' && !hasInternalError)
|
|
74
|
+
return false;
|
|
75
|
+
if (this.status === 'error' && this.hideErrorIcon && !hasInternalError)
|
|
76
|
+
return false;
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
get iconConfig() {
|
|
80
|
+
const hasInternalError = this.acceptError || this.sizeError;
|
|
81
|
+
const effectiveStatus = hasInternalError ? 'error' : this.status;
|
|
82
|
+
const iconMap = {
|
|
83
|
+
loading: { name: this.iconName || '', color: 'primary-base' },
|
|
84
|
+
success: { name: 'checkCircle', color: 'success-dark' },
|
|
85
|
+
error: { name: 'alertCircle', color: 'error-dark' },
|
|
86
|
+
default: { name: this.iconName || '', color: 'neutral-dark' },
|
|
87
|
+
disabled: { name: this.iconName || '', color: 'neutral-medium' },
|
|
88
|
+
};
|
|
89
|
+
const key = this.isLoading ? 'loading' : this.disabled ? 'disabled' : effectiveStatus || 'default';
|
|
90
|
+
return iconMap[key];
|
|
91
|
+
}
|
|
92
|
+
get iconSize() {
|
|
93
|
+
return this.size === 'large' ? 20 : 16;
|
|
94
|
+
}
|
|
95
|
+
get helperTextSize() {
|
|
96
|
+
return this.size === 'large' ? 'small' : 'xsmall';
|
|
97
|
+
}
|
|
98
|
+
get helperTextColor() {
|
|
99
|
+
const hasInternalError = this.acceptError || this.sizeError;
|
|
100
|
+
const isError = this.status === 'error' || hasInternalError;
|
|
101
|
+
const isSuccess = this.status === 'success' && !hasInternalError;
|
|
102
|
+
if (isError)
|
|
103
|
+
return 'error-dark';
|
|
104
|
+
if (isSuccess)
|
|
105
|
+
return 'success-dark';
|
|
106
|
+
if (this.isLoading)
|
|
107
|
+
return 'primary-base';
|
|
108
|
+
return this.disabled ? 'neutral-medium' : this.isFocused || this.isHovered ? 'neutral-black' : 'neutral-dark';
|
|
109
|
+
}
|
|
110
|
+
getClasses() {
|
|
111
|
+
return {
|
|
112
|
+
[this.size.toLowerCase()]: true,
|
|
113
|
+
disabled: !!this.disabled,
|
|
114
|
+
isLoading: !!this.isLoading,
|
|
115
|
+
isFocused: this.isFocused && !this.disabled && !this.isLoading,
|
|
116
|
+
isHovered: this.isHovered,
|
|
117
|
+
[this.effectiveStatus]: true,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
getLabelColor() {
|
|
121
|
+
if (this.disabled)
|
|
122
|
+
return 'neutral-medium';
|
|
123
|
+
if (this.isFocused || this.isHovered)
|
|
124
|
+
return 'neutral-black';
|
|
125
|
+
return 'neutral-dark';
|
|
126
|
+
}
|
|
127
|
+
handleMouseEnter() {
|
|
128
|
+
this.isHovered = true;
|
|
129
|
+
}
|
|
130
|
+
handleMouseLeave() {
|
|
131
|
+
this.isHovered = false;
|
|
132
|
+
}
|
|
133
|
+
handleInputFocus() {
|
|
134
|
+
this.isFocused = true;
|
|
135
|
+
}
|
|
136
|
+
handleInputBlur() {
|
|
137
|
+
setTimeout(() => {
|
|
138
|
+
this.isFocused = false;
|
|
139
|
+
}, 150);
|
|
140
|
+
}
|
|
141
|
+
handleButtonClick() {
|
|
142
|
+
this.inputRef?.nativeElement?.click();
|
|
143
|
+
}
|
|
144
|
+
handlePickerCancel() {
|
|
145
|
+
this.fileName = '';
|
|
146
|
+
this.acceptError = false;
|
|
147
|
+
this.sizeError = false;
|
|
148
|
+
this.status = 'default';
|
|
149
|
+
if (this.inputRef?.nativeElement) {
|
|
150
|
+
this.inputRef.nativeElement.value = '';
|
|
151
|
+
}
|
|
152
|
+
this.fileChange.emit(null);
|
|
153
|
+
this.filePickerCancel.emit();
|
|
154
|
+
}
|
|
155
|
+
handleFileChange(event) {
|
|
156
|
+
const input = event.target;
|
|
157
|
+
const files = input.files;
|
|
158
|
+
if (!files?.length) {
|
|
159
|
+
this.resetState();
|
|
160
|
+
this.fileChange.emit(null);
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
this.isLoading = true;
|
|
164
|
+
this.fileName = this.getFileName(files);
|
|
165
|
+
const validationError = this.validateFiles(files);
|
|
166
|
+
if (validationError) {
|
|
167
|
+
this.handleValidationError(validationError);
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
this.handleSuccess(files);
|
|
171
|
+
}
|
|
172
|
+
clearFiles() {
|
|
173
|
+
if (this.disabled)
|
|
174
|
+
return;
|
|
175
|
+
if (this.inputRef?.nativeElement)
|
|
176
|
+
this.inputRef.nativeElement.value = '';
|
|
177
|
+
this.fileName = '';
|
|
178
|
+
this.acceptError = false;
|
|
179
|
+
this.sizeError = false;
|
|
180
|
+
this.fileClear.emit();
|
|
181
|
+
this.fileChange.emit(null);
|
|
182
|
+
}
|
|
183
|
+
resetState() {
|
|
184
|
+
this.fileName = '';
|
|
185
|
+
this.acceptError = false;
|
|
186
|
+
this.sizeError = false;
|
|
187
|
+
this.status = 'default';
|
|
188
|
+
if (this.inputRef?.nativeElement)
|
|
189
|
+
this.inputRef.nativeElement.value = '';
|
|
190
|
+
}
|
|
191
|
+
getFileName(files) {
|
|
192
|
+
if (!files || files.length === 0)
|
|
193
|
+
return '';
|
|
194
|
+
if (files.length === 1)
|
|
195
|
+
return files[0].name;
|
|
196
|
+
return Array.from(files)
|
|
197
|
+
.map((file) => file.name)
|
|
198
|
+
.join(', ');
|
|
199
|
+
}
|
|
200
|
+
isFileAccepted(file) {
|
|
201
|
+
if (!this.accept?.trim())
|
|
202
|
+
return true;
|
|
203
|
+
const acceptedTypes = this.accept.split(',').map((t) => t.trim().toLowerCase());
|
|
204
|
+
const fileName = file.name.toLowerCase();
|
|
205
|
+
const fileType = file.type.toLowerCase();
|
|
206
|
+
return acceptedTypes.some((accepted) => {
|
|
207
|
+
if (accepted.startsWith('.'))
|
|
208
|
+
return fileName.endsWith(accepted);
|
|
209
|
+
if (accepted.endsWith('/*'))
|
|
210
|
+
return fileType.startsWith(accepted.slice(0, -1));
|
|
211
|
+
return fileType === accepted;
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
isFileSizeValid(file) {
|
|
215
|
+
if (!this.maxFileSize)
|
|
216
|
+
return true;
|
|
217
|
+
return file.size <= this.maxFileSize;
|
|
218
|
+
}
|
|
219
|
+
validateFiles(files) {
|
|
220
|
+
const fileArray = Array.from(files);
|
|
221
|
+
if (!fileArray.every((file) => this.isFileSizeValid(file)))
|
|
222
|
+
return 'size';
|
|
223
|
+
if (!fileArray.every((file) => this.isFileAccepted(file)))
|
|
224
|
+
return 'accept';
|
|
225
|
+
return null;
|
|
226
|
+
}
|
|
227
|
+
handleValidationError(type) {
|
|
228
|
+
if (this.inputRef?.nativeElement)
|
|
229
|
+
this.inputRef.nativeElement.value = '';
|
|
230
|
+
this.isLoading = false;
|
|
231
|
+
this.sizeError = type === 'size';
|
|
232
|
+
this.acceptError = type === 'accept';
|
|
233
|
+
if (type === 'size') {
|
|
234
|
+
this.fileSizeExceeded.emit();
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
this.fileRejected.emit();
|
|
238
|
+
}
|
|
239
|
+
this.fileChange.emit(null);
|
|
240
|
+
}
|
|
241
|
+
handleSuccess(files) {
|
|
242
|
+
this.acceptError = false;
|
|
243
|
+
this.sizeError = false;
|
|
244
|
+
this.fileChange.emit(files);
|
|
245
|
+
setTimeout(() => {
|
|
246
|
+
this.isLoading = false;
|
|
247
|
+
this.status = 'success';
|
|
248
|
+
}, 500);
|
|
249
|
+
}
|
|
250
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: InputFileComponent, deps: [{ token: i1.CuraService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
251
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: InputFileComponent, isStandalone: true, selector: "rdsite-input-file", inputs: { status: "status", size: "size", label: "label", name: "name", placeholder: "placeholder", accept: "accept", multiple: "multiple", disabled: "disabled", required: "required", iconName: "iconName", hideErrorIcon: "hideErrorIcon", isLoading: "isLoading", maxFileSize: "maxFileSize", helperText: "helperText" }, outputs: { fileChange: "fileChange", fileClear: "fileClear", fileRejected: "fileRejected", fileSizeExceeded: "fileSizeExceeded", filePickerCancel: "filePickerCancel" }, host: { properties: { "style": "this.style" } }, viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["inputRef"], descendants: true }], ngImport: i0, template: "<div\n role=\"group\"\n class=\"cura-input-group\"\n [ngClass]=\"getClasses()\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-required]=\"required\"\n [attr.aria-invalid]=\"effectiveStatus === 'error'\"\n (mouseenter)=\"handleMouseEnter()\"\n (mouseleave)=\"handleMouseLeave()\"\n>\n <div class=\"input-wrapper\">\n @if (label) {\n <cura-label class=\"label\" weight=\"bold\" [attr.size]=\"size === 'large' ? 'small' : 'xsmall'\" [attr.color]=\"getLabelColor()\">\n {{ label }}\n @if (required) {\n <span class=\"required\">*</span>\n }\n </cura-label>\n }\n\n <div class=\"cura-input-field\">\n @if (showIcon) {\n <div class=\"feedback-icon\">\n <cura-icon [attr.name]=\"iconConfig.name\" iconset=\"default\" [attr.size]=\"iconSize\" [attr.color]=\"iconConfig.color\"></cura-icon>\n </div>\n }\n\n <button type=\"button\" class=\"file-trigger\" [disabled]=\"disabled || isLoading\" (click)=\"handleButtonClick()\">\n {{ fileName ? fileName : placeholder }}\n </button>\n\n @if (isLoading && !disabled) {\n <cura-loader-circle color=\"primary\" size=\"medium\"></cura-loader-circle>\n }\n\n <input\n #inputRef\n type=\"file\"\n class=\"file-input-hidden\"\n [name]=\"name\"\n [attr.accept]=\"accept || null\"\n [multiple]=\"multiple\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n (change)=\"handleFileChange($event)\"\n (focus)=\"handleInputFocus()\"\n (blur)=\"handleInputBlur()\"\n />\n </div>\n\n @if (helperText) {\n <div class=\"helper-text\">\n <cura-label [attr.size]=\"helperTextSize\" lineheight=\"xsmall\" [attr.color]=\"helperTextColor\">\n {{ helperText }}\n </cura-label>\n </div>\n }\n </div>\n</div>\n", styles: [":host{display:block;box-sizing:border-box;width:100%}.file-input-hidden{position:absolute;width:0;height:0;opacity:0;pointer-events:none}.required{color:var(--error-base)}.cura-input-group{width:100%;text-align:left!important}.cura-input-group cura-label{margin-bottom:8px}.cura-input-group .helper-text{margin-top:8px;color:var(--neutral-dark)}.cura-input-group .cura-input-field{width:100%;height:40px;display:flex;flex-direction:row;align-items:center;justify-content:space-around;background-color:var(--neutral-purewhite);border:2px solid var(--neutral-medium);border-radius:4px;color:var(--primary-base);letter-spacing:.32px;line-height:20px;overflow:hidden;box-sizing:border-box;position:relative}.cura-input-group .cura-input-field .feedback-icon{padding-left:8px;display:flex;align-items:center}.cura-input-group .cura-input-field .file-trigger{background:transparent;border:none;color:var(--neutral-dark);cursor:pointer;font-weight:var(--font-weight-medium);font-size:14px;font-family:var(--font-family);padding:0 8px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;width:100%;text-align:left}.cura-input-group .cura-input-field .file-trigger:disabled{cursor:not-allowed}.cura-input-group .cura-input-field cura-loader-circle{display:block;margin-right:8px}.cura-input-group:hover:not(.disabled):not(.isLoading):not(.success):not(.error):not(.isFocused) .cura-input-field{border-color:var(--neutral-dark)}.cura-input-group:focus-within .cura-input-field{border:2px solid var(--info-base)!important;background-color:var(--neutral-purewhite);outline:none}.cura-input-group.success .cura-input-field{border:2px solid var(--success-dark)!important;background-color:var(--success-lighter)!important}.cura-input-group.success .cura-input-field .file-trigger{color:var(--success-darker)!important}.cura-input-group.error .cura-input-field{border:2px solid var(--error-dark)!important;background-color:var(--error-lighter)!important}.cura-input-group.error .cura-input-field .file-trigger{color:var(--error-darker)!important}.cura-input-group.isLoading{cursor:wait}.cura-input-group.isLoading .cura-input-field{background-color:var(--neutral-white)!important;border:2px solid var(--primary-base)!important}.cura-input-group.isLoading .cura-input-field .file-trigger{cursor:wait;color:var(--primary-base)!important}.cura-input-group.disabled .cura-input-field{background-color:var(--neutral-white);border:2px solid var(--neutral-base)}.cura-input-group.disabled .cura-input-field .file-trigger{color:var(--neutral-medium);cursor:not-allowed}.cura-input-group.small .cura-input-field{height:32px}.cura-input-group.small .cura-input-field .file-trigger{font-size:12px;line-height:13px;letter-spacing:.72px}.cura-input-group.small .helper-text{font-weight:var(--font-weight-regular)}.cura-input-group.medium .cura-input-field{height:40px}.cura-input-group.medium .cura-input-field .file-trigger{font-size:14px;line-height:16px;letter-spacing:.56px}.cura-input-group.medium .helper-text{font-weight:var(--font-weight-regular)}.cura-input-group.large .cura-input-field{height:44px}.cura-input-group.large .cura-input-field .file-trigger{font-size:16px}.cura-input-group.large .helper-text{font-weight:var(--font-weight-bold)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
|
|
252
|
+
}
|
|
253
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: InputFileComponent, decorators: [{
|
|
254
|
+
type: Component,
|
|
255
|
+
args: [{ selector: 'rdsite-input-file', standalone: true, imports: [CommonModule], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<div\n role=\"group\"\n class=\"cura-input-group\"\n [ngClass]=\"getClasses()\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-required]=\"required\"\n [attr.aria-invalid]=\"effectiveStatus === 'error'\"\n (mouseenter)=\"handleMouseEnter()\"\n (mouseleave)=\"handleMouseLeave()\"\n>\n <div class=\"input-wrapper\">\n @if (label) {\n <cura-label class=\"label\" weight=\"bold\" [attr.size]=\"size === 'large' ? 'small' : 'xsmall'\" [attr.color]=\"getLabelColor()\">\n {{ label }}\n @if (required) {\n <span class=\"required\">*</span>\n }\n </cura-label>\n }\n\n <div class=\"cura-input-field\">\n @if (showIcon) {\n <div class=\"feedback-icon\">\n <cura-icon [attr.name]=\"iconConfig.name\" iconset=\"default\" [attr.size]=\"iconSize\" [attr.color]=\"iconConfig.color\"></cura-icon>\n </div>\n }\n\n <button type=\"button\" class=\"file-trigger\" [disabled]=\"disabled || isLoading\" (click)=\"handleButtonClick()\">\n {{ fileName ? fileName : placeholder }}\n </button>\n\n @if (isLoading && !disabled) {\n <cura-loader-circle color=\"primary\" size=\"medium\"></cura-loader-circle>\n }\n\n <input\n #inputRef\n type=\"file\"\n class=\"file-input-hidden\"\n [name]=\"name\"\n [attr.accept]=\"accept || null\"\n [multiple]=\"multiple\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n (change)=\"handleFileChange($event)\"\n (focus)=\"handleInputFocus()\"\n (blur)=\"handleInputBlur()\"\n />\n </div>\n\n @if (helperText) {\n <div class=\"helper-text\">\n <cura-label [attr.size]=\"helperTextSize\" lineheight=\"xsmall\" [attr.color]=\"helperTextColor\">\n {{ helperText }}\n </cura-label>\n </div>\n }\n </div>\n</div>\n", styles: [":host{display:block;box-sizing:border-box;width:100%}.file-input-hidden{position:absolute;width:0;height:0;opacity:0;pointer-events:none}.required{color:var(--error-base)}.cura-input-group{width:100%;text-align:left!important}.cura-input-group cura-label{margin-bottom:8px}.cura-input-group .helper-text{margin-top:8px;color:var(--neutral-dark)}.cura-input-group .cura-input-field{width:100%;height:40px;display:flex;flex-direction:row;align-items:center;justify-content:space-around;background-color:var(--neutral-purewhite);border:2px solid var(--neutral-medium);border-radius:4px;color:var(--primary-base);letter-spacing:.32px;line-height:20px;overflow:hidden;box-sizing:border-box;position:relative}.cura-input-group .cura-input-field .feedback-icon{padding-left:8px;display:flex;align-items:center}.cura-input-group .cura-input-field .file-trigger{background:transparent;border:none;color:var(--neutral-dark);cursor:pointer;font-weight:var(--font-weight-medium);font-size:14px;font-family:var(--font-family);padding:0 8px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;width:100%;text-align:left}.cura-input-group .cura-input-field .file-trigger:disabled{cursor:not-allowed}.cura-input-group .cura-input-field cura-loader-circle{display:block;margin-right:8px}.cura-input-group:hover:not(.disabled):not(.isLoading):not(.success):not(.error):not(.isFocused) .cura-input-field{border-color:var(--neutral-dark)}.cura-input-group:focus-within .cura-input-field{border:2px solid var(--info-base)!important;background-color:var(--neutral-purewhite);outline:none}.cura-input-group.success .cura-input-field{border:2px solid var(--success-dark)!important;background-color:var(--success-lighter)!important}.cura-input-group.success .cura-input-field .file-trigger{color:var(--success-darker)!important}.cura-input-group.error .cura-input-field{border:2px solid var(--error-dark)!important;background-color:var(--error-lighter)!important}.cura-input-group.error .cura-input-field .file-trigger{color:var(--error-darker)!important}.cura-input-group.isLoading{cursor:wait}.cura-input-group.isLoading .cura-input-field{background-color:var(--neutral-white)!important;border:2px solid var(--primary-base)!important}.cura-input-group.isLoading .cura-input-field .file-trigger{cursor:wait;color:var(--primary-base)!important}.cura-input-group.disabled .cura-input-field{background-color:var(--neutral-white);border:2px solid var(--neutral-base)}.cura-input-group.disabled .cura-input-field .file-trigger{color:var(--neutral-medium);cursor:not-allowed}.cura-input-group.small .cura-input-field{height:32px}.cura-input-group.small .cura-input-field .file-trigger{font-size:12px;line-height:13px;letter-spacing:.72px}.cura-input-group.small .helper-text{font-weight:var(--font-weight-regular)}.cura-input-group.medium .cura-input-field{height:40px}.cura-input-group.medium .cura-input-field .file-trigger{font-size:14px;line-height:16px;letter-spacing:.56px}.cura-input-group.medium .helper-text{font-weight:var(--font-weight-regular)}.cura-input-group.large .cura-input-field{height:44px}.cura-input-group.large .cura-input-field .file-trigger{font-size:16px}.cura-input-group.large .helper-text{font-weight:var(--font-weight-bold)}\n"] }]
|
|
256
|
+
}], ctorParameters: () => [{ type: i1.CuraService }], propDecorators: { status: [{
|
|
257
|
+
type: Input
|
|
258
|
+
}], size: [{
|
|
259
|
+
type: Input
|
|
260
|
+
}], label: [{
|
|
261
|
+
type: Input
|
|
262
|
+
}], name: [{
|
|
263
|
+
type: Input
|
|
264
|
+
}], placeholder: [{
|
|
265
|
+
type: Input
|
|
266
|
+
}], accept: [{
|
|
267
|
+
type: Input
|
|
268
|
+
}], multiple: [{
|
|
269
|
+
type: Input
|
|
270
|
+
}], disabled: [{
|
|
271
|
+
type: Input
|
|
272
|
+
}], required: [{
|
|
273
|
+
type: Input
|
|
274
|
+
}], iconName: [{
|
|
275
|
+
type: Input
|
|
276
|
+
}], hideErrorIcon: [{
|
|
277
|
+
type: Input
|
|
278
|
+
}], isLoading: [{
|
|
279
|
+
type: Input
|
|
280
|
+
}], maxFileSize: [{
|
|
281
|
+
type: Input
|
|
282
|
+
}], helperText: [{
|
|
283
|
+
type: Input
|
|
284
|
+
}], fileChange: [{
|
|
285
|
+
type: Output
|
|
286
|
+
}], fileClear: [{
|
|
287
|
+
type: Output
|
|
288
|
+
}], fileRejected: [{
|
|
289
|
+
type: Output
|
|
290
|
+
}], fileSizeExceeded: [{
|
|
291
|
+
type: Output
|
|
292
|
+
}], filePickerCancel: [{
|
|
293
|
+
type: Output
|
|
294
|
+
}], inputRef: [{
|
|
295
|
+
type: ViewChild,
|
|
296
|
+
args: ['inputRef']
|
|
297
|
+
}], style: [{
|
|
298
|
+
type: HostBinding,
|
|
299
|
+
args: ['style']
|
|
300
|
+
}] } });
|
|
301
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtZmlsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaXRlLWZyb250LWVuZC1saWIvc3JjL2xpYi9jb21wb25lbnRzL2lucHV0LWZpbGUvaW5wdXQtZmlsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaXRlLWZyb250LWVuZC1saWIvc3JjL2xpYi9jb21wb25lbnRzL2lucHV0LWZpbGUvaW5wdXQtZmlsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxzQkFBc0IsRUFBYyxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdKLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7OztBQVcvQyxNQUFNLE9BQU8sa0JBQWtCO0lBZ0M3QixJQUEwQixLQUFLO1FBQzdCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDbEQsT0FBTztZQUNMLGdCQUFnQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztZQUMzRCxxQkFBcUIsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQztZQUNyRSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUM7WUFDN0QsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDO1lBQzdELGtCQUFrQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDO1lBQy9ELGdCQUFnQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztZQUMzRCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUM7WUFDM0QsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDO1lBQzNELGtCQUFrQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDO1lBQy9ELG1CQUFtQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDO1lBQ2pFLGlCQUFpQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQztZQUM3RCxjQUFjLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO1lBQ3ZELGdCQUFnQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztZQUMzRCxjQUFjLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO1lBQ3ZELGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7WUFDckQsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFO1lBQzdDLGNBQWMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRTtZQUMvQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ25ELHNCQUFzQixFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUM7WUFDekMsb0JBQW9CLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUNyQyx1QkFBdUIsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDO1NBQzVDLENBQUM7SUFDSixDQUFDO0lBRUQsWUFBb0IsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUExRG5DLFdBQU0sR0FBb0MsU0FBUyxDQUFDO1FBQ3BELFNBQUksR0FBaUMsUUFBUSxDQUFDO1FBQzlDLFVBQUssR0FBVyxFQUFFLENBQUM7UUFDbkIsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUNsQixnQkFBVyxHQUFXLDRCQUE0QixDQUFDO1FBQ25ELFdBQU0sR0FBVyxFQUFFLENBQUM7UUFDcEIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUN0QixrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQixjQUFTLEdBQVksS0FBSyxDQUFDO1FBRTNCLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFFdkIsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO1FBQ2pELGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3JDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN4QyxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQzVDLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFdEQsYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUN0QixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0IsY0FBUyxHQUFZLEtBQUssQ0FBQztJQWlDb0IsQ0FBQztJQUVoRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGNBQWMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNuRixDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3BFLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUM1RCxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLENBQUMsZ0JBQWdCO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDekYsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsZ0JBQWdCO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDckYsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDNUQsTUFBTSxlQUFlLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNqRSxNQUFNLE9BQU8sR0FBdUQ7WUFDbEUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUU7WUFDN0QsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFO1lBQ3ZELEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRTtZQUNuRCxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRTtZQUM3RCxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFO1NBQ2pFLENBQUM7UUFDRixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsZUFBZSxJQUFJLFNBQVMsQ0FBQztRQUNuRyxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUNwRCxDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQzVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLEtBQUssT0FBTyxJQUFJLGdCQUFnQixDQUFDO1FBQzVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDakUsSUFBSSxPQUFPO1lBQUUsT0FBTyxZQUFZLENBQUM7UUFDakMsSUFBSSxTQUFTO1lBQUUsT0FBTyxjQUFjLENBQUM7UUFDckMsSUFBSSxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU8sY0FBYyxDQUFDO1FBQzFDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7SUFDaEgsQ0FBQztJQUVELFVBQVU7UUFDUixPQUFPO1lBQ0wsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsSUFBSTtZQUMvQixRQUFRLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRO1lBQ3pCLFNBQVMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFDM0IsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFDOUQsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLElBQUk7U0FDN0IsQ0FBQztJQUNKLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU8sZ0JBQWdCLENBQUM7UUFDM0MsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTyxlQUFlLENBQUM7UUFDN0QsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQUVELGVBQWU7UUFDYixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDekIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxRQUFRLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7UUFDeEIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDekMsQ0FBQztRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBWTtRQUMzQixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBMEIsQ0FBQztRQUMvQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBRTFCLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXhDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEQsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMscUJBQXFCLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDNUMsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU87UUFDMUIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLGFBQWE7WUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ3pFLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVPLFVBQVU7UUFDaEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7UUFDeEIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLGFBQWE7WUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQzNFLENBQUM7SUFFTyxXQUFXLENBQUMsS0FBZTtRQUNqQyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQzVDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzdDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7YUFDckIsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRU8sY0FBYyxDQUFDLElBQVU7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDdEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNoRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDekMsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDckMsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztnQkFBRSxPQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDakUsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFBRSxPQUFPLFFBQVEsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9FLE9BQU8sUUFBUSxLQUFLLFFBQVEsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxlQUFlLENBQUMsSUFBVTtRQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPLElBQUksQ0FBQztRQUNuQyxPQUFPLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUN2QyxDQUFDO0lBRU8sYUFBYSxDQUFDLEtBQWU7UUFDbkMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUFFLE9BQU8sTUFBTSxDQUFDO1FBQzFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQUUsT0FBTyxRQUFRLENBQUM7UUFDM0UsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8scUJBQXFCLENBQUMsSUFBdUI7UUFDbkQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLGFBQWE7WUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ3pFLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxLQUFLLE1BQU0sQ0FBQztRQUNqQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksS0FBSyxRQUFRLENBQUM7UUFDckMsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQy9CLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQixDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVPLGFBQWEsQ0FBQyxLQUFlO1FBQ25DLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztRQUMxQixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDOytHQW5RVSxrQkFBa0I7bUdBQWxCLGtCQUFrQiwyc0JDWi9CLDYxREEyREEseXRHRHBEWSxZQUFZOzs0RkFLWCxrQkFBa0I7a0JBUjlCLFNBQVM7K0JBQ0UsbUJBQW1CLGNBQ2pCLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyxXQUNkLENBQUMsc0JBQXNCLENBQUM7Z0ZBS3hCLE1BQU07c0JBQWQsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFRZ0IsUUFBUTtzQkFBOUIsU0FBUzt1QkFBQyxVQUFVO2dCQUlLLEtBQUs7c0JBQTlCLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSW5wdXQsIE9uRGVzdHJveSwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDdXJhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncmRzaXRlLWlucHV0LWZpbGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuICB0ZW1wbGF0ZVVybDogJy4vaW5wdXQtZmlsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9pbnB1dC1maWxlLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgSW5wdXRGaWxlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgc3RhdHVzOiAnZXJyb3InIHwgJ3N1Y2Nlc3MnIHwgJ2RlZmF1bHQnID0gJ2RlZmF1bHQnO1xuICBASW5wdXQoKSBzaXplOiAnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnID0gJ21lZGl1bSc7XG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgbmFtZTogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnTmVuaHVtIGFycXVpdm8gc2VsZWNpb25hZG8nO1xuICBASW5wdXQoKSBhY2NlcHQ6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBtdWx0aXBsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSByZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBpY29uTmFtZTogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGhpZGVFcnJvckljb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1heEZpbGVTaXplPzogbnVtYmVyO1xuICBASW5wdXQoKSBoZWxwZXJUZXh0OiBzdHJpbmcgPSAnJztcblxuICBAT3V0cHV0KCkgZmlsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZUxpc3QgfCBudWxsPigpO1xuICBAT3V0cHV0KCkgZmlsZUNsZWFyID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgZmlsZVJlamVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgZmlsZVNpemVFeGNlZWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGZpbGVQaWNrZXJDYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgZmlsZU5hbWU6IHN0cmluZyA9ICcnO1xuICBhY2NlcHRFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBzaXplRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNIb3ZlcmVkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzRm9jdXNlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGQoJ2lucHV0UmVmJykgaW5wdXRSZWY/OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gIHByaXZhdGUgY2FuY2VsTGlzdGVuZXI/OiAoKSA9PiB2b2lkO1xuXG4gIEBIb3N0QmluZGluZygnc3R5bGUnKSBnZXQgc3R5bGUoKSB7XG4gICAgY29uc3Qgd2VpZ2h0cyA9IHRoaXMuY3VyYVNlcnZpY2UuZ2V0Rm9udFdlaWdodHMoKTtcbiAgICByZXR1cm4ge1xuICAgICAgJy0tcHJpbWFyeS1iYXNlJzogdGhpcy5jdXJhU2VydmljZS5nZXRDb2xvcigncHJpbWFyeS1iYXNlJyksXG4gICAgICAnLS1uZXV0cmFsLXB1cmV3aGl0ZSc6IHRoaXMuY3VyYVNlcnZpY2UuZ2V0Q29sb3IoJ25ldXRyYWwtcHVyZXdoaXRlJyksXG4gICAgICAnLS1uZXV0cmFsLXdoaXRlJzogdGhpcy5jdXJhU2VydmljZS5nZXRDb2xvcignbmV1dHJhbC13aGl0ZScpLFxuICAgICAgJy0tbmV1dHJhbC1ibGFjayc6IHRoaXMuY3VyYVNlcnZpY2UuZ2V0Q29sb3IoJ25ldXRyYWwtYmxhY2snKSxcbiAgICAgICctLW5ldXRyYWwtbWVkaXVtJzogdGhpcy5jdXJhU2VydmljZS5nZXRDb2xvcignbmV1dHJhbC1tZWRpdW0nKSxcbiAgICAgICctLW5ldXRyYWwtYmFzZSc6IHRoaXMuY3VyYVNlcnZpY2UuZ2V0Q29sb3IoJ25ldXRyYWwtYmFzZScpLFxuICAgICAgJy0tbmV1dHJhbC1kYXJrJzogdGhpcy5jdXJhU2VydmljZS5nZXRDb2xvcignbmV1dHJhbC1kYXJrJyksXG4gICAgICAnLS1zdWNjZXNzLWRhcmsnOiB0aGlzLmN1cmFTZXJ2aWNlLmdldENvbG9yKCdzdWNjZXNzLWRhcmsnKSxcbiAgICAgICctLXN1Y2Nlc3MtZGFya2VyJzogdGhpcy5jdXJhU2VydmljZS5nZXRDb2xvcignc3VjY2Vzcy1kYXJrZXInKSxcbiAgICAgICctLXN1Y2Nlc3MtbGlnaHRlcic6IHRoaXMuY3VyYVNlcnZpY2UuZ2V0Q29sb3IoJ3N1Y2Nlc3MtbGlnaHRlcicpLFxuICAgICAgJy0tZXJyb3ItbGlnaHRlcic6IHRoaXMuY3VyYVNlcnZpY2UuZ2V0Q29sb3IoJ2Vycm9yLWxpZ2h0ZXInKSxcbiAgICAgICctLWVycm9yLWRhcmsnOiB0aGlzLmN1cmFTZXJ2aWNlLmdldENvbG9yKCdlcnJvci1kYXJrJyksXG4gICAgICAnLS1lcnJvci1kYXJrZXInOiB0aGlzLmN1cmFTZXJ2aWNlLmdldENvbG9yKCdlcnJvci1kYXJrZXInKSxcbiAgICAgICctLWVycm9yLWJhc2UnOiB0aGlzLmN1cmFTZXJ2aWNlLmdldENvbG9yKCdlcnJvci1iYXNlJyksXG4gICAgICAnLS1pbmZvLWJhc2UnOiB0aGlzLmN1cmFTZXJ2aWNlLmdldENvbG9yKCdpbmZvLWJhc2UnKSxcbiAgICAgICctLWZvbnQtc2l6ZSc6IHRoaXMuY3VyYVNlcnZpY2UuZ2V0Rm9udFNpemUoKSxcbiAgICAgICctLWZvbnQtY29sb3InOiB0aGlzLmN1cmFTZXJ2aWNlLmdldEZvbnRDb2xvcigpLFxuICAgICAgJy0tZm9udC1mYW1pbHknOiB0aGlzLmN1cmFTZXJ2aWNlLmdldEZvbnRGYW1pbHkoJycpLFxuICAgICAgJy0tZm9udC13ZWlnaHQtbWVkaXVtJzogd2VpZ2h0c1snbWVkaXVtJ10sXG4gICAgICAnLS1mb250LXdlaWdodC1ib2xkJzogd2VpZ2h0c1snYm9sZCddLFxuICAgICAgJy0tZm9udC13ZWlnaHQtcmVndWxhcic6IHdlaWdodHNbJ3JlZ3VsYXInXSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjdXJhU2VydmljZTogQ3VyYVNlcnZpY2UpIHt9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY2FuY2VsTGlzdGVuZXIgPSAoKSA9PiB0aGlzLmhhbmRsZVBpY2tlckNhbmNlbCgpO1xuICAgIHRoaXMuaW5wdXRSZWY/Lm5hdGl2ZUVsZW1lbnQ/LmFkZEV2ZW50TGlzdGVuZXIoJ2NhbmNlbCcsIHRoaXMuY2FuY2VsTGlzdGVuZXIpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2FuY2VsTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuaW5wdXRSZWY/Lm5hdGl2ZUVsZW1lbnQ/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbmNlbCcsIHRoaXMuY2FuY2VsTGlzdGVuZXIpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBlZmZlY3RpdmVTdGF0dXMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hY2NlcHRFcnJvciB8fCB0aGlzLnNpemVFcnJvciA/ICdlcnJvcicgOiB0aGlzLnN0YXR1cztcbiAgfVxuXG4gIGdldCBzaG93SWNvbigpOiBib29sZWFuIHtcbiAgICBjb25zdCBoYXNJbnRlcm5hbEVycm9yID0gdGhpcy5hY2NlcHRFcnJvciB8fCB0aGlzLnNpemVFcnJvcjtcbiAgICBpZiAodGhpcy5pY29uTmFtZSA9PT0gJycgJiYgdGhpcy5zdGF0dXMgPT09ICdkZWZhdWx0JyAmJiAhaGFzSW50ZXJuYWxFcnJvcikgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gJ2Vycm9yJyAmJiB0aGlzLmhpZGVFcnJvckljb24gJiYgIWhhc0ludGVybmFsRXJyb3IpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldCBpY29uQ29uZmlnKCk6IHsgbmFtZTogc3RyaW5nOyBjb2xvcjogc3RyaW5nIH0ge1xuICAgIGNvbnN0IGhhc0ludGVybmFsRXJyb3IgPSB0aGlzLmFjY2VwdEVycm9yIHx8IHRoaXMuc2l6ZUVycm9yO1xuICAgIGNvbnN0IGVmZmVjdGl2ZVN0YXR1cyA9IGhhc0ludGVybmFsRXJyb3IgPyAnZXJyb3InIDogdGhpcy5zdGF0dXM7XG4gICAgY29uc3QgaWNvbk1hcDogeyBba2V5OiBzdHJpbmddOiB7IG5hbWU6IHN0cmluZzsgY29sb3I6IHN0cmluZyB9IH0gPSB7XG4gICAgICBsb2FkaW5nOiB7IG5hbWU6IHRoaXMuaWNvbk5hbWUgfHwgJycsIGNvbG9yOiAncHJpbWFyeS1iYXNlJyB9LFxuICAgICAgc3VjY2VzczogeyBuYW1lOiAnY2hlY2tDaXJjbGUnLCBjb2xvcjogJ3N1Y2Nlc3MtZGFyaycgfSxcbiAgICAgIGVycm9yOiB7IG5hbWU6ICdhbGVydENpcmNsZScsIGNvbG9yOiAnZXJyb3ItZGFyaycgfSxcbiAgICAgIGRlZmF1bHQ6IHsgbmFtZTogdGhpcy5pY29uTmFtZSB8fCAnJywgY29sb3I6ICduZXV0cmFsLWRhcmsnIH0sXG4gICAgICBkaXNhYmxlZDogeyBuYW1lOiB0aGlzLmljb25OYW1lIHx8ICcnLCBjb2xvcjogJ25ldXRyYWwtbWVkaXVtJyB9LFxuICAgIH07XG4gICAgY29uc3Qga2V5ID0gdGhpcy5pc0xvYWRpbmcgPyAnbG9hZGluZycgOiB0aGlzLmRpc2FibGVkID8gJ2Rpc2FibGVkJyA6IGVmZmVjdGl2ZVN0YXR1cyB8fCAnZGVmYXVsdCc7XG4gICAgcmV0dXJuIGljb25NYXBba2V5XTtcbiAgfVxuXG4gIGdldCBpY29uU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnNpemUgPT09ICdsYXJnZScgPyAyMCA6IDE2O1xuICB9XG5cbiAgZ2V0IGhlbHBlclRleHRTaXplKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc2l6ZSA9PT0gJ2xhcmdlJyA/ICdzbWFsbCcgOiAneHNtYWxsJztcbiAgfVxuXG4gIGdldCBoZWxwZXJUZXh0Q29sb3IoKTogc3RyaW5nIHtcbiAgICBjb25zdCBoYXNJbnRlcm5hbEVycm9yID0gdGhpcy5hY2NlcHRFcnJvciB8fCB0aGlzLnNpemVFcnJvcjtcbiAgICBjb25zdCBpc0Vycm9yID0gdGhpcy5zdGF0dXMgPT09ICdlcnJvcicgfHwgaGFzSW50ZXJuYWxFcnJvcjtcbiAgICBjb25zdCBpc1N1Y2Nlc3MgPSB0aGlzLnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnICYmICFoYXNJbnRlcm5hbEVycm9yO1xuICAgIGlmIChpc0Vycm9yKSByZXR1cm4gJ2Vycm9yLWRhcmsnO1xuICAgIGlmIChpc1N1Y2Nlc3MpIHJldHVybiAnc3VjY2Vzcy1kYXJrJztcbiAgICBpZiAodGhpcy5pc0xvYWRpbmcpIHJldHVybiAncHJpbWFyeS1iYXNlJztcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCA/ICduZXV0cmFsLW1lZGl1bScgOiB0aGlzLmlzRm9jdXNlZCB8fCB0aGlzLmlzSG92ZXJlZCA/ICduZXV0cmFsLWJsYWNrJyA6ICduZXV0cmFsLWRhcmsnO1xuICB9XG5cbiAgZ2V0Q2xhc3NlcygpOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFt0aGlzLnNpemUudG9Mb3dlckNhc2UoKV06IHRydWUsXG4gICAgICBkaXNhYmxlZDogISF0aGlzLmRpc2FibGVkLFxuICAgICAgaXNMb2FkaW5nOiAhIXRoaXMuaXNMb2FkaW5nLFxuICAgICAgaXNGb2N1c2VkOiB0aGlzLmlzRm9jdXNlZCAmJiAhdGhpcy5kaXNhYmxlZCAmJiAhdGhpcy5pc0xvYWRpbmcsXG4gICAgICBpc0hvdmVyZWQ6IHRoaXMuaXNIb3ZlcmVkLFxuICAgICAgW3RoaXMuZWZmZWN0aXZlU3RhdHVzXTogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0TGFiZWxDb2xvcigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm4gJ25ldXRyYWwtbWVkaXVtJztcbiAgICBpZiAodGhpcy5pc0ZvY3VzZWQgfHwgdGhpcy5pc0hvdmVyZWQpIHJldHVybiAnbmV1dHJhbC1ibGFjayc7XG4gICAgcmV0dXJuICduZXV0cmFsLWRhcmsnO1xuICB9XG5cbiAgaGFuZGxlTW91c2VFbnRlcigpOiB2b2lkIHtcbiAgICB0aGlzLmlzSG92ZXJlZCA9IHRydWU7XG4gIH1cblxuICBoYW5kbGVNb3VzZUxlYXZlKCk6IHZvaWQge1xuICAgIHRoaXMuaXNIb3ZlcmVkID0gZmFsc2U7XG4gIH1cblxuICBoYW5kbGVJbnB1dEZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgfVxuXG4gIGhhbmRsZUlucHV0Qmx1cigpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgfSwgMTUwKTtcbiAgfVxuXG4gIGhhbmRsZUJ1dHRvbkNsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMuaW5wdXRSZWY/Lm5hdGl2ZUVsZW1lbnQ/LmNsaWNrKCk7XG4gIH1cblxuICBoYW5kbGVQaWNrZXJDYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5maWxlTmFtZSA9ICcnO1xuICAgIHRoaXMuYWNjZXB0RXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLnNpemVFcnJvciA9IGZhbHNlO1xuICAgIHRoaXMuc3RhdHVzID0gJ2RlZmF1bHQnO1xuICAgIGlmICh0aGlzLmlucHV0UmVmPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICB0aGlzLmlucHV0UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB9XG4gICAgdGhpcy5maWxlQ2hhbmdlLmVtaXQobnVsbCk7XG4gICAgdGhpcy5maWxlUGlja2VyQ2FuY2VsLmVtaXQoKTtcbiAgfVxuXG4gIGhhbmRsZUZpbGVDaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBjb25zdCBmaWxlcyA9IGlucHV0LmZpbGVzO1xuXG4gICAgaWYgKCFmaWxlcz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLnJlc2V0U3RhdGUoKTtcbiAgICAgIHRoaXMuZmlsZUNoYW5nZS5lbWl0KG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmZpbGVOYW1lID0gdGhpcy5nZXRGaWxlTmFtZShmaWxlcyk7XG5cbiAgICBjb25zdCB2YWxpZGF0aW9uRXJyb3IgPSB0aGlzLnZhbGlkYXRlRmlsZXMoZmlsZXMpO1xuICAgIGlmICh2YWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgIHRoaXMuaGFuZGxlVmFsaWRhdGlvbkVycm9yKHZhbGlkYXRpb25FcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5oYW5kbGVTdWNjZXNzKGZpbGVzKTtcbiAgfVxuXG4gIGNsZWFyRmlsZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcbiAgICBpZiAodGhpcy5pbnB1dFJlZj8ubmF0aXZlRWxlbWVudCkgdGhpcy5pbnB1dFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgdGhpcy5maWxlTmFtZSA9ICcnO1xuICAgIHRoaXMuYWNjZXB0RXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLnNpemVFcnJvciA9IGZhbHNlO1xuICAgIHRoaXMuZmlsZUNsZWFyLmVtaXQoKTtcbiAgICB0aGlzLmZpbGVDaGFuZ2UuZW1pdChudWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmZpbGVOYW1lID0gJyc7XG4gICAgdGhpcy5hY2NlcHRFcnJvciA9IGZhbHNlO1xuICAgIHRoaXMuc2l6ZUVycm9yID0gZmFsc2U7XG4gICAgdGhpcy5zdGF0dXMgPSAnZGVmYXVsdCc7XG4gICAgaWYgKHRoaXMuaW5wdXRSZWY/Lm5hdGl2ZUVsZW1lbnQpIHRoaXMuaW5wdXRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaWxlTmFtZShmaWxlczogRmlsZUxpc3QpOiBzdHJpbmcge1xuICAgIGlmICghZmlsZXMgfHwgZmlsZXMubGVuZ3RoID09PSAwKSByZXR1cm4gJyc7XG4gICAgaWYgKGZpbGVzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIGZpbGVzWzBdLm5hbWU7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oZmlsZXMpXG4gICAgICAubWFwKChmaWxlKSA9PiBmaWxlLm5hbWUpXG4gICAgICAuam9pbignLCAnKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNGaWxlQWNjZXB0ZWQoZmlsZTogRmlsZSk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5hY2NlcHQ/LnRyaW0oKSkgcmV0dXJuIHRydWU7XG4gICAgY29uc3QgYWNjZXB0ZWRUeXBlcyA9IHRoaXMuYWNjZXB0LnNwbGl0KCcsJykubWFwKCh0KSA9PiB0LnRyaW0oKS50b0xvd2VyQ2FzZSgpKTtcbiAgICBjb25zdCBmaWxlTmFtZSA9IGZpbGUubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGZpbGVUeXBlID0gZmlsZS50eXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIGFjY2VwdGVkVHlwZXMuc29tZSgoYWNjZXB0ZWQpID0+IHtcbiAgICAgIGlmIChhY2NlcHRlZC5zdGFydHNXaXRoKCcuJykpIHJldHVybiBmaWxlTmFtZS5lbmRzV2l0aChhY2NlcHRlZCk7XG4gICAgICBpZiAoYWNjZXB0ZWQuZW5kc1dpdGgoJy8qJykpIHJldHVybiBmaWxlVHlwZS5zdGFydHNXaXRoKGFjY2VwdGVkLnNsaWNlKDAsIC0xKSk7XG4gICAgICByZXR1cm4gZmlsZVR5cGUgPT09IGFjY2VwdGVkO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0ZpbGVTaXplVmFsaWQoZmlsZTogRmlsZSk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5tYXhGaWxlU2l6ZSkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIGZpbGUuc2l6ZSA8PSB0aGlzLm1heEZpbGVTaXplO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZUZpbGVzKGZpbGVzOiBGaWxlTGlzdCk6ICdzaXplJyB8ICdhY2NlcHQnIHwgbnVsbCB7XG4gICAgY29uc3QgZmlsZUFycmF5ID0gQXJyYXkuZnJvbShmaWxlcyk7XG4gICAgaWYgKCFmaWxlQXJyYXkuZXZlcnkoKGZpbGUpID0+IHRoaXMuaXNGaWxlU2l6ZVZhbGlkKGZpbGUpKSkgcmV0dXJuICdzaXplJztcbiAgICBpZiAoIWZpbGVBcnJheS5ldmVyeSgoZmlsZSkgPT4gdGhpcy5pc0ZpbGVBY2NlcHRlZChmaWxlKSkpIHJldHVybiAnYWNjZXB0JztcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlVmFsaWRhdGlvbkVycm9yKHR5cGU6ICdzaXplJyB8ICdhY2NlcHQnKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5wdXRSZWY/Lm5hdGl2ZUVsZW1lbnQpIHRoaXMuaW5wdXRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5zaXplRXJyb3IgPSB0eXBlID09PSAnc2l6ZSc7XG4gICAgdGhpcy5hY2NlcHRFcnJvciA9IHR5cGUgPT09ICdhY2NlcHQnO1xuICAgIGlmICh0eXBlID09PSAnc2l6ZScpIHtcbiAgICAgIHRoaXMuZmlsZVNpemVFeGNlZWRlZC5lbWl0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsZVJlamVjdGVkLmVtaXQoKTtcbiAgICB9XG4gICAgdGhpcy5maWxlQ2hhbmdlLmVtaXQobnVsbCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVN1Y2Nlc3MoZmlsZXM6IEZpbGVMaXN0KTogdm9pZCB7XG4gICAgdGhpcy5hY2NlcHRFcnJvciA9IGZhbHNlO1xuICAgIHRoaXMuc2l6ZUVycm9yID0gZmFsc2U7XG4gICAgdGhpcy5maWxlQ2hhbmdlLmVtaXQoZmlsZXMpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuc3RhdHVzID0gJ3N1Y2Nlc3MnO1xuICAgIH0sIDUwMCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgcm9sZT1cImdyb3VwXCJcbiAgY2xhc3M9XCJjdXJhLWlucHV0LWdyb3VwXCJcbiAgW25nQ2xhc3NdPVwiZ2V0Q2xhc3NlcygpXCJcbiAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gIFthdHRyLmFyaWEtcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICBbYXR0ci5hcmlhLWludmFsaWRdPVwiZWZmZWN0aXZlU3RhdHVzID09PSAnZXJyb3InXCJcbiAgKG1vdXNlZW50ZXIpPVwiaGFuZGxlTW91c2VFbnRlcigpXCJcbiAgKG1vdXNlbGVhdmUpPVwiaGFuZGxlTW91c2VMZWF2ZSgpXCJcbj5cbiAgPGRpdiBjbGFzcz1cImlucHV0LXdyYXBwZXJcIj5cbiAgICBAaWYgKGxhYmVsKSB7XG4gICAgICA8Y3VyYS1sYWJlbCBjbGFzcz1cImxhYmVsXCIgd2VpZ2h0PVwiYm9sZFwiIFthdHRyLnNpemVdPVwic2l6ZSA9PT0gJ2xhcmdlJyA/ICdzbWFsbCcgOiAneHNtYWxsJ1wiIFthdHRyLmNvbG9yXT1cImdldExhYmVsQ29sb3IoKVwiPlxuICAgICAgICB7eyBsYWJlbCB9fVxuICAgICAgICBAaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+XG4gICAgICAgIH1cbiAgICAgIDwvY3VyYS1sYWJlbD5cbiAgICB9XG5cbiAgICA8ZGl2IGNsYXNzPVwiY3VyYS1pbnB1dC1maWVsZFwiPlxuICAgICAgQGlmIChzaG93SWNvbikge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZmVlZGJhY2staWNvblwiPlxuICAgICAgICAgIDxjdXJhLWljb24gW2F0dHIubmFtZV09XCJpY29uQ29uZmlnLm5hbWVcIiBpY29uc2V0PVwiZGVmYXVsdFwiIFthdHRyLnNpemVdPVwiaWNvblNpemVcIiBbYXR0ci5jb2xvcl09XCJpY29uQ29uZmlnLmNvbG9yXCI+PC9jdXJhLWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImZpbGUtdHJpZ2dlclwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIiAoY2xpY2spPVwiaGFuZGxlQnV0dG9uQ2xpY2soKVwiPlxuICAgICAgICB7eyBmaWxlTmFtZSA/IGZpbGVOYW1lIDogcGxhY2Vob2xkZXIgfX1cbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICBAaWYgKGlzTG9hZGluZyAmJiAhZGlzYWJsZWQpIHtcbiAgICAgICAgPGN1cmEtbG9hZGVyLWNpcmNsZSBjb2xvcj1cInByaW1hcnlcIiBzaXplPVwibWVkaXVtXCI+PC9jdXJhLWxvYWRlci1jaXJjbGU+XG4gICAgICB9XG5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjaW5wdXRSZWZcbiAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICBjbGFzcz1cImZpbGUtaW5wdXQtaGlkZGVuXCJcbiAgICAgICAgW25hbWVdPVwibmFtZVwiXG4gICAgICAgIFthdHRyLmFjY2VwdF09XCJhY2NlcHQgfHwgbnVsbFwiXG4gICAgICAgIFttdWx0aXBsZV09XCJtdWx0aXBsZVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlRmlsZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKGZvY3VzKT1cImhhbmRsZUlucHV0Rm9jdXMoKVwiXG4gICAgICAgIChibHVyKT1cImhhbmRsZUlucHV0Qmx1cigpXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG5cbiAgICBAaWYgKGhlbHBlclRleHQpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJoZWxwZXItdGV4dFwiPlxuICAgICAgICA8Y3VyYS1sYWJlbCBbYXR0ci5zaXplXT1cImhlbHBlclRleHRTaXplXCIgbGluZWhlaWdodD1cInhzbWFsbFwiIFthdHRyLmNvbG9yXT1cImhlbHBlclRleHRDb2xvclwiPlxuICAgICAgICAgIHt7IGhlbHBlclRleHQgfX1cbiAgICAgICAgPC9jdXJhLWxhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|