UNPKG

ngx-extended-pdf-viewer

Version:

Embedding PDF files in your Angular application. Highly configurable viewer including the toolbar, sidebar, and all the features you're used to.

63 lines 16 kB
import { Component, Input, effect } from '@angular/core'; import { PositioningService } from '../../dynamic-css/positioning.service'; import { AnnotationEditorType } from '../../options/editor-annotations'; import * as i0 from "@angular/core"; import * as i1 from "../../pdf-notification-service"; import * as i2 from "../../focus-management.service"; import * as i3 from "../pdf-shy-button/pdf-shy-button.component"; import * as i4 from "../../responsive-visibility"; export class PdfCommentEditorComponent { cdr; focusManagement; show = true; isSelected = false; PDFViewerApplication; constructor(notificationService, cdr, focusManagement) { this.cdr = cdr; this.focusManagement = focusManagement; effect(() => { this.PDFViewerApplication = notificationService.onPDFJSInitSignal(); if (this.PDFViewerApplication) { this.onPdfJsInit(); } }); } onPdfJsInit() { this.PDFViewerApplication?.eventBus.on('annotationeditormodechanged', ({ mode }) => { setTimeout(() => { const wasSelected = this.isSelected; this.isSelected = mode === AnnotationEditorType.POPUP; // Focus management if (!wasSelected && this.isSelected) { // Dialog just opened this.focusManagement.moveFocusToDialog('editorCommentParamsToolbar', 'Comment editor toolbar opened', 'editorCommentButton'); } else if (wasSelected && !this.isSelected) { // Dialog just closed this.focusManagement.returnFocusToPrevious('Comment editor toolbar closed'); } this.cdr.detectChanges(); }); }); } onClick(event) { const currentMode = this.PDFViewerApplication?.pdfViewer.annotationEditorMode; this.PDFViewerApplication?.eventBus.dispatch('switchannotationeditormode', { source: this, mode: currentMode === AnnotationEditorType.POPUP ? AnnotationEditorType.NONE : AnnotationEditorType.POPUP, isFromKeyboard: event.detail === 0, }); // Position the comment sidebar const positioningService = new PositioningService(); positioningService.positionPopupBelowItsButton('editorCommentButton', 'editorCommentParamsToolbar'); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PdfCommentEditorComponent, deps: [{ token: i1.PDFNotificationService }, { token: i0.ChangeDetectorRef }, { token: i2.FocusManagementService }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: PdfCommentEditorComponent, selector: "pdf-comment-editor", inputs: { show: "show" }, ngImport: i0, template: "<pdf-shy-button\n title=\"Comment\"\n primaryToolbarId=\"editorCommentButton\"\n [cssClass]=\"show | responsiveCSSClass : 'hiddenTinyView'\"\n l10nId=\"pdfjs-editor-comment-button\"\n l10nLabel=\"pdfjs-editor-comment-button-label\"\n role=\"radio\"\n ariaHasPopup=\"true\"\n ariaControls=\"editorCommentParamsToolbar\"\n [order]=\"3900\"\n [action]=\"onClick\"\n [toggled]=\"isSelected\"\n [closeOnClick]=\"false\"\n image=\"<svg aria-hidden='true' focusable='false' width='20px' height='20px' viewBox='0 0 24 24'> <path fill='currentColor' d='M9,22A1,1 0 0,1 8,21V18H4A2,2 0 0,1 2,16V4C2,2.89 2.9,2 4,2H20A2,2 0 0,1 22,4V16A2,2 0 0,1 20,18H13.9L10.2,21.71C10,21.9 9.75,22 9.5,22V22H9M10,16V19.08L13.08,16H20V4H4V16H10Z' /> </svg>\"\n>\n</pdf-shy-button>", styles: ["#editorCommentButton:before{mask-image:var(--toolbarButton-editorComment-icon);transform:scaleX(var(--dir-factor))}#editorCommentsSidebar{--comment-sidebar-bg: light-dark(#fff, #23222b);--comment-sidebar-border: light-dark( rgb(21 20 26 / .1), rgb(251 251 254 / .1) );--comment-sidebar-text: light-dark(#15141a, #fbfbfe);--comment-sidebar-header-bg: light-dark(#f0f0f4, #2b2a33);--comment-button-hover-bg: light-dark(#e0e0e6, #52525e);background-color:var(--comment-sidebar-bg);border:1px solid var(--comment-sidebar-border);color:var(--comment-sidebar-text)}#editorCommentsSidebarHeader{background-color:var(--comment-sidebar-header-bg);padding:12px 16px;border-bottom:1px solid var(--comment-sidebar-border);display:flex;justify-content:space-between;align-items:center}#editorCommentsSidebarTitle{font-weight:600;font-size:13px}#editorCommentsSidebarCount{font-weight:400;margin-left:4px;color:var(--comment-sidebar-text);opacity:.7}#editorCommentsSidebarCloseButton{background:none;border:none;padding:4px 8px;border-radius:4px;cursor:pointer;color:var(--comment-sidebar-text);font-size:12px}#editorCommentsSidebarCloseButton:hover{background-color:var(--comment-button-hover-bg)}#editorCommentsSidebarList{list-style:none;margin:0;padding:0;max-height:400px;overflow-y:auto}.commentCount{display:flex;align-items:center}@media screen and (forced-colors: active){#editorCommentsSidebar{--comment-sidebar-bg: Canvas;--comment-sidebar-border: CanvasText;--comment-sidebar-text: CanvasText;--comment-sidebar-header-bg: Canvas;--comment-button-hover-bg: Highlight}}\n"], dependencies: [{ kind: "component", type: i3.PdfShyButtonComponent, selector: "pdf-shy-button", inputs: ["primaryToolbarId", "secondaryMenuId", "cssClass", "eventBusName", "l10nId", "l10nLabel", "title", "toggled", "disabled", "order", "action", "closeOnClick", "onlySecondaryMenu", "ariaHasPopup", "ariaControls", "role", "image"] }, { kind: "pipe", type: i4.ResponsiveCSSClassPipe, name: "responsiveCSSClass" }] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PdfCommentEditorComponent, decorators: [{ type: Component, args: [{ selector: 'pdf-comment-editor', template: "<pdf-shy-button\n title=\"Comment\"\n primaryToolbarId=\"editorCommentButton\"\n [cssClass]=\"show | responsiveCSSClass : 'hiddenTinyView'\"\n l10nId=\"pdfjs-editor-comment-button\"\n l10nLabel=\"pdfjs-editor-comment-button-label\"\n role=\"radio\"\n ariaHasPopup=\"true\"\n ariaControls=\"editorCommentParamsToolbar\"\n [order]=\"3900\"\n [action]=\"onClick\"\n [toggled]=\"isSelected\"\n [closeOnClick]=\"false\"\n image=\"<svg aria-hidden='true' focusable='false' width='20px' height='20px' viewBox='0 0 24 24'> <path fill='currentColor' d='M9,22A1,1 0 0,1 8,21V18H4A2,2 0 0,1 2,16V4C2,2.89 2.9,2 4,2H20A2,2 0 0,1 22,4V16A2,2 0 0,1 20,18H13.9L10.2,21.71C10,21.9 9.75,22 9.5,22V22H9M10,16V19.08L13.08,16H20V4H4V16H10Z' /> </svg>\"\n>\n</pdf-shy-button>", styles: ["#editorCommentButton:before{mask-image:var(--toolbarButton-editorComment-icon);transform:scaleX(var(--dir-factor))}#editorCommentsSidebar{--comment-sidebar-bg: light-dark(#fff, #23222b);--comment-sidebar-border: light-dark( rgb(21 20 26 / .1), rgb(251 251 254 / .1) );--comment-sidebar-text: light-dark(#15141a, #fbfbfe);--comment-sidebar-header-bg: light-dark(#f0f0f4, #2b2a33);--comment-button-hover-bg: light-dark(#e0e0e6, #52525e);background-color:var(--comment-sidebar-bg);border:1px solid var(--comment-sidebar-border);color:var(--comment-sidebar-text)}#editorCommentsSidebarHeader{background-color:var(--comment-sidebar-header-bg);padding:12px 16px;border-bottom:1px solid var(--comment-sidebar-border);display:flex;justify-content:space-between;align-items:center}#editorCommentsSidebarTitle{font-weight:600;font-size:13px}#editorCommentsSidebarCount{font-weight:400;margin-left:4px;color:var(--comment-sidebar-text);opacity:.7}#editorCommentsSidebarCloseButton{background:none;border:none;padding:4px 8px;border-radius:4px;cursor:pointer;color:var(--comment-sidebar-text);font-size:12px}#editorCommentsSidebarCloseButton:hover{background-color:var(--comment-button-hover-bg)}#editorCommentsSidebarList{list-style:none;margin:0;padding:0;max-height:400px;overflow-y:auto}.commentCount{display:flex;align-items:center}@media screen and (forced-colors: active){#editorCommentsSidebar{--comment-sidebar-bg: Canvas;--comment-sidebar-border: CanvasText;--comment-sidebar-text: CanvasText;--comment-sidebar-header-bg: Canvas;--comment-button-hover-bg: Highlight}}\n"] }] }], ctorParameters: () => [{ type: i1.PDFNotificationService }, { type: i0.ChangeDetectorRef }, { type: i2.FocusManagementService }], propDecorators: { show: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmLWNvbW1lbnQtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1leHRlbmRlZC1wZGYtdmlld2VyL3NyYy9saWIvdG9vbGJhci9wZGYtY29tbWVudC1lZGl0b3IvcGRmLWNvbW1lbnQtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1leHRlbmRlZC1wZGYtdmlld2VyL3NyYy9saWIvdG9vbGJhci9wZGYtY29tbWVudC1lZGl0b3IvcGRmLWNvbW1lbnQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFHM0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7OztBQVV4RSxNQUFNLE9BQU8seUJBQXlCO0lBUzFCO0lBQ0E7SUFSSCxJQUFJLEdBQXlCLElBQUksQ0FBQztJQUVsQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ2xCLG9CQUFvQixDQUFvQztJQUVoRSxZQUNFLG1CQUEyQyxFQUNuQyxHQUFzQixFQUN0QixlQUF1QztRQUR2QyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixvQkFBZSxHQUFmLGVBQWUsQ0FBd0I7UUFFL0MsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxtQkFBbUIsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3BFLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFO2dCQUM3QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDcEI7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxXQUFXO1FBQ2pCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLDZCQUE2QixFQUFFLENBQUMsRUFBRSxJQUFJLEVBQTBDLEVBQUUsRUFBRTtZQUN6SCxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxLQUFLLG9CQUFvQixDQUFDLEtBQUssQ0FBQztnQkFFdEQsbUJBQW1CO2dCQUNuQixJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7b0JBQ25DLHFCQUFxQjtvQkFDckIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyw0QkFBNEIsRUFBRSwrQkFBK0IsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO2lCQUM5SDtxQkFBTSxJQUFJLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7b0JBQzFDLHFCQUFxQjtvQkFDckIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO2lCQUM3RTtnQkFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzNCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sT0FBTyxDQUFDLEtBQW1CO1FBQ2hDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxTQUFTLENBQUMsb0JBQW9CLENBQUM7UUFDOUUsSUFBSSxDQUFDLG9CQUFvQixFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsNEJBQTRCLEVBQUU7WUFDekUsTUFBTSxFQUFFLElBQUk7WUFDWixJQUFJLEVBQUUsV0FBVyxLQUFLLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLO1lBQ3pHLGNBQWMsRUFBRSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7U0FDbkMsQ0FBQyxDQUFDO1FBRUgsK0JBQStCO1FBQy9CLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQ3BELGtCQUFrQixDQUFDLDJCQUEyQixDQUFDLHFCQUFxQixFQUFFLDRCQUE0QixDQUFDLENBQUM7SUFDdEcsQ0FBQzt3R0FuRFUseUJBQXlCOzRGQUF6Qix5QkFBeUIsb0ZDZHRDLGl3QkFlaUI7OzRGRERKLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDRSxvQkFBb0I7Z0tBTXZCLElBQUk7c0JBRFYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIElucHV0LCBlZmZlY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBvc2l0aW9uaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL2R5bmFtaWMtY3NzL3Bvc2l0aW9uaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgQW5ub3RhdGlvbkVkaXRvckVkaXRvck1vZGVDaGFuZ2VkRXZlbnQgfSBmcm9tICcuLi8uLi9ldmVudHMvYW5ub3RhdGlvbi1lZGl0b3ItbW9kZS1jaGFuZ2VkLWV2ZW50JztcbmltcG9ydCB7IEZvY3VzTWFuYWdlbWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9mb2N1cy1tYW5hZ2VtZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQW5ub3RhdGlvbkVkaXRvclR5cGUgfSBmcm9tICcuLi8uLi9vcHRpb25zL2VkaXRvci1hbm5vdGF0aW9ucyc7XG5pbXBvcnQgeyBJUERGVmlld2VyQXBwbGljYXRpb24gfSBmcm9tICcuLi8uLi9vcHRpb25zL3BkZi12aWV3ZXItYXBwbGljYXRpb24nO1xuaW1wb3J0IHsgUERGTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3BkZi1ub3RpZmljYXRpb24tc2VydmljZSc7XG5pbXBvcnQgeyBSZXNwb25zaXZlVmlzaWJpbGl0eSB9IGZyb20gJy4uLy4uL3Jlc3BvbnNpdmUtdmlzaWJpbGl0eSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BkZi1jb21tZW50LWVkaXRvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9wZGYtY29tbWVudC1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wZGYtY29tbWVudC1lZGl0b3IuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBQZGZDb21tZW50RWRpdG9yQ29tcG9uZW50IHtcbiAgQElucHV0KClcbiAgcHVibGljIHNob3c6IFJlc3BvbnNpdmVWaXNpYmlsaXR5ID0gdHJ1ZTtcblxuICBwdWJsaWMgaXNTZWxlY3RlZCA9IGZhbHNlO1xuICBwcml2YXRlIFBERlZpZXdlckFwcGxpY2F0aW9uOiBJUERGVmlld2VyQXBwbGljYXRpb24gfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbm90aWZpY2F0aW9uU2VydmljZTogUERGTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBmb2N1c01hbmFnZW1lbnQ6IEZvY3VzTWFuYWdlbWVudFNlcnZpY2UsXG4gICkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICB0aGlzLlBERlZpZXdlckFwcGxpY2F0aW9uID0gbm90aWZpY2F0aW9uU2VydmljZS5vblBERkpTSW5pdFNpZ25hbCgpO1xuICAgICAgaWYgKHRoaXMuUERGVmlld2VyQXBwbGljYXRpb24pIHtcbiAgICAgICAgdGhpcy5vblBkZkpzSW5pdCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvblBkZkpzSW5pdCgpIHtcbiAgICB0aGlzLlBERlZpZXdlckFwcGxpY2F0aW9uPy5ldmVudEJ1cy5vbignYW5ub3RhdGlvbmVkaXRvcm1vZGVjaGFuZ2VkJywgKHsgbW9kZSB9OiBBbm5vdGF0aW9uRWRpdG9yRWRpdG9yTW9kZUNoYW5nZWRFdmVudCkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHdhc1NlbGVjdGVkID0gdGhpcy5pc1NlbGVjdGVkO1xuICAgICAgICB0aGlzLmlzU2VsZWN0ZWQgPSBtb2RlID09PSBBbm5vdGF0aW9uRWRpdG9yVHlwZS5QT1BVUDtcblxuICAgICAgICAvLyBGb2N1cyBtYW5hZ2VtZW50XG4gICAgICAgIGlmICghd2FzU2VsZWN0ZWQgJiYgdGhpcy5pc1NlbGVjdGVkKSB7XG4gICAgICAgICAgLy8gRGlhbG9nIGp1c3Qgb3BlbmVkXG4gICAgICAgICAgdGhpcy5mb2N1c01hbmFnZW1lbnQubW92ZUZvY3VzVG9EaWFsb2coJ2VkaXRvckNvbW1lbnRQYXJhbXNUb29sYmFyJywgJ0NvbW1lbnQgZWRpdG9yIHRvb2xiYXIgb3BlbmVkJywgJ2VkaXRvckNvbW1lbnRCdXR0b24nKTtcbiAgICAgICAgfSBlbHNlIGlmICh3YXNTZWxlY3RlZCAmJiAhdGhpcy5pc1NlbGVjdGVkKSB7XG4gICAgICAgICAgLy8gRGlhbG9nIGp1c3QgY2xvc2VkXG4gICAgICAgICAgdGhpcy5mb2N1c01hbmFnZW1lbnQucmV0dXJuRm9jdXNUb1ByZXZpb3VzKCdDb21tZW50IGVkaXRvciB0b29sYmFyIGNsb3NlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25DbGljayhldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudE1vZGUgPSB0aGlzLlBERlZpZXdlckFwcGxpY2F0aW9uPy5wZGZWaWV3ZXIuYW5ub3RhdGlvbkVkaXRvck1vZGU7XG4gICAgdGhpcy5QREZWaWV3ZXJBcHBsaWNhdGlvbj8uZXZlbnRCdXMuZGlzcGF0Y2goJ3N3aXRjaGFubm90YXRpb25lZGl0b3Jtb2RlJywge1xuICAgICAgc291cmNlOiB0aGlzLFxuICAgICAgbW9kZTogY3VycmVudE1vZGUgPT09IEFubm90YXRpb25FZGl0b3JUeXBlLlBPUFVQID8gQW5ub3RhdGlvbkVkaXRvclR5cGUuTk9ORSA6IEFubm90YXRpb25FZGl0b3JUeXBlLlBPUFVQLFxuICAgICAgaXNGcm9tS2V5Ym9hcmQ6IGV2ZW50LmRldGFpbCA9PT0gMCxcbiAgICB9KTtcblxuICAgIC8vIFBvc2l0aW9uIHRoZSBjb21tZW50IHNpZGViYXJcbiAgICBjb25zdCBwb3NpdGlvbmluZ1NlcnZpY2UgPSBuZXcgUG9zaXRpb25pbmdTZXJ2aWNlKCk7XG4gICAgcG9zaXRpb25pbmdTZXJ2aWNlLnBvc2l0aW9uUG9wdXBCZWxvd0l0c0J1dHRvbignZWRpdG9yQ29tbWVudEJ1dHRvbicsICdlZGl0b3JDb21tZW50UGFyYW1zVG9vbGJhcicpO1xuICB9XG59XG4iLCI8cGRmLXNoeS1idXR0b25cbiAgdGl0bGU9XCJDb21tZW50XCJcbiAgcHJpbWFyeVRvb2xiYXJJZD1cImVkaXRvckNvbW1lbnRCdXR0b25cIlxuICBbY3NzQ2xhc3NdPVwic2hvdyB8IHJlc3BvbnNpdmVDU1NDbGFzcyA6ICdoaWRkZW5UaW55VmlldydcIlxuICBsMTBuSWQ9XCJwZGZqcy1lZGl0b3ItY29tbWVudC1idXR0b25cIlxuICBsMTBuTGFiZWw9XCJwZGZqcy1lZGl0b3ItY29tbWVudC1idXR0b24tbGFiZWxcIlxuICByb2xlPVwicmFkaW9cIlxuICBhcmlhSGFzUG9wdXA9XCJ0cnVlXCJcbiAgYXJpYUNvbnRyb2xzPVwiZWRpdG9yQ29tbWVudFBhcmFtc1Rvb2xiYXJcIlxuICBbb3JkZXJdPVwiMzkwMFwiXG4gIFthY3Rpb25dPVwib25DbGlja1wiXG4gIFt0b2dnbGVkXT1cImlzU2VsZWN0ZWRcIlxuICBbY2xvc2VPbkNsaWNrXT1cImZhbHNlXCJcbiAgaW1hZ2U9XCI8c3ZnIGFyaWEtaGlkZGVuPSd0cnVlJyBmb2N1c2FibGU9J2ZhbHNlJyB3aWR0aD0nMjBweCcgaGVpZ2h0PScyMHB4JyB2aWV3Qm94PScwIDAgMjQgMjQnPiA8cGF0aCBmaWxsPSdjdXJyZW50Q29sb3InIGQ9J005LDIyQTEsMSAwIDAsMSA4LDIxVjE4SDRBMiwyIDAgMCwxIDIsMTZWNEMyLDIuODkgMi45LDIgNCwySDIwQTIsMiAwIDAsMSAyMiw0VjE2QTIsMiAwIDAsMSAyMCwxOEgxMy45TDEwLjIsMjEuNzFDMTAsMjEuOSA5Ljc1LDIyIDkuNSwyMlYyMkg5TTEwLDE2VjE5LjA4TDEzLjA4LDE2SDIwVjRINFYxNkgxMFonIC8+IDwvc3ZnPlwiXG4+XG48L3BkZi1zaHktYnV0dG9uPiJdfQ==