@alfresco/adf-content-services
Version:
Alfresco ADF content services
191 lines • 49.2 kB
JavaScript
/*!
* @license
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { UserPreferencesService } from '@alfresco/adf-core';
import { ChangeDetectorRef, Component, DestroyRef, ElementRef, EventEmitter, HostBinding, inject, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';
import { merge, Subject } from 'rxjs';
import { FileUploadingListComponent } from './file-uploading-list.component';
import { delay } from 'rxjs/operators';
import { UploadService } from '../../common/services/upload.service';
import { FileUploadStatus } from '../../common/models/file.model';
import { CommonModule } from '@angular/common';
import { MatButtonModule } from '@angular/material/button';
import { TranslateModule } from '@ngx-translate/core';
import { MatIconModule } from '@angular/material/icon';
import { FileUploadingListRowComponent } from './file-uploading-list-row.component';
import { A11yModule } from '@angular/cdk/a11y';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import * as i0 from "@angular/core";
import * as i1 from "../../common/services/upload.service";
import * as i2 from "@alfresco/adf-core";
import * as i3 from "@angular/common";
import * as i4 from "@angular/material/button";
import * as i5 from "@ngx-translate/core";
import * as i6 from "@angular/material/icon";
import * as i7 from "@angular/cdk/a11y";
export class FileUploadingDialogComponent {
get isPositionRight() {
return (this.direction === 'ltr' && this.position === 'right') || (this.direction === 'rtl' && this.position === 'left') || null;
}
get isPositionLeft() {
return (this.direction === 'ltr' && this.position === 'left') || (this.direction === 'rtl' && this.position === 'right') || null;
}
constructor(uploadService, changeDetector, userPreferencesService, elementRef) {
this.uploadService = uploadService;
this.changeDetector = changeDetector;
this.userPreferencesService = userPreferencesService;
this.elementRef = elementRef;
/** Dialog direction. Can be 'ltr' or 'rtl. */
this.direction = 'ltr';
/** Dialog position. Can be 'left' or 'right'. */
this.position = 'right';
/** Makes the dialog always visible even when there are no uploads. */
this.alwaysVisible = false;
/** Emitted when a file in the list has an error. */
this.error = new EventEmitter();
this.filesUploadingList = [];
this.isDialogActive = false;
this.totalCompleted = 0;
this.totalErrors = 0;
this.isDialogMinimized = false;
this.isConfirmation = false;
this.dialogActive = new Subject();
this.destroyRef = inject(DestroyRef);
}
ngOnInit() {
this.dialogActive.pipe(delay(100), takeUntilDestroyed(this.destroyRef)).subscribe(() => {
const element = this.elementRef.nativeElement.querySelector('#upload-dialog');
if (element) {
element.focus();
}
});
this.uploadService.queueChanged.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((fileList) => {
this.filesUploadingList = fileList;
if (this.filesUploadingList.length && !this.isDialogActive) {
this.isDialogActive = true;
this.dialogActive.next(undefined);
}
else {
this.dialogActive.next(undefined);
}
});
merge(this.uploadService.fileUploadComplete, this.uploadService.fileUploadDeleted)
.pipe(takeUntilDestroyed(this.destroyRef))
.subscribe((event) => {
this.totalCompleted = event.totalComplete;
this.changeDetector.detectChanges();
});
this.uploadService.fileUploadError.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {
this.totalErrors = event.totalError;
this.changeDetector.detectChanges();
});
this.uploadService.fileUpload.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {
this.changeDetector.detectChanges();
});
this.uploadService.fileDeleted.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((objId) => {
if (this.filesUploadingList) {
const uploadedFile = this.filesUploadingList.find((file) => (file.data ? file.data.entry.id === objId : false));
if (uploadedFile) {
uploadedFile.status = FileUploadStatus.Cancelled;
this.changeDetector.detectChanges();
}
}
});
this.userPreferencesService
.select('textOrientation')
.pipe(takeUntilDestroyed(this.destroyRef))
.subscribe((textOrientation) => {
this.direction = textOrientation;
});
}
/**
* Toggle confirmation message.
*/
toggleConfirmation() {
this.isConfirmation = !this.isConfirmation;
if (!this.isConfirmation) {
this.dialogActive.next(undefined);
}
if (this.isDialogMinimized) {
this.isDialogMinimized = false;
}
}
/**
* Cancel uploads and hide confirmation
*/
cancelAllUploads() {
this.toggleConfirmation();
this.dialogActive.next(undefined);
this.uploadList.cancelAllFiles();
}
/**
* Toggle dialog minimized state.
*/
toggleMinimized() {
this.isDialogMinimized = !this.isDialogMinimized;
this.changeDetector.detectChanges();
}
/**
* Dismiss dialog
*/
close() {
this.isConfirmation = false;
this.totalCompleted = 0;
this.totalErrors = 0;
this.filesUploadingList = [];
this.isDialogActive = false;
this.isDialogMinimized = false;
this.uploadService.clearQueue();
this.changeDetector.detectChanges();
}
ngOnDestroy() {
this.uploadService.clearQueue();
}
canShowDialog() {
return this.isDialogActive || this.alwaysVisible;
}
canShowCancelAll() {
return this.filesUploadingList?.length && this.hasUploadInProgress();
}
canCloseDialog() {
return !this.hasUploadInProgress() && !this.alwaysVisible;
}
hasUploadInProgress() {
return !this.uploadList?.isUploadCompleted() && !this.uploadList?.isUploadCancelled();
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: FileUploadingDialogComponent, deps: [{ token: i1.UploadService }, { token: i0.ChangeDetectorRef }, { token: i2.UserPreferencesService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: FileUploadingDialogComponent, isStandalone: true, selector: "adf-file-uploading-dialog", inputs: { position: "position", alwaysVisible: "alwaysVisible" }, outputs: { error: "error" }, host: { properties: { "attr.adfUploadDialogRight": "this.isPositionRight", "attr.adfUploadDialogLeft": "this.isPositionLeft" } }, viewQueries: [{ propertyName: "uploadList", first: true, predicate: ["uploadList"], descendants: true }], ngImport: i0, template: "<div *ngIf=\"canShowDialog()\"\n role=\"dialog\"\n [attr.aria-label]=\"'ADF_FILE_UPLOAD.ARIA-LABEL.DIALOG'| translate\"\n tabindex=\"0\"\n class=\"adf-upload-dialog\"\n id=\"upload-dialog\"\n [class.adf-upload-dialog--minimized]=\"isDialogMinimized\">\n <header class=\"adf-upload-dialog__header\">\n <button\n mat-icon-button\n class=\"adf-upload-dialog__header-button\"\n [attr.data-automation-id]=\"'adf-upload-dialog__toggle-minimize'\"\n [attr.aria-label]=\"(isDialogMinimized ?\n 'ADF_FILE_UPLOAD.ARIA-LABEL.DIALOG_MAXIMIZE':\n 'ADF_FILE_UPLOAD.ARIA-LABEL.DIALOG_MINIMIZE') | translate\"\n [disabled]=\"isConfirmation\"\n [attr.aria-expanded]=\"!isDialogMinimized\"\n (click)=\"toggleMinimized()\">\n <mat-icon\n class=\"adf-upload-dialog__header-button-icon\">\n {{ isDialogMinimized ? 'keyboard_arrow_up' : 'keyboard_arrow_down' }}\n </mat-icon>\n </button>\n\n <span\n class=\"adf-upload-dialog__title\"\n *ngIf=\"!uploadList.isUploadCancelled()\">\n {{ 'FILE_UPLOAD.MESSAGES.UPLOAD_PROGRESS'\n | translate: {\n completed: totalCompleted,\n total: filesUploadingList.length\n }\n }}\n </span>\n\n <span\n class=\"adf-upload-dialog__title\"\n *ngIf=\"uploadList.isUploadCancelled()\">\n {{ 'FILE_UPLOAD.MESSAGES.UPLOAD_CANCELED' | translate }}\n </span>\n </header>\n\n <section class=\"adf-upload-dialog__info\"\n *ngIf=\"totalErrors\">\n {{\n (totalErrors > 1\n ? 'FILE_UPLOAD.MESSAGES.UPLOAD_ERRORS'\n : 'FILE_UPLOAD.MESSAGES.UPLOAD_ERROR')\n | translate: { total: totalErrors }\n }}\n </section>\n\n <section class=\"adf-upload-dialog__content\"\n [class.adf-upload-dialog--padding]=\"isConfirmation\">\n <adf-file-uploading-list\n class=\"adf-file-uploading-list\"\n [class.adf-upload-dialog--hide]=\"isConfirmation\"\n #uploadList\n [files]=\"filesUploadingList\">\n <ng-template let-file=\"$implicit\">\n <adf-file-uploading-list-row\n [file]=\"file\"\n (cancel)=\"uploadList.cancelFile(file)\" />\n </ng-template>\n </adf-file-uploading-list>\n\n <div\n aria-live=\"polite\"\n aria-labelledby=\"confirmationTitle\"\n aria-describedby=\"confirmationDescription\"\n class=\"adf-upload-dialog__confirmation\"\n [class.adf-upload-dialog--hide]=\"!isConfirmation\">\n <p role=\"heading\" aria-level=\"2\" id=\"confirmationTitle\" class=\"adf-upload-dialog__confirmation--title\">\n {{ 'ADF_FILE_UPLOAD.CONFIRMATION.MESSAGE.TITLE' | translate }}\n </p>\n <p id=\"confirmationDescription\" class=\"adf-upload-dialog__confirmation--text\">\n {{ 'ADF_FILE_UPLOAD.CONFIRMATION.MESSAGE.TEXT' | translate }}\n </p>\n </div>\n </section>\n\n <footer class=\"adf-upload-dialog__actions\" *ngIf=\"!isConfirmation\">\n <button\n id=\"adf-upload-dialog-cancel-all\"\n [attr.aria-label]=\"'ADF_FILE_UPLOAD.ARIA-LABEL.STOP_ALL' | translate\"\n color=\"primary\"\n mat-button\n *ngIf=\"canShowCancelAll()\"\n (click)=\"toggleConfirmation()\"\n >{{ 'ADF_FILE_UPLOAD.BUTTON.STOP_ALL' | translate }}</button>\n\n <button\n id=\"adf-upload-dialog-close\"\n [attr.aria-label]=\"'ADF_FILE_UPLOAD.ARIA-LABEL.DIALOG_CLOSE' | translate\"\n *ngIf=\"canCloseDialog()\"\n mat-button\n color=\"primary\"\n (click)=\"close()\"\n >{{ 'ADF_FILE_UPLOAD.BUTTON.CLOSE' | translate }}</button>\n </footer>\n\n <footer class=\"adf-upload-dialog__actions\"\n *ngIf=\"isConfirmation\" cdkTrapFocus cdkTrapFocusAutoCapture>\n <button\n id=\"adf-upload-dialog-cancel\"\n [attr.aria-label]=\"'ADF_FILE_UPLOAD.ARIA-LABEL.CONFIRMATION.CANCEL' | translate\"\n mat-button\n (click)=\"cancelAllUploads()\"\n >{{ 'ADF_FILE_UPLOAD.CONFIRMATION.BUTTON.CANCEL' | translate }}</button>\n\n <button\n id=\"adf-upload-dialog-confirm\"\n [attr.aria-label]=\"'ADF_FILE_UPLOAD.ARIA-LABEL.CONFIRMATION.CONTINUE' | translate\"\n mat-button\n color=\"primary\"\n (click)=\"toggleConfirmation()\"\n >{{ 'ADF_FILE_UPLOAD.CONFIRMATION.BUTTON.CONTINUE' | translate }}</button>\n </footer>\n</div>\n", styles: [".adf-upload-dialog{background:var(--adf-theme-background-dialog-color);color:var(--adf-theme-foreground-text-color-054);position:fixed;bottom:20px;width:40%;box-shadow:1px 5px 15px #888;z-index:999}.adf-upload-dialog--padding{padding:1em}.adf-upload-dialog--hide.adf-upload-dialog__confirmation,.adf-upload-dialog--hide.adf-file-uploading-list{display:none}.adf-upload-dialog--minimized{width:20%}.adf-upload-dialog--minimized .adf-upload-dialog__content{display:none}.adf-upload-dialog .adf-upload-dialog__header{padding:1em;display:flex;align-items:center}.adf-upload-dialog .adf-upload-dialog__header .adf-upload-dialog__header-button:is(button){min-width:0;height:24px;width:24px;padding:0;line-height:0;color:var(--adf-theme-foreground-text-color-054)}.adf-upload-dialog__title{margin-left:.5em;flex:1 1 auto}.adf-upload-dialog__info{padding:0 1em 1em}.adf-upload-dialog__content{overflow:auto;max-height:194px;border-top:1px solid var(--adf-theme-foreground-text-color-014);border-bottom:1px solid var(--adf-theme-foreground-text-color-014)}.adf-upload-dialog__confirmation{padding:0 .5em}.adf-upload-dialog__confirmation--title{font-size:var(--theme-subheading-2-font-size);line-height:1.5;letter-spacing:-.4px;color:var(--adf-theme-foreground-text-color-087)}.adf-upload-dialog__confirmation--text{margin-bottom:0}.adf-upload-dialog__actions{display:flex;justify-content:flex-end;padding:1em}.adf-upload-dialog__actions>button{width:auto;min-width:40px;text-transform:uppercase;padding:0 16px}[adfUploadDialogLeft] .adf-upload-dialog{left:25px}[adfUploadDialogRight] .adf-upload-dialog{right:25px}@media screen and (width >= 380px) and (width <= 768px){.adf-upload-dialog{width:60%}.adf-file-uploading-row .adf-file-uploading-row__group{min-width:0}}@media screen and (width <= 380px){.adf-upload-dialog{width:85%}.adf-file-uploading-row .adf-file-uploading-row__group{min-width:0}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: FileUploadingListComponent, selector: "adf-file-uploading-list", inputs: ["files"], outputs: ["error"] }, { kind: "component", type: FileUploadingListRowComponent, selector: "adf-file-uploading-list-row", inputs: ["file"], outputs: ["cancel"] }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i7.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }], encapsulation: i0.ViewEncapsulation.None }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: FileUploadingDialogComponent, decorators: [{
type: Component,
args: [{ selector: 'adf-file-uploading-dialog', standalone: true, imports: [CommonModule, MatButtonModule, TranslateModule, MatIconModule, FileUploadingListComponent, FileUploadingListRowComponent, A11yModule], encapsulation: ViewEncapsulation.None, template: "<div *ngIf=\"canShowDialog()\"\n role=\"dialog\"\n [attr.aria-label]=\"'ADF_FILE_UPLOAD.ARIA-LABEL.DIALOG'| translate\"\n tabindex=\"0\"\n class=\"adf-upload-dialog\"\n id=\"upload-dialog\"\n [class.adf-upload-dialog--minimized]=\"isDialogMinimized\">\n <header class=\"adf-upload-dialog__header\">\n <button\n mat-icon-button\n class=\"adf-upload-dialog__header-button\"\n [attr.data-automation-id]=\"'adf-upload-dialog__toggle-minimize'\"\n [attr.aria-label]=\"(isDialogMinimized ?\n 'ADF_FILE_UPLOAD.ARIA-LABEL.DIALOG_MAXIMIZE':\n 'ADF_FILE_UPLOAD.ARIA-LABEL.DIALOG_MINIMIZE') | translate\"\n [disabled]=\"isConfirmation\"\n [attr.aria-expanded]=\"!isDialogMinimized\"\n (click)=\"toggleMinimized()\">\n <mat-icon\n class=\"adf-upload-dialog__header-button-icon\">\n {{ isDialogMinimized ? 'keyboard_arrow_up' : 'keyboard_arrow_down' }}\n </mat-icon>\n </button>\n\n <span\n class=\"adf-upload-dialog__title\"\n *ngIf=\"!uploadList.isUploadCancelled()\">\n {{ 'FILE_UPLOAD.MESSAGES.UPLOAD_PROGRESS'\n | translate: {\n completed: totalCompleted,\n total: filesUploadingList.length\n }\n }}\n </span>\n\n <span\n class=\"adf-upload-dialog__title\"\n *ngIf=\"uploadList.isUploadCancelled()\">\n {{ 'FILE_UPLOAD.MESSAGES.UPLOAD_CANCELED' | translate }}\n </span>\n </header>\n\n <section class=\"adf-upload-dialog__info\"\n *ngIf=\"totalErrors\">\n {{\n (totalErrors > 1\n ? 'FILE_UPLOAD.MESSAGES.UPLOAD_ERRORS'\n : 'FILE_UPLOAD.MESSAGES.UPLOAD_ERROR')\n | translate: { total: totalErrors }\n }}\n </section>\n\n <section class=\"adf-upload-dialog__content\"\n [class.adf-upload-dialog--padding]=\"isConfirmation\">\n <adf-file-uploading-list\n class=\"adf-file-uploading-list\"\n [class.adf-upload-dialog--hide]=\"isConfirmation\"\n #uploadList\n [files]=\"filesUploadingList\">\n <ng-template let-file=\"$implicit\">\n <adf-file-uploading-list-row\n [file]=\"file\"\n (cancel)=\"uploadList.cancelFile(file)\" />\n </ng-template>\n </adf-file-uploading-list>\n\n <div\n aria-live=\"polite\"\n aria-labelledby=\"confirmationTitle\"\n aria-describedby=\"confirmationDescription\"\n class=\"adf-upload-dialog__confirmation\"\n [class.adf-upload-dialog--hide]=\"!isConfirmation\">\n <p role=\"heading\" aria-level=\"2\" id=\"confirmationTitle\" class=\"adf-upload-dialog__confirmation--title\">\n {{ 'ADF_FILE_UPLOAD.CONFIRMATION.MESSAGE.TITLE' | translate }}\n </p>\n <p id=\"confirmationDescription\" class=\"adf-upload-dialog__confirmation--text\">\n {{ 'ADF_FILE_UPLOAD.CONFIRMATION.MESSAGE.TEXT' | translate }}\n </p>\n </div>\n </section>\n\n <footer class=\"adf-upload-dialog__actions\" *ngIf=\"!isConfirmation\">\n <button\n id=\"adf-upload-dialog-cancel-all\"\n [attr.aria-label]=\"'ADF_FILE_UPLOAD.ARIA-LABEL.STOP_ALL' | translate\"\n color=\"primary\"\n mat-button\n *ngIf=\"canShowCancelAll()\"\n (click)=\"toggleConfirmation()\"\n >{{ 'ADF_FILE_UPLOAD.BUTTON.STOP_ALL' | translate }}</button>\n\n <button\n id=\"adf-upload-dialog-close\"\n [attr.aria-label]=\"'ADF_FILE_UPLOAD.ARIA-LABEL.DIALOG_CLOSE' | translate\"\n *ngIf=\"canCloseDialog()\"\n mat-button\n color=\"primary\"\n (click)=\"close()\"\n >{{ 'ADF_FILE_UPLOAD.BUTTON.CLOSE' | translate }}</button>\n </footer>\n\n <footer class=\"adf-upload-dialog__actions\"\n *ngIf=\"isConfirmation\" cdkTrapFocus cdkTrapFocusAutoCapture>\n <button\n id=\"adf-upload-dialog-cancel\"\n [attr.aria-label]=\"'ADF_FILE_UPLOAD.ARIA-LABEL.CONFIRMATION.CANCEL' | translate\"\n mat-button\n (click)=\"cancelAllUploads()\"\n >{{ 'ADF_FILE_UPLOAD.CONFIRMATION.BUTTON.CANCEL' | translate }}</button>\n\n <button\n id=\"adf-upload-dialog-confirm\"\n [attr.aria-label]=\"'ADF_FILE_UPLOAD.ARIA-LABEL.CONFIRMATION.CONTINUE' | translate\"\n mat-button\n color=\"primary\"\n (click)=\"toggleConfirmation()\"\n >{{ 'ADF_FILE_UPLOAD.CONFIRMATION.BUTTON.CONTINUE' | translate }}</button>\n </footer>\n</div>\n", styles: [".adf-upload-dialog{background:var(--adf-theme-background-dialog-color);color:var(--adf-theme-foreground-text-color-054);position:fixed;bottom:20px;width:40%;box-shadow:1px 5px 15px #888;z-index:999}.adf-upload-dialog--padding{padding:1em}.adf-upload-dialog--hide.adf-upload-dialog__confirmation,.adf-upload-dialog--hide.adf-file-uploading-list{display:none}.adf-upload-dialog--minimized{width:20%}.adf-upload-dialog--minimized .adf-upload-dialog__content{display:none}.adf-upload-dialog .adf-upload-dialog__header{padding:1em;display:flex;align-items:center}.adf-upload-dialog .adf-upload-dialog__header .adf-upload-dialog__header-button:is(button){min-width:0;height:24px;width:24px;padding:0;line-height:0;color:var(--adf-theme-foreground-text-color-054)}.adf-upload-dialog__title{margin-left:.5em;flex:1 1 auto}.adf-upload-dialog__info{padding:0 1em 1em}.adf-upload-dialog__content{overflow:auto;max-height:194px;border-top:1px solid var(--adf-theme-foreground-text-color-014);border-bottom:1px solid var(--adf-theme-foreground-text-color-014)}.adf-upload-dialog__confirmation{padding:0 .5em}.adf-upload-dialog__confirmation--title{font-size:var(--theme-subheading-2-font-size);line-height:1.5;letter-spacing:-.4px;color:var(--adf-theme-foreground-text-color-087)}.adf-upload-dialog__confirmation--text{margin-bottom:0}.adf-upload-dialog__actions{display:flex;justify-content:flex-end;padding:1em}.adf-upload-dialog__actions>button{width:auto;min-width:40px;text-transform:uppercase;padding:0 16px}[adfUploadDialogLeft] .adf-upload-dialog{left:25px}[adfUploadDialogRight] .adf-upload-dialog{right:25px}@media screen and (width >= 380px) and (width <= 768px){.adf-upload-dialog{width:60%}.adf-file-uploading-row .adf-file-uploading-row__group{min-width:0}}@media screen and (width <= 380px){.adf-upload-dialog{width:85%}.adf-file-uploading-row .adf-file-uploading-row__group{min-width:0}}\n"] }]
}], ctorParameters: () => [{ type: i1.UploadService }, { type: i0.ChangeDetectorRef }, { type: i2.UserPreferencesService }, { type: i0.ElementRef }], propDecorators: { uploadList: [{
type: ViewChild,
args: ['uploadList']
}], position: [{
type: Input
}], alwaysVisible: [{
type: Input
}], error: [{
type: Output
}], isPositionRight: [{
type: HostBinding,
args: ['attr.adfUploadDialogRight']
}], isPositionLeft: [{
type: HostBinding,
args: ['attr.adfUploadDialogLeft']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWRpbmctZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvdXBsb2FkL2NvbXBvbmVudHMvZmlsZS11cGxvYWRpbmctZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvdXBsb2FkL2NvbXBvbmVudHMvZmlsZS11cGxvYWRpbmctZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVELE9BQU8sRUFDSCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTdFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDckUsT0FBTyxFQUFhLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFN0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FB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SSxDQUFDLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxDQUFDO0lBQzFGLENBQUM7OEdBbktRLDRCQUE0QjtrR0FBNUIsNEJBQTRCLGdhQ3hEekMsODFKQXVIQSw2NUREcEVjLFlBQVksa0lBQUUsZUFBZSx3VUFBRSxlQUFlLDJGQUFFLGFBQWEsb0xBQUUsMEJBQTBCLDJHQUFFLDZCQUE2Qiw4R0FBRSxVQUFVOzsyRkFLckksNEJBQTRCO2tCQVJ4QyxTQUFTOytCQUNJLDJCQUEyQixjQUN6QixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsMEJBQTBCLEVBQUUsNkJBQTZCLEVBQUUsVUFBVSxDQUFDLGlCQUdoSSxpQkFBaUIsQ0FBQyxJQUFJO2dMQU9yQyxVQUFVO3NCQURULFNBQVM7dUJBQUMsWUFBWTtnQkFLdkIsUUFBUTtzQkFEUCxLQUFLO2dCQUtOLGFBQWE7c0JBRFosS0FBSztnQkFLTixLQUFLO3NCQURKLE1BQU07Z0JBSUksZUFBZTtzQkFEekIsV0FBVzt1QkFBQywyQkFBMkI7Z0JBSzdCLGNBQWM7c0JBRHhCLFdBQVc7dUJBQUMsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlIH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG1lcmdlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGaWxlVXBsb2FkaW5nTGlzdENvbXBvbmVudCB9IGZyb20gJy4vZmlsZS11cGxvYWRpbmctbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGlyZWN0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2JpZGknO1xuaW1wb3J0IHsgZGVsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBVcGxvYWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tbW9uL3NlcnZpY2VzL3VwbG9hZC5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbGVNb2RlbCwgRmlsZVVwbG9hZFN0YXR1cyB9IGZyb20gJy4uLy4uL2NvbW1vbi9tb2RlbHMvZmlsZS5tb2RlbCc7XG5pbXBvcnQgeyBGaWxlVXBsb2FkQ29tcGxldGVFdmVudCwgRmlsZVVwbG9hZERlbGV0ZUV2ZW50IH0gZnJvbSAnLi4vLi4vY29tbW9uL2V2ZW50cy9maWxlLmV2ZW50JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBGaWxlVXBsb2FkaW5nTGlzdFJvd0NvbXBvbmVudCB9IGZyb20gJy4vZmlsZS11cGxvYWRpbmctbGlzdC1yb3cuY29tcG9uZW50JztcbmltcG9ydCB7IEExMXlNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWRmLWZpbGUtdXBsb2FkaW5nLWRpYWxvZycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBNYXRCdXR0b25Nb2R1bGUsIFRyYW5zbGF0ZU1vZHVsZSwgTWF0SWNvbk1vZHVsZSwgRmlsZVVwbG9hZGluZ0xpc3RDb21wb25lbnQsIEZpbGVVcGxvYWRpbmdMaXN0Um93Q29tcG9uZW50LCBBMTF5TW9kdWxlXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZmlsZS11cGxvYWRpbmctZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9maWxlLXVwbG9hZGluZy1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIEZpbGVVcGxvYWRpbmdEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqIERpYWxvZyBkaXJlY3Rpb24uIENhbiBiZSAnbHRyJyBvciAncnRsLiAqL1xuICAgIHByaXZhdGUgZGlyZWN0aW9uOiBEaXJlY3Rpb24gPSAnbHRyJztcblxuICAgIEBWaWV3Q2hpbGQoJ3VwbG9hZExpc3QnKVxuICAgIHVwbG9hZExpc3Q6IEZpbGVVcGxvYWRpbmdMaXN0Q29tcG9uZW50O1xuXG4gICAgLyoqIERpYWxvZyBwb3NpdGlvbi4gQ2FuIGJlICdsZWZ0JyBvciAncmlnaHQnLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcG9zaXRpb246IHN0cmluZyA9ICdyaWdodCc7XG5cbiAgICAvKiogTWFrZXMgdGhlIGRpYWxvZyBhbHdheXMgdmlzaWJsZSBldmVuIHdoZW4gdGhlcmUgYXJlIG5vIHVwbG9hZHMuICovXG4gICAgQElucHV0KClcbiAgICBhbHdheXNWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGEgZmlsZSBpbiB0aGUgbGlzdCBoYXMgYW4gZXJyb3IuICovXG4gICAgQE91dHB1dCgpXG4gICAgZXJyb3I6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFkZlVwbG9hZERpYWxvZ1JpZ2h0JylcbiAgICBwdWJsaWMgZ2V0IGlzUG9zaXRpb25SaWdodCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmRpcmVjdGlvbiA9PT0gJ2x0cicgJiYgdGhpcy5wb3NpdGlvbiA9PT0gJ3JpZ2h0JykgfHwgKHRoaXMuZGlyZWN0aW9uID09PSAncnRsJyAmJiB0aGlzLnBvc2l0aW9uID09PSAnbGVmdCcpIHx8IG51bGw7XG4gICAgfVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hZGZVcGxvYWREaWFsb2dMZWZ0JylcbiAgICBwdWJsaWMgZ2V0IGlzUG9zaXRpb25MZWZ0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMuZGlyZWN0aW9uID09PSAnbHRyJyAmJiB0aGlzLnBvc2l0aW9uID09PSAnbGVmdCcpIHx8ICh0aGlzLmRpcmVjdGlvbiA9PT0gJ3J0bCcgJiYgdGhpcy5wb3NpdGlvbiA9PT0gJ3JpZ2h0JykgfHwgbnVsbDtcbiAgICB9XG5cbiAgICBmaWxlc1VwbG9hZGluZ0xpc3Q6IEZpbGVNb2RlbFtdID0gW107XG4gICAgaXNEaWFsb2dBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICB0b3RhbENvbXBsZXRlZDogbnVtYmVyID0gMDtcbiAgICB0b3RhbEVycm9yczogbnVtYmVyID0gMDtcbiAgICBpc0RpYWxvZ01pbmltaXplZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGlzQ29uZmlybWF0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIGRpYWxvZ0FjdGl2ZSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSB1cGxvYWRTZXJ2aWNlOiBVcGxvYWRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSB1c2VyUHJlZmVyZW5jZXNTZXJ2aWNlOiBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWZcbiAgICApIHt9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5kaWFsb2dBY3RpdmUucGlwZShkZWxheSgxMDApLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQ6IGFueSA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyN1cGxvYWQtZGlhbG9nJyk7XG4gICAgICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy51cGxvYWRTZXJ2aWNlLnF1ZXVlQ2hhbmdlZC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKGZpbGVMaXN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZpbGVzVXBsb2FkaW5nTGlzdCA9IGZpbGVMaXN0O1xuXG4gICAgICAgICAgICBpZiAodGhpcy5maWxlc1VwbG9hZGluZ0xpc3QubGVuZ3RoICYmICF0aGlzLmlzRGlhbG9nQWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0RpYWxvZ0FjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dBY3RpdmUubmV4dCh1bmRlZmluZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ0FjdGl2ZS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIG1lcmdlKHRoaXMudXBsb2FkU2VydmljZS5maWxlVXBsb2FkQ29tcGxldGUsIHRoaXMudXBsb2FkU2VydmljZS5maWxlVXBsb2FkRGVsZXRlZClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEZpbGVVcGxvYWRDb21wbGV0ZUV2ZW50IHwgRmlsZVVwbG9hZERlbGV0ZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbENvbXBsZXRlZCA9IGV2ZW50LnRvdGFsQ29tcGxldGU7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnVwbG9hZFNlcnZpY2UuZmlsZVVwbG9hZEVycm9yLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG90YWxFcnJvcnMgPSBldmVudC50b3RhbEVycm9yO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudXBsb2FkU2VydmljZS5maWxlVXBsb2FkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy51cGxvYWRTZXJ2aWNlLmZpbGVEZWxldGVkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgob2JqSWQpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbGVzVXBsb2FkaW5nTGlzdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHVwbG9hZGVkRmlsZSA9IHRoaXMuZmlsZXNVcGxvYWRpbmdMaXN0LmZpbmQoKGZpbGUpID0+IChmaWxlLmRhdGEgPyBmaWxlLmRhdGEuZW50cnkuaWQgPT09IG9iaklkIDogZmFsc2UpKTtcbiAgICAgICAgICAgICAgICBpZiAodXBsb2FkZWRGaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHVwbG9hZGVkRmlsZS5zdGF0dXMgPSBGaWxlVXBsb2FkU3RhdHVzLkNhbmNlbGxlZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnVzZXJQcmVmZXJlbmNlc1NlcnZpY2VcbiAgICAgICAgICAgIC5zZWxlY3QoJ3RleHRPcmllbnRhdGlvbicpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHRleHRPcmllbnRhdGlvbjogRGlyZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSB0ZXh0T3JpZW50YXRpb247XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGUgY29uZmlybWF0aW9uIG1lc3NhZ2UuXG4gICAgICovXG4gICAgdG9nZ2xlQ29uZmlybWF0aW9uKCkge1xuICAgICAgICB0aGlzLmlzQ29uZmlybWF0aW9uID0gIXRoaXMuaXNDb25maXJtYXRpb247XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzQ29uZmlybWF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmRpYWxvZ0FjdGl2ZS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0RpYWxvZ01pbmltaXplZCkge1xuICAgICAgICAgICAgdGhpcy5pc0RpYWxvZ01pbmltaXplZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FuY2VsIHVwbG9hZHMgYW5kIGhpZGUgY29uZmlybWF0aW9uXG4gICAgICovXG4gICAgY2FuY2VsQWxsVXBsb2FkcygpIHtcbiAgICAgICAgdGhpcy50b2dnbGVDb25maXJtYXRpb24oKTtcbiAgICAgICAgdGhpcy5kaWFsb2dBY3RpdmUubmV4dCh1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLnVwbG9hZExpc3QuY2FuY2VsQWxsRmlsZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGUgZGlhbG9nIG1pbmltaXplZCBzdGF0ZS5cbiAgICAgKi9cbiAgICB0b2dnbGVNaW5pbWl6ZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNEaWFsb2dNaW5pbWl6ZWQgPSAhdGhpcy5pc0RpYWxvZ01pbmltaXplZDtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzbWlzcyBkaWFsb2dcbiAgICAgKi9cbiAgICBjbG9zZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0NvbmZpcm1hdGlvbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRvdGFsQ29tcGxldGVkID0gMDtcbiAgICAgICAgdGhpcy50b3RhbEVycm9ycyA9IDA7XG4gICAgICAgIHRoaXMuZmlsZXNVcGxvYWRpbmdMaXN0ID0gW107XG4gICAgICAgIHRoaXMuaXNEaWFsb2dBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0RpYWxvZ01pbmltaXplZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnVwbG9hZFNlcnZpY2UuY2xlYXJRdWV1ZSgpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy51cGxvYWRTZXJ2aWNlLmNsZWFyUXVldWUoKTtcbiAgICB9XG5cbiAgICBjYW5TaG93RGlhbG9nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0RpYWxvZ0FjdGl2ZSB8fCB0aGlzLmFsd2F5c1Zpc2libGU7XG4gICAgfVxuXG4gICAgY2FuU2hvd0NhbmNlbEFsbCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsZXNVcGxvYWRpbmdMaXN0Py5sZW5ndGggJiYgdGhpcy5oYXNVcGxvYWRJblByb2dyZXNzKCk7XG4gICAgfVxuXG4gICAgY2FuQ2xvc2VEaWFsb2coKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5oYXNVcGxvYWRJblByb2dyZXNzKCkgJiYgIXRoaXMuYWx3YXlzVmlzaWJsZTtcbiAgICB9XG5cbiAgICBoYXNVcGxvYWRJblByb2dyZXNzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMudXBsb2FkTGlzdD8uaXNVcGxvYWRDb21wbGV0ZWQoKSAmJiAhdGhpcy51cGxvYWRMaXN0Py5pc1VwbG9hZENhbmNlbGxlZCgpO1xuICAgIH1cbn1cbiIsIjxkaXYgKm5nSWY9XCJjYW5TaG93RGlhbG9nKClcIlxuICAgICByb2xlPVwiZGlhbG9nXCJcbiAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQURGX0ZJTEVfVVBMT0FELkFSSUEtTEFCRUwuRElBTE9HJ3wgdHJhbnNsYXRlXCJcbiAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgY2xhc3M9XCJhZGYtdXBsb2FkLWRpYWxvZ1wiXG4gICAgIGlkPVwidXBsb2FkLWRpYWxvZ1wiXG4gICAgIFtjbGFzcy5hZGYtdXBsb2FkLWRpYWxvZy0tbWluaW1pemVkXT1cImlzRGlhbG9nTWluaW1pemVkXCI+XG4gICAgPGhlYWRlciBjbGFzcz1cImFkZi11cGxvYWQtZGlhbG9nX19oZWFkZXJcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImFkZi11cGxvYWQtZGlhbG9nX19oZWFkZXItYnV0dG9uXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYWRmLXVwbG9hZC1kaWFsb2dfX3RvZ2dsZS1taW5pbWl6ZSdcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoaXNEaWFsb2dNaW5pbWl6ZWQgP1xuICAgICAgICAgICAgICAgICdBREZfRklMRV9VUExPQUQuQVJJQS1MQUJFTC5ESUFMT0dfTUFYSU1JWkUnOlxuICAgICAgICAgICAgICAgICdBREZfRklMRV9VUExPQUQuQVJJQS1MQUJFTC5ESUFMT0dfTUlOSU1JWkUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNDb25maXJtYXRpb25cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCIhaXNEaWFsb2dNaW5pbWl6ZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU1pbmltaXplZCgpXCI+XG4gICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi11cGxvYWQtZGlhbG9nX19oZWFkZXItYnV0dG9uLWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAge3sgaXNEaWFsb2dNaW5pbWl6ZWQgPyAna2V5Ym9hcmRfYXJyb3dfdXAnIDogJ2tleWJvYXJkX2Fycm93X2Rvd24nIH19XG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJhZGYtdXBsb2FkLWRpYWxvZ19fdGl0bGVcIlxuICAgICAgICAgICAgKm5nSWY9XCIhdXBsb2FkTGlzdC5pc1VwbG9hZENhbmNlbGxlZCgpXCI+XG4gICAgICAgICAgICB7eyAnRklMRV9VUExPQUQuTUVTU0FHRVMuVVBMT0FEX1BST0dSRVNTJ1xuICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZDogdG90YWxDb21wbGV0ZWQsXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsOiBmaWxlc1VwbG9hZGluZ0xpc3QubGVuZ3RoXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz1cImFkZi11cGxvYWQtZGlhbG9nX190aXRsZVwiXG4gICAgICAgICAgICAqbmdJZj1cInVwbG9hZExpc3QuaXNVcGxvYWRDYW5jZWxsZWQoKVwiPlxuICAgICAgICAgICAge3sgJ0ZJTEVfVVBMT0FELk1FU1NBR0VTLlVQTE9BRF9DQU5DRUxFRCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvaGVhZGVyPlxuXG4gICAgPHNlY3Rpb24gY2xhc3M9XCJhZGYtdXBsb2FkLWRpYWxvZ19faW5mb1wiXG4gICAgICAgICpuZ0lmPVwidG90YWxFcnJvcnNcIj5cbiAgICAgICAge3tcbiAgICAgICAgICAgICh0b3RhbEVycm9ycyA+IDFcbiAgICAgICAgICAgICAgICAgPyAnRklMRV9VUExPQUQuTUVTU0FHRVMuVVBMT0FEX0VSUk9SUydcbiAgICAgICAgICAgICAgICAgOiAnRklMRV9VUExPQUQuTUVTU0FHRVMuVVBMT0FEX0VSUk9SJylcbiAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGU6IHsgdG90YWw6IHRvdGFsRXJyb3JzIH1cbiAgICAgICAgfX1cbiAgICA8L3NlY3Rpb24+XG5cbiAgICA8c2VjdGlvbiBjbGFzcz1cImFkZi11cGxvYWQtZGlhbG9nX19jb250ZW50XCJcbiAgICAgICAgW2NsYXNzLmFkZi11cGxvYWQtZGlhbG9nLS1wYWRkaW5nXT1cImlzQ29uZmlybWF0aW9uXCI+XG4gICAgICAgIDxhZGYtZmlsZS11cGxvYWRpbmctbGlzdFxuICAgICAgICAgICAgY2xhc3M9XCJhZGYtZmlsZS11cGxvYWRpbmctbGlzdFwiXG4gICAgICAgICAgICBbY2xhc3MuYWRmLXVwbG9hZC1kaWFsb2ctLWhpZGVdPVwiaXNDb25maXJtYXRpb25cIlxuICAgICAgICAgICAgI3VwbG9hZExpc3RcbiAgICAgICAgICAgIFtmaWxlc109XCJmaWxlc1VwbG9hZGluZ0xpc3RcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWZpbGU9XCIkaW1wbGljaXRcIj5cbiAgICAgICAgICAgICAgICAgICAgIDxhZGYtZmlsZS11cGxvYWRpbmctbGlzdC1yb3dcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmaWxlXT1cImZpbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNhbmNlbCk9XCJ1cGxvYWRMaXN0LmNhbmNlbEZpbGUoZmlsZSlcIiAvPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvYWRmLWZpbGUtdXBsb2FkaW5nLWxpc3Q+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgYXJpYS1saXZlPVwicG9saXRlXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWxsZWRieT1cImNvbmZpcm1hdGlvblRpdGxlXCJcbiAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJjb25maXJtYXRpb25EZXNjcmlwdGlvblwiXG4gICAgICAgICAgICBjbGFzcz1cImFkZi11cGxvYWQtZGlhbG9nX19jb25maXJtYXRpb25cIlxuICAgICAgICAgICAgW2NsYXNzLmFkZi11cGxvYWQtZGlhbG9nLS1oaWRlXT1cIiFpc0NvbmZpcm1hdGlvblwiPlxuICAgICAgICAgICAgICAgIDxwIHJvbGU9XCJoZWFkaW5nXCIgYXJpYS1sZXZlbD1cIjJcIiBpZD1cImNvbmZpcm1hdGlvblRpdGxlXCIgY2xhc3M9XCJhZGYtdXBsb2FkLWRpYWxvZ19fY29uZmlybWF0aW9uLS10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyAnQURGX0ZJTEVfVVBMT0FELkNPTkZJUk1BVElPTi5NRVNTQUdFLlRJVExFJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICA8cCBpZD1cImNvbmZpcm1hdGlvbkRlc2NyaXB0aW9uXCIgY2xhc3M9XCJhZGYtdXBsb2FkLWRpYWxvZ19fY29uZmlybWF0aW9uLS10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdBREZfRklMRV9VUExPQUQuQ09ORklSTUFUSU9OLk1FU1NBR0UuVEVYVCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvc2VjdGlvbj5cblxuICAgIDxmb290ZXIgY2xhc3M9XCJhZGYtdXBsb2FkLWRpYWxvZ19fYWN0aW9uc1wiICpuZ0lmPVwiIWlzQ29uZmlybWF0aW9uXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGlkPVwiYWRmLXVwbG9hZC1kaWFsb2ctY2FuY2VsLWFsbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidBREZfRklMRV9VUExPQUQuQVJJQS1MQUJFTC5TVE9QX0FMTCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiY2FuU2hvd0NhbmNlbEFsbCgpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVDb25maXJtYXRpb24oKVwiXG4gICAgICAgID57eyAnQURGX0ZJTEVfVVBMT0FELkJVVFRPTi5TVE9QX0FMTCcgfCB0cmFuc2xhdGUgfX08L2J1dHRvbj5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBpZD1cImFkZi11cGxvYWQtZGlhbG9nLWNsb3NlXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0FERl9GSUxFX1VQTE9BRC5BUklBLUxBQkVMLkRJQUxPR19DTE9TRScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgKm5nSWY9XCJjYW5DbG9zZURpYWxvZygpXCJcbiAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2xvc2UoKVwiXG4gICAgICAgID57eyAnQURGX0ZJTEVfVVBMT0FELkJVVFRPTi5DTE9TRScgfCB0cmFuc2xhdGUgfX08L2J1dHRvbj5cbiAgICA8L2Zvb3Rlcj5cblxuICAgIDxmb290ZXIgY2xhc3M9XCJhZGYtdXBsb2FkLWRpYWxvZ19fYWN0aW9uc1wiXG4gICAgICAgICAgICAqbmdJZj1cImlzQ29uZmlybWF0aW9uXCIgY2RrVHJhcEZvY3VzIGNka1RyYXBGb2N1c0F1dG9DYXB0dXJlPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBpZD1cImFkZi11cGxvYWQtZGlhbG9nLWNhbmNlbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidBREZfRklMRV9VUExPQUQuQVJJQS1MQUJFTC5DT05GSVJNQVRJT04uQ0FOQ0VMJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsQWxsVXBsb2FkcygpXCJcbiAgICAgICAgPnt7ICdBREZfRklMRV9VUExPQUQuQ09ORklSTUFUSU9OLkJVVFRPTi5DQU5DRUwnIHwgdHJhbnNsYXRlIH19PC9idXR0b24+XG5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgaWQ9XCJhZGYtdXBsb2FkLWRpYWxvZy1jb25maXJtXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0FERl9GSUxFX1VQTE9BRC5BUklBLUxBQkVMLkNPTkZJUk1BVElPTi5DT05USU5VRScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVDb25maXJtYXRpb24oKVwiXG4gICAgICAgID57eyAnQURGX0ZJTEVfVVBMT0FELkNPTkZJUk1BVElPTi5CVVRUT04uQ09OVElOVUUnIHwgdHJhbnNsYXRlIH19PC9idXR0b24+XG4gICAgPC9mb290ZXI+XG48L2Rpdj5cbiJdfQ==