ng-tailwind 4.2.25 → 4.2.26
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/esm2020/components/ngt-action/ngt-action.component.mjs +3 -3
- package/esm2020/components/ngt-action/ngt-action.module.mjs +4 -4
- package/esm2020/components/ngt-button/ngt-button.component.mjs +3 -3
- package/esm2020/components/ngt-button/ngt-button.module.mjs +4 -4
- package/esm2020/components/ngt-checkbox/ngt-checkbox.component.mjs +3 -3
- package/esm2020/components/ngt-checkbox/ngt-checkbox.module.mjs +4 -4
- package/esm2020/components/ngt-content/ngt-content.component.mjs +3 -3
- package/esm2020/components/ngt-content/ngt-content.module.mjs +4 -4
- package/esm2020/components/ngt-context-menu/ngt-context-menu.component.mjs +3 -3
- package/esm2020/components/ngt-context-menu/ngt-context-menu.directive.mjs +3 -3
- package/esm2020/components/ngt-context-menu/ngt-context-menu.module.mjs +4 -4
- package/esm2020/components/ngt-datatable/ngt-datatable.component.mjs +3 -3
- package/esm2020/components/ngt-datatable/ngt-datatable.module.mjs +4 -4
- package/esm2020/components/ngt-datatable/ngt-tbody/ngt-tbody.component.mjs +3 -3
- package/esm2020/components/ngt-datatable/ngt-td/ngt-td.component.mjs +3 -3
- package/esm2020/components/ngt-datatable/ngt-td-check/ngt-td-check.component.mjs +3 -3
- package/esm2020/components/ngt-datatable/ngt-th/ngt-th.component.mjs +3 -3
- package/esm2020/components/ngt-datatable/ngt-th-check/ngt-th-check.component.mjs +3 -3
- package/esm2020/components/ngt-datatable/ngt-thead/ngt-thead.component.mjs +3 -3
- package/esm2020/components/ngt-datatable/ngt-tr/ngt-tr.component.mjs +3 -3
- package/esm2020/components/ngt-date/ngt-date.component.mjs +3 -3
- package/esm2020/components/ngt-date/ngt-date.module.mjs +4 -4
- package/esm2020/components/ngt-dropdown/ngt-dropdown-container/ngt-dropdown-container.component.mjs +3 -3
- package/esm2020/components/ngt-dropdown/ngt-dropdown.component.mjs +3 -3
- package/esm2020/components/ngt-dropdown/ngt-dropdown.module.mjs +4 -4
- package/esm2020/components/ngt-dropzone/custom-dropzone-preview/custom-dropzone-preview.component.mjs +3 -3
- package/esm2020/components/ngt-dropzone/ngt-dropzone-file-viewer/ngt-dropzone-file-viewer.component.mjs +3 -3
- package/esm2020/components/ngt-dropzone/ngt-dropzone-view/ngt-dropzone-view.component.mjs +3 -3
- package/esm2020/components/ngt-dropzone/ngt-dropzone.component.mjs +7 -6
- package/esm2020/components/ngt-dropzone/ngt-dropzone.module.mjs +4 -4
- package/esm2020/components/ngt-floating-button/ngt-floating-button.component.mjs +3 -3
- package/esm2020/components/ngt-floating-button/ngt-floating-button.module.mjs +4 -4
- package/esm2020/components/ngt-form/ngt-form-validation-message/ngt-form-validation-message.component.mjs +3 -3
- package/esm2020/components/ngt-form/ngt-form.component.mjs +3 -3
- package/esm2020/components/ngt-form/ngt-form.module.mjs +4 -4
- package/esm2020/components/ngt-header-nav/ngt-header-nav.component.mjs +3 -3
- package/esm2020/components/ngt-header-nav/ngt-header-nav.module.mjs +4 -4
- package/esm2020/components/ngt-helper/ngt-helper.component.mjs +3 -3
- package/esm2020/components/ngt-helper/ngt-helper.module.mjs +4 -4
- package/esm2020/components/ngt-input/ngt-input.component.mjs +3 -3
- package/esm2020/components/ngt-input/ngt-input.module.mjs +4 -4
- package/esm2020/components/ngt-modal/ngt-modal-body/ngt-modal-body.component.mjs +3 -3
- package/esm2020/components/ngt-modal/ngt-modal-footer/ngt-modal-footer.component.mjs +3 -3
- package/esm2020/components/ngt-modal/ngt-modal-header/ngt-modal-header.component.mjs +3 -3
- package/esm2020/components/ngt-modal/ngt-modal.component.mjs +3 -3
- package/esm2020/components/ngt-modal/ngt-modal.module.mjs +4 -4
- package/esm2020/components/ngt-multi-select/ngt-multi-select.component.mjs +3 -3
- package/esm2020/components/ngt-multi-select/ngt-multi-select.module.mjs +4 -4
- package/esm2020/components/ngt-pagination/ngt-pagination.component.mjs +3 -3
- package/esm2020/components/ngt-pagination/ngt-pagination.module.mjs +4 -4
- package/esm2020/components/ngt-popover/ngt-popover-tooltip/ngt-popover-tooltip.component.mjs +3 -3
- package/esm2020/components/ngt-popover/ngt-popover.component.mjs +3 -3
- package/esm2020/components/ngt-popover/ngt-popover.directive.mjs +3 -3
- package/esm2020/components/ngt-popover/ngt-popover.module.mjs +4 -4
- package/esm2020/components/ngt-portlet/ngt-portlet-body/ngt-portlet-body.component.mjs +3 -3
- package/esm2020/components/ngt-portlet/ngt-portlet-footer/ngt-portlet-footer.component.mjs +3 -3
- package/esm2020/components/ngt-portlet/ngt-portlet-header/ngt-portlet-header.component.mjs +3 -3
- package/esm2020/components/ngt-portlet/ngt-portlet.component.mjs +3 -3
- package/esm2020/components/ngt-portlet/ngt-portlet.module.mjs +4 -4
- package/esm2020/components/ngt-radio-button/ngt-radio-button-container/ngt-radio-button-container.component.mjs +3 -3
- package/esm2020/components/ngt-radio-button/ngt-radio-button.component.mjs +3 -3
- package/esm2020/components/ngt-radio-button/ngt-radio-button.module.mjs +4 -4
- package/esm2020/components/ngt-section/ngt-section.component.mjs +3 -3
- package/esm2020/components/ngt-section/ngt-section.module.mjs +4 -4
- package/esm2020/components/ngt-select/ngt-select.component.mjs +3 -3
- package/esm2020/components/ngt-select/ngt-select.directive.mjs +9 -9
- package/esm2020/components/ngt-select/ngt-select.module.mjs +4 -4
- package/esm2020/components/ngt-shining/ngt-shining.component.mjs +3 -3
- package/esm2020/components/ngt-shining/ngt-shining.module.mjs +4 -4
- package/esm2020/components/ngt-sidenav/ngt-sidenav.component.mjs +3 -3
- package/esm2020/components/ngt-sidenav/ngt-sidenav.module.mjs +4 -4
- package/esm2020/components/ngt-slider/ngt-slider.component.mjs +3 -3
- package/esm2020/components/ngt-slider/ngt-slider.module.mjs +4 -4
- package/esm2020/components/ngt-svg/ngt-svg.component.mjs +3 -3
- package/esm2020/components/ngt-svg/ngt-svg.module.mjs +4 -4
- package/esm2020/components/ngt-tag/ngt-tag.component.mjs +3 -3
- package/esm2020/components/ngt-tag/ngt-tag.module.mjs +4 -4
- package/esm2020/components/ngt-textarea/ngt-textarea.component.mjs +3 -3
- package/esm2020/components/ngt-textarea/ngt-textarea.module.mjs +4 -4
- package/esm2020/components/ngt-validation/ngt-validation.component.mjs +3 -3
- package/esm2020/components/ngt-validation/ngt-validation.module.mjs +4 -4
- package/esm2020/directives/ngt-stylizable/ngt-stylizable.directive.mjs +3 -3
- package/esm2020/directives/ngt-stylizable/ngt-stylizable.module.mjs +4 -4
- package/esm2020/services/http/ngt-attachment-http.service.mjs +1 -1
- package/fesm2015/ng-tailwind.mjs +288 -287
- package/fesm2015/ng-tailwind.mjs.map +1 -1
- package/fesm2020/ng-tailwind.mjs +288 -287
- package/fesm2020/ng-tailwind.mjs.map +1 -1
- package/package.json +1 -1
- package/services/http/ngt-attachment-http.service.d.ts +0 -1
|
@@ -9,20 +9,20 @@ import { NgtDateComponent } from './ngt-date.component';
|
|
|
9
9
|
import * as i0 from "@angular/core";
|
|
10
10
|
export class NgtDateModule {
|
|
11
11
|
}
|
|
12
|
-
NgtDateModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
13
|
-
NgtDateModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.
|
|
12
|
+
NgtDateModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgtDateModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
13
|
+
NgtDateModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: NgtDateModule, declarations: [NgtDateComponent], imports: [CommonModule,
|
|
14
14
|
FormsModule,
|
|
15
15
|
Ng2FlatpickrModule,
|
|
16
16
|
NgtValidationModule,
|
|
17
17
|
NgtShiningModule,
|
|
18
18
|
NgtHelperModule], exports: [NgtDateComponent] });
|
|
19
|
-
NgtDateModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.
|
|
19
|
+
NgtDateModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgtDateModule, imports: [CommonModule,
|
|
20
20
|
FormsModule,
|
|
21
21
|
Ng2FlatpickrModule,
|
|
22
22
|
NgtValidationModule,
|
|
23
23
|
NgtShiningModule,
|
|
24
24
|
NgtHelperModule] });
|
|
25
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
25
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgtDateModule, decorators: [{
|
|
26
26
|
type: NgModule,
|
|
27
27
|
args: [{
|
|
28
28
|
declarations: [NgtDateComponent],
|
package/esm2020/components/ngt-dropdown/ngt-dropdown-container/ngt-dropdown-container.component.mjs
CHANGED
|
@@ -8,9 +8,9 @@ export class NgtDropdownContainerComponent {
|
|
|
8
8
|
this.onActiveDropdownChange.emit(activeDropdown);
|
|
9
9
|
}
|
|
10
10
|
}
|
|
11
|
-
NgtDropdownContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
12
|
-
NgtDropdownContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.
|
|
13
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
11
|
+
NgtDropdownContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgtDropdownContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
12
|
+
NgtDropdownContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: NgtDropdownContainerComponent, selector: "[ngt-dropdown-container]", outputs: { onActiveDropdownChange: "onActiveDropdownChange" }, ngImport: i0, template: "<ng-content></ng-content>" });
|
|
13
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgtDropdownContainerComponent, decorators: [{
|
|
14
14
|
type: Component,
|
|
15
15
|
args: [{ selector: '[ngt-dropdown-container]', template: "<ng-content></ng-content>" }]
|
|
16
16
|
}], propDecorators: { onActiveDropdownChange: [{
|
|
@@ -145,8 +145,8 @@ export class NgtDropdownComponent {
|
|
|
145
145
|
|| this.openMethod == NgtDropdownOpenMethod.POPOVER_CLICK;
|
|
146
146
|
}
|
|
147
147
|
}
|
|
148
|
-
NgtDropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
149
|
-
NgtDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.
|
|
148
|
+
NgtDropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgtDropdownComponent, deps: [{ token: i1.NgtDropdownContainerComponent, optional: true, skipSelf: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
149
|
+
NgtDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: NgtDropdownComponent, selector: "ngt-dropdown", inputs: { scrollable: "scrollable", autoXReverse: "autoXReverse", autoYReverse: "autoYReverse", reverseXPosition: "reverseXPosition", reverseYPosition: "reverseYPosition", closeOnClick: "closeOnClick", closeTimeout: "closeTimeout", openMethod: "openMethod" }, outputs: { onToggle: "onToggle", onHostClick: "onHostClick" }, viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["container"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"sm:relative\">\n <div (mouseenter)=\"onHover(host, container)\" (click)=\"onClick($event, host, container)\"\n (contextmenu)=\"onRightClick($event)\" #host>\n <ng-content select='[host]'></ng-content>\n </div>\n\n <div [hidden]='!isOpen'\n class=\"{{ shouldReverseYPosition() ? 'mb-12 bottom-0' : 'mt-4' }} {{ shouldReverseXPosition() ? 'left-0': 'right-0' }} ngt-dropdown-container sm:mr-0 mr-3 max-w-xs absolute\"\n [@openClose]=\"isOpen ? 'open' : 'closed'\" (mouseenter)=\"onHover(host, container)\"\n (click)='closeOnSelectOption()' style=\"z-index: 1100 !important;\" #container>\n\n <div class=\"flex flex-col\" [ngClass]=\"{ 'h-64 overflow-auto':scrollable }\">\n <ng-content select='[container]'></ng-content>\n </div>\n </div>\n</div>\n\n<button *ngIf=\"isOpen && openMethod != 'HOVER'\" class=\"fixed z-40 inset-0 h-full w-full opacity-0 cursor-default\"\n (click)='toggle()'>\n</button>", styles: [".ngt-dropdown-container{max-height:30rem;width:max-content}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], animations: [
|
|
150
150
|
trigger('openClose', [
|
|
151
151
|
state('open', style({ opacity: 1, transform: 'translateY(0px)' })),
|
|
152
152
|
state('closed', style({ opacity: 0, transform: 'translateY(-10px)' })),
|
|
@@ -155,7 +155,7 @@ NgtDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", v
|
|
|
155
155
|
]),
|
|
156
156
|
]),
|
|
157
157
|
] });
|
|
158
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
158
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgtDropdownComponent, decorators: [{
|
|
159
159
|
type: Component,
|
|
160
160
|
args: [{ selector: 'ngt-dropdown', animations: [
|
|
161
161
|
trigger('openClose', [
|
|
@@ -5,10 +5,10 @@ import { NgtDropdownComponent } from './ngt-dropdown.component';
|
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
export class NgtDropdownModule {
|
|
7
7
|
}
|
|
8
|
-
NgtDropdownModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
9
|
-
NgtDropdownModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.
|
|
10
|
-
NgtDropdownModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.
|
|
11
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
8
|
+
NgtDropdownModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgtDropdownModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
9
|
+
NgtDropdownModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: NgtDropdownModule, declarations: [NgtDropdownComponent, NgtDropdownContainerComponent], imports: [CommonModule], exports: [NgtDropdownComponent, NgtDropdownContainerComponent] });
|
|
10
|
+
NgtDropdownModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgtDropdownModule, imports: [CommonModule] });
|
|
11
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgtDropdownModule, decorators: [{
|
|
12
12
|
type: NgModule,
|
|
13
13
|
args: [{
|
|
14
14
|
declarations: [NgtDropdownComponent, NgtDropdownContainerComponent],
|
|
@@ -35,14 +35,14 @@ export class CustomDropzonePreviewComponent extends NgxDropzonePreviewComponent
|
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
|
-
CustomDropzonePreviewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
39
|
-
CustomDropzonePreviewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.
|
|
38
|
+
CustomDropzonePreviewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CustomDropzonePreviewComponent, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
|
|
39
|
+
CustomDropzonePreviewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: CustomDropzonePreviewComponent, selector: "custom-dropzone-preview", providers: [
|
|
40
40
|
{
|
|
41
41
|
provide: NgxDropzonePreviewComponent,
|
|
42
42
|
useExisting: CustomDropzonePreviewComponent
|
|
43
43
|
}
|
|
44
44
|
], usesInheritance: true, ngImport: i0, template: "<div class=\"flex flex-col items-center w-48 cursor-pointer hover:opacity-75\">\n <div class=\"w-full flex justify-center border-2 rounded py-4 text-6xl\">\n <svg *ngIf=\"fileType == 'OTHER'\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path class=\"heroicon-ui\" fill=\"#4a5568\"\n d=\"M6 2h9a1 1 0 0 1 .7.3l4 4a1 1 0 0 1 .3.7v13a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4c0-1.1.9-2 2-2zm9 2.41V7h2.59L15 4.41zM18 9h-3a2 2 0 0 1-2-2V4H6v16h12V9zm-2 7a1 1 0 0 1-1 1H9a1 1 0 0 1 0-2h6a1 1 0 0 1 1 1zm0-4a1 1 0 0 1-1 1H9a1 1 0 0 1 0-2h6a1 1 0 0 1 1 1zm-5-4a1 1 0 0 1-1 1H9a1 1 0 1 1 0-2h1a1 1 0 0 1 1 1z\" />\n </svg>\n\n <svg *ngIf=\"fileType == 'DOC'\" fill=\"#4a5568\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n d=\"M14.4 0l-9.6 0c-1.33,0 -2.4,1.08 -2.4,2.4l0 19.2c0,1.33 1.07,2.4 2.4,2.4l14.4 0c1.33,0 2.4,-1.07 2.4,-2.4l0 -14.4 -7.2 -7.2 0 0zm4.8 21.6l-14.4 0 0 -19.2 8.4 0 0 6 6 0 0 13.2 0 0zm-0.78 -12l-2.52 10.8 -1.68 0 -2.16 -8.15 -2.16 8.15 -1.68 0 -2.64 -10.8 1.8 0 1.68 8.17 2.16 -8.17 1.56 0 2.16 8.17 1.68 -8.17 1.8 0z\" />\n </svg>\n\n <svg *ngIf=\"fileType == 'XLS'\" fill=\"#4a5568\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n d=\"M14.4 0l-9.6 0c-1.33,0 -2.4,1.08 -2.4,2.4l0 19.2c0,1.33 1.07,2.4 2.4,2.4l14.4 0c1.33,0 2.4,-1.07 2.4,-2.4l0 -14.4 -7.2 -7.2 0 0zm4.8 21.6l-14.4 0 0 -19.2 8.4 0 0 6 6 0 0 13.2 0 0zm-6.12 -6.6l3.48 5.4 -2.16 0 -2.4 -4.08 -2.4 4.08 -2.16 0 3.48 -5.4 -3.48 -5.4 2.16 0 2.4 4.08 2.4 -4.08 2.16 0 -3.48 5.4z\" />\n </svg>\n\n <svg *ngIf=\"fileType == 'PDF'\" fill=\"#4a5568\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n d=\"M14.4 0l7.2 7.2 0 14.4c0,1.32 -1.08,2.4 -2.4,2.4l-14.4 0c-1.32,0 -2.4,-1.08 -2.4,-2.4l0 -19.2c0,-1.32 1.08,-2.4 2.4,-2.4l9.6 0 0 0zm4.8 21.6l0 -13.2 -6 0 0 -6 -8.4 0 0 19.2 14.4 0 0 0zm-8.5 -9.23c-0.28,-0.92 -0.92,-3.87 0.76,-3.92 1.68,-0.05 0.58,3.74 0.58,3.74 0.46,1.79 2.42,3.07 2.42,3.07 0.6,-0.18 4.02,-0.57 3.54,1.21 -0.52,1.77 -4.2,0.1 -4.2,0.1 -2.34,0.17 -4.09,0.8 -4.09,0.8 -1.36,2.53 -2.94,3.63 -3.59,2.56 -0.8,-1.33 2.56,-3.04 2.56,-3.04 1.74,-2.83 2,-4.47 2.02,-4.52l0 0zm0.78 1.01c-0.48,1.56 -1.44,3.23 -1.44,3.23 1.02,-0.41 3.26,-0.88 3.26,-0.88 -1.37,-1.2 -1.79,-2.34 -1.82,-2.35l0 0zm3.77 2.6c0,0 2.1,0.79 2.15,0.47 0.08,-0.32 -1.6,-0.61 -2.15,-0.47l0 0zm-6.79 1.79c-0.93,0.36 -1.81,1.9 -1.6,1.9 0.22,0.01 1.1,-0.72 1.6,-1.9l0 0zm3.02 -6.66c0,-0.06 0.52,-2.01 0,-2.07 -0.36,-0.04 -0.01,2.02 0,2.07z\" />\n </svg>\n\n <svg *ngIf=\"fileType == 'DWG'\" version=\"1.0\" xmlns=\"http://www.w3.org/2000/svg\" width=\"512.000000pt\" height=\"512.000000pt\"\n viewBox=\"0 0 512.000000 512.000000\" preserveAspectRatio=\"xMidYMid meet\">\n <g transform=\"translate(0.000000,512.000000) scale(0.100000,-0.100000)\" fill=\"#4a5568\" stroke=\"none\">\n <path\n d=\"M830 5104 c-42 -18 -86 -58 -108 -99 -15 -27 -17 -109 -20 -871 l-3 -842 -92 -4 c-112 -5 -179 -32 -235 -92 -81 -88 -77 -39 -77 -946 0 -801 0 -805 21 -851 54 -116 140 -169 291 -177 l92 -5 3 -536 c3 -588 1 -562 65 -623 65 -62 -61 -58 1793 -58 1854 0 1728 -4 1793 58 64 61 62 35 65 623 l3 536 92 5 c151 8 237 61 291 177 21 46 21 50 21 851 0 907 4 858 -77 946 -56 60 -123 87 -235 92 l-93 4 -1 302 c-1 165 -4 312 -8 326 -8 30 -994 1160 -1033 1184 -24 15 -138 16 -1270 16 -1088 -1 -1247 -3 -1278 -16z m2400 -714 l0 -530 29 -32 29 -33 466 -3 466 -3 0 -249 0 -250 -1660 0 -1660 0 0 815 0 815 1165 0 1165 0 0 -530z m1093 -1516 c87 -16 127 -32 127 -48 -1 -17 -48 -197 -54 -203 -2 -3 -27 2 -54 11 -131 44 -323 40 -429 -9 -72 -33 -146 -110 -174 -182 -27 -72 -36 -204 -19 -282 26 -120 110 -221 217 -261 70 -26 193 -36 251 -21 l42 12 0 124 0 125 -95 0 -95 0 0 110 0 110 230 0 230 0 0 -320 0 -320 -27 -11 c-16 -6 -71 -20 -123 -32 -129 -29 -401 -31 -500 -4 -116 33 -189 74 -266 151 -114 114 -164 244 -164 426 0 265 115 460 331 563 52 25 117 50 144 57 122 30 283 31 428 4z m-3042 -12 c304 -82 457 -320 419 -653 -35 -312 -215 -491 -545 -544 -94 -16 -317 -20 -448 -9 l-77 7 0 602 0 603 83 10 c45 6 174 9 287 7 170 -2 218 -6 281 -23z m808 -34 c16 -81 96 -524 127 -705 15 -90 29 -161 31 -160 2 2 14 66 28 143 20 116 101 518 145 722 l12 52 147 0 147 0 28 -147 c67 -356 104 -564 116 -648 13 -92 29 -144 30 -95 0 42 47 310 107 608 l56 282 138 0 c77 0 139 -3 139 -7 0 -5 -217 -853 -301 -1175 l-10 -38 -149 0 c-133 0 -149 2 -154 18 -13 44 -127 653 -141 759 -9 65 -18 119 -19 120 -1 2 -12 -55 -24 -125 -13 -70 -55 -272 -94 -449 l-71 -323 -152 0 -151 0 -142 598 c-78 328 -142 603 -142 610 0 9 36 12 144 12 l145 0 10 -52z m2131 -2088 l0 -480 -1660 0 -1660 0 0 480 0 480 1660 0 1660 0 0 -480z\" />\n\n <path\n d=\"M923 2673 l-23 -4 0 -399 0 -399 43 -6 c60 -9 200 12 261 39 140 63 212 207 204 411 -3 86 -8 109 -34 165 -51 108 -128 167 -249 189 -57 11 -157 13 -202 4z\" />\n </g>\n </svg>\n </div>\n</div>\n\n<ngx-dropzone-remove-badge *ngIf=\"removable\" (click)=\"_remove($event)\" style=\"top: -15px !important;\">\n</ngx-dropzone-remove-badge>", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.NgxDropzoneRemoveBadgeComponent, selector: "ngx-dropzone-remove-badge" }] });
|
|
45
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
45
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CustomDropzonePreviewComponent, decorators: [{
|
|
46
46
|
type: Component,
|
|
47
47
|
args: [{ selector: 'custom-dropzone-preview', providers: [
|
|
48
48
|
{
|
|
@@ -39,9 +39,9 @@ export class NgtDropzoneFileViewerComponent {
|
|
|
39
39
|
file.click();
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
|
-
NgtDropzoneFileViewerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
43
|
-
NgtDropzoneFileViewerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.
|
|
44
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
42
|
+
NgtDropzoneFileViewerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgtDropzoneFileViewerComponent, deps: [{ token: i1.NgtTranslateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
43
|
+
NgtDropzoneFileViewerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: NgtDropzoneFileViewerComponent, selector: "ngt-dropzone-file-viewer", inputs: { url: "url", fileName: "fileName", fileSize: "fileSize", disableContent: "disableContent", canDownloadFile: "canDownloadFile" }, outputs: { onClose: "onClose" }, host: { listeners: { "window:keydown": "keyEvent($event)" } }, viewQueries: [{ propertyName: "eloverdeDocViewer", first: true, predicate: EloverdeDocViewerComponent, descendants: true }], ngImport: i0, template: "<div style=\"width:100%; height: 100%;\">\n <div style=\"width:100%; height: 100%;\">\n <div class=\"w-full py-5 pr-10\">\n <div class=\"w-full flex justify-end text-2xl\">\n <div *ngIf=\"canDownloadFile\" class=\"cursor-pointer\" (click)=\"downloadFile()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\">\n <path fill=\"#fff\" d=\"M13 8V2H7v6H2l8 8 8-8h-5zM0 18h20v2H0v-2z\" />\n </svg>\n </div>\n\n \n\n <div class=\"cursor-pointer\" (click)=\"close()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path fill=\"#fff\"\n d=\"M24 2.42l-2.42 -2.42 -9.58 9.58 -9.58 -9.58 -2.42 2.42 9.58 9.58 -9.58 9.58 2.42 2.42 9.58 -9.58 9.58 9.58 2.42 -2.42 -9.58 -9.58 9.58 -9.58z\" />\n </svg>\n </div>\n\n </div>\n\n <div class=\"w-full justify-center text-center text-2xl font-mono text-white\">\n {{ fileName }}\n </div>\n </div>\n\n <div *ngIf=\"fileSize > maxFileSize\" class=\"flex w-full h-full justify-center items-center\">\n <div class=\"flex flex-col w-auto bg-gray-700 rounded-lg p-6\" style=\"max-width: 80%;\">\n <p class=\"text-white font-medium text-center w-full\">\n {{\n canDownloadFile\n ? ngtTranslateService.ngtFileTooLargeForPreview\n : ngtTranslateService.ngtFileTooLargeForPreviewNoDownloadPermission\n }}\n </p>\n\n <div *ngIf=\"canDownloadFile\" class=\"cursor-pointer mt-5 text-2xl self-center border rounded p-2\"\n (click)=\"downloadFile()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\">\n <path fill=\"#fff\" d=\"M13 8V2H7v6H2l8 8 8-8h-5zM0 18h20v2H0v-2z\" />\n </svg>\n </div>\n </div>\n </div>\n\n <div class=\"px-10\" style=\"width:100%; height: 83%;\" *ngIf=\"canShowViewer\">\n <eloverde-doc-viewer class=\"h-full w-full flex justify-center\" [url]=\"url\" [disableContent]=\"disableContent\"\n (loaded)=\"loading = false\" (onClose)=\"handleClose()\">\n </eloverde-doc-viewer>\n </div>\n </div>\n</div>\n\n<div *ngIf=\"loading\" class=\"flex fixed inset-0 justify-center items-center w-full h-full cursor-wait z-50\">\n <div class=\"div-loader\"></div>\n</div>", styles: [":host{background:rgba(0,0,0,.5);color:#fff;position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:10000000}.div-loader{width:5rem;height:5rem;border:5px solid #89C43F38;border-top-color:#89c43f;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.EloverdeDocViewerComponent, selector: "eloverde-doc-viewer", inputs: ["url", "queryParams", "viewerUrl", "googleCheckInterval", "googleMaxChecks", "disableContent", "googleCheckContentLoaded", "viewer", "overrideLocalhost"], outputs: ["loaded", "onClose"] }] });
|
|
44
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgtDropzoneFileViewerComponent, decorators: [{
|
|
45
45
|
type: Component,
|
|
46
46
|
args: [{ selector: 'ngt-dropzone-file-viewer', template: "<div style=\"width:100%; height: 100%;\">\n <div style=\"width:100%; height: 100%;\">\n <div class=\"w-full py-5 pr-10\">\n <div class=\"w-full flex justify-end text-2xl\">\n <div *ngIf=\"canDownloadFile\" class=\"cursor-pointer\" (click)=\"downloadFile()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\">\n <path fill=\"#fff\" d=\"M13 8V2H7v6H2l8 8 8-8h-5zM0 18h20v2H0v-2z\" />\n </svg>\n </div>\n\n \n\n <div class=\"cursor-pointer\" (click)=\"close()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path fill=\"#fff\"\n d=\"M24 2.42l-2.42 -2.42 -9.58 9.58 -9.58 -9.58 -2.42 2.42 9.58 9.58 -9.58 9.58 2.42 2.42 9.58 -9.58 9.58 9.58 2.42 -2.42 -9.58 -9.58 9.58 -9.58z\" />\n </svg>\n </div>\n\n </div>\n\n <div class=\"w-full justify-center text-center text-2xl font-mono text-white\">\n {{ fileName }}\n </div>\n </div>\n\n <div *ngIf=\"fileSize > maxFileSize\" class=\"flex w-full h-full justify-center items-center\">\n <div class=\"flex flex-col w-auto bg-gray-700 rounded-lg p-6\" style=\"max-width: 80%;\">\n <p class=\"text-white font-medium text-center w-full\">\n {{\n canDownloadFile\n ? ngtTranslateService.ngtFileTooLargeForPreview\n : ngtTranslateService.ngtFileTooLargeForPreviewNoDownloadPermission\n }}\n </p>\n\n <div *ngIf=\"canDownloadFile\" class=\"cursor-pointer mt-5 text-2xl self-center border rounded p-2\"\n (click)=\"downloadFile()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\">\n <path fill=\"#fff\" d=\"M13 8V2H7v6H2l8 8 8-8h-5zM0 18h20v2H0v-2z\" />\n </svg>\n </div>\n </div>\n </div>\n\n <div class=\"px-10\" style=\"width:100%; height: 83%;\" *ngIf=\"canShowViewer\">\n <eloverde-doc-viewer class=\"h-full w-full flex justify-center\" [url]=\"url\" [disableContent]=\"disableContent\"\n (loaded)=\"loading = false\" (onClose)=\"handleClose()\">\n </eloverde-doc-viewer>\n </div>\n </div>\n</div>\n\n<div *ngIf=\"loading\" class=\"flex fixed inset-0 justify-center items-center w-full h-full cursor-wait z-50\">\n <div class=\"div-loader\"></div>\n</div>", styles: [":host{background:rgba(0,0,0,.5);color:#fff;position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:10000000}.div-loader{width:5rem;height:5rem;border:5px solid #89C43F38;border-top-color:#89c43f;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}\n"] }]
|
|
47
47
|
}], ctorParameters: function () { return [{ type: i1.NgtTranslateService }]; }, propDecorators: { eloverdeDocViewer: [{
|
|
@@ -73,9 +73,9 @@ export class NgtDropzoneViewComponent {
|
|
|
73
73
|
return !this.isImage(resource) && !this.isAudio(resource) && !this.isVideo(resource);
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
|
-
NgtDropzoneViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
77
|
-
NgtDropzoneViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.
|
|
78
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
76
|
+
NgtDropzoneViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgtDropzoneViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
77
|
+
NgtDropzoneViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: NgtDropzoneViewComponent, selector: "ngt-dropzone-view", inputs: { resources: "resources", dropzoneHeight: "dropzoneHeight", loading: "loading", placeholder: "placeholder" }, outputs: { onImageClick: "onImageClick", onFileClick: "onFileClick" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"border-2 border-dotted border-gray-400 rounded p-2 flex items-center overflow-x-auto\"\n [ngStyle]=\"{ 'height': dropzoneHeight }\">\n <div *ngIf=\"loading\" class=\"flex absolute justify-center items-center w-full h-full cursor-wait z-10\">\n <div class=\"div-loader\"></div>\n </div>\n\n <div [class]=\"loading ? 'hidden' : 'flex items-center'\">\n <ng-container *ngIf=\"images?.length\">\n <div class=\"flex py-5\">\n <div *ngFor=\"let image of images; let index = index\" class=\"w-48 mr-8\">\n <div class=\"flex flex-col w-48 mx-4 cursor-pointer\"\n title=\"{{ image.name || '' }} ({{ getFormattedFileSize(image) }})\"\n (click)=\"handleImageClick(index)\">\n <img [src]=\"image.thumbnailUrl\" [alt]=\"image.name\" class=\"w-full h-32\">\n\n <p class=\"w-full truncate text-gray-500 text-center text-sm font-mono\">\n {{ image.name || '' }}\n </p>\n </div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"audios?.length\">\n <ng-container *ngFor=\"let audio of audios\">\n <div class=\"flex flex-col w-48 mx-4 py-5\">\n <audio controls>\n <source [src]=\"audio.previewUrl\">\n </audio>\n\n <p class=\"w-full truncate text-gray-500 text-center text-sm font-mono\">\n {{ audio.name || '' }}\n </p>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"videos?.length\">\n <ng-container *ngFor=\"let video of videos\">\n <div class=\"flex flex-col w-48 mx-4 py-5\">\n <video width=\"240\" controls>\n <source [src]=\"video.previewUrl\">\n </video>\n\n <p class=\"w-full truncate text-gray-500 text-center text-sm font-mono\">\n {{ video.name || '' }}\n </p>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"files?.length\">\n <ng-container *ngFor=\"let file of files\">\n <div class=\"flex flex-col w-48 mr-6 cursor-pointer\"\n (click)=\"handleFileClick(file.previewUrl, file.name, file.fileSize)\">\n <div class=\"w-full flex justify-center border-2 rounded py-4 text-6xl\">\n <svg *ngIf=\"getFileType(file) == ngtDropzoneViewFileTypeEnum.OTHER\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path class=\"heroicon-ui\" fill=\"#4a5568\"\n d=\"M6 2h9a1 1 0 0 1 .7.3l4 4a1 1 0 0 1 .3.7v13a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4c0-1.1.9-2 2-2zm9 2.41V7h2.59L15 4.41zM18 9h-3a2 2 0 0 1-2-2V4H6v16h12V9zm-2 7a1 1 0 0 1-1 1H9a1 1 0 0 1 0-2h6a1 1 0 0 1 1 1zm0-4a1 1 0 0 1-1 1H9a1 1 0 0 1 0-2h6a1 1 0 0 1 1 1zm-5-4a1 1 0 0 1-1 1H9a1 1 0 1 1 0-2h1a1 1 0 0 1 1 1z\" />\n </svg>\n\n <svg *ngIf=\"getFileType(file) == ngtDropzoneViewFileTypeEnum.DOC\" fill=\"#4a5568\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n d=\"M14.4 0l-9.6 0c-1.33,0 -2.4,1.08 -2.4,2.4l0 19.2c0,1.33 1.07,2.4 2.4,2.4l14.4 0c1.33,0 2.4,-1.07 2.4,-2.4l0 -14.4 -7.2 -7.2 0 0zm4.8 21.6l-14.4 0 0 -19.2 8.4 0 0 6 6 0 0 13.2 0 0zm-0.78 -12l-2.52 10.8 -1.68 0 -2.16 -8.15 -2.16 8.15 -1.68 0 -2.64 -10.8 1.8 0 1.68 8.17 2.16 -8.17 1.56 0 2.16 8.17 1.68 -8.17 1.8 0z\" />\n </svg>\n\n <svg *ngIf=\"getFileType(file) == ngtDropzoneViewFileTypeEnum.XLS\" fill=\"#4a5568\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n d=\"M14.4 0l-9.6 0c-1.33,0 -2.4,1.08 -2.4,2.4l0 19.2c0,1.33 1.07,2.4 2.4,2.4l14.4 0c1.33,0 2.4,-1.07 2.4,-2.4l0 -14.4 -7.2 -7.2 0 0zm4.8 21.6l-14.4 0 0 -19.2 8.4 0 0 6 6 0 0 13.2 0 0zm-6.12 -6.6l3.48 5.4 -2.16 0 -2.4 -4.08 -2.4 4.08 -2.16 0 3.48 -5.4 -3.48 -5.4 2.16 0 2.4 4.08 2.4 -4.08 2.16 0 -3.48 5.4z\" />\n </svg>\n\n <svg *ngIf=\"getFileType(file) == ngtDropzoneViewFileTypeEnum.PDF\" fill=\"#4a5568\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n d=\"M14.4 0l7.2 7.2 0 14.4c0,1.32 -1.08,2.4 -2.4,2.4l-14.4 0c-1.32,0 -2.4,-1.08 -2.4,-2.4l0 -19.2c0,-1.32 1.08,-2.4 2.4,-2.4l9.6 0 0 0zm4.8 21.6l0 -13.2 -6 0 0 -6 -8.4 0 0 19.2 14.4 0 0 0zm-8.5 -9.23c-0.28,-0.92 -0.92,-3.87 0.76,-3.92 1.68,-0.05 0.58,3.74 0.58,3.74 0.46,1.79 2.42,3.07 2.42,3.07 0.6,-0.18 4.02,-0.57 3.54,1.21 -0.52,1.77 -4.2,0.1 -4.2,0.1 -2.34,0.17 -4.09,0.8 -4.09,0.8 -1.36,2.53 -2.94,3.63 -3.59,2.56 -0.8,-1.33 2.56,-3.04 2.56,-3.04 1.74,-2.83 2,-4.47 2.02,-4.52l0 0zm0.78 1.01c-0.48,1.56 -1.44,3.23 -1.44,3.23 1.02,-0.41 3.26,-0.88 3.26,-0.88 -1.37,-1.2 -1.79,-2.34 -1.82,-2.35l0 0zm3.77 2.6c0,0 2.1,0.79 2.15,0.47 0.08,-0.32 -1.6,-0.61 -2.15,-0.47l0 0zm-6.79 1.79c-0.93,0.36 -1.81,1.9 -1.6,1.9 0.22,0.01 1.1,-0.72 1.6,-1.9l0 0zm3.02 -6.66c0,-0.06 0.52,-2.01 0,-2.07 -0.36,-0.04 -0.01,2.02 0,2.07z\" />\n </svg>\n </div>\n\n <p class=\"w-full truncate text-gray-500 text-center text-sm font-mono\">\n {{ file.name || '' }}\n </p>\n </div>\n </ng-container>\n </ng-container>\n </div>\n\n <div *ngIf=\"!loading && !resources?.length\" class=\"px-2 text-center w-full\">\n {{ placeholder }}\n </div>\n</div>", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
78
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgtDropzoneViewComponent, decorators: [{
|
|
79
79
|
type: Component,
|
|
80
80
|
args: [{ selector: 'ngt-dropzone-view', encapsulation: ViewEncapsulation.None, template: "<div class=\"border-2 border-dotted border-gray-400 rounded p-2 flex items-center overflow-x-auto\"\n [ngStyle]=\"{ 'height': dropzoneHeight }\">\n <div *ngIf=\"loading\" class=\"flex absolute justify-center items-center w-full h-full cursor-wait z-10\">\n <div class=\"div-loader\"></div>\n </div>\n\n <div [class]=\"loading ? 'hidden' : 'flex items-center'\">\n <ng-container *ngIf=\"images?.length\">\n <div class=\"flex py-5\">\n <div *ngFor=\"let image of images; let index = index\" class=\"w-48 mr-8\">\n <div class=\"flex flex-col w-48 mx-4 cursor-pointer\"\n title=\"{{ image.name || '' }} ({{ getFormattedFileSize(image) }})\"\n (click)=\"handleImageClick(index)\">\n <img [src]=\"image.thumbnailUrl\" [alt]=\"image.name\" class=\"w-full h-32\">\n\n <p class=\"w-full truncate text-gray-500 text-center text-sm font-mono\">\n {{ image.name || '' }}\n </p>\n </div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"audios?.length\">\n <ng-container *ngFor=\"let audio of audios\">\n <div class=\"flex flex-col w-48 mx-4 py-5\">\n <audio controls>\n <source [src]=\"audio.previewUrl\">\n </audio>\n\n <p class=\"w-full truncate text-gray-500 text-center text-sm font-mono\">\n {{ audio.name || '' }}\n </p>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"videos?.length\">\n <ng-container *ngFor=\"let video of videos\">\n <div class=\"flex flex-col w-48 mx-4 py-5\">\n <video width=\"240\" controls>\n <source [src]=\"video.previewUrl\">\n </video>\n\n <p class=\"w-full truncate text-gray-500 text-center text-sm font-mono\">\n {{ video.name || '' }}\n </p>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"files?.length\">\n <ng-container *ngFor=\"let file of files\">\n <div class=\"flex flex-col w-48 mr-6 cursor-pointer\"\n (click)=\"handleFileClick(file.previewUrl, file.name, file.fileSize)\">\n <div class=\"w-full flex justify-center border-2 rounded py-4 text-6xl\">\n <svg *ngIf=\"getFileType(file) == ngtDropzoneViewFileTypeEnum.OTHER\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path class=\"heroicon-ui\" fill=\"#4a5568\"\n d=\"M6 2h9a1 1 0 0 1 .7.3l4 4a1 1 0 0 1 .3.7v13a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4c0-1.1.9-2 2-2zm9 2.41V7h2.59L15 4.41zM18 9h-3a2 2 0 0 1-2-2V4H6v16h12V9zm-2 7a1 1 0 0 1-1 1H9a1 1 0 0 1 0-2h6a1 1 0 0 1 1 1zm0-4a1 1 0 0 1-1 1H9a1 1 0 0 1 0-2h6a1 1 0 0 1 1 1zm-5-4a1 1 0 0 1-1 1H9a1 1 0 1 1 0-2h1a1 1 0 0 1 1 1z\" />\n </svg>\n\n <svg *ngIf=\"getFileType(file) == ngtDropzoneViewFileTypeEnum.DOC\" fill=\"#4a5568\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n d=\"M14.4 0l-9.6 0c-1.33,0 -2.4,1.08 -2.4,2.4l0 19.2c0,1.33 1.07,2.4 2.4,2.4l14.4 0c1.33,0 2.4,-1.07 2.4,-2.4l0 -14.4 -7.2 -7.2 0 0zm4.8 21.6l-14.4 0 0 -19.2 8.4 0 0 6 6 0 0 13.2 0 0zm-0.78 -12l-2.52 10.8 -1.68 0 -2.16 -8.15 -2.16 8.15 -1.68 0 -2.64 -10.8 1.8 0 1.68 8.17 2.16 -8.17 1.56 0 2.16 8.17 1.68 -8.17 1.8 0z\" />\n </svg>\n\n <svg *ngIf=\"getFileType(file) == ngtDropzoneViewFileTypeEnum.XLS\" fill=\"#4a5568\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n d=\"M14.4 0l-9.6 0c-1.33,0 -2.4,1.08 -2.4,2.4l0 19.2c0,1.33 1.07,2.4 2.4,2.4l14.4 0c1.33,0 2.4,-1.07 2.4,-2.4l0 -14.4 -7.2 -7.2 0 0zm4.8 21.6l-14.4 0 0 -19.2 8.4 0 0 6 6 0 0 13.2 0 0zm-6.12 -6.6l3.48 5.4 -2.16 0 -2.4 -4.08 -2.4 4.08 -2.16 0 3.48 -5.4 -3.48 -5.4 2.16 0 2.4 4.08 2.4 -4.08 2.16 0 -3.48 5.4z\" />\n </svg>\n\n <svg *ngIf=\"getFileType(file) == ngtDropzoneViewFileTypeEnum.PDF\" fill=\"#4a5568\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n d=\"M14.4 0l7.2 7.2 0 14.4c0,1.32 -1.08,2.4 -2.4,2.4l-14.4 0c-1.32,0 -2.4,-1.08 -2.4,-2.4l0 -19.2c0,-1.32 1.08,-2.4 2.4,-2.4l9.6 0 0 0zm4.8 21.6l0 -13.2 -6 0 0 -6 -8.4 0 0 19.2 14.4 0 0 0zm-8.5 -9.23c-0.28,-0.92 -0.92,-3.87 0.76,-3.92 1.68,-0.05 0.58,3.74 0.58,3.74 0.46,1.79 2.42,3.07 2.42,3.07 0.6,-0.18 4.02,-0.57 3.54,1.21 -0.52,1.77 -4.2,0.1 -4.2,0.1 -2.34,0.17 -4.09,0.8 -4.09,0.8 -1.36,2.53 -2.94,3.63 -3.59,2.56 -0.8,-1.33 2.56,-3.04 2.56,-3.04 1.74,-2.83 2,-4.47 2.02,-4.52l0 0zm0.78 1.01c-0.48,1.56 -1.44,3.23 -1.44,3.23 1.02,-0.41 3.26,-0.88 3.26,-0.88 -1.37,-1.2 -1.79,-2.34 -1.82,-2.35l0 0zm3.77 2.6c0,0 2.1,0.79 2.15,0.47 0.08,-0.32 -1.6,-0.61 -2.15,-0.47l0 0zm-6.79 1.79c-0.93,0.36 -1.81,1.9 -1.6,1.9 0.22,0.01 1.1,-0.72 1.6,-1.9l0 0zm3.02 -6.66c0,-0.06 0.52,-2.01 0,-2.07 -0.36,-0.04 -0.01,2.02 0,2.07z\" />\n </svg>\n </div>\n\n <p class=\"w-full truncate text-gray-500 text-center text-sm font-mono\">\n {{ file.name || '' }}\n </p>\n </div>\n </ng-container>\n </ng-container>\n </div>\n\n <div *ngIf=\"!loading && !resources?.length\" class=\"px-2 text-center w-full\">\n {{ placeholder }}\n </div>\n</div>" }]
|
|
81
81
|
}], propDecorators: { resources: [{
|
|
@@ -233,11 +233,12 @@ export class NgtDropzoneComponent extends NgtBaseNgModel {
|
|
|
233
233
|
if (attachments && attachments.length && attachments[0]) {
|
|
234
234
|
let temporaryResource = [];
|
|
235
235
|
let observables = [];
|
|
236
|
-
attachments.forEach(attachment => {
|
|
236
|
+
attachments.forEach((attachment) => {
|
|
237
237
|
if (!(attachment instanceof File) && !attachment.loaded) {
|
|
238
238
|
this.loading = true;
|
|
239
239
|
attachment['loaded'] = true;
|
|
240
|
-
observables.push(this.ngtAttachmentHttpService.
|
|
240
|
+
observables.push(this.ngtAttachmentHttpService.preview(attachment)
|
|
241
|
+
.pipe(map((response) => {
|
|
241
242
|
temporaryResource.push({
|
|
242
243
|
id: response.data.getApiId(),
|
|
243
244
|
file: response.data.getAttribute('file')
|
|
@@ -371,13 +372,13 @@ export class NgtDropzoneComponent extends NgtBaseNgModel {
|
|
|
371
372
|
this.subscriptions = [];
|
|
372
373
|
}
|
|
373
374
|
}
|
|
374
|
-
NgtDropzoneComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
375
|
-
NgtDropzoneComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.
|
|
375
|
+
NgtDropzoneComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgtDropzoneComponent, deps: [{ token: i1.ControlContainer, host: true, optional: true }, { token: i2.NgtAttachmentHttpService, optional: true, skipSelf: true }, { token: i0.Injector }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
376
|
+
NgtDropzoneComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: NgtDropzoneComponent, selector: "ngt-dropzone", inputs: { label: "label", placeholder: "placeholder", helpTextColor: "helpTextColor", helpText: "helpText", helpTitle: "helpTitle", resources: "resources", multipleSelection: "multipleSelection", itemsLimit: "itemsLimit", showFileName: "showFileName", disableClick: "disableClick", disabled: "disabled", viewMode: "viewMode", removable: "removable", canDownloadFile: "canDownloadFile", verticalExpandable: "verticalExpandable", isRequired: "isRequired", hideNgxDropzone: "hideNgxDropzone", acceptedFiles: "acceptedFiles", unacceptedFiles: "unacceptedFiles", maxFileSize: "maxFileSize", previewType: "previewType", name: "name", remoteResource: "remoteResource" }, outputs: { onFileSelected: "onFileSelected", onFileSelectError: "onFileSelectError", onFileUploadFail: "onFileUploadFail", onFileRemoved: "onFileRemoved", onFileUploadInit: "onFileUploadInit", onFileUploaded: "onFileUploaded", onFilePreviewLoaded: "onFilePreviewLoaded" }, providers: [
|
|
376
377
|
NgtMakeProvider(NgtDropzoneComponent),
|
|
377
378
|
], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "ngxDropzone", first: true, predicate: NgxDropzoneComponent, descendants: true, static: true }, { propertyName: "ngtDropzoneFileViewer", first: true, predicate: NgtDropzoneFileViewerComponent, descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"flex flex-col h-full w-full\" #container>\n <label *ngIf=\"label\" class=\"flex mb-2 text-sm\">\n {{ label }}:\n\n <span class=\"text-red-500 font-bold text-md ml-1\" *ngIf=\"isRequired\">*</span>\n\n <ngt-helper *ngIf=\"helpText\" [helpTitle]=\"helpTitle\" [iconColor]=\"helpTextColor\" class=\"ml-1\">\n {{ helpText }}\n </ngt-helper>\n </label>\n\n <div *ngIf=\"!viewMode\" class=\"h-full w-full relative\">\n <div *ngIf=\"loading && !hideNgxDropzone\"\n class=\"flex absolute justify-center items-center w-full h-full cursor-wait z-10\">\n <div class=\"div-loader\"></div>\n </div>\n\n <ngx-dropzone [id]=\"ngxElementId\" [multiple]='multipleSelection' [maxFileSize]='maxFileSize'\n (change)='onSelect($event)' [class.single-attachment]='itemsLimit == 1' [accept]='acceptedFiles'\n [disabled]='disabled || loading' [expandable]='verticalExpandable'\n [disableClick]='disableClick || forceDisableClick' [ngStyle]=\"{ 'height': dropzoneHeight }\"\n [ngClass]=\"{ 'hidden':hideNgxDropzone }\" #ngxDropzone>\n <ng-container *ngIf=\"!loading\">\n <ngx-dropzone-label *ngIf=\"!uploadedResources?.length\" class=\"px-2\">\n {{ placeholder }}\n </ngx-dropzone-label>\n\n <ng-container *ngFor=\"let resource of uploadedResources; let index = index\">\n <div class=\"flex flex-col w-48 mx-4\"\n title=\"{{ resource?.file?.name || '' }} ({{ getFormattedFileSize(resource) }})\">\n <custom-dropzone-preview *ngIf=\"previewType == 'DEFAULT' && isFile(resource)\"\n [file]='resource.file' [removable]=\"removable\" (removed)=\"onRemove(resource)\"\n (click)=\"onFileClick(resource.file.url, resource.file.name, resource.file.size)\"\n ngProjectAs=\"ngx-dropzone-preview\">\n </custom-dropzone-preview>\n\n <div *ngIf=\"isImage(resource)\" class=\"cursor-pointer\" (click)=\"imagePreview(index)\" #gallery>\n <ngx-dropzone-image-preview class=\"image-preview-default-class\" [file]=\"resource.file\"\n [removable]=\"removable\" (removed)=\"onRemove(resource)\">\n </ngx-dropzone-image-preview>\n </div>\n\n <ngx-dropzone-video-preview *ngIf=\"isVideo(resource) || isAudio(resource)\"\n [file]=\"resource.file\" [removable]=\"removable\" (removed)=\"onRemove(resource)\">\n </ngx-dropzone-video-preview>\n\n <p *ngIf=\"showFileName\"\n class=\"w-full truncate text-gray-500 text-center text-sm font-mono mt-2\">\n {{ resource?.file?.name || '' }}\n </p>\n </div>\n </ng-container>\n </ng-container>\n </ngx-dropzone>\n </div>\n\n <ngt-dropzone-view *ngIf=\"viewMode\" class=\"h-full w-full\" [resources]=\"resources\" [loading]=\"loading\"\n [placeholder]=\"placeholder\" [dropzoneHeight]=\"dropzoneHeight\"\n (onFileClick)=\"onFileClick($event.previewUrl, $event.name, $event.fileSize)\"\n (onImageClick)=\"onImageClick($event.div, $event.index)\">\n </ngt-dropzone-view>\n\n <ngt-dropzone-file-viewer [hidden]=\"!showNgtDropzoneFileViewer\" (onClose)=\"forceDisableClick = false\"\n [canDownloadFile]=\"canDownloadFile\" [disableContent]=\"canDownloadFile ? 'none' : 'popout'\">\n </ngt-dropzone-file-viewer>\n\n <input *ngIf='componentReady' type=\"hidden\" [ngModel]=\"value\" [name]=\"name\" [value]=\"value\">\n <ngt-validation [control]=\"formControl\" [container]=\"formContainer\"></ngt-validation>\n</div>", styles: [".single-attachment{border:none!important;margin:unset!important;overflow:hidden!important;display:flex!important;justify-content:center!important}.image-preview-default-class{margin:unset!important}custom-dropzone-preview{height:100%!important;min-height:unset!important;margin:unset!important}.div-loader{width:4rem;height:4rem;border:3px solid #a0aec038;border-top-color:#a0aec0;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.NgtValidationComponent, selector: "ngt-validation", inputs: ["control", "container", "minValue", "minLength"] }, { kind: "component", type: i5.NgxDropzoneComponent, selector: "ngx-dropzone, [ngx-dropzone]", inputs: ["accept", "disabled", "multiple", "maxFileSize", "expandable", "disableClick", "id", "aria-label", "aria-labelledby", "aria-describedby"], outputs: ["change"] }, { kind: "directive", type: i5.ɵb, selector: "ngx-dropzone-label" }, { kind: "component", type: i5.NgxDropzoneImagePreviewComponent, selector: "ngx-dropzone-image-preview" }, { kind: "component", type: i5.NgxDropzoneVideoPreviewComponent, selector: "ngx-dropzone-video-preview" }, { kind: "component", type: i6.NgtHelperComponent, selector: "ngt-helper", inputs: ["helpTextColor", "helpText", "helpTitle", "icon", "iconSize", "iconColor", "iconTitle", "tooltipSize", "autoXReverse", "helperReverseYPosition"] }, { kind: "component", type: i7.NgtDropzoneFileViewerComponent, selector: "ngt-dropzone-file-viewer", inputs: ["url", "fileName", "fileSize", "disableContent", "canDownloadFile"], outputs: ["onClose"] }, { kind: "component", type: i8.NgtDropzoneViewComponent, selector: "ngt-dropzone-view", inputs: ["resources", "dropzoneHeight", "loading", "placeholder"], outputs: ["onImageClick", "onFileClick"] }, { kind: "component", type: i9.CustomDropzonePreviewComponent, selector: "custom-dropzone-preview" }], viewProviders: [
|
|
378
379
|
{ provide: ControlContainer, useExisting: NgForm }
|
|
379
380
|
], encapsulation: i0.ViewEncapsulation.None });
|
|
380
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
381
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgtDropzoneComponent, decorators: [{
|
|
381
382
|
type: Component,
|
|
382
383
|
args: [{ selector: 'ngt-dropzone', encapsulation: ViewEncapsulation.None, providers: [
|
|
383
384
|
NgtMakeProvider(NgtDropzoneComponent),
|
|
@@ -462,4 +463,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImpor
|
|
|
462
463
|
}], onFilePreviewLoaded: [{
|
|
463
464
|
type: Output
|
|
464
465
|
}] } });
|
|
465
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LWRyb3B6b25lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXRhaWx3aW5kL3NyYy9jb21wb25lbnRzL25ndC1kcm9wem9uZS9uZ3QtZHJvcHpvbmUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LWRyb3B6b25lL25ndC1kcm9wem9uZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0gsU0FBUyxFQUVULFlBQVksRUFDWixJQUFJLEVBRUosS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBRU4sUUFBUSxFQUNSLFNBQVMsRUFDVCxpQkFBaUIsR0FDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RSxPQUFPLEVBQTBCLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxRQUFRLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLE1BQU0sTUFBTSxVQUFVLENBQUM7QUFFOUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFMUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDNUYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFDL0csT0FBTyxFQUFFLG9CQUFvQixFQUFtQixzQkFBc0Is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QixLQUFLO2dCQUNVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBQ1UsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxTQUFTO3NCQUF4QixLQUFLO2dCQUdVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBQ1UsaUJBQWlCO3NCQUFoQyxLQUFLO2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsWUFBWTtzQkFBM0IsS0FBSztnQkFDVSxZQUFZO3NCQUEzQixLQUFLO2dCQUNVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBQ1UsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxTQUFTO3NCQUF4QixLQUFLO2dCQUNVLGVBQWU7c0JBQTlCLEtBQUs7Z0JBQ1Usa0JBQWtCO3NCQUFqQyxLQUFLO2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsZUFBZTtzQkFBOUIsS0FBSztnQkFDVSxhQUFhO3NCQUE1QixLQUFLO2dCQUNVLGVBQWU7c0JBQTlCLEtBQUs7Z0JBQ1UsV0FBVztzQkFBMUIsS0FBSztnQkFDVSxXQUFXO3NCQUExQixLQUFLO2dCQUNVLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1UsY0FBYztzQkFBN0IsS0FBSztnQkFFVyxjQUFjO3NCQUE5QixNQUFNO2dCQUNVLGlCQUFpQjtzQkFBakMsTUFBTTtnQkFDVSxnQkFBZ0I7c0JBQWhDLE1BQU07Z0JBQ1UsYUFBYTtzQkFBN0IsTUFBTTtnQkFDVSxnQkFBZ0I7c0JBQWhDLE1BQU07Z0JBQ1UsY0FBYztzQkFBOUIsTUFBTTtnQkFDVSxtQkFBbUI7c0JBQW5DLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudENoZWNrZWQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3QsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBTa2lwU2VsZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgTmdGb3JtLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTmd4RHJvcHpvbmVDaGFuZ2VFdmVudCwgTmd4RHJvcHpvbmVDb21wb25lbnQgfSBmcm9tICduZ3gtZHJvcHpvbmUnO1xuaW1wb3J0IHsgZm9ya0pvaW4sIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IFZpZXdlciBmcm9tICd2aWV3ZXJqcyc7XG5cbmltcG9ydCB7IE5ndEJhc2VOZ01vZGVsLCBOZ3RNYWtlUHJvdmlkZXIgfSBmcm9tICcuLi8uLi9iYXNlL25ndC1iYXNlLW5nLW1vZGVsJztcbmltcG9ydCB7IGdldEVudW1Gcm9tU3RyaW5nIH0gZnJvbSAnLi4vLi4vaGVscGVycy9lbnVtL2VudW0nO1xuaW1wb3J0IHsgdXVpZCB9IGZyb20gJy4uLy4uL2hlbHBlcnMvdXVpZCc7XG5pbXBvcnQgeyBOZ3RBdHRhY2htZW50SHR0cFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9odHRwL25ndC1hdHRhY2htZW50LWh0dHAuc2VydmljZSc7XG5pbXBvcnQgeyBOZ3RTdHlsaXphYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25ndC1zdHlsaXphYmxlL25ndC1zdHlsaXphYmxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmd0RHJvcHpvbmVGaWxlVmlld2VyQ29tcG9uZW50IH0gZnJvbSAnLi9uZ3QtZHJvcHpvbmUtZmlsZS12aWV3ZXIvbmd0LWRyb3B6b25lLWZpbGUtdmlld2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ3REcm9wem9uZUVycm9yVHlwZSwgTmd0RHJvcHpvbmVGaWxlLCBOZ3REcm9wem9uZVByZXZpZXdUeXBlIH0gZnJvbSAnLi9uZ3QtZHJvcHpvbmUubWV0YSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0LWRyb3B6b25lJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbmd0LWRyb3B6b25lLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9uZ3QtZHJvcHpvbmUuY29tcG9uZW50LmNzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIE5ndE1ha2VQcm92aWRlcihOZ3REcm9wem9uZUNvbXBvbmVudCksXG4gICAgXSxcbiAgICB2aWV3UHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogQ29udHJvbENvbnRhaW5lciwgdXNlRXhpc3Rpbmc6IE5nRm9ybSB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBOZ3REcm9wem9uZUNvbXBvbmVudCBleHRlbmRzIE5ndEJhc2VOZ01vZGVsIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyQ29udGVudENoZWNrZWQge1xuICAgIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIHB1YmxpYyBjb250YWluZXI6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZChOZ3hEcm9wem9uZUNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSkgcHVibGljIG5neERyb3B6b25lOiBOZ3hEcm9wem9uZUNvbXBvbmVudDtcbiAgICBAVmlld0NoaWxkKE5ndERyb3B6b25lRmlsZVZpZXdlckNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSkgcHVibGljIG5ndERyb3B6b25lRmlsZVZpZXdlcjogTmd0RHJvcHpvbmVGaWxlVmlld2VyQ29tcG9uZW50O1xuXG4gICAgLy8gVmlzdWFsXG4gICAgQElucHV0KCkgcHVibGljIGxhYmVsOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBUZXh0Q29sb3I6IHN0cmluZyA9ICd0ZXh0LWdyZWVuLTUwMCc7XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBUZXh0OiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBUaXRsZTogc3RyaW5nO1xuXG4gICAgLy8gQmVoYXZpb3JcbiAgICBASW5wdXQoKSBwdWJsaWMgcmVzb3VyY2VzOiBBcnJheTxOZ3REcm9wem9uZUZpbGU+ID0gW107XG4gICAgQElucHV0KCkgcHVibGljIG11bHRpcGxlU2VsZWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIGl0ZW1zTGltaXQ6IG51bWJlcjtcbiAgICBASW5wdXQoKSBwdWJsaWMgc2hvd0ZpbGVOYW1lOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIGRpc2FibGVDbGljazogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyB2aWV3TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyByZW1vdmFibGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgY2FuRG93bmxvYWRGaWxlOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgdmVydGljYWxFeHBhbmRhYmxlOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIGlzUmVxdWlyZWQ6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGhpZGVOZ3hEcm9wem9uZTogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwdWJsaWMgYWNjZXB0ZWRGaWxlczogc3RyaW5nID0gJyonIC8qKiBNaW1lIHR5cGUgKi87XG4gICAgQElucHV0KCkgcHVibGljIHVuYWNjZXB0ZWRGaWxlczogc3RyaW5nOyAvKiogTWltZSB0eXBlICovO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBtYXhGaWxlU2l6ZTogbnVtYmVyOyAvKiogQnl0ZXMgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgcHJldmlld1R5cGU6IE5ndERyb3B6b25lUHJldmlld1R5cGUgPSBOZ3REcm9wem9uZVByZXZpZXdUeXBlLkRFRkFVTFQ7XG4gICAgQElucHV0KCkgcHVibGljIG5hbWU6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgcmVtb3RlUmVzb3VyY2U6IGFueTtcblxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25GaWxlU2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxOZ3hEcm9wem9uZUNoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uRmlsZVNlbGVjdEVycm9yOiBFdmVudEVtaXR0ZXI8Tmd0RHJvcHpvbmVFcnJvclR5cGU+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25GaWxlVXBsb2FkRmFpbDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbkZpbGVSZW1vdmVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25GaWxlVXBsb2FkSW5pdCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uRmlsZVVwbG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25GaWxlUHJldmlld0xvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIHB1YmxpYyBkcm9wem9uZUhlaWdodDogc3RyaW5nID0gJzE4MHB4JztcbiAgICBwdWJsaWMgdXBsb2FkZWRSZXNvdXJjZXMgPSBbXTtcbiAgICBwdWJsaWMgZm9yY2VEaXNhYmxlQ2xpY2s6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgbmF0aXZlVmFsdWUgPSBbXTtcbiAgICBwdWJsaWMgc2hvd05ndERyb3B6b25lRmlsZVZpZXdlcjogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBjb21wb25lbnRSZWFkeSA9IGZhbHNlO1xuICAgIHB1YmxpYyBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIG5ndERyb3B6b25lTG9hZGVyU3R5bGU6IE5ndFN0eWxpemFibGVTZXJ2aWNlO1xuICAgIHB1YmxpYyBuZ3hFbGVtZW50SWQ6IHN0cmluZyA9IHV1aWQoKTtcbiAgICBwdWJsaWMgaW1hZ2VWaWV3ZXJPcHRpb25zOiBhbnkgPSB7XG4gICAgICAgIG5hdmJhcjogdHJ1ZSxcbiAgICAgICAgdG9vbGJhcjoge1xuICAgICAgICAgICAgem9vbUluOiB0cnVlLFxuICAgICAgICAgICAgem9vbU91dDogdHJ1ZSxcbiAgICAgICAgICAgIHJlc2V0OiB0cnVlLFxuICAgICAgICAgICAgcm90YXRlTGVmdDogdHJ1ZSxcbiAgICAgICAgICAgIHJvdGF0ZVJpZ2h0OiB0cnVlLFxuICAgICAgICAgICAgcHJldjogdHJ1ZSxcbiAgICAgICAgICAgIG5leHQ6IHRydWUsXG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBBcnJheTxTdWJzY3JpcHRpb24+ID0gW107XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIEBPcHRpb25hbCgpIEBIb3N0KClcbiAgICAgICAgcHVibGljIGZvcm1Db250YWluZXI6IENvbnRyb2xDb250YWluZXIsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpXG4gICAgICAgIHByaXZhdGUgbmd0QXR0YWNobWVudEh0dHBTZXJ2aWNlOiBOZ3RBdHRhY2htZW50SHR0cFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICB0aGlzLm5ndERyb3B6b25lTG9hZGVyU3R5bGUgPSBuZXcgTmd0U3R5bGl6YWJsZVNlcnZpY2UoKTtcblxuICAgICAgICB0aGlzLm5ndERyb3B6b25lTG9hZGVyU3R5bGUubG9hZCh0aGlzLmluamVjdG9yLCAnTmd0RHJvcHpvbmVMb2FkZXInLCB7XG4gICAgICAgICAgICBoOiAnaC04JyxcbiAgICAgICAgICAgIGNvbG9yOiB7XG4gICAgICAgICAgICAgICAgdGV4dDogJ3RleHQtZ3JheS02MDAnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzLnByZXZpZXdUeXBlKSB7XG4gICAgICAgICAgICB0aGlzLnByZXZpZXdUeXBlID0gZ2V0RW51bUZyb21TdHJpbmcoY2hhbmdlcy5wcmV2aWV3VHlwZS5jdXJyZW50VmFsdWUsIE5ndERyb3B6b25lUHJldmlld1R5cGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGFpbmVyICYmIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZHJvcHpvbmVIZWlnaHQgPSBgJHt0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQub2Zmc2V0SGVpZ2h0fXB4YDtcblxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWFkeSA9IHRydWU7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdENvbXBvbmVudCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIDUwMCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3lTdWJzY3JpcHRpb25zKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGltYWdlUHJldmlldyhpbmRleCkge1xuICAgICAgICBjb25zdCBpbWFnZXMgPSB0aGlzLnVwbG9hZGVkUmVzb3VyY2VzLmZpbHRlcigocmVzb3VyY2UpID0+IHRoaXMuaXNJbWFnZShyZXNvdXJjZSkpO1xuICAgICAgICBjb25zdCBpbWFnZXNEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gICAgICAgIGltYWdlcy5mb3JFYWNoKChpbWFnZSkgPT4ge1xuICAgICAgICAgICAgbGV0IGltYWdlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIik7XG5cbiAgICAgICAgICAgIGltYWdlRWxlbWVudC5zcmMgPSBpbWFnZS5maWxlLnVybDtcblxuICAgICAgICAgICAgaW1hZ2VzRGl2LmFwcGVuZENoaWxkKGltYWdlRWxlbWVudCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMub25JbWFnZUNsaWNrKGltYWdlc0RpdiwgaW5kZXgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkltYWdlQ2xpY2soZWxlbWVudCwgaW5kZXg/KSB7XG4gICAgICAgIGlmICghdGhpcy52aWV3TW9kZSkge1xuICAgICAgICAgICAgdGhpcy5mb3JjZURpc2FibGVDbGljayA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZ3REcm9wem9uZUNvbXBvbmVudCA9IHRoaXM7XG5cbiAgICAgICAgaWYgKGluZGV4ICE9PSBudWxsICYmIGluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VWaWV3ZXJPcHRpb25zID0geyAuLi50aGlzLmltYWdlVmlld2VyT3B0aW9ucywgLi4ueyBpbml0aWFsVmlld0luZGV4OiBpbmRleCB9IH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2aWV3ZXIgPSBuZXcgVmlld2VyKGVsZW1lbnQsIHtcbiAgICAgICAgICAgIC4uLnRoaXMuaW1hZ2VWaWV3ZXJPcHRpb25zLCAuLi57XG4gICAgICAgICAgICAgICAgaGlkZGVuKCkge1xuICAgICAgICAgICAgICAgICAgICBuZ3REcm9wem9uZUNvbXBvbmVudC5mb3JjZURpc2FibGVDbGljayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB2aWV3ZXIuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmlld2VyLnNob3coKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25GaWxlQ2xpY2sodXJsOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgc2l6ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuZm9yY2VEaXNhYmxlQ2xpY2sgPSB0cnVlO1xuICAgICAgICB0aGlzLnNob3dOZ3REcm9wem9uZUZpbGVWaWV3ZXIgPSB0cnVlO1xuICAgICAgICB0aGlzLm5ndERyb3B6b25lRmlsZVZpZXdlci51cmwgPSB1cmw7XG4gICAgICAgIHRoaXMubmd0RHJvcHpvbmVGaWxlVmlld2VyLmZpbGVOYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5uZ3REcm9wem9uZUZpbGVWaWV3ZXIuZmlsZVNpemUgPSBzaXplO1xuICAgICAgICB0aGlzLm5ndERyb3B6b25lRmlsZVZpZXdlci5pbml0KCk7XG5cbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5uZ3REcm9wem9uZUZpbGVWaWV3ZXIub25DbG9zZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93Tmd0RHJvcHpvbmVGaWxlVmlld2VyID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmZvcmNlRGlzYWJsZUNsaWNrID0gZmFsc2U7XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgb25TZWxlY3QoZXZlbnQ6IE5neERyb3B6b25lQ2hhbmdlRXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LnJlamVjdGVkRmlsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlamVjdGVkRmlsZSBvZiA8YW55PmV2ZW50LnJlamVjdGVkRmlsZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVqZWN0ZWRGaWxlLnJlYXNvbiA9PSAnc2l6ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkZpbGVTZWxlY3RFcnJvci5lbWl0KE5ndERyb3B6b25lRXJyb3JUeXBlLlNJWkUpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlamVjdGVkRmlsZS5yZWFzb24gPT0gJ25vX211bHRpcGxlJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRmlsZVNlbGVjdEVycm9yLmVtaXQoTmd0RHJvcHpvbmVFcnJvclR5cGUuTk9fTVVMVElQTEUpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlamVjdGVkRmlsZS5yZWFzb24gPT0gJ3R5cGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25GaWxlU2VsZWN0RXJyb3IuZW1pdChOZ3REcm9wem9uZUVycm9yVHlwZS5UWVBFKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkZpbGVTZWxlY3RFcnJvci5lbWl0KE5ndERyb3B6b25lRXJyb3JUeXBlLkRFRkFVTFQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pdGVtc0xpbWl0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pdGVtc0xpbWl0ID09IDEgJiYgZXZlbnQuYWRkZWRGaWxlc1xuICAgICAgICAgICAgICAgICYmIGV2ZW50LmFkZGVkRmlsZXMubGVuZ3RoID09IHRoaXMuaXRlbXNMaW1pdCAmJiB0aGlzLnVwbG9hZGVkUmVzb3VyY2VzLmxlbmd0aCA9PSB0aGlzLml0ZW1zTGltaXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZGVkUmVzb3VyY2VzID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChldmVudC5hZGRlZEZpbGVzXG4gICAgICAgICAgICAgICAgJiYgZXZlbnQuYWRkZWRGaWxlcy5sZW5ndGggKyB0aGlzLnVwbG9hZGVkUmVzb3VyY2VzLmxlbmd0aCA8PSB0aGlzLml0ZW1zTGltaXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRmlsZVNlbGVjdGVkLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkRmlsZXMoZXZlbnQuYWRkZWRGaWxlcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMub25GaWxlU2VsZWN0RXJyb3IuZW1pdChOZ3REcm9wem9uZUVycm9yVHlwZS5JVEVNU19MSU1JVCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uRmlsZVNlbGVjdGVkLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgdGhpcy51cGxvYWRGaWxlcyhldmVudC5hZGRlZEZpbGVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyB1cGxvYWRGaWxlcyhmaWxlczogQXJyYXk8RmlsZT4pIHtcbiAgICAgICAgaWYgKGZpbGVzICYmIGZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgdGVtcG9yYXJ5RmlsZXMgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IHRlbXBvcmFyeUF0dGFjaG1lbnRzID0gW107XG4gICAgICAgICAgICBjb25zdCBvYnNlcnZhYmxlcyA9IFtdO1xuICAgICAgICAgICAgY29uc3QgdW5hY2NlcHRlZEZpbGVzID0gW107XG5cbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLm9uRmlsZVVwbG9hZEluaXQuZW1pdCgpO1xuXG4gICAgICAgICAgICBmaWxlcy5mb3JFYWNoKGZpbGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWxlLnR5cGUuaW5jbHVkZXModGhpcy51bmFjY2VwdGVkRmlsZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmFjY2VwdGVkRmlsZXMucHVzaChmaWxlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBvYnNlcnZhYmxlcy5wdXNoKHRoaXMubmd0QXR0YWNobWVudEh0dHBTZXJ2aWNlLnVwbG9hZCh0aGlzLnJlbW90ZVJlc291cmNlLCBmaWxlKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuYXR0cmlidXRlcyAmJiByZXNwb25zZS5kYXRhLmF0dHJpYnV0ZXMuZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlWyd1cmwnXSA9IHJlc3BvbnNlLmRhdGEuYXR0cmlidXRlcy5kYXRhLnVybDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wb3JhcnlGaWxlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHJlc3BvbnNlLmRhdGEuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IGZpbGUuc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTogZmlsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmRhdGFbJ2xvYWRlZCddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wb3JhcnlBdHRhY2htZW50cy5wdXNoKHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICghb2JzZXJ2YWJsZXMubGVuZ3RoICYmIHVuYWNjZXB0ZWRGaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9uRmlsZVNlbGVjdEVycm9yLmVtaXQoTmd0RHJvcHpvbmVFcnJvclR5cGUuVFlQRSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgIGZvcmtKb2luKG9ic2VydmFibGVzKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRlZFJlc291cmNlcy5wdXNoKC4uLnRlbXBvcmFyeUZpbGVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXRlbXNMaW1pdCA9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbk5hdGl2ZUNoYW5nZShbLi4udGVtcG9yYXJ5QXR0YWNobWVudHNdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbk5hdGl2ZUNoYW5nZShbLi4udGVtcG9yYXJ5QXR0YWNobWVudHMsIC4uLnRoaXMubmF0aXZlVmFsdWVdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkZpbGVVcGxvYWRlZC5lbWl0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuYWNjZXB0ZWRGaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRmlsZVNlbGVjdEVycm9yLmVtaXQoTmd0RHJvcHpvbmVFcnJvclR5cGUuVFlQRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkZpbGVVcGxvYWRGYWlsLmVtaXQoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGxvYWRGaWxlUHJldmlldyhhdHRhY2htZW50czogYW55KSB7XG4gICAgICAgIGlmIChhdHRhY2htZW50cyAmJiBhdHRhY2htZW50cy5sZW5ndGggJiYgYXR0YWNobWVudHNbMF0pIHtcbiAgICAgICAgICAgIGxldCB0ZW1wb3JhcnlSZXNvdXJjZSA9IFtdO1xuICAgICAgICAgICAgbGV0IG9ic2VydmFibGVzID0gW107XG5cbiAgICAgICAgICAgIGF0dGFjaG1lbnRzLmZvckVhY2goYXR0YWNobWVudCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCEoYXR0YWNobWVudCBpbnN0YW5jZW9mIEZpbGUpICYmICFhdHRhY2htZW50LmxvYWRlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50Wydsb2FkZWQnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmFibGVzLnB1c2godGhpcy5uZ3RBdHRhY2htZW50SHR0cFNlcnZpY2UudGh1bWJuYWlsKGF0dGFjaG1lbnQpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wb3JhcnlSZXNvdXJjZS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHJlc3BvbnNlLmRhdGEuZ2V0QXBpSWQoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTogcmVzcG9uc2UuZGF0YS5nZXRBdHRyaWJ1dGUoJ2ZpbGUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgIGZvcmtKb2luKG9ic2VydmFibGVzKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRlZFJlc291cmNlcy5wdXNoKC4uLnRlbXBvcmFyeVJlc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25OYXRpdmVDaGFuZ2UoYXR0YWNobWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkZpbGVQcmV2aWV3TG9hZGVkLmVtaXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvblJlbW92ZShyZXNvdXJjZTogYW55KSB7XG4gICAgICAgIHRoaXMudXBsb2FkZWRSZXNvdXJjZXMuc3BsaWNlKHRoaXMudXBsb2FkZWRSZXNvdXJjZXMuaW5kZXhPZihyZXNvdXJjZSksIDEpO1xuICAgICAgICB0aGlzLm5hdGl2ZVZhbHVlID0gdGhpcy5uYXRpdmVWYWx1ZS5maWx0ZXIoZWxlbWVudCA9PiBlbGVtZW50LmlkICE9IHJlc291cmNlLmlkKTtcbiAgICAgICAgdGhpcy5vbk5hdGl2ZUNoYW5nZSh0aGlzLm5hdGl2ZVZhbHVlKTtcbiAgICAgICAgdGhpcy5vbkZpbGVSZW1vdmVkLmVtaXQocmVzb3VyY2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0ltYWdlKHJlc291cmNlOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJldmlld1R5cGUgPT0gJ0lNQUdFJ1xuICAgICAgICAgICAgfHwgKFxuICAgICAgICAgICAgICAgIHJlc291cmNlLmZpbGU/LnR5cGVcbiAgICAgICAgICAgICAgICAmJiByZXNvdXJjZS5maWxlLnR5cGUuaW5jbHVkZXMoJ2ltYWdlJylcbiAgICAgICAgICAgICAgICAmJiAhcmVzb3VyY2UuZmlsZS50eXBlLmluY2x1ZGVzKCdkd2cnKVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNWaWRlbyhyZXNvdXJjZTogYW55KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByZXZpZXdUeXBlID09ICdWSURFTycgfHwgKHJlc291cmNlLmZpbGUgJiYgcmVzb3VyY2UuZmlsZS50eXBlICYmIHJlc291cmNlLmZpbGUudHlwZS5pbmNsdWRlcygndmlkZW8nKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQXVkaW8ocmVzb3VyY2U6IGFueSkge1xuICAgICAgICByZXR1cm4gKHJlc291cmNlLmZpbGUgJiYgcmVzb3VyY2UuZmlsZS50eXBlICYmIHJlc291cmNlLmZpbGUudHlwZS5pbmNsdWRlcygnYXVkaW8nKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzRmlsZShyZXNvdXJjZTogYW55KSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc0ltYWdlKHJlc291cmNlKSAmJiAhdGhpcy5pc0F1ZGlvKHJlc291cmNlKSAmJiAhdGhpcy5pc1ZpZGVvKHJlc291cmNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Rm9ybWF0dGVkRmlsZVNpemUocmVzb3VyY2U6IGFueSkge1xuICAgICAgICBpZiAocmVzb3VyY2UpIHtcbiAgICAgICAgICAgIGxldCBzaXplID0gcmVzb3VyY2Uuc2l6ZSB8fCByZXNvdXJjZS5maWxlU2l6ZTtcblxuICAgICAgICAgICAgaWYgKCFzaXplKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc291cmNlLmZpbGUgJiYgcmVzb3VyY2UuZmlsZS5zaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIHNpemUgPSByZXNvdXJjZS5maWxlLnNpemU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocGFyc2VGbG9hdChzaXplKSA+IDEwMDAwMDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHBhcnNlRmxvYXQoc2l6ZSkgLyAxMDAwMDAwKS50b0ZpeGVkKDIpICsgJyBNYic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHBhcnNlRmxvYXQoc2l6ZSkgLyAxMDAwKSArICcgS2InO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uTmF0aXZlQ2hhbmdlKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbXTtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlVmFsdWUgPSBbXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlVmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KHRoaXMudmFsdWUpICE9IEpTT04uc3RyaW5naWZ5KHRoaXMubmF0aXZlVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubmF0aXZlVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2hhbmdlKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgaWYgKHZhbHVlICYmICF0aGlzLnZpZXdNb2RlKSB7XG4gICAgICAgICAgICB0aGlzLm9uTmF0aXZlQ2hhbmdlKEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50UmVhZHkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRGaWxlUHJldmlldyhBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZG93bmxvYWRGaWxlKGF0dGFjaG1lbnQ6IGFueSkge1xuICAgICAgICB0aGlzLm5ndEF0dGFjaG1lbnRIdHRwU2VydmljZS5kb3dubG9hZChhdHRhY2htZW50KS5zdWJzY3JpYmUoKCkgPT4geyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzZXQoKSB7XG4gICAgICAgIHRoaXMudXBsb2FkZWRSZXNvdXJjZXMgPSBbXTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IFtdO1xuICAgICAgICB0aGlzLm5hdGl2ZVZhbHVlID0gW107XG4gICAgICAgIHRoaXMuaW5pdENvbXBvbmVudCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvcGVuRmlsZVNlbGVjdG9yKCkge1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLm5neEVsZW1lbnRJZCkuY2xpY2soKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRDb21wb25lbnQoKSB7XG4gICAgICAgIGlmICh0aGlzLnZpZXdNb2RlKSB7XG4gICAgICAgICAgICB0aGlzLnByZXZpZXdUeXBlID0gTmd0RHJvcHpvbmVQcmV2aWV3VHlwZS5ERUZBVUxUO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5mb3JtQ29udGFpbmVyICYmIHRoaXMuZm9ybUNvbnRhaW5lci5jb250cm9sXG4gICAgICAgICAgICAmJiAodGhpcy5mb3JtQ29udHJvbCA9IHRoaXMuZm9ybUNvbnRhaW5lci5jb250cm9sLmdldCh0aGlzLm5hbWUpKSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldEZpbGVzTG9hZCgpO1xuICAgICAgICAgICAgdGhpcy5sb2FkRmlsZVByZXZpZXcoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSA/IHRoaXMudmFsdWUgOiBbdGhpcy52YWx1ZV0pO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVWYWxpZGF0aW9ucygpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldEZpbGVzTG9hZCgpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50Wydsb2FkZWQnXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVWYWxpZGF0aW9ucygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1Db250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc3luY1ZhbGlkYXRvcnMgPSBbXTtcblxuICAgICAgICBpZiAodGhpcy5pc1JlcXVpcmVkKSB7XG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3luY1ZhbGlkYXRvcnMucHVzaCgpO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKHN5bmNWYWxpZGF0b3JzKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlc3Ryb3lTdWJzY3JpcHRpb25zKCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWJzY3JpcHRpb24gPT4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBbXTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBoLWZ1bGwgdy1mdWxsXCIgI2NvbnRhaW5lcj5cbiAgICA8bGFiZWwgKm5nSWY9XCJsYWJlbFwiIGNsYXNzPVwiZmxleCBtYi0yIHRleHQtc21cIj5cbiAgICAgICAge3sgbGFiZWwgfX06XG5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXJlZC01MDAgZm9udC1ib2xkIHRleHQtbWQgbWwtMVwiICpuZ0lmPVwiaXNSZXF1aXJlZFwiPio8L3NwYW4+XG5cbiAgICAgICAgPG5ndC1oZWxwZXIgKm5nSWY9XCJoZWxwVGV4dFwiIFtoZWxwVGl0bGVdPVwiaGVscFRpdGxlXCIgW2ljb25Db2xvcl09XCJoZWxwVGV4dENvbG9yXCIgY2xhc3M9XCJtbC0xXCI+XG4gICAgICAgICAgICB7eyBoZWxwVGV4dCB9fVxuICAgICAgICA8L25ndC1oZWxwZXI+XG4gICAgPC9sYWJlbD5cblxuICAgIDxkaXYgKm5nSWY9XCIhdmlld01vZGVcIiBjbGFzcz1cImgtZnVsbCB3LWZ1bGwgcmVsYXRpdmVcIj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImxvYWRpbmcgJiYgIWhpZGVOZ3hEcm9wem9uZVwiXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggYWJzb2x1dGUganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHctZnVsbCBoLWZ1bGwgY3Vyc29yLXdhaXQgei0xMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpdi1sb2FkZXJcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPG5neC1kcm9wem9uZSBbaWRdPVwibmd4RWxlbWVudElkXCIgW211bHRpcGxlXT0nbXVsdGlwbGVTZWxlY3Rpb24nIFttYXhGaWxlU2l6ZV09J21heEZpbGVTaXplJ1xuICAgICAgICAgICAgKGNoYW5nZSk9J29uU2VsZWN0KCRldmVudCknIFtjbGFzcy5zaW5nbGUtYXR0YWNobWVudF09J2l0ZW1zTGltaXQgPT0gMScgW2FjY2VwdF09J2FjY2VwdGVkRmlsZXMnXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSdkaXNhYmxlZCB8fCBsb2FkaW5nJyBbZXhwYW5kYWJsZV09J3ZlcnRpY2FsRXhwYW5kYWJsZSdcbiAgICAgICAgICAgIFtkaXNhYmxlQ2xpY2tdPSdkaXNhYmxlQ2xpY2sgfHwgZm9yY2VEaXNhYmxlQ2xpY2snIFtuZ1N0eWxlXT1cInsgJ2hlaWdodCc6IGRyb3B6b25lSGVpZ2h0IH1cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaGlkZGVuJzpoaWRlTmd4RHJvcHpvbmUgfVwiICNuZ3hEcm9wem9uZT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZGluZ1wiPlxuICAgICAgICAgICAgICAgIDxuZ3gtZHJvcHpvbmUtbGFiZWwgKm5nSWY9XCIhdXBsb2FkZWRSZXNvdXJjZXM/Lmxlbmd0aFwiIGNsYXNzPVwicHgtMlwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBwbGFjZWhvbGRlciB9fVxuICAgICAgICAgICAgICAgIDwvbmd4LWRyb3B6b25lLWxhYmVsPlxuXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcmVzb3VyY2Ugb2YgdXBsb2FkZWRSZXNvdXJjZXM7IGxldCBpbmRleCA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHctNDggbXgtNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7IHJlc291cmNlPy5maWxlPy5uYW1lIHx8ICcnIH19ICh7eyBnZXRGb3JtYXR0ZWRGaWxlU2l6ZShyZXNvdXJjZSkgfX0pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Y3VzdG9tLWRyb3B6b25lLXByZXZpZXcgKm5nSWY9XCJwcmV2aWV3VHlwZSA9PSAnREVGQVVMVCcgJiYgaXNGaWxlKHJlc291cmNlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbGVdPSdyZXNvdXJjZS5maWxlJyBbcmVtb3ZhYmxlXT1cInJlbW92YWJsZVwiIChyZW1vdmVkKT1cIm9uUmVtb3ZlKHJlc291cmNlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRmlsZUNsaWNrKHJlc291cmNlLmZpbGUudXJsLCByZXNvdXJjZS5maWxlLm5hbWUsIHJlc291cmNlLmZpbGUuc2l6ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5nUHJvamVjdEFzPVwibmd4LWRyb3B6b25lLXByZXZpZXdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvY3VzdG9tLWRyb3B6b25lLXByZXZpZXc+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0ltYWdlKHJlc291cmNlKVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiaW1hZ2VQcmV2aWV3KGluZGV4KVwiICNnYWxsZXJ5PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtZHJvcHpvbmUtaW1hZ2UtcHJldmlldyBjbGFzcz1cImltYWdlLXByZXZpZXctZGVmYXVsdC1jbGFzc1wiIFtmaWxlXT1cInJlc291cmNlLmZpbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVtb3ZhYmxlXT1cInJlbW92YWJsZVwiIChyZW1vdmVkKT1cIm9uUmVtb3ZlKHJlc291cmNlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LWRyb3B6b25lLWltYWdlLXByZXZpZXc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1kcm9wem9uZS12aWRlby1wcmV2aWV3ICpuZ0lmPVwiaXNWaWRlbyhyZXNvdXJjZSkgfHwgaXNBdWRpbyhyZXNvdXJjZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWxlXT1cInJlc291cmNlLmZpbGVcIiBbcmVtb3ZhYmxlXT1cInJlbW92YWJsZVwiIChyZW1vdmVkKT1cIm9uUmVtb3ZlKHJlc291cmNlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtZHJvcHpvbmUtdmlkZW8tcHJldmlldz5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJzaG93RmlsZU5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsIHRydW5jYXRlIHRleHQtZ3JheS01MDAgdGV4dC1jZW50ZXIgdGV4dC1zbSBmb250LW1vbm8gbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHJlc291cmNlPy5maWxlPy5uYW1lIHx8ICcnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmd4LWRyb3B6b25lPlxuICAgIDwvZGl2PlxuXG4gICAgPG5ndC1kcm9wem9uZS12aWV3ICpuZ0lmPVwidmlld01vZGVcIiBjbGFzcz1cImgtZnVsbCB3LWZ1bGxcIiBbcmVzb3VyY2VzXT1cInJlc291cmNlc1wiIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIiBbZHJvcHpvbmVIZWlnaHRdPVwiZHJvcHpvbmVIZWlnaHRcIlxuICAgICAgICAob25GaWxlQ2xpY2spPVwib25GaWxlQ2xpY2soJGV2ZW50LnByZXZpZXdVcmwsICRldmVudC5uYW1lLCAkZXZlbnQuZmlsZVNpemUpXCJcbiAgICAgICAgKG9uSW1hZ2VDbGljayk9XCJvbkltYWdlQ2xpY2soJGV2ZW50LmRpdiwgJGV2ZW50LmluZGV4KVwiPlxuICAgIDwvbmd0LWRyb3B6b25lLXZpZXc+XG5cbiAgICA8bmd0LWRyb3B6b25lLWZpbGUtdmlld2VyIFtoaWRkZW5dPVwiIXNob3dOZ3REcm9wem9uZUZpbGVWaWV3ZXJcIiAob25DbG9zZSk9XCJmb3JjZURpc2FibGVDbGljayA9IGZhbHNlXCJcbiAgICAgICAgW2NhbkRvd25sb2FkRmlsZV09XCJjYW5Eb3dubG9hZEZpbGVcIiBbZGlzYWJsZUNvbnRlbnRdPVwiY2FuRG93bmxvYWRGaWxlID8gJ25vbmUnIDogJ3BvcG91dCdcIj5cbiAgICA8L25ndC1kcm9wem9uZS1maWxlLXZpZXdlcj5cblxuICAgIDxpbnB1dCAqbmdJZj0nY29tcG9uZW50UmVhZHknIHR5cGU9XCJoaWRkZW5cIiBbbmdNb2RlbF09XCJ2YWx1ZVwiIFtuYW1lXT1cIm5hbWVcIiBbdmFsdWVdPVwidmFsdWVcIj5cbiAgICA8bmd0LXZhbGlkYXRpb24gW2NvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIiBbY29udGFpbmVyXT1cImZvcm1Db250YWluZXJcIj48L25ndC12YWxpZGF0aW9uPlxuPC9kaXY+Il19
|
|
466
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LWRyb3B6b25lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXRhaWx3aW5kL3NyYy9jb21wb25lbnRzL25ndC1kcm9wem9uZS9uZ3QtZHJvcHpvbmUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LWRyb3B6b25lL25ndC1kcm9wem9uZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0gsU0FBUyxFQUVULFlBQVksRUFDWixJQUFJLEVBRUosS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBRU4sUUFBUSxFQUNSLFNBQVMsRUFDVCxpQkFBaUIsR0FDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RSxPQUFPLEVBQTBCLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxRQUFRLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLE1BQU0sTUFBTSxVQUFVLENBQUM7QUFFOUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFMUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDNUYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFDL0csT0FBTyxFQUFFLG9CQUFvQixFQUFtQixzQkFBc0Is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O3NCQUExQixLQUFLO2dCQUNVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBQ1UsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxTQUFTO3NCQUF4QixLQUFLO2dCQUdVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBQ1UsaUJBQWlCO3NCQUFoQyxLQUFLO2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsWUFBWTtzQkFBM0IsS0FBSztnQkFDVSxZQUFZO3NCQUEzQixLQUFLO2dCQUNVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBQ1UsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxTQUFTO3NCQUF4QixLQUFLO2dCQUNVLGVBQWU7c0JBQTlCLEtBQUs7Z0JBQ1Usa0JBQWtCO3NCQUFqQyxLQUFLO2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsZUFBZTtzQkFBOUIsS0FBSztnQkFDVSxhQUFhO3NCQUE1QixLQUFLO2dCQUNVLGVBQWU7c0JBQTlCLEtBQUs7Z0JBQ1UsV0FBVztzQkFBMUIsS0FBSztnQkFDVSxXQUFXO3NCQUExQixLQUFLO2dCQUNVLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1UsY0FBYztzQkFBN0IsS0FBSztnQkFFVyxjQUFjO3NCQUE5QixNQUFNO2dCQUNVLGlCQUFpQjtzQkFBakMsTUFBTTtnQkFDVSxnQkFBZ0I7c0JBQWhDLE1BQU07Z0JBQ1UsYUFBYTtzQkFBN0IsTUFBTTtnQkFDVSxnQkFBZ0I7c0JBQWhDLE1BQU07Z0JBQ1UsY0FBYztzQkFBOUIsTUFBTTtnQkFDVSxtQkFBbUI7c0JBQW5DLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudENoZWNrZWQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3QsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBTa2lwU2VsZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgTmdGb3JtLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTmd4RHJvcHpvbmVDaGFuZ2VFdmVudCwgTmd4RHJvcHpvbmVDb21wb25lbnQgfSBmcm9tICduZ3gtZHJvcHpvbmUnO1xuaW1wb3J0IHsgZm9ya0pvaW4sIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IFZpZXdlciBmcm9tICd2aWV3ZXJqcyc7XG5cbmltcG9ydCB7IE5ndEJhc2VOZ01vZGVsLCBOZ3RNYWtlUHJvdmlkZXIgfSBmcm9tICcuLi8uLi9iYXNlL25ndC1iYXNlLW5nLW1vZGVsJztcbmltcG9ydCB7IGdldEVudW1Gcm9tU3RyaW5nIH0gZnJvbSAnLi4vLi4vaGVscGVycy9lbnVtL2VudW0nO1xuaW1wb3J0IHsgdXVpZCB9IGZyb20gJy4uLy4uL2hlbHBlcnMvdXVpZCc7XG5pbXBvcnQgeyBOZ3RBdHRhY2htZW50SHR0cFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9odHRwL25ndC1hdHRhY2htZW50LWh0dHAuc2VydmljZSc7XG5pbXBvcnQgeyBOZ3RTdHlsaXphYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25ndC1zdHlsaXphYmxlL25ndC1zdHlsaXphYmxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmd0RHJvcHpvbmVGaWxlVmlld2VyQ29tcG9uZW50IH0gZnJvbSAnLi9uZ3QtZHJvcHpvbmUtZmlsZS12aWV3ZXIvbmd0LWRyb3B6b25lLWZpbGUtdmlld2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ3REcm9wem9uZUVycm9yVHlwZSwgTmd0RHJvcHpvbmVGaWxlLCBOZ3REcm9wem9uZVByZXZpZXdUeXBlIH0gZnJvbSAnLi9uZ3QtZHJvcHpvbmUubWV0YSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0LWRyb3B6b25lJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbmd0LWRyb3B6b25lLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9uZ3QtZHJvcHpvbmUuY29tcG9uZW50LmNzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIE5ndE1ha2VQcm92aWRlcihOZ3REcm9wem9uZUNvbXBvbmVudCksXG4gICAgXSxcbiAgICB2aWV3UHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogQ29udHJvbENvbnRhaW5lciwgdXNlRXhpc3Rpbmc6IE5nRm9ybSB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBOZ3REcm9wem9uZUNvbXBvbmVudCBleHRlbmRzIE5ndEJhc2VOZ01vZGVsIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyQ29udGVudENoZWNrZWQge1xuICAgIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIHB1YmxpYyBjb250YWluZXI6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZChOZ3hEcm9wem9uZUNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSkgcHVibGljIG5neERyb3B6b25lOiBOZ3hEcm9wem9uZUNvbXBvbmVudDtcbiAgICBAVmlld0NoaWxkKE5ndERyb3B6b25lRmlsZVZpZXdlckNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSkgcHVibGljIG5ndERyb3B6b25lRmlsZVZpZXdlcjogTmd0RHJvcHpvbmVGaWxlVmlld2VyQ29tcG9uZW50O1xuXG4gICAgLy8gVmlzdWFsXG4gICAgQElucHV0KCkgcHVibGljIGxhYmVsOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBUZXh0Q29sb3I6IHN0cmluZyA9ICd0ZXh0LWdyZWVuLTUwMCc7XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBUZXh0OiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBUaXRsZTogc3RyaW5nO1xuXG4gICAgLy8gQmVoYXZpb3JcbiAgICBASW5wdXQoKSBwdWJsaWMgcmVzb3VyY2VzOiBBcnJheTxOZ3REcm9wem9uZUZpbGU+ID0gW107XG4gICAgQElucHV0KCkgcHVibGljIG11bHRpcGxlU2VsZWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIGl0ZW1zTGltaXQ6IG51bWJlcjtcbiAgICBASW5wdXQoKSBwdWJsaWMgc2hvd0ZpbGVOYW1lOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIGRpc2FibGVDbGljazogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyB2aWV3TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyByZW1vdmFibGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgY2FuRG93bmxvYWRGaWxlOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgdmVydGljYWxFeHBhbmRhYmxlOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIGlzUmVxdWlyZWQ6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGhpZGVOZ3hEcm9wem9uZTogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwdWJsaWMgYWNjZXB0ZWRGaWxlczogc3RyaW5nID0gJyonIC8qKiBNaW1lIHR5cGUgKi87XG4gICAgQElucHV0KCkgcHVibGljIHVuYWNjZXB0ZWRGaWxlczogc3RyaW5nOyAvKiogTWltZSB0eXBlICovO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBtYXhGaWxlU2l6ZTogbnVtYmVyOyAvKiogQnl0ZXMgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgcHJldmlld1R5cGU6IE5ndERyb3B6b25lUHJldmlld1R5cGUgPSBOZ3REcm9wem9uZVByZXZpZXdUeXBlLkRFRkFVTFQ7XG4gICAgQElucHV0KCkgcHVibGljIG5hbWU6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgcmVtb3RlUmVzb3VyY2U6IGFueTtcblxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25GaWxlU2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxOZ3hEcm9wem9uZUNoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uRmlsZVNlbGVjdEVycm9yOiBFdmVudEVtaXR0ZXI8Tmd0RHJvcHpvbmVFcnJvclR5cGU+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25GaWxlVXBsb2FkRmFpbDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbkZpbGVSZW1vdmVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25GaWxlVXBsb2FkSW5pdCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uRmlsZVVwbG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25GaWxlUHJldmlld0xvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIHB1YmxpYyBkcm9wem9uZUhlaWdodDogc3RyaW5nID0gJzE4MHB4JztcbiAgICBwdWJsaWMgdXBsb2FkZWRSZXNvdXJjZXMgPSBbXTtcbiAgICBwdWJsaWMgZm9yY2VEaXNhYmxlQ2xpY2s6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgbmF0aXZlVmFsdWUgPSBbXTtcbiAgICBwdWJsaWMgc2hvd05ndERyb3B6b25lRmlsZVZpZXdlcjogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBjb21wb25lbnRSZWFkeSA9IGZhbHNlO1xuICAgIHB1YmxpYyBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIG5ndERyb3B6b25lTG9hZGVyU3R5bGU6IE5ndFN0eWxpemFibGVTZXJ2aWNlO1xuICAgIHB1YmxpYyBuZ3hFbGVtZW50SWQ6IHN0cmluZyA9IHV1aWQoKTtcbiAgICBwdWJsaWMgaW1hZ2VWaWV3ZXJPcHRpb25zOiBhbnkgPSB7XG4gICAgICAgIG5hdmJhcjogdHJ1ZSxcbiAgICAgICAgdG9vbGJhcjoge1xuICAgICAgICAgICAgem9vbUluOiB0cnVlLFxuICAgICAgICAgICAgem9vbU91dDogdHJ1ZSxcbiAgICAgICAgICAgIHJlc2V0OiB0cnVlLFxuICAgICAgICAgICAgcm90YXRlTGVmdDogdHJ1ZSxcbiAgICAgICAgICAgIHJvdGF0ZVJpZ2h0OiB0cnVlLFxuICAgICAgICAgICAgcHJldjogdHJ1ZSxcbiAgICAgICAgICAgIG5leHQ6IHRydWUsXG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBBcnJheTxTdWJzY3JpcHRpb24+ID0gW107XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIEBPcHRpb25hbCgpIEBIb3N0KClcbiAgICAgICAgcHVibGljIGZvcm1Db250YWluZXI6IENvbnRyb2xDb250YWluZXIsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpXG4gICAgICAgIHByaXZhdGUgbmd0QXR0YWNobWVudEh0dHBTZXJ2aWNlOiBOZ3RBdHRhY2htZW50SHR0cFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICB0aGlzLm5ndERyb3B6b25lTG9hZGVyU3R5bGUgPSBuZXcgTmd0U3R5bGl6YWJsZVNlcnZpY2UoKTtcblxuICAgICAgICB0aGlzLm5ndERyb3B6b25lTG9hZGVyU3R5bGUubG9hZCh0aGlzLmluamVjdG9yLCAnTmd0RHJvcHpvbmVMb2FkZXInLCB7XG4gICAgICAgICAgICBoOiAnaC04JyxcbiAgICAgICAgICAgIGNvbG9yOiB7XG4gICAgICAgICAgICAgICAgdGV4dDogJ3RleHQtZ3JheS02MDAnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzLnByZXZpZXdUeXBlKSB7XG4gICAgICAgICAgICB0aGlzLnByZXZpZXdUeXBlID0gZ2V0RW51bUZyb21TdHJpbmcoY2hhbmdlcy5wcmV2aWV3VHlwZS5jdXJyZW50VmFsdWUsIE5ndERyb3B6b25lUHJldmlld1R5cGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGFpbmVyICYmIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZHJvcHpvbmVIZWlnaHQgPSBgJHt0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQub2Zmc2V0SGVpZ2h0fXB4YDtcblxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWFkeSA9IHRydWU7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdENvbXBvbmVudCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIDUwMCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3lTdWJzY3JpcHRpb25zKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGltYWdlUHJldmlldyhpbmRleCkge1xuICAgICAgICBjb25zdCBpbWFnZXMgPSB0aGlzLnVwbG9hZGVkUmVzb3VyY2VzLmZpbHRlcigocmVzb3VyY2UpID0+IHRoaXMuaXNJbWFnZShyZXNvdXJjZSkpO1xuICAgICAgICBjb25zdCBpbWFnZXNEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gICAgICAgIGltYWdlcy5mb3JFYWNoKChpbWFnZSkgPT4ge1xuICAgICAgICAgICAgbGV0IGltYWdlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIik7XG5cbiAgICAgICAgICAgIGltYWdlRWxlbWVudC5zcmMgPSBpbWFnZS5maWxlLnVybDtcblxuICAgICAgICAgICAgaW1hZ2VzRGl2LmFwcGVuZENoaWxkKGltYWdlRWxlbWVudCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMub25JbWFnZUNsaWNrKGltYWdlc0RpdiwgaW5kZXgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkltYWdlQ2xpY2soZWxlbWVudCwgaW5kZXg/KSB7XG4gICAgICAgIGlmICghdGhpcy52aWV3TW9kZSkge1xuICAgICAgICAgICAgdGhpcy5mb3JjZURpc2FibGVDbGljayA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZ3REcm9wem9uZUNvbXBvbmVudCA9IHRoaXM7XG5cbiAgICAgICAgaWYgKGluZGV4ICE9PSBudWxsICYmIGluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VWaWV3ZXJPcHRpb25zID0geyAuLi50aGlzLmltYWdlVmlld2VyT3B0aW9ucywgLi4ueyBpbml0aWFsVmlld0luZGV4OiBpbmRleCB9IH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2aWV3ZXIgPSBuZXcgVmlld2VyKGVsZW1lbnQsIHtcbiAgICAgICAgICAgIC4uLnRoaXMuaW1hZ2VWaWV3ZXJPcHRpb25zLCAuLi57XG4gICAgICAgICAgICAgICAgaGlkZGVuKCkge1xuICAgICAgICAgICAgICAgICAgICBuZ3REcm9wem9uZUNvbXBvbmVudC5mb3JjZURpc2FibGVDbGljayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB2aWV3ZXIuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmlld2VyLnNob3coKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25GaWxlQ2xpY2sodXJsOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgc2l6ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuZm9yY2VEaXNhYmxlQ2xpY2sgPSB0cnVlO1xuICAgICAgICB0aGlzLnNob3dOZ3REcm9wem9uZUZpbGVWaWV3ZXIgPSB0cnVlO1xuICAgICAgICB0aGlzLm5ndERyb3B6b25lRmlsZVZpZXdlci51cmwgPSB1cmw7XG4gICAgICAgIHRoaXMubmd0RHJvcHpvbmVGaWxlVmlld2VyLmZpbGVOYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5uZ3REcm9wem9uZUZpbGVWaWV3ZXIuZmlsZVNpemUgPSBzaXplO1xuICAgICAgICB0aGlzLm5ndERyb3B6b25lRmlsZVZpZXdlci5pbml0KCk7XG5cbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5uZ3REcm9wem9uZUZpbGVWaWV3ZXIub25DbG9zZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93Tmd0RHJvcHpvbmVGaWxlVmlld2VyID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmZvcmNlRGlzYWJsZUNsaWNrID0gZmFsc2U7XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgb25TZWxlY3QoZXZlbnQ6IE5neERyb3B6b25lQ2hhbmdlRXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LnJlamVjdGVkRmlsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlamVjdGVkRmlsZSBvZiA8YW55PmV2ZW50LnJlamVjdGVkRmlsZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVqZWN0ZWRGaWxlLnJlYXNvbiA9PSAnc2l6ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkZpbGVTZWxlY3RFcnJvci5lbWl0KE5ndERyb3B6b25lRXJyb3JUeXBlLlNJWkUpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlamVjdGVkRmlsZS5yZWFzb24gPT0gJ25vX211bHRpcGxlJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRmlsZVNlbGVjdEVycm9yLmVtaXQoTmd0RHJvcHpvbmVFcnJvclR5cGUuTk9fTVVMVElQTEUpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlamVjdGVkRmlsZS5yZWFzb24gPT0gJ3R5cGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25GaWxlU2VsZWN0RXJyb3IuZW1pdChOZ3REcm9wem9uZUVycm9yVHlwZS5UWVBFKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkZpbGVTZWxlY3RFcnJvci5lbWl0KE5ndERyb3B6b25lRXJyb3JUeXBlLkRFRkFVTFQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pdGVtc0xpbWl0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pdGVtc0xpbWl0ID09IDEgJiYgZXZlbnQuYWRkZWRGaWxlc1xuICAgICAgICAgICAgICAgICYmIGV2ZW50LmFkZGVkRmlsZXMubGVuZ3RoID09IHRoaXMuaXRlbXNMaW1pdCAmJiB0aGlzLnVwbG9hZGVkUmVzb3VyY2VzLmxlbmd0aCA9PSB0aGlzLml0ZW1zTGltaXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZGVkUmVzb3VyY2VzID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChldmVudC5hZGRlZEZpbGVzXG4gICAgICAgICAgICAgICAgJiYgZXZlbnQuYWRkZWRGaWxlcy5sZW5ndGggKyB0aGlzLnVwbG9hZGVkUmVzb3VyY2VzLmxlbmd0aCA8PSB0aGlzLml0ZW1zTGltaXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRmlsZVNlbGVjdGVkLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkRmlsZXMoZXZlbnQuYWRkZWRGaWxlcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMub25GaWxlU2VsZWN0RXJyb3IuZW1pdChOZ3REcm9wem9uZUVycm9yVHlwZS5JVEVNU19MSU1JVCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uRmlsZVNlbGVjdGVkLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgdGhpcy51cGxvYWRGaWxlcyhldmVudC5hZGRlZEZpbGVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyB1cGxvYWRGaWxlcyhmaWxlczogQXJyYXk8RmlsZT4pIHtcbiAgICAgICAgaWYgKGZpbGVzICYmIGZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgdGVtcG9yYXJ5RmlsZXMgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IHRlbXBvcmFyeUF0dGFjaG1lbnRzID0gW107XG4gICAgICAgICAgICBjb25zdCBvYnNlcnZhYmxlcyA9IFtdO1xuICAgICAgICAgICAgY29uc3QgdW5hY2NlcHRlZEZpbGVzID0gW107XG5cbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLm9uRmlsZVVwbG9hZEluaXQuZW1pdCgpO1xuXG4gICAgICAgICAgICBmaWxlcy5mb3JFYWNoKGZpbGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWxlLnR5cGUuaW5jbHVkZXModGhpcy51bmFjY2VwdGVkRmlsZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmFjY2VwdGVkRmlsZXMucHVzaChmaWxlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBvYnNlcnZhYmxlcy5wdXNoKHRoaXMubmd0QXR0YWNobWVudEh0dHBTZXJ2aWNlLnVwbG9hZCh0aGlzLnJlbW90ZVJlc291cmNlLCBmaWxlKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuYXR0cmlidXRlcyAmJiByZXNwb25zZS5kYXRhLmF0dHJpYnV0ZXMuZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlWyd1cmwnXSA9IHJlc3BvbnNlLmRhdGEuYXR0cmlidXRlcy5kYXRhLnVybDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wb3JhcnlGaWxlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHJlc3BvbnNlLmRhdGEuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IGZpbGUuc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTogZmlsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmRhdGFbJ2xvYWRlZCddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wb3JhcnlBdHRhY2htZW50cy5wdXNoKHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICghb2JzZXJ2YWJsZXMubGVuZ3RoICYmIHVuYWNjZXB0ZWRGaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9uRmlsZVNlbGVjdEVycm9yLmVtaXQoTmd0RHJvcHpvbmVFcnJvclR5cGUuVFlQRSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgIGZvcmtKb2luKG9ic2VydmFibGVzKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRlZFJlc291cmNlcy5wdXNoKC4uLnRlbXBvcmFyeUZpbGVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXRlbXNMaW1pdCA9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbk5hdGl2ZUNoYW5nZShbLi4udGVtcG9yYXJ5QXR0YWNobWVudHNdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbk5hdGl2ZUNoYW5nZShbLi4udGVtcG9yYXJ5QXR0YWNobWVudHMsIC4uLnRoaXMubmF0aXZlVmFsdWVdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkZpbGVVcGxvYWRlZC5lbWl0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuYWNjZXB0ZWRGaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRmlsZVNlbGVjdEVycm9yLmVtaXQoTmd0RHJvcHpvbmVFcnJvclR5cGUuVFlQRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkZpbGVVcGxvYWRGYWlsLmVtaXQoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGxvYWRGaWxlUHJldmlldyhhdHRhY2htZW50czogYW55KSB7XG4gICAgICAgIGlmIChhdHRhY2htZW50cyAmJiBhdHRhY2htZW50cy5sZW5ndGggJiYgYXR0YWNobWVudHNbMF0pIHtcbiAgICAgICAgICAgIGxldCB0ZW1wb3JhcnlSZXNvdXJjZSA9IFtdO1xuICAgICAgICAgICAgbGV0IG9ic2VydmFibGVzID0gW107XG5cbiAgICAgICAgICAgIGF0dGFjaG1lbnRzLmZvckVhY2goKGF0dGFjaG1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghKGF0dGFjaG1lbnQgaW5zdGFuY2VvZiBGaWxlKSAmJiAhYXR0YWNobWVudC5sb2FkZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50Wydsb2FkZWQnXSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2YWJsZXMucHVzaCh0aGlzLm5ndEF0dGFjaG1lbnRIdHRwU2VydmljZS5wcmV2aWV3KGF0dGFjaG1lbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcG9yYXJ5UmVzb3VyY2UucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogcmVzcG9uc2UuZGF0YS5nZXRBcGlJZCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTogcmVzcG9uc2UuZGF0YS5nZXRBdHRyaWJ1dGUoJ2ZpbGUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgIGZvcmtKb2luKG9ic2VydmFibGVzKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRlZFJlc291cmNlcy5wdXNoKC4uLnRlbXBvcmFyeVJlc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25OYXRpdmVDaGFuZ2UoYXR0YWNobWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkZpbGVQcmV2aWV3TG9hZGVkLmVtaXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvblJlbW92ZShyZXNvdXJjZTogYW55KSB7XG4gICAgICAgIHRoaXMudXBsb2FkZWRSZXNvdXJjZXMuc3BsaWNlKHRoaXMudXBsb2FkZWRSZXNvdXJjZXMuaW5kZXhPZihyZXNvdXJjZSksIDEpO1xuICAgICAgICB0aGlzLm5hdGl2ZVZhbHVlID0gdGhpcy5uYXRpdmVWYWx1ZS5maWx0ZXIoZWxlbWVudCA9PiBlbGVtZW50LmlkICE9IHJlc291cmNlLmlkKTtcbiAgICAgICAgdGhpcy5vbk5hdGl2ZUNoYW5nZSh0aGlzLm5hdGl2ZVZhbHVlKTtcbiAgICAgICAgdGhpcy5vbkZpbGVSZW1vdmVkLmVtaXQocmVzb3VyY2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0ltYWdlKHJlc291cmNlOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJldmlld1R5cGUgPT0gJ0lNQUdFJ1xuICAgICAgICAgICAgfHwgKFxuICAgICAgICAgICAgICAgIHJlc291cmNlLmZpbGU/LnR5cGVcbiAgICAgICAgICAgICAgICAmJiByZXNvdXJjZS5maWxlLnR5cGUuaW5jbHVkZXMoJ2ltYWdlJylcbiAgICAgICAgICAgICAgICAmJiAhcmVzb3VyY2UuZmlsZS50eXBlLmluY2x1ZGVzKCdkd2cnKVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNWaWRlbyhyZXNvdXJjZTogYW55KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByZXZpZXdUeXBlID09ICdWSURFTycgfHwgKHJlc291cmNlLmZpbGUgJiYgcmVzb3VyY2UuZmlsZS50eXBlICYmIHJlc291cmNlLmZpbGUudHlwZS5pbmNsdWRlcygndmlkZW8nKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQXVkaW8ocmVzb3VyY2U6IGFueSkge1xuICAgICAgICByZXR1cm4gKHJlc291cmNlLmZpbGUgJiYgcmVzb3VyY2UuZmlsZS50eXBlICYmIHJlc291cmNlLmZpbGUudHlwZS5pbmNsdWRlcygnYXVkaW8nKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzRmlsZShyZXNvdXJjZTogYW55KSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc0ltYWdlKHJlc291cmNlKSAmJiAhdGhpcy5pc0F1ZGlvKHJlc291cmNlKSAmJiAhdGhpcy5pc1ZpZGVvKHJlc291cmNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Rm9ybWF0dGVkRmlsZVNpemUocmVzb3VyY2U6IGFueSkge1xuICAgICAgICBpZiAocmVzb3VyY2UpIHtcbiAgICAgICAgICAgIGxldCBzaXplID0gcmVzb3VyY2Uuc2l6ZSB8fCByZXNvdXJjZS5maWxlU2l6ZTtcblxuICAgICAgICAgICAgaWYgKCFzaXplKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc291cmNlLmZpbGUgJiYgcmVzb3VyY2UuZmlsZS5zaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIHNpemUgPSByZXNvdXJjZS5maWxlLnNpemU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocGFyc2VGbG9hdChzaXplKSA+IDEwMDAwMDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHBhcnNlRmxvYXQoc2l6ZSkgLyAxMDAwMDAwKS50b0ZpeGVkKDIpICsgJyBNYic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHBhcnNlRmxvYXQoc2l6ZSkgLyAxMDAwKSArICcgS2InO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uTmF0aXZlQ2hhbmdlKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbXTtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlVmFsdWUgPSBbXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlVmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KHRoaXMudmFsdWUpICE9IEpTT04uc3RyaW5naWZ5KHRoaXMubmF0aXZlVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubmF0aXZlVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2hhbmdlKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgaWYgKHZhbHVlICYmICF0aGlzLnZpZXdNb2RlKSB7XG4gICAgICAgICAgICB0aGlzLm9uTmF0aXZlQ2hhbmdlKEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50UmVhZHkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRGaWxlUHJldmlldyhBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZG93bmxvYWRGaWxlKGF0dGFjaG1lbnQ6IGFueSkge1xuICAgICAgICB0aGlzLm5ndEF0dGFjaG1lbnRIdHRwU2VydmljZS5kb3dubG9hZChhdHRhY2htZW50KS5zdWJzY3JpYmUoKCkgPT4geyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzZXQoKSB7XG4gICAgICAgIHRoaXMudXBsb2FkZWRSZXNvdXJjZXMgPSBbXTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IFtdO1xuICAgICAgICB0aGlzLm5hdGl2ZVZhbHVlID0gW107XG4gICAgICAgIHRoaXMuaW5pdENvbXBvbmVudCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvcGVuRmlsZVNlbGVjdG9yKCkge1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLm5neEVsZW1lbnRJZCkuY2xpY2soKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRDb21wb25lbnQoKSB7XG4gICAgICAgIGlmICh0aGlzLnZpZXdNb2RlKSB7XG4gICAgICAgICAgICB0aGlzLnByZXZpZXdUeXBlID0gTmd0RHJvcHpvbmVQcmV2aWV3VHlwZS5ERUZBVUxUO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5mb3JtQ29udGFpbmVyICYmIHRoaXMuZm9ybUNvbnRhaW5lci5jb250cm9sXG4gICAgICAgICAgICAmJiAodGhpcy5mb3JtQ29udHJvbCA9IHRoaXMuZm9ybUNvbnRhaW5lci5jb250cm9sLmdldCh0aGlzLm5hbWUpKSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldEZpbGVzTG9hZCgpO1xuICAgICAgICAgICAgdGhpcy5sb2FkRmlsZVByZXZpZXcoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSA/IHRoaXMudmFsdWUgOiBbdGhpcy52YWx1ZV0pO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVWYWxpZGF0aW9ucygpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldEZpbGVzTG9hZCgpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50Wydsb2FkZWQnXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVWYWxpZGF0aW9ucygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1Db250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc3luY1ZhbGlkYXRvcnMgPSBbXTtcblxuICAgICAgICBpZiAodGhpcy5pc1JlcXVpcmVkKSB7XG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3luY1ZhbGlkYXRvcnMucHVzaCgpO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKHN5bmNWYWxpZGF0b3JzKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlc3Ryb3lTdWJzY3JpcHRpb25zKCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWJzY3JpcHRpb24gPT4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBbXTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBoLWZ1bGwgdy1mdWxsXCIgI2NvbnRhaW5lcj5cbiAgICA8bGFiZWwgKm5nSWY9XCJsYWJlbFwiIGNsYXNzPVwiZmxleCBtYi0yIHRleHQtc21cIj5cbiAgICAgICAge3sgbGFiZWwgfX06XG5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXJlZC01MDAgZm9udC1ib2xkIHRleHQtbWQgbWwtMVwiICpuZ0lmPVwiaXNSZXF1aXJlZFwiPio8L3NwYW4+XG5cbiAgICAgICAgPG5ndC1oZWxwZXIgKm5nSWY9XCJoZWxwVGV4dFwiIFtoZWxwVGl0bGVdPVwiaGVscFRpdGxlXCIgW2ljb25Db2xvcl09XCJoZWxwVGV4dENvbG9yXCIgY2xhc3M9XCJtbC0xXCI+XG4gICAgICAgICAgICB7eyBoZWxwVGV4dCB9fVxuICAgICAgICA8L25ndC1oZWxwZXI+XG4gICAgPC9sYWJlbD5cblxuICAgIDxkaXYgKm5nSWY9XCIhdmlld01vZGVcIiBjbGFzcz1cImgtZnVsbCB3LWZ1bGwgcmVsYXRpdmVcIj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImxvYWRpbmcgJiYgIWhpZGVOZ3hEcm9wem9uZVwiXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggYWJzb2x1dGUganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHctZnVsbCBoLWZ1bGwgY3Vyc29yLXdhaXQgei0xMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpdi1sb2FkZXJcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPG5neC1kcm9wem9uZSBbaWRdPVwibmd4RWxlbWVudElkXCIgW211bHRpcGxlXT0nbXVsdGlwbGVTZWxlY3Rpb24nIFttYXhGaWxlU2l6ZV09J21heEZpbGVTaXplJ1xuICAgICAgICAgICAgKGNoYW5nZSk9J29uU2VsZWN0KCRldmVudCknIFtjbGFzcy5zaW5nbGUtYXR0YWNobWVudF09J2l0ZW1zTGltaXQgPT0gMScgW2FjY2VwdF09J2FjY2VwdGVkRmlsZXMnXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSdkaXNhYmxlZCB8fCBsb2FkaW5nJyBbZXhwYW5kYWJsZV09J3ZlcnRpY2FsRXhwYW5kYWJsZSdcbiAgICAgICAgICAgIFtkaXNhYmxlQ2xpY2tdPSdkaXNhYmxlQ2xpY2sgfHwgZm9yY2VEaXNhYmxlQ2xpY2snIFtuZ1N0eWxlXT1cInsgJ2hlaWdodCc6IGRyb3B6b25lSGVpZ2h0IH1cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaGlkZGVuJzpoaWRlTmd4RHJvcHpvbmUgfVwiICNuZ3hEcm9wem9uZT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZGluZ1wiPlxuICAgICAgICAgICAgICAgIDxuZ3gtZHJvcHpvbmUtbGFiZWwgKm5nSWY9XCIhdXBsb2FkZWRSZXNvdXJjZXM/Lmxlbmd0aFwiIGNsYXNzPVwicHgtMlwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBwbGFjZWhvbGRlciB9fVxuICAgICAgICAgICAgICAgIDwvbmd4LWRyb3B6b25lLWxhYmVsPlxuXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcmVzb3VyY2Ugb2YgdXBsb2FkZWRSZXNvdXJjZXM7IGxldCBpbmRleCA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHctNDggbXgtNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7IHJlc291cmNlPy5maWxlPy5uYW1lIHx8ICcnIH19ICh7eyBnZXRGb3JtYXR0ZWRGaWxlU2l6ZShyZXNvdXJjZSkgfX0pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Y3VzdG9tLWRyb3B6b25lLXByZXZpZXcgKm5nSWY9XCJwcmV2aWV3VHlwZSA9PSAnREVGQVVMVCcgJiYgaXNGaWxlKHJlc291cmNlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbGVdPSdyZXNvdXJjZS5maWxlJyBbcmVtb3ZhYmxlXT1cInJlbW92YWJsZVwiIChyZW1vdmVkKT1cIm9uUmVtb3ZlKHJlc291cmNlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRmlsZUNsaWNrKHJlc291cmNlLmZpbGUudXJsLCByZXNvdXJjZS5maWxlLm5hbWUsIHJlc291cmNlLmZpbGUuc2l6ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5nUHJvamVjdEFzPVwibmd4LWRyb3B6b25lLXByZXZpZXdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvY3VzdG9tLWRyb3B6b25lLXByZXZpZXc+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0ltYWdlKHJlc291cmNlKVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiaW1hZ2VQcmV2aWV3KGluZGV4KVwiICNnYWxsZXJ5PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtZHJvcHpvbmUtaW1hZ2UtcHJldmlldyBjbGFzcz1cImltYWdlLXByZXZpZXctZGVmYXVsdC1jbGFzc1wiIFtmaWxlXT1cInJlc291cmNlLmZpbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVtb3ZhYmxlXT1cInJlbW92YWJsZVwiIChyZW1vdmVkKT1cIm9uUmVtb3ZlKHJlc291cmNlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LWRyb3B6b25lLWltYWdlLXByZXZpZXc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1kcm9wem9uZS12aWRlby1wcmV2aWV3ICpuZ0lmPVwiaXNWaWRlbyhyZXNvdXJjZSkgfHwgaXNBdWRpbyhyZXNvdXJjZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWxlXT1cInJlc291cmNlLmZpbGVcIiBbcmVtb3ZhYmxlXT1cInJlbW92YWJsZVwiIChyZW1vdmVkKT1cIm9uUmVtb3ZlKHJlc291cmNlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtZHJvcHpvbmUtdmlkZW8tcHJldmlldz5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJzaG93RmlsZU5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsIHRydW5jYXRlIHRleHQtZ3JheS01MDAgdGV4dC1jZW50ZXIgdGV4dC1zbSBmb250LW1vbm8gbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHJlc291cmNlPy5maWxlPy5uYW1lIHx8ICcnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmd4LWRyb3B6b25lPlxuICAgIDwvZGl2PlxuXG4gICAgPG5ndC1kcm9wem9uZS12aWV3ICpuZ0lmPVwidmlld01vZGVcIiBjbGFzcz1cImgtZnVsbCB3LWZ1bGxcIiBbcmVzb3VyY2VzXT1cInJlc291cmNlc1wiIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIiBbZHJvcHpvbmVIZWlnaHRdPVwiZHJvcHpvbmVIZWlnaHRcIlxuICAgICAgICAob25GaWxlQ2xpY2spPVwib25GaWxlQ2xpY2soJGV2ZW50LnByZXZpZXdVcmwsICRldmVudC5uYW1lLCAkZXZlbnQuZmlsZVNpemUpXCJcbiAgICAgICAgKG9uSW1hZ2VDbGljayk9XCJvbkltYWdlQ2xpY2soJGV2ZW50LmRpdiwgJGV2ZW50LmluZGV4KVwiPlxuICAgIDwvbmd0LWRyb3B6b25lLXZpZXc+XG5cbiAgICA8bmd0LWRyb3B6b25lLWZpbGUtdmlld2VyIFtoaWRkZW5dPVwiIXNob3dOZ3REcm9wem9uZUZpbGVWaWV3ZXJcIiAob25DbG9zZSk9XCJmb3JjZURpc2FibGVDbGljayA9IGZhbHNlXCJcbiAgICAgICAgW2NhbkRvd25sb2FkRmlsZV09XCJjYW5Eb3dubG9hZEZpbGVcIiBbZGlzYWJsZUNvbnRlbnRdPVwiY2FuRG93bmxvYWRGaWxlID8gJ25vbmUnIDogJ3BvcG91dCdcIj5cbiAgICA8L25ndC1kcm9wem9uZS1maWxlLXZpZXdlcj5cblxuICAgIDxpbnB1dCAqbmdJZj0nY29tcG9uZW50UmVhZHknIHR5cGU9XCJoaWRkZW5cIiBbbmdNb2RlbF09XCJ2YWx1ZVwiIFtuYW1lXT1cIm5hbWVcIiBbdmFsdWVdPVwidmFsdWVcIj5cbiAgICA8bmd0LXZhbGlkYXRpb24gW2NvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIiBbY29udGFpbmVyXT1cImZvcm1Db250YWluZXJcIj48L25ndC12YWxpZGF0aW9uPlxuPC9kaXY+Il19
|
|
@@ -13,8 +13,8 @@ import { NgtDropzoneComponent } from './ngt-dropzone.component';
|
|
|
13
13
|
import * as i0 from "@angular/core";
|
|
14
14
|
export class NgtDropzoneModule {
|
|
15
15
|
}
|
|
16
|
-
NgtDropzoneModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
17
|
-
NgtDropzoneModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.
|
|
16
|
+
NgtDropzoneModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgtDropzoneModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
17
|
+
NgtDropzoneModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: NgtDropzoneModule, declarations: [NgtDropzoneComponent,
|
|
18
18
|
NgtDropzoneFileViewerComponent,
|
|
19
19
|
NgtDropzoneViewComponent,
|
|
20
20
|
CustomDropzonePreviewComponent], imports: [CommonModule,
|
|
@@ -24,14 +24,14 @@ NgtDropzoneModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versi
|
|
|
24
24
|
NgtSvgModule,
|
|
25
25
|
EloverdeDocViewerModule,
|
|
26
26
|
NgtHelperModule], exports: [NgtDropzoneComponent] });
|
|
27
|
-
NgtDropzoneModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.
|
|
27
|
+
NgtDropzoneModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgtDropzoneModule, imports: [CommonModule,
|
|
28
28
|
FormsModule,
|
|
29
29
|
NgtValidationModule,
|
|
30
30
|
NgxDropzoneModule,
|
|
31
31
|
NgtSvgModule,
|
|
32
32
|
EloverdeDocViewerModule,
|
|
33
33
|
NgtHelperModule] });
|
|
34
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
34
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgtDropzoneModule, decorators: [{
|
|
35
35
|
type: NgModule,
|
|
36
36
|
args: [{
|
|
37
37
|
exports: [NgtDropzoneComponent],
|
|
@@ -51,8 +51,8 @@ export class NgtFloatingButtonComponent {
|
|
|
51
51
|
return menu.type == NgtFloatingButtonType.NAVIGATION;
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
|
-
NgtFloatingButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
55
|
-
NgtFloatingButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.
|
|
54
|
+
NgtFloatingButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgtFloatingButtonComponent, deps: [{ token: i0.Injector }, { token: i1.NgtStylizableDirective, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
55
|
+
NgtFloatingButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: NgtFloatingButtonComponent, selector: "ngt-floating-button", inputs: { menus: "menus", icon: "icon", label: "label", withAnimation: "withAnimation" }, ngImport: i0, template: "<button (click)=\"toggleMenu()\" *ngIf=\"isOpen\" tabindex=\"-1\"\n class=\"fixed z-10 inset-0 h-full w-full bg-black opacity-0 cursor-default\"></button>\n\n<div class=\"{{ ngtStyle.compile(['w']) }} rounded-full relative z-20\" *ngIf=\"isOpen\" @fadeY>\n <ng-container *ngFor=\"let menu of menus; let i = index\">\n <div class=\"my-2 rounded-full shadow-xl\">\n <a *ngIf=\"isTypeNavigation(menu)\" [routerLink]=\"menu.externalLink ? null : menu.url\"\n (click)='menu.externalLink ? openExternalLink(menu.url) : toggleMenu()' title=\"{{ menu.tooltip }}\"\n class=\"{{ ngtStyle.compile(['h', 'w', 'color.bg', 'color.text']) }} flex items-center justify-center rounded-full hover:opacity-75\">\n <span *ngIf=\"menu.name\"\n class=\"text-sm font-semibold {{ menu.icon ? 'pr-2' : '' }}\">{{ menu.name }}</span>\n <ngt-svg *ngIf=\"menu.icon\" [src]='menu.icon' class=\"fill-current\"></ngt-svg>\n </a>\n\n <div *ngIf=\"isTypeAction(menu)\" title=\"{{ menu.tooltip }}\" (click)='onClick($event, menu)'\n class=\"{{ ngtStyle.compile(['h', 'w', 'color.bg', 'color.text']) }} flex items-center justify-center rounded-full hover:opacity-75 cursor-pointer\">\n <span *ngIf=\"menu.name\"\n class=\"text-sm font-semibold {{ menu.icon ? 'pr-2' : '' }}\">{{ menu.name }}</span>\n <ngt-svg *ngIf=\"menu.icon\" [src]='menu.icon' class=\"fill-current\"></ngt-svg>\n </div>\n </div>\n </ng-container>\n</div>\n\n<!-- Abrir menu -->\n<div (click)=\"toggleMenu()\"\n class=\"flex z-20 justify-center {{ ngtStyle.compile(['h', 'w', 'color.bg', 'color.text', 'px', 'py']) }} focus:outline-none hover:opacity-75 cursor-pointer rounded-full outline-none\">\n <span *ngIf=\"label\"\n class=\"{{ icon ? 'pr-2' : '' }} self-center text-center text-sm font-semibold w-full\">{{ label }}</span>\n <ngt-svg *ngIf=\"icon\" [@openClose]=\"withAnimation ? isOpen ? 'open' : 'closed' : ''\" [src]='icon'\n class=\"fill-current\"></ngt-svg>\n</div>", 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: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i4.NgtSvgComponent, selector: "ngt-svg", inputs: ["src", "class"] }], animations: [
|
|
56
56
|
trigger('fadeY', [
|
|
57
57
|
state('void', style({ opacity: 0, transform: 'translateY(10px)' })),
|
|
58
58
|
transition(':enter, :leave', [
|
|
@@ -74,7 +74,7 @@ NgtFloatingButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0
|
|
|
74
74
|
]),
|
|
75
75
|
]),
|
|
76
76
|
] });
|
|
77
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
77
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgtFloatingButtonComponent, decorators: [{
|
|
78
78
|
type: Component,
|
|
79
79
|
args: [{ selector: 'ngt-floating-button', animations: [
|
|
80
80
|
trigger('fadeY', [
|